@hoilab/ada-cli 0.85.0 → 0.85.3

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 (1682) hide show
  1. package/dist/ada-publico.d.ts.map +1 -1
  2. package/dist/ada-publico.js.map +1 -1
  3. package/dist/bun/cli.d.ts.map +1 -1
  4. package/dist/bun/cli.js.map +1 -1
  5. package/dist/bun/register-bedrock.d.ts.map +1 -1
  6. package/dist/bun/register-bedrock.js.map +1 -1
  7. package/dist/bun/restore-sandbox-env.d.ts.map +1 -1
  8. package/dist/bun/restore-sandbox-env.js.map +1 -1
  9. package/dist/cli/args.d.ts.map +1 -1
  10. package/dist/cli/args.js.map +1 -1
  11. package/dist/cli/audit-command.d.ts.map +1 -1
  12. package/dist/cli/audit-command.js.map +1 -1
  13. package/dist/cli/auth-check.d.ts.map +1 -1
  14. package/dist/cli/auth-check.js.map +1 -1
  15. package/dist/cli/auth-command.d.ts.map +1 -1
  16. package/dist/cli/auth-command.js.map +1 -1
  17. package/dist/cli/banco-command.d.ts.map +1 -1
  18. package/dist/cli/banco-command.js.map +1 -1
  19. package/dist/cli/cleanse-command.d.ts.map +1 -1
  20. package/dist/cli/cleanse-command.js +5 -2
  21. package/dist/cli/cleanse-command.js.map +1 -1
  22. package/dist/cli/commit-command.d.ts +8 -6
  23. package/dist/cli/commit-command.d.ts.map +1 -1
  24. package/dist/cli/commit-command.js +124 -92
  25. package/dist/cli/commit-command.js.map +1 -1
  26. package/dist/cli/completion.d.ts +20 -0
  27. package/dist/cli/completion.d.ts.map +1 -0
  28. package/dist/cli/completion.js +75 -0
  29. package/dist/cli/completion.js.map +1 -0
  30. package/dist/cli/computer-command.d.ts.map +1 -1
  31. package/dist/cli/computer-command.js.map +1 -1
  32. package/dist/cli/config-selector.d.ts.map +1 -1
  33. package/dist/cli/config-selector.js.map +1 -1
  34. package/dist/cli/credential-print.d.ts.map +1 -1
  35. package/dist/cli/credential-print.js.map +1 -1
  36. package/dist/cli/discover-command.d.ts.map +1 -1
  37. package/dist/cli/discover-command.js +5 -1
  38. package/dist/cli/discover-command.js.map +1 -1
  39. package/dist/cli/experimental/auth.d.ts.map +1 -1
  40. package/dist/cli/experimental/auth.js.map +1 -1
  41. package/dist/cli/experimental/cli.d.ts +1 -1
  42. package/dist/cli/experimental/cli.d.ts.map +1 -1
  43. package/dist/cli/experimental/cli.js.map +1 -1
  44. package/dist/cli/experimental/command-options.d.ts.map +1 -1
  45. package/dist/cli/experimental/command-options.js.map +1 -1
  46. package/dist/cli/experimental/command.d.ts.map +1 -1
  47. package/dist/cli/experimental/command.js.map +1 -1
  48. package/dist/cli/experimental/commands/client.d.ts.map +1 -1
  49. package/dist/cli/experimental/commands/client.js.map +1 -1
  50. package/dist/cli/experimental/commands/pi.d.ts.map +1 -1
  51. package/dist/cli/experimental/commands/pi.js.map +1 -1
  52. package/dist/cli/experimental/commands/server.d.ts.map +1 -1
  53. package/dist/cli/experimental/commands/server.js.map +1 -1
  54. package/dist/cli/experimental/transport-address.d.ts.map +1 -1
  55. package/dist/cli/experimental/transport-address.js.map +1 -1
  56. package/dist/cli/file-processor.d.ts.map +1 -1
  57. package/dist/cli/file-processor.js.map +1 -1
  58. package/dist/cli/guardrails.d.ts +14 -0
  59. package/dist/cli/guardrails.d.ts.map +1 -0
  60. package/dist/cli/guardrails.js +47 -0
  61. package/dist/cli/guardrails.js.map +1 -0
  62. package/dist/cli/hashline-command.d.ts.map +1 -1
  63. package/dist/cli/hashline-command.js.map +1 -1
  64. package/dist/cli/home-screen.d.ts.map +1 -1
  65. package/dist/cli/home-screen.js +1 -0
  66. package/dist/cli/home-screen.js.map +1 -1
  67. package/dist/cli/import-command.d.ts.map +1 -1
  68. package/dist/cli/import-command.js.map +1 -1
  69. package/dist/cli/initial-message.d.ts +1 -1
  70. package/dist/cli/initial-message.d.ts.map +1 -1
  71. package/dist/cli/initial-message.js.map +1 -1
  72. package/dist/cli/list-models.d.ts.map +1 -1
  73. package/dist/cli/list-models.js.map +1 -1
  74. package/dist/cli/politica-command.d.ts.map +1 -1
  75. package/dist/cli/politica-command.js.map +1 -1
  76. package/dist/cli/project-trust.d.ts.map +1 -1
  77. package/dist/cli/project-trust.js.map +1 -1
  78. package/dist/cli/refine-command.d.ts.map +1 -1
  79. package/dist/cli/refine-command.js.map +1 -1
  80. package/dist/cli/review-command.d.ts.map +1 -1
  81. package/dist/cli/review-command.js +77 -13
  82. package/dist/cli/review-command.js.map +1 -1
  83. package/dist/cli/schedule-command.d.ts.map +1 -1
  84. package/dist/cli/schedule-command.js.map +1 -1
  85. package/dist/cli/serve-command.d.ts +0 -1
  86. package/dist/cli/serve-command.d.ts.map +1 -1
  87. package/dist/cli/serve-command.js +12 -6
  88. package/dist/cli/serve-command.js.map +1 -1
  89. package/dist/cli/session-picker.d.ts.map +1 -1
  90. package/dist/cli/session-picker.js.map +1 -1
  91. package/dist/cli/startup-ui.d.ts.map +1 -1
  92. package/dist/cli/startup-ui.js.map +1 -1
  93. package/dist/cli/telegram-command.d.ts.map +1 -1
  94. package/dist/cli/telegram-command.js.map +1 -1
  95. package/dist/cli/telemetria-command.d.ts.map +1 -1
  96. package/dist/cli/telemetria-command.js.map +1 -1
  97. package/dist/cli/undo-command.d.ts.map +1 -1
  98. package/dist/cli/undo-command.js.map +1 -1
  99. package/dist/cli/update-cli.d.ts +82 -0
  100. package/dist/cli/update-cli.d.ts.map +1 -0
  101. package/dist/cli/update-cli.js +372 -0
  102. package/dist/cli/update-cli.js.map +1 -0
  103. package/dist/cli/usage-command.d.ts.map +1 -1
  104. package/dist/cli/usage-command.js +75 -6
  105. package/dist/cli/usage-command.js.map +1 -1
  106. package/dist/cli/wiki-command.d.ts.map +1 -1
  107. package/dist/cli/wiki-command.js.map +1 -1
  108. package/dist/cli.d.ts +0 -6
  109. package/dist/cli.d.ts.map +1 -1
  110. package/dist/cli.js +0 -0
  111. package/dist/cli.js.map +1 -1
  112. package/dist/client/index.d.ts.map +1 -1
  113. package/dist/client/index.js.map +1 -1
  114. package/dist/client/remote-session.d.ts.map +1 -1
  115. package/dist/client/remote-session.js.map +1 -1
  116. package/dist/client/transcript.d.ts.map +1 -1
  117. package/dist/client/transcript.js.map +1 -1
  118. package/dist/config.d.ts.map +1 -1
  119. package/dist/config.js.map +1 -1
  120. package/dist/core/ada.d.ts +5 -0
  121. package/dist/core/ada.d.ts.map +1 -1
  122. package/dist/core/ada.js +5 -0
  123. package/dist/core/ada.js.map +1 -1
  124. package/dist/core/advisor/guarda.d.ts.map +1 -1
  125. package/dist/core/advisor/guarda.js.map +1 -1
  126. package/dist/core/advisor/runtime.d.ts.map +1 -1
  127. package/dist/core/advisor/runtime.js.map +1 -1
  128. package/dist/core/advisor/sesion.d.ts.map +1 -1
  129. package/dist/core/advisor/sesion.js.map +1 -1
  130. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  131. package/dist/core/agent-session-runtime.js.map +1 -1
  132. package/dist/core/agent-session-services.d.ts.map +1 -1
  133. package/dist/core/agent-session-services.js +33 -0
  134. package/dist/core/agent-session-services.js.map +1 -1
  135. package/dist/core/agent-session.d.ts +67 -0
  136. package/dist/core/agent-session.d.ts.map +1 -1
  137. package/dist/core/agent-session.js +43 -2
  138. package/dist/core/agent-session.js.map +1 -1
  139. package/dist/core/agents/loader.d.ts.map +1 -1
  140. package/dist/core/agents/loader.js.map +1 -1
  141. package/dist/core/appendonly/append-only-context.d.ts +118 -0
  142. package/dist/core/appendonly/append-only-context.d.ts.map +1 -0
  143. package/dist/core/appendonly/append-only-context.js +256 -0
  144. package/dist/core/appendonly/append-only-context.js.map +1 -0
  145. package/dist/core/appendonly/auto.d.ts +30 -0
  146. package/dist/core/appendonly/auto.d.ts.map +1 -0
  147. package/dist/core/appendonly/auto.js +68 -0
  148. package/dist/core/appendonly/auto.js.map +1 -0
  149. package/dist/core/appendonly/extension.d.ts +29 -0
  150. package/dist/core/appendonly/extension.d.ts.map +1 -0
  151. package/dist/core/appendonly/extension.js +51 -0
  152. package/dist/core/appendonly/extension.js.map +1 -0
  153. package/dist/core/appendonly/index.d.ts +41 -0
  154. package/dist/core/appendonly/index.d.ts.map +1 -0
  155. package/dist/core/appendonly/index.js +42 -0
  156. package/dist/core/appendonly/index.js.map +1 -0
  157. package/dist/core/aprobacion/generados.d.ts.map +1 -1
  158. package/dist/core/aprobacion/generados.js.map +1 -1
  159. package/dist/core/aprobacion/politica-de-maquina.d.ts.map +1 -1
  160. package/dist/core/aprobacion/politica-de-maquina.js.map +1 -1
  161. package/dist/core/aprobacion/politica.d.ts +1 -1
  162. package/dist/core/aprobacion/politica.d.ts.map +1 -1
  163. package/dist/core/aprobacion/politica.js.map +1 -1
  164. package/dist/core/arranque/atajos.d.ts.map +1 -1
  165. package/dist/core/arranque/atajos.js +20 -0
  166. package/dist/core/arranque/atajos.js.map +1 -1
  167. package/dist/core/audit/exportacion.d.ts.map +1 -1
  168. package/dist/core/audit/exportacion.js +5 -3
  169. package/dist/core/audit/exportacion.js.map +1 -1
  170. package/dist/core/audit/libro.d.ts +7 -0
  171. package/dist/core/audit/libro.d.ts.map +1 -1
  172. package/dist/core/audit/libro.js.map +1 -1
  173. package/dist/core/audit/registro-sesion.d.ts.map +1 -1
  174. package/dist/core/audit/registro-sesion.js.map +1 -1
  175. package/dist/core/audit/retencion.d.ts.map +1 -1
  176. package/dist/core/audit/retencion.js.map +1 -1
  177. package/dist/core/audit/rutas.d.ts.map +1 -1
  178. package/dist/core/audit/rutas.js.map +1 -1
  179. package/dist/core/auth-guidance.d.ts.map +1 -1
  180. package/dist/core/auth-guidance.js.map +1 -1
  181. package/dist/core/auth-storage.d.ts.map +1 -1
  182. package/dist/core/auth-storage.js.map +1 -1
  183. package/dist/core/banco/almacenamiento.d.ts.map +1 -1
  184. package/dist/core/banco/almacenamiento.js.map +1 -1
  185. package/dist/core/banco/analisis.d.ts.map +1 -1
  186. package/dist/core/banco/analisis.js.map +1 -1
  187. package/dist/core/banco/asides.d.ts +64 -0
  188. package/dist/core/banco/asides.d.ts.map +1 -0
  189. package/dist/core/banco/asides.js +113 -0
  190. package/dist/core/banco/asides.js.map +1 -0
  191. package/dist/core/banco/bloques.d.ts.map +1 -1
  192. package/dist/core/banco/bloques.js.map +1 -1
  193. package/dist/core/banco/cargas.d.ts.map +1 -1
  194. package/dist/core/banco/cargas.js.map +1 -1
  195. package/dist/core/banco/comparar.d.ts.map +1 -1
  196. package/dist/core/banco/comparar.js.map +1 -1
  197. package/dist/core/banco/cow-isolation.d.ts +74 -0
  198. package/dist/core/banco/cow-isolation.d.ts.map +1 -0
  199. package/dist/core/banco/cow-isolation.js +259 -0
  200. package/dist/core/banco/cow-isolation.js.map +1 -0
  201. package/dist/core/banco/ejecutar.d.ts.map +1 -1
  202. package/dist/core/banco/ejecutar.js.map +1 -1
  203. package/dist/core/banco/generar.d.ts.map +1 -1
  204. package/dist/core/banco/generar.js.map +1 -1
  205. package/dist/core/banco/mutaciones.d.ts.map +1 -1
  206. package/dist/core/banco/mutaciones.js.map +1 -1
  207. package/dist/core/banco/park-revive.d.ts +67 -0
  208. package/dist/core/banco/park-revive.d.ts.map +1 -0
  209. package/dist/core/banco/park-revive.js +130 -0
  210. package/dist/core/banco/park-revive.js.map +1 -0
  211. package/dist/core/banco/pruning.d.ts +48 -0
  212. package/dist/core/banco/pruning.d.ts.map +1 -0
  213. package/dist/core/banco/pruning.js +146 -0
  214. package/dist/core/banco/pruning.js.map +1 -0
  215. package/dist/core/banco/steering.d.ts +81 -0
  216. package/dist/core/banco/steering.d.ts.map +1 -0
  217. package/dist/core/banco/steering.js +96 -0
  218. package/dist/core/banco/steering.js.map +1 -0
  219. package/dist/core/banco/tipos.d.ts.map +1 -1
  220. package/dist/core/banco/tipos.js.map +1 -1
  221. package/dist/core/bash-executor.d.ts.map +1 -1
  222. package/dist/core/bash-executor.js.map +1 -1
  223. package/dist/core/blobs/almacen.d.ts.map +1 -1
  224. package/dist/core/blobs/almacen.js.map +1 -1
  225. package/dist/core/blobs/broker.d.ts +1 -0
  226. package/dist/core/blobs/broker.d.ts.map +1 -1
  227. package/dist/core/blobs/broker.js +1 -1
  228. package/dist/core/blobs/broker.js.map +1 -1
  229. package/dist/core/blobs/index.d.ts +1 -0
  230. package/dist/core/blobs/index.d.ts.map +1 -1
  231. package/dist/core/blobs/index.js +1 -0
  232. package/dist/core/blobs/index.js.map +1 -1
  233. package/dist/core/blobs/payload.d.ts.map +1 -1
  234. package/dist/core/blobs/payload.js.map +1 -1
  235. package/dist/core/blobs/proveedor.d.ts.map +1 -1
  236. package/dist/core/blobs/proveedor.js.map +1 -1
  237. package/dist/core/blobs/uploaders.d.ts +105 -0
  238. package/dist/core/blobs/uploaders.d.ts.map +1 -0
  239. package/dist/core/blobs/uploaders.js +224 -0
  240. package/dist/core/blobs/uploaders.js.map +1 -0
  241. package/dist/core/broker/broker.d.ts +54 -0
  242. package/dist/core/broker/broker.d.ts.map +1 -0
  243. package/dist/core/broker/broker.js +216 -0
  244. package/dist/core/broker/broker.js.map +1 -0
  245. package/dist/core/broker/index.d.ts +21 -0
  246. package/dist/core/broker/index.d.ts.map +1 -0
  247. package/dist/core/broker/index.js +33 -0
  248. package/dist/core/broker/index.js.map +1 -0
  249. package/dist/core/broker/ps.d.ts +20 -0
  250. package/dist/core/broker/ps.d.ts.map +1 -0
  251. package/dist/core/broker/ps.js +55 -0
  252. package/dist/core/broker/ps.js.map +1 -0
  253. package/dist/core/broker/types.d.ts +45 -0
  254. package/dist/core/broker/types.d.ts.map +1 -0
  255. package/dist/core/broker/types.js +19 -0
  256. package/dist/core/broker/types.js.map +1 -0
  257. package/dist/core/browser/cdp.d.ts.map +1 -1
  258. package/dist/core/browser/cdp.js.map +1 -1
  259. package/dist/core/browser/politica.d.ts.map +1 -1
  260. package/dist/core/browser/politica.js.map +1 -1
  261. package/dist/core/browser/sesion.d.ts.map +1 -1
  262. package/dist/core/browser/sesion.js.map +1 -1
  263. package/dist/core/browser/tools.d.ts.map +1 -1
  264. package/dist/core/browser/tools.js.map +1 -1
  265. package/dist/core/cache-stats.d.ts.map +1 -1
  266. package/dist/core/cache-stats.js.map +1 -1
  267. package/dist/core/capability/capability.test.d.ts +12 -0
  268. package/dist/core/capability/capability.test.d.ts.map +1 -0
  269. package/dist/core/capability/capability.test.js +258 -0
  270. package/dist/core/capability/capability.test.js.map +1 -0
  271. package/dist/core/capability/fs.d.ts +32 -0
  272. package/dist/core/capability/fs.d.ts.map +1 -0
  273. package/dist/core/capability/fs.js +106 -0
  274. package/dist/core/capability/fs.js.map +1 -0
  275. package/dist/core/capability/index.d.ts +68 -0
  276. package/dist/core/capability/index.d.ts.map +1 -0
  277. package/dist/core/capability/index.js +258 -0
  278. package/dist/core/capability/index.js.map +1 -0
  279. package/dist/core/capability/types.d.ts +168 -0
  280. package/dist/core/capability/types.d.ts.map +1 -0
  281. package/dist/core/capability/types.js +16 -0
  282. package/dist/core/capability/types.js.map +1 -0
  283. package/dist/core/carga-plugins/index.d.ts +49 -0
  284. package/dist/core/carga-plugins/index.d.ts.map +1 -0
  285. package/dist/core/carga-plugins/index.js +85 -0
  286. package/dist/core/carga-plugins/index.js.map +1 -0
  287. package/dist/core/carga-plugins/invalidacion.d.ts +60 -0
  288. package/dist/core/carga-plugins/invalidacion.d.ts.map +1 -0
  289. package/dist/core/carga-plugins/invalidacion.js +94 -0
  290. package/dist/core/carga-plugins/invalidacion.js.map +1 -0
  291. package/dist/core/carga-plugins/paralelo.d.ts +48 -0
  292. package/dist/core/carga-plugins/paralelo.d.ts.map +1 -0
  293. package/dist/core/carga-plugins/paralelo.js +47 -0
  294. package/dist/core/carga-plugins/paralelo.js.map +1 -0
  295. package/dist/core/colaboracion/autoresearch.d.ts +56 -0
  296. package/dist/core/colaboracion/autoresearch.d.ts.map +1 -0
  297. package/dist/core/colaboracion/autoresearch.js +95 -0
  298. package/dist/core/colaboracion/autoresearch.js.map +1 -0
  299. package/dist/core/colaboracion/index.d.ts +10 -0
  300. package/dist/core/colaboracion/index.d.ts.map +1 -0
  301. package/dist/core/colaboracion/index.js +7 -0
  302. package/dist/core/colaboracion/index.js.map +1 -0
  303. package/dist/core/colaboracion/kernels.d.ts +63 -0
  304. package/dist/core/colaboracion/kernels.d.ts.map +1 -0
  305. package/dist/core/colaboracion/kernels.js +99 -0
  306. package/dist/core/colaboracion/kernels.js.map +1 -0
  307. package/dist/core/colaboracion/rele/index.d.ts +8 -0
  308. package/dist/core/colaboracion/rele/index.d.ts.map +1 -0
  309. package/dist/core/colaboracion/rele/index.js +6 -0
  310. package/dist/core/colaboracion/rele/index.js.map +1 -0
  311. package/dist/core/colaboracion/rele/rele-servidor.d.ts +69 -0
  312. package/dist/core/colaboracion/rele/rele-servidor.d.ts.map +1 -0
  313. package/dist/core/colaboracion/rele/rele-servidor.js +197 -0
  314. package/dist/core/colaboracion/rele/rele-servidor.js.map +1 -0
  315. package/dist/core/colaboracion/rele/suscriptor.d.ts +31 -0
  316. package/dist/core/colaboracion/rele/suscriptor.d.ts.map +1 -0
  317. package/dist/core/colaboracion/rele/suscriptor.js +173 -0
  318. package/dist/core/colaboracion/rele/suscriptor.js.map +1 -0
  319. package/dist/core/colaboracion/sesion-colaborativa.d.ts +61 -0
  320. package/dist/core/colaboracion/sesion-colaborativa.d.ts.map +1 -0
  321. package/dist/core/colaboracion/sesion-colaborativa.js +127 -0
  322. package/dist/core/colaboracion/sesion-colaborativa.js.map +1 -0
  323. package/dist/core/commits/agentic.d.ts +101 -0
  324. package/dist/core/commits/agentic.d.ts.map +1 -0
  325. package/dist/core/commits/agentic.js +268 -0
  326. package/dist/core/commits/agentic.js.map +1 -0
  327. package/dist/core/commits/changelog.d.ts +37 -0
  328. package/dist/core/commits/changelog.d.ts.map +1 -0
  329. package/dist/core/commits/changelog.js +155 -0
  330. package/dist/core/commits/changelog.js.map +1 -0
  331. package/dist/core/commits/diff.d.ts.map +1 -0
  332. package/dist/core/commits/diff.js.map +1 -0
  333. package/dist/core/commits/git.d.ts +43 -0
  334. package/dist/core/commits/git.d.ts.map +1 -0
  335. package/dist/core/commits/git.js +61 -0
  336. package/dist/core/commits/git.js.map +1 -0
  337. package/dist/core/commits/split.d.ts +45 -0
  338. package/dist/core/commits/split.d.ts.map +1 -0
  339. package/dist/core/commits/split.js +128 -0
  340. package/dist/core/commits/split.js.map +1 -0
  341. package/dist/core/compactacion/comandos.d.ts +53 -0
  342. package/dist/core/compactacion/comandos.d.ts.map +1 -0
  343. package/dist/core/compactacion/comandos.js +155 -0
  344. package/dist/core/compactacion/comandos.js.map +1 -0
  345. package/dist/core/compactacion/extension.d.ts +28 -0
  346. package/dist/core/compactacion/extension.d.ts.map +1 -0
  347. package/dist/core/compactacion/extension.js +159 -0
  348. package/dist/core/compactacion/extension.js.map +1 -0
  349. package/dist/core/compactacion/handoff.d.ts +61 -0
  350. package/dist/core/compactacion/handoff.d.ts.map +1 -0
  351. package/dist/core/compactacion/handoff.js +139 -0
  352. package/dist/core/compactacion/handoff.js.map +1 -0
  353. package/dist/core/compactacion/index.d.ts +15 -0
  354. package/dist/core/compactacion/index.d.ts.map +1 -0
  355. package/dist/core/compactacion/index.js +15 -0
  356. package/dist/core/compactacion/index.js.map +1 -0
  357. package/dist/core/compactacion/prune.d.ts +38 -0
  358. package/dist/core/compactacion/prune.d.ts.map +1 -0
  359. package/dist/core/compactacion/prune.js +81 -0
  360. package/dist/core/compactacion/prune.js.map +1 -0
  361. package/dist/core/compactacion/shake.d.ts +40 -0
  362. package/dist/core/compactacion/shake.d.ts.map +1 -0
  363. package/dist/core/compactacion/shake.js +106 -0
  364. package/dist/core/compactacion/shake.js.map +1 -0
  365. package/dist/core/compactacion/tipos.d.ts +54 -0
  366. package/dist/core/compactacion/tipos.d.ts.map +1 -0
  367. package/dist/core/compactacion/tipos.js +44 -0
  368. package/dist/core/compactacion/tipos.js.map +1 -0
  369. package/dist/core/compactar/index.d.ts.map +1 -1
  370. package/dist/core/compactar/index.js.map +1 -1
  371. package/dist/core/compactar/registro-denso.d.ts.map +1 -1
  372. package/dist/core/compactar/registro-denso.js.map +1 -1
  373. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  374. package/dist/core/compaction/branch-summarization.js.map +1 -1
  375. package/dist/core/compaction/compaction.d.ts.map +1 -1
  376. package/dist/core/compaction/compaction.js.map +1 -1
  377. package/dist/core/compaction/index.d.ts.map +1 -1
  378. package/dist/core/compaction/index.js.map +1 -1
  379. package/dist/core/compaction/utils.d.ts.map +1 -1
  380. package/dist/core/compaction/utils.js.map +1 -1
  381. package/dist/core/computer/captura.d.ts.map +1 -1
  382. package/dist/core/computer/captura.js.map +1 -1
  383. package/dist/core/computer/driver.d.ts.map +1 -1
  384. package/dist/core/computer/driver.js.map +1 -1
  385. package/dist/core/computer/motor/actions.d.ts.map +1 -1
  386. package/dist/core/computer/motor/actions.js.map +1 -1
  387. package/dist/core/computer/motor/bridge.d.ts +2 -2
  388. package/dist/core/computer/motor/bridge.d.ts.map +1 -1
  389. package/dist/core/computer/motor/bridge.js.map +1 -1
  390. package/dist/core/computer/motor/cdp.d.ts.map +1 -1
  391. package/dist/core/computer/motor/cdp.js.map +1 -1
  392. package/dist/core/computer/motor/config.d.ts.map +1 -1
  393. package/dist/core/computer/motor/config.js.map +1 -1
  394. package/dist/core/computer/motor/contract.d.ts.map +1 -1
  395. package/dist/core/computer/motor/contract.js.map +1 -1
  396. package/dist/core/computer/motor/note.d.ts.map +1 -1
  397. package/dist/core/computer/motor/note.js.map +1 -1
  398. package/dist/core/computer/motor/outline.d.ts.map +1 -1
  399. package/dist/core/computer/motor/outline.js.map +1 -1
  400. package/dist/core/computer/motor/output.d.ts.map +1 -1
  401. package/dist/core/computer/motor/output.js.map +1 -1
  402. package/dist/core/computer/motor/permissions.d.ts.map +1 -1
  403. package/dist/core/computer/motor/permissions.js.map +1 -1
  404. package/dist/core/computer/motor/platform/architecture.d.ts.map +1 -1
  405. package/dist/core/computer/motor/platform/architecture.js.map +1 -1
  406. package/dist/core/computer/motor/platform/coerce.d.ts.map +1 -1
  407. package/dist/core/computer/motor/platform/coerce.js.map +1 -1
  408. package/dist/core/computer/motor/platform/index.d.ts.map +1 -1
  409. package/dist/core/computer/motor/platform/index.js.map +1 -1
  410. package/dist/core/computer/motor/platform/linux/backend.d.ts.map +1 -1
  411. package/dist/core/computer/motor/platform/linux/backend.js.map +1 -1
  412. package/dist/core/computer/motor/platform/linux/helper.d.ts.map +1 -1
  413. package/dist/core/computer/motor/platform/linux/helper.js.map +1 -1
  414. package/dist/core/computer/motor/platform/macos/backend.d.ts.map +1 -1
  415. package/dist/core/computer/motor/platform/macos/backend.js.map +1 -1
  416. package/dist/core/computer/motor/platform/macos/browser.d.ts.map +1 -1
  417. package/dist/core/computer/motor/platform/macos/browser.js.map +1 -1
  418. package/dist/core/computer/motor/platform/macos/helper.d.ts.map +1 -1
  419. package/dist/core/computer/motor/platform/macos/helper.js.map +1 -1
  420. package/dist/core/computer/motor/platform/macos/permissions.d.ts.map +1 -1
  421. package/dist/core/computer/motor/platform/macos/permissions.js.map +1 -1
  422. package/dist/core/computer/motor/platform/types.d.ts.map +1 -1
  423. package/dist/core/computer/motor/platform/types.js.map +1 -1
  424. package/dist/core/computer/motor/platform/windows/backend.d.ts.map +1 -1
  425. package/dist/core/computer/motor/platform/windows/backend.js.map +1 -1
  426. package/dist/core/computer/motor/platform/windows/helper.d.ts.map +1 -1
  427. package/dist/core/computer/motor/platform/windows/helper.js.map +1 -1
  428. package/dist/core/computer/motor/root-selection.d.ts.map +1 -1
  429. package/dist/core/computer/motor/root-selection.js.map +1 -1
  430. package/dist/core/computer/motor/runtime.d.ts.map +1 -1
  431. package/dist/core/computer/motor/runtime.js.map +1 -1
  432. package/dist/core/computer/motor/state.d.ts.map +1 -1
  433. package/dist/core/computer/motor/state.js.map +1 -1
  434. package/dist/core/computer/motor/view.d.ts.map +1 -1
  435. package/dist/core/computer/motor/view.js.map +1 -1
  436. package/dist/core/computer/motor-ada.d.ts.map +1 -1
  437. package/dist/core/computer/motor-ada.js.map +1 -1
  438. package/dist/core/computer/politica.d.ts.map +1 -1
  439. package/dist/core/computer/politica.js.map +1 -1
  440. package/dist/core/computer/tools.d.ts.map +1 -1
  441. package/dist/core/computer/tools.js.map +1 -1
  442. package/dist/core/config/quarantine.d.ts +57 -0
  443. package/dist/core/config/quarantine.d.ts.map +1 -0
  444. package/dist/core/config/quarantine.js +161 -0
  445. package/dist/core/config/quarantine.js.map +1 -0
  446. package/dist/core/config-viva/ambito.d.ts +46 -0
  447. package/dist/core/config-viva/ambito.d.ts.map +1 -0
  448. package/dist/core/config-viva/ambito.js +62 -0
  449. package/dist/core/config-viva/ambito.js.map +1 -0
  450. package/dist/core/config-viva/cache-negativa.d.ts +50 -0
  451. package/dist/core/config-viva/cache-negativa.d.ts.map +1 -0
  452. package/dist/core/config-viva/cache-negativa.js +78 -0
  453. package/dist/core/config-viva/cache-negativa.js.map +1 -0
  454. package/dist/core/config-viva/headers-vivos.d.ts +41 -0
  455. package/dist/core/config-viva/headers-vivos.d.ts.map +1 -0
  456. package/dist/core/config-viva/headers-vivos.js +43 -0
  457. package/dist/core/config-viva/headers-vivos.js.map +1 -0
  458. package/dist/core/config-viva/index.d.ts +16 -0
  459. package/dist/core/config-viva/index.d.ts.map +1 -0
  460. package/dist/core/config-viva/index.js +16 -0
  461. package/dist/core/config-viva/index.js.map +1 -0
  462. package/dist/core/config-viva/proveedor.d.ts +48 -0
  463. package/dist/core/config-viva/proveedor.d.ts.map +1 -0
  464. package/dist/core/config-viva/proveedor.js +78 -0
  465. package/dist/core/config-viva/proveedor.js.map +1 -0
  466. package/dist/core/context-breakdown.d.ts.map +1 -1
  467. package/dist/core/context-breakdown.js.map +1 -1
  468. package/dist/core/credenciales/cliente.d.ts.map +1 -1
  469. package/dist/core/credenciales/cliente.js.map +1 -1
  470. package/dist/core/credenciales/pool.d.ts +36 -1
  471. package/dist/core/credenciales/pool.d.ts.map +1 -1
  472. package/dist/core/credenciales/pool.js +56 -7
  473. package/dist/core/credenciales/pool.js.map +1 -1
  474. package/dist/core/credenciales/ranking.d.ts +56 -0
  475. package/dist/core/credenciales/ranking.d.ts.map +1 -0
  476. package/dist/core/credenciales/ranking.js +94 -0
  477. package/dist/core/credenciales/ranking.js.map +1 -0
  478. package/dist/core/credenciales/ratelimit.d.ts +54 -0
  479. package/dist/core/credenciales/ratelimit.d.ts.map +1 -0
  480. package/dist/core/credenciales/ratelimit.js +116 -0
  481. package/dist/core/credenciales/ratelimit.js.map +1 -0
  482. package/dist/core/credenciales/reposo.d.ts.map +1 -1
  483. package/dist/core/credenciales/reposo.js.map +1 -1
  484. package/dist/core/credenciales/servidor.d.ts +8 -0
  485. package/dist/core/credenciales/servidor.d.ts.map +1 -1
  486. package/dist/core/credenciales/servidor.js +9 -1
  487. package/dist/core/credenciales/servidor.js.map +1 -1
  488. package/dist/core/defaults.d.ts.map +1 -1
  489. package/dist/core/defaults.js.map +1 -1
  490. package/dist/core/descubrimiento/comandos.d.ts.map +1 -1
  491. package/dist/core/descubrimiento/comandos.js.map +1 -1
  492. package/dist/core/descubrimiento/mcp.d.ts +12 -0
  493. package/dist/core/descubrimiento/mcp.d.ts.map +1 -1
  494. package/dist/core/descubrimiento/mcp.js +32 -0
  495. package/dist/core/descubrimiento/mcp.js.map +1 -1
  496. package/dist/core/descubrimiento/reglas.d.ts.map +1 -1
  497. package/dist/core/descubrimiento/reglas.js.map +1 -1
  498. package/dist/core/descubrimiento/runtimes/index.d.ts +24 -0
  499. package/dist/core/descubrimiento/runtimes/index.d.ts.map +1 -0
  500. package/dist/core/descubrimiento/runtimes/index.js +109 -0
  501. package/dist/core/descubrimiento/runtimes/index.js.map +1 -0
  502. package/dist/core/descubrimiento/runtimes/litellm.d.ts +12 -0
  503. package/dist/core/descubrimiento/runtimes/litellm.d.ts.map +1 -0
  504. package/dist/core/descubrimiento/runtimes/litellm.js +185 -0
  505. package/dist/core/descubrimiento/runtimes/litellm.js.map +1 -0
  506. package/dist/core/descubrimiento/runtimes/lm-studio.d.ts +13 -0
  507. package/dist/core/descubrimiento/runtimes/lm-studio.d.ts.map +1 -0
  508. package/dist/core/descubrimiento/runtimes/lm-studio.js +142 -0
  509. package/dist/core/descubrimiento/runtimes/lm-studio.js.map +1 -0
  510. package/dist/core/descubrimiento/runtimes/ollama.d.ts +8 -0
  511. package/dist/core/descubrimiento/runtimes/ollama.d.ts.map +1 -0
  512. package/dist/core/descubrimiento/runtimes/ollama.js +96 -0
  513. package/dist/core/descubrimiento/runtimes/ollama.js.map +1 -0
  514. package/dist/core/descubrimiento/runtimes/tipos.d.ts +47 -0
  515. package/dist/core/descubrimiento/runtimes/tipos.d.ts.map +1 -0
  516. package/dist/core/descubrimiento/runtimes/tipos.js +10 -0
  517. package/dist/core/descubrimiento/runtimes/tipos.js.map +1 -0
  518. package/dist/core/descubrimiento/skills.d.ts.map +1 -1
  519. package/dist/core/descubrimiento/skills.js.map +1 -1
  520. package/dist/core/diagnostics.d.ts.map +1 -1
  521. package/dist/core/diagnostics.js.map +1 -1
  522. package/dist/core/dificultad/clasificador.d.ts.map +1 -1
  523. package/dist/core/dificultad/clasificador.js.map +1 -1
  524. package/dist/core/edicion/diario.d.ts.map +1 -1
  525. package/dist/core/edicion/diario.js.map +1 -1
  526. package/dist/core/edicion/hashline.d.ts.map +1 -1
  527. package/dist/core/edicion/hashline.js.map +1 -1
  528. package/dist/core/edicion/hueco.d.ts.map +1 -1
  529. package/dist/core/edicion/hueco.js.map +1 -1
  530. package/dist/core/edicion/ipynb.d.ts +51 -0
  531. package/dist/core/edicion/ipynb.d.ts.map +1 -0
  532. package/dist/core/edicion/ipynb.js +110 -0
  533. package/dist/core/edicion/ipynb.js.map +1 -0
  534. package/dist/core/edicion/limpiar-carga.d.ts.map +1 -1
  535. package/dist/core/edicion/limpiar-carga.js.map +1 -1
  536. package/dist/core/edicion/observador.d.ts.map +1 -1
  537. package/dist/core/edicion/observador.js.map +1 -1
  538. package/dist/core/edicion/parecido.d.ts.map +1 -1
  539. package/dist/core/edicion/parecido.js.map +1 -1
  540. package/dist/core/edicion/parseo.d.ts.map +1 -1
  541. package/dist/core/edicion/parseo.js.map +1 -1
  542. package/dist/core/edicion/portapapeles.d.ts +28 -0
  543. package/dist/core/edicion/portapapeles.d.ts.map +1 -0
  544. package/dist/core/edicion/portapapeles.js +49 -0
  545. package/dist/core/edicion/portapapeles.js.map +1 -0
  546. package/dist/core/edicion/reparacion.d.ts.map +1 -1
  547. package/dist/core/edicion/reparacion.js.map +1 -1
  548. package/dist/core/edicion/rutas-difusas.d.ts +44 -0
  549. package/dist/core/edicion/rutas-difusas.d.ts.map +1 -0
  550. package/dist/core/edicion/rutas-difusas.js +93 -0
  551. package/dist/core/edicion/rutas-difusas.js.map +1 -0
  552. package/dist/core/edicion/sangria.d.ts.map +1 -1
  553. package/dist/core/edicion/sangria.js.map +1 -1
  554. package/dist/core/edicion/tipos.d.ts.map +1 -1
  555. package/dist/core/edicion/tipos.js.map +1 -1
  556. package/dist/core/engine-personality.d.ts.map +1 -1
  557. package/dist/core/engine-personality.js.map +1 -1
  558. package/dist/core/errores/proveedor.d.ts.map +1 -1
  559. package/dist/core/errores/proveedor.js.map +1 -1
  560. package/dist/core/estructural/buscar.d.ts.map +1 -1
  561. package/dist/core/estructural/buscar.js.map +1 -1
  562. package/dist/core/estructural/editar.d.ts.map +1 -1
  563. package/dist/core/estructural/editar.js.map +1 -1
  564. package/dist/core/estructural/tools.d.ts.map +1 -1
  565. package/dist/core/estructural/tools.js.map +1 -1
  566. package/dist/core/event-bus.d.ts.map +1 -1
  567. package/dist/core/event-bus.js.map +1 -1
  568. package/dist/core/exec.d.ts.map +1 -1
  569. package/dist/core/exec.js.map +1 -1
  570. package/dist/core/experimental.d.ts.map +1 -1
  571. package/dist/core/experimental.js.map +1 -1
  572. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  573. package/dist/core/export-html/ansi-to-html.js.map +1 -1
  574. package/dist/core/export-html/index.d.ts.map +1 -1
  575. package/dist/core/export-html/index.js +183 -13
  576. package/dist/core/export-html/index.js.map +1 -1
  577. package/dist/core/export-html/template.css +88 -4
  578. package/dist/core/export-html/template.html +3 -1
  579. package/dist/core/export-html/template.js +84 -0
  580. package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  581. package/dist/core/export-html/tool-renderer.js.map +1 -1
  582. package/dist/core/extensiones/suplantacion.d.ts.map +1 -1
  583. package/dist/core/extensiones/suplantacion.js.map +1 -1
  584. package/dist/core/extensiones/vigilancia.d.ts.map +1 -1
  585. package/dist/core/extensiones/vigilancia.js.map +1 -1
  586. package/dist/core/extensions/index.d.ts.map +1 -1
  587. package/dist/core/extensions/index.js.map +1 -1
  588. package/dist/core/extensions/loader.d.ts.map +1 -1
  589. package/dist/core/extensions/loader.js.map +1 -1
  590. package/dist/core/extensions/runner.d.ts.map +1 -1
  591. package/dist/core/extensions/runner.js.map +1 -1
  592. package/dist/core/extensions/types.d.ts.map +1 -1
  593. package/dist/core/extensions/types.js.map +1 -1
  594. package/dist/core/extensions/wrapper.d.ts.map +1 -1
  595. package/dist/core/extensions/wrapper.js.map +1 -1
  596. package/dist/core/footer-data-provider.d.ts.map +1 -1
  597. package/dist/core/footer-data-provider.js.map +1 -1
  598. package/dist/core/gc/archivo-frio.d.ts +33 -0
  599. package/dist/core/gc/archivo-frio.d.ts.map +1 -0
  600. package/dist/core/gc/archivo-frio.js +152 -0
  601. package/dist/core/gc/archivo-frio.js.map +1 -0
  602. package/dist/core/gc/blobs-gc.d.ts +25 -0
  603. package/dist/core/gc/blobs-gc.d.ts.map +1 -0
  604. package/dist/core/gc/blobs-gc.js +143 -0
  605. package/dist/core/gc/blobs-gc.js.map +1 -0
  606. package/dist/core/gc/index.d.ts +42 -0
  607. package/dist/core/gc/index.d.ts.map +1 -0
  608. package/dist/core/gc/index.js +50 -0
  609. package/dist/core/gc/index.js.map +1 -0
  610. package/dist/core/gc/lock.d.ts +19 -0
  611. package/dist/core/gc/lock.d.ts.map +1 -0
  612. package/dist/core/gc/lock.js +48 -0
  613. package/dist/core/gc/lock.js.map +1 -0
  614. package/dist/core/gc/reconciliacion.d.ts +19 -0
  615. package/dist/core/gc/reconciliacion.d.ts.map +1 -0
  616. package/dist/core/gc/reconciliacion.js +102 -0
  617. package/dist/core/gc/reconciliacion.js.map +1 -0
  618. package/dist/core/gc/wal.d.ts +15 -0
  619. package/dist/core/gc/wal.d.ts.map +1 -0
  620. package/dist/core/gc/wal.js +44 -0
  621. package/dist/core/gc/wal.js.map +1 -0
  622. package/dist/core/harness/fuentes-de-contexto.d.ts.map +1 -1
  623. package/dist/core/harness/fuentes-de-contexto.js.map +1 -1
  624. package/dist/core/harness/refine.d.ts.map +1 -1
  625. package/dist/core/harness/refine.js.map +1 -1
  626. package/dist/core/harness/store.d.ts.map +1 -1
  627. package/dist/core/harness/store.js.map +1 -1
  628. package/dist/core/higiene/index.d.ts +8 -0
  629. package/dist/core/higiene/index.d.ts.map +1 -0
  630. package/dist/core/higiene/index.js +8 -0
  631. package/dist/core/higiene/index.js.map +1 -0
  632. package/dist/core/higiene/managed-timers.d.ts +19 -0
  633. package/dist/core/higiene/managed-timers.d.ts.map +1 -0
  634. package/dist/core/higiene/managed-timers.js +68 -0
  635. package/dist/core/higiene/managed-timers.js.map +1 -0
  636. package/dist/core/higiene/race-handler.d.ts +7 -0
  637. package/dist/core/higiene/race-handler.d.ts.map +1 -0
  638. package/dist/core/higiene/race-handler.js +32 -0
  639. package/dist/core/higiene/race-handler.js.map +1 -0
  640. package/dist/core/higiene/withHostGuard.d.ts +27 -0
  641. package/dist/core/higiene/withHostGuard.d.ts.map +1 -0
  642. package/dist/core/higiene/withHostGuard.js +79 -0
  643. package/dist/core/higiene/withHostGuard.js.map +1 -0
  644. package/dist/core/hooks/contract.d.ts.map +1 -1
  645. package/dist/core/hooks/contract.js.map +1 -1
  646. package/dist/core/hooks/runner.d.ts.map +1 -1
  647. package/dist/core/hooks/runner.js.map +1 -1
  648. package/dist/core/hooks/session-hooks.d.ts.map +1 -1
  649. package/dist/core/hooks/session-hooks.js.map +1 -1
  650. package/dist/core/hooks-ts/cargador.d.ts +29 -0
  651. package/dist/core/hooks-ts/cargador.d.ts.map +1 -0
  652. package/dist/core/hooks-ts/cargador.js +51 -0
  653. package/dist/core/hooks-ts/cargador.js.map +1 -0
  654. package/dist/core/hooks-ts/index.d.ts +25 -0
  655. package/dist/core/hooks-ts/index.d.ts.map +1 -0
  656. package/dist/core/hooks-ts/index.js +25 -0
  657. package/dist/core/hooks-ts/index.js.map +1 -0
  658. package/dist/core/hooks-ts/runner.d.ts +40 -0
  659. package/dist/core/hooks-ts/runner.d.ts.map +1 -0
  660. package/dist/core/hooks-ts/runner.js +95 -0
  661. package/dist/core/hooks-ts/runner.js.map +1 -0
  662. package/dist/core/hooks-ts/tipos.d.ts +69 -0
  663. package/dist/core/hooks-ts/tipos.d.ts.map +1 -0
  664. package/dist/core/hooks-ts/tipos.js +90 -0
  665. package/dist/core/hooks-ts/tipos.js.map +1 -0
  666. package/dist/core/http-dispatcher.d.ts.map +1 -1
  667. package/dist/core/http-dispatcher.js.map +1 -1
  668. package/dist/core/importar/formatos.d.ts.map +1 -1
  669. package/dist/core/importar/formatos.js.map +1 -1
  670. package/dist/core/index.d.ts.map +1 -1
  671. package/dist/core/index.js.map +1 -1
  672. package/dist/core/interactivo/deteccion.d.ts.map +1 -1
  673. package/dist/core/interactivo/deteccion.js.map +1 -1
  674. package/dist/core/interactivo/sesion.d.ts.map +1 -1
  675. package/dist/core/interactivo/sesion.js.map +1 -1
  676. package/dist/core/interactivo/tools.d.ts.map +1 -1
  677. package/dist/core/interactivo/tools.js.map +1 -1
  678. package/dist/core/keybindings.d.ts +170 -170
  679. package/dist/core/keybindings.d.ts.map +1 -1
  680. package/dist/core/keybindings.js.map +1 -1
  681. package/dist/core/lectura/mapa.d.ts.map +1 -1
  682. package/dist/core/lectura/mapa.js.map +1 -1
  683. package/dist/core/lectura/pdf.d.ts.map +1 -1
  684. package/dist/core/lectura/pdf.js.map +1 -1
  685. package/dist/core/lectura/sniffer.d.ts +54 -0
  686. package/dist/core/lectura/sniffer.d.ts.map +1 -0
  687. package/dist/core/lectura/sniffer.js +106 -0
  688. package/dist/core/lectura/sniffer.js.map +1 -0
  689. package/dist/core/limpieza/comprobadores.d.ts +16 -2
  690. package/dist/core/limpieza/comprobadores.d.ts.map +1 -1
  691. package/dist/core/limpieza/comprobadores.js +200 -6
  692. package/dist/core/limpieza/comprobadores.js.map +1 -1
  693. package/dist/core/limpieza/flujo.d.ts +36 -0
  694. package/dist/core/limpieza/flujo.d.ts.map +1 -0
  695. package/dist/core/limpieza/flujo.js +89 -0
  696. package/dist/core/limpieza/flujo.js.map +1 -0
  697. package/dist/core/limpieza/parseo.d.ts.map +1 -1
  698. package/dist/core/limpieza/parseo.js.map +1 -1
  699. package/dist/core/limpieza/peso.d.ts +17 -0
  700. package/dist/core/limpieza/peso.d.ts.map +1 -0
  701. package/dist/core/limpieza/peso.js +52 -0
  702. package/dist/core/limpieza/peso.js.map +1 -0
  703. package/dist/core/limpieza/pool.d.ts +44 -0
  704. package/dist/core/limpieza/pool.d.ts.map +1 -0
  705. package/dist/core/limpieza/pool.js +123 -0
  706. package/dist/core/limpieza/pool.js.map +1 -0
  707. package/dist/core/limpieza/reparacion.d.ts +19 -2
  708. package/dist/core/limpieza/reparacion.d.ts.map +1 -1
  709. package/dist/core/limpieza/reparacion.js +95 -8
  710. package/dist/core/limpieza/reparacion.js.map +1 -1
  711. package/dist/core/limpieza/tablero.d.ts +47 -0
  712. package/dist/core/limpieza/tablero.d.ts.map +1 -0
  713. package/dist/core/limpieza/tablero.js +78 -0
  714. package/dist/core/limpieza/tablero.js.map +1 -0
  715. package/dist/core/limpieza/tipos.d.ts +25 -0
  716. package/dist/core/limpieza/tipos.d.ts.map +1 -1
  717. package/dist/core/limpieza/tipos.js.map +1 -1
  718. package/dist/core/lsp/cliente.d.ts +7 -0
  719. package/dist/core/lsp/cliente.d.ts.map +1 -1
  720. package/dist/core/lsp/cliente.js +4 -2
  721. package/dist/core/lsp/cliente.js.map +1 -1
  722. package/dist/core/lsp/descubrimiento.d.ts.map +1 -1
  723. package/dist/core/lsp/descubrimiento.js.map +1 -1
  724. package/dist/core/lsp/ediciones.d.ts.map +1 -1
  725. package/dist/core/lsp/ediciones.js.map +1 -1
  726. package/dist/core/lsp/extension.d.ts +9 -0
  727. package/dist/core/lsp/extension.d.ts.map +1 -1
  728. package/dist/core/lsp/extension.js +60 -4
  729. package/dist/core/lsp/extension.js.map +1 -1
  730. package/dist/core/lsp/formato.d.ts +72 -0
  731. package/dist/core/lsp/formato.d.ts.map +1 -0
  732. package/dist/core/lsp/formato.js +117 -0
  733. package/dist/core/lsp/formato.js.map +1 -0
  734. package/dist/core/lsp/tools.d.ts +3 -3
  735. package/dist/core/lsp/tools.d.ts.map +1 -1
  736. package/dist/core/lsp/tools.js.map +1 -1
  737. package/dist/core/lsp/writethrough.d.ts +165 -0
  738. package/dist/core/lsp/writethrough.d.ts.map +1 -0
  739. package/dist/core/lsp/writethrough.js +282 -0
  740. package/dist/core/lsp/writethrough.js.map +1 -0
  741. package/dist/core/marketplace/catalogo.d.ts +32 -0
  742. package/dist/core/marketplace/catalogo.d.ts.map +1 -0
  743. package/dist/core/marketplace/catalogo.js +122 -0
  744. package/dist/core/marketplace/catalogo.js.map +1 -0
  745. package/dist/core/marketplace/doctor.d.ts +47 -0
  746. package/dist/core/marketplace/doctor.d.ts.map +1 -0
  747. package/dist/core/marketplace/doctor.js +155 -0
  748. package/dist/core/marketplace/doctor.js.map +1 -0
  749. package/dist/core/marketplace/features.d.ts +22 -0
  750. package/dist/core/marketplace/features.d.ts.map +1 -0
  751. package/dist/core/marketplace/features.js +70 -0
  752. package/dist/core/marketplace/features.js.map +1 -0
  753. package/dist/core/marketplace/index.d.ts +33 -0
  754. package/dist/core/marketplace/index.d.ts.map +1 -0
  755. package/dist/core/marketplace/index.js +33 -0
  756. package/dist/core/marketplace/index.js.map +1 -0
  757. package/dist/core/marketplace/instalar.d.ts +27 -0
  758. package/dist/core/marketplace/instalar.d.ts.map +1 -0
  759. package/dist/core/marketplace/instalar.js +50 -0
  760. package/dist/core/marketplace/instalar.js.map +1 -0
  761. package/dist/core/mcp/client.d.ts.map +1 -1
  762. package/dist/core/mcp/client.js.map +1 -1
  763. package/dist/core/mcp/manager.d.ts.map +1 -1
  764. package/dist/core/mcp/manager.js.map +1 -1
  765. package/dist/core/mcp/oauth.d.ts +138 -0
  766. package/dist/core/mcp/oauth.d.ts.map +1 -0
  767. package/dist/core/mcp/oauth.js +348 -0
  768. package/dist/core/mcp/oauth.js.map +1 -0
  769. package/dist/core/mcp/tools.d.ts.map +1 -1
  770. package/dist/core/mcp/tools.js.map +1 -1
  771. package/dist/core/memoria/almacen.d.ts +56 -0
  772. package/dist/core/memoria/almacen.d.ts.map +1 -0
  773. package/dist/core/memoria/almacen.js +214 -0
  774. package/dist/core/memoria/almacen.js.map +1 -0
  775. package/dist/core/memoria/dr/respaldo.d.ts +34 -0
  776. package/dist/core/memoria/dr/respaldo.d.ts.map +1 -0
  777. package/dist/core/memoria/dr/respaldo.js +133 -0
  778. package/dist/core/memoria/dr/respaldo.js.map +1 -0
  779. package/dist/core/memoria/embeddings.d.ts +21 -0
  780. package/dist/core/memoria/embeddings.d.ts.map +1 -0
  781. package/dist/core/memoria/embeddings.js +87 -0
  782. package/dist/core/memoria/embeddings.js.map +1 -0
  783. package/dist/core/memoria/grafo.d.ts +56 -0
  784. package/dist/core/memoria/grafo.d.ts.map +1 -0
  785. package/dist/core/memoria/grafo.js +143 -0
  786. package/dist/core/memoria/grafo.js.map +1 -0
  787. package/dist/core/memoria/redaccion.d.ts +32 -0
  788. package/dist/core/memoria/redaccion.d.ts.map +1 -0
  789. package/dist/core/memoria/redaccion.js +76 -0
  790. package/dist/core/memoria/redaccion.js.map +1 -0
  791. package/dist/core/memoria/servidor/almacen-json.d.ts +26 -0
  792. package/dist/core/memoria/servidor/almacen-json.d.ts.map +1 -0
  793. package/dist/core/memoria/servidor/almacen-json.js +90 -0
  794. package/dist/core/memoria/servidor/almacen-json.js.map +1 -0
  795. package/dist/core/memoria/servidor/servidor.d.ts +43 -0
  796. package/dist/core/memoria/servidor/servidor.d.ts.map +1 -0
  797. package/dist/core/memoria/servidor/servidor.js +195 -0
  798. package/dist/core/memoria/servidor/servidor.js.map +1 -0
  799. package/dist/core/memoria/servidor/tipos.d.ts +44 -0
  800. package/dist/core/memoria/servidor/tipos.d.ts.map +1 -0
  801. package/dist/core/memoria/servidor/tipos.js +12 -0
  802. package/dist/core/memoria/servidor/tipos.js.map +1 -0
  803. package/dist/core/memoria/tipos.d.ts +63 -0
  804. package/dist/core/memoria/tipos.d.ts.map +1 -0
  805. package/dist/core/memoria/tipos.js +14 -0
  806. package/dist/core/memoria/tipos.js.map +1 -0
  807. package/dist/core/memory-engine/audit-export.d.ts.map +1 -1
  808. package/dist/core/memory-engine/audit-export.js.map +1 -1
  809. package/dist/core/memory-engine/audit-indice.d.ts.map +1 -1
  810. package/dist/core/memory-engine/audit-indice.js.map +1 -1
  811. package/dist/core/memory-engine/audit.d.ts.map +1 -1
  812. package/dist/core/memory-engine/audit.js.map +1 -1
  813. package/dist/core/memory-engine/engine.d.ts +7 -0
  814. package/dist/core/memory-engine/engine.d.ts.map +1 -1
  815. package/dist/core/memory-engine/engine.js.map +1 -1
  816. package/dist/core/memory-engine/inverted-index.d.ts.map +1 -1
  817. package/dist/core/memory-engine/inverted-index.js.map +1 -1
  818. package/dist/core/memory-engine/keychain.d.ts.map +1 -1
  819. package/dist/core/memory-engine/keychain.js.map +1 -1
  820. package/dist/core/memory-engine/observation-store.d.ts +1 -0
  821. package/dist/core/memory-engine/observation-store.d.ts.map +1 -1
  822. package/dist/core/memory-engine/observation-store.js.map +1 -1
  823. package/dist/core/memory-engine/refinements.d.ts.map +1 -1
  824. package/dist/core/memory-engine/refinements.js.map +1 -1
  825. package/dist/core/memory-engine/scanner.d.ts.map +1 -1
  826. package/dist/core/memory-engine/scanner.js.map +1 -1
  827. package/dist/core/memory-engine/security.d.ts.map +1 -1
  828. package/dist/core/memory-engine/security.js.map +1 -1
  829. package/dist/core/memory-engine/session-indexer.d.ts.map +1 -1
  830. package/dist/core/memory-engine/session-indexer.js.map +1 -1
  831. package/dist/core/memory-engine/tools.d.ts.map +1 -1
  832. package/dist/core/memory-engine/tools.js.map +1 -1
  833. package/dist/core/memory-engine/types.d.ts.map +1 -1
  834. package/dist/core/memory-engine/types.js.map +1 -1
  835. package/dist/core/memory-engine/vault.d.ts.map +1 -1
  836. package/dist/core/memory-engine/vault.js.map +1 -1
  837. package/dist/core/messages.d.ts.map +1 -1
  838. package/dist/core/messages.js.map +1 -1
  839. package/dist/core/metaharness/cli.d.ts +19 -0
  840. package/dist/core/metaharness/cli.d.ts.map +1 -0
  841. package/dist/core/metaharness/cli.js +171 -0
  842. package/dist/core/metaharness/cli.js.map +1 -0
  843. package/dist/core/metaharness/comparar.d.ts +21 -0
  844. package/dist/core/metaharness/comparar.d.ts.map +1 -0
  845. package/dist/core/metaharness/comparar.js +64 -0
  846. package/dist/core/metaharness/comparar.js.map +1 -0
  847. package/dist/core/metaharness/ejecutar.d.ts +70 -0
  848. package/dist/core/metaharness/ejecutar.d.ts.map +1 -0
  849. package/dist/core/metaharness/ejecutar.js +249 -0
  850. package/dist/core/metaharness/ejecutar.js.map +1 -0
  851. package/dist/core/metaharness/tipos.d.ts +142 -0
  852. package/dist/core/metaharness/tipos.d.ts.map +1 -0
  853. package/dist/core/metaharness/tipos.js +17 -0
  854. package/dist/core/metaharness/tipos.js.map +1 -0
  855. package/dist/core/model-config.d.ts +8 -8
  856. package/dist/core/model-config.d.ts.map +1 -1
  857. package/dist/core/model-config.js.map +1 -1
  858. package/dist/core/model-registry.d.ts.map +1 -1
  859. package/dist/core/model-registry.js.map +1 -1
  860. package/dist/core/model-resolver.d.ts.map +1 -1
  861. package/dist/core/model-resolver.js.map +1 -1
  862. package/dist/core/model-runtime.d.ts.map +1 -1
  863. package/dist/core/model-runtime.js.map +1 -1
  864. package/dist/core/models-store.d.ts.map +1 -1
  865. package/dist/core/models-store.js.map +1 -1
  866. package/dist/core/muestreo-restringido.d.ts.map +1 -1
  867. package/dist/core/muestreo-restringido.js.map +1 -1
  868. package/dist/core/orphan-process-journal.d.ts.map +1 -1
  869. package/dist/core/orphan-process-journal.js.map +1 -1
  870. package/dist/core/output-guard.d.ts.map +1 -1
  871. package/dist/core/output-guard.js.map +1 -1
  872. package/dist/core/package-manager.d.ts.map +1 -1
  873. package/dist/core/package-manager.js.map +1 -1
  874. package/dist/core/parche/aplicar.d.ts +19 -0
  875. package/dist/core/parche/aplicar.d.ts.map +1 -0
  876. package/dist/core/parche/aplicar.js +243 -0
  877. package/dist/core/parche/aplicar.js.map +1 -0
  878. package/dist/core/parche/parser.d.ts +38 -0
  879. package/dist/core/parche/parser.d.ts.map +1 -0
  880. package/dist/core/parche/parser.js +217 -0
  881. package/dist/core/parche/parser.js.map +1 -0
  882. package/dist/core/parche/registro.d.ts +12 -0
  883. package/dist/core/parche/registro.d.ts.map +1 -0
  884. package/dist/core/parche/registro.js +58 -0
  885. package/dist/core/parche/registro.js.map +1 -0
  886. package/dist/core/perfiles/index.d.ts +22 -0
  887. package/dist/core/perfiles/index.d.ts.map +1 -0
  888. package/dist/core/perfiles/index.js +21 -0
  889. package/dist/core/perfiles/index.js.map +1 -0
  890. package/dist/core/perfiles/resolver.d.ts +51 -0
  891. package/dist/core/perfiles/resolver.d.ts.map +1 -0
  892. package/dist/core/perfiles/resolver.js +329 -0
  893. package/dist/core/perfiles/resolver.js.map +1 -0
  894. package/dist/core/perfiles/tipos.d.ts +69 -0
  895. package/dist/core/perfiles/tipos.d.ts.map +1 -0
  896. package/dist/core/perfiles/tipos.js +98 -0
  897. package/dist/core/perfiles/tipos.js.map +1 -0
  898. package/dist/core/pi-manifest.d.ts.map +1 -1
  899. package/dist/core/pi-manifest.js.map +1 -1
  900. package/dist/core/privacidad/categorias-especiales.d.ts.map +1 -1
  901. package/dist/core/privacidad/categorias-especiales.js +4 -0
  902. package/dist/core/privacidad/categorias-especiales.js.map +1 -1
  903. package/dist/core/privacidad/tapar.d.ts.map +1 -1
  904. package/dist/core/privacidad/tapar.js.map +1 -1
  905. package/dist/core/project-memory.d.ts.map +1 -1
  906. package/dist/core/project-memory.js.map +1 -1
  907. package/dist/core/project-trust.d.ts.map +1 -1
  908. package/dist/core/project-trust.js.map +1 -1
  909. package/dist/core/prompt-cache/diagnostics.d.ts.map +1 -1
  910. package/dist/core/prompt-cache/diagnostics.js.map +1 -1
  911. package/dist/core/prompt-cache/index.d.ts.map +1 -1
  912. package/dist/core/prompt-cache/index.js.map +1 -1
  913. package/dist/core/prompt-cache/payload.d.ts.map +1 -1
  914. package/dist/core/prompt-cache/payload.js.map +1 -1
  915. package/dist/core/prompt-cache/stabilize.d.ts.map +1 -1
  916. package/dist/core/prompt-cache/stabilize.js.map +1 -1
  917. package/dist/core/prompt-cache/stats.d.ts.map +1 -1
  918. package/dist/core/prompt-cache/stats.js.map +1 -1
  919. package/dist/core/prompt-eleccion.d.ts.map +1 -1
  920. package/dist/core/prompt-eleccion.js.map +1 -1
  921. package/dist/core/prompt-optimizer.d.ts.map +1 -1
  922. package/dist/core/prompt-optimizer.js.map +1 -1
  923. package/dist/core/prompt-templates.d.ts.map +1 -1
  924. package/dist/core/prompt-templates.js.map +1 -1
  925. package/dist/core/prompts/montar.d.ts.map +1 -1
  926. package/dist/core/prompts/montar.js.map +1 -1
  927. package/dist/core/prompts/plantilla.d.ts.map +1 -1
  928. package/dist/core/prompts/plantilla.js.map +1 -1
  929. package/dist/core/proveedores-registry/definiciones.d.ts +15 -0
  930. package/dist/core/proveedores-registry/definiciones.d.ts.map +1 -0
  931. package/dist/core/proveedores-registry/definiciones.js +22 -0
  932. package/dist/core/proveedores-registry/definiciones.js.map +1 -0
  933. package/dist/core/proveedores-registry/index.d.ts +14 -0
  934. package/dist/core/proveedores-registry/index.d.ts.map +1 -0
  935. package/dist/core/proveedores-registry/index.js +13 -0
  936. package/dist/core/proveedores-registry/index.js.map +1 -0
  937. package/dist/core/proveedores-registry/resolver.d.ts +25 -0
  938. package/dist/core/proveedores-registry/resolver.d.ts.map +1 -0
  939. package/dist/core/proveedores-registry/resolver.js +69 -0
  940. package/dist/core/proveedores-registry/resolver.js.map +1 -0
  941. package/dist/core/proveedores-registry/tipos.d.ts +47 -0
  942. package/dist/core/proveedores-registry/tipos.d.ts.map +1 -0
  943. package/dist/core/proveedores-registry/tipos.js +15 -0
  944. package/dist/core/proveedores-registry/tipos.js.map +1 -0
  945. package/dist/core/provider-attribution.d.ts.map +1 -1
  946. package/dist/core/provider-attribution.js.map +1 -1
  947. package/dist/core/provider-composer.d.ts.map +1 -1
  948. package/dist/core/provider-composer.js.map +1 -1
  949. package/dist/core/radius.d.ts.map +1 -1
  950. package/dist/core/radius.js.map +1 -1
  951. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  952. package/dist/core/remote-catalog-provider.js.map +1 -1
  953. package/dist/core/remoto/destino.d.ts.map +1 -1
  954. package/dist/core/remoto/destino.js.map +1 -1
  955. package/dist/core/remoto/ejecutor.d.ts.map +1 -1
  956. package/dist/core/remoto/ejecutor.js.map +1 -1
  957. package/dist/core/remoto/ficheros.d.ts.map +1 -1
  958. package/dist/core/remoto/ficheros.js.map +1 -1
  959. package/dist/core/remoto/registro-extension.d.ts.map +1 -1
  960. package/dist/core/remoto/registro-extension.js.map +1 -1
  961. package/dist/core/remoto/tools.d.ts.map +1 -1
  962. package/dist/core/remoto/tools.js.map +1 -1
  963. package/dist/core/reparacion/index.d.ts +2 -0
  964. package/dist/core/reparacion/index.d.ts.map +1 -0
  965. package/dist/core/reparacion/index.js +2 -0
  966. package/dist/core/reparacion/index.js.map +1 -0
  967. package/dist/core/reparacion/reparar-hunk.d.ts +27 -0
  968. package/dist/core/reparacion/reparar-hunk.d.ts.map +1 -0
  969. package/dist/core/reparacion/reparar-hunk.js +139 -0
  970. package/dist/core/reparacion/reparar-hunk.js.map +1 -0
  971. package/dist/core/resolve-config-value.d.ts.map +1 -1
  972. package/dist/core/resolve-config-value.js.map +1 -1
  973. package/dist/core/resource-loader.d.ts +13 -0
  974. package/dist/core/resource-loader.d.ts.map +1 -1
  975. package/dist/core/resource-loader.js +7 -4
  976. package/dist/core/resource-loader.js.map +1 -1
  977. package/dist/core/revision/dispositions.d.ts +86 -0
  978. package/dist/core/revision/dispositions.d.ts.map +1 -0
  979. package/dist/core/revision/dispositions.js +137 -0
  980. package/dist/core/revision/dispositions.js.map +1 -0
  981. package/dist/core/revision/hallazgo.d.ts.map +1 -1
  982. package/dist/core/revision/hallazgo.js.map +1 -1
  983. package/dist/core/revision/procedencia.d.ts +63 -0
  984. package/dist/core/revision/procedencia.d.ts.map +1 -0
  985. package/dist/core/revision/procedencia.js +72 -0
  986. package/dist/core/revision/procedencia.js.map +1 -0
  987. package/dist/core/revision/publicar.d.ts +26 -0
  988. package/dist/core/revision/publicar.d.ts.map +1 -0
  989. package/dist/core/revision/publicar.js +34 -0
  990. package/dist/core/revision/publicar.js.map +1 -0
  991. package/dist/core/revision/revisor.d.ts.map +1 -1
  992. package/dist/core/revision/revisor.js.map +1 -1
  993. package/dist/core/revision/sarif.d.ts.map +1 -1
  994. package/dist/core/revision/sarif.js.map +1 -1
  995. package/dist/core/router-uris/index.d.ts +12 -0
  996. package/dist/core/router-uris/index.d.ts.map +1 -0
  997. package/dist/core/router-uris/index.js +12 -0
  998. package/dist/core/router-uris/index.js.map +1 -0
  999. package/dist/core/router-uris/router.d.ts +2 -0
  1000. package/dist/core/router-uris/router.d.ts.map +1 -0
  1001. package/dist/core/router-uris/router.js +2 -0
  1002. package/dist/core/router-uris/router.js.map +1 -0
  1003. package/dist/core/runtime-credentials.d.ts.map +1 -1
  1004. package/dist/core/runtime-credentials.js.map +1 -1
  1005. package/dist/core/rutas/envoltorio.d.ts +20 -0
  1006. package/dist/core/rutas/envoltorio.d.ts.map +1 -0
  1007. package/dist/core/rutas/envoltorio.js +48 -0
  1008. package/dist/core/rutas/envoltorio.js.map +1 -0
  1009. package/dist/core/rutas/index.d.ts +11 -0
  1010. package/dist/core/rutas/index.d.ts.map +1 -0
  1011. package/dist/core/rutas/index.js +11 -0
  1012. package/dist/core/rutas/index.js.map +1 -0
  1013. package/dist/core/rutas/router.d.ts +82 -0
  1014. package/dist/core/rutas/router.d.ts.map +1 -0
  1015. package/dist/core/rutas/router.js +161 -0
  1016. package/dist/core/rutas/router.js.map +1 -0
  1017. package/dist/core/scheduler/scheduler.d.ts.map +1 -1
  1018. package/dist/core/scheduler/scheduler.js.map +1 -1
  1019. package/dist/core/sdk.d.ts.map +1 -1
  1020. package/dist/core/sdk.js.map +1 -1
  1021. package/dist/core/secretos/extension.d.ts +31 -0
  1022. package/dist/core/secretos/extension.d.ts.map +1 -0
  1023. package/dist/core/secretos/extension.js +64 -0
  1024. package/dist/core/secretos/extension.js.map +1 -0
  1025. package/dist/core/secretos/index.d.ts +75 -0
  1026. package/dist/core/secretos/index.d.ts.map +1 -0
  1027. package/dist/core/secretos/index.js +385 -0
  1028. package/dist/core/secretos/index.js.map +1 -0
  1029. package/dist/core/secretos/message-transform.d.ts +44 -0
  1030. package/dist/core/secretos/message-transform.d.ts.map +1 -0
  1031. package/dist/core/secretos/message-transform.js +246 -0
  1032. package/dist/core/secretos/message-transform.js.map +1 -0
  1033. package/dist/core/secretos/obfuscator.d.ts +30 -0
  1034. package/dist/core/secretos/obfuscator.d.ts.map +1 -0
  1035. package/dist/core/secretos/obfuscator.js +1182 -0
  1036. package/dist/core/secretos/obfuscator.js.map +1 -0
  1037. package/dist/core/secretos/placeholder-scan.d.ts +96 -0
  1038. package/dist/core/secretos/placeholder-scan.d.ts.map +1 -0
  1039. package/dist/core/secretos/placeholder-scan.js +433 -0
  1040. package/dist/core/secretos/placeholder-scan.js.map +1 -0
  1041. package/dist/core/secretos/placeholder.d.ts +95 -0
  1042. package/dist/core/secretos/placeholder.d.ts.map +1 -0
  1043. package/dist/core/secretos/placeholder.js +283 -0
  1044. package/dist/core/secretos/placeholder.js.map +1 -0
  1045. package/dist/core/secretos/regex.d.ts +3 -0
  1046. package/dist/core/secretos/regex.d.ts.map +1 -0
  1047. package/dist/core/secretos/regex.js +19 -0
  1048. package/dist/core/secretos/regex.js.map +1 -0
  1049. package/dist/core/secretos/replacement.d.ts +83 -0
  1050. package/dist/core/secretos/replacement.d.ts.map +1 -0
  1051. package/dist/core/secretos/replacement.js +211 -0
  1052. package/dist/core/secretos/replacement.js.map +1 -0
  1053. package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts.map +1 -1
  1054. package/dist/core/sesion/cerrar-llamadas-abiertas.js.map +1 -1
  1055. package/dist/core/sesion/journal-tree.d.ts +73 -0
  1056. package/dist/core/sesion/journal-tree.d.ts.map +1 -0
  1057. package/dist/core/sesion/journal-tree.js +241 -0
  1058. package/dist/core/sesion/journal-tree.js.map +1 -0
  1059. package/dist/core/sesion/turn-recovery.d.ts +48 -0
  1060. package/dist/core/sesion/turn-recovery.d.ts.map +1 -0
  1061. package/dist/core/sesion/turn-recovery.js +182 -0
  1062. package/dist/core/sesion/turn-recovery.js.map +1 -0
  1063. package/dist/core/session-cwd.d.ts.map +1 -1
  1064. package/dist/core/session-cwd.js.map +1 -1
  1065. package/dist/core/session-manager.d.ts.map +1 -1
  1066. package/dist/core/session-manager.js.map +1 -1
  1067. package/dist/core/settings-diagnostics.d.ts.map +1 -1
  1068. package/dist/core/settings-diagnostics.js.map +1 -1
  1069. package/dist/core/settings-manager.d.ts +2 -2
  1070. package/dist/core/settings-manager.d.ts.map +1 -1
  1071. package/dist/core/settings-manager.js.map +1 -1
  1072. package/dist/core/share/cifrado.d.ts +39 -0
  1073. package/dist/core/share/cifrado.d.ts.map +1 -0
  1074. package/dist/core/share/cifrado.js +81 -0
  1075. package/dist/core/share/cifrado.js.map +1 -0
  1076. package/dist/core/share/exportar.d.ts +69 -0
  1077. package/dist/core/share/exportar.d.ts.map +1 -0
  1078. package/dist/core/share/exportar.js +247 -0
  1079. package/dist/core/share/exportar.js.map +1 -0
  1080. package/dist/core/skills.d.ts.map +1 -1
  1081. package/dist/core/skills.js.map +1 -1
  1082. package/dist/core/slash-commands.d.ts.map +1 -1
  1083. package/dist/core/slash-commands.js.map +1 -1
  1084. package/dist/core/source-info.d.ts.map +1 -1
  1085. package/dist/core/source-info.js.map +1 -1
  1086. package/dist/core/stream-guard/guardia.d.ts +45 -0
  1087. package/dist/core/stream-guard/guardia.d.ts.map +1 -0
  1088. package/dist/core/stream-guard/guardia.js +100 -0
  1089. package/dist/core/stream-guard/guardia.js.map +1 -0
  1090. package/dist/core/stream-guard/index.d.ts +9 -0
  1091. package/dist/core/stream-guard/index.d.ts.map +1 -0
  1092. package/dist/core/stream-guard/index.js +7 -0
  1093. package/dist/core/stream-guard/index.js.map +1 -0
  1094. package/dist/core/stream-guard/replay.d.ts +39 -0
  1095. package/dist/core/stream-guard/replay.d.ts.map +1 -0
  1096. package/dist/core/stream-guard/replay.js +68 -0
  1097. package/dist/core/stream-guard/replay.js.map +1 -0
  1098. package/dist/core/system-prompt.d.ts.map +1 -1
  1099. package/dist/core/system-prompt.js.map +1 -1
  1100. package/dist/core/telemetria/otlp.d.ts.map +1 -1
  1101. package/dist/core/telemetria/otlp.js.map +1 -1
  1102. package/dist/core/telemetry/otel-genai.d.ts +44 -0
  1103. package/dist/core/telemetry/otel-genai.d.ts.map +1 -0
  1104. package/dist/core/telemetry/otel-genai.js +124 -0
  1105. package/dist/core/telemetry/otel-genai.js.map +1 -0
  1106. package/dist/core/telemetry.d.ts.map +1 -1
  1107. package/dist/core/telemetry.js.map +1 -1
  1108. package/dist/core/terminal/backlog-guard.d.ts +53 -0
  1109. package/dist/core/terminal/backlog-guard.d.ts.map +1 -0
  1110. package/dist/core/terminal/backlog-guard.js +122 -0
  1111. package/dist/core/terminal/backlog-guard.js.map +1 -0
  1112. package/dist/core/terminal/conpty.d.ts +29 -0
  1113. package/dist/core/terminal/conpty.d.ts.map +1 -0
  1114. package/dist/core/terminal/conpty.js +67 -0
  1115. package/dist/core/terminal/conpty.js.map +1 -0
  1116. package/dist/core/terminal/conptyChunking.d.ts +2 -0
  1117. package/dist/core/terminal/conptyChunking.d.ts.map +1 -0
  1118. package/dist/core/terminal/conptyChunking.js +2 -0
  1119. package/dist/core/terminal/conptyChunking.js.map +1 -0
  1120. package/dist/core/terminal/index.d.ts +5 -0
  1121. package/dist/core/terminal/index.d.ts.map +1 -0
  1122. package/dist/core/terminal/index.js +5 -0
  1123. package/dist/core/terminal/index.js.map +1 -0
  1124. package/dist/core/terminal/loop-watchdog.d.ts +43 -0
  1125. package/dist/core/terminal/loop-watchdog.d.ts.map +1 -0
  1126. package/dist/core/terminal/loop-watchdog.js +117 -0
  1127. package/dist/core/terminal/loop-watchdog.js.map +1 -0
  1128. package/dist/core/terminal/runner.d.ts +55 -0
  1129. package/dist/core/terminal/runner.d.ts.map +1 -0
  1130. package/dist/core/terminal/runner.js +102 -0
  1131. package/dist/core/terminal/runner.js.map +1 -0
  1132. package/dist/core/timings.d.ts.map +1 -1
  1133. package/dist/core/timings.js.map +1 -1
  1134. package/dist/core/tools/apply_patch.d.ts +29 -0
  1135. package/dist/core/tools/apply_patch.d.ts.map +1 -0
  1136. package/dist/core/tools/apply_patch.js +54 -0
  1137. package/dist/core/tools/apply_patch.js.map +1 -0
  1138. package/dist/core/tools/bash.d.ts.map +1 -1
  1139. package/dist/core/tools/bash.js.map +1 -1
  1140. package/dist/core/tools/coercion-argumentos.d.ts.map +1 -1
  1141. package/dist/core/tools/coercion-argumentos.js.map +1 -1
  1142. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  1143. package/dist/core/tools/edit-diff.js.map +1 -1
  1144. package/dist/core/tools/edit.d.ts.map +1 -1
  1145. package/dist/core/tools/edit.js +43 -1
  1146. package/dist/core/tools/edit.js.map +1 -1
  1147. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
  1148. package/dist/core/tools/file-mutation-queue.js.map +1 -1
  1149. package/dist/core/tools/find.d.ts.map +1 -1
  1150. package/dist/core/tools/find.js.map +1 -1
  1151. package/dist/core/tools/grep.d.ts.map +1 -1
  1152. package/dist/core/tools/grep.js.map +1 -1
  1153. package/dist/core/tools/index.d.ts.map +1 -1
  1154. package/dist/core/tools/index.js.map +1 -1
  1155. package/dist/core/tools/json-tolerante.d.ts.map +1 -1
  1156. package/dist/core/tools/json-tolerante.js.map +1 -1
  1157. package/dist/core/tools/ls.d.ts.map +1 -1
  1158. package/dist/core/tools/ls.js.map +1 -1
  1159. package/dist/core/tools/noop-loop-guard.d.ts +46 -0
  1160. package/dist/core/tools/noop-loop-guard.d.ts.map +1 -0
  1161. package/dist/core/tools/noop-loop-guard.js +57 -0
  1162. package/dist/core/tools/noop-loop-guard.js.map +1 -0
  1163. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  1164. package/dist/core/tools/output-accumulator.js.map +1 -1
  1165. package/dist/core/tools/path-utils.d.ts.map +1 -1
  1166. package/dist/core/tools/path-utils.js.map +1 -1
  1167. package/dist/core/tools/project-memory-tool.d.ts.map +1 -1
  1168. package/dist/core/tools/project-memory-tool.js.map +1 -1
  1169. package/dist/core/tools/read.d.ts.map +1 -1
  1170. package/dist/core/tools/read.js.map +1 -1
  1171. package/dist/core/tools/render-utils.d.ts.map +1 -1
  1172. package/dist/core/tools/render-utils.js.map +1 -1
  1173. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  1174. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  1175. package/dist/core/tools/truncate.d.ts.map +1 -1
  1176. package/dist/core/tools/truncate.js.map +1 -1
  1177. package/dist/core/tools/write.d.ts.map +1 -1
  1178. package/dist/core/tools/write.js.map +1 -1
  1179. package/dist/core/trust-manager.d.ts.map +1 -1
  1180. package/dist/core/trust-manager.js.map +1 -1
  1181. package/dist/core/ttsr/captura.d.ts +72 -0
  1182. package/dist/core/ttsr/captura.d.ts.map +1 -0
  1183. package/dist/core/ttsr/captura.js +183 -0
  1184. package/dist/core/ttsr/captura.js.map +1 -0
  1185. package/dist/core/ttsr/index.d.ts +24 -0
  1186. package/dist/core/ttsr/index.d.ts.map +1 -0
  1187. package/dist/core/ttsr/index.js +57 -0
  1188. package/dist/core/ttsr/index.js.map +1 -0
  1189. package/dist/core/ttsr/preview.d.ts +48 -0
  1190. package/dist/core/ttsr/preview.d.ts.map +1 -0
  1191. package/dist/core/ttsr/preview.js +83 -0
  1192. package/dist/core/ttsr/preview.js.map +1 -0
  1193. package/dist/core/turno-vacio/detectar.d.ts.map +1 -1
  1194. package/dist/core/turno-vacio/detectar.js.map +1 -1
  1195. package/dist/core/undo/journal.d.ts.map +1 -1
  1196. package/dist/core/undo/journal.js.map +1 -1
  1197. package/dist/core/urls-internas/auditoria.d.ts.map +1 -1
  1198. package/dist/core/urls-internas/auditoria.js.map +1 -1
  1199. package/dist/core/urls-internas/boveda.d.ts.map +1 -1
  1200. package/dist/core/urls-internas/boveda.js.map +1 -1
  1201. package/dist/core/urls-internas/lector.d.ts +14 -10
  1202. package/dist/core/urls-internas/lector.d.ts.map +1 -1
  1203. package/dist/core/urls-internas/lector.js +50 -36
  1204. package/dist/core/urls-internas/lector.js.map +1 -1
  1205. package/dist/core/urls-internas/memoria.d.ts.map +1 -1
  1206. package/dist/core/urls-internas/memoria.js.map +1 -1
  1207. package/dist/core/urls-internas/parse.d.ts +6 -13
  1208. package/dist/core/urls-internas/parse.d.ts.map +1 -1
  1209. package/dist/core/urls-internas/parse.js +6 -17
  1210. package/dist/core/urls-internas/parse.js.map +1 -1
  1211. package/dist/core/urls-internas/reglas.d.ts.map +1 -1
  1212. package/dist/core/urls-internas/reglas.js.map +1 -1
  1213. package/dist/core/usage/aggregate.d.ts +1 -0
  1214. package/dist/core/usage/aggregate.d.ts.map +1 -1
  1215. package/dist/core/usage/aggregate.js +1 -1
  1216. package/dist/core/usage/aggregate.js.map +1 -1
  1217. package/dist/core/usage/cuota/anthropic.d.ts.map +1 -1
  1218. package/dist/core/usage/cuota/anthropic.js.map +1 -1
  1219. package/dist/core/usage/cuota/cache.d.ts.map +1 -1
  1220. package/dist/core/usage/cuota/cache.js.map +1 -1
  1221. package/dist/core/usage/cuota/github-copilot.d.ts.map +1 -1
  1222. package/dist/core/usage/cuota/github-copilot.js.map +1 -1
  1223. package/dist/core/usage/cuota/google-gemini.d.ts.map +1 -1
  1224. package/dist/core/usage/cuota/google-gemini.js.map +1 -1
  1225. package/dist/core/usage/cuota/index.d.ts.map +1 -1
  1226. package/dist/core/usage/cuota/index.js.map +1 -1
  1227. package/dist/core/usage/cuota/openai-codex.d.ts.map +1 -1
  1228. package/dist/core/usage/cuota/openai-codex.js.map +1 -1
  1229. package/dist/core/usage/cuota/openrouter.d.ts.map +1 -1
  1230. package/dist/core/usage/cuota/openrouter.js.map +1 -1
  1231. package/dist/core/usage/cuota/tipos.d.ts.map +1 -1
  1232. package/dist/core/usage/cuota/tipos.js.map +1 -1
  1233. package/dist/core/usage/index.d.ts +11 -0
  1234. package/dist/core/usage/index.d.ts.map +1 -0
  1235. package/dist/core/usage/index.js +11 -0
  1236. package/dist/core/usage/index.js.map +1 -0
  1237. package/dist/core/usage/multi.d.ts +62 -0
  1238. package/dist/core/usage/multi.d.ts.map +1 -0
  1239. package/dist/core/usage/multi.js +122 -0
  1240. package/dist/core/usage/multi.js.map +1 -0
  1241. package/dist/core/usage/redaccion.d.ts +48 -0
  1242. package/dist/core/usage/redaccion.d.ts.map +1 -0
  1243. package/dist/core/usage/redaccion.js +72 -0
  1244. package/dist/core/usage/redaccion.js.map +1 -0
  1245. package/dist/core/usage-totals.d.ts.map +1 -1
  1246. package/dist/core/usage-totals.js.map +1 -1
  1247. package/dist/core/utils/atomic-write.d.ts +55 -0
  1248. package/dist/core/utils/atomic-write.d.ts.map +1 -0
  1249. package/dist/core/utils/atomic-write.js +293 -0
  1250. package/dist/core/utils/atomic-write.js.map +1 -0
  1251. package/dist/core/utils/git.d.ts +24 -0
  1252. package/dist/core/utils/git.d.ts.map +1 -0
  1253. package/dist/core/utils/git.js +107 -0
  1254. package/dist/core/utils/git.js.map +1 -0
  1255. package/dist/core/utils/logger.d.ts +26 -0
  1256. package/dist/core/utils/logger.d.ts.map +1 -0
  1257. package/dist/core/utils/logger.js +104 -0
  1258. package/dist/core/utils/logger.js.map +1 -0
  1259. package/dist/core/utils/shell-snapshot.d.ts +21 -0
  1260. package/dist/core/utils/shell-snapshot.d.ts.map +1 -0
  1261. package/dist/core/utils/shell-snapshot.js +32 -0
  1262. package/dist/core/utils/shell-snapshot.js.map +1 -0
  1263. package/dist/core/utils/startup-watchdog.d.ts +11 -0
  1264. package/dist/core/utils/startup-watchdog.d.ts.map +1 -0
  1265. package/dist/core/utils/startup-watchdog.js +34 -0
  1266. package/dist/core/utils/startup-watchdog.js.map +1 -0
  1267. package/dist/core/utils/tls-ca-shim.d.ts +17 -0
  1268. package/dist/core/utils/tls-ca-shim.d.ts.map +1 -0
  1269. package/dist/core/utils/tls-ca-shim.js +33 -0
  1270. package/dist/core/utils/tls-ca-shim.js.map +1 -0
  1271. package/dist/core/web/agregador.d.ts +67 -0
  1272. package/dist/core/web/agregador.d.ts.map +1 -0
  1273. package/dist/core/web/agregador.js +182 -0
  1274. package/dist/core/web/agregador.js.map +1 -0
  1275. package/dist/core/web/busqueda-nativa.d.ts.map +1 -1
  1276. package/dist/core/web/busqueda-nativa.js.map +1 -1
  1277. package/dist/core/web/consulta.d.ts +53 -0
  1278. package/dist/core/web/consulta.d.ts.map +1 -0
  1279. package/dist/core/web/consulta.js +213 -0
  1280. package/dist/core/web/consulta.js.map +1 -0
  1281. package/dist/core/web/destino.d.ts +11 -0
  1282. package/dist/core/web/destino.d.ts.map +1 -1
  1283. package/dist/core/web/destino.js +35 -0
  1284. package/dist/core/web/destino.js.map +1 -1
  1285. package/dist/core/web/load-page.d.ts +52 -0
  1286. package/dist/core/web/load-page.d.ts.map +1 -0
  1287. package/dist/core/web/load-page.js +221 -0
  1288. package/dist/core/web/load-page.js.map +1 -0
  1289. package/dist/core/web/proveedores/brave.d.ts.map +1 -1
  1290. package/dist/core/web/proveedores/brave.js.map +1 -1
  1291. package/dist/core/web/proveedores/claves.d.ts.map +1 -1
  1292. package/dist/core/web/proveedores/claves.js.map +1 -1
  1293. package/dist/core/web/proveedores/duckduckgo.d.ts.map +1 -1
  1294. package/dist/core/web/proveedores/duckduckgo.js.map +1 -1
  1295. package/dist/core/web/proveedores/ecosia.d.ts.map +1 -1
  1296. package/dist/core/web/proveedores/ecosia.js.map +1 -1
  1297. package/dist/core/web/proveedores/exa.d.ts.map +1 -1
  1298. package/dist/core/web/proveedores/exa.js.map +1 -1
  1299. package/dist/core/web/proveedores/mojeek.d.ts.map +1 -1
  1300. package/dist/core/web/proveedores/mojeek.js.map +1 -1
  1301. package/dist/core/web/proveedores/navegador.d.ts.map +1 -1
  1302. package/dist/core/web/proveedores/navegador.js.map +1 -1
  1303. package/dist/core/web/proveedores/registro.d.ts.map +1 -1
  1304. package/dist/core/web/proveedores/registro.js.map +1 -1
  1305. package/dist/core/web/proveedores/searxng.d.ts.map +1 -1
  1306. package/dist/core/web/proveedores/searxng.js.map +1 -1
  1307. package/dist/core/web/proveedores/serper.d.ts.map +1 -1
  1308. package/dist/core/web/proveedores/serper.js.map +1 -1
  1309. package/dist/core/web/proveedores/tavily.d.ts.map +1 -1
  1310. package/dist/core/web/proveedores/tavily.js.map +1 -1
  1311. package/dist/core/web/proveedores/tipos.d.ts.map +1 -1
  1312. package/dist/core/web/proveedores/tipos.js.map +1 -1
  1313. package/dist/core/web/registro-red.d.ts.map +1 -1
  1314. package/dist/core/web/registro-red.js.map +1 -1
  1315. package/dist/core/web/scrapers/cisa-kev.d.ts.map +1 -1
  1316. package/dist/core/web/scrapers/cisa-kev.js.map +1 -1
  1317. package/dist/core/web/scrapers/crates-io.d.ts.map +1 -1
  1318. package/dist/core/web/scrapers/crates-io.js.map +1 -1
  1319. package/dist/core/web/scrapers/docs-rs.d.ts.map +1 -1
  1320. package/dist/core/web/scrapers/docs-rs.js.map +1 -1
  1321. package/dist/core/web/scrapers/github.d.ts.map +1 -1
  1322. package/dist/core/web/scrapers/github.js.map +1 -1
  1323. package/dist/core/web/scrapers/go-pkg.d.ts.map +1 -1
  1324. package/dist/core/web/scrapers/go-pkg.js.map +1 -1
  1325. package/dist/core/web/scrapers/hex.d.ts.map +1 -1
  1326. package/dist/core/web/scrapers/hex.js.map +1 -1
  1327. package/dist/core/web/scrapers/maven.d.ts.map +1 -1
  1328. package/dist/core/web/scrapers/maven.js.map +1 -1
  1329. package/dist/core/web/scrapers/mdn.d.ts.map +1 -1
  1330. package/dist/core/web/scrapers/mdn.js.map +1 -1
  1331. package/dist/core/web/scrapers/npm.d.ts.map +1 -1
  1332. package/dist/core/web/scrapers/npm.js.map +1 -1
  1333. package/dist/core/web/scrapers/nuget.d.ts.map +1 -1
  1334. package/dist/core/web/scrapers/nuget.js.map +1 -1
  1335. package/dist/core/web/scrapers/nvd.d.ts.map +1 -1
  1336. package/dist/core/web/scrapers/nvd.js.map +1 -1
  1337. package/dist/core/web/scrapers/pypi.d.ts.map +1 -1
  1338. package/dist/core/web/scrapers/pypi.js.map +1 -1
  1339. package/dist/core/web/scrapers/registro.d.ts.map +1 -1
  1340. package/dist/core/web/scrapers/registro.js.map +1 -1
  1341. package/dist/core/web/scrapers/rubygems.d.ts.map +1 -1
  1342. package/dist/core/web/scrapers/rubygems.js.map +1 -1
  1343. package/dist/core/web/scrapers/stackoverflow.d.ts.map +1 -1
  1344. package/dist/core/web/scrapers/stackoverflow.js.map +1 -1
  1345. package/dist/core/web/scrapers/tipos.d.ts.map +1 -1
  1346. package/dist/core/web/scrapers/tipos.js.map +1 -1
  1347. package/dist/core/web/texto.d.ts.map +1 -1
  1348. package/dist/core/web/texto.js.map +1 -1
  1349. package/dist/core/web/tools.d.ts +1 -8
  1350. package/dist/core/web/tools.d.ts.map +1 -1
  1351. package/dist/core/web/tools.js +2 -33
  1352. package/dist/core/web/tools.js.map +1 -1
  1353. package/dist/core/wiki/almacen.d.ts.map +1 -1
  1354. package/dist/core/wiki/almacen.js.map +1 -1
  1355. package/dist/core/wiki/citas.d.ts.map +1 -1
  1356. package/dist/core/wiki/citas.js.map +1 -1
  1357. package/dist/core/workflows/agent-runner.d.ts.map +1 -1
  1358. package/dist/core/workflows/agent-runner.js.map +1 -1
  1359. package/dist/core/workflows/builtins.d.ts.map +1 -1
  1360. package/dist/core/workflows/builtins.js.map +1 -1
  1361. package/dist/core/workflows/contrato/esquema.d.ts.map +1 -1
  1362. package/dist/core/workflows/contrato/esquema.js.map +1 -1
  1363. package/dist/core/workflows/contrato/reparar-argumentos.d.ts.map +1 -1
  1364. package/dist/core/workflows/contrato/reparar-argumentos.js.map +1 -1
  1365. package/dist/core/workflows/contrato/validador.d.ts.map +1 -1
  1366. package/dist/core/workflows/contrato/validador.js.map +1 -1
  1367. package/dist/core/workflows/contrato/yield.d.ts.map +1 -1
  1368. package/dist/core/workflows/contrato/yield.js.map +1 -1
  1369. package/dist/core/workflows/goal-engine/engine.d.ts +5 -0
  1370. package/dist/core/workflows/goal-engine/engine.d.ts.map +1 -1
  1371. package/dist/core/workflows/goal-engine/engine.js.map +1 -1
  1372. package/dist/core/workflows/goal-engine/errors.d.ts.map +1 -1
  1373. package/dist/core/workflows/goal-engine/errors.js.map +1 -1
  1374. package/dist/core/workflows/goal-engine/index.d.ts.map +1 -1
  1375. package/dist/core/workflows/goal-engine/index.js.map +1 -1
  1376. package/dist/core/workflows/goal-engine/persistence.d.ts.map +1 -1
  1377. package/dist/core/workflows/goal-engine/persistence.js.map +1 -1
  1378. package/dist/core/workflows/goal-engine/prompts.d.ts.map +1 -1
  1379. package/dist/core/workflows/goal-engine/prompts.js.map +1 -1
  1380. package/dist/core/workflows/goal-engine/state.d.ts.map +1 -1
  1381. package/dist/core/workflows/goal-engine/state.js.map +1 -1
  1382. package/dist/core/workflows/goal-engine/tools.d.ts.map +1 -1
  1383. package/dist/core/workflows/goal-engine/tools.js.map +1 -1
  1384. package/dist/core/workflows/goal-engine/types.d.ts.map +1 -1
  1385. package/dist/core/workflows/goal-engine/types.js.map +1 -1
  1386. package/dist/core/workflows/goal-engine/worktree-fingerprint.d.ts.map +1 -1
  1387. package/dist/core/workflows/goal-engine/worktree-fingerprint.js.map +1 -1
  1388. package/dist/core/workflows/graph-sync.d.ts.map +1 -1
  1389. package/dist/core/workflows/graph-sync.js.map +1 -1
  1390. package/dist/core/workflows/graph.d.ts.map +1 -1
  1391. package/dist/core/workflows/graph.js.map +1 -1
  1392. package/dist/core/workflows/index.d.ts +6 -0
  1393. package/dist/core/workflows/index.d.ts.map +1 -1
  1394. package/dist/core/workflows/index.js +3 -0
  1395. package/dist/core/workflows/index.js.map +1 -1
  1396. package/dist/core/workflows/journal.d.ts.map +1 -1
  1397. package/dist/core/workflows/journal.js.map +1 -1
  1398. package/dist/core/workflows/manager.d.ts.map +1 -1
  1399. package/dist/core/workflows/manager.js.map +1 -1
  1400. package/dist/core/workflows/provider-caps.d.ts +103 -0
  1401. package/dist/core/workflows/provider-caps.d.ts.map +1 -0
  1402. package/dist/core/workflows/provider-caps.js +235 -0
  1403. package/dist/core/workflows/provider-caps.js.map +1 -0
  1404. package/dist/core/workflows/resolve-script.d.ts.map +1 -1
  1405. package/dist/core/workflows/resolve-script.js.map +1 -1
  1406. package/dist/core/workflows/runtime.d.ts.map +1 -1
  1407. package/dist/core/workflows/runtime.js.map +1 -1
  1408. package/dist/core/workflows/save-as-skill.d.ts.map +1 -1
  1409. package/dist/core/workflows/save-as-skill.js.map +1 -1
  1410. package/dist/core/workflows/shared-store.d.ts.map +1 -1
  1411. package/dist/core/workflows/shared-store.js.map +1 -1
  1412. package/dist/core/workflows/soft-budget.d.ts +27 -0
  1413. package/dist/core/workflows/soft-budget.d.ts.map +1 -0
  1414. package/dist/core/workflows/soft-budget.js +47 -0
  1415. package/dist/core/workflows/soft-budget.js.map +1 -0
  1416. package/dist/core/workflows/subagent-host.d.ts.map +1 -1
  1417. package/dist/core/workflows/subagent-host.js.map +1 -1
  1418. package/dist/core/workflows/tool-scheduling.d.ts +47 -0
  1419. package/dist/core/workflows/tool-scheduling.d.ts.map +1 -0
  1420. package/dist/core/workflows/tool-scheduling.js +102 -0
  1421. package/dist/core/workflows/tool-scheduling.js.map +1 -0
  1422. package/dist/core/workflows/tool-workflow.d.ts.map +1 -1
  1423. package/dist/core/workflows/tool-workflow.js.map +1 -1
  1424. package/dist/core/workflows/types.d.ts.map +1 -1
  1425. package/dist/core/workflows/types.js.map +1 -1
  1426. package/dist/core/workflows/worktree.d.ts.map +1 -1
  1427. package/dist/core/workflows/worktree.js.map +1 -1
  1428. package/dist/extensions/index.d.ts.map +1 -1
  1429. package/dist/extensions/index.js.map +1 -1
  1430. package/dist/extensions/llama/client.d.ts.map +1 -1
  1431. package/dist/extensions/llama/client.js.map +1 -1
  1432. package/dist/extensions/llama/huggingface.d.ts.map +1 -1
  1433. package/dist/extensions/llama/huggingface.js.map +1 -1
  1434. package/dist/extensions/llama/index.d.ts.map +1 -1
  1435. package/dist/extensions/llama/index.js.map +1 -1
  1436. package/dist/extensions/llama/provider.d.ts.map +1 -1
  1437. package/dist/extensions/llama/provider.js.map +1 -1
  1438. package/dist/extensions/llama/ui.d.ts.map +1 -1
  1439. package/dist/extensions/llama/ui.js.map +1 -1
  1440. package/dist/extensions/remoto/index.d.ts.map +1 -1
  1441. package/dist/extensions/remoto/index.js.map +1 -1
  1442. package/dist/index.d.ts.map +1 -1
  1443. package/dist/index.js.map +1 -1
  1444. package/dist/main.d.ts.map +1 -1
  1445. package/dist/main.js +71 -3
  1446. package/dist/main.js.map +1 -1
  1447. package/dist/migrations.d.ts.map +1 -1
  1448. package/dist/migrations.js.map +1 -1
  1449. package/dist/modes/acp/acp-mode.d.ts.map +1 -1
  1450. package/dist/modes/acp/acp-mode.js.map +1 -1
  1451. package/dist/modes/acp/events.d.ts.map +1 -1
  1452. package/dist/modes/acp/events.js.map +1 -1
  1453. package/dist/modes/index.d.ts.map +1 -1
  1454. package/dist/modes/index.js.map +1 -1
  1455. package/dist/modes/interactive/components/armin.d.ts.map +1 -1
  1456. package/dist/modes/interactive/components/armin.js.map +1 -1
  1457. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  1458. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  1459. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  1460. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  1461. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
  1462. package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  1463. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  1464. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  1465. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  1466. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  1467. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  1468. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  1469. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
  1470. package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
  1471. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  1472. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  1473. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
  1474. package/dist/modes/interactive/components/custom-entry.js.map +1 -1
  1475. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  1476. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  1477. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
  1478. package/dist/modes/interactive/components/daxnuts.js.map +1 -1
  1479. package/dist/modes/interactive/components/diff.d.ts.map +1 -1
  1480. package/dist/modes/interactive/components/diff.js.map +1 -1
  1481. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
  1482. package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
  1483. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -1
  1484. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
  1485. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  1486. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  1487. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  1488. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  1489. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  1490. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  1491. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
  1492. package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
  1493. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  1494. package/dist/modes/interactive/components/footer.js.map +1 -1
  1495. package/dist/modes/interactive/components/home-screen.d.ts +2 -0
  1496. package/dist/modes/interactive/components/home-screen.d.ts.map +1 -1
  1497. package/dist/modes/interactive/components/home-screen.js +5 -6
  1498. package/dist/modes/interactive/components/home-screen.js.map +1 -1
  1499. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  1500. package/dist/modes/interactive/components/index.js.map +1 -1
  1501. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  1502. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  1503. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  1504. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  1505. package/dist/modes/interactive/components/markdown-transform.d.ts.map +1 -1
  1506. package/dist/modes/interactive/components/markdown-transform.js.map +1 -1
  1507. package/dist/modes/interactive/components/mermaid.d.ts.map +1 -1
  1508. package/dist/modes/interactive/components/mermaid.js.map +1 -1
  1509. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  1510. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  1511. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  1512. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  1513. package/dist/modes/interactive/components/prompt-optimization.d.ts.map +1 -1
  1514. package/dist/modes/interactive/components/prompt-optimization.js.map +1 -1
  1515. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  1516. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  1517. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  1518. package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  1519. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  1520. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  1521. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  1522. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  1523. package/dist/modes/interactive/components/settings-submenu.d.ts.map +1 -1
  1524. package/dist/modes/interactive/components/settings-submenu.js.map +1 -1
  1525. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
  1526. package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
  1527. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  1528. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  1529. package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
  1530. package/dist/modes/interactive/components/status-indicator.js.map +1 -1
  1531. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
  1532. package/dist/modes/interactive/components/theme-selector.js.map +1 -1
  1533. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  1534. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  1535. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  1536. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  1537. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  1538. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  1539. package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -1
  1540. package/dist/modes/interactive/components/trust-selector.js.map +1 -1
  1541. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  1542. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  1543. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  1544. package/dist/modes/interactive/components/user-message.js.map +1 -1
  1545. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
  1546. package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
  1547. package/dist/modes/interactive/external-editor.d.ts.map +1 -1
  1548. package/dist/modes/interactive/external-editor.js.map +1 -1
  1549. package/dist/modes/interactive/interactive-mode.d.ts +19 -0
  1550. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  1551. package/dist/modes/interactive/interactive-mode.js +29 -0
  1552. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  1553. package/dist/modes/interactive/model-catalog-refresh.d.ts.map +1 -1
  1554. package/dist/modes/interactive/model-catalog-refresh.js.map +1 -1
  1555. package/dist/modes/interactive/model-search.d.ts.map +1 -1
  1556. package/dist/modes/interactive/model-search.js.map +1 -1
  1557. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
  1558. package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
  1559. package/dist/modes/interactive/theme/theme.d.ts +2 -2
  1560. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  1561. package/dist/modes/interactive/theme/theme.js.map +1 -1
  1562. package/dist/modes/json-event.d.ts.map +1 -1
  1563. package/dist/modes/json-event.js.map +1 -1
  1564. package/dist/modes/print-mode.d.ts.map +1 -1
  1565. package/dist/modes/print-mode.js.map +1 -1
  1566. package/dist/modes/rpc/jsonl.d.ts.map +1 -1
  1567. package/dist/modes/rpc/jsonl.js.map +1 -1
  1568. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  1569. package/dist/modes/rpc/rpc-client.js.map +1 -1
  1570. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  1571. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  1572. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  1573. package/dist/modes/rpc/rpc-types.js.map +1 -1
  1574. package/dist/package-manager-cli.d.ts.map +1 -1
  1575. package/dist/package-manager-cli.js.map +1 -1
  1576. package/dist/rpc-entry.d.ts.map +1 -1
  1577. package/dist/rpc-entry.js +0 -0
  1578. package/dist/rpc-entry.js.map +1 -1
  1579. package/dist/server/attach.d.ts.map +1 -1
  1580. package/dist/server/attach.js.map +1 -1
  1581. package/dist/server/create-harness.d.ts.map +1 -1
  1582. package/dist/server/create-harness.js.map +1 -1
  1583. package/dist/server/extension-ops.d.ts.map +1 -1
  1584. package/dist/server/extension-ops.js.map +1 -1
  1585. package/dist/server/pi-server-service.d.ts.map +1 -1
  1586. package/dist/server/pi-server-service.js.map +1 -1
  1587. package/dist/server/scheduler-tick.d.ts.map +1 -1
  1588. package/dist/server/scheduler-tick.js.map +1 -1
  1589. package/dist/server/serve.d.ts.map +1 -1
  1590. package/dist/server/serve.js.map +1 -1
  1591. package/dist/server/transcript.d.ts.map +1 -1
  1592. package/dist/server/transcript.js.map +1 -1
  1593. package/dist/telegram/api.d.ts +6 -0
  1594. package/dist/telegram/api.d.ts.map +1 -1
  1595. package/dist/telegram/api.js.map +1 -1
  1596. package/dist/telegram/bridge.d.ts.map +1 -1
  1597. package/dist/telegram/bridge.js.map +1 -1
  1598. package/dist/telegram/journal.d.ts.map +1 -1
  1599. package/dist/telegram/journal.js.map +1 -1
  1600. package/dist/telegram/servidor.d.ts.map +1 -1
  1601. package/dist/telegram/servidor.js.map +1 -1
  1602. package/dist/utils/abort.d.ts.map +1 -1
  1603. package/dist/utils/abort.js.map +1 -1
  1604. package/dist/utils/ansi.d.ts.map +1 -1
  1605. package/dist/utils/ansi.js.map +1 -1
  1606. package/dist/utils/changelog.d.ts.map +1 -1
  1607. package/dist/utils/changelog.js.map +1 -1
  1608. package/dist/utils/child-process.d.ts.map +1 -1
  1609. package/dist/utils/child-process.js.map +1 -1
  1610. package/dist/utils/clipboard-image.d.ts.map +1 -1
  1611. package/dist/utils/clipboard-image.js.map +1 -1
  1612. package/dist/utils/clipboard-native.d.ts.map +1 -1
  1613. package/dist/utils/clipboard-native.js.map +1 -1
  1614. package/dist/utils/clipboard.d.ts.map +1 -1
  1615. package/dist/utils/clipboard.js.map +1 -1
  1616. package/dist/utils/deprecation.d.ts.map +1 -1
  1617. package/dist/utils/deprecation.js.map +1 -1
  1618. package/dist/utils/exif-orientation.d.ts.map +1 -1
  1619. package/dist/utils/exif-orientation.js.map +1 -1
  1620. package/dist/utils/frontmatter.d.ts.map +1 -1
  1621. package/dist/utils/frontmatter.js.map +1 -1
  1622. package/dist/utils/fs-watch.d.ts.map +1 -1
  1623. package/dist/utils/fs-watch.js.map +1 -1
  1624. package/dist/utils/git.d.ts.map +1 -1
  1625. package/dist/utils/git.js.map +1 -1
  1626. package/dist/utils/html.d.ts.map +1 -1
  1627. package/dist/utils/html.js.map +1 -1
  1628. package/dist/utils/image-convert.d.ts.map +1 -1
  1629. package/dist/utils/image-convert.js.map +1 -1
  1630. package/dist/utils/image-process.d.ts.map +1 -1
  1631. package/dist/utils/image-process.js.map +1 -1
  1632. package/dist/utils/image-resize-core.d.ts.map +1 -1
  1633. package/dist/utils/image-resize-core.js.map +1 -1
  1634. package/dist/utils/image-resize-worker.d.ts.map +1 -1
  1635. package/dist/utils/image-resize-worker.js.map +1 -1
  1636. package/dist/utils/image-resize.d.ts.map +1 -1
  1637. package/dist/utils/image-resize.js.map +1 -1
  1638. package/dist/utils/json.d.ts.map +1 -1
  1639. package/dist/utils/json.js.map +1 -1
  1640. package/dist/utils/management-http.d.ts.map +1 -1
  1641. package/dist/utils/management-http.js.map +1 -1
  1642. package/dist/utils/mime.d.ts.map +1 -1
  1643. package/dist/utils/mime.js.map +1 -1
  1644. package/dist/utils/open-browser.d.ts.map +1 -1
  1645. package/dist/utils/open-browser.js.map +1 -1
  1646. package/dist/utils/paths.d.ts.map +1 -1
  1647. package/dist/utils/paths.js.map +1 -1
  1648. package/dist/utils/photon.d.ts.map +1 -1
  1649. package/dist/utils/photon.js.map +1 -1
  1650. package/dist/utils/pi-user-agent.d.ts.map +1 -1
  1651. package/dist/utils/pi-user-agent.js.map +1 -1
  1652. package/dist/utils/shell.d.ts.map +1 -1
  1653. package/dist/utils/shell.js.map +1 -1
  1654. package/dist/utils/sleep.d.ts.map +1 -1
  1655. package/dist/utils/sleep.js.map +1 -1
  1656. package/dist/utils/syntax-highlight.d.ts.map +1 -1
  1657. package/dist/utils/syntax-highlight.js.map +1 -1
  1658. package/dist/utils/text.d.ts.map +1 -1
  1659. package/dist/utils/text.js.map +1 -1
  1660. package/dist/utils/tool-result-images.d.ts.map +1 -1
  1661. package/dist/utils/tool-result-images.js.map +1 -1
  1662. package/dist/utils/tools-manager.d.ts.map +1 -1
  1663. package/dist/utils/tools-manager.js.map +1 -1
  1664. package/dist/utils/version-check.d.ts.map +1 -1
  1665. package/dist/utils/version-check.js.map +1 -1
  1666. package/dist/utils/windows-self-update.d.ts.map +1 -1
  1667. package/dist/utils/windows-self-update.js.map +1 -1
  1668. package/docs/development-fork.md +170 -0
  1669. package/docs/docs.json +25 -0
  1670. package/docs/modules-infraestructura.md +115 -0
  1671. package/docs/modules-motor.md +160 -0
  1672. package/docs/modules-producto.md +179 -0
  1673. package/docs/modules-seguridad.md +158 -0
  1674. package/package.json +113 -113
  1675. package/dist/core/commit/diff.d.ts.map +0 -1
  1676. package/dist/core/commit/diff.js.map +0 -1
  1677. package/dist/core/commit/mensaje.d.ts +0 -80
  1678. package/dist/core/commit/mensaje.d.ts.map +0 -1
  1679. package/dist/core/commit/mensaje.js +0 -207
  1680. package/dist/core/commit/mensaje.js.map +0 -1
  1681. /package/dist/core/{commit → commits}/diff.d.ts +0 -0
  1682. /package/dist/core/{commit → commits}/diff.js +0 -0
