@hoilab/ada-cli 0.84.21 → 0.85.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +49 -2
- package/README.es.md +174 -0
- package/README.md +203 -658
- 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/args.d.ts +3 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +11 -0
- package/dist/cli/args.js.map +1 -1
- 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/file-processor.d.ts.map +1 -1
- package/dist/cli/file-processor.js +2 -1
- package/dist/cli/file-processor.js.map +1 -1
- 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/home-screen.d.ts.map +1 -1
- package/dist/cli/home-screen.js +2 -2
- package/dist/cli/home-screen.js.map +1 -1
- 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/startup-ui.d.ts.map +1 -1
- package/dist/cli/startup-ui.js +9 -3
- package/dist/cli/startup-ui.js.map +1 -1
- 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 +3 -2
- 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 +85 -7
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +862 -78
- 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 +21 -8
- 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/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js +3 -0
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +4 -3
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +41 -32
- package/dist/core/compaction/compaction.js.map +1 -1
- 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/defaults.d.ts +1 -0
- package/dist/core/defaults.d.ts.map +1 -1
- package/dist/core/defaults.js +9 -0
- package/dist/core/defaults.js.map +1 -1
- 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/engine-personality.d.ts +12 -0
- package/dist/core/engine-personality.d.ts.map +1 -0
- package/dist/core/engine-personality.js +53 -0
- package/dist/core/engine-personality.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/index.d.ts +1 -1
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +21 -6
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/types.d.ts +23 -4
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.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/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +2 -1
- package/dist/core/keybindings.js.map +1 -1
- 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 +56 -0
- package/dist/core/memory-engine/audit-export.d.ts.map +1 -0
- package/dist/core/memory-engine/audit-export.js +100 -0
- package/dist/core/memory-engine/audit-export.js.map +1 -0
- 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 +32 -50
- package/dist/core/memory-engine/audit.js.map +1 -1
- package/dist/core/memory-engine/engine.d.ts +21 -4
- package/dist/core/memory-engine/engine.d.ts.map +1 -1
- package/dist/core/memory-engine/engine.js +219 -55
- package/dist/core/memory-engine/engine.js.map +1 -1
- package/dist/core/memory-engine/inverted-index.d.ts.map +1 -1
- package/dist/core/memory-engine/inverted-index.js +67 -10
- package/dist/core/memory-engine/inverted-index.js.map +1 -1
- package/dist/core/memory-engine/keychain.d.ts.map +1 -1
- package/dist/core/memory-engine/keychain.js +1 -6
- package/dist/core/memory-engine/keychain.js.map +1 -1
- package/dist/core/memory-engine/observation-store.d.ts +0 -1
- package/dist/core/memory-engine/observation-store.d.ts.map +1 -1
- package/dist/core/memory-engine/observation-store.js +40 -12
- 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/scanner.d.ts.map +1 -1
- package/dist/core/memory-engine/scanner.js +25 -5
- package/dist/core/memory-engine/scanner.js.map +1 -1
- package/dist/core/memory-engine/security.d.ts.map +1 -1
- package/dist/core/memory-engine/security.js +131 -23
- package/dist/core/memory-engine/security.js.map +1 -1
- package/dist/core/memory-engine/session-indexer.d.ts.map +1 -1
- package/dist/core/memory-engine/session-indexer.js +8 -2
- package/dist/core/memory-engine/session-indexer.js.map +1 -1
- package/dist/core/memory-engine/tools.d.ts +2 -2
- package/dist/core/memory-engine/tools.d.ts.map +1 -1
- package/dist/core/memory-engine/tools.js +41 -8
- 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/memory-engine/vault.d.ts.map +1 -1
- package/dist/core/memory-engine/vault.js +2 -2
- package/dist/core/memory-engine/vault.js.map +1 -1
- package/dist/core/model-config.d.ts.map +1 -1
- package/dist/core/model-config.js +2 -1
- package/dist/core/model-config.js.map +1 -1
- package/dist/core/model-resolver.d.ts +1 -0
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +19 -7
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/models-store.d.ts.map +1 -1
- package/dist/core/models-store.js +2 -1
- package/dist/core/models-store.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/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +11 -6
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/pi-manifest.d.ts.map +1 -1
- package/dist/core/pi-manifest.js +2 -1
- package/dist/core/pi-manifest.js.map +1 -1
- 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/prompt-optimizer.d.ts +53 -0
- package/dist/core/prompt-optimizer.d.ts.map +1 -0
- package/dist/core/prompt-optimizer.js +138 -0
- package/dist/core/prompt-optimizer.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/remote-catalog-provider.d.ts.map +1 -1
- package/dist/core/remote-catalog-provider.js +2 -1
- package/dist/core/remote-catalog-provider.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 +58 -0
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +326 -8
- 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/sdk.d.ts +8 -0
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +11 -1
- package/dist/core/sdk.js.map +1 -1
- 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/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +2 -1
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-diagnostics.d.ts +9 -0
- package/dist/core/settings-diagnostics.d.ts.map +1 -0
- package/dist/core/settings-diagnostics.js +21 -0
- package/dist/core/settings-diagnostics.js.map +1 -0
- package/dist/core/settings-manager.d.ts +156 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +255 -10
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +51 -33
- package/dist/core/skills.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +2 -1
- 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 -12
- package/dist/core/tools/edit-diff.d.ts.map +1 -1
- package/dist/core/tools/edit-diff.js +234 -12
- 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 +28 -5
- 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/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +2 -2
- package/dist/core/tools/index.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/project-memory-tool.d.ts.map +1 -1
- package/dist/core/tools/project-memory-tool.js +4 -1
- package/dist/core/tools/project-memory-tool.js.map +1 -1
- 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/trust-manager.d.ts.map +1 -1
- package/dist/core/trust-manager.js +2 -1
- package/dist/core/trust-manager.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 +88 -0
- package/dist/core/workflows/agent-runner.d.ts.map +1 -0
- package/dist/core/workflows/agent-runner.js +312 -0
- package/dist/core/workflows/agent-runner.js.map +1 -0
- package/dist/core/workflows/builtins.d.ts +41 -0
- package/dist/core/workflows/builtins.d.ts.map +1 -0
- package/dist/core/workflows/builtins.js +283 -0
- package/dist/core/workflows/builtins.js.map +1 -0
- 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 +151 -0
- package/dist/core/workflows/goal-engine/engine.d.ts.map +1 -0
- package/dist/core/workflows/goal-engine/engine.js +503 -0
- package/dist/core/workflows/goal-engine/engine.js.map +1 -0
- package/dist/core/workflows/goal-engine/errors.d.ts +7 -0
- package/dist/core/workflows/goal-engine/errors.d.ts.map +1 -0
- package/dist/core/workflows/goal-engine/errors.js +9 -0
- package/dist/core/workflows/goal-engine/errors.js.map +1 -0
- package/dist/core/workflows/goal-engine/index.d.ts +13 -0
- package/dist/core/workflows/goal-engine/index.d.ts.map +1 -0
- package/dist/core/workflows/goal-engine/index.js +8 -0
- package/dist/core/workflows/goal-engine/index.js.map +1 -0
- package/dist/core/workflows/goal-engine/persistence.d.ts +31 -0
- package/dist/core/workflows/goal-engine/persistence.d.ts.map +1 -0
- package/dist/core/workflows/goal-engine/persistence.js +145 -0
- package/dist/core/workflows/goal-engine/persistence.js.map +1 -0
- package/dist/core/workflows/goal-engine/prompts.d.ts +37 -0
- package/dist/core/workflows/goal-engine/prompts.d.ts.map +1 -0
- package/dist/core/workflows/goal-engine/prompts.js +131 -0
- package/dist/core/workflows/goal-engine/prompts.js.map +1 -0
- package/dist/core/workflows/goal-engine/state.d.ts +41 -0
- package/dist/core/workflows/goal-engine/state.d.ts.map +1 -0
- package/dist/core/workflows/goal-engine/state.js +397 -0
- package/dist/core/workflows/goal-engine/state.js.map +1 -0
- package/dist/core/workflows/goal-engine/tools.d.ts +31 -0
- package/dist/core/workflows/goal-engine/tools.d.ts.map +1 -0
- package/dist/core/workflows/goal-engine/tools.js +211 -0
- package/dist/core/workflows/goal-engine/tools.js.map +1 -0
- package/dist/core/workflows/goal-engine/types.d.ts +286 -0
- package/dist/core/workflows/goal-engine/types.d.ts.map +1 -0
- package/dist/core/workflows/goal-engine/types.js +17 -0
- package/dist/core/workflows/goal-engine/types.js.map +1 -0
- package/dist/core/workflows/goal-engine/worktree-fingerprint.d.ts +23 -0
- package/dist/core/workflows/goal-engine/worktree-fingerprint.d.ts.map +1 -0
- package/dist/core/workflows/goal-engine/worktree-fingerprint.js +72 -0
- package/dist/core/workflows/goal-engine/worktree-fingerprint.js.map +1 -0
- package/dist/core/workflows/graph-sync.d.ts +67 -0
- package/dist/core/workflows/graph-sync.d.ts.map +1 -0
- package/dist/core/workflows/graph-sync.js +188 -0
- package/dist/core/workflows/graph-sync.js.map +1 -0
- package/dist/core/workflows/graph.d.ts +143 -0
- package/dist/core/workflows/graph.d.ts.map +1 -0
- package/dist/core/workflows/graph.js +319 -0
- package/dist/core/workflows/graph.js.map +1 -0
- package/dist/core/workflows/index.d.ts +26 -0
- package/dist/core/workflows/index.d.ts.map +1 -0
- package/dist/core/workflows/index.js +18 -0
- package/dist/core/workflows/index.js.map +1 -0
- package/dist/core/workflows/journal.d.ts +68 -0
- package/dist/core/workflows/journal.d.ts.map +1 -0
- package/dist/core/workflows/journal.js +83 -0
- package/dist/core/workflows/journal.js.map +1 -0
- package/dist/core/workflows/manager.d.ts +122 -0
- package/dist/core/workflows/manager.d.ts.map +1 -0
- package/dist/core/workflows/manager.js +351 -0
- package/dist/core/workflows/manager.js.map +1 -0
- package/dist/core/workflows/resolve-script.d.ts +35 -0
- package/dist/core/workflows/resolve-script.d.ts.map +1 -0
- package/dist/core/workflows/resolve-script.js +66 -0
- package/dist/core/workflows/resolve-script.js.map +1 -0
- package/dist/core/workflows/runtime.d.ts +62 -0
- package/dist/core/workflows/runtime.d.ts.map +1 -0
- package/dist/core/workflows/runtime.js +380 -0
- package/dist/core/workflows/runtime.js.map +1 -0
- 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/shared-store.d.ts +31 -0
- package/dist/core/workflows/shared-store.d.ts.map +1 -0
- package/dist/core/workflows/shared-store.js +80 -0
- package/dist/core/workflows/shared-store.js.map +1 -0
- package/dist/core/workflows/subagent-host.d.ts +50 -0
- package/dist/core/workflows/subagent-host.d.ts.map +1 -0
- package/dist/core/workflows/subagent-host.js +225 -0
- package/dist/core/workflows/subagent-host.js.map +1 -0
- package/dist/core/workflows/tool-workflow.d.ts +22 -0
- package/dist/core/workflows/tool-workflow.d.ts.map +1 -0
- package/dist/core/workflows/tool-workflow.js +120 -0
- package/dist/core/workflows/tool-workflow.js.map +1 -0
- package/dist/core/workflows/types.d.ts +191 -0
- package/dist/core/workflows/types.d.ts.map +1 -0
- package/dist/core/workflows/types.js +26 -0
- package/dist/core/workflows/types.js.map +1 -0
- package/dist/core/workflows/worktree.d.ts +42 -0
- package/dist/core/workflows/worktree.d.ts.map +1 -0
- package/dist/core/workflows/worktree.js +107 -0
- package/dist/core/workflows/worktree.js.map +1 -0
- package/dist/extensions/llama/index.d.ts.map +1 -1
- package/dist/extensions/llama/index.js +2 -0
- package/dist/extensions/llama/index.js.map +1 -1
- package/dist/extensions/llama/provider.d.ts.map +1 -1
- package/dist/extensions/llama/provider.js +6 -2
- package/dist/extensions/llama/provider.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 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -13
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts +4 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +26 -15
- package/dist/main.js.map +1 -1
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +4 -3
- package/dist/migrations.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/home-screen.d.ts.map +1 -1
- package/dist/modes/interactive/components/home-screen.js +2 -2
- package/dist/modes/interactive/components/home-screen.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts +9 -3
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +56 -12
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/prompt-optimization.d.ts +16 -0
- package/dist/modes/interactive/components/prompt-optimization.d.ts.map +1 -0
- package/dist/modes/interactive/components/prompt-optimization.js +46 -0
- package/dist/modes/interactive/components/prompt-optimization.js.map +1 -0
- package/dist/modes/interactive/components/settings-selector.d.ts +19 -2
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +180 -56
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-submenu.d.ts +72 -0
- package/dist/modes/interactive/components/settings-submenu.d.ts.map +1 -0
- package/dist/modes/interactive/components/settings-submenu.js +165 -0
- package/dist/modes/interactive/components/settings-submenu.js.map +1 -0
- package/dist/modes/interactive/components/thinking-selector.d.ts +15 -3
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js +74 -17
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/external-editor.d.ts.map +1 -1
- package/dist/modes/interactive/external-editor.js +2 -1
- package/dist/modes/interactive/external-editor.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +21 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +709 -75
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +4 -3
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/json-event.d.ts +16 -13
- package/dist/modes/json-event.d.ts.map +1 -1
- package/dist/modes/json-event.js +20 -6
- package/dist/modes/json-event.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/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +173 -0
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +29 -0
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.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/ada-engine/SKILL.md +153 -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/frontmatter.d.ts.map +1 -1
- package/dist/utils/frontmatter.js +2 -1
- package/dist/utils/frontmatter.js.map +1 -1
- package/dist/utils/management-http.d.ts +5 -3
- package/dist/utils/management-http.d.ts.map +1 -1
- package/dist/utils/management-http.js +14 -10
- package/dist/utils/management-http.js.map +1 -1
- 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/text.d.ts +8 -0
- package/dist/utils/text.d.ts.map +1 -0
- package/dist/utils/text.js +9 -0
- package/dist/utils/text.js.map +1 -0
- 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 +25 -10
- package/docs/compliance.md +241 -0
- package/docs/containerization.md +24 -24
- package/docs/custom-provider.md +15 -12
- package/docs/development.md +47 -10
- package/docs/docs.json +14 -2
- package/docs/environment-variables.md +20 -17
- package/docs/extensions.md +62 -51
- package/docs/index.md +15 -21
- package/docs/json.md +10 -5
- package/docs/keybindings.md +5 -5
- package/docs/llama-cpp.md +9 -7
- package/docs/models.md +18 -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 +21 -15
- 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 +47 -22
- package/docs/shell-aliases.md +2 -2
- package/docs/skills.md +14 -13
- 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/extensions/border-status-editor.ts +1 -1
- package/examples/extensions/git-checkpoint.ts +2 -2
- package/examples/extensions/notify.ts +3 -1
- package/examples/extensions/subagent/README.md +1 -1
- package/examples/extensions/subagent/index.ts +6 -1
- package/examples/extensions/titlebar-spinner.ts +1 -1
- package/examples/rpc-extension-ui.ts +1 -1
- package/examples/sdk/06-extensions.ts +1 -1
- package/examples/sdk/12-full-control.ts +9 -0
- package/examples/sdk/README.md +1 -1
- package/npm-shrinkwrap.json +35 -261
- package/package.json +9 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reparacion.d.ts","sourceRoot":"","sources":["../../../src/core/limpieza/reparacion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAAe,KAAK,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAGvF,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE5E,mGAAkG;AAClG,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,SAAS,WAAW,EAAE,GAAG,eAAe,EAAE,CAWzF;AAyBD,MAAM,WAAW,YAAY;IAC5B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,aAAa,EAAE,WAAW,EAAE,CAAC;IAC7B,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,QAAQ,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClE;AAED,2GAAuG;AACvG,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAO3E;AAED,MAAM,WAAW,mBAAmB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB,EAAE,MAAM,CAAC;IAC9B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,MAAM,EAAE,WAAW,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,qBAAqB,CAAC;IACnC,+GAA8G;IAC9G,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAuHD;;;;;GAKG;AACH,wBAAsB,eAAe,CACpC,IAAI,EAAE,YAAY,EAClB,QAAQ,EAAE,kBAAkB,GAC1B,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAqBhC;AAED,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,mBAAmB,GAAG,WAAW,GAAG,mBAAmB,CAAC;AAE/F,MAAM,WAAW,gBAAgB;IAChC,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClE,qBAAqB,EAAE,MAAM,CAAC;IAC9B,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,YAAY,EAAE,mBAAmB,EAAE,CAAC;IACpC,mBAAmB,EAAE,MAAM,CAAC;CAC5B;AAED,wFAAuF;AACvF,wBAAsB,eAAe,CACpC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,IAAI,CAAC,kBAAkB,EAAE,KAAK,CAAC,GAAG;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAC9D,OAAO,CAAC,gBAAgB,CAAC,CAqD3B","sourcesContent":["/**\n * Orquestación de `ada-cli cleanse`: agrupa diagnósticos por fichero (diez\n * problemas del mismo fichero en un subagente es UNA lectura, no diez),\n * lanza un subagente por fichero con `AgentRunner` bajo un tope de\n * concurrencia y, tras cada arreglo, RE-EJECUTA todos los comprobadores de\n * \"fichero\" del proyecto (no solo el que generó el diagnóstico original —\n * un arreglo de lint puede romper el typecheck del mismo fichero).\n *\n * Un arreglo se acepta solo si el diagnóstico original desapareció Y no\n * apareció ninguno nuevo en ese mismo fichero. La comparación es por firma\n * (comprobador+regla+mensaje, no por línea) porque un arreglo real desplaza\n * líneas. Si no se acepta, el fichero se revierte al contenido que tenía\n * antes del subagente — \"rechazar\" un arreglo que no se deshace no sería\n * rechazarlo, sería solo decirlo.\n */\n\nimport { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { AgentRunner, type CreateSubagentSession } from \"../workflows/agent-runner.ts\";\nimport { createLimiter } from \"../workflows/runtime.ts\";\nimport { detectarComprobadores, ejecutarComprobadores, ejecutarComprobadoresPorId } from \"./comprobadores.ts\";\nimport type { Comprobador, Diagnostico, GrupoPorFichero } from \"./tipos.ts\";\n\n/** Agrupa diagnósticos por fichero; los de proyecto (`ruta` undefined) forman su propio grupo. */\nexport function agruparPorFichero(diagnosticos: readonly Diagnostico[]): GrupoPorFichero[] {\n\tconst grupos = new Map<string, Diagnostico[]>();\n\tfor (const d of diagnosticos) {\n\t\tconst clave = d.ruta ?? \"\";\n\t\tconst existente = grupos.get(clave);\n\t\tif (existente) existente.push(d);\n\t\telse grupos.set(clave, [d]);\n\t}\n\treturn [...grupos.entries()]\n\t\t.map(([ruta, diags]) => ({ ruta: ruta || undefined, diagnosticos: diags }))\n\t\t.sort((a, b) => (a.ruta ?? \"\").localeCompare(b.ruta ?? \"\"));\n}\n\n/** Identidad de un diagnóstico que sobrevive a que un arreglo desplace líneas. */\nfunction firma(d: Diagnostico): string {\n\treturn `${d.comprobador}::${d.regla ?? \"\"}::${d.mensaje}`;\n}\n\n/**\n * Cuenta cuántas veces aparece cada firma — MULTISET, no Set.\n *\n * Dos diagnósticos del mismo fichero con la misma regla y el mismo mensaje\n * (p.ej. la misma regla de estilo disparándose en dos líneas distintas)\n * tienen la MISMA firma. Un `Set` los habría colapsado en uno, así que un\n * arreglo que soluciona los dos habría contado solo \"1 de 2 resueltos\" y se\n * habría rechazado y revertido un arreglo perfectamente bueno.\n */\nfunction contarFirmas(diagnosticos: readonly Diagnostico[]): Map<string, number> {\n\tconst conteo = new Map<string, number>();\n\tfor (const d of diagnosticos) {\n\t\tconst f = firma(d);\n\t\tconteo.set(f, (conteo.get(f) ?? 0) + 1);\n\t}\n\treturn conteo;\n}\n\nexport interface PlanLimpieza {\n\tmirado: string[];\n\tcomprobadores: Comprobador[];\n\tdiagnosticos: Diagnostico[];\n\tgrupos: GrupoPorFichero[];\n\tfallidos: Array<{ id: string; etiqueta: string; motivo: string }>;\n}\n\n/** Detecta comprobadores y los ejecuta una vez — el plan que `--dry-run` enseña sin tocar nada más. */\nexport async function planificarLimpieza(cwd: string): Promise<PlanLimpieza> {\n\tconst { comprobadores, mirado } = detectarComprobadores(cwd);\n\tif (comprobadores.length === 0) {\n\t\treturn { mirado, comprobadores, diagnosticos: [], grupos: [], fallidos: [] };\n\t}\n\tconst { diagnosticos, fallidos } = await ejecutarComprobadores(comprobadores);\n\treturn { mirado, comprobadores, diagnosticos, grupos: agruparPorFichero(diagnosticos), fallidos };\n}\n\nexport interface ResultadoReparacion {\n\truta?: string;\n\taceptado: boolean;\n\tmotivo: string;\n\tdiagnosticosResueltos: number;\n\tdiagnosticosRestantes: number;\n\tnuevos: Diagnostico[];\n}\n\nexport interface OpcionesReparacion {\n\tcwd: string;\n\tagentDir: string;\n\tcrearSesion: CreateSubagentSession;\n\t/** \"provider/model\" explícito; si falta se usa `tier:cheap` (arreglar un lint no necesita el modelo caro). */\n\tmodeloSpec?: string;\n\tconcurrencia?: number;\n\tagentTimeoutMs?: number | null;\n\tlog?: (linea: string) => void;\n}\n\nasync function repararGrupo(\n\tgrupo: GrupoPorFichero,\n\tplan: PlanLimpieza,\n\topciones: OpcionesReparacion,\n\trunner: AgentRunner,\n\tlog: (linea: string) => void,\n): Promise<ResultadoReparacion> {\n\tconst rutaAbsoluta = grupo.ruta ? join(opciones.cwd, grupo.ruta) : undefined;\n\tconst previo = rutaAbsoluta && existsSync(rutaAbsoluta) ? readFileSync(rutaAbsoluta, \"utf-8\") : undefined;\n\t// Verificar con TODOS los comprobadores de \"fichero\" del plan, no solo el\n\t// que originó el diagnóstico: un arreglo de lint puede romper el\n\t// typecheck del mismo fichero, y si solo re-ejecutásemos lint ese error\n\t// nuevo no aparecería nunca — \"limpio\" mentiría. Los de \"proyecto\" (un\n\t// test runner) no llevan `ruta`, así que re-ejecutarlos aquí no cambiaría\n\t// `enEsteFichero`; seguimos restringiéndolos a los que ya disparó este\n\t// grupo para no pagar una suite de test entera por cada fichero.\n\tconst idsComprobadores = grupo.ruta\n\t\t? new Set(plan.comprobadores.filter((c) => c.alcance === \"fichero\").map((c) => c.id))\n\t\t: new Set(grupo.diagnosticos.map((d) => d.comprobador));\n\tconst etiqueta = grupo.ruta ?? \"<proyecto>\";\n\n\tconst listado = grupo.diagnosticos\n\t\t.map((d) => `- ${d.linea ? `línea ${d.linea}: ` : \"\"}[${d.regla ?? d.comprobador}] ${d.mensaje}`)\n\t\t.join(\"\\n\");\n\tconst prompt = grupo.ruta\n\t\t? `Arregla estos diagnósticos de \\`${grupo.ruta}\\` y NADA MÁS — no toques ningún otro fichero:\\n${listado}`\n\t\t: `Arregla estos diagnósticos de proyecto (sin fichero concreto asociado):\\n${listado}`;\n\n\tlog(`[start] ${etiqueta} (${grupo.diagnosticos.length} diagnóstico${grupo.diagnosticos.length === 1 ? \"\" : \"s\"})`);\n\n\tconst revertir = () => {\n\t\tif (previo !== undefined && rutaAbsoluta) writeFileSync(rutaAbsoluta, previo);\n\t};\n\n\ttry {\n\t\tawait runner.run({\n\t\t\tprompt,\n\t\t\tlabel: `cleanse:${etiqueta}`,\n\t\t\tmodel: opciones.modeloSpec,\n\t\t\ttier: opciones.modeloSpec ? undefined : \"cheap\",\n\t\t\tcwd: opciones.cwd,\n\t\t\tisolation: \"none\",\n\t\t});\n\t} catch (error) {\n\t\tconst motivo = `el subagente falló: ${error instanceof Error ? error.message : String(error)}`;\n\t\trevertir();\n\t\tlog(`[fail] ${etiqueta}: ${motivo}`);\n\t\treturn {\n\t\t\truta: grupo.ruta,\n\t\t\taceptado: false,\n\t\t\tmotivo,\n\t\t\tdiagnosticosResueltos: 0,\n\t\t\tdiagnosticosRestantes: grupo.diagnosticos.length,\n\t\t\tnuevos: [],\n\t\t};\n\t}\n\n\tconst { diagnosticos: trasArreglo } = await ejecutarComprobadoresPorId(plan.comprobadores, idsComprobadores);\n\tconst enEsteFichero = trasArreglo.filter((d) => d.ruta === grupo.ruta);\n\n\t// Comparación por MULTISET (no por Set): dos diagnósticos originales con la\n\t// misma firma cuentan como dos, no como uno. Se consume una firma restante\n\t// por cada original que la siga teniendo; lo que sobra en `restantes` tras\n\t// consumir todo lo original son diagnósticos NUEVOS.\n\tconst restantes = contarFirmas(enEsteFichero);\n\tlet resueltosCount = 0;\n\tfor (const d of grupo.diagnosticos) {\n\t\tconst f = firma(d);\n\t\tconst quedan = restantes.get(f) ?? 0;\n\t\tif (quedan > 0) restantes.set(f, quedan - 1);\n\t\telse resueltosCount++;\n\t}\n\tconst disponiblesOriginal = contarFirmas(grupo.diagnosticos);\n\tconst nuevos: Diagnostico[] = [];\n\tfor (const d of enEsteFichero) {\n\t\tconst f = firma(d);\n\t\tconst disponibles = disponiblesOriginal.get(f) ?? 0;\n\t\tif (disponibles > 0) disponiblesOriginal.set(f, disponibles - 1);\n\t\telse nuevos.push(d);\n\t}\n\tconst aceptado = resueltosCount === grupo.diagnosticos.length && nuevos.length === 0;\n\n\tif (!aceptado) {\n\t\trevertir();\n\t\tconst motivo =\n\t\t\tnuevos.length > 0\n\t\t\t\t? `introdujo ${nuevos.length} diagnóstico${nuevos.length === 1 ? \"\" : \"s\"} nuevo${nuevos.length === 1 ? \"\" : \"s\"}` +\n\t\t\t\t\t(rutaAbsoluta\n\t\t\t\t\t\t? \"; se revirtió el fichero\"\n\t\t\t\t\t\t: \"; SIN revertir (diagnóstico de proyecto, sin fichero único)\")\n\t\t\t\t: `${grupo.diagnosticos.length - resueltosCount} de ${grupo.diagnosticos.length} diagnóstico(s) siguen ahí` +\n\t\t\t\t\t(rutaAbsoluta\n\t\t\t\t\t\t? \"; se revirtió el fichero\"\n\t\t\t\t\t\t: \"; SIN revertir (diagnóstico de proyecto, sin fichero único)\");\n\t\tlog(`[fail] ${etiqueta}: ${motivo}`);\n\t\treturn {\n\t\t\truta: grupo.ruta,\n\t\t\taceptado: false,\n\t\t\tmotivo,\n\t\t\tdiagnosticosResueltos: resueltosCount,\n\t\t\t// Tras revertir, lo que queda de verdad es lo original: no lo que\n\t\t\t// mostraba el estado intermedio (a medio arreglar) que se acaba de tirar.\n\t\t\tdiagnosticosRestantes: rutaAbsoluta ? grupo.diagnosticos.length : enEsteFichero.length,\n\t\t\tnuevos,\n\t\t};\n\t}\n\tlog(`[done] ${etiqueta}`);\n\treturn {\n\t\truta: grupo.ruta,\n\t\taceptado: true,\n\t\tmotivo: \"limpio\",\n\t\tdiagnosticosResueltos: resueltosCount,\n\t\tdiagnosticosRestantes: 0,\n\t\tnuevos: [],\n\t};\n}\n\n/**\n * Lanza un subagente por grupo bajo un tope de concurrencia y verifica cada\n * arreglo. Los grupos de fichero corren en paralelo entre sí; los de\n * proyecto (sin fichero, comparten \"ámbito\" con todo) van después, en serie,\n * para no pisarse entre ellos ni con una verificación en marcha.\n */\nexport async function repararLimpieza(\n\tplan: PlanLimpieza,\n\topciones: OpcionesReparacion,\n): Promise<ResultadoReparacion[]> {\n\tconst log = opciones.log ?? (() => {});\n\tconst gruposDeFichero = plan.grupos.filter((g) => g.ruta !== undefined);\n\tconst gruposDeProyecto = plan.grupos.filter((g) => g.ruta === undefined);\n\tconst total = gruposDeFichero.length + gruposDeProyecto.length;\n\tif (total === 0) return [];\n\n\tconst runner = new AgentRunner({\n\t\tagentDir: opciones.agentDir,\n\t\tcreateSession: opciones.crearSesion,\n\t\tlimiter: createLimiter(Math.max(1, opciones.concurrencia ?? 4)),\n\t\tagentCounter: { count: 0 },\n\t\tmaxAgents: total,\n\t\tagentTimeoutMs: opciones.agentTimeoutMs ?? null,\n\t});\n\n\tconst resultados = await Promise.all(gruposDeFichero.map((g) => repararGrupo(g, plan, opciones, runner, log)));\n\tfor (const g of gruposDeProyecto) {\n\t\tresultados.push(await repararGrupo(g, plan, opciones, runner, log));\n\t}\n\treturn resultados;\n}\n\nexport type EstadoCleanse = \"limpio\" | \"sin_comprobadores\" | \"pendiente\" | \"arreglado_parcial\";\n\nexport interface ResultadoCleanse {\n\testado: EstadoCleanse;\n\tmirado: string[];\n\tcomprobadores: string[];\n\tfallidos: Array<{ id: string; etiqueta: string; motivo: string }>;\n\tdiagnosticosIniciales: number;\n\tgrupos: GrupoPorFichero[];\n\treparaciones: ResultadoReparacion[];\n\tdiagnosticosFinales: number;\n}\n\n/** Punto de entrada único: detecta, planifica y (salvo `dryRun`) repara y verifica. */\nexport async function ejecutarCleanse(\n\tcwd: string,\n\topciones: Omit<OpcionesReparacion, \"cwd\"> & { dryRun?: boolean },\n): Promise<ResultadoCleanse> {\n\tconst plan = await planificarLimpieza(cwd);\n\tconst comprobadoresEtiquetas = plan.comprobadores.map((c) => c.etiqueta);\n\n\tif (plan.comprobadores.length === 0) {\n\t\treturn {\n\t\t\testado: \"sin_comprobadores\",\n\t\t\tmirado: plan.mirado,\n\t\t\tcomprobadores: [],\n\t\t\tfallidos: plan.fallidos,\n\t\t\tdiagnosticosIniciales: 0,\n\t\t\tgrupos: [],\n\t\t\treparaciones: [],\n\t\t\tdiagnosticosFinales: 0,\n\t\t};\n\t}\n\tif (plan.diagnosticos.length === 0) {\n\t\treturn {\n\t\t\testado: \"limpio\",\n\t\t\tmirado: plan.mirado,\n\t\t\tcomprobadores: comprobadoresEtiquetas,\n\t\t\tfallidos: plan.fallidos,\n\t\t\tdiagnosticosIniciales: 0,\n\t\t\tgrupos: [],\n\t\t\treparaciones: [],\n\t\t\tdiagnosticosFinales: 0,\n\t\t};\n\t}\n\tif (opciones.dryRun) {\n\t\treturn {\n\t\t\testado: \"pendiente\",\n\t\t\tmirado: plan.mirado,\n\t\t\tcomprobadores: comprobadoresEtiquetas,\n\t\t\tfallidos: plan.fallidos,\n\t\t\tdiagnosticosIniciales: plan.diagnosticos.length,\n\t\t\tgrupos: plan.grupos,\n\t\t\treparaciones: [],\n\t\t\tdiagnosticosFinales: plan.diagnosticos.length,\n\t\t};\n\t}\n\n\tconst reparaciones = await repararLimpieza(plan, { ...opciones, cwd });\n\tconst diagnosticosFinales = reparaciones.reduce((suma, r) => suma + r.diagnosticosRestantes, 0);\n\treturn {\n\t\testado: diagnosticosFinales === 0 ? \"limpio\" : \"arreglado_parcial\",\n\t\tmirado: plan.mirado,\n\t\tcomprobadores: comprobadoresEtiquetas,\n\t\tfallidos: plan.fallidos,\n\t\tdiagnosticosIniciales: plan.diagnosticos.length,\n\t\tgrupos: plan.grupos,\n\t\treparaciones,\n\t\tdiagnosticosFinales,\n\t};\n}\n"]}
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Orquestación de `ada-cli cleanse`: agrupa diagnósticos por fichero (diez
|
|
3
|
+
* problemas del mismo fichero en un subagente es UNA lectura, no diez),
|
|
4
|
+
* lanza un subagente por fichero con `AgentRunner` bajo un tope de
|
|
5
|
+
* concurrencia y, tras cada arreglo, RE-EJECUTA todos los comprobadores de
|
|
6
|
+
* "fichero" del proyecto (no solo el que generó el diagnóstico original —
|
|
7
|
+
* un arreglo de lint puede romper el typecheck del mismo fichero).
|
|
8
|
+
*
|
|
9
|
+
* Un arreglo se acepta solo si el diagnóstico original desapareció Y no
|
|
10
|
+
* apareció ninguno nuevo en ese mismo fichero. La comparación es por firma
|
|
11
|
+
* (comprobador+regla+mensaje, no por línea) porque un arreglo real desplaza
|
|
12
|
+
* líneas. Si no se acepta, el fichero se revierte al contenido que tenía
|
|
13
|
+
* antes del subagente — "rechazar" un arreglo que no se deshace no sería
|
|
14
|
+
* rechazarlo, sería solo decirlo.
|
|
15
|
+
*/
|
|
16
|
+
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
17
|
+
import { join } from "node:path";
|
|
18
|
+
import { AgentRunner } from "../workflows/agent-runner.js";
|
|
19
|
+
import { createLimiter } from "../workflows/runtime.js";
|
|
20
|
+
import { detectarComprobadores, ejecutarComprobadores, ejecutarComprobadoresPorId } from "./comprobadores.js";
|
|
21
|
+
/** Agrupa diagnósticos por fichero; los de proyecto (`ruta` undefined) forman su propio grupo. */
|
|
22
|
+
export function agruparPorFichero(diagnosticos) {
|
|
23
|
+
const grupos = new Map();
|
|
24
|
+
for (const d of diagnosticos) {
|
|
25
|
+
const clave = d.ruta ?? "";
|
|
26
|
+
const existente = grupos.get(clave);
|
|
27
|
+
if (existente)
|
|
28
|
+
existente.push(d);
|
|
29
|
+
else
|
|
30
|
+
grupos.set(clave, [d]);
|
|
31
|
+
}
|
|
32
|
+
return [...grupos.entries()]
|
|
33
|
+
.map(([ruta, diags]) => ({ ruta: ruta || undefined, diagnosticos: diags }))
|
|
34
|
+
.sort((a, b) => (a.ruta ?? "").localeCompare(b.ruta ?? ""));
|
|
35
|
+
}
|
|
36
|
+
/** Identidad de un diagnóstico que sobrevive a que un arreglo desplace líneas. */
|
|
37
|
+
function firma(d) {
|
|
38
|
+
return `${d.comprobador}::${d.regla ?? ""}::${d.mensaje}`;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Cuenta cuántas veces aparece cada firma — MULTISET, no Set.
|
|
42
|
+
*
|
|
43
|
+
* Dos diagnósticos del mismo fichero con la misma regla y el mismo mensaje
|
|
44
|
+
* (p.ej. la misma regla de estilo disparándose en dos líneas distintas)
|
|
45
|
+
* tienen la MISMA firma. Un `Set` los habría colapsado en uno, así que un
|
|
46
|
+
* arreglo que soluciona los dos habría contado solo "1 de 2 resueltos" y se
|
|
47
|
+
* habría rechazado y revertido un arreglo perfectamente bueno.
|
|
48
|
+
*/
|
|
49
|
+
function contarFirmas(diagnosticos) {
|
|
50
|
+
const conteo = new Map();
|
|
51
|
+
for (const d of diagnosticos) {
|
|
52
|
+
const f = firma(d);
|
|
53
|
+
conteo.set(f, (conteo.get(f) ?? 0) + 1);
|
|
54
|
+
}
|
|
55
|
+
return conteo;
|
|
56
|
+
}
|
|
57
|
+
/** Detecta comprobadores y los ejecuta una vez — el plan que `--dry-run` enseña sin tocar nada más. */
|
|
58
|
+
export async function planificarLimpieza(cwd) {
|
|
59
|
+
const { comprobadores, mirado } = detectarComprobadores(cwd);
|
|
60
|
+
if (comprobadores.length === 0) {
|
|
61
|
+
return { mirado, comprobadores, diagnosticos: [], grupos: [], fallidos: [] };
|
|
62
|
+
}
|
|
63
|
+
const { diagnosticos, fallidos } = await ejecutarComprobadores(comprobadores);
|
|
64
|
+
return { mirado, comprobadores, diagnosticos, grupos: agruparPorFichero(diagnosticos), fallidos };
|
|
65
|
+
}
|
|
66
|
+
async function repararGrupo(grupo, plan, opciones, runner, log) {
|
|
67
|
+
const rutaAbsoluta = grupo.ruta ? join(opciones.cwd, grupo.ruta) : undefined;
|
|
68
|
+
const previo = rutaAbsoluta && existsSync(rutaAbsoluta) ? readFileSync(rutaAbsoluta, "utf-8") : undefined;
|
|
69
|
+
// Verificar con TODOS los comprobadores de "fichero" del plan, no solo el
|
|
70
|
+
// que originó el diagnóstico: un arreglo de lint puede romper el
|
|
71
|
+
// typecheck del mismo fichero, y si solo re-ejecutásemos lint ese error
|
|
72
|
+
// nuevo no aparecería nunca — "limpio" mentiría. Los de "proyecto" (un
|
|
73
|
+
// test runner) no llevan `ruta`, así que re-ejecutarlos aquí no cambiaría
|
|
74
|
+
// `enEsteFichero`; seguimos restringiéndolos a los que ya disparó este
|
|
75
|
+
// grupo para no pagar una suite de test entera por cada fichero.
|
|
76
|
+
const idsComprobadores = grupo.ruta
|
|
77
|
+
? new Set(plan.comprobadores.filter((c) => c.alcance === "fichero").map((c) => c.id))
|
|
78
|
+
: new Set(grupo.diagnosticos.map((d) => d.comprobador));
|
|
79
|
+
const etiqueta = grupo.ruta ?? "<proyecto>";
|
|
80
|
+
const listado = grupo.diagnosticos
|
|
81
|
+
.map((d) => `- ${d.linea ? `línea ${d.linea}: ` : ""}[${d.regla ?? d.comprobador}] ${d.mensaje}`)
|
|
82
|
+
.join("\n");
|
|
83
|
+
const prompt = grupo.ruta
|
|
84
|
+
? `Arregla estos diagnósticos de \`${grupo.ruta}\` y NADA MÁS — no toques ningún otro fichero:\n${listado}`
|
|
85
|
+
: `Arregla estos diagnósticos de proyecto (sin fichero concreto asociado):\n${listado}`;
|
|
86
|
+
log(`[start] ${etiqueta} (${grupo.diagnosticos.length} diagnóstico${grupo.diagnosticos.length === 1 ? "" : "s"})`);
|
|
87
|
+
const revertir = () => {
|
|
88
|
+
if (previo !== undefined && rutaAbsoluta)
|
|
89
|
+
writeFileSync(rutaAbsoluta, previo);
|
|
90
|
+
};
|
|
91
|
+
try {
|
|
92
|
+
await runner.run({
|
|
93
|
+
prompt,
|
|
94
|
+
label: `cleanse:${etiqueta}`,
|
|
95
|
+
model: opciones.modeloSpec,
|
|
96
|
+
tier: opciones.modeloSpec ? undefined : "cheap",
|
|
97
|
+
cwd: opciones.cwd,
|
|
98
|
+
isolation: "none",
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
const motivo = `el subagente falló: ${error instanceof Error ? error.message : String(error)}`;
|
|
103
|
+
revertir();
|
|
104
|
+
log(`[fail] ${etiqueta}: ${motivo}`);
|
|
105
|
+
return {
|
|
106
|
+
ruta: grupo.ruta,
|
|
107
|
+
aceptado: false,
|
|
108
|
+
motivo,
|
|
109
|
+
diagnosticosResueltos: 0,
|
|
110
|
+
diagnosticosRestantes: grupo.diagnosticos.length,
|
|
111
|
+
nuevos: [],
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
const { diagnosticos: trasArreglo } = await ejecutarComprobadoresPorId(plan.comprobadores, idsComprobadores);
|
|
115
|
+
const enEsteFichero = trasArreglo.filter((d) => d.ruta === grupo.ruta);
|
|
116
|
+
// Comparación por MULTISET (no por Set): dos diagnósticos originales con la
|
|
117
|
+
// misma firma cuentan como dos, no como uno. Se consume una firma restante
|
|
118
|
+
// por cada original que la siga teniendo; lo que sobra en `restantes` tras
|
|
119
|
+
// consumir todo lo original son diagnósticos NUEVOS.
|
|
120
|
+
const restantes = contarFirmas(enEsteFichero);
|
|
121
|
+
let resueltosCount = 0;
|
|
122
|
+
for (const d of grupo.diagnosticos) {
|
|
123
|
+
const f = firma(d);
|
|
124
|
+
const quedan = restantes.get(f) ?? 0;
|
|
125
|
+
if (quedan > 0)
|
|
126
|
+
restantes.set(f, quedan - 1);
|
|
127
|
+
else
|
|
128
|
+
resueltosCount++;
|
|
129
|
+
}
|
|
130
|
+
const disponiblesOriginal = contarFirmas(grupo.diagnosticos);
|
|
131
|
+
const nuevos = [];
|
|
132
|
+
for (const d of enEsteFichero) {
|
|
133
|
+
const f = firma(d);
|
|
134
|
+
const disponibles = disponiblesOriginal.get(f) ?? 0;
|
|
135
|
+
if (disponibles > 0)
|
|
136
|
+
disponiblesOriginal.set(f, disponibles - 1);
|
|
137
|
+
else
|
|
138
|
+
nuevos.push(d);
|
|
139
|
+
}
|
|
140
|
+
const aceptado = resueltosCount === grupo.diagnosticos.length && nuevos.length === 0;
|
|
141
|
+
if (!aceptado) {
|
|
142
|
+
revertir();
|
|
143
|
+
const motivo = nuevos.length > 0
|
|
144
|
+
? `introdujo ${nuevos.length} diagnóstico${nuevos.length === 1 ? "" : "s"} nuevo${nuevos.length === 1 ? "" : "s"}` +
|
|
145
|
+
(rutaAbsoluta
|
|
146
|
+
? "; se revirtió el fichero"
|
|
147
|
+
: "; SIN revertir (diagnóstico de proyecto, sin fichero único)")
|
|
148
|
+
: `${grupo.diagnosticos.length - resueltosCount} de ${grupo.diagnosticos.length} diagnóstico(s) siguen ahí` +
|
|
149
|
+
(rutaAbsoluta
|
|
150
|
+
? "; se revirtió el fichero"
|
|
151
|
+
: "; SIN revertir (diagnóstico de proyecto, sin fichero único)");
|
|
152
|
+
log(`[fail] ${etiqueta}: ${motivo}`);
|
|
153
|
+
return {
|
|
154
|
+
ruta: grupo.ruta,
|
|
155
|
+
aceptado: false,
|
|
156
|
+
motivo,
|
|
157
|
+
diagnosticosResueltos: resueltosCount,
|
|
158
|
+
// Tras revertir, lo que queda de verdad es lo original: no lo que
|
|
159
|
+
// mostraba el estado intermedio (a medio arreglar) que se acaba de tirar.
|
|
160
|
+
diagnosticosRestantes: rutaAbsoluta ? grupo.diagnosticos.length : enEsteFichero.length,
|
|
161
|
+
nuevos,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
log(`[done] ${etiqueta}`);
|
|
165
|
+
return {
|
|
166
|
+
ruta: grupo.ruta,
|
|
167
|
+
aceptado: true,
|
|
168
|
+
motivo: "limpio",
|
|
169
|
+
diagnosticosResueltos: resueltosCount,
|
|
170
|
+
diagnosticosRestantes: 0,
|
|
171
|
+
nuevos: [],
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Lanza un subagente por grupo bajo un tope de concurrencia y verifica cada
|
|
176
|
+
* arreglo. Los grupos de fichero corren en paralelo entre sí; los de
|
|
177
|
+
* proyecto (sin fichero, comparten "ámbito" con todo) van después, en serie,
|
|
178
|
+
* para no pisarse entre ellos ni con una verificación en marcha.
|
|
179
|
+
*/
|
|
180
|
+
export async function repararLimpieza(plan, opciones) {
|
|
181
|
+
const log = opciones.log ?? (() => { });
|
|
182
|
+
const gruposDeFichero = plan.grupos.filter((g) => g.ruta !== undefined);
|
|
183
|
+
const gruposDeProyecto = plan.grupos.filter((g) => g.ruta === undefined);
|
|
184
|
+
const total = gruposDeFichero.length + gruposDeProyecto.length;
|
|
185
|
+
if (total === 0)
|
|
186
|
+
return [];
|
|
187
|
+
const runner = new AgentRunner({
|
|
188
|
+
agentDir: opciones.agentDir,
|
|
189
|
+
createSession: opciones.crearSesion,
|
|
190
|
+
limiter: createLimiter(Math.max(1, opciones.concurrencia ?? 4)),
|
|
191
|
+
agentCounter: { count: 0 },
|
|
192
|
+
maxAgents: total,
|
|
193
|
+
agentTimeoutMs: opciones.agentTimeoutMs ?? null,
|
|
194
|
+
});
|
|
195
|
+
const resultados = await Promise.all(gruposDeFichero.map((g) => repararGrupo(g, plan, opciones, runner, log)));
|
|
196
|
+
for (const g of gruposDeProyecto) {
|
|
197
|
+
resultados.push(await repararGrupo(g, plan, opciones, runner, log));
|
|
198
|
+
}
|
|
199
|
+
return resultados;
|
|
200
|
+
}
|
|
201
|
+
/** Punto de entrada único: detecta, planifica y (salvo `dryRun`) repara y verifica. */
|
|
202
|
+
export async function ejecutarCleanse(cwd, opciones) {
|
|
203
|
+
const plan = await planificarLimpieza(cwd);
|
|
204
|
+
const comprobadoresEtiquetas = plan.comprobadores.map((c) => c.etiqueta);
|
|
205
|
+
if (plan.comprobadores.length === 0) {
|
|
206
|
+
return {
|
|
207
|
+
estado: "sin_comprobadores",
|
|
208
|
+
mirado: plan.mirado,
|
|
209
|
+
comprobadores: [],
|
|
210
|
+
fallidos: plan.fallidos,
|
|
211
|
+
diagnosticosIniciales: 0,
|
|
212
|
+
grupos: [],
|
|
213
|
+
reparaciones: [],
|
|
214
|
+
diagnosticosFinales: 0,
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
if (plan.diagnosticos.length === 0) {
|
|
218
|
+
return {
|
|
219
|
+
estado: "limpio",
|
|
220
|
+
mirado: plan.mirado,
|
|
221
|
+
comprobadores: comprobadoresEtiquetas,
|
|
222
|
+
fallidos: plan.fallidos,
|
|
223
|
+
diagnosticosIniciales: 0,
|
|
224
|
+
grupos: [],
|
|
225
|
+
reparaciones: [],
|
|
226
|
+
diagnosticosFinales: 0,
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
if (opciones.dryRun) {
|
|
230
|
+
return {
|
|
231
|
+
estado: "pendiente",
|
|
232
|
+
mirado: plan.mirado,
|
|
233
|
+
comprobadores: comprobadoresEtiquetas,
|
|
234
|
+
fallidos: plan.fallidos,
|
|
235
|
+
diagnosticosIniciales: plan.diagnosticos.length,
|
|
236
|
+
grupos: plan.grupos,
|
|
237
|
+
reparaciones: [],
|
|
238
|
+
diagnosticosFinales: plan.diagnosticos.length,
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
const reparaciones = await repararLimpieza(plan, { ...opciones, cwd });
|
|
242
|
+
const diagnosticosFinales = reparaciones.reduce((suma, r) => suma + r.diagnosticosRestantes, 0);
|
|
243
|
+
return {
|
|
244
|
+
estado: diagnosticosFinales === 0 ? "limpio" : "arreglado_parcial",
|
|
245
|
+
mirado: plan.mirado,
|
|
246
|
+
comprobadores: comprobadoresEtiquetas,
|
|
247
|
+
fallidos: plan.fallidos,
|
|
248
|
+
diagnosticosIniciales: plan.diagnosticos.length,
|
|
249
|
+
grupos: plan.grupos,
|
|
250
|
+
reparaciones,
|
|
251
|
+
diagnosticosFinales,
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
//# sourceMappingURL=reparacion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reparacion.js","sourceRoot":"","sources":["../../../src/core/limpieza/reparacion.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Orquestación de `ada-cli cleanse`: agrupa diagnósticos por fichero (diez\n * problemas del mismo fichero en un subagente es UNA lectura, no diez),\n * lanza un subagente por fichero con `AgentRunner` bajo un tope de\n * concurrencia y, tras cada arreglo, RE-EJECUTA todos los comprobadores de\n * \"fichero\" del proyecto (no solo el que generó el diagnóstico original —\n * un arreglo de lint puede romper el typecheck del mismo fichero).\n *\n * Un arreglo se acepta solo si el diagnóstico original desapareció Y no\n * apareció ninguno nuevo en ese mismo fichero. La comparación es por firma\n * (comprobador+regla+mensaje, no por línea) porque un arreglo real desplaza\n * líneas. Si no se acepta, el fichero se revierte al contenido que tenía\n * antes del subagente — \"rechazar\" un arreglo que no se deshace no sería\n * rechazarlo, sería solo decirlo.\n */\n\nimport { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { AgentRunner, type CreateSubagentSession } from \"../workflows/agent-runner.ts\";\nimport { createLimiter } from \"../workflows/runtime.ts\";\nimport { detectarComprobadores, ejecutarComprobadores, ejecutarComprobadoresPorId } from \"./comprobadores.ts\";\nimport type { Comprobador, Diagnostico, GrupoPorFichero } from \"./tipos.ts\";\n\n/** Agrupa diagnósticos por fichero; los de proyecto (`ruta` undefined) forman su propio grupo. */\nexport function agruparPorFichero(diagnosticos: readonly Diagnostico[]): GrupoPorFichero[] {\n\tconst grupos = new Map<string, Diagnostico[]>();\n\tfor (const d of diagnosticos) {\n\t\tconst clave = d.ruta ?? \"\";\n\t\tconst existente = grupos.get(clave);\n\t\tif (existente) existente.push(d);\n\t\telse grupos.set(clave, [d]);\n\t}\n\treturn [...grupos.entries()]\n\t\t.map(([ruta, diags]) => ({ ruta: ruta || undefined, diagnosticos: diags }))\n\t\t.sort((a, b) => (a.ruta ?? \"\").localeCompare(b.ruta ?? \"\"));\n}\n\n/** Identidad de un diagnóstico que sobrevive a que un arreglo desplace líneas. */\nfunction firma(d: Diagnostico): string {\n\treturn `${d.comprobador}::${d.regla ?? \"\"}::${d.mensaje}`;\n}\n\n/**\n * Cuenta cuántas veces aparece cada firma — MULTISET, no Set.\n *\n * Dos diagnósticos del mismo fichero con la misma regla y el mismo mensaje\n * (p.ej. la misma regla de estilo disparándose en dos líneas distintas)\n * tienen la MISMA firma. Un `Set` los habría colapsado en uno, así que un\n * arreglo que soluciona los dos habría contado solo \"1 de 2 resueltos\" y se\n * habría rechazado y revertido un arreglo perfectamente bueno.\n */\nfunction contarFirmas(diagnosticos: readonly Diagnostico[]): Map<string, number> {\n\tconst conteo = new Map<string, number>();\n\tfor (const d of diagnosticos) {\n\t\tconst f = firma(d);\n\t\tconteo.set(f, (conteo.get(f) ?? 0) + 1);\n\t}\n\treturn conteo;\n}\n\nexport interface PlanLimpieza {\n\tmirado: string[];\n\tcomprobadores: Comprobador[];\n\tdiagnosticos: Diagnostico[];\n\tgrupos: GrupoPorFichero[];\n\tfallidos: Array<{ id: string; etiqueta: string; motivo: string }>;\n}\n\n/** Detecta comprobadores y los ejecuta una vez — el plan que `--dry-run` enseña sin tocar nada más. */\nexport async function planificarLimpieza(cwd: string): Promise<PlanLimpieza> {\n\tconst { comprobadores, mirado } = detectarComprobadores(cwd);\n\tif (comprobadores.length === 0) {\n\t\treturn { mirado, comprobadores, diagnosticos: [], grupos: [], fallidos: [] };\n\t}\n\tconst { diagnosticos, fallidos } = await ejecutarComprobadores(comprobadores);\n\treturn { mirado, comprobadores, diagnosticos, grupos: agruparPorFichero(diagnosticos), fallidos };\n}\n\nexport interface ResultadoReparacion {\n\truta?: string;\n\taceptado: boolean;\n\tmotivo: string;\n\tdiagnosticosResueltos: number;\n\tdiagnosticosRestantes: number;\n\tnuevos: Diagnostico[];\n}\n\nexport interface OpcionesReparacion {\n\tcwd: string;\n\tagentDir: string;\n\tcrearSesion: CreateSubagentSession;\n\t/** \"provider/model\" explícito; si falta se usa `tier:cheap` (arreglar un lint no necesita el modelo caro). */\n\tmodeloSpec?: string;\n\tconcurrencia?: number;\n\tagentTimeoutMs?: number | null;\n\tlog?: (linea: string) => void;\n}\n\nasync function repararGrupo(\n\tgrupo: GrupoPorFichero,\n\tplan: PlanLimpieza,\n\topciones: OpcionesReparacion,\n\trunner: AgentRunner,\n\tlog: (linea: string) => void,\n): Promise<ResultadoReparacion> {\n\tconst rutaAbsoluta = grupo.ruta ? join(opciones.cwd, grupo.ruta) : undefined;\n\tconst previo = rutaAbsoluta && existsSync(rutaAbsoluta) ? readFileSync(rutaAbsoluta, \"utf-8\") : undefined;\n\t// Verificar con TODOS los comprobadores de \"fichero\" del plan, no solo el\n\t// que originó el diagnóstico: un arreglo de lint puede romper el\n\t// typecheck del mismo fichero, y si solo re-ejecutásemos lint ese error\n\t// nuevo no aparecería nunca — \"limpio\" mentiría. Los de \"proyecto\" (un\n\t// test runner) no llevan `ruta`, así que re-ejecutarlos aquí no cambiaría\n\t// `enEsteFichero`; seguimos restringiéndolos a los que ya disparó este\n\t// grupo para no pagar una suite de test entera por cada fichero.\n\tconst idsComprobadores = grupo.ruta\n\t\t? new Set(plan.comprobadores.filter((c) => c.alcance === \"fichero\").map((c) => c.id))\n\t\t: new Set(grupo.diagnosticos.map((d) => d.comprobador));\n\tconst etiqueta = grupo.ruta ?? \"<proyecto>\";\n\n\tconst listado = grupo.diagnosticos\n\t\t.map((d) => `- ${d.linea ? `línea ${d.linea}: ` : \"\"}[${d.regla ?? d.comprobador}] ${d.mensaje}`)\n\t\t.join(\"\\n\");\n\tconst prompt = grupo.ruta\n\t\t? `Arregla estos diagnósticos de \\`${grupo.ruta}\\` y NADA MÁS — no toques ningún otro fichero:\\n${listado}`\n\t\t: `Arregla estos diagnósticos de proyecto (sin fichero concreto asociado):\\n${listado}`;\n\n\tlog(`[start] ${etiqueta} (${grupo.diagnosticos.length} diagnóstico${grupo.diagnosticos.length === 1 ? \"\" : \"s\"})`);\n\n\tconst revertir = () => {\n\t\tif (previo !== undefined && rutaAbsoluta) writeFileSync(rutaAbsoluta, previo);\n\t};\n\n\ttry {\n\t\tawait runner.run({\n\t\t\tprompt,\n\t\t\tlabel: `cleanse:${etiqueta}`,\n\t\t\tmodel: opciones.modeloSpec,\n\t\t\ttier: opciones.modeloSpec ? undefined : \"cheap\",\n\t\t\tcwd: opciones.cwd,\n\t\t\tisolation: \"none\",\n\t\t});\n\t} catch (error) {\n\t\tconst motivo = `el subagente falló: ${error instanceof Error ? error.message : String(error)}`;\n\t\trevertir();\n\t\tlog(`[fail] ${etiqueta}: ${motivo}`);\n\t\treturn {\n\t\t\truta: grupo.ruta,\n\t\t\taceptado: false,\n\t\t\tmotivo,\n\t\t\tdiagnosticosResueltos: 0,\n\t\t\tdiagnosticosRestantes: grupo.diagnosticos.length,\n\t\t\tnuevos: [],\n\t\t};\n\t}\n\n\tconst { diagnosticos: trasArreglo } = await ejecutarComprobadoresPorId(plan.comprobadores, idsComprobadores);\n\tconst enEsteFichero = trasArreglo.filter((d) => d.ruta === grupo.ruta);\n\n\t// Comparación por MULTISET (no por Set): dos diagnósticos originales con la\n\t// misma firma cuentan como dos, no como uno. Se consume una firma restante\n\t// por cada original que la siga teniendo; lo que sobra en `restantes` tras\n\t// consumir todo lo original son diagnósticos NUEVOS.\n\tconst restantes = contarFirmas(enEsteFichero);\n\tlet resueltosCount = 0;\n\tfor (const d of grupo.diagnosticos) {\n\t\tconst f = firma(d);\n\t\tconst quedan = restantes.get(f) ?? 0;\n\t\tif (quedan > 0) restantes.set(f, quedan - 1);\n\t\telse resueltosCount++;\n\t}\n\tconst disponiblesOriginal = contarFirmas(grupo.diagnosticos);\n\tconst nuevos: Diagnostico[] = [];\n\tfor (const d of enEsteFichero) {\n\t\tconst f = firma(d);\n\t\tconst disponibles = disponiblesOriginal.get(f) ?? 0;\n\t\tif (disponibles > 0) disponiblesOriginal.set(f, disponibles - 1);\n\t\telse nuevos.push(d);\n\t}\n\tconst aceptado = resueltosCount === grupo.diagnosticos.length && nuevos.length === 0;\n\n\tif (!aceptado) {\n\t\trevertir();\n\t\tconst motivo =\n\t\t\tnuevos.length > 0\n\t\t\t\t? `introdujo ${nuevos.length} diagnóstico${nuevos.length === 1 ? \"\" : \"s\"} nuevo${nuevos.length === 1 ? \"\" : \"s\"}` +\n\t\t\t\t\t(rutaAbsoluta\n\t\t\t\t\t\t? \"; se revirtió el fichero\"\n\t\t\t\t\t\t: \"; SIN revertir (diagnóstico de proyecto, sin fichero único)\")\n\t\t\t\t: `${grupo.diagnosticos.length - resueltosCount} de ${grupo.diagnosticos.length} diagnóstico(s) siguen ahí` +\n\t\t\t\t\t(rutaAbsoluta\n\t\t\t\t\t\t? \"; se revirtió el fichero\"\n\t\t\t\t\t\t: \"; SIN revertir (diagnóstico de proyecto, sin fichero único)\");\n\t\tlog(`[fail] ${etiqueta}: ${motivo}`);\n\t\treturn {\n\t\t\truta: grupo.ruta,\n\t\t\taceptado: false,\n\t\t\tmotivo,\n\t\t\tdiagnosticosResueltos: resueltosCount,\n\t\t\t// Tras revertir, lo que queda de verdad es lo original: no lo que\n\t\t\t// mostraba el estado intermedio (a medio arreglar) que se acaba de tirar.\n\t\t\tdiagnosticosRestantes: rutaAbsoluta ? grupo.diagnosticos.length : enEsteFichero.length,\n\t\t\tnuevos,\n\t\t};\n\t}\n\tlog(`[done] ${etiqueta}`);\n\treturn {\n\t\truta: grupo.ruta,\n\t\taceptado: true,\n\t\tmotivo: \"limpio\",\n\t\tdiagnosticosResueltos: resueltosCount,\n\t\tdiagnosticosRestantes: 0,\n\t\tnuevos: [],\n\t};\n}\n\n/**\n * Lanza un subagente por grupo bajo un tope de concurrencia y verifica cada\n * arreglo. Los grupos de fichero corren en paralelo entre sí; los de\n * proyecto (sin fichero, comparten \"ámbito\" con todo) van después, en serie,\n * para no pisarse entre ellos ni con una verificación en marcha.\n */\nexport async function repararLimpieza(\n\tplan: PlanLimpieza,\n\topciones: OpcionesReparacion,\n): Promise<ResultadoReparacion[]> {\n\tconst log = opciones.log ?? (() => {});\n\tconst gruposDeFichero = plan.grupos.filter((g) => g.ruta !== undefined);\n\tconst gruposDeProyecto = plan.grupos.filter((g) => g.ruta === undefined);\n\tconst total = gruposDeFichero.length + gruposDeProyecto.length;\n\tif (total === 0) return [];\n\n\tconst runner = new AgentRunner({\n\t\tagentDir: opciones.agentDir,\n\t\tcreateSession: opciones.crearSesion,\n\t\tlimiter: createLimiter(Math.max(1, opciones.concurrencia ?? 4)),\n\t\tagentCounter: { count: 0 },\n\t\tmaxAgents: total,\n\t\tagentTimeoutMs: opciones.agentTimeoutMs ?? null,\n\t});\n\n\tconst resultados = await Promise.all(gruposDeFichero.map((g) => repararGrupo(g, plan, opciones, runner, log)));\n\tfor (const g of gruposDeProyecto) {\n\t\tresultados.push(await repararGrupo(g, plan, opciones, runner, log));\n\t}\n\treturn resultados;\n}\n\nexport type EstadoCleanse = \"limpio\" | \"sin_comprobadores\" | \"pendiente\" | \"arreglado_parcial\";\n\nexport interface ResultadoCleanse {\n\testado: EstadoCleanse;\n\tmirado: string[];\n\tcomprobadores: string[];\n\tfallidos: Array<{ id: string; etiqueta: string; motivo: string }>;\n\tdiagnosticosIniciales: number;\n\tgrupos: GrupoPorFichero[];\n\treparaciones: ResultadoReparacion[];\n\tdiagnosticosFinales: number;\n}\n\n/** Punto de entrada único: detecta, planifica y (salvo `dryRun`) repara y verifica. */\nexport async function ejecutarCleanse(\n\tcwd: string,\n\topciones: Omit<OpcionesReparacion, \"cwd\"> & { dryRun?: boolean },\n): Promise<ResultadoCleanse> {\n\tconst plan = await planificarLimpieza(cwd);\n\tconst comprobadoresEtiquetas = plan.comprobadores.map((c) => c.etiqueta);\n\n\tif (plan.comprobadores.length === 0) {\n\t\treturn {\n\t\t\testado: \"sin_comprobadores\",\n\t\t\tmirado: plan.mirado,\n\t\t\tcomprobadores: [],\n\t\t\tfallidos: plan.fallidos,\n\t\t\tdiagnosticosIniciales: 0,\n\t\t\tgrupos: [],\n\t\t\treparaciones: [],\n\t\t\tdiagnosticosFinales: 0,\n\t\t};\n\t}\n\tif (plan.diagnosticos.length === 0) {\n\t\treturn {\n\t\t\testado: \"limpio\",\n\t\t\tmirado: plan.mirado,\n\t\t\tcomprobadores: comprobadoresEtiquetas,\n\t\t\tfallidos: plan.fallidos,\n\t\t\tdiagnosticosIniciales: 0,\n\t\t\tgrupos: [],\n\t\t\treparaciones: [],\n\t\t\tdiagnosticosFinales: 0,\n\t\t};\n\t}\n\tif (opciones.dryRun) {\n\t\treturn {\n\t\t\testado: \"pendiente\",\n\t\t\tmirado: plan.mirado,\n\t\t\tcomprobadores: comprobadoresEtiquetas,\n\t\t\tfallidos: plan.fallidos,\n\t\t\tdiagnosticosIniciales: plan.diagnosticos.length,\n\t\t\tgrupos: plan.grupos,\n\t\t\treparaciones: [],\n\t\t\tdiagnosticosFinales: plan.diagnosticos.length,\n\t\t};\n\t}\n\n\tconst reparaciones = await repararLimpieza(plan, { ...opciones, cwd });\n\tconst diagnosticosFinales = reparaciones.reduce((suma, r) => suma + r.diagnosticosRestantes, 0);\n\treturn {\n\t\testado: diagnosticosFinales === 0 ? \"limpio\" : \"arreglado_parcial\",\n\t\tmirado: plan.mirado,\n\t\tcomprobadores: comprobadoresEtiquetas,\n\t\tfallidos: plan.fallidos,\n\t\tdiagnosticosIniciales: plan.diagnosticos.length,\n\t\tgrupos: plan.grupos,\n\t\treparaciones,\n\t\tdiagnosticosFinales,\n\t};\n}\n"]}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tipos compartidos de `ada-cli cleanse`.
|
|
3
|
+
*
|
|
4
|
+
* Los nombres de campo van en español ({@link Diagnostico}: ruta, linea,
|
|
5
|
+
* regla, mensaje) porque ese es el contrato que pide la tarea y el que
|
|
6
|
+
* respeta el resto del módulo.
|
|
7
|
+
*/
|
|
8
|
+
/** Un problema accionable que reportó un comprobador del proyecto. */
|
|
9
|
+
export interface Diagnostico {
|
|
10
|
+
/** id del comprobador que lo generó — permite re-ejecutar solo ese tras un arreglo. */
|
|
11
|
+
comprobador: string;
|
|
12
|
+
/** undefined = diagnóstico de proyecto entero (p.ej. un test que falla), no de un fichero. */
|
|
13
|
+
ruta?: string;
|
|
14
|
+
linea?: number;
|
|
15
|
+
columna?: number;
|
|
16
|
+
regla?: string;
|
|
17
|
+
mensaje: string;
|
|
18
|
+
}
|
|
19
|
+
/** Un diagnóstico sin el campo `comprobador` — lo añade quien ejecuta, no quien parsea. */
|
|
20
|
+
export type DiagnosticoParcial = Omit<Diagnostico, "comprobador">;
|
|
21
|
+
/** Todos los diagnósticos de un fichero (o del proyecto entero si `ruta` es undefined). */
|
|
22
|
+
export interface GrupoPorFichero {
|
|
23
|
+
ruta?: string;
|
|
24
|
+
diagnosticos: Diagnostico[];
|
|
25
|
+
}
|
|
26
|
+
/** Salida cruda de ejecutar un comprobador. */
|
|
27
|
+
export interface SalidaComando {
|
|
28
|
+
stdout: string;
|
|
29
|
+
stderr: string;
|
|
30
|
+
code: number;
|
|
31
|
+
}
|
|
32
|
+
/** Un comprobador detectado y listo para ejecutar. */
|
|
33
|
+
export interface Comprobador {
|
|
34
|
+
id: string;
|
|
35
|
+
etiqueta: string;
|
|
36
|
+
comando: string;
|
|
37
|
+
args: string[];
|
|
38
|
+
cwd: string;
|
|
39
|
+
parsear: (salida: SalidaComando, cwd: string) => DiagnosticoParcial[];
|
|
40
|
+
/**
|
|
41
|
+
* "fichero" = sus diagnósticos vienen con `ruta` (lint, typecheck…);
|
|
42
|
+
* "proyecto" = sin `ruta`, del proyecto entero (un test runner). Decide
|
|
43
|
+
* qué comprobadores se re-ejecutan al verificar el arreglo de UN fichero:
|
|
44
|
+
* hace falta correrlos TODOS los de "fichero", no solo el que originó el
|
|
45
|
+
* diagnóstico — si no, un arreglo de lint que rompe el typecheck del mismo
|
|
46
|
+
* fichero pasaría como limpio porque nunca se vuelve a correr tsc.
|
|
47
|
+
*/
|
|
48
|
+
alcance: "fichero" | "proyecto";
|
|
49
|
+
}
|
|
50
|
+
/** Resultado de mirar qué hay en el proyecto. */
|
|
51
|
+
export interface Deteccion {
|
|
52
|
+
comprobadores: Comprobador[];
|
|
53
|
+
/** Cada sitio comprobado, se haya encontrado algo o no — para cuando no hay ninguno. */
|
|
54
|
+
mirado: string[];
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=tipos.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tipos.d.ts","sourceRoot":"","sources":["../../../src/core/limpieza/tipos.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,uEAAsE;AACtE,MAAM,WAAW,WAAW;IAC3B,0FAAuF;IACvF,WAAW,EAAE,MAAM,CAAC;IACpB,+FAA8F;IAC9F,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,+FAA2F;AAC3F,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;AAElE,4FAA2F;AAC3F,MAAM,WAAW,eAAe;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,WAAW,EAAE,CAAC;CAC5B;AAED,+CAA+C;AAC/C,MAAM,WAAW,aAAa;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACb;AAED,sDAAsD;AACtD,MAAM,WAAW,WAAW;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,KAAK,kBAAkB,EAAE,CAAC;IACtE;;;;;;;OAOG;IACH,OAAO,EAAE,SAAS,GAAG,UAAU,CAAC;CAChC;AAED,kDAAiD;AACjD,MAAM,WAAW,SAAS;IACzB,aAAa,EAAE,WAAW,EAAE,CAAC;IAC7B,0FAAwF;IACxF,MAAM,EAAE,MAAM,EAAE,CAAC;CACjB","sourcesContent":["/**\n * Tipos compartidos de `ada-cli cleanse`.\n *\n * Los nombres de campo van en español ({@link Diagnostico}: ruta, linea,\n * regla, mensaje) porque ese es el contrato que pide la tarea y el que\n * respeta el resto del módulo.\n */\n\n/** Un problema accionable que reportó un comprobador del proyecto. */\nexport interface Diagnostico {\n\t/** id del comprobador que lo generó — permite re-ejecutar solo ese tras un arreglo. */\n\tcomprobador: string;\n\t/** undefined = diagnóstico de proyecto entero (p.ej. un test que falla), no de un fichero. */\n\truta?: string;\n\tlinea?: number;\n\tcolumna?: number;\n\tregla?: string;\n\tmensaje: string;\n}\n\n/** Un diagnóstico sin el campo `comprobador` — lo añade quien ejecuta, no quien parsea. */\nexport type DiagnosticoParcial = Omit<Diagnostico, \"comprobador\">;\n\n/** Todos los diagnósticos de un fichero (o del proyecto entero si `ruta` es undefined). */\nexport interface GrupoPorFichero {\n\truta?: string;\n\tdiagnosticos: Diagnostico[];\n}\n\n/** Salida cruda de ejecutar un comprobador. */\nexport interface SalidaComando {\n\tstdout: string;\n\tstderr: string;\n\tcode: number;\n}\n\n/** Un comprobador detectado y listo para ejecutar. */\nexport interface Comprobador {\n\tid: string;\n\tetiqueta: string;\n\tcomando: string;\n\targs: string[];\n\tcwd: string;\n\tparsear: (salida: SalidaComando, cwd: string) => DiagnosticoParcial[];\n\t/**\n\t * \"fichero\" = sus diagnósticos vienen con `ruta` (lint, typecheck…);\n\t * \"proyecto\" = sin `ruta`, del proyecto entero (un test runner). Decide\n\t * qué comprobadores se re-ejecutan al verificar el arreglo de UN fichero:\n\t * hace falta correrlos TODOS los de \"fichero\", no solo el que originó el\n\t * diagnóstico — si no, un arreglo de lint que rompe el typecheck del mismo\n\t * fichero pasaría como limpio porque nunca se vuelve a correr tsc.\n\t */\n\talcance: \"fichero\" | \"proyecto\";\n}\n\n/** Resultado de mirar qué hay en el proyecto. */\nexport interface Deteccion {\n\tcomprobadores: Comprobador[];\n\t/** Cada sitio comprobado, se haya encontrado algo o no — para cuando no hay ninguno. */\n\tmirado: string[];\n}\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tipos compartidos de `ada-cli cleanse`.
|
|
3
|
+
*
|
|
4
|
+
* Los nombres de campo van en español ({@link Diagnostico}: ruta, linea,
|
|
5
|
+
* regla, mensaje) porque ese es el contrato que pide la tarea y el que
|
|
6
|
+
* respeta el resto del módulo.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=tipos.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tipos.js","sourceRoot":"","sources":["../../../src/core/limpieza/tipos.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG","sourcesContent":["/**\n * Tipos compartidos de `ada-cli cleanse`.\n *\n * Los nombres de campo van en español ({@link Diagnostico}: ruta, linea,\n * regla, mensaje) porque ese es el contrato que pide la tarea y el que\n * respeta el resto del módulo.\n */\n\n/** Un problema accionable que reportó un comprobador del proyecto. */\nexport interface Diagnostico {\n\t/** id del comprobador que lo generó — permite re-ejecutar solo ese tras un arreglo. */\n\tcomprobador: string;\n\t/** undefined = diagnóstico de proyecto entero (p.ej. un test que falla), no de un fichero. */\n\truta?: string;\n\tlinea?: number;\n\tcolumna?: number;\n\tregla?: string;\n\tmensaje: string;\n}\n\n/** Un diagnóstico sin el campo `comprobador` — lo añade quien ejecuta, no quien parsea. */\nexport type DiagnosticoParcial = Omit<Diagnostico, \"comprobador\">;\n\n/** Todos los diagnósticos de un fichero (o del proyecto entero si `ruta` es undefined). */\nexport interface GrupoPorFichero {\n\truta?: string;\n\tdiagnosticos: Diagnostico[];\n}\n\n/** Salida cruda de ejecutar un comprobador. */\nexport interface SalidaComando {\n\tstdout: string;\n\tstderr: string;\n\tcode: number;\n}\n\n/** Un comprobador detectado y listo para ejecutar. */\nexport interface Comprobador {\n\tid: string;\n\tetiqueta: string;\n\tcomando: string;\n\targs: string[];\n\tcwd: string;\n\tparsear: (salida: SalidaComando, cwd: string) => DiagnosticoParcial[];\n\t/**\n\t * \"fichero\" = sus diagnósticos vienen con `ruta` (lint, typecheck…);\n\t * \"proyecto\" = sin `ruta`, del proyecto entero (un test runner). Decide\n\t * qué comprobadores se re-ejecutan al verificar el arreglo de UN fichero:\n\t * hace falta correrlos TODOS los de \"fichero\", no solo el que originó el\n\t * diagnóstico — si no, un arreglo de lint que rompe el typecheck del mismo\n\t * fichero pasaría como limpio porque nunca se vuelve a correr tsc.\n\t */\n\talcance: \"fichero\" | \"proyecto\";\n}\n\n/** Resultado de mirar qué hay en el proyecto. */\nexport interface Deteccion {\n\tcomprobadores: Comprobador[];\n\t/** Cada sitio comprobado, se haya encontrado algo o no — para cuando no hay ninguno. */\n\tmirado: string[];\n}\n"]}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cliente JSON-RPC sobre stdio contra un servidor de lenguaje (LSP).
|
|
3
|
+
*
|
|
4
|
+
* Fichero nuestro (coste cero de fork): el LanguageService de TypeScript en
|
|
5
|
+
* `core/edicion/tipos.ts` cubre un único lenguaje sin salir de proceso; esto
|
|
6
|
+
* es lo que hace falta para los demás — hablar el protocolo LSP con un
|
|
7
|
+
* binario externo que arranca y para por comando.
|
|
8
|
+
*
|
|
9
|
+
* Decisión deliberada de diseño (ponytail): un servidor por LLAMADA, no un
|
|
10
|
+
* pool de servidores vivos entre llamadas. Arrancar `gopls`/`rust-analyzer`
|
|
11
|
+
* cuesta cientos de ms, pero un servidor que sobrevive a la llamada que lo
|
|
12
|
+
* arrancó es exactamente el "proceso huérfano" que la puerta de este hueco
|
|
13
|
+
* prohíbe, y mantener un pool con temporizador de inactividad es la mitad de
|
|
14
|
+
* `client.ts` del competidor (1601 líneas) para un problema que aquí no
|
|
15
|
+
* existe todavía. Subir a un pool es la mejora natural si el coste de
|
|
16
|
+
* relanzar por llamada llega a notarse.
|
|
17
|
+
*/
|
|
18
|
+
/** Lo que de verdad puede fallar al hablar con el servidor: nunca se colapsa en un único "error". */
|
|
19
|
+
export declare class ErrorLsp extends Error {
|
|
20
|
+
readonly tipo: "proceso_murio" | "timeout" | "rpc" | "cierre";
|
|
21
|
+
constructor(message: string, tipo: "proceso_murio" | "timeout" | "rpc" | "cierre");
|
|
22
|
+
}
|
|
23
|
+
/** Conexión JSON-RPC ya inicializada (handshake `initialize`/`initialized` hecho) contra un servidor LSP. */
|
|
24
|
+
export interface ClienteLsp {
|
|
25
|
+
/** Petición LSP que espera respuesta. Rechaza con `ErrorLsp` si el proceso muere o se agota el tiempo. */
|
|
26
|
+
enviar<T>(metodo: string, params: unknown, timeoutMs?: number): Promise<T>;
|
|
27
|
+
/** Notificación LSP sin respuesta (p. ej. `textDocument/didOpen`). */
|
|
28
|
+
notificar(metodo: string, params: unknown): void;
|
|
29
|
+
/**
|
|
30
|
+
* Cierre limpio: `shutdown` (petición) → `exit` (notificación) → espera a que
|
|
31
|
+
* el proceso termine solo → `SIGKILL` si no lo ha hecho a tiempo.
|
|
32
|
+
* Al resolver, el proceso YA NO existe — es la garantía que pide la puerta
|
|
33
|
+
* de "ningún servidor queda vivo al terminar".
|
|
34
|
+
*/
|
|
35
|
+
cerrar(): Promise<void>;
|
|
36
|
+
/** PID del proceso del servidor. Solo para diagnóstico/pruebas: comprobar que no queda vivo tras `cerrar()`. */
|
|
37
|
+
readonly pid: number | undefined;
|
|
38
|
+
}
|
|
39
|
+
declare function uriDeRuta(ruta: string): string;
|
|
40
|
+
/**
|
|
41
|
+
* Arranca `comando` como servidor LSP, hace el handshake `initialize` +
|
|
42
|
+
* `initialized` y devuelve un cliente listo para usar.
|
|
43
|
+
*
|
|
44
|
+
* Lanza `ErrorLsp` (nunca falla en silencio) si el binario no arranca o el
|
|
45
|
+
* `initialize` no responde a tiempo — quien llama distingue "no se pudo
|
|
46
|
+
* hablar con el servidor" de "el servidor contestó vacío".
|
|
47
|
+
*/
|
|
48
|
+
export declare function conectar(comando: string, args: string[], cwd: string, opciones?: {
|
|
49
|
+
timeoutInicializacionMs?: number;
|
|
50
|
+
}): Promise<ClienteLsp>;
|
|
51
|
+
export { uriDeRuta };
|
|
52
|
+
//# sourceMappingURL=cliente.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cliente.d.ts","sourceRoot":"","sources":["../../../src/core/lsp/cliente.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAaH,sGAAqG;AACrG,qBAAa,QAAS,SAAQ,KAAK;IAGlC,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,CAAC;IAE9D,YAAY,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,EAIhF;CACD;AAED,8GAA6G;AAC7G,MAAM,WAAW,UAAU;IAC1B,2GAA0G;IAC1G,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3E,uEAAsE;IACtE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IACjD;;;;;OAKG;IACH,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,iHAAgH;IAChH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAgFD,iBAAS,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGvC;AAED;;;;;;;GAOG;AACH,wBAAsB,QAAQ,CAC7B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE;IAAE,uBAAuB,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7C,OAAO,CAAC,UAAU,CAAC,CAuHrB;AAED,OAAO,EAAE,SAAS,EAAE,CAAC","sourcesContent":["/**\n * Cliente JSON-RPC sobre stdio contra un servidor de lenguaje (LSP).\n *\n * Fichero nuestro (coste cero de fork): el LanguageService de TypeScript en\n * `core/edicion/tipos.ts` cubre un único lenguaje sin salir de proceso; esto\n * es lo que hace falta para los demás — hablar el protocolo LSP con un\n * binario externo que arranca y para por comando.\n *\n * Decisión deliberada de diseño (ponytail): un servidor por LLAMADA, no un\n * pool de servidores vivos entre llamadas. Arrancar `gopls`/`rust-analyzer`\n * cuesta cientos de ms, pero un servidor que sobrevive a la llamada que lo\n * arrancó es exactamente el \"proceso huérfano\" que la puerta de este hueco\n * prohíbe, y mantener un pool con temporizador de inactividad es la mitad de\n * `client.ts` del competidor (1601 líneas) para un problema que aquí no\n * existe todavía. Subir a un pool es la mejora natural si el coste de\n * relanzar por llamada llega a notarse.\n */\n\nimport { type ChildProcessWithoutNullStreams, spawn } from \"node:child_process\";\n\n/** Cabecera LSP: los mensajes van precedidos de `Content-Length` en BYTES, no en caracteres. */\nconst SEPARADOR = \"\\r\\n\\r\\n\";\nconst PATRON_LONGITUD = /Content-Length:\\s*(\\d+)/i;\n\ninterface PeticionPendiente {\n\tresolver: (valor: unknown) => void;\n\trechazar: (error: Error) => void;\n}\n\n/** Lo que de verdad puede fallar al hablar con el servidor: nunca se colapsa en un único \"error\". */\nexport class ErrorLsp extends Error {\n\t// Campo explícito, no propiedad de parámetro: el proyecto compila con\n\t// `erasableSyntaxOnly`, que prohíbe la forma corta por no ser borrable.\n\treadonly tipo: \"proceso_murio\" | \"timeout\" | \"rpc\" | \"cierre\";\n\n\tconstructor(message: string, tipo: \"proceso_murio\" | \"timeout\" | \"rpc\" | \"cierre\") {\n\t\tsuper(message);\n\t\tthis.name = \"ErrorLsp\";\n\t\tthis.tipo = tipo;\n\t}\n}\n\n/** Conexión JSON-RPC ya inicializada (handshake `initialize`/`initialized` hecho) contra un servidor LSP. */\nexport interface ClienteLsp {\n\t/** Petición LSP que espera respuesta. Rechaza con `ErrorLsp` si el proceso muere o se agota el tiempo. */\n\tenviar<T>(metodo: string, params: unknown, timeoutMs?: number): Promise<T>;\n\t/** Notificación LSP sin respuesta (p. ej. `textDocument/didOpen`). */\n\tnotificar(metodo: string, params: unknown): void;\n\t/**\n\t * Cierre limpio: `shutdown` (petición) → `exit` (notificación) → espera a que\n\t * el proceso termine solo → `SIGKILL` si no lo ha hecho a tiempo.\n\t * Al resolver, el proceso YA NO existe — es la garantía que pide la puerta\n\t * de \"ningún servidor queda vivo al terminar\".\n\t */\n\tcerrar(): Promise<void>;\n\t/** PID del proceso del servidor. Solo para diagnóstico/pruebas: comprobar que no queda vivo tras `cerrar()`. */\n\treadonly pid: number | undefined;\n}\n\nfunction escribirMensaje(proc: ChildProcessWithoutNullStreams, cuerpo: unknown): void {\n\tconst json = JSON.stringify(cuerpo);\n\t// Content-Length cuenta BYTES UTF-8, no unidades de código: un símbolo o\n\t// comentario no-ASCII en el nombre nuevo de un rename lo desincroniza si se\n\t// mide en caracteres.\n\tconst bytes = Buffer.byteLength(json, \"utf-8\");\n\tproc.stdin.write(`Content-Length: ${bytes}${SEPARADOR}${json}`);\n}\n\n/** Trocea el flujo de stdout del servidor en mensajes JSON-RPC completos, cabecera incluida. */\nclass Trocador {\n\tprivate buffer = Buffer.alloc(0);\n\n\tagregar(chunk: Buffer): unknown[] {\n\t\tthis.buffer = Buffer.concat([this.buffer, chunk]);\n\t\tconst mensajes: unknown[] = [];\n\t\tfor (;;) {\n\t\t\tconst finCabecera = this.buffer.indexOf(SEPARADOR);\n\t\t\tif (finCabecera === -1) return mensajes;\n\t\t\tconst cabecera = this.buffer.subarray(0, finCabecera).toString(\"utf-8\");\n\t\t\tconst coincidencia = cabecera.match(PATRON_LONGITUD);\n\t\t\tif (!coincidencia) {\n\t\t\t\t// Cabecera sin Content-Length: no hay forma fiable de saber dónde\n\t\t\t\t// empieza el siguiente mensaje. Se descarta hasta el separador y se\n\t\t\t\t// sigue — un servidor mal comportado no debe colgar el cliente.\n\t\t\t\tthis.buffer = this.buffer.subarray(finCabecera + SEPARADOR.length);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst longitud = Number(coincidencia[1]);\n\t\t\tconst inicioCuerpo = finCabecera + SEPARADOR.length;\n\t\t\tif (this.buffer.length < inicioCuerpo + longitud) return mensajes; // cuerpo incompleto, esperar más datos\n\t\t\tconst cuerpo = this.buffer.subarray(inicioCuerpo, inicioCuerpo + longitud).toString(\"utf-8\");\n\t\t\tthis.buffer = this.buffer.subarray(inicioCuerpo + longitud);\n\t\t\ttry {\n\t\t\t\tmensajes.push(JSON.parse(cuerpo));\n\t\t\t} catch {\n\t\t\t\t// JSON roto de un servidor concreto no debe tirar abajo al cliente:\n\t\t\t\t// se ignora ese mensaje y se sigue troceando el resto del flujo.\n\t\t\t}\n\t\t}\n\t}\n}\n\nconst ESPERA_SALIDA_MS = 2000;\n\n/** Espera a que el proceso emita `exit`, o hasta `timeoutMs`. `true` = salió solo. */\nfunction esperarSalida(proc: ChildProcessWithoutNullStreams, timeoutMs: number): Promise<boolean> {\n\tif (proc.exitCode !== null || proc.signalCode !== null) return Promise.resolve(true);\n\treturn new Promise((resolver) => {\n\t\tconst temporizador = setTimeout(() => {\n\t\t\tproc.off(\"exit\", alSalir);\n\t\t\tresolver(false);\n\t\t}, timeoutMs);\n\t\tfunction alSalir() {\n\t\t\tclearTimeout(temporizador);\n\t\t\tresolver(true);\n\t\t}\n\t\tproc.once(\"exit\", alSalir);\n\t});\n}\n\n/** Capacidades mínimas que necesitan rename/symbols/definition/references. Ampliar aquí, no en cada tool. */\nconst CAPACIDADES_CLIENTE = {\n\ttextDocument: {\n\t\tsynchronization: { didSave: true, dynamicRegistration: false },\n\t\tdefinition: { dynamicRegistration: false, linkSupport: false },\n\t\treferences: { dynamicRegistration: false },\n\t\tdocumentSymbol: { dynamicRegistration: false, hierarchicalDocumentSymbolSupport: true },\n\t\trename: { dynamicRegistration: false, prepareSupport: false },\n\t},\n\tworkspace: {\n\t\tapplyEdit: false, // el cliente aplica el WorkspaceEdit él mismo (edits.ts); no delega en el servidor\n\t\tworkspaceEdit: { documentChanges: true, resourceOperations: [] },\n\t\tworkspaceFolders: true,\n\t\tsymbol: { dynamicRegistration: false },\n\t},\n} as const;\n\nfunction uriDeRuta(ruta: string): string {\n\t// file:// + porcentaje-escapado, igual que hace cualquier cliente LSP normal.\n\treturn `file://${encodeURI(ruta).replace(/#/g, \"%23\")}`;\n}\n\n/**\n * Arranca `comando` como servidor LSP, hace el handshake `initialize` +\n * `initialized` y devuelve un cliente listo para usar.\n *\n * Lanza `ErrorLsp` (nunca falla en silencio) si el binario no arranca o el\n * `initialize` no responde a tiempo — quien llama distingue \"no se pudo\n * hablar con el servidor\" de \"el servidor contestó vacío\".\n */\nexport async function conectar(\n\tcomando: string,\n\targs: string[],\n\tcwd: string,\n\topciones?: { timeoutInicializacionMs?: number },\n): Promise<ClienteLsp> {\n\tconst proc = spawn(comando, args, { cwd, stdio: [\"pipe\", \"pipe\", \"pipe\"] });\n\n\tconst pendientes = new Map<number, PeticionPendiente>();\n\tlet siguienteId = 1;\n\tlet cerrado = false;\n\n\tconst trocador = new Trocador();\n\tproc.stdout.on(\"data\", (chunk: Buffer) => {\n\t\tfor (const mensaje of trocador.agregar(chunk)) manejarMensaje(mensaje as Record<string, unknown>);\n\t});\n\n\t// stderr de un servidor LSP suele ser su log, no un fallo: se descarta salvo\n\t// que el proceso muera, momento en el que sí importa para el mensaje de error.\n\tlet ultimoStderr = \"\";\n\tproc.stderr.on(\"data\", (chunk: Buffer) => {\n\t\tultimoStderr = chunk.toString(\"utf-8\").slice(-2000);\n\t});\n\n\tfunction manejarMensaje(mensaje: Record<string, unknown>): void {\n\t\tif (typeof mensaje.id !== \"number\") return; // notificación del servidor (p. ej. publishDiagnostics): se ignora, no la necesitamos\n\t\tconst pendiente = pendientes.get(mensaje.id);\n\t\tif (!pendiente) return;\n\t\tpendientes.delete(mensaje.id);\n\t\tif (mensaje.error) {\n\t\t\tconst err = mensaje.error as { message?: string; code?: number };\n\t\t\tpendiente.rechazar(\n\t\t\t\tnew ErrorLsp(`el servidor respondió un error: ${err.message ?? JSON.stringify(err)}`, \"rpc\"),\n\t\t\t);\n\t\t} else {\n\t\t\tpendiente.resolver(mensaje.result);\n\t\t}\n\t}\n\n\tfunction rechazarTodoPendiente(error: Error): void {\n\t\tfor (const p of pendientes.values()) p.rechazar(error);\n\t\tpendientes.clear();\n\t}\n\n\tlet procesoMuerto: Error | null = null;\n\tproc.once(\"exit\", (codigo, senal) => {\n\t\tif (!cerrado) {\n\t\t\tprocesoMuerto = new ErrorLsp(\n\t\t\t\t`el servidor de lenguaje terminó solo (código ${codigo}, señal ${senal}): ${ultimoStderr || \"sin salida en stderr\"}`,\n\t\t\t\t\"proceso_murio\",\n\t\t\t);\n\t\t\trechazarTodoPendiente(procesoMuerto);\n\t\t}\n\t});\n\tproc.once(\"error\", (error) => {\n\t\tprocesoMuerto = new ErrorLsp(`no se pudo arrancar «${comando}»: ${error.message}`, \"proceso_murio\");\n\t\trechazarTodoPendiente(procesoMuerto);\n\t});\n\n\tfunction enviar<T>(metodo: string, params: unknown, timeoutMs = 30_000): Promise<T> {\n\t\tif (procesoMuerto) return Promise.reject(procesoMuerto);\n\t\tconst id = siguienteId++;\n\t\treturn new Promise<T>((resolver, rechazar) => {\n\t\t\tconst temporizador = setTimeout(() => {\n\t\t\t\tpendientes.delete(id);\n\t\t\t\trechazar(new ErrorLsp(`«${metodo}» no respondió en ${timeoutMs}ms`, \"timeout\"));\n\t\t\t}, timeoutMs);\n\t\t\tpendientes.set(id, {\n\t\t\t\tresolver: (v) => {\n\t\t\t\t\tclearTimeout(temporizador);\n\t\t\t\t\tresolver(v as T);\n\t\t\t\t},\n\t\t\t\trechazar: (e) => {\n\t\t\t\t\tclearTimeout(temporizador);\n\t\t\t\t\trechazar(e);\n\t\t\t\t},\n\t\t\t});\n\t\t\tescribirMensaje(proc, { jsonrpc: \"2.0\", id, method: metodo, params });\n\t\t});\n\t}\n\n\tfunction notificar(metodo: string, params: unknown): void {\n\t\tif (procesoMuerto) return;\n\t\tescribirMensaje(proc, { jsonrpc: \"2.0\", method: metodo, params });\n\t}\n\n\tasync function cerrar(): Promise<void> {\n\t\tif (cerrado) return;\n\t\tcerrado = true;\n\t\tif (!procesoMuerto) {\n\t\t\t// Handshake formal primero: le da al servidor la oportunidad de soltar\n\t\t\t// ficheros de bloqueo, sockets, etc. antes del kill.\n\t\t\tawait enviar(\"shutdown\", null, 3000).catch(() => {});\n\t\t\tnotificar(\"exit\", undefined);\n\t\t}\n\t\trechazarTodoPendiente(new ErrorLsp(\"cliente LSP cerrado\", \"cierre\"));\n\t\tif (await esperarSalida(proc, ESPERA_SALIDA_MS)) return;\n\t\tproc.kill(\"SIGKILL\");\n\t\tawait esperarSalida(proc, ESPERA_SALIDA_MS);\n\t\t// Si tras SIGKILL sigue sin confirmar salida (proceso zombi, señal\n\t\t// bloqueada) no hay nada más que este cliente pueda hacer: se ha hecho\n\t\t// lo posible y se devuelve el control. Quien orquesta varios clientes\n\t\t// puede comprobar el pid con `process.kill(-1, 0)` para decidir si avisa.\n\t}\n\n\ttry {\n\t\tconst timeoutInit = opciones?.timeoutInicializacionMs ?? 15_000;\n\t\tawait enviar(\n\t\t\t\"initialize\",\n\t\t\t{\n\t\t\t\tprocessId: process.pid,\n\t\t\t\trootUri: uriDeRuta(cwd),\n\t\t\t\tworkspaceFolders: [{ uri: uriDeRuta(cwd), name: cwd }],\n\t\t\t\tcapabilities: CAPACIDADES_CLIENTE,\n\t\t\t},\n\t\t\ttimeoutInit,\n\t\t);\n\t\tnotificar(\"initialized\", {});\n\t} catch (error) {\n\t\tawait cerrar();\n\t\tthrow error;\n\t}\n\n\treturn { enviar, notificar, cerrar, pid: proc.pid };\n}\n\nexport { uriDeRuta };\n"]}
|