@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 @@
1
+ {"version":3,"file":"usage-command.d.ts","sourceRoot":"","sources":["../../src/cli/usage-command.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA6IH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA0ExF","sourcesContent":["/**\n * `ada-cli usage` — qué se ha consumido de verdad, y cuánto queda.\n *\n * Lo consumido sale de los JSONL de sesión; la agregación vive en\n * `core/usage/aggregate.ts`. Lo que QUEDA no está en la sesión —vive en el\n * proveedor— así que la sección \"queda\" viene de `core/usage/cuota/`, que le\n * pregunta a cada proveedor con la credencial ya guardada en `auth.json`.\n */\n\nimport { readdirSync, readFileSync, statSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { readStoredCredential } from \"../core/auth-storage.ts\";\nimport { type LineaSesion, porCoste, resumir, type Totales } from \"../core/usage/aggregate.ts\";\nimport {\n\tconsultarCuota,\n\tErrorConsultaCuota,\n\tPROVEEDORES_CON_CUOTA,\n\ttype VentanaCuota,\n} from \"../core/usage/cuota/index.ts\";\n\nfunction leerSesiones(sessionsDir: string): Array<{ cwd?: string; lineas: LineaSesion[] }> {\n\tlet carpetas: string[];\n\ttry {\n\t\tcarpetas = readdirSync(sessionsDir);\n\t} catch {\n\t\treturn [];\n\t}\n\tconst sesiones: Array<{ cwd?: string; lineas: LineaSesion[] }> = [];\n\tfor (const carpeta of carpetas) {\n\t\tconst ruta = join(sessionsDir, carpeta);\n\t\tlet ficheros: string[];\n\t\ttry {\n\t\t\tif (!statSync(ruta).isDirectory()) continue;\n\t\t\tficheros = readdirSync(ruta).filter((f) => f.endsWith(\".jsonl\"));\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const fichero of ficheros) {\n\t\t\tconst lineas: LineaSesion[] = [];\n\t\t\ttry {\n\t\t\t\tfor (const linea of readFileSync(join(ruta, fichero), \"utf8\").split(\"\\n\")) {\n\t\t\t\t\tif (!linea.trim()) continue;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlineas.push(JSON.parse(linea) as LineaSesion);\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// Una línea corrupta no invalida la sesión entera.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (lineas.length > 0) sesiones.push({ lineas });\n\t\t}\n\t}\n\treturn sesiones;\n}\n\nconst miles = (n: number) => n.toLocaleString(\"es-ES\");\nconst dinero = (n: number) => `${n < 0.01 && n > 0 ? n.toFixed(5) : n.toFixed(2)} $`;\n\nconst ETIQUETA_PROVEEDOR_CUOTA: Record<string, string> = {\n\tanthropic: \"Anthropic (Claude)\",\n\topenrouter: \"OpenRouter\",\n\t\"openai-codex\": \"OpenAI Codex\",\n\t\"github-copilot\": \"GitHub Copilot\",\n\tgoogle: \"Gemini\",\n};\n\ntype ResultadoCuotaProveedor =\n\t| { estado: \"ventanas\"; ventanas: VentanaCuota[] }\n\t| { estado: \"no-publica\" }\n\t| { estado: \"fallo\"; mensaje: string };\n\n/**\n * Le pregunta a cada proveedor con credencial guardada cuánto le queda.\n *\n * Solo se pregunta a los que TIENEN credencial: preguntar por uno sin\n * configurar no distingue \"no publica cuota\" de \"no está en uso\", así que ni\n * se intenta ni se enseña.\n *\n * En paralelo: un proveedor que tarda (o agota los 10s) no debe retrasar la\n * respuesta de los demás — con los 5 configurados y todos fallando, en serie\n * serían ~50s solo para `ada-cli usage`.\n */\nasync function consultarQueda(agentDir: string): Promise<Array<[string, ResultadoCuotaProveedor]>> {\n\tconst authPath = join(agentDir, \"auth.json\");\n\tconst conCredencial = PROVEEDORES_CON_CUOTA.map(\n\t\t(proveedor) => [proveedor, readStoredCredential(proveedor, authPath)] as const,\n\t).filter((par): par is [string, NonNullable<(typeof par)[1]>] => par[1] !== undefined);\n\n\treturn Promise.all(\n\t\tconCredencial.map(async ([proveedor, credencial]): Promise<[string, ResultadoCuotaProveedor]> => {\n\t\t\ttry {\n\t\t\t\tconst ventanas = await consultarCuota(proveedor, credencial, { señal: AbortSignal.timeout(10_000) });\n\t\t\t\treturn [proveedor, ventanas ? { estado: \"ventanas\", ventanas } : { estado: \"no-publica\" }];\n\t\t\t} catch (error) {\n\t\t\t\t// `ErrorConsultaCuota` trae un mensaje pensado para enseñarse; un error\n\t\t\t\t// inesperado también se reporta como fallo, nunca como \"no publica\".\n\t\t\t\tconst mensaje = error instanceof ErrorConsultaCuota ? error.message : String(error);\n\t\t\t\treturn [proveedor, { estado: \"fallo\", mensaje }];\n\t\t\t}\n\t\t}),\n\t);\n}\n\nfunction formateaSeReinicia(seReinicia: number | null): string {\n\tif (seReinicia === null) return \"\";\n\tconst restanteMs = seReinicia - Date.now();\n\tif (restanteMs <= 0) return \" (se reinicia ya)\";\n\tconst horas = restanteMs / 3_600_000;\n\tif (horas < 48) return ` (se reinicia en ${Math.max(1, Math.round(horas))} h)`;\n\treturn ` (se reinicia en ${Math.round(horas / 24)} d)`;\n}\n\nfunction formateaVentana(v: VentanaCuota): string {\n\tconst restante = Math.max(0, v.limite - v.usado);\n\tconst cuando = formateaSeReinicia(v.seReinicia);\n\tif (v.unidad === \"usd\") return `quedan ${dinero(restante)} de ${dinero(v.limite)}${cuando}`;\n\tif (v.unidad === \"peticiones\") return `quedan ${miles(restante)} de ${miles(v.limite)}${cuando}`;\n\treturn `${v.usado.toFixed(1)}% usado, quedan ${restante.toFixed(1)}%${cuando}`;\n}\n\nfunction tablaQueda(resultados: Array<[string, ResultadoCuotaProveedor]>): void {\n\tif (resultados.length === 0) return;\n\tconsole.log(\"\\nQueda del plan\");\n\tfor (const [proveedor, r] of resultados) {\n\t\tconst etiqueta = ETIQUETA_PROVEEDOR_CUOTA[proveedor] ?? proveedor;\n\t\tif (r.estado === \"no-publica\") {\n\t\t\tconsole.log(` ${etiqueta}: no publica cuota para esta credencial`);\n\t\t} else if (r.estado === \"fallo\") {\n\t\t\tconsole.log(` ${etiqueta}: no se pudo consultar (${r.mensaje})`);\n\t\t} else {\n\t\t\tfor (const v of r.ventanas) console.log(` ${etiqueta} · ${v.etiqueta}: ${formateaVentana(v)}`);\n\t\t}\n\t}\n}\n\nfunction tabla(titulo: string, filas: Array<[string, Totales]>, limite: number): void {\n\tif (filas.length === 0) return;\n\tconsole.log(`\\n${titulo}`);\n\tconst ancho = Math.min(52, Math.max(...filas.slice(0, limite).map(([k]) => k.length)));\n\tfor (const [clave, t] of filas.slice(0, limite)) {\n\t\tconst nombre = clave.length > ancho ? `…${clave.slice(-(ancho - 1))}` : clave.padEnd(ancho);\n\t\tconsole.log(` ${nombre} ${dinero(t.coste).padStart(10)} ${miles(t.entrada + t.salida).padStart(12)} tok`);\n\t}\n\tif (filas.length > limite) console.log(` … y ${filas.length - limite} más`);\n}\n\nexport async function runUsageCommand(args: string[], agentDir: string): Promise<boolean> {\n\tif (args.includes(\"--help\") || args.includes(\"-h\")) {\n\t\tconsole.log(`Uso:\n ada-cli usage [--days N] [--json] [--all] [--sin-queda]\n\n --days N Solo los últimos N días (por defecto, todo)\n --json Salida en JSON, para conectarlo a otra cosa\n --all Incluye las sesiones de directorios temporales (las de los tests)\n --sin-queda No pregunta a los proveedores cuánto queda del plan (más rápido, sin red)\n\nLos tokens de caché se cuentan aparte: meterlos en el total haría que un día\ncon mucha caché pareciera carísimo cuando es justo lo contrario.\n\nAdemás de lo GASTADO (de los JSONL de sesión), enseña lo que QUEDA del plan\npara cada proveedor con credencial guardada: se lo pregunta al proveedor y\ncachea la respuesta unos minutos. Un proveedor que no publica cuota lo dice\nexplícitamente; si la consulta falla, también — nunca se confunde con \"sin\nlímite\".`);\n\t\treturn true;\n\t}\n\n\tconst iDias = args.indexOf(\"--days\");\n\tlet desde: string | undefined;\n\tif (iDias >= 0) {\n\t\tconst n = Number(args[iDias + 1]);\n\t\tif (!Number.isFinite(n) || n <= 0) {\n\t\t\tconsole.error(\"--days necesita un número de días positivo.\");\n\t\t\tprocess.exitCode = 1;\n\t\t\treturn true;\n\t\t}\n\t\tdesde = new Date(Date.now() - n * 86_400_000).toISOString();\n\t}\n\n\tconst resumen = resumir(leerSesiones(join(agentDir, \"sessions\")), {\n\t\tdesde,\n\t\tincluirTemporales: args.includes(\"--all\"),\n\t});\n\tconst sinQueda = args.includes(\"--sin-queda\");\n\n\tif (args.includes(\"--json\")) {\n\t\tconst queda = sinQueda ? {} : Object.fromEntries(await consultarQueda(agentDir));\n\t\tconsole.log(JSON.stringify({ ...resumen, queda }, null, 2));\n\t\treturn true;\n\t}\n\n\tif (resumen.mensajes === 0) {\n\t\tconsole.log(desde ? \"Sin consumo registrado en ese periodo.\" : \"Sin consumo registrado todavía.\");\n\t\tif (!sinQueda) tablaQueda(await consultarQueda(agentDir));\n\t\treturn true;\n\t}\n\n\tconst dias = Object.keys(resumen.porDia).sort();\n\tconsole.log(`Consumo${desde ? ` (últimos ${args[iDias + 1]} días)` : \"\"}`);\n\tconsole.log(\n\t\t` ${miles(resumen.sesiones)} sesiones · ${miles(resumen.mensajes)} respuestas · ${dias.length} días activos`,\n\t);\n\tconsole.log(` entrada ${miles(resumen.entrada).padStart(14)} tok`);\n\tconsole.log(` salida ${miles(resumen.salida).padStart(14)} tok`);\n\tconsole.log(` caché ${miles(resumen.cacheRead).padStart(14)} tok leídos, ${miles(resumen.cacheWrite)} escritos`);\n\tconsole.log(` coste ${dinero(resumen.coste).padStart(14)}`);\n\n\tif (resumen.sesionesTemporales > 0) {\n\t\t// Se dice siempre: esconder sesiones sin avisar es cómo un panel empieza a\n\t\t// mentir sin que nadie se entere.\n\t\tconsole.log(\n\t\t\t` (${miles(resumen.sesionesTemporales)} sesiones de directorios temporales excluidas; --all para incluirlas)`,\n\t\t);\n\t}\n\n\ttabla(\"Por modelo\", porCoste(resumen.porModelo), 10);\n\ttabla(\"Por proyecto\", porCoste(resumen.porProyecto), 10);\n\ttabla(\"Por día (los más caros)\", porCoste(resumen.porDia), 7);\n\tif (!sinQueda) tablaQueda(await consultarQueda(agentDir));\n\treturn true;\n}\n"]}
@@ -0,0 +1,209 @@
1
+ /**
2
+ * `ada-cli usage` — qué se ha consumido de verdad, y cuánto queda.
3
+ *
4
+ * Lo consumido sale de los JSONL de sesión; la agregación vive en
5
+ * `core/usage/aggregate.ts`. Lo que QUEDA no está en la sesión —vive en el
6
+ * proveedor— así que la sección "queda" viene de `core/usage/cuota/`, que le
7
+ * pregunta a cada proveedor con la credencial ya guardada en `auth.json`.
8
+ */
9
+ import { readdirSync, readFileSync, statSync } from "node:fs";
10
+ import { join } from "node:path";
11
+ import { readStoredCredential } from "../core/auth-storage.js";
12
+ import { porCoste, resumir } from "../core/usage/aggregate.js";
13
+ import { consultarCuota, ErrorConsultaCuota, PROVEEDORES_CON_CUOTA, } from "../core/usage/cuota/index.js";
14
+ function leerSesiones(sessionsDir) {
15
+ let carpetas;
16
+ try {
17
+ carpetas = readdirSync(sessionsDir);
18
+ }
19
+ catch {
20
+ return [];
21
+ }
22
+ const sesiones = [];
23
+ for (const carpeta of carpetas) {
24
+ const ruta = join(sessionsDir, carpeta);
25
+ let ficheros;
26
+ try {
27
+ if (!statSync(ruta).isDirectory())
28
+ continue;
29
+ ficheros = readdirSync(ruta).filter((f) => f.endsWith(".jsonl"));
30
+ }
31
+ catch {
32
+ continue;
33
+ }
34
+ for (const fichero of ficheros) {
35
+ const lineas = [];
36
+ try {
37
+ for (const linea of readFileSync(join(ruta, fichero), "utf8").split("\n")) {
38
+ if (!linea.trim())
39
+ continue;
40
+ try {
41
+ lineas.push(JSON.parse(linea));
42
+ }
43
+ catch {
44
+ // Una línea corrupta no invalida la sesión entera.
45
+ }
46
+ }
47
+ }
48
+ catch {
49
+ continue;
50
+ }
51
+ if (lineas.length > 0)
52
+ sesiones.push({ lineas });
53
+ }
54
+ }
55
+ return sesiones;
56
+ }
57
+ const miles = (n) => n.toLocaleString("es-ES");
58
+ const dinero = (n) => `${n < 0.01 && n > 0 ? n.toFixed(5) : n.toFixed(2)} $`;
59
+ const ETIQUETA_PROVEEDOR_CUOTA = {
60
+ anthropic: "Anthropic (Claude)",
61
+ openrouter: "OpenRouter",
62
+ "openai-codex": "OpenAI Codex",
63
+ "github-copilot": "GitHub Copilot",
64
+ google: "Gemini",
65
+ };
66
+ /**
67
+ * Le pregunta a cada proveedor con credencial guardada cuánto le queda.
68
+ *
69
+ * Solo se pregunta a los que TIENEN credencial: preguntar por uno sin
70
+ * configurar no distingue "no publica cuota" de "no está en uso", así que ni
71
+ * se intenta ni se enseña.
72
+ *
73
+ * En paralelo: un proveedor que tarda (o agota los 10s) no debe retrasar la
74
+ * respuesta de los demás — con los 5 configurados y todos fallando, en serie
75
+ * serían ~50s solo para `ada-cli usage`.
76
+ */
77
+ async function consultarQueda(agentDir) {
78
+ const authPath = join(agentDir, "auth.json");
79
+ const conCredencial = PROVEEDORES_CON_CUOTA.map((proveedor) => [proveedor, readStoredCredential(proveedor, authPath)]).filter((par) => par[1] !== undefined);
80
+ return Promise.all(conCredencial.map(async ([proveedor, credencial]) => {
81
+ try {
82
+ const ventanas = await consultarCuota(proveedor, credencial, { señal: AbortSignal.timeout(10_000) });
83
+ return [proveedor, ventanas ? { estado: "ventanas", ventanas } : { estado: "no-publica" }];
84
+ }
85
+ catch (error) {
86
+ // `ErrorConsultaCuota` trae un mensaje pensado para enseñarse; un error
87
+ // inesperado también se reporta como fallo, nunca como "no publica".
88
+ const mensaje = error instanceof ErrorConsultaCuota ? error.message : String(error);
89
+ return [proveedor, { estado: "fallo", mensaje }];
90
+ }
91
+ }));
92
+ }
93
+ function formateaSeReinicia(seReinicia) {
94
+ if (seReinicia === null)
95
+ return "";
96
+ const restanteMs = seReinicia - Date.now();
97
+ if (restanteMs <= 0)
98
+ return " (se reinicia ya)";
99
+ const horas = restanteMs / 3_600_000;
100
+ if (horas < 48)
101
+ return ` (se reinicia en ${Math.max(1, Math.round(horas))} h)`;
102
+ return ` (se reinicia en ${Math.round(horas / 24)} d)`;
103
+ }
104
+ function formateaVentana(v) {
105
+ const restante = Math.max(0, v.limite - v.usado);
106
+ const cuando = formateaSeReinicia(v.seReinicia);
107
+ if (v.unidad === "usd")
108
+ return `quedan ${dinero(restante)} de ${dinero(v.limite)}${cuando}`;
109
+ if (v.unidad === "peticiones")
110
+ return `quedan ${miles(restante)} de ${miles(v.limite)}${cuando}`;
111
+ return `${v.usado.toFixed(1)}% usado, quedan ${restante.toFixed(1)}%${cuando}`;
112
+ }
113
+ function tablaQueda(resultados) {
114
+ if (resultados.length === 0)
115
+ return;
116
+ console.log("\nQueda del plan");
117
+ for (const [proveedor, r] of resultados) {
118
+ const etiqueta = ETIQUETA_PROVEEDOR_CUOTA[proveedor] ?? proveedor;
119
+ if (r.estado === "no-publica") {
120
+ console.log(` ${etiqueta}: no publica cuota para esta credencial`);
121
+ }
122
+ else if (r.estado === "fallo") {
123
+ console.log(` ${etiqueta}: no se pudo consultar (${r.mensaje})`);
124
+ }
125
+ else {
126
+ for (const v of r.ventanas)
127
+ console.log(` ${etiqueta} · ${v.etiqueta}: ${formateaVentana(v)}`);
128
+ }
129
+ }
130
+ }
131
+ function tabla(titulo, filas, limite) {
132
+ if (filas.length === 0)
133
+ return;
134
+ console.log(`\n${titulo}`);
135
+ const ancho = Math.min(52, Math.max(...filas.slice(0, limite).map(([k]) => k.length)));
136
+ for (const [clave, t] of filas.slice(0, limite)) {
137
+ const nombre = clave.length > ancho ? `…${clave.slice(-(ancho - 1))}` : clave.padEnd(ancho);
138
+ console.log(` ${nombre} ${dinero(t.coste).padStart(10)} ${miles(t.entrada + t.salida).padStart(12)} tok`);
139
+ }
140
+ if (filas.length > limite)
141
+ console.log(` … y ${filas.length - limite} más`);
142
+ }
143
+ export async function runUsageCommand(args, agentDir) {
144
+ if (args.includes("--help") || args.includes("-h")) {
145
+ console.log(`Uso:
146
+ ada-cli usage [--days N] [--json] [--all] [--sin-queda]
147
+
148
+ --days N Solo los últimos N días (por defecto, todo)
149
+ --json Salida en JSON, para conectarlo a otra cosa
150
+ --all Incluye las sesiones de directorios temporales (las de los tests)
151
+ --sin-queda No pregunta a los proveedores cuánto queda del plan (más rápido, sin red)
152
+
153
+ Los tokens de caché se cuentan aparte: meterlos en el total haría que un día
154
+ con mucha caché pareciera carísimo cuando es justo lo contrario.
155
+
156
+ Además de lo GASTADO (de los JSONL de sesión), enseña lo que QUEDA del plan
157
+ para cada proveedor con credencial guardada: se lo pregunta al proveedor y
158
+ cachea la respuesta unos minutos. Un proveedor que no publica cuota lo dice
159
+ explícitamente; si la consulta falla, también — nunca se confunde con "sin
160
+ límite".`);
161
+ return true;
162
+ }
163
+ const iDias = args.indexOf("--days");
164
+ let desde;
165
+ if (iDias >= 0) {
166
+ const n = Number(args[iDias + 1]);
167
+ if (!Number.isFinite(n) || n <= 0) {
168
+ console.error("--days necesita un número de días positivo.");
169
+ process.exitCode = 1;
170
+ return true;
171
+ }
172
+ desde = new Date(Date.now() - n * 86_400_000).toISOString();
173
+ }
174
+ const resumen = resumir(leerSesiones(join(agentDir, "sessions")), {
175
+ desde,
176
+ incluirTemporales: args.includes("--all"),
177
+ });
178
+ const sinQueda = args.includes("--sin-queda");
179
+ if (args.includes("--json")) {
180
+ const queda = sinQueda ? {} : Object.fromEntries(await consultarQueda(agentDir));
181
+ console.log(JSON.stringify({ ...resumen, queda }, null, 2));
182
+ return true;
183
+ }
184
+ if (resumen.mensajes === 0) {
185
+ console.log(desde ? "Sin consumo registrado en ese periodo." : "Sin consumo registrado todavía.");
186
+ if (!sinQueda)
187
+ tablaQueda(await consultarQueda(agentDir));
188
+ return true;
189
+ }
190
+ const dias = Object.keys(resumen.porDia).sort();
191
+ console.log(`Consumo${desde ? ` (últimos ${args[iDias + 1]} días)` : ""}`);
192
+ console.log(` ${miles(resumen.sesiones)} sesiones · ${miles(resumen.mensajes)} respuestas · ${dias.length} días activos`);
193
+ console.log(` entrada ${miles(resumen.entrada).padStart(14)} tok`);
194
+ console.log(` salida ${miles(resumen.salida).padStart(14)} tok`);
195
+ console.log(` caché ${miles(resumen.cacheRead).padStart(14)} tok leídos, ${miles(resumen.cacheWrite)} escritos`);
196
+ console.log(` coste ${dinero(resumen.coste).padStart(14)}`);
197
+ if (resumen.sesionesTemporales > 0) {
198
+ // Se dice siempre: esconder sesiones sin avisar es cómo un panel empieza a
199
+ // mentir sin que nadie se entere.
200
+ console.log(` (${miles(resumen.sesionesTemporales)} sesiones de directorios temporales excluidas; --all para incluirlas)`);
201
+ }
202
+ tabla("Por modelo", porCoste(resumen.porModelo), 10);
203
+ tabla("Por proyecto", porCoste(resumen.porProyecto), 10);
204
+ tabla("Por día (los más caros)", porCoste(resumen.porDia), 7);
205
+ if (!sinQueda)
206
+ tablaQueda(await consultarQueda(agentDir));
207
+ return true;
208
+ }
209
+ //# sourceMappingURL=usage-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage-command.js","sourceRoot":"","sources":["../../src/cli/usage-command.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `ada-cli usage` — qué se ha consumido de verdad, y cuánto queda.\n *\n * Lo consumido sale de los JSONL de sesión; la agregación vive en\n * `core/usage/aggregate.ts`. Lo que QUEDA no está en la sesión —vive en el\n * proveedor— así que la sección \"queda\" viene de `core/usage/cuota/`, que le\n * pregunta a cada proveedor con la credencial ya guardada en `auth.json`.\n */\n\nimport { readdirSync, readFileSync, statSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { readStoredCredential } from \"../core/auth-storage.ts\";\nimport { type LineaSesion, porCoste, resumir, type Totales } from \"../core/usage/aggregate.ts\";\nimport {\n\tconsultarCuota,\n\tErrorConsultaCuota,\n\tPROVEEDORES_CON_CUOTA,\n\ttype VentanaCuota,\n} from \"../core/usage/cuota/index.ts\";\n\nfunction leerSesiones(sessionsDir: string): Array<{ cwd?: string; lineas: LineaSesion[] }> {\n\tlet carpetas: string[];\n\ttry {\n\t\tcarpetas = readdirSync(sessionsDir);\n\t} catch {\n\t\treturn [];\n\t}\n\tconst sesiones: Array<{ cwd?: string; lineas: LineaSesion[] }> = [];\n\tfor (const carpeta of carpetas) {\n\t\tconst ruta = join(sessionsDir, carpeta);\n\t\tlet ficheros: string[];\n\t\ttry {\n\t\t\tif (!statSync(ruta).isDirectory()) continue;\n\t\t\tficheros = readdirSync(ruta).filter((f) => f.endsWith(\".jsonl\"));\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const fichero of ficheros) {\n\t\t\tconst lineas: LineaSesion[] = [];\n\t\t\ttry {\n\t\t\t\tfor (const linea of readFileSync(join(ruta, fichero), \"utf8\").split(\"\\n\")) {\n\t\t\t\t\tif (!linea.trim()) continue;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlineas.push(JSON.parse(linea) as LineaSesion);\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// Una línea corrupta no invalida la sesión entera.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (lineas.length > 0) sesiones.push({ lineas });\n\t\t}\n\t}\n\treturn sesiones;\n}\n\nconst miles = (n: number) => n.toLocaleString(\"es-ES\");\nconst dinero = (n: number) => `${n < 0.01 && n > 0 ? n.toFixed(5) : n.toFixed(2)} $`;\n\nconst ETIQUETA_PROVEEDOR_CUOTA: Record<string, string> = {\n\tanthropic: \"Anthropic (Claude)\",\n\topenrouter: \"OpenRouter\",\n\t\"openai-codex\": \"OpenAI Codex\",\n\t\"github-copilot\": \"GitHub Copilot\",\n\tgoogle: \"Gemini\",\n};\n\ntype ResultadoCuotaProveedor =\n\t| { estado: \"ventanas\"; ventanas: VentanaCuota[] }\n\t| { estado: \"no-publica\" }\n\t| { estado: \"fallo\"; mensaje: string };\n\n/**\n * Le pregunta a cada proveedor con credencial guardada cuánto le queda.\n *\n * Solo se pregunta a los que TIENEN credencial: preguntar por uno sin\n * configurar no distingue \"no publica cuota\" de \"no está en uso\", así que ni\n * se intenta ni se enseña.\n *\n * En paralelo: un proveedor que tarda (o agota los 10s) no debe retrasar la\n * respuesta de los demás — con los 5 configurados y todos fallando, en serie\n * serían ~50s solo para `ada-cli usage`.\n */\nasync function consultarQueda(agentDir: string): Promise<Array<[string, ResultadoCuotaProveedor]>> {\n\tconst authPath = join(agentDir, \"auth.json\");\n\tconst conCredencial = PROVEEDORES_CON_CUOTA.map(\n\t\t(proveedor) => [proveedor, readStoredCredential(proveedor, authPath)] as const,\n\t).filter((par): par is [string, NonNullable<(typeof par)[1]>] => par[1] !== undefined);\n\n\treturn Promise.all(\n\t\tconCredencial.map(async ([proveedor, credencial]): Promise<[string, ResultadoCuotaProveedor]> => {\n\t\t\ttry {\n\t\t\t\tconst ventanas = await consultarCuota(proveedor, credencial, { señal: AbortSignal.timeout(10_000) });\n\t\t\t\treturn [proveedor, ventanas ? { estado: \"ventanas\", ventanas } : { estado: \"no-publica\" }];\n\t\t\t} catch (error) {\n\t\t\t\t// `ErrorConsultaCuota` trae un mensaje pensado para enseñarse; un error\n\t\t\t\t// inesperado también se reporta como fallo, nunca como \"no publica\".\n\t\t\t\tconst mensaje = error instanceof ErrorConsultaCuota ? error.message : String(error);\n\t\t\t\treturn [proveedor, { estado: \"fallo\", mensaje }];\n\t\t\t}\n\t\t}),\n\t);\n}\n\nfunction formateaSeReinicia(seReinicia: number | null): string {\n\tif (seReinicia === null) return \"\";\n\tconst restanteMs = seReinicia - Date.now();\n\tif (restanteMs <= 0) return \" (se reinicia ya)\";\n\tconst horas = restanteMs / 3_600_000;\n\tif (horas < 48) return ` (se reinicia en ${Math.max(1, Math.round(horas))} h)`;\n\treturn ` (se reinicia en ${Math.round(horas / 24)} d)`;\n}\n\nfunction formateaVentana(v: VentanaCuota): string {\n\tconst restante = Math.max(0, v.limite - v.usado);\n\tconst cuando = formateaSeReinicia(v.seReinicia);\n\tif (v.unidad === \"usd\") return `quedan ${dinero(restante)} de ${dinero(v.limite)}${cuando}`;\n\tif (v.unidad === \"peticiones\") return `quedan ${miles(restante)} de ${miles(v.limite)}${cuando}`;\n\treturn `${v.usado.toFixed(1)}% usado, quedan ${restante.toFixed(1)}%${cuando}`;\n}\n\nfunction tablaQueda(resultados: Array<[string, ResultadoCuotaProveedor]>): void {\n\tif (resultados.length === 0) return;\n\tconsole.log(\"\\nQueda del plan\");\n\tfor (const [proveedor, r] of resultados) {\n\t\tconst etiqueta = ETIQUETA_PROVEEDOR_CUOTA[proveedor] ?? proveedor;\n\t\tif (r.estado === \"no-publica\") {\n\t\t\tconsole.log(` ${etiqueta}: no publica cuota para esta credencial`);\n\t\t} else if (r.estado === \"fallo\") {\n\t\t\tconsole.log(` ${etiqueta}: no se pudo consultar (${r.mensaje})`);\n\t\t} else {\n\t\t\tfor (const v of r.ventanas) console.log(` ${etiqueta} · ${v.etiqueta}: ${formateaVentana(v)}`);\n\t\t}\n\t}\n}\n\nfunction tabla(titulo: string, filas: Array<[string, Totales]>, limite: number): void {\n\tif (filas.length === 0) return;\n\tconsole.log(`\\n${titulo}`);\n\tconst ancho = Math.min(52, Math.max(...filas.slice(0, limite).map(([k]) => k.length)));\n\tfor (const [clave, t] of filas.slice(0, limite)) {\n\t\tconst nombre = clave.length > ancho ? `…${clave.slice(-(ancho - 1))}` : clave.padEnd(ancho);\n\t\tconsole.log(` ${nombre} ${dinero(t.coste).padStart(10)} ${miles(t.entrada + t.salida).padStart(12)} tok`);\n\t}\n\tif (filas.length > limite) console.log(` … y ${filas.length - limite} más`);\n}\n\nexport async function runUsageCommand(args: string[], agentDir: string): Promise<boolean> {\n\tif (args.includes(\"--help\") || args.includes(\"-h\")) {\n\t\tconsole.log(`Uso:\n ada-cli usage [--days N] [--json] [--all] [--sin-queda]\n\n --days N Solo los últimos N días (por defecto, todo)\n --json Salida en JSON, para conectarlo a otra cosa\n --all Incluye las sesiones de directorios temporales (las de los tests)\n --sin-queda No pregunta a los proveedores cuánto queda del plan (más rápido, sin red)\n\nLos tokens de caché se cuentan aparte: meterlos en el total haría que un día\ncon mucha caché pareciera carísimo cuando es justo lo contrario.\n\nAdemás de lo GASTADO (de los JSONL de sesión), enseña lo que QUEDA del plan\npara cada proveedor con credencial guardada: se lo pregunta al proveedor y\ncachea la respuesta unos minutos. Un proveedor que no publica cuota lo dice\nexplícitamente; si la consulta falla, también — nunca se confunde con \"sin\nlímite\".`);\n\t\treturn true;\n\t}\n\n\tconst iDias = args.indexOf(\"--days\");\n\tlet desde: string | undefined;\n\tif (iDias >= 0) {\n\t\tconst n = Number(args[iDias + 1]);\n\t\tif (!Number.isFinite(n) || n <= 0) {\n\t\t\tconsole.error(\"--days necesita un número de días positivo.\");\n\t\t\tprocess.exitCode = 1;\n\t\t\treturn true;\n\t\t}\n\t\tdesde = new Date(Date.now() - n * 86_400_000).toISOString();\n\t}\n\n\tconst resumen = resumir(leerSesiones(join(agentDir, \"sessions\")), {\n\t\tdesde,\n\t\tincluirTemporales: args.includes(\"--all\"),\n\t});\n\tconst sinQueda = args.includes(\"--sin-queda\");\n\n\tif (args.includes(\"--json\")) {\n\t\tconst queda = sinQueda ? {} : Object.fromEntries(await consultarQueda(agentDir));\n\t\tconsole.log(JSON.stringify({ ...resumen, queda }, null, 2));\n\t\treturn true;\n\t}\n\n\tif (resumen.mensajes === 0) {\n\t\tconsole.log(desde ? \"Sin consumo registrado en ese periodo.\" : \"Sin consumo registrado todavía.\");\n\t\tif (!sinQueda) tablaQueda(await consultarQueda(agentDir));\n\t\treturn true;\n\t}\n\n\tconst dias = Object.keys(resumen.porDia).sort();\n\tconsole.log(`Consumo${desde ? ` (últimos ${args[iDias + 1]} días)` : \"\"}`);\n\tconsole.log(\n\t\t` ${miles(resumen.sesiones)} sesiones · ${miles(resumen.mensajes)} respuestas · ${dias.length} días activos`,\n\t);\n\tconsole.log(` entrada ${miles(resumen.entrada).padStart(14)} tok`);\n\tconsole.log(` salida ${miles(resumen.salida).padStart(14)} tok`);\n\tconsole.log(` caché ${miles(resumen.cacheRead).padStart(14)} tok leídos, ${miles(resumen.cacheWrite)} escritos`);\n\tconsole.log(` coste ${dinero(resumen.coste).padStart(14)}`);\n\n\tif (resumen.sesionesTemporales > 0) {\n\t\t// Se dice siempre: esconder sesiones sin avisar es cómo un panel empieza a\n\t\t// mentir sin que nadie se entere.\n\t\tconsole.log(\n\t\t\t` (${miles(resumen.sesionesTemporales)} sesiones de directorios temporales excluidas; --all para incluirlas)`,\n\t\t);\n\t}\n\n\ttabla(\"Por modelo\", porCoste(resumen.porModelo), 10);\n\ttabla(\"Por proyecto\", porCoste(resumen.porProyecto), 10);\n\ttabla(\"Por día (los más caros)\", porCoste(resumen.porDia), 7);\n\tif (!sinQueda) tablaQueda(await consultarQueda(agentDir));\n\treturn true;\n}\n"]}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * `ada-cli wiki` — la wiki del repositorio, con citas que caducan.
3
+ *
4
+ * La lógica está en `core/wiki/`; aquí solo se traduce a texto y se decide el
5
+ * código de salida. `check` sale con 1 si hay afirmaciones obsoletas, para que
6
+ * pueda ser una puerta de CI: una wiki que miente es peor que no tenerla.
7
+ */
8
+ export declare function runWikiCommand(args: string[]): Promise<boolean>;
9
+ //# sourceMappingURL=wiki-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiki-command.d.ts","sourceRoot":"","sources":["../../src/cli/wiki-command.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAqErE","sourcesContent":["/**\n * `ada-cli wiki` — la wiki del repositorio, con citas que caducan.\n *\n * La lógica está en `core/wiki/`; aquí solo se traduce a texto y se decide el\n * código de salida. `check` sale con 1 si hay afirmaciones obsoletas, para que\n * pueda ser una puerta de CI: una wiki que miente es peor que no tenerla.\n */\n\nimport { CONFIG_DIR_NAME } from \"../config.ts\";\nimport { escribirWiki, indexarPaginas, lectorDelProyecto, leerWiki, rutaWiki } from \"../core/wiki/almacen.ts\";\nimport { formatearCita, reubicarCitas, verificarWiki } from \"../core/wiki/citas.ts\";\n\nexport async function runWikiCommand(args: string[]): Promise<boolean> {\n\tconst sub = args[1];\n\tif (!sub || args.includes(\"--help\") || args.includes(\"-h\")) {\n\t\tconsole.log(`Uso:\n ada-cli wiki index Lee las páginas de ${CONFIG_DIR_NAME}/wiki/*.md y fija la huella de cada cita\n ada-cli wiki check Comprueba qué afirmaciones siguen siendo ciertas (sale 1 si alguna no)\n ada-cli wiki relocate Actualiza las citas que solo se movieron de línea\n\nUna afirmación sin cita no cuenta como verificada: es una opinión, y se cuenta\naparte. Las obsoletas NO se arreglan solas — hay que leer el código nuevo y\ndecidir si la frase sigue siendo cierta.`);\n\t\treturn true;\n\t}\n\n\tconst cwd = process.cwd();\n\n\tif (sub === \"index\") {\n\t\tconst wiki = indexarPaginas(cwd, CONFIG_DIR_NAME);\n\t\tif (wiki.afirmaciones.length === 0) {\n\t\t\tconsole.log(`No hay páginas en ${rutaWiki(cwd, CONFIG_DIR_NAME)}. Crea un .md ahí y vuelve a indexar.`);\n\t\t\treturn true;\n\t\t}\n\t\tescribirWiki(cwd, CONFIG_DIR_NAME, wiki);\n\t\tconst conCita = wiki.afirmaciones.filter((a) => a.citas.length > 0).length;\n\t\tconsole.log(`Indexadas ${wiki.afirmaciones.length} afirmaciones, ${conCita} con cita.`);\n\t\treturn true;\n\t}\n\n\tif (sub === \"check\" || sub === \"relocate\") {\n\t\tconst wiki = leerWiki(cwd, CONFIG_DIR_NAME);\n\t\tif (wiki.afirmaciones.length === 0) {\n\t\t\tconsole.log(\"La wiki está vacía. Usa 'ada-cli wiki index' primero.\");\n\t\t\treturn true;\n\t\t}\n\t\tconst resumen = verificarWiki(wiki.afirmaciones, lectorDelProyecto(cwd));\n\n\t\tif (sub === \"relocate\") {\n\t\t\tescribirWiki(cwd, CONFIG_DIR_NAME, { version: 1, afirmaciones: reubicarCitas(resumen) });\n\t\t\tconsole.log(`Reubicadas ${resumen.movidas} afirmación(es) cuyo código solo cambió de línea.`);\n\t\t\tif (resumen.obsoletas > 0) {\n\t\t\t\tconsole.log(`Quedan ${resumen.obsoletas} obsoletas: esas hay que releerlas y reescribirlas a mano.`);\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tconsole.log(`${resumen.total} afirmaciones`);\n\t\tconsole.log(` vigentes: ${resumen.vigentes}`);\n\t\tconsole.log(` movidas: ${resumen.movidas} (usa 'wiki relocate')`);\n\t\tconsole.log(` obsoletas: ${resumen.obsoletas}`);\n\t\tconsole.log(` sin cita: ${resumen.sinCitas} (no verificadas: son opiniones)`);\n\n\t\tconst rotas = resumen.detalles.filter((d) => d.obsoleta);\n\t\tif (rotas.length > 0) {\n\t\t\tconsole.log(\"\\nObsoletas:\");\n\t\t\tfor (const d of rotas.slice(0, 30)) {\n\t\t\t\tconsole.log(`\\n ${d.afirmacion.id}: ${d.afirmacion.texto.split(\"\\n\")[0].slice(0, 90)}`);\n\t\t\t\tfor (const c of d.citas) {\n\t\t\t\t\tif (c.estado === \"obsoleta\") console.log(` ✗ ${formatearCita(c.cita)} — ${c.motivo}`);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (rotas.length > 30) console.log(`\\n … y ${rotas.length - 30} más`);\n\t\t\tprocess.exitCode = 1;\n\t\t}\n\t\treturn true;\n\t}\n\n\tconsole.error(`Subcomando desconocido: ${sub}. Usa 'ada-cli wiki --help'.`);\n\tprocess.exitCode = 1;\n\treturn true;\n}\n"]}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * `ada-cli wiki` — la wiki del repositorio, con citas que caducan.
3
+ *
4
+ * La lógica está en `core/wiki/`; aquí solo se traduce a texto y se decide el
5
+ * código de salida. `check` sale con 1 si hay afirmaciones obsoletas, para que
6
+ * pueda ser una puerta de CI: una wiki que miente es peor que no tenerla.
7
+ */
8
+ import { CONFIG_DIR_NAME } from "../config.js";
9
+ import { escribirWiki, indexarPaginas, lectorDelProyecto, leerWiki, rutaWiki } from "../core/wiki/almacen.js";
10
+ import { formatearCita, reubicarCitas, verificarWiki } from "../core/wiki/citas.js";
11
+ export async function runWikiCommand(args) {
12
+ const sub = args[1];
13
+ if (!sub || args.includes("--help") || args.includes("-h")) {
14
+ console.log(`Uso:
15
+ ada-cli wiki index Lee las páginas de ${CONFIG_DIR_NAME}/wiki/*.md y fija la huella de cada cita
16
+ ada-cli wiki check Comprueba qué afirmaciones siguen siendo ciertas (sale 1 si alguna no)
17
+ ada-cli wiki relocate Actualiza las citas que solo se movieron de línea
18
+
19
+ Una afirmación sin cita no cuenta como verificada: es una opinión, y se cuenta
20
+ aparte. Las obsoletas NO se arreglan solas — hay que leer el código nuevo y
21
+ decidir si la frase sigue siendo cierta.`);
22
+ return true;
23
+ }
24
+ const cwd = process.cwd();
25
+ if (sub === "index") {
26
+ const wiki = indexarPaginas(cwd, CONFIG_DIR_NAME);
27
+ if (wiki.afirmaciones.length === 0) {
28
+ console.log(`No hay páginas en ${rutaWiki(cwd, CONFIG_DIR_NAME)}. Crea un .md ahí y vuelve a indexar.`);
29
+ return true;
30
+ }
31
+ escribirWiki(cwd, CONFIG_DIR_NAME, wiki);
32
+ const conCita = wiki.afirmaciones.filter((a) => a.citas.length > 0).length;
33
+ console.log(`Indexadas ${wiki.afirmaciones.length} afirmaciones, ${conCita} con cita.`);
34
+ return true;
35
+ }
36
+ if (sub === "check" || sub === "relocate") {
37
+ const wiki = leerWiki(cwd, CONFIG_DIR_NAME);
38
+ if (wiki.afirmaciones.length === 0) {
39
+ console.log("La wiki está vacía. Usa 'ada-cli wiki index' primero.");
40
+ return true;
41
+ }
42
+ const resumen = verificarWiki(wiki.afirmaciones, lectorDelProyecto(cwd));
43
+ if (sub === "relocate") {
44
+ escribirWiki(cwd, CONFIG_DIR_NAME, { version: 1, afirmaciones: reubicarCitas(resumen) });
45
+ console.log(`Reubicadas ${resumen.movidas} afirmación(es) cuyo código solo cambió de línea.`);
46
+ if (resumen.obsoletas > 0) {
47
+ console.log(`Quedan ${resumen.obsoletas} obsoletas: esas hay que releerlas y reescribirlas a mano.`);
48
+ }
49
+ return true;
50
+ }
51
+ console.log(`${resumen.total} afirmaciones`);
52
+ console.log(` vigentes: ${resumen.vigentes}`);
53
+ console.log(` movidas: ${resumen.movidas} (usa 'wiki relocate')`);
54
+ console.log(` obsoletas: ${resumen.obsoletas}`);
55
+ console.log(` sin cita: ${resumen.sinCitas} (no verificadas: son opiniones)`);
56
+ const rotas = resumen.detalles.filter((d) => d.obsoleta);
57
+ if (rotas.length > 0) {
58
+ console.log("\nObsoletas:");
59
+ for (const d of rotas.slice(0, 30)) {
60
+ console.log(`\n ${d.afirmacion.id}: ${d.afirmacion.texto.split("\n")[0].slice(0, 90)}`);
61
+ for (const c of d.citas) {
62
+ if (c.estado === "obsoleta")
63
+ console.log(` ✗ ${formatearCita(c.cita)} — ${c.motivo}`);
64
+ }
65
+ }
66
+ if (rotas.length > 30)
67
+ console.log(`\n … y ${rotas.length - 30} más`);
68
+ process.exitCode = 1;
69
+ }
70
+ return true;
71
+ }
72
+ console.error(`Subcomando desconocido: ${sub}. Usa 'ada-cli wiki --help'.`);
73
+ process.exitCode = 1;
74
+ return true;
75
+ }
76
+ //# sourceMappingURL=wiki-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiki-command.js","sourceRoot":"","sources":["../../src/cli/wiki-command.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `ada-cli wiki` — la wiki del repositorio, con citas que caducan.\n *\n * La lógica está en `core/wiki/`; aquí solo se traduce a texto y se decide el\n * código de salida. `check` sale con 1 si hay afirmaciones obsoletas, para que\n * pueda ser una puerta de CI: una wiki que miente es peor que no tenerla.\n */\n\nimport { CONFIG_DIR_NAME } from \"../config.ts\";\nimport { escribirWiki, indexarPaginas, lectorDelProyecto, leerWiki, rutaWiki } from \"../core/wiki/almacen.ts\";\nimport { formatearCita, reubicarCitas, verificarWiki } from \"../core/wiki/citas.ts\";\n\nexport async function runWikiCommand(args: string[]): Promise<boolean> {\n\tconst sub = args[1];\n\tif (!sub || args.includes(\"--help\") || args.includes(\"-h\")) {\n\t\tconsole.log(`Uso:\n ada-cli wiki index Lee las páginas de ${CONFIG_DIR_NAME}/wiki/*.md y fija la huella de cada cita\n ada-cli wiki check Comprueba qué afirmaciones siguen siendo ciertas (sale 1 si alguna no)\n ada-cli wiki relocate Actualiza las citas que solo se movieron de línea\n\nUna afirmación sin cita no cuenta como verificada: es una opinión, y se cuenta\naparte. Las obsoletas NO se arreglan solas — hay que leer el código nuevo y\ndecidir si la frase sigue siendo cierta.`);\n\t\treturn true;\n\t}\n\n\tconst cwd = process.cwd();\n\n\tif (sub === \"index\") {\n\t\tconst wiki = indexarPaginas(cwd, CONFIG_DIR_NAME);\n\t\tif (wiki.afirmaciones.length === 0) {\n\t\t\tconsole.log(`No hay páginas en ${rutaWiki(cwd, CONFIG_DIR_NAME)}. Crea un .md ahí y vuelve a indexar.`);\n\t\t\treturn true;\n\t\t}\n\t\tescribirWiki(cwd, CONFIG_DIR_NAME, wiki);\n\t\tconst conCita = wiki.afirmaciones.filter((a) => a.citas.length > 0).length;\n\t\tconsole.log(`Indexadas ${wiki.afirmaciones.length} afirmaciones, ${conCita} con cita.`);\n\t\treturn true;\n\t}\n\n\tif (sub === \"check\" || sub === \"relocate\") {\n\t\tconst wiki = leerWiki(cwd, CONFIG_DIR_NAME);\n\t\tif (wiki.afirmaciones.length === 0) {\n\t\t\tconsole.log(\"La wiki está vacía. Usa 'ada-cli wiki index' primero.\");\n\t\t\treturn true;\n\t\t}\n\t\tconst resumen = verificarWiki(wiki.afirmaciones, lectorDelProyecto(cwd));\n\n\t\tif (sub === \"relocate\") {\n\t\t\tescribirWiki(cwd, CONFIG_DIR_NAME, { version: 1, afirmaciones: reubicarCitas(resumen) });\n\t\t\tconsole.log(`Reubicadas ${resumen.movidas} afirmación(es) cuyo código solo cambió de línea.`);\n\t\t\tif (resumen.obsoletas > 0) {\n\t\t\t\tconsole.log(`Quedan ${resumen.obsoletas} obsoletas: esas hay que releerlas y reescribirlas a mano.`);\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tconsole.log(`${resumen.total} afirmaciones`);\n\t\tconsole.log(` vigentes: ${resumen.vigentes}`);\n\t\tconsole.log(` movidas: ${resumen.movidas} (usa 'wiki relocate')`);\n\t\tconsole.log(` obsoletas: ${resumen.obsoletas}`);\n\t\tconsole.log(` sin cita: ${resumen.sinCitas} (no verificadas: son opiniones)`);\n\n\t\tconst rotas = resumen.detalles.filter((d) => d.obsoleta);\n\t\tif (rotas.length > 0) {\n\t\t\tconsole.log(\"\\nObsoletas:\");\n\t\t\tfor (const d of rotas.slice(0, 30)) {\n\t\t\t\tconsole.log(`\\n ${d.afirmacion.id}: ${d.afirmacion.texto.split(\"\\n\")[0].slice(0, 90)}`);\n\t\t\t\tfor (const c of d.citas) {\n\t\t\t\t\tif (c.estado === \"obsoleta\") console.log(` ✗ ${formatearCita(c.cita)} — ${c.motivo}`);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (rotas.length > 30) console.log(`\\n … y ${rotas.length - 30} más`);\n\t\t\tprocess.exitCode = 1;\n\t\t}\n\t\treturn true;\n\t}\n\n\tconsole.error(`Subcomando desconocido: ${sub}. Usa 'ada-cli wiki --help'.`);\n\tprocess.exitCode = 1;\n\treturn true;\n}\n"]}
package/dist/cli.d.ts CHANGED
@@ -1,3 +1,9 @@
1
1
  #!/usr/bin/env node
2
+ /**
3
+ * CLI entry point for the refactored coding agent.
4
+ * Uses main.ts with AgentSession and new mode modules.
5
+ *
6
+ * Test with: npx tsx src/cli-new.ts [args...]
7
+ */
2
8
  export {};
3
9
  //# sourceMappingURL=cli.d.ts.map
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"","sourcesContent":["#!/usr/bin/env node\n/**\n * CLI entry point for the refactored coding agent.\n * Uses main.ts with AgentSession and new mode modules.\n *\n * Test with: npx tsx src/cli-new.ts [args...]\n */\nimport { APP_NAME } from \"./config.ts\";\nimport { configureHttpDispatcher } from \"./core/http-dispatcher.ts\";\nimport { main } from \"./main.ts\";\n\nprocess.title = APP_NAME;\nprocess.env.PI_CODING_AGENT = \"true\";\nprocess.env.AI_AGENT = \"pi\";\nprocess.emitWarning = (() => {}) as typeof process.emitWarning;\n\n// Configure undici's global dispatcher before provider SDKs issue requests.\n// Runtime settings are applied once SettingsManager has loaded global/project settings.\nconfigureHttpDispatcher();\n\nmain(process.argv.slice(2));\n"]}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;GAKG","sourcesContent":["#!/usr/bin/env node\n/**\n * CLI entry point for the refactored coding agent.\n * Uses main.ts with AgentSession and new mode modules.\n *\n * Test with: npx tsx src/cli-new.ts [args...]\n */\n// Ada: arranque perezoso. `import { main } from \"./main.ts\"` cargaba 1927\n// módulos —660 de typebox, 171 de packages/ai, el motor de control del\n// ordenador— ANTES de mirar el primer argumento: 1,65 s para imprimir una\n// versión. Ahora son 30 y 0,21 s. El preámbulo (título, variables de entorno,\n// dispatcher de undici) y el reparto viven en core/arranque/atajos.ts, que es\n// nuestro; aquí queda un único enganche contra upstream, y la puerta que\n// impide que vuelva a crecer es scripts/check-arranque.mjs.\nconst { arrancar } = await import(\"./core/arranque/atajos.ts\");\nawait arrancar(process.argv.slice(2));\n"]}
package/dist/cli.js CHANGED
@@ -5,15 +5,14 @@
5
5
  *
