@hoilab/ada-cli 0.84.21 → 0.85.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1337) hide show
  1. package/CHANGELOG.md +49 -2
  2. package/README.es.md +174 -0
  3. package/README.md +203 -658
  4. package/dist/ada-publico.d.ts +35 -0
  5. package/dist/ada-publico.d.ts.map +1 -0
  6. package/dist/ada-publico.js +40 -0
  7. package/dist/ada-publico.js.map +1 -0
  8. package/dist/cli/args.d.ts +3 -0
  9. package/dist/cli/args.d.ts.map +1 -1
  10. package/dist/cli/args.js +11 -0
  11. package/dist/cli/args.js.map +1 -1
  12. package/dist/cli/audit-command.d.ts +15 -0
  13. package/dist/cli/audit-command.d.ts.map +1 -0
  14. package/dist/cli/audit-command.js +280 -0
  15. package/dist/cli/audit-command.js.map +1 -0
  16. package/dist/cli/banco-command.d.ts +15 -0
  17. package/dist/cli/banco-command.d.ts.map +1 -0
  18. package/dist/cli/banco-command.js +213 -0
  19. package/dist/cli/banco-command.js.map +1 -0
  20. package/dist/cli/cleanse-command.d.ts +11 -0
  21. package/dist/cli/cleanse-command.d.ts.map +1 -0
  22. package/dist/cli/cleanse-command.js +101 -0
  23. package/dist/cli/cleanse-command.js.map +1 -0
  24. package/dist/cli/commit-command.d.ts +31 -0
  25. package/dist/cli/commit-command.d.ts.map +1 -0
  26. package/dist/cli/commit-command.js +158 -0
  27. package/dist/cli/commit-command.js.map +1 -0
  28. package/dist/cli/computer-command.d.ts +12 -0
  29. package/dist/cli/computer-command.d.ts.map +1 -0
  30. package/dist/cli/computer-command.js +141 -0
  31. package/dist/cli/computer-command.js.map +1 -0
  32. package/dist/cli/discover-command.d.ts +18 -0
  33. package/dist/cli/discover-command.d.ts.map +1 -0
  34. package/dist/cli/discover-command.js +108 -0
  35. package/dist/cli/discover-command.js.map +1 -0
  36. package/dist/cli/file-processor.d.ts.map +1 -1
  37. package/dist/cli/file-processor.js +2 -1
  38. package/dist/cli/file-processor.js.map +1 -1
  39. package/dist/cli/hashline-command.d.ts +11 -0
  40. package/dist/cli/hashline-command.d.ts.map +1 -0
  41. package/dist/cli/hashline-command.js +106 -0
  42. package/dist/cli/hashline-command.js.map +1 -0
  43. package/dist/cli/home-screen.d.ts.map +1 -1
  44. package/dist/cli/home-screen.js +2 -2
  45. package/dist/cli/home-screen.js.map +1 -1
  46. package/dist/cli/import-command.d.ts +35 -0
  47. package/dist/cli/import-command.d.ts.map +1 -0
  48. package/dist/cli/import-command.js +164 -0
  49. package/dist/cli/import-command.js.map +1 -0
  50. package/dist/cli/politica-command.d.ts +20 -0
  51. package/dist/cli/politica-command.d.ts.map +1 -0
  52. package/dist/cli/politica-command.js +93 -0
  53. package/dist/cli/politica-command.js.map +1 -0
  54. package/dist/cli/refine-command.d.ts +18 -0
  55. package/dist/cli/refine-command.d.ts.map +1 -0
  56. package/dist/cli/refine-command.js +101 -0
  57. package/dist/cli/refine-command.js.map +1 -0
  58. package/dist/cli/review-command.d.ts +24 -0
  59. package/dist/cli/review-command.d.ts.map +1 -0
  60. package/dist/cli/review-command.js +168 -0
  61. package/dist/cli/review-command.js.map +1 -0
  62. package/dist/cli/schedule-command.d.ts +17 -0
  63. package/dist/cli/schedule-command.d.ts.map +1 -0
  64. package/dist/cli/schedule-command.js +117 -0
  65. package/dist/cli/schedule-command.js.map +1 -0
  66. package/dist/cli/serve-command.d.ts +72 -0
  67. package/dist/cli/serve-command.d.ts.map +1 -0
  68. package/dist/cli/serve-command.js +568 -0
  69. package/dist/cli/serve-command.js.map +1 -0
  70. package/dist/cli/startup-ui.d.ts.map +1 -1
  71. package/dist/cli/startup-ui.js +9 -3
  72. package/dist/cli/startup-ui.js.map +1 -1
  73. package/dist/cli/telegram-command.d.ts +18 -0
  74. package/dist/cli/telegram-command.d.ts.map +1 -0
  75. package/dist/cli/telegram-command.js +137 -0
  76. package/dist/cli/telegram-command.js.map +1 -0
  77. package/dist/cli/telemetria-command.d.ts +22 -0
  78. package/dist/cli/telemetria-command.d.ts.map +1 -0
  79. package/dist/cli/telemetria-command.js +127 -0
  80. package/dist/cli/telemetria-command.js.map +1 -0
  81. package/dist/cli/undo-command.d.ts +9 -0
  82. package/dist/cli/undo-command.d.ts.map +1 -0
  83. package/dist/cli/undo-command.js +56 -0
  84. package/dist/cli/undo-command.js.map +1 -0
  85. package/dist/cli/usage-command.d.ts +10 -0
  86. package/dist/cli/usage-command.d.ts.map +1 -0
  87. package/dist/cli/usage-command.js +209 -0
  88. package/dist/cli/usage-command.js.map +1 -0
  89. package/dist/cli/wiki-command.d.ts +9 -0
  90. package/dist/cli/wiki-command.d.ts.map +1 -0
  91. package/dist/cli/wiki-command.js +76 -0
  92. package/dist/cli/wiki-command.js.map +1 -0
  93. package/dist/cli.d.ts +6 -0
  94. package/dist/cli.d.ts.map +1 -1
  95. package/dist/cli.js +10 -11
  96. package/dist/cli.js.map +1 -1
  97. package/dist/config.d.ts +1 -1
  98. package/dist/config.d.ts.map +1 -1
  99. package/dist/config.js +3 -2
  100. package/dist/config.js.map +1 -1
  101. package/dist/core/ada.d.ts +58 -0
  102. package/dist/core/ada.d.ts.map +1 -0
  103. package/dist/core/ada.js +61 -0
  104. package/dist/core/ada.js.map +1 -0
  105. package/dist/core/advisor/guarda.d.ts +66 -0
  106. package/dist/core/advisor/guarda.d.ts.map +1 -0
  107. package/dist/core/advisor/guarda.js +191 -0
  108. package/dist/core/advisor/guarda.js.map +1 -0
  109. package/dist/core/advisor/runtime.d.ts +66 -0
  110. package/dist/core/advisor/runtime.d.ts.map +1 -0
  111. package/dist/core/advisor/runtime.js +121 -0
  112. package/dist/core/advisor/runtime.js.map +1 -0
  113. package/dist/core/advisor/sesion.d.ts +109 -0
  114. package/dist/core/advisor/sesion.d.ts.map +1 -0
  115. package/dist/core/advisor/sesion.js +139 -0
  116. package/dist/core/advisor/sesion.js.map +1 -0
  117. package/dist/core/agent-session.d.ts +85 -7
  118. package/dist/core/agent-session.d.ts.map +1 -1
  119. package/dist/core/agent-session.js +862 -78
  120. package/dist/core/agent-session.js.map +1 -1
  121. package/dist/core/agents/loader.d.ts +77 -0
  122. package/dist/core/agents/loader.d.ts.map +1 -0
  123. package/dist/core/agents/loader.js +154 -0
  124. package/dist/core/agents/loader.js.map +1 -0
  125. package/dist/core/aprobacion/generados.d.ts +37 -0
  126. package/dist/core/aprobacion/generados.d.ts.map +1 -0
  127. package/dist/core/aprobacion/generados.js +85 -0
  128. package/dist/core/aprobacion/generados.js.map +1 -0
  129. package/dist/core/aprobacion/politica-de-maquina.d.ts +90 -0
  130. package/dist/core/aprobacion/politica-de-maquina.d.ts.map +1 -0
  131. package/dist/core/aprobacion/politica-de-maquina.js +212 -0
  132. package/dist/core/aprobacion/politica-de-maquina.js.map +1 -0
  133. package/dist/core/aprobacion/politica.d.ts +90 -0
  134. package/dist/core/aprobacion/politica.d.ts.map +1 -0
  135. package/dist/core/aprobacion/politica.js +375 -0
  136. package/dist/core/aprobacion/politica.js.map +1 -0
  137. package/dist/core/arranque/atajos.d.ts +46 -0
  138. package/dist/core/arranque/atajos.d.ts.map +1 -0
  139. package/dist/core/arranque/atajos.js +113 -0
  140. package/dist/core/arranque/atajos.js.map +1 -0
  141. package/dist/core/audit/exportacion.d.ts +54 -0
  142. package/dist/core/audit/exportacion.d.ts.map +1 -0
  143. package/dist/core/audit/exportacion.js +265 -0
  144. package/dist/core/audit/exportacion.js.map +1 -0
  145. package/dist/core/audit/libro.d.ts +318 -0
  146. package/dist/core/audit/libro.d.ts.map +1 -0
  147. package/dist/core/audit/libro.js +508 -0
  148. package/dist/core/audit/libro.js.map +1 -0
  149. package/dist/core/audit/registro-sesion.d.ts +78 -0
  150. package/dist/core/audit/registro-sesion.d.ts.map +1 -0
  151. package/dist/core/audit/registro-sesion.js +202 -0
  152. package/dist/core/audit/registro-sesion.js.map +1 -0
  153. package/dist/core/audit/retencion.d.ts +82 -0
  154. package/dist/core/audit/retencion.d.ts.map +1 -0
  155. package/dist/core/audit/retencion.js +152 -0
  156. package/dist/core/audit/retencion.js.map +1 -0
  157. package/dist/core/audit/rutas.d.ts +23 -0
  158. package/dist/core/audit/rutas.d.ts.map +1 -0
  159. package/dist/core/audit/rutas.js +23 -0
  160. package/dist/core/audit/rutas.js.map +1 -0
  161. package/dist/core/auth-storage.d.ts +0 -3
  162. package/dist/core/auth-storage.d.ts.map +1 -1
  163. package/dist/core/auth-storage.js +21 -8
  164. package/dist/core/auth-storage.js.map +1 -1
  165. package/dist/core/banco/almacenamiento.d.ts +18 -0
  166. package/dist/core/banco/almacenamiento.d.ts.map +1 -0
  167. package/dist/core/banco/almacenamiento.js +50 -0
  168. package/dist/core/banco/almacenamiento.js.map +1 -0
  169. package/dist/core/banco/analisis.d.ts +37 -0
  170. package/dist/core/banco/analisis.d.ts.map +1 -0
  171. package/dist/core/banco/analisis.js +164 -0
  172. package/dist/core/banco/analisis.js.map +1 -0
  173. package/dist/core/banco/bloques.d.ts +39 -0
  174. package/dist/core/banco/bloques.d.ts.map +1 -0
  175. package/dist/core/banco/bloques.js +84 -0
  176. package/dist/core/banco/bloques.js.map +1 -0
  177. package/dist/core/banco/cargas.d.ts +84 -0
  178. package/dist/core/banco/cargas.d.ts.map +1 -0
  179. package/dist/core/banco/cargas.js +520 -0
  180. package/dist/core/banco/cargas.js.map +1 -0
  181. package/dist/core/banco/comparar.d.ts +29 -0
  182. package/dist/core/banco/comparar.d.ts.map +1 -0
  183. package/dist/core/banco/comparar.js +28 -0
  184. package/dist/core/banco/comparar.js.map +1 -0
  185. package/dist/core/banco/ejecutar.d.ts +44 -0
  186. package/dist/core/banco/ejecutar.d.ts.map +1 -0
  187. package/dist/core/banco/ejecutar.js +183 -0
  188. package/dist/core/banco/ejecutar.js.map +1 -0
  189. package/dist/core/banco/generar.d.ts +24 -0
  190. package/dist/core/banco/generar.d.ts.map +1 -0
  191. package/dist/core/banco/generar.js +159 -0
  192. package/dist/core/banco/generar.js.map +1 -0
  193. package/dist/core/banco/mutaciones.d.ts +25 -0
  194. package/dist/core/banco/mutaciones.d.ts.map +1 -0
  195. package/dist/core/banco/mutaciones.js +215 -0
  196. package/dist/core/banco/mutaciones.js.map +1 -0
  197. package/dist/core/banco/tipos.d.ts +121 -0
  198. package/dist/core/banco/tipos.d.ts.map +1 -0
  199. package/dist/core/banco/tipos.js +16 -0
  200. package/dist/core/banco/tipos.js.map +1 -0
  201. package/dist/core/blobs/almacen.d.ts +81 -0
  202. package/dist/core/blobs/almacen.d.ts.map +1 -0
  203. package/dist/core/blobs/almacen.js +198 -0
  204. package/dist/core/blobs/almacen.js.map +1 -0
  205. package/dist/core/blobs/broker.d.ts +103 -0
  206. package/dist/core/blobs/broker.d.ts.map +1 -0
  207. package/dist/core/blobs/broker.js +204 -0
  208. package/dist/core/blobs/broker.js.map +1 -0
  209. package/dist/core/blobs/index.d.ts +70 -0
  210. package/dist/core/blobs/index.d.ts.map +1 -0
  211. package/dist/core/blobs/index.js +232 -0
  212. package/dist/core/blobs/index.js.map +1 -0
  213. package/dist/core/blobs/payload.d.ts +55 -0
  214. package/dist/core/blobs/payload.d.ts.map +1 -0
  215. package/dist/core/blobs/payload.js +255 -0
  216. package/dist/core/blobs/payload.js.map +1 -0
  217. package/dist/core/blobs/proveedor.d.ts +85 -0
  218. package/dist/core/blobs/proveedor.d.ts.map +1 -0
  219. package/dist/core/blobs/proveedor.js +196 -0
  220. package/dist/core/blobs/proveedor.js.map +1 -0
  221. package/dist/core/browser/cdp.d.ts +41 -0
  222. package/dist/core/browser/cdp.d.ts.map +1 -0
  223. package/dist/core/browser/cdp.js +119 -0
  224. package/dist/core/browser/cdp.js.map +1 -0
  225. package/dist/core/browser/politica.d.ts +51 -0
  226. package/dist/core/browser/politica.d.ts.map +1 -0
  227. package/dist/core/browser/politica.js +123 -0
  228. package/dist/core/browser/politica.js.map +1 -0
  229. package/dist/core/browser/sesion.d.ts +52 -0
  230. package/dist/core/browser/sesion.d.ts.map +1 -0
  231. package/dist/core/browser/sesion.js +176 -0
  232. package/dist/core/browser/sesion.js.map +1 -0
  233. package/dist/core/browser/tools.d.ts +16 -0
  234. package/dist/core/browser/tools.d.ts.map +1 -0
  235. package/dist/core/browser/tools.js +279 -0
  236. package/dist/core/browser/tools.js.map +1 -0
  237. package/dist/core/commit/diff.d.ts +56 -0
  238. package/dist/core/commit/diff.d.ts.map +1 -0
  239. package/dist/core/commit/diff.js +145 -0
  240. package/dist/core/commit/diff.js.map +1 -0
  241. package/dist/core/commit/mensaje.d.ts +80 -0
  242. package/dist/core/commit/mensaje.d.ts.map +1 -0
  243. package/dist/core/commit/mensaje.js +207 -0
  244. package/dist/core/commit/mensaje.js.map +1 -0
  245. package/dist/core/compactar/index.d.ts +52 -0
  246. package/dist/core/compactar/index.d.ts.map +1 -0
  247. package/dist/core/compactar/index.js +91 -0
  248. package/dist/core/compactar/index.js.map +1 -0
  249. package/dist/core/compactar/registro-denso.d.ts +160 -0
  250. package/dist/core/compactar/registro-denso.d.ts.map +1 -0
  251. package/dist/core/compactar/registro-denso.js +620 -0
  252. package/dist/core/compactar/registro-denso.js.map +1 -0
  253. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  254. package/dist/core/compaction/branch-summarization.js +3 -0
  255. package/dist/core/compaction/branch-summarization.js.map +1 -1
  256. package/dist/core/compaction/compaction.d.ts +4 -3
  257. package/dist/core/compaction/compaction.d.ts.map +1 -1
  258. package/dist/core/compaction/compaction.js +41 -32
  259. package/dist/core/compaction/compaction.js.map +1 -1
  260. package/dist/core/computer/captura.d.ts +35 -0
  261. package/dist/core/computer/captura.d.ts.map +1 -0
  262. package/dist/core/computer/captura.js +140 -0
  263. package/dist/core/computer/captura.js.map +1 -0
  264. package/dist/core/computer/driver.d.ts +130 -0
  265. package/dist/core/computer/driver.d.ts.map +1 -0
  266. package/dist/core/computer/driver.js +206 -0
  267. package/dist/core/computer/driver.js.map +1 -0
  268. package/dist/core/computer/motor/actions.d.ts +109 -0
  269. package/dist/core/computer/motor/actions.d.ts.map +1 -0
  270. package/dist/core/computer/motor/actions.js +157 -0
  271. package/dist/core/computer/motor/actions.js.map +1 -0
  272. package/dist/core/computer/motor/bridge.d.ts +232 -0
  273. package/dist/core/computer/motor/bridge.d.ts.map +1 -0
  274. package/dist/core/computer/motor/bridge.js +2335 -0
  275. package/dist/core/computer/motor/bridge.js.map +1 -0
  276. package/dist/core/computer/motor/cdp.d.ts +107 -0
  277. package/dist/core/computer/motor/cdp.d.ts.map +1 -0
  278. package/dist/core/computer/motor/cdp.js +659 -0
  279. package/dist/core/computer/motor/cdp.js.map +1 -0
  280. package/dist/core/computer/motor/config.d.ts +23 -0
  281. package/dist/core/computer/motor/config.d.ts.map +1 -0
  282. package/dist/core/computer/motor/config.js +100 -0
  283. package/dist/core/computer/motor/config.js.map +1 -0
  284. package/dist/core/computer/motor/contract.d.ts +81 -0
  285. package/dist/core/computer/motor/contract.d.ts.map +1 -0
  286. package/dist/core/computer/motor/contract.js +14 -0
  287. package/dist/core/computer/motor/contract.js.map +1 -0
  288. package/dist/core/computer/motor/note.d.ts +37 -0
  289. package/dist/core/computer/motor/note.d.ts.map +1 -0
  290. package/dist/core/computer/motor/note.js +162 -0
  291. package/dist/core/computer/motor/note.js.map +1 -0
  292. package/dist/core/computer/motor/outline.d.ts +155 -0
  293. package/dist/core/computer/motor/outline.d.ts.map +1 -0
  294. package/dist/core/computer/motor/outline.js +590 -0
  295. package/dist/core/computer/motor/outline.js.map +1 -0
  296. package/dist/core/computer/motor/output.d.ts +18 -0
  297. package/dist/core/computer/motor/output.d.ts.map +1 -0
  298. package/dist/core/computer/motor/output.js +148 -0
  299. package/dist/core/computer/motor/output.js.map +1 -0
  300. package/dist/core/computer/motor/permissions.d.ts +41 -0
  301. package/dist/core/computer/motor/permissions.d.ts.map +1 -0
  302. package/dist/core/computer/motor/permissions.js +51 -0
  303. package/dist/core/computer/motor/permissions.js.map +1 -0
  304. package/dist/core/computer/motor/platform/architecture.d.ts +5 -0
  305. package/dist/core/computer/motor/platform/architecture.d.ts.map +1 -0
  306. package/dist/core/computer/motor/platform/architecture.js +21 -0
  307. package/dist/core/computer/motor/platform/architecture.js.map +1 -0
  308. package/dist/core/computer/motor/platform/coerce.d.ts +4 -0
  309. package/dist/core/computer/motor/platform/coerce.d.ts.map +1 -0
  310. package/dist/core/computer/motor/platform/coerce.js +17 -0
  311. package/dist/core/computer/motor/platform/coerce.js.map +1 -0
  312. package/dist/core/computer/motor/platform/index.d.ts +4 -0
  313. package/dist/core/computer/motor/platform/index.d.ts.map +1 -0
  314. package/dist/core/computer/motor/platform/index.js +79 -0
  315. package/dist/core/computer/motor/platform/index.js.map +1 -0
  316. package/dist/core/computer/motor/platform/linux/backend.d.ts +3 -0
  317. package/dist/core/computer/motor/platform/linux/backend.d.ts.map +1 -0
  318. package/dist/core/computer/motor/platform/linux/backend.js +173 -0
  319. package/dist/core/computer/motor/platform/linux/backend.js.map +1 -0
  320. package/dist/core/computer/motor/platform/linux/helper.d.ts +29 -0
  321. package/dist/core/computer/motor/platform/linux/helper.d.ts.map +1 -0
  322. package/dist/core/computer/motor/platform/linux/helper.js +261 -0
  323. package/dist/core/computer/motor/platform/linux/helper.js.map +1 -0
  324. package/dist/core/computer/motor/platform/macos/backend.d.ts +3 -0
  325. package/dist/core/computer/motor/platform/macos/backend.d.ts.map +1 -0
  326. package/dist/core/computer/motor/platform/macos/backend.js +124 -0
  327. package/dist/core/computer/motor/platform/macos/backend.js.map +1 -0
  328. package/dist/core/computer/motor/platform/macos/browser.d.ts +7 -0
  329. package/dist/core/computer/motor/platform/macos/browser.d.ts.map +1 -0
  330. package/dist/core/computer/motor/platform/macos/browser.js +101 -0
  331. package/dist/core/computer/motor/platform/macos/browser.js.map +1 -0
  332. package/dist/core/computer/motor/platform/macos/helper-path.mjs +34 -0
  333. package/dist/core/computer/motor/platform/macos/helper.d.ts +32 -0
  334. package/dist/core/computer/motor/platform/macos/helper.d.ts.map +1 -0
  335. package/dist/core/computer/motor/platform/macos/helper.js +277 -0
  336. package/dist/core/computer/motor/platform/macos/helper.js.map +1 -0
  337. package/dist/core/computer/motor/platform/macos/permissions.d.ts +4 -0
  338. package/dist/core/computer/motor/platform/macos/permissions.d.ts.map +1 -0
  339. package/dist/core/computer/motor/platform/macos/permissions.js +118 -0
  340. package/dist/core/computer/motor/platform/macos/permissions.js.map +1 -0
  341. package/dist/core/computer/motor/platform/types.d.ts +263 -0
  342. package/dist/core/computer/motor/platform/types.d.ts.map +1 -0
  343. package/dist/core/computer/motor/platform/types.js +2 -0
  344. package/dist/core/computer/motor/platform/types.js.map +1 -0
  345. package/dist/core/computer/motor/platform/windows/backend.d.ts +3 -0
  346. package/dist/core/computer/motor/platform/windows/backend.d.ts.map +1 -0
  347. package/dist/core/computer/motor/platform/windows/backend.js +163 -0
  348. package/dist/core/computer/motor/platform/windows/backend.js.map +1 -0
  349. package/dist/core/computer/motor/platform/windows/helper.d.ts +18 -0
  350. package/dist/core/computer/motor/platform/windows/helper.d.ts.map +1 -0
  351. package/dist/core/computer/motor/platform/windows/helper.js +174 -0
  352. package/dist/core/computer/motor/platform/windows/helper.js.map +1 -0
  353. package/dist/core/computer/motor/root-selection.d.ts +6 -0
  354. package/dist/core/computer/motor/root-selection.d.ts.map +1 -0
  355. package/dist/core/computer/motor/root-selection.js +28 -0
  356. package/dist/core/computer/motor/root-selection.js.map +1 -0
  357. package/dist/core/computer/motor/runtime.d.ts +50 -0
  358. package/dist/core/computer/motor/runtime.d.ts.map +1 -0
  359. package/dist/core/computer/motor/runtime.js +119 -0
  360. package/dist/core/computer/motor/runtime.js.map +1 -0
  361. package/dist/core/computer/motor/state.d.ts +68 -0
  362. package/dist/core/computer/motor/state.d.ts.map +1 -0
  363. package/dist/core/computer/motor/state.js +100 -0
  364. package/dist/core/computer/motor/state.js.map +1 -0
  365. package/dist/core/computer/motor/view.d.ts +6 -0
  366. package/dist/core/computer/motor/view.d.ts.map +1 -0
  367. package/dist/core/computer/motor/view.js +185 -0
  368. package/dist/core/computer/motor/view.js.map +1 -0
  369. package/dist/core/computer/motor-ada.d.ts +159 -0
  370. package/dist/core/computer/motor-ada.d.ts.map +1 -0
  371. package/dist/core/computer/motor-ada.js +412 -0
  372. package/dist/core/computer/motor-ada.js.map +1 -0
  373. package/dist/core/computer/politica.d.ts +56 -0
  374. package/dist/core/computer/politica.d.ts.map +1 -0
  375. package/dist/core/computer/politica.js +163 -0
  376. package/dist/core/computer/politica.js.map +1 -0
  377. package/dist/core/computer/tools.d.ts +26 -0
  378. package/dist/core/computer/tools.d.ts.map +1 -0
  379. package/dist/core/computer/tools.js +399 -0
  380. package/dist/core/computer/tools.js.map +1 -0
  381. package/dist/core/context-breakdown.d.ts +80 -0
  382. package/dist/core/context-breakdown.d.ts.map +1 -0
  383. package/dist/core/context-breakdown.js +87 -0
  384. package/dist/core/context-breakdown.js.map +1 -0
  385. package/dist/core/credenciales/cliente.d.ts +60 -0
  386. package/dist/core/credenciales/cliente.d.ts.map +1 -0
  387. package/dist/core/credenciales/cliente.js +81 -0
  388. package/dist/core/credenciales/cliente.js.map +1 -0
  389. package/dist/core/credenciales/pool.d.ts +96 -0
  390. package/dist/core/credenciales/pool.d.ts.map +1 -0
  391. package/dist/core/credenciales/pool.js +128 -0
  392. package/dist/core/credenciales/pool.js.map +1 -0
  393. package/dist/core/credenciales/reposo.d.ts +93 -0
  394. package/dist/core/credenciales/reposo.d.ts.map +1 -0
  395. package/dist/core/credenciales/reposo.js +489 -0
  396. package/dist/core/credenciales/reposo.js.map +1 -0
  397. package/dist/core/credenciales/servidor.d.ts +55 -0
  398. package/dist/core/credenciales/servidor.d.ts.map +1 -0
  399. package/dist/core/credenciales/servidor.js +205 -0
  400. package/dist/core/credenciales/servidor.js.map +1 -0
  401. package/dist/core/defaults.d.ts +1 -0
  402. package/dist/core/defaults.d.ts.map +1 -1
  403. package/dist/core/defaults.js +9 -0
  404. package/dist/core/defaults.js.map +1 -1
  405. package/dist/core/descubrimiento/comandos.d.ts +30 -0
  406. package/dist/core/descubrimiento/comandos.d.ts.map +1 -0
  407. package/dist/core/descubrimiento/comandos.js +76 -0
  408. package/dist/core/descubrimiento/comandos.js.map +1 -0
  409. package/dist/core/descubrimiento/mcp.d.ts +42 -0
  410. package/dist/core/descubrimiento/mcp.d.ts.map +1 -0
  411. package/dist/core/descubrimiento/mcp.js +130 -0
  412. package/dist/core/descubrimiento/mcp.js.map +1 -0
  413. package/dist/core/descubrimiento/reglas.d.ts +61 -0
  414. package/dist/core/descubrimiento/reglas.d.ts.map +1 -0
  415. package/dist/core/descubrimiento/reglas.js +134 -0
  416. package/dist/core/descubrimiento/reglas.js.map +1 -0
  417. package/dist/core/descubrimiento/skills.d.ts +57 -0
  418. package/dist/core/descubrimiento/skills.d.ts.map +1 -0
  419. package/dist/core/descubrimiento/skills.js +113 -0
  420. package/dist/core/descubrimiento/skills.js.map +1 -0
  421. package/dist/core/dificultad/clasificador.d.ts +133 -0
  422. package/dist/core/dificultad/clasificador.d.ts.map +1 -0
  423. package/dist/core/dificultad/clasificador.js +288 -0
  424. package/dist/core/dificultad/clasificador.js.map +1 -0
  425. package/dist/core/edicion/diario.d.ts +37 -0
  426. package/dist/core/edicion/diario.d.ts.map +1 -0
  427. package/dist/core/edicion/diario.js +51 -0
  428. package/dist/core/edicion/diario.js.map +1 -0
  429. package/dist/core/edicion/hashline.d.ts +71 -0
  430. package/dist/core/edicion/hashline.d.ts.map +1 -0
  431. package/dist/core/edicion/hashline.js +111 -0
  432. package/dist/core/edicion/hashline.js.map +1 -0
  433. package/dist/core/edicion/hueco.d.ts +64 -0
  434. package/dist/core/edicion/hueco.d.ts.map +1 -0
  435. package/dist/core/edicion/hueco.js +162 -0
  436. package/dist/core/edicion/hueco.js.map +1 -0
  437. package/dist/core/edicion/limpiar-carga.d.ts +39 -0
  438. package/dist/core/edicion/limpiar-carga.d.ts.map +1 -0
  439. package/dist/core/edicion/limpiar-carga.js +121 -0
  440. package/dist/core/edicion/limpiar-carga.js.map +1 -0
  441. package/dist/core/edicion/observador.d.ts +80 -0
  442. package/dist/core/edicion/observador.d.ts.map +1 -0
  443. package/dist/core/edicion/observador.js +183 -0
  444. package/dist/core/edicion/observador.js.map +1 -0
  445. package/dist/core/edicion/parecido.d.ts +53 -0
  446. package/dist/core/edicion/parecido.d.ts.map +1 -0
  447. package/dist/core/edicion/parecido.js +145 -0
  448. package/dist/core/edicion/parecido.js.map +1 -0
  449. package/dist/core/edicion/parseo.d.ts +58 -0
  450. package/dist/core/edicion/parseo.d.ts.map +1 -0
  451. package/dist/core/edicion/parseo.js +124 -0
  452. package/dist/core/edicion/parseo.js.map +1 -0
  453. package/dist/core/edicion/reparacion.d.ts +67 -0
  454. package/dist/core/edicion/reparacion.d.ts.map +1 -0
  455. package/dist/core/edicion/reparacion.js +202 -0
  456. package/dist/core/edicion/reparacion.js.map +1 -0
  457. package/dist/core/edicion/sangria.d.ts +121 -0
  458. package/dist/core/edicion/sangria.d.ts.map +1 -0
  459. package/dist/core/edicion/sangria.js +341 -0
  460. package/dist/core/edicion/sangria.js.map +1 -0
  461. package/dist/core/edicion/tipos.d.ts +58 -0
  462. package/dist/core/edicion/tipos.d.ts.map +1 -0
  463. package/dist/core/edicion/tipos.js +160 -0
  464. package/dist/core/edicion/tipos.js.map +1 -0
  465. package/dist/core/engine-personality.d.ts +12 -0
  466. package/dist/core/engine-personality.d.ts.map +1 -0
  467. package/dist/core/engine-personality.js +53 -0
  468. package/dist/core/engine-personality.js.map +1 -0
  469. package/dist/core/errores/proveedor.d.ts +53 -0
  470. package/dist/core/errores/proveedor.d.ts.map +1 -0
  471. package/dist/core/errores/proveedor.js +191 -0
  472. package/dist/core/errores/proveedor.js.map +1 -0
  473. package/dist/core/estructural/buscar.d.ts +61 -0
  474. package/dist/core/estructural/buscar.d.ts.map +1 -0
  475. package/dist/core/estructural/buscar.js +261 -0
  476. package/dist/core/estructural/buscar.js.map +1 -0
  477. package/dist/core/estructural/editar.d.ts +36 -0
  478. package/dist/core/estructural/editar.d.ts.map +1 -0
  479. package/dist/core/estructural/editar.js +123 -0
  480. package/dist/core/estructural/editar.js.map +1 -0
  481. package/dist/core/estructural/tools.d.ts +11 -0
  482. package/dist/core/estructural/tools.d.ts.map +1 -0
  483. package/dist/core/estructural/tools.js +100 -0
  484. package/dist/core/estructural/tools.js.map +1 -0
  485. package/dist/core/experimental.d.ts.map +1 -1
  486. package/dist/core/experimental.js +10 -1
  487. package/dist/core/experimental.js.map +1 -1
  488. package/dist/core/extensiones/suplantacion.d.ts +49 -0
  489. package/dist/core/extensiones/suplantacion.d.ts.map +1 -0
  490. package/dist/core/extensiones/suplantacion.js +61 -0
  491. package/dist/core/extensiones/suplantacion.js.map +1 -0
  492. package/dist/core/extensiones/vigilancia.d.ts +54 -0
  493. package/dist/core/extensiones/vigilancia.d.ts.map +1 -0
  494. package/dist/core/extensiones/vigilancia.js +217 -0
  495. package/dist/core/extensiones/vigilancia.js.map +1 -0
  496. package/dist/core/extensions/index.d.ts +1 -1
  497. package/dist/core/extensions/index.d.ts.map +1 -1
  498. package/dist/core/extensions/index.js.map +1 -1
  499. package/dist/core/extensions/loader.d.ts.map +1 -1
  500. package/dist/core/extensions/loader.js +21 -6
  501. package/dist/core/extensions/loader.js.map +1 -1
  502. package/dist/core/extensions/types.d.ts +23 -4
  503. package/dist/core/extensions/types.d.ts.map +1 -1
  504. package/dist/core/extensions/types.js.map +1 -1
  505. package/dist/core/harness/fuentes-de-contexto.d.ts +29 -0
  506. package/dist/core/harness/fuentes-de-contexto.d.ts.map +1 -0
  507. package/dist/core/harness/fuentes-de-contexto.js +44 -0
  508. package/dist/core/harness/fuentes-de-contexto.js.map +1 -0
  509. package/dist/core/harness/refine.d.ts +40 -0
  510. package/dist/core/harness/refine.d.ts.map +1 -0
  511. package/dist/core/harness/refine.js +109 -0
  512. package/dist/core/harness/refine.js.map +1 -0
  513. package/dist/core/harness/store.d.ts +75 -0
  514. package/dist/core/harness/store.d.ts.map +1 -0
  515. package/dist/core/harness/store.js +149 -0
  516. package/dist/core/harness/store.js.map +1 -0
  517. package/dist/core/hooks/contract.d.ts +85 -0
  518. package/dist/core/hooks/contract.d.ts.map +1 -0
  519. package/dist/core/hooks/contract.js +140 -0
  520. package/dist/core/hooks/contract.js.map +1 -0
  521. package/dist/core/hooks/runner.d.ts +42 -0
  522. package/dist/core/hooks/runner.d.ts.map +1 -0
  523. package/dist/core/hooks/runner.js +85 -0
  524. package/dist/core/hooks/runner.js.map +1 -0
  525. package/dist/core/hooks/session-hooks.d.ts +62 -0
  526. package/dist/core/hooks/session-hooks.d.ts.map +1 -0
  527. package/dist/core/hooks/session-hooks.js +84 -0
  528. package/dist/core/hooks/session-hooks.js.map +1 -0
  529. package/dist/core/importar/formatos.d.ts +69 -0
  530. package/dist/core/importar/formatos.d.ts.map +1 -0
  531. package/dist/core/importar/formatos.js +235 -0
  532. package/dist/core/importar/formatos.js.map +1 -0
  533. package/dist/core/interactivo/deteccion.d.ts +44 -0
  534. package/dist/core/interactivo/deteccion.d.ts.map +1 -0
  535. package/dist/core/interactivo/deteccion.js +82 -0
  536. package/dist/core/interactivo/deteccion.js.map +1 -0
  537. package/dist/core/interactivo/sesion.d.ts +50 -0
  538. package/dist/core/interactivo/sesion.d.ts.map +1 -0
  539. package/dist/core/interactivo/sesion.js +156 -0
  540. package/dist/core/interactivo/sesion.js.map +1 -0
  541. package/dist/core/interactivo/tools.d.ts +21 -0
  542. package/dist/core/interactivo/tools.d.ts.map +1 -0
  543. package/dist/core/interactivo/tools.js +122 -0
  544. package/dist/core/interactivo/tools.js.map +1 -0
  545. package/dist/core/keybindings.d.ts.map +1 -1
  546. package/dist/core/keybindings.js +2 -1
  547. package/dist/core/keybindings.js.map +1 -1
  548. package/dist/core/lectura/mapa.d.ts +70 -0
  549. package/dist/core/lectura/mapa.d.ts.map +1 -0
  550. package/dist/core/lectura/mapa.js +177 -0
  551. package/dist/core/lectura/mapa.js.map +1 -0
  552. package/dist/core/lectura/pdf.d.ts +49 -0
  553. package/dist/core/lectura/pdf.d.ts.map +1 -0
  554. package/dist/core/lectura/pdf.js +337 -0
  555. package/dist/core/lectura/pdf.js.map +1 -0
  556. package/dist/core/limpieza/comprobadores.d.ts +28 -0
  557. package/dist/core/limpieza/comprobadores.d.ts.map +1 -0
  558. package/dist/core/limpieza/comprobadores.js +311 -0
  559. package/dist/core/limpieza/comprobadores.js.map +1 -0
  560. package/dist/core/limpieza/parseo.d.ts +19 -0
  561. package/dist/core/limpieza/parseo.d.ts.map +1 -0
  562. package/dist/core/limpieza/parseo.js +124 -0
  563. package/dist/core/limpieza/parseo.js.map +1 -0
  564. package/dist/core/limpieza/reparacion.d.ts +77 -0
  565. package/dist/core/limpieza/reparacion.d.ts.map +1 -0
  566. package/dist/core/limpieza/reparacion.js +254 -0
  567. package/dist/core/limpieza/reparacion.js.map +1 -0
  568. package/dist/core/limpieza/tipos.d.ts +56 -0
  569. package/dist/core/limpieza/tipos.d.ts.map +1 -0
  570. package/dist/core/limpieza/tipos.js +9 -0
  571. package/dist/core/limpieza/tipos.js.map +1 -0
  572. package/dist/core/lsp/cliente.d.ts +52 -0
  573. package/dist/core/lsp/cliente.d.ts.map +1 -0
  574. package/dist/core/lsp/cliente.js +232 -0
  575. package/dist/core/lsp/cliente.js.map +1 -0
  576. package/dist/core/lsp/descubrimiento.d.ts +62 -0
  577. package/dist/core/lsp/descubrimiento.d.ts.map +1 -0
  578. package/dist/core/lsp/descubrimiento.js +152 -0
  579. package/dist/core/lsp/descubrimiento.js.map +1 -0
  580. package/dist/core/lsp/ediciones.d.ts +59 -0
  581. package/dist/core/lsp/ediciones.d.ts.map +1 -0
  582. package/dist/core/lsp/ediciones.js +89 -0
  583. package/dist/core/lsp/ediciones.js.map +1 -0
  584. package/dist/core/lsp/extension.d.ts +28 -0
  585. package/dist/core/lsp/extension.d.ts.map +1 -0
  586. package/dist/core/lsp/extension.js +34 -0
  587. package/dist/core/lsp/extension.js.map +1 -0
  588. package/dist/core/lsp/tools.d.ts +45 -0
  589. package/dist/core/lsp/tools.d.ts.map +1 -0
  590. package/dist/core/lsp/tools.js +265 -0
  591. package/dist/core/lsp/tools.js.map +1 -0
  592. package/dist/core/mcp/client.d.ts +60 -0
  593. package/dist/core/mcp/client.d.ts.map +1 -0
  594. package/dist/core/mcp/client.js +139 -0
  595. package/dist/core/mcp/client.js.map +1 -0
  596. package/dist/core/mcp/manager.d.ts +86 -0
  597. package/dist/core/mcp/manager.d.ts.map +1 -0
  598. package/dist/core/mcp/manager.js +124 -0
  599. package/dist/core/mcp/manager.js.map +1 -0
  600. package/dist/core/mcp/tools.d.ts +15 -0
  601. package/dist/core/mcp/tools.d.ts.map +1 -0
  602. package/dist/core/mcp/tools.js +84 -0
  603. package/dist/core/mcp/tools.js.map +1 -0
  604. package/dist/core/memory-engine/audit-export.d.ts +56 -0
  605. package/dist/core/memory-engine/audit-export.d.ts.map +1 -0
  606. package/dist/core/memory-engine/audit-export.js +100 -0
  607. package/dist/core/memory-engine/audit-export.js.map +1 -0
  608. package/dist/core/memory-engine/audit-indice.d.ts +153 -0
  609. package/dist/core/memory-engine/audit-indice.d.ts.map +1 -0
  610. package/dist/core/memory-engine/audit-indice.js +271 -0
  611. package/dist/core/memory-engine/audit-indice.js.map +1 -0
  612. package/dist/core/memory-engine/audit.d.ts +18 -6
  613. package/dist/core/memory-engine/audit.d.ts.map +1 -1
  614. package/dist/core/memory-engine/audit.js +32 -50
  615. package/dist/core/memory-engine/audit.js.map +1 -1
  616. package/dist/core/memory-engine/engine.d.ts +21 -4
  617. package/dist/core/memory-engine/engine.d.ts.map +1 -1
  618. package/dist/core/memory-engine/engine.js +219 -55
  619. package/dist/core/memory-engine/engine.js.map +1 -1
  620. package/dist/core/memory-engine/inverted-index.d.ts.map +1 -1
  621. package/dist/core/memory-engine/inverted-index.js +67 -10
  622. package/dist/core/memory-engine/inverted-index.js.map +1 -1
  623. package/dist/core/memory-engine/keychain.d.ts.map +1 -1
  624. package/dist/core/memory-engine/keychain.js +1 -6
  625. package/dist/core/memory-engine/keychain.js.map +1 -1
  626. package/dist/core/memory-engine/observation-store.d.ts +0 -1
  627. package/dist/core/memory-engine/observation-store.d.ts.map +1 -1
  628. package/dist/core/memory-engine/observation-store.js +40 -12
  629. package/dist/core/memory-engine/observation-store.js.map +1 -1
  630. package/dist/core/memory-engine/refinements.d.ts +51 -0
  631. package/dist/core/memory-engine/refinements.d.ts.map +1 -0
  632. package/dist/core/memory-engine/refinements.js +99 -0
  633. package/dist/core/memory-engine/refinements.js.map +1 -0
  634. package/dist/core/memory-engine/scanner.d.ts.map +1 -1
  635. package/dist/core/memory-engine/scanner.js +25 -5
  636. package/dist/core/memory-engine/scanner.js.map +1 -1
  637. package/dist/core/memory-engine/security.d.ts.map +1 -1
  638. package/dist/core/memory-engine/security.js +131 -23
  639. package/dist/core/memory-engine/security.js.map +1 -1
  640. package/dist/core/memory-engine/session-indexer.d.ts.map +1 -1
  641. package/dist/core/memory-engine/session-indexer.js +8 -2
  642. package/dist/core/memory-engine/session-indexer.js.map +1 -1
  643. package/dist/core/memory-engine/tools.d.ts +2 -2
  644. package/dist/core/memory-engine/tools.d.ts.map +1 -1
  645. package/dist/core/memory-engine/tools.js +41 -8
  646. package/dist/core/memory-engine/tools.js.map +1 -1
  647. package/dist/core/memory-engine/types.d.ts +2 -0
  648. package/dist/core/memory-engine/types.d.ts.map +1 -1
  649. package/dist/core/memory-engine/types.js.map +1 -1
  650. package/dist/core/memory-engine/vault.d.ts.map +1 -1
  651. package/dist/core/memory-engine/vault.js +2 -2
  652. package/dist/core/memory-engine/vault.js.map +1 -1
  653. package/dist/core/model-config.d.ts.map +1 -1
  654. package/dist/core/model-config.js +2 -1
  655. package/dist/core/model-config.js.map +1 -1
  656. package/dist/core/model-resolver.d.ts +1 -0
  657. package/dist/core/model-resolver.d.ts.map +1 -1
  658. package/dist/core/model-resolver.js +19 -7
  659. package/dist/core/model-resolver.js.map +1 -1
  660. package/dist/core/models-store.d.ts.map +1 -1
  661. package/dist/core/models-store.js +2 -1
  662. package/dist/core/models-store.js.map +1 -1
  663. package/dist/core/muestreo-restringido.d.ts +49 -0
  664. package/dist/core/muestreo-restringido.d.ts.map +1 -0
  665. package/dist/core/muestreo-restringido.js +65 -0
  666. package/dist/core/muestreo-restringido.js.map +1 -0
  667. package/dist/core/orphan-process-journal.d.ts +48 -0
  668. package/dist/core/orphan-process-journal.d.ts.map +1 -0
  669. package/dist/core/orphan-process-journal.js +116 -0
  670. package/dist/core/orphan-process-journal.js.map +1 -0
  671. package/dist/core/package-manager.d.ts.map +1 -1
  672. package/dist/core/package-manager.js +11 -6
  673. package/dist/core/package-manager.js.map +1 -1
  674. package/dist/core/pi-manifest.d.ts.map +1 -1
  675. package/dist/core/pi-manifest.js +2 -1
  676. package/dist/core/pi-manifest.js.map +1 -1
  677. package/dist/core/privacidad/categorias-especiales.d.ts +186 -0
  678. package/dist/core/privacidad/categorias-especiales.d.ts.map +1 -0
  679. package/dist/core/privacidad/categorias-especiales.js +745 -0
  680. package/dist/core/privacidad/categorias-especiales.js.map +1 -0
  681. package/dist/core/privacidad/tapar.d.ts +48 -0
  682. package/dist/core/privacidad/tapar.d.ts.map +1 -0
  683. package/dist/core/privacidad/tapar.js +66 -0
  684. package/dist/core/privacidad/tapar.js.map +1 -0
  685. package/dist/core/prompt-cache/diagnostics.d.ts +33 -0
  686. package/dist/core/prompt-cache/diagnostics.d.ts.map +1 -0
  687. package/dist/core/prompt-cache/diagnostics.js +100 -0
  688. package/dist/core/prompt-cache/diagnostics.js.map +1 -0
  689. package/dist/core/prompt-cache/index.d.ts +33 -0
  690. package/dist/core/prompt-cache/index.d.ts.map +1 -0
  691. package/dist/core/prompt-cache/index.js +189 -0
  692. package/dist/core/prompt-cache/index.js.map +1 -0
  693. package/dist/core/prompt-cache/payload.d.ts +58 -0
  694. package/dist/core/prompt-cache/payload.d.ts.map +1 -0
  695. package/dist/core/prompt-cache/payload.js +122 -0
  696. package/dist/core/prompt-cache/payload.js.map +1 -0
  697. package/dist/core/prompt-cache/stabilize.d.ts +65 -0
  698. package/dist/core/prompt-cache/stabilize.d.ts.map +1 -0
  699. package/dist/core/prompt-cache/stabilize.js +137 -0
  700. package/dist/core/prompt-cache/stabilize.js.map +1 -0
  701. package/dist/core/prompt-cache/stats.d.ts +55 -0
  702. package/dist/core/prompt-cache/stats.d.ts.map +1 -0
  703. package/dist/core/prompt-cache/stats.js +158 -0
  704. package/dist/core/prompt-cache/stats.js.map +1 -0
  705. package/dist/core/prompt-eleccion.d.ts +38 -0
  706. package/dist/core/prompt-eleccion.d.ts.map +1 -0
  707. package/dist/core/prompt-eleccion.js +46 -0
  708. package/dist/core/prompt-eleccion.js.map +1 -0
  709. package/dist/core/prompt-optimizer.d.ts +53 -0
  710. package/dist/core/prompt-optimizer.d.ts.map +1 -0
  711. package/dist/core/prompt-optimizer.js +138 -0
  712. package/dist/core/prompt-optimizer.js.map +1 -0
  713. package/dist/core/prompts/montar.d.ts +75 -0
  714. package/dist/core/prompts/montar.d.ts.map +1 -0
  715. package/dist/core/prompts/montar.js +146 -0
  716. package/dist/core/prompts/montar.js.map +1 -0
  717. package/dist/core/prompts/plantilla.d.ts +54 -0
  718. package/dist/core/prompts/plantilla.d.ts.map +1 -0
  719. package/dist/core/prompts/plantilla.js +153 -0
  720. package/dist/core/prompts/plantilla.js.map +1 -0
  721. package/dist/core/prompts/sistema.md +134 -0
  722. package/dist/core/provider-attribution.d.ts +24 -2
  723. package/dist/core/provider-attribution.d.ts.map +1 -1
  724. package/dist/core/provider-attribution.js +24 -42
  725. package/dist/core/provider-attribution.js.map +1 -1
  726. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  727. package/dist/core/remote-catalog-provider.js +2 -1
  728. package/dist/core/remote-catalog-provider.js.map +1 -1
  729. package/dist/core/remoto/destino.d.ts +38 -0
  730. package/dist/core/remoto/destino.d.ts.map +1 -0
  731. package/dist/core/remoto/destino.js +105 -0
  732. package/dist/core/remoto/destino.js.map +1 -0
  733. package/dist/core/remoto/ejecutor.d.ts +59 -0
  734. package/dist/core/remoto/ejecutor.d.ts.map +1 -0
  735. package/dist/core/remoto/ejecutor.js +225 -0
  736. package/dist/core/remoto/ejecutor.js.map +1 -0
  737. package/dist/core/remoto/ficheros.d.ts +29 -0
  738. package/dist/core/remoto/ficheros.d.ts.map +1 -0
  739. package/dist/core/remoto/ficheros.js +90 -0
  740. package/dist/core/remoto/ficheros.js.map +1 -0
  741. package/dist/core/remoto/registro-extension.d.ts +15 -0
  742. package/dist/core/remoto/registro-extension.d.ts.map +1 -0
  743. package/dist/core/remoto/registro-extension.js +17 -0
  744. package/dist/core/remoto/registro-extension.js.map +1 -0
  745. package/dist/core/remoto/tools.d.ts +28 -0
  746. package/dist/core/remoto/tools.d.ts.map +1 -0
  747. package/dist/core/remoto/tools.js +31 -0
  748. package/dist/core/remoto/tools.js.map +1 -0
  749. package/dist/core/resource-loader.d.ts +58 -0
  750. package/dist/core/resource-loader.d.ts.map +1 -1
  751. package/dist/core/resource-loader.js +326 -8
  752. package/dist/core/resource-loader.js.map +1 -1
  753. package/dist/core/revision/hallazgo.d.ts +51 -0
  754. package/dist/core/revision/hallazgo.d.ts.map +1 -0
  755. package/dist/core/revision/hallazgo.js +73 -0
  756. package/dist/core/revision/hallazgo.js.map +1 -0
  757. package/dist/core/revision/revisor.d.ts +81 -0
  758. package/dist/core/revision/revisor.d.ts.map +1 -0
  759. package/dist/core/revision/revisor.js +132 -0
  760. package/dist/core/revision/revisor.js.map +1 -0
  761. package/dist/core/revision/sarif.d.ts +30 -0
  762. package/dist/core/revision/sarif.d.ts.map +1 -0
  763. package/dist/core/revision/sarif.js +83 -0
  764. package/dist/core/revision/sarif.js.map +1 -0
  765. package/dist/core/scheduler/scheduler.d.ts +87 -0
  766. package/dist/core/scheduler/scheduler.d.ts.map +1 -0
  767. package/dist/core/scheduler/scheduler.js +178 -0
  768. package/dist/core/scheduler/scheduler.js.map +1 -0
  769. package/dist/core/sdk.d.ts +8 -0
  770. package/dist/core/sdk.d.ts.map +1 -1
  771. package/dist/core/sdk.js +11 -1
  772. package/dist/core/sdk.js.map +1 -1
  773. package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts +49 -0
  774. package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts.map +1 -0
  775. package/dist/core/sesion/cerrar-llamadas-abiertas.js +77 -0
  776. package/dist/core/sesion/cerrar-llamadas-abiertas.js.map +1 -0
  777. package/dist/core/session-manager.d.ts.map +1 -1
  778. package/dist/core/session-manager.js +2 -1
  779. package/dist/core/session-manager.js.map +1 -1
  780. package/dist/core/settings-diagnostics.d.ts +9 -0
  781. package/dist/core/settings-diagnostics.d.ts.map +1 -0
  782. package/dist/core/settings-diagnostics.js +21 -0
  783. package/dist/core/settings-diagnostics.js.map +1 -0
  784. package/dist/core/settings-manager.d.ts +156 -0
  785. package/dist/core/settings-manager.d.ts.map +1 -1
  786. package/dist/core/settings-manager.js +255 -10
  787. package/dist/core/settings-manager.js.map +1 -1
  788. package/dist/core/skills.d.ts.map +1 -1
  789. package/dist/core/skills.js +51 -33
  790. package/dist/core/skills.js.map +1 -1
  791. package/dist/core/slash-commands.d.ts.map +1 -1
  792. package/dist/core/slash-commands.js +2 -1
  793. package/dist/core/slash-commands.js.map +1 -1
  794. package/dist/core/system-prompt.d.ts +17 -0
  795. package/dist/core/system-prompt.d.ts.map +1 -1
  796. package/dist/core/system-prompt.js +13 -5
  797. package/dist/core/system-prompt.js.map +1 -1
  798. package/dist/core/telemetria/otlp.d.ts +122 -0
  799. package/dist/core/telemetria/otlp.d.ts.map +1 -0
  800. package/dist/core/telemetria/otlp.js +373 -0
  801. package/dist/core/telemetria/otlp.js.map +1 -0
  802. package/dist/core/tools/coercion-argumentos.d.ts +48 -0
  803. package/dist/core/tools/coercion-argumentos.d.ts.map +1 -0
  804. package/dist/core/tools/coercion-argumentos.js +99 -0
  805. package/dist/core/tools/coercion-argumentos.js.map +1 -0
  806. package/dist/core/tools/edit-diff.d.ts +0 -12
  807. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  808. package/dist/core/tools/edit-diff.js +234 -12
  809. package/dist/core/tools/edit-diff.js.map +1 -1
  810. package/dist/core/tools/edit.d.ts.map +1 -1
  811. package/dist/core/tools/edit.js +28 -5
  812. package/dist/core/tools/edit.js.map +1 -1
  813. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
  814. package/dist/core/tools/file-mutation-queue.js +5 -0
  815. package/dist/core/tools/file-mutation-queue.js.map +1 -1
  816. package/dist/core/tools/index.d.ts.map +1 -1
  817. package/dist/core/tools/index.js +2 -2
  818. package/dist/core/tools/index.js.map +1 -1
  819. package/dist/core/tools/json-tolerante.d.ts +30 -0
  820. package/dist/core/tools/json-tolerante.d.ts.map +1 -0
  821. package/dist/core/tools/json-tolerante.js +70 -0
  822. package/dist/core/tools/json-tolerante.js.map +1 -0
  823. package/dist/core/tools/project-memory-tool.d.ts.map +1 -1
  824. package/dist/core/tools/project-memory-tool.js +4 -1
  825. package/dist/core/tools/project-memory-tool.js.map +1 -1
  826. package/dist/core/tools/read.d.ts.map +1 -1
  827. package/dist/core/tools/read.js +17 -0
  828. package/dist/core/tools/read.js.map +1 -1
  829. package/dist/core/tools/tool-definition-wrapper.d.ts +14 -1
  830. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  831. package/dist/core/tools/tool-definition-wrapper.js +17 -1
  832. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  833. package/dist/core/trust-manager.d.ts.map +1 -1
  834. package/dist/core/trust-manager.js +2 -1
  835. package/dist/core/trust-manager.js.map +1 -1
  836. package/dist/core/turno-vacio/detectar.d.ts +38 -0
  837. package/dist/core/turno-vacio/detectar.d.ts.map +1 -0
  838. package/dist/core/turno-vacio/detectar.js +66 -0
  839. package/dist/core/turno-vacio/detectar.js.map +1 -0
  840. package/dist/core/undo/journal.d.ts +57 -0
  841. package/dist/core/undo/journal.d.ts.map +1 -0
  842. package/dist/core/undo/journal.js +178 -0
  843. package/dist/core/undo/journal.js.map +1 -0
  844. package/dist/core/urls-internas/auditoria.d.ts +10 -0
  845. package/dist/core/urls-internas/auditoria.d.ts.map +1 -0
  846. package/dist/core/urls-internas/auditoria.js +42 -0
  847. package/dist/core/urls-internas/auditoria.js.map +1 -0
  848. package/dist/core/urls-internas/boveda.d.ts +13 -0
  849. package/dist/core/urls-internas/boveda.d.ts.map +1 -0
  850. package/dist/core/urls-internas/boveda.js +40 -0
  851. package/dist/core/urls-internas/boveda.js.map +1 -0
  852. package/dist/core/urls-internas/lector.d.ts +30 -0
  853. package/dist/core/urls-internas/lector.d.ts.map +1 -0
  854. package/dist/core/urls-internas/lector.js +56 -0
  855. package/dist/core/urls-internas/lector.js.map +1 -0
  856. package/dist/core/urls-internas/memoria.d.ts +11 -0
  857. package/dist/core/urls-internas/memoria.d.ts.map +1 -0
  858. package/dist/core/urls-internas/memoria.js +25 -0
  859. package/dist/core/urls-internas/memoria.js.map +1 -0
  860. package/dist/core/urls-internas/parse.d.ts +28 -0
  861. package/dist/core/urls-internas/parse.d.ts.map +1 -0
  862. package/dist/core/urls-internas/parse.js +32 -0
  863. package/dist/core/urls-internas/parse.js.map +1 -0
  864. package/dist/core/urls-internas/reglas.d.ts +10 -0
  865. package/dist/core/urls-internas/reglas.d.ts.map +1 -0
  866. package/dist/core/urls-internas/reglas.js +31 -0
  867. package/dist/core/urls-internas/reglas.js.map +1 -0
  868. package/dist/core/usage/aggregate.d.ts +68 -0
  869. package/dist/core/usage/aggregate.d.ts.map +1 -0
  870. package/dist/core/usage/aggregate.js +93 -0
  871. package/dist/core/usage/aggregate.js.map +1 -0
  872. package/dist/core/usage/cuota/anthropic.d.ts +10 -0
  873. package/dist/core/usage/cuota/anthropic.d.ts.map +1 -0
  874. package/dist/core/usage/cuota/anthropic.js +63 -0
  875. package/dist/core/usage/cuota/anthropic.js.map +1 -0
  876. package/dist/core/usage/cuota/cache.d.ts +20 -0
  877. package/dist/core/usage/cuota/cache.d.ts.map +1 -0
  878. package/dist/core/usage/cuota/cache.js +36 -0
  879. package/dist/core/usage/cuota/cache.js.map +1 -0
  880. package/dist/core/usage/cuota/github-copilot.d.ts +9 -0
  881. package/dist/core/usage/cuota/github-copilot.d.ts.map +1 -0
  882. package/dist/core/usage/cuota/github-copilot.js +67 -0
  883. package/dist/core/usage/cuota/github-copilot.js.map +1 -0
  884. package/dist/core/usage/cuota/google-gemini.d.ts +9 -0
  885. package/dist/core/usage/cuota/google-gemini.d.ts.map +1 -0
  886. package/dist/core/usage/cuota/google-gemini.js +72 -0
  887. package/dist/core/usage/cuota/google-gemini.js.map +1 -0
  888. package/dist/core/usage/cuota/index.d.ts +25 -0
  889. package/dist/core/usage/cuota/index.d.ts.map +1 -0
  890. package/dist/core/usage/cuota/index.js +50 -0
  891. package/dist/core/usage/cuota/index.js.map +1 -0
  892. package/dist/core/usage/cuota/openai-codex.d.ts +9 -0
  893. package/dist/core/usage/cuota/openai-codex.d.ts.map +1 -0
  894. package/dist/core/usage/cuota/openai-codex.js +59 -0
  895. package/dist/core/usage/cuota/openai-codex.js.map +1 -0
  896. package/dist/core/usage/cuota/openrouter.d.ts +10 -0
  897. package/dist/core/usage/cuota/openrouter.d.ts.map +1 -0
  898. package/dist/core/usage/cuota/openrouter.js +47 -0
  899. package/dist/core/usage/cuota/openrouter.js.map +1 -0
  900. package/dist/core/usage/cuota/tipos.d.ts +50 -0
  901. package/dist/core/usage/cuota/tipos.d.ts.map +1 -0
  902. package/dist/core/usage/cuota/tipos.js +25 -0
  903. package/dist/core/usage/cuota/tipos.js.map +1 -0
  904. package/dist/core/web/busqueda-nativa.d.ts +82 -0
  905. package/dist/core/web/busqueda-nativa.d.ts.map +1 -0
  906. package/dist/core/web/busqueda-nativa.js +163 -0
  907. package/dist/core/web/busqueda-nativa.js.map +1 -0
  908. package/dist/core/web/destino.d.ts +58 -0
  909. package/dist/core/web/destino.d.ts.map +1 -0
  910. package/dist/core/web/destino.js +127 -0
  911. package/dist/core/web/destino.js.map +1 -0
  912. package/dist/core/web/proveedores/brave.d.ts +6 -0
  913. package/dist/core/web/proveedores/brave.d.ts.map +1 -0
  914. package/dist/core/web/proveedores/brave.js +20 -0
  915. package/dist/core/web/proveedores/brave.js.map +1 -0
  916. package/dist/core/web/proveedores/claves.d.ts +19 -0
  917. package/dist/core/web/proveedores/claves.d.ts.map +1 -0
  918. package/dist/core/web/proveedores/claves.js +36 -0
  919. package/dist/core/web/proveedores/claves.js.map +1 -0
  920. package/dist/core/web/proveedores/duckduckgo.d.ts +3 -0
  921. package/dist/core/web/proveedores/duckduckgo.d.ts.map +1 -0
  922. package/dist/core/web/proveedores/duckduckgo.js +109 -0
  923. package/dist/core/web/proveedores/duckduckgo.js.map +1 -0
  924. package/dist/core/web/proveedores/ecosia.d.ts +3 -0
  925. package/dist/core/web/proveedores/ecosia.d.ts.map +1 -0
  926. package/dist/core/web/proveedores/ecosia.js +72 -0
  927. package/dist/core/web/proveedores/ecosia.js.map +1 -0
  928. package/dist/core/web/proveedores/exa.d.ts +6 -0
  929. package/dist/core/web/proveedores/exa.d.ts.map +1 -0
  930. package/dist/core/web/proveedores/exa.js +24 -0
  931. package/dist/core/web/proveedores/exa.js.map +1 -0
  932. package/dist/core/web/proveedores/mojeek.d.ts +3 -0
  933. package/dist/core/web/proveedores/mojeek.d.ts.map +1 -0
  934. package/dist/core/web/proveedores/mojeek.js +65 -0
  935. package/dist/core/web/proveedores/mojeek.js.map +1 -0
  936. package/dist/core/web/proveedores/navegador.d.ts +10 -0
  937. package/dist/core/web/proveedores/navegador.d.ts.map +1 -0
  938. package/dist/core/web/proveedores/navegador.js +13 -0
  939. package/dist/core/web/proveedores/navegador.js.map +1 -0
  940. package/dist/core/web/proveedores/registro.d.ts +43 -0
  941. package/dist/core/web/proveedores/registro.d.ts.map +1 -0
  942. package/dist/core/web/proveedores/registro.js +49 -0
  943. package/dist/core/web/proveedores/registro.js.map +1 -0
  944. package/dist/core/web/proveedores/searxng.d.ts +9 -0
  945. package/dist/core/web/proveedores/searxng.d.ts.map +1 -0
  946. package/dist/core/web/proveedores/searxng.js +17 -0
  947. package/dist/core/web/proveedores/searxng.js.map +1 -0
  948. package/dist/core/web/proveedores/serper.d.ts +9 -0
  949. package/dist/core/web/proveedores/serper.d.ts.map +1 -0
  950. package/dist/core/web/proveedores/serper.js +19 -0
  951. package/dist/core/web/proveedores/serper.js.map +1 -0
  952. package/dist/core/web/proveedores/tavily.d.ts +6 -0
  953. package/dist/core/web/proveedores/tavily.d.ts.map +1 -0
  954. package/dist/core/web/proveedores/tavily.js +19 -0
  955. package/dist/core/web/proveedores/tavily.js.map +1 -0
  956. package/dist/core/web/proveedores/tipos.d.ts +36 -0
  957. package/dist/core/web/proveedores/tipos.d.ts.map +1 -0
  958. package/dist/core/web/proveedores/tipos.js +10 -0
  959. package/dist/core/web/proveedores/tipos.js.map +1 -0
  960. package/dist/core/web/registro-red.d.ts +43 -0
  961. package/dist/core/web/registro-red.d.ts.map +1 -0
  962. package/dist/core/web/registro-red.js +86 -0
  963. package/dist/core/web/registro-red.js.map +1 -0
  964. package/dist/core/web/scrapers/cisa-kev.d.ts +10 -0
  965. package/dist/core/web/scrapers/cisa-kev.d.ts.map +1 -0
  966. package/dist/core/web/scrapers/cisa-kev.js +38 -0
  967. package/dist/core/web/scrapers/cisa-kev.js.map +1 -0
  968. package/dist/core/web/scrapers/crates-io.d.ts +11 -0
  969. package/dist/core/web/scrapers/crates-io.d.ts.map +1 -0
  970. package/dist/core/web/scrapers/crates-io.js +29 -0
  971. package/dist/core/web/scrapers/crates-io.js.map +1 -0
  972. package/dist/core/web/scrapers/docs-rs.d.ts +10 -0
  973. package/dist/core/web/scrapers/docs-rs.d.ts.map +1 -0
  974. package/dist/core/web/scrapers/docs-rs.js +35 -0
  975. package/dist/core/web/scrapers/docs-rs.js.map +1 -0
  976. package/dist/core/web/scrapers/github.d.ts +3 -0
  977. package/dist/core/web/scrapers/github.d.ts.map +1 -0
  978. package/dist/core/web/scrapers/github.js +72 -0
  979. package/dist/core/web/scrapers/github.js.map +1 -0
  980. package/dist/core/web/scrapers/go-pkg.d.ts +7 -0
  981. package/dist/core/web/scrapers/go-pkg.d.ts.map +1 -0
  982. package/dist/core/web/scrapers/go-pkg.js +30 -0
  983. package/dist/core/web/scrapers/go-pkg.js.map +1 -0
  984. package/dist/core/web/scrapers/hex.d.ts +6 -0
  985. package/dist/core/web/scrapers/hex.d.ts.map +1 -0
  986. package/dist/core/web/scrapers/hex.js +27 -0
  987. package/dist/core/web/scrapers/hex.js.map +1 -0
  988. package/dist/core/web/scrapers/maven.d.ts +8 -0
  989. package/dist/core/web/scrapers/maven.d.ts.map +1 -0
  990. package/dist/core/web/scrapers/maven.js +41 -0
  991. package/dist/core/web/scrapers/maven.js.map +1 -0
  992. package/dist/core/web/scrapers/mdn.d.ts +6 -0
  993. package/dist/core/web/scrapers/mdn.d.ts.map +1 -0
  994. package/dist/core/web/scrapers/mdn.js +28 -0
  995. package/dist/core/web/scrapers/mdn.js.map +1 -0
  996. package/dist/core/web/scrapers/npm.d.ts +11 -0
  997. package/dist/core/web/scrapers/npm.d.ts.map +1 -0
  998. package/dist/core/web/scrapers/npm.js +57 -0
  999. package/dist/core/web/scrapers/npm.js.map +1 -0
  1000. package/dist/core/web/scrapers/nuget.d.ts +8 -0
  1001. package/dist/core/web/scrapers/nuget.d.ts.map +1 -0
  1002. package/dist/core/web/scrapers/nuget.js +22 -0
  1003. package/dist/core/web/scrapers/nuget.js.map +1 -0
  1004. package/dist/core/web/scrapers/nvd.d.ts +7 -0
  1005. package/dist/core/web/scrapers/nvd.d.ts.map +1 -0
  1006. package/dist/core/web/scrapers/nvd.js +37 -0
  1007. package/dist/core/web/scrapers/nvd.js.map +1 -0
  1008. package/dist/core/web/scrapers/pypi.d.ts +6 -0
  1009. package/dist/core/web/scrapers/pypi.d.ts.map +1 -0
  1010. package/dist/core/web/scrapers/pypi.js +31 -0
  1011. package/dist/core/web/scrapers/pypi.js.map +1 -0
  1012. package/dist/core/web/scrapers/registro.d.ts +13 -0
  1013. package/dist/core/web/scrapers/registro.d.ts.map +1 -0
  1014. package/dist/core/web/scrapers/registro.js +65 -0
  1015. package/dist/core/web/scrapers/registro.js.map +1 -0
  1016. package/dist/core/web/scrapers/rubygems.d.ts +6 -0
  1017. package/dist/core/web/scrapers/rubygems.d.ts.map +1 -0
  1018. package/dist/core/web/scrapers/rubygems.js +23 -0
  1019. package/dist/core/web/scrapers/rubygems.js.map +1 -0
  1020. package/dist/core/web/scrapers/stackoverflow.d.ts +3 -0
  1021. package/dist/core/web/scrapers/stackoverflow.d.ts.map +1 -0
  1022. package/dist/core/web/scrapers/stackoverflow.js +46 -0
  1023. package/dist/core/web/scrapers/stackoverflow.js.map +1 -0
  1024. package/dist/core/web/scrapers/tipos.d.ts +42 -0
  1025. package/dist/core/web/scrapers/tipos.d.ts.map +1 -0
  1026. package/dist/core/web/scrapers/tipos.js +23 -0
  1027. package/dist/core/web/scrapers/tipos.js.map +1 -0
  1028. package/dist/core/web/texto.d.ts +10 -0
  1029. package/dist/core/web/texto.d.ts.map +1 -0
  1030. package/dist/core/web/texto.js +26 -0
  1031. package/dist/core/web/texto.js.map +1 -0
  1032. package/dist/core/web/tools.d.ts +91 -0
  1033. package/dist/core/web/tools.d.ts.map +1 -0
  1034. package/dist/core/web/tools.js +304 -0
  1035. package/dist/core/web/tools.js.map +1 -0
  1036. package/dist/core/wiki/almacen.d.ts +33 -0
  1037. package/dist/core/wiki/almacen.d.ts.map +1 -0
  1038. package/dist/core/wiki/almacen.js +93 -0
  1039. package/dist/core/wiki/almacen.js.map +1 -0
  1040. package/dist/core/wiki/citas.d.ts +111 -0
  1041. package/dist/core/wiki/citas.d.ts.map +1 -0
  1042. package/dist/core/wiki/citas.js +146 -0
  1043. package/dist/core/wiki/citas.js.map +1 -0
  1044. package/dist/core/workflows/agent-runner.d.ts +88 -0
  1045. package/dist/core/workflows/agent-runner.d.ts.map +1 -0
  1046. package/dist/core/workflows/agent-runner.js +312 -0
  1047. package/dist/core/workflows/agent-runner.js.map +1 -0
  1048. package/dist/core/workflows/builtins.d.ts +41 -0
  1049. package/dist/core/workflows/builtins.d.ts.map +1 -0
  1050. package/dist/core/workflows/builtins.js +283 -0
  1051. package/dist/core/workflows/builtins.js.map +1 -0
  1052. package/dist/core/workflows/contrato/esquema.d.ts +32 -0
  1053. package/dist/core/workflows/contrato/esquema.d.ts.map +1 -0
  1054. package/dist/core/workflows/contrato/esquema.js +25 -0
  1055. package/dist/core/workflows/contrato/esquema.js.map +1 -0
  1056. package/dist/core/workflows/contrato/reparar-argumentos.d.ts +69 -0
  1057. package/dist/core/workflows/contrato/reparar-argumentos.d.ts.map +1 -0
  1058. package/dist/core/workflows/contrato/reparar-argumentos.js +117 -0
  1059. package/dist/core/workflows/contrato/reparar-argumentos.js.map +1 -0
  1060. package/dist/core/workflows/contrato/validador.d.ts +30 -0
  1061. package/dist/core/workflows/contrato/validador.d.ts.map +1 -0
  1062. package/dist/core/workflows/contrato/validador.js +56 -0
  1063. package/dist/core/workflows/contrato/validador.js.map +1 -0
  1064. package/dist/core/workflows/contrato/yield.d.ts +65 -0
  1065. package/dist/core/workflows/contrato/yield.d.ts.map +1 -0
  1066. package/dist/core/workflows/contrato/yield.js +80 -0
  1067. package/dist/core/workflows/contrato/yield.js.map +1 -0
  1068. package/dist/core/workflows/goal-engine/engine.d.ts +151 -0
  1069. package/dist/core/workflows/goal-engine/engine.d.ts.map +1 -0
  1070. package/dist/core/workflows/goal-engine/engine.js +503 -0
  1071. package/dist/core/workflows/goal-engine/engine.js.map +1 -0
  1072. package/dist/core/workflows/goal-engine/errors.d.ts +7 -0
  1073. package/dist/core/workflows/goal-engine/errors.d.ts.map +1 -0
  1074. package/dist/core/workflows/goal-engine/errors.js +9 -0
  1075. package/dist/core/workflows/goal-engine/errors.js.map +1 -0
  1076. package/dist/core/workflows/goal-engine/index.d.ts +13 -0
  1077. package/dist/core/workflows/goal-engine/index.d.ts.map +1 -0
  1078. package/dist/core/workflows/goal-engine/index.js +8 -0
  1079. package/dist/core/workflows/goal-engine/index.js.map +1 -0
  1080. package/dist/core/workflows/goal-engine/persistence.d.ts +31 -0
  1081. package/dist/core/workflows/goal-engine/persistence.d.ts.map +1 -0
  1082. package/dist/core/workflows/goal-engine/persistence.js +145 -0
  1083. package/dist/core/workflows/goal-engine/persistence.js.map +1 -0
  1084. package/dist/core/workflows/goal-engine/prompts.d.ts +37 -0
  1085. package/dist/core/workflows/goal-engine/prompts.d.ts.map +1 -0
  1086. package/dist/core/workflows/goal-engine/prompts.js +131 -0
  1087. package/dist/core/workflows/goal-engine/prompts.js.map +1 -0
  1088. package/dist/core/workflows/goal-engine/state.d.ts +41 -0
  1089. package/dist/core/workflows/goal-engine/state.d.ts.map +1 -0
  1090. package/dist/core/workflows/goal-engine/state.js +397 -0
  1091. package/dist/core/workflows/goal-engine/state.js.map +1 -0
  1092. package/dist/core/workflows/goal-engine/tools.d.ts +31 -0
  1093. package/dist/core/workflows/goal-engine/tools.d.ts.map +1 -0
  1094. package/dist/core/workflows/goal-engine/tools.js +211 -0
  1095. package/dist/core/workflows/goal-engine/tools.js.map +1 -0
  1096. package/dist/core/workflows/goal-engine/types.d.ts +286 -0
  1097. package/dist/core/workflows/goal-engine/types.d.ts.map +1 -0
  1098. package/dist/core/workflows/goal-engine/types.js +17 -0
  1099. package/dist/core/workflows/goal-engine/types.js.map +1 -0
  1100. package/dist/core/workflows/goal-engine/worktree-fingerprint.d.ts +23 -0
  1101. package/dist/core/workflows/goal-engine/worktree-fingerprint.d.ts.map +1 -0
  1102. package/dist/core/workflows/goal-engine/worktree-fingerprint.js +72 -0
  1103. package/dist/core/workflows/goal-engine/worktree-fingerprint.js.map +1 -0
  1104. package/dist/core/workflows/graph-sync.d.ts +67 -0
  1105. package/dist/core/workflows/graph-sync.d.ts.map +1 -0
  1106. package/dist/core/workflows/graph-sync.js +188 -0
  1107. package/dist/core/workflows/graph-sync.js.map +1 -0
  1108. package/dist/core/workflows/graph.d.ts +143 -0
  1109. package/dist/core/workflows/graph.d.ts.map +1 -0
  1110. package/dist/core/workflows/graph.js +319 -0
  1111. package/dist/core/workflows/graph.js.map +1 -0
  1112. package/dist/core/workflows/index.d.ts +26 -0
  1113. package/dist/core/workflows/index.d.ts.map +1 -0
  1114. package/dist/core/workflows/index.js +18 -0
  1115. package/dist/core/workflows/index.js.map +1 -0
  1116. package/dist/core/workflows/journal.d.ts +68 -0
  1117. package/dist/core/workflows/journal.d.ts.map +1 -0
  1118. package/dist/core/workflows/journal.js +83 -0
  1119. package/dist/core/workflows/journal.js.map +1 -0
  1120. package/dist/core/workflows/manager.d.ts +122 -0
  1121. package/dist/core/workflows/manager.d.ts.map +1 -0
  1122. package/dist/core/workflows/manager.js +351 -0
  1123. package/dist/core/workflows/manager.js.map +1 -0
  1124. package/dist/core/workflows/resolve-script.d.ts +35 -0
  1125. package/dist/core/workflows/resolve-script.d.ts.map +1 -0
  1126. package/dist/core/workflows/resolve-script.js +66 -0
  1127. package/dist/core/workflows/resolve-script.js.map +1 -0
  1128. package/dist/core/workflows/runtime.d.ts +62 -0
  1129. package/dist/core/workflows/runtime.d.ts.map +1 -0
  1130. package/dist/core/workflows/runtime.js +380 -0
  1131. package/dist/core/workflows/runtime.js.map +1 -0
  1132. package/dist/core/workflows/save-as-skill.d.ts +27 -0
  1133. package/dist/core/workflows/save-as-skill.d.ts.map +1 -0
  1134. package/dist/core/workflows/save-as-skill.js +54 -0
  1135. package/dist/core/workflows/save-as-skill.js.map +1 -0
  1136. package/dist/core/workflows/shared-store.d.ts +31 -0
  1137. package/dist/core/workflows/shared-store.d.ts.map +1 -0
  1138. package/dist/core/workflows/shared-store.js +80 -0
  1139. package/dist/core/workflows/shared-store.js.map +1 -0
  1140. package/dist/core/workflows/subagent-host.d.ts +50 -0
  1141. package/dist/core/workflows/subagent-host.d.ts.map +1 -0
  1142. package/dist/core/workflows/subagent-host.js +225 -0
  1143. package/dist/core/workflows/subagent-host.js.map +1 -0
  1144. package/dist/core/workflows/tool-workflow.d.ts +22 -0
  1145. package/dist/core/workflows/tool-workflow.d.ts.map +1 -0
  1146. package/dist/core/workflows/tool-workflow.js +120 -0
  1147. package/dist/core/workflows/tool-workflow.js.map +1 -0
  1148. package/dist/core/workflows/types.d.ts +191 -0
  1149. package/dist/core/workflows/types.d.ts.map +1 -0
  1150. package/dist/core/workflows/types.js +26 -0
  1151. package/dist/core/workflows/types.js.map +1 -0
  1152. package/dist/core/workflows/worktree.d.ts +42 -0
  1153. package/dist/core/workflows/worktree.d.ts.map +1 -0
  1154. package/dist/core/workflows/worktree.js +107 -0
  1155. package/dist/core/workflows/worktree.js.map +1 -0
  1156. package/dist/extensions/llama/index.d.ts.map +1 -1
  1157. package/dist/extensions/llama/index.js +2 -0
  1158. package/dist/extensions/llama/index.js.map +1 -1
  1159. package/dist/extensions/llama/provider.d.ts.map +1 -1
  1160. package/dist/extensions/llama/provider.js +6 -2
  1161. package/dist/extensions/llama/provider.js.map +1 -1
  1162. package/dist/extensions/remoto/index.d.ts +22 -0
  1163. package/dist/extensions/remoto/index.d.ts.map +1 -0
  1164. package/dist/extensions/remoto/index.js +54 -0
  1165. package/dist/extensions/remoto/index.js.map +1 -0
  1166. package/dist/index.d.ts +1 -13
  1167. package/dist/index.d.ts.map +1 -1
  1168. package/dist/index.js +7 -13
  1169. package/dist/index.js.map +1 -1
  1170. package/dist/main.d.ts +4 -0
  1171. package/dist/main.d.ts.map +1 -1
  1172. package/dist/main.js +26 -15
  1173. package/dist/main.js.map +1 -1
  1174. package/dist/migrations.d.ts.map +1 -1
  1175. package/dist/migrations.js +4 -3
  1176. package/dist/migrations.js.map +1 -1
  1177. package/dist/modes/acp/acp-mode.d.ts +42 -0
  1178. package/dist/modes/acp/acp-mode.d.ts.map +1 -0
  1179. package/dist/modes/acp/acp-mode.js +190 -0
  1180. package/dist/modes/acp/acp-mode.js.map +1 -0
  1181. package/dist/modes/acp/events.d.ts +74 -0
  1182. package/dist/modes/acp/events.d.ts.map +1 -0
  1183. package/dist/modes/acp/events.js +116 -0
  1184. package/dist/modes/acp/events.js.map +1 -0
  1185. package/dist/modes/interactive/components/home-screen.d.ts.map +1 -1
  1186. package/dist/modes/interactive/components/home-screen.js +2 -2
  1187. package/dist/modes/interactive/components/home-screen.js.map +1 -1
  1188. package/dist/modes/interactive/components/model-selector.d.ts +9 -3
  1189. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  1190. package/dist/modes/interactive/components/model-selector.js +56 -12
  1191. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  1192. package/dist/modes/interactive/components/prompt-optimization.d.ts +16 -0
  1193. package/dist/modes/interactive/components/prompt-optimization.d.ts.map +1 -0
  1194. package/dist/modes/interactive/components/prompt-optimization.js +46 -0
  1195. package/dist/modes/interactive/components/prompt-optimization.js.map +1 -0
  1196. package/dist/modes/interactive/components/settings-selector.d.ts +19 -2
  1197. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  1198. package/dist/modes/interactive/components/settings-selector.js +180 -56
  1199. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  1200. package/dist/modes/interactive/components/settings-submenu.d.ts +72 -0
  1201. package/dist/modes/interactive/components/settings-submenu.d.ts.map +1 -0
  1202. package/dist/modes/interactive/components/settings-submenu.js +165 -0
  1203. package/dist/modes/interactive/components/settings-submenu.js.map +1 -0
  1204. package/dist/modes/interactive/components/thinking-selector.d.ts +15 -3
  1205. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  1206. package/dist/modes/interactive/components/thinking-selector.js +74 -17
  1207. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  1208. package/dist/modes/interactive/external-editor.d.ts.map +1 -1
  1209. package/dist/modes/interactive/external-editor.js +2 -1
  1210. package/dist/modes/interactive/external-editor.js.map +1 -1
  1211. package/dist/modes/interactive/interactive-mode.d.ts +21 -1
  1212. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  1213. package/dist/modes/interactive/interactive-mode.js +709 -75
  1214. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  1215. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  1216. package/dist/modes/interactive/theme/theme.js +4 -3
  1217. package/dist/modes/interactive/theme/theme.js.map +1 -1
  1218. package/dist/modes/json-event.d.ts +16 -13
  1219. package/dist/modes/json-event.d.ts.map +1 -1
  1220. package/dist/modes/json-event.js +20 -6
  1221. package/dist/modes/json-event.js.map +1 -1
  1222. package/dist/modes/print-mode.d.ts.map +1 -1
  1223. package/dist/modes/print-mode.js +11 -0
  1224. package/dist/modes/print-mode.js.map +1 -1
  1225. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  1226. package/dist/modes/rpc/rpc-mode.js +173 -0
  1227. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  1228. package/dist/modes/rpc/rpc-types.d.ts +29 -0
  1229. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  1230. package/dist/modes/rpc/rpc-types.js.map +1 -1
  1231. package/dist/package-manager-cli.d.ts.map +1 -1
  1232. package/dist/package-manager-cli.js +27 -5
  1233. package/dist/package-manager-cli.js.map +1 -1
  1234. package/dist/server/attach.d.ts +56 -0
  1235. package/dist/server/attach.d.ts.map +1 -0
  1236. package/dist/server/attach.js +130 -0
  1237. package/dist/server/attach.js.map +1 -0
  1238. package/dist/server/extension-ops.d.ts +40 -0
  1239. package/dist/server/extension-ops.d.ts.map +1 -0
  1240. package/dist/server/extension-ops.js +146 -0
  1241. package/dist/server/extension-ops.js.map +1 -0
  1242. package/dist/server/pi-server-service.d.ts +85 -0
  1243. package/dist/server/pi-server-service.d.ts.map +1 -0
  1244. package/dist/server/pi-server-service.js +213 -0
  1245. package/dist/server/pi-server-service.js.map +1 -0
  1246. package/dist/server/scheduler-tick.d.ts +32 -0
  1247. package/dist/server/scheduler-tick.d.ts.map +1 -0
  1248. package/dist/server/scheduler-tick.js +47 -0
  1249. package/dist/server/scheduler-tick.js.map +1 -0
  1250. package/dist/server/serve.d.ts +25 -0
  1251. package/dist/server/serve.d.ts.map +1 -0
  1252. package/dist/server/serve.js +83 -0
  1253. package/dist/server/serve.js.map +1 -0
  1254. package/dist/server/transcript.d.ts +38 -0
  1255. package/dist/server/transcript.d.ts.map +1 -0
  1256. package/dist/server/transcript.js +176 -0
  1257. package/dist/server/transcript.js.map +1 -0
  1258. package/dist/skills/ada-engine/SKILL.md +153 -0
  1259. package/dist/skills/skill-creator/SKILL.md +90 -0
  1260. package/dist/telegram/api.d.ts +75 -0
  1261. package/dist/telegram/api.d.ts.map +1 -0
  1262. package/dist/telegram/api.js +104 -0
  1263. package/dist/telegram/api.js.map +1 -0
  1264. package/dist/telegram/bridge.d.ts +85 -0
  1265. package/dist/telegram/bridge.d.ts.map +1 -0
  1266. package/dist/telegram/bridge.js +182 -0
  1267. package/dist/telegram/bridge.js.map +1 -0
  1268. package/dist/telegram/journal.d.ts +67 -0
  1269. package/dist/telegram/journal.d.ts.map +1 -0
  1270. package/dist/telegram/journal.js +119 -0
  1271. package/dist/telegram/journal.js.map +1 -0
  1272. package/dist/telegram/servidor.d.ts +15 -0
  1273. package/dist/telegram/servidor.d.ts.map +1 -0
  1274. package/dist/telegram/servidor.js +74 -0
  1275. package/dist/telegram/servidor.js.map +1 -0
  1276. package/dist/utils/frontmatter.d.ts.map +1 -1
  1277. package/dist/utils/frontmatter.js +2 -1
  1278. package/dist/utils/frontmatter.js.map +1 -1
  1279. package/dist/utils/management-http.d.ts +5 -3
  1280. package/dist/utils/management-http.d.ts.map +1 -1
  1281. package/dist/utils/management-http.js +14 -10
  1282. package/dist/utils/management-http.js.map +1 -1
  1283. package/dist/utils/shell.d.ts +11 -0
  1284. package/dist/utils/shell.d.ts.map +1 -1
  1285. package/dist/utils/shell.js +11 -0
  1286. package/dist/utils/shell.js.map +1 -1
  1287. package/dist/utils/text.d.ts +8 -0
  1288. package/dist/utils/text.d.ts.map +1 -0
  1289. package/dist/utils/text.js +9 -0
  1290. package/dist/utils/text.js.map +1 -0
  1291. package/dist/utils/version-check.d.ts.map +1 -1
  1292. package/dist/utils/version-check.js +29 -1
  1293. package/dist/utils/version-check.js.map +1 -1
  1294. package/docs/compaction.md +25 -10
  1295. package/docs/compliance.md +241 -0
  1296. package/docs/containerization.md +24 -24
  1297. package/docs/custom-provider.md +15 -12
  1298. package/docs/development.md +47 -10
  1299. package/docs/docs.json +14 -2
  1300. package/docs/environment-variables.md +20 -17
  1301. package/docs/extensions.md +62 -51
  1302. package/docs/index.md +15 -21
  1303. package/docs/json.md +10 -5
  1304. package/docs/keybindings.md +5 -5
  1305. package/docs/llama-cpp.md +9 -7
  1306. package/docs/models.md +18 -12
  1307. package/docs/packages.md +45 -45
  1308. package/docs/prompt-templates.md +5 -5
  1309. package/docs/providers.md +12 -12
  1310. package/docs/quickstart.md +39 -39
  1311. package/docs/rpc.md +21 -15
  1312. package/docs/sdk.md +38 -38
  1313. package/docs/security.md +26 -21
  1314. package/docs/session-format.md +7 -7
  1315. package/docs/sessions.md +14 -14
  1316. package/docs/settings.md +47 -22
  1317. package/docs/shell-aliases.md +2 -2
  1318. package/docs/skills.md +14 -13
  1319. package/docs/terminal-setup.md +14 -14
  1320. package/docs/termux.md +7 -7
  1321. package/docs/themes.md +11 -11
  1322. package/docs/tmux.md +4 -4
  1323. package/docs/tui.md +3 -3
  1324. package/docs/usage.md +54 -54
  1325. package/docs/windows.md +2 -2
  1326. package/examples/extensions/border-status-editor.ts +1 -1
  1327. package/examples/extensions/git-checkpoint.ts +2 -2
  1328. package/examples/extensions/notify.ts +3 -1
  1329. package/examples/extensions/subagent/README.md +1 -1
  1330. package/examples/extensions/subagent/index.ts +6 -1
  1331. package/examples/extensions/titlebar-spinner.ts +1 -1
  1332. package/examples/rpc-extension-ui.ts +1 -1
  1333. package/examples/sdk/06-extensions.ts +1 -1
  1334. package/examples/sdk/12-full-control.ts +9 -0
  1335. package/examples/sdk/README.md +1 -1
  1336. package/npm-shrinkwrap.json +35 -261
  1337. package/package.json +9 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/telegram/api.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Cliente de la Bot API de Telegram. Sin dependencias.\n *\n * Se habla HTTP directamente en vez de traer `grammy` o `node-telegram-bot-api`\n * por la misma razón que el resto del producto evita dependencias: es un CLI\n * que se instala en máquinas ajenas, y cada paquete añadido es superficie de\n * suministro que no controlamos. La Bot API es JSON sobre HTTPS; el envoltorio\n * cabe en un fichero.\n *\n * El long polling es la única forma sensata aquí: un webhook exigiría exponer un\n * puerto público desde el portátil de alguien.\n */\n\nconst BASE = \"https://api.telegram.org\";\n\nexport interface TelegramUser {\n\tid: number;\n\tis_bot?: boolean;\n\tusername?: string;\n\tfirst_name?: string;\n}\n\nexport interface TelegramMessage {\n\tmessage_id: number;\n\tfrom?: TelegramUser;\n\tchat: { id: number; type: string };\n\ttext?: string;\n\tdate: number;\n}\n\nexport interface TelegramUpdate {\n\tupdate_id: number;\n\tmessage?: TelegramMessage;\n\tcallback_query?: { id: string; from: TelegramUser; data?: string; message?: TelegramMessage };\n}\n\nexport interface ApiOptions {\n\ttoken: string;\n\tfetchImpl?: typeof fetch;\n\t/** Segundos que el servidor retiene la petición sin novedades. */\n\tlongPollSeconds?: number;\n}\n\nexport class TelegramApiError extends Error {\n\tmethod: string;\n\tstatus: number;\n\tdescription: string;\n\t/** Segundos que Telegram pide esperar (429). */\n\tretryAfter?: number;\n\n\tconstructor(method: string, status: number, description: string, retryAfter?: number) {\n\t\tsuper(`${method}: ${description} (HTTP ${status})`);\n\t\tthis.name = \"TelegramApiError\";\n\t\tthis.method = method;\n\t\tthis.status = status;\n\t\tthis.description = description;\n\t\tthis.retryAfter = retryAfter;\n\t}\n}\n\nexport class TelegramApi {\n\tprivate token: string;\n\tprivate fetchImpl: typeof fetch;\n\tprivate longPollSeconds: number;\n\n\tconstructor(options: ApiOptions) {\n\t\tthis.token = options.token;\n\t\tthis.fetchImpl = options.fetchImpl ?? fetch;\n\t\tthis.longPollSeconds = options.longPollSeconds ?? 25;\n\t}\n\n\t/**\n\t * Llama a un método de la Bot API.\n\t *\n\t * El token va en la URL porque así lo define Telegram; por eso `toString()`\n\t * de esta clase y cualquier traza deben evitar imprimir la URL entera.\n\t */\n\tprivate async call<T>(method: string, params: Record<string, unknown>, signal?: AbortSignal): Promise<T> {\n\t\tconst response = await this.fetchImpl(`${BASE}/bot${this.token}/${method}`, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"content-type\": \"application/json\" },\n\t\t\tbody: JSON.stringify(params),\n\t\t\tsignal,\n\t\t});\n\t\tconst body = (await response.json().catch(() => ({}))) as {\n\t\t\tok?: boolean;\n\t\t\tresult?: T;\n\t\t\tdescription?: string;\n\t\t\tparameters?: { retry_after?: number };\n\t\t};\n\t\tif (!response.ok || !body.ok) {\n\t\t\tthrow new TelegramApiError(\n\t\t\t\tmethod,\n\t\t\t\tresponse.status,\n\t\t\t\tbody.description ?? \"sin descripción\",\n\t\t\t\tbody.parameters?.retry_after,\n\t\t\t);\n\t\t}\n\t\treturn body.result as T;\n\t}\n\n\t/** Identidad del bot. Sirve para validar el token antes de hacer nada. */\n\tgetMe(signal?: AbortSignal): Promise<TelegramUser> {\n\t\treturn this.call<TelegramUser>(\"getMe\", {}, signal);\n\t}\n\n\t/**\n\t * Long poll. `offset` confirma como recibidas todas las actualizaciones\n\t * ANTERIORES — por eso quien llama solo debe avanzarlo tras persistir.\n\t */\n\tgetUpdates(offset: number, signal?: AbortSignal): Promise<TelegramUpdate[]> {\n\t\treturn this.call<TelegramUpdate[]>(\n\t\t\t\"getUpdates\",\n\t\t\t{ offset, timeout: this.longPollSeconds, allowed_updates: [\"message\", \"callback_query\"] },\n\t\t\tsignal,\n\t\t);\n\t}\n\n\tsendMessage(chatId: number, text: string, options: { replyTo?: number } = {}): Promise<TelegramMessage> {\n\t\treturn this.call<TelegramMessage>(\"sendMessage\", {\n\t\t\tchat_id: chatId,\n\t\t\ttext,\n\t\t\t// Sin parse_mode: el texto del agente puede contener Markdown roto o\n\t\t\t// caracteres que Telegram rechazaría, y un 400 por formato perdería el\n\t\t\t// mensaje entero. Texto plano siempre llega.\n\t\t\t...(options.replyTo ? { reply_to_message_id: options.replyTo } : {}),\n\t\t});\n\t}\n\n\teditMessage(chatId: number, messageId: number, text: string): Promise<unknown> {\n\t\treturn this.call(\"editMessageText\", { chat_id: chatId, message_id: messageId, text });\n\t}\n\n\t/** Indicador de \"escribiendo…\". Caduca solo a los ~5 s. */\n\tsendTyping(chatId: number): Promise<unknown> {\n\t\treturn this.call(\"sendChatAction\", { chat_id: chatId, action: \"typing\" }).catch(() => undefined);\n\t}\n}\n\n/** Trocea respetando saltos de línea; Telegram corta a 4096 caracteres. */\nexport function splitForTelegram(text: string, limit = 4000): string[] {\n\tif (text.length <= limit) return [text];\n\tconst partes: string[] = [];\n\tlet resto = text;\n\twhile (resto.length > limit) {\n\t\t// Se corta en el último salto de línea que quepa para no partir una\n\t\t// palabra ni un bloque de código por la mitad.\n\t\tconst corte = resto.lastIndexOf(\"\\n\", limit);\n\t\tconst en = corte > limit * 0.5 ? corte : limit;\n\t\tpartes.push(resto.slice(0, en));\n\t\tresto = resto.slice(en).replace(/^\\n/, \"\");\n\t}\n\tif (resto) partes.push(resto);\n\treturn partes;\n}\n"]}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Puente entre Telegram y una sesión residente de Ada.
