@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
@@ -1 +1 @@
1
- {"version":3,"file":"payload.js","sourceRoot":"","sources":["../../../src/core/prompt-cache/payload.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Mutaciones del payload de proveedor para maximizar aciertos de caché.\n *\n * Tres cosas, cada una por un motivo distinto:\n *\n * 1. `prompt_cache_key` de respaldo. Ada core ya lo pone, pero solo para la URL\n * oficial de OpenAI o cuando hay retención larga declarada\n * (`openai-completions.ts`). Un endpoint de terceros con retención corta —\n * justo el caso de un gateway propio o un proxy — se queda sin clave, y sin\n * clave el backend no puede enrutar a un worker con la caché caliente.\n *\n * 2. Seguridad de `prompt_cache_retention`. Enviarlo a un endpoint que no lo\n * entiende devuelve 400 y tumba la petición entera. Se envía solo cuando se\n * sabe que se soporta, y se APRENDE de los 400 vistos.\n *\n * 3. Orden de TTL en `cache_control` de Anthropic. La API rechaza un breakpoint\n * de 1h que venga detrás de uno de 5m. Es un fallo de orden, no de contenido,\n * y se puede reparar sin cambiar nada semántico.\n */\n\n/** Límite documentado de OpenAI para prompt_cache_key. */\nconst MAX_CACHE_KEY_LENGTH = 64;\n\nexport function clampCacheKey(sessionId: string | undefined): string | undefined {\n\tconst trimmed = sessionId?.trim();\n\tif (!trimmed) return undefined;\n\treturn [...trimmed].slice(0, MAX_CACHE_KEY_LENGTH).join(\"\");\n}\n\n/** ¿El payload ya trae una clave efectiva? Nunca se pisa la del host. */\nexport function hasCacheKey(payload: Record<string, unknown>): boolean {\n\treturn typeof payload.prompt_cache_key === \"string\" || typeof payload.promptCacheKey === \"string\";\n}\n\nexport interface PayloadContext {\n\tapi: string;\n\tbaseUrl?: string;\n\tsessionId?: string;\n\t/** `compat.supportsLongCacheRetention` del modelo. */\n\tsupportsLongRetention?: boolean;\n\t/** Modelos a los que este proceso ya vio devolver 400 por retención. */\n\tretentionRejected?: boolean;\n}\n\n/** APIs con forma OpenAI donde `prompt_cache_key` significa algo. */\nconst OPENAI_SHAPED = new Set([\"openai-completions\", \"openai-responses\"]);\n\n/**\n * Añade la clave de caché si falta. No sobrescribe nunca: una clave que cambia\n * entre peticiones es PEOR que ninguna, porque fragmenta el enrutado.\n */\nexport function withCacheKey(payload: Record<string, unknown>, ctx: PayloadContext): Record<string, unknown> {\n\tif (!OPENAI_SHAPED.has(ctx.api)) return payload;\n\tif (hasCacheKey(payload)) return payload;\n\tconst key = clampCacheKey(ctx.sessionId);\n\tif (!key) return payload;\n\treturn { ...payload, prompt_cache_key: key };\n}\n\n/**\n * Decide si `prompt_cache_retention` puede viajar.\n *\n * El orden importa: la evidencia empírica (un 400 ya visto) manda sobre la\n * configuración del usuario. Si no, un opt-in equivocado contra un endpoint que\n * lo rechaza devuelve 400 para siempre.\n */\nexport function retentionAllowed(ctx: PayloadContext): boolean {\n\tif (ctx.baseUrl?.includes(\"api.openai.com\")) return true;\n\tif (ctx.retentionRejected) return false;\n\treturn ctx.supportsLongRetention === true;\n}\n\nexport function withRetentionGuard(payload: Record<string, unknown>, ctx: PayloadContext): Record<string, unknown> {\n\tif (typeof payload.prompt_cache_retention !== \"string\") return payload;\n\tif (retentionAllowed(ctx)) return payload;\n\tconst { prompt_cache_retention: _dropped, ...rest } = payload;\n\treturn rest;\n}\n\n/** ¿Este error del proveedor es \"no entiendo prompt_cache_retention\"? */\nexport function isRetentionUnsupportedError(text: string): boolean {\n\treturn /prompt_cache_retention/i.test(text) && /unsupported|unknown|unrecognized|invalid/i.test(text);\n}\n\n/** ¿Es el error de Anthropic por orden de TTL en cache_control? */\nexport function isAnthropicTtlOrderError(text: string): boolean {\n\treturn /cache_control/i.test(text) && /ttl/i.test(text) && /order|1h|5m/i.test(text);\n}\n\ninterface CacheControlHolder {\n\tcache_control?: { type?: string; ttl?: string };\n\t[key: string]: unknown;\n}\n\n/**\n * Recorre los bloques con `cache_control` en ORDEN DE CABLE (tools → system →\n * messages) y degrada cualquier TTL largo que venga detrás de uno corto.\n *\n * Degradar es seguro: se pierde duración de caché, no corrección. Reordenar los\n * breakpoints sí cambiaría qué se cachea, y eso no es nuestro para decidir.\n */\nexport function normalizeAnthropicTtlOrder(payload: Record<string, unknown>): Record<string, unknown> {\n\tconst holders: CacheControlHolder[] = [];\n\tconst collect = (value: unknown): void => {\n\t\tif (Array.isArray(value)) {\n\t\t\tfor (const item of value) collect(item);\n\t\t\treturn;\n\t\t}\n\t\tif (!value || typeof value !== \"object\") return;\n\t\tconst record = value as CacheControlHolder;\n\t\tif (record.cache_control && typeof record.cache_control === \"object\") holders.push(record);\n\t\tfor (const nested of Object.values(record)) {\n\t\t\tif (nested && typeof nested === \"object\") collect(nested);\n\t\t}\n\t};\n\t// Orden de cable, no de objeto: es el que valida Anthropic.\n\tcollect(payload.tools);\n\tcollect(payload.system);\n\tcollect(payload.messages);\n\n\tlet seenShort = false;\n\tlet changed = false;\n\tfor (const holder of holders) {\n\t\tconst ttl = holder.cache_control?.ttl;\n\t\tif (ttl === \"5m\" || ttl === undefined) {\n\t\t\tseenShort = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ttl === \"1h\" && seenShort) {\n\t\t\tholder.cache_control = { ...holder.cache_control, ttl: \"5m\" };\n\t\t\tchanged = true;\n\t\t}\n\t}\n\treturn changed ? { ...payload } : payload;\n}\n"]}
1
+ {"version":3,"file":"payload.js","sourceRoot":"","sources":["../../../src/core/prompt-cache/payload.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"stabilize.d.ts","sourceRoot":"","sources":["../../../src/core/prompt-cache/stabilize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAKH,sDAAqD;AACrD,eAAO,MAAM,gBAAgB,gBAAgB,CAAC;AAW9C,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,MAAM,WAAW,cAAc;IAC9B,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uEAAsE;IACtE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,2BAA2B;IAC3B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,qCAAqC;IACrC,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxD;AAED,MAAM,WAAW,eAAe;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,uDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,iEAAgE;IAChE,UAAU,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAK/D;AAED,uEAAuE;AACvE,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,EAAE,CAkBrE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,cAAc,GAAG,eAAe,CAuD5E","sourcesContent":["/**\n * Estabilización del prefijo del prompt.\n *\n * Las cachés de prompt (DeepSeek, OpenAI, Anthropic) casan por PREFIJO: un byte\n * distinto en la posición N invalida todo lo que va detrás. En DeepSeek el hit\n * cuesta ~31x menos que el miss, así que el coste de un cambio no es\n * proporcional a su tamaño sino a su POSICIÓN.\n *\n * Esto reordena el system prompt para que todo lo estable quede por delante y lo\n * dinámico detrás de un separador, de modo que el sufijo invalidado sea lo más\n * pequeño posible.\n *\n * Dos decisiones de diseño que no son obvias:\n *\n * 1. Los candidatos ANIDAN — el bloque de un context file contiene su propio\n * contenido a secas. Por eso las ocurrencias se cuentan contra UNA instantánea\n * inmutable del prompt original, no contra el texto que va quedando: recontar\n * tras cada extracción daría resultados incoherentes. Cualquier candidato que\n * no aparezca EXACTAMENTE una vez se deja en su sitio.\n *\n * 2. Hay guardia de integridad. Si tras reordenar desaparece cualquier marcador\n * estructural (una etiqueta, un delimitador), se descarta la reescritura\n * entera y se devuelve el original. Un reordenado con un bug que corrompe el\n * prompt en silencio es mucho peor que no cachear.\n */\n\n/** Por debajo de esto un \"candidato\" es ruido que aparece en cualquier sitio. */\nconst MIN_CANDIDATE_LENGTH = 8;\n\n/** Separador entre la zona estable y la dinámica. */\nexport const STABLE_SEPARATOR = \"\\n\\n---\\n\\n\";\n\n/**\n * Ficheros de contexto que se consideran estables.\n *\n * El tamaño NO es criterio: un fichero grande puede cambiar cada turno. Solo se\n * suben ficheros de instrucciones cuyo contenido se sabe estable durante la\n * sesión.\n */\nconst STABLE_CONTEXT_FILES = /(^|\\/)(agents(\\.override)?\\.md|claude\\.md|gemini\\.md|cursor\\.md)$/i;\n\nexport function isStableContextFile(path: string): boolean {\n\treturn STABLE_CONTEXT_FILES.test(path.replace(/\\\\/g, \"/\").toLowerCase());\n}\n\nexport interface StabilizeInput {\n\t/** El system prompt ya ensamblado. */\n\tprompt: string;\n\t/** Prompt de sistema propio del usuario, si lo hay. */\n\tcustomPrompt?: string;\n\t/** Bloques añadidos al final (incluye la personalidad del engine). */\n\tappendSystemPrompt?: string;\n\t/** Guidelines por tool. */\n\tpromptGuidelines?: string[];\n\t/** Ficheros de contexto cargados. */\n\tcontextFiles?: Array<{ path: string; content: string }>;\n}\n\nexport interface StabilizeResult {\n\tprompt: string;\n\t/** Cuántos bloques se subieron al prefijo estable. */\n\tlifted: number;\n\t/** True si la guardia de integridad descartó la reescritura. */\n\trolledBack: boolean;\n}\n\n/**\n * Marcadores estructurales: etiquetas y delimitadores de bloque. Si el\n * reordenado pierde alguno, algo se ha comido texto.\n */\nexport function extractStructuralMarkers(text: string): string[] {\n\tconst markers: string[] = [];\n\tfor (const match of text.matchAll(/<\\/?[a-zA-Z][\\w-]*>/g)) markers.push(match[0]);\n\tfor (const match of text.matchAll(/<!--\\s*[A-Z_]+:(START|END)\\s*-->/g)) markers.push(match[0]);\n\treturn markers.sort();\n}\n\n/** Construye los bloques candidatos a subir, en orden determinista. */\nexport function buildStableCandidates(input: StabilizeInput): string[] {\n\tconst candidates: string[] = [];\n\tconst push = (value: string | undefined) => {\n\t\tconst trimmed = value?.trim();\n\t\tif (trimmed && trimmed.length >= MIN_CANDIDATE_LENGTH) candidates.push(trimmed);\n\t};\n\n\tpush(input.customPrompt);\n\tpush(input.appendSystemPrompt);\n\tfor (const guideline of input.promptGuidelines ?? []) push(`- ${guideline}`);\n\tfor (const file of input.contextFiles ?? []) {\n\t\tif (!isStableContextFile(file.path)) continue;\n\t\t// Dos formas: con cabecera de ruta y sin ella. El ensamblador puede usar\n\t\t// cualquiera de las dos y solo una casará.\n\t\tpush(`## ${file.path}\\n\\n${file.content}`);\n\t\tpush(file.content);\n\t}\n\treturn candidates;\n}\n\n/**\n * Reordena el prompt: estable primero, dinámico después del separador.\n *\n * No-op seguro: si nada casa exactamente una vez, o si la guardia de integridad\n * salta, devuelve el prompt original sin tocar.\n */\nexport function stabilizeSystemPrompt(input: StabilizeInput): StabilizeResult {\n\tconst original = input.prompt;\n\tif (!original.trim()) return { prompt: original, lifted: 0, rolledBack: false };\n\n\tconst candidates = buildStableCandidates(input);\n\tif (candidates.length === 0) return { prompt: original, lifted: 0, rolledBack: false };\n\n\t// Contar SIEMPRE contra la instantánea original: los candidatos anidan.\n\tconst snapshot = original;\n\tconst occurrencesOf = (needle: string): number => {\n\t\tlet count = 0;\n\t\tlet from = 0;\n\t\twhile (true) {\n\t\t\tconst at = snapshot.indexOf(needle, from);\n\t\t\tif (at === -1) break;\n\t\t\tcount++;\n\t\t\tfrom = at + needle.length;\n\t\t\tif (count > 1) break; // con saber que hay más de una basta\n\t\t}\n\t\treturn count;\n\t};\n\n\tconst stable: string[] = [];\n\tlet rest = original;\n\tconst seen = new Set<string>();\n\tfor (const candidate of candidates) {\n\t\tif (seen.has(candidate)) continue;\n\t\tif (occurrencesOf(candidate) !== 1) continue;\n\t\tconst at = rest.indexOf(candidate);\n\t\tif (at === -1) continue; // ya extraído dentro de otro candidato\n\t\tseen.add(candidate);\n\t\tstable.push(candidate);\n\t\trest = rest.slice(0, at) + rest.slice(at + candidate.length);\n\t}\n\n\tif (stable.length === 0) return { prompt: original, lifted: 0, rolledBack: false };\n\n\tconst stableJoined = stable.join(\"\\n\\n\");\n\t// Ya estabilizado: sin esto una segunda pasada apilaría otro separador y el\n\t// prefijo se movería en cada turno — exactamente lo contrario de lo que\n\t// buscamos. La idempotencia no es elegancia aquí, es la propiedad.\n\tif (original.startsWith(stableJoined + STABLE_SEPARATOR)) {\n\t\treturn { prompt: original, lifted: 0, rolledBack: false };\n\t}\n\n\tconst rewritten = `${stableJoined}${STABLE_SEPARATOR}${rest.trim()}`;\n\n\t// Guardia de integridad: ningún marcador estructural puede desaparecer.\n\tconst before = extractStructuralMarkers(original);\n\tconst after = extractStructuralMarkers(rewritten);\n\tif (before.length !== after.length || before.some((m, i) => m !== after[i])) {\n\t\treturn { prompt: original, lifted: 0, rolledBack: true };\n\t}\n\n\treturn { prompt: rewritten, lifted: stable.length, rolledBack: false };\n}\n"]}
1
+ {"version":3,"file":"stabilize.d.ts","sourceRoot":"","sources":["../../../src/core/prompt-cache/stabilize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAKH,qDAAqD;AACrD,eAAO,MAAM,gBAAgB,gBAAgB,CAAC;AAW9C,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,MAAM,WAAW,cAAc;IAC9B,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sEAAsE;IACtE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,2BAA2B;IAC3B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,qCAAqC;IACrC,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxD;AAED,MAAM,WAAW,eAAe;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,UAAU,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAK/D;AAED,uEAAuE;AACvE,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,EAAE,CAkBrE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,cAAc,GAAG,eAAe,CAuD5E"}
@@ -1 +1 @@
1
- {"version":3,"file":"stabilize.js","sourceRoot":"","sources":["../../../src/core/prompt-cache/stabilize.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Estabilización del prefijo del prompt.\n *\n * Las cachés de prompt (DeepSeek, OpenAI, Anthropic) casan por PREFIJO: un byte\n * distinto en la posición N invalida todo lo que va detrás. En DeepSeek el hit\n * cuesta ~31x menos que el miss, así que el coste de un cambio no es\n * proporcional a su tamaño sino a su POSICIÓN.\n *\n * Esto reordena el system prompt para que todo lo estable quede por delante y lo\n * dinámico detrás de un separador, de modo que el sufijo invalidado sea lo más\n * pequeño posible.\n *\n * Dos decisiones de diseño que no son obvias:\n *\n * 1. Los candidatos ANIDAN — el bloque de un context file contiene su propio\n * contenido a secas. Por eso las ocurrencias se cuentan contra UNA instantánea\n * inmutable del prompt original, no contra el texto que va quedando: recontar\n * tras cada extracción daría resultados incoherentes. Cualquier candidato que\n * no aparezca EXACTAMENTE una vez se deja en su sitio.\n *\n * 2. Hay guardia de integridad. Si tras reordenar desaparece cualquier marcador\n * estructural (una etiqueta, un delimitador), se descarta la reescritura\n * entera y se devuelve el original. Un reordenado con un bug que corrompe el\n * prompt en silencio es mucho peor que no cachear.\n */\n\n/** Por debajo de esto un \"candidato\" es ruido que aparece en cualquier sitio. */\nconst MIN_CANDIDATE_LENGTH = 8;\n\n/** Separador entre la zona estable y la dinámica. */\nexport const STABLE_SEPARATOR = \"\\n\\n---\\n\\n\";\n\n/**\n * Ficheros de contexto que se consideran estables.\n *\n * El tamaño NO es criterio: un fichero grande puede cambiar cada turno. Solo se\n * suben ficheros de instrucciones cuyo contenido se sabe estable durante la\n * sesión.\n */\nconst STABLE_CONTEXT_FILES = /(^|\\/)(agents(\\.override)?\\.md|claude\\.md|gemini\\.md|cursor\\.md)$/i;\n\nexport function isStableContextFile(path: string): boolean {\n\treturn STABLE_CONTEXT_FILES.test(path.replace(/\\\\/g, \"/\").toLowerCase());\n}\n\nexport interface StabilizeInput {\n\t/** El system prompt ya ensamblado. */\n\tprompt: string;\n\t/** Prompt de sistema propio del usuario, si lo hay. */\n\tcustomPrompt?: string;\n\t/** Bloques añadidos al final (incluye la personalidad del engine). */\n\tappendSystemPrompt?: string;\n\t/** Guidelines por tool. */\n\tpromptGuidelines?: string[];\n\t/** Ficheros de contexto cargados. */\n\tcontextFiles?: Array<{ path: string; content: string }>;\n}\n\nexport interface StabilizeResult {\n\tprompt: string;\n\t/** Cuántos bloques se subieron al prefijo estable. */\n\tlifted: number;\n\t/** True si la guardia de integridad descartó la reescritura. */\n\trolledBack: boolean;\n}\n\n/**\n * Marcadores estructurales: etiquetas y delimitadores de bloque. Si el\n * reordenado pierde alguno, algo se ha comido texto.\n */\nexport function extractStructuralMarkers(text: string): string[] {\n\tconst markers: string[] = [];\n\tfor (const match of text.matchAll(/<\\/?[a-zA-Z][\\w-]*>/g)) markers.push(match[0]);\n\tfor (const match of text.matchAll(/<!--\\s*[A-Z_]+:(START|END)\\s*-->/g)) markers.push(match[0]);\n\treturn markers.sort();\n}\n\n/** Construye los bloques candidatos a subir, en orden determinista. */\nexport function buildStableCandidates(input: StabilizeInput): string[] {\n\tconst candidates: string[] = [];\n\tconst push = (value: string | undefined) => {\n\t\tconst trimmed = value?.trim();\n\t\tif (trimmed && trimmed.length >= MIN_CANDIDATE_LENGTH) candidates.push(trimmed);\n\t};\n\n\tpush(input.customPrompt);\n\tpush(input.appendSystemPrompt);\n\tfor (const guideline of input.promptGuidelines ?? []) push(`- ${guideline}`);\n\tfor (const file of input.contextFiles ?? []) {\n\t\tif (!isStableContextFile(file.path)) continue;\n\t\t// Dos formas: con cabecera de ruta y sin ella. El ensamblador puede usar\n\t\t// cualquiera de las dos y solo una casará.\n\t\tpush(`## ${file.path}\\n\\n${file.content}`);\n\t\tpush(file.content);\n\t}\n\treturn candidates;\n}\n\n/**\n * Reordena el prompt: estable primero, dinámico después del separador.\n *\n * No-op seguro: si nada casa exactamente una vez, o si la guardia de integridad\n * salta, devuelve el prompt original sin tocar.\n */\nexport function stabilizeSystemPrompt(input: StabilizeInput): StabilizeResult {\n\tconst original = input.prompt;\n\tif (!original.trim()) return { prompt: original, lifted: 0, rolledBack: false };\n\n\tconst candidates = buildStableCandidates(input);\n\tif (candidates.length === 0) return { prompt: original, lifted: 0, rolledBack: false };\n\n\t// Contar SIEMPRE contra la instantánea original: los candidatos anidan.\n\tconst snapshot = original;\n\tconst occurrencesOf = (needle: string): number => {\n\t\tlet count = 0;\n\t\tlet from = 0;\n\t\twhile (true) {\n\t\t\tconst at = snapshot.indexOf(needle, from);\n\t\t\tif (at === -1) break;\n\t\t\tcount++;\n\t\t\tfrom = at + needle.length;\n\t\t\tif (count > 1) break; // con saber que hay más de una basta\n\t\t}\n\t\treturn count;\n\t};\n\n\tconst stable: string[] = [];\n\tlet rest = original;\n\tconst seen = new Set<string>();\n\tfor (const candidate of candidates) {\n\t\tif (seen.has(candidate)) continue;\n\t\tif (occurrencesOf(candidate) !== 1) continue;\n\t\tconst at = rest.indexOf(candidate);\n\t\tif (at === -1) continue; // ya extraído dentro de otro candidato\n\t\tseen.add(candidate);\n\t\tstable.push(candidate);\n\t\trest = rest.slice(0, at) + rest.slice(at + candidate.length);\n\t}\n\n\tif (stable.length === 0) return { prompt: original, lifted: 0, rolledBack: false };\n\n\tconst stableJoined = stable.join(\"\\n\\n\");\n\t// Ya estabilizado: sin esto una segunda pasada apilaría otro separador y el\n\t// prefijo se movería en cada turno — exactamente lo contrario de lo que\n\t// buscamos. La idempotencia no es elegancia aquí, es la propiedad.\n\tif (original.startsWith(stableJoined + STABLE_SEPARATOR)) {\n\t\treturn { prompt: original, lifted: 0, rolledBack: false };\n\t}\n\n\tconst rewritten = `${stableJoined}${STABLE_SEPARATOR}${rest.trim()}`;\n\n\t// Guardia de integridad: ningún marcador estructural puede desaparecer.\n\tconst before = extractStructuralMarkers(original);\n\tconst after = extractStructuralMarkers(rewritten);\n\tif (before.length !== after.length || before.some((m, i) => m !== after[i])) {\n\t\treturn { prompt: original, lifted: 0, rolledBack: true };\n\t}\n\n\treturn { prompt: rewritten, lifted: stable.length, rolledBack: false };\n}\n"]}
1
+ {"version":3,"file":"stabilize.js","sourceRoot":"","sources":["../../../src/core/prompt-cache/stabilize.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../../src/core/prompt-cache/stats.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,MAAM,WAAW,UAAU;IAC1B,+CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,gEAA+D;IAC/D,UAAU,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,UAAU,EAAE,MAAM,CAAC;IACnB,0EAAsE;IACtE,aAAa,EAAE,OAAO,CAAC;CACvB;AAQD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,CAyDvD;AAED,MAAM,WAAW,eAAe;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAEvD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,UAAU,GAAG,eAAe,CASrF;AAED,8DAA4D;AAC5D,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,MAAM,CAMzE;AAOD,kFAAiF;AACjF,qBAAa,eAAe;IAC3B,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAA0C;IACtD,OAAO,CAAC,KAAK,CAA8C;IAE3D,YAAY,QAAQ,EAAE,MAAM,EAE3B;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAO1B;IAED,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,eAAe,CAOxE;IAED,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAEjD;IAED,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAErC;IAED,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAI7B;IAED,OAAO,CAAC,eAAe;IAMjB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAW3B;CACD","sourcesContent":["/**\n * Lectura y persistencia de estadísticas de caché.\n *\n * Sin medición, todo lo demás es fe. Cada familia de proveedor reporta el uso de\n * caché con nombres distintos, y algunos proxies los omiten — en cuyo caso hay\n * que decirlo en vez de mostrar un 0% que parece un problema de caché cuando en\n * realidad es un problema de telemetría.\n */\n\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\n\nexport interface CacheUsage {\n\t/** Tokens de entrada servidos desde caché. */\n\tcacheRead: number;\n\t/** Tokens escritos a la caché (Anthropic los cobra aparte). */\n\tcacheWrite: number;\n\t/** Total de tokens de entrada, incluyendo los cacheados. */\n\ttotalInput: number;\n\t/** True si el proveedor no reportó campos de caché (≠ 0 aciertos). */\n\tmissingFields: boolean;\n}\n\nconst ZERO: CacheUsage = { cacheRead: 0, cacheWrite: 0, totalInput: 0, missingFields: true };\n\nfunction num(value: unknown): number {\n\treturn typeof value === \"number\" && Number.isFinite(value) ? value : 0;\n}\n\n/**\n * Normaliza el usage de cualquier familia de proveedor.\n *\n * Los nombres NO son intercambiables:\n * - DeepSeek: `prompt_cache_hit_tokens` + `prompt_cache_miss_tokens` suman el total.\n * - OpenAI: `prompt_tokens_details.cached_tokens` es un SUBCONJUNTO de `prompt_tokens`.\n * - Anthropic: `input_tokens` EXCLUYE lo cacheado, así que hay que sumarlo.\n * - Gemini: `cachedContentTokenCount` sobre `promptTokenCount`.\n */\nexport function readCacheUsage(raw: unknown): CacheUsage {\n\tif (!raw || typeof raw !== \"object\") return { ...ZERO };\n\tconst u = raw as Record<string, unknown>;\n\n\t// DeepSeek\n\tif (\"prompt_cache_hit_tokens\" in u || \"prompt_cache_miss_tokens\" in u) {\n\t\tconst hit = num(u.prompt_cache_hit_tokens);\n\t\tconst miss = num(u.prompt_cache_miss_tokens);\n\t\treturn { cacheRead: hit, cacheWrite: 0, totalInput: hit + miss || num(u.prompt_tokens), missingFields: false };\n\t}\n\n\t// Anthropic: input_tokens NO incluye lo cacheado.\n\tif (\"cache_read_input_tokens\" in u || \"cache_creation_input_tokens\" in u) {\n\t\tconst read = num(u.cache_read_input_tokens);\n\t\tconst write = num(u.cache_creation_input_tokens);\n\t\treturn {\n\t\t\tcacheRead: read,\n\t\t\tcacheWrite: write,\n\t\t\ttotalInput: num(u.input_tokens) + read + write,\n\t\t\tmissingFields: false,\n\t\t};\n\t}\n\n\t// OpenAI: cached_tokens es subconjunto de prompt_tokens.\n\tconst details = (u.prompt_tokens_details ?? u.input_tokens_details) as Record<string, unknown> | undefined;\n\tif (details && typeof details === \"object\" && \"cached_tokens\" in details) {\n\t\tconst read = num(details.cached_tokens);\n\t\treturn {\n\t\t\tcacheRead: read,\n\t\t\tcacheWrite: num(u.cache_write_tokens),\n\t\t\ttotalInput: num(u.prompt_tokens) || num(u.input_tokens) || read,\n\t\t\tmissingFields: false,\n\t\t};\n\t}\n\n\t// Gemini\n\tconst meta = u.usageMetadata as Record<string, unknown> | undefined;\n\tif (meta && typeof meta === \"object\" && \"cachedContentTokenCount\" in meta) {\n\t\tconst read = num(meta.cachedContentTokenCount);\n\t\treturn { cacheRead: read, cacheWrite: 0, totalInput: num(meta.promptTokenCount) || read, missingFields: false };\n\t}\n\n\t// Forma ya normalizada por el SDK.\n\tif (\"cacheRead\" in u || \"input\" in u) {\n\t\tconst read = num(u.cacheRead);\n\t\tconst write = num(u.cacheWrite);\n\t\treturn {\n\t\t\tcacheRead: read,\n\t\t\tcacheWrite: write,\n\t\t\t// Suelo: el total nunca puede ser menor que lo cacheado, o saldrían\n\t\t\t// ratios por encima del 100% cuando un proxy omite el total.\n\t\t\ttotalInput: Math.max(num(u.input), read + write),\n\t\t\tmissingFields: !(\"cacheRead\" in u),\n\t\t};\n\t}\n\n\treturn { ...ZERO };\n}\n\nexport interface ModelCacheStats {\n\tday: string;\n\trequests: number;\n\thits: number;\n\tcachedTokens: number;\n\ttotalTokens: number;\n\tmissingFieldRequests: number;\n}\n\nexport function emptyStats(day: string): ModelCacheStats {\n\treturn { day, requests: 0, hits: 0, cachedTokens: 0, totalTokens: 0, missingFieldRequests: 0 };\n}\n\nexport function accumulate(stats: ModelCacheStats, usage: CacheUsage): ModelCacheStats {\n\treturn {\n\t\t...stats,\n\t\trequests: stats.requests + 1,\n\t\thits: stats.hits + (usage.cacheRead > 0 ? 1 : 0),\n\t\tcachedTokens: stats.cachedTokens + usage.cacheRead,\n\t\ttotalTokens: stats.totalTokens + usage.totalInput,\n\t\tmissingFieldRequests: stats.missingFieldRequests + (usage.missingFields ? 1 : 0),\n\t};\n}\n\n/** Línea del footer: `DS cache 42/57·1.20M/1.85M 64.9%`. */\nexport function formatStats(label: string, stats: ModelCacheStats): string {\n\tif (stats.requests === 0) return \"\";\n\tconst pct = stats.totalTokens > 0 ? ((stats.cachedTokens / stats.totalTokens) * 100).toFixed(1) : \"0.0\";\n\tconst m = (n: number) => `${(n / 1_000_000).toFixed(2)}M`;\n\tconst warn = stats.missingFieldRequests > 0 ? \" ⚠️ sin datos de caché\" : \"\";\n\treturn `${label} ${stats.hits}/${stats.requests}·${m(stats.cachedTokens)}/${m(stats.totalTokens)} ${pct}%${warn}`;\n}\n\ninterface StatsFile {\n\tversion: 1;\n\tbyModel: Record<string, ModelCacheStats>;\n}\n\n/** Persistencia con escritura debounced; el disco nunca bloquea una petición. */\nexport class CacheStatsStore {\n\tprivate path: string;\n\tprivate data: StatsFile = { version: 1, byModel: {} };\n\tprivate timer: ReturnType<typeof setTimeout> | null = null;\n\n\tconstructor(agentDir: string) {\n\t\tthis.path = join(agentDir, \"prompt-cache-stats.json\");\n\t}\n\n\tasync load(): Promise<void> {\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(await readFile(this.path, \"utf-8\")) as StatsFile;\n\t\t\tif (parsed.version === 1 && parsed.byModel) this.data = parsed;\n\t\t} catch {\n\t\t\t// primer arranque / fichero corrupto: se empieza de cero\n\t\t}\n\t}\n\n\trecord(modelKey: string, day: string, usage: CacheUsage): ModelCacheStats {\n\t\tconst current = this.data.byModel[modelKey];\n\t\tconst base = current && current.day === day ? current : emptyStats(day);\n\t\tconst next = accumulate(base, usage);\n\t\tthis.data.byModel[modelKey] = next;\n\t\tthis.schedulePersist();\n\t\treturn next;\n\t}\n\n\tget(modelKey: string): ModelCacheStats | undefined {\n\t\treturn this.data.byModel[modelKey];\n\t}\n\n\tall(): Record<string, ModelCacheStats> {\n\t\treturn { ...this.data.byModel };\n\t}\n\n\treset(modelKey?: string): void {\n\t\tif (modelKey) delete this.data.byModel[modelKey];\n\t\telse this.data.byModel = {};\n\t\tthis.schedulePersist();\n\t}\n\n\tprivate schedulePersist(): void {\n\t\tif (this.timer) clearTimeout(this.timer);\n\t\tthis.timer = setTimeout(() => void this.flush(), 2000);\n\t\t(this.timer as unknown as { unref?: () => void }).unref?.();\n\t}\n\n\tasync flush(): Promise<void> {\n\t\tif (this.timer) {\n\t\t\tclearTimeout(this.timer);\n\t\t\tthis.timer = null;\n\t\t}\n\t\ttry {\n\t\t\tawait mkdir(dirname(this.path), { recursive: true });\n\t\t\tawait writeFile(this.path, JSON.stringify(this.data), \"utf-8\");\n\t\t} catch {\n\t\t\t// las estadísticas nunca deben romper una sesión\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../../src/core/prompt-cache/stats.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,MAAM,WAAW,UAAU;IAC1B,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,UAAU,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,UAAU,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,aAAa,EAAE,OAAO,CAAC;CACvB;AAQD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,CAyDvD;AAED,MAAM,WAAW,eAAe;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAEvD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,UAAU,GAAG,eAAe,CASrF;AAED,4DAA4D;AAC5D,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,MAAM,CAMzE;AAOD,iFAAiF;AACjF,qBAAa,eAAe;IAC3B,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAA0C;IACtD,OAAO,CAAC,KAAK,CAA8C;gBAE/C,QAAQ,EAAE,MAAM;IAItB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAS3B,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,eAAe;IASzE,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAIlD,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC;IAItC,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAM9B,OAAO,CAAC,eAAe;IAMjB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAY5B"}
@@ -1 +1 @@
1
- {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../../src/core/prompt-cache/stats.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Lectura y persistencia de estadísticas de caché.\n *\n * Sin medición, todo lo demás es fe. Cada familia de proveedor reporta el uso de\n * caché con nombres distintos, y algunos proxies los omiten — en cuyo caso hay\n * que decirlo en vez de mostrar un 0% que parece un problema de caché cuando en\n * realidad es un problema de telemetría.\n */\n\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\n\nexport interface CacheUsage {\n\t/** Tokens de entrada servidos desde caché. */\n\tcacheRead: number;\n\t/** Tokens escritos a la caché (Anthropic los cobra aparte). */\n\tcacheWrite: number;\n\t/** Total de tokens de entrada, incluyendo los cacheados. */\n\ttotalInput: number;\n\t/** True si el proveedor no reportó campos de caché (≠ 0 aciertos). */\n\tmissingFields: boolean;\n}\n\nconst ZERO: CacheUsage = { cacheRead: 0, cacheWrite: 0, totalInput: 0, missingFields: true };\n\nfunction num(value: unknown): number {\n\treturn typeof value === \"number\" && Number.isFinite(value) ? value : 0;\n}\n\n/**\n * Normaliza el usage de cualquier familia de proveedor.\n *\n * Los nombres NO son intercambiables:\n * - DeepSeek: `prompt_cache_hit_tokens` + `prompt_cache_miss_tokens` suman el total.\n * - OpenAI: `prompt_tokens_details.cached_tokens` es un SUBCONJUNTO de `prompt_tokens`.\n * - Anthropic: `input_tokens` EXCLUYE lo cacheado, así que hay que sumarlo.\n * - Gemini: `cachedContentTokenCount` sobre `promptTokenCount`.\n */\nexport function readCacheUsage(raw: unknown): CacheUsage {\n\tif (!raw || typeof raw !== \"object\") return { ...ZERO };\n\tconst u = raw as Record<string, unknown>;\n\n\t// DeepSeek\n\tif (\"prompt_cache_hit_tokens\" in u || \"prompt_cache_miss_tokens\" in u) {\n\t\tconst hit = num(u.prompt_cache_hit_tokens);\n\t\tconst miss = num(u.prompt_cache_miss_tokens);\n\t\treturn { cacheRead: hit, cacheWrite: 0, totalInput: hit + miss || num(u.prompt_tokens), missingFields: false };\n\t}\n\n\t// Anthropic: input_tokens NO incluye lo cacheado.\n\tif (\"cache_read_input_tokens\" in u || \"cache_creation_input_tokens\" in u) {\n\t\tconst read = num(u.cache_read_input_tokens);\n\t\tconst write = num(u.cache_creation_input_tokens);\n\t\treturn {\n\t\t\tcacheRead: read,\n\t\t\tcacheWrite: write,\n\t\t\ttotalInput: num(u.input_tokens) + read + write,\n\t\t\tmissingFields: false,\n\t\t};\n\t}\n\n\t// OpenAI: cached_tokens es subconjunto de prompt_tokens.\n\tconst details = (u.prompt_tokens_details ?? u.input_tokens_details) as Record<string, unknown> | undefined;\n\tif (details && typeof details === \"object\" && \"cached_tokens\" in details) {\n\t\tconst read = num(details.cached_tokens);\n\t\treturn {\n\t\t\tcacheRead: read,\n\t\t\tcacheWrite: num(u.cache_write_tokens),\n\t\t\ttotalInput: num(u.prompt_tokens) || num(u.input_tokens) || read,\n\t\t\tmissingFields: false,\n\t\t};\n\t}\n\n\t// Gemini\n\tconst meta = u.usageMetadata as Record<string, unknown> | undefined;\n\tif (meta && typeof meta === \"object\" && \"cachedContentTokenCount\" in meta) {\n\t\tconst read = num(meta.cachedContentTokenCount);\n\t\treturn { cacheRead: read, cacheWrite: 0, totalInput: num(meta.promptTokenCount) || read, missingFields: false };\n\t}\n\n\t// Forma ya normalizada por el SDK.\n\tif (\"cacheRead\" in u || \"input\" in u) {\n\t\tconst read = num(u.cacheRead);\n\t\tconst write = num(u.cacheWrite);\n\t\treturn {\n\t\t\tcacheRead: read,\n\t\t\tcacheWrite: write,\n\t\t\t// Suelo: el total nunca puede ser menor que lo cacheado, o saldrían\n\t\t\t// ratios por encima del 100% cuando un proxy omite el total.\n\t\t\ttotalInput: Math.max(num(u.input), read + write),\n\t\t\tmissingFields: !(\"cacheRead\" in u),\n\t\t};\n\t}\n\n\treturn { ...ZERO };\n}\n\nexport interface ModelCacheStats {\n\tday: string;\n\trequests: number;\n\thits: number;\n\tcachedTokens: number;\n\ttotalTokens: number;\n\tmissingFieldRequests: number;\n}\n\nexport function emptyStats(day: string): ModelCacheStats {\n\treturn { day, requests: 0, hits: 0, cachedTokens: 0, totalTokens: 0, missingFieldRequests: 0 };\n}\n\nexport function accumulate(stats: ModelCacheStats, usage: CacheUsage): ModelCacheStats {\n\treturn {\n\t\t...stats,\n\t\trequests: stats.requests + 1,\n\t\thits: stats.hits + (usage.cacheRead > 0 ? 1 : 0),\n\t\tcachedTokens: stats.cachedTokens + usage.cacheRead,\n\t\ttotalTokens: stats.totalTokens + usage.totalInput,\n\t\tmissingFieldRequests: stats.missingFieldRequests + (usage.missingFields ? 1 : 0),\n\t};\n}\n\n/** Línea del footer: `DS cache 42/57·1.20M/1.85M 64.9%`. */\nexport function formatStats(label: string, stats: ModelCacheStats): string {\n\tif (stats.requests === 0) return \"\";\n\tconst pct = stats.totalTokens > 0 ? ((stats.cachedTokens / stats.totalTokens) * 100).toFixed(1) : \"0.0\";\n\tconst m = (n: number) => `${(n / 1_000_000).toFixed(2)}M`;\n\tconst warn = stats.missingFieldRequests > 0 ? \" ⚠️ sin datos de caché\" : \"\";\n\treturn `${label} ${stats.hits}/${stats.requests}·${m(stats.cachedTokens)}/${m(stats.totalTokens)} ${pct}%${warn}`;\n}\n\ninterface StatsFile {\n\tversion: 1;\n\tbyModel: Record<string, ModelCacheStats>;\n}\n\n/** Persistencia con escritura debounced; el disco nunca bloquea una petición. */\nexport class CacheStatsStore {\n\tprivate path: string;\n\tprivate data: StatsFile = { version: 1, byModel: {} };\n\tprivate timer: ReturnType<typeof setTimeout> | null = null;\n\n\tconstructor(agentDir: string) {\n\t\tthis.path = join(agentDir, \"prompt-cache-stats.json\");\n\t}\n\n\tasync load(): Promise<void> {\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(await readFile(this.path, \"utf-8\")) as StatsFile;\n\t\t\tif (parsed.version === 1 && parsed.byModel) this.data = parsed;\n\t\t} catch {\n\t\t\t// primer arranque / fichero corrupto: se empieza de cero\n\t\t}\n\t}\n\n\trecord(modelKey: string, day: string, usage: CacheUsage): ModelCacheStats {\n\t\tconst current = this.data.byModel[modelKey];\n\t\tconst base = current && current.day === day ? current : emptyStats(day);\n\t\tconst next = accumulate(base, usage);\n\t\tthis.data.byModel[modelKey] = next;\n\t\tthis.schedulePersist();\n\t\treturn next;\n\t}\n\n\tget(modelKey: string): ModelCacheStats | undefined {\n\t\treturn this.data.byModel[modelKey];\n\t}\n\n\tall(): Record<string, ModelCacheStats> {\n\t\treturn { ...this.data.byModel };\n\t}\n\n\treset(modelKey?: string): void {\n\t\tif (modelKey) delete this.data.byModel[modelKey];\n\t\telse this.data.byModel = {};\n\t\tthis.schedulePersist();\n\t}\n\n\tprivate schedulePersist(): void {\n\t\tif (this.timer) clearTimeout(this.timer);\n\t\tthis.timer = setTimeout(() => void this.flush(), 2000);\n\t\t(this.timer as unknown as { unref?: () => void }).unref?.();\n\t}\n\n\tasync flush(): Promise<void> {\n\t\tif (this.timer) {\n\t\t\tclearTimeout(this.timer);\n\t\t\tthis.timer = null;\n\t\t}\n\t\ttry {\n\t\t\tawait mkdir(dirname(this.path), { recursive: true });\n\t\t\tawait writeFile(this.path, JSON.stringify(this.data), \"utf-8\");\n\t\t} catch {\n\t\t\t// las estadísticas nunca deben romper una sesión\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../../src/core/prompt-cache/stats.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-eleccion.d.ts","sourceRoot":"","sources":["../../src/core/prompt-eleccion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,mBAAmB;IACnC,gDAA+C;IAC/C,SAAS,EAAE,OAAO,CAAC;IACnB,iDAAgD;IAChD,SAAS,EAAE,OAAO,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,mBAAmB,GAAG,MAAM,CAUxE;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAM1C","sourcesContent":["/**\n * La regla de elección de herramienta, en un solo sitio y construida con lo que\n * de verdad está disponible.\n *\n * Antes vivía duplicada literalmente en `browser/tools.ts` y `computer/tools.ts`,\n * y cada copia enrutaba a las cuatro familias — incluida la que su propio\n * fichero no podía garantizar. Con el control del ordenador apagado, el prompt\n * seguía diciendo \"una aplicación de escritorio → computer_*\" y esas tools no\n * existían para el modelo. El agente las pedía, recibía un error opaco, y desde\n * fuera parecía que \"no sabe elegir herramienta\".\n *\n * Una regla que nombra destinos inexistentes es peor que no tener regla: manda\n * en la dirección equivocada con la autoridad del prompt de sistema.\n */\n\nexport interface DestinosDisponibles {\n\t/** Las tools `browser_*` están registradas. */\n\tnavegador: boolean;\n\t/** Las tools `computer_*` están registradas. */\n\tordenador: boolean;\n}\n\n/**\n * Devuelve la línea de enrutado, omitiendo lo que no existe.\n *\n * `web_fetch` y `bash` van siempre porque siempre están: son el suelo del\n * agente. Los otros dos son opcionales y cada uno tiene su interruptor.\n */\nexport function reglaDeEleccion(disponibles: DestinosDisponibles): string {\n\tconst destinos = [\"leer una URL sin tocar nada → web_fetch\"];\n\tif (disponibles.navegador) {\n\t\tdestinos.push(\"interactuar con una web, incluida tu app en localhost → browser_*\");\n\t}\n\tdestinos.push(\"ejecutar comandos, git o mover ficheros → bash\");\n\tif (disponibles.ordenador) {\n\t\tdestinos.push(\"una aplicación de escritorio que no sea navegador ni terminal → computer_*\");\n\t}\n\treturn `Elegir herramienta: ${destinos.join(\"; \")}.`;\n}\n\n/**\n * Qué decirle al agente sobre los navegadores cuando NO tiene tools de\n * navegador.\n *\n * La política del control del ordenador impide teclear en un navegador, y su\n * mensaje de error redirige a `browser_*`. Si esas tools están apagadas, esa\n * redirección apunta al vacío y el agente se queda sin salida. Mejor decírselo\n * antes: no es que deba usar otra cosa, es que no puede hacerlo.\n */\nexport function avisoSinNavegador(): string {\n\treturn (\n\t\t\"No tienes tools de navegador en esta sesión: no puedes manejar páginas web. \" +\n\t\t\"Para leer una URL usa web_fetch. Si la tarea necesita interactuar con una web, \" +\n\t\t\"díselo al usuario en vez de intentarlo por otra vía.\"\n\t);\n}\n"]}
1
+ {"version":3,"file":"prompt-eleccion.d.ts","sourceRoot":"","sources":["../../src/core/prompt-eleccion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,mBAAmB;IACnC,+CAA+C;IAC/C,SAAS,EAAE,OAAO,CAAC;IACnB,gDAAgD;IAChD,SAAS,EAAE,OAAO,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,mBAAmB,GAAG,MAAM,CAUxE;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAM1C"}
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-eleccion.js","sourceRoot":"","sources":["../../src/core/prompt-eleccion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AASH;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,WAAgC,EAAU;IACzE,MAAM,QAAQ,GAAG,CAAC,2CAAyC,CAAC,CAAC;IAC7D,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;QAC3B,QAAQ,CAAC,IAAI,CAAC,qEAAmE,CAAC,CAAC;IACpF,CAAC;IACD,QAAQ,CAAC,IAAI,CAAC,kDAAgD,CAAC,CAAC;IAChE,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;QAC3B,QAAQ,CAAC,IAAI,CAAC,+EAA4E,CAAC,CAAC;IAC7F,CAAC;IACD,OAAO,uBAAuB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AAAA,CACrD;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,GAAW;IAC3C,OAAO,CACN,gFAA8E;QAC9E,iFAAiF;QACjF,wDAAsD,CACtD,CAAC;AAAA,CACF","sourcesContent":["/**\n * La regla de elección de herramienta, en un solo sitio y construida con lo que\n * de verdad está disponible.\n *\n * Antes vivía duplicada literalmente en `browser/tools.ts` y `computer/tools.ts`,\n * y cada copia enrutaba a las cuatro familias — incluida la que su propio\n * fichero no podía garantizar. Con el control del ordenador apagado, el prompt\n * seguía diciendo \"una aplicación de escritorio → computer_*\" y esas tools no\n * existían para el modelo. El agente las pedía, recibía un error opaco, y desde\n * fuera parecía que \"no sabe elegir herramienta\".\n *\n * Una regla que nombra destinos inexistentes es peor que no tener regla: manda\n * en la dirección equivocada con la autoridad del prompt de sistema.\n */\n\nexport interface DestinosDisponibles {\n\t/** Las tools `browser_*` están registradas. */\n\tnavegador: boolean;\n\t/** Las tools `computer_*` están registradas. */\n\tordenador: boolean;\n}\n\n/**\n * Devuelve la línea de enrutado, omitiendo lo que no existe.\n *\n * `web_fetch` y `bash` van siempre porque siempre están: son el suelo del\n * agente. Los otros dos son opcionales y cada uno tiene su interruptor.\n */\nexport function reglaDeEleccion(disponibles: DestinosDisponibles): string {\n\tconst destinos = [\"leer una URL sin tocar nada → web_fetch\"];\n\tif (disponibles.navegador) {\n\t\tdestinos.push(\"interactuar con una web, incluida tu app en localhost → browser_*\");\n\t}\n\tdestinos.push(\"ejecutar comandos, git o mover ficheros → bash\");\n\tif (disponibles.ordenador) {\n\t\tdestinos.push(\"una aplicación de escritorio que no sea navegador ni terminal → computer_*\");\n\t}\n\treturn `Elegir herramienta: ${destinos.join(\"; \")}.`;\n}\n\n/**\n * Qué decirle al agente sobre los navegadores cuando NO tiene tools de\n * navegador.\n *\n * La política del control del ordenador impide teclear en un navegador, y su\n * mensaje de error redirige a `browser_*`. Si esas tools están apagadas, esa\n * redirección apunta al vacío y el agente se queda sin salida. Mejor decírselo\n * antes: no es que deba usar otra cosa, es que no puede hacerlo.\n */\nexport function avisoSinNavegador(): string {\n\treturn (\n\t\t\"No tienes tools de navegador en esta sesión: no puedes manejar páginas web. \" +\n\t\t\"Para leer una URL usa web_fetch. Si la tarea necesita interactuar con una web, \" +\n\t\t\"díselo al usuario en vez de intentarlo por otra vía.\"\n\t);\n}\n"]}
1
+ {"version":3,"file":"prompt-eleccion.js","sourceRoot":"","sources":["../../src/core/prompt-eleccion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AASH;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,WAAgC;IAC/D,MAAM,QAAQ,GAAG,CAAC,yCAAyC,CAAC,CAAC;IAC7D,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;QAC3B,QAAQ,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;IACpF,CAAC;IACD,QAAQ,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;IAChE,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;QAC3B,QAAQ,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAC;IAC7F,CAAC;IACD,OAAO,uBAAuB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACtD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB;IAChC,OAAO,CACN,8EAA8E;QAC9E,iFAAiF;QACjF,sDAAsD,CACtD,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-optimizer.d.ts","sourceRoot":"","sources":["../../src/core/prompt-optimizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,SAAS,CAAC;AAE5D,MAAM,WAAW,oBAAoB;IACpC,yCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,OAAO,CAAC,EAAE;QACT,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;KAC1B,CAAC;IACF,0DAAwD;IACxD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACrC,QAAQ,EAAE,uBAAuB,CAAC;IAClC,oEAAmE;IACnE,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,uEAAuE;IACvE,QAAQ,EAAE,MAAM,CAAC;IACjB,kEAAgE;IAChE,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,uEAAsE;AACtE,MAAM,MAAM,uBAAuB,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAgCrG;;;;GAIG;AACH,wBAAsB,kBAAkB,CACvC,KAAK,EAAE,oBAAoB,EAC3B,QAAQ,EAAE,uBAAuB,GAC/B,OAAO,CAAC,qBAAqB,CAAC,CAmEhC","sourcesContent":["/**\n * Optimizador de prompt autónomo (Ada Intelligence Engine).\n *\n * Antes de procesar la petición del usuario, el sistema la analiza contra las\n * mejores prácticas de ingeniería de prompts (basadas en las guías de Claude —\n * claridad, contexto, ejemplos, estructura XML, rol, formato de salida, criterios\n * de éxito, alcance) y decide:\n *\n * 1. CLARIFY — hay gaps de información críticos → genera preguntas de\n * clarificación (máx. 3) para dejar el prompt sin huecos.\n * 2. ENHANCE — la petición es suficiente → la reescribe como un prompt\n * estructurado y sin ambigüedad.\n *\n * El resultado es un JSON estructurado (never free-text) para consumo fiable\n * por la sesión, el CLI y el desktop.\n */\n\nexport type PromptOptimizerDecision = \"clarify\" | \"enhance\";\n\nexport interface PromptOptimizerInput {\n\t/** La petición original del usuario. */\n\ttext: string;\n\t/** Contexto disponible: proyecto, objetivo activo, mensajes recientes. */\n\tcontext?: {\n\t\tprojectDir?: string;\n\t\tactiveGoal?: string;\n\t\trecentMessages?: string[];\n\t};\n\t/** Máximo de preguntas de clarificación (default 3). */\n\tmaxQuestions?: number;\n\t/**\n\t * Modo \"auto\": si el LLM pide clarificar, NO preguntar al usuario —\n\t * hacer una segunda pasada que fuerza un prompt mejorado con supuestos\n\t * razonables (mejora sin interrumpir).\n\t */\n\tforceEnhance?: boolean;\n}\n\nexport interface PromptOptimizerResult {\n\tdecision: PromptOptimizerDecision;\n\t/** Preguntas de clarificación (solo si decision === \"clarify\"). */\n\tquestions: string[];\n\t/** Prompt mejorado y estructurado (solo si decision === \"enhance\"). */\n\tenhanced: string;\n\t/** Resumen breve de qué se mejoró (para mostrar al usuario). */\n\tsummary: string;\n}\n\n/** Callback que ejecuta una llamada LLM (inyectado por la sesión). */\nexport type PromptOptimizerComplete = (systemPrompt: string, userContent: string) => Promise<string>;\n\n/** Guías de ingeniería de prompts que codifica el optimizador. */\nconst OPTIMIZER_SYSTEM_PROMPT = `Eres un experto en ingeniería de prompts. Tu trabajo es tomar la petición de un usuario y producir una versión perfecta, sin huecos, que maximice la calidad de la respuesta de cualquier modelo LLM.\n\nAplica estas mejores prácticas (basadas en las guías de referencia de Anthropic):\n\n1. CLARIDAD: sé específico sobre qué se quiere, el formato de salida deseado y las restricciones. Instrucciones como pasos numerados o bullets cuando el orden importa.\n2. CONTEXTO: añade el contexto o motivación detrás de la petición (\"por qué es importante\") para que el modelo entienda el objetivo.\n3. ROL: da al modelo un rol claro y enfocado (\"Actúa como un ingeniero de software senior especializado en X\").\n4. ESTRUCTURA XML: organiza el prompt con etiquetas descriptivas (<context>, <instructions>, <input>, <constraints>, <output_format>) para eliminar ambigüedad de parseo.\n5. EJEMPLOS: incluye 1-3 ejemplos concretos (few-shot) cuando el formato de salida no sea obvio.\n6. FORMATO DE SALIDA: especifica exactamente el formato esperado (JSON, markdown, resumen de N líneas, código con tests...).\n7. CRITERIOS DE ÉXITO: define qué constituye un resultado correcto y verificación (por ejemplo, \"ejecuta los tests antes de terminar\").\n8. ALCANCE: limita el trabajo (\"no añadas features fuera de lo pedido\", \"solo modifica estos archivos\").\n9. ACCIÓN vs SUGERENCIA: si el usuario pide un cambio, sé explícito sobre que debe IMPLEMENTARLO, no solo sugerirlo (\"Implementa X\" en vez de \"¿podrías sugerir cambios a X?\").\n10. SIN GAPS: identifica la información que falta y que cambiaría materialmente el resultado.\n\nRUTINA:\nPaso 1 — Analiza la petición del usuario contra las 10 prácticas.\nPaso 2 — Decide si hay gaps CRÍTICOS (falta de contexto, ambigüedad sobre alcance/formato/destino que cambiaría el resultado):\n - Si SÍ: decision = \"clarify\". Genera como máximo ${\"{{MAX_QUESTIONS}}\"} preguntas, cada una específica y accionable, que el usuario pueda responder en una línea. No hagas preguntas triviales.\n - Si NO (o los gaps son menores): decision = \"enhance\". Reescribe el prompt completo como un prompt estructurado y profesional, SIN preguntar nada.\nPaso 3 — summary: una frase corta (máx. 12 palabras, en el idioma del usuario) sobre lo que se mejoró (o que se necesitan aclaraciones).\n\nREGLAS DE SALIDA:\n- Responde SOLO JSON válido con esta forma exacta:\n {\"decision\":\"clarify\"|\"enhance\",\"questions\":[...],\"enhanced\":\"...\",\"summary\":\"...\"}\n- questions vacío si decision es enhance. enhanced vacío si decision es clarify.\n- Si el prompt ya es excelente, enhance puede devolverlo casi igual (solo estructura) — no inflar.\n- Preserva el idioma del usuario en el prompt mejorado y en summary.`;\n\n/**\n * Optimiza (o solicita clarificación para) la petición del usuario.\n * Usa el callback LLM inyectado. Nunca lanza: en fallo devuelve la petición\n * original sin cambios con decision \"enhance\".\n */\nexport async function optimizeUserPrompt(\n\tinput: PromptOptimizerInput,\n\tcomplete: PromptOptimizerComplete,\n): Promise<PromptOptimizerResult> {\n\tconst maxQuestions = input.maxQuestions ?? 3;\n\n\tconst userContent = [\n\t\t\"<user_request>\",\n\t\tinput.text,\n\t\t\"</user_request>\",\n\t\tinput.context?.projectDir ? `<project_dir>${input.context.projectDir}</project_dir>` : \"\",\n\t\tinput.context?.activeGoal ? `<active_goal>${input.context.activeGoal}</active_goal>` : \"\",\n\t\tinput.context?.recentMessages?.length\n\t\t\t? `<conversation_context>\\n${input.context.recentMessages.slice(-4).join(\"\\n---\\n\")}\\n</conversation_context>`\n\t\t\t: \"\",\n\t]\n\t\t.filter(Boolean)\n\t\t.join(\"\\n\");\n\n\tconst systemPrompt = OPTIMIZER_SYSTEM_PROMPT.replace(\"{{MAX_QUESTIONS}}\", String(maxQuestions));\n\n\ttry {\n\t\tconst raw = await complete(systemPrompt, userContent);\n\t\tconst parsed = parseOptimizerJson(raw);\n\t\tif (!parsed) return fallbackEnhance(input.text);\n\t\tif (parsed.decision === \"clarify\" && input.forceEnhance) {\n\t\t\t// Segunda pasada: mejorar sin preguntar (modo auto).\n\t\t\tconst forcedRaw = await complete(\n\t\t\t\tsystemPrompt,\n\t\t\t\tuserContent +\n\t\t\t\t\t\"\\n\\nIMPORTANTE: modo automático — NO hagas preguntas. \" +\n\t\t\t\t\t\"Resuelve los gaps con supuestos razonables y devuelve SOLO un \" +\n\t\t\t\t\t'prompt mejorado con decision \"enhance\".',\n\t\t\t);\n\t\t\tconst forced = parseOptimizerJson(forcedRaw);\n\t\t\tif (forced && forced.decision === \"enhance\" && typeof forced.enhanced === \"string\" && forced.enhanced.trim()) {\n\t\t\t\treturn {\n\t\t\t\t\tdecision: \"enhance\",\n\t\t\t\t\tquestions: [],\n\t\t\t\t\tenhanced: forced.enhanced.trim(),\n\t\t\t\t\tsummary: typeof forced.summary === \"string\" ? forced.summary : \"\",\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn fallbackEnhance(input.text);\n\t\t}\n\t\tif (parsed.decision === \"clarify\") {\n\t\t\tconst questions = Array.isArray(parsed.questions)\n\t\t\t\t? parsed.questions\n\t\t\t\t\t\t.filter((q): q is string => typeof q === \"string\" && q.trim().length > 0)\n\t\t\t\t\t\t.slice(0, maxQuestions)\n\t\t\t\t: [];\n\t\t\tif (questions.length === 0) return fallbackEnhance(input.text);\n\t\t\treturn {\n\t\t\t\tdecision: \"clarify\",\n\t\t\t\tquestions,\n\t\t\t\tenhanced: \"\",\n\t\t\t\tsummary: typeof parsed.summary === \"string\" && parsed.summary ? parsed.summary : \"\",\n\t\t\t};\n\t\t}\n\t\tconst enhanced =\n\t\t\ttypeof parsed.enhanced === \"string\" && parsed.enhanced.trim() ? parsed.enhanced.trim() : input.text;\n\t\treturn {\n\t\t\tdecision: \"enhance\",\n\t\t\tquestions: [],\n\t\t\tenhanced,\n\t\t\tsummary: typeof parsed.summary === \"string\" ? parsed.summary : \"\",\n\t\t};\n\t} catch {\n\t\treturn fallbackEnhance(input.text);\n\t}\n}\n\n/** Extrae JSON robusto de la salida del LLM (tolera texto alrededor y fences). */\nfunction parseOptimizerJson(raw: string): {\n\tdecision?: string;\n\tquestions?: unknown;\n\tenhanced?: unknown;\n\tsummary?: unknown;\n} | null {\n\tconst cleaned = raw\n\t\t.trim()\n\t\t.replace(/^```(?:json)?/i, \"\")\n\t\t.replace(/```$/, \"\")\n\t\t.trim();\n\t// Buscar el primer objeto JSON balanceado.\n\tconst start = cleaned.indexOf(\"{\");\n\tconst end = cleaned.lastIndexOf(\"}\");\n\tif (start === -1 || end === -1 || end <= start) return null;\n\ttry {\n\t\treturn JSON.parse(cleaned.slice(start, end + 1)) as {\n\t\t\tdecision?: string;\n\t\t\tquestions?: unknown;\n\t\t\tenhanced?: unknown;\n\t\t\tsummary?: unknown;\n\t\t};\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n/** Fallback seguro: devuelve la petición tal cual (nunca degrada la experiencia). */\nfunction fallbackEnhance(text: string): PromptOptimizerResult {\n\treturn { decision: \"enhance\", questions: [], enhanced: text, summary: \"\" };\n}\n"]}
1
+ {"version":3,"file":"prompt-optimizer.d.ts","sourceRoot":"","sources":["../../src/core/prompt-optimizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,SAAS,CAAC;AAE5D,MAAM,WAAW,oBAAoB;IACpC,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,OAAO,CAAC,EAAE;QACT,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;KAC1B,CAAC;IACF,wDAAwD;IACxD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACrC,QAAQ,EAAE,uBAAuB,CAAC;IAClC,mEAAmE;IACnE,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,uEAAuE;IACvE,QAAQ,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,sEAAsE;AACtE,MAAM,MAAM,uBAAuB,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAgCrG;;;;GAIG;AACH,wBAAsB,kBAAkB,CACvC,KAAK,EAAE,oBAAoB,EAC3B,QAAQ,EAAE,uBAAuB,GAC/B,OAAO,CAAC,qBAAqB,CAAC,CAmEhC"}
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-optimizer.js","sourceRoot":"","sources":["../../src/core/prompt-optimizer.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Optimizador de prompt autónomo (Ada Intelligence Engine).\n *\n * Antes de procesar la petición del usuario, el sistema la analiza contra las\n * mejores prácticas de ingeniería de prompts (basadas en las guías de Claude —\n * claridad, contexto, ejemplos, estructura XML, rol, formato de salida, criterios\n * de éxito, alcance) y decide:\n *\n * 1. CLARIFY — hay gaps de información críticos → genera preguntas de\n * clarificación (máx. 3) para dejar el prompt sin huecos.\n * 2. ENHANCE — la petición es suficiente → la reescribe como un prompt\n * estructurado y sin ambigüedad.\n *\n * El resultado es un JSON estructurado (never free-text) para consumo fiable\n * por la sesión, el CLI y el desktop.\n */\n\nexport type PromptOptimizerDecision = \"clarify\" | \"enhance\";\n\nexport interface PromptOptimizerInput {\n\t/** La petición original del usuario. */\n\ttext: string;\n\t/** Contexto disponible: proyecto, objetivo activo, mensajes recientes. */\n\tcontext?: {\n\t\tprojectDir?: string;\n\t\tactiveGoal?: string;\n\t\trecentMessages?: string[];\n\t};\n\t/** Máximo de preguntas de clarificación (default 3). */\n\tmaxQuestions?: number;\n\t/**\n\t * Modo \"auto\": si el LLM pide clarificar, NO preguntar al usuario —\n\t * hacer una segunda pasada que fuerza un prompt mejorado con supuestos\n\t * razonables (mejora sin interrumpir).\n\t */\n\tforceEnhance?: boolean;\n}\n\nexport interface PromptOptimizerResult {\n\tdecision: PromptOptimizerDecision;\n\t/** Preguntas de clarificación (solo si decision === \"clarify\"). */\n\tquestions: string[];\n\t/** Prompt mejorado y estructurado (solo si decision === \"enhance\"). */\n\tenhanced: string;\n\t/** Resumen breve de qué se mejoró (para mostrar al usuario). */\n\tsummary: string;\n}\n\n/** Callback que ejecuta una llamada LLM (inyectado por la sesión). */\nexport type PromptOptimizerComplete = (systemPrompt: string, userContent: string) => Promise<string>;\n\n/** Guías de ingeniería de prompts que codifica el optimizador. */\nconst OPTIMIZER_SYSTEM_PROMPT = `Eres un experto en ingeniería de prompts. Tu trabajo es tomar la petición de un usuario y producir una versión perfecta, sin huecos, que maximice la calidad de la respuesta de cualquier modelo LLM.\n\nAplica estas mejores prácticas (basadas en las guías de referencia de Anthropic):\n\n1. CLARIDAD: sé específico sobre qué se quiere, el formato de salida deseado y las restricciones. Instrucciones como pasos numerados o bullets cuando el orden importa.\n2. CONTEXTO: añade el contexto o motivación detrás de la petición (\"por qué es importante\") para que el modelo entienda el objetivo.\n3. ROL: da al modelo un rol claro y enfocado (\"Actúa como un ingeniero de software senior especializado en X\").\n4. ESTRUCTURA XML: organiza el prompt con etiquetas descriptivas (<context>, <instructions>, <input>, <constraints>, <output_format>) para eliminar ambigüedad de parseo.\n5. EJEMPLOS: incluye 1-3 ejemplos concretos (few-shot) cuando el formato de salida no sea obvio.\n6. FORMATO DE SALIDA: especifica exactamente el formato esperado (JSON, markdown, resumen de N líneas, código con tests...).\n7. CRITERIOS DE ÉXITO: define qué constituye un resultado correcto y verificación (por ejemplo, \"ejecuta los tests antes de terminar\").\n8. ALCANCE: limita el trabajo (\"no añadas features fuera de lo pedido\", \"solo modifica estos archivos\").\n9. ACCIÓN vs SUGERENCIA: si el usuario pide un cambio, sé explícito sobre que debe IMPLEMENTARLO, no solo sugerirlo (\"Implementa X\" en vez de \"¿podrías sugerir cambios a X?\").\n10. SIN GAPS: identifica la información que falta y que cambiaría materialmente el resultado.\n\nRUTINA:\nPaso 1 — Analiza la petición del usuario contra las 10 prácticas.\nPaso 2 — Decide si hay gaps CRÍTICOS (falta de contexto, ambigüedad sobre alcance/formato/destino que cambiaría el resultado):\n - Si SÍ: decision = \"clarify\". Genera como máximo ${\"{{MAX_QUESTIONS}}\"} preguntas, cada una específica y accionable, que el usuario pueda responder en una línea. No hagas preguntas triviales.\n - Si NO (o los gaps son menores): decision = \"enhance\". Reescribe el prompt completo como un prompt estructurado y profesional, SIN preguntar nada.\nPaso 3 — summary: una frase corta (máx. 12 palabras, en el idioma del usuario) sobre lo que se mejoró (o que se necesitan aclaraciones).\n\nREGLAS DE SALIDA:\n- Responde SOLO JSON válido con esta forma exacta:\n {\"decision\":\"clarify\"|\"enhance\",\"questions\":[...],\"enhanced\":\"...\",\"summary\":\"...\"}\n- questions vacío si decision es enhance. enhanced vacío si decision es clarify.\n- Si el prompt ya es excelente, enhance puede devolverlo casi igual (solo estructura) — no inflar.\n- Preserva el idioma del usuario en el prompt mejorado y en summary.`;\n\n/**\n * Optimiza (o solicita clarificación para) la petición del usuario.\n * Usa el callback LLM inyectado. Nunca lanza: en fallo devuelve la petición\n * original sin cambios con decision \"enhance\".\n */\nexport async function optimizeUserPrompt(\n\tinput: PromptOptimizerInput,\n\tcomplete: PromptOptimizerComplete,\n): Promise<PromptOptimizerResult> {\n\tconst maxQuestions = input.maxQuestions ?? 3;\n\n\tconst userContent = [\n\t\t\"<user_request>\",\n\t\tinput.text,\n\t\t\"</user_request>\",\n\t\tinput.context?.projectDir ? `<project_dir>${input.context.projectDir}</project_dir>` : \"\",\n\t\tinput.context?.activeGoal ? `<active_goal>${input.context.activeGoal}</active_goal>` : \"\",\n\t\tinput.context?.recentMessages?.length\n\t\t\t? `<conversation_context>\\n${input.context.recentMessages.slice(-4).join(\"\\n---\\n\")}\\n</conversation_context>`\n\t\t\t: \"\",\n\t]\n\t\t.filter(Boolean)\n\t\t.join(\"\\n\");\n\n\tconst systemPrompt = OPTIMIZER_SYSTEM_PROMPT.replace(\"{{MAX_QUESTIONS}}\", String(maxQuestions));\n\n\ttry {\n\t\tconst raw = await complete(systemPrompt, userContent);\n\t\tconst parsed = parseOptimizerJson(raw);\n\t\tif (!parsed) return fallbackEnhance(input.text);\n\t\tif (parsed.decision === \"clarify\" && input.forceEnhance) {\n\t\t\t// Segunda pasada: mejorar sin preguntar (modo auto).\n\t\t\tconst forcedRaw = await complete(\n\t\t\t\tsystemPrompt,\n\t\t\t\tuserContent +\n\t\t\t\t\t\"\\n\\nIMPORTANTE: modo automático — NO hagas preguntas. \" +\n\t\t\t\t\t\"Resuelve los gaps con supuestos razonables y devuelve SOLO un \" +\n\t\t\t\t\t'prompt mejorado con decision \"enhance\".',\n\t\t\t);\n\t\t\tconst forced = parseOptimizerJson(forcedRaw);\n\t\t\tif (forced && forced.decision === \"enhance\" && typeof forced.enhanced === \"string\" && forced.enhanced.trim()) {\n\t\t\t\treturn {\n\t\t\t\t\tdecision: \"enhance\",\n\t\t\t\t\tquestions: [],\n\t\t\t\t\tenhanced: forced.enhanced.trim(),\n\t\t\t\t\tsummary: typeof forced.summary === \"string\" ? forced.summary : \"\",\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn fallbackEnhance(input.text);\n\t\t}\n\t\tif (parsed.decision === \"clarify\") {\n\t\t\tconst questions = Array.isArray(parsed.questions)\n\t\t\t\t? parsed.questions\n\t\t\t\t\t\t.filter((q): q is string => typeof q === \"string\" && q.trim().length > 0)\n\t\t\t\t\t\t.slice(0, maxQuestions)\n\t\t\t\t: [];\n\t\t\tif (questions.length === 0) return fallbackEnhance(input.text);\n\t\t\treturn {\n\t\t\t\tdecision: \"clarify\",\n\t\t\t\tquestions,\n\t\t\t\tenhanced: \"\",\n\t\t\t\tsummary: typeof parsed.summary === \"string\" && parsed.summary ? parsed.summary : \"\",\n\t\t\t};\n\t\t}\n\t\tconst enhanced =\n\t\t\ttypeof parsed.enhanced === \"string\" && parsed.enhanced.trim() ? parsed.enhanced.trim() : input.text;\n\t\treturn {\n\t\t\tdecision: \"enhance\",\n\t\t\tquestions: [],\n\t\t\tenhanced,\n\t\t\tsummary: typeof parsed.summary === \"string\" ? parsed.summary : \"\",\n\t\t};\n\t} catch {\n\t\treturn fallbackEnhance(input.text);\n\t}\n}\n\n/** Extrae JSON robusto de la salida del LLM (tolera texto alrededor y fences). */\nfunction parseOptimizerJson(raw: string): {\n\tdecision?: string;\n\tquestions?: unknown;\n\tenhanced?: unknown;\n\tsummary?: unknown;\n} | null {\n\tconst cleaned = raw\n\t\t.trim()\n\t\t.replace(/^```(?:json)?/i, \"\")\n\t\t.replace(/```$/, \"\")\n\t\t.trim();\n\t// Buscar el primer objeto JSON balanceado.\n\tconst start = cleaned.indexOf(\"{\");\n\tconst end = cleaned.lastIndexOf(\"}\");\n\tif (start === -1 || end === -1 || end <= start) return null;\n\ttry {\n\t\treturn JSON.parse(cleaned.slice(start, end + 1)) as {\n\t\t\tdecision?: string;\n\t\t\tquestions?: unknown;\n\t\t\tenhanced?: unknown;\n\t\t\tsummary?: unknown;\n\t\t};\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n/** Fallback seguro: devuelve la petición tal cual (nunca degrada la experiencia). */\nfunction fallbackEnhance(text: string): PromptOptimizerResult {\n\treturn { decision: \"enhance\", questions: [], enhanced: text, summary: \"\" };\n}\n"]}
1
+ {"version":3,"file":"prompt-optimizer.js","sourceRoot":"","sources":["../../src/core/prompt-optimizer.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-templates.d.ts","sourceRoot":"","sources":["../../src/core/prompt-templates.ts"],"names":[],"mappings":"AAKA,OAAO,EAA6B,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9E;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CA+B7D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAgCtE;AA2ED,MAAM,WAAW,0BAA0B;IAC1C,qDAAqD;IACrD,GAAG,EAAE,MAAM,CAAC;IACZ,mDAAmD;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,0CAA0C;IAC1C,eAAe,EAAE,OAAO,CAAC;CACzB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,cAAc,EAAE,CAqEzF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,MAAM,CAgBtF","sourcesContent":["import { existsSync, readdirSync, readFileSync, statSync } from \"fs\";\nimport { basename, dirname, join, resolve, sep } from \"path\";\nimport { CONFIG_DIR_NAME } from \"../config.ts\";\nimport { parseFrontmatter } from \"../utils/frontmatter.ts\";\nimport { resolvePath } from \"../utils/paths.ts\";\nimport { createSyntheticSourceInfo, type SourceInfo } from \"./source-info.ts\";\n\n/**\n * Represents a prompt template loaded from a markdown file\n */\nexport interface PromptTemplate {\n\tname: string;\n\tdescription: string;\n\targumentHint?: string;\n\tcontent: string;\n\tsourceInfo: SourceInfo;\n\tfilePath: string; // Absolute path to the template file\n}\n\n/**\n * Parse command arguments respecting quoted strings (bash-style)\n * Returns array of arguments\n */\nexport function parseCommandArgs(argsString: string): string[] {\n\tconst args: string[] = [];\n\tlet current = \"\";\n\tlet inQuote: string | null = null;\n\n\tfor (let i = 0; i < argsString.length; i++) {\n\t\tconst char = argsString[i];\n\n\t\tif (inQuote) {\n\t\t\tif (char === inQuote) {\n\t\t\t\tinQuote = null;\n\t\t\t} else {\n\t\t\t\tcurrent += char;\n\t\t\t}\n\t\t} else if (char === '\"' || char === \"'\") {\n\t\t\tinQuote = char;\n\t\t} else if (/\\s/.test(char)) {\n\t\t\tif (current) {\n\t\t\t\targs.push(current);\n\t\t\t\tcurrent = \"\";\n\t\t\t}\n\t\t} else {\n\t\t\tcurrent += char;\n\t\t}\n\t}\n\n\tif (current) {\n\t\targs.push(current);\n\t}\n\n\treturn args;\n}\n\n/**\n * Substitute argument placeholders in template content\n * Supports:\n * - $1, $2, ... for positional args\n * - $@ and $ARGUMENTS for all args\n * - ${N:-default} for positional arg N with default when missing/empty\n * - ${@:-default} and ${ARGUMENTS:-default} for all args with a default when empty\n * - ${@:N} for args from Nth onwards (bash-style slicing)\n * - ${@:N:L} for L args starting from Nth\n *\n * Note: Replacement happens on the template string only. Argument and default values\n * containing patterns like $1, $@, or $ARGUMENTS are NOT recursively substituted.\n */\nexport function substituteArgs(content: string, args: string[]): string {\n\tconst allArgs = args.join(\" \");\n\n\treturn content.replace(\n\t\t/\\$\\{(\\d+|ARGUMENTS|@):-([^}]*)\\}|\\$\\{@:(\\d+)(?::(\\d+))?\\}|\\$(ARGUMENTS|@|\\d+)/g,\n\t\t(_match, defaultTarget, defaultValue, sliceStart, sliceLength, simple) => {\n\t\t\tif (defaultTarget) {\n\t\t\t\tconst value =\n\t\t\t\t\tdefaultTarget === \"@\" || defaultTarget === \"ARGUMENTS\" ? allArgs : args[parseInt(defaultTarget, 10) - 1];\n\t\t\t\treturn value ? value : defaultValue;\n\t\t\t}\n\n\t\t\tif (sliceStart) {\n\t\t\t\tlet start = parseInt(sliceStart, 10) - 1; // Convert to 0-indexed (user provides 1-indexed)\n\t\t\t\t// Treat 0 as 1 (bash convention: args start at 1)\n\t\t\t\tif (start < 0) start = 0;\n\n\t\t\t\tif (sliceLength) {\n\t\t\t\t\tconst length = parseInt(sliceLength, 10);\n\t\t\t\t\treturn args.slice(start, start + length).join(\" \");\n\t\t\t\t}\n\t\t\t\treturn args.slice(start).join(\" \");\n\t\t\t}\n\n\t\t\tif (simple === \"ARGUMENTS\" || simple === \"@\") {\n\t\t\t\treturn allArgs;\n\t\t\t}\n\n\t\t\tconst index = parseInt(simple, 10) - 1;\n\t\t\treturn args[index] ?? \"\";\n\t\t},\n\t);\n}\n\nfunction loadTemplateFromFile(filePath: string, sourceInfo: SourceInfo): PromptTemplate | null {\n\ttry {\n\t\tconst rawContent = readFileSync(filePath, \"utf-8\");\n\t\tconst { frontmatter, body } = parseFrontmatter<Record<string, string>>(rawContent);\n\n\t\tconst name = basename(filePath).replace(/\\.md$/, \"\");\n\n\t\t// Get description from frontmatter or first non-empty line\n\t\tlet description = frontmatter.description || \"\";\n\t\tif (!description) {\n\t\t\tconst firstLine = body.split(\"\\n\").find((line) => line.trim());\n\t\t\tif (firstLine) {\n\t\t\t\t// Truncate if too long\n\t\t\t\tdescription = firstLine.slice(0, 60);\n\t\t\t\tif (firstLine.length > 60) description += \"...\";\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tname,\n\t\t\tdescription,\n\t\t\t...(frontmatter[\"argument-hint\"] && { argumentHint: frontmatter[\"argument-hint\"] }),\n\t\t\tcontent: body,\n\t\t\tsourceInfo,\n\t\t\tfilePath,\n\t\t};\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n/**\n * Scan a directory for .md files (non-recursive) and load them as prompt templates.\n */\nfunction loadTemplatesFromDir(dir: string, getSourceInfo: (filePath: string) => SourceInfo): PromptTemplate[] {\n\tconst templates: PromptTemplate[] = [];\n\n\tif (!existsSync(dir)) {\n\t\treturn templates;\n\t}\n\n\ttry {\n\t\tconst entries = readdirSync(dir, { withFileTypes: true });\n\n\t\tfor (const entry of entries) {\n\t\t\tconst fullPath = join(dir, entry.name);\n\n\t\t\t// For symlinks, check if they point to a file\n\t\t\tlet isFile = entry.isFile();\n\t\t\tif (entry.isSymbolicLink()) {\n\t\t\t\ttry {\n\t\t\t\t\tconst stats = statSync(fullPath);\n\t\t\t\t\tisFile = stats.isFile();\n\t\t\t\t} catch {\n\t\t\t\t\t// Broken symlink, skip it\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (isFile && entry.name.endsWith(\".md\")) {\n\t\t\t\tconst template = loadTemplateFromFile(fullPath, getSourceInfo(fullPath));\n\t\t\t\tif (template) {\n\t\t\t\t\ttemplates.push(template);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch {\n\t\treturn templates;\n\t}\n\n\treturn templates;\n}\n\nexport interface LoadPromptTemplatesOptions {\n\t/** Working directory for project-local templates. */\n\tcwd: string;\n\t/** Agent config directory for global templates. */\n\tagentDir: string;\n\t/** Explicit prompt template paths (files or directories). */\n\tpromptPaths: string[];\n\t/** Include default prompt directories. */\n\tincludeDefaults: boolean;\n}\n\n/**\n * Load all prompt templates from:\n * 1. Global: agentDir/prompts/\n * 2. Project: cwd/{CONFIG_DIR_NAME}/prompts/\n * 3. Explicit prompt paths\n */\nexport function loadPromptTemplates(options: LoadPromptTemplatesOptions): PromptTemplate[] {\n\tconst resolvedCwd = resolvePath(options.cwd);\n\tconst resolvedAgentDir = resolvePath(options.agentDir);\n\tconst promptPaths = options.promptPaths;\n\tconst includeDefaults = options.includeDefaults;\n\n\tconst templates: PromptTemplate[] = [];\n\n\tconst globalPromptsDir = join(resolvedAgentDir, \"prompts\");\n\tconst projectPromptsDir = resolve(resolvedCwd, CONFIG_DIR_NAME, \"prompts\");\n\n\tconst isUnderPath = (target: string, root: string): boolean => {\n\t\tconst normalizedRoot = resolve(root);\n\t\tif (target === normalizedRoot) {\n\t\t\treturn true;\n\t\t}\n\t\tconst prefix = normalizedRoot.endsWith(sep) ? normalizedRoot : `${normalizedRoot}${sep}`;\n\t\treturn target.startsWith(prefix);\n\t};\n\n\tconst getSourceInfo = (resolvedPath: string): SourceInfo => {\n\t\tif (isUnderPath(resolvedPath, globalPromptsDir)) {\n\t\t\treturn createSyntheticSourceInfo(resolvedPath, {\n\t\t\t\tsource: \"local\",\n\t\t\t\tscope: \"user\",\n\t\t\t\tbaseDir: globalPromptsDir,\n\t\t\t});\n\t\t}\n\t\tif (isUnderPath(resolvedPath, projectPromptsDir)) {\n\t\t\treturn createSyntheticSourceInfo(resolvedPath, {\n\t\t\t\tsource: \"local\",\n\t\t\t\tscope: \"project\",\n\t\t\t\tbaseDir: projectPromptsDir,\n\t\t\t});\n\t\t}\n\t\treturn createSyntheticSourceInfo(resolvedPath, {\n\t\t\tsource: \"local\",\n\t\t\tbaseDir: statSync(resolvedPath).isDirectory() ? resolvedPath : dirname(resolvedPath),\n\t\t});\n\t};\n\n\tif (includeDefaults) {\n\t\ttemplates.push(...loadTemplatesFromDir(globalPromptsDir, getSourceInfo));\n\t\ttemplates.push(...loadTemplatesFromDir(projectPromptsDir, getSourceInfo));\n\t}\n\n\t// 3. Load explicit prompt paths\n\tfor (const rawPath of promptPaths) {\n\t\tconst resolvedPath = resolvePath(rawPath, resolvedCwd, { trim: true });\n\t\tif (!existsSync(resolvedPath)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\ttry {\n\t\t\tconst stats = statSync(resolvedPath);\n\t\t\tif (stats.isDirectory()) {\n\t\t\t\ttemplates.push(...loadTemplatesFromDir(resolvedPath, getSourceInfo));\n\t\t\t} else if (stats.isFile() && resolvedPath.endsWith(\".md\")) {\n\t\t\t\tconst template = loadTemplateFromFile(resolvedPath, getSourceInfo(resolvedPath));\n\t\t\t\tif (template) {\n\t\t\t\t\ttemplates.push(template);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {\n\t\t\t// Ignore read failures\n\t\t}\n\t}\n\n\treturn templates;\n}\n\n/**\n * Expand a prompt template if it matches a template name.\n * Returns the expanded content or the original text if not a template.\n */\nexport function expandPromptTemplate(text: string, templates: PromptTemplate[]): string {\n\tif (!text.startsWith(\"/\")) return text;\n\n\tconst match = text.match(/^\\/([^\\s]+)(?:\\s+([\\s\\S]*))?$/);\n\tif (!match) return text;\n\n\tconst templateName = match[1];\n\tconst argsString = match[2] ?? \"\";\n\n\tconst template = templates.find((t) => t.name === templateName);\n\tif (template) {\n\t\tconst args = parseCommandArgs(argsString);\n\t\treturn substituteArgs(template.content, args);\n\t}\n\n\treturn text;\n}\n"]}
1
+ {"version":3,"file":"prompt-templates.d.ts","sourceRoot":"","sources":["../../src/core/prompt-templates.ts"],"names":[],"mappings":"AAKA,OAAO,EAA6B,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9E;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CA+B7D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAgCtE;AA2ED,MAAM,WAAW,0BAA0B;IAC1C,qDAAqD;IACrD,GAAG,EAAE,MAAM,CAAC;IACZ,mDAAmD;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,0CAA0C;IAC1C,eAAe,EAAE,OAAO,CAAC;CACzB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,cAAc,EAAE,CAqEzF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,MAAM,CAgBtF"}
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-templates.js","sourceRoot":"","sources":["../../src/core/prompt-templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,yBAAyB,EAAmB,MAAM,kBAAkB,CAAC;AAc9E;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAAkB,EAAY;IAC9D,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,OAAO,GAAkB,IAAI,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAE3B,IAAI,OAAO,EAAE,CAAC;YACb,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;gBACtB,OAAO,GAAG,IAAI,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACP,OAAO,IAAI,IAAI,CAAC;YACjB,CAAC;QACF,CAAC;aAAM,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACzC,OAAO,GAAG,IAAI,CAAC;QAChB,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,IAAI,OAAO,EAAE,CAAC;gBACb,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACnB,OAAO,GAAG,EAAE,CAAC;YACd,CAAC;QACF,CAAC;aAAM,CAAC;YACP,OAAO,IAAI,IAAI,CAAC;QACjB,CAAC;IACF,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,IAAI,CAAC;AAAA,CACZ;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,IAAc,EAAU;IACvE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE/B,OAAO,OAAO,CAAC,OAAO,CACrB,gFAAgF,EAChF,CAAC,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,CAAC;QACzE,IAAI,aAAa,EAAE,CAAC;YACnB,MAAM,KAAK,GACV,aAAa,KAAK,GAAG,IAAI,aAAa,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1G,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC;QACrC,CAAC;QAED,IAAI,UAAU,EAAE,CAAC;YAChB,IAAI,KAAK,GAAG,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,iDAAiD;YAC3F,kDAAkD;YAClD,IAAI,KAAK,GAAG,CAAC;gBAAE,KAAK,GAAG,CAAC,CAAC;YAEzB,IAAI,WAAW,EAAE,CAAC;gBACjB,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;gBACzC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACpD,CAAC;YACD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpC,CAAC;QAED,IAAI,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YAC9C,OAAO,OAAO,CAAC;QAChB,CAAC;QAED,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAAA,CACzB,CACD,CAAC;AAAA,CACF;AAED,SAAS,oBAAoB,CAAC,QAAgB,EAAE,UAAsB,EAAyB;IAC9F,IAAI,CAAC;QACJ,MAAM,UAAU,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,gBAAgB,CAAyB,UAAU,CAAC,CAAC;QAEnF,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAErD,2DAA2D;QAC3D,IAAI,WAAW,GAAG,WAAW,CAAC,WAAW,IAAI,EAAE,CAAC;QAChD,IAAI,CAAC,WAAW,EAAE,CAAC;YAClB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC/D,IAAI,SAAS,EAAE,CAAC;gBACf,uBAAuB;gBACvB,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACrC,IAAI,SAAS,CAAC,MAAM,GAAG,EAAE;oBAAE,WAAW,IAAI,KAAK,CAAC;YACjD,CAAC;QACF,CAAC;QAED,OAAO;YACN,IAAI;YACJ,WAAW;YACX,GAAG,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,EAAE,YAAY,EAAE,WAAW,CAAC,eAAe,CAAC,EAAE,CAAC;YACnF,OAAO,EAAE,IAAI;YACb,UAAU;YACV,QAAQ;SACR,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AAAA,CACD;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,GAAW,EAAE,aAA+C,EAAoB;IAC7G,MAAM,SAAS,GAAqB,EAAE,CAAC;IAEvC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAE1D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAEvC,8CAA8C;YAC9C,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC;gBAC5B,IAAI,CAAC;oBACJ,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBACjC,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;gBACzB,CAAC;gBAAC,MAAM,CAAC;oBACR,0BAA0B;oBAC1B,SAAS;gBACV,CAAC;YACF,CAAC;YAED,IAAI,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1C,MAAM,QAAQ,GAAG,oBAAoB,CAAC,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACzE,IAAI,QAAQ,EAAE,CAAC;oBACd,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC1B,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,OAAO,SAAS,CAAC;AAAA,CACjB;AAaD;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAmC,EAAoB;IAC1F,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,gBAAgB,GAAG,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IACxC,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;IAEhD,MAAM,SAAS,GAAqB,EAAE,CAAC;IAEvC,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;IAC3D,MAAM,iBAAiB,GAAG,OAAO,CAAC,WAAW,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;IAE3E,MAAM,WAAW,GAAG,CAAC,MAAc,EAAE,IAAY,EAAW,EAAE,CAAC;QAC9D,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,MAAM,KAAK,cAAc,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC;QACb,CAAC;QACD,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,cAAc,GAAG,GAAG,EAAE,CAAC;QACzF,OAAO,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAAA,CACjC,CAAC;IAEF,MAAM,aAAa,GAAG,CAAC,YAAoB,EAAc,EAAE,CAAC;QAC3D,IAAI,WAAW,CAAC,YAAY,EAAE,gBAAgB,CAAC,EAAE,CAAC;YACjD,OAAO,yBAAyB,CAAC,YAAY,EAAE;gBAC9C,MAAM,EAAE,OAAO;gBACf,KAAK,EAAE,MAAM;gBACb,OAAO,EAAE,gBAAgB;aACzB,CAAC,CAAC;QACJ,CAAC;QACD,IAAI,WAAW,CAAC,YAAY,EAAE,iBAAiB,CAAC,EAAE,CAAC;YAClD,OAAO,yBAAyB,CAAC,YAAY,EAAE;gBAC9C,MAAM,EAAE,OAAO;gBACf,KAAK,EAAE,SAAS;gBAChB,OAAO,EAAE,iBAAiB;aAC1B,CAAC,CAAC;QACJ,CAAC;QACD,OAAO,yBAAyB,CAAC,YAAY,EAAE;YAC9C,MAAM,EAAE,OAAO;YACf,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;SACpF,CAAC,CAAC;IAAA,CACH,CAAC;IAEF,IAAI,eAAe,EAAE,CAAC;QACrB,SAAS,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC,CAAC;QACzE,SAAS,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,gCAAgC;IAChC,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;QACnC,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACvE,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC/B,SAAS;QACV,CAAC;QAED,IAAI,CAAC;YACJ,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;YACrC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACzB,SAAS,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC;YACtE,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3D,MAAM,QAAQ,GAAG,oBAAoB,CAAC,YAAY,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC;gBACjF,IAAI,QAAQ,EAAE,CAAC;oBACd,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC1B,CAAC;YACF,CAAC;QACF,CAAC;QAAC,MAAM,CAAC;YACR,uBAAuB;QACxB,CAAC;IACF,CAAC;IAED,OAAO,SAAS,CAAC;AAAA,CACjB;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY,EAAE,SAA2B,EAAU;IACvF,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAC1D,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9B,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAElC,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;IAChE,IAAI,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC1C,OAAO,cAAc,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,IAAI,CAAC;AAAA,CACZ","sourcesContent":["import { existsSync, readdirSync, readFileSync, statSync } from \"fs\";\nimport { basename, dirname, join, resolve, sep } from \"path\";\nimport { CONFIG_DIR_NAME } from \"../config.ts\";\nimport { parseFrontmatter } from \"../utils/frontmatter.ts\";\nimport { resolvePath } from \"../utils/paths.ts\";\nimport { createSyntheticSourceInfo, type SourceInfo } from \"./source-info.ts\";\n\n/**\n * Represents a prompt template loaded from a markdown file\n */\nexport interface PromptTemplate {\n\tname: string;\n\tdescription: string;\n\targumentHint?: string;\n\tcontent: string;\n\tsourceInfo: SourceInfo;\n\tfilePath: string; // Absolute path to the template file\n}\n\n/**\n * Parse command arguments respecting quoted strings (bash-style)\n * Returns array of arguments\n */\nexport function parseCommandArgs(argsString: string): string[] {\n\tconst args: string[] = [];\n\tlet current = \"\";\n\tlet inQuote: string | null = null;\n\n\tfor (let i = 0; i < argsString.length; i++) {\n\t\tconst char = argsString[i];\n\n\t\tif (inQuote) {\n\t\t\tif (char === inQuote) {\n\t\t\t\tinQuote = null;\n\t\t\t} else {\n\t\t\t\tcurrent += char;\n\t\t\t}\n\t\t} else if (char === '\"' || char === \"'\") {\n\t\t\tinQuote = char;\n\t\t} else if (/\\s/.test(char)) {\n\t\t\tif (current) {\n\t\t\t\targs.push(current);\n\t\t\t\tcurrent = \"\";\n\t\t\t}\n\t\t} else {\n\t\t\tcurrent += char;\n\t\t}\n\t}\n\n\tif (current) {\n\t\targs.push(current);\n\t}\n\n\treturn args;\n}\n\n/**\n * Substitute argument placeholders in template content\n * Supports:\n * - $1, $2, ... for positional args\n * - $@ and $ARGUMENTS for all args\n * - ${N:-default} for positional arg N with default when missing/empty\n * - ${@:-default} and ${ARGUMENTS:-default} for all args with a default when empty\n * - ${@:N} for args from Nth onwards (bash-style slicing)\n * - ${@:N:L} for L args starting from Nth\n *\n * Note: Replacement happens on the template string only. Argument and default values\n * containing patterns like $1, $@, or $ARGUMENTS are NOT recursively substituted.\n */\nexport function substituteArgs(content: string, args: string[]): string {\n\tconst allArgs = args.join(\" \");\n\n\treturn content.replace(\n\t\t/\\$\\{(\\d+|ARGUMENTS|@):-([^}]*)\\}|\\$\\{@:(\\d+)(?::(\\d+))?\\}|\\$(ARGUMENTS|@|\\d+)/g,\n\t\t(_match, defaultTarget, defaultValue, sliceStart, sliceLength, simple) => {\n\t\t\tif (defaultTarget) {\n\t\t\t\tconst value =\n\t\t\t\t\tdefaultTarget === \"@\" || defaultTarget === \"ARGUMENTS\" ? allArgs : args[parseInt(defaultTarget, 10) - 1];\n\t\t\t\treturn value ? value : defaultValue;\n\t\t\t}\n\n\t\t\tif (sliceStart) {\n\t\t\t\tlet start = parseInt(sliceStart, 10) - 1; // Convert to 0-indexed (user provides 1-indexed)\n\t\t\t\t// Treat 0 as 1 (bash convention: args start at 1)\n\t\t\t\tif (start < 0) start = 0;\n\n\t\t\t\tif (sliceLength) {\n\t\t\t\t\tconst length = parseInt(sliceLength, 10);\n\t\t\t\t\treturn args.slice(start, start + length).join(\" \");\n\t\t\t\t}\n\t\t\t\treturn args.slice(start).join(\" \");\n\t\t\t}\n\n\t\t\tif (simple === \"ARGUMENTS\" || simple === \"@\") {\n\t\t\t\treturn allArgs;\n\t\t\t}\n\n\t\t\tconst index = parseInt(simple, 10) - 1;\n\t\t\treturn args[index] ?? \"\";\n\t\t},\n\t);\n}\n\nfunction loadTemplateFromFile(filePath: string, sourceInfo: SourceInfo): PromptTemplate | null {\n\ttry {\n\t\tconst rawContent = readFileSync(filePath, \"utf-8\");\n\t\tconst { frontmatter, body } = parseFrontmatter<Record<string, string>>(rawContent);\n\n\t\tconst name = basename(filePath).replace(/\\.md$/, \"\");\n\n\t\t// Get description from frontmatter or first non-empty line\n\t\tlet description = frontmatter.description || \"\";\n\t\tif (!description) {\n\t\t\tconst firstLine = body.split(\"\\n\").find((line) => line.trim());\n\t\t\tif (firstLine) {\n\t\t\t\t// Truncate if too long\n\t\t\t\tdescription = firstLine.slice(0, 60);\n\t\t\t\tif (firstLine.length > 60) description += \"...\";\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tname,\n\t\t\tdescription,\n\t\t\t...(frontmatter[\"argument-hint\"] && { argumentHint: frontmatter[\"argument-hint\"] }),\n\t\t\tcontent: body,\n\t\t\tsourceInfo,\n\t\t\tfilePath,\n\t\t};\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n/**\n * Scan a directory for .md files (non-recursive) and load them as prompt templates.\n */\nfunction loadTemplatesFromDir(dir: string, getSourceInfo: (filePath: string) => SourceInfo): PromptTemplate[] {\n\tconst templates: PromptTemplate[] = [];\n\n\tif (!existsSync(dir)) {\n\t\treturn templates;\n\t}\n\n\ttry {\n\t\tconst entries = readdirSync(dir, { withFileTypes: true });\n\n\t\tfor (const entry of entries) {\n\t\t\tconst fullPath = join(dir, entry.name);\n\n\t\t\t// For symlinks, check if they point to a file\n\t\t\tlet isFile = entry.isFile();\n\t\t\tif (entry.isSymbolicLink()) {\n\t\t\t\ttry {\n\t\t\t\t\tconst stats = statSync(fullPath);\n\t\t\t\t\tisFile = stats.isFile();\n\t\t\t\t} catch {\n\t\t\t\t\t// Broken symlink, skip it\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (isFile && entry.name.endsWith(\".md\")) {\n\t\t\t\tconst template = loadTemplateFromFile(fullPath, getSourceInfo(fullPath));\n\t\t\t\tif (template) {\n\t\t\t\t\ttemplates.push(template);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch {\n\t\treturn templates;\n\t}\n\n\treturn templates;\n}\n\nexport interface LoadPromptTemplatesOptions {\n\t/** Working directory for project-local templates. */\n\tcwd: string;\n\t/** Agent config directory for global templates. */\n\tagentDir: string;\n\t/** Explicit prompt template paths (files or directories). */\n\tpromptPaths: string[];\n\t/** Include default prompt directories. */\n\tincludeDefaults: boolean;\n}\n\n/**\n * Load all prompt templates from:\n * 1. Global: agentDir/prompts/\n * 2. Project: cwd/{CONFIG_DIR_NAME}/prompts/\n * 3. Explicit prompt paths\n */\nexport function loadPromptTemplates(options: LoadPromptTemplatesOptions): PromptTemplate[] {\n\tconst resolvedCwd = resolvePath(options.cwd);\n\tconst resolvedAgentDir = resolvePath(options.agentDir);\n\tconst promptPaths = options.promptPaths;\n\tconst includeDefaults = options.includeDefaults;\n\n\tconst templates: PromptTemplate[] = [];\n\n\tconst globalPromptsDir = join(resolvedAgentDir, \"prompts\");\n\tconst projectPromptsDir = resolve(resolvedCwd, CONFIG_DIR_NAME, \"prompts\");\n\n\tconst isUnderPath = (target: string, root: string): boolean => {\n\t\tconst normalizedRoot = resolve(root);\n\t\tif (target === normalizedRoot) {\n\t\t\treturn true;\n\t\t}\n\t\tconst prefix = normalizedRoot.endsWith(sep) ? normalizedRoot : `${normalizedRoot}${sep}`;\n\t\treturn target.startsWith(prefix);\n\t};\n\n\tconst getSourceInfo = (resolvedPath: string): SourceInfo => {\n\t\tif (isUnderPath(resolvedPath, globalPromptsDir)) {\n\t\t\treturn createSyntheticSourceInfo(resolvedPath, {\n\t\t\t\tsource: \"local\",\n\t\t\t\tscope: \"user\",\n\t\t\t\tbaseDir: globalPromptsDir,\n\t\t\t});\n\t\t}\n\t\tif (isUnderPath(resolvedPath, projectPromptsDir)) {\n\t\t\treturn createSyntheticSourceInfo(resolvedPath, {\n\t\t\t\tsource: \"local\",\n\t\t\t\tscope: \"project\",\n\t\t\t\tbaseDir: projectPromptsDir,\n\t\t\t});\n\t\t}\n\t\treturn createSyntheticSourceInfo(resolvedPath, {\n\t\t\tsource: \"local\",\n\t\t\tbaseDir: statSync(resolvedPath).isDirectory() ? resolvedPath : dirname(resolvedPath),\n\t\t});\n\t};\n\n\tif (includeDefaults) {\n\t\ttemplates.push(...loadTemplatesFromDir(globalPromptsDir, getSourceInfo));\n\t\ttemplates.push(...loadTemplatesFromDir(projectPromptsDir, getSourceInfo));\n\t}\n\n\t// 3. Load explicit prompt paths\n\tfor (const rawPath of promptPaths) {\n\t\tconst resolvedPath = resolvePath(rawPath, resolvedCwd, { trim: true });\n\t\tif (!existsSync(resolvedPath)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\ttry {\n\t\t\tconst stats = statSync(resolvedPath);\n\t\t\tif (stats.isDirectory()) {\n\t\t\t\ttemplates.push(...loadTemplatesFromDir(resolvedPath, getSourceInfo));\n\t\t\t} else if (stats.isFile() && resolvedPath.endsWith(\".md\")) {\n\t\t\t\tconst template = loadTemplateFromFile(resolvedPath, getSourceInfo(resolvedPath));\n\t\t\t\tif (template) {\n\t\t\t\t\ttemplates.push(template);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {\n\t\t\t// Ignore read failures\n\t\t}\n\t}\n\n\treturn templates;\n}\n\n/**\n * Expand a prompt template if it matches a template name.\n * Returns the expanded content or the original text if not a template.\n */\nexport function expandPromptTemplate(text: string, templates: PromptTemplate[]): string {\n\tif (!text.startsWith(\"/\")) return text;\n\n\tconst match = text.match(/^\\/([^\\s]+)(?:\\s+([\\s\\S]*))?$/);\n\tif (!match) return text;\n\n\tconst templateName = match[1];\n\tconst argsString = match[2] ?? \"\";\n\n\tconst template = templates.find((t) => t.name === templateName);\n\tif (template) {\n\t\tconst args = parseCommandArgs(argsString);\n\t\treturn substituteArgs(template.content, args);\n\t}\n\n\treturn text;\n}\n"]}
1
+ {"version":3,"file":"prompt-templates.js","sourceRoot":"","sources":["../../src/core/prompt-templates.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"montar.d.ts","sourceRoot":"","sources":["../../../src/core/prompts/montar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAMH,OAAO,EAAE,KAAK,QAAQ,EAAc,MAAM,gBAAgB,CAAC;AAI3D,6EAA2E;AAC3E,MAAM,WAAW,gBAAgB;IAChC,4DAA2D;IAC3D,oBAAoB,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,4DAA2D;IAC3D,mBAAmB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAgDD,kFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,GAAG,QAAQ,CAgCrE;AAsBD,uDAAuD;AACvD,wBAAgB,6BAA6B,IAAI,IAAI,CAEpD;AAED,6EAA4E;AAC5E,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAIxE","sourcesContent":["/**\n * Monta el prompt del sistema desde `sistema.md`.\n *\n * DE DÓNDE VIENE ESTO. El prompt de Ada era una cadena dentro de\n * `system-prompt.ts` con dos directrices —«Be concise» y «Show file paths\n * clearly»— más un bloque sobre dónde vive la documentación de Ada. Es decir:\n * le explicábamos al modelo dónde están NUESTROS documentos y no le\n * explicábamos cómo programar bien.\n *\n * Y había un dato peor, medido: de las TRECE capacidades construidas en cuatro\n * tandas de trabajo (`lsp`, `ast_edit`, `hashline`, `remoto`, `web_search`,\n * `computer`, `browser`, `audit`, `banco`, `cleanse`, `discover`, `review`,\n * `ast_search`), **ninguna aparecía en el prompt**. De nuestras tools, solo UNA\n * definía `promptSnippet`. El modelo veía el nombre y nada más: ni cuándo usar\n * `lsp_references` antes de renombrar, ni que `ast_edit` es para codemods.\n *\n * Es capacidad construida y desenchufada en su forma más difícil de ver: la\n * herramienta está registrada, así que NADA FALLA. Solo hay un agente peor de\n * lo que debería, sin error que investigar.\n *\n * DOS DECISIONES QUE NO SON DE ESTILO:\n *\n * 1. **Si falta el `.md`, se LANZA.** Un `catch` que devolviera cadena vacía\n * dejaría al agente sin prompt del sistema —sin doctrina, sin contrato de\n * entrega, sin las reglas de cumplimiento— y arrancaría igual. Sería el\n * fallo que se lee como éxito en el sitio más caro posible. Como `dist/` es\n * superficie ciega para vitest (las pruebas leen `src/`, el paquete\n * publicado lee `dist/`), esto además convierte un `copy-assets` olvidado en\n * un arranque roto y visible en vez de en un agente silenciosamente tonto.\n *\n * 2. **Los nombres de herramienta salen del registro, no de la plantilla.** Si\n * alguien renombra `ast_search`, la línea del prompt que lo menciona se\n * queda mintiendo, y un prompt que nombra una tool inexistente le enseña al\n * modelo a desconfiar de sus instrucciones. Aquí la lista se construye desde\n * los nombres reales que recibe `montarPromptDelSistema`.\n */\n\nimport { readFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { nivelDe } from \"../aprobacion/politica.ts\";\nimport { type Contexto, renderizar } from \"./plantilla.ts\";\n\nconst NOMBRE = \"sistema.md\";\n\n/** Qué sabe el montador sobre la sesión. Todo opcional salvo las tools. */\nexport interface EntradaDelPrompt {\n\t/** Los nombres de tool REALES y activos de esta sesión. */\n\tnombresDeHerramienta: readonly string[];\n\t/** Frases de una línea por tool, si la tool las aporta. */\n\tfrasesDeHerramienta?: Readonly<Record<string, string>>;\n\tpersonalidad?: string;\n\t/**\n\t * `true` cuando la política de aprobación está en modo plan.\n\t *\n\t * Existe porque el modo plan estaba impuesto SOLO en código: `decidir()`\n\t * devuelve `denegada` con política `modo-plan` para toda escritura y toda\n\t * ejecución, y el prompt no lo mencionaba. El modelo intentaba editar, se\n\t * llevaba un rechazo que no esperaba, y gastaba turnos aprendiendo por\n\t * golpes una regla que se le podía haber dicho: el guardián estaba\n\t * construido y el modelo no lo conocía.\n\t */\n\tmodoPlan?: boolean;\n\t/**\n\t * Tools que el usuario ha denegado (`permissions.denied`).\n\t *\n\t * No es lo mismo que «no activa»: una tool denegada SIGUE en el inventario y\n\t * en el conjunto activo, y lo que la para es `decidir()`, que consulta el\n\t * `deny` del usuario en el paso 3 —antes del modo— y contesta `denegada` con\n\t * política `deny-de-usuario`. Filtrar solo por `nivelDe` dejaba a la sección\n\t * de modo plan prometiendo, por ejemplo, `web_fetch` con `permissions.denied:\n\t * [\"web_fetch\"]` en settings: el rechazo inesperado que esta sección existe\n\t * para evitar, servido por la propia sección.\n\t */\n\ttoolsDenegadas?: readonly string[];\n}\n\n/**\n * Una línea por herramienta especializada, construida desde los nombres reales.\n *\n * Solo se listan las que el modelo confunde con `bash` — es donde la guía paga.\n * Enumerar `read` junto a veinte más diluye las que importan.\n */\nconst GUIA: ReadonlyArray<{ tool: string; linea: (n: string) => string }> = [\n\t{ tool: \"read\", linea: (n) => `File and directory reads → \\`${n}\\`, never \\`cat\\` or \\`ls\\` through the shell.` },\n\t{ tool: \"grep\", linea: (n) => `Regex search → \\`${n}\\`, never shell \\`grep\\`, \\`rg\\` or \\`awk\\`.` },\n\t{ tool: \"find\", linea: (n) => `Locating files by name or glob → \\`${n}\\`, never \\`find\\` or \\`fd\\`.` },\n\t{ tool: \"edit\", linea: (n) => `Surgical edits → \\`${n}\\`. Never rewrite a whole file to change a few lines.` },\n\t{ tool: \"write\", linea: (n) => `Creating or fully replacing a file → \\`${n}\\`.` },\n\t{\n\t\ttool: \"web_search\",\n\t\tlinea: (n) => `Anything you do not know and cannot read locally → \\`${n}\\`. Do not guess an API from memory.`,\n\t},\n];\n\n/**\n * La línea del modo plan que dice qué tools SIGUEN valiendo.\n *\n * Los nombres salen del conjunto REAL de tools activas filtrado por `nivelDe`,\n * el mismo clasificador que usa la política de aprobación: si alguien mueve una\n * tool de `LECTURA` a `ESCRITURA`, esta línea se mueve con ella. Escribirlos a\n * mano en la plantilla sería prometerle al modelo tools que quizá no tiene, y\n * un prompt que nombra una tool inexistente le enseña a desconfiar de sus\n * instrucciones.\n *\n * El filtro son las DOS condiciones que `decidir()` aplica antes de dejar pasar\n * una lectura en modo plan: nivel de lectura (paso 4) y no estar en el `deny`\n * del usuario (paso 3). Con solo la primera, `permissions.denied: [\"web_fetch\"]`\n * dejaba la línea prometiendo `web_fetch`.\n *\n * El caso vacío (`ada-cli --tools bash` en modo plan) no es decorativo: ahí el\n * agente no puede ni leer, y decirlo es mejor que dejar una lista en blanco que\n * el modelo interpretará como que puede con todo. Se calcula aquí en vez de con\n * un `{{#si}}` dentro del `{{#si modoPlan}}` porque anidar dos bloques del\n * mismo tipo borraba el resto de la sección en silencio (ver `plantilla.ts`).\n */\nfunction lineaDePlan(lectura: readonly string[]): string {\n\tif (lectura.length === 0) {\n\t\treturn \"No read-only tool is active in this session, so you cannot investigate either. Say exactly that and stop.\";\n\t}\n\treturn `Still available in this mode: ${lectura.map((n) => `\\`${n}\\``).join(\", \")}. Nothing else is.`;\n}\n\n/** El contexto que ve la plantilla. Público porque las pruebas lo comprueban. */\nexport function contextoDelPrompt(entrada: EntradaDelPrompt): Contexto {\n\tconst activas = new Set(entrada.nombresDeHerramienta);\n\tconst denegadas = new Set(entrada.toolsDenegadas ?? []);\n\tconst tiene = (prefijo: string) => [...activas].some((n) => n === prefijo || n.startsWith(`${prefijo}_`));\n\n\tconst herramientas: string[] = [];\n\tfor (const { tool, linea } of GUIA) {\n\t\tif (activas.has(tool)) herramientas.push(linea(tool));\n\t}\n\t// Y las que aportan su propia frase, que nadie más conoce.\n\tfor (const [nombre, frase] of Object.entries(entrada.frasesDeHerramienta ?? {})) {\n\t\tif (activas.has(nombre) && !GUIA.some((g) => g.tool === nombre)) {\n\t\t\therramientas.push(`\\`${nombre}\\`: ${frase}`);\n\t\t}\n\t}\n\n\treturn {\n\t\therramientas,\n\t\tpersonalidad: entrada.personalidad,\n\t\tmodoPlan: entrada.modoPlan === true,\n\t\tlineaHerramientasDePlan: lineaDePlan(\n\t\t\t[...activas].filter((n) => nivelDe(n) === \"lectura\" && !denegadas.has(n)).sort(),\n\t\t),\n\t\ttieneLsp: tiene(\"lsp\"),\n\t\ttieneEstructural: activas.has(\"ast_search\") || activas.has(\"ast_edit\"),\n\t\ttieneBash: activas.has(\"bash\"),\n\t\ttieneNavegador: tiene(\"browser\"),\n\t\ttieneEscritorio: tiene(\"computer\"),\n\t\t// El libro de auditoría no es una tool: es una propiedad del arnés, y\n\t\t// siempre está. Se declara explícito para que la plantilla no adivine.\n\t\ttieneAudit: true,\n\t};\n}\n\nlet cacheDeLaPlantilla: string | undefined;\n\n/** Lee `sistema.md` de junto a este módulo. Lanza si no está. */\nfunction leerPlantilla(): string {\n\tif (cacheDeLaPlantilla !== undefined) return cacheDeLaPlantilla;\n\tconst ruta = join(dirname(fileURLToPath(import.meta.url)), NOMBRE);\n\ttry {\n\t\tcacheDeLaPlantilla = readFileSync(ruta, \"utf-8\");\n\t} catch (error) {\n\t\tthrow new Error(\n\t\t\t`No se ha podido leer el prompt del sistema (${ruta}).\\n` +\n\t\t\t\t\"Arrancar sin él dejaría al agente sin doctrina, sin contrato de entrega y sin\\n\" +\n\t\t\t\t\"las reglas de cumplimiento, y lo haría en silencio. Si esto sale desde el\\n\" +\n\t\t\t\t\"paquete compilado, falta el paso `copy-assets` que lleva los .md a dist/.\\n\" +\n\t\t\t\t`Causa: ${error instanceof Error ? error.message : String(error)}`,\n\t\t);\n\t}\n\treturn cacheDeLaPlantilla;\n}\n\n/** Solo para pruebas: olvida la plantilla cacheada. */\nexport function __olvidarPlantillaParaPruebas(): void {\n\tcacheDeLaPlantilla = undefined;\n}\n\n/** El prompt del sistema de Ada, con las secciones que la sesión merece. */\nexport function montarPromptDelSistema(entrada: EntradaDelPrompt): string {\n\treturn renderizar(leerPlantilla(), contextoDelPrompt(entrada), NOMBRE)\n\t\t.replace(/\\n{3,}/g, \"\\n\\n\")\n\t\t.trim();\n}\n"]}
1
+ {"version":3,"file":"montar.d.ts","sourceRoot":"","sources":["../../../src/core/prompts/montar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAMH,OAAO,EAAE,KAAK,QAAQ,EAAc,MAAM,gBAAgB,CAAC;AAI3D,2EAA2E;AAC3E,MAAM,WAAW,gBAAgB;IAChC,2DAA2D;IAC3D,oBAAoB,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,2DAA2D;IAC3D,mBAAmB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAgDD,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,GAAG,QAAQ,CAgCrE;AAsBD,uDAAuD;AACvD,wBAAgB,6BAA6B,IAAI,IAAI,CAEpD;AAED,4EAA4E;AAC5E,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAIxE"}
@@ -1 +1 @@
1
- {"version":3,"file":"montar.js","sourceRoot":"","sources":["../../../src/core/prompts/montar.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Monta el prompt del sistema desde `sistema.md`.\n *\n * DE DÓNDE VIENE ESTO. El prompt de Ada era una cadena dentro de\n * `system-prompt.ts` con dos directrices —«Be concise» y «Show file paths\n * clearly»— más un bloque sobre dónde vive la documentación de Ada. Es decir:\n * le explicábamos al modelo dónde están NUESTROS documentos y no le\n * explicábamos cómo programar bien.\n *\n * Y había un dato peor, medido: de las TRECE capacidades construidas en cuatro\n * tandas de trabajo (`lsp`, `ast_edit`, `hashline`, `remoto`, `web_search`,\n * `computer`, `browser`, `audit`, `banco`, `cleanse`, `discover`, `review`,\n * `ast_search`), **ninguna aparecía en el prompt**. De nuestras tools, solo UNA\n * definía `promptSnippet`. El modelo veía el nombre y nada más: ni cuándo usar\n * `lsp_references` antes de renombrar, ni que `ast_edit` es para codemods.\n *\n * Es capacidad construida y desenchufada en su forma más difícil de ver: la\n * herramienta está registrada, así que NADA FALLA. Solo hay un agente peor de\n * lo que debería, sin error que investigar.\n *\n * DOS DECISIONES QUE NO SON DE ESTILO:\n *\n * 1. **Si falta el `.md`, se LANZA.** Un `catch` que devolviera cadena vacía\n * dejaría al agente sin prompt del sistema —sin doctrina, sin contrato de\n * entrega, sin las reglas de cumplimiento— y arrancaría igual. Sería el\n * fallo que se lee como éxito en el sitio más caro posible. Como `dist/` es\n * superficie ciega para vitest (las pruebas leen `src/`, el paquete\n * publicado lee `dist/`), esto además convierte un `copy-assets` olvidado en\n * un arranque roto y visible en vez de en un agente silenciosamente tonto.\n *\n * 2. **Los nombres de herramienta salen del registro, no de la plantilla.** Si\n * alguien renombra `ast_search`, la línea del prompt que lo menciona se\n * queda mintiendo, y un prompt que nombra una tool inexistente le enseña al\n * modelo a desconfiar de sus instrucciones. Aquí la lista se construye desde\n * los nombres reales que recibe `montarPromptDelSistema`.\n */\n\nimport { readFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { nivelDe } from \"../aprobacion/politica.ts\";\nimport { type Contexto, renderizar } from \"./plantilla.ts\";\n\nconst NOMBRE = \"sistema.md\";\n\n/** Qué sabe el montador sobre la sesión. Todo opcional salvo las tools. */\nexport interface EntradaDelPrompt {\n\t/** Los nombres de tool REALES y activos de esta sesión. */\n\tnombresDeHerramienta: readonly string[];\n\t/** Frases de una línea por tool, si la tool las aporta. */\n\tfrasesDeHerramienta?: Readonly<Record<string, string>>;\n\tpersonalidad?: string;\n\t/**\n\t * `true` cuando la política de aprobación está en modo plan.\n\t *\n\t * Existe porque el modo plan estaba impuesto SOLO en código: `decidir()`\n\t * devuelve `denegada` con política `modo-plan` para toda escritura y toda\n\t * ejecución, y el prompt no lo mencionaba. El modelo intentaba editar, se\n\t * llevaba un rechazo que no esperaba, y gastaba turnos aprendiendo por\n\t * golpes una regla que se le podía haber dicho: el guardián estaba\n\t * construido y el modelo no lo conocía.\n\t */\n\tmodoPlan?: boolean;\n\t/**\n\t * Tools que el usuario ha denegado (`permissions.denied`).\n\t *\n\t * No es lo mismo que «no activa»: una tool denegada SIGUE en el inventario y\n\t * en el conjunto activo, y lo que la para es `decidir()`, que consulta el\n\t * `deny` del usuario en el paso 3 —antes del modo— y contesta `denegada` con\n\t * política `deny-de-usuario`. Filtrar solo por `nivelDe` dejaba a la sección\n\t * de modo plan prometiendo, por ejemplo, `web_fetch` con `permissions.denied:\n\t * [\"web_fetch\"]` en settings: el rechazo inesperado que esta sección existe\n\t * para evitar, servido por la propia sección.\n\t */\n\ttoolsDenegadas?: readonly string[];\n}\n\n/**\n * Una línea por herramienta especializada, construida desde los nombres reales.\n *\n * Solo se listan las que el modelo confunde con `bash` — es donde la guía paga.\n * Enumerar `read` junto a veinte más diluye las que importan.\n */\nconst GUIA: ReadonlyArray<{ tool: string; linea: (n: string) => string }> = [\n\t{ tool: \"read\", linea: (n) => `File and directory reads → \\`${n}\\`, never \\`cat\\` or \\`ls\\` through the shell.` },\n\t{ tool: \"grep\", linea: (n) => `Regex search → \\`${n}\\`, never shell \\`grep\\`, \\`rg\\` or \\`awk\\`.` },\n\t{ tool: \"find\", linea: (n) => `Locating files by name or glob → \\`${n}\\`, never \\`find\\` or \\`fd\\`.` },\n\t{ tool: \"edit\", linea: (n) => `Surgical edits → \\`${n}\\`. Never rewrite a whole file to change a few lines.` },\n\t{ tool: \"write\", linea: (n) => `Creating or fully replacing a file → \\`${n}\\`.` },\n\t{\n\t\ttool: \"web_search\",\n\t\tlinea: (n) => `Anything you do not know and cannot read locally → \\`${n}\\`. Do not guess an API from memory.`,\n\t},\n];\n\n/**\n * La línea del modo plan que dice qué tools SIGUEN valiendo.\n *\n * Los nombres salen del conjunto REAL de tools activas filtrado por `nivelDe`,\n * el mismo clasificador que usa la política de aprobación: si alguien mueve una\n * tool de `LECTURA` a `ESCRITURA`, esta línea se mueve con ella. Escribirlos a\n * mano en la plantilla sería prometerle al modelo tools que quizá no tiene, y\n * un prompt que nombra una tool inexistente le enseña a desconfiar de sus\n * instrucciones.\n *\n * El filtro son las DOS condiciones que `decidir()` aplica antes de dejar pasar\n * una lectura en modo plan: nivel de lectura (paso 4) y no estar en el `deny`\n * del usuario (paso 3). Con solo la primera, `permissions.denied: [\"web_fetch\"]`\n * dejaba la línea prometiendo `web_fetch`.\n *\n * El caso vacío (`ada-cli --tools bash` en modo plan) no es decorativo: ahí el\n * agente no puede ni leer, y decirlo es mejor que dejar una lista en blanco que\n * el modelo interpretará como que puede con todo. Se calcula aquí en vez de con\n * un `{{#si}}` dentro del `{{#si modoPlan}}` porque anidar dos bloques del\n * mismo tipo borraba el resto de la sección en silencio (ver `plantilla.ts`).\n */\nfunction lineaDePlan(lectura: readonly string[]): string {\n\tif (lectura.length === 0) {\n\t\treturn \"No read-only tool is active in this session, so you cannot investigate either. Say exactly that and stop.\";\n\t}\n\treturn `Still available in this mode: ${lectura.map((n) => `\\`${n}\\``).join(\", \")}. Nothing else is.`;\n}\n\n/** El contexto que ve la plantilla. Público porque las pruebas lo comprueban. */\nexport function contextoDelPrompt(entrada: EntradaDelPrompt): Contexto {\n\tconst activas = new Set(entrada.nombresDeHerramienta);\n\tconst denegadas = new Set(entrada.toolsDenegadas ?? []);\n\tconst tiene = (prefijo: string) => [...activas].some((n) => n === prefijo || n.startsWith(`${prefijo}_`));\n\n\tconst herramientas: string[] = [];\n\tfor (const { tool, linea } of GUIA) {\n\t\tif (activas.has(tool)) herramientas.push(linea(tool));\n\t}\n\t// Y las que aportan su propia frase, que nadie más conoce.\n\tfor (const [nombre, frase] of Object.entries(entrada.frasesDeHerramienta ?? {})) {\n\t\tif (activas.has(nombre) && !GUIA.some((g) => g.tool === nombre)) {\n\t\t\therramientas.push(`\\`${nombre}\\`: ${frase}`);\n\t\t}\n\t}\n\n\treturn {\n\t\therramientas,\n\t\tpersonalidad: entrada.personalidad,\n\t\tmodoPlan: entrada.modoPlan === true,\n\t\tlineaHerramientasDePlan: lineaDePlan(\n\t\t\t[...activas].filter((n) => nivelDe(n) === \"lectura\" && !denegadas.has(n)).sort(),\n\t\t),\n\t\ttieneLsp: tiene(\"lsp\"),\n\t\ttieneEstructural: activas.has(\"ast_search\") || activas.has(\"ast_edit\"),\n\t\ttieneBash: activas.has(\"bash\"),\n\t\ttieneNavegador: tiene(\"browser\"),\n\t\ttieneEscritorio: tiene(\"computer\"),\n\t\t// El libro de auditoría no es una tool: es una propiedad del arnés, y\n\t\t// siempre está. Se declara explícito para que la plantilla no adivine.\n\t\ttieneAudit: true,\n\t};\n}\n\nlet cacheDeLaPlantilla: string | undefined;\n\n/** Lee `sistema.md` de junto a este módulo. Lanza si no está. */\nfunction leerPlantilla(): string {\n\tif (cacheDeLaPlantilla !== undefined) return cacheDeLaPlantilla;\n\tconst ruta = join(dirname(fileURLToPath(import.meta.url)), NOMBRE);\n\ttry {\n\t\tcacheDeLaPlantilla = readFileSync(ruta, \"utf-8\");\n\t} catch (error) {\n\t\tthrow new Error(\n\t\t\t`No se ha podido leer el prompt del sistema (${ruta}).\\n` +\n\t\t\t\t\"Arrancar sin él dejaría al agente sin doctrina, sin contrato de entrega y sin\\n\" +\n\t\t\t\t\"las reglas de cumplimiento, y lo haría en silencio. Si esto sale desde el\\n\" +\n\t\t\t\t\"paquete compilado, falta el paso `copy-assets` que lleva los .md a dist/.\\n\" +\n\t\t\t\t`Causa: ${error instanceof Error ? error.message : String(error)}`,\n\t\t);\n\t}\n\treturn cacheDeLaPlantilla;\n}\n\n/** Solo para pruebas: olvida la plantilla cacheada. */\nexport function __olvidarPlantillaParaPruebas(): void {\n\tcacheDeLaPlantilla = undefined;\n}\n\n/** El prompt del sistema de Ada, con las secciones que la sesión merece. */\nexport function montarPromptDelSistema(entrada: EntradaDelPrompt): string {\n\treturn renderizar(leerPlantilla(), contextoDelPrompt(entrada), NOMBRE)\n\t\t.replace(/\\n{3,}/g, \"\\n\\n\")\n\t\t.trim();\n}\n"]}
1
+ {"version":3,"file":"montar.js","sourceRoot":"","sources":["../../../src/core/prompts/montar.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"plantilla.d.ts","sourceRoot":"","sources":["../../../src/core/prompts/plantilla.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,kEAAiE;AACjE,MAAM,WAAW,QAAQ;IACxB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS,QAAQ,EAAE,GAAG,SAAS,MAAM,EAAE,CAAC;CACxG;AAED,0EAAyE;AACzE,qBAAa,gBAAiB,SAAQ,KAAK;IAI1C,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAEtC,YAAY,OAAO,EAAE,MAAM,EAAE,mBAAmB,CAAC,EAAE,MAAM,EAIxD;CACD;AAiBD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAgEzF","sourcesContent":["/**\n * Motor de plantillas mínimo para los prompts de Ada.\n *\n * POR QUÉ EXISTE. Nuestro prompt del sistema era una cadena dentro de\n * `system-prompt.ts` con dos directrices («sé conciso», «enseña las rutas») y\n * un bloque fijo sobre dónde está la documentación de Ada. oh-my-pi tiene 3.379\n * líneas de prompt en ~40 ficheros `.md` montadas con condicionales, y esa\n * diferencia se nota: cada sección suya existe SOLO si la capacidad de la que\n * habla está disponible.\n *\n * Eso es lo que hay que copiar. Un prompt que explica el LSP a un agente sin\n * LSP no es solo ruido: le enseña a pedir algo que no existe, y cuando falla el\n * modelo aprende a desconfiar de sus propias instrucciones.\n *\n * POR QUÉ PROPIO Y NO HANDLEBARS. Son ~130 líneas frente a una dependencia\n * nueva con su puerta de versión clavada, su `npm-shrinkwrap` y su superficie.\n * Y necesitamos una cosa que Handlebars NO hace por defecto y que aquí es\n * innegociable: fallar ante lo desconocido.\n *\n * LA DECISIÓN QUE IMPORTA. Una variable no declarada LANZA. No se sustituye por\n * cadena vacía.\n *\n * Es la lección de esta casa aplicada al prompt: una sustitución vacía en\n * silencio es «no lo he mirado» leído como «no hay». Un `{{herramientas}}` mal\n * escrito borraría el inventario entero de tools del prompt, el agente perdería\n * la mitad de sus capacidades y nadie vería un error — solo un agente\n * misteriosamente peor. Con un `throw` te enteras al arrancar, y hay prueba.\n */\n\n/** Lo que se le pasa a una plantilla. Nada más existe dentro. */\nexport interface Contexto {\n\t[clave: string]: string | number | boolean | null | undefined | readonly Contexto[] | readonly string[];\n}\n\n/** Un fallo de plantilla es un fallo de programación, no del usuario. */\nexport class ErrorDePlantilla extends Error {\n\t// Campo declarado y asignado en el cuerpo, no en la firma: el proyecto va con\n\t// `erasableSyntaxOnly`, que prohíbe las propiedades de constructor porque no\n\t// se pueden borrar con solo quitar los tipos.\n\treadonly nombreDeLaPlantilla?: string;\n\n\tconstructor(mensaje: string, nombreDeLaPlantilla?: string) {\n\t\tsuper(nombreDeLaPlantilla ? `${nombreDeLaPlantilla}: ${mensaje}` : mensaje);\n\t\tthis.name = \"ErrorDePlantilla\";\n\t\tthis.nombreDeLaPlantilla = nombreDeLaPlantilla;\n\t}\n}\n\n/** Falso, cadena vacía, cero, lista vacía y ausente. Todo lo demás es cierto. */\nfunction esVerdadero(valor: unknown): boolean {\n\tif (valor === undefined || valor === null || valor === false) return false;\n\tif (valor === \"\" || valor === 0) return false;\n\tif (Array.isArray(valor)) return valor.length > 0;\n\treturn true;\n}\n\nfunction aTexto(valor: unknown): string {\n\tif (valor === undefined || valor === null) return \"\";\n\treturn String(valor);\n}\n\nconst APERTURA = /\\{\\{#(si|noSi|cada)\\s+([A-Za-z0-9_.]+)\\s*\\}\\}/;\n\n/**\n * Renderiza `plantilla` con `contexto`.\n *\n * Directivas, en español como todo lo nuestro:\n *\n * {{clave}} sustitución; LANZA si `clave` no está declarada\n * {{#si clave}}…{{/si}} solo si es verdadera\n * {{#noSi clave}}…{{/noSi}} solo si es falsa — para el «no tienes X, haz Y»\n * {{#cada lista}}…{{/cada}} una vez por elemento; dentro, `{{esto}}` es el\n * elemento si es cadena, y sus campos si es objeto\n *\n * Anidar un bloque dentro de otro del MISMO tipo LANZA, y eso es una guarda, no\n * una nota: en cuanto un prompt necesita eso, lo que necesita de verdad es\n * precalcular el trozo variable en el contexto o partirse en dos ficheros.\n */\nexport function renderizar(plantilla: string, contexto: Contexto, nombre?: string): string {\n\tlet texto = plantilla;\n\n\t// Bloques primero: dentro pueden vivir sustituciones que solo existen ahí.\n\tlet guarda = 0;\n\twhile (true) {\n\t\tif (++guarda > 500) throw new ErrorDePlantilla(\"demasiados bloques anidados o sin cerrar\", nombre);\n\t\tconst apertura = texto.match(APERTURA);\n\t\tif (!apertura || apertura.index === undefined) break;\n\t\tconst [etiqueta, tipo, clave] = apertura;\n\t\tconst cierre = `{{/${tipo}}}`;\n\t\tconst inicioCuerpo = apertura.index + etiqueta.length;\n\t\tconst inicioCierre = texto.indexOf(cierre, inicioCuerpo);\n\t\tif (inicioCierre === -1) {\n\t\t\tthrow new ErrorDePlantilla(`bloque {{#${tipo} ${clave}}} sin su ${cierre}`, nombre);\n\t\t}\n\t\t// Anidar dos bloques del MISMO tipo estaba «no soportado» solo en el\n\t\t// comentario de la cabecera, y el resultado era una precondición escrita\n\t\t// en un comentario: nadie la imponía y se rompió a la primera. Medido con\n\t\t// `{{#si a}}A1{{#si b}}B{{/si}}A2{{/si}}` y b falso, esto rendía \"A1\" —el\n\t\t// `{{/si}}` interior cerraba el bloque exterior y A2 desaparecía sin\n\t\t// error. En un prompt eso borra media sección y deja al modelo sin la\n\t\t// regla, que es el fallo que se lee como éxito en el sitio más caro.\n\t\tconst dentro = texto.slice(inicioCuerpo, inicioCierre);\n\t\tconst anidado = dentro.match(new RegExp(`\\\\{\\\\{#${tipo}\\\\s`));\n\t\tif (anidado) {\n\t\t\tthrow new ErrorDePlantilla(\n\t\t\t\t`{{#${tipo} ${clave}}} contiene otro {{#${tipo}}} antes de su ${cierre}. ` +\n\t\t\t\t\t\"Anidar dos bloques del mismo tipo NO está soportado: el cierre interior \" +\n\t\t\t\t\t\"cerraría el exterior y el resto de la sección desaparecería en silencio. \" +\n\t\t\t\t\t\"Precalcula el trozo variable en el contexto, o parte la plantilla en dos.\",\n\t\t\t\tnombre,\n\t\t\t);\n\t\t}\n\t\tconst cuerpo = dentro;\n\t\tconst valor = leer(contexto, clave, nombre);\n\n\t\tlet sustitucion: string;\n\t\tif (tipo === \"si\") {\n\t\t\tsustitucion = esVerdadero(valor) ? cuerpo : \"\";\n\t\t} else if (tipo === \"noSi\") {\n\t\t\tsustitucion = esVerdadero(valor) ? \"\" : cuerpo;\n\t\t} else {\n\t\t\tif (!Array.isArray(valor)) {\n\t\t\t\tthrow new ErrorDePlantilla(\n\t\t\t\t\t`{{#cada ${clave}}} necesita una lista, y \"${clave}\" es ${typeof valor}`,\n\t\t\t\t\tnombre,\n\t\t\t\t);\n\t\t\t}\n\t\t\tsustitucion = valor\n\t\t\t\t.map((elemento) =>\n\t\t\t\t\trenderizar(\n\t\t\t\t\t\tcuerpo,\n\t\t\t\t\t\ttypeof elemento === \"string\" ? { esto: elemento } : { ...elemento, esto: \"\" },\n\t\t\t\t\t\tnombre,\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t\t.join(\"\");\n\t\t}\n\t\ttexto = texto.slice(0, apertura.index) + sustitucion + texto.slice(inicioCierre + cierre.length);\n\t}\n\n\t// Y ahora las sustituciones sueltas.\n\treturn texto.replace(/\\{\\{([A-Za-z0-9_.]+)\\}\\}/g, (_todo, clave: string) => aTexto(leer(contexto, clave, nombre)));\n}\n\n/**\n * Lee `clave` del contexto. LANZA si no está DECLARADA.\n *\n * Declarada y `undefined` es válido —significa «esta capacidad no está»— y\n * rinde vacío o falso. Lo que no vale es que la clave no exista: eso es una\n * errata en la plantilla, y borrar una sección del prompt por una errata es\n * exactamente el fallo que este módulo existe para no tener.\n */\nfunction leer(contexto: Contexto, clave: string, nombre?: string): unknown {\n\tconst partes = clave.split(\".\");\n\tlet actual: unknown = contexto;\n\tfor (const parte of partes) {\n\t\tif (actual === null || actual === undefined) return undefined;\n\t\tif (typeof actual !== \"object\") {\n\t\t\tthrow new ErrorDePlantilla(`\"${clave}\" atraviesa \"${parte}\", que no es un objeto`, nombre);\n\t\t}\n\t\tif (!(parte in (actual as Record<string, unknown>))) {\n\t\t\tconst disponibles = Object.keys(actual as Record<string, unknown>)\n\t\t\t\t.sort()\n\t\t\t\t.join(\", \");\n\t\t\tthrow new ErrorDePlantilla(\n\t\t\t\t`\"${clave}\" no está declarada (falta \"${parte}\"). Declaradas: ${disponibles || \"ninguna\"}`,\n\t\t\t\tnombre,\n\t\t\t);\n\t\t}\n\t\tactual = (actual as Record<string, unknown>)[parte];\n\t}\n\treturn actual;\n}\n"]}
1
+ {"version":3,"file":"plantilla.d.ts","sourceRoot":"","sources":["../../../src/core/prompts/plantilla.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,iEAAiE;AACjE,MAAM,WAAW,QAAQ;IACxB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS,QAAQ,EAAE,GAAG,SAAS,MAAM,EAAE,CAAC;CACxG;AAED,yEAAyE;AACzE,qBAAa,gBAAiB,SAAQ,KAAK;IAI1C,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;gBAE1B,OAAO,EAAE,MAAM,EAAE,mBAAmB,CAAC,EAAE,MAAM;CAKzD;AAiBD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAgEzF"}
@@ -1 +1 @@
1
- {"version":3,"file":"plantilla.js","sourceRoot":"","sources":["../../../src/core/prompts/plantilla.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Motor de plantillas mínimo para los prompts de Ada.\n *\n * POR QUÉ EXISTE. Nuestro prompt del sistema era una cadena dentro de\n * `system-prompt.ts` con dos directrices («sé conciso», «enseña las rutas») y\n * un bloque fijo sobre dónde está la documentación de Ada. oh-my-pi tiene 3.379\n * líneas de prompt en ~40 ficheros `.md` montadas con condicionales, y esa\n * diferencia se nota: cada sección suya existe SOLO si la capacidad de la que\n * habla está disponible.\n *\n * Eso es lo que hay que copiar. Un prompt que explica el LSP a un agente sin\n * LSP no es solo ruido: le enseña a pedir algo que no existe, y cuando falla el\n * modelo aprende a desconfiar de sus propias instrucciones.\n *\n * POR QUÉ PROPIO Y NO HANDLEBARS. Son ~130 líneas frente a una dependencia\n * nueva con su puerta de versión clavada, su `npm-shrinkwrap` y su superficie.\n * Y necesitamos una cosa que Handlebars NO hace por defecto y que aquí es\n * innegociable: fallar ante lo desconocido.\n *\n * LA DECISIÓN QUE IMPORTA. Una variable no declarada LANZA. No se sustituye por\n * cadena vacía.\n *\n * Es la lección de esta casa aplicada al prompt: una sustitución vacía en\n * silencio es «no lo he mirado» leído como «no hay». Un `{{herramientas}}` mal\n * escrito borraría el inventario entero de tools del prompt, el agente perdería\n * la mitad de sus capacidades y nadie vería un error — solo un agente\n * misteriosamente peor. Con un `throw` te enteras al arrancar, y hay prueba.\n */\n\n/** Lo que se le pasa a una plantilla. Nada más existe dentro. */\nexport interface Contexto {\n\t[clave: string]: string | number | boolean | null | undefined | readonly Contexto[] | readonly string[];\n}\n\n/** Un fallo de plantilla es un fallo de programación, no del usuario. */\nexport class ErrorDePlantilla extends Error {\n\t// Campo declarado y asignado en el cuerpo, no en la firma: el proyecto va con\n\t// `erasableSyntaxOnly`, que prohíbe las propiedades de constructor porque no\n\t// se pueden borrar con solo quitar los tipos.\n\treadonly nombreDeLaPlantilla?: string;\n\n\tconstructor(mensaje: string, nombreDeLaPlantilla?: string) {\n\t\tsuper(nombreDeLaPlantilla ? `${nombreDeLaPlantilla}: ${mensaje}` : mensaje);\n\t\tthis.name = \"ErrorDePlantilla\";\n\t\tthis.nombreDeLaPlantilla = nombreDeLaPlantilla;\n\t}\n}\n\n/** Falso, cadena vacía, cero, lista vacía y ausente. Todo lo demás es cierto. */\nfunction esVerdadero(valor: unknown): boolean {\n\tif (valor === undefined || valor === null || valor === false) return false;\n\tif (valor === \"\" || valor === 0) return false;\n\tif (Array.isArray(valor)) return valor.length > 0;\n\treturn true;\n}\n\nfunction aTexto(valor: unknown): string {\n\tif (valor === undefined || valor === null) return \"\";\n\treturn String(valor);\n}\n\nconst APERTURA = /\\{\\{#(si|noSi|cada)\\s+([A-Za-z0-9_.]+)\\s*\\}\\}/;\n\n/**\n * Renderiza `plantilla` con `contexto`.\n *\n * Directivas, en español como todo lo nuestro:\n *\n * {{clave}} sustitución; LANZA si `clave` no está declarada\n * {{#si clave}}…{{/si}} solo si es verdadera\n * {{#noSi clave}}…{{/noSi}} solo si es falsa — para el «no tienes X, haz Y»\n * {{#cada lista}}…{{/cada}} una vez por elemento; dentro, `{{esto}}` es el\n * elemento si es cadena, y sus campos si es objeto\n *\n * Anidar un bloque dentro de otro del MISMO tipo LANZA, y eso es una guarda, no\n * una nota: en cuanto un prompt necesita eso, lo que necesita de verdad es\n * precalcular el trozo variable en el contexto o partirse en dos ficheros.\n */\nexport function renderizar(plantilla: string, contexto: Contexto, nombre?: string): string {\n\tlet texto = plantilla;\n\n\t// Bloques primero: dentro pueden vivir sustituciones que solo existen ahí.\n\tlet guarda = 0;\n\twhile (true) {\n\t\tif (++guarda > 500) throw new ErrorDePlantilla(\"demasiados bloques anidados o sin cerrar\", nombre);\n\t\tconst apertura = texto.match(APERTURA);\n\t\tif (!apertura || apertura.index === undefined) break;\n\t\tconst [etiqueta, tipo, clave] = apertura;\n\t\tconst cierre = `{{/${tipo}}}`;\n\t\tconst inicioCuerpo = apertura.index + etiqueta.length;\n\t\tconst inicioCierre = texto.indexOf(cierre, inicioCuerpo);\n\t\tif (inicioCierre === -1) {\n\t\t\tthrow new ErrorDePlantilla(`bloque {{#${tipo} ${clave}}} sin su ${cierre}`, nombre);\n\t\t}\n\t\t// Anidar dos bloques del MISMO tipo estaba «no soportado» solo en el\n\t\t// comentario de la cabecera, y el resultado era una precondición escrita\n\t\t// en un comentario: nadie la imponía y se rompió a la primera. Medido con\n\t\t// `{{#si a}}A1{{#si b}}B{{/si}}A2{{/si}}` y b falso, esto rendía \"A1\" —el\n\t\t// `{{/si}}` interior cerraba el bloque exterior y A2 desaparecía sin\n\t\t// error. En un prompt eso borra media sección y deja al modelo sin la\n\t\t// regla, que es el fallo que se lee como éxito en el sitio más caro.\n\t\tconst dentro = texto.slice(inicioCuerpo, inicioCierre);\n\t\tconst anidado = dentro.match(new RegExp(`\\\\{\\\\{#${tipo}\\\\s`));\n\t\tif (anidado) {\n\t\t\tthrow new ErrorDePlantilla(\n\t\t\t\t`{{#${tipo} ${clave}}} contiene otro {{#${tipo}}} antes de su ${cierre}. ` +\n\t\t\t\t\t\"Anidar dos bloques del mismo tipo NO está soportado: el cierre interior \" +\n\t\t\t\t\t\"cerraría el exterior y el resto de la sección desaparecería en silencio. \" +\n\t\t\t\t\t\"Precalcula el trozo variable en el contexto, o parte la plantilla en dos.\",\n\t\t\t\tnombre,\n\t\t\t);\n\t\t}\n\t\tconst cuerpo = dentro;\n\t\tconst valor = leer(contexto, clave, nombre);\n\n\t\tlet sustitucion: string;\n\t\tif (tipo === \"si\") {\n\t\t\tsustitucion = esVerdadero(valor) ? cuerpo : \"\";\n\t\t} else if (tipo === \"noSi\") {\n\t\t\tsustitucion = esVerdadero(valor) ? \"\" : cuerpo;\n\t\t} else {\n\t\t\tif (!Array.isArray(valor)) {\n\t\t\t\tthrow new ErrorDePlantilla(\n\t\t\t\t\t`{{#cada ${clave}}} necesita una lista, y \"${clave}\" es ${typeof valor}`,\n\t\t\t\t\tnombre,\n\t\t\t\t);\n\t\t\t}\n\t\t\tsustitucion = valor\n\t\t\t\t.map((elemento) =>\n\t\t\t\t\trenderizar(\n\t\t\t\t\t\tcuerpo,\n\t\t\t\t\t\ttypeof elemento === \"string\" ? { esto: elemento } : { ...elemento, esto: \"\" },\n\t\t\t\t\t\tnombre,\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t\t.join(\"\");\n\t\t}\n\t\ttexto = texto.slice(0, apertura.index) + sustitucion + texto.slice(inicioCierre + cierre.length);\n\t}\n\n\t// Y ahora las sustituciones sueltas.\n\treturn texto.replace(/\\{\\{([A-Za-z0-9_.]+)\\}\\}/g, (_todo, clave: string) => aTexto(leer(contexto, clave, nombre)));\n}\n\n/**\n * Lee `clave` del contexto. LANZA si no está DECLARADA.\n *\n * Declarada y `undefined` es válido —significa «esta capacidad no está»— y\n * rinde vacío o falso. Lo que no vale es que la clave no exista: eso es una\n * errata en la plantilla, y borrar una sección del prompt por una errata es\n * exactamente el fallo que este módulo existe para no tener.\n */\nfunction leer(contexto: Contexto, clave: string, nombre?: string): unknown {\n\tconst partes = clave.split(\".\");\n\tlet actual: unknown = contexto;\n\tfor (const parte of partes) {\n\t\tif (actual === null || actual === undefined) return undefined;\n\t\tif (typeof actual !== \"object\") {\n\t\t\tthrow new ErrorDePlantilla(`\"${clave}\" atraviesa \"${parte}\", que no es un objeto`, nombre);\n\t\t}\n\t\tif (!(parte in (actual as Record<string, unknown>))) {\n\t\t\tconst disponibles = Object.keys(actual as Record<string, unknown>)\n\t\t\t\t.sort()\n\t\t\t\t.join(\", \");\n\t\t\tthrow new ErrorDePlantilla(\n\t\t\t\t`\"${clave}\" no está declarada (falta \"${parte}\"). Declaradas: ${disponibles || \"ninguna\"}`,\n\t\t\t\tnombre,\n\t\t\t);\n\t\t}\n\t\tactual = (actual as Record<string, unknown>)[parte];\n\t}\n\treturn actual;\n}\n"]}
1
+ {"version":3,"file":"plantilla.js","sourceRoot":"","sources":["../../../src/core/prompts/plantilla.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Tabla declarativa de proveedores seed (datos públicos de catálogo, sin claves).
3
+ *
4
+ * Añadir un proveedor = añadir UNA entrada aquí. La anotación
5
+ * `satisfies Record<string, ProviderDefinition>` hace compile-time la
6
+ * completitud: falta un campo requerido, una familia desconocida o un id
7
+ * que no casa con la clave → error de tipos.
8
+ */
9
+ import type { ProviderDefinition } from "./tipos.ts";
10
+ export declare const PROVIDERS: Record<string, ProviderDefinition>;
11
+ /** Ids en orden estable (para listar sin depender del orden de inserción). */
12
+ export declare const IDS_PROVEEDORES: readonly string[];
13
+ /** SaaS: solo Ada. Ningún proveedor directo lista ni resuelve — todo vía gateway con seat. */
14
+ export declare function proveedoresPermitidos(): readonly string[];
15
+ //# sourceMappingURL=definiciones.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definiciones.d.ts","sourceRoot":"","sources":["../../../src/core/proveedores-registry/definiciones.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAcX,CAAC;AAE/C,8EAA8E;AAC9E,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAA2B,CAAC;AAEzE,8FAA8F;AAC9F,wBAAgB,qBAAqB,IAAI,SAAS,MAAM,EAAE,CAEzD"}
@@ -0,0 +1,22 @@
1
+ export const PROVIDERS = {
2
+ "ada": {
3
+ id: "ada",
4
+ familia: "openai-responses",
5
+ baseUrlDefault: "https://api.ada.hoilab.local/v1",
6
+ modelos: [
7
+ { id: "nous", contexto: 131072 },
8
+ { id: "praxis", contexto: 131072 },
9
+ { id: "sophia", contexto: 262144 },
10
+ { id: "ethos", contexto: 262144 },
11
+ ],
12
+ auth: { tipo: "env", envVar: "ADA_PAT" },
13
+ features: { streaming: true, cache: true, reasoning: true, vision: true, herramientas: true },
14
+ },
15
+ };
16
+ /** Ids en orden estable (para listar sin depender del orden de inserción). */
17
+ export const IDS_PROVEEDORES = Object.keys(PROVIDERS);
18
+ /** SaaS: solo Ada. Ningún proveedor directo lista ni resuelve — todo vía gateway con seat. */
19
+ export function proveedoresPermitidos() {
20
+ return ['ada'];
21
+ }
22
+ //# sourceMappingURL=definiciones.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definiciones.js","sourceRoot":"","sources":["../../../src/core/proveedores-registry/definiciones.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,SAAS,GAAuC;IAC5D,KAAK,EAAE;QACN,EAAE,EAAE,KAAK;QACT,OAAO,EAAE,kBAAkB;QAC3B,cAAc,EAAE,iCAAiC;QACjD,OAAO,EAAE;YACR,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE;YAChC,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE;YAClC,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE;YAClC,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE;SACjC;QACD,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE;QACxC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE;KAC7F;CAC4C,CAAC;AAE/C,8EAA8E;AAC9E,MAAM,CAAC,MAAM,eAAe,GAAsB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAEzE,8FAA8F;AAC9F,MAAM,UAAU,qBAAqB;IACpC,OAAO,CAAC,KAAK,CAA+B,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Registro declarativo de proveedores (E-registry, auditoría E).
3
+ *
4
+ * Datos públicos de catálogo: familia de API, baseUrl, modelos con contexto
5
+ * y costes, auth (referencia a env var — NUNCA el valor), features.
6
+ * Añadir un proveedor = 1 entrada en `PROVIDERS` con completitud compile-time.
7
+ *
8
+ * Puente con discovery de runtimes (C03): `resolverPorBaseUrl` resuelve
9
+ * endpoints descubiertos contra la tabla declarativa.
10
+ */
11
+ export { IDS_PROVEEDORES, PROVIDERS, proveedoresPermitidos } from "./definiciones.ts";
12
+ export { buscarPorModelo, buscarTodosPorModelo, listarProveedores, ProveedorDesconocidoError, resolverPorBaseUrl, resolverProveedor, } from "./resolver.ts";
13
+ export type { FamiliaApi, FeaturesProveedor, ModeloDefinicion, ProviderDefinition, TipoAuth } from "./tipos.ts";
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/proveedores-registry/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACtF,OAAO,EACN,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,yBAAyB,EACzB,kBAAkB,EAClB,iBAAiB,GACjB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Registro declarativo de proveedores (E-registry, auditoría E).
3
+ *
4
+ * Datos públicos de catálogo: familia de API, baseUrl, modelos con contexto
5
+ * y costes, auth (referencia a env var — NUNCA el valor), features.
6
+ * Añadir un proveedor = 1 entrada en `PROVIDERS` con completitud compile-time.
7
+ *
8
+ * Puente con discovery de runtimes (C03): `resolverPorBaseUrl` resuelve
9
+ * endpoints descubiertos contra la tabla declarativa.
10
+ */
11
+ export { IDS_PROVEEDORES, PROVIDERS, proveedoresPermitidos } from "./definiciones.js";
12
+ export { buscarPorModelo, buscarTodosPorModelo, listarProveedores, ProveedorDesconocidoError, resolverPorBaseUrl, resolverProveedor, } from "./resolver.js";
13
+ //# sourceMappingURL=index.js.map