6
6
  * Test with: npx tsx src/cli-new.ts [args...]
7
7
  */
8
- import { APP_NAME } from "./config.js";
9
- import { configureHttpDispatcher } from "./core/http-dispatcher.js";
10
- import { main } from "./main.js";
11
- process.title = APP_NAME;
12
- process.env.PI_CODING_AGENT = "true";
13
- process.env.AI_AGENT = "pi";
14
- process.emitWarning = (() => { });
15
- // Configure undici's global dispatcher before provider SDKs issue requests.
16
- // Runtime settings are applied once SettingsManager has loaded global/project settings.
17
- configureHttpDispatcher();
18
- main(process.argv.slice(2));
8
+ // Ada: arranque perezoso. `import { main } from "./main.ts"` cargaba 1927
9
+ // módulos —660 de typebox, 171 de packages/ai, el motor de control del
10
+ // ordenador— ANTES de mirar el primer argumento: 1,65 s para imprimir una
11
+ // versión. Ahora son 30 y 0,21 s. El preámbulo (título, variables de entorno,
12
+ // dispatcher de undici) y el reparto viven en core/arranque/atajos.ts, que es
13
+ // nuestro; aquí queda un único enganche contra upstream, y la puerta que
14
+ // impide que vuelva a crecer es scripts/check-arranque.mjs.
15
+ const { arrancar } = await import("./core/arranque/atajos.js");
16
+ await arrancar(process.argv.slice(2));
17
+ export {};
19
18
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC;AACzB,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,MAAM,CAAC;AACrC,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC5B,OAAO,CAAC,WAAW,GAAG,CAAC,GAAG,EAAE,CAAC,EAAC,CAAC,CAA+B,CAAC;AAE/D,4EAA4E;AAC5E,wFAAwF;AACxF,uBAAuB,EAAE,CAAC;AAE1B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC","sourcesContent":["#!/usr/bin/env node\n/**\n * CLI entry point for the refactored coding agent.\n * Uses main.ts with AgentSession and new mode modules.\n *\n * Test with: npx tsx src/cli-new.ts [args...]\n */\nimport { APP_NAME } from \"./config.ts\";\nimport { configureHttpDispatcher } from \"./core/http-dispatcher.ts\";\nimport { main } from \"./main.ts\";\n\nprocess.title = APP_NAME;\nprocess.env.PI_CODING_AGENT = \"true\";\nprocess.env.AI_AGENT = \"pi\";\nprocess.emitWarning = (() => {}) as typeof process.emitWarning;\n\n// Configure undici's global dispatcher before provider SDKs issue requests.\n// Runtime settings are applied once SettingsManager has loaded global/project settings.\nconfigureHttpDispatcher();\n\nmain(process.argv.slice(2));\n"]}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AACH,0EAA0E;AAC1E,0EAAuE;AACvE,4EAA0E;AAC1E,iFAA8E;AAC9E,8EAA8E;AAC9E,2EAAyE;AACzE,4DAA4D;AAC5D,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;AAC/D,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC","sourcesContent":["#!/usr/bin/env node\n/**\n * CLI entry point for the refactored coding agent.\n * Uses main.ts with AgentSession and new mode modules.\n *\n * Test with: npx tsx src/cli-new.ts [args...]\n */\n// Ada: arranque perezoso. `import { main } from \"./main.ts\"` cargaba 1927\n// módulos —660 de typebox, 171 de packages/ai, el motor de control del\n// ordenador— ANTES de mirar el primer argumento: 1,65 s para imprimir una\n// versión. Ahora son 30 y 0,21 s. El preámbulo (título, variables de entorno,\n// dispatcher de undici) y el reparto viven en core/arranque/atajos.ts, que es\n// nuestro; aquí queda un único enganche contra upstream, y la puerta que\n// impide que vuelva a crecer es scripts/check-arranque.mjs.\nconst { arrancar } = await import(\"./core/arranque/atajos.ts\");\nawait arrancar(process.argv.slice(2));\n"]}
package/dist/config.d.ts CHANGED
@@ -70,7 +70,7 @@ export declare const VERSION: string;
70
70
  export declare const ENV_AGENT_DIR: string;