@@ -0,0 +1,51 @@
1
+ /**
2
+ * C02 — append-only AUTO: cableado por la API pública de extensiones,
3
+ * a coste cero contra el presupuesto de sincronización (este directorio no
4
+ * existe en upstream). Mismo patrón que `core/secretos/extension.ts` y LSP-01:
5
+ *
6
+ * ada-cli -e packages/coding-agent/src/core/appendonly/extension.ts
7
+ *
8
+ * Un gancho, ya emitido por el runner sin tocar upstream:
9
+ *
10
+ * - `context` (`runner.emitContext`, invocado desde `transformContext` en cada
11
+ * petición al proveedor): si `appendOnlyAutoPara(ctx.model.baseUrl,
12
+ * ctx.model.id)` decide que el proveedor activo reaprovecha prefijo
13
+ * (deepseek, loopback, RFC1918), construye/reusa un AppendOnlyContextManager
14
+ * y refleja en él los mensajes salientes. El manager queda disponible como
15
+ * libro mayor del contexto: `prefijoEstable()` fija la frontera de
16
+ * prompt-cache y `integrarConPruning(mgr, guard)` da a banco/pruning el
17
+ * cachePrefixLen correcto. Los mensajes NO se modifican: append-only es una
18
+ * contabilidad y garantía de inmutabilidad, no un transform.
19
+ *
20
+ * Si el modelo/baseUrl cambia a un proveedor sin prefix reuse, o el historial
21
+ * se encoge (navegación de árbol a otra rama), el estado se descarta: el
22
+ * manager solo tiene sentido mientras el stream de mensajes crece por append.
23
+ *
24
+ * Migrar a builtin sería una línea en `builtInExtensions` el día que haya
25
+ * margen — este fichero no cambia.
26
+ */
27
+ import { AppendOnlyContextManager } from "./append-only-context.js";
28
+ import { appendOnlyAutoPara } from "./auto.js";
29
+ export default function appendOnlyAutoExtension(pi) {
30
+ let estado;
31
+ pi.on("context", (event, ctx) => {
32
+ const decision = appendOnlyAutoPara(ctx.model?.baseUrl, ctx.model?.id);
33
+ if (!decision.activo) {
34
+ estado = undefined;
35
+ return undefined;
36
+ }
37
+ const mensajes = event.messages;
38
+ // El historial se encogió (cambio de rama/sesión): empezar libro nuevo.
39
+ if (estado && mensajes.length < estado.reflejados)
40
+ estado = undefined;
41
+ estado ??= { mgr: new AppendOnlyContextManager({ idPrefix: "ao-" }), reflejados: 0 };
42
+ for (let i = estado.reflejados; i < mensajes.length; i += 1) {
43
+ estado.mgr.append(mensajes[i]);
44
+ estado.reflejados += 1;
45
+ }
46
+ // Congelar la frontera de prompt-cache para este turno.
47
+ estado.mgr.prefijoEstable();
48
+ return undefined;
49
+ });
50
+ }
51
+ //# sourceMappingURL=extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension.js","sourceRoot":"","sources":["../../../src/core/appendonly/extension.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAGH,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAQ/C,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAAC,EAAgB;IAC/D,IAAI,MAA8B,CAAC;IAEnC,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QAC/B,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACvE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACtB,MAAM,GAAG,SAAS,CAAC;YACnB,OAAO,SAAS,CAAC;QAClB,CAAC;QACD,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAChC,wEAAwE;QACxE,IAAI,MAAM,IAAI,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,UAAU;YAAE,MAAM,GAAG,SAAS,CAAC;QACtE,MAAM,KAAK,EAAE,GAAG,EAAE,IAAI,wBAAwB,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;QACrF,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7D,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAsD,CAAC,CAAC;YACpF,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;QACxB,CAAC;QACD,wDAAwD;QACxD,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC;IAClB,CAAC,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * AppendOnly — AG2 (Fase 1). Barril público del paquete.
3
+ *
4
+ * Consumidores previstos (integración por extensión, sin hunks upstream):
5
+ * - banco/pruning.ts: `prefijoEstable().hasta` como cachePrefixLen protegido.
6
+ * - compactacion/ (prune/shake/handoff): operar solo sobre `contextoActivo()`;
7
+ * persistencia vía `serializarAJournal()` + `reconstruirDesde()`.
8
+ */
9
+ export { AppendOnlyContextManager, type AppendOnlyOptions, type EntradaContexto, type PrefijoEstable, type TipoEntrada, } from "./append-only-context.ts";
10
+ import type { PruningGuard } from "../banco/pruning.ts";
11
+ import type { AppendOnlyContextManager } from "./append-only-context.ts";
12
+ export { appendOnlyAutoPara, type DecisionAppendOnlyAuto } from "./auto.ts";
13
+ /**
14
+ * Longitud de prefijo protegido expresada en MENSAJES ACTIVOS (lo que consume
15
+ * PruningGuard.prune como cachePrefixLen).
16
+ *
17
+ * Sin compactación es 1:1: cada entrada del manager es un mensaje enviado, así
18
+ * que `prefijoEstable().hasta` entradas == ese número de mensajes iniciales.
19
+ *
20
+ * Con compactación, el contexto activo es [resumen] + entradas vivas desde el
21
+ * puntero: el resumen ocupa el índice `puntero`, de modo que el prefijo
22
+ * congelado cubre `hasta` entradas == `hasta - puntero` mensajes activos
23
+ * (el propio resumen más las vivas que ya formaban parte del prefijo).
24
+ * Si la congelación es anterior al último resumen, no hay solape y es 0.
25
+ */
26
+ export declare function longitudPrefijoProtegido(mgr: AppendOnlyContextManager): number;
27
+ /** Vista podadora consciente del prefijo estable: nunca poda dentro de él. */
28
+ export interface EnlacePruning {
29
+ /** cachePrefixLen actual (mensajes activos protegidos). */
30
+ longitudPrefijo(): number;
31
+ /** Poda solo el sufijo `[longitudPrefijo(), mensajes.length)`. */
32
+ podar<T>(mensajes: T[]): T[];
33
+ }
34
+ /**
35
+ * C02 — consumidor real mínimo: alimenta un PruningGuard (banco/pruning.ts,
36
+ * que ya cita este prefijo en su cabecera) con `prefijoEstable()` para que el
37
+ * prune sea cache-aware de verdad: se poda el sufijo, y el prefijo estable que
38
+ * sostiene el prompt-cache queda intacto byte a byte.
39
+ */
40
+ export declare function integrarConPruning(mgr: AppendOnlyContextManager, podador: PruningGuard): EnlacePruning;
41
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/appendonly/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACN,wBAAwB,EACxB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,WAAW,GAChB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEzE,OAAO,EAAE,kBAAkB,EAAE,KAAK,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAE5E;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,wBAAwB,GAAG,MAAM,CAI9E;AAED,8EAA8E;AAC9E,MAAM,WAAW,aAAa;IAC7B,2DAA2D;IAC3D,eAAe,IAAI,MAAM,CAAC;IAC1B,kEAAkE;IAClE,KAAK,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;CAC7B;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,wBAAwB,EAAE,OAAO,EAAE,YAAY,GAAG,aAAa,CAKtG"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * AppendOnly — AG2 (Fase 1). Barril público del paquete.
3
+ *
4
+ * Consumidores previstos (integración por extensión, sin hunks upstream):
5
+ * - banco/pruning.ts: `prefijoEstable().hasta` como cachePrefixLen protegido.
6
+ * - compactacion/ (prune/shake/handoff): operar solo sobre `contextoActivo()`;
7
+ * persistencia vía `serializarAJournal()` + `reconstruirDesde()`.
8
+ */
9
+ export { AppendOnlyContextManager, } from "./append-only-context.js";
10
+ export { appendOnlyAutoPara } from "./auto.js";
11
+ /**
12
+ * Longitud de prefijo protegido expresada en MENSAJES ACTIVOS (lo que consume
13
+ * PruningGuard.prune como cachePrefixLen).
14
+ *
15
+ * Sin compactación es 1:1: cada entrada del manager es un mensaje enviado, así
16
+ * que `prefijoEstable().hasta` entradas == ese número de mensajes iniciales.
17
+ *
18
+ * Con compactación, el contexto activo es [resumen] + entradas vivas desde el
19
+ * puntero: el resumen ocupa el índice `puntero`, de modo que el prefijo
20
+ * congelado cubre `hasta` entradas == `hasta - puntero` mensajes activos
21
+ * (el propio resumen más las vivas que ya formaban parte del prefijo).
22
+ * Si la congelación es anterior al último resumen, no hay solape y es 0.
23
+ */
24
+ export function longitudPrefijoProtegido(mgr) {
25
+ const prefijo = mgr.prefijoEstable();
26
+ if (mgr.punteroCompactacion === null)
27
+ return prefijo.hasta;
28
+ return Math.max(0, prefijo.hasta - mgr.punteroCompactacion);
29
+ }
30
+ /**
31
+ * C02 — consumidor real mínimo: alimenta un PruningGuard (banco/pruning.ts,
32
+ * que ya cita este prefijo en su cabecera) con `prefijoEstable()` para que el
33
+ * prune sea cache-aware de verdad: se poda el sufijo, y el prefijo estable que
34
+ * sostiene el prompt-cache queda intacto byte a byte.
35
+ */
36
+ export function integrarConPruning(mgr, podador) {
37
+ return {
38
+ longitudPrefijo: () => longitudPrefijoProtegido(mgr),
39
+ podar: (mensajes) => podador.prune(mensajes, longitudPrefijoProtegido(mgr)),
40
+ };
41
+ }
42
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/appendonly/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACN,wBAAwB,GAKxB,MAAM,0BAA0B,CAAC;AAKlC,OAAO,EAAE,kBAAkB,EAA+B,MAAM,WAAW,CAAC;AAE5E;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,wBAAwB,CAAC,GAA6B;IACrE,MAAM,OAAO,GAAG,GAAG,CAAC,cAAc,EAAE,CAAC;IACrC,IAAI,GAAG,CAAC,mBAAmB,KAAK,IAAI;QAAE,OAAO,OAAO,CAAC,KAAK,CAAC;IAC3D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC,mBAAmB,CAAC,CAAC;AAC7D,CAAC;AAUD;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAA6B,EAAE,OAAqB;IACtF,OAAO;QACN,eAAe,EAAE,GAAG,EAAE,CAAC,wBAAwB,CAAC,GAAG,CAAC;QACpD,KAAK,EAAE,CAAI,QAAa,EAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,wBAAwB,CAAC,GAAG,CAAC,CAAC;KACxF,CAAC;AACH,CAAC"}
@@ -1 +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"]}
1
+ {"version":3,"file":"generados.d.ts","sourceRoot":"","sources":["../../../src/core/aprobacion/generados.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,WAAW,eAAe;IAC/B,mFAAmF;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"}
@@ -1 +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"]}
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;IAChD,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,wEAAwE;QACxE,uEAAuE;QACvE,8CAA8C;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;AACb,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,KAAsB;IACpE,OAAO;QACN,eAAe,IAAI,uCAAuC,KAAK,CAAC,MAAM,WAAW;QACjF,OAAO,KAAK,CAAC,KAAK,EAAE;QACpB,mFAAmF;QACnF,qFAAqF;QACrF,oEAAoE;QACpE,2EAA2E;KAC3E,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACd,CAAC"}
@@ -1 +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"]}
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,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,4EAA4E;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,qEAAqE;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,sDAAsD;AACtD,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C"}
@@ -1 +1 @@
1
- {"version":3,"file":"politica-de-maquina.js","sourceRoot":"","sources":["../../../src/core/aprobacion/politica-de-maquina.ts"],"names":[],"mappings":"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","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"]}
1
+ {"version":3,"file":"politica-de-maquina.js","sourceRoot":"","sources":["../../../src/core/aprobacion/politica-de-maquina.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAG3C,oEAAoE;AACpE,MAAM,KAAK,GAA2B,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AA4BzE,qEAAqE;AACrE,MAAM,UAAU,gBAAgB,CAAC,aAA8B,OAAO,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG;IACrG,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;QAC5B,mEAAmE;QACnE,yEAAyE;QACzE,yDAAyD;QACzD,qEAAqE;QACrE,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,iBAAiB,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;IACrF,CAAC;IACD,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,gDAAgD,CAAC;IACzD,CAAC;IACD,OAAO,wBAAwB,CAAC;AACjC,CAAC;AAED,SAAS,MAAM,CAAC,CAAU;IACzB,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAK,KAA2B,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAI,GAAG,gBAAgB,EAAE;IAC9D,IAAI,KAAa,CAAC;IAClB,IAAI,CAAC;QACJ,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,MAAM,GAAI,KAA+B,CAAC,IAAI,CAAC;QACrD,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACzB,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,oBAAoB,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QAC5F,CAAC;QACD,qEAAqE;QACrE,gCAAgC;QAChC,OAAO;YACN,QAAQ,EAAE,IAAI;YACd,IAAI;YACJ,MAAM,EAAE,UAAU;YAClB,oBAAoB,EAAE,KAAK;YAC3B,KAAK,EAAE,kCAAkC,IAAI,4BAA4B,MAAM,IAAI,OAAO,GAAG;SAC7F,CAAC;IACH,CAAC;IAED,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACJ,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACR,OAAO;YACN,QAAQ,EAAE,IAAI;YACd,IAAI;YACJ,MAAM,EAAE,UAAU;YAClB,oBAAoB,EAAE,KAAK;YAC3B,KAAK,EAAE,6BAA6B,IAAI,oBAAoB;SAC5D,CAAC;IACH,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACnD,OAAO;YACN,QAAQ,EAAE,IAAI;YACd,IAAI;YACJ,MAAM,EAAE,UAAU;YAClB,oBAAoB,EAAE,KAAK;YAC3B,KAAK,EAAE,6BAA6B,IAAI,kBAAkB;SAC1D,CAAC;IACH,CAAC;IAED,MAAM,CAAC,GAAG,MAAiC,CAAC;IAC5C,sEAAsE;IACtE,yEAAyE;IACzE,IAAI,CAAC,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC;QACzD,OAAO;YACN,QAAQ,EAAE,IAAI;YACd,IAAI;YACJ,MAAM,EAAE,UAAU;YAClB,oBAAoB,EAAE,KAAK;YAC3B,KAAK,EAAE,qBAAqB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,IAAI,wBAAwB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;SAC7G,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAsB;QACnC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;YAC7B,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,EAAE;YAC9E,CAAC,CAAC,EAAE,CAAC;QACN,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7D,CAAC;IAEF,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAC9C,OAAO;QACN,QAAQ;QACR,IAAI;QACJ,MAAM,EAAE,UAAU;QAClB,oBAAoB,EAAE,QAAQ;QAC9B,KAAK,EAAE,QAAQ;YACd,CAAC,CAAC,6BAA6B,IAAI,0DAA0D;YAC7F,CAAC,CAAC,EAAE;KACL,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,sBAAsB,CAAC,IAAY;IAC3C,MAAM,aAAa,GAAG,CAAC,CAAS,EAAW,EAAE;QAC5C,IAAI,CAAC;YACJ,UAAU,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;YAC9B,OAAO,IAAI,CAAC;QACb,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC,CAAC;IACF,IAAI,aAAa,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,CAAC;QACJ,yEAAyE;QACzE,2DAA2D;QAC3D,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1B,QAAQ,CAAC,GAAG,CAAC,CAAC;QACd,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,MAAmB,EAAE,OAA0B;IAC3E,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAChD,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QACnC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC5E,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC;IAC3C,IAAI,CAAC,KAAK;QAAE,OAAO,MAAM,CAAC;IAC1B,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;AACvE,CAAC;AAED;;;;;;GAMG;AACH,IAAI,QAAQ,GAA6B,IAAI,CAAC;AAE9C,MAAM,UAAU,iBAAiB;IAChC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,QAAQ,GAAG,qBAAqB,EAAE,CAAC;QACnC,IAAI,QAAQ,CAAC,KAAK;YAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,wBAAwB;IACvC,QAAQ,GAAG,IAAI,CAAC;AACjB,CAAC"}
@@ -86,5 +86,5 @@ export interface EntradaDecision {
86
86
  export declare function leerDenegadas(config: {
87
87
  permissions?: Record<string, unknown>;
88
88
  } | undefined): string[];
89
- export declare function decidir({ tool, args, modo, agentDir, home, denegadas, maquina: maquinaDada }: EntradaDecision): Decision;
89
+ export declare function decidir({ tool, args, modo, agentDir, home, denegadas, maquina: maquinaDada, }: EntradaDecision): Decision;
90
90
  //# sourceMappingURL=politica.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"politica.d.ts","sourceRoot":"","sources":["../../../src/core/aprobacion/politica.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAQH,OAAO,EAAE,KAAK,iBAAiB,EAAmC,MAAM,0BAA0B,CAAC;AAenG,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,WAAW,CAAC;AAC9D,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;AAC9D,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,CAAC;AAEzE,MAAM,WAAW,QAAQ;IACxB,SAAS,EAAE,mBAAmB,CAAC;IAC/B,mFAA+E;IAC/E,QAAQ,EAAE,MAAM,CAAC;IACjB,sFAAqF;IACrF,MAAM,EAAE,MAAM,CAAC;CACf;AAkCD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAY/C;AAmJD,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC5B;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAAG,SAAS,GAAG,MAAM,EAAE,CAGrG;AAED,wBAAgB,OAAO,CAAC,EACvB,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,IAAI,EACJ,SAAS,EACT,OAAO,EAAE,WAAW,EACpB,EAAE,eAAe,GAAG,QAAQ,CA4G5B","sourcesContent":["/**\n * Aprobación por herramienta.\n *\n * Antes de esto no había política ninguna: `beforeToolCall` disparaba los hooks\n * del usuario y las extensiones, y `permissions.level` —que existe en settings\n * desde siempre— solo lo leían los propios hooks. Ninguna tool se consultaba\n * contra él. Es decir, el nivel de permisos no gobernaba los permisos.\n *\n * El orden de las comprobaciones ES la propiedad de seguridad, y por eso está\n * escrito de arriba abajo en `decidir()` y no repartido:\n *\n * 1. Rutas protegidas — denegado SIEMPRE, incluso en `yolo`, no configurable\n * 2. Deny del usuario — denegado SIEMPRE, incluso en `yolo`\n * 3. Modo de la sesión — plan / manual / auto / yolo\n *\n * Que 1 y 2 vayan por delante del modo es lo que hace que el argumento de\n * cumplimiento se sostenga: una política que el propio agente puede desactivar\n * pidiendo `yolo` no es una política, es una sugerencia.\n *\n * Lo desconocido cuenta como ejecución. Una tool de MCP o de una extensión que\n * nadie ha clasificado no puede colarse por el carril de lectura por no estar\n * en ninguna lista.\n */\n\nimport { readFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { CONFIG_DIR_NAME } from \"../../config.ts\";\nimport { DIR_INDICE, DIR_SESION } from \"../audit/rutas.ts\";\nimport { suplantadaPor } from \"../extensiones/suplantacion.ts\";\nimport { marcaDeGenerado, motivoDeGenerado } from \"./generados.ts\";\nimport { type LecturaDePolitica, politicaDeMaquina, recortarModo } from \"./politica-de-maquina.ts\";\n\n/**\n * Segmento `.../<CONFIG_DIR_NAME>/agent/` de CUALQUIER instalación de Ada,\n * no solo `agentDir` (que es la de ESTE equipo).\n *\n * Con `--remoto` los argumentos de `read`/`write`/`bash` pueden nombrar un\n * `auth.json` o un `vault/` que viven en OTRA máquina — el destino de SSH,\n * el contenedor de Docker, la distro de WSL — con su propio `$HOME` y por\n * tanto un `agentDir` que `rutaProtegida` nunca conoce. Comprobar el\n * segmento en vez del prefijo completo protege ambos sin necesitar el\n * `agentDir` del destino, que esta política no tiene forma de calcular.\n */\nconst SEGMENTO_AGENTE_ADA = `/${CONFIG_DIR_NAME}/agent/`;\n\nexport type NivelTool = \"lectura\" | \"escritura\" | \"ejecucion\";\nexport type ModoPermiso = \"plan\" | \"manual\" | \"auto\" | \"yolo\";\nexport type VeredictoAprobacion = \"permitida\" | \"denegada\" | \"preguntar\";\n\nexport interface Decision {\n\tveredicto: VeredictoAprobacion;\n\t/** Qué regla decidió. Va al libro de sesión, así que tiene que ser estable. */\n\tpolitica: string;\n\t/** Texto para el modelo y para el usuario. Vacío cuando no hay nada que explicar. */\n\tmotivo: string;\n}\n\n/** Tools que solo miran. */\nconst LECTURA = new Set([\n\t\"read\",\n\t\"ls\",\n\t\"find\",\n\t\"grep\",\n\t\"ast_search\",\n\t\"session_search\",\n\t\"web_fetch\",\n\t\"web_search\",\n\t\"memory_search\",\n\t\"memory_list\",\n\t\"graph_query\",\n\t\"ask_user_question\",\n\t\"todo_read\",\n]);\n\n/** Tools que cambian estado nuestro, pero no ejecutan nada del sistema. */\nconst ESCRITURA = new Set([\n\t\"edit\",\n\t\"write\",\n\t\"ast_edit\",\n\t\"memory_add\",\n\t\"memory_replace\",\n\t\"memory_remove\",\n\t\"update_project_memory\",\n\t\"scratchpad\",\n\t\"todo\",\n\t\"todo_write\",\n\t\"graph_add\",\n]);\n\n/**\n * ¿Este nombre es de una tool NUESTRA cuyo nivel de confianza da esta política?\n *\n * Lo consulta el registro de extensiones para saber si `registerTool` está\n * suplantando una builtin. `bash` va aparte porque no está en ninguna de las dos\n * listas —lo desconocido ya es ejecución— pero suplantarlo importa igual: el\n * usuario tiene que ver que el `bash` que corre no es el nuestro.\n */\nexport function esNombreDeToolNuestra(tool: string): boolean {\n\treturn LECTURA.has(tool) || ESCRITURA.has(tool) || tool === \"bash\";\n}\n\n/**\n * El nivel de una herramienta. Lo que no está clasificado es ejecución.\n *\n * Falla cerrado a propósito: el coste de equivocarse hacia arriba es una\n * pregunta de más; hacia abajo, es una tool desconocida corriendo sola.\n */\nexport function nivelDe(tool: string): NivelTool {\n\t// Una builtin suplantada por una extensión NO hereda su nivel.\n\t//\n\t// Comprobado ejecutando: una extensión registra `read`, el loader la pone\n\t// encima de la nuestra y el modelo sigue creyendo que llama a la de Ada. Con\n\t// `LECTURA.has(\"read\")` por delante, ese `read` —que puede hacer lo que\n\t// quiera— se permitía siempre y en cualquier modo. Devolver \"ejecucion\" lo\n\t// devuelve al carril de lo desconocido, que es lo que es.\n\tif (suplantadaPor(tool)) return \"ejecucion\";\n\tif (LECTURA.has(tool)) return \"lectura\";\n\tif (ESCRITURA.has(tool)) return \"escritura\";\n\treturn \"ejecucion\";\n}\n\n/** Un directorio protegido aparece como segmento completo de la ruta. */\nfunction contieneSegmento(texto: string, segmento: string): boolean {\n\treturn texto.includes(`/${segmento}/`);\n}\n\n/**\n * ¿El texto nombra el directorio `dir` colgado de `base`, con barra final o sin\n * ella?\n *\n * La comprobación anterior solo miraba `base/dir/`, y por ahí se colaba justo el\n * caso peor. Comprobado ejecutando `decidir`:\n *\n * rm -rf <agentDir>/vault/ -> denegada ruta-protegida\n * rm -rf <agentDir>/vault -> PERMITIDA modo-yolo\n *\n * Es decir, el borrado entero del vault con un comando, porque el nombre de un\n * directorio no lleva barra al final cuando se lo pasas a `rm`. Se arregla aquí,\n * en la comprobación compartida, y no en cada llamada: la misma trampa valía\n * para el vault, para el libro y para cualquier directorio que se añada mañana.\n *\n * El caso sin barra se mide sobre el token y con el final exacto para no\n * llevarse por delante `vault-ejemplo` ni `sesiones/`. Se recorta la puntuación\n * de shell del final porque `rm -rf x/vault;` y `rm -rf x/vault)` son el mismo\n * comando con otro adorno.\n */\nfunction nombraDirectorio(texto: string, base: string, dir: string): boolean {\n\tif (texto.includes(`${base}${dir}/`)) return true;\n\treturn texto.split(/[\\s\"'`]+/).some((t) => t.replace(/[;,)&|>]+$/, \"\").endsWith(`${base}${dir}`));\n}\n\n/**\n * Deja la ruta en la forma con la que se compara.\n *\n * Sin esto la política era papel mojado, y se descubrió EJECUTANDO el producto:\n * el modelo escribe `~/.ada/agent/vault/…`, la tool expande la tilde por dentro\n * y abre el fichero, mientras que la política —que solo ve los argumentos\n * crudos— comparaba contra la ruta absoluta y no reconocía nada. El vault se\n * leyó entero con la política activada y todas las pruebas en verde, porque\n * todas usaban rutas absolutas.\n *\n * Se sustituye en TODO el texto y no solo al principio porque `bash` recibe una\n * línea entera, donde el `~` va detrás del comando.\n */\nfunction normalizar(texto: string, home: string): string {\n\treturn texto.replaceAll(\"$HOME/\", `${home}/`).replaceAll(\"~/\", `${home}/`);\n}\n\n/**\n * Si el texto nombra algo que no se puede tocar, devuelve por qué.\n *\n * Se mira el texto y no una \"ruta\" porque los argumentos no tienen un nombre\n * común (`path`, `file_path`, `command`…) y porque `bash` recibe una línea de\n * shell entera. Para `bash` esto es MEJOR ESFUERZO y hay que decirlo: quien\n * contiene de verdad un comando es el sandbox del sistema operativo, no esta\n * comprobación. Aquí se para lo evidente, que es lo que hace un agente\n * despistado; lo deliberado lo para el kernel.\n */\nfunction rutaProtegida(texto: string, agentDir: string, escribiendo: boolean): string | null {\n\tif (nombraDirectorio(texto, `${agentDir}/`, \"vault\")) return \"el vault cifrado\";\n\t// Generaliza lo de arriba a un vault de Ada en OTRA máquina (ver\n\t// `SEGMENTO_AGENTE_ADA`): mismo motivo, sin depender del `agentDir` local.\n\tif (nombraDirectorio(texto, SEGMENTO_AGENTE_ADA, \"vault\"))\n\t\treturn \"el vault cifrado (de este equipo o de un destino remoto)\";\n\n\t// El libro de auditoría y su índice.\n\t//\n\t// Agujero real, y el más grave que hemos tenido: la política protegía el\n\t// vault y el `auth.json` y dejaba al agente escribir y BORRAR libremente en\n\t// `<agentDir>/sesion/`, que es donde está el registro de lo que ha hecho. Es\n\t// decir, el sujeto de la auditoría tenía permiso de escritura sobre la\n\t// auditoría. Comprobado ejecutando `decidir`: `rm -rf <agentDir>/sesion/`\n\t// salía `permitida`.\n\t//\n\t// Denegado también para LEER, igual que el vault: el libro guarda hashes y\n\t// rutas de todo lo que ha pasado por la sesión, y no hay ninguna tarea\n\t// legítima del agente que necesite leerlo por el sistema de ficheros. Quien\n\t// tiene que verlo lo ve por `ada-cli audit show`, por `audit://` o por el\n\t// panel, que no pasan por esta política porque no son el agente.\n\tfor (const dir of [DIR_SESION, DIR_INDICE]) {\n\t\tif (nombraDirectorio(texto, `${agentDir}/`, dir)) return \"el libro de auditoría de la sesión\";\n\t\tif (nombraDirectorio(texto, SEGMENTO_AGENTE_ADA, dir)) {\n\t\t\treturn \"el libro de auditoría de la sesión (de este equipo o de un destino remoto)\";\n\t\t}\n\t}\n\n\t// Las credenciales de los proveedores, que viven EN CLARO en `auth.json`.\n\t//\n\t// Agujero real y propio: la primera versión de esta política protegía el\n\t// vault, las claves SSH, AWS y los `.env`, y dejaba abierto justo el fichero\n\t// donde están las claves con las que corre el agente. Se comprobó\n\t// ejecutando el producto y las leyó todas. Proteger la caja fuerte y dejar\n\t// las llaves encima no protege nada.\n\t//\n\t// Se compara con el nombre de fichero COMPLETO para no llevarse por delante\n\t// `auth.json.example`, `auth-storage.ts` ni `auth.md`, que son código y\n\t// documentación que el agente sí tiene que poder leer.\n\tfor (const parte of texto.split(/[\\s\"'`]+/)) {\n\t\tconst base = parte.slice(parte.lastIndexOf(\"/\") + 1);\n\t\tif (parte.includes(`${agentDir}/`) && base === \"auth.json\") return \"las credenciales de los proveedores\";\n\t\t// Igual, pero para el `auth.json` de un Ada corriendo en el DESTINO de\n\t\t// `--remoto`: no comparte `agentDir` con este equipo, así que el\n\t\t// segmento genérico es la única forma de reconocerlo.\n\t\tif (parte.includes(SEGMENTO_AGENTE_ADA) && base === \"auth.json\") {\n\t\t\treturn \"las credenciales de los proveedores (de este equipo o de un destino remoto)\";\n\t\t}\n\t\t// Y las de las otras herramientas: están en el mismo portátil y sirven\n\t\t// para lo mismo. Si el agente no ve las nuestras, no hay motivo para que\n\t\t// vea las de Claude Code, Codex, gh, Docker o kubectl.\n\t\tif (base === \".credentials.json\" || base === \".netrc\") return \"credenciales de otra herramienta\";\n\t\tif (contieneSegmento(parte, \".codex\") && base === \"auth.json\") return \"las credenciales de Codex\";\n\t\tif (contieneSegmento(parte, \"gh\") && base === \"hosts.yml\") return \"las credenciales de GitHub CLI\";\n\t\tif (contieneSegmento(parte, \".docker\") && base === \"config.json\") return \"las credenciales de Docker\";\n\t\tif (contieneSegmento(parte, \".kube\") && base === \"config\") return \"el acceso al clúster de Kubernetes\";\n\t}\n\n\tif (contieneSegmento(texto, \".ssh\")) return \"las claves SSH\";\n\tif (contieneSegmento(texto, \".gnupg\")) return \"las claves GPG\";\n\tif (contieneSegmento(texto, \".aws\")) return \"las credenciales de AWS\";\n\n\t// `.env` como nombre de fichero completo, no como prefijo: `.environment.ts`\n\t// es código normal y denegarlo dejaría medio proyecto ilegible sin que nadie\n\t// entendiera por qué.\n\tfor (const parte of texto.split(/[\\s\"'`]+/)) {\n\t\tconst base = parte.slice(parte.lastIndexOf(\"/\") + 1);\n\t\tif (base === \".env\" || base.startsWith(\".env.\")) return \"un fichero de entorno\";\n\t}\n\n\t// La configuración del agente se puede LEER pero no escribir. El\n\t// CVE-2026-25725 de Claude Code fue exactamente esto: código dentro del\n\t// sandbox creaba un settings.json e inyectaba hooks `SessionStart` que\n\t// corrían FUERA. Nuestro settings.json también ejecuta hooks.\n\tif (escribiendo && (texto.includes(`${agentDir}/settings.json`) || texto.includes(`${agentDir}/hooks`))) {\n\t\treturn \"la configuración del agente, que ejecuta hooks\";\n\t}\n\treturn null;\n}\n\n/** Todas las cadenas de los argumentos, a cualquier profundidad. */\nfunction cadenasDe(valor: unknown, acumulado: string[] = []): string[] {\n\tif (typeof valor === \"string\") acumulado.push(valor);\n\telse if (Array.isArray(valor)) for (const v of valor) cadenasDe(v, acumulado);\n\telse if (valor && typeof valor === \"object\") for (const v of Object.values(valor)) cadenasDe(v, acumulado);\n\treturn acumulado;\n}\n\nexport interface EntradaDecision {\n\ttool: string;\n\targs: Record<string, unknown>;\n\tmodo: ModoPermiso;\n\tagentDir: string;\n\t/**\n\t * Directorio del usuario, para resolver `~` y `$HOME` antes de comparar.\n\t *\n\t * Opcional y con `homedir()` por defecto para que el punto de llamada no\n\t * tenga que importarlo: `agent-session.ts` es de upstream y está en el tope\n\t * del presupuesto de fork, donde un `import` nuevo cuesta un hunk. Las\n\t * pruebas lo pasan siempre, así que siguen siendo deterministas.\n\t */\n\thome?: string;\n\t/** Tools que el usuario ha denegado explícitamente en su configuración. */\n\tdenegadas?: string[];\n\t/**\n\t * La política de máquina, para las pruebas.\n\t *\n\t * Opcional, y por defecto la del sistema. NO se lee de una variable de\n\t * entorno a propósito: una variable la pone el propio usuario, así que sería\n\t * la puerta trasera que anula toda la política de un `export`. Quien ya\n\t * ejecuta código en este proceso puede saltársela igual —la frontera es el\n\t * proceso, no esta función—, pero no debe haber un camino cómodo.\n\t */\n\tmaquina?: LecturaDePolitica;\n}\n\n/**\n * Lee `permissions.denied` de la configuración, tolerando que no exista.\n *\n * El bloque `permissions` es un `Record<string, unknown>` en settings, así que\n * lo que hay ahí no está tipado y puede ser cualquier cosa: se filtra a cadenas\n * en vez de confiar. Una entrada mal escrita tiene que perderse ella sola, no\n * tumbar la política entera y con ella la sesión.\n */\nexport function leerDenegadas(config: { permissions?: Record<string, unknown> } | undefined): string[] {\n\tconst lista = (config?.permissions as { denied?: unknown } | undefined)?.denied;\n\treturn Array.isArray(lista) ? lista.filter((x): x is string => typeof x === \"string\") : [];\n}\n\nexport function decidir({\n\ttool,\n\targs,\n\tmodo,\n\tagentDir,\n\thome,\n\tdenegadas,\n\tmaquina: maquinaDada,\n}: EntradaDecision): Decision {\n\tconst casa = home ?? homedir();\n\tconst nivel = nivelDe(tool);\n\n\t// 1. Rutas protegidas. Por delante de todo lo demás, incluido `yolo`.\n\t// `ejecucion` cuenta como escritura: un `bash` puede reescribir el\n\t// settings.json igual de bien que un `write`.\n\tconst escribiendo = nivel !== \"lectura\";\n\tfor (const cadena of cadenasDe(args)) {\n\t\tconst que = rutaProtegida(normalizar(cadena, casa), agentDir, escribiendo);\n\t\tif (que) {\n\t\t\treturn {\n\t\t\t\tveredicto: \"denegada\",\n\t\t\t\tpolitica: \"ruta-protegida\",\n\t\t\t\tmotivo: `Denegado: ${que}. No es configurable y no cambia con el modo de permisos. Si el usuario necesita ese dato, pídeselo.`,\n\t\t\t};\n\t\t}\n\t}\n\n\t// 2. Ficheros generados. Escribir en uno es trabajo que desaparece en la\n\t// siguiente regeneración, y entre medias deja la fuente y el generado\n\t// diciendo cosas distintas.\n\t//\n\t// Va después de las rutas protegidas y antes del modo, porque no es\n\t// negociable por comodidad — pero sí lo levanta el usuario diciéndolo, y\n\t// el mensaje se lo explica al modelo para que lo pida en vez de insistir.\n\tif (escribiendo) {\n\t\tfor (const cadena of cadenasDe(args)) {\n\t\t\t// El filtro es \"se puede abrir\", no \"parece una ruta\".\n\t\t\t//\n\t\t\t// La versión anterior exigía una barra, y con eso `edit` sobre\n\t\t\t// `api.pb.go` —sin directorio— se colaba entera: la guarda estaba\n\t\t\t// puesta, las pruebas en verde, y el fichero generado se editó igual.\n\t\t\t// Solo salió ejecutando el CLI de verdad.\n\t\t\t//\n\t\t\t// Lo que sí se descarta antes de tocar el disco es lo que no puede ser\n\t\t\t// un nombre de fichero: contenido con saltos de línea (el `new_string`\n\t\t\t// de una edición) o cadenas absurdamente largas.\n\t\t\tif (cadena.length === 0 || cadena.length > 400 || cadena.includes(\"\\n\")) continue;\n\t\t\tlet contenido: string;\n\t\t\ttry {\n\t\t\t\tcontenido = readFileSync(normalizar(cadena, casa), \"utf-8\");\n\t\t\t} catch {\n\t\t\t\tcontinue; // no existe o no es un fichero: no hay nada que proteger\n\t\t\t}\n\t\t\tconst marca = marcaDeGenerado(contenido);\n\t\t\tif (marca) {\n\t\t\t\treturn { veredicto: \"denegada\", politica: \"fichero-generado\", motivo: motivoDeGenerado(cadena, marca) };\n\t\t\t}\n\t\t}\n\t}\n\n\t// 3. Lo que el usuario ha denegado. También sobrevive a `yolo`: si no,\n\t// \"denegar\" significaría \"denegar hasta que al agente le convenga\".\n\tif (denegadas?.includes(tool)) {\n\t\treturn {\n\t\t\tveredicto: \"denegada\",\n\t\t\tpolitica: \"deny-de-usuario\",\n\t\t\tmotivo: `Denegado: el usuario ha desactivado \\`${tool}\\` en su configuración.`,\n\t\t};\n\t}\n\n\t// 4. La política de MÁQUINA, que el usuario no puede editar.\n\t//\n\t// Va aquí y no en cada llamante porque `decidir()` la invocan siete\n\t// sitios: un techo que haya que acordarse de poner en cada uno no es un\n\t// techo. Y va antes del modo porque su único poder es recortarlo.\n\t//\n\t// Los dos ámbitos que había —global y proyecto— son ficheros del propio\n\t// usuario, así que la línea con la que el CISO prohíbe `yolo` la borraba\n\t// él mismo con un editor de texto. Ver `politica-de-maquina.ts`.\n\tconst maquina = maquinaDada ?? politicaDeMaquina();\n\tif (maquina.politica?.denegadas?.includes(tool)) {\n\t\treturn {\n\t\t\tveredicto: \"denegada\",\n\t\t\tpolitica: \"deny-de-maquina\",\n\t\t\tmotivo:\n\t\t\t\t`Denegado: \\`${tool}\\` está desactivada por la política de este equipo` +\n\t\t\t\t(maquina.politica.motivo ? `: ${maquina.politica.motivo}` : \".\") +\n\t\t\t\t\" No la levanta el modo de permisos ni la configuración del usuario.\",\n\t\t};\n\t}\n\tconst efectivo = recortarModo(modo, maquina);\n\n\t// 5. El modo de la sesión, ya recortado.\n\tif (nivel === \"lectura\") return { veredicto: \"permitida\", politica: `modo-${efectivo}`, motivo: \"\" };\n\n\t// Que el recorte se NOMBRE en `politica` no es cosmético: ese campo va al\n\t// libro de sesión, así que un auditor puede ver que la decisión la tomó la\n\t// política del equipo y no la preferencia del usuario.\n\tconst sufijo = efectivo === modo ? \"\" : \"-por-politica-de-maquina\";\n\n\tswitch (efectivo) {\n\t\tcase \"plan\":\n\t\t\treturn {\n\t\t\t\tveredicto: \"denegada\",\n\t\t\t\tpolitica: `modo-plan${sufijo}`,\n\t\t\t\tmotivo: \"En modo plan no se actúa: propón el cambio en vez de aplicarlo.\",\n\t\t\t};\n\t\tcase \"manual\":\n\t\t\treturn { veredicto: \"preguntar\", politica: `modo-manual${sufijo}`, motivo: \"\" };\n\t\tcase \"auto\":\n\t\t\treturn nivel === \"escritura\"\n\t\t\t\t? { veredicto: \"permitida\", politica: `modo-auto${sufijo}`, motivo: \"\" }\n\t\t\t\t: { veredicto: \"preguntar\", politica: `modo-auto${sufijo}`, motivo: \"\" };\n\t\tdefault:\n\t\t\treturn { veredicto: \"permitida\", politica: `modo-yolo${sufijo}`, motivo: \"\" };\n\t}\n}\n"]}
1
+ {"version":3,"file":"politica.d.ts","sourceRoot":"","sources":["../../../src/core/aprobacion/politica.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAQH,OAAO,EAAE,KAAK,iBAAiB,EAAmC,MAAM,0BAA0B,CAAC;AAenG,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,WAAW,CAAC;AAC9D,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;AAC9D,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,CAAC;AAEzE,MAAM,WAAW,QAAQ;IACxB,SAAS,EAAE,mBAAmB,CAAC;IAC/B,+EAA+E;IAC/E,QAAQ,EAAE,MAAM,CAAC;IACjB,qFAAqF;IACrF,MAAM,EAAE,MAAM,CAAC;CACf;AAkCD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAY/C;AAmJD,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC5B;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAAG,SAAS,GAAG,MAAM,EAAE,CAGrG;AAED,wBAAgB,OAAO,CAAC,EACvB,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,IAAI,EACJ,SAAS,EACT,OAAO,EAAE,WAAW,GACpB,EAAE,eAAe,GAAG,QAAQ,CA4G5B"}
@@ -1 +1 @@
1
- {"version":3,"file":"politica.js","sourceRoot":"","sources":["../../../src/core/aprobacion/politica.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Aprobación por herramienta.\n *\n * Antes de esto no había política ninguna: `beforeToolCall` disparaba los hooks\n * del usuario y las extensiones, y `permissions.level` —que existe en settings\n * desde siempre— solo lo leían los propios hooks. Ninguna tool se consultaba\n * contra él. Es decir, el nivel de permisos no gobernaba los permisos.\n *\n * El orden de las comprobaciones ES la propiedad de seguridad, y por eso está\n * escrito de arriba abajo en `decidir()` y no repartido:\n *\n * 1. Rutas protegidas — denegado SIEMPRE, incluso en `yolo`, no configurable\n * 2. Deny del usuario — denegado SIEMPRE, incluso en `yolo`\n * 3. Modo de la sesión — plan / manual / auto / yolo\n *\n * Que 1 y 2 vayan por delante del modo es lo que hace que el argumento de\n * cumplimiento se sostenga: una política que el propio agente puede desactivar\n * pidiendo `yolo` no es una política, es una sugerencia.\n *\n * Lo desconocido cuenta como ejecución. Una tool de MCP o de una extensión que\n * nadie ha clasificado no puede colarse por el carril de lectura por no estar\n * en ninguna lista.\n */\n\nimport { readFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { CONFIG_DIR_NAME } from \"../../config.ts\";\nimport { DIR_INDICE, DIR_SESION } from \"../audit/rutas.ts\";\nimport { suplantadaPor } from \"../extensiones/suplantacion.ts\";\nimport { marcaDeGenerado, motivoDeGenerado } from \"./generados.ts\";\nimport { type LecturaDePolitica, politicaDeMaquina, recortarModo } from \"./politica-de-maquina.ts\";\n\n/**\n * Segmento `.../<CONFIG_DIR_NAME>/agent/` de CUALQUIER instalación de Ada,\n * no solo `agentDir` (que es la de ESTE equipo).\n *\n * Con `--remoto` los argumentos de `read`/`write`/`bash` pueden nombrar un\n * `auth.json` o un `vault/` que viven en OTRA máquina — el destino de SSH,\n * el contenedor de Docker, la distro de WSL — con su propio `$HOME` y por\n * tanto un `agentDir` que `rutaProtegida` nunca conoce. Comprobar el\n * segmento en vez del prefijo completo protege ambos sin necesitar el\n * `agentDir` del destino, que esta política no tiene forma de calcular.\n */\nconst SEGMENTO_AGENTE_ADA = `/${CONFIG_DIR_NAME}/agent/`;\n\nexport type NivelTool = \"lectura\" | \"escritura\" | \"ejecucion\";\nexport type ModoPermiso = \"plan\" | \"manual\" | \"auto\" | \"yolo\";\nexport type VeredictoAprobacion = \"permitida\" | \"denegada\" | \"preguntar\";\n\nexport interface Decision {\n\tveredicto: VeredictoAprobacion;\n\t/** Qué regla decidió. Va al libro de sesión, así que tiene que ser estable. */\n\tpolitica: string;\n\t/** Texto para el modelo y para el usuario. Vacío cuando no hay nada que explicar. */\n\tmotivo: string;\n}\n\n/** Tools que solo miran. */\nconst LECTURA = new Set([\n\t\"read\",\n\t\"ls\",\n\t\"find\",\n\t\"grep\",\n\t\"ast_search\",\n\t\"session_search\",\n\t\"web_fetch\",\n\t\"web_search\",\n\t\"memory_search\",\n\t\"memory_list\",\n\t\"graph_query\",\n\t\"ask_user_question\",\n\t\"todo_read\",\n]);\n\n/** Tools que cambian estado nuestro, pero no ejecutan nada del sistema. */\nconst ESCRITURA = new Set([\n\t\"edit\",\n\t\"write\",\n\t\"ast_edit\",\n\t\"memory_add\",\n\t\"memory_replace\",\n\t\"memory_remove\",\n\t\"update_project_memory\",\n\t\"scratchpad\",\n\t\"todo\",\n\t\"todo_write\",\n\t\"graph_add\",\n]);\n\n/**\n * ¿Este nombre es de una tool NUESTRA cuyo nivel de confianza da esta política?\n *\n * Lo consulta el registro de extensiones para saber si `registerTool` está\n * suplantando una builtin. `bash` va aparte porque no está en ninguna de las dos\n * listas —lo desconocido ya es ejecución— pero suplantarlo importa igual: el\n * usuario tiene que ver que el `bash` que corre no es el nuestro.\n */\nexport function esNombreDeToolNuestra(tool: string): boolean {\n\treturn LECTURA.has(tool) || ESCRITURA.has(tool) || tool === \"bash\";\n}\n\n/**\n * El nivel de una herramienta. Lo que no está clasificado es ejecución.\n *\n * Falla cerrado a propósito: el coste de equivocarse hacia arriba es una\n * pregunta de más; hacia abajo, es una tool desconocida corriendo sola.\n */\nexport function nivelDe(tool: string): NivelTool {\n\t// Una builtin suplantada por una extensión NO hereda su nivel.\n\t//\n\t// Comprobado ejecutando: una extensión registra `read`, el loader la pone\n\t// encima de la nuestra y el modelo sigue creyendo que llama a la de Ada. Con\n\t// `LECTURA.has(\"read\")` por delante, ese `read` —que puede hacer lo que\n\t// quiera— se permitía siempre y en cualquier modo. Devolver \"ejecucion\" lo\n\t// devuelve al carril de lo desconocido, que es lo que es.\n\tif (suplantadaPor(tool)) return \"ejecucion\";\n\tif (LECTURA.has(tool)) return \"lectura\";\n\tif (ESCRITURA.has(tool)) return \"escritura\";\n\treturn \"ejecucion\";\n}\n\n/** Un directorio protegido aparece como segmento completo de la ruta. */\nfunction contieneSegmento(texto: string, segmento: string): boolean {\n\treturn texto.includes(`/${segmento}/`);\n}\n\n/**\n * ¿El texto nombra el directorio `dir` colgado de `base`, con barra final o sin\n * ella?\n *\n * La comprobación anterior solo miraba `base/dir/`, y por ahí se colaba justo el\n * caso peor. Comprobado ejecutando `decidir`:\n *\n * rm -rf <agentDir>/vault/ -> denegada ruta-protegida\n * rm -rf <agentDir>/vault -> PERMITIDA modo-yolo\n *\n * Es decir, el borrado entero del vault con un comando, porque el nombre de un\n * directorio no lleva barra al final cuando se lo pasas a `rm`. Se arregla aquí,\n * en la comprobación compartida, y no en cada llamada: la misma trampa valía\n * para el vault, para el libro y para cualquier directorio que se añada mañana.\n *\n * El caso sin barra se mide sobre el token y con el final exacto para no\n * llevarse por delante `vault-ejemplo` ni `sesiones/`. Se recorta la puntuación\n * de shell del final porque `rm -rf x/vault;` y `rm -rf x/vault)` son el mismo\n * comando con otro adorno.\n */\nfunction nombraDirectorio(texto: string, base: string, dir: string): boolean {\n\tif (texto.includes(`${base}${dir}/`)) return true;\n\treturn texto.split(/[\\s\"'`]+/).some((t) => t.replace(/[;,)&|>]+$/, \"\").endsWith(`${base}${dir}`));\n}\n\n/**\n * Deja la ruta en la forma con la que se compara.\n *\n * Sin esto la política era papel mojado, y se descubrió EJECUTANDO el producto:\n * el modelo escribe `~/.ada/agent/vault/…`, la tool expande la tilde por dentro\n * y abre el fichero, mientras que la política —que solo ve los argumentos\n * crudos— comparaba contra la ruta absoluta y no reconocía nada. El vault se\n * leyó entero con la política activada y todas las pruebas en verde, porque\n * todas usaban rutas absolutas.\n *\n * Se sustituye en TODO el texto y no solo al principio porque `bash` recibe una\n * línea entera, donde el `~` va detrás del comando.\n */\nfunction normalizar(texto: string, home: string): string {\n\treturn texto.replaceAll(\"$HOME/\", `${home}/`).replaceAll(\"~/\", `${home}/`);\n}\n\n/**\n * Si el texto nombra algo que no se puede tocar, devuelve por qué.\n *\n * Se mira el texto y no una \"ruta\" porque los argumentos no tienen un nombre\n * común (`path`, `file_path`, `command`…) y porque `bash` recibe una línea de\n * shell entera. Para `bash` esto es MEJOR ESFUERZO y hay que decirlo: quien\n * contiene de verdad un comando es el sandbox del sistema operativo, no esta\n * comprobación. Aquí se para lo evidente, que es lo que hace un agente\n * despistado; lo deliberado lo para el kernel.\n */\nfunction rutaProtegida(texto: string, agentDir: string, escribiendo: boolean): string | null {\n\tif (nombraDirectorio(texto, `${agentDir}/`, \"vault\")) return \"el vault cifrado\";\n\t// Generaliza lo de arriba a un vault de Ada en OTRA máquina (ver\n\t// `SEGMENTO_AGENTE_ADA`): mismo motivo, sin depender del `agentDir` local.\n\tif (nombraDirectorio(texto, SEGMENTO_AGENTE_ADA, \"vault\"))\n\t\treturn \"el vault cifrado (de este equipo o de un destino remoto)\";\n\n\t// El libro de auditoría y su índice.\n\t//\n\t// Agujero real, y el más grave que hemos tenido: la política protegía el\n\t// vault y el `auth.json` y dejaba al agente escribir y BORRAR libremente en\n\t// `<agentDir>/sesion/`, que es donde está el registro de lo que ha hecho. Es\n\t// decir, el sujeto de la auditoría tenía permiso de escritura sobre la\n\t// auditoría. Comprobado ejecutando `decidir`: `rm -rf <agentDir>/sesion/`\n\t// salía `permitida`.\n\t//\n\t// Denegado también para LEER, igual que el vault: el libro guarda hashes y\n\t// rutas de todo lo que ha pasado por la sesión, y no hay ninguna tarea\n\t// legítima del agente que necesite leerlo por el sistema de ficheros. Quien\n\t// tiene que verlo lo ve por `ada-cli audit show`, por `audit://` o por el\n\t// panel, que no pasan por esta política porque no son el agente.\n\tfor (const dir of [DIR_SESION, DIR_INDICE]) {\n\t\tif (nombraDirectorio(texto, `${agentDir}/`, dir)) return \"el libro de auditoría de la sesión\";\n\t\tif (nombraDirectorio(texto, SEGMENTO_AGENTE_ADA, dir)) {\n\t\t\treturn \"el libro de auditoría de la sesión (de este equipo o de un destino remoto)\";\n\t\t}\n\t}\n\n\t// Las credenciales de los proveedores, que viven EN CLARO en `auth.json`.\n\t//\n\t// Agujero real y propio: la primera versión de esta política protegía el\n\t// vault, las claves SSH, AWS y los `.env`, y dejaba abierto justo el fichero\n\t// donde están las claves con las que corre el agente. Se comprobó\n\t// ejecutando el producto y las leyó todas. Proteger la caja fuerte y dejar\n\t// las llaves encima no protege nada.\n\t//\n\t// Se compara con el nombre de fichero COMPLETO para no llevarse por delante\n\t// `auth.json.example`, `auth-storage.ts` ni `auth.md`, que son código y\n\t// documentación que el agente sí tiene que poder leer.\n\tfor (const parte of texto.split(/[\\s\"'`]+/)) {\n\t\tconst base = parte.slice(parte.lastIndexOf(\"/\") + 1);\n\t\tif (parte.includes(`${agentDir}/`) && base === \"auth.json\") return \"las credenciales de los proveedores\";\n\t\t// Igual, pero para el `auth.json` de un Ada corriendo en el DESTINO de\n\t\t// `--remoto`: no comparte `agentDir` con este equipo, así que el\n\t\t// segmento genérico es la única forma de reconocerlo.\n\t\tif (parte.includes(SEGMENTO_AGENTE_ADA) && base === \"auth.json\") {\n\t\t\treturn \"las credenciales de los proveedores (de este equipo o de un destino remoto)\";\n\t\t}\n\t\t// Y las de las otras herramientas: están en el mismo portátil y sirven\n\t\t// para lo mismo. Si el agente no ve las nuestras, no hay motivo para que\n\t\t// vea las de Claude Code, Codex, gh, Docker o kubectl.\n\t\tif (base === \".credentials.json\" || base === \".netrc\") return \"credenciales de otra herramienta\";\n\t\tif (contieneSegmento(parte, \".codex\") && base === \"auth.json\") return \"las credenciales de Codex\";\n\t\tif (contieneSegmento(parte, \"gh\") && base === \"hosts.yml\") return \"las credenciales de GitHub CLI\";\n\t\tif (contieneSegmento(parte, \".docker\") && base === \"config.json\") return \"las credenciales de Docker\";\n\t\tif (contieneSegmento(parte, \".kube\") && base === \"config\") return \"el acceso al clúster de Kubernetes\";\n\t}\n\n\tif (contieneSegmento(texto, \".ssh\")) return \"las claves SSH\";\n\tif (contieneSegmento(texto, \".gnupg\")) return \"las claves GPG\";\n\tif (contieneSegmento(texto, \".aws\")) return \"las credenciales de AWS\";\n\n\t// `.env` como nombre de fichero completo, no como prefijo: `.environment.ts`\n\t// es código normal y denegarlo dejaría medio proyecto ilegible sin que nadie\n\t// entendiera por qué.\n\tfor (const parte of texto.split(/[\\s\"'`]+/)) {\n\t\tconst base = parte.slice(parte.lastIndexOf(\"/\") + 1);\n\t\tif (base === \".env\" || base.startsWith(\".env.\")) return \"un fichero de entorno\";\n\t}\n\n\t// La configuración del agente se puede LEER pero no escribir. El\n\t// CVE-2026-25725 de Claude Code fue exactamente esto: código dentro del\n\t// sandbox creaba un settings.json e inyectaba hooks `SessionStart` que\n\t// corrían FUERA. Nuestro settings.json también ejecuta hooks.\n\tif (escribiendo && (texto.includes(`${agentDir}/settings.json`) || texto.includes(`${agentDir}/hooks`))) {\n\t\treturn \"la configuración del agente, que ejecuta hooks\";\n\t}\n\treturn null;\n}\n\n/** Todas las cadenas de los argumentos, a cualquier profundidad. */\nfunction cadenasDe(valor: unknown, acumulado: string[] = []): string[] {\n\tif (typeof valor === \"string\") acumulado.push(valor);\n\telse if (Array.isArray(valor)) for (const v of valor) cadenasDe(v, acumulado);\n\telse if (valor && typeof valor === \"object\") for (const v of Object.values(valor)) cadenasDe(v, acumulado);\n\treturn acumulado;\n}\n\nexport interface EntradaDecision {\n\ttool: string;\n\targs: Record<string, unknown>;\n\tmodo: ModoPermiso;\n\tagentDir: string;\n\t/**\n\t * Directorio del usuario, para resolver `~` y `$HOME` antes de comparar.\n\t *\n\t * Opcional y con `homedir()` por defecto para que el punto de llamada no\n\t * tenga que importarlo: `agent-session.ts` es de upstream y está en el tope\n\t * del presupuesto de fork, donde un `import` nuevo cuesta un hunk. Las\n\t * pruebas lo pasan siempre, así que siguen siendo deterministas.\n\t */\n\thome?: string;\n\t/** Tools que el usuario ha denegado explícitamente en su configuración. */\n\tdenegadas?: string[];\n\t/**\n\t * La política de máquina, para las pruebas.\n\t *\n\t * Opcional, y por defecto la del sistema. NO se lee de una variable de\n\t * entorno a propósito: una variable la pone el propio usuario, así que sería\n\t * la puerta trasera que anula toda la política de un `export`. Quien ya\n\t * ejecuta código en este proceso puede saltársela igual —la frontera es el\n\t * proceso, no esta función—, pero no debe haber un camino cómodo.\n\t */\n\tmaquina?: LecturaDePolitica;\n}\n\n/**\n * Lee `permissions.denied` de la configuración, tolerando que no exista.\n *\n * El bloque `permissions` es un `Record<string, unknown>` en settings, así que\n * lo que hay ahí no está tipado y puede ser cualquier cosa: se filtra a cadenas\n * en vez de confiar. Una entrada mal escrita tiene que perderse ella sola, no\n * tumbar la política entera y con ella la sesión.\n */\nexport function leerDenegadas(config: { permissions?: Record<string, unknown> } | undefined): string[] {\n\tconst lista = (config?.permissions as { denied?: unknown } | undefined)?.denied;\n\treturn Array.isArray(lista) ? lista.filter((x): x is string => typeof x === \"string\") : [];\n}\n\nexport function decidir({\n\ttool,\n\targs,\n\tmodo,\n\tagentDir,\n\thome,\n\tdenegadas,\n\tmaquina: maquinaDada,\n}: EntradaDecision): Decision {\n\tconst casa = home ?? homedir();\n\tconst nivel = nivelDe(tool);\n\n\t// 1. Rutas protegidas. Por delante de todo lo demás, incluido `yolo`.\n\t// `ejecucion` cuenta como escritura: un `bash` puede reescribir el\n\t// settings.json igual de bien que un `write`.\n\tconst escribiendo = nivel !== \"lectura\";\n\tfor (const cadena of cadenasDe(args)) {\n\t\tconst que = rutaProtegida(normalizar(cadena, casa), agentDir, escribiendo);\n\t\tif (que) {\n\t\t\treturn {\n\t\t\t\tveredicto: \"denegada\",\n\t\t\t\tpolitica: \"ruta-protegida\",\n\t\t\t\tmotivo: `Denegado: ${que}. No es configurable y no cambia con el modo de permisos. Si el usuario necesita ese dato, pídeselo.`,\n\t\t\t};\n\t\t}\n\t}\n\n\t// 2. Ficheros generados. Escribir en uno es trabajo que desaparece en la\n\t// siguiente regeneración, y entre medias deja la fuente y el generado\n\t// diciendo cosas distintas.\n\t//\n\t// Va después de las rutas protegidas y antes del modo, porque no es\n\t// negociable por comodidad — pero sí lo levanta el usuario diciéndolo, y\n\t// el mensaje se lo explica al modelo para que lo pida en vez de insistir.\n\tif (escribiendo) {\n\t\tfor (const cadena of cadenasDe(args)) {\n\t\t\t// El filtro es \"se puede abrir\", no \"parece una ruta\".\n\t\t\t//\n\t\t\t// La versión anterior exigía una barra, y con eso `edit` sobre\n\t\t\t// `api.pb.go` —sin directorio— se colaba entera: la guarda estaba\n\t\t\t// puesta, las pruebas en verde, y el fichero generado se editó igual.\n\t\t\t// Solo salió ejecutando el CLI de verdad.\n\t\t\t//\n\t\t\t// Lo que sí se descarta antes de tocar el disco es lo que no puede ser\n\t\t\t// un nombre de fichero: contenido con saltos de línea (el `new_string`\n\t\t\t// de una edición) o cadenas absurdamente largas.\n\t\t\tif (cadena.length === 0 || cadena.length > 400 || cadena.includes(\"\\n\")) continue;\n\t\t\tlet contenido: string;\n\t\t\ttry {\n\t\t\t\tcontenido = readFileSync(normalizar(cadena, casa), \"utf-8\");\n\t\t\t} catch {\n\t\t\t\tcontinue; // no existe o no es un fichero: no hay nada que proteger\n\t\t\t}\n\t\t\tconst marca = marcaDeGenerado(contenido);\n\t\t\tif (marca) {\n\t\t\t\treturn { veredicto: \"denegada\", politica: \"fichero-generado\", motivo: motivoDeGenerado(cadena, marca) };\n\t\t\t}\n\t\t}\n\t}\n\n\t// 3. Lo que el usuario ha denegado. También sobrevive a `yolo`: si no,\n\t// \"denegar\" significaría \"denegar hasta que al agente le convenga\".\n\tif (denegadas?.includes(tool)) {\n\t\treturn {\n\t\t\tveredicto: \"denegada\",\n\t\t\tpolitica: \"deny-de-usuario\",\n\t\t\tmotivo: `Denegado: el usuario ha desactivado \\`${tool}\\` en su configuración.`,\n\t\t};\n\t}\n\n\t// 4. La política de MÁQUINA, que el usuario no puede editar.\n\t//\n\t// Va aquí y no en cada llamante porque `decidir()` la invocan siete\n\t// sitios: un techo que haya que acordarse de poner en cada uno no es un\n\t// techo. Y va antes del modo porque su único poder es recortarlo.\n\t//\n\t// Los dos ámbitos que había —global y proyecto— son ficheros del propio\n\t// usuario, así que la línea con la que el CISO prohíbe `yolo` la borraba\n\t// él mismo con un editor de texto. Ver `politica-de-maquina.ts`.\n\tconst maquina = maquinaDada ?? politicaDeMaquina();\n\tif (maquina.politica?.denegadas?.includes(tool)) {\n\t\treturn {\n\t\t\tveredicto: \"denegada\",\n\t\t\tpolitica: \"deny-de-maquina\",\n\t\t\tmotivo:\n\t\t\t\t`Denegado: \\`${tool}\\` está desactivada por la política de este equipo` +\n\t\t\t\t(maquina.politica.motivo ? `: ${maquina.politica.motivo}` : \".\") +\n\t\t\t\t\" No la levanta el modo de permisos ni la configuración del usuario.\",\n\t\t};\n\t}\n\tconst efectivo = recortarModo(modo, maquina);\n\n\t// 5. El modo de la sesión, ya recortado.\n\tif (nivel === \"lectura\") return { veredicto: \"permitida\", politica: `modo-${efectivo}`, motivo: \"\" };\n\n\t// Que el recorte se NOMBRE en `politica` no es cosmético: ese campo va al\n\t// libro de sesión, así que un auditor puede ver que la decisión la tomó la\n\t// política del equipo y no la preferencia del usuario.\n\tconst sufijo = efectivo === modo ? \"\" : \"-por-politica-de-maquina\";\n\n\tswitch (efectivo) {\n\t\tcase \"plan\":\n\t\t\treturn {\n\t\t\t\tveredicto: \"denegada\",\n\t\t\t\tpolitica: `modo-plan${sufijo}`,\n\t\t\t\tmotivo: \"En modo plan no se actúa: propón el cambio en vez de aplicarlo.\",\n\t\t\t};\n\t\tcase \"manual\":\n\t\t\treturn { veredicto: \"preguntar\", politica: `modo-manual${sufijo}`, motivo: \"\" };\n\t\tcase \"auto\":\n\t\t\treturn nivel === \"escritura\"\n\t\t\t\t? { veredicto: \"permitida\", politica: `modo-auto${sufijo}`, motivo: \"\" }\n\t\t\t\t: { veredicto: \"preguntar\", politica: `modo-auto${sufijo}`, motivo: \"\" };\n\t\tdefault:\n\t\t\treturn { veredicto: \"permitida\", politica: `modo-yolo${sufijo}`, motivo: \"\" };\n\t}\n}\n"]}
1
+ {"version":3,"file":"politica.js","sourceRoot":"","sources":["../../../src/core/aprobacion/politica.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"atajos.d.ts","sourceRoot":"","sources":["../../../src/core/arranque/atajos.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAoBH;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAE9D;AAED;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyC5D","sourcesContent":["/**\n * Arranque del CLI con atajos: decide qué grafo de módulos hay que cargar ANTES\n * de cargarlo.\n *\n * Por qué existe. Medido en este árbol (Node 22, macOS, caché caliente):\n *\n * node dist/cli.js --version -> 1,65 s y 1927 módulos cargados\n * node -e \"\" -> 0,03 s\n *\n * (contados con un hook `load` de `node:module`; con `module.register()`, que va\n * en otro hilo y no ve algunas cargas, salen 1315 — el número de la puerta\n * `scripts/check-arranque.mjs` es el primero, para que se puedan comparar.)\n *\n * De esos 1927 módulos, 660 son de `typebox` (los esquemas de todas las tools),\n * 206 de `core/` y 171 de `packages/ai`. Ninguno hace falta para imprimir una\n * cadena de versión. El coste no era del lenguaje —Bun tardaba lo mismo— sino de\n * que `cli.ts` importaba `main.ts` de forma estática, y `main.ts` importa\n * ávidamente TODO su grafo (sdk, modos, extensiones, proveedores, motor de\n * control del ordenador) antes de mirar el primer argumento.\n *\n * Lo mismo pasaba con los subcomandos que ya estaban escritos para ser\n * perezosos: `runServeCommand` (audit, discover, banco, review, commit, wiki,\n * usage…) carga sus dependencias con `await import()`, pero se llamaba desde\n * dentro de `main()`, o sea DESPUÉS de haber pagado el grafo entero. La pereza\n * estaba construida y desenchufada.\n *\n * Enganche en upstream: UN solo hunk, el final de `src/cli.ts`. El resto vive\n * aquí, en un fichero nuestro.\n */\n\n/**\n * Prepara el proceso igual que hacía `cli.ts`: título, variables de entorno que\n * leen otros módulos y silenciado de avisos de Node.\n *\n * `configureHttpDispatcher()` NO se llama aquí: es el único trozo del preámbulo\n * que cuesta (carga `undici`, 221 módulos medidos) y solo hace falta cuando algo\n * va a hablar por red. Se llama justo antes de `main()` —donde `runAuthCommand`\n * ya usa la red— y dentro de `runServeCommand`, después de los subcomandos que\n * solo leen ficheros.\n */\nasync function prepararProceso(): Promise<void> {\n\tconst { APP_NAME } = await import(\"../../config.ts\");\n\tprocess.title = APP_NAME;\n\tprocess.env.PI_CODING_AGENT = \"true\";\n\tprocess.env.AI_AGENT = \"pi\";\n\tprocess.emitWarning = (() => {}) as typeof process.emitWarning;\n}\n\n/**\n * ¿Es una invocación que solo pide la versión y nada más?\n *\n * Se exige que sea el ÚNICO argumento a propósito. `ada-cli update --version`\n * lo consume `handlePackageCommand` dentro de `main()` con otro significado (la\n * versión a instalar), y atajarlo aquí cambiaría lo que hace ese comando. Un\n * atajo que se lleva por delante un caso legítimo es peor que no tener atajo.\n */\nexport function esSoloVersion(args: readonly string[]): boolean {\n\treturn args.length === 1 && (args[0] === \"--version\" || args[0] === \"-v\");\n}\n\n/**\n * Punto de entrada real del CLI. Devuelve cuando el trabajo ha terminado.\n *\n * Sin `options`: `cli.ts` nunca las pasó y el SDK no entra por aquí, sino por\n * `createAgentSession`. Un parámetro que nadie rellena es una mentira con tipo.\n */\nexport async function arrancar(args: string[]): Promise<void> {\n\tawait prepararProceso();\n\n\t// Atajo 1: la versión. `VERSION` sale de config.ts, que ya está cargado.\n\tif (esSoloVersion(args)) {\n\t\tconst { VERSION } = await import(\"../../config.ts\");\n\t\tconsole.log(VERSION);\n\t\treturn;\n\t}\n\n\t// `--offline` tiene que estar puesto en el entorno antes de que cualquier\n\t// módulo lo lea. Es lo mismo que hace `main()` en sus primeras líneas; se\n\t// repite aquí porque los subcomandos del atajo 2 ya no pasan por allí.\n\tif (args.includes(\"--offline\") || esBanderaVerdadera(process.env.PI_OFFLINE)) {\n\t\tprocess.env.PI_OFFLINE = \"1\";\n\t\tprocess.env.PI_SKIP_VERSION_CHECK = \"1\";\n\t}\n\n\t// Atajo 2: los subcomandos que no abren el TUI (audit, discover, banco,\n\t// review, commit, usage, wiki, serve, sessions, attach…). Ya cargaban sus\n\t// dependencias de forma perezosa; lo que se gana es no pagar el grafo de\n\t// `main.ts` para llegar hasta ellos.\n\t//\n\t// El orden respecto a `runAuthCommand` (que sigue dentro de `main()`) no\n\t// importa: `auth` no está en la lista de `isServeCommand`, así que los dos\n\t// conjuntos de argumentos son disjuntos.\n\t//\n\t// No se filtra con `isServeCommand` aquí: `runServeCommand` ya empieza por esa\n\t// misma comprobación y devuelve false. Repetirla solo abría la puerta a que\n\t// las dos listas se separaran.\n\tconst { runServeCommand } = await import(\"../../cli/serve-command.ts\");\n\tif (await runServeCommand(args)) return;\n\n\t// Camino normal: el CLI completo. El dispatcher se configura aquí y no antes\n\t// porque `undici` son 221 módulos medidos y los subcomandos que solo leen\n\t// ficheros no los necesitan. Tiene que ser ANTES de `main()`: `runAuthCommand`\n\t// usa la red en las primeras líneas de main, antes de su propia llamada.\n\tconst { configureHttpDispatcher } = await import(\"../http-dispatcher.ts\");\n\tconfigureHttpDispatcher();\n\tconst { main } = await import(\"../../main.ts\");\n\tawait main(args);\n}\n\n/**\n * Copia local de la lectura de banderas de entorno de `main.ts`. Son cuatro\n * líneas y traerlas desde allí obligaría a cargar `main.ts`, que es justo lo que\n * este fichero existe para evitar.\n */\nfunction esBanderaVerdadera(value: string | undefined): boolean {\n\tif (!value) return false;\n\treturn value === \"1\" || value.toLowerCase() === \"true\" || value.toLowerCase() === \"yes\";\n}\n"]}
1
+ {"version":3,"file":"atajos.d.ts","sourceRoot":"","sources":["../../../src/core/arranque/atajos.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAoBH;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAE9D;AAED;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6D5D"}
@@ -69,6 +69,26 @@ export async function arrancar(args) {
69
69
  console.log(VERSION);
70
70
  return;
71
71
  }
72
+ // Atajo 1b: `ada ps` — broker por proyecto inspeccionable.
73
+ // Vive aquí y no en `runServeCommand` para no añadir un hunk a
74
+ // `src/cli/serve-command.ts` (upstream-owned). El coste de este atajo
75
+ // es cero hunks: este fichero es Ada-owned.
76
+ if (args[0] === "ps" || args[0] === "broker-ps") {
77
+ const { getBroker } = await import("../broker/index.js");
78
+ const { runPs } = await import("../broker/ps.js");
79
+ const json = args.includes("--json");
80
+ const reap = args.includes("--reap");
81
+ const broker = getBroker();
82
+ if (reap) {
83
+ const result = broker.reapOrphans();
84
+ console.log(result.narrativa);
85
+ if (json)
86
+ console.log(JSON.stringify({ reaped: result.reaped }, null, 2));
87
+ return;
88
+ }
89
+ console.log(runPs(broker, { json }));
90
+ return;
91
+ }
72
92
  // `--offline` tiene que estar puesto en el entorno antes de que cualquier
73
93
  // módulo lo lea. Es lo mismo que hace `main()` en sus primeras líneas; se
74
94
  // repite aquí porque los subcomandos del atajo 2 ya no pasan por allí.
@@ -1 +1 @@
1
- {"version":3,"file":"atajos.js","sourceRoot":"","sources":["../../../src/core/arranque/atajos.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH;;;;;;;;;GASG;AACH,KAAK,UAAU,eAAe,GAAkB;IAC/C,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACrD,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC;IACzB,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,MAAM,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,WAAW,GAAG,CAAC,GAAG,EAAE,CAAC,EAAC,CAAC,CAA+B,CAAC;AAAA,CAC/D;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,IAAuB,EAAW;IAC/D,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;AAAA,CAC1E;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAc,EAAiB;IAC7D,MAAM,eAAe,EAAE,CAAC;IAExB,2EAAyE;IACzE,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrB,OAAO;IACR,CAAC;IAED,0EAA0E;IAC1E,4EAA0E;IAC1E,yEAAuE;IACvE,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9E,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,GAAG,CAAC;IACzC,CAAC;IAED,wEAAwE;IACxE,4EAA0E;IAC1E,yEAAyE;IACzE,qCAAqC;IACrC,EAAE;IACF,yEAAyE;IACzE,6EAA2E;IAC3E,yCAAyC;IACzC,EAAE;IACF,gFAA+E;IAC/E,8EAA4E;IAC5E,+BAA+B;IAC/B,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAC;IACvE,IAAI,MAAM,eAAe,CAAC,IAAI,CAAC;QAAE,OAAO;IAExC,8EAA6E;IAC7E,2EAA0E;IAC1E,+EAA+E;IAC/E,0EAAyE;IACzE,MAAM,EAAE,uBAAuB,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;IAC1E,uBAAuB,EAAE,CAAC;IAC1B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;IAC/C,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;AAAA,CACjB;AAED;;;;GAIG;AACH,SAAS,kBAAkB,CAAC,KAAyB,EAAW;IAC/D,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,OAAO,KAAK,KAAK,GAAG,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC;AAAA,CACxF","sourcesContent":["/**\n * Arranque del CLI con atajos: decide qué grafo de módulos hay que cargar ANTES\n * de cargarlo.\n *\n * Por qué existe. Medido en este árbol (Node 22, macOS, caché caliente):\n *\n * node dist/cli.js --version -> 1,65 s y 1927 módulos cargados\n * node -e \"\" -> 0,03 s\n *\n * (contados con un hook `load` de `node:module`; con `module.register()`, que va\n * en otro hilo y no ve algunas cargas, salen 1315 — el número de la puerta\n * `scripts/check-arranque.mjs` es el primero, para que se puedan comparar.)\n *\n * De esos 1927 módulos, 660 son de `typebox` (los esquemas de todas las tools),\n * 206 de `core/` y 171 de `packages/ai`. Ninguno hace falta para imprimir una\n * cadena de versión. El coste no era del lenguaje —Bun tardaba lo mismo— sino de\n * que `cli.ts` importaba `main.ts` de forma estática, y `main.ts` importa\n * ávidamente TODO su grafo (sdk, modos, extensiones, proveedores, motor de\n * control del ordenador) antes de mirar el primer argumento.\n *\n * Lo mismo pasaba con los subcomandos que ya estaban escritos para ser\n * perezosos: `runServeCommand` (audit, discover, banco, review, commit, wiki,\n * usage…) carga sus dependencias con `await import()`, pero se llamaba desde\n * dentro de `main()`, o sea DESPUÉS de haber pagado el grafo entero. La pereza\n * estaba construida y desenchufada.\n *\n * Enganche en upstream: UN solo hunk, el final de `src/cli.ts`. El resto vive\n * aquí, en un fichero nuestro.\n */\n\n/**\n * Prepara el proceso igual que hacía `cli.ts`: título, variables de entorno que\n * leen otros módulos y silenciado de avisos de Node.\n *\n * `configureHttpDispatcher()` NO se llama aquí: es el único trozo del preámbulo\n * que cuesta (carga `undici`, 221 módulos medidos) y solo hace falta cuando algo\n * va a hablar por red. Se llama justo antes de `main()` —donde `runAuthCommand`\n * ya usa la red— y dentro de `runServeCommand`, después de los subcomandos que\n * solo leen ficheros.\n */\nasync function prepararProceso(): Promise<void> {\n\tconst { APP_NAME } = await import(\"../../config.ts\");\n\tprocess.title = APP_NAME;\n\tprocess.env.PI_CODING_AGENT = \"true\";\n\tprocess.env.AI_AGENT = \"pi\";\n\tprocess.emitWarning = (() => {}) as typeof process.emitWarning;\n}\n\n/**\n * ¿Es una invocación que solo pide la versión y nada más?\n *\n * Se exige que sea el ÚNICO argumento a propósito. `ada-cli update --version`\n * lo consume `handlePackageCommand` dentro de `main()` con otro significado (la\n * versión a instalar), y atajarlo aquí cambiaría lo que hace ese comando. Un\n * atajo que se lleva por delante un caso legítimo es peor que no tener atajo.\n */\nexport function esSoloVersion(args: readonly string[]): boolean {\n\treturn args.length === 1 && (args[0] === \"--version\" || args[0] === \"-v\");\n}\n\n/**\n * Punto de entrada real del CLI. Devuelve cuando el trabajo ha terminado.\n *\n * Sin `options`: `cli.ts` nunca las pasó y el SDK no entra por aquí, sino por\n * `createAgentSession`. Un parámetro que nadie rellena es una mentira con tipo.\n */\nexport async function arrancar(args: string[]): Promise<void> {\n\tawait prepararProceso();\n\n\t// Atajo 1: la versión. `VERSION` sale de config.ts, que ya está cargado.\n\tif (esSoloVersion(args)) {\n\t\tconst { VERSION } = await import(\"../../config.ts\");\n\t\tconsole.log(VERSION);\n\t\treturn;\n\t}\n\n\t// `--offline` tiene que estar puesto en el entorno antes de que cualquier\n\t// módulo lo lea. Es lo mismo que hace `main()` en sus primeras líneas; se\n\t// repite aquí porque los subcomandos del atajo 2 ya no pasan por allí.\n\tif (args.includes(\"--offline\") || esBanderaVerdadera(process.env.PI_OFFLINE)) {\n\t\tprocess.env.PI_OFFLINE = \"1\";\n\t\tprocess.env.PI_SKIP_VERSION_CHECK = \"1\";\n\t}\n\n\t// Atajo 2: los subcomandos que no abren el TUI (audit, discover, banco,\n\t// review, commit, usage, wiki, serve, sessions, attach…). Ya cargaban sus\n\t// dependencias de forma perezosa; lo que se gana es no pagar el grafo de\n\t// `main.ts` para llegar hasta ellos.\n\t//\n\t// El orden respecto a `runAuthCommand` (que sigue dentro de `main()`) no\n\t// importa: `auth` no está en la lista de `isServeCommand`, así que los dos\n\t// conjuntos de argumentos son disjuntos.\n\t//\n\t// No se filtra con `isServeCommand` aquí: `runServeCommand` ya empieza por esa\n\t// misma comprobación y devuelve false. Repetirla solo abría la puerta a que\n\t// las dos listas se separaran.\n\tconst { runServeCommand } = await import(\"../../cli/serve-command.ts\");\n\tif (await runServeCommand(args)) return;\n\n\t// Camino normal: el CLI completo. El dispatcher se configura aquí y no antes\n\t// porque `undici` son 221 módulos medidos y los subcomandos que solo leen\n\t// ficheros no los necesitan. Tiene que ser ANTES de `main()`: `runAuthCommand`\n\t// usa la red en las primeras líneas de main, antes de su propia llamada.\n\tconst { configureHttpDispatcher } = await import(\"../http-dispatcher.ts\");\n\tconfigureHttpDispatcher();\n\tconst { main } = await import(\"../../main.ts\");\n\tawait main(args);\n}\n\n/**\n * Copia local de la lectura de banderas de entorno de `main.ts`. Son cuatro\n * líneas y traerlas desde allí obligaría a cargar `main.ts`, que es justo lo que\n * este fichero existe para evitar.\n */\nfunction esBanderaVerdadera(value: string | undefined): boolean {\n\tif (!value) return false;\n\treturn value === \"1\" || value.toLowerCase() === \"true\" || value.toLowerCase() === \"yes\";\n}\n"]}
1
+ {"version":3,"file":"atajos.js","sourceRoot":"","sources":["../../../src/core/arranque/atajos.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"exportacion.d.ts","sourceRoot":"","sources":["../../../src/core/audit/exportacion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE7D;;;;;;GAMG;AACH,MAAM,MAAM,OAAO,GAAG;IAAE,OAAO,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7E,wBAAgB,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAwB1E;AA+DD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC7B,QAAQ,EAAE,eAAe,EAAE,EAC3B,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,OAAO,EACjB,KAAK,SAA2B,GAC9B,MAAM,CAiNR","sourcesContent":["/**\n * El libro de sesión convertido en un documento que un DPO puede archivar.\n *\n * El libro (`libro.ts`) es JSONL encadenado: perfecto para verificar, ilegible\n * para quien tiene que responder a una inspección. Un delegado de protección de\n * datos hace dos preguntas concretas y ninguna se contesta leyendo hashes:\n *\n * · ¿QUÉ FICHEROS se trataron? (art. 30 RGPD, registro de actividades)\n * · ¿QUÉ SALIÓ DE LA MÁQUINA y hacia dónde? (art. 44 y siguientes)\n *\n * Sale Markdown y no JSON a propósito: el requisito es \"un fichero que se pueda\n * releer sin nuestro CLI\", y un JSONL con hashes no lo cumple aunque\n * técnicamente se pueda abrir. Texto plano, tablas, y las limitaciones escritas\n * dentro del propio documento.\n *\n * Dos cosas que conviene no deshacer:\n *\n * 1. **Minimización.** Aquí no se reconstruye nada que el libro no guarde ya. El\n * libro guarda del fichero su hash antes y después, nunca el texto, así que\n * este informe tampoco puede tenerlo. Y por si acaso se vuelve a pasar\n * `redactSensitive` sobre el documento entero: es el artefacto que SALE de la\n * máquina y se archiva, y una entrada escrita antes de que existiera un patrón\n * de redacción no puede convertirse en una fuga al exportarla.\n * 2. **Tres estados, no dos.** \"No hubo transferencias\" y \"no se pudo\n * determinar\" no son lo mismo, y un informe que saliera vacío en los dos casos\n * haría pasar por limpia una sesión cuya cadena está rota. La ausencia de un\n * registro solo prueba algo si el registro es completo y verificable: si la\n * cadena no verifica, si el libro está vacío o si la lectura se topó con el\n * tope, este informe dice que no lo sabe en vez de afirmar que no pasó nada.\n */\n\nimport { redactSensitive } from \"../memory-engine/security.ts\";\nimport type { EntradaDelLibro, Veredicto } from \"./libro.ts\";\n\n/**\n * ¿Podemos afirmar que algo NO ocurrió?\n *\n * Es el tipo que impide colapsar los tres estados en dos. Solo con\n * `{ sabemos: true }` tiene sentido escribir \"no hubo transferencias\"; en los\n * demás casos el informe dice qué le falta para saberlo.\n */\nexport type Certeza = { sabemos: true } | { sabemos: false; porque: string };\n\nexport function certezaDe(veredicto: Veredicto, truncado: boolean): Certeza {\n\tif (truncado) {\n\t\treturn {\n\t\t\tsabemos: false,\n\t\t\tporque:\n\t\t\t\t\"la lectura del libro alcanzó su tope de entradas, así que hay registros anteriores que este informe no ha mirado.\",\n\t\t};\n\t}\n\tif (!veredicto.valido) {\n\t\treturn {\n\t\t\tsabemos: false,\n\t\t\tporque:\n\t\t\t\t`la cadena de hashes NO verifica${veredicto.alteradaEn ? ` (falla en la entrada del ${fecha(veredicto.alteradaEn)})` : \"\"}. ` +\n\t\t\t\t\"Sobre un libro alterado, la ausencia de un registro no prueba que el hecho no ocurriera: puede haberse borrado.\",\n\t\t};\n\t}\n\tif (veredicto.comprobadas === 0) {\n\t\treturn {\n\t\t\tsabemos: false,\n\t\t\tporque:\n\t\t\t\t\"el libro está vacío. No hay registro de actividad, que no es lo mismo que un registro de que no hubo actividad.\",\n\t\t};\n\t}\n\treturn { sabemos: true };\n}\n\n/** Escapa lo que va dentro de una celda para que no rompa la tabla. */\nfunction celda(valor: unknown): string {\n\tif (valor === null || valor === undefined || valor === \"\") return \"—\";\n\treturn String(valor)\n\t\t.replace(/\\|/g, \"\\\\|\")\n\t\t.replace(/[\\r\\n]+/g, \" \");\n}\n\nfunction tabla(cabeceras: string[], filas: string[][]): string {\n\treturn [\n\t\t`| ${cabeceras.join(\" | \")} |`,\n\t\t`| ${cabeceras.map(() => \"---\").join(\" | \")} |`,\n\t\t...filas.map((f) => `| ${f.map(celda).join(\" | \")} |`),\n\t].join(\"\\n\");\n}\n\n/**\n * Una sección con su tercer estado.\n *\n * `nadaOcurrio` es la frase afirmativa (\"No hubo transferencias\"); solo se\n * imprime cuando la certeza lo permite. Si no, se imprime por qué no se sabe.\n */\nfunction seccion(\n\ttitulo: string,\n\tbase: string,\n\tcabeceras: string[],\n\tfilas: string[][],\n\tnadaOcurrio: string,\n\tcerteza: Certeza,\n\t/**\n\t * Hasta dónde llega la observación de esta sección. Se rinde SIEMPRE.\n\t *\n\t * Antes el alcance viajaba dentro de `nadaOcurrio`, que solo se imprime\n\t * cuando la tabla está vacía. Es decir: la advertencia de «hay caminos que no\n\t * miro» desaparecía justo cuando había datos, y el DPO leía una tabla de\n\t * transferencias con pinta de completa y ninguna salvedad. La salvedad\n\t * importa MÁS con filas que sin ellas: sin filas se está afirmando una\n\t * ausencia, con filas se está insinuando una lista exhaustiva.\n\t */\n\talcance?: string,\n): string {\n\tconst cuerpo =\n\t\tfilas.length > 0\n\t\t\t? tabla(cabeceras, filas)\n\t\t\t: certeza.sabemos\n\t\t\t\t? `**${nadaOcurrio}.** El libro está completo y su cadena verifica, así que esta ausencia es un dato, no un hueco.`\n\t\t\t\t: `**No se pudo determinar.** No se puede afirmar que ${nadaOcurrio.toLowerCase()}: ${certeza.porque}`;\n\treturn `## ${titulo}\\n\\n_${base}_\\n\\n${cuerpo}${alcance ? `\\n\\n> **Alcance de esta sección.** ${alcance}` : \"\"}`;\n}\n\n/** Fecha y hora sin la parte de milisegundos, que a un DPO no le dice nada. */\nfunction fecha(ts: string): string {\n\treturn ts.replace(\"T\", \" \").replace(/\\.\\d+Z$/, \"Z\");\n}\n\ntype Suceso = Record<string, unknown>;\n\nfunction esTipo(e: EntradaDelLibro, tipo: string): boolean {\n\treturn e.suceso.tipo === tipo;\n}\n\n/**\n * Rinde el informe.\n *\n * `entradas` debe venir de más antigua a más reciente (`libro.leer` las da al\n * revés). `truncado` es true si la lectura se topó con su límite, porque\n * entonces no se puede afirmar ninguna ausencia.\n */\nexport function informeParaDpo(\n\tentradas: EntradaDelLibro[],\n\tveredicto: Veredicto,\n\ttruncado: boolean,\n\tahora = new Date().toISOString(),\n): string {\n\tconst certeza = certezaDe(veredicto, truncado);\n\tconst sesiones = [...new Set(entradas.map((e) => e.sesion))];\n\n\tconst integridad = veredicto.valido\n\t\t? `**Cadena de hashes ÍNTEGRA** — ${veredicto.comprobadas} entrada(s) reverificadas de punta a punta.`\n\t\t: `**CADENA ALTERADA** tras ${veredicto.comprobadas} entrada(s) correctas` +\n\t\t\t(veredicto.alteradaEn ? `, en la del ${fecha(veredicto.alteradaEn)}` : \"\") +\n\t\t\t(veredicto.ficheroAlterado ? ` (fichero \\`sesion/${veredicto.ficheroAlterado}\\`)` : \"\") +\n\t\t\t\". Las entradas anteriores a esa siguen siendo fiables; a partir de ahí, no.\";\n\n\tconst partes: string[] = [\n\t\t\"# Registro de actividades de tratamiento — Ada\",\n\t\t[\n\t\t\t`- **Generado:** ${fecha(ahora)}`,\n\t\t\t`- **Entradas del libro:** ${entradas.length}${truncado ? \" (lectura truncada por el tope)\" : \"\"}`,\n\t\t\t`- **Sesiones cubiertas:** ${sesiones.length > 0 ? sesiones.map((s) => `\\`${s}\\``).join(\", \") : \"ninguna\"}`,\n\t\t\t`- **Periodo:** ${entradas.length > 0 ? `${fecha(entradas[0].ts)} → ${fecha(entradas[entradas.length - 1].ts)}` : \"—\"}`,\n\t\t].join(\"\\n\"),\n\t\t`## Prueba de integridad\\n\\n${integridad}`,\n\n\t\tseccion(\n\t\t\t\"1. Ficheros tratados\",\n\t\t\t\"Art. 30 RGPD — registro de actividades de tratamiento. Del fichero consta su HASH antes y después, nunca su contenido.\",\n\t\t\t[\"Fecha\", \"Fichero\", \"Hash antes\", \"Hash después\", \"Vía\", \"Base\"],\n\t\t\tentradas\n\t\t\t\t.filter((e) => esTipo(e, \"fichero\"))\n\t\t\t\t.map((e) => {\n\t\t\t\t\tconst s = e.suceso as Suceso;\n\t\t\t\t\treturn [\n\t\t\t\t\t\tfecha(e.ts),\n\t\t\t\t\t\tString(s.ruta ?? \"\"),\n\t\t\t\t\t\ts.antes === null ? \"(no existía)\" : celda(s.antes),\n\t\t\t\t\t\ts.despues === null ? \"(borrado)\" : celda(s.despues),\n\t\t\t\t\t\tcelda(s.tool),\n\t\t\t\t\t\t\"ejecución solicitada por el usuario en la sesión\",\n\t\t\t\t\t];\n\t\t\t\t}),\n\t\t\t\"No se trató ningún fichero\",\n\t\t\tcerteza,\n\t\t),\n\n\t\tseccion(\n\t\t\t\"2. Transferencias de datos fuera de la máquina\",\n\t\t\t\"Art. 44 y ss. RGPD — destinatarios. Consta el DOMINIO de destino; nunca la ruta ni los parámetros, que es donde viajan los tokens.\",\n\t\t\t[\"Fecha\", \"Destino\", \"Resultado\", \"Motivo\"],\n\t\t\tentradas\n\t\t\t\t.filter((e) => esTipo(e, \"red\"))\n\t\t\t\t.map((e) => {\n\t\t\t\t\tconst s = e.suceso as Suceso;\n\t\t\t\t\treturn [fecha(e.ts), String(s.dominio ?? \"\"), s.permitido ? \"permitida\" : \"BLOQUEADA\", celda(s.motivo)];\n\t\t\t\t}),\n\t\t\t// La frase dice su ALCANCE, y no es un matiz de estilo.\n\t\t\t//\n\t\t\t// El `fetchImpl` vigilado que produce estos sucesos lo reciben el fetch\n\t\t\t// genérico, los scrapers y los proveedores de búsqueda — las tools web.\n\t\t\t// NO lo reciben (comprobado con `grep -c anotarRed`, cero en los tres):\n\t\t\t// el cliente MCP (`core/mcp/client.ts`, que sí acepta `fetchImpl` y hoy\n\t\t\t// no se le pasa), el broker de blobs y la API de Telegram.\n\t\t\t//\n\t\t\t// Un DPO estricto diría que hablar con un MCP remoto ES una\n\t\t\t// transferencia, y tendría razón. Escribir \"No hubo transferencias\" a\n\t\t\t// secas sería afirmar una ausencia que este registro no puede sostener:\n\t\t\t// «no lo he mirado» vendido como «no hay», en el documento donde eso se\n\t\t\t// paga más caro. Mientras la cobertura no sea completa, la frase nombra\n\t\t\t// lo que sí cubre y quien lea el informe puede juzgar el resto.\n\t\t\t// La frase sigue diciendo su ALCANCE, y sigue sin ser un matiz de estilo.\n\t\t\t//\n\t\t\t// Cubierto: el fetch genérico, los scrapers, los proveedores de búsqueda\n\t\t\t// y —desde `core/web/registro-red.ts`— el cliente MCP, que es el que un\n\t\t\t// DPO preguntaría primero porque habla con servidores de terceros.\n\t\t\t//\n\t\t\t// Fuera todavía, MEDIDO recorriendo cada `fetch(` del código y no\n\t\t\t// copiado del comentario anterior —que decía «el broker de ficheros\n\t\t\t// grandes y Telegram» y no era la lista real—:\n\t\t\t//\n\t\t\t// modes/interactive/interactive-mode.ts:1326 aviso a pi.dev\n\t\t\t// extensions/llama/huggingface.ts:76 descarga de modelos\n\t\t\t// extensions/llama/client.ts:171,216 servidor llama\n\t\t\t// core/credenciales/cliente.ts:62,79 broker de credenciales\n\t\t\t// cli/telemetria-command.ts colector OTLP (--enviar)\n\t\t\t//\n\t\t\t// (`computer/motor/{bridge,cdp}.ts` y `utils/management-http.ts` van a\n\t\t\t// 127.0.0.1: no salen de la máquina y no son transferencias.)\n\t\t\t//\n\t\t\t// Mientras queden caminos sin cubrir, la salvedad nombra lo que sí\n\t\t\t// sostiene, y se rinde TAMBIÉN cuando la tabla tiene filas: con datos\n\t\t\t// se está insinuando una lista exhaustiva, que es peor que declarar una\n\t\t\t// ausencia.\n\t\t\t\"No hubo transferencias por los caminos que este registro observa\",\n\t\t\tcerteza,\n\t\t\t\"esta tabla cubre las herramientas web (fetch, scrapers y buscadores) y los servidores \" +\n\t\t\t\t\"MCP. Quedan FUERA, medido recorriendo cada llamada a `fetch` del código: el aviso de \" +\n\t\t\t\t\"instalación a `pi.dev` (activado por defecto; se apaga con `PI_OFFLINE`, `PI_TELEMETRY=0` \" +\n\t\t\t\t\"o `enableInstallTelemetry: false`), las descargas de modelos de Hugging Face, el \" +\n\t\t\t\t\"servidor llama, el broker de credenciales y el envío al colector OTLP de \" +\n\t\t\t\t\"`ada-cli telemetria --enviar` (que manda forma y nunca contenido, pero sale igual de \" +\n\t\t\t\t\"esta máquina). Sobre esos caminos este informe no afirma \" +\n\t\t\t\t\"nada, ni que hubo transferencias ni que no las hubo. Una lista que parece exhaustiva y \" +\n\t\t\t\t\"no lo es engaña más que una ausencia declarada.\",\n\t\t),\n\n\t\tseccion(\n\t\t\t\"3. Modelos invocados (encargados del tratamiento)\",\n\t\t\t\"Art. 28 RGPD — cada llamada a un modelo remoto es un tratamiento por cuenta de un tercero. Consta el proveedor y el volumen, nunca el contenido del prompt.\",\n\t\t\t[\"Fecha\", \"Proveedor\", \"Modelo\", \"Tokens entrada\", \"Tokens salida\", \"Fin\"],\n\t\t\tentradas\n\t\t\t\t.filter((e) => esTipo(e, \"modelo\"))\n\t\t\t\t.map((e) => {\n\t\t\t\t\tconst s = e.suceso as Suceso;\n\t\t\t\t\treturn [\n\t\t\t\t\t\tfecha(e.ts),\n\t\t\t\t\t\tcelda(s.proveedor),\n\t\t\t\t\t\tcelda(s.modelo),\n\t\t\t\t\t\tcelda(s.entrada),\n\t\t\t\t\t\tcelda(s.salida),\n\t\t\t\t\t\tcelda(s.motivoParada),\n\t\t\t\t\t];\n\t\t\t\t}),\n\t\t\t\"No se invocó ningún modelo\",\n\t\t\tcerteza,\n\t\t),\n\n\t\tseccion(\n\t\t\t\"4. Comandos ejecutados\",\n\t\t\t\"Trazabilidad de la actuación automatizada. `origen` distingue lo que decidió el agente de lo que tecleó la persona.\",\n\t\t\t[\"Fecha\", \"Comando\", \"Código\", \"Origen\", \"Encierro\"],\n\t\t\tentradas\n\t\t\t\t.filter((e) => esTipo(e, \"comando\"))\n\t\t\t\t.map((e) => {\n\t\t\t\t\tconst s = e.suceso as Suceso;\n\t\t\t\t\tconst argv = Array.isArray(s.argv) ? s.argv.join(\" \") : \"\";\n\t\t\t\t\treturn [\n\t\t\t\t\t\tfecha(e.ts),\n\t\t\t\t\t\t`\\`${celda(argv.slice(0, 120))}\\``,\n\t\t\t\t\t\tcelda(s.codigo),\n\t\t\t\t\t\ts.origen === \"usuario\" ? \"usuario\" : \"agente\",\n\t\t\t\t\t\tcelda(s.sandbox),\n\t\t\t\t\t];\n\t\t\t\t}),\n\t\t\t\"No se ejecutó ningún comando\",\n\t\t\tcerteza,\n\t\t),\n\n\t\tseccion(\n\t\t\t\"5. Herramientas y decisiones de política\",\n\t\t\t\"Art. 12 AI Act — qué se permitió y con qué base. `Base` es la regla de la política de aprobación que dejó pasar la llamada.\",\n\t\t\t[\"Fecha\", \"Herramienta\", \"Resultado\", \"Decisión\", \"Base\"],\n\t\t\tentradas\n\t\t\t\t.filter((e) => esTipo(e, \"tool\"))\n\t\t\t\t.map((e) => {\n\t\t\t\t\tconst s = e.suceso as Suceso;\n\t\t\t\t\treturn [fecha(e.ts), celda(s.nombre), s.ok ? \"ok\" : \"ERROR\", celda(s.decision), celda(s.motivo)];\n\t\t\t\t}),\n\t\t\t\"No se ejecutó ninguna herramienta\",\n\t\t\tcerteza,\n\t\t),\n\n\t\tseccion(\n\t\t\t\"6. Credenciales utilizadas\",\n\t\t\t\"Quién usó qué cuenta y cuándo. Consta el identificador de la credencial, jamás su valor.\",\n\t\t\t[\"Fecha\", \"Acción\", \"Proveedor\", \"Credencial\", \"Resultado\", \"Cliente\"],\n\t\t\tentradas\n\t\t\t\t.filter((e) => esTipo(e, \"credencial\"))\n\t\t\t\t.map((e) => {\n\t\t\t\t\tconst s = e.suceso as Suceso;\n\t\t\t\t\treturn [\n\t\t\t\t\t\tfecha(e.ts),\n\t\t\t\t\t\tcelda(s.accion),\n\t\t\t\t\t\tcelda(s.proveedor),\n\t\t\t\t\t\ts.credencialId === null ? \"(ninguna activa)\" : celda(s.credencialId),\n\t\t\t\t\t\tcelda(s.resultado),\n\t\t\t\t\t\tcelda(s.cliente),\n\t\t\t\t\t];\n\t\t\t\t}),\n\t\t\t\"No se utilizó ninguna credencial\",\n\t\t\tcerteza,\n\t\t),\n\n\t\t[\n\t\t\t\"## Minimización de datos\",\n\t\t\t\"\",\n\t\t\t\"Este documento contiene la FORMA de lo que ocurrió, no su contenido. En concreto NO incluye:\",\n\t\t\t\"\",\n\t\t\t\"- el contenido de ningún fichero del usuario (solo el hash SHA-256 truncado de antes y después);\",\n\t\t\t\"- el texto de ningún prompt ni respuesta del modelo (solo el recuento de tokens);\",\n\t\t\t\"- ninguna credencial, clave ni token (solo el identificador de la credencial usada);\",\n\t\t\t\"- ninguna ruta ni parámetro de las URL a las que se salió (solo el dominio de destino).\",\n\t\t\t\"\",\n\t\t\t\"Un registro de cumplimiento que copiara los datos tratados sería un segundo almacén de justo\",\n\t\t\t\"aquello que el RGPD manda minimizar.\",\n\t\t].join(\"\\n\"),\n\n\t\t[\n\t\t\t\"## Qué NO prueba este documento\",\n\t\t\t\"\",\n\t\t\t\"- La cadena de hashes prueba **integridad interna** (que el libro no se editó ni reordenó), no **procedencia**:\",\n\t\t\t\" no acredita quién lo generó ni en qué máquina. Para no-repudio hace falta firma con clave gestionada (HSM).\",\n\t\t\t\"- Borrar el fichero de una sesión completa no lo detecta la cadena; sí detecta cualquier modificación dentro de una sesión.\",\n\t\t\t\"- El informe refleja lo que el agente registró. No es una auditoría independiente del código resultante.\",\n\t\t].join(\"\\n\"),\n\t];\n\n\t// Segunda pasada de redacción sobre el documento ya rendido. El libro ya\n\t// redacta al escribir, pero este es el artefacto que SALE de la máquina y se\n\t// archiva: una entrada anotada antes de que existiera un patrón no puede\n\t// convertirse en una fuga al exportarla. Sobre Markdown no hay nada que\n\t// romper, así que lo peor que puede pasar es que redacte de más.\n\treturn redactSensitive(`${partes.join(\"\\n\\n\")}\\n`, \"strict\");\n}\n"]}
1
+ {"version":3,"file":"exportacion.d.ts","sourceRoot":"","sources":["../../../src/core/audit/exportacion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE7D;;;;;;GAMG;AACH,MAAM,MAAM,OAAO,GAAG;IAAE,OAAO,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7E,wBAAgB,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAwB1E;AA+DD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC7B,QAAQ,EAAE,eAAe,EAAE,EAC3B,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,OAAO,EACjB,KAAK,SAA2B,GAC9B,MAAM,CAmNR"}
@@ -171,7 +171,8 @@ export function informeParaDpo(entradas, veredicto, truncado, ahora = new Date()
171
171
  // extensions/llama/client.ts:171,216 servidor llama
172
172
  // core/credenciales/cliente.ts:62,79 broker de credenciales
173
173
  // cli/telemetria-command.ts colector OTLP (--enviar)
174
- //
174
+ // cli/update-cli.ts auto-actualización
175
+ // core/blobs/uploaders.ts espejo público de blobs
175
176
  // (`computer/motor/{bridge,cdp}.ts` y `utils/management-http.ts` van a
176
177
  // 127.0.0.1: no salen de la máquina y no son transferencias.)
177
178
  //
@@ -183,9 +184,10 @@ export function informeParaDpo(entradas, veredicto, truncado, ahora = new Date()
183
184
  "MCP. Quedan FUERA, medido recorriendo cada llamada a `fetch` del código: el aviso de " +
184
185
  "instalación a `pi.dev` (activado por defecto; se apaga con `PI_OFFLINE`, `PI_TELEMETRY=0` " +
185
186
  "o `enableInstallTelemetry: false`), las descargas de modelos de Hugging Face, el " +
186
- "servidor llama, el broker de credenciales y el envío al colector OTLP de " +
187
+ "servidor llama, el broker de credenciales, el envío al colector OTLP de " +
187
188
  "`ada-cli telemetria --enviar` (que manda forma y nunca contenido, pero sale igual de " +
188
- "esta máquina). Sobre esos caminos este informe no afirma " +
189
+ "esta máquina) y la auto-actualización (`ada-cli update`, descarga del binario del " +
190
+ "canal de releases con SHA-256 verificado). Sobre esos caminos este informe no afirma " +
189
191
  "nada, ni que hubo transferencias ni que no las hubo. Una lista que parece exhaustiva y " +
190
192
  "no lo es engaña más que una ausencia declarada."),
191
193
  seccion("3. Modelos invocados (encargados del tratamiento)", "Art. 28 RGPD — cada llamada a un modelo remoto es un tratamiento por cuenta de un tercero. Consta el proveedor y el volumen, nunca el contenido del prompt.", ["Fecha", "Proveedor", "Modelo", "Tokens entrada", "Tokens salida", "Fin"], entradas