@hoilab/ada-cli 0.84.22 → 0.85.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1114) hide show
  1. package/CHANGELOG.md +29 -2
  2. package/README.es.md +17 -6
  3. package/README.md +109 -11
  4. package/dist/ada-publico.d.ts +35 -0
  5. package/dist/ada-publico.d.ts.map +1 -0
  6. package/dist/ada-publico.js +40 -0
  7. package/dist/ada-publico.js.map +1 -0
  8. package/dist/cli/audit-command.d.ts +15 -0
  9. package/dist/cli/audit-command.d.ts.map +1 -0
  10. package/dist/cli/audit-command.js +280 -0
  11. package/dist/cli/audit-command.js.map +1 -0
  12. package/dist/cli/banco-command.d.ts +15 -0
  13. package/dist/cli/banco-command.d.ts.map +1 -0
  14. package/dist/cli/banco-command.js +213 -0
  15. package/dist/cli/banco-command.js.map +1 -0
  16. package/dist/cli/cleanse-command.d.ts +11 -0
  17. package/dist/cli/cleanse-command.d.ts.map +1 -0
  18. package/dist/cli/cleanse-command.js +101 -0
  19. package/dist/cli/cleanse-command.js.map +1 -0
  20. package/dist/cli/commit-command.d.ts +31 -0
  21. package/dist/cli/commit-command.d.ts.map +1 -0
  22. package/dist/cli/commit-command.js +158 -0
  23. package/dist/cli/commit-command.js.map +1 -0
  24. package/dist/cli/computer-command.d.ts +12 -0
  25. package/dist/cli/computer-command.d.ts.map +1 -0
  26. package/dist/cli/computer-command.js +141 -0
  27. package/dist/cli/computer-command.js.map +1 -0
  28. package/dist/cli/discover-command.d.ts +18 -0
  29. package/dist/cli/discover-command.d.ts.map +1 -0
  30. package/dist/cli/discover-command.js +108 -0
  31. package/dist/cli/discover-command.js.map +1 -0
  32. package/dist/cli/hashline-command.d.ts +11 -0
  33. package/dist/cli/hashline-command.d.ts.map +1 -0
  34. package/dist/cli/hashline-command.js +106 -0
  35. package/dist/cli/hashline-command.js.map +1 -0
  36. package/dist/cli/import-command.d.ts +35 -0
  37. package/dist/cli/import-command.d.ts.map +1 -0
  38. package/dist/cli/import-command.js +164 -0
  39. package/dist/cli/import-command.js.map +1 -0
  40. package/dist/cli/politica-command.d.ts +20 -0
  41. package/dist/cli/politica-command.d.ts.map +1 -0
  42. package/dist/cli/politica-command.js +93 -0
  43. package/dist/cli/politica-command.js.map +1 -0
  44. package/dist/cli/refine-command.d.ts +18 -0
  45. package/dist/cli/refine-command.d.ts.map +1 -0
  46. package/dist/cli/refine-command.js +101 -0
  47. package/dist/cli/refine-command.js.map +1 -0
  48. package/dist/cli/review-command.d.ts +24 -0
  49. package/dist/cli/review-command.d.ts.map +1 -0
  50. package/dist/cli/review-command.js +168 -0
  51. package/dist/cli/review-command.js.map +1 -0
  52. package/dist/cli/schedule-command.d.ts +17 -0
  53. package/dist/cli/schedule-command.d.ts.map +1 -0
  54. package/dist/cli/schedule-command.js +117 -0
  55. package/dist/cli/schedule-command.js.map +1 -0
  56. package/dist/cli/serve-command.d.ts +72 -0
  57. package/dist/cli/serve-command.d.ts.map +1 -0
  58. package/dist/cli/serve-command.js +568 -0
  59. package/dist/cli/serve-command.js.map +1 -0
  60. package/dist/cli/telegram-command.d.ts +18 -0
  61. package/dist/cli/telegram-command.d.ts.map +1 -0
  62. package/dist/cli/telegram-command.js +137 -0
  63. package/dist/cli/telegram-command.js.map +1 -0
  64. package/dist/cli/telemetria-command.d.ts +22 -0
  65. package/dist/cli/telemetria-command.d.ts.map +1 -0
  66. package/dist/cli/telemetria-command.js +127 -0
  67. package/dist/cli/telemetria-command.js.map +1 -0
  68. package/dist/cli/undo-command.d.ts +9 -0
  69. package/dist/cli/undo-command.d.ts.map +1 -0
  70. package/dist/cli/undo-command.js +56 -0
  71. package/dist/cli/undo-command.js.map +1 -0
  72. package/dist/cli/usage-command.d.ts +10 -0
  73. package/dist/cli/usage-command.d.ts.map +1 -0
  74. package/dist/cli/usage-command.js +209 -0
  75. package/dist/cli/usage-command.js.map +1 -0
  76. package/dist/cli/wiki-command.d.ts +9 -0
  77. package/dist/cli/wiki-command.d.ts.map +1 -0
  78. package/dist/cli/wiki-command.js +76 -0
  79. package/dist/cli/wiki-command.js.map +1 -0
  80. package/dist/cli.d.ts +6 -0
  81. package/dist/cli.d.ts.map +1 -1
  82. package/dist/cli.js +10 -11
  83. package/dist/cli.js.map +1 -1
  84. package/dist/config.d.ts +1 -1
  85. package/dist/config.d.ts.map +1 -1
  86. package/dist/config.js +1 -1
  87. package/dist/config.js.map +1 -1
  88. package/dist/core/ada.d.ts +58 -0
  89. package/dist/core/ada.d.ts.map +1 -0
  90. package/dist/core/ada.js +61 -0
  91. package/dist/core/ada.js.map +1 -0
  92. package/dist/core/advisor/guarda.d.ts +66 -0
  93. package/dist/core/advisor/guarda.d.ts.map +1 -0
  94. package/dist/core/advisor/guarda.js +191 -0
  95. package/dist/core/advisor/guarda.js.map +1 -0
  96. package/dist/core/advisor/runtime.d.ts +66 -0
  97. package/dist/core/advisor/runtime.d.ts.map +1 -0
  98. package/dist/core/advisor/runtime.js +121 -0
  99. package/dist/core/advisor/runtime.js.map +1 -0
  100. package/dist/core/advisor/sesion.d.ts +109 -0
  101. package/dist/core/advisor/sesion.d.ts.map +1 -0
  102. package/dist/core/advisor/sesion.js +139 -0
  103. package/dist/core/advisor/sesion.js.map +1 -0
  104. package/dist/core/agent-session.d.ts +30 -2
  105. package/dist/core/agent-session.d.ts.map +1 -1
  106. package/dist/core/agent-session.js +430 -22
  107. package/dist/core/agent-session.js.map +1 -1
  108. package/dist/core/agents/loader.d.ts +77 -0
  109. package/dist/core/agents/loader.d.ts.map +1 -0
  110. package/dist/core/agents/loader.js +154 -0
  111. package/dist/core/agents/loader.js.map +1 -0
  112. package/dist/core/aprobacion/generados.d.ts +37 -0
  113. package/dist/core/aprobacion/generados.d.ts.map +1 -0
  114. package/dist/core/aprobacion/generados.js +85 -0
  115. package/dist/core/aprobacion/generados.js.map +1 -0
  116. package/dist/core/aprobacion/politica-de-maquina.d.ts +90 -0
  117. package/dist/core/aprobacion/politica-de-maquina.d.ts.map +1 -0
  118. package/dist/core/aprobacion/politica-de-maquina.js +212 -0
  119. package/dist/core/aprobacion/politica-de-maquina.js.map +1 -0
  120. package/dist/core/aprobacion/politica.d.ts +90 -0
  121. package/dist/core/aprobacion/politica.d.ts.map +1 -0
  122. package/dist/core/aprobacion/politica.js +375 -0
  123. package/dist/core/aprobacion/politica.js.map +1 -0
  124. package/dist/core/arranque/atajos.d.ts +46 -0
  125. package/dist/core/arranque/atajos.d.ts.map +1 -0
  126. package/dist/core/arranque/atajos.js +113 -0
  127. package/dist/core/arranque/atajos.js.map +1 -0
  128. package/dist/core/audit/exportacion.d.ts +54 -0
  129. package/dist/core/audit/exportacion.d.ts.map +1 -0
  130. package/dist/core/audit/exportacion.js +265 -0
  131. package/dist/core/audit/exportacion.js.map +1 -0
  132. package/dist/core/audit/libro.d.ts +318 -0
  133. package/dist/core/audit/libro.d.ts.map +1 -0
  134. package/dist/core/audit/libro.js +508 -0
  135. package/dist/core/audit/libro.js.map +1 -0
  136. package/dist/core/audit/registro-sesion.d.ts +78 -0
  137. package/dist/core/audit/registro-sesion.d.ts.map +1 -0
  138. package/dist/core/audit/registro-sesion.js +202 -0
  139. package/dist/core/audit/registro-sesion.js.map +1 -0
  140. package/dist/core/audit/retencion.d.ts +82 -0
  141. package/dist/core/audit/retencion.d.ts.map +1 -0
  142. package/dist/core/audit/retencion.js +152 -0
  143. package/dist/core/audit/retencion.js.map +1 -0
  144. package/dist/core/audit/rutas.d.ts +23 -0
  145. package/dist/core/audit/rutas.d.ts.map +1 -0
  146. package/dist/core/audit/rutas.js +23 -0
  147. package/dist/core/audit/rutas.js.map +1 -0
  148. package/dist/core/auth-storage.d.ts +0 -3
  149. package/dist/core/auth-storage.d.ts.map +1 -1
  150. package/dist/core/auth-storage.js +17 -5
  151. package/dist/core/auth-storage.js.map +1 -1
  152. package/dist/core/banco/almacenamiento.d.ts +18 -0
  153. package/dist/core/banco/almacenamiento.d.ts.map +1 -0
  154. package/dist/core/banco/almacenamiento.js +50 -0
  155. package/dist/core/banco/almacenamiento.js.map +1 -0
  156. package/dist/core/banco/analisis.d.ts +37 -0
  157. package/dist/core/banco/analisis.d.ts.map +1 -0
  158. package/dist/core/banco/analisis.js +164 -0
  159. package/dist/core/banco/analisis.js.map +1 -0
  160. package/dist/core/banco/bloques.d.ts +39 -0
  161. package/dist/core/banco/bloques.d.ts.map +1 -0
  162. package/dist/core/banco/bloques.js +84 -0
  163. package/dist/core/banco/bloques.js.map +1 -0
  164. package/dist/core/banco/cargas.d.ts +84 -0
  165. package/dist/core/banco/cargas.d.ts.map +1 -0
  166. package/dist/core/banco/cargas.js +520 -0
  167. package/dist/core/banco/cargas.js.map +1 -0
  168. package/dist/core/banco/comparar.d.ts +29 -0
  169. package/dist/core/banco/comparar.d.ts.map +1 -0
  170. package/dist/core/banco/comparar.js +28 -0
  171. package/dist/core/banco/comparar.js.map +1 -0
  172. package/dist/core/banco/ejecutar.d.ts +44 -0
  173. package/dist/core/banco/ejecutar.d.ts.map +1 -0
  174. package/dist/core/banco/ejecutar.js +183 -0
  175. package/dist/core/banco/ejecutar.js.map +1 -0
  176. package/dist/core/banco/generar.d.ts +24 -0
  177. package/dist/core/banco/generar.d.ts.map +1 -0
  178. package/dist/core/banco/generar.js +159 -0
  179. package/dist/core/banco/generar.js.map +1 -0
  180. package/dist/core/banco/mutaciones.d.ts +25 -0
  181. package/dist/core/banco/mutaciones.d.ts.map +1 -0
  182. package/dist/core/banco/mutaciones.js +215 -0
  183. package/dist/core/banco/mutaciones.js.map +1 -0
  184. package/dist/core/banco/tipos.d.ts +121 -0
  185. package/dist/core/banco/tipos.d.ts.map +1 -0
  186. package/dist/core/banco/tipos.js +16 -0
  187. package/dist/core/banco/tipos.js.map +1 -0
  188. package/dist/core/blobs/almacen.d.ts +81 -0
  189. package/dist/core/blobs/almacen.d.ts.map +1 -0
  190. package/dist/core/blobs/almacen.js +198 -0
  191. package/dist/core/blobs/almacen.js.map +1 -0
  192. package/dist/core/blobs/broker.d.ts +103 -0
  193. package/dist/core/blobs/broker.d.ts.map +1 -0
  194. package/dist/core/blobs/broker.js +204 -0
  195. package/dist/core/blobs/broker.js.map +1 -0
  196. package/dist/core/blobs/index.d.ts +70 -0
  197. package/dist/core/blobs/index.d.ts.map +1 -0
  198. package/dist/core/blobs/index.js +232 -0
  199. package/dist/core/blobs/index.js.map +1 -0
  200. package/dist/core/blobs/payload.d.ts +55 -0
  201. package/dist/core/blobs/payload.d.ts.map +1 -0
  202. package/dist/core/blobs/payload.js +255 -0
  203. package/dist/core/blobs/payload.js.map +1 -0
  204. package/dist/core/blobs/proveedor.d.ts +85 -0
  205. package/dist/core/blobs/proveedor.d.ts.map +1 -0
  206. package/dist/core/blobs/proveedor.js +196 -0
  207. package/dist/core/blobs/proveedor.js.map +1 -0
  208. package/dist/core/browser/cdp.d.ts +41 -0
  209. package/dist/core/browser/cdp.d.ts.map +1 -0
  210. package/dist/core/browser/cdp.js +119 -0
  211. package/dist/core/browser/cdp.js.map +1 -0
  212. package/dist/core/browser/politica.d.ts +51 -0
  213. package/dist/core/browser/politica.d.ts.map +1 -0
  214. package/dist/core/browser/politica.js +123 -0
  215. package/dist/core/browser/politica.js.map +1 -0
  216. package/dist/core/browser/sesion.d.ts +52 -0
  217. package/dist/core/browser/sesion.d.ts.map +1 -0
  218. package/dist/core/browser/sesion.js +176 -0
  219. package/dist/core/browser/sesion.js.map +1 -0
  220. package/dist/core/browser/tools.d.ts +16 -0
  221. package/dist/core/browser/tools.d.ts.map +1 -0
  222. package/dist/core/browser/tools.js +279 -0
  223. package/dist/core/browser/tools.js.map +1 -0
  224. package/dist/core/commit/diff.d.ts +56 -0
  225. package/dist/core/commit/diff.d.ts.map +1 -0
  226. package/dist/core/commit/diff.js +145 -0
  227. package/dist/core/commit/diff.js.map +1 -0
  228. package/dist/core/commit/mensaje.d.ts +80 -0
  229. package/dist/core/commit/mensaje.d.ts.map +1 -0
  230. package/dist/core/commit/mensaje.js +207 -0
  231. package/dist/core/commit/mensaje.js.map +1 -0
  232. package/dist/core/compactar/index.d.ts +52 -0
  233. package/dist/core/compactar/index.d.ts.map +1 -0
  234. package/dist/core/compactar/index.js +91 -0
  235. package/dist/core/compactar/index.js.map +1 -0
  236. package/dist/core/compactar/registro-denso.d.ts +160 -0
  237. package/dist/core/compactar/registro-denso.d.ts.map +1 -0
  238. package/dist/core/compactar/registro-denso.js +620 -0
  239. package/dist/core/compactar/registro-denso.js.map +1 -0
  240. package/dist/core/computer/captura.d.ts +35 -0
  241. package/dist/core/computer/captura.d.ts.map +1 -0
  242. package/dist/core/computer/captura.js +140 -0
  243. package/dist/core/computer/captura.js.map +1 -0
  244. package/dist/core/computer/driver.d.ts +130 -0
  245. package/dist/core/computer/driver.d.ts.map +1 -0
  246. package/dist/core/computer/driver.js +206 -0
  247. package/dist/core/computer/driver.js.map +1 -0
  248. package/dist/core/computer/motor/actions.d.ts +109 -0
  249. package/dist/core/computer/motor/actions.d.ts.map +1 -0
  250. package/dist/core/computer/motor/actions.js +157 -0
  251. package/dist/core/computer/motor/actions.js.map +1 -0
  252. package/dist/core/computer/motor/bridge.d.ts +232 -0
  253. package/dist/core/computer/motor/bridge.d.ts.map +1 -0
  254. package/dist/core/computer/motor/bridge.js +2335 -0
  255. package/dist/core/computer/motor/bridge.js.map +1 -0
  256. package/dist/core/computer/motor/cdp.d.ts +107 -0
  257. package/dist/core/computer/motor/cdp.d.ts.map +1 -0
  258. package/dist/core/computer/motor/cdp.js +659 -0
  259. package/dist/core/computer/motor/cdp.js.map +1 -0
  260. package/dist/core/computer/motor/config.d.ts +23 -0
  261. package/dist/core/computer/motor/config.d.ts.map +1 -0
  262. package/dist/core/computer/motor/config.js +100 -0
  263. package/dist/core/computer/motor/config.js.map +1 -0
  264. package/dist/core/computer/motor/contract.d.ts +81 -0
  265. package/dist/core/computer/motor/contract.d.ts.map +1 -0
  266. package/dist/core/computer/motor/contract.js +14 -0
  267. package/dist/core/computer/motor/contract.js.map +1 -0
  268. package/dist/core/computer/motor/note.d.ts +37 -0
  269. package/dist/core/computer/motor/note.d.ts.map +1 -0
  270. package/dist/core/computer/motor/note.js +162 -0
  271. package/dist/core/computer/motor/note.js.map +1 -0
  272. package/dist/core/computer/motor/outline.d.ts +155 -0
  273. package/dist/core/computer/motor/outline.d.ts.map +1 -0
  274. package/dist/core/computer/motor/outline.js +590 -0
  275. package/dist/core/computer/motor/outline.js.map +1 -0
  276. package/dist/core/computer/motor/output.d.ts +18 -0
  277. package/dist/core/computer/motor/output.d.ts.map +1 -0
  278. package/dist/core/computer/motor/output.js +148 -0
  279. package/dist/core/computer/motor/output.js.map +1 -0
  280. package/dist/core/computer/motor/permissions.d.ts +41 -0
  281. package/dist/core/computer/motor/permissions.d.ts.map +1 -0
  282. package/dist/core/computer/motor/permissions.js +51 -0
  283. package/dist/core/computer/motor/permissions.js.map +1 -0
  284. package/dist/core/computer/motor/platform/architecture.d.ts +5 -0
  285. package/dist/core/computer/motor/platform/architecture.d.ts.map +1 -0
  286. package/dist/core/computer/motor/platform/architecture.js +21 -0
  287. package/dist/core/computer/motor/platform/architecture.js.map +1 -0
  288. package/dist/core/computer/motor/platform/coerce.d.ts +4 -0
  289. package/dist/core/computer/motor/platform/coerce.d.ts.map +1 -0
  290. package/dist/core/computer/motor/platform/coerce.js +17 -0
  291. package/dist/core/computer/motor/platform/coerce.js.map +1 -0
  292. package/dist/core/computer/motor/platform/index.d.ts +4 -0
  293. package/dist/core/computer/motor/platform/index.d.ts.map +1 -0
  294. package/dist/core/computer/motor/platform/index.js +79 -0
  295. package/dist/core/computer/motor/platform/index.js.map +1 -0
  296. package/dist/core/computer/motor/platform/linux/backend.d.ts +3 -0
  297. package/dist/core/computer/motor/platform/linux/backend.d.ts.map +1 -0
  298. package/dist/core/computer/motor/platform/linux/backend.js +173 -0
  299. package/dist/core/computer/motor/platform/linux/backend.js.map +1 -0
  300. package/dist/core/computer/motor/platform/linux/helper.d.ts +29 -0
  301. package/dist/core/computer/motor/platform/linux/helper.d.ts.map +1 -0
  302. package/dist/core/computer/motor/platform/linux/helper.js +261 -0
  303. package/dist/core/computer/motor/platform/linux/helper.js.map +1 -0
  304. package/dist/core/computer/motor/platform/macos/backend.d.ts +3 -0
  305. package/dist/core/computer/motor/platform/macos/backend.d.ts.map +1 -0
  306. package/dist/core/computer/motor/platform/macos/backend.js +124 -0
  307. package/dist/core/computer/motor/platform/macos/backend.js.map +1 -0
  308. package/dist/core/computer/motor/platform/macos/browser.d.ts +7 -0
  309. package/dist/core/computer/motor/platform/macos/browser.d.ts.map +1 -0
  310. package/dist/core/computer/motor/platform/macos/browser.js +101 -0
  311. package/dist/core/computer/motor/platform/macos/browser.js.map +1 -0
  312. package/dist/core/computer/motor/platform/macos/helper-path.mjs +34 -0
  313. package/dist/core/computer/motor/platform/macos/helper.d.ts +32 -0
  314. package/dist/core/computer/motor/platform/macos/helper.d.ts.map +1 -0
  315. package/dist/core/computer/motor/platform/macos/helper.js +277 -0
  316. package/dist/core/computer/motor/platform/macos/helper.js.map +1 -0
  317. package/dist/core/computer/motor/platform/macos/permissions.d.ts +4 -0
  318. package/dist/core/computer/motor/platform/macos/permissions.d.ts.map +1 -0
  319. package/dist/core/computer/motor/platform/macos/permissions.js +118 -0
  320. package/dist/core/computer/motor/platform/macos/permissions.js.map +1 -0
  321. package/dist/core/computer/motor/platform/types.d.ts +263 -0
  322. package/dist/core/computer/motor/platform/types.d.ts.map +1 -0
  323. package/dist/core/computer/motor/platform/types.js +2 -0
  324. package/dist/core/computer/motor/platform/types.js.map +1 -0
  325. package/dist/core/computer/motor/platform/windows/backend.d.ts +3 -0
  326. package/dist/core/computer/motor/platform/windows/backend.d.ts.map +1 -0
  327. package/dist/core/computer/motor/platform/windows/backend.js +163 -0
  328. package/dist/core/computer/motor/platform/windows/backend.js.map +1 -0
  329. package/dist/core/computer/motor/platform/windows/helper.d.ts +18 -0
  330. package/dist/core/computer/motor/platform/windows/helper.d.ts.map +1 -0
  331. package/dist/core/computer/motor/platform/windows/helper.js +174 -0
  332. package/dist/core/computer/motor/platform/windows/helper.js.map +1 -0
  333. package/dist/core/computer/motor/root-selection.d.ts +6 -0
  334. package/dist/core/computer/motor/root-selection.d.ts.map +1 -0
  335. package/dist/core/computer/motor/root-selection.js +28 -0
  336. package/dist/core/computer/motor/root-selection.js.map +1 -0
  337. package/dist/core/computer/motor/runtime.d.ts +50 -0
  338. package/dist/core/computer/motor/runtime.d.ts.map +1 -0
  339. package/dist/core/computer/motor/runtime.js +119 -0
  340. package/dist/core/computer/motor/runtime.js.map +1 -0
  341. package/dist/core/computer/motor/state.d.ts +68 -0
  342. package/dist/core/computer/motor/state.d.ts.map +1 -0
  343. package/dist/core/computer/motor/state.js +100 -0
  344. package/dist/core/computer/motor/state.js.map +1 -0
  345. package/dist/core/computer/motor/view.d.ts +6 -0
  346. package/dist/core/computer/motor/view.d.ts.map +1 -0
  347. package/dist/core/computer/motor/view.js +185 -0
  348. package/dist/core/computer/motor/view.js.map +1 -0
  349. package/dist/core/computer/motor-ada.d.ts +159 -0
  350. package/dist/core/computer/motor-ada.d.ts.map +1 -0
  351. package/dist/core/computer/motor-ada.js +412 -0
  352. package/dist/core/computer/motor-ada.js.map +1 -0
  353. package/dist/core/computer/politica.d.ts +56 -0
  354. package/dist/core/computer/politica.d.ts.map +1 -0
  355. package/dist/core/computer/politica.js +163 -0
  356. package/dist/core/computer/politica.js.map +1 -0
  357. package/dist/core/computer/tools.d.ts +26 -0
  358. package/dist/core/computer/tools.d.ts.map +1 -0
  359. package/dist/core/computer/tools.js +399 -0
  360. package/dist/core/computer/tools.js.map +1 -0
  361. package/dist/core/context-breakdown.d.ts +80 -0
  362. package/dist/core/context-breakdown.d.ts.map +1 -0
  363. package/dist/core/context-breakdown.js +87 -0
  364. package/dist/core/context-breakdown.js.map +1 -0
  365. package/dist/core/credenciales/cliente.d.ts +60 -0
  366. package/dist/core/credenciales/cliente.d.ts.map +1 -0
  367. package/dist/core/credenciales/cliente.js +81 -0
  368. package/dist/core/credenciales/cliente.js.map +1 -0
  369. package/dist/core/credenciales/pool.d.ts +96 -0
  370. package/dist/core/credenciales/pool.d.ts.map +1 -0
  371. package/dist/core/credenciales/pool.js +128 -0
  372. package/dist/core/credenciales/pool.js.map +1 -0
  373. package/dist/core/credenciales/reposo.d.ts +93 -0
  374. package/dist/core/credenciales/reposo.d.ts.map +1 -0
  375. package/dist/core/credenciales/reposo.js +489 -0
  376. package/dist/core/credenciales/reposo.js.map +1 -0
  377. package/dist/core/credenciales/servidor.d.ts +55 -0
  378. package/dist/core/credenciales/servidor.d.ts.map +1 -0
  379. package/dist/core/credenciales/servidor.js +205 -0
  380. package/dist/core/credenciales/servidor.js.map +1 -0
  381. package/dist/core/descubrimiento/comandos.d.ts +30 -0
  382. package/dist/core/descubrimiento/comandos.d.ts.map +1 -0
  383. package/dist/core/descubrimiento/comandos.js +76 -0
  384. package/dist/core/descubrimiento/comandos.js.map +1 -0
  385. package/dist/core/descubrimiento/mcp.d.ts +42 -0
  386. package/dist/core/descubrimiento/mcp.d.ts.map +1 -0
  387. package/dist/core/descubrimiento/mcp.js +130 -0
  388. package/dist/core/descubrimiento/mcp.js.map +1 -0
  389. package/dist/core/descubrimiento/reglas.d.ts +61 -0
  390. package/dist/core/descubrimiento/reglas.d.ts.map +1 -0
  391. package/dist/core/descubrimiento/reglas.js +134 -0
  392. package/dist/core/descubrimiento/reglas.js.map +1 -0
  393. package/dist/core/descubrimiento/skills.d.ts +57 -0
  394. package/dist/core/descubrimiento/skills.d.ts.map +1 -0
  395. package/dist/core/descubrimiento/skills.js +113 -0
  396. package/dist/core/descubrimiento/skills.js.map +1 -0
  397. package/dist/core/dificultad/clasificador.d.ts +133 -0
  398. package/dist/core/dificultad/clasificador.d.ts.map +1 -0
  399. package/dist/core/dificultad/clasificador.js +288 -0
  400. package/dist/core/dificultad/clasificador.js.map +1 -0
  401. package/dist/core/edicion/diario.d.ts +37 -0
  402. package/dist/core/edicion/diario.d.ts.map +1 -0
  403. package/dist/core/edicion/diario.js +51 -0
  404. package/dist/core/edicion/diario.js.map +1 -0
  405. package/dist/core/edicion/hashline.d.ts +71 -0
  406. package/dist/core/edicion/hashline.d.ts.map +1 -0
  407. package/dist/core/edicion/hashline.js +111 -0
  408. package/dist/core/edicion/hashline.js.map +1 -0
  409. package/dist/core/edicion/hueco.d.ts +64 -0
  410. package/dist/core/edicion/hueco.d.ts.map +1 -0
  411. package/dist/core/edicion/hueco.js +162 -0
  412. package/dist/core/edicion/hueco.js.map +1 -0
  413. package/dist/core/edicion/limpiar-carga.d.ts +39 -0
  414. package/dist/core/edicion/limpiar-carga.d.ts.map +1 -0
  415. package/dist/core/edicion/limpiar-carga.js +121 -0
  416. package/dist/core/edicion/limpiar-carga.js.map +1 -0
  417. package/dist/core/edicion/observador.d.ts +80 -0
  418. package/dist/core/edicion/observador.d.ts.map +1 -0
  419. package/dist/core/edicion/observador.js +183 -0
  420. package/dist/core/edicion/observador.js.map +1 -0
  421. package/dist/core/edicion/parecido.d.ts +53 -0
  422. package/dist/core/edicion/parecido.d.ts.map +1 -0
  423. package/dist/core/edicion/parecido.js +145 -0
  424. package/dist/core/edicion/parecido.js.map +1 -0
  425. package/dist/core/edicion/parseo.d.ts +58 -0
  426. package/dist/core/edicion/parseo.d.ts.map +1 -0
  427. package/dist/core/edicion/parseo.js +124 -0
  428. package/dist/core/edicion/parseo.js.map +1 -0
  429. package/dist/core/edicion/reparacion.d.ts +67 -0
  430. package/dist/core/edicion/reparacion.d.ts.map +1 -0
  431. package/dist/core/edicion/reparacion.js +202 -0
  432. package/dist/core/edicion/reparacion.js.map +1 -0
  433. package/dist/core/edicion/sangria.d.ts +121 -0
  434. package/dist/core/edicion/sangria.d.ts.map +1 -0
  435. package/dist/core/edicion/sangria.js +341 -0
  436. package/dist/core/edicion/sangria.js.map +1 -0
  437. package/dist/core/edicion/tipos.d.ts +58 -0
  438. package/dist/core/edicion/tipos.d.ts.map +1 -0
  439. package/dist/core/edicion/tipos.js +160 -0
  440. package/dist/core/edicion/tipos.js.map +1 -0
  441. package/dist/core/errores/proveedor.d.ts +53 -0
  442. package/dist/core/errores/proveedor.d.ts.map +1 -0
  443. package/dist/core/errores/proveedor.js +191 -0
  444. package/dist/core/errores/proveedor.js.map +1 -0
  445. package/dist/core/estructural/buscar.d.ts +61 -0
  446. package/dist/core/estructural/buscar.d.ts.map +1 -0
  447. package/dist/core/estructural/buscar.js +261 -0
  448. package/dist/core/estructural/buscar.js.map +1 -0
  449. package/dist/core/estructural/editar.d.ts +36 -0
  450. package/dist/core/estructural/editar.d.ts.map +1 -0
  451. package/dist/core/estructural/editar.js +123 -0
  452. package/dist/core/estructural/editar.js.map +1 -0
  453. package/dist/core/estructural/tools.d.ts +11 -0
  454. package/dist/core/estructural/tools.d.ts.map +1 -0
  455. package/dist/core/estructural/tools.js +100 -0
  456. package/dist/core/estructural/tools.js.map +1 -0
  457. package/dist/core/experimental.d.ts.map +1 -1
  458. package/dist/core/experimental.js +10 -1
  459. package/dist/core/experimental.js.map +1 -1
  460. package/dist/core/extensiones/suplantacion.d.ts +49 -0
  461. package/dist/core/extensiones/suplantacion.d.ts.map +1 -0
  462. package/dist/core/extensiones/suplantacion.js +61 -0
  463. package/dist/core/extensiones/suplantacion.js.map +1 -0
  464. package/dist/core/extensiones/vigilancia.d.ts +54 -0
  465. package/dist/core/extensiones/vigilancia.d.ts.map +1 -0
  466. package/dist/core/extensiones/vigilancia.js +217 -0
  467. package/dist/core/extensiones/vigilancia.js.map +1 -0
  468. package/dist/core/extensions/loader.d.ts.map +1 -1
  469. package/dist/core/extensions/loader.js +11 -1
  470. package/dist/core/extensions/loader.js.map +1 -1
  471. package/dist/core/harness/fuentes-de-contexto.d.ts +29 -0
  472. package/dist/core/harness/fuentes-de-contexto.d.ts.map +1 -0
  473. package/dist/core/harness/fuentes-de-contexto.js +44 -0
  474. package/dist/core/harness/fuentes-de-contexto.js.map +1 -0
  475. package/dist/core/harness/refine.d.ts +40 -0
  476. package/dist/core/harness/refine.d.ts.map +1 -0
  477. package/dist/core/harness/refine.js +109 -0
  478. package/dist/core/harness/refine.js.map +1 -0
  479. package/dist/core/harness/store.d.ts +75 -0
  480. package/dist/core/harness/store.d.ts.map +1 -0
  481. package/dist/core/harness/store.js +149 -0
  482. package/dist/core/harness/store.js.map +1 -0
  483. package/dist/core/hooks/contract.d.ts +85 -0
  484. package/dist/core/hooks/contract.d.ts.map +1 -0
  485. package/dist/core/hooks/contract.js +140 -0
  486. package/dist/core/hooks/contract.js.map +1 -0
  487. package/dist/core/hooks/runner.d.ts +42 -0
  488. package/dist/core/hooks/runner.d.ts.map +1 -0
  489. package/dist/core/hooks/runner.js +85 -0
  490. package/dist/core/hooks/runner.js.map +1 -0
  491. package/dist/core/hooks/session-hooks.d.ts +62 -0
  492. package/dist/core/hooks/session-hooks.d.ts.map +1 -0
  493. package/dist/core/hooks/session-hooks.js +84 -0
  494. package/dist/core/hooks/session-hooks.js.map +1 -0
  495. package/dist/core/importar/formatos.d.ts +69 -0
  496. package/dist/core/importar/formatos.d.ts.map +1 -0
  497. package/dist/core/importar/formatos.js +235 -0
  498. package/dist/core/importar/formatos.js.map +1 -0
  499. package/dist/core/interactivo/deteccion.d.ts +44 -0
  500. package/dist/core/interactivo/deteccion.d.ts.map +1 -0
  501. package/dist/core/interactivo/deteccion.js +82 -0
  502. package/dist/core/interactivo/deteccion.js.map +1 -0
  503. package/dist/core/interactivo/sesion.d.ts +50 -0
  504. package/dist/core/interactivo/sesion.d.ts.map +1 -0
  505. package/dist/core/interactivo/sesion.js +156 -0
  506. package/dist/core/interactivo/sesion.js.map +1 -0
  507. package/dist/core/interactivo/tools.d.ts +21 -0
  508. package/dist/core/interactivo/tools.d.ts.map +1 -0
  509. package/dist/core/interactivo/tools.js +122 -0
  510. package/dist/core/interactivo/tools.js.map +1 -0
  511. package/dist/core/lectura/mapa.d.ts +70 -0
  512. package/dist/core/lectura/mapa.d.ts.map +1 -0
  513. package/dist/core/lectura/mapa.js +177 -0
  514. package/dist/core/lectura/mapa.js.map +1 -0
  515. package/dist/core/lectura/pdf.d.ts +49 -0
  516. package/dist/core/lectura/pdf.d.ts.map +1 -0
  517. package/dist/core/lectura/pdf.js +337 -0
  518. package/dist/core/lectura/pdf.js.map +1 -0
  519. package/dist/core/limpieza/comprobadores.d.ts +28 -0
  520. package/dist/core/limpieza/comprobadores.d.ts.map +1 -0
  521. package/dist/core/limpieza/comprobadores.js +311 -0
  522. package/dist/core/limpieza/comprobadores.js.map +1 -0
  523. package/dist/core/limpieza/parseo.d.ts +19 -0
  524. package/dist/core/limpieza/parseo.d.ts.map +1 -0
  525. package/dist/core/limpieza/parseo.js +124 -0
  526. package/dist/core/limpieza/parseo.js.map +1 -0
  527. package/dist/core/limpieza/reparacion.d.ts +77 -0
  528. package/dist/core/limpieza/reparacion.d.ts.map +1 -0
  529. package/dist/core/limpieza/reparacion.js +254 -0
  530. package/dist/core/limpieza/reparacion.js.map +1 -0
  531. package/dist/core/limpieza/tipos.d.ts +56 -0
  532. package/dist/core/limpieza/tipos.d.ts.map +1 -0
  533. package/dist/core/limpieza/tipos.js +9 -0
  534. package/dist/core/limpieza/tipos.js.map +1 -0
  535. package/dist/core/lsp/cliente.d.ts +52 -0
  536. package/dist/core/lsp/cliente.d.ts.map +1 -0
  537. package/dist/core/lsp/cliente.js +232 -0
  538. package/dist/core/lsp/cliente.js.map +1 -0
  539. package/dist/core/lsp/descubrimiento.d.ts +62 -0
  540. package/dist/core/lsp/descubrimiento.d.ts.map +1 -0
  541. package/dist/core/lsp/descubrimiento.js +152 -0
  542. package/dist/core/lsp/descubrimiento.js.map +1 -0
  543. package/dist/core/lsp/ediciones.d.ts +59 -0
  544. package/dist/core/lsp/ediciones.d.ts.map +1 -0
  545. package/dist/core/lsp/ediciones.js +89 -0
  546. package/dist/core/lsp/ediciones.js.map +1 -0
  547. package/dist/core/lsp/extension.d.ts +28 -0
  548. package/dist/core/lsp/extension.d.ts.map +1 -0
  549. package/dist/core/lsp/extension.js +34 -0
  550. package/dist/core/lsp/extension.js.map +1 -0
  551. package/dist/core/lsp/tools.d.ts +45 -0
  552. package/dist/core/lsp/tools.d.ts.map +1 -0
  553. package/dist/core/lsp/tools.js +265 -0
  554. package/dist/core/lsp/tools.js.map +1 -0
  555. package/dist/core/mcp/client.d.ts +60 -0
  556. package/dist/core/mcp/client.d.ts.map +1 -0
  557. package/dist/core/mcp/client.js +139 -0
  558. package/dist/core/mcp/client.js.map +1 -0
  559. package/dist/core/mcp/manager.d.ts +86 -0
  560. package/dist/core/mcp/manager.d.ts.map +1 -0
  561. package/dist/core/mcp/manager.js +124 -0
  562. package/dist/core/mcp/manager.js.map +1 -0
  563. package/dist/core/mcp/tools.d.ts +15 -0
  564. package/dist/core/mcp/tools.d.ts.map +1 -0
  565. package/dist/core/mcp/tools.js +84 -0
  566. package/dist/core/mcp/tools.js.map +1 -0
  567. package/dist/core/memory-engine/audit-export.d.ts +12 -10
  568. package/dist/core/memory-engine/audit-export.d.ts.map +1 -1
  569. package/dist/core/memory-engine/audit-export.js +15 -0
  570. package/dist/core/memory-engine/audit-export.js.map +1 -1
  571. package/dist/core/memory-engine/audit-indice.d.ts +153 -0
  572. package/dist/core/memory-engine/audit-indice.d.ts.map +1 -0
  573. package/dist/core/memory-engine/audit-indice.js +271 -0
  574. package/dist/core/memory-engine/audit-indice.js.map +1 -0
  575. package/dist/core/memory-engine/audit.d.ts +18 -6
  576. package/dist/core/memory-engine/audit.d.ts.map +1 -1
  577. package/dist/core/memory-engine/audit.js +25 -42
  578. package/dist/core/memory-engine/audit.js.map +1 -1
  579. package/dist/core/memory-engine/engine.d.ts +19 -1
  580. package/dist/core/memory-engine/engine.d.ts.map +1 -1
  581. package/dist/core/memory-engine/engine.js +71 -5
  582. package/dist/core/memory-engine/engine.js.map +1 -1
  583. package/dist/core/memory-engine/observation-store.d.ts +0 -2
  584. package/dist/core/memory-engine/observation-store.d.ts.map +1 -1
  585. package/dist/core/memory-engine/observation-store.js +4 -5
  586. package/dist/core/memory-engine/observation-store.js.map +1 -1
  587. package/dist/core/memory-engine/refinements.d.ts +51 -0
  588. package/dist/core/memory-engine/refinements.d.ts.map +1 -0
  589. package/dist/core/memory-engine/refinements.js +99 -0
  590. package/dist/core/memory-engine/refinements.js.map +1 -0
  591. package/dist/core/memory-engine/tools.d.ts.map +1 -1
  592. package/dist/core/memory-engine/tools.js +27 -1
  593. package/dist/core/memory-engine/tools.js.map +1 -1
  594. package/dist/core/memory-engine/types.d.ts +2 -0
  595. package/dist/core/memory-engine/types.d.ts.map +1 -1
  596. package/dist/core/memory-engine/types.js.map +1 -1
  597. package/dist/core/model-resolver.d.ts.map +1 -1
  598. package/dist/core/model-resolver.js +7 -1
  599. package/dist/core/model-resolver.js.map +1 -1
  600. package/dist/core/muestreo-restringido.d.ts +49 -0
  601. package/dist/core/muestreo-restringido.d.ts.map +1 -0
  602. package/dist/core/muestreo-restringido.js +65 -0
  603. package/dist/core/muestreo-restringido.js.map +1 -0
  604. package/dist/core/orphan-process-journal.d.ts +48 -0
  605. package/dist/core/orphan-process-journal.d.ts.map +1 -0
  606. package/dist/core/orphan-process-journal.js +116 -0
  607. package/dist/core/orphan-process-journal.js.map +1 -0
  608. package/dist/core/privacidad/categorias-especiales.d.ts +186 -0
  609. package/dist/core/privacidad/categorias-especiales.d.ts.map +1 -0
  610. package/dist/core/privacidad/categorias-especiales.js +745 -0
  611. package/dist/core/privacidad/categorias-especiales.js.map +1 -0
  612. package/dist/core/privacidad/tapar.d.ts +48 -0
  613. package/dist/core/privacidad/tapar.d.ts.map +1 -0
  614. package/dist/core/privacidad/tapar.js +66 -0
  615. package/dist/core/privacidad/tapar.js.map +1 -0
  616. package/dist/core/prompt-cache/diagnostics.d.ts +33 -0
  617. package/dist/core/prompt-cache/diagnostics.d.ts.map +1 -0
  618. package/dist/core/prompt-cache/diagnostics.js +100 -0
  619. package/dist/core/prompt-cache/diagnostics.js.map +1 -0
  620. package/dist/core/prompt-cache/index.d.ts +33 -0
  621. package/dist/core/prompt-cache/index.d.ts.map +1 -0
  622. package/dist/core/prompt-cache/index.js +189 -0
  623. package/dist/core/prompt-cache/index.js.map +1 -0
  624. package/dist/core/prompt-cache/payload.d.ts +58 -0
  625. package/dist/core/prompt-cache/payload.d.ts.map +1 -0
  626. package/dist/core/prompt-cache/payload.js +122 -0
  627. package/dist/core/prompt-cache/payload.js.map +1 -0
  628. package/dist/core/prompt-cache/stabilize.d.ts +65 -0
  629. package/dist/core/prompt-cache/stabilize.d.ts.map +1 -0
  630. package/dist/core/prompt-cache/stabilize.js +137 -0
  631. package/dist/core/prompt-cache/stabilize.js.map +1 -0
  632. package/dist/core/prompt-cache/stats.d.ts +55 -0
  633. package/dist/core/prompt-cache/stats.d.ts.map +1 -0
  634. package/dist/core/prompt-cache/stats.js +158 -0
  635. package/dist/core/prompt-cache/stats.js.map +1 -0
  636. package/dist/core/prompt-eleccion.d.ts +38 -0
  637. package/dist/core/prompt-eleccion.d.ts.map +1 -0
  638. package/dist/core/prompt-eleccion.js +46 -0
  639. package/dist/core/prompt-eleccion.js.map +1 -0
  640. package/dist/core/prompts/montar.d.ts +75 -0
  641. package/dist/core/prompts/montar.d.ts.map +1 -0
  642. package/dist/core/prompts/montar.js +146 -0
  643. package/dist/core/prompts/montar.js.map +1 -0
  644. package/dist/core/prompts/plantilla.d.ts +54 -0
  645. package/dist/core/prompts/plantilla.d.ts.map +1 -0
  646. package/dist/core/prompts/plantilla.js +153 -0
  647. package/dist/core/prompts/plantilla.js.map +1 -0
  648. package/dist/core/prompts/sistema.md +134 -0
  649. package/dist/core/provider-attribution.d.ts +24 -2
  650. package/dist/core/provider-attribution.d.ts.map +1 -1
  651. package/dist/core/provider-attribution.js +24 -42
  652. package/dist/core/provider-attribution.js.map +1 -1
  653. package/dist/core/remoto/destino.d.ts +38 -0
  654. package/dist/core/remoto/destino.d.ts.map +1 -0
  655. package/dist/core/remoto/destino.js +105 -0
  656. package/dist/core/remoto/destino.js.map +1 -0
  657. package/dist/core/remoto/ejecutor.d.ts +59 -0
  658. package/dist/core/remoto/ejecutor.d.ts.map +1 -0
  659. package/dist/core/remoto/ejecutor.js +225 -0
  660. package/dist/core/remoto/ejecutor.js.map +1 -0
  661. package/dist/core/remoto/ficheros.d.ts +29 -0
  662. package/dist/core/remoto/ficheros.d.ts.map +1 -0
  663. package/dist/core/remoto/ficheros.js +90 -0
  664. package/dist/core/remoto/ficheros.js.map +1 -0
  665. package/dist/core/remoto/registro-extension.d.ts +15 -0
  666. package/dist/core/remoto/registro-extension.d.ts.map +1 -0
  667. package/dist/core/remoto/registro-extension.js +17 -0
  668. package/dist/core/remoto/registro-extension.js.map +1 -0
  669. package/dist/core/remoto/tools.d.ts +28 -0
  670. package/dist/core/remoto/tools.d.ts.map +1 -0
  671. package/dist/core/remoto/tools.js +31 -0
  672. package/dist/core/remoto/tools.js.map +1 -0
  673. package/dist/core/resource-loader.d.ts +8 -0
  674. package/dist/core/resource-loader.d.ts.map +1 -1
  675. package/dist/core/resource-loader.js +93 -1
  676. package/dist/core/resource-loader.js.map +1 -1
  677. package/dist/core/revision/hallazgo.d.ts +51 -0
  678. package/dist/core/revision/hallazgo.d.ts.map +1 -0
  679. package/dist/core/revision/hallazgo.js +73 -0
  680. package/dist/core/revision/hallazgo.js.map +1 -0
  681. package/dist/core/revision/revisor.d.ts +81 -0
  682. package/dist/core/revision/revisor.d.ts.map +1 -0
  683. package/dist/core/revision/revisor.js +132 -0
  684. package/dist/core/revision/revisor.js.map +1 -0
  685. package/dist/core/revision/sarif.d.ts +30 -0
  686. package/dist/core/revision/sarif.d.ts.map +1 -0
  687. package/dist/core/revision/sarif.js +83 -0
  688. package/dist/core/revision/sarif.js.map +1 -0
  689. package/dist/core/scheduler/scheduler.d.ts +87 -0
  690. package/dist/core/scheduler/scheduler.d.ts.map +1 -0
  691. package/dist/core/scheduler/scheduler.js +178 -0
  692. package/dist/core/scheduler/scheduler.js.map +1 -0
  693. package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts +49 -0
  694. package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts.map +1 -0
  695. package/dist/core/sesion/cerrar-llamadas-abiertas.js +77 -0
  696. package/dist/core/sesion/cerrar-llamadas-abiertas.js.map +1 -0
  697. package/dist/core/settings-manager.d.ts +110 -6
  698. package/dist/core/settings-manager.d.ts.map +1 -1
  699. package/dist/core/settings-manager.js +53 -2
  700. package/dist/core/settings-manager.js.map +1 -1
  701. package/dist/core/slash-commands.d.ts.map +1 -1
  702. package/dist/core/slash-commands.js +3 -3
  703. package/dist/core/slash-commands.js.map +1 -1
  704. package/dist/core/system-prompt.d.ts +17 -0
  705. package/dist/core/system-prompt.d.ts.map +1 -1
  706. package/dist/core/system-prompt.js +13 -5
  707. package/dist/core/system-prompt.js.map +1 -1
  708. package/dist/core/telemetria/otlp.d.ts +122 -0
  709. package/dist/core/telemetria/otlp.d.ts.map +1 -0
  710. package/dist/core/telemetria/otlp.js +373 -0
  711. package/dist/core/telemetria/otlp.js.map +1 -0
  712. package/dist/core/tools/coercion-argumentos.d.ts +48 -0
  713. package/dist/core/tools/coercion-argumentos.d.ts.map +1 -0
  714. package/dist/core/tools/coercion-argumentos.js +99 -0
  715. package/dist/core/tools/coercion-argumentos.js.map +1 -0
  716. package/dist/core/tools/edit-diff.d.ts +0 -7
  717. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  718. package/dist/core/tools/edit-diff.js +232 -7
  719. package/dist/core/tools/edit-diff.js.map +1 -1
  720. package/dist/core/tools/edit.d.ts.map +1 -1
  721. package/dist/core/tools/edit.js +8 -1
  722. package/dist/core/tools/edit.js.map +1 -1
  723. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
  724. package/dist/core/tools/file-mutation-queue.js +5 -0
  725. package/dist/core/tools/file-mutation-queue.js.map +1 -1
  726. package/dist/core/tools/json-tolerante.d.ts +30 -0
  727. package/dist/core/tools/json-tolerante.d.ts.map +1 -0
  728. package/dist/core/tools/json-tolerante.js +70 -0
  729. package/dist/core/tools/json-tolerante.js.map +1 -0
  730. package/dist/core/tools/read.d.ts.map +1 -1
  731. package/dist/core/tools/read.js +17 -0
  732. package/dist/core/tools/read.js.map +1 -1
  733. package/dist/core/tools/tool-definition-wrapper.d.ts +14 -1
  734. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  735. package/dist/core/tools/tool-definition-wrapper.js +17 -1
  736. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  737. package/dist/core/turno-vacio/detectar.d.ts +38 -0
  738. package/dist/core/turno-vacio/detectar.d.ts.map +1 -0
  739. package/dist/core/turno-vacio/detectar.js +66 -0
  740. package/dist/core/turno-vacio/detectar.js.map +1 -0
  741. package/dist/core/undo/journal.d.ts +57 -0
  742. package/dist/core/undo/journal.d.ts.map +1 -0
  743. package/dist/core/undo/journal.js +178 -0
  744. package/dist/core/undo/journal.js.map +1 -0
  745. package/dist/core/urls-internas/auditoria.d.ts +10 -0
  746. package/dist/core/urls-internas/auditoria.d.ts.map +1 -0
  747. package/dist/core/urls-internas/auditoria.js +42 -0
  748. package/dist/core/urls-internas/auditoria.js.map +1 -0
  749. package/dist/core/urls-internas/boveda.d.ts +13 -0
  750. package/dist/core/urls-internas/boveda.d.ts.map +1 -0
  751. package/dist/core/urls-internas/boveda.js +40 -0
  752. package/dist/core/urls-internas/boveda.js.map +1 -0
  753. package/dist/core/urls-internas/lector.d.ts +30 -0
  754. package/dist/core/urls-internas/lector.d.ts.map +1 -0
  755. package/dist/core/urls-internas/lector.js +56 -0
  756. package/dist/core/urls-internas/lector.js.map +1 -0
  757. package/dist/core/urls-internas/memoria.d.ts +11 -0
  758. package/dist/core/urls-internas/memoria.d.ts.map +1 -0
  759. package/dist/core/urls-internas/memoria.js +25 -0
  760. package/dist/core/urls-internas/memoria.js.map +1 -0
  761. package/dist/core/urls-internas/parse.d.ts +28 -0
  762. package/dist/core/urls-internas/parse.d.ts.map +1 -0
  763. package/dist/core/urls-internas/parse.js +32 -0
  764. package/dist/core/urls-internas/parse.js.map +1 -0
  765. package/dist/core/urls-internas/reglas.d.ts +10 -0
  766. package/dist/core/urls-internas/reglas.d.ts.map +1 -0
  767. package/dist/core/urls-internas/reglas.js +31 -0
  768. package/dist/core/urls-internas/reglas.js.map +1 -0
  769. package/dist/core/usage/aggregate.d.ts +68 -0
  770. package/dist/core/usage/aggregate.d.ts.map +1 -0
  771. package/dist/core/usage/aggregate.js +93 -0
  772. package/dist/core/usage/aggregate.js.map +1 -0
  773. package/dist/core/usage/cuota/anthropic.d.ts +10 -0
  774. package/dist/core/usage/cuota/anthropic.d.ts.map +1 -0
  775. package/dist/core/usage/cuota/anthropic.js +63 -0
  776. package/dist/core/usage/cuota/anthropic.js.map +1 -0
  777. package/dist/core/usage/cuota/cache.d.ts +20 -0
  778. package/dist/core/usage/cuota/cache.d.ts.map +1 -0
  779. package/dist/core/usage/cuota/cache.js +36 -0
  780. package/dist/core/usage/cuota/cache.js.map +1 -0
  781. package/dist/core/usage/cuota/github-copilot.d.ts +9 -0
  782. package/dist/core/usage/cuota/github-copilot.d.ts.map +1 -0
  783. package/dist/core/usage/cuota/github-copilot.js +67 -0
  784. package/dist/core/usage/cuota/github-copilot.js.map +1 -0
  785. package/dist/core/usage/cuota/google-gemini.d.ts +9 -0
  786. package/dist/core/usage/cuota/google-gemini.d.ts.map +1 -0
  787. package/dist/core/usage/cuota/google-gemini.js +72 -0
  788. package/dist/core/usage/cuota/google-gemini.js.map +1 -0
  789. package/dist/core/usage/cuota/index.d.ts +25 -0
  790. package/dist/core/usage/cuota/index.d.ts.map +1 -0
  791. package/dist/core/usage/cuota/index.js +50 -0
  792. package/dist/core/usage/cuota/index.js.map +1 -0
  793. package/dist/core/usage/cuota/openai-codex.d.ts +9 -0
  794. package/dist/core/usage/cuota/openai-codex.d.ts.map +1 -0
  795. package/dist/core/usage/cuota/openai-codex.js +59 -0
  796. package/dist/core/usage/cuota/openai-codex.js.map +1 -0
  797. package/dist/core/usage/cuota/openrouter.d.ts +10 -0
  798. package/dist/core/usage/cuota/openrouter.d.ts.map +1 -0
  799. package/dist/core/usage/cuota/openrouter.js +47 -0
  800. package/dist/core/usage/cuota/openrouter.js.map +1 -0
  801. package/dist/core/usage/cuota/tipos.d.ts +50 -0
  802. package/dist/core/usage/cuota/tipos.d.ts.map +1 -0
  803. package/dist/core/usage/cuota/tipos.js +25 -0
  804. package/dist/core/usage/cuota/tipos.js.map +1 -0
  805. package/dist/core/web/busqueda-nativa.d.ts +82 -0
  806. package/dist/core/web/busqueda-nativa.d.ts.map +1 -0
  807. package/dist/core/web/busqueda-nativa.js +163 -0
  808. package/dist/core/web/busqueda-nativa.js.map +1 -0
  809. package/dist/core/web/destino.d.ts +58 -0
  810. package/dist/core/web/destino.d.ts.map +1 -0
  811. package/dist/core/web/destino.js +127 -0
  812. package/dist/core/web/destino.js.map +1 -0
  813. package/dist/core/web/proveedores/brave.d.ts +6 -0
  814. package/dist/core/web/proveedores/brave.d.ts.map +1 -0
  815. package/dist/core/web/proveedores/brave.js +20 -0
  816. package/dist/core/web/proveedores/brave.js.map +1 -0
  817. package/dist/core/web/proveedores/claves.d.ts +19 -0
  818. package/dist/core/web/proveedores/claves.d.ts.map +1 -0
  819. package/dist/core/web/proveedores/claves.js +36 -0
  820. package/dist/core/web/proveedores/claves.js.map +1 -0
  821. package/dist/core/web/proveedores/duckduckgo.d.ts +3 -0
  822. package/dist/core/web/proveedores/duckduckgo.d.ts.map +1 -0
  823. package/dist/core/web/proveedores/duckduckgo.js +109 -0
  824. package/dist/core/web/proveedores/duckduckgo.js.map +1 -0
  825. package/dist/core/web/proveedores/ecosia.d.ts +3 -0
  826. package/dist/core/web/proveedores/ecosia.d.ts.map +1 -0
  827. package/dist/core/web/proveedores/ecosia.js +72 -0
  828. package/dist/core/web/proveedores/ecosia.js.map +1 -0
  829. package/dist/core/web/proveedores/exa.d.ts +6 -0
  830. package/dist/core/web/proveedores/exa.d.ts.map +1 -0
  831. package/dist/core/web/proveedores/exa.js +24 -0
  832. package/dist/core/web/proveedores/exa.js.map +1 -0
  833. package/dist/core/web/proveedores/mojeek.d.ts +3 -0
  834. package/dist/core/web/proveedores/mojeek.d.ts.map +1 -0
  835. package/dist/core/web/proveedores/mojeek.js +65 -0
  836. package/dist/core/web/proveedores/mojeek.js.map +1 -0
  837. package/dist/core/web/proveedores/navegador.d.ts +10 -0
  838. package/dist/core/web/proveedores/navegador.d.ts.map +1 -0
  839. package/dist/core/web/proveedores/navegador.js +13 -0
  840. package/dist/core/web/proveedores/navegador.js.map +1 -0
  841. package/dist/core/web/proveedores/registro.d.ts +43 -0
  842. package/dist/core/web/proveedores/registro.d.ts.map +1 -0
  843. package/dist/core/web/proveedores/registro.js +49 -0
  844. package/dist/core/web/proveedores/registro.js.map +1 -0
  845. package/dist/core/web/proveedores/searxng.d.ts +9 -0
  846. package/dist/core/web/proveedores/searxng.d.ts.map +1 -0
  847. package/dist/core/web/proveedores/searxng.js +17 -0
  848. package/dist/core/web/proveedores/searxng.js.map +1 -0
  849. package/dist/core/web/proveedores/serper.d.ts +9 -0
  850. package/dist/core/web/proveedores/serper.d.ts.map +1 -0
  851. package/dist/core/web/proveedores/serper.js +19 -0
  852. package/dist/core/web/proveedores/serper.js.map +1 -0
  853. package/dist/core/web/proveedores/tavily.d.ts +6 -0
  854. package/dist/core/web/proveedores/tavily.d.ts.map +1 -0
  855. package/dist/core/web/proveedores/tavily.js +19 -0
  856. package/dist/core/web/proveedores/tavily.js.map +1 -0
  857. package/dist/core/web/proveedores/tipos.d.ts +36 -0
  858. package/dist/core/web/proveedores/tipos.d.ts.map +1 -0
  859. package/dist/core/web/proveedores/tipos.js +10 -0
  860. package/dist/core/web/proveedores/tipos.js.map +1 -0
  861. package/dist/core/web/registro-red.d.ts +43 -0
  862. package/dist/core/web/registro-red.d.ts.map +1 -0
  863. package/dist/core/web/registro-red.js +86 -0
  864. package/dist/core/web/registro-red.js.map +1 -0
  865. package/dist/core/web/scrapers/cisa-kev.d.ts +10 -0
  866. package/dist/core/web/scrapers/cisa-kev.d.ts.map +1 -0
  867. package/dist/core/web/scrapers/cisa-kev.js +38 -0
  868. package/dist/core/web/scrapers/cisa-kev.js.map +1 -0
  869. package/dist/core/web/scrapers/crates-io.d.ts +11 -0
  870. package/dist/core/web/scrapers/crates-io.d.ts.map +1 -0
  871. package/dist/core/web/scrapers/crates-io.js +29 -0
  872. package/dist/core/web/scrapers/crates-io.js.map +1 -0
  873. package/dist/core/web/scrapers/docs-rs.d.ts +10 -0
  874. package/dist/core/web/scrapers/docs-rs.d.ts.map +1 -0
  875. package/dist/core/web/scrapers/docs-rs.js +35 -0
  876. package/dist/core/web/scrapers/docs-rs.js.map +1 -0
  877. package/dist/core/web/scrapers/github.d.ts +3 -0
  878. package/dist/core/web/scrapers/github.d.ts.map +1 -0
  879. package/dist/core/web/scrapers/github.js +72 -0
  880. package/dist/core/web/scrapers/github.js.map +1 -0
  881. package/dist/core/web/scrapers/go-pkg.d.ts +7 -0
  882. package/dist/core/web/scrapers/go-pkg.d.ts.map +1 -0
  883. package/dist/core/web/scrapers/go-pkg.js +30 -0
  884. package/dist/core/web/scrapers/go-pkg.js.map +1 -0
  885. package/dist/core/web/scrapers/hex.d.ts +6 -0
  886. package/dist/core/web/scrapers/hex.d.ts.map +1 -0
  887. package/dist/core/web/scrapers/hex.js +27 -0
  888. package/dist/core/web/scrapers/hex.js.map +1 -0
  889. package/dist/core/web/scrapers/maven.d.ts +8 -0
  890. package/dist/core/web/scrapers/maven.d.ts.map +1 -0
  891. package/dist/core/web/scrapers/maven.js +41 -0
  892. package/dist/core/web/scrapers/maven.js.map +1 -0
  893. package/dist/core/web/scrapers/mdn.d.ts +6 -0
  894. package/dist/core/web/scrapers/mdn.d.ts.map +1 -0
  895. package/dist/core/web/scrapers/mdn.js +28 -0
  896. package/dist/core/web/scrapers/mdn.js.map +1 -0
  897. package/dist/core/web/scrapers/npm.d.ts +11 -0
  898. package/dist/core/web/scrapers/npm.d.ts.map +1 -0
  899. package/dist/core/web/scrapers/npm.js +57 -0
  900. package/dist/core/web/scrapers/npm.js.map +1 -0
  901. package/dist/core/web/scrapers/nuget.d.ts +8 -0
  902. package/dist/core/web/scrapers/nuget.d.ts.map +1 -0
  903. package/dist/core/web/scrapers/nuget.js +22 -0
  904. package/dist/core/web/scrapers/nuget.js.map +1 -0
  905. package/dist/core/web/scrapers/nvd.d.ts +7 -0
  906. package/dist/core/web/scrapers/nvd.d.ts.map +1 -0
  907. package/dist/core/web/scrapers/nvd.js +37 -0
  908. package/dist/core/web/scrapers/nvd.js.map +1 -0
  909. package/dist/core/web/scrapers/pypi.d.ts +6 -0
  910. package/dist/core/web/scrapers/pypi.d.ts.map +1 -0
  911. package/dist/core/web/scrapers/pypi.js +31 -0
  912. package/dist/core/web/scrapers/pypi.js.map +1 -0
  913. package/dist/core/web/scrapers/registro.d.ts +13 -0
  914. package/dist/core/web/scrapers/registro.d.ts.map +1 -0
  915. package/dist/core/web/scrapers/registro.js +65 -0
  916. package/dist/core/web/scrapers/registro.js.map +1 -0
  917. package/dist/core/web/scrapers/rubygems.d.ts +6 -0
  918. package/dist/core/web/scrapers/rubygems.d.ts.map +1 -0
  919. package/dist/core/web/scrapers/rubygems.js +23 -0
  920. package/dist/core/web/scrapers/rubygems.js.map +1 -0
  921. package/dist/core/web/scrapers/stackoverflow.d.ts +3 -0
  922. package/dist/core/web/scrapers/stackoverflow.d.ts.map +1 -0
  923. package/dist/core/web/scrapers/stackoverflow.js +46 -0
  924. package/dist/core/web/scrapers/stackoverflow.js.map +1 -0
  925. package/dist/core/web/scrapers/tipos.d.ts +42 -0
  926. package/dist/core/web/scrapers/tipos.d.ts.map +1 -0
  927. package/dist/core/web/scrapers/tipos.js +23 -0
  928. package/dist/core/web/scrapers/tipos.js.map +1 -0
  929. package/dist/core/web/texto.d.ts +10 -0
  930. package/dist/core/web/texto.d.ts.map +1 -0
  931. package/dist/core/web/texto.js +26 -0
  932. package/dist/core/web/texto.js.map +1 -0
  933. package/dist/core/web/tools.d.ts +91 -0
  934. package/dist/core/web/tools.d.ts.map +1 -0
  935. package/dist/core/web/tools.js +304 -0
  936. package/dist/core/web/tools.js.map +1 -0
  937. package/dist/core/wiki/almacen.d.ts +33 -0
  938. package/dist/core/wiki/almacen.d.ts.map +1 -0
  939. package/dist/core/wiki/almacen.js +93 -0
  940. package/dist/core/wiki/almacen.js.map +1 -0
  941. package/dist/core/wiki/citas.d.ts +111 -0
  942. package/dist/core/wiki/citas.d.ts.map +1 -0
  943. package/dist/core/wiki/citas.js +146 -0
  944. package/dist/core/wiki/citas.js.map +1 -0
  945. package/dist/core/workflows/agent-runner.d.ts +2 -0
  946. package/dist/core/workflows/agent-runner.d.ts.map +1 -1
  947. package/dist/core/workflows/agent-runner.js +131 -44
  948. package/dist/core/workflows/agent-runner.js.map +1 -1
  949. package/dist/core/workflows/builtins.d.ts.map +1 -1
  950. package/dist/core/workflows/builtins.js +1 -0
  951. package/dist/core/workflows/builtins.js.map +1 -1
  952. package/dist/core/workflows/contrato/esquema.d.ts +32 -0
  953. package/dist/core/workflows/contrato/esquema.d.ts.map +1 -0
  954. package/dist/core/workflows/contrato/esquema.js +25 -0
  955. package/dist/core/workflows/contrato/esquema.js.map +1 -0
  956. package/dist/core/workflows/contrato/reparar-argumentos.d.ts +69 -0
  957. package/dist/core/workflows/contrato/reparar-argumentos.d.ts.map +1 -0
  958. package/dist/core/workflows/contrato/reparar-argumentos.js +117 -0
  959. package/dist/core/workflows/contrato/reparar-argumentos.js.map +1 -0
  960. package/dist/core/workflows/contrato/validador.d.ts +30 -0
  961. package/dist/core/workflows/contrato/validador.d.ts.map +1 -0
  962. package/dist/core/workflows/contrato/validador.js +56 -0
  963. package/dist/core/workflows/contrato/validador.js.map +1 -0
  964. package/dist/core/workflows/contrato/yield.d.ts +65 -0
  965. package/dist/core/workflows/contrato/yield.d.ts.map +1 -0
  966. package/dist/core/workflows/contrato/yield.js +80 -0
  967. package/dist/core/workflows/contrato/yield.js.map +1 -0
  968. package/dist/core/workflows/goal-engine/engine.d.ts +17 -0
  969. package/dist/core/workflows/goal-engine/engine.d.ts.map +1 -1
  970. package/dist/core/workflows/goal-engine/engine.js +41 -0
  971. package/dist/core/workflows/goal-engine/engine.js.map +1 -1
  972. package/dist/core/workflows/index.d.ts +8 -0
  973. package/dist/core/workflows/index.d.ts.map +1 -1
  974. package/dist/core/workflows/index.js +4 -0
  975. package/dist/core/workflows/index.js.map +1 -1
  976. package/dist/core/workflows/manager.d.ts +10 -0
  977. package/dist/core/workflows/manager.d.ts.map +1 -1
  978. package/dist/core/workflows/manager.js +35 -11
  979. package/dist/core/workflows/manager.js.map +1 -1
  980. package/dist/core/workflows/runtime.d.ts +13 -0
  981. package/dist/core/workflows/runtime.d.ts.map +1 -1
  982. package/dist/core/workflows/runtime.js +80 -1
  983. package/dist/core/workflows/runtime.js.map +1 -1
  984. package/dist/core/workflows/save-as-skill.d.ts +27 -0
  985. package/dist/core/workflows/save-as-skill.d.ts.map +1 -0
  986. package/dist/core/workflows/save-as-skill.js +54 -0
  987. package/dist/core/workflows/save-as-skill.js.map +1 -0
  988. package/dist/core/workflows/types.d.ts +49 -0
  989. package/dist/core/workflows/types.d.ts.map +1 -1
  990. package/dist/core/workflows/types.js.map +1 -1
  991. package/dist/extensions/remoto/index.d.ts +22 -0
  992. package/dist/extensions/remoto/index.d.ts.map +1 -0
  993. package/dist/extensions/remoto/index.js +54 -0
  994. package/dist/extensions/remoto/index.js.map +1 -0
  995. package/dist/index.d.ts +1 -17
  996. package/dist/index.d.ts.map +1 -1
  997. package/dist/index.js +7 -16
  998. package/dist/index.js.map +1 -1
  999. package/dist/main.d.ts.map +1 -1
  1000. package/dist/main.js +6 -0
  1001. package/dist/main.js.map +1 -1
  1002. package/dist/modes/acp/acp-mode.d.ts +42 -0
  1003. package/dist/modes/acp/acp-mode.d.ts.map +1 -0
  1004. package/dist/modes/acp/acp-mode.js +190 -0
  1005. package/dist/modes/acp/acp-mode.js.map +1 -0
  1006. package/dist/modes/acp/events.d.ts +74 -0
  1007. package/dist/modes/acp/events.d.ts.map +1 -0
  1008. package/dist/modes/acp/events.js +116 -0
  1009. package/dist/modes/acp/events.js.map +1 -0
  1010. package/dist/modes/interactive/components/model-selector.d.ts +8 -1
  1011. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  1012. package/dist/modes/interactive/components/model-selector.js +41 -7
  1013. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  1014. package/dist/modes/interactive/components/settings-selector.d.ts +1 -2
  1015. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  1016. package/dist/modes/interactive/components/settings-selector.js +9 -86
  1017. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  1018. package/dist/modes/interactive/components/thinking-selector.d.ts +8 -1
  1019. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  1020. package/dist/modes/interactive/components/thinking-selector.js +48 -17
  1021. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  1022. package/dist/modes/interactive/interactive-mode.d.ts +3 -7
  1023. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  1024. package/dist/modes/interactive/interactive-mode.js +137 -146
  1025. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  1026. package/dist/modes/print-mode.d.ts.map +1 -1
  1027. package/dist/modes/print-mode.js +11 -0
  1028. package/dist/modes/print-mode.js.map +1 -1
  1029. package/dist/package-manager-cli.d.ts.map +1 -1
  1030. package/dist/package-manager-cli.js +27 -5
  1031. package/dist/package-manager-cli.js.map +1 -1
  1032. package/dist/server/attach.d.ts +56 -0
  1033. package/dist/server/attach.d.ts.map +1 -0
  1034. package/dist/server/attach.js +130 -0
  1035. package/dist/server/attach.js.map +1 -0
  1036. package/dist/server/extension-ops.d.ts +40 -0
  1037. package/dist/server/extension-ops.d.ts.map +1 -0
  1038. package/dist/server/extension-ops.js +146 -0
  1039. package/dist/server/extension-ops.js.map +1 -0
  1040. package/dist/server/pi-server-service.d.ts +85 -0
  1041. package/dist/server/pi-server-service.d.ts.map +1 -0
  1042. package/dist/server/pi-server-service.js +213 -0
  1043. package/dist/server/pi-server-service.js.map +1 -0
  1044. package/dist/server/scheduler-tick.d.ts +32 -0
  1045. package/dist/server/scheduler-tick.d.ts.map +1 -0
  1046. package/dist/server/scheduler-tick.js +47 -0
  1047. package/dist/server/scheduler-tick.js.map +1 -0
  1048. package/dist/server/serve.d.ts +25 -0
  1049. package/dist/server/serve.d.ts.map +1 -0
  1050. package/dist/server/serve.js +83 -0
  1051. package/dist/server/serve.js.map +1 -0
  1052. package/dist/server/transcript.d.ts +38 -0
  1053. package/dist/server/transcript.d.ts.map +1 -0
  1054. package/dist/server/transcript.js +176 -0
  1055. package/dist/server/transcript.js.map +1 -0
  1056. package/dist/skills/skill-creator/SKILL.md +90 -0
  1057. package/dist/telegram/api.d.ts +75 -0
  1058. package/dist/telegram/api.d.ts.map +1 -0
  1059. package/dist/telegram/api.js +104 -0
  1060. package/dist/telegram/api.js.map +1 -0
  1061. package/dist/telegram/bridge.d.ts +85 -0
  1062. package/dist/telegram/bridge.d.ts.map +1 -0
  1063. package/dist/telegram/bridge.js +182 -0
  1064. package/dist/telegram/bridge.js.map +1 -0
  1065. package/dist/telegram/journal.d.ts +67 -0
  1066. package/dist/telegram/journal.d.ts.map +1 -0
  1067. package/dist/telegram/journal.js +119 -0
  1068. package/dist/telegram/journal.js.map +1 -0
  1069. package/dist/telegram/servidor.d.ts +15 -0
  1070. package/dist/telegram/servidor.d.ts.map +1 -0
  1071. package/dist/telegram/servidor.js +74 -0
  1072. package/dist/telegram/servidor.js.map +1 -0
  1073. package/dist/utils/shell.d.ts +11 -0
  1074. package/dist/utils/shell.d.ts.map +1 -1
  1075. package/dist/utils/shell.js +11 -0
  1076. package/dist/utils/shell.js.map +1 -1
  1077. package/dist/utils/version-check.d.ts.map +1 -1
  1078. package/dist/utils/version-check.js +29 -1
  1079. package/dist/utils/version-check.js.map +1 -1
  1080. package/docs/compaction.md +10 -10
  1081. package/docs/compliance.md +241 -0
  1082. package/docs/containerization.md +24 -24
  1083. package/docs/custom-provider.md +10 -10
  1084. package/docs/development.md +47 -10
  1085. package/docs/docs.json +14 -2
  1086. package/docs/environment-variables.md +20 -17
  1087. package/docs/extensions.md +51 -49
  1088. package/docs/index.md +15 -21
  1089. package/docs/json.md +3 -3
  1090. package/docs/keybindings.md +5 -5
  1091. package/docs/llama-cpp.md +7 -7
  1092. package/docs/models.md +12 -12
  1093. package/docs/packages.md +45 -45
  1094. package/docs/prompt-templates.md +5 -5
  1095. package/docs/providers.md +12 -12
  1096. package/docs/quickstart.md +39 -39
  1097. package/docs/rpc.md +12 -12
  1098. package/docs/sdk.md +38 -38
  1099. package/docs/security.md +26 -21
  1100. package/docs/session-format.md +7 -7
  1101. package/docs/sessions.md +14 -14
  1102. package/docs/settings.md +45 -20
  1103. package/docs/shell-aliases.md +2 -2
  1104. package/docs/skills.md +11 -11
  1105. package/docs/terminal-setup.md +14 -14
  1106. package/docs/termux.md +7 -7
  1107. package/docs/themes.md +11 -11
  1108. package/docs/tmux.md +4 -4
  1109. package/docs/tui.md +3 -3
  1110. package/docs/usage.md +54 -54
  1111. package/docs/windows.md +2 -2
  1112. package/examples/sdk/12-full-control.ts +9 -0
  1113. package/npm-shrinkwrap.json +35 -251
  1114. package/package.json +10 -4
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Operaciones de Ada sobre sesiones residentes: `compact`, `rename`, `fork` y
3
+ * `kill`.
4
+ *
5
+ * Viajan por el comando genérico `extension` del protocolo en vez de tener cada
6
+ * una su propio comando tipado. La razón es de coste, no de pereza:
7
+ * `packages/protocol` y `packages/server` son de upstream, y cada línea que
8
+ * añadimos ahí se reaplica en cada sync y se rompe cuando upstream refactoriza
9
+ * esos ficheros. Un comando genérico se paga una vez; estas cuatro operaciones
10
+ * y todas las futuras viven aquí, a coste cero.
11
+ *
12
+ * Lo que el cable pierde en tipado se recupera AQUÍ: cada op valida su payload
13
+ * con su propio schema antes de tocar nada. La validación no desaparece, se
14
+ * mueve a donde no cuesta presupuesto.
15
+ */
16
+ import { Type } from "typebox";
17
+ import { Value } from "typebox/value";
18
+ const NoPayload = Type.Object({});
19
+ const RenamePayload = Type.Object({ name: Type.String({ minLength: 1 }) });
20
+ const CompactPayload = Type.Object({ customInstructions: Type.Optional(Type.String()) });
21
+ /**
22
+ * Valida el payload opaco contra el schema de la operación.
23
+ *
24
+ * Se lanza con el error de validación real, no un "argumentos inválidos"
25
+ * genérico: quien llama por un socket no tiene forma de inspeccionar qué
26
+ * esperaba el otro lado.
27
+ */
28
+ function parse(schema, payload) {
29
+ const value = payload ?? {};
30
+ if (Value.Check(schema, value))
31
+ return value;
32
+ const [first] = [...Value.Errors(schema, value)];
33
+ throw new Error(`payload inválido: ${first ? first.message : "no coincide con el schema"}`);
34
+ }
35
+ /** Exige una sesión viva. Las cuatro ops operan sobre una sesión concreta. */
36
+ function requireRuntime(request) {
37
+ if (!request.sessionId)
38
+ throw new Error("falta sessionId");
39
+ if (!request.runtime)
40
+ throw new Error(`la sesión ${request.sessionId} no está abierta en este servidor`);
41
+ return request.runtime;
42
+ }
43
+ /** Nombres soportados, para que `mcp_list`-style clients puedan descubrirlos. */
44
+ export const EXTENSION_OPS = ["ops", "compact", "rename", "fork", "kill"];
45
+ export function createExtensionHandler(context) {
46
+ return async (request) => {
47
+ switch (request.op) {
48
+ // Descubrimiento: un cliente nuevo contra un servidor viejo necesita
49
+ // poder preguntar qué existe en vez de adivinar.
50
+ case "ops":
51
+ return { ops: [...EXTENSION_OPS] };
52
+ case "compact": {
53
+ const { customInstructions } = parse(CompactPayload, request.payload);
54
+ const runtime = requireRuntime(request);
55
+ const result = await runtime.session.compact(customInstructions);
56
+ return { compacted: true, result };
57
+ }
58
+ case "rename": {
59
+ const { name } = parse(RenamePayload, request.payload);
60
+ const runtime = requireRuntime(request);
61
+ // El nombre se persiste como una entrada más del JSONL, que es como
62
+ // lo hace el resto del producto: sin estado paralelo que se
63
+ // desincronice del fichero de sesión.
64
+ runtime.sessionManager.appendSessionInfo(name);
65
+ return { renamed: true, name };
66
+ }
67
+ case "fork": {
68
+ parse(NoPayload, request.payload);
69
+ const runtime = requireRuntime(request);
70
+ const sourceFile = runtime.sessionManager.getSessionFile();
71
+ if (!sourceFile)
72
+ throw new Error("la sesión aún no se ha persistido; no hay nada que bifurcar");
73
+ // Copia del JSONL a una sesión nueva. NO se abre aquí: bifurcar es
74
+ // una operación sobre el historial, y decidir cuándo cargarla es del
75
+ // cliente. Abrirla sola dejaría un runtime que nadie pidió.
76
+ const { copyFile } = await import("node:fs/promises");
77
+ const { SessionManager } = await import("../core/session-manager.js");
78
+ const target = SessionManager.create(runtime.sessionManager.getCwd());
79
+ const targetFile = target.getSessionFile() ?? target.newSession();
80
+ if (!targetFile)
81
+ throw new Error("no se pudo crear la sesión destino");
82
+ await copyFile(sourceFile, targetFile);
83
+ return { forked: true, sessionId: target.getSessionId(), path: targetFile };
84
+ }
85
+ case "kill": {
86
+ parse(NoPayload, request.payload);
87
+ const runtime = requireRuntime(request);
88
+ // El historial en disco NO se borra. "kill" retira la sesión de la
89
+ // memoria del servidor; destruir el JSONL sería irreversible y no es
90
+ // lo que nadie espera de un kill.
91
+ await runtime.dispose();
92
+ context.forget(request.sessionId);
93
+ return { killed: true, historyKept: true };
94
+ }
95
+ default:
96
+ throw new Error(`operación desconocida: ${request.op}. Disponibles: ${EXTENSION_OPS.join(", ")}`);
97
+ }
98
+ };
99
+ }
100
+ /**
101
+ * Cliente de las operaciones desde el CLI.
102
+ *
103
+ * Vive aquí, junto a la definición de las ops, para que añadir una no obligue a
104
+ * tocar dos sitios distantes ni a recordar que existe un cliente aparte.
105
+ */
106
+ export async function runExtensionOp(options) {
107
+ const { PiClient } = await import("@earendil-works/pi-client");
108
+ const { createUnixTransportFactory } = await import("@earendil-works/pi-client/unix");
109
+ const client = new PiClient({ transportFactory: createUnixTransportFactory({ path: options.socketPath }) });
110
+ try {
111
+ await client.connect();
112
+ // `attachSession` antes de operar: el servidor solo entrega el runtime vivo
113
+ // de una sesión abierta, y sin esto un `compact` sobre una sesión existente
114
+ // pero cerrada fallaría con "no está abierta" sin explicar que basta con
115
+ // engancharse.
116
+ if (options.sessionId)
117
+ await client.attachSession(options.sessionId).catch(() => undefined);
118
+ // El punto de extensión del protocolo lo añadimos nosotros a
119
+ // `packages/{client,protocol,server}`, y esos paquetes NO viajan en el
120
+ // tarball: `@hoilab/ada-cli` los resuelve del registro de npm, así que
121
+ // quien instala recibe los de upstream, sin este comando.
122
+ //
123
+ // Sin esta comprobación, `ada-cli session <id> compact` reventaba con
124
+ // «client.extension is not a function» —un error que no dice nada de la
125
+ // causa— en vez de explicar qué falta. Es la diferencia entre «está roto» y
126
+ // «esto necesita una compilación desde fuentes».
127
+ if (typeof client.extension !== "function") {
128
+ return {
129
+ ok: false,
130
+ error: "Esta operación necesita el punto de extensión del protocolo, que solo está en una " +
131
+ "compilación desde fuentes: el paquete publicado depende de `@earendil-works/pi-client` " +
132
+ "del registro, que no lo trae. Compila desde el repositorio (ver la sección «Building " +
133
+ "from source» del README) o usa el resto de subcomandos, que no lo necesitan.",
134
+ };
135
+ }
136
+ const result = await client.extension(options.op, {
137
+ sessionId: options.sessionId,
138
+ payload: options.payload,
139
+ });
140
+ return { ok: result.ok, data: result.data, error: result.error };
141
+ }
142
+ finally {
143
+ await client.dispose().catch(() => { });
144
+ }
145
+ }
146
+ //# sourceMappingURL=extension-ops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension-ops.js","sourceRoot":"","sources":["../../src/server/extension-ops.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Operaciones de Ada sobre sesiones residentes: `compact`, `rename`, `fork` y\n * `kill`.\n *\n * Viajan por el comando genérico `extension` del protocolo en vez de tener cada\n * una su propio comando tipado. La razón es de coste, no de pereza:\n * `packages/protocol` y `packages/server` son de upstream, y cada línea que\n * añadimos ahí se reaplica en cada sync y se rompe cuando upstream refactoriza\n * esos ficheros. Un comando genérico se paga una vez; estas cuatro operaciones\n * y todas las futuras viven aquí, a coste cero.\n *\n * Lo que el cable pierde en tipado se recupera AQUÍ: cada op valida su payload\n * con su propio schema antes de tocar nada. La validación no desaparece, se\n * mueve a donde no cuesta presupuesto.\n */\n\nimport type { ExtensionRequest } from \"@earendil-works/pi-server\";\nimport { type Static, type TSchema, Type } from \"typebox\";\nimport { Value } from \"typebox/value\";\nimport type { AdaSessionRuntime } from \"./pi-server-service.ts\";\n\nconst NoPayload = Type.Object({});\nconst RenamePayload = Type.Object({ name: Type.String({ minLength: 1 }) });\nconst CompactPayload = Type.Object({ customInstructions: Type.Optional(Type.String()) });\n\n/**\n * Valida el payload opaco contra el schema de la operación.\n *\n * Se lanza con el error de validación real, no un \"argumentos inválidos\"\n * genérico: quien llama por un socket no tiene forma de inspeccionar qué\n * esperaba el otro lado.\n */\nfunction parse<T extends TSchema>(schema: T, payload: unknown): Static<T> {\n\tconst value = payload ?? {};\n\tif (Value.Check(schema, value)) return value as Static<T>;\n\tconst [first] = [...Value.Errors(schema, value)];\n\tthrow new Error(`payload inválido: ${first ? first.message : \"no coincide con el schema\"}`);\n}\n\n/** Exige una sesión viva. Las cuatro ops operan sobre una sesión concreta. */\nfunction requireRuntime(request: ExtensionRequest): AdaSessionRuntime {\n\tif (!request.sessionId) throw new Error(\"falta sessionId\");\n\tif (!request.runtime) throw new Error(`la sesión ${request.sessionId} no está abierta en este servidor`);\n\treturn request.runtime as AdaSessionRuntime;\n}\n\nexport interface ExtensionOpsContext {\n\t/** Retira una sesión del servidor tras un `kill`. */\n\tforget: (sessionId: string) => void;\n}\n\n/** Nombres soportados, para que `mcp_list`-style clients puedan descubrirlos. */\nexport const EXTENSION_OPS = [\"ops\", \"compact\", \"rename\", \"fork\", \"kill\"] as const;\n\nexport function createExtensionHandler(context: ExtensionOpsContext) {\n\treturn async (request: ExtensionRequest): Promise<unknown> => {\n\t\tswitch (request.op) {\n\t\t\t// Descubrimiento: un cliente nuevo contra un servidor viejo necesita\n\t\t\t// poder preguntar qué existe en vez de adivinar.\n\t\t\tcase \"ops\":\n\t\t\t\treturn { ops: [...EXTENSION_OPS] };\n\n\t\t\tcase \"compact\": {\n\t\t\t\tconst { customInstructions } = parse(CompactPayload, request.payload);\n\t\t\t\tconst runtime = requireRuntime(request);\n\t\t\t\tconst result = await runtime.session.compact(customInstructions);\n\t\t\t\treturn { compacted: true, result };\n\t\t\t}\n\n\t\t\tcase \"rename\": {\n\t\t\t\tconst { name } = parse(RenamePayload, request.payload);\n\t\t\t\tconst runtime = requireRuntime(request);\n\t\t\t\t// El nombre se persiste como una entrada más del JSONL, que es como\n\t\t\t\t// lo hace el resto del producto: sin estado paralelo que se\n\t\t\t\t// desincronice del fichero de sesión.\n\t\t\t\truntime.sessionManager.appendSessionInfo(name);\n\t\t\t\treturn { renamed: true, name };\n\t\t\t}\n\n\t\t\tcase \"fork\": {\n\t\t\t\tparse(NoPayload, request.payload);\n\t\t\t\tconst runtime = requireRuntime(request);\n\t\t\t\tconst sourceFile = runtime.sessionManager.getSessionFile();\n\t\t\t\tif (!sourceFile) throw new Error(\"la sesión aún no se ha persistido; no hay nada que bifurcar\");\n\t\t\t\t// Copia del JSONL a una sesión nueva. NO se abre aquí: bifurcar es\n\t\t\t\t// una operación sobre el historial, y decidir cuándo cargarla es del\n\t\t\t\t// cliente. Abrirla sola dejaría un runtime que nadie pidió.\n\t\t\t\tconst { copyFile } = await import(\"node:fs/promises\");\n\t\t\t\tconst { SessionManager } = await import(\"../core/session-manager.ts\");\n\t\t\t\tconst target = SessionManager.create(runtime.sessionManager.getCwd());\n\t\t\t\tconst targetFile = target.getSessionFile() ?? target.newSession();\n\t\t\t\tif (!targetFile) throw new Error(\"no se pudo crear la sesión destino\");\n\t\t\t\tawait copyFile(sourceFile, targetFile);\n\t\t\t\treturn { forked: true, sessionId: target.getSessionId(), path: targetFile };\n\t\t\t}\n\n\t\t\tcase \"kill\": {\n\t\t\t\tparse(NoPayload, request.payload);\n\t\t\t\tconst runtime = requireRuntime(request);\n\t\t\t\t// El historial en disco NO se borra. \"kill\" retira la sesión de la\n\t\t\t\t// memoria del servidor; destruir el JSONL sería irreversible y no es\n\t\t\t\t// lo que nadie espera de un kill.\n\t\t\t\tawait runtime.dispose();\n\t\t\t\tcontext.forget(request.sessionId as string);\n\t\t\t\treturn { killed: true, historyKept: true };\n\t\t\t}\n\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`operación desconocida: ${request.op}. Disponibles: ${EXTENSION_OPS.join(\", \")}`);\n\t\t}\n\t};\n}\n\n/**\n * Cliente de las operaciones desde el CLI.\n *\n * Vive aquí, junto a la definición de las ops, para que añadir una no obligue a\n * tocar dos sitios distantes ni a recordar que existe un cliente aparte.\n */\nexport async function runExtensionOp(options: {\n\tsocketPath: string;\n\top: string;\n\tsessionId?: string;\n\tpayload?: unknown;\n}): Promise<{ ok: boolean; data?: unknown; error?: string }> {\n\tconst { PiClient } = await import(\"@earendil-works/pi-client\");\n\tconst { createUnixTransportFactory } = await import(\"@earendil-works/pi-client/unix\");\n\tconst client = new PiClient({ transportFactory: createUnixTransportFactory({ path: options.socketPath }) });\n\ttry {\n\t\tawait client.connect();\n\t\t// `attachSession` antes de operar: el servidor solo entrega el runtime vivo\n\t\t// de una sesión abierta, y sin esto un `compact` sobre una sesión existente\n\t\t// pero cerrada fallaría con \"no está abierta\" sin explicar que basta con\n\t\t// engancharse.\n\t\tif (options.sessionId) await client.attachSession(options.sessionId).catch(() => undefined);\n\n\t\t// El punto de extensión del protocolo lo añadimos nosotros a\n\t\t// `packages/{client,protocol,server}`, y esos paquetes NO viajan en el\n\t\t// tarball: `@hoilab/ada-cli` los resuelve del registro de npm, así que\n\t\t// quien instala recibe los de upstream, sin este comando.\n\t\t//\n\t\t// Sin esta comprobación, `ada-cli session <id> compact` reventaba con\n\t\t// «client.extension is not a function» —un error que no dice nada de la\n\t\t// causa— en vez de explicar qué falta. Es la diferencia entre «está roto» y\n\t\t// «esto necesita una compilación desde fuentes».\n\t\tif (typeof (client as { extension?: unknown }).extension !== \"function\") {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\terror:\n\t\t\t\t\t\"Esta operación necesita el punto de extensión del protocolo, que solo está en una \" +\n\t\t\t\t\t\"compilación desde fuentes: el paquete publicado depende de `@earendil-works/pi-client` \" +\n\t\t\t\t\t\"del registro, que no lo trae. Compila desde el repositorio (ver la sección «Building \" +\n\t\t\t\t\t\"from source» del README) o usa el resto de subcomandos, que no lo necesitan.\",\n\t\t\t};\n\t\t}\n\n\t\tconst result = await client.extension(options.op, {\n\t\t\tsessionId: options.sessionId,\n\t\t\tpayload: options.payload,\n\t\t});\n\t\treturn { ok: result.ok, data: result.data, error: result.error };\n\t} finally {\n\t\tawait client.dispose().catch(() => {});\n\t}\n}\n"]}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Implementación de `PiServerService` — sesiones residentes de Ada.
3
+ *
4
+ * Ada distribuye `packages/server` y `packages/client` de upstream desde hace
5
+ * versiones y NADIE los implementaba: `PiServerService` es una interfaz de 4
6
+ * métodos que estaba a cero. Ese era todo el hueco frente a un competidor que,
7
+ * tras BORRAR esos paquetes de su fork, construyó ~20k líneas de demonio a mano.
8
+ *
9
+ * Aquí solo se adapta lo que ya tenemos (SessionManager, AgentSession) a esa
10
+ * interfaz. El acoplamiento a un esquema que upstream marca como experimental
11
+ * queda contenido en este fichero y en `serve.ts`: si cambia una firma, se
12
+ * arregla aquí y en ningún otro sitio.
13
+ */
14
+ import type { ModelMetadata, ModelRef, SessionMetadata, SessionPhase, SessionSnapshot, ThinkingLevel } from "@earendil-works/pi-protocol";
15
+ import type { CreateSessionOptions, PiServerService, PiSessionRuntime, PiSessionRuntimeEvent, PromptInput, SteerInput } from "@earendil-works/pi-server";
16
+ import type { AgentSession } from "../core/agent-session.ts";
17
+ import { SessionManager } from "../core/session-manager.ts";
18
+ /** Crea la AgentSession subyacente. Inyectable para tests. */
19
+ export type CreateServedSession = (options: {
20
+ cwd: string;
21
+ sessionManager: SessionManager;
22
+ model?: ModelRef;
23
+ thinkingLevel?: ThinkingLevel;
24
+ }) => Promise<AgentSession>;
25
+ export interface AdaServerServiceOptions {
26
+ agentDir: string;
27
+ defaultCwd: string;
28
+ createSession: CreateServedSession;
29
+ listModels?: () => Promise<ModelMetadata[]>;
30
+ }
31
+ /**
32
+ * Un runtime adquirido sobre una AgentSession viva.
33
+ *
34
+ * `revision` es monótona y sube en cada evento: es lo que permite a un cliente
35
+ * saber que su copia está obsoleta sin comparar transcripts enteros.
36
+ */
37
+ export declare class AdaSessionRuntime implements PiSessionRuntime {
38
+ private listeners;
39
+ private revision;
40
+ private phase;
41
+ private unsubscribe;
42
+ private disposed;
43
+ readonly session: AgentSession;
44
+ readonly sessionManager: SessionManager;
45
+ private createdAt;
46
+ constructor(session: AgentSession, sessionManager: SessionManager, createdAt: number);
47
+ private emit;
48
+ snapshot(): SessionSnapshot;
49
+ getPhase(): SessionPhase;
50
+ prompt(input: PromptInput): Promise<void>;
51
+ steer(input: SteerInput): Promise<void>;
52
+ abort(): Promise<void>;
53
+ setModel(model: ModelRef): Promise<void>;
54
+ setThinking(thinkingLevel: ThinkingLevel): Promise<void>;
55
+ subscribe(listener: (event: PiSessionRuntimeEvent) => void): () => void;
56
+ dispose(): Promise<void>;
57
+ }
58
+ /**
59
+ * Servicio de sesiones residentes.
60
+ *
61
+ * Exclusividad: una sesión abierta dos veces devuelve el MISMO runtime en vez de
62
+ * crear un segundo dueño de ejecución. Dos procesos escribiendo el mismo JSONL
63
+ * es corrupción silenciosa, y con residencia deja de ser hipotético.
64
+ */
65
+ export declare class AdaServerService implements PiServerService {
66
+ private open;
67
+ private extensionHandler;
68
+ private options;
69
+ constructor(options: AdaServerServiceOptions);
70
+ listSessions(): Promise<SessionMetadata[]>;
71
+ listModels(): Promise<ModelMetadata[]>;
72
+ createSession(options: CreateSessionOptions): Promise<PiSessionRuntime>;
73
+ openSession(sessionId: string): Promise<PiSessionRuntime>;
74
+ /**
75
+ * Operaciones propias de Ada (compact/rename/fork/kill).
76
+ *
77
+ * Se delega en `extension-ops.ts` en vez de crecer aquí: el servicio es la
78
+ * frontera con el protocolo, no el sitio donde acumular una op por cada cosa
79
+ * que se le ocurra a un cliente.
80
+ */
81
+ extension(request: import("@earendil-works/pi-server").ExtensionRequest): Promise<unknown>;
82
+ /** Cierra todos los runtimes vivos (apagado del servidor). */
83
+ disposeAll(): Promise<void>;
84
+ }
85
+ //# sourceMappingURL=pi-server-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi-server-service.d.ts","sourceRoot":"","sources":["../../src/server/pi-server-service.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Implementación de `PiServerService` — sesiones residentes de Ada.\n *\n * Ada distribuye `packages/server` y `packages/client` de upstream desde hace\n * versiones y NADIE los implementaba: `PiServerService` es una interfaz de 4\n * métodos que estaba a cero. Ese era todo el hueco frente a un competidor que,\n * tras BORRAR esos paquetes de su fork, construyó ~20k líneas de demonio a mano.\n *\n * Aquí solo se adapta lo que ya tenemos (SessionManager, AgentSession) a esa\n * interfaz. El acoplamiento a un esquema que upstream marca como experimental\n * queda contenido en este fichero y en `serve.ts`: si cambia una firma, se\n * arregla aquí y en ningún otro sitio.\n */\n\nimport type {\n\tModelMetadata,\n\tModelRef,\n\tSessionMetadata,\n\tSessionPhase,\n\tSessionSnapshot,\n\tThinkingLevel,\n} from \"@earendil-works/pi-protocol\";\nimport type {\n\tCreateSessionOptions,\n\tPiServerService,\n\tPiSessionRuntime,\n\tPiSessionRuntimeEvent,\n\tPromptInput,\n\tSteerInput,\n} from \"@earendil-works/pi-server\";\nimport type { AgentSession } from \"../core/agent-session.ts\";\nimport { SessionManager } from \"../core/session-manager.ts\";\nimport { createExtensionHandler } from \"./extension-ops.ts\";\nimport { projectTranscript } from \"./transcript.ts\";\n\n/** Crea la AgentSession subyacente. Inyectable para tests. */\nexport type CreateServedSession = (options: {\n\tcwd: string;\n\tsessionManager: SessionManager;\n\tmodel?: ModelRef;\n\tthinkingLevel?: ThinkingLevel;\n}) => Promise<AgentSession>;\n\nexport interface AdaServerServiceOptions {\n\tagentDir: string;\n\tdefaultCwd: string;\n\tcreateSession: CreateServedSession;\n\tlistModels?: () => Promise<ModelMetadata[]>;\n}\n\n/**\n * Un runtime adquirido sobre una AgentSession viva.\n *\n * `revision` es monótona y sube en cada evento: es lo que permite a un cliente\n * saber que su copia está obsoleta sin comparar transcripts enteros.\n */\nexport class AdaSessionRuntime implements PiSessionRuntime {\n\tprivate listeners = new Set<(event: PiSessionRuntimeEvent) => void>();\n\tprivate revision = 0;\n\tprivate phase: SessionPhase = \"idle\";\n\tprivate unsubscribe: (() => void) | null = null;\n\tprivate disposed = false;\n\n\t// Accesibles para las operaciones de extensión (extension-ops.ts), que\n\t// necesitan la sesión y su manager y viven fuera de esta clase para no\n\t// engordarla con una op por cada cosa que se le ocurra a un cliente.\n\treadonly session: AgentSession;\n\treadonly sessionManager: SessionManager;\n\tprivate createdAt: number;\n\n\tconstructor(session: AgentSession, sessionManager: SessionManager, createdAt: number) {\n\t\tthis.session = session;\n\t\tthis.sessionManager = sessionManager;\n\t\tthis.createdAt = createdAt;\n\t\tthis.unsubscribe = this.session.subscribe((event: { type?: string }) => {\n\t\t\t// Fase derivada de los eventos de la sesión: el cliente la pinta.\n\t\t\tif (event.type === \"agent_start\") this.phase = \"turn\";\n\t\t\telse if (event.type === \"agent_end\" || event.type === \"agent_settled\") this.phase = \"idle\";\n\t\t\tthis.revision++;\n\t\t\tthis.emit({ type: \"snapshot\" });\n\t\t});\n\t}\n\n\tprivate emit(event: PiSessionRuntimeEvent): void {\n\t\tfor (const listener of this.listeners) {\n\t\t\ttry {\n\t\t\t\tlistener(event);\n\t\t\t} catch {\n\t\t\t\t// Un cliente que revienta no debe tumbar la sesión.\n\t\t\t}\n\t\t}\n\t}\n\n\tsnapshot(): SessionSnapshot {\n\t\tconst messages = this.session.messages ?? [];\n\t\tconst model = this.session.model;\n\t\treturn {\n\t\t\tid: this.sessionManager.getSessionId(),\n\t\t\t...(this.sessionManager.getSessionName() ? { name: this.sessionManager.getSessionName() as string } : {}),\n\t\t\tcwd: this.sessionManager.getCwd() || process.cwd(),\n\t\t\tcreatedAt: this.createdAt,\n\t\t\tupdatedAt: Date.now(),\n\t\t\tphase: this.phase,\n\t\t\tmodel: { provider: model?.provider ?? \"unknown\", id: model?.id ?? \"unknown\" },\n\t\t\tthinkingLevel: (this.session.thinkingLevel ?? \"off\") as ThinkingLevel,\n\t\t\tattached: this.listeners.size > 0,\n\t\t\tlocked: false,\n\t\t\trevision: this.revision,\n\t\t\ttranscript: projectTranscript(messages as never),\n\t\t\t// El encolado de steering vive en la AgentSession y no se expone; se\n\t\t\t// declara vacío en vez de inventarlo.\n\t\t\tqueuedSteer: [],\n\t\t\tqueuedSteerCount: 0,\n\t\t};\n\t}\n\n\tgetPhase(): SessionPhase {\n\t\treturn this.phase;\n\t}\n\n\tasync prompt(input: PromptInput): Promise<void> {\n\t\tawait this.session.sendUserMessage(input.text);\n\t}\n\n\tasync steer(input: SteerInput): Promise<void> {\n\t\t// `steer` entra en el turno en curso; `prompt` abre uno nuevo.\n\t\tawait this.session.sendUserMessage(input.text, { streamingBehavior: \"steer\" } as never);\n\t}\n\n\tasync abort(): Promise<void> {\n\t\tawait this.session.abort();\n\t}\n\n\tasync setModel(model: ModelRef): Promise<void> {\n\t\t// setModel espera un Model resuelto; el protocolo manda una referencia.\n\t\tconst resolved = this.session.modelRuntime.getModel(model.provider, model.id);\n\t\tif (!resolved) throw new Error(`Modelo desconocido: ${model.provider}/${model.id}`);\n\t\tawait this.session.setModel(resolved);\n\t}\n\n\tasync setThinking(thinkingLevel: ThinkingLevel): Promise<void> {\n\t\tthis.session.setThinkingLevel(thinkingLevel as never);\n\t}\n\n\tsubscribe(listener: (event: PiSessionRuntimeEvent) => void): () => void {\n\t\tthis.listeners.add(listener);\n\t\treturn () => {\n\t\t\tthis.listeners.delete(listener);\n\t\t};\n\t}\n\n\tasync dispose(): Promise<void> {\n\t\tif (this.disposed) return;\n\t\tthis.disposed = true;\n\t\tthis.unsubscribe?.();\n\t\tthis.unsubscribe = null;\n\t\tthis.listeners.clear();\n\t}\n}\n\n/**\n * Servicio de sesiones residentes.\n *\n * Exclusividad: una sesión abierta dos veces devuelve el MISMO runtime en vez de\n * crear un segundo dueño de ejecución. Dos procesos escribiendo el mismo JSONL\n * es corrupción silenciosa, y con residencia deja de ser hipotético.\n */\nexport class AdaServerService implements PiServerService {\n\tprivate open = new Map<string, AdaSessionRuntime>();\n\tprivate extensionHandler: ReturnType<typeof createExtensionHandler> | undefined;\n\n\tprivate options: AdaServerServiceOptions;\n\n\tconstructor(options: AdaServerServiceOptions) {\n\t\tthis.options = options;\n\t}\n\n\tasync listSessions(): Promise<SessionMetadata[]> {\n\t\tconst sessions = await SessionManager.list(this.options.defaultCwd);\n\t\treturn sessions.map((s) => ({\n\t\t\tid: s.id,\n\t\t\tcreatedAt: s.created instanceof Date ? s.created.getTime() : 0,\n\t\t\t...(s.modified instanceof Date ? { updatedAt: s.modified.getTime() } : {}),\n\t\t\t...(s.name ? { sessionName: s.name } : {}),\n\t\t\t...(s.cwd ? { cwd: s.cwd } : {}),\n\t\t}));\n\t}\n\n\tasync listModels(): Promise<ModelMetadata[]> {\n\t\treturn (await this.options.listModels?.()) ?? [];\n\t}\n\n\tasync createSession(options: CreateSessionOptions): Promise<PiSessionRuntime> {\n\t\tconst cwd = options.cwd ?? this.options.defaultCwd;\n\t\tconst sessionManager = SessionManager.create(cwd);\n\t\tconst session = await this.options.createSession({\n\t\t\tcwd,\n\t\t\tsessionManager,\n\t\t\tmodel: options.model,\n\t\t\tthinkingLevel: options.thinkingLevel,\n\t\t});\n\t\tif (options.name) sessionManager.appendSessionInfo(options.name);\n\t\tconst runtime = new AdaSessionRuntime(session, sessionManager, Date.now());\n\t\t// PiServer asigna el id; se persiste ese exacto para poder reabrir.\n\t\tthis.open.set(options.id, runtime);\n\t\tthis.open.set(sessionManager.getSessionId(), runtime);\n\t\treturn runtime;\n\t}\n\n\tasync openSession(sessionId: string): Promise<PiSessionRuntime> {\n\t\tconst existing = this.open.get(sessionId);\n\t\tif (existing) return existing;\n\t\tconst sessions = await SessionManager.list(this.options.defaultCwd);\n\t\tconst found = sessions.find((s) => s.id === sessionId || s.id.startsWith(sessionId));\n\t\tif (!found) throw new Error(`Sesión no encontrada: ${sessionId}`);\n\t\tconst sessionManager = SessionManager.open(found.path, undefined, found.cwd || this.options.defaultCwd);\n\t\tconst session = await this.options.createSession({ cwd: found.cwd || this.options.defaultCwd, sessionManager });\n\t\tconst runtime = new AdaSessionRuntime(session, sessionManager, found.created?.getTime?.() ?? Date.now());\n\t\tthis.open.set(sessionId, runtime);\n\t\treturn runtime;\n\t}\n\n\t/**\n\t * Operaciones propias de Ada (compact/rename/fork/kill).\n\t *\n\t * Se delega en `extension-ops.ts` en vez de crecer aquí: el servicio es la\n\t * frontera con el protocolo, no el sitio donde acumular una op por cada cosa\n\t * que se le ocurra a un cliente.\n\t */\n\tasync extension(request: import(\"@earendil-works/pi-server\").ExtensionRequest): Promise<unknown> {\n\t\tthis.extensionHandler ??= createExtensionHandler({\n\t\t\tforget: (sessionId) => {\n\t\t\t\t// Se retiran TODOS los alias del runtime: `createSession` registra el\n\t\t\t\t// id del servidor y el del SessionManager, y dejar uno colgando haría\n\t\t\t\t// que un `open` posterior devolviera un runtime ya cerrado.\n\t\t\t\tconst runtime = this.open.get(sessionId);\n\t\t\t\tif (!runtime) return;\n\t\t\t\tfor (const [key, value] of [...this.open]) {\n\t\t\t\t\tif (value === runtime) this.open.delete(key);\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t\treturn this.extensionHandler(request);\n\t}\n\n\t/** Cierra todos los runtimes vivos (apagado del servidor). */\n\tasync disposeAll(): Promise<void> {\n\t\tconst seen = new Set<AdaSessionRuntime>();\n\t\tfor (const runtime of this.open.values()) {\n\t\t\tif (seen.has(runtime)) continue;\n\t\t\tseen.add(runtime);\n\t\t\tawait runtime.dispose();\n\t\t}\n\t\tthis.open.clear();\n\t}\n}\n"]}
@@ -0,0 +1,213 @@
1
+ /**
2
+ * Implementación de `PiServerService` — sesiones residentes de Ada.
3
+ *
4
+ * Ada distribuye `packages/server` y `packages/client` de upstream desde hace
5
+ * versiones y NADIE los implementaba: `PiServerService` es una interfaz de 4
6
+ * métodos que estaba a cero. Ese era todo el hueco frente a un competidor que,
7
+ * tras BORRAR esos paquetes de su fork, construyó ~20k líneas de demonio a mano.
8
+ *
9
+ * Aquí solo se adapta lo que ya tenemos (SessionManager, AgentSession) a esa
10
+ * interfaz. El acoplamiento a un esquema que upstream marca como experimental
11
+ * queda contenido en este fichero y en `serve.ts`: si cambia una firma, se
12
+ * arregla aquí y en ningún otro sitio.
13
+ */
14
+ import { SessionManager } from "../core/session-manager.js";
15
+ import { createExtensionHandler } from "./extension-ops.js";
16
+ import { projectTranscript } from "./transcript.js";
17
+ /**
18
+ * Un runtime adquirido sobre una AgentSession viva.
19
+ *
20
+ * `revision` es monótona y sube en cada evento: es lo que permite a un cliente
21
+ * saber que su copia está obsoleta sin comparar transcripts enteros.
22
+ */
23
+ export class AdaSessionRuntime {
24
+ listeners = new Set();
25
+ revision = 0;
26
+ phase = "idle";
27
+ unsubscribe = null;
28
+ disposed = false;
29
+ // Accesibles para las operaciones de extensión (extension-ops.ts), que
30
+ // necesitan la sesión y su manager y viven fuera de esta clase para no
31
+ // engordarla con una op por cada cosa que se le ocurra a un cliente.
32
+ session;
33
+ sessionManager;
34
+ createdAt;
35
+ constructor(session, sessionManager, createdAt) {
36
+ this.session = session;
37
+ this.sessionManager = sessionManager;
38
+ this.createdAt = createdAt;
39
+ this.unsubscribe = this.session.subscribe((event) => {
40
+ // Fase derivada de los eventos de la sesión: el cliente la pinta.
41
+ if (event.type === "agent_start")
42
+ this.phase = "turn";
43
+ else if (event.type === "agent_end" || event.type === "agent_settled")
44
+ this.phase = "idle";
45
+ this.revision++;
46
+ this.emit({ type: "snapshot" });
47
+ });
48
+ }
49
+ emit(event) {
50
+ for (const listener of this.listeners) {
51
+ try {
52
+ listener(event);
53
+ }
54
+ catch {
55
+ // Un cliente que revienta no debe tumbar la sesión.
56
+ }
57
+ }
58
+ }
59
+ snapshot() {
60
+ const messages = this.session.messages ?? [];
61
+ const model = this.session.model;
62
+ return {
63
+ id: this.sessionManager.getSessionId(),
64
+ ...(this.sessionManager.getSessionName() ? { name: this.sessionManager.getSessionName() } : {}),
65
+ cwd: this.sessionManager.getCwd() || process.cwd(),
66
+ createdAt: this.createdAt,
67
+ updatedAt: Date.now(),
68
+ phase: this.phase,
69
+ model: { provider: model?.provider ?? "unknown", id: model?.id ?? "unknown" },
70
+ thinkingLevel: (this.session.thinkingLevel ?? "off"),
71
+ attached: this.listeners.size > 0,
72
+ locked: false,
73
+ revision: this.revision,
74
+ transcript: projectTranscript(messages),
75
+ // El encolado de steering vive en la AgentSession y no se expone; se
76
+ // declara vacío en vez de inventarlo.
77
+ queuedSteer: [],
78
+ queuedSteerCount: 0,
79
+ };
80
+ }
81
+ getPhase() {
82
+ return this.phase;
83
+ }
84
+ async prompt(input) {
85
+ await this.session.sendUserMessage(input.text);
86
+ }
87
+ async steer(input) {
88
+ // `steer` entra en el turno en curso; `prompt` abre uno nuevo.
89
+ await this.session.sendUserMessage(input.text, { streamingBehavior: "steer" });
90
+ }
91
+ async abort() {
92
+ await this.session.abort();
93
+ }
94
+ async setModel(model) {
95
+ // setModel espera un Model resuelto; el protocolo manda una referencia.
96
+ const resolved = this.session.modelRuntime.getModel(model.provider, model.id);
97
+ if (!resolved)
98
+ throw new Error(`Modelo desconocido: ${model.provider}/${model.id}`);
99
+ await this.session.setModel(resolved);
100
+ }
101
+ async setThinking(thinkingLevel) {
102
+ this.session.setThinkingLevel(thinkingLevel);
103
+ }
104
+ subscribe(listener) {
105
+ this.listeners.add(listener);
106
+ return () => {
107
+ this.listeners.delete(listener);
108
+ };
109
+ }
110
+ async dispose() {
111
+ if (this.disposed)
112
+ return;
113
+ this.disposed = true;
114
+ this.unsubscribe?.();
115
+ this.unsubscribe = null;
116
+ this.listeners.clear();
117
+ }
118
+ }
119
+ /**
120
+ * Servicio de sesiones residentes.
121
+ *
122
+ * Exclusividad: una sesión abierta dos veces devuelve el MISMO runtime en vez de
123
+ * crear un segundo dueño de ejecución. Dos procesos escribiendo el mismo JSONL
124
+ * es corrupción silenciosa, y con residencia deja de ser hipotético.
125
+ */
126
+ export class AdaServerService {
127
+ open = new Map();
128
+ extensionHandler;
129
+ options;
130
+ constructor(options) {
131
+ this.options = options;
132
+ }
133
+ async listSessions() {
134
+ const sessions = await SessionManager.list(this.options.defaultCwd);
135
+ return sessions.map((s) => ({
136
+ id: s.id,
137
+ createdAt: s.created instanceof Date ? s.created.getTime() : 0,
138
+ ...(s.modified instanceof Date ? { updatedAt: s.modified.getTime() } : {}),
139
+ ...(s.name ? { sessionName: s.name } : {}),
140
+ ...(s.cwd ? { cwd: s.cwd } : {}),
141
+ }));
142
+ }
143
+ async listModels() {
144
+ return (await this.options.listModels?.()) ?? [];
145
+ }
146
+ async createSession(options) {
147
+ const cwd = options.cwd ?? this.options.defaultCwd;
148
+ const sessionManager = SessionManager.create(cwd);
149
+ const session = await this.options.createSession({
150
+ cwd,
151
+ sessionManager,
152
+ model: options.model,
153
+ thinkingLevel: options.thinkingLevel,
154
+ });
155
+ if (options.name)
156
+ sessionManager.appendSessionInfo(options.name);
157
+ const runtime = new AdaSessionRuntime(session, sessionManager, Date.now());
158
+ // PiServer asigna el id; se persiste ese exacto para poder reabrir.
159
+ this.open.set(options.id, runtime);
160
+ this.open.set(sessionManager.getSessionId(), runtime);
161
+ return runtime;
162
+ }
163
+ async openSession(sessionId) {
164
+ const existing = this.open.get(sessionId);
165
+ if (existing)
166
+ return existing;
167
+ const sessions = await SessionManager.list(this.options.defaultCwd);
168
+ const found = sessions.find((s) => s.id === sessionId || s.id.startsWith(sessionId));
169
+ if (!found)
170
+ throw new Error(`Sesión no encontrada: ${sessionId}`);
171
+ const sessionManager = SessionManager.open(found.path, undefined, found.cwd || this.options.defaultCwd);
172
+ const session = await this.options.createSession({ cwd: found.cwd || this.options.defaultCwd, sessionManager });
173
+ const runtime = new AdaSessionRuntime(session, sessionManager, found.created?.getTime?.() ?? Date.now());
174
+ this.open.set(sessionId, runtime);
175
+ return runtime;
176
+ }
177
+ /**
178
+ * Operaciones propias de Ada (compact/rename/fork/kill).
179
+ *
180
+ * Se delega en `extension-ops.ts` en vez de crecer aquí: el servicio es la
181
+ * frontera con el protocolo, no el sitio donde acumular una op por cada cosa
182
+ * que se le ocurra a un cliente.
183
+ */
184
+ async extension(request) {
185
+ this.extensionHandler ??= createExtensionHandler({
186
+ forget: (sessionId) => {
187
+ // Se retiran TODOS los alias del runtime: `createSession` registra el
188
+ // id del servidor y el del SessionManager, y dejar uno colgando haría
189
+ // que un `open` posterior devolviera un runtime ya cerrado.
190
+ const runtime = this.open.get(sessionId);
191
+ if (!runtime)
192
+ return;
193
+ for (const [key, value] of [...this.open]) {
194
+ if (value === runtime)
195
+ this.open.delete(key);
196
+ }
197
+ },
198
+ });
199
+ return this.extensionHandler(request);
200
+ }
201
+ /** Cierra todos los runtimes vivos (apagado del servidor). */
202
+ async disposeAll() {
203
+ const seen = new Set();
204
+ for (const runtime of this.open.values()) {
205
+ if (seen.has(runtime))
206
+ continue;
207
+ seen.add(runtime);
208
+ await runtime.dispose();
209
+ }
210
+ this.open.clear();
211
+ }
212
+ }
213
+ //# sourceMappingURL=pi-server-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi-server-service.js","sourceRoot":"","sources":["../../src/server/pi-server-service.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Implementación de `PiServerService` — sesiones residentes de Ada.\n *\n * Ada distribuye `packages/server` y `packages/client` de upstream desde hace\n * versiones y NADIE los implementaba: `PiServerService` es una interfaz de 4\n * métodos que estaba a cero. Ese era todo el hueco frente a un competidor que,\n * tras BORRAR esos paquetes de su fork, construyó ~20k líneas de demonio a mano.\n *\n * Aquí solo se adapta lo que ya tenemos (SessionManager, AgentSession) a esa\n * interfaz. El acoplamiento a un esquema que upstream marca como experimental\n * queda contenido en este fichero y en `serve.ts`: si cambia una firma, se\n * arregla aquí y en ningún otro sitio.\n */\n\nimport type {\n\tModelMetadata,\n\tModelRef,\n\tSessionMetadata,\n\tSessionPhase,\n\tSessionSnapshot,\n\tThinkingLevel,\n} from \"@earendil-works/pi-protocol\";\nimport type {\n\tCreateSessionOptions,\n\tPiServerService,\n\tPiSessionRuntime,\n\tPiSessionRuntimeEvent,\n\tPromptInput,\n\tSteerInput,\n} from \"@earendil-works/pi-server\";\nimport type { AgentSession } from \"../core/agent-session.ts\";\nimport { SessionManager } from \"../core/session-manager.ts\";\nimport { createExtensionHandler } from \"./extension-ops.ts\";\nimport { projectTranscript } from \"./transcript.ts\";\n\n/** Crea la AgentSession subyacente. Inyectable para tests. */\nexport type CreateServedSession = (options: {\n\tcwd: string;\n\tsessionManager: SessionManager;\n\tmodel?: ModelRef;\n\tthinkingLevel?: ThinkingLevel;\n}) => Promise<AgentSession>;\n\nexport interface AdaServerServiceOptions {\n\tagentDir: string;\n\tdefaultCwd: string;\n\tcreateSession: CreateServedSession;\n\tlistModels?: () => Promise<ModelMetadata[]>;\n}\n\n/**\n * Un runtime adquirido sobre una AgentSession viva.\n *\n * `revision` es monótona y sube en cada evento: es lo que permite a un cliente\n * saber que su copia está obsoleta sin comparar transcripts enteros.\n */\nexport class AdaSessionRuntime implements PiSessionRuntime {\n\tprivate listeners = new Set<(event: PiSessionRuntimeEvent) => void>();\n\tprivate revision = 0;\n\tprivate phase: SessionPhase = \"idle\";\n\tprivate unsubscribe: (() => void) | null = null;\n\tprivate disposed = false;\n\n\t// Accesibles para las operaciones de extensión (extension-ops.ts), que\n\t// necesitan la sesión y su manager y viven fuera de esta clase para no\n\t// engordarla con una op por cada cosa que se le ocurra a un cliente.\n\treadonly session: AgentSession;\n\treadonly sessionManager: SessionManager;\n\tprivate createdAt: number;\n\n\tconstructor(session: AgentSession, sessionManager: SessionManager, createdAt: number) {\n\t\tthis.session = session;\n\t\tthis.sessionManager = sessionManager;\n\t\tthis.createdAt = createdAt;\n\t\tthis.unsubscribe = this.session.subscribe((event: { type?: string }) => {\n\t\t\t// Fase derivada de los eventos de la sesión: el cliente la pinta.\n\t\t\tif (event.type === \"agent_start\") this.phase = \"turn\";\n\t\t\telse if (event.type === \"agent_end\" || event.type === \"agent_settled\") this.phase = \"idle\";\n\t\t\tthis.revision++;\n\t\t\tthis.emit({ type: \"snapshot\" });\n\t\t});\n\t}\n\n\tprivate emit(event: PiSessionRuntimeEvent): void {\n\t\tfor (const listener of this.listeners) {\n\t\t\ttry {\n\t\t\t\tlistener(event);\n\t\t\t} catch {\n\t\t\t\t// Un cliente que revienta no debe tumbar la sesión.\n\t\t\t}\n\t\t}\n\t}\n\n\tsnapshot(): SessionSnapshot {\n\t\tconst messages = this.session.messages ?? [];\n\t\tconst model = this.session.model;\n\t\treturn {\n\t\t\tid: this.sessionManager.getSessionId(),\n\t\t\t...(this.sessionManager.getSessionName() ? { name: this.sessionManager.getSessionName() as string } : {}),\n\t\t\tcwd: this.sessionManager.getCwd() || process.cwd(),\n\t\t\tcreatedAt: this.createdAt,\n\t\t\tupdatedAt: Date.now(),\n\t\t\tphase: this.phase,\n\t\t\tmodel: { provider: model?.provider ?? \"unknown\", id: model?.id ?? \"unknown\" },\n\t\t\tthinkingLevel: (this.session.thinkingLevel ?? \"off\") as ThinkingLevel,\n\t\t\tattached: this.listeners.size > 0,\n\t\t\tlocked: false,\n\t\t\trevision: this.revision,\n\t\t\ttranscript: projectTranscript(messages as never),\n\t\t\t// El encolado de steering vive en la AgentSession y no se expone; se\n\t\t\t// declara vacío en vez de inventarlo.\n\t\t\tqueuedSteer: [],\n\t\t\tqueuedSteerCount: 0,\n\t\t};\n\t}\n\n\tgetPhase(): SessionPhase {\n\t\treturn this.phase;\n\t}\n\n\tasync prompt(input: PromptInput): Promise<void> {\n\t\tawait this.session.sendUserMessage(input.text);\n\t}\n\n\tasync steer(input: SteerInput): Promise<void> {\n\t\t// `steer` entra en el turno en curso; `prompt` abre uno nuevo.\n\t\tawait this.session.sendUserMessage(input.text, { streamingBehavior: \"steer\" } as never);\n\t}\n\n\tasync abort(): Promise<void> {\n\t\tawait this.session.abort();\n\t}\n\n\tasync setModel(model: ModelRef): Promise<void> {\n\t\t// setModel espera un Model resuelto; el protocolo manda una referencia.\n\t\tconst resolved = this.session.modelRuntime.getModel(model.provider, model.id);\n\t\tif (!resolved) throw new Error(`Modelo desconocido: ${model.provider}/${model.id}`);\n\t\tawait this.session.setModel(resolved);\n\t}\n\n\tasync setThinking(thinkingLevel: ThinkingLevel): Promise<void> {\n\t\tthis.session.setThinkingLevel(thinkingLevel as never);\n\t}\n\n\tsubscribe(listener: (event: PiSessionRuntimeEvent) => void): () => void {\n\t\tthis.listeners.add(listener);\n\t\treturn () => {\n\t\t\tthis.listeners.delete(listener);\n\t\t};\n\t}\n\n\tasync dispose(): Promise<void> {\n\t\tif (this.disposed) return;\n\t\tthis.disposed = true;\n\t\tthis.unsubscribe?.();\n\t\tthis.unsubscribe = null;\n\t\tthis.listeners.clear();\n\t}\n}\n\n/**\n * Servicio de sesiones residentes.\n *\n * Exclusividad: una sesión abierta dos veces devuelve el MISMO runtime en vez de\n * crear un segundo dueño de ejecución. Dos procesos escribiendo el mismo JSONL\n * es corrupción silenciosa, y con residencia deja de ser hipotético.\n */\nexport class AdaServerService implements PiServerService {\n\tprivate open = new Map<string, AdaSessionRuntime>();\n\tprivate extensionHandler: ReturnType<typeof createExtensionHandler> | undefined;\n\n\tprivate options: AdaServerServiceOptions;\n\n\tconstructor(options: AdaServerServiceOptions) {\n\t\tthis.options = options;\n\t}\n\n\tasync listSessions(): Promise<SessionMetadata[]> {\n\t\tconst sessions = await SessionManager.list(this.options.defaultCwd);\n\t\treturn sessions.map((s) => ({\n\t\t\tid: s.id,\n\t\t\tcreatedAt: s.created instanceof Date ? s.created.getTime() : 0,\n\t\t\t...(s.modified instanceof Date ? { updatedAt: s.modified.getTime() } : {}),\n\t\t\t...(s.name ? { sessionName: s.name } : {}),\n\t\t\t...(s.cwd ? { cwd: s.cwd } : {}),\n\t\t}));\n\t}\n\n\tasync listModels(): Promise<ModelMetadata[]> {\n\t\treturn (await this.options.listModels?.()) ?? [];\n\t}\n\n\tasync createSession(options: CreateSessionOptions): Promise<PiSessionRuntime> {\n\t\tconst cwd = options.cwd ?? this.options.defaultCwd;\n\t\tconst sessionManager = SessionManager.create(cwd);\n\t\tconst session = await this.options.createSession({\n\t\t\tcwd,\n\t\t\tsessionManager,\n\t\t\tmodel: options.model,\n\t\t\tthinkingLevel: options.thinkingLevel,\n\t\t});\n\t\tif (options.name) sessionManager.appendSessionInfo(options.name);\n\t\tconst runtime = new AdaSessionRuntime(session, sessionManager, Date.now());\n\t\t// PiServer asigna el id; se persiste ese exacto para poder reabrir.\n\t\tthis.open.set(options.id, runtime);\n\t\tthis.open.set(sessionManager.getSessionId(), runtime);\n\t\treturn runtime;\n\t}\n\n\tasync openSession(sessionId: string): Promise<PiSessionRuntime> {\n\t\tconst existing = this.open.get(sessionId);\n\t\tif (existing) return existing;\n\t\tconst sessions = await SessionManager.list(this.options.defaultCwd);\n\t\tconst found = sessions.find((s) => s.id === sessionId || s.id.startsWith(sessionId));\n\t\tif (!found) throw new Error(`Sesión no encontrada: ${sessionId}`);\n\t\tconst sessionManager = SessionManager.open(found.path, undefined, found.cwd || this.options.defaultCwd);\n\t\tconst session = await this.options.createSession({ cwd: found.cwd || this.options.defaultCwd, sessionManager });\n\t\tconst runtime = new AdaSessionRuntime(session, sessionManager, found.created?.getTime?.() ?? Date.now());\n\t\tthis.open.set(sessionId, runtime);\n\t\treturn runtime;\n\t}\n\n\t/**\n\t * Operaciones propias de Ada (compact/rename/fork/kill).\n\t *\n\t * Se delega en `extension-ops.ts` en vez de crecer aquí: el servicio es la\n\t * frontera con el protocolo, no el sitio donde acumular una op por cada cosa\n\t * que se le ocurra a un cliente.\n\t */\n\tasync extension(request: import(\"@earendil-works/pi-server\").ExtensionRequest): Promise<unknown> {\n\t\tthis.extensionHandler ??= createExtensionHandler({\n\t\t\tforget: (sessionId) => {\n\t\t\t\t// Se retiran TODOS los alias del runtime: `createSession` registra el\n\t\t\t\t// id del servidor y el del SessionManager, y dejar uno colgando haría\n\t\t\t\t// que un `open` posterior devolviera un runtime ya cerrado.\n\t\t\t\tconst runtime = this.open.get(sessionId);\n\t\t\t\tif (!runtime) return;\n\t\t\t\tfor (const [key, value] of [...this.open]) {\n\t\t\t\t\tif (value === runtime) this.open.delete(key);\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t\treturn this.extensionHandler(request);\n\t}\n\n\t/** Cierra todos los runtimes vivos (apagado del servidor). */\n\tasync disposeAll(): Promise<void> {\n\t\tconst seen = new Set<AdaSessionRuntime>();\n\t\tfor (const runtime of this.open.values()) {\n\t\t\tif (seen.has(runtime)) continue;\n\t\t\tseen.add(runtime);\n\t\t\tawait runtime.dispose();\n\t\t}\n\t\tthis.open.clear();\n\t}\n}\n"]}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Reloj del scheduler dentro de `ada-cli serve`.
3
+ *
4
+ * El `Scheduler` sabe qué toca ejecutar (`claimDue`) y cómo cerrar una ejecución
5
+ * (`complete`), pero no ejecuta nada: necesita un proceso vivo que le pregunte.
6
+ * Ese proceso es el servidor, que es justamente el que ya mantiene sesiones
7
+ * residentes.
8
+ *
9
+ * Cada job entrega su prompt a una sesión propia. No se reutiliza una sesión
10
+ * compartida a propósito: dos jobs recurrentes escribiendo en el mismo historial
11
+ * se contaminarían el contexto mutuamente.
12
+ */
13
+ import type { Scheduler } from "../core/scheduler/scheduler.ts";
14
+ export interface SchedulerTickOptions {
15
+ scheduler: Scheduler;
16
+ /** Entrega el prompt de un job. Devuelve false si falló. */
17
+ dispatch: (job: {
18
+ id: string;
19
+ prompt: string;
20
+ }) => Promise<boolean>;
21
+ intervalMs?: number;
22
+ /** Reloj inyectable para los tests. */
23
+ now?: () => string;
24
+ onError?: (error: Error) => void;
25
+ }
26
+ export interface SchedulerTickHandle {
27
+ stop: () => void;
28
+ /** Ejecuta un ciclo ahora mismo. Para tests y para el arranque. */
29
+ tick: () => Promise<number>;
30
+ }
31
+ export declare function startSchedulerTick(options: SchedulerTickOptions): SchedulerTickHandle;
32
+ //# sourceMappingURL=scheduler-tick.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler-tick.d.ts","sourceRoot":"","sources":["../../src/server/scheduler-tick.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAEhE,MAAM,WAAW,oBAAoB;IACpC,SAAS,EAAE,SAAS,CAAC;IACrB,6DAA4D;IAC5D,QAAQ,EAAE,CAAC,GAAG,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,mBAAmB;IACnC,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,mEAAmE;IACnE,IAAI,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5B;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,oBAAoB,GAAG,mBAAmB,CAmCrF","sourcesContent":["/**\n * Reloj del scheduler dentro de `ada-cli serve`.\n *\n * El `Scheduler` sabe qué toca ejecutar (`claimDue`) y cómo cerrar una ejecución\n * (`complete`), pero no ejecuta nada: necesita un proceso vivo que le pregunte.\n * Ese proceso es el servidor, que es justamente el que ya mantiene sesiones\n * residentes.\n *\n * Cada job entrega su prompt a una sesión propia. No se reutiliza una sesión\n * compartida a propósito: dos jobs recurrentes escribiendo en el mismo historial\n * se contaminarían el contexto mutuamente.\n */\n\nimport type { Scheduler } from \"../core/scheduler/scheduler.ts\";\n\nexport interface SchedulerTickOptions {\n\tscheduler: Scheduler;\n\t/** Entrega el prompt de un job. Devuelve false si falló. */\n\tdispatch: (job: { id: string; prompt: string }) => Promise<boolean>;\n\tintervalMs?: number;\n\t/** Reloj inyectable para los tests. */\n\tnow?: () => string;\n\tonError?: (error: Error) => void;\n}\n\nexport interface SchedulerTickHandle {\n\tstop: () => void;\n\t/** Ejecuta un ciclo ahora mismo. Para tests y para el arranque. */\n\ttick: () => Promise<number>;\n}\n\nexport function startSchedulerTick(options: SchedulerTickOptions): SchedulerTickHandle {\n\tconst now = options.now ?? (() => new Date().toISOString());\n\tconst intervalMs = options.intervalMs ?? 30_000;\n\n\t// Al arrancar se liberan las ejecuciones que murieron con el proceso\n\t// anterior: sin esto un crash deja el job marcado \"en vuelo\" para siempre y\n\t// no se vuelve a entregar nunca.\n\toptions.scheduler.reconcile(now());\n\n\tconst tick = async (): Promise<number> => {\n\t\tlet dispatched = 0;\n\t\tfor (const { dispatchId, job } of options.scheduler.claimDue(now())) {\n\t\t\ttry {\n\t\t\t\tconst ok = await options.dispatch({ id: job.id, prompt: job.prompt });\n\t\t\t\toptions.scheduler.complete(dispatchId, ok);\n\t\t\t\tif (ok) dispatched++;\n\t\t\t} catch (error) {\n\t\t\t\t// Un job que revienta se cierra como fallo y NO tumba el reloj: el\n\t\t\t\t// resto de trabajos programados no tienen la culpa.\n\t\t\t\toptions.scheduler.complete(dispatchId, false);\n\t\t\t\toptions.onError?.(error instanceof Error ? error : new Error(String(error)));\n\t\t\t}\n\t\t}\n\t\treturn dispatched;\n\t};\n\n\tconst timer = setInterval(() => {\n\t\tvoid tick().catch((error: unknown) => {\n\t\t\toptions.onError?.(error instanceof Error ? error : new Error(String(error)));\n\t\t});\n\t}, intervalMs);\n\t// El reloj no debe impedir que el proceso termine si todo lo demás acabó.\n\ttimer.unref?.();\n\n\treturn { stop: () => clearInterval(timer), tick };\n}\n"]}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Reloj del scheduler dentro de `ada-cli serve`.
3
+ *
4
+ * El `Scheduler` sabe qué toca ejecutar (`claimDue`) y cómo cerrar una ejecución
5
+ * (`complete`), pero no ejecuta nada: necesita un proceso vivo que le pregunte.
6
+ * Ese proceso es el servidor, que es justamente el que ya mantiene sesiones
7
+ * residentes.
8
+ *
9
+ * Cada job entrega su prompt a una sesión propia. No se reutiliza una sesión
10
+ * compartida a propósito: dos jobs recurrentes escribiendo en el mismo historial
11
+ * se contaminarían el contexto mutuamente.
12
+ */
13
+ export function startSchedulerTick(options) {
14
+ const now = options.now ?? (() => new Date().toISOString());
15
+ const intervalMs = options.intervalMs ?? 30_000;
16
+ // Al arrancar se liberan las ejecuciones que murieron con el proceso
17
+ // anterior: sin esto un crash deja el job marcado "en vuelo" para siempre y
18
+ // no se vuelve a entregar nunca.
19
+ options.scheduler.reconcile(now());
20
+ const tick = async () => {
21
+ let dispatched = 0;
22
+ for (const { dispatchId, job } of options.scheduler.claimDue(now())) {
23
+ try {
24
+ const ok = await options.dispatch({ id: job.id, prompt: job.prompt });
25
+ options.scheduler.complete(dispatchId, ok);
26
+ if (ok)
27
+ dispatched++;
28
+ }
29
+ catch (error) {
30
+ // Un job que revienta se cierra como fallo y NO tumba el reloj: el
31
+ // resto de trabajos programados no tienen la culpa.
32
+ options.scheduler.complete(dispatchId, false);
33
+ options.onError?.(error instanceof Error ? error : new Error(String(error)));
34
+ }
35
+ }
36
+ return dispatched;
37
+ };
38
+ const timer = setInterval(() => {
39
+ void tick().catch((error) => {
40
+ options.onError?.(error instanceof Error ? error : new Error(String(error)));
41
+ });
42
+ }, intervalMs);
43
+ // El reloj no debe impedir que el proceso termine si todo lo demás acabó.
44
+ timer.unref?.();
45
+ return { stop: () => clearInterval(timer), tick };
46
+ }
47
+ //# sourceMappingURL=scheduler-tick.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler-tick.js","sourceRoot":"","sources":["../../src/server/scheduler-tick.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAoBH,MAAM,UAAU,kBAAkB,CAAC,OAA6B,EAAuB;IACtF,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IAC5D,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,MAAM,CAAC;IAEhD,qEAAqE;IACrE,4EAA4E;IAC5E,iCAAiC;IACjC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC;IAEnC,MAAM,IAAI,GAAG,KAAK,IAAqB,EAAE,CAAC;QACzC,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,KAAK,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;YACrE,IAAI,CAAC;gBACJ,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;gBACtE,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;gBAC3C,IAAI,EAAE;oBAAE,UAAU,EAAE,CAAC;YACtB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,mEAAmE;gBACnE,oDAAoD;gBACpD,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;gBAC9C,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC9E,CAAC;QACF,CAAC;QACD,OAAO,UAAU,CAAC;IAAA,CAClB,CAAC;IAEF,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAC/B,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC;YACrC,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAAA,CAC7E,CAAC,CAAC;IAAA,CACH,EAAE,UAAU,CAAC,CAAC;IACf,4EAA0E;IAC1E,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;IAEhB,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;AAAA,CAClD","sourcesContent":["/**\n * Reloj del scheduler dentro de `ada-cli serve`.\n *\n * El `Scheduler` sabe qué toca ejecutar (`claimDue`) y cómo cerrar una ejecución\n * (`complete`), pero no ejecuta nada: necesita un proceso vivo que le pregunte.\n * Ese proceso es el servidor, que es justamente el que ya mantiene sesiones\n * residentes.\n *\n * Cada job entrega su prompt a una sesión propia. No se reutiliza una sesión\n * compartida a propósito: dos jobs recurrentes escribiendo en el mismo historial\n * se contaminarían el contexto mutuamente.\n */\n\nimport type { Scheduler } from \"../core/scheduler/scheduler.ts\";\n\nexport interface SchedulerTickOptions {\n\tscheduler: Scheduler;\n\t/** Entrega el prompt de un job. Devuelve false si falló. */\n\tdispatch: (job: { id: string; prompt: string }) => Promise<boolean>;\n\tintervalMs?: number;\n\t/** Reloj inyectable para los tests. */\n\tnow?: () => string;\n\tonError?: (error: Error) => void;\n}\n\nexport interface SchedulerTickHandle {\n\tstop: () => void;\n\t/** Ejecuta un ciclo ahora mismo. Para tests y para el arranque. */\n\ttick: () => Promise<number>;\n}\n\nexport function startSchedulerTick(options: SchedulerTickOptions): SchedulerTickHandle {\n\tconst now = options.now ?? (() => new Date().toISOString());\n\tconst intervalMs = options.intervalMs ?? 30_000;\n\n\t// Al arrancar se liberan las ejecuciones que murieron con el proceso\n\t// anterior: sin esto un crash deja el job marcado \"en vuelo\" para siempre y\n\t// no se vuelve a entregar nunca.\n\toptions.scheduler.reconcile(now());\n\n\tconst tick = async (): Promise<number> => {\n\t\tlet dispatched = 0;\n\t\tfor (const { dispatchId, job } of options.scheduler.claimDue(now())) {\n\t\t\ttry {\n\t\t\t\tconst ok = await options.dispatch({ id: job.id, prompt: job.prompt });\n\t\t\t\toptions.scheduler.complete(dispatchId, ok);\n\t\t\t\tif (ok) dispatched++;\n\t\t\t} catch (error) {\n\t\t\t\t// Un job que revienta se cierra como fallo y NO tumba el reloj: el\n\t\t\t\t// resto de trabajos programados no tienen la culpa.\n\t\t\t\toptions.scheduler.complete(dispatchId, false);\n\t\t\t\toptions.onError?.(error instanceof Error ? error : new Error(String(error)));\n\t\t\t}\n\t\t}\n\t\treturn dispatched;\n\t};\n\n\tconst timer = setInterval(() => {\n\t\tvoid tick().catch((error: unknown) => {\n\t\t\toptions.onError?.(error instanceof Error ? error : new Error(String(error)));\n\t\t});\n\t}, intervalMs);\n\t// El reloj no debe impedir que el proceso termine si todo lo demás acabó.\n\ttimer.unref?.();\n\n\treturn { stop: () => clearInterval(timer), tick };\n}\n"]}