71
71
  export declare const ENV_SESSION_DIR: string;
72
72
  export declare function expandTildePath(path: string): string;
73
- /** Get the share viewer URL for a gist ID */
73
+ /** Get the share viewer URL for a gist ID. */
74
74
  export declare function getShareViewerUrl(gistId: string): string;
75
75
  /** Get the agent config directory (e.g., ~/.pi/agent/) */
76
76
  export declare function getAgentDir(): string;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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","sourcesContent":["import { accessSync, constants, existsSync, readFileSync, realpathSync } from \"fs\";\nimport { homedir } from \"os\";\nimport { basename, dirname, join, resolve, sep, win32 } from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { spawnProcessSync } from \"./utils/child-process.ts\";\nimport { normalizePath } from \"./utils/paths.ts\";\nimport { stripBom } from \"./utils/text.ts\";\n\n// =============================================================================\n// Package Detection\n// =============================================================================\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n/**\n * Detect if we're running as a Bun compiled binary.\n * Bun binaries have import.meta.url containing \"$bunfs\", \"~BUN\", or \"%7EBUN\" (Bun's virtual filesystem path)\n */\nexport const isBunBinary =\n\timport.meta.url.includes(\"$bunfs\") || import.meta.url.includes(\"~BUN\") || import.meta.url.includes(\"%7EBUN\");\n\n/** Detect if Bun is the runtime (compiled binary or bun run) */\nexport const isBunRuntime = !!process.versions.bun;\n\n// =============================================================================\n// Install Method Detection\n// =============================================================================\n\nexport type InstallMethod = \"bun-binary\" | \"npm\" | \"pnpm\" | \"yarn\" | \"bun\" | \"unknown\";\n\ninterface SelfUpdateCommandStep {\n\tcommand: string;\n\targs: string[];\n\tdisplay: string;\n}\n\nexport interface SelfUpdateCommand extends SelfUpdateCommandStep {\n\tsteps?: SelfUpdateCommandStep[];\n}\n\nexport type SelfUpdatePackageTarget = string | { packageName: string; installSpec?: string };\n\nfunction normalizeSelfUpdatePackageTarget(target: SelfUpdatePackageTarget): {\n\tpackageName: string;\n\tinstallSpec: string;\n} {\n\tif (typeof target === \"string\") {\n\t\treturn { packageName: target, installSpec: target };\n\t}\n\treturn { packageName: target.packageName, installSpec: target.installSpec ?? target.packageName };\n}\n\nfunction makeSelfUpdateCommand(\n\tinstallStep: SelfUpdateCommandStep,\n\tuninstallStep?: SelfUpdateCommandStep,\n): SelfUpdateCommand {\n\tif (!uninstallStep) return installStep;\n\treturn {\n\t\t...installStep,\n\t\tdisplay: `${uninstallStep.display} && ${installStep.display}`,\n\t\tsteps: [uninstallStep, installStep],\n\t};\n}\n\nfunction makeSelfUpdateCommandStep(command: string, args: string[]): SelfUpdateCommandStep {\n\treturn {\n\t\tcommand,\n\t\targs,\n\t\tdisplay: [command, ...args].map((arg) => (/\\s/.test(arg) ? `\"${arg}\"` : arg)).join(\" \"),\n\t};\n}\n\nexport function detectInstallMethod(): InstallMethod {\n\tif (isBunBinary) {\n\t\treturn \"bun-binary\";\n\t}\n\n\tconst resolvedPath = `${__dirname}\\0${process.execPath || \"\"}`.toLowerCase().replace(/\\\\/g, \"/\");\n\n\tif (resolvedPath.includes(\"/pnpm/\") || resolvedPath.includes(\"/.pnpm/\")) {\n\t\treturn \"pnpm\";\n\t}\n\tif (resolvedPath.includes(\"/yarn/\") || resolvedPath.includes(\"/.yarn/\")) {\n\t\treturn \"yarn\";\n\t}\n\tif (isBunRuntime || resolvedPath.includes(\"/install/global/node_modules/\")) {\n\t\treturn \"bun\";\n\t}\n\tif (resolvedPath.includes(\"/npm/\") || resolvedPath.includes(\"/node_modules/\")) {\n\t\treturn \"npm\";\n\t}\n\n\treturn \"unknown\";\n}\n\nfunction getInferredNpmInstall(): { root: string; prefix: string } | undefined {\n\tconst packageDir = getPackageDir();\n\tconst path = process.platform === \"win32\" || packageDir.includes(\"\\\\\") ? win32 : { basename, dirname };\n\tconst parent = path.dirname(packageDir);\n\tlet root: string | undefined;\n\tif (path.basename(parent).startsWith(\"@\") && path.basename(path.dirname(parent)) === \"node_modules\") {\n\t\troot = path.dirname(parent);\n\t} else if (path.basename(parent) === \"node_modules\") {\n\t\troot = parent;\n\t}\n\tif (!root) return undefined;\n\tconst rootParent = path.dirname(root);\n\tif (path.basename(rootParent) === \"lib\") return { root, prefix: path.dirname(rootParent) };\n\t// Windows global npm prefixes use `<prefix>\\\\node_modules`, which is\n\t// indistinguishable from local project installs by path shape alone. Do not\n\t// infer unsupported Windows custom prefixes without `npm root -g` evidence.\n\treturn undefined;\n}\n\nfunction getSelfUpdateCommandForMethod(\n\tmethod: InstallMethod,\n\tinstalledPackageName: string,\n\tupdatePackageTarget: SelfUpdatePackageTarget = installedPackageName,\n\tnpmCommand?: string[],\n): SelfUpdateCommand | undefined {\n\tconst target = normalizeSelfUpdatePackageTarget(updatePackageTarget);\n\tswitch (method) {\n\t\tcase \"bun-binary\":\n\t\t\treturn undefined;\n\t\tcase \"pnpm\": {\n\t\t\tconst match = readCommandOutput(\"pnpm\", [\"root\", \"-g\"])\n\t\t\t\t? undefined\n\t\t\t\t: /^(.*[\\\\/]global[\\\\/][^\\\\/]+)[\\\\/]\\.pnpm[\\\\/]/.exec(getPackageDir());\n\t\t\tconst binDirArgs = match\n\t\t\t\t? [`--config.global-bin-dir=${process.env.PNPM_HOME || dirname(dirname(match[1]))}`]\n\t\t\t\t: [];\n\t\t\treturn makeSelfUpdateCommand(\n\t\t\t\tmakeSelfUpdateCommandStep(\"pnpm\", [\n\t\t\t\t\t\"install\",\n\t\t\t\t\t\"-g\",\n\t\t\t\t\t\"--ignore-scripts\",\n\t\t\t\t\t\"--config.minimumReleaseAge=0\",\n\t\t\t\t\t...binDirArgs,\n\t\t\t\t\ttarget.installSpec,\n\t\t\t\t]),\n\t\t\t\ttarget.packageName === installedPackageName\n\t\t\t\t\t? undefined\n\t\t\t\t\t: makeSelfUpdateCommandStep(\"pnpm\", [\"remove\", \"-g\", ...binDirArgs, installedPackageName]),\n\t\t\t);\n\t\t}\n\t\tcase \"yarn\":\n\t\t\treturn makeSelfUpdateCommand(\n\t\t\t\tmakeSelfUpdateCommandStep(\"yarn\", [\"global\", \"add\", \"--ignore-scripts\", target.installSpec]),\n\t\t\t\ttarget.packageName === installedPackageName\n\t\t\t\t\t? undefined\n\t\t\t\t\t: makeSelfUpdateCommandStep(\"yarn\", [\"global\", \"remove\", installedPackageName]),\n\t\t\t);\n\t\tcase \"bun\":\n\t\t\treturn makeSelfUpdateCommand(\n\t\t\t\tmakeSelfUpdateCommandStep(\"bun\", [\n\t\t\t\t\t\"install\",\n\t\t\t\t\t\"-g\",\n\t\t\t\t\t\"--ignore-scripts\",\n\t\t\t\t\t\"--minimum-release-age=0\",\n\t\t\t\t\ttarget.installSpec,\n\t\t\t\t]),\n\t\t\t\ttarget.packageName === installedPackageName\n\t\t\t\t\t? undefined\n\t\t\t\t\t: makeSelfUpdateCommandStep(\"bun\", [\"uninstall\", \"-g\", installedPackageName]),\n\t\t\t);\n\t\tcase \"npm\": {\n\t\t\tconst [command = \"npm\", ...npmArgs] = npmCommand ?? [];\n\t\t\tconst inferred = npmCommand?.length ? undefined : getInferredNpmInstall();\n\t\t\tconst prefixArgs = [...npmArgs, ...(inferred ? [\"--prefix\", inferred.prefix] : [])];\n\t\t\tconst installStep = makeSelfUpdateCommandStep(command, [\n\t\t\t\t...prefixArgs,\n\t\t\t\t\"install\",\n\t\t\t\t\"-g\",\n\t\t\t\t\"--ignore-scripts\",\n\t\t\t\t\"--min-release-age=0\",\n\t\t\t\ttarget.installSpec,\n\t\t\t]);\n\t\t\tconst uninstallStep =\n\t\t\t\ttarget.packageName === installedPackageName\n\t\t\t\t\t? undefined\n\t\t\t\t\t: makeSelfUpdateCommandStep(command, [...prefixArgs, \"uninstall\", \"-g\", installedPackageName]);\n\t\t\treturn makeSelfUpdateCommand(installStep, uninstallStep);\n\t\t}\n\t\tcase \"unknown\":\n\t\t\treturn undefined;\n\t}\n}\n\nfunction readCommandOutput(\n\tcommand: string,\n\targs: string[],\n\toptions: { requireSuccess?: boolean } = {},\n): string | undefined {\n\tconst result = spawnProcessSync(command, args, {\n\t\tencoding: \"utf-8\",\n\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t});\n\tif (result.status === 0) return result.stdout.trim() || undefined;\n\tif (options.requireSuccess) {\n\t\tconst reason = result.error?.message || result.stderr.trim() || `exit code ${result.status ?? \"unknown\"}`;\n\t\tthrow new Error(`Failed to run ${[command, ...args].join(\" \")}: ${reason}`);\n\t}\n\treturn undefined;\n}\n\nfunction getGlobalPackageRoots(method: InstallMethod, _packageName: string, npmCommand?: string[]): string[] {\n\tswitch (method) {\n\t\tcase \"npm\": {\n\t\t\tconst configured = !!npmCommand?.length;\n\t\t\tconst [command = \"npm\", ...npmArgs] = npmCommand ?? [];\n\t\t\tif (configured && command === \"bun\") {\n\t\t\t\tconst bunBin = readCommandOutput(command, [...npmArgs, \"pm\", \"bin\", \"-g\"], {\n\t\t\t\t\trequireSuccess: true,\n\t\t\t\t});\n\t\t\t\tconst roots = [join(homedir(), \".bun\", \"install\", \"global\", \"node_modules\")];\n\t\t\t\tif (bunBin) {\n\t\t\t\t\troots.push(join(dirname(bunBin), \"install\", \"global\", \"node_modules\"));\n\t\t\t\t}\n\t\t\t\treturn roots;\n\t\t\t}\n\t\t\tconst root = readCommandOutput(command, [...npmArgs, \"root\", \"-g\"], {\n\t\t\t\trequireSuccess: configured,\n\t\t\t});\n\t\t\tconst inferred = configured ? undefined : getInferredNpmInstall();\n\t\t\treturn [root, inferred?.root].filter((x): x is string => !!x);\n\t\t}\n\t\tcase \"pnpm\": {\n\t\t\tconst root = readCommandOutput(\"pnpm\", [\"root\", \"-g\"]);\n\t\t\tif (root) return [root, dirname(root)];\n\t\t\tconst match = /^(.*[\\\\/]global[\\\\/][^\\\\/]+)[\\\\/]\\.pnpm[\\\\/]/.exec(getPackageDir());\n\t\t\treturn match ? [match[1]] : [];\n\t\t}\n\t\tcase \"yarn\": {\n\t\t\tconst dir = readCommandOutput(\"yarn\", [\"global\", \"dir\"]);\n\t\t\treturn dir ? [dir, join(dir, \"node_modules\")] : [];\n\t\t}\n\t\tcase \"bun\": {\n\t\t\tconst bunBin = readCommandOutput(\"bun\", [\"pm\", \"bin\", \"-g\"]);\n\t\t\tconst roots = [join(homedir(), \".bun\", \"install\", \"global\", \"node_modules\")];\n\t\t\tif (bunBin) {\n\t\t\t\troots.push(join(dirname(bunBin), \"install\", \"global\", \"node_modules\"));\n\t\t\t}\n\t\t\treturn roots;\n\t\t}\n\t\tcase \"bun-binary\":\n\t\tcase \"unknown\":\n\t\t\treturn [];\n\t}\n}\n\nfunction normalizeExistingPathForComparison(path: string, resolveSymlinks: boolean): string | undefined {\n\tconst resolvedPath = resolve(path);\n\tif (!existsSync(resolvedPath)) {\n\t\treturn undefined;\n\t}\n\tlet normalizedPath = resolvedPath;\n\tif (resolveSymlinks) {\n\t\ttry {\n\t\t\tnormalizedPath = realpathSync(resolvedPath);\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\tif (process.platform === \"win32\") {\n\t\tnormalizedPath = normalizedPath.toLowerCase();\n\t}\n\treturn normalizedPath;\n}\n\nfunction getPathComparisonCandidates(path: string): string[] {\n\treturn Array.from(\n\t\tnew Set(\n\t\t\t[normalizeExistingPathForComparison(path, false), normalizeExistingPathForComparison(path, true)].filter(\n\t\t\t\t(candidate): candidate is string => !!candidate,\n\t\t\t),\n\t\t),\n\t);\n}\n\nfunction getEntrypointPackageDir(): string | undefined {\n\tconst entrypoint = process.argv[1];\n\tif (!entrypoint) return undefined;\n\tlet dir = dirname(entrypoint);\n\twhile (dir !== dirname(dir)) {\n\t\tif (existsSync(join(dir, \"package.json\"))) {\n\t\t\treturn dir;\n\t\t}\n\t\tdir = dirname(dir);\n\t}\n\treturn undefined;\n}\n\nfunction isSelfUpdatePathWritable(): boolean {\n\tconst packageDir = getPackageDir();\n\ttry {\n\t\taccessSync(packageDir, constants.W_OK);\n\t\taccessSync(dirname(packageDir), constants.W_OK);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction isManagedByGlobalPackageManager(method: InstallMethod, packageName: string, npmCommand?: string[]): boolean {\n\tconst packageDirs = [getPackageDir(), getEntrypointPackageDir()].filter((dir): dir is string => !!dir);\n\tconst packageDirCandidates = packageDirs.flatMap((dir) => getPathComparisonCandidates(dir));\n\treturn getGlobalPackageRoots(method, packageName, npmCommand).some((root) => {\n\t\treturn getPathComparisonCandidates(root).some((normalizedRoot) => {\n\t\t\tconst rootPrefix = normalizedRoot.endsWith(sep) ? normalizedRoot : `${normalizedRoot}${sep}`;\n\t\t\treturn packageDirCandidates.some((packageDir) => packageDir.startsWith(rootPrefix));\n\t\t});\n\t});\n}\n\nexport function getSelfUpdateCommand(\n\tpackageName: string,\n\tnpmCommand?: string[],\n\tupdatePackageTarget: SelfUpdatePackageTarget = packageName,\n): SelfUpdateCommand | undefined {\n\tconst method = detectInstallMethod();\n\tconst command = getSelfUpdateCommandForMethod(method, packageName, updatePackageTarget, npmCommand);\n\tif (!command || !isManagedByGlobalPackageManager(method, packageName, npmCommand) || !isSelfUpdatePathWritable()) {\n\t\treturn undefined;\n\t}\n\treturn command;\n}\n\nexport function getSelfUpdateUnavailableInstruction(\n\tpackageName: string,\n\tnpmCommand?: string[],\n\tupdatePackageTarget: SelfUpdatePackageTarget = packageName,\n): string {\n\tconst method = detectInstallMethod();\n\tconst target = normalizeSelfUpdatePackageTarget(updatePackageTarget);\n\tif (method === \"bun-binary\") {\n\t\treturn `Download from: https://github.com/earendil-works/pi-mono/releases/latest`;\n\t}\n\tconst command = getSelfUpdateCommandForMethod(method, packageName, target, npmCommand);\n\tif (command) {\n\t\tif (isManagedByGlobalPackageManager(method, packageName, npmCommand) && !isSelfUpdatePathWritable()) {\n\t\t\treturn `This installation is managed by a global ${method} install, but the install path is not writable. Update it yourself with: ${command.display}`;\n\t\t}\n\t\treturn `This installation is not managed by a global ${method} install. Update it with the package manager, wrapper, or source checkout that provides it.`;\n\t}\n\treturn `Update ${target.installSpec} using the package manager, wrapper, or source checkout that provides this installation.`;\n}\n\nexport function getUpdateInstruction(packageName: string): string {\n\tconst method = detectInstallMethod();\n\tconst command = getSelfUpdateCommandForMethod(method, packageName);\n\tif (command) {\n\t\treturn `Run: ${command.display}`;\n\t}\n\treturn getSelfUpdateUnavailableInstruction(packageName);\n}\n\n// =============================================================================\n// Package Asset Paths (shipped with executable)\n// =============================================================================\n\n/**\n * Get the base directory for resolving package assets (themes, package.json, README.md, CHANGELOG.md).\n * - For Bun binary: returns the directory containing the executable\n * - For Node.js (dist/): returns __dirname (the dist/ directory)\n * - For tsx (src/): returns parent directory (the package root)\n */\nexport function getPackageDir(): string {\n\t// Allow override via environment variable (useful for Nix/Guix where store paths tokenize poorly)\n\tconst envDir = process.env.PI_PACKAGE_DIR;\n\tif (envDir) {\n\t\treturn normalizePath(envDir);\n\t}\n\n\tif (isBunBinary) {\n\t\t// Bun binary: process.execPath points to the compiled executable\n\t\treturn dirname(process.execPath);\n\t}\n\t// Node.js: walk up from __dirname until we find package.json\n\tlet dir = __dirname;\n\twhile (dir !== dirname(dir)) {\n\t\tif (existsSync(join(dir, \"package.json\"))) {\n\t\t\treturn dir;\n\t\t}\n\t\tdir = dirname(dir);\n\t}\n\t// Fallback (shouldn't happen)\n\treturn __dirname;\n}\n\n/**\n * Get path to built-in themes directory (shipped with package)\n * - For Bun binary: theme/ next to executable\n * - For Node.js (dist/): dist/modes/interactive/theme/\n * - For tsx (src/): src/modes/interactive/theme/\n */\nexport function getThemesDir(): string {\n\tif (isBunBinary) {\n\t\treturn join(getPackageDir(), \"theme\");\n\t}\n\t// Theme is in modes/interactive/theme/ relative to src/ or dist/\n\tconst packageDir = getPackageDir();\n\tconst srcOrDist = existsSync(join(packageDir, \"src\")) ? \"src\" : \"dist\";\n\treturn join(packageDir, srcOrDist, \"modes\", \"interactive\", \"theme\");\n}\n\n/**\n * Get path to HTML export template directory (shipped with package)\n * - For Bun binary: export-html/ next to executable\n * - For Node.js (dist/): dist/core/export-html/\n * - For tsx (src/): src/core/export-html/\n */\nexport function getExportTemplateDir(): string {\n\tif (isBunBinary) {\n\t\treturn join(getPackageDir(), \"export-html\");\n\t}\n\tconst packageDir = getPackageDir();\n\tconst srcOrDist = existsSync(join(packageDir, \"src\")) ? \"src\" : \"dist\";\n\treturn join(packageDir, srcOrDist, \"core\", \"export-html\");\n}\n\n/** Get path to package.json */\nexport function getPackageJsonPath(): string {\n\treturn join(getPackageDir(), \"package.json\");\n}\n\n/** Get path to README.md */\nexport function getReadmePath(): string {\n\treturn resolve(join(getPackageDir(), \"README.md\"));\n}\n\n/** Get path to docs directory */\nexport function getDocsPath(): string {\n\treturn resolve(join(getPackageDir(), \"docs\"));\n}\n\n/** Get path to examples directory */\nexport function getExamplesPath(): string {\n\treturn resolve(join(getPackageDir(), \"examples\"));\n}\n\n/** Get path to CHANGELOG.md */\nexport function getChangelogPath(): string {\n\treturn resolve(join(getPackageDir(), \"CHANGELOG.md\"));\n}\n\n/**\n * Get path to built-in interactive assets directory.\n * - For Bun binary: assets/ next to executable\n * - For Node.js (dist/): dist/modes/interactive/assets/\n * - For tsx (src/): src/modes/interactive/assets/\n */\nexport function getInteractiveAssetsDir(): string {\n\tif (isBunBinary) {\n\t\treturn join(getPackageDir(), \"assets\");\n\t}\n\tconst packageDir = getPackageDir();\n\tconst srcOrDist = existsSync(join(packageDir, \"src\")) ? \"src\" : \"dist\";\n\treturn join(packageDir, srcOrDist, \"modes\", \"interactive\", \"assets\");\n}\n\n/** Get path to a bundled interactive asset */\nexport function getBundledInteractiveAssetPath(name: string): string {\n\treturn join(getInteractiveAssetsDir(), name);\n}\n\n// =============================================================================\n// App Config (from package.json piConfig)\n// =============================================================================\n\ninterface PackageJson {\n\tname?: string;\n\tversion?: string;\n\tpiConfig?: {\n\t\tname?: string;\n\t\tconfigDir?: string;\n\t};\n}\n\nlet pkg: PackageJson = {};\ntry {\n\tpkg = JSON.parse(stripBom(readFileSync(getPackageJsonPath(), \"utf-8\"))) as PackageJson;\n} catch (e: unknown) {\n\tconst err = e as NodeJS.ErrnoException;\n\tif (err.code !== \"ENOENT\") throw e;\n}\n\nconst piConfigName: string | undefined = pkg.piConfig?.name;\nexport const PACKAGE_NAME: string = pkg.name || \"@hoilab/ada-cli\";\nexport const APP_NAME: string = piConfigName || \"pi\";\nexport const APP_TITLE: string = piConfigName ? APP_NAME : \"π\";\nexport const CONFIG_DIR_NAME: string = pkg.piConfig?.configDir || \".pi\";\nexport const VERSION: string = pkg.version || \"0.0.0\";\n\n// e.g., ADA_CLI_CODING_AGENT_DIR (dashes are normalized to underscores)\nexport const ENV_AGENT_DIR = `${APP_NAME.toUpperCase().replace(/-/g, \"_\")}_CODING_AGENT_DIR`;\nexport const ENV_SESSION_DIR = `${APP_NAME.toUpperCase().replace(/-/g, \"_\")}_CODING_AGENT_SESSION_DIR`;\n\nexport function expandTildePath(path: string): string {\n\treturn normalizePath(path);\n}\n\nconst DEFAULT_SHARE_VIEWER_URL = \"https://pi.dev/session/\";\n\n/** Get the share viewer URL for a gist ID */\nexport function getShareViewerUrl(gistId: string): string {\n\tconst baseUrl = process.env.ADA_SHARE_VIEWER_URL || process.env.PI_SHARE_VIEWER_URL || DEFAULT_SHARE_VIEWER_URL;\n\treturn `${baseUrl}#${gistId}`;\n}\n\n// =============================================================================\n// User Config Paths (~/.pi/agent/*)\n// =============================================================================\n\n/** Get the agent config directory (e.g., ~/.pi/agent/) */\nexport function getAgentDir(): string {\n\tconst envDir = process.env[ENV_AGENT_DIR];\n\tif (envDir) {\n\t\treturn expandTildePath(envDir);\n\t}\n\treturn join(homedir(), CONFIG_DIR_NAME, \"agent\");\n}\n\n/** Get path to user's custom themes directory */\nexport function getCustomThemesDir(): string {\n\treturn join(getAgentDir(), \"themes\");\n}\n\n/** Get path to models.json */\nexport function getModelsPath(): string {\n\treturn join(getAgentDir(), \"models.json\");\n}\n\n/** Get path to auth.json */\nexport function getAuthPath(): string {\n\treturn join(getAgentDir(), \"auth.json\");\n}\n\n/** Get path to settings.json */\nexport function getSettingsPath(): string {\n\treturn join(getAgentDir(), \"settings.json\");\n}\n\n/** Get path to tools directory */\nexport function getToolsDir(): string {\n\treturn join(getAgentDir(), \"tools\");\n}\n\n/** Get path to managed binaries directory (fd, rg) */\nexport function getBinDir(): string {\n\treturn join(getAgentDir(), \"bin\");\n}\n\n/** Get path to prompt templates directory */\nexport function getPromptsDir(): string {\n\treturn join(getAgentDir(), \"prompts\");\n}\n\n/** Get path to sessions directory */\nexport function getSessionsDir(): string {\n\treturn join(getAgentDir(), \"sessions\");\n}\n\n/** Get path to debug log file */\nexport function getDebugLogPath(): string {\n\treturn join(getAgentDir(), `${APP_NAME}-debug.log`);\n}\n"]}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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","sourcesContent":["import { accessSync, constants, existsSync, readFileSync, realpathSync } from \"fs\";\nimport { homedir } from \"os\";\nimport { basename, dirname, join, resolve, sep, win32 } from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { spawnProcessSync } from \"./utils/child-process.ts\";\nimport { normalizePath } from \"./utils/paths.ts\";\nimport { stripBom } from \"./utils/text.ts\";\n\n// =============================================================================\n// Package Detection\n// =============================================================================\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n/**\n * Detect if we're running as a Bun compiled binary.\n * Bun binaries have import.meta.url containing \"$bunfs\", \"~BUN\", or \"%7EBUN\" (Bun's virtual filesystem path)\n */\nexport const isBunBinary =\n\timport.meta.url.includes(\"$bunfs\") || import.meta.url.includes(\"~BUN\") || import.meta.url.includes(\"%7EBUN\");\n\n/** Detect if Bun is the runtime (compiled binary or bun run) */\nexport const isBunRuntime = !!process.versions.bun;\n\n// =============================================================================\n// Install Method Detection\n// =============================================================================\n\nexport type InstallMethod = \"bun-binary\" | \"npm\" | \"pnpm\" | \"yarn\" | \"bun\" | \"unknown\";\n\ninterface SelfUpdateCommandStep {\n\tcommand: string;\n\targs: string[];\n\tdisplay: string;\n}\n\nexport interface SelfUpdateCommand extends SelfUpdateCommandStep {\n\tsteps?: SelfUpdateCommandStep[];\n}\n\nexport type SelfUpdatePackageTarget = string | { packageName: string; installSpec?: string };\n\nfunction normalizeSelfUpdatePackageTarget(target: SelfUpdatePackageTarget): {\n\tpackageName: string;\n\tinstallSpec: string;\n} {\n\tif (typeof target === \"string\") {\n\t\treturn { packageName: target, installSpec: target };\n\t}\n\treturn { packageName: target.packageName, installSpec: target.installSpec ?? target.packageName };\n}\n\nfunction makeSelfUpdateCommand(\n\tinstallStep: SelfUpdateCommandStep,\n\tuninstallStep?: SelfUpdateCommandStep,\n): SelfUpdateCommand {\n\tif (!uninstallStep) return installStep;\n\treturn {\n\t\t...installStep,\n\t\tdisplay: `${uninstallStep.display} && ${installStep.display}`,\n\t\tsteps: [uninstallStep, installStep],\n\t};\n}\n\nfunction makeSelfUpdateCommandStep(command: string, args: string[]): SelfUpdateCommandStep {\n\treturn {\n\t\tcommand,\n\t\targs,\n\t\tdisplay: [command, ...args].map((arg) => (/\\s/.test(arg) ? `\"${arg}\"` : arg)).join(\" \"),\n\t};\n}\n\nexport function detectInstallMethod(): InstallMethod {\n\tif (isBunBinary) {\n\t\treturn \"bun-binary\";\n\t}\n\n\tconst resolvedPath = `${__dirname}\\0${process.execPath || \"\"}`.toLowerCase().replace(/\\\\/g, \"/\");\n\n\tif (resolvedPath.includes(\"/pnpm/\") || resolvedPath.includes(\"/.pnpm/\")) {\n\t\treturn \"pnpm\";\n\t}\n\tif (resolvedPath.includes(\"/yarn/\") || resolvedPath.includes(\"/.yarn/\")) {\n\t\treturn \"yarn\";\n\t}\n\tif (isBunRuntime || resolvedPath.includes(\"/install/global/node_modules/\")) {\n\t\treturn \"bun\";\n\t}\n\tif (resolvedPath.includes(\"/npm/\") || resolvedPath.includes(\"/node_modules/\")) {\n\t\treturn \"npm\";\n\t}\n\n\treturn \"unknown\";\n}\n\nfunction getInferredNpmInstall(): { root: string; prefix: string } | undefined {\n\tconst packageDir = getPackageDir();\n\tconst path = process.platform === \"win32\" || packageDir.includes(\"\\\\\") ? win32 : { basename, dirname };\n\tconst parent = path.dirname(packageDir);\n\tlet root: string | undefined;\n\tif (path.basename(parent).startsWith(\"@\") && path.basename(path.dirname(parent)) === \"node_modules\") {\n\t\troot = path.dirname(parent);\n\t} else if (path.basename(parent) === \"node_modules\") {\n\t\troot = parent;\n\t}\n\tif (!root) return undefined;\n\tconst rootParent = path.dirname(root);\n\tif (path.basename(rootParent) === \"lib\") return { root, prefix: path.dirname(rootParent) };\n\t// Windows global npm prefixes use `<prefix>\\\\node_modules`, which is\n\t// indistinguishable from local project installs by path shape alone. Do not\n\t// infer unsupported Windows custom prefixes without `npm root -g` evidence.\n\treturn undefined;\n}\n\nfunction getSelfUpdateCommandForMethod(\n\tmethod: InstallMethod,\n\tinstalledPackageName: string,\n\tupdatePackageTarget: SelfUpdatePackageTarget = installedPackageName,\n\tnpmCommand?: string[],\n): SelfUpdateCommand | undefined {\n\tconst target = normalizeSelfUpdatePackageTarget(updatePackageTarget);\n\tswitch (method) {\n\t\tcase \"bun-binary\":\n\t\t\treturn undefined;\n\t\tcase \"pnpm\": {\n\t\t\tconst match = readCommandOutput(\"pnpm\", [\"root\", \"-g\"])\n\t\t\t\t? undefined\n\t\t\t\t: /^(.*[\\\\/]global[\\\\/][^\\\\/]+)[\\\\/]\\.pnpm[\\\\/]/.exec(getPackageDir());\n\t\t\tconst binDirArgs = match\n\t\t\t\t? [`--config.global-bin-dir=${process.env.PNPM_HOME || dirname(dirname(match[1]))}`]\n\t\t\t\t: [];\n\t\t\treturn makeSelfUpdateCommand(\n\t\t\t\tmakeSelfUpdateCommandStep(\"pnpm\", [\n\t\t\t\t\t\"install\",\n\t\t\t\t\t\"-g\",\n\t\t\t\t\t\"--ignore-scripts\",\n\t\t\t\t\t\"--config.minimumReleaseAge=0\",\n\t\t\t\t\t...binDirArgs,\n\t\t\t\t\ttarget.installSpec,\n\t\t\t\t]),\n\t\t\t\ttarget.packageName === installedPackageName\n\t\t\t\t\t? undefined\n\t\t\t\t\t: makeSelfUpdateCommandStep(\"pnpm\", [\"remove\", \"-g\", ...binDirArgs, installedPackageName]),\n\t\t\t);\n\t\t}\n\t\tcase \"yarn\":\n\t\t\treturn makeSelfUpdateCommand(\n\t\t\t\tmakeSelfUpdateCommandStep(\"yarn\", [\"global\", \"add\", \"--ignore-scripts\", target.installSpec]),\n\t\t\t\ttarget.packageName === installedPackageName\n\t\t\t\t\t? undefined\n\t\t\t\t\t: makeSelfUpdateCommandStep(\"yarn\", [\"global\", \"remove\", installedPackageName]),\n\t\t\t);\n\t\tcase \"bun\":\n\t\t\treturn makeSelfUpdateCommand(\n\t\t\t\tmakeSelfUpdateCommandStep(\"bun\", [\n\t\t\t\t\t\"install\",\n\t\t\t\t\t\"-g\",\n\t\t\t\t\t\"--ignore-scripts\",\n\t\t\t\t\t\"--minimum-release-age=0\",\n\t\t\t\t\ttarget.installSpec,\n\t\t\t\t]),\n\t\t\t\ttarget.packageName === installedPackageName\n\t\t\t\t\t? undefined\n\t\t\t\t\t: makeSelfUpdateCommandStep(\"bun\", [\"uninstall\", \"-g\", installedPackageName]),\n\t\t\t);\n\t\tcase \"npm\": {\n\t\t\tconst [command = \"npm\", ...npmArgs] = npmCommand ?? [];\n\t\t\tconst inferred = npmCommand?.length ? undefined : getInferredNpmInstall();\n\t\t\tconst prefixArgs = [...npmArgs, ...(inferred ? [\"--prefix\", inferred.prefix] : [])];\n\t\t\tconst installStep = makeSelfUpdateCommandStep(command, [\n\t\t\t\t...prefixArgs,\n\t\t\t\t\"install\",\n\t\t\t\t\"-g\",\n\t\t\t\t\"--ignore-scripts\",\n\t\t\t\t\"--min-release-age=0\",\n\t\t\t\ttarget.installSpec,\n\t\t\t]);\n\t\t\tconst uninstallStep =\n\t\t\t\ttarget.packageName === installedPackageName\n\t\t\t\t\t? undefined\n\t\t\t\t\t: makeSelfUpdateCommandStep(command, [...prefixArgs, \"uninstall\", \"-g\", installedPackageName]);\n\t\t\treturn makeSelfUpdateCommand(installStep, uninstallStep);\n\t\t}\n\t\tcase \"unknown\":\n\t\t\treturn undefined;\n\t}\n}\n\nfunction readCommandOutput(\n\tcommand: string,\n\targs: string[],\n\toptions: { requireSuccess?: boolean } = {},\n): string | undefined {\n\tconst result = spawnProcessSync(command, args, {\n\t\tencoding: \"utf-8\",\n\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t});\n\tif (result.status === 0) return result.stdout.trim() || undefined;\n\tif (options.requireSuccess) {\n\t\tconst reason = result.error?.message || result.stderr.trim() || `exit code ${result.status ?? \"unknown\"}`;\n\t\tthrow new Error(`Failed to run ${[command, ...args].join(\" \")}: ${reason}`);\n\t}\n\treturn undefined;\n}\n\nfunction getGlobalPackageRoots(method: InstallMethod, _packageName: string, npmCommand?: string[]): string[] {\n\tswitch (method) {\n\t\tcase \"npm\": {\n\t\t\tconst configured = !!npmCommand?.length;\n\t\t\tconst [command = \"npm\", ...npmArgs] = npmCommand ?? [];\n\t\t\tif (configured && command === \"bun\") {\n\t\t\t\tconst bunBin = readCommandOutput(command, [...npmArgs, \"pm\", \"bin\", \"-g\"], {\n\t\t\t\t\trequireSuccess: true,\n\t\t\t\t});\n\t\t\t\tconst roots = [join(homedir(), \".bun\", \"install\", \"global\", \"node_modules\")];\n\t\t\t\tif (bunBin) {\n\t\t\t\t\troots.push(join(dirname(bunBin), \"install\", \"global\", \"node_modules\"));\n\t\t\t\t}\n\t\t\t\treturn roots;\n\t\t\t}\n\t\t\tconst root = readCommandOutput(command, [...npmArgs, \"root\", \"-g\"], {\n\t\t\t\trequireSuccess: configured,\n\t\t\t});\n\t\t\tconst inferred = configured ? undefined : getInferredNpmInstall();\n\t\t\treturn [root, inferred?.root].filter((x): x is string => !!x);\n\t\t}\n\t\tcase \"pnpm\": {\n\t\t\tconst root = readCommandOutput(\"pnpm\", [\"root\", \"-g\"]);\n\t\t\tif (root) return [root, dirname(root)];\n\t\t\tconst match = /^(.*[\\\\/]global[\\\\/][^\\\\/]+)[\\\\/]\\.pnpm[\\\\/]/.exec(getPackageDir());\n\t\t\treturn match ? [match[1]] : [];\n\t\t}\n\t\tcase \"yarn\": {\n\t\t\tconst dir = readCommandOutput(\"yarn\", [\"global\", \"dir\"]);\n\t\t\treturn dir ? [dir, join(dir, \"node_modules\")] : [];\n\t\t}\n\t\tcase \"bun\": {\n\t\t\tconst bunBin = readCommandOutput(\"bun\", [\"pm\", \"bin\", \"-g\"]);\n\t\t\tconst roots = [join(homedir(), \".bun\", \"install\", \"global\", \"node_modules\")];\n\t\t\tif (bunBin) {\n\t\t\t\troots.push(join(dirname(bunBin), \"install\", \"global\", \"node_modules\"));\n\t\t\t}\n\t\t\treturn roots;\n\t\t}\n\t\tcase \"bun-binary\":\n\t\tcase \"unknown\":\n\t\t\treturn [];\n\t}\n}\n\nfunction normalizeExistingPathForComparison(path: string, resolveSymlinks: boolean): string | undefined {\n\tconst resolvedPath = resolve(path);\n\tif (!existsSync(resolvedPath)) {\n\t\treturn undefined;\n\t}\n\tlet normalizedPath = resolvedPath;\n\tif (resolveSymlinks) {\n\t\ttry {\n\t\t\tnormalizedPath = realpathSync(resolvedPath);\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\tif (process.platform === \"win32\") {\n\t\tnormalizedPath = normalizedPath.toLowerCase();\n\t}\n\treturn normalizedPath;\n}\n\nfunction getPathComparisonCandidates(path: string): string[] {\n\treturn Array.from(\n\t\tnew Set(\n\t\t\t[normalizeExistingPathForComparison(path, false), normalizeExistingPathForComparison(path, true)].filter(\n\t\t\t\t(candidate): candidate is string => !!candidate,\n\t\t\t),\n\t\t),\n\t);\n}\n\nfunction getEntrypointPackageDir(): string | undefined {\n\tconst entrypoint = process.argv[1];\n\tif (!entrypoint) return undefined;\n\tlet dir = dirname(entrypoint);\n\twhile (dir !== dirname(dir)) {\n\t\tif (existsSync(join(dir, \"package.json\"))) {\n\t\t\treturn dir;\n\t\t}\n\t\tdir = dirname(dir);\n\t}\n\treturn undefined;\n}\n\nfunction isSelfUpdatePathWritable(): boolean {\n\tconst packageDir = getPackageDir();\n\ttry {\n\t\taccessSync(packageDir, constants.W_OK);\n\t\taccessSync(dirname(packageDir), constants.W_OK);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction isManagedByGlobalPackageManager(method: InstallMethod, packageName: string, npmCommand?: string[]): boolean {\n\tconst packageDirs = [getPackageDir(), getEntrypointPackageDir()].filter((dir): dir is string => !!dir);\n\tconst packageDirCandidates = packageDirs.flatMap((dir) => getPathComparisonCandidates(dir));\n\treturn getGlobalPackageRoots(method, packageName, npmCommand).some((root) => {\n\t\treturn getPathComparisonCandidates(root).some((normalizedRoot) => {\n\t\t\tconst rootPrefix = normalizedRoot.endsWith(sep) ? normalizedRoot : `${normalizedRoot}${sep}`;\n\t\t\treturn packageDirCandidates.some((packageDir) => packageDir.startsWith(rootPrefix));\n\t\t});\n\t});\n}\n\nexport function getSelfUpdateCommand(\n\tpackageName: string,\n\tnpmCommand?: string[],\n\tupdatePackageTarget: SelfUpdatePackageTarget = packageName,\n): SelfUpdateCommand | undefined {\n\tconst method = detectInstallMethod();\n\tconst command = getSelfUpdateCommandForMethod(method, packageName, updatePackageTarget, npmCommand);\n\tif (!command || !isManagedByGlobalPackageManager(method, packageName, npmCommand) || !isSelfUpdatePathWritable()) {\n\t\treturn undefined;\n\t}\n\treturn command;\n}\n\nexport function getSelfUpdateUnavailableInstruction(\n\tpackageName: string,\n\tnpmCommand?: string[],\n\tupdatePackageTarget: SelfUpdatePackageTarget = packageName,\n): string {\n\tconst method = detectInstallMethod();\n\tconst target = normalizeSelfUpdatePackageTarget(updatePackageTarget);\n\tif (method === \"bun-binary\") {\n\t\treturn `Download from: https://github.com/earendil-works/pi-mono/releases/latest`;\n\t}\n\tconst command = getSelfUpdateCommandForMethod(method, packageName, target, npmCommand);\n\tif (command) {\n\t\tif (isManagedByGlobalPackageManager(method, packageName, npmCommand) && !isSelfUpdatePathWritable()) {\n\t\t\treturn `This installation is managed by a global ${method} install, but the install path is not writable. Update it yourself with: ${command.display}`;\n\t\t}\n\t\treturn `This installation is not managed by a global ${method} install. Update it with the package manager, wrapper, or source checkout that provides it.`;\n\t}\n\treturn `Update ${target.installSpec} using the package manager, wrapper, or source checkout that provides this installation.`;\n}\n\nexport function getUpdateInstruction(packageName: string): string {\n\tconst method = detectInstallMethod();\n\tconst command = getSelfUpdateCommandForMethod(method, packageName);\n\tif (command) {\n\t\treturn `Run: ${command.display}`;\n\t}\n\treturn getSelfUpdateUnavailableInstruction(packageName);\n}\n\n// =============================================================================\n// Package Asset Paths (shipped with executable)\n// =============================================================================\n\n/**\n * Get the base directory for resolving package assets (themes, package.json, README.md, CHANGELOG.md).\n * - For Bun binary: returns the directory containing the executable\n * - For Node.js (dist/): returns __dirname (the dist/ directory)\n * - For tsx (src/): returns parent directory (the package root)\n */\nexport function getPackageDir(): string {\n\t// Allow override via environment variable (useful for Nix/Guix where store paths tokenize poorly)\n\tconst envDir = process.env.PI_PACKAGE_DIR;\n\tif (envDir) {\n\t\treturn normalizePath(envDir);\n\t}\n\n\tif (isBunBinary) {\n\t\t// Bun binary: process.execPath points to the compiled executable\n\t\treturn dirname(process.execPath);\n\t}\n\t// Node.js: walk up from __dirname until we find package.json\n\tlet dir = __dirname;\n\twhile (dir !== dirname(dir)) {\n\t\tif (existsSync(join(dir, \"package.json\"))) {\n\t\t\treturn dir;\n\t\t}\n\t\tdir = dirname(dir);\n\t}\n\t// Fallback (shouldn't happen)\n\treturn __dirname;\n}\n\n/**\n * Get path to built-in themes directory (shipped with package)\n * - For Bun binary: theme/ next to executable\n * - For Node.js (dist/): dist/modes/interactive/theme/\n * - For tsx (src/): src/modes/interactive/theme/\n */\nexport function getThemesDir(): string {\n\tif (isBunBinary) {\n\t\treturn join(getPackageDir(), \"theme\");\n\t}\n\t// Theme is in modes/interactive/theme/ relative to src/ or dist/\n\tconst packageDir = getPackageDir();\n\tconst srcOrDist = existsSync(join(packageDir, \"src\")) ? \"src\" : \"dist\";\n\treturn join(packageDir, srcOrDist, \"modes\", \"interactive\", \"theme\");\n}\n\n/**\n * Get path to HTML export template directory (shipped with package)\n * - For Bun binary: export-html/ next to executable\n * - For Node.js (dist/): dist/core/export-html/\n * - For tsx (src/): src/core/export-html/\n */\nexport function getExportTemplateDir(): string {\n\tif (isBunBinary) {\n\t\treturn join(getPackageDir(), \"export-html\");\n\t}\n\tconst packageDir = getPackageDir();\n\tconst srcOrDist = existsSync(join(packageDir, \"src\")) ? \"src\" : \"dist\";\n\treturn join(packageDir, srcOrDist, \"core\", \"export-html\");\n}\n\n/** Get path to package.json */\nexport function getPackageJsonPath(): string {\n\treturn join(getPackageDir(), \"package.json\");\n}\n\n/** Get path to README.md */\nexport function getReadmePath(): string {\n\treturn resolve(join(getPackageDir(), \"README.md\"));\n}\n\n/** Get path to docs directory */\nexport function getDocsPath(): string {\n\treturn resolve(join(getPackageDir(), \"docs\"));\n}\n\n/** Get path to examples directory */\nexport function getExamplesPath(): string {\n\treturn resolve(join(getPackageDir(), \"examples\"));\n}\n\n/** Get path to CHANGELOG.md */\nexport function getChangelogPath(): string {\n\treturn resolve(join(getPackageDir(), \"CHANGELOG.md\"));\n}\n\n/**\n * Get path to built-in interactive assets directory.\n * - For Bun binary: assets/ next to executable\n * - For Node.js (dist/): dist/modes/interactive/assets/\n * - For tsx (src/): src/modes/interactive/assets/\n */\nexport function getInteractiveAssetsDir(): string {\n\tif (isBunBinary) {\n\t\treturn join(getPackageDir(), \"assets\");\n\t}\n\tconst packageDir = getPackageDir();\n\tconst srcOrDist = existsSync(join(packageDir, \"src\")) ? \"src\" : \"dist\";\n\treturn join(packageDir, srcOrDist, \"modes\", \"interactive\", \"assets\");\n}\n\n/** Get path to a bundled interactive asset */\nexport function getBundledInteractiveAssetPath(name: string): string {\n\treturn join(getInteractiveAssetsDir(), name);\n}\n\n// =============================================================================\n// App Config (from package.json piConfig)\n// =============================================================================\n\ninterface PackageJson {\n\tname?: string;\n\tversion?: string;\n\tpiConfig?: {\n\t\tname?: string;\n\t\tconfigDir?: string;\n\t};\n}\n\nlet pkg: PackageJson = {};\ntry {\n\tpkg = JSON.parse(stripBom(readFileSync(getPackageJsonPath(), \"utf-8\"))) as PackageJson;\n} catch (e: unknown) {\n\tconst err = e as NodeJS.ErrnoException;\n\tif (err.code !== \"ENOENT\") throw e;\n}\n\nconst piConfigName: string | undefined = pkg.piConfig?.name;\nexport const PACKAGE_NAME: string = pkg.name || \"@hoilab/ada-cli\";\nexport const APP_NAME: string = piConfigName || \"pi\";\nexport const APP_TITLE: string = piConfigName ? APP_NAME : \"π\";\nexport const CONFIG_DIR_NAME: string = pkg.piConfig?.configDir || \".pi\";\nexport const VERSION: string = pkg.version || \"0.0.0\";\n\n// e.g., ADA_CLI_CODING_AGENT_DIR (dashes are normalized to underscores)\nexport const ENV_AGENT_DIR = `${APP_NAME.toUpperCase().replace(/-/g, \"_\")}_CODING_AGENT_DIR`;\nexport const ENV_SESSION_DIR = `${APP_NAME.toUpperCase().replace(/-/g, \"_\")}_CODING_AGENT_SESSION_DIR`;\n\nexport function expandTildePath(path: string): string {\n\treturn normalizePath(path);\n}\n\nconst DEFAULT_SHARE_VIEWER_URL = \"https://pi.dev/session/\";\n\n/** Get the share viewer URL for a gist ID. */\nexport function getShareViewerUrl(gistId: string): string {\n\tconst baseUrl = process.env.ADA_SHARE_VIEWER_URL || process.env.PI_SHARE_VIEWER_URL || DEFAULT_SHARE_VIEWER_URL;\n\treturn `${baseUrl}#${gistId}`;\n}\n\n// =============================================================================\n// User Config Paths (~/.pi/agent/*)\n// =============================================================================\n\n/** Get the agent config directory (e.g., ~/.pi/agent/) */\nexport function getAgentDir(): string {\n\tconst envDir = process.env[ENV_AGENT_DIR];\n\tif (envDir) {\n\t\treturn expandTildePath(envDir);\n\t}\n\treturn join(homedir(), CONFIG_DIR_NAME, \"agent\");\n}\n\n/** Get path to user's custom themes directory */\nexport function getCustomThemesDir(): string {\n\treturn join(getAgentDir(), \"themes\");\n}\n\n/** Get path to models.json */\nexport function getModelsPath(): string {\n\treturn join(getAgentDir(), \"models.json\");\n}\n\n/** Get path to auth.json */\nexport function getAuthPath(): string {\n\treturn join(getAgentDir(), \"auth.json\");\n}\n\n/** Get path to settings.json */\nexport function getSettingsPath(): string {\n\treturn join(getAgentDir(), \"settings.json\");\n}\n\n/** Get path to tools directory */\nexport function getToolsDir(): string {\n\treturn join(getAgentDir(), \"tools\");\n}\n\n/** Get path to managed binaries directory (fd, rg) */\nexport function getBinDir(): string {\n\treturn join(getAgentDir(), \"bin\");\n}\n\n/** Get path to prompt templates directory */\nexport function getPromptsDir(): string {\n\treturn join(getAgentDir(), \"prompts\");\n}\n\n/** Get path to sessions directory */\nexport function getSessionsDir(): string {\n\treturn join(getAgentDir(), \"sessions\");\n}\n\n/** Get path to debug log file */\nexport function getDebugLogPath(): string {\n\treturn join(getAgentDir(), `${APP_NAME}-debug.log`);\n}\n"]}
package/dist/config.js CHANGED
@@ -401,7 +401,7 @@ export function expandTildePath(path) {
401
401
  return normalizePath(path);
402
402
  }
403
403
  const DEFAULT_SHARE_VIEWER_URL = "https://pi.dev/session/";
404
- /** Get the share viewer URL for a gist ID */
404
+ /** Get the share viewer URL for a gist ID. */
405
405
  export function getShareViewerUrl(gistId) {
406
406
  const baseUrl = process.env.ADA_SHARE_VIEWER_URL || process.env.PI_SHARE_VIEWER_URL || DEFAULT_SHARE_VIEWER_URL;
407
407
  return `${baseUrl}#${gistId}`;