@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.
- package/CHANGELOG.md +29 -2
- package/README.es.md +17 -6
- package/README.md +109 -11
- package/dist/ada-publico.d.ts +35 -0
- package/dist/ada-publico.d.ts.map +1 -0
- package/dist/ada-publico.js +40 -0
- package/dist/ada-publico.js.map +1 -0
- package/dist/cli/audit-command.d.ts +15 -0
- package/dist/cli/audit-command.d.ts.map +1 -0
- package/dist/cli/audit-command.js +280 -0
- package/dist/cli/audit-command.js.map +1 -0
- package/dist/cli/banco-command.d.ts +15 -0
- package/dist/cli/banco-command.d.ts.map +1 -0
- package/dist/cli/banco-command.js +213 -0
- package/dist/cli/banco-command.js.map +1 -0
- package/dist/cli/cleanse-command.d.ts +11 -0
- package/dist/cli/cleanse-command.d.ts.map +1 -0
- package/dist/cli/cleanse-command.js +101 -0
- package/dist/cli/cleanse-command.js.map +1 -0
- package/dist/cli/commit-command.d.ts +31 -0
- package/dist/cli/commit-command.d.ts.map +1 -0
- package/dist/cli/commit-command.js +158 -0
- package/dist/cli/commit-command.js.map +1 -0
- package/dist/cli/computer-command.d.ts +12 -0
- package/dist/cli/computer-command.d.ts.map +1 -0
- package/dist/cli/computer-command.js +141 -0
- package/dist/cli/computer-command.js.map +1 -0
- package/dist/cli/discover-command.d.ts +18 -0
- package/dist/cli/discover-command.d.ts.map +1 -0
- package/dist/cli/discover-command.js +108 -0
- package/dist/cli/discover-command.js.map +1 -0
- package/dist/cli/hashline-command.d.ts +11 -0
- package/dist/cli/hashline-command.d.ts.map +1 -0
- package/dist/cli/hashline-command.js +106 -0
- package/dist/cli/hashline-command.js.map +1 -0
- package/dist/cli/import-command.d.ts +35 -0
- package/dist/cli/import-command.d.ts.map +1 -0
- package/dist/cli/import-command.js +164 -0
- package/dist/cli/import-command.js.map +1 -0
- package/dist/cli/politica-command.d.ts +20 -0
- package/dist/cli/politica-command.d.ts.map +1 -0
- package/dist/cli/politica-command.js +93 -0
- package/dist/cli/politica-command.js.map +1 -0
- package/dist/cli/refine-command.d.ts +18 -0
- package/dist/cli/refine-command.d.ts.map +1 -0
- package/dist/cli/refine-command.js +101 -0
- package/dist/cli/refine-command.js.map +1 -0
- package/dist/cli/review-command.d.ts +24 -0
- package/dist/cli/review-command.d.ts.map +1 -0
- package/dist/cli/review-command.js +168 -0
- package/dist/cli/review-command.js.map +1 -0
- package/dist/cli/schedule-command.d.ts +17 -0
- package/dist/cli/schedule-command.d.ts.map +1 -0
- package/dist/cli/schedule-command.js +117 -0
- package/dist/cli/schedule-command.js.map +1 -0
- package/dist/cli/serve-command.d.ts +72 -0
- package/dist/cli/serve-command.d.ts.map +1 -0
- package/dist/cli/serve-command.js +568 -0
- package/dist/cli/serve-command.js.map +1 -0
- package/dist/cli/telegram-command.d.ts +18 -0
- package/dist/cli/telegram-command.d.ts.map +1 -0
- package/dist/cli/telegram-command.js +137 -0
- package/dist/cli/telegram-command.js.map +1 -0
- package/dist/cli/telemetria-command.d.ts +22 -0
- package/dist/cli/telemetria-command.d.ts.map +1 -0
- package/dist/cli/telemetria-command.js +127 -0
- package/dist/cli/telemetria-command.js.map +1 -0
- package/dist/cli/undo-command.d.ts +9 -0
- package/dist/cli/undo-command.d.ts.map +1 -0
- package/dist/cli/undo-command.js +56 -0
- package/dist/cli/undo-command.js.map +1 -0
- package/dist/cli/usage-command.d.ts +10 -0
- package/dist/cli/usage-command.d.ts.map +1 -0
- package/dist/cli/usage-command.js +209 -0
- package/dist/cli/usage-command.js.map +1 -0
- package/dist/cli/wiki-command.d.ts +9 -0
- package/dist/cli/wiki-command.d.ts.map +1 -0
- package/dist/cli/wiki-command.js +76 -0
- package/dist/cli/wiki-command.js.map +1 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +10 -11
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -1
- package/dist/config.js.map +1 -1
- package/dist/core/ada.d.ts +58 -0
- package/dist/core/ada.d.ts.map +1 -0
- package/dist/core/ada.js +61 -0
- package/dist/core/ada.js.map +1 -0
- package/dist/core/advisor/guarda.d.ts +66 -0
- package/dist/core/advisor/guarda.d.ts.map +1 -0
- package/dist/core/advisor/guarda.js +191 -0
- package/dist/core/advisor/guarda.js.map +1 -0
- package/dist/core/advisor/runtime.d.ts +66 -0
- package/dist/core/advisor/runtime.d.ts.map +1 -0
- package/dist/core/advisor/runtime.js +121 -0
- package/dist/core/advisor/runtime.js.map +1 -0
- package/dist/core/advisor/sesion.d.ts +109 -0
- package/dist/core/advisor/sesion.d.ts.map +1 -0
- package/dist/core/advisor/sesion.js +139 -0
- package/dist/core/advisor/sesion.js.map +1 -0
- package/dist/core/agent-session.d.ts +30 -2
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +430 -22
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/agents/loader.d.ts +77 -0
- package/dist/core/agents/loader.d.ts.map +1 -0
- package/dist/core/agents/loader.js +154 -0
- package/dist/core/agents/loader.js.map +1 -0
- package/dist/core/aprobacion/generados.d.ts +37 -0
- package/dist/core/aprobacion/generados.d.ts.map +1 -0
- package/dist/core/aprobacion/generados.js +85 -0
- package/dist/core/aprobacion/generados.js.map +1 -0
- package/dist/core/aprobacion/politica-de-maquina.d.ts +90 -0
- package/dist/core/aprobacion/politica-de-maquina.d.ts.map +1 -0
- package/dist/core/aprobacion/politica-de-maquina.js +212 -0
- package/dist/core/aprobacion/politica-de-maquina.js.map +1 -0
- package/dist/core/aprobacion/politica.d.ts +90 -0
- package/dist/core/aprobacion/politica.d.ts.map +1 -0
- package/dist/core/aprobacion/politica.js +375 -0
- package/dist/core/aprobacion/politica.js.map +1 -0
- package/dist/core/arranque/atajos.d.ts +46 -0
- package/dist/core/arranque/atajos.d.ts.map +1 -0
- package/dist/core/arranque/atajos.js +113 -0
- package/dist/core/arranque/atajos.js.map +1 -0
- package/dist/core/audit/exportacion.d.ts +54 -0
- package/dist/core/audit/exportacion.d.ts.map +1 -0
- package/dist/core/audit/exportacion.js +265 -0
- package/dist/core/audit/exportacion.js.map +1 -0
- package/dist/core/audit/libro.d.ts +318 -0
- package/dist/core/audit/libro.d.ts.map +1 -0
- package/dist/core/audit/libro.js +508 -0
- package/dist/core/audit/libro.js.map +1 -0
- package/dist/core/audit/registro-sesion.d.ts +78 -0
- package/dist/core/audit/registro-sesion.d.ts.map +1 -0
- package/dist/core/audit/registro-sesion.js +202 -0
- package/dist/core/audit/registro-sesion.js.map +1 -0
- package/dist/core/audit/retencion.d.ts +82 -0
- package/dist/core/audit/retencion.d.ts.map +1 -0
- package/dist/core/audit/retencion.js +152 -0
- package/dist/core/audit/retencion.js.map +1 -0
- package/dist/core/audit/rutas.d.ts +23 -0
- package/dist/core/audit/rutas.d.ts.map +1 -0
- package/dist/core/audit/rutas.js +23 -0
- package/dist/core/audit/rutas.js.map +1 -0
- package/dist/core/auth-storage.d.ts +0 -3
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +17 -5
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/banco/almacenamiento.d.ts +18 -0
- package/dist/core/banco/almacenamiento.d.ts.map +1 -0
- package/dist/core/banco/almacenamiento.js +50 -0
- package/dist/core/banco/almacenamiento.js.map +1 -0
- package/dist/core/banco/analisis.d.ts +37 -0
- package/dist/core/banco/analisis.d.ts.map +1 -0
- package/dist/core/banco/analisis.js +164 -0
- package/dist/core/banco/analisis.js.map +1 -0
- package/dist/core/banco/bloques.d.ts +39 -0
- package/dist/core/banco/bloques.d.ts.map +1 -0
- package/dist/core/banco/bloques.js +84 -0
- package/dist/core/banco/bloques.js.map +1 -0
- package/dist/core/banco/cargas.d.ts +84 -0
- package/dist/core/banco/cargas.d.ts.map +1 -0
- package/dist/core/banco/cargas.js +520 -0
- package/dist/core/banco/cargas.js.map +1 -0
- package/dist/core/banco/comparar.d.ts +29 -0
- package/dist/core/banco/comparar.d.ts.map +1 -0
- package/dist/core/banco/comparar.js +28 -0
- package/dist/core/banco/comparar.js.map +1 -0
- package/dist/core/banco/ejecutar.d.ts +44 -0
- package/dist/core/banco/ejecutar.d.ts.map +1 -0
- package/dist/core/banco/ejecutar.js +183 -0
- package/dist/core/banco/ejecutar.js.map +1 -0
- package/dist/core/banco/generar.d.ts +24 -0
- package/dist/core/banco/generar.d.ts.map +1 -0
- package/dist/core/banco/generar.js +159 -0
- package/dist/core/banco/generar.js.map +1 -0
- package/dist/core/banco/mutaciones.d.ts +25 -0
- package/dist/core/banco/mutaciones.d.ts.map +1 -0
- package/dist/core/banco/mutaciones.js +215 -0
- package/dist/core/banco/mutaciones.js.map +1 -0
- package/dist/core/banco/tipos.d.ts +121 -0
- package/dist/core/banco/tipos.d.ts.map +1 -0
- package/dist/core/banco/tipos.js +16 -0
- package/dist/core/banco/tipos.js.map +1 -0
- package/dist/core/blobs/almacen.d.ts +81 -0
- package/dist/core/blobs/almacen.d.ts.map +1 -0
- package/dist/core/blobs/almacen.js +198 -0
- package/dist/core/blobs/almacen.js.map +1 -0
- package/dist/core/blobs/broker.d.ts +103 -0
- package/dist/core/blobs/broker.d.ts.map +1 -0
- package/dist/core/blobs/broker.js +204 -0
- package/dist/core/blobs/broker.js.map +1 -0
- package/dist/core/blobs/index.d.ts +70 -0
- package/dist/core/blobs/index.d.ts.map +1 -0
- package/dist/core/blobs/index.js +232 -0
- package/dist/core/blobs/index.js.map +1 -0
- package/dist/core/blobs/payload.d.ts +55 -0
- package/dist/core/blobs/payload.d.ts.map +1 -0
- package/dist/core/blobs/payload.js +255 -0
- package/dist/core/blobs/payload.js.map +1 -0
- package/dist/core/blobs/proveedor.d.ts +85 -0
- package/dist/core/blobs/proveedor.d.ts.map +1 -0
- package/dist/core/blobs/proveedor.js +196 -0
- package/dist/core/blobs/proveedor.js.map +1 -0
- package/dist/core/browser/cdp.d.ts +41 -0
- package/dist/core/browser/cdp.d.ts.map +1 -0
- package/dist/core/browser/cdp.js +119 -0
- package/dist/core/browser/cdp.js.map +1 -0
- package/dist/core/browser/politica.d.ts +51 -0
- package/dist/core/browser/politica.d.ts.map +1 -0
- package/dist/core/browser/politica.js +123 -0
- package/dist/core/browser/politica.js.map +1 -0
- package/dist/core/browser/sesion.d.ts +52 -0
- package/dist/core/browser/sesion.d.ts.map +1 -0
- package/dist/core/browser/sesion.js +176 -0
- package/dist/core/browser/sesion.js.map +1 -0
- package/dist/core/browser/tools.d.ts +16 -0
- package/dist/core/browser/tools.d.ts.map +1 -0
- package/dist/core/browser/tools.js +279 -0
- package/dist/core/browser/tools.js.map +1 -0
- package/dist/core/commit/diff.d.ts +56 -0
- package/dist/core/commit/diff.d.ts.map +1 -0
- package/dist/core/commit/diff.js +145 -0
- package/dist/core/commit/diff.js.map +1 -0
- package/dist/core/commit/mensaje.d.ts +80 -0
- package/dist/core/commit/mensaje.d.ts.map +1 -0
- package/dist/core/commit/mensaje.js +207 -0
- package/dist/core/commit/mensaje.js.map +1 -0
- package/dist/core/compactar/index.d.ts +52 -0
- package/dist/core/compactar/index.d.ts.map +1 -0
- package/dist/core/compactar/index.js +91 -0
- package/dist/core/compactar/index.js.map +1 -0
- package/dist/core/compactar/registro-denso.d.ts +160 -0
- package/dist/core/compactar/registro-denso.d.ts.map +1 -0
- package/dist/core/compactar/registro-denso.js +620 -0
- package/dist/core/compactar/registro-denso.js.map +1 -0
- package/dist/core/computer/captura.d.ts +35 -0
- package/dist/core/computer/captura.d.ts.map +1 -0
- package/dist/core/computer/captura.js +140 -0
- package/dist/core/computer/captura.js.map +1 -0
- package/dist/core/computer/driver.d.ts +130 -0
- package/dist/core/computer/driver.d.ts.map +1 -0
- package/dist/core/computer/driver.js +206 -0
- package/dist/core/computer/driver.js.map +1 -0
- package/dist/core/computer/motor/actions.d.ts +109 -0
- package/dist/core/computer/motor/actions.d.ts.map +1 -0
- package/dist/core/computer/motor/actions.js +157 -0
- package/dist/core/computer/motor/actions.js.map +1 -0
- package/dist/core/computer/motor/bridge.d.ts +232 -0
- package/dist/core/computer/motor/bridge.d.ts.map +1 -0
- package/dist/core/computer/motor/bridge.js +2335 -0
- package/dist/core/computer/motor/bridge.js.map +1 -0
- package/dist/core/computer/motor/cdp.d.ts +107 -0
- package/dist/core/computer/motor/cdp.d.ts.map +1 -0
- package/dist/core/computer/motor/cdp.js +659 -0
- package/dist/core/computer/motor/cdp.js.map +1 -0
- package/dist/core/computer/motor/config.d.ts +23 -0
- package/dist/core/computer/motor/config.d.ts.map +1 -0
- package/dist/core/computer/motor/config.js +100 -0
- package/dist/core/computer/motor/config.js.map +1 -0
- package/dist/core/computer/motor/contract.d.ts +81 -0
- package/dist/core/computer/motor/contract.d.ts.map +1 -0
- package/dist/core/computer/motor/contract.js +14 -0
- package/dist/core/computer/motor/contract.js.map +1 -0
- package/dist/core/computer/motor/note.d.ts +37 -0
- package/dist/core/computer/motor/note.d.ts.map +1 -0
- package/dist/core/computer/motor/note.js +162 -0
- package/dist/core/computer/motor/note.js.map +1 -0
- package/dist/core/computer/motor/outline.d.ts +155 -0
- package/dist/core/computer/motor/outline.d.ts.map +1 -0
- package/dist/core/computer/motor/outline.js +590 -0
- package/dist/core/computer/motor/outline.js.map +1 -0
- package/dist/core/computer/motor/output.d.ts +18 -0
- package/dist/core/computer/motor/output.d.ts.map +1 -0
- package/dist/core/computer/motor/output.js +148 -0
- package/dist/core/computer/motor/output.js.map +1 -0
- package/dist/core/computer/motor/permissions.d.ts +41 -0
- package/dist/core/computer/motor/permissions.d.ts.map +1 -0
- package/dist/core/computer/motor/permissions.js +51 -0
- package/dist/core/computer/motor/permissions.js.map +1 -0
- package/dist/core/computer/motor/platform/architecture.d.ts +5 -0
- package/dist/core/computer/motor/platform/architecture.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/architecture.js +21 -0
- package/dist/core/computer/motor/platform/architecture.js.map +1 -0
- package/dist/core/computer/motor/platform/coerce.d.ts +4 -0
- package/dist/core/computer/motor/platform/coerce.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/coerce.js +17 -0
- package/dist/core/computer/motor/platform/coerce.js.map +1 -0
- package/dist/core/computer/motor/platform/index.d.ts +4 -0
- package/dist/core/computer/motor/platform/index.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/index.js +79 -0
- package/dist/core/computer/motor/platform/index.js.map +1 -0
- package/dist/core/computer/motor/platform/linux/backend.d.ts +3 -0
- package/dist/core/computer/motor/platform/linux/backend.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/linux/backend.js +173 -0
- package/dist/core/computer/motor/platform/linux/backend.js.map +1 -0
- package/dist/core/computer/motor/platform/linux/helper.d.ts +29 -0
- package/dist/core/computer/motor/platform/linux/helper.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/linux/helper.js +261 -0
- package/dist/core/computer/motor/platform/linux/helper.js.map +1 -0
- package/dist/core/computer/motor/platform/macos/backend.d.ts +3 -0
- package/dist/core/computer/motor/platform/macos/backend.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/macos/backend.js +124 -0
- package/dist/core/computer/motor/platform/macos/backend.js.map +1 -0
- package/dist/core/computer/motor/platform/macos/browser.d.ts +7 -0
- package/dist/core/computer/motor/platform/macos/browser.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/macos/browser.js +101 -0
- package/dist/core/computer/motor/platform/macos/browser.js.map +1 -0
- package/dist/core/computer/motor/platform/macos/helper-path.mjs +34 -0
- package/dist/core/computer/motor/platform/macos/helper.d.ts +32 -0
- package/dist/core/computer/motor/platform/macos/helper.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/macos/helper.js +277 -0
- package/dist/core/computer/motor/platform/macos/helper.js.map +1 -0
- package/dist/core/computer/motor/platform/macos/permissions.d.ts +4 -0
- package/dist/core/computer/motor/platform/macos/permissions.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/macos/permissions.js +118 -0
- package/dist/core/computer/motor/platform/macos/permissions.js.map +1 -0
- package/dist/core/computer/motor/platform/types.d.ts +263 -0
- package/dist/core/computer/motor/platform/types.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/types.js +2 -0
- package/dist/core/computer/motor/platform/types.js.map +1 -0
- package/dist/core/computer/motor/platform/windows/backend.d.ts +3 -0
- package/dist/core/computer/motor/platform/windows/backend.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/windows/backend.js +163 -0
- package/dist/core/computer/motor/platform/windows/backend.js.map +1 -0
- package/dist/core/computer/motor/platform/windows/helper.d.ts +18 -0
- package/dist/core/computer/motor/platform/windows/helper.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/windows/helper.js +174 -0
- package/dist/core/computer/motor/platform/windows/helper.js.map +1 -0
- package/dist/core/computer/motor/root-selection.d.ts +6 -0
- package/dist/core/computer/motor/root-selection.d.ts.map +1 -0
- package/dist/core/computer/motor/root-selection.js +28 -0
- package/dist/core/computer/motor/root-selection.js.map +1 -0
- package/dist/core/computer/motor/runtime.d.ts +50 -0
- package/dist/core/computer/motor/runtime.d.ts.map +1 -0
- package/dist/core/computer/motor/runtime.js +119 -0
- package/dist/core/computer/motor/runtime.js.map +1 -0
- package/dist/core/computer/motor/state.d.ts +68 -0
- package/dist/core/computer/motor/state.d.ts.map +1 -0
- package/dist/core/computer/motor/state.js +100 -0
- package/dist/core/computer/motor/state.js.map +1 -0
- package/dist/core/computer/motor/view.d.ts +6 -0
- package/dist/core/computer/motor/view.d.ts.map +1 -0
- package/dist/core/computer/motor/view.js +185 -0
- package/dist/core/computer/motor/view.js.map +1 -0
- package/dist/core/computer/motor-ada.d.ts +159 -0
- package/dist/core/computer/motor-ada.d.ts.map +1 -0
- package/dist/core/computer/motor-ada.js +412 -0
- package/dist/core/computer/motor-ada.js.map +1 -0
- package/dist/core/computer/politica.d.ts +56 -0
- package/dist/core/computer/politica.d.ts.map +1 -0
- package/dist/core/computer/politica.js +163 -0
- package/dist/core/computer/politica.js.map +1 -0
- package/dist/core/computer/tools.d.ts +26 -0
- package/dist/core/computer/tools.d.ts.map +1 -0
- package/dist/core/computer/tools.js +399 -0
- package/dist/core/computer/tools.js.map +1 -0
- package/dist/core/context-breakdown.d.ts +80 -0
- package/dist/core/context-breakdown.d.ts.map +1 -0
- package/dist/core/context-breakdown.js +87 -0
- package/dist/core/context-breakdown.js.map +1 -0
- package/dist/core/credenciales/cliente.d.ts +60 -0
- package/dist/core/credenciales/cliente.d.ts.map +1 -0
- package/dist/core/credenciales/cliente.js +81 -0
- package/dist/core/credenciales/cliente.js.map +1 -0
- package/dist/core/credenciales/pool.d.ts +96 -0
- package/dist/core/credenciales/pool.d.ts.map +1 -0
- package/dist/core/credenciales/pool.js +128 -0
- package/dist/core/credenciales/pool.js.map +1 -0
- package/dist/core/credenciales/reposo.d.ts +93 -0
- package/dist/core/credenciales/reposo.d.ts.map +1 -0
- package/dist/core/credenciales/reposo.js +489 -0
- package/dist/core/credenciales/reposo.js.map +1 -0
- package/dist/core/credenciales/servidor.d.ts +55 -0
- package/dist/core/credenciales/servidor.d.ts.map +1 -0
- package/dist/core/credenciales/servidor.js +205 -0
- package/dist/core/credenciales/servidor.js.map +1 -0
- package/dist/core/descubrimiento/comandos.d.ts +30 -0
- package/dist/core/descubrimiento/comandos.d.ts.map +1 -0
- package/dist/core/descubrimiento/comandos.js +76 -0
- package/dist/core/descubrimiento/comandos.js.map +1 -0
- package/dist/core/descubrimiento/mcp.d.ts +42 -0
- package/dist/core/descubrimiento/mcp.d.ts.map +1 -0
- package/dist/core/descubrimiento/mcp.js +130 -0
- package/dist/core/descubrimiento/mcp.js.map +1 -0
- package/dist/core/descubrimiento/reglas.d.ts +61 -0
- package/dist/core/descubrimiento/reglas.d.ts.map +1 -0
- package/dist/core/descubrimiento/reglas.js +134 -0
- package/dist/core/descubrimiento/reglas.js.map +1 -0
- package/dist/core/descubrimiento/skills.d.ts +57 -0
- package/dist/core/descubrimiento/skills.d.ts.map +1 -0
- package/dist/core/descubrimiento/skills.js +113 -0
- package/dist/core/descubrimiento/skills.js.map +1 -0
- package/dist/core/dificultad/clasificador.d.ts +133 -0
- package/dist/core/dificultad/clasificador.d.ts.map +1 -0
- package/dist/core/dificultad/clasificador.js +288 -0
- package/dist/core/dificultad/clasificador.js.map +1 -0
- package/dist/core/edicion/diario.d.ts +37 -0
- package/dist/core/edicion/diario.d.ts.map +1 -0
- package/dist/core/edicion/diario.js +51 -0
- package/dist/core/edicion/diario.js.map +1 -0
- package/dist/core/edicion/hashline.d.ts +71 -0
- package/dist/core/edicion/hashline.d.ts.map +1 -0
- package/dist/core/edicion/hashline.js +111 -0
- package/dist/core/edicion/hashline.js.map +1 -0
- package/dist/core/edicion/hueco.d.ts +64 -0
- package/dist/core/edicion/hueco.d.ts.map +1 -0
- package/dist/core/edicion/hueco.js +162 -0
- package/dist/core/edicion/hueco.js.map +1 -0
- package/dist/core/edicion/limpiar-carga.d.ts +39 -0
- package/dist/core/edicion/limpiar-carga.d.ts.map +1 -0
- package/dist/core/edicion/limpiar-carga.js +121 -0
- package/dist/core/edicion/limpiar-carga.js.map +1 -0
- package/dist/core/edicion/observador.d.ts +80 -0
- package/dist/core/edicion/observador.d.ts.map +1 -0
- package/dist/core/edicion/observador.js +183 -0
- package/dist/core/edicion/observador.js.map +1 -0
- package/dist/core/edicion/parecido.d.ts +53 -0
- package/dist/core/edicion/parecido.d.ts.map +1 -0
- package/dist/core/edicion/parecido.js +145 -0
- package/dist/core/edicion/parecido.js.map +1 -0
- package/dist/core/edicion/parseo.d.ts +58 -0
- package/dist/core/edicion/parseo.d.ts.map +1 -0
- package/dist/core/edicion/parseo.js +124 -0
- package/dist/core/edicion/parseo.js.map +1 -0
- package/dist/core/edicion/reparacion.d.ts +67 -0
- package/dist/core/edicion/reparacion.d.ts.map +1 -0
- package/dist/core/edicion/reparacion.js +202 -0
- package/dist/core/edicion/reparacion.js.map +1 -0
- package/dist/core/edicion/sangria.d.ts +121 -0
- package/dist/core/edicion/sangria.d.ts.map +1 -0
- package/dist/core/edicion/sangria.js +341 -0
- package/dist/core/edicion/sangria.js.map +1 -0
- package/dist/core/edicion/tipos.d.ts +58 -0
- package/dist/core/edicion/tipos.d.ts.map +1 -0
- package/dist/core/edicion/tipos.js +160 -0
- package/dist/core/edicion/tipos.js.map +1 -0
- package/dist/core/errores/proveedor.d.ts +53 -0
- package/dist/core/errores/proveedor.d.ts.map +1 -0
- package/dist/core/errores/proveedor.js +191 -0
- package/dist/core/errores/proveedor.js.map +1 -0
- package/dist/core/estructural/buscar.d.ts +61 -0
- package/dist/core/estructural/buscar.d.ts.map +1 -0
- package/dist/core/estructural/buscar.js +261 -0
- package/dist/core/estructural/buscar.js.map +1 -0
- package/dist/core/estructural/editar.d.ts +36 -0
- package/dist/core/estructural/editar.d.ts.map +1 -0
- package/dist/core/estructural/editar.js +123 -0
- package/dist/core/estructural/editar.js.map +1 -0
- package/dist/core/estructural/tools.d.ts +11 -0
- package/dist/core/estructural/tools.d.ts.map +1 -0
- package/dist/core/estructural/tools.js +100 -0
- package/dist/core/estructural/tools.js.map +1 -0
- package/dist/core/experimental.d.ts.map +1 -1
- package/dist/core/experimental.js +10 -1
- package/dist/core/experimental.js.map +1 -1
- package/dist/core/extensiones/suplantacion.d.ts +49 -0
- package/dist/core/extensiones/suplantacion.d.ts.map +1 -0
- package/dist/core/extensiones/suplantacion.js +61 -0
- package/dist/core/extensiones/suplantacion.js.map +1 -0
- package/dist/core/extensiones/vigilancia.d.ts +54 -0
- package/dist/core/extensiones/vigilancia.d.ts.map +1 -0
- package/dist/core/extensiones/vigilancia.js +217 -0
- package/dist/core/extensiones/vigilancia.js.map +1 -0
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +11 -1
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/harness/fuentes-de-contexto.d.ts +29 -0
- package/dist/core/harness/fuentes-de-contexto.d.ts.map +1 -0
- package/dist/core/harness/fuentes-de-contexto.js +44 -0
- package/dist/core/harness/fuentes-de-contexto.js.map +1 -0
- package/dist/core/harness/refine.d.ts +40 -0
- package/dist/core/harness/refine.d.ts.map +1 -0
- package/dist/core/harness/refine.js +109 -0
- package/dist/core/harness/refine.js.map +1 -0
- package/dist/core/harness/store.d.ts +75 -0
- package/dist/core/harness/store.d.ts.map +1 -0
- package/dist/core/harness/store.js +149 -0
- package/dist/core/harness/store.js.map +1 -0
- package/dist/core/hooks/contract.d.ts +85 -0
- package/dist/core/hooks/contract.d.ts.map +1 -0
- package/dist/core/hooks/contract.js +140 -0
- package/dist/core/hooks/contract.js.map +1 -0
- package/dist/core/hooks/runner.d.ts +42 -0
- package/dist/core/hooks/runner.d.ts.map +1 -0
- package/dist/core/hooks/runner.js +85 -0
- package/dist/core/hooks/runner.js.map +1 -0
- package/dist/core/hooks/session-hooks.d.ts +62 -0
- package/dist/core/hooks/session-hooks.d.ts.map +1 -0
- package/dist/core/hooks/session-hooks.js +84 -0
- package/dist/core/hooks/session-hooks.js.map +1 -0
- package/dist/core/importar/formatos.d.ts +69 -0
- package/dist/core/importar/formatos.d.ts.map +1 -0
- package/dist/core/importar/formatos.js +235 -0
- package/dist/core/importar/formatos.js.map +1 -0
- package/dist/core/interactivo/deteccion.d.ts +44 -0
- package/dist/core/interactivo/deteccion.d.ts.map +1 -0
- package/dist/core/interactivo/deteccion.js +82 -0
- package/dist/core/interactivo/deteccion.js.map +1 -0
- package/dist/core/interactivo/sesion.d.ts +50 -0
- package/dist/core/interactivo/sesion.d.ts.map +1 -0
- package/dist/core/interactivo/sesion.js +156 -0
- package/dist/core/interactivo/sesion.js.map +1 -0
- package/dist/core/interactivo/tools.d.ts +21 -0
- package/dist/core/interactivo/tools.d.ts.map +1 -0
- package/dist/core/interactivo/tools.js +122 -0
- package/dist/core/interactivo/tools.js.map +1 -0
- package/dist/core/lectura/mapa.d.ts +70 -0
- package/dist/core/lectura/mapa.d.ts.map +1 -0
- package/dist/core/lectura/mapa.js +177 -0
- package/dist/core/lectura/mapa.js.map +1 -0
- package/dist/core/lectura/pdf.d.ts +49 -0
- package/dist/core/lectura/pdf.d.ts.map +1 -0
- package/dist/core/lectura/pdf.js +337 -0
- package/dist/core/lectura/pdf.js.map +1 -0
- package/dist/core/limpieza/comprobadores.d.ts +28 -0
- package/dist/core/limpieza/comprobadores.d.ts.map +1 -0
- package/dist/core/limpieza/comprobadores.js +311 -0
- package/dist/core/limpieza/comprobadores.js.map +1 -0
- package/dist/core/limpieza/parseo.d.ts +19 -0
- package/dist/core/limpieza/parseo.d.ts.map +1 -0
- package/dist/core/limpieza/parseo.js +124 -0
- package/dist/core/limpieza/parseo.js.map +1 -0
- package/dist/core/limpieza/reparacion.d.ts +77 -0
- package/dist/core/limpieza/reparacion.d.ts.map +1 -0
- package/dist/core/limpieza/reparacion.js +254 -0
- package/dist/core/limpieza/reparacion.js.map +1 -0
- package/dist/core/limpieza/tipos.d.ts +56 -0
- package/dist/core/limpieza/tipos.d.ts.map +1 -0
- package/dist/core/limpieza/tipos.js +9 -0
- package/dist/core/limpieza/tipos.js.map +1 -0
- package/dist/core/lsp/cliente.d.ts +52 -0
- package/dist/core/lsp/cliente.d.ts.map +1 -0
- package/dist/core/lsp/cliente.js +232 -0
- package/dist/core/lsp/cliente.js.map +1 -0
- package/dist/core/lsp/descubrimiento.d.ts +62 -0
- package/dist/core/lsp/descubrimiento.d.ts.map +1 -0
- package/dist/core/lsp/descubrimiento.js +152 -0
- package/dist/core/lsp/descubrimiento.js.map +1 -0
- package/dist/core/lsp/ediciones.d.ts +59 -0
- package/dist/core/lsp/ediciones.d.ts.map +1 -0
- package/dist/core/lsp/ediciones.js +89 -0
- package/dist/core/lsp/ediciones.js.map +1 -0
- package/dist/core/lsp/extension.d.ts +28 -0
- package/dist/core/lsp/extension.d.ts.map +1 -0
- package/dist/core/lsp/extension.js +34 -0
- package/dist/core/lsp/extension.js.map +1 -0
- package/dist/core/lsp/tools.d.ts +45 -0
- package/dist/core/lsp/tools.d.ts.map +1 -0
- package/dist/core/lsp/tools.js +265 -0
- package/dist/core/lsp/tools.js.map +1 -0
- package/dist/core/mcp/client.d.ts +60 -0
- package/dist/core/mcp/client.d.ts.map +1 -0
- package/dist/core/mcp/client.js +139 -0
- package/dist/core/mcp/client.js.map +1 -0
- package/dist/core/mcp/manager.d.ts +86 -0
- package/dist/core/mcp/manager.d.ts.map +1 -0
- package/dist/core/mcp/manager.js +124 -0
- package/dist/core/mcp/manager.js.map +1 -0
- package/dist/core/mcp/tools.d.ts +15 -0
- package/dist/core/mcp/tools.d.ts.map +1 -0
- package/dist/core/mcp/tools.js +84 -0
- package/dist/core/mcp/tools.js.map +1 -0
- package/dist/core/memory-engine/audit-export.d.ts +12 -10
- package/dist/core/memory-engine/audit-export.d.ts.map +1 -1
- package/dist/core/memory-engine/audit-export.js +15 -0
- package/dist/core/memory-engine/audit-export.js.map +1 -1
- package/dist/core/memory-engine/audit-indice.d.ts +153 -0
- package/dist/core/memory-engine/audit-indice.d.ts.map +1 -0
- package/dist/core/memory-engine/audit-indice.js +271 -0
- package/dist/core/memory-engine/audit-indice.js.map +1 -0
- package/dist/core/memory-engine/audit.d.ts +18 -6
- package/dist/core/memory-engine/audit.d.ts.map +1 -1
- package/dist/core/memory-engine/audit.js +25 -42
- package/dist/core/memory-engine/audit.js.map +1 -1
- package/dist/core/memory-engine/engine.d.ts +19 -1
- package/dist/core/memory-engine/engine.d.ts.map +1 -1
- package/dist/core/memory-engine/engine.js +71 -5
- package/dist/core/memory-engine/engine.js.map +1 -1
- package/dist/core/memory-engine/observation-store.d.ts +0 -2
- package/dist/core/memory-engine/observation-store.d.ts.map +1 -1
- package/dist/core/memory-engine/observation-store.js +4 -5
- package/dist/core/memory-engine/observation-store.js.map +1 -1
- package/dist/core/memory-engine/refinements.d.ts +51 -0
- package/dist/core/memory-engine/refinements.d.ts.map +1 -0
- package/dist/core/memory-engine/refinements.js +99 -0
- package/dist/core/memory-engine/refinements.js.map +1 -0
- package/dist/core/memory-engine/tools.d.ts.map +1 -1
- package/dist/core/memory-engine/tools.js +27 -1
- package/dist/core/memory-engine/tools.js.map +1 -1
- package/dist/core/memory-engine/types.d.ts +2 -0
- package/dist/core/memory-engine/types.d.ts.map +1 -1
- package/dist/core/memory-engine/types.js.map +1 -1
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +7 -1
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/muestreo-restringido.d.ts +49 -0
- package/dist/core/muestreo-restringido.d.ts.map +1 -0
- package/dist/core/muestreo-restringido.js +65 -0
- package/dist/core/muestreo-restringido.js.map +1 -0
- package/dist/core/orphan-process-journal.d.ts +48 -0
- package/dist/core/orphan-process-journal.d.ts.map +1 -0
- package/dist/core/orphan-process-journal.js +116 -0
- package/dist/core/orphan-process-journal.js.map +1 -0
- package/dist/core/privacidad/categorias-especiales.d.ts +186 -0
- package/dist/core/privacidad/categorias-especiales.d.ts.map +1 -0
- package/dist/core/privacidad/categorias-especiales.js +745 -0
- package/dist/core/privacidad/categorias-especiales.js.map +1 -0
- package/dist/core/privacidad/tapar.d.ts +48 -0
- package/dist/core/privacidad/tapar.d.ts.map +1 -0
- package/dist/core/privacidad/tapar.js +66 -0
- package/dist/core/privacidad/tapar.js.map +1 -0
- package/dist/core/prompt-cache/diagnostics.d.ts +33 -0
- package/dist/core/prompt-cache/diagnostics.d.ts.map +1 -0
- package/dist/core/prompt-cache/diagnostics.js +100 -0
- package/dist/core/prompt-cache/diagnostics.js.map +1 -0
- package/dist/core/prompt-cache/index.d.ts +33 -0
- package/dist/core/prompt-cache/index.d.ts.map +1 -0
- package/dist/core/prompt-cache/index.js +189 -0
- package/dist/core/prompt-cache/index.js.map +1 -0
- package/dist/core/prompt-cache/payload.d.ts +58 -0
- package/dist/core/prompt-cache/payload.d.ts.map +1 -0
- package/dist/core/prompt-cache/payload.js +122 -0
- package/dist/core/prompt-cache/payload.js.map +1 -0
- package/dist/core/prompt-cache/stabilize.d.ts +65 -0
- package/dist/core/prompt-cache/stabilize.d.ts.map +1 -0
- package/dist/core/prompt-cache/stabilize.js +137 -0
- package/dist/core/prompt-cache/stabilize.js.map +1 -0
- package/dist/core/prompt-cache/stats.d.ts +55 -0
- package/dist/core/prompt-cache/stats.d.ts.map +1 -0
- package/dist/core/prompt-cache/stats.js +158 -0
- package/dist/core/prompt-cache/stats.js.map +1 -0
- package/dist/core/prompt-eleccion.d.ts +38 -0
- package/dist/core/prompt-eleccion.d.ts.map +1 -0
- package/dist/core/prompt-eleccion.js +46 -0
- package/dist/core/prompt-eleccion.js.map +1 -0
- package/dist/core/prompts/montar.d.ts +75 -0
- package/dist/core/prompts/montar.d.ts.map +1 -0
- package/dist/core/prompts/montar.js +146 -0
- package/dist/core/prompts/montar.js.map +1 -0
- package/dist/core/prompts/plantilla.d.ts +54 -0
- package/dist/core/prompts/plantilla.d.ts.map +1 -0
- package/dist/core/prompts/plantilla.js +153 -0
- package/dist/core/prompts/plantilla.js.map +1 -0
- package/dist/core/prompts/sistema.md +134 -0
- package/dist/core/provider-attribution.d.ts +24 -2
- package/dist/core/provider-attribution.d.ts.map +1 -1
- package/dist/core/provider-attribution.js +24 -42
- package/dist/core/provider-attribution.js.map +1 -1
- package/dist/core/remoto/destino.d.ts +38 -0
- package/dist/core/remoto/destino.d.ts.map +1 -0
- package/dist/core/remoto/destino.js +105 -0
- package/dist/core/remoto/destino.js.map +1 -0
- package/dist/core/remoto/ejecutor.d.ts +59 -0
- package/dist/core/remoto/ejecutor.d.ts.map +1 -0
- package/dist/core/remoto/ejecutor.js +225 -0
- package/dist/core/remoto/ejecutor.js.map +1 -0
- package/dist/core/remoto/ficheros.d.ts +29 -0
- package/dist/core/remoto/ficheros.d.ts.map +1 -0
- package/dist/core/remoto/ficheros.js +90 -0
- package/dist/core/remoto/ficheros.js.map +1 -0
- package/dist/core/remoto/registro-extension.d.ts +15 -0
- package/dist/core/remoto/registro-extension.d.ts.map +1 -0
- package/dist/core/remoto/registro-extension.js +17 -0
- package/dist/core/remoto/registro-extension.js.map +1 -0
- package/dist/core/remoto/tools.d.ts +28 -0
- package/dist/core/remoto/tools.d.ts.map +1 -0
- package/dist/core/remoto/tools.js +31 -0
- package/dist/core/remoto/tools.js.map +1 -0
- package/dist/core/resource-loader.d.ts +8 -0
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +93 -1
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/revision/hallazgo.d.ts +51 -0
- package/dist/core/revision/hallazgo.d.ts.map +1 -0
- package/dist/core/revision/hallazgo.js +73 -0
- package/dist/core/revision/hallazgo.js.map +1 -0
- package/dist/core/revision/revisor.d.ts +81 -0
- package/dist/core/revision/revisor.d.ts.map +1 -0
- package/dist/core/revision/revisor.js +132 -0
- package/dist/core/revision/revisor.js.map +1 -0
- package/dist/core/revision/sarif.d.ts +30 -0
- package/dist/core/revision/sarif.d.ts.map +1 -0
- package/dist/core/revision/sarif.js +83 -0
- package/dist/core/revision/sarif.js.map +1 -0
- package/dist/core/scheduler/scheduler.d.ts +87 -0
- package/dist/core/scheduler/scheduler.d.ts.map +1 -0
- package/dist/core/scheduler/scheduler.js +178 -0
- package/dist/core/scheduler/scheduler.js.map +1 -0
- package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts +49 -0
- package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts.map +1 -0
- package/dist/core/sesion/cerrar-llamadas-abiertas.js +77 -0
- package/dist/core/sesion/cerrar-llamadas-abiertas.js.map +1 -0
- package/dist/core/settings-manager.d.ts +110 -6
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +53 -2
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +3 -3
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/system-prompt.d.ts +17 -0
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +13 -5
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/telemetria/otlp.d.ts +122 -0
- package/dist/core/telemetria/otlp.d.ts.map +1 -0
- package/dist/core/telemetria/otlp.js +373 -0
- package/dist/core/telemetria/otlp.js.map +1 -0
- package/dist/core/tools/coercion-argumentos.d.ts +48 -0
- package/dist/core/tools/coercion-argumentos.d.ts.map +1 -0
- package/dist/core/tools/coercion-argumentos.js +99 -0
- package/dist/core/tools/coercion-argumentos.js.map +1 -0
- package/dist/core/tools/edit-diff.d.ts +0 -7
- package/dist/core/tools/edit-diff.d.ts.map +1 -1
- package/dist/core/tools/edit-diff.js +232 -7
- package/dist/core/tools/edit-diff.js.map +1 -1
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +8 -1
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
- package/dist/core/tools/file-mutation-queue.js +5 -0
- package/dist/core/tools/file-mutation-queue.js.map +1 -1
- package/dist/core/tools/json-tolerante.d.ts +30 -0
- package/dist/core/tools/json-tolerante.d.ts.map +1 -0
- package/dist/core/tools/json-tolerante.js +70 -0
- package/dist/core/tools/json-tolerante.js.map +1 -0
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +17 -0
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts +14 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.js +17 -1
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
- package/dist/core/turno-vacio/detectar.d.ts +38 -0
- package/dist/core/turno-vacio/detectar.d.ts.map +1 -0
- package/dist/core/turno-vacio/detectar.js +66 -0
- package/dist/core/turno-vacio/detectar.js.map +1 -0
- package/dist/core/undo/journal.d.ts +57 -0
- package/dist/core/undo/journal.d.ts.map +1 -0
- package/dist/core/undo/journal.js +178 -0
- package/dist/core/undo/journal.js.map +1 -0
- package/dist/core/urls-internas/auditoria.d.ts +10 -0
- package/dist/core/urls-internas/auditoria.d.ts.map +1 -0
- package/dist/core/urls-internas/auditoria.js +42 -0
- package/dist/core/urls-internas/auditoria.js.map +1 -0
- package/dist/core/urls-internas/boveda.d.ts +13 -0
- package/dist/core/urls-internas/boveda.d.ts.map +1 -0
- package/dist/core/urls-internas/boveda.js +40 -0
- package/dist/core/urls-internas/boveda.js.map +1 -0
- package/dist/core/urls-internas/lector.d.ts +30 -0
- package/dist/core/urls-internas/lector.d.ts.map +1 -0
- package/dist/core/urls-internas/lector.js +56 -0
- package/dist/core/urls-internas/lector.js.map +1 -0
- package/dist/core/urls-internas/memoria.d.ts +11 -0
- package/dist/core/urls-internas/memoria.d.ts.map +1 -0
- package/dist/core/urls-internas/memoria.js +25 -0
- package/dist/core/urls-internas/memoria.js.map +1 -0
- package/dist/core/urls-internas/parse.d.ts +28 -0
- package/dist/core/urls-internas/parse.d.ts.map +1 -0
- package/dist/core/urls-internas/parse.js +32 -0
- package/dist/core/urls-internas/parse.js.map +1 -0
- package/dist/core/urls-internas/reglas.d.ts +10 -0
- package/dist/core/urls-internas/reglas.d.ts.map +1 -0
- package/dist/core/urls-internas/reglas.js +31 -0
- package/dist/core/urls-internas/reglas.js.map +1 -0
- package/dist/core/usage/aggregate.d.ts +68 -0
- package/dist/core/usage/aggregate.d.ts.map +1 -0
- package/dist/core/usage/aggregate.js +93 -0
- package/dist/core/usage/aggregate.js.map +1 -0
- package/dist/core/usage/cuota/anthropic.d.ts +10 -0
- package/dist/core/usage/cuota/anthropic.d.ts.map +1 -0
- package/dist/core/usage/cuota/anthropic.js +63 -0
- package/dist/core/usage/cuota/anthropic.js.map +1 -0
- package/dist/core/usage/cuota/cache.d.ts +20 -0
- package/dist/core/usage/cuota/cache.d.ts.map +1 -0
- package/dist/core/usage/cuota/cache.js +36 -0
- package/dist/core/usage/cuota/cache.js.map +1 -0
- package/dist/core/usage/cuota/github-copilot.d.ts +9 -0
- package/dist/core/usage/cuota/github-copilot.d.ts.map +1 -0
- package/dist/core/usage/cuota/github-copilot.js +67 -0
- package/dist/core/usage/cuota/github-copilot.js.map +1 -0
- package/dist/core/usage/cuota/google-gemini.d.ts +9 -0
- package/dist/core/usage/cuota/google-gemini.d.ts.map +1 -0
- package/dist/core/usage/cuota/google-gemini.js +72 -0
- package/dist/core/usage/cuota/google-gemini.js.map +1 -0
- package/dist/core/usage/cuota/index.d.ts +25 -0
- package/dist/core/usage/cuota/index.d.ts.map +1 -0
- package/dist/core/usage/cuota/index.js +50 -0
- package/dist/core/usage/cuota/index.js.map +1 -0
- package/dist/core/usage/cuota/openai-codex.d.ts +9 -0
- package/dist/core/usage/cuota/openai-codex.d.ts.map +1 -0
- package/dist/core/usage/cuota/openai-codex.js +59 -0
- package/dist/core/usage/cuota/openai-codex.js.map +1 -0
- package/dist/core/usage/cuota/openrouter.d.ts +10 -0
- package/dist/core/usage/cuota/openrouter.d.ts.map +1 -0
- package/dist/core/usage/cuota/openrouter.js +47 -0
- package/dist/core/usage/cuota/openrouter.js.map +1 -0
- package/dist/core/usage/cuota/tipos.d.ts +50 -0
- package/dist/core/usage/cuota/tipos.d.ts.map +1 -0
- package/dist/core/usage/cuota/tipos.js +25 -0
- package/dist/core/usage/cuota/tipos.js.map +1 -0
- package/dist/core/web/busqueda-nativa.d.ts +82 -0
- package/dist/core/web/busqueda-nativa.d.ts.map +1 -0
- package/dist/core/web/busqueda-nativa.js +163 -0
- package/dist/core/web/busqueda-nativa.js.map +1 -0
- package/dist/core/web/destino.d.ts +58 -0
- package/dist/core/web/destino.d.ts.map +1 -0
- package/dist/core/web/destino.js +127 -0
- package/dist/core/web/destino.js.map +1 -0
- package/dist/core/web/proveedores/brave.d.ts +6 -0
- package/dist/core/web/proveedores/brave.d.ts.map +1 -0
- package/dist/core/web/proveedores/brave.js +20 -0
- package/dist/core/web/proveedores/brave.js.map +1 -0
- package/dist/core/web/proveedores/claves.d.ts +19 -0
- package/dist/core/web/proveedores/claves.d.ts.map +1 -0
- package/dist/core/web/proveedores/claves.js +36 -0
- package/dist/core/web/proveedores/claves.js.map +1 -0
- package/dist/core/web/proveedores/duckduckgo.d.ts +3 -0
- package/dist/core/web/proveedores/duckduckgo.d.ts.map +1 -0
- package/dist/core/web/proveedores/duckduckgo.js +109 -0
- package/dist/core/web/proveedores/duckduckgo.js.map +1 -0
- package/dist/core/web/proveedores/ecosia.d.ts +3 -0
- package/dist/core/web/proveedores/ecosia.d.ts.map +1 -0
- package/dist/core/web/proveedores/ecosia.js +72 -0
- package/dist/core/web/proveedores/ecosia.js.map +1 -0
- package/dist/core/web/proveedores/exa.d.ts +6 -0
- package/dist/core/web/proveedores/exa.d.ts.map +1 -0
- package/dist/core/web/proveedores/exa.js +24 -0
- package/dist/core/web/proveedores/exa.js.map +1 -0
- package/dist/core/web/proveedores/mojeek.d.ts +3 -0
- package/dist/core/web/proveedores/mojeek.d.ts.map +1 -0
- package/dist/core/web/proveedores/mojeek.js +65 -0
- package/dist/core/web/proveedores/mojeek.js.map +1 -0
- package/dist/core/web/proveedores/navegador.d.ts +10 -0
- package/dist/core/web/proveedores/navegador.d.ts.map +1 -0
- package/dist/core/web/proveedores/navegador.js +13 -0
- package/dist/core/web/proveedores/navegador.js.map +1 -0
- package/dist/core/web/proveedores/registro.d.ts +43 -0
- package/dist/core/web/proveedores/registro.d.ts.map +1 -0
- package/dist/core/web/proveedores/registro.js +49 -0
- package/dist/core/web/proveedores/registro.js.map +1 -0
- package/dist/core/web/proveedores/searxng.d.ts +9 -0
- package/dist/core/web/proveedores/searxng.d.ts.map +1 -0
- package/dist/core/web/proveedores/searxng.js +17 -0
- package/dist/core/web/proveedores/searxng.js.map +1 -0
- package/dist/core/web/proveedores/serper.d.ts +9 -0
- package/dist/core/web/proveedores/serper.d.ts.map +1 -0
- package/dist/core/web/proveedores/serper.js +19 -0
- package/dist/core/web/proveedores/serper.js.map +1 -0
- package/dist/core/web/proveedores/tavily.d.ts +6 -0
- package/dist/core/web/proveedores/tavily.d.ts.map +1 -0
- package/dist/core/web/proveedores/tavily.js +19 -0
- package/dist/core/web/proveedores/tavily.js.map +1 -0
- package/dist/core/web/proveedores/tipos.d.ts +36 -0
- package/dist/core/web/proveedores/tipos.d.ts.map +1 -0
- package/dist/core/web/proveedores/tipos.js +10 -0
- package/dist/core/web/proveedores/tipos.js.map +1 -0
- package/dist/core/web/registro-red.d.ts +43 -0
- package/dist/core/web/registro-red.d.ts.map +1 -0
- package/dist/core/web/registro-red.js +86 -0
- package/dist/core/web/registro-red.js.map +1 -0
- package/dist/core/web/scrapers/cisa-kev.d.ts +10 -0
- package/dist/core/web/scrapers/cisa-kev.d.ts.map +1 -0
- package/dist/core/web/scrapers/cisa-kev.js +38 -0
- package/dist/core/web/scrapers/cisa-kev.js.map +1 -0
- package/dist/core/web/scrapers/crates-io.d.ts +11 -0
- package/dist/core/web/scrapers/crates-io.d.ts.map +1 -0
- package/dist/core/web/scrapers/crates-io.js +29 -0
- package/dist/core/web/scrapers/crates-io.js.map +1 -0
- package/dist/core/web/scrapers/docs-rs.d.ts +10 -0
- package/dist/core/web/scrapers/docs-rs.d.ts.map +1 -0
- package/dist/core/web/scrapers/docs-rs.js +35 -0
- package/dist/core/web/scrapers/docs-rs.js.map +1 -0
- package/dist/core/web/scrapers/github.d.ts +3 -0
- package/dist/core/web/scrapers/github.d.ts.map +1 -0
- package/dist/core/web/scrapers/github.js +72 -0
- package/dist/core/web/scrapers/github.js.map +1 -0
- package/dist/core/web/scrapers/go-pkg.d.ts +7 -0
- package/dist/core/web/scrapers/go-pkg.d.ts.map +1 -0
- package/dist/core/web/scrapers/go-pkg.js +30 -0
- package/dist/core/web/scrapers/go-pkg.js.map +1 -0
- package/dist/core/web/scrapers/hex.d.ts +6 -0
- package/dist/core/web/scrapers/hex.d.ts.map +1 -0
- package/dist/core/web/scrapers/hex.js +27 -0
- package/dist/core/web/scrapers/hex.js.map +1 -0
- package/dist/core/web/scrapers/maven.d.ts +8 -0
- package/dist/core/web/scrapers/maven.d.ts.map +1 -0
- package/dist/core/web/scrapers/maven.js +41 -0
- package/dist/core/web/scrapers/maven.js.map +1 -0
- package/dist/core/web/scrapers/mdn.d.ts +6 -0
- package/dist/core/web/scrapers/mdn.d.ts.map +1 -0
- package/dist/core/web/scrapers/mdn.js +28 -0
- package/dist/core/web/scrapers/mdn.js.map +1 -0
- package/dist/core/web/scrapers/npm.d.ts +11 -0
- package/dist/core/web/scrapers/npm.d.ts.map +1 -0
- package/dist/core/web/scrapers/npm.js +57 -0
- package/dist/core/web/scrapers/npm.js.map +1 -0
- package/dist/core/web/scrapers/nuget.d.ts +8 -0
- package/dist/core/web/scrapers/nuget.d.ts.map +1 -0
- package/dist/core/web/scrapers/nuget.js +22 -0
- package/dist/core/web/scrapers/nuget.js.map +1 -0
- package/dist/core/web/scrapers/nvd.d.ts +7 -0
- package/dist/core/web/scrapers/nvd.d.ts.map +1 -0
- package/dist/core/web/scrapers/nvd.js +37 -0
- package/dist/core/web/scrapers/nvd.js.map +1 -0
- package/dist/core/web/scrapers/pypi.d.ts +6 -0
- package/dist/core/web/scrapers/pypi.d.ts.map +1 -0
- package/dist/core/web/scrapers/pypi.js +31 -0
- package/dist/core/web/scrapers/pypi.js.map +1 -0
- package/dist/core/web/scrapers/registro.d.ts +13 -0
- package/dist/core/web/scrapers/registro.d.ts.map +1 -0
- package/dist/core/web/scrapers/registro.js +65 -0
- package/dist/core/web/scrapers/registro.js.map +1 -0
- package/dist/core/web/scrapers/rubygems.d.ts +6 -0
- package/dist/core/web/scrapers/rubygems.d.ts.map +1 -0
- package/dist/core/web/scrapers/rubygems.js +23 -0
- package/dist/core/web/scrapers/rubygems.js.map +1 -0
- package/dist/core/web/scrapers/stackoverflow.d.ts +3 -0
- package/dist/core/web/scrapers/stackoverflow.d.ts.map +1 -0
- package/dist/core/web/scrapers/stackoverflow.js +46 -0
- package/dist/core/web/scrapers/stackoverflow.js.map +1 -0
- package/dist/core/web/scrapers/tipos.d.ts +42 -0
- package/dist/core/web/scrapers/tipos.d.ts.map +1 -0
- package/dist/core/web/scrapers/tipos.js +23 -0
- package/dist/core/web/scrapers/tipos.js.map +1 -0
- package/dist/core/web/texto.d.ts +10 -0
- package/dist/core/web/texto.d.ts.map +1 -0
- package/dist/core/web/texto.js +26 -0
- package/dist/core/web/texto.js.map +1 -0
- package/dist/core/web/tools.d.ts +91 -0
- package/dist/core/web/tools.d.ts.map +1 -0
- package/dist/core/web/tools.js +304 -0
- package/dist/core/web/tools.js.map +1 -0
- package/dist/core/wiki/almacen.d.ts +33 -0
- package/dist/core/wiki/almacen.d.ts.map +1 -0
- package/dist/core/wiki/almacen.js +93 -0
- package/dist/core/wiki/almacen.js.map +1 -0
- package/dist/core/wiki/citas.d.ts +111 -0
- package/dist/core/wiki/citas.d.ts.map +1 -0
- package/dist/core/wiki/citas.js +146 -0
- package/dist/core/wiki/citas.js.map +1 -0
- package/dist/core/workflows/agent-runner.d.ts +2 -0
- package/dist/core/workflows/agent-runner.d.ts.map +1 -1
- package/dist/core/workflows/agent-runner.js +131 -44
- package/dist/core/workflows/agent-runner.js.map +1 -1
- package/dist/core/workflows/builtins.d.ts.map +1 -1
- package/dist/core/workflows/builtins.js +1 -0
- package/dist/core/workflows/builtins.js.map +1 -1
- package/dist/core/workflows/contrato/esquema.d.ts +32 -0
- package/dist/core/workflows/contrato/esquema.d.ts.map +1 -0
- package/dist/core/workflows/contrato/esquema.js +25 -0
- package/dist/core/workflows/contrato/esquema.js.map +1 -0
- package/dist/core/workflows/contrato/reparar-argumentos.d.ts +69 -0
- package/dist/core/workflows/contrato/reparar-argumentos.d.ts.map +1 -0
- package/dist/core/workflows/contrato/reparar-argumentos.js +117 -0
- package/dist/core/workflows/contrato/reparar-argumentos.js.map +1 -0
- package/dist/core/workflows/contrato/validador.d.ts +30 -0
- package/dist/core/workflows/contrato/validador.d.ts.map +1 -0
- package/dist/core/workflows/contrato/validador.js +56 -0
- package/dist/core/workflows/contrato/validador.js.map +1 -0
- package/dist/core/workflows/contrato/yield.d.ts +65 -0
- package/dist/core/workflows/contrato/yield.d.ts.map +1 -0
- package/dist/core/workflows/contrato/yield.js +80 -0
- package/dist/core/workflows/contrato/yield.js.map +1 -0
- package/dist/core/workflows/goal-engine/engine.d.ts +17 -0
- package/dist/core/workflows/goal-engine/engine.d.ts.map +1 -1
- package/dist/core/workflows/goal-engine/engine.js +41 -0
- package/dist/core/workflows/goal-engine/engine.js.map +1 -1
- package/dist/core/workflows/index.d.ts +8 -0
- package/dist/core/workflows/index.d.ts.map +1 -1
- package/dist/core/workflows/index.js +4 -0
- package/dist/core/workflows/index.js.map +1 -1
- package/dist/core/workflows/manager.d.ts +10 -0
- package/dist/core/workflows/manager.d.ts.map +1 -1
- package/dist/core/workflows/manager.js +35 -11
- package/dist/core/workflows/manager.js.map +1 -1
- package/dist/core/workflows/runtime.d.ts +13 -0
- package/dist/core/workflows/runtime.d.ts.map +1 -1
- package/dist/core/workflows/runtime.js +80 -1
- package/dist/core/workflows/runtime.js.map +1 -1
- package/dist/core/workflows/save-as-skill.d.ts +27 -0
- package/dist/core/workflows/save-as-skill.d.ts.map +1 -0
- package/dist/core/workflows/save-as-skill.js +54 -0
- package/dist/core/workflows/save-as-skill.js.map +1 -0
- package/dist/core/workflows/types.d.ts +49 -0
- package/dist/core/workflows/types.d.ts.map +1 -1
- package/dist/core/workflows/types.js.map +1 -1
- package/dist/extensions/remoto/index.d.ts +22 -0
- package/dist/extensions/remoto/index.d.ts.map +1 -0
- package/dist/extensions/remoto/index.js +54 -0
- package/dist/extensions/remoto/index.js.map +1 -0
- package/dist/index.d.ts +1 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -16
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +6 -0
- package/dist/main.js.map +1 -1
- package/dist/modes/acp/acp-mode.d.ts +42 -0
- package/dist/modes/acp/acp-mode.d.ts.map +1 -0
- package/dist/modes/acp/acp-mode.js +190 -0
- package/dist/modes/acp/acp-mode.js.map +1 -0
- package/dist/modes/acp/events.d.ts +74 -0
- package/dist/modes/acp/events.d.ts.map +1 -0
- package/dist/modes/acp/events.js +116 -0
- package/dist/modes/acp/events.js.map +1 -0
- package/dist/modes/interactive/components/model-selector.d.ts +8 -1
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +41 -7
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +1 -2
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +9 -86
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts +8 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js +48 -17
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +3 -7
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +137 -146
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js +11 -0
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +27 -5
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/server/attach.d.ts +56 -0
- package/dist/server/attach.d.ts.map +1 -0
- package/dist/server/attach.js +130 -0
- package/dist/server/attach.js.map +1 -0
- package/dist/server/extension-ops.d.ts +40 -0
- package/dist/server/extension-ops.d.ts.map +1 -0
- package/dist/server/extension-ops.js +146 -0
- package/dist/server/extension-ops.js.map +1 -0
- package/dist/server/pi-server-service.d.ts +85 -0
- package/dist/server/pi-server-service.d.ts.map +1 -0
- package/dist/server/pi-server-service.js +213 -0
- package/dist/server/pi-server-service.js.map +1 -0
- package/dist/server/scheduler-tick.d.ts +32 -0
- package/dist/server/scheduler-tick.d.ts.map +1 -0
- package/dist/server/scheduler-tick.js +47 -0
- package/dist/server/scheduler-tick.js.map +1 -0
- package/dist/server/serve.d.ts +25 -0
- package/dist/server/serve.d.ts.map +1 -0
- package/dist/server/serve.js +83 -0
- package/dist/server/serve.js.map +1 -0
- package/dist/server/transcript.d.ts +38 -0
- package/dist/server/transcript.d.ts.map +1 -0
- package/dist/server/transcript.js +176 -0
- package/dist/server/transcript.js.map +1 -0
- package/dist/skills/skill-creator/SKILL.md +90 -0
- package/dist/telegram/api.d.ts +75 -0
- package/dist/telegram/api.d.ts.map +1 -0
- package/dist/telegram/api.js +104 -0
- package/dist/telegram/api.js.map +1 -0
- package/dist/telegram/bridge.d.ts +85 -0
- package/dist/telegram/bridge.d.ts.map +1 -0
- package/dist/telegram/bridge.js +182 -0
- package/dist/telegram/bridge.js.map +1 -0
- package/dist/telegram/journal.d.ts +67 -0
- package/dist/telegram/journal.d.ts.map +1 -0
- package/dist/telegram/journal.js +119 -0
- package/dist/telegram/journal.js.map +1 -0
- package/dist/telegram/servidor.d.ts +15 -0
- package/dist/telegram/servidor.d.ts.map +1 -0
- package/dist/telegram/servidor.js +74 -0
- package/dist/telegram/servidor.js.map +1 -0
- package/dist/utils/shell.d.ts +11 -0
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +11 -0
- package/dist/utils/shell.js.map +1 -1
- package/dist/utils/version-check.d.ts.map +1 -1
- package/dist/utils/version-check.js +29 -1
- package/dist/utils/version-check.js.map +1 -1
- package/docs/compaction.md +10 -10
- package/docs/compliance.md +241 -0
- package/docs/containerization.md +24 -24
- package/docs/custom-provider.md +10 -10
- package/docs/development.md +47 -10
- package/docs/docs.json +14 -2
- package/docs/environment-variables.md +20 -17
- package/docs/extensions.md +51 -49
- package/docs/index.md +15 -21
- package/docs/json.md +3 -3
- package/docs/keybindings.md +5 -5
- package/docs/llama-cpp.md +7 -7
- package/docs/models.md +12 -12
- package/docs/packages.md +45 -45
- package/docs/prompt-templates.md +5 -5
- package/docs/providers.md +12 -12
- package/docs/quickstart.md +39 -39
- package/docs/rpc.md +12 -12
- package/docs/sdk.md +38 -38
- package/docs/security.md +26 -21
- package/docs/session-format.md +7 -7
- package/docs/sessions.md +14 -14
- package/docs/settings.md +45 -20
- package/docs/shell-aliases.md +2 -2
- package/docs/skills.md +11 -11
- package/docs/terminal-setup.md +14 -14
- package/docs/termux.md +7 -7
- package/docs/themes.md +11 -11
- package/docs/tmux.md +4 -4
- package/docs/tui.md +3 -3
- package/docs/usage.md +54 -54
- package/docs/windows.md +2 -2
- package/examples/sdk/12-full-control.ts +9 -0
- package/npm-shrinkwrap.json +35 -251
- package/package.json +10 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tipos.js","sourceRoot":"","sources":["../../../src/core/edicion/tipos.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * ¿La edición ha introducido un error de TIPOS?\n *\n * `parseo.ts` responde si el fichero sigue siendo sintácticamente válido, que\n * es el fallo más burdo. Este responde el siguiente: el fichero parsea, pero\n * llamas a la función con un argumento de más, o le pasas una cadena donde\n * esperaba un número. Hasta ahora eso solo salía al ejecutar `npm run check`,\n * que el modelo no lanza solo.\n *\n * oh-my-pi lo resuelve con un cliente LSP (9.920 líneas) que necesita un\n * servidor de lenguaje instalado. Aquí sale del compilador de TypeScript que ya\n * está en el proyecto, con un `LanguageService` que mantiene el programa vivo\n * entre ediciones. Medido sobre este repositorio (343 ficheros):\n *\n * primera comprobación 2.500 ms (una vez por proyecto, perezosa)\n * otro fichero 14 ms\n * tras cambiar el fichero 124-220 ms\n *\n * LA PRECONDICIÓN QUE LO HACE USABLE\n *\n * Solo se informa de lo que la edición ha INTRODUCIDO. Un repositorio a medio\n * refactorizar tiene cientos de errores de tipos, y volcárselos al modelo en\n * cada edición sería ruido puro: dejaría de leerlos el primer día y con ellos\n * el que sí importaba. Se comparan los diagnósticos de antes y los de después,\n * y solo viajan los nuevos.\n *\n * Y solo se paga cuando hace falta: si después de la edición no hay ningún\n * diagnóstico, no se calcula el \"antes\". La mayoría de ediciones son correctas,\n * así que el caso normal es una comprobación, no dos.\n */\n\nimport { dirname } from \"node:path\";\nimport ts from \"typescript\";\n\nexport interface ErrorDeTipos {\n\tlinea: number;\n\tmensaje: string;\n}\n\n/** Extensiones que tiene sentido comprobar. */\nconst COMPROBABLES = new Set([\".ts\", \".tsx\", \".mts\", \".cts\"]);\n\n/**\n * Tope de ficheros por proyecto.\n *\n * En un monorepo gigante la primera comprobación se va de las manos y el\n * usuario nota un parón que no ha pedido. Por encima del tope se calla y lo\n * dice — que es distinto de decir que está todo bien.\n */\nconst TOPE_FICHEROS = 5000;\n\ninterface Proyecto {\n\tservicio: ts.LanguageService;\n\t/** Contenido sobreescrito en memoria, por fichero. */\n\toverlay: Map<string, string>;\n\tversiones: Map<string, number>;\n\traiz: string;\n}\n\nexport type MotivoSinComprobar = \"extension-no-comprobable\" | \"sin-tsconfig\" | \"proyecto-demasiado-grande\";\n\nexport class ComprobadorDeTipos {\n\t/** Un servicio por `tsconfig`. Se reutiliza entre ediciones: es lo que hace que la segunda cueste 124 ms. */\n\tprivate readonly proyectos = new Map<string, Proyecto>();\n\tprivate readonly descartados = new Map<string, MotivoSinComprobar>();\n\n\t/** Por qué no se puede comprobar este fichero, o `null` si sí se puede. */\n\tporQueNo(ruta: string): MotivoSinComprobar | null {\n\t\tconst punto = ruta.lastIndexOf(\".\");\n\t\tif (punto === -1 || !COMPROBABLES.has(ruta.slice(punto).toLowerCase())) return \"extension-no-comprobable\";\n\t\tconst cfg = this.buscarConfig(ruta);\n\t\tif (!cfg) return \"sin-tsconfig\";\n\t\treturn this.descartados.get(cfg) ?? null;\n\t}\n\n\tprivate buscarConfig(ruta: string): string | undefined {\n\t\treturn ts.findConfigFile(dirname(ruta), ts.sys.fileExists, \"tsconfig.json\");\n\t}\n\n\tprivate proyectoDe(rutaConfig: string): Proyecto | null {\n\t\tconst existente = this.proyectos.get(rutaConfig);\n\t\tif (existente) return existente;\n\t\tif (this.descartados.has(rutaConfig)) return null;\n\n\t\tconst raiz = dirname(rutaConfig);\n\t\tconst cfg = ts.readConfigFile(rutaConfig, ts.sys.readFile);\n\t\tif (cfg.error) {\n\t\t\tthis.descartados.set(rutaConfig, \"sin-tsconfig\");\n\t\t\treturn null;\n\t\t}\n\t\tconst parsed = ts.parseJsonConfigFileContent(cfg.config, ts.sys, raiz);\n\t\tif (parsed.fileNames.length > TOPE_FICHEROS) {\n\t\t\tthis.descartados.set(rutaConfig, \"proyecto-demasiado-grande\");\n\t\t\treturn null;\n\t\t}\n\n\t\tconst overlay = new Map<string, string>();\n\t\tconst versiones = new Map<string, number>();\n\t\tconst host: ts.LanguageServiceHost = {\n\t\t\tgetScriptFileNames: () => parsed.fileNames,\n\t\t\tgetScriptVersion: (f) => String(versiones.get(f) ?? 0),\n\t\t\tgetScriptSnapshot: (f) => {\n\t\t\t\tconst texto = overlay.get(f) ?? ts.sys.readFile(f);\n\t\t\t\treturn texto === undefined ? undefined : ts.ScriptSnapshot.fromString(texto);\n\t\t\t},\n\t\t\tgetCurrentDirectory: () => raiz,\n\t\t\tgetCompilationSettings: () => parsed.options,\n\t\t\tgetDefaultLibFileName: (o) => ts.getDefaultLibFilePath(o),\n\t\t\tfileExists: (f) => overlay.has(f) || ts.sys.fileExists(f),\n\t\t\treadFile: (f) => overlay.get(f) ?? ts.sys.readFile(f),\n\t\t\treadDirectory: ts.sys.readDirectory,\n\t\t\tdirectoryExists: ts.sys.directoryExists,\n\t\t\tgetDirectories: ts.sys.getDirectories,\n\t\t};\n\t\tconst proyecto: Proyecto = {\n\t\t\tservicio: ts.createLanguageService(host, ts.createDocumentRegistry()),\n\t\t\toverlay,\n\t\t\tversiones,\n\t\t\traiz,\n\t\t};\n\t\tthis.proyectos.set(rutaConfig, proyecto);\n\t\treturn proyecto;\n\t}\n\n\t/** Diagnósticos de un contenido concreto, sin tocar el disco. */\n\tprivate diagnosticar(proyecto: Proyecto, ruta: string, contenido: string): ErrorDeTipos[] {\n\t\tproyecto.overlay.set(ruta, contenido);\n\t\tproyecto.versiones.set(ruta, (proyecto.versiones.get(ruta) ?? 0) + 1);\n\t\tlet brutos: readonly ts.Diagnostic[];\n\t\ttry {\n\t\t\tbrutos = proyecto.servicio.getSemanticDiagnostics(ruta);\n\t\t} catch {\n\t\t\t// Un fallo del servicio degrada la señal, no la sesión.\n\t\t\treturn [];\n\t\t}\n\t\tconst fuente = proyecto.servicio.getProgram()?.getSourceFile(ruta);\n\t\treturn brutos.map((d) => {\n\t\t\tconst pos = fuente && d.start !== undefined ? fuente.getLineAndCharacterOfPosition(d.start) : null;\n\t\t\treturn { linea: pos ? pos.line + 1 : 0, mensaje: ts.flattenDiagnosticMessageText(d.messageText, \" \") };\n\t\t});\n\t}\n\n\t/**\n\t * Los errores de tipos que esta edición ha INTRODUCIDO.\n\t *\n\t * Devuelve lista vacía cuando no hay ninguno nuevo, y también cuando no se\n\t * puede comprobar — para eso está `porQueNo()`, que quien llama debe mirar si\n\t * quiere distinguir «no hay errores» de «no lo he mirado». Son cosas muy\n\t * distintas y confundirlas es lo que convierte un aviso en una mentira.\n\t */\n\tintroducidos(ruta: string, antes: string | null, despues: string): ErrorDeTipos[] {\n\t\tif (this.porQueNo(ruta)) return [];\n\t\tconst cfg = this.buscarConfig(ruta);\n\t\tif (!cfg) return [];\n\t\tconst proyecto = this.proyectoDe(cfg);\n\t\tif (!proyecto) return [];\n\n\t\tconst despuesDiag = this.diagnosticar(proyecto, ruta, despues);\n\t\tif (despuesDiag.length === 0) {\n\t\t\tproyecto.overlay.delete(ruta);\n\t\t\treturn [];\n\t\t}\n\t\t// Solo aquí se paga la segunda comprobación: la mayoría de ediciones son\n\t\t// correctas y salen por el `return` de arriba con una sola.\n\t\tconst antesDiag = antes === null ? [] : this.diagnosticar(proyecto, ruta, antes);\n\t\tproyecto.overlay.delete(ruta);\n\n\t\tconst yaEstaban = new Set(antesDiag.map((d) => d.mensaje));\n\t\treturn despuesDiag.filter((d) => !yaEstaban.has(d.mensaje));\n\t}\n}\n\n/** El aviso para el modelo, o `null` si no hay nada que decir. */\nexport function avisoDeTipos(ruta: string, errores: ErrorDeTipos[]): string | null {\n\tif (errores.length === 0) return null;\n\tconst lineas = errores.slice(0, 3).map((e) => ` línea ${e.linea}: ${e.mensaje}`);\n\tconst resto = errores.length > 3 ? `\\n …y ${errores.length - 3} más` : \"\";\n\treturn `⚠ Esta edición introduce ${errores.length === 1 ? \"un error\" : `${errores.length} errores`} de tipos en \\`${ruta}\\`:\\n${lineas.join(\"\\n\")}${resto}`;\n}\n"]}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Qué ha pasado de verdad cuando el proveedor devuelve un error.
|
|
3
|
+
*
|
|
4
|
+
* Hoy se le enseña al usuario el error crudo. Esto es literal, capturado
|
|
5
|
+
* ejecutando `ada-cli review` durante el desarrollo:
|
|
6
|
+
*
|
|
7
|
+
* El modelo no devolvió nada (error: 429: {"message":"Provider returned
|
|
8
|
+
* error","code":429,"metadata":{"raw":"stealth/ox-alpha is temporarily
|
|
9
|
+
* rate-limited upstream. Please retry shortly.","provider_name":"Stealth",
|
|
10
|
+
* "is_byok":false,"limit_source":"upstream_provider_shared_pool",
|
|
11
|
+
* "remedy_hint":"Retry shortly, add your own provider key (https://
|
|
12
|
+
* openrouter.ai/settings/integrations), or route to another provider…"}}).
|
|
13
|
+
*
|
|
14
|
+
* Dentro de ese volcado hay tres cosas útiles —es un límite de tasa, es
|
|
15
|
+
* temporal, y hay tres salidas— y el usuario tiene que extraerlas a mano de un
|
|
16
|
+
* JSON de 400 caracteres. Peor: la mayoría no lo lee, y un error que no se lee
|
|
17
|
+
* es un error que se interpreta como «esto no funciona».
|
|
18
|
+
*
|
|
19
|
+
* Este módulo lo convierte en:
|
|
20
|
+
*
|
|
21
|
+
* El proveedor está limitando la tasa (429). Es temporal.
|
|
22
|
+
* Reintenta en unos segundos, cambia de modelo con /model, o configura tu
|
|
23
|
+
* propia clave del proveedor.
|
|
24
|
+
*
|
|
25
|
+
* DOS DECISIONES QUE IMPORTAN
|
|
26
|
+
*
|
|
27
|
+
* - **`reintentable` es un dato, no una opinión.** Lo consume el código que
|
|
28
|
+
* decide si volver a intentarlo; mezclarlo con el texto obligaría a leer
|
|
29
|
+
* prosa para tomar una decisión de control.
|
|
30
|
+
* - **Lo desconocido se dice desconocido.** Una clasificación que inventa una
|
|
31
|
+
* categoría plausible para todo es peor que ninguna: manda al usuario a
|
|
32
|
+
* arreglar algo que no está roto. Cuando no se sabe, se devuelve el mensaje
|
|
33
|
+
* original y se dice que no se ha podido clasificar.
|
|
34
|
+
*/
|
|
35
|
+
export type ClaseDeError = "limite-de-tasa" | "sin-credencial" | "credencial-invalida" | "cuota-agotada" | "modelo-no-disponible" | "contexto-excedido" | "contenido-rechazado" | "red" | "servidor" | "cancelado" | "desconocida";
|
|
36
|
+
export interface ErrorClasificado {
|
|
37
|
+
clase: ClaseDeError;
|
|
38
|
+
/** ¿Tiene sentido volver a intentarlo tal cual? Dato de control, no prosa. */
|
|
39
|
+
reintentable: boolean;
|
|
40
|
+
/** Segundos que el proveedor pide esperar, cuando lo dice. */
|
|
41
|
+
esperarSegundos?: number;
|
|
42
|
+
/** Qué puede hacer el usuario, en una o dos líneas. */
|
|
43
|
+
queHacer: string;
|
|
44
|
+
/** El texto original, para quien necesite el detalle. */
|
|
45
|
+
original: string;
|
|
46
|
+
}
|
|
47
|
+
export declare function clasificarError(entrada: {
|
|
48
|
+
mensaje: string;
|
|
49
|
+
estado?: number;
|
|
50
|
+
}): ErrorClasificado;
|
|
51
|
+
/** El error, listo para enseñárselo a una persona. */
|
|
52
|
+
export declare function explicarError(e: ErrorClasificado): string;
|
|
53
|
+
//# sourceMappingURL=proveedor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proveedor.d.ts","sourceRoot":"","sources":["../../../src/core/errores/proveedor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,MAAM,MAAM,YAAY,GACrB,gBAAgB,GAChB,gBAAgB,GAChB,qBAAqB,GACrB,eAAe,GACf,sBAAsB,GACtB,mBAAmB,GACnB,qBAAqB,GACrB,KAAK,GACL,UAAU,GACV,WAAW,GACX,aAAa,CAAC;AAEjB,MAAM,WAAW,gBAAgB;IAChC,KAAK,EAAE,YAAY,CAAC;IACpB,+EAA8E;IAC9E,YAAY,EAAE,OAAO,CAAC;IACtB,8DAA8D;IAC9D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,yDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC;CACjB;AAoJD,wBAAgB,eAAe,CAAC,OAAO,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,gBAAgB,CA2B/F;AAED,wDAAsD;AACtD,wBAAgB,aAAa,CAAC,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAIzD","sourcesContent":["/**\n * Qué ha pasado de verdad cuando el proveedor devuelve un error.\n *\n * Hoy se le enseña al usuario el error crudo. Esto es literal, capturado\n * ejecutando `ada-cli review` durante el desarrollo:\n *\n * El modelo no devolvió nada (error: 429: {\"message\":\"Provider returned\n * error\",\"code\":429,\"metadata\":{\"raw\":\"stealth/ox-alpha is temporarily\n * rate-limited upstream. Please retry shortly.\",\"provider_name\":\"Stealth\",\n * \"is_byok\":false,\"limit_source\":\"upstream_provider_shared_pool\",\n * \"remedy_hint\":\"Retry shortly, add your own provider key (https://\n * openrouter.ai/settings/integrations), or route to another provider…\"}}).\n *\n * Dentro de ese volcado hay tres cosas útiles —es un límite de tasa, es\n * temporal, y hay tres salidas— y el usuario tiene que extraerlas a mano de un\n * JSON de 400 caracteres. Peor: la mayoría no lo lee, y un error que no se lee\n * es un error que se interpreta como «esto no funciona».\n *\n * Este módulo lo convierte en:\n *\n * El proveedor está limitando la tasa (429). Es temporal.\n * Reintenta en unos segundos, cambia de modelo con /model, o configura tu\n * propia clave del proveedor.\n *\n * DOS DECISIONES QUE IMPORTAN\n *\n * - **`reintentable` es un dato, no una opinión.** Lo consume el código que\n * decide si volver a intentarlo; mezclarlo con el texto obligaría a leer\n * prosa para tomar una decisión de control.\n * - **Lo desconocido se dice desconocido.** Una clasificación que inventa una\n * categoría plausible para todo es peor que ninguna: manda al usuario a\n * arreglar algo que no está roto. Cuando no se sabe, se devuelve el mensaje\n * original y se dice que no se ha podido clasificar.\n */\n\nexport type ClaseDeError =\n\t| \"limite-de-tasa\"\n\t| \"sin-credencial\"\n\t| \"credencial-invalida\"\n\t| \"cuota-agotada\"\n\t| \"modelo-no-disponible\"\n\t| \"contexto-excedido\"\n\t| \"contenido-rechazado\"\n\t| \"red\"\n\t| \"servidor\"\n\t| \"cancelado\"\n\t| \"desconocida\";\n\nexport interface ErrorClasificado {\n\tclase: ClaseDeError;\n\t/** ¿Tiene sentido volver a intentarlo tal cual? Dato de control, no prosa. */\n\treintentable: boolean;\n\t/** Segundos que el proveedor pide esperar, cuando lo dice. */\n\tesperarSegundos?: number;\n\t/** Qué puede hacer el usuario, en una o dos líneas. */\n\tqueHacer: string;\n\t/** El texto original, para quien necesite el detalle. */\n\toriginal: string;\n}\n\n/** Lo que el proveedor sugiere, cuando viene en el cuerpo. */\nfunction pistaDelProveedor(texto: string): string | null {\n\tconst m = texto.match(/\"remedy_hint\"\\s*:\\s*\"([^\"]{1,300})\"/);\n\treturn m ? m[1] : null;\n}\n\n/** `retry-after` en segundos, venga en cabecera o en el cuerpo. */\nfunction segundosDeEspera(texto: string): number | undefined {\n\tconst m = texto.match(/retry[-_\\s]?after[\"'\\s:]*(\\d{1,5})/i);\n\tif (m) return Number(m[1]);\n\tconst ms = texto.match(/\"retryAfterMs\"\\s*:\\s*(\\d{1,8})/);\n\treturn ms ? Math.ceil(Number(ms[1]) / 1000) : undefined;\n}\n\ninterface Regla {\n\tclase: ClaseDeError;\n\treintentable: boolean;\n\t/** Se prueba contra el texto completo (mensaje + cuerpo). */\n\tcoincide: (texto: string, estado?: number) => boolean;\n\tqueHacer: string;\n}\n\n/**\n * El orden importa: lo más específico primero.\n *\n * «Cuota agotada» y «límite de tasa» llegan los dos como 429 y se arreglan de\n * formas opuestas —uno esperando, el otro cambiando de plan o de cuenta—, así\n * que confundirlos manda al usuario a esperar indefinidamente algo que no va a\n * pasar.\n */\nconst REGLAS: Regla[] = [\n\t{\n\t\tclase: \"cancelado\",\n\t\treintentable: false,\n\t\tcoincide: (t) => /\\b(aborted|abortError|operation was aborted|cancell?ed)\\b/i.test(t),\n\t\tqueHacer: \"La operación se canceló. Si no fuiste tú, revisa si algo agotó el tiempo de espera.\",\n\t},\n\t{\n\t\tclase: \"cuota-agotada\",\n\t\treintentable: false,\n\t\tcoincide: (t) =>\n\t\t\t/\\b(usage limit|quota exceeded|credit balance|insufficient_quota|billing|out of credits|plan limit)\\b/i.test(\n\t\t\t\tt,\n\t\t\t),\n\t\tqueHacer:\n\t\t\t\"Se ha agotado la cuota o el saldo de esta cuenta. Esperar no lo arregla: cambia de modelo con /model, usa otra credencial o amplía el plan.\",\n\t},\n\t{\n\t\tclase: \"limite-de-tasa\",\n\t\treintentable: true,\n\t\tcoincide: (t, estado) => estado === 429 || /\\brate[- ]?limit(?:ed|ing|s)?\\b|\\btoo many requests\\b/i.test(t),\n\t\tqueHacer:\n\t\t\t\"El proveedor está limitando la tasa. Es temporal: reintenta en unos segundos, cambia de modelo con /model o configura tu propia clave del proveedor.\",\n\t},\n\t{\n\t\tclase: \"contexto-excedido\",\n\t\treintentable: false,\n\t\tcoincide: (t) =>\n\t\t\t/\\b(context[_\\s]length|maximum context|too many tokens|prompt is too long|context_length_exceeded)\\b/i.test(t),\n\t\tqueHacer:\n\t\t\t\"La conversación no cabe en la ventana del modelo. Compacta con /compact, empieza una sesión nueva o usa un modelo con más contexto.\",\n\t},\n\t{\n\t\tclase: \"credencial-invalida\",\n\t\treintentable: false,\n\t\tcoincide: (t, estado) =>\n\t\t\t(estado === 401 || estado === 403) &&\n\t\t\t/\\b(invalid|expired|revoked|invalidated|incorrect api key|unauthorized)\\b/i.test(t),\n\t\tqueHacer: \"La credencial no vale o ha caducado. Vuelve a autenticarte con /login.\",\n\t},\n\t{\n\t\tclase: \"sin-credencial\",\n\t\treintentable: false,\n\t\tcoincide: (t, estado) => estado === 401 || /\\b(no api key|missing api key|not authenticated)\\b/i.test(t),\n\t\tqueHacer: \"No hay credencial para este proveedor. Configúrala con /login.\",\n\t},\n\t{\n\t\tclase: \"modelo-no-disponible\",\n\t\treintentable: false,\n\t\tcoincide: (t, estado) =>\n\t\t\t(estado === 404 && /model/i.test(t)) ||\n\t\t\t/\\b(model_not_found|does not exist or you do not have access)\\b/i.test(t),\n\t\tqueHacer: \"Ese modelo no existe o tu cuenta no tiene acceso. Elige otro con /model.\",\n\t},\n\t{\n\t\tclase: \"contenido-rechazado\",\n\t\treintentable: false,\n\t\tcoincide: (t) => /\\b(content[_\\s]filter|safety|blocked by|refused to respond|policy violation)\\b/i.test(t),\n\t\tqueHacer: \"El proveedor ha rechazado el contenido por su política. Reformula la petición.\",\n\t},\n\t{\n\t\tclase: \"red\",\n\t\treintentable: true,\n\t\t// `connection error` lo añadió `ada-cli commit`: con el proveedor apagado,\n\t\t// el SDK de OpenAI devuelve literalmente «Connection error.» y ni una de\n\t\t// las palabras de arriba. Salía como \"no se ha podido clasificar\", que es\n\t\t// honesto pero deja al usuario sin saber que basta con mirar la red.\n\t\t//\n\t\t// `terminated` es el hermano del anterior y aparece cuando el proveedor NO\n\t\t// estaba apagado sino que se murió a media respuesta: undici corta el\n\t\t// socket y el SDK devuelve `{stopReason:\"error\", errorMessage:\"terminated\"}`.\n\t\t// Capturado ejecutando `commit` contra un servidor que emite un trozo y\n\t\t// destruye la conexión.\n\t\tcoincide: (t) =>\n\t\t\t/\\b(ECONNREFUSED|ENOTFOUND|ETIMEDOUT|ECONNRESET|EAI_AGAIN|socket hang up|network error|connection error|fetch failed|terminated)\\b/i.test(\n\t\t\t\tt,\n\t\t\t),\n\t\tqueHacer: \"No se ha podido llegar al proveedor. Revisa la conexión o el proxy y reintenta.\",\n\t},\n\t{\n\t\tclase: \"servidor\",\n\t\treintentable: true,\n\t\tcoincide: (_t, estado) => estado !== undefined && estado >= 500 && estado < 600,\n\t\tqueHacer: \"El proveedor ha fallado por su lado. Suele arreglarse solo: reintenta en un momento.\",\n\t},\n];\n\n/** Saca el código HTTP del texto cuando no viene aparte. */\nfunction estadoDelTexto(texto: string): number | undefined {\n\t// También un código a pelo al principio (`429 Too Many Requests`), que es\n\t// como llega la mitad de los errores de proveedor. Exigir los dos puntos\n\t// dejaba sin clasificar justo el caso más común: lo cazó la prueba.\n\t//\n\t// Y el código ENTRE PARÉNTESIS, que es la otra mitad. `formatProviderError`\n\t// del SDK (packages/ai/src/utils/error-body.ts:128) arma el mensaje así:\n\t//\n\t// `${prefix} (${status}): ${body}` -> \"OpenAI API error (401): {…}\"\n\t// `${status}: ${body}` -> \"429: {…}\" (sin prefix)\n\t//\n\t// Solo la segunda forma casaba. La primera la usan `openai-responses` y\n\t// `azure-openai-responses`, o sea todo el que va por la Responses API de\n\t// OpenAI o por Azure. Medido ejecutando el clasificador sobre los formatos\n\t// reales del SDK: 4 de 6 salían \"desconocida\", entre ellos un 429 y un 401.\n\t// El 429 con el que se dio esto por bueno venía de openrouter, que va por\n\t// `openai-completions` y NO lleva prefijo — de ahí que pasara.\n\t//\n\t// Se exige el `):` pegado para no confundirlo con cualquier número de tres\n\t// cifras entre paréntesis que aparezca en el cuerpo del error.\n\tconst m =\n\t\ttexto.match(/\\b(?:status|code)[\"'\\s:]*(\\d{3})\\b/i) ??\n\t\ttexto.match(/\\((\\d{3})\\)\\s*:/) ??\n\t\ttexto.match(/^\\s*(\\d{3})\\b/);\n\tconst n = m ? Number(m[1]) : Number.NaN;\n\treturn n >= 100 && n < 600 ? n : undefined;\n}\n\nexport function clasificarError(entrada: { mensaje: string; estado?: number }): ErrorClasificado {\n\tconst texto = entrada.mensaje ?? \"\";\n\tconst estado = entrada.estado ?? estadoDelTexto(texto);\n\n\tfor (const regla of REGLAS) {\n\t\tif (!regla.coincide(texto, estado)) continue;\n\t\tconst pista = pistaDelProveedor(texto);\n\t\treturn {\n\t\t\tclase: regla.clase,\n\t\t\treintentable: regla.reintentable,\n\t\t\tesperarSegundos: segundosDeEspera(texto),\n\t\t\t// La pista del proveedor va DETRÁS de la nuestra, no en su lugar: la\n\t\t\t// nuestra está en el idioma del usuario y habla de nuestros comandos;\n\t\t\t// la suya conoce su infraestructura. Las dos suman.\n\t\t\tqueHacer: pista ? `${regla.queHacer}\\nEl proveedor añade: ${pista}` : regla.queHacer,\n\t\t\toriginal: texto,\n\t\t};\n\t}\n\n\t// Lo desconocido se dice desconocido. Inventar una categoría plausible manda\n\t// al usuario a arreglar algo que no está roto.\n\treturn {\n\t\tclase: \"desconocida\",\n\t\treintentable: false,\n\t\tqueHacer: \"No se ha podido clasificar este error. El mensaje original está debajo.\",\n\t\toriginal: texto,\n\t};\n}\n\n/** El error, listo para enseñárselo a una persona. */\nexport function explicarError(e: ErrorClasificado): string {\n\tconst espera = e.esperarSegundos ? ` Pide esperar ${e.esperarSegundos} s.` : \"\";\n\tif (e.clase === \"desconocida\") return `${e.queHacer}\\n${e.original}`;\n\treturn `${e.queHacer}${espera}`;\n}\n"]}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Qué ha pasado de verdad cuando el proveedor devuelve un error.
|
|
3
|
+
*
|
|
4
|
+
* Hoy se le enseña al usuario el error crudo. Esto es literal, capturado
|
|
5
|
+
* ejecutando `ada-cli review` durante el desarrollo:
|
|
6
|
+
*
|
|
7
|
+
* El modelo no devolvió nada (error: 429: {"message":"Provider returned
|
|
8
|
+
* error","code":429,"metadata":{"raw":"stealth/ox-alpha is temporarily
|
|
9
|
+
* rate-limited upstream. Please retry shortly.","provider_name":"Stealth",
|
|
10
|
+
* "is_byok":false,"limit_source":"upstream_provider_shared_pool",
|
|
11
|
+
* "remedy_hint":"Retry shortly, add your own provider key (https://
|
|
12
|
+
* openrouter.ai/settings/integrations), or route to another provider…"}}).
|
|
13
|
+
*
|
|
14
|
+
* Dentro de ese volcado hay tres cosas útiles —es un límite de tasa, es
|
|
15
|
+
* temporal, y hay tres salidas— y el usuario tiene que extraerlas a mano de un
|
|
16
|
+
* JSON de 400 caracteres. Peor: la mayoría no lo lee, y un error que no se lee
|
|
17
|
+
* es un error que se interpreta como «esto no funciona».
|
|
18
|
+
*
|
|
19
|
+
* Este módulo lo convierte en:
|
|
20
|
+
*
|
|
21
|
+
* El proveedor está limitando la tasa (429). Es temporal.
|
|
22
|
+
* Reintenta en unos segundos, cambia de modelo con /model, o configura tu
|
|
23
|
+
* propia clave del proveedor.
|
|
24
|
+
*
|
|
25
|
+
* DOS DECISIONES QUE IMPORTAN
|
|
26
|
+
*
|
|
27
|
+
* - **`reintentable` es un dato, no una opinión.** Lo consume el código que
|
|
28
|
+
* decide si volver a intentarlo; mezclarlo con el texto obligaría a leer
|
|
29
|
+
* prosa para tomar una decisión de control.
|
|
30
|
+
* - **Lo desconocido se dice desconocido.** Una clasificación que inventa una
|
|
31
|
+
* categoría plausible para todo es peor que ninguna: manda al usuario a
|
|
32
|
+
* arreglar algo que no está roto. Cuando no se sabe, se devuelve el mensaje
|
|
33
|
+
* original y se dice que no se ha podido clasificar.
|
|
34
|
+
*/
|
|
35
|
+
/** Lo que el proveedor sugiere, cuando viene en el cuerpo. */
|
|
36
|
+
function pistaDelProveedor(texto) {
|
|
37
|
+
const m = texto.match(/"remedy_hint"\s*:\s*"([^"]{1,300})"/);
|
|
38
|
+
return m ? m[1] : null;
|
|
39
|
+
}
|
|
40
|
+
/** `retry-after` en segundos, venga en cabecera o en el cuerpo. */
|
|
41
|
+
function segundosDeEspera(texto) {
|
|
42
|
+
const m = texto.match(/retry[-_\s]?after["'\s:]*(\d{1,5})/i);
|
|
43
|
+
if (m)
|
|
44
|
+
return Number(m[1]);
|
|
45
|
+
const ms = texto.match(/"retryAfterMs"\s*:\s*(\d{1,8})/);
|
|
46
|
+
return ms ? Math.ceil(Number(ms[1]) / 1000) : undefined;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* El orden importa: lo más específico primero.
|
|
50
|
+
*
|
|
51
|
+
* «Cuota agotada» y «límite de tasa» llegan los dos como 429 y se arreglan de
|
|
52
|
+
* formas opuestas —uno esperando, el otro cambiando de plan o de cuenta—, así
|
|
53
|
+
* que confundirlos manda al usuario a esperar indefinidamente algo que no va a
|
|
54
|
+
* pasar.
|
|
55
|
+
*/
|
|
56
|
+
const REGLAS = [
|
|
57
|
+
{
|
|
58
|
+
clase: "cancelado",
|
|
59
|
+
reintentable: false,
|
|
60
|
+
coincide: (t) => /\b(aborted|abortError|operation was aborted|cancell?ed)\b/i.test(t),
|
|
61
|
+
queHacer: "La operación se canceló. Si no fuiste tú, revisa si algo agotó el tiempo de espera.",
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
clase: "cuota-agotada",
|
|
65
|
+
reintentable: false,
|
|
66
|
+
coincide: (t) => /\b(usage limit|quota exceeded|credit balance|insufficient_quota|billing|out of credits|plan limit)\b/i.test(t),
|
|
67
|
+
queHacer: "Se ha agotado la cuota o el saldo de esta cuenta. Esperar no lo arregla: cambia de modelo con /model, usa otra credencial o amplía el plan.",
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
clase: "limite-de-tasa",
|
|
71
|
+
reintentable: true,
|
|
72
|
+
coincide: (t, estado) => estado === 429 || /\brate[- ]?limit(?:ed|ing|s)?\b|\btoo many requests\b/i.test(t),
|
|
73
|
+
queHacer: "El proveedor está limitando la tasa. Es temporal: reintenta en unos segundos, cambia de modelo con /model o configura tu propia clave del proveedor.",
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
clase: "contexto-excedido",
|
|
77
|
+
reintentable: false,
|
|
78
|
+
coincide: (t) => /\b(context[_\s]length|maximum context|too many tokens|prompt is too long|context_length_exceeded)\b/i.test(t),
|
|
79
|
+
queHacer: "La conversación no cabe en la ventana del modelo. Compacta con /compact, empieza una sesión nueva o usa un modelo con más contexto.",
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
clase: "credencial-invalida",
|
|
83
|
+
reintentable: false,
|
|
84
|
+
coincide: (t, estado) => (estado === 401 || estado === 403) &&
|
|
85
|
+
/\b(invalid|expired|revoked|invalidated|incorrect api key|unauthorized)\b/i.test(t),
|
|
86
|
+
queHacer: "La credencial no vale o ha caducado. Vuelve a autenticarte con /login.",
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
clase: "sin-credencial",
|
|
90
|
+
reintentable: false,
|
|
91
|
+
coincide: (t, estado) => estado === 401 || /\b(no api key|missing api key|not authenticated)\b/i.test(t),
|
|
92
|
+
queHacer: "No hay credencial para este proveedor. Configúrala con /login.",
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
clase: "modelo-no-disponible",
|
|
96
|
+
reintentable: false,
|
|
97
|
+
coincide: (t, estado) => (estado === 404 && /model/i.test(t)) ||
|
|
98
|
+
/\b(model_not_found|does not exist or you do not have access)\b/i.test(t),
|
|
99
|
+
queHacer: "Ese modelo no existe o tu cuenta no tiene acceso. Elige otro con /model.",
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
clase: "contenido-rechazado",
|
|
103
|
+
reintentable: false,
|
|
104
|
+
coincide: (t) => /\b(content[_\s]filter|safety|blocked by|refused to respond|policy violation)\b/i.test(t),
|
|
105
|
+
queHacer: "El proveedor ha rechazado el contenido por su política. Reformula la petición.",
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
clase: "red",
|
|
109
|
+
reintentable: true,
|
|
110
|
+
// `connection error` lo añadió `ada-cli commit`: con el proveedor apagado,
|
|
111
|
+
// el SDK de OpenAI devuelve literalmente «Connection error.» y ni una de
|
|
112
|
+
// las palabras de arriba. Salía como "no se ha podido clasificar", que es
|
|
113
|
+
// honesto pero deja al usuario sin saber que basta con mirar la red.
|
|
114
|
+
//
|
|
115
|
+
// `terminated` es el hermano del anterior y aparece cuando el proveedor NO
|
|
116
|
+
// estaba apagado sino que se murió a media respuesta: undici corta el
|
|
117
|
+
// socket y el SDK devuelve `{stopReason:"error", errorMessage:"terminated"}`.
|
|
118
|
+
// Capturado ejecutando `commit` contra un servidor que emite un trozo y
|
|
119
|
+
// destruye la conexión.
|
|
120
|
+
coincide: (t) => /\b(ECONNREFUSED|ENOTFOUND|ETIMEDOUT|ECONNRESET|EAI_AGAIN|socket hang up|network error|connection error|fetch failed|terminated)\b/i.test(t),
|
|
121
|
+
queHacer: "No se ha podido llegar al proveedor. Revisa la conexión o el proxy y reintenta.",
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
clase: "servidor",
|
|
125
|
+
reintentable: true,
|
|
126
|
+
coincide: (_t, estado) => estado !== undefined && estado >= 500 && estado < 600,
|
|
127
|
+
queHacer: "El proveedor ha fallado por su lado. Suele arreglarse solo: reintenta en un momento.",
|
|
128
|
+
},
|
|
129
|
+
];
|
|
130
|
+
/** Saca el código HTTP del texto cuando no viene aparte. */
|
|
131
|
+
function estadoDelTexto(texto) {
|
|
132
|
+
// También un código a pelo al principio (`429 Too Many Requests`), que es
|
|
133
|
+
// como llega la mitad de los errores de proveedor. Exigir los dos puntos
|
|
134
|
+
// dejaba sin clasificar justo el caso más común: lo cazó la prueba.
|
|
135
|
+
//
|
|
136
|
+
// Y el código ENTRE PARÉNTESIS, que es la otra mitad. `formatProviderError`
|
|
137
|
+
// del SDK (packages/ai/src/utils/error-body.ts:128) arma el mensaje así:
|
|
138
|
+
//
|
|
139
|
+
// `${prefix} (${status}): ${body}` -> "OpenAI API error (401): {…}"
|
|
140
|
+
// `${status}: ${body}` -> "429: {…}" (sin prefix)
|
|
141
|
+
//
|
|
142
|
+
// Solo la segunda forma casaba. La primera la usan `openai-responses` y
|
|
143
|
+
// `azure-openai-responses`, o sea todo el que va por la Responses API de
|
|
144
|
+
// OpenAI o por Azure. Medido ejecutando el clasificador sobre los formatos
|
|
145
|
+
// reales del SDK: 4 de 6 salían "desconocida", entre ellos un 429 y un 401.
|
|
146
|
+
// El 429 con el que se dio esto por bueno venía de openrouter, que va por
|
|
147
|
+
// `openai-completions` y NO lleva prefijo — de ahí que pasara.
|
|
148
|
+
//
|
|
149
|
+
// Se exige el `):` pegado para no confundirlo con cualquier número de tres
|
|
150
|
+
// cifras entre paréntesis que aparezca en el cuerpo del error.
|
|
151
|
+
const m = texto.match(/\b(?:status|code)["'\s:]*(\d{3})\b/i) ??
|
|
152
|
+
texto.match(/\((\d{3})\)\s*:/) ??
|
|
153
|
+
texto.match(/^\s*(\d{3})\b/);
|
|
154
|
+
const n = m ? Number(m[1]) : Number.NaN;
|
|
155
|
+
return n >= 100 && n < 600 ? n : undefined;
|
|
156
|
+
}
|
|
157
|
+
export function clasificarError(entrada) {
|
|
158
|
+
const texto = entrada.mensaje ?? "";
|
|
159
|
+
const estado = entrada.estado ?? estadoDelTexto(texto);
|
|
160
|
+
for (const regla of REGLAS) {
|
|
161
|
+
if (!regla.coincide(texto, estado))
|
|
162
|
+
continue;
|
|
163
|
+
const pista = pistaDelProveedor(texto);
|
|
164
|
+
return {
|
|
165
|
+
clase: regla.clase,
|
|
166
|
+
reintentable: regla.reintentable,
|
|
167
|
+
esperarSegundos: segundosDeEspera(texto),
|
|
168
|
+
// La pista del proveedor va DETRÁS de la nuestra, no en su lugar: la
|
|
169
|
+
// nuestra está en el idioma del usuario y habla de nuestros comandos;
|
|
170
|
+
// la suya conoce su infraestructura. Las dos suman.
|
|
171
|
+
queHacer: pista ? `${regla.queHacer}\nEl proveedor añade: ${pista}` : regla.queHacer,
|
|
172
|
+
original: texto,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
// Lo desconocido se dice desconocido. Inventar una categoría plausible manda
|
|
176
|
+
// al usuario a arreglar algo que no está roto.
|
|
177
|
+
return {
|
|
178
|
+
clase: "desconocida",
|
|
179
|
+
reintentable: false,
|
|
180
|
+
queHacer: "No se ha podido clasificar este error. El mensaje original está debajo.",
|
|
181
|
+
original: texto,
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
/** El error, listo para enseñárselo a una persona. */
|
|
185
|
+
export function explicarError(e) {
|
|
186
|
+
const espera = e.esperarSegundos ? ` Pide esperar ${e.esperarSegundos} s.` : "";
|
|
187
|
+
if (e.clase === "desconocida")
|
|
188
|
+
return `${e.queHacer}\n${e.original}`;
|
|
189
|
+
return `${e.queHacer}${espera}`;
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=proveedor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proveedor.js","sourceRoot":"","sources":["../../../src/core/errores/proveedor.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Qué ha pasado de verdad cuando el proveedor devuelve un error.\n *\n * Hoy se le enseña al usuario el error crudo. Esto es literal, capturado\n * ejecutando `ada-cli review` durante el desarrollo:\n *\n * El modelo no devolvió nada (error: 429: {\"message\":\"Provider returned\n * error\",\"code\":429,\"metadata\":{\"raw\":\"stealth/ox-alpha is temporarily\n * rate-limited upstream. Please retry shortly.\",\"provider_name\":\"Stealth\",\n * \"is_byok\":false,\"limit_source\":\"upstream_provider_shared_pool\",\n * \"remedy_hint\":\"Retry shortly, add your own provider key (https://\n * openrouter.ai/settings/integrations), or route to another provider…\"}}).\n *\n * Dentro de ese volcado hay tres cosas útiles —es un límite de tasa, es\n * temporal, y hay tres salidas— y el usuario tiene que extraerlas a mano de un\n * JSON de 400 caracteres. Peor: la mayoría no lo lee, y un error que no se lee\n * es un error que se interpreta como «esto no funciona».\n *\n * Este módulo lo convierte en:\n *\n * El proveedor está limitando la tasa (429). Es temporal.\n * Reintenta en unos segundos, cambia de modelo con /model, o configura tu\n * propia clave del proveedor.\n *\n * DOS DECISIONES QUE IMPORTAN\n *\n * - **`reintentable` es un dato, no una opinión.** Lo consume el código que\n * decide si volver a intentarlo; mezclarlo con el texto obligaría a leer\n * prosa para tomar una decisión de control.\n * - **Lo desconocido se dice desconocido.** Una clasificación que inventa una\n * categoría plausible para todo es peor que ninguna: manda al usuario a\n * arreglar algo que no está roto. Cuando no se sabe, se devuelve el mensaje\n * original y se dice que no se ha podido clasificar.\n */\n\nexport type ClaseDeError =\n\t| \"limite-de-tasa\"\n\t| \"sin-credencial\"\n\t| \"credencial-invalida\"\n\t| \"cuota-agotada\"\n\t| \"modelo-no-disponible\"\n\t| \"contexto-excedido\"\n\t| \"contenido-rechazado\"\n\t| \"red\"\n\t| \"servidor\"\n\t| \"cancelado\"\n\t| \"desconocida\";\n\nexport interface ErrorClasificado {\n\tclase: ClaseDeError;\n\t/** ¿Tiene sentido volver a intentarlo tal cual? Dato de control, no prosa. */\n\treintentable: boolean;\n\t/** Segundos que el proveedor pide esperar, cuando lo dice. */\n\tesperarSegundos?: number;\n\t/** Qué puede hacer el usuario, en una o dos líneas. */\n\tqueHacer: string;\n\t/** El texto original, para quien necesite el detalle. */\n\toriginal: string;\n}\n\n/** Lo que el proveedor sugiere, cuando viene en el cuerpo. */\nfunction pistaDelProveedor(texto: string): string | null {\n\tconst m = texto.match(/\"remedy_hint\"\\s*:\\s*\"([^\"]{1,300})\"/);\n\treturn m ? m[1] : null;\n}\n\n/** `retry-after` en segundos, venga en cabecera o en el cuerpo. */\nfunction segundosDeEspera(texto: string): number | undefined {\n\tconst m = texto.match(/retry[-_\\s]?after[\"'\\s:]*(\\d{1,5})/i);\n\tif (m) return Number(m[1]);\n\tconst ms = texto.match(/\"retryAfterMs\"\\s*:\\s*(\\d{1,8})/);\n\treturn ms ? Math.ceil(Number(ms[1]) / 1000) : undefined;\n}\n\ninterface Regla {\n\tclase: ClaseDeError;\n\treintentable: boolean;\n\t/** Se prueba contra el texto completo (mensaje + cuerpo). */\n\tcoincide: (texto: string, estado?: number) => boolean;\n\tqueHacer: string;\n}\n\n/**\n * El orden importa: lo más específico primero.\n *\n * «Cuota agotada» y «límite de tasa» llegan los dos como 429 y se arreglan de\n * formas opuestas —uno esperando, el otro cambiando de plan o de cuenta—, así\n * que confundirlos manda al usuario a esperar indefinidamente algo que no va a\n * pasar.\n */\nconst REGLAS: Regla[] = [\n\t{\n\t\tclase: \"cancelado\",\n\t\treintentable: false,\n\t\tcoincide: (t) => /\\b(aborted|abortError|operation was aborted|cancell?ed)\\b/i.test(t),\n\t\tqueHacer: \"La operación se canceló. Si no fuiste tú, revisa si algo agotó el tiempo de espera.\",\n\t},\n\t{\n\t\tclase: \"cuota-agotada\",\n\t\treintentable: false,\n\t\tcoincide: (t) =>\n\t\t\t/\\b(usage limit|quota exceeded|credit balance|insufficient_quota|billing|out of credits|plan limit)\\b/i.test(\n\t\t\t\tt,\n\t\t\t),\n\t\tqueHacer:\n\t\t\t\"Se ha agotado la cuota o el saldo de esta cuenta. Esperar no lo arregla: cambia de modelo con /model, usa otra credencial o amplía el plan.\",\n\t},\n\t{\n\t\tclase: \"limite-de-tasa\",\n\t\treintentable: true,\n\t\tcoincide: (t, estado) => estado === 429 || /\\brate[- ]?limit(?:ed|ing|s)?\\b|\\btoo many requests\\b/i.test(t),\n\t\tqueHacer:\n\t\t\t\"El proveedor está limitando la tasa. Es temporal: reintenta en unos segundos, cambia de modelo con /model o configura tu propia clave del proveedor.\",\n\t},\n\t{\n\t\tclase: \"contexto-excedido\",\n\t\treintentable: false,\n\t\tcoincide: (t) =>\n\t\t\t/\\b(context[_\\s]length|maximum context|too many tokens|prompt is too long|context_length_exceeded)\\b/i.test(t),\n\t\tqueHacer:\n\t\t\t\"La conversación no cabe en la ventana del modelo. Compacta con /compact, empieza una sesión nueva o usa un modelo con más contexto.\",\n\t},\n\t{\n\t\tclase: \"credencial-invalida\",\n\t\treintentable: false,\n\t\tcoincide: (t, estado) =>\n\t\t\t(estado === 401 || estado === 403) &&\n\t\t\t/\\b(invalid|expired|revoked|invalidated|incorrect api key|unauthorized)\\b/i.test(t),\n\t\tqueHacer: \"La credencial no vale o ha caducado. Vuelve a autenticarte con /login.\",\n\t},\n\t{\n\t\tclase: \"sin-credencial\",\n\t\treintentable: false,\n\t\tcoincide: (t, estado) => estado === 401 || /\\b(no api key|missing api key|not authenticated)\\b/i.test(t),\n\t\tqueHacer: \"No hay credencial para este proveedor. Configúrala con /login.\",\n\t},\n\t{\n\t\tclase: \"modelo-no-disponible\",\n\t\treintentable: false,\n\t\tcoincide: (t, estado) =>\n\t\t\t(estado === 404 && /model/i.test(t)) ||\n\t\t\t/\\b(model_not_found|does not exist or you do not have access)\\b/i.test(t),\n\t\tqueHacer: \"Ese modelo no existe o tu cuenta no tiene acceso. Elige otro con /model.\",\n\t},\n\t{\n\t\tclase: \"contenido-rechazado\",\n\t\treintentable: false,\n\t\tcoincide: (t) => /\\b(content[_\\s]filter|safety|blocked by|refused to respond|policy violation)\\b/i.test(t),\n\t\tqueHacer: \"El proveedor ha rechazado el contenido por su política. Reformula la petición.\",\n\t},\n\t{\n\t\tclase: \"red\",\n\t\treintentable: true,\n\t\t// `connection error` lo añadió `ada-cli commit`: con el proveedor apagado,\n\t\t// el SDK de OpenAI devuelve literalmente «Connection error.» y ni una de\n\t\t// las palabras de arriba. Salía como \"no se ha podido clasificar\", que es\n\t\t// honesto pero deja al usuario sin saber que basta con mirar la red.\n\t\t//\n\t\t// `terminated` es el hermano del anterior y aparece cuando el proveedor NO\n\t\t// estaba apagado sino que se murió a media respuesta: undici corta el\n\t\t// socket y el SDK devuelve `{stopReason:\"error\", errorMessage:\"terminated\"}`.\n\t\t// Capturado ejecutando `commit` contra un servidor que emite un trozo y\n\t\t// destruye la conexión.\n\t\tcoincide: (t) =>\n\t\t\t/\\b(ECONNREFUSED|ENOTFOUND|ETIMEDOUT|ECONNRESET|EAI_AGAIN|socket hang up|network error|connection error|fetch failed|terminated)\\b/i.test(\n\t\t\t\tt,\n\t\t\t),\n\t\tqueHacer: \"No se ha podido llegar al proveedor. Revisa la conexión o el proxy y reintenta.\",\n\t},\n\t{\n\t\tclase: \"servidor\",\n\t\treintentable: true,\n\t\tcoincide: (_t, estado) => estado !== undefined && estado >= 500 && estado < 600,\n\t\tqueHacer: \"El proveedor ha fallado por su lado. Suele arreglarse solo: reintenta en un momento.\",\n\t},\n];\n\n/** Saca el código HTTP del texto cuando no viene aparte. */\nfunction estadoDelTexto(texto: string): number | undefined {\n\t// También un código a pelo al principio (`429 Too Many Requests`), que es\n\t// como llega la mitad de los errores de proveedor. Exigir los dos puntos\n\t// dejaba sin clasificar justo el caso más común: lo cazó la prueba.\n\t//\n\t// Y el código ENTRE PARÉNTESIS, que es la otra mitad. `formatProviderError`\n\t// del SDK (packages/ai/src/utils/error-body.ts:128) arma el mensaje así:\n\t//\n\t// `${prefix} (${status}): ${body}` -> \"OpenAI API error (401): {…}\"\n\t// `${status}: ${body}` -> \"429: {…}\" (sin prefix)\n\t//\n\t// Solo la segunda forma casaba. La primera la usan `openai-responses` y\n\t// `azure-openai-responses`, o sea todo el que va por la Responses API de\n\t// OpenAI o por Azure. Medido ejecutando el clasificador sobre los formatos\n\t// reales del SDK: 4 de 6 salían \"desconocida\", entre ellos un 429 y un 401.\n\t// El 429 con el que se dio esto por bueno venía de openrouter, que va por\n\t// `openai-completions` y NO lleva prefijo — de ahí que pasara.\n\t//\n\t// Se exige el `):` pegado para no confundirlo con cualquier número de tres\n\t// cifras entre paréntesis que aparezca en el cuerpo del error.\n\tconst m =\n\t\ttexto.match(/\\b(?:status|code)[\"'\\s:]*(\\d{3})\\b/i) ??\n\t\ttexto.match(/\\((\\d{3})\\)\\s*:/) ??\n\t\ttexto.match(/^\\s*(\\d{3})\\b/);\n\tconst n = m ? Number(m[1]) : Number.NaN;\n\treturn n >= 100 && n < 600 ? n : undefined;\n}\n\nexport function clasificarError(entrada: { mensaje: string; estado?: number }): ErrorClasificado {\n\tconst texto = entrada.mensaje ?? \"\";\n\tconst estado = entrada.estado ?? estadoDelTexto(texto);\n\n\tfor (const regla of REGLAS) {\n\t\tif (!regla.coincide(texto, estado)) continue;\n\t\tconst pista = pistaDelProveedor(texto);\n\t\treturn {\n\t\t\tclase: regla.clase,\n\t\t\treintentable: regla.reintentable,\n\t\t\tesperarSegundos: segundosDeEspera(texto),\n\t\t\t// La pista del proveedor va DETRÁS de la nuestra, no en su lugar: la\n\t\t\t// nuestra está en el idioma del usuario y habla de nuestros comandos;\n\t\t\t// la suya conoce su infraestructura. Las dos suman.\n\t\t\tqueHacer: pista ? `${regla.queHacer}\\nEl proveedor añade: ${pista}` : regla.queHacer,\n\t\t\toriginal: texto,\n\t\t};\n\t}\n\n\t// Lo desconocido se dice desconocido. Inventar una categoría plausible manda\n\t// al usuario a arreglar algo que no está roto.\n\treturn {\n\t\tclase: \"desconocida\",\n\t\treintentable: false,\n\t\tqueHacer: \"No se ha podido clasificar este error. El mensaje original está debajo.\",\n\t\toriginal: texto,\n\t};\n}\n\n/** El error, listo para enseñárselo a una persona. */\nexport function explicarError(e: ErrorClasificado): string {\n\tconst espera = e.esperarSegundos ? ` Pide esperar ${e.esperarSegundos} s.` : \"\";\n\tif (e.clase === \"desconocida\") return `${e.queHacer}\\n${e.original}`;\n\treturn `${e.queHacer}${espera}`;\n}\n"]}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Búsqueda por FORMA sintáctica, no por texto.
|
|
3
|
+
*
|
|
4
|
+
* `grep "function foo"` encuentra la declaración, el comentario que la
|
|
5
|
+
* menciona y la cadena que la nombra en un mensaje de error: para `grep`, las
|
|
6
|
+
* tres líneas son iguales, texto que casa con el patrón. Esto camina el AST
|
|
7
|
+
* real de TypeScript, así que un comentario (trivia, no nodo) o una cadena
|
|
8
|
+
* (`StringLiteral`, un tipo de nodo que ninguno de nuestros patrones pide)
|
|
9
|
+
* nunca pueden colar como si fueran la declaración.
|
|
10
|
+
*
|
|
11
|
+
* Mismo compilador que ya usa `edicion/parseo.ts`: sin dependencias nuevas, y
|
|
12
|
+
* ya sabemos que acierta en sintaxis (no en tipos, que es justo lo que no
|
|
13
|
+
* hace falta para esto). Cubre `.ts/.tsx/.js/.jsx` y sus variantes de módulo;
|
|
14
|
+
* el resto de lenguajes de programación conocidos se declaran SIN COBERTURA
|
|
15
|
+
* en vez de callarse y devolver cero resultados, que es indistinguible de "no
|
|
16
|
+
* hay nada que encontrar" y por eso miente.
|
|
17
|
+
*/
|
|
18
|
+
import ts from "typescript";
|
|
19
|
+
export type TipoPatron = "funcion" | "clase" | "tipo" | "llamada" | "import" | "propiedad";
|
|
20
|
+
export interface Patron {
|
|
21
|
+
tipo: TipoPatron;
|
|
22
|
+
nombre: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* `null` = el patrón no tiene la forma `tipo:nombre` que entendemos.
|
|
26
|
+
*
|
|
27
|
+
* Se corta en el PRIMER `:` a propósito: `import:node:fs` tiene que dejar
|
|
28
|
+
* `nombre = "node:fs"` intacto, con su propio `:` de módulo interno de Node.
|
|
29
|
+
*/
|
|
30
|
+
export declare function parsearPatron(cadena: string): Patron | null;
|
|
31
|
+
export declare function extensionCubierta(ruta: string): boolean;
|
|
32
|
+
export declare function esOtroLenguajeConocido(ruta: string): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Todos los ficheros bajo `raiz` (o `[raiz]` si ya es un fichero).
|
|
35
|
+
*
|
|
36
|
+
* Sin `fd` ni glob: un recorrido a mano basta para lo que pide esta tool, y
|
|
37
|
+
* evita depender de un binario externo para algo que `readdirSync` ya resuelve.
|
|
38
|
+
* Se saltan los directorios ocultos y los de artefactos de build, igual que
|
|
39
|
+
* haría cualquier búsqueda de código real.
|
|
40
|
+
*/
|
|
41
|
+
export declare function listarFicheros(raiz: string): string[];
|
|
42
|
+
/** Todos los nodos de `fuente` que coinciden con `patron`, en orden de aparición. */
|
|
43
|
+
export declare function nodosCoincidentes(fuente: ts.SourceFile, patron: Patron): ts.Node[];
|
|
44
|
+
export interface Coincidencia {
|
|
45
|
+
ruta: string;
|
|
46
|
+
linea: number;
|
|
47
|
+
fragmento: string;
|
|
48
|
+
}
|
|
49
|
+
export interface ResultadoBusquedaEstructural {
|
|
50
|
+
coincidencias: Coincidencia[];
|
|
51
|
+
/** Ficheros de código en un lenguaje que este buscador no sabe leer. Nunca se disfraza de "sin resultados". */
|
|
52
|
+
noCubiertos: string[];
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* `null` = el patrón no se entendió (fallo de lectura, no "no hay nada").
|
|
56
|
+
*
|
|
57
|
+
* `raices` son rutas absolutas (ficheros o directorios); `cwd` solo se usa
|
|
58
|
+
* para dejar las rutas del resultado relativas y legibles.
|
|
59
|
+
*/
|
|
60
|
+
export declare function buscarEstructural(patronCadena: string, raices: string[], cwd: string): ResultadoBusquedaEstructural | null;
|
|
61
|
+
//# sourceMappingURL=buscar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buscar.d.ts","sourceRoot":"","sources":["../../../src/core/estructural/buscar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;AAsB3F,MAAM,WAAW,MAAM;IACtB,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAO3D;AAqDD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE5D;AAID;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAgCrD;AAkDD,sFAAqF;AACrF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,EAAE,CAAC,IAAI,EAAE,CAQlF;AAQD,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,4BAA4B;IAC5C,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,gHAA+G;IAC/G,WAAW,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAChC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EAAE,EAChB,GAAG,EAAE,MAAM,GACT,4BAA4B,GAAG,IAAI,CA2BrC","sourcesContent":["/**\n * Búsqueda por FORMA sintáctica, no por texto.\n *\n * `grep \"function foo\"` encuentra la declaración, el comentario que la\n * menciona y la cadena que la nombra en un mensaje de error: para `grep`, las\n * tres líneas son iguales, texto que casa con el patrón. Esto camina el AST\n * real de TypeScript, así que un comentario (trivia, no nodo) o una cadena\n * (`StringLiteral`, un tipo de nodo que ninguno de nuestros patrones pide)\n * nunca pueden colar como si fueran la declaración.\n *\n * Mismo compilador que ya usa `edicion/parseo.ts`: sin dependencias nuevas, y\n * ya sabemos que acierta en sintaxis (no en tipos, que es justo lo que no\n * hace falta para esto). Cubre `.ts/.tsx/.js/.jsx` y sus variantes de módulo;\n * el resto de lenguajes de programación conocidos se declaran SIN COBERTURA\n * en vez de callarse y devolver cero resultados, que es indistinguible de \"no\n * hay nada que encontrar\" y por eso miente.\n */\n\nimport { readdirSync, readFileSync, statSync } from \"node:fs\";\nimport { join, relative } from \"node:path\";\nimport ts from \"typescript\";\n\nexport type TipoPatron = \"funcion\" | \"clase\" | \"tipo\" | \"llamada\" | \"import\" | \"propiedad\";\n\n/** Alias en español e inglés para el mismo tipo de patrón. */\nconst ALIAS_TIPO: Record<string, TipoPatron> = {\n\tfuncion: \"funcion\",\n\tfunction: \"funcion\",\n\tfunc: \"funcion\",\n\tclase: \"clase\",\n\tclass: \"clase\",\n\ttipo: \"tipo\",\n\ttype: \"tipo\",\n\tinterfaz: \"tipo\",\n\tinterface: \"tipo\",\n\tllamada: \"llamada\",\n\tcall: \"llamada\",\n\timport: \"import\",\n\timportacion: \"import\",\n\tpropiedad: \"propiedad\",\n\tproperty: \"propiedad\",\n\tprop: \"propiedad\",\n};\n\nexport interface Patron {\n\ttipo: TipoPatron;\n\tnombre: string;\n}\n\n/**\n * `null` = el patrón no tiene la forma `tipo:nombre` que entendemos.\n *\n * Se corta en el PRIMER `:` a propósito: `import:node:fs` tiene que dejar\n * `nombre = \"node:fs\"` intacto, con su propio `:` de módulo interno de Node.\n */\nexport function parsearPatron(cadena: string): Patron | null {\n\tconst separador = cadena.indexOf(\":\");\n\tif (separador === -1) return null;\n\tconst tipo = ALIAS_TIPO[cadena.slice(0, separador).trim().toLowerCase()];\n\tconst nombre = cadena.slice(separador + 1).trim();\n\tif (!tipo || nombre === \"\") return null;\n\treturn { tipo, nombre };\n}\n\n/** Lo que este buscador sabe LEER de verdad (parsea con el compilador de TS). */\nconst EXTENSIONES_CUBIERTAS = new Set([\".ts\", \".tsx\", \".js\", \".jsx\", \".mts\", \".cts\", \".mjs\", \".cjs\"]);\n\n/**\n * Lenguajes de programación que reconocemos pero que este buscador NO sabe\n * leer. Un `.py`, un `.go`, un componente `.vue`... tienen que salir como \"sin\n * cobertura\", no como \"cero coincidencias\": lo segundo es indistinguible de\n * haber buscado de verdad y no encontrar nada.\n *\n * Los ficheros que no son código en absoluto (`.json`, `.md`, imágenes...) no\n * entran aquí: nunca pretendimos cubrirlos, así que no hay nada que avisar.\n */\nconst EXTENSIONES_OTRO_LENGUAJE = new Set([\n\t\".py\",\n\t\".go\",\n\t\".rs\",\n\t\".java\",\n\t\".rb\",\n\t\".php\",\n\t\".c\",\n\t\".h\",\n\t\".cpp\",\n\t\".hpp\",\n\t\".cc\",\n\t\".cs\",\n\t\".swift\",\n\t\".kt\",\n\t\".kts\",\n\t\".scala\",\n\t\".sh\",\n\t\".bash\",\n\t\".zsh\",\n\t\".lua\",\n\t\".pl\",\n\t\".ex\",\n\t\".exs\",\n\t\".erl\",\n\t\".hs\",\n\t\".clj\",\n\t\".dart\",\n\t\".m\",\n\t\".mm\",\n\t\".vue\",\n\t\".svelte\",\n]);\n\nfunction extensionDe(ruta: string): string {\n\tconst punto = ruta.lastIndexOf(\".\");\n\treturn punto === -1 ? \"\" : ruta.slice(punto).toLowerCase();\n}\n\nexport function extensionCubierta(ruta: string): boolean {\n\treturn EXTENSIONES_CUBIERTAS.has(extensionDe(ruta));\n}\n\nexport function esOtroLenguajeConocido(ruta: string): boolean {\n\treturn EXTENSIONES_OTRO_LENGUAJE.has(extensionDe(ruta));\n}\n\nconst DIRS_IGNORADOS = new Set([\"node_modules\", \"dist\", \"build\", \"out\", \"coverage\", \".next\", \".turbo\", \".cache\"]);\n\n/**\n * Todos los ficheros bajo `raiz` (o `[raiz]` si ya es un fichero).\n *\n * Sin `fd` ni glob: un recorrido a mano basta para lo que pide esta tool, y\n * evita depender de un binario externo para algo que `readdirSync` ya resuelve.\n * Se saltan los directorios ocultos y los de artefactos de build, igual que\n * haría cualquier búsqueda de código real.\n */\nexport function listarFicheros(raiz: string): string[] {\n\tlet info: ReturnType<typeof statSync>;\n\ttry {\n\t\tinfo = statSync(raiz);\n\t} catch {\n\t\treturn [];\n\t}\n\tif (info.isFile()) return [raiz];\n\tif (!info.isDirectory()) return [];\n\n\tconst resultado: string[] = [];\n\tconst pila = [raiz];\n\twhile (pila.length > 0) {\n\t\tconst dir = pila.pop() as string;\n\t\tlet entradas: import(\"node:fs\").Dirent[];\n\t\ttry {\n\t\t\tentradas = readdirSync(dir, { withFileTypes: true });\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const entrada of entradas) {\n\t\t\tif (entrada.name.startsWith(\".\")) continue; // .git, .cache, etc.\n\t\t\tconst ruta = join(dir, entrada.name);\n\t\t\tif (entrada.isSymbolicLink()) continue; // evita ciclos por symlink\n\t\t\tif (entrada.isDirectory()) {\n\t\t\t\tif (!DIRS_IGNORADOS.has(entrada.name)) pila.push(ruta);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (entrada.isFile()) resultado.push(ruta);\n\t\t}\n\t}\n\treturn resultado;\n}\n\nfunction nombreDeCallee(expr: ts.Expression): string | null {\n\tif (ts.isIdentifier(expr)) return expr.text;\n\tif (ts.isPropertyAccessExpression(expr) && ts.isIdentifier(expr.name)) return expr.name.text;\n\treturn null;\n}\n\nfunction nombreDePropiedad(nombre: ts.PropertyName): string | null {\n\tif (ts.isIdentifier(nombre) || ts.isPrivateIdentifier(nombre)) return nombre.text;\n\tif (ts.isStringLiteral(nombre)) return nombre.text;\n\treturn null;\n}\n\n/** ¿Este nodo del AST es la declaración/uso que pide el patrón? */\nfunction coincideNodo(nodo: ts.Node, patron: Patron): boolean {\n\tswitch (patron.tipo) {\n\t\tcase \"funcion\":\n\t\t\tif (ts.isFunctionDeclaration(nodo)) return nodo.name?.text === patron.nombre;\n\t\t\tif (ts.isVariableDeclaration(nodo) && ts.isIdentifier(nodo.name) && nodo.initializer) {\n\t\t\t\treturn (\n\t\t\t\t\tnodo.name.text === patron.nombre &&\n\t\t\t\t\t(ts.isArrowFunction(nodo.initializer) || ts.isFunctionExpression(nodo.initializer))\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (ts.isMethodDeclaration(nodo)) return nombreDePropiedad(nodo.name) === patron.nombre;\n\t\t\treturn false;\n\t\tcase \"clase\":\n\t\t\treturn ts.isClassDeclaration(nodo) && nodo.name?.text === patron.nombre;\n\t\tcase \"tipo\":\n\t\t\tif (ts.isTypeAliasDeclaration(nodo)) return nodo.name.text === patron.nombre;\n\t\t\tif (ts.isInterfaceDeclaration(nodo)) return nodo.name.text === patron.nombre;\n\t\t\treturn false;\n\t\tcase \"llamada\":\n\t\t\treturn ts.isCallExpression(nodo) && nombreDeCallee(nodo.expression) === patron.nombre;\n\t\tcase \"import\":\n\t\t\treturn (\n\t\t\t\tts.isImportDeclaration(nodo) &&\n\t\t\t\tts.isStringLiteral(nodo.moduleSpecifier) &&\n\t\t\t\tnodo.moduleSpecifier.text === patron.nombre\n\t\t\t);\n\t\tcase \"propiedad\":\n\t\t\tif (ts.isPropertyAssignment(nodo) || ts.isPropertySignature(nodo) || ts.isPropertyDeclaration(nodo)) {\n\t\t\t\treturn nombreDePropiedad(nodo.name) === patron.nombre;\n\t\t\t}\n\t\t\tif (ts.isShorthandPropertyAssignment(nodo)) return nodo.name.text === patron.nombre;\n\t\t\treturn false;\n\t}\n}\n\n/** Todos los nodos de `fuente` que coinciden con `patron`, en orden de aparición. */\nexport function nodosCoincidentes(fuente: ts.SourceFile, patron: Patron): ts.Node[] {\n\tconst resultado: ts.Node[] = [];\n\tconst visitar = (nodo: ts.Node): void => {\n\t\tif (coincideNodo(nodo, patron)) resultado.push(nodo);\n\t\tts.forEachChild(nodo, visitar);\n\t};\n\tvisitar(fuente);\n\treturn resultado;\n}\n\nfunction lineaYFragmento(fuente: ts.SourceFile, posicion: number): { linea: number; fragmento: string } {\n\tconst { line } = fuente.getLineAndCharacterOfPosition(posicion);\n\tconst texto = fuente.text.split(\"\\n\")[line] ?? \"\";\n\treturn { linea: line + 1, fragmento: texto.trim().slice(0, 200) };\n}\n\nexport interface Coincidencia {\n\truta: string;\n\tlinea: number;\n\tfragmento: string;\n}\n\nexport interface ResultadoBusquedaEstructural {\n\tcoincidencias: Coincidencia[];\n\t/** Ficheros de código en un lenguaje que este buscador no sabe leer. Nunca se disfraza de \"sin resultados\". */\n\tnoCubiertos: string[];\n}\n\n/**\n * `null` = el patrón no se entendió (fallo de lectura, no \"no hay nada\").\n *\n * `raices` son rutas absolutas (ficheros o directorios); `cwd` solo se usa\n * para dejar las rutas del resultado relativas y legibles.\n */\nexport function buscarEstructural(\n\tpatronCadena: string,\n\traices: string[],\n\tcwd: string,\n): ResultadoBusquedaEstructural | null {\n\tconst patron = parsearPatron(patronCadena);\n\tif (!patron) return null;\n\n\tconst coincidencias: Coincidencia[] = [];\n\tconst noCubiertos = new Set<string>();\n\tfor (const raiz of raices) {\n\t\tfor (const ruta of listarFicheros(raiz)) {\n\t\t\tconst relativa = relative(cwd, ruta) || ruta;\n\t\t\tif (esOtroLenguajeConocido(ruta)) {\n\t\t\t\tnoCubiertos.add(relativa);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!extensionCubierta(ruta)) continue; // no es código: ni cobertura ni aviso\n\t\t\tlet codigo: string;\n\t\t\ttry {\n\t\t\t\tcodigo = readFileSync(ruta, \"utf-8\");\n\t\t\t} catch {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst fuente = ts.createSourceFile(ruta, codigo, ts.ScriptTarget.Latest, false);\n\t\t\tfor (const nodo of nodosCoincidentes(fuente, patron)) {\n\t\t\t\tcoincidencias.push({ ruta: relativa, ...lineaYFragmento(fuente, nodo.getStart(fuente)) });\n\t\t\t}\n\t\t}\n\t}\n\treturn { coincidencias, noCubiertos: [...noCubiertos].sort() };\n}\n"]}
|