3
+ *
4
+ * ARQUITECTURA, Y POR QUÉ NO ES LA DEL PAQUETE DE REFERENCIA.
5
+ *
6
+ * `@llblab/pi-telegram` corre como extensión DENTRO de un proceso TUI, así que
7
+ * solo alcanza "la sesión activa" de ese proceso. De ahí sale casi toda su
8
+ * complejidad: varios TUI compitiendo por un mismo token obligan a un bus
9
+ * leader/follower, locks de propiedad, epochs, heartbeats y cuarentena de
10
+ * estado corrupto. Su propia documentación lo dice: un demonio supervisor
11
+ * "sería otro modo de producto".
12
+ *
13
+ * Nosotros TENEMOS ese demonio: `ada-cli serve`. Un servidor, un dueño del
14
+ * transporte por construcción. Eso elimina el bus entero y además nos da lo que
15
+ * ellos no pueden ofrecer: varias sesiones, no solo la activa, y funcionamiento
16
+ * con el terminal cerrado.
17
+ *
18
+ * REGLA DE SEGURIDAD NO NEGOCIABLE: desde el chat NO se conceden permisos. Un
19
+ * mensaje de Telegram no es una confirmación informada — quien lo lee está en el
20
+ * móvil, sin ver el diff. Las aprobaciones siguen ocurriendo donde se ve lo que
21
+ * se aprueba.
22
+ */
23
+ import { type TelegramApi, type TelegramUpdate } from "./api.ts";
24
+ import { type TelegramStore } from "./journal.ts";
25
+ /** Lo que el puente necesita del servidor. Inyectable para poder testear. */
26
+ export interface PuenteServidor {
27
+ listarSesiones(): Promise<Array<{
28
+ id: string;
29
+ name?: string;
30
+ }>>;
31
+ /** Envía un prompt y devuelve la respuesta final del agente. */
32
+ enviarPrompt(sessionId: string | undefined, texto: string): Promise<string>;
33
+ /** Operación de sesión (compact, rename, fork, kill, ops). */
34
+ operar(sessionId: string, op: string, payload?: unknown): Promise<{
35
+ ok: boolean;
36
+ data?: unknown;
37
+ error?: string;
38
+ }>;
39
+ }
40
+ export interface OpcionesPuente {
41
+ api: TelegramApi;
42
+ store: TelegramStore;
43
+ servidor: PuenteServidor;
44
+ onError?: (error: Error) => void;
45
+ }
46
+ /**
47
+ * Traduce una actualización a una acción. Puro: sin red ni disco, para poder
48
+ * probar el enrutado y la autorización sin levantar nada.
49
+ */
50
+ export type Accion = {
51
+ tipo: "ignorar";
52
+ motivo: string;
53
+ } | {
54
+ tipo: "rechazar";
55
+ chatId: number;
56
+ texto: string;
57
+ } | {
58
+ tipo: "emparejar";
59
+ chatId: number;
60
+ userId: number;
61
+ } | {
62
+ tipo: "comando";
63
+ chatId: number;
64
+ nombre: string;
65
+ args: string;
66
+ } | {
67
+ tipo: "prompt";
68
+ chatId: number;
69
+ texto: string;
70
+ };
71
+ export declare function planificar(update: TelegramUpdate, estado: ReturnType<TelegramStore["snapshot"]>): Accion;
72
+ export declare class TelegramBridge {
73
+ private api;
74
+ private store;
75
+ private servidor;
76
+ private onError?;
77
+ constructor(opciones: OpcionesPuente);
78
+ /** Una vuelta del bucle. Devuelve cuántas actualizaciones atendió. */
79
+ tick(signal?: AbortSignal): Promise<number>;
80
+ private responder;
81
+ private atender;
82
+ private comando;
83
+ private prompt;
84
+ }
85
+ //# sourceMappingURL=bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/telegram/bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAoB,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,UAAU,CAAC;AACnF,OAAO,EAAa,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7D,6EAA6E;AAC7E,MAAM,WAAW,cAAc;IAC9B,cAAc,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IAChE,iEAAgE;IAChE,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5E,gEAA8D;IAC9D,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnH;AAED,MAAM,WAAW,cAAc;IAC9B,GAAG,EAAE,WAAW,CAAC;IACjB,KAAK,EAAE,aAAa,CAAC;IACrB,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACjC;AAcD;;;GAGG;AACH,MAAM,MAAM,MAAM,GACf;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAErD,wBAAgB,UAAU,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,GAAG,MAAM,CAwBxG;AAED,qBAAa,cAAc;IAC1B,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,OAAO,CAAC,CAAyB;IAEzC,YAAY,QAAQ,EAAE,cAAc,EAKnC;IAED,wEAAsE;IAChE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAkBhD;YAEa,SAAS;YAMT,OAAO;YAsBP,OAAO;YAgEP,MAAM;CAQpB","sourcesContent":["/**\n * Puente entre Telegram y una sesión residente de Ada.\n *\n * ARQUITECTURA, Y POR QUÉ NO ES LA DEL PAQUETE DE REFERENCIA.\n *\n * `@llblab/pi-telegram` corre como extensión DENTRO de un proceso TUI, así que\n * solo alcanza \"la sesión activa\" de ese proceso. De ahí sale casi toda su\n * complejidad: varios TUI compitiendo por un mismo token obligan a un bus\n * leader/follower, locks de propiedad, epochs, heartbeats y cuarentena de\n * estado corrupto. Su propia documentación lo dice: un demonio supervisor\n * \"sería otro modo de producto\".\n *\n * Nosotros TENEMOS ese demonio: `ada-cli serve`. Un servidor, un dueño del\n * transporte por construcción. Eso elimina el bus entero y además nos da lo que\n * ellos no pueden ofrecer: varias sesiones, no solo la activa, y funcionamiento\n * con el terminal cerrado.\n *\n * REGLA DE SEGURIDAD NO NEGOCIABLE: desde el chat NO se conceden permisos. Un\n * mensaje de Telegram no es una confirmación informada — quien lo lee está en el\n * móvil, sin ver el diff. Las aprobaciones siguen ocurriendo donde se ve lo que\n * se aprueba.\n */\n\nimport { splitForTelegram, type TelegramApi, type TelegramUpdate } from \"./api.ts\";\nimport { autorizar, type TelegramStore } from \"./journal.ts\";\n\n/** Lo que el puente necesita del servidor. Inyectable para poder testear. */\nexport interface PuenteServidor {\n\tlistarSesiones(): Promise<Array<{ id: string; name?: string }>>;\n\t/** Envía un prompt y devuelve la respuesta final del agente. */\n\tenviarPrompt(sessionId: string | undefined, texto: string): Promise<string>;\n\t/** Operación de sesión (compact, rename, fork, kill, ops). */\n\toperar(sessionId: string, op: string, payload?: unknown): Promise<{ ok: boolean; data?: unknown; error?: string }>;\n}\n\nexport interface OpcionesPuente {\n\tapi: TelegramApi;\n\tstore: TelegramStore;\n\tservidor: PuenteServidor;\n\tonError?: (error: Error) => void;\n}\n\nconst AYUDA = `Comandos:\n/sesiones — lista las sesiones del servidor\n/usar <id> — enruta tus mensajes a esa sesión\n/compactar — compacta la sesión actual\n/estado — qué sesión está activa\n/desvincular — desconecta este chat del bot\n\nCualquier otro texto se envía como prompt a la sesión activa.\n\nLas aprobaciones de permisos NO se conceden desde aquí: se piden donde puedas\nver qué estás aprobando.`;\n\n/**\n * Traduce una actualización a una acción. Puro: sin red ni disco, para poder\n * probar el enrutado y la autorización sin levantar nada.\n */\nexport type Accion =\n\t| { tipo: \"ignorar\"; motivo: string }\n\t| { tipo: \"rechazar\"; chatId: number; texto: string }\n\t| { tipo: \"emparejar\"; chatId: number; userId: number }\n\t| { tipo: \"comando\"; chatId: number; nombre: string; args: string }\n\t| { tipo: \"prompt\"; chatId: number; texto: string };\n\nexport function planificar(update: TelegramUpdate, estado: ReturnType<TelegramStore[\"snapshot\"]>): Accion {\n\tconst mensaje = update.message;\n\tif (!mensaje?.text) return { tipo: \"ignorar\", motivo: \"sin texto\" };\n\tconst chatId = mensaje.chat.id;\n\n\tconst veredicto = autorizar(estado, mensaje.from);\n\tif (!veredicto.permitido) {\n\t\t// Se responde en vez de callar: quien se ha equivocado de bot merece\n\t\t// saberlo, y quien intenta colarse ya sabe que el bot existe. Lo que NO\n\t\t// se hace es ejecutar nada.\n\t\tconst texto =\n\t\t\tveredicto.motivo === \"otro-usuario\" ? \"Este bot ya está vinculado a otra cuenta.\" : \"No puedo atenderte.\";\n\t\treturn { tipo: \"rechazar\", chatId, texto };\n\t}\n\tif (veredicto.primerEmparejamiento) {\n\t\treturn { tipo: \"emparejar\", chatId, userId: mensaje.from?.id ?? 0 };\n\t}\n\n\tconst texto = mensaje.text.trim();\n\tif (texto.startsWith(\"/\")) {\n\t\tconst [nombre, ...resto] = texto.slice(1).split(/\\s+/);\n\t\treturn { tipo: \"comando\", chatId, nombre: (nombre ?? \"\").toLowerCase(), args: resto.join(\" \") };\n\t}\n\treturn { tipo: \"prompt\", chatId, texto };\n}\n\nexport class TelegramBridge {\n\tprivate api: TelegramApi;\n\tprivate store: TelegramStore;\n\tprivate servidor: PuenteServidor;\n\tprivate onError?: (error: Error) => void;\n\n\tconstructor(opciones: OpcionesPuente) {\n\t\tthis.api = opciones.api;\n\t\tthis.store = opciones.store;\n\t\tthis.servidor = opciones.servidor;\n\t\tthis.onError = opciones.onError;\n\t}\n\n\t/** Una vuelta del bucle. Devuelve cuántas actualizaciones atendió. */\n\tasync tick(signal?: AbortSignal): Promise<number> {\n\t\tconst updates = await this.api.getUpdates(this.store.offset(), signal);\n\t\tlet atendidas = 0;\n\t\tfor (const update of updates) {\n\t\t\t// Reentrega tras un fallo: si ya se atendió, se salta sin repetir el\n\t\t\t// efecto pero avanzando igual el offset.\n\t\t\tif (this.store.yaProcesada(update.update_id)) continue;\n\t\t\ttry {\n\t\t\t\tawait this.atender(update);\n\t\t\t} catch (error) {\n\t\t\t\tthis.onError?.(error instanceof Error ? error : new Error(String(error)));\n\t\t\t}\n\t\t\t// SIEMPRE después de atender. Confirmar antes perdería el mensaje si el\n\t\t\t// proceso muere en medio: Telegram no lo reenvía nunca más.\n\t\t\tthis.store.confirmar(update.update_id);\n\t\t\tatendidas++;\n\t\t}\n\t\treturn atendidas;\n\t}\n\n\tprivate async responder(chatId: number, texto: string): Promise<void> {\n\t\tfor (const parte of splitForTelegram(texto)) {\n\t\t\tawait this.api.sendMessage(chatId, parte);\n\t\t}\n\t}\n\n\tprivate async atender(update: TelegramUpdate): Promise<void> {\n\t\tconst accion = planificar(update, this.store.snapshot());\n\t\tswitch (accion.tipo) {\n\t\t\tcase \"ignorar\":\n\t\t\t\treturn;\n\t\t\tcase \"rechazar\":\n\t\t\t\tawait this.responder(accion.chatId, accion.texto);\n\t\t\t\treturn;\n\t\t\tcase \"emparejar\": {\n\t\t\t\tthis.store.emparejar(accion.userId, accion.chatId);\n\t\t\t\tawait this.responder(accion.chatId, `Vinculado. Este chat controla Ada en esta máquina.\\n\\n${AYUDA}`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcase \"comando\":\n\t\t\t\tawait this.comando(accion.chatId, accion.nombre, accion.args);\n\t\t\t\treturn;\n\t\t\tcase \"prompt\":\n\t\t\t\tawait this.prompt(accion.chatId, accion.texto);\n\t\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate async comando(chatId: number, nombre: string, args: string): Promise<void> {\n\t\tconst estado = this.store.snapshot();\n\t\tswitch (nombre) {\n\t\t\tcase \"start\":\n\t\t\tcase \"ayuda\":\n\t\t\tcase \"help\":\n\t\t\t\tawait this.responder(chatId, AYUDA);\n\t\t\t\treturn;\n\t\t\tcase \"sesiones\": {\n\t\t\t\tconst sesiones = await this.servidor.listarSesiones();\n\t\t\t\tif (sesiones.length === 0) {\n\t\t\t\t\tawait this.responder(chatId, \"No hay sesiones en el servidor.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst lista = sesiones\n\t\t\t\t\t.map(\n\t\t\t\t\t\t(s) => `${s.id === estado.sessionId ? \"▸ \" : \" \"}${s.id.slice(0, 8)}${s.name ? ` — ${s.name}` : \"\"}`,\n\t\t\t\t\t)\n\t\t\t\t\t.join(\"\\n\");\n\t\t\t\tawait this.responder(chatId, `Sesiones:\\n${lista}\\n\\nUsa /usar <id> para elegir.`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcase \"usar\": {\n\t\t\t\tif (!args) {\n\t\t\t\t\tawait this.responder(chatId, \"Falta el id. Míralos con /sesiones.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst sesiones = await this.servidor.listarSesiones();\n\t\t\t\tconst elegida = sesiones.find((s) => s.id === args || s.id.startsWith(args));\n\t\t\t\tif (!elegida) {\n\t\t\t\t\tawait this.responder(chatId, `No encuentro la sesión '${args}'.`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.store.fijarSesion(elegida.id);\n\t\t\t\tawait this.responder(\n\t\t\t\t\tchatId,\n\t\t\t\t\t`Activa: ${elegida.id.slice(0, 8)}${elegida.name ? ` — ${elegida.name}` : \"\"}`,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcase \"compactar\": {\n\t\t\t\tif (!estado.sessionId) {\n\t\t\t\t\tawait this.responder(chatId, \"No hay sesión activa. Elige una con /usar.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst r = await this.servidor.operar(estado.sessionId, \"compact\");\n\t\t\t\tawait this.responder(chatId, r.ok ? \"Contexto compactado.\" : `No se pudo: ${r.error ?? \"error\"}`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcase \"estado\":\n\t\t\t\tawait this.responder(\n\t\t\t\t\tchatId,\n\t\t\t\t\testado.sessionId ? `Sesión activa: ${estado.sessionId.slice(0, 8)}` : \"Sin sesión activa.\",\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\tcase \"desvincular\":\n\t\t\t\tthis.store.desemparejar();\n\t\t\t\tawait this.responder(chatId, \"Desvinculado. Escribe /start para volver a vincular.\");\n\t\t\t\treturn;\n\t\t\tdefault:\n\t\t\t\tawait this.responder(chatId, `No conozco /${nombre}.\\n\\n${AYUDA}`);\n\t\t}\n\t}\n\n\tprivate async prompt(chatId: number, texto: string): Promise<void> {\n\t\tconst estado = this.store.snapshot();\n\t\t// El indicador de \"escribiendo\" da señal de vida mientras el modelo piensa;\n\t\t// sin él, un turno largo parece que se ha colgado.\n\t\tvoid this.api.sendTyping(chatId);\n\t\tconst respuesta = await this.servidor.enviarPrompt(estado.sessionId, texto);\n\t\tawait this.responder(chatId, respuesta || \"(sin respuesta)\");\n\t}\n}\n"]}
@@ -0,0 +1,182 @@
1
+ /**
2
+ * Puente entre Telegram y una sesión residente de Ada.
3
+ *
4
+ * ARQUITECTURA, Y POR QUÉ NO ES LA DEL PAQUETE DE REFERENCIA.
5
+ *
6
+ * `@llblab/pi-telegram` corre como extensión DENTRO de un proceso TUI, así que
7
+ * solo alcanza "la sesión activa" de ese proceso. De ahí sale casi toda su
8
+ * complejidad: varios TUI compitiendo por un mismo token obligan a un bus
9
+ * leader/follower, locks de propiedad, epochs, heartbeats y cuarentena de
10
+ * estado corrupto. Su propia documentación lo dice: un demonio supervisor
11
+ * "sería otro modo de producto".
12
+ *
13
+ * Nosotros TENEMOS ese demonio: `ada-cli serve`. Un servidor, un dueño del
14
+ * transporte por construcción. Eso elimina el bus entero y además nos da lo que
15
+ * ellos no pueden ofrecer: varias sesiones, no solo la activa, y funcionamiento
16
+ * con el terminal cerrado.
17
+ *
18
+ * REGLA DE SEGURIDAD NO NEGOCIABLE: desde el chat NO se conceden permisos. Un
19
+ * mensaje de Telegram no es una confirmación informada — quien lo lee está en el
20
+ * móvil, sin ver el diff. Las aprobaciones siguen ocurriendo donde se ve lo que
21
+ * se aprueba.
22
+ */
23
+ import { splitForTelegram } from "./api.js";
24
+ import { autorizar } from "./journal.js";
25
+ const AYUDA = `Comandos:
26
+ /sesiones — lista las sesiones del servidor
27
+ /usar <id> — enruta tus mensajes a esa sesión
28
+ /compactar — compacta la sesión actual
29
+ /estado — qué sesión está activa
30
+ /desvincular — desconecta este chat del bot
31
+
32
+ Cualquier otro texto se envía como prompt a la sesión activa.
33
+
34
+ Las aprobaciones de permisos NO se conceden desde aquí: se piden donde puedas
35
+ ver qué estás aprobando.`;
36
+ export function planificar(update, estado) {
37
+ const mensaje = update.message;
38
+ if (!mensaje?.text)
39
+ return { tipo: "ignorar", motivo: "sin texto" };
40
+ const chatId = mensaje.chat.id;
41
+ const veredicto = autorizar(estado, mensaje.from);
42
+ if (!veredicto.permitido) {
43
+ // Se responde en vez de callar: quien se ha equivocado de bot merece
44
+ // saberlo, y quien intenta colarse ya sabe que el bot existe. Lo que NO
45
+ // se hace es ejecutar nada.
46
+ const texto = veredicto.motivo === "otro-usuario" ? "Este bot ya está vinculado a otra cuenta." : "No puedo atenderte.";
47
+ return { tipo: "rechazar", chatId, texto };
48
+ }
49
+ if (veredicto.primerEmparejamiento) {
50
+ return { tipo: "emparejar", chatId, userId: mensaje.from?.id ?? 0 };
51
+ }
52
+ const texto = mensaje.text.trim();
53
+ if (texto.startsWith("/")) {
54
+ const [nombre, ...resto] = texto.slice(1).split(/\s+/);
55
+ return { tipo: "comando", chatId, nombre: (nombre ?? "").toLowerCase(), args: resto.join(" ") };
56
+ }
57
+ return { tipo: "prompt", chatId, texto };
58
+ }
59
+ export class TelegramBridge {
60
+ api;
61
+ store;
62
+ servidor;
63
+ onError;
64
+ constructor(opciones) {
65
+ this.api = opciones.api;
66
+ this.store = opciones.store;
67
+ this.servidor = opciones.servidor;
68
+ this.onError = opciones.onError;
69
+ }
70
+ /** Una vuelta del bucle. Devuelve cuántas actualizaciones atendió. */
71
+ async tick(signal) {
72
+ const updates = await this.api.getUpdates(this.store.offset(), signal);
73
+ let atendidas = 0;
74
+ for (const update of updates) {
75
+ // Reentrega tras un fallo: si ya se atendió, se salta sin repetir el
76
+ // efecto pero avanzando igual el offset.
77
+ if (this.store.yaProcesada(update.update_id))
78
+ continue;
79
+ try {
80
+ await this.atender(update);
81
+ }
82
+ catch (error) {
83
+ this.onError?.(error instanceof Error ? error : new Error(String(error)));
84
+ }
85
+ // SIEMPRE después de atender. Confirmar antes perdería el mensaje si el
86
+ // proceso muere en medio: Telegram no lo reenvía nunca más.
87
+ this.store.confirmar(update.update_id);
88
+ atendidas++;
89
+ }
90
+ return atendidas;
91
+ }
92
+ async responder(chatId, texto) {
93
+ for (const parte of splitForTelegram(texto)) {
94
+ await this.api.sendMessage(chatId, parte);
95
+ }
96
+ }
97
+ async atender(update) {
98
+ const accion = planificar(update, this.store.snapshot());
99
+ switch (accion.tipo) {
100
+ case "ignorar":
101
+ return;
102
+ case "rechazar":
103
+ await this.responder(accion.chatId, accion.texto);
104
+ return;
105
+ case "emparejar": {
106
+ this.store.emparejar(accion.userId, accion.chatId);
107
+ await this.responder(accion.chatId, `Vinculado. Este chat controla Ada en esta máquina.\n\n${AYUDA}`);
108
+ return;
109
+ }
110
+ case "comando":
111
+ await this.comando(accion.chatId, accion.nombre, accion.args);
112
+ return;
113
+ case "prompt":
114
+ await this.prompt(accion.chatId, accion.texto);
115
+ return;
116
+ }
117
+ }
118
+ async comando(chatId, nombre, args) {
119
+ const estado = this.store.snapshot();
120
+ switch (nombre) {
121
+ case "start":
122
+ case "ayuda":
123
+ case "help":
124
+ await this.responder(chatId, AYUDA);
125
+ return;
126
+ case "sesiones": {
127
+ const sesiones = await this.servidor.listarSesiones();
128
+ if (sesiones.length === 0) {
129
+ await this.responder(chatId, "No hay sesiones en el servidor.");
130
+ return;
131
+ }
132
+ const lista = sesiones
133
+ .map((s) => `${s.id === estado.sessionId ? "▸ " : " "}${s.id.slice(0, 8)}${s.name ? ` — ${s.name}` : ""}`)
134
+ .join("\n");
135
+ await this.responder(chatId, `Sesiones:\n${lista}\n\nUsa /usar <id> para elegir.`);
136
+ return;
137
+ }
138
+ case "usar": {
139
+ if (!args) {
140
+ await this.responder(chatId, "Falta el id. Míralos con /sesiones.");
141
+ return;
142
+ }
143
+ const sesiones = await this.servidor.listarSesiones();
144
+ const elegida = sesiones.find((s) => s.id === args || s.id.startsWith(args));
145
+ if (!elegida) {
146
+ await this.responder(chatId, `No encuentro la sesión '${args}'.`);
147
+ return;
148
+ }
149
+ this.store.fijarSesion(elegida.id);
150
+ await this.responder(chatId, `Activa: ${elegida.id.slice(0, 8)}${elegida.name ? ` — ${elegida.name}` : ""}`);
151
+ return;
152
+ }
153
+ case "compactar": {
154
+ if (!estado.sessionId) {
155
+ await this.responder(chatId, "No hay sesión activa. Elige una con /usar.");
156
+ return;
157
+ }
158
+ const r = await this.servidor.operar(estado.sessionId, "compact");
159
+ await this.responder(chatId, r.ok ? "Contexto compactado." : `No se pudo: ${r.error ?? "error"}`);
160
+ return;
161
+ }
162
+ case "estado":
163
+ await this.responder(chatId, estado.sessionId ? `Sesión activa: ${estado.sessionId.slice(0, 8)}` : "Sin sesión activa.");
164
+ return;
165
+ case "desvincular":
166
+ this.store.desemparejar();
167
+ await this.responder(chatId, "Desvinculado. Escribe /start para volver a vincular.");
168
+ return;
169
+ default:
170
+ await this.responder(chatId, `No conozco /${nombre}.\n\n${AYUDA}`);
171
+ }
172
+ }
173
+ async prompt(chatId, texto) {
174
+ const estado = this.store.snapshot();
175
+ // El indicador de "escribiendo" da señal de vida mientras el modelo piensa;
176
+ // sin él, un turno largo parece que se ha colgado.
177
+ void this.api.sendTyping(chatId);
178
+ const respuesta = await this.servidor.enviarPrompt(estado.sessionId, texto);
179
+ await this.responder(chatId, respuesta || "(sin respuesta)");
180
+ }
181
+ }
182
+ //# sourceMappingURL=bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../src/telegram/bridge.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Puente entre Telegram y una sesión residente de Ada.\n *\n * ARQUITECTURA, Y POR QUÉ NO ES LA DEL PAQUETE DE REFERENCIA.\n *\n * `@llblab/pi-telegram` corre como extensión DENTRO de un proceso TUI, así que\n * solo alcanza \"la sesión activa\" de ese proceso. De ahí sale casi toda su\n * complejidad: varios TUI compitiendo por un mismo token obligan a un bus\n * leader/follower, locks de propiedad, epochs, heartbeats y cuarentena de\n * estado corrupto. Su propia documentación lo dice: un demonio supervisor\n * \"sería otro modo de producto\".\n *\n * Nosotros TENEMOS ese demonio: `ada-cli serve`. Un servidor, un dueño del\n * transporte por construcción. Eso elimina el bus entero y además nos da lo que\n * ellos no pueden ofrecer: varias sesiones, no solo la activa, y funcionamiento\n * con el terminal cerrado.\n *\n * REGLA DE SEGURIDAD NO NEGOCIABLE: desde el chat NO se conceden permisos. Un\n * mensaje de Telegram no es una confirmación informada — quien lo lee está en el\n * móvil, sin ver el diff. Las aprobaciones siguen ocurriendo donde se ve lo que\n * se aprueba.\n */\n\nimport { splitForTelegram, type TelegramApi, type TelegramUpdate } from \"./api.ts\";\nimport { autorizar, type TelegramStore } from \"./journal.ts\";\n\n/** Lo que el puente necesita del servidor. Inyectable para poder testear. */\nexport interface PuenteServidor {\n\tlistarSesiones(): Promise<Array<{ id: string; name?: string }>>;\n\t/** Envía un prompt y devuelve la respuesta final del agente. */\n\tenviarPrompt(sessionId: string | undefined, texto: string): Promise<string>;\n\t/** Operación de sesión (compact, rename, fork, kill, ops). */\n\toperar(sessionId: string, op: string, payload?: unknown): Promise<{ ok: boolean; data?: unknown; error?: string }>;\n}\n\nexport interface OpcionesPuente {\n\tapi: TelegramApi;\n\tstore: TelegramStore;\n\tservidor: PuenteServidor;\n\tonError?: (error: Error) => void;\n}\n\nconst AYUDA = `Comandos:\n/sesiones — lista las sesiones del servidor\n/usar <id> — enruta tus mensajes a esa sesión\n/compactar — compacta la sesión actual\n/estado — qué sesión está activa\n/desvincular — desconecta este chat del bot\n\nCualquier otro texto se envía como prompt a la sesión activa.\n\nLas aprobaciones de permisos NO se conceden desde aquí: se piden donde puedas\nver qué estás aprobando.`;\n\n/**\n * Traduce una actualización a una acción. Puro: sin red ni disco, para poder\n * probar el enrutado y la autorización sin levantar nada.\n */\nexport type Accion =\n\t| { tipo: \"ignorar\"; motivo: string }\n\t| { tipo: \"rechazar\"; chatId: number; texto: string }\n\t| { tipo: \"emparejar\"; chatId: number; userId: number }\n\t| { tipo: \"comando\"; chatId: number; nombre: string; args: string }\n\t| { tipo: \"prompt\"; chatId: number; texto: string };\n\nexport function planificar(update: TelegramUpdate, estado: ReturnType<TelegramStore[\"snapshot\"]>): Accion {\n\tconst mensaje = update.message;\n\tif (!mensaje?.text) return { tipo: \"ignorar\", motivo: \"sin texto\" };\n\tconst chatId = mensaje.chat.id;\n\n\tconst veredicto = autorizar(estado, mensaje.from);\n\tif (!veredicto.permitido) {\n\t\t// Se responde en vez de callar: quien se ha equivocado de bot merece\n\t\t// saberlo, y quien intenta colarse ya sabe que el bot existe. Lo que NO\n\t\t// se hace es ejecutar nada.\n\t\tconst texto =\n\t\t\tveredicto.motivo === \"otro-usuario\" ? \"Este bot ya está vinculado a otra cuenta.\" : \"No puedo atenderte.\";\n\t\treturn { tipo: \"rechazar\", chatId, texto };\n\t}\n\tif (veredicto.primerEmparejamiento) {\n\t\treturn { tipo: \"emparejar\", chatId, userId: mensaje.from?.id ?? 0 };\n\t}\n\n\tconst texto = mensaje.text.trim();\n\tif (texto.startsWith(\"/\")) {\n\t\tconst [nombre, ...resto] = texto.slice(1).split(/\\s+/);\n\t\treturn { tipo: \"comando\", chatId, nombre: (nombre ?? \"\").toLowerCase(), args: resto.join(\" \") };\n\t}\n\treturn { tipo: \"prompt\", chatId, texto };\n}\n\nexport class TelegramBridge {\n\tprivate api: TelegramApi;\n\tprivate store: TelegramStore;\n\tprivate servidor: PuenteServidor;\n\tprivate onError?: (error: Error) => void;\n\n\tconstructor(opciones: OpcionesPuente) {\n\t\tthis.api = opciones.api;\n\t\tthis.store = opciones.store;\n\t\tthis.servidor = opciones.servidor;\n\t\tthis.onError = opciones.onError;\n\t}\n\n\t/** Una vuelta del bucle. Devuelve cuántas actualizaciones atendió. */\n\tasync tick(signal?: AbortSignal): Promise<number> {\n\t\tconst updates = await this.api.getUpdates(this.store.offset(), signal);\n\t\tlet atendidas = 0;\n\t\tfor (const update of updates) {\n\t\t\t// Reentrega tras un fallo: si ya se atendió, se salta sin repetir el\n\t\t\t// efecto pero avanzando igual el offset.\n\t\t\tif (this.store.yaProcesada(update.update_id)) continue;\n\t\t\ttry {\n\t\t\t\tawait this.atender(update);\n\t\t\t} catch (error) {\n\t\t\t\tthis.onError?.(error instanceof Error ? error : new Error(String(error)));\n\t\t\t}\n\t\t\t// SIEMPRE después de atender. Confirmar antes perdería el mensaje si el\n\t\t\t// proceso muere en medio: Telegram no lo reenvía nunca más.\n\t\t\tthis.store.confirmar(update.update_id);\n\t\t\tatendidas++;\n\t\t}\n\t\treturn atendidas;\n\t}\n\n\tprivate async responder(chatId: number, texto: string): Promise<void> {\n\t\tfor (const parte of splitForTelegram(texto)) {\n\t\t\tawait this.api.sendMessage(chatId, parte);\n\t\t}\n\t}\n\n\tprivate async atender(update: TelegramUpdate): Promise<void> {\n\t\tconst accion = planificar(update, this.store.snapshot());\n\t\tswitch (accion.tipo) {\n\t\t\tcase \"ignorar\":\n\t\t\t\treturn;\n\t\t\tcase \"rechazar\":\n\t\t\t\tawait this.responder(accion.chatId, accion.texto);\n\t\t\t\treturn;\n\t\t\tcase \"emparejar\": {\n\t\t\t\tthis.store.emparejar(accion.userId, accion.chatId);\n\t\t\t\tawait this.responder(accion.chatId, `Vinculado. Este chat controla Ada en esta máquina.\\n\\n${AYUDA}`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcase \"comando\":\n\t\t\t\tawait this.comando(accion.chatId, accion.nombre, accion.args);\n\t\t\t\treturn;\n\t\t\tcase \"prompt\":\n\t\t\t\tawait this.prompt(accion.chatId, accion.texto);\n\t\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate async comando(chatId: number, nombre: string, args: string): Promise<void> {\n\t\tconst estado = this.store.snapshot();\n\t\tswitch (nombre) {\n\t\t\tcase \"start\":\n\t\t\tcase \"ayuda\":\n\t\t\tcase \"help\":\n\t\t\t\tawait this.responder(chatId, AYUDA);\n\t\t\t\treturn;\n\t\t\tcase \"sesiones\": {\n\t\t\t\tconst sesiones = await this.servidor.listarSesiones();\n\t\t\t\tif (sesiones.length === 0) {\n\t\t\t\t\tawait this.responder(chatId, \"No hay sesiones en el servidor.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst lista = sesiones\n\t\t\t\t\t.map(\n\t\t\t\t\t\t(s) => `${s.id === estado.sessionId ? \"▸ \" : \" \"}${s.id.slice(0, 8)}${s.name ? ` — ${s.name}` : \"\"}`,\n\t\t\t\t\t)\n\t\t\t\t\t.join(\"\\n\");\n\t\t\t\tawait this.responder(chatId, `Sesiones:\\n${lista}\\n\\nUsa /usar <id> para elegir.`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcase \"usar\": {\n\t\t\t\tif (!args) {\n\t\t\t\t\tawait this.responder(chatId, \"Falta el id. Míralos con /sesiones.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst sesiones = await this.servidor.listarSesiones();\n\t\t\t\tconst elegida = sesiones.find((s) => s.id === args || s.id.startsWith(args));\n\t\t\t\tif (!elegida) {\n\t\t\t\t\tawait this.responder(chatId, `No encuentro la sesión '${args}'.`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.store.fijarSesion(elegida.id);\n\t\t\t\tawait this.responder(\n\t\t\t\t\tchatId,\n\t\t\t\t\t`Activa: ${elegida.id.slice(0, 8)}${elegida.name ? ` — ${elegida.name}` : \"\"}`,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcase \"compactar\": {\n\t\t\t\tif (!estado.sessionId) {\n\t\t\t\t\tawait this.responder(chatId, \"No hay sesión activa. Elige una con /usar.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst r = await this.servidor.operar(estado.sessionId, \"compact\");\n\t\t\t\tawait this.responder(chatId, r.ok ? \"Contexto compactado.\" : `No se pudo: ${r.error ?? \"error\"}`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcase \"estado\":\n\t\t\t\tawait this.responder(\n\t\t\t\t\tchatId,\n\t\t\t\t\testado.sessionId ? `Sesión activa: ${estado.sessionId.slice(0, 8)}` : \"Sin sesión activa.\",\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\tcase \"desvincular\":\n\t\t\t\tthis.store.desemparejar();\n\t\t\t\tawait this.responder(chatId, \"Desvinculado. Escribe /start para volver a vincular.\");\n\t\t\t\treturn;\n\t\t\tdefault:\n\t\t\t\tawait this.responder(chatId, `No conozco /${nombre}.\\n\\n${AYUDA}`);\n\t\t}\n\t}\n\n\tprivate async prompt(chatId: number, texto: string): Promise<void> {\n\t\tconst estado = this.store.snapshot();\n\t\t// El indicador de \"escribiendo\" da señal de vida mientras el modelo piensa;\n\t\t// sin él, un turno largo parece que se ha colgado.\n\t\tvoid this.api.sendTyping(chatId);\n\t\tconst respuesta = await this.servidor.enviarPrompt(estado.sessionId, texto);\n\t\tawait this.responder(chatId, respuesta || \"(sin respuesta)\");\n\t}\n}\n"]}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Journal de actualizaciones y emparejamiento de un solo usuario.
3
+ *
4
+ * Dos cosas que parecen menores y no lo son:
5
+ *
6
+ * 1. **El offset se confirma DESPUÉS de persistir, nunca antes.** Telegram
7
+ * borra una actualización en cuanto avanzas el offset y no la reenvía jamás.
8
+ * Si el proceso muere entre recibir y procesar, ese mensaje se pierde para
9
+ * siempre. Por eso aquí se escribe primero y se confirma después.
10
+ *
11
+ * 2. **Un solo usuario, el primero que se empareja.** Un bot de Telegram es
12
+ * alcanzable por cualquiera que sepa su nombre. Sin esta puerta, cualquier
13
+ * desconocido podría escribirle a tu bot y ejecutar comandos en tu máquina.
14
+ */
15
+ export interface EstadoTelegram {
16
+ version: 1;
17
+ /** Última actualización PROCESADA. El offset se calcula a partir de esto. */
18
+ lastUpdateId: number;
19
+ /** Id del usuario emparejado. Nadie más puede hablar con el bot. */
20
+ allowedUserId?: number;
21
+ /** Chat donde vive la conversación con ese usuario. */
22
+ chatId?: number;
23
+ /** Sesión de Ada a la que se enrutan los prompts. */
24
+ sessionId?: string;
25
+ pairedAt?: string;
26
+ }
27
+ export declare class TelegramStore {
28
+ private path;
29
+ private estado;
30
+ private cargado;
31
+ constructor(agentDir: string);
32
+ private cargar;
33
+ private guardar;
34
+ snapshot(): EstadoTelegram;
35
+ /** Offset para `getUpdates`: la siguiente a la última procesada. */
36
+ offset(): number;
37
+ /**
38
+ * Marca una actualización como procesada. Se llama SIEMPRE después de
39
+ * haberla atendido, nunca antes: ese es el contrato que evita perderla.
40
+ */
41
+ confirmar(updateId: number): void;
42
+ /** True si esa actualización ya se atendió (reentrega tras un fallo). */
43
+ yaProcesada(updateId: number): boolean;
44
+ emparejar(userId: number, chatId: number): void;
45
+ desemparejar(): void;
46
+ fijarSesion(sessionId: string | undefined): void;
47
+ }
48
+ export type Veredicto = {
49
+ permitido: true;
50
+ primerEmparejamiento: boolean;
51
+ } | {
52
+ permitido: false;
53
+ motivo: "sin-usuario" | "otro-usuario" | "es-bot";
54
+ };
55
+ /**
56
+ * Decide si un mensaje puede actuar sobre la máquina.
57
+ *
58
+ * Se empareja el PRIMERO que escribe y se rechaza a todos los demás en
59
+ * silencio-hacia-fuera (se responde, pero no se ejecuta nada). Rechazar sin
60
+ * responder sería peor: quien se equivoca de bot merece saberlo, y quien
61
+ * intenta colarse ya sabe que el bot existe.
62
+ */
63
+ export declare function autorizar(estado: EstadoTelegram, from: {
64
+ id: number;
65
+ is_bot?: boolean;
66
+ } | undefined): Veredicto;
67
+ //# sourceMappingURL=journal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journal.d.ts","sourceRoot":"","sources":["../../src/telegram/journal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,MAAM,WAAW,cAAc;IAC9B,OAAO,EAAE,CAAC,CAAC;IACX,+EAA6E;IAC7E,YAAY,EAAE,MAAM,CAAC;IACrB,qEAAoE;IACpE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAID,qBAAa,aAAa;IACzB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,OAAO,CAAS;IAExB,YAAY,QAAQ,EAAE,MAAM,EAE3B;IAED,OAAO,CAAC,MAAM;IAcd,OAAO,CAAC,OAAO;IAYf,QAAQ,IAAI,cAAc,CAGzB;IAED,qEAAoE;IACpE,MAAM,IAAI,MAAM,CAGf;IAED;;;OAGG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAKhC;IAED,2EAAyE;IACzE,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGrC;IAED,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAM9C;IAED,YAAY,IAAI,IAAI,CAOnB;IAED,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAI/C;CACD;AAED,MAAM,MAAM,SAAS,GAClB;IAAE,SAAS,EAAE,IAAI,CAAC;IAAC,oBAAoB,EAAE,OAAO,CAAA;CAAE,GAClD;IAAE,SAAS,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,aAAa,GAAG,cAAc,GAAG,QAAQ,CAAA;CAAE,CAAC;AAE3E;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,GAAG,SAAS,CAO/G","sourcesContent":["/**\n * Journal de actualizaciones y emparejamiento de un solo usuario.\n *\n * Dos cosas que parecen menores y no lo son:\n *\n * 1. **El offset se confirma DESPUÉS de persistir, nunca antes.** Telegram\n * borra una actualización en cuanto avanzas el offset y no la reenvía jamás.\n * Si el proceso muere entre recibir y procesar, ese mensaje se pierde para\n * siempre. Por eso aquí se escribe primero y se confirma después.\n *\n * 2. **Un solo usuario, el primero que se empareja.** Un bot de Telegram es\n * alcanzable por cualquiera que sepa su nombre. Sin esta puerta, cualquier\n * desconocido podría escribirle a tu bot y ejecutar comandos en tu máquina.\n */\n\nimport { chmodSync, existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\n\nexport interface EstadoTelegram {\n\tversion: 1;\n\t/** Última actualización PROCESADA. El offset se calcula a partir de esto. */\n\tlastUpdateId: number;\n\t/** Id del usuario emparejado. Nadie más puede hablar con el bot. */\n\tallowedUserId?: number;\n\t/** Chat donde vive la conversación con ese usuario. */\n\tchatId?: number;\n\t/** Sesión de Ada a la que se enrutan los prompts. */\n\tsessionId?: string;\n\tpairedAt?: string;\n}\n\nconst VACIO: EstadoTelegram = { version: 1, lastUpdateId: 0 };\n\nexport class TelegramStore {\n\tprivate path: string;\n\tprivate estado: EstadoTelegram = { ...VACIO };\n\tprivate cargado = false;\n\n\tconstructor(agentDir: string) {\n\t\tthis.path = join(agentDir, \"telegram\", \"state.json\");\n\t}\n\n\tprivate cargar(): void {\n\t\tif (this.cargado) return;\n\t\tthis.cargado = true;\n\t\tif (!existsSync(this.path)) return;\n\t\ttry {\n\t\t\tconst leido = JSON.parse(readFileSync(this.path, \"utf-8\")) as EstadoTelegram;\n\t\t\t// Una versión futura se ignora en vez de interpretarse a medias: mejor\n\t\t\t// re-emparejar que enrutar mensajes con un formato que no entendemos.\n\t\t\tif (leido?.version === 1) this.estado = { ...VACIO, ...leido };\n\t\t} catch {\n\t\t\t// Fichero corrupto: se arranca limpio en vez de impedir el arranque.\n\t\t}\n\t}\n\n\tprivate guardar(): void {\n\t\tmkdirSync(dirname(this.path), { recursive: true });\n\t\tconst tmp = `${this.path}.tmp`;\n\t\t// Escritura atómica: un corte a mitad no puede dejar un estado ilegible\n\t\t// que obligue a re-emparejar.\n\t\twriteFileSync(tmp, JSON.stringify(this.estado, null, 2), { mode: 0o600 });\n\t\t// `mode` solo se aplica al CREAR: si un corte anterior dejó el temporal con\n\t\t// permisos laxos, el rename se los pasaría al estado definitivo.\n\t\tchmodSync(tmp, 0o600);\n\t\trenameSync(tmp, this.path);\n\t}\n\n\tsnapshot(): EstadoTelegram {\n\t\tthis.cargar();\n\t\treturn { ...this.estado };\n\t}\n\n\t/** Offset para `getUpdates`: la siguiente a la última procesada. */\n\toffset(): number {\n\t\tthis.cargar();\n\t\treturn this.estado.lastUpdateId > 0 ? this.estado.lastUpdateId + 1 : 0;\n\t}\n\n\t/**\n\t * Marca una actualización como procesada. Se llama SIEMPRE después de\n\t * haberla atendido, nunca antes: ese es el contrato que evita perderla.\n\t */\n\tconfirmar(updateId: number): void {\n\t\tthis.cargar();\n\t\tif (updateId <= this.estado.lastUpdateId) return; // duplicado o reintento\n\t\tthis.estado.lastUpdateId = updateId;\n\t\tthis.guardar();\n\t}\n\n\t/** True si esa actualización ya se atendió (reentrega tras un fallo). */\n\tyaProcesada(updateId: number): boolean {\n\t\tthis.cargar();\n\t\treturn updateId <= this.estado.lastUpdateId;\n\t}\n\n\temparejar(userId: number, chatId: number): void {\n\t\tthis.cargar();\n\t\tthis.estado.allowedUserId = userId;\n\t\tthis.estado.chatId = chatId;\n\t\tthis.estado.pairedAt = new Date().toISOString();\n\t\tthis.guardar();\n\t}\n\n\tdesemparejar(): void {\n\t\tthis.cargar();\n\t\tthis.estado.allowedUserId = undefined;\n\t\tthis.estado.chatId = undefined;\n\t\tthis.estado.sessionId = undefined;\n\t\tthis.estado.pairedAt = undefined;\n\t\tthis.guardar();\n\t}\n\n\tfijarSesion(sessionId: string | undefined): void {\n\t\tthis.cargar();\n\t\tthis.estado.sessionId = sessionId;\n\t\tthis.guardar();\n\t}\n}\n\nexport type Veredicto =\n\t| { permitido: true; primerEmparejamiento: boolean }\n\t| { permitido: false; motivo: \"sin-usuario\" | \"otro-usuario\" | \"es-bot\" };\n\n/**\n * Decide si un mensaje puede actuar sobre la máquina.\n *\n * Se empareja el PRIMERO que escribe y se rechaza a todos los demás en\n * silencio-hacia-fuera (se responde, pero no se ejecuta nada). Rechazar sin\n * responder sería peor: quien se equivoca de bot merece saberlo, y quien\n * intenta colarse ya sabe que el bot existe.\n */\nexport function autorizar(estado: EstadoTelegram, from: { id: number; is_bot?: boolean } | undefined): Veredicto {\n\tif (!from) return { permitido: false, motivo: \"sin-usuario\" };\n\t// Un bot escribiendo a otro bot es un bucle o un intento de abuso.\n\tif (from.is_bot) return { permitido: false, motivo: \"es-bot\" };\n\tif (estado.allowedUserId === undefined) return { permitido: true, primerEmparejamiento: true };\n\tif (estado.allowedUserId === from.id) return { permitido: true, primerEmparejamiento: false };\n\treturn { permitido: false, motivo: \"otro-usuario\" };\n}\n"]}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Journal de actualizaciones y emparejamiento de un solo usuario.
3
+ *
4
+ * Dos cosas que parecen menores y no lo son:
5
+ *
6
+ * 1. **El offset se confirma DESPUÉS de persistir, nunca antes.** Telegram
7
+ * borra una actualización en cuanto avanzas el offset y no la reenvía jamás.
8
+ * Si el proceso muere entre recibir y procesar, ese mensaje se pierde para
9
+ * siempre. Por eso aquí se escribe primero y se confirma después.
10
+ *
11
+ * 2. **Un solo usuario, el primero que se empareja.** Un bot de Telegram es
12
+ * alcanzable por cualquiera que sepa su nombre. Sin esta puerta, cualquier
13
+ * desconocido podría escribirle a tu bot y ejecutar comandos en tu máquina.
14
+ */
15
+ import { chmodSync, existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
16
+ import { dirname, join } from "node:path";
17
+ const VACIO = { version: 1, lastUpdateId: 0 };
18
+ export class TelegramStore {
19
+ path;
20
+ estado = { ...VACIO };
21
+ cargado = false;
22
+ constructor(agentDir) {
23
+ this.path = join(agentDir, "telegram", "state.json");
24
+ }
25
+ cargar() {
26
+ if (this.cargado)
27
+ return;
28
+ this.cargado = true;
29
+ if (!existsSync(this.path))
30
+ return;
31
+ try {
32
+ const leido = JSON.parse(readFileSync(this.path, "utf-8"));
33
+ // Una versión futura se ignora en vez de interpretarse a medias: mejor
34
+ // re-emparejar que enrutar mensajes con un formato que no entendemos.
35
+ if (leido?.version === 1)
36
+ this.estado = { ...VACIO, ...leido };
37
+ }
38
+ catch {
39
+ // Fichero corrupto: se arranca limpio en vez de impedir el arranque.
40
+ }
41
+ }
42
+ guardar() {
43
+ mkdirSync(dirname(this.path), { recursive: true });
44
+ const tmp = `${this.path}.tmp`;
45
+ // Escritura atómica: un corte a mitad no puede dejar un estado ilegible
46
+ // que obligue a re-emparejar.
47
+ writeFileSync(tmp, JSON.stringify(this.estado, null, 2), { mode: 0o600 });
48
+ // `mode` solo se aplica al CREAR: si un corte anterior dejó el temporal con
49
+ // permisos laxos, el rename se los pasaría al estado definitivo.
50
+ chmodSync(tmp, 0o600);
51
+ renameSync(tmp, this.path);
52
+ }
53
+ snapshot() {
54
+ this.cargar();
55
+ return { ...this.estado };
56
+ }
57
+ /** Offset para `getUpdates`: la siguiente a la última procesada. */
58
+ offset() {
59
+ this.cargar();
60
+ return this.estado.lastUpdateId > 0 ? this.estado.lastUpdateId + 1 : 0;
61
+ }
62
+ /**
63
+ * Marca una actualización como procesada. Se llama SIEMPRE después de
64
+ * haberla atendido, nunca antes: ese es el contrato que evita perderla.
65
+ */
66
+ confirmar(updateId) {
67
+ this.cargar();
68
+ if (updateId <= this.estado.lastUpdateId)
69
+ return; // duplicado o reintento
70
+ this.estado.lastUpdateId = updateId;
71
+ this.guardar();
72
+ }
73
+ /** True si esa actualización ya se atendió (reentrega tras un fallo). */
74
+ yaProcesada(updateId) {
75
+ this.cargar();
76
+ return updateId <= this.estado.lastUpdateId;
77
+ }
78
+ emparejar(userId, chatId) {
79
+ this.cargar();
80
+ this.estado.allowedUserId = userId;
81
+ this.estado.chatId = chatId;
82
+ this.estado.pairedAt = new Date().toISOString();
83
+ this.guardar();
84
+ }
85
+ desemparejar() {
86
+ this.cargar();
87
+ this.estado.allowedUserId = undefined;
88
+ this.estado.chatId = undefined;
89
+ this.estado.sessionId = undefined;
90
+ this.estado.pairedAt = undefined;
91
+ this.guardar();
92
+ }
93
+ fijarSesion(sessionId) {
94
+ this.cargar();
95
+ this.estado.sessionId = sessionId;
96
+ this.guardar();
97
+ }
98
+ }
99
+ /**
100
+ * Decide si un mensaje puede actuar sobre la máquina.
101
+ *
102
+ * Se empareja el PRIMERO que escribe y se rechaza a todos los demás en
103
+ * silencio-hacia-fuera (se responde, pero no se ejecuta nada). Rechazar sin
104
+ * responder sería peor: quien se equivoca de bot merece saberlo, y quien
105
+ * intenta colarse ya sabe que el bot existe.
106
+ */
107
+ export function autorizar(estado, from) {
108
+ if (!from)
109
+ return { permitido: false, motivo: "sin-usuario" };
110
+ // Un bot escribiendo a otro bot es un bucle o un intento de abuso.
111
+ if (from.is_bot)
112
+ return { permitido: false, motivo: "es-bot" };
113
+ if (estado.allowedUserId === undefined)
114
+ return { permitido: true, primerEmparejamiento: true };
115
+ if (estado.allowedUserId === from.id)
116
+ return { permitido: true, primerEmparejamiento: false };
117
+ return { permitido: false, motivo: "otro-usuario" };
118
+ }
119
+ //# sourceMappingURL=journal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journal.js","sourceRoot":"","sources":["../../src/telegram/journal.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Journal de actualizaciones y emparejamiento de un solo usuario.\n *\n * Dos cosas que parecen menores y no lo son:\n *\n * 1. **El offset se confirma DESPUÉS de persistir, nunca antes.** Telegram\n * borra una actualización en cuanto avanzas el offset y no la reenvía jamás.\n * Si el proceso muere entre recibir y procesar, ese mensaje se pierde para\n * siempre. Por eso aquí se escribe primero y se confirma después.\n *\n * 2. **Un solo usuario, el primero que se empareja.** Un bot de Telegram es\n * alcanzable por cualquiera que sepa su nombre. Sin esta puerta, cualquier\n * desconocido podría escribirle a tu bot y ejecutar comandos en tu máquina.\n */\n\nimport { chmodSync, existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\n\nexport interface EstadoTelegram {\n\tversion: 1;\n\t/** Última actualización PROCESADA. El offset se calcula a partir de esto. */\n\tlastUpdateId: number;\n\t/** Id del usuario emparejado. Nadie más puede hablar con el bot. */\n\tallowedUserId?: number;\n\t/** Chat donde vive la conversación con ese usuario. */\n\tchatId?: number;\n\t/** Sesión de Ada a la que se enrutan los prompts. */\n\tsessionId?: string;\n\tpairedAt?: string;\n}\n\nconst VACIO: EstadoTelegram = { version: 1, lastUpdateId: 0 };\n\nexport class TelegramStore {\n\tprivate path: string;\n\tprivate estado: EstadoTelegram = { ...VACIO };\n\tprivate cargado = false;\n\n\tconstructor(agentDir: string) {\n\t\tthis.path = join(agentDir, \"telegram\", \"state.json\");\n\t}\n\n\tprivate cargar(): void {\n\t\tif (this.cargado) return;\n\t\tthis.cargado = true;\n\t\tif (!existsSync(this.path)) return;\n\t\ttry {\n\t\t\tconst leido = JSON.parse(readFileSync(this.path, \"utf-8\")) as EstadoTelegram;\n\t\t\t// Una versión futura se ignora en vez de interpretarse a medias: mejor\n\t\t\t// re-emparejar que enrutar mensajes con un formato que no entendemos.\n\t\t\tif (leido?.version === 1) this.estado = { ...VACIO, ...leido };\n\t\t} catch {\n\t\t\t// Fichero corrupto: se arranca limpio en vez de impedir el arranque.\n\t\t}\n\t}\n\n\tprivate guardar(): void {\n\t\tmkdirSync(dirname(this.path), { recursive: true });\n\t\tconst tmp = `${this.path}.tmp`;\n\t\t// Escritura atómica: un corte a mitad no puede dejar un estado ilegible\n\t\t// que obligue a re-emparejar.\n\t\twriteFileSync(tmp, JSON.stringify(this.estado, null, 2), { mode: 0o600 });\n\t\t// `mode` solo se aplica al CREAR: si un corte anterior dejó el temporal con\n\t\t// permisos laxos, el rename se los pasaría al estado definitivo.\n\t\tchmodSync(tmp, 0o600);\n\t\trenameSync(tmp, this.path);\n\t}\n\n\tsnapshot(): EstadoTelegram {\n\t\tthis.cargar();\n\t\treturn { ...this.estado };\n\t}\n\n\t/** Offset para `getUpdates`: la siguiente a la última procesada. */\n\toffset(): number {\n\t\tthis.cargar();\n\t\treturn this.estado.lastUpdateId > 0 ? this.estado.lastUpdateId + 1 : 0;\n\t}\n\n\t/**\n\t * Marca una actualización como procesada. Se llama SIEMPRE después de\n\t * haberla atendido, nunca antes: ese es el contrato que evita perderla.\n\t */\n\tconfirmar(updateId: number): void {\n\t\tthis.cargar();\n\t\tif (updateId <= this.estado.lastUpdateId) return; // duplicado o reintento\n\t\tthis.estado.lastUpdateId = updateId;\n\t\tthis.guardar();\n\t}\n\n\t/** True si esa actualización ya se atendió (reentrega tras un fallo). */\n\tyaProcesada(updateId: number): boolean {\n\t\tthis.cargar();\n\t\treturn updateId <= this.estado.lastUpdateId;\n\t}\n\n\temparejar(userId: number, chatId: number): void {\n\t\tthis.cargar();\n\t\tthis.estado.allowedUserId = userId;\n\t\tthis.estado.chatId = chatId;\n\t\tthis.estado.pairedAt = new Date().toISOString();\n\t\tthis.guardar();\n\t}\n\n\tdesemparejar(): void {\n\t\tthis.cargar();\n\t\tthis.estado.allowedUserId = undefined;\n\t\tthis.estado.chatId = undefined;\n\t\tthis.estado.sessionId = undefined;\n\t\tthis.estado.pairedAt = undefined;\n\t\tthis.guardar();\n\t}\n\n\tfijarSesion(sessionId: string | undefined): void {\n\t\tthis.cargar();\n\t\tthis.estado.sessionId = sessionId;\n\t\tthis.guardar();\n\t}\n}\n\nexport type Veredicto =\n\t| { permitido: true; primerEmparejamiento: boolean }\n\t| { permitido: false; motivo: \"sin-usuario\" | \"otro-usuario\" | \"es-bot\" };\n\n/**\n * Decide si un mensaje puede actuar sobre la máquina.\n *\n * Se empareja el PRIMERO que escribe y se rechaza a todos los demás en\n * silencio-hacia-fuera (se responde, pero no se ejecuta nada). Rechazar sin\n * responder sería peor: quien se equivoca de bot merece saberlo, y quien\n * intenta colarse ya sabe que el bot existe.\n */\nexport function autorizar(estado: EstadoTelegram, from: { id: number; is_bot?: boolean } | undefined): Veredicto {\n\tif (!from) return { permitido: false, motivo: \"sin-usuario\" };\n\t// Un bot escribiendo a otro bot es un bucle o un intento de abuso.\n\tif (from.is_bot) return { permitido: false, motivo: \"es-bot\" };\n\tif (estado.allowedUserId === undefined) return { permitido: true, primerEmparejamiento: true };\n\tif (estado.allowedUserId === from.id) return { permitido: true, primerEmparejamiento: false };\n\treturn { permitido: false, motivo: \"otro-usuario\" };\n}\n"]}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Adaptador del puente contra el servidor de sesiones residentes.
3
+ *
4
+ * Aquí vive la ventaja arquitectónica frente al paquete de referencia: como
5
+ * `ada-cli serve` es el único dueño del transporte, el puente NO necesita bus
6
+ * leader/follower, locks de propiedad, epochs ni heartbeats. Se conecta como un
7
+ * cliente más.
8
+ *
9
+ * Y como el servidor conoce TODAS las sesiones, desde Telegram se puede elegir
10
+ * cuál usar — no solo "la activa del proceso", que es a lo único que llega una
11
+ * extensión atrapada dentro de un TUI.
12
+ */
13
+ import type { PuenteServidor } from "./bridge.ts";
14
+ export declare function crearServidorPuente(socketPath: string): Promise<PuenteServidor>;
15
+ //# sourceMappingURL=servidor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"servidor.d.ts","sourceRoot":"","sources":["../../src/telegram/servidor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAKlD,wBAAsB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CA6DrF","sourcesContent":["/**\n * Adaptador del puente contra el servidor de sesiones residentes.\n *\n * Aquí vive la ventaja arquitectónica frente al paquete de referencia: como\n * `ada-cli serve` es el único dueño del transporte, el puente NO necesita bus\n * leader/follower, locks de propiedad, epochs ni heartbeats. Se conecta como un\n * cliente más.\n *\n * Y como el servidor conoce TODAS las sesiones, desde Telegram se puede elegir\n * cuál usar — no solo \"la activa del proceso\", que es a lo único que llega una\n * extensión atrapada dentro de un TUI.\n */\n\nimport { renderIncremental } from \"../server/attach.ts\";\nimport type { PuenteServidor } from \"./bridge.ts\";\n\n/** Cuánto se espera a que un turno se asiente antes de rendirse. */\nconst TIMEOUT_TURNO_MS = 10 * 60 * 1000;\n\nexport async function crearServidorPuente(socketPath: string): Promise<PuenteServidor> {\n\tconst { PiClient } = await import(\"@earendil-works/pi-client\");\n\tconst { createUnixTransportFactory } = await import(\"@earendil-works/pi-client/unix\");\n\tconst { runExtensionOp } = await import(\"../server/extension-ops.ts\");\n\n\tconst nuevoCliente = () => new PiClient({ transportFactory: createUnixTransportFactory({ path: socketPath }) });\n\n\treturn {\n\t\tasync listarSesiones() {\n\t\t\tconst cliente = nuevoCliente();\n\t\t\ttry {\n\t\t\t\tawait cliente.connect();\n\t\t\t\tconst sesiones = await cliente.listSessions();\n\t\t\t\treturn sesiones.map((s) => ({ id: s.id, name: s.sessionName }));\n\t\t\t} finally {\n\t\t\t\tawait cliente.dispose().catch(() => {});\n\t\t\t}\n\t\t},\n\n\t\tasync enviarPrompt(sessionId, texto) {\n\t\t\tconst cliente = nuevoCliente();\n\t\t\ttry {\n\t\t\t\tawait cliente.connect();\n\t\t\t\t// Sin sesión elegida se crea una: es más útil que rechazar el mensaje\n\t\t\t\t// y obligar a abrir el portátil para poder empezar.\n\t\t\t\tconst lease = sessionId ? await cliente.attachSession(sessionId) : await cliente.createSession({});\n\n\t\t\t\t// Se parte del transcript ACTUAL para no reenviar por Telegram lo que\n\t\t\t\t// ya se dijo antes de este prompt.\n\t\t\t\tlet yaVisto = lease.snapshot?.transcript.length ?? 0;\n\t\t\t\tconst nuevas: string[] = [];\n\n\t\t\t\tconst listo = new Promise<void>((resolve) => {\n\t\t\t\t\tconst temporizador = setTimeout(resolve, TIMEOUT_TURNO_MS);\n\t\t\t\t\tconst cancelar = lease.subscribe((snapshot) => {\n\t\t\t\t\t\tconst { text, rendered } = renderIncremental(snapshot, yaVisto);\n\t\t\t\t\t\tyaVisto = rendered;\n\t\t\t\t\t\tif (text.trim()) nuevas.push(text);\n\t\t\t\t\t\t// `idle` marca el turno asentado. Sin esperarlo, la respuesta\n\t\t\t\t\t\t// llegaría a Telegram a medias.\n\t\t\t\t\t\tif (snapshot.phase === \"idle\") {\n\t\t\t\t\t\t\tclearTimeout(temporizador);\n\t\t\t\t\t\t\tcancelar();\n\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\tawait lease.prompt(texto);\n\t\t\t\tawait listo;\n\t\t\t\tawait lease.detach().catch(() => {});\n\t\t\t\treturn nuevas.join(\"\\n\").trim();\n\t\t\t} finally {\n\t\t\t\tawait cliente.dispose().catch(() => {});\n\t\t\t}\n\t\t},\n\n\t\tasync operar(sessionId, op, payload) {\n\t\t\treturn runExtensionOp({ socketPath, op, sessionId, payload });\n\t\t},\n\t};\n}\n"]}