@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,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Búsqueda por FORMA sintáctica, no por texto.
|
|
3
|
+
*
|
|
4
|
+
* `grep "function foo"` encuentra la declaración, el comentario que la
|
|
5
|
+
* menciona y la cadena que la nombra en un mensaje de error: para `grep`, las
|
|
6
|
+
* tres líneas son iguales, texto que casa con el patrón. Esto camina el AST
|
|
7
|
+
* real de TypeScript, así que un comentario (trivia, no nodo) o una cadena
|
|
8
|
+
* (`StringLiteral`, un tipo de nodo que ninguno de nuestros patrones pide)
|
|
9
|
+
* nunca pueden colar como si fueran la declaración.
|
|
10
|
+
*
|
|
11
|
+
* Mismo compilador que ya usa `edicion/parseo.ts`: sin dependencias nuevas, y
|
|
12
|
+
* ya sabemos que acierta en sintaxis (no en tipos, que es justo lo que no
|
|
13
|
+
* hace falta para esto). Cubre `.ts/.tsx/.js/.jsx` y sus variantes de módulo;
|
|
14
|
+
* el resto de lenguajes de programación conocidos se declaran SIN COBERTURA
|
|
15
|
+
* en vez de callarse y devolver cero resultados, que es indistinguible de "no
|
|
16
|
+
* hay nada que encontrar" y por eso miente.
|
|
17
|
+
*/
|
|
18
|
+
import ts from "typescript";
|
|
19
|
+
export type TipoPatron = "funcion" | "clase" | "tipo" | "llamada" | "import" | "propiedad";
|
|
20
|
+
export interface Patron {
|
|
21
|
+
tipo: TipoPatron;
|
|
22
|
+
nombre: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* `null` = el patrón no tiene la forma `tipo:nombre` que entendemos.
|
|
26
|
+
*
|
|
27
|
+
* Se corta en el PRIMER `:` a propósito: `import:node:fs` tiene que dejar
|
|
28
|
+
* `nombre = "node:fs"` intacto, con su propio `:` de módulo interno de Node.
|
|
29
|
+
*/
|
|
30
|
+
export declare function parsearPatron(cadena: string): Patron | null;
|
|
31
|
+
export declare function extensionCubierta(ruta: string): boolean;
|
|
32
|
+
export declare function esOtroLenguajeConocido(ruta: string): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Todos los ficheros bajo `raiz` (o `[raiz]` si ya es un fichero).
|
|
35
|
+
*
|
|
36
|
+
* Sin `fd` ni glob: un recorrido a mano basta para lo que pide esta tool, y
|
|
37
|
+
* evita depender de un binario externo para algo que `readdirSync` ya resuelve.
|
|
38
|
+
* Se saltan los directorios ocultos y los de artefactos de build, igual que
|
|
39
|
+
* haría cualquier búsqueda de código real.
|
|
40
|
+
*/
|
|
41
|
+
export declare function listarFicheros(raiz: string): string[];
|
|
42
|
+
/** Todos los nodos de `fuente` que coinciden con `patron`, en orden de aparición. */
|
|
43
|
+
export declare function nodosCoincidentes(fuente: ts.SourceFile, patron: Patron): ts.Node[];
|
|
44
|
+
export interface Coincidencia {
|
|
45
|
+
ruta: string;
|
|
46
|
+
linea: number;
|
|
47
|
+
fragmento: string;
|
|
48
|
+
}
|
|
49
|
+
export interface ResultadoBusquedaEstructural {
|
|
50
|
+
coincidencias: Coincidencia[];
|
|
51
|
+
/** Ficheros de código en un lenguaje que este buscador no sabe leer. Nunca se disfraza de "sin resultados". */
|
|
52
|
+
noCubiertos: string[];
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* `null` = el patrón no se entendió (fallo de lectura, no "no hay nada").
|
|
56
|
+
*
|
|
57
|
+
* `raices` son rutas absolutas (ficheros o directorios); `cwd` solo se usa
|
|
58
|
+
* para dejar las rutas del resultado relativas y legibles.
|
|
59
|
+
*/
|
|
60
|
+
export declare function buscarEstructural(patronCadena: string, raices: string[], cwd: string): ResultadoBusquedaEstructural | null;
|
|
61
|
+
//# sourceMappingURL=buscar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buscar.d.ts","sourceRoot":"","sources":["../../../src/core/estructural/buscar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;AAsB3F,MAAM,WAAW,MAAM;IACtB,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAO3D;AAqDD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE5D;AAID;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAgCrD;AAkDD,sFAAqF;AACrF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,EAAE,CAAC,IAAI,EAAE,CAQlF;AAQD,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,4BAA4B;IAC5C,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,gHAA+G;IAC/G,WAAW,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAChC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EAAE,EAChB,GAAG,EAAE,MAAM,GACT,4BAA4B,GAAG,IAAI,CA2BrC","sourcesContent":["/**\n * Búsqueda por FORMA sintáctica, no por texto.\n *\n * `grep \"function foo\"` encuentra la declaración, el comentario que la\n * menciona y la cadena que la nombra en un mensaje de error: para `grep`, las\n * tres líneas son iguales, texto que casa con el patrón. Esto camina el AST\n * real de TypeScript, así que un comentario (trivia, no nodo) o una cadena\n * (`StringLiteral`, un tipo de nodo que ninguno de nuestros patrones pide)\n * nunca pueden colar como si fueran la declaración.\n *\n * Mismo compilador que ya usa `edicion/parseo.ts`: sin dependencias nuevas, y\n * ya sabemos que acierta en sintaxis (no en tipos, que es justo lo que no\n * hace falta para esto). Cubre `.ts/.tsx/.js/.jsx` y sus variantes de módulo;\n * el resto de lenguajes de programación conocidos se declaran SIN COBERTURA\n * en vez de callarse y devolver cero resultados, que es indistinguible de \"no\n * hay nada que encontrar\" y por eso miente.\n */\n\nimport { readdirSync, readFileSync, statSync } from \"node:fs\";\nimport { join, relative } from \"node:path\";\nimport ts from \"typescript\";\n\nexport type TipoPatron = \"funcion\" | \"clase\" | \"tipo\" | \"llamada\" | \"import\" | \"propiedad\";\n\n/** Alias en español e inglés para el mismo tipo de patrón. */\nconst ALIAS_TIPO: Record<string, TipoPatron> = {\n\tfuncion: \"funcion\",\n\tfunction: \"funcion\",\n\tfunc: \"funcion\",\n\tclase: \"clase\",\n\tclass: \"clase\",\n\ttipo: \"tipo\",\n\ttype: \"tipo\",\n\tinterfaz: \"tipo\",\n\tinterface: \"tipo\",\n\tllamada: \"llamada\",\n\tcall: \"llamada\",\n\timport: \"import\",\n\timportacion: \"import\",\n\tpropiedad: \"propiedad\",\n\tproperty: \"propiedad\",\n\tprop: \"propiedad\",\n};\n\nexport interface Patron {\n\ttipo: TipoPatron;\n\tnombre: string;\n}\n\n/**\n * `null` = el patrón no tiene la forma `tipo:nombre` que entendemos.\n *\n * Se corta en el PRIMER `:` a propósito: `import:node:fs` tiene que dejar\n * `nombre = \"node:fs\"` intacto, con su propio `:` de módulo interno de Node.\n */\nexport function parsearPatron(cadena: string): Patron | null {\n\tconst separador = cadena.indexOf(\":\");\n\tif (separador === -1) return null;\n\tconst tipo = ALIAS_TIPO[cadena.slice(0, separador).trim().toLowerCase()];\n\tconst nombre = cadena.slice(separador + 1).trim();\n\tif (!tipo || nombre === \"\") return null;\n\treturn { tipo, nombre };\n}\n\n/** Lo que este buscador sabe LEER de verdad (parsea con el compilador de TS). */\nconst EXTENSIONES_CUBIERTAS = new Set([\".ts\", \".tsx\", \".js\", \".jsx\", \".mts\", \".cts\", \".mjs\", \".cjs\"]);\n\n/**\n * Lenguajes de programación que reconocemos pero que este buscador NO sabe\n * leer. Un `.py`, un `.go`, un componente `.vue`... tienen que salir como \"sin\n * cobertura\", no como \"cero coincidencias\": lo segundo es indistinguible de\n * haber buscado de verdad y no encontrar nada.\n *\n * Los ficheros que no son código en absoluto (`.json`, `.md`, imágenes...) no\n * entran aquí: nunca pretendimos cubrirlos, así que no hay nada que avisar.\n */\nconst EXTENSIONES_OTRO_LENGUAJE = new Set([\n\t\".py\",\n\t\".go\",\n\t\".rs\",\n\t\".java\",\n\t\".rb\",\n\t\".php\",\n\t\".c\",\n\t\".h\",\n\t\".cpp\",\n\t\".hpp\",\n\t\".cc\",\n\t\".cs\",\n\t\".swift\",\n\t\".kt\",\n\t\".kts\",\n\t\".scala\",\n\t\".sh\",\n\t\".bash\",\n\t\".zsh\",\n\t\".lua\",\n\t\".pl\",\n\t\".ex\",\n\t\".exs\",\n\t\".erl\",\n\t\".hs\",\n\t\".clj\",\n\t\".dart\",\n\t\".m\",\n\t\".mm\",\n\t\".vue\",\n\t\".svelte\",\n]);\n\nfunction extensionDe(ruta: string): string {\n\tconst punto = ruta.lastIndexOf(\".\");\n\treturn punto === -1 ? \"\" : ruta.slice(punto).toLowerCase();\n}\n\nexport function extensionCubierta(ruta: string): boolean {\n\treturn EXTENSIONES_CUBIERTAS.has(extensionDe(ruta));\n}\n\nexport function esOtroLenguajeConocido(ruta: string): boolean {\n\treturn EXTENSIONES_OTRO_LENGUAJE.has(extensionDe(ruta));\n}\n\nconst DIRS_IGNORADOS = new Set([\"node_modules\", \"dist\", \"build\", \"out\", \"coverage\", \".next\", \".turbo\", \".cache\"]);\n\n/**\n * Todos los ficheros bajo `raiz` (o `[raiz]` si ya es un fichero).\n *\n * Sin `fd` ni glob: un recorrido a mano basta para lo que pide esta tool, y\n * evita depender de un binario externo para algo que `readdirSync` ya resuelve.\n * Se saltan los directorios ocultos y los de artefactos de build, igual que\n * haría cualquier búsqueda de código real.\n */\nexport function listarFicheros(raiz: string): string[] {\n\tlet info: ReturnType<typeof statSync>;\n\ttry {\n\t\tinfo = statSync(raiz);\n\t} catch {\n\t\treturn [];\n\t}\n\tif (info.isFile()) return [raiz];\n\tif (!info.isDirectory()) return [];\n\n\tconst resultado: string[] = [];\n\tconst pila = [raiz];\n\twhile (pila.length > 0) {\n\t\tconst dir = pila.pop() as string;\n\t\tlet entradas: import(\"node:fs\").Dirent[];\n\t\ttry {\n\t\t\tentradas = readdirSync(dir, { withFileTypes: true });\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const entrada of entradas) {\n\t\t\tif (entrada.name.startsWith(\".\")) continue; // .git, .cache, etc.\n\t\t\tconst ruta = join(dir, entrada.name);\n\t\t\tif (entrada.isSymbolicLink()) continue; // evita ciclos por symlink\n\t\t\tif (entrada.isDirectory()) {\n\t\t\t\tif (!DIRS_IGNORADOS.has(entrada.name)) pila.push(ruta);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (entrada.isFile()) resultado.push(ruta);\n\t\t}\n\t}\n\treturn resultado;\n}\n\nfunction nombreDeCallee(expr: ts.Expression): string | null {\n\tif (ts.isIdentifier(expr)) return expr.text;\n\tif (ts.isPropertyAccessExpression(expr) && ts.isIdentifier(expr.name)) return expr.name.text;\n\treturn null;\n}\n\nfunction nombreDePropiedad(nombre: ts.PropertyName): string | null {\n\tif (ts.isIdentifier(nombre) || ts.isPrivateIdentifier(nombre)) return nombre.text;\n\tif (ts.isStringLiteral(nombre)) return nombre.text;\n\treturn null;\n}\n\n/** ¿Este nodo del AST es la declaración/uso que pide el patrón? */\nfunction coincideNodo(nodo: ts.Node, patron: Patron): boolean {\n\tswitch (patron.tipo) {\n\t\tcase \"funcion\":\n\t\t\tif (ts.isFunctionDeclaration(nodo)) return nodo.name?.text === patron.nombre;\n\t\t\tif (ts.isVariableDeclaration(nodo) && ts.isIdentifier(nodo.name) && nodo.initializer) {\n\t\t\t\treturn (\n\t\t\t\t\tnodo.name.text === patron.nombre &&\n\t\t\t\t\t(ts.isArrowFunction(nodo.initializer) || ts.isFunctionExpression(nodo.initializer))\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (ts.isMethodDeclaration(nodo)) return nombreDePropiedad(nodo.name) === patron.nombre;\n\t\t\treturn false;\n\t\tcase \"clase\":\n\t\t\treturn ts.isClassDeclaration(nodo) && nodo.name?.text === patron.nombre;\n\t\tcase \"tipo\":\n\t\t\tif (ts.isTypeAliasDeclaration(nodo)) return nodo.name.text === patron.nombre;\n\t\t\tif (ts.isInterfaceDeclaration(nodo)) return nodo.name.text === patron.nombre;\n\t\t\treturn false;\n\t\tcase \"llamada\":\n\t\t\treturn ts.isCallExpression(nodo) && nombreDeCallee(nodo.expression) === patron.nombre;\n\t\tcase \"import\":\n\t\t\treturn (\n\t\t\t\tts.isImportDeclaration(nodo) &&\n\t\t\t\tts.isStringLiteral(nodo.moduleSpecifier) &&\n\t\t\t\tnodo.moduleSpecifier.text === patron.nombre\n\t\t\t);\n\t\tcase \"propiedad\":\n\t\t\tif (ts.isPropertyAssignment(nodo) || ts.isPropertySignature(nodo) || ts.isPropertyDeclaration(nodo)) {\n\t\t\t\treturn nombreDePropiedad(nodo.name) === patron.nombre;\n\t\t\t}\n\t\t\tif (ts.isShorthandPropertyAssignment(nodo)) return nodo.name.text === patron.nombre;\n\t\t\treturn false;\n\t}\n}\n\n/** Todos los nodos de `fuente` que coinciden con `patron`, en orden de aparición. */\nexport function nodosCoincidentes(fuente: ts.SourceFile, patron: Patron): ts.Node[] {\n\tconst resultado: ts.Node[] = [];\n\tconst visitar = (nodo: ts.Node): void => {\n\t\tif (coincideNodo(nodo, patron)) resultado.push(nodo);\n\t\tts.forEachChild(nodo, visitar);\n\t};\n\tvisitar(fuente);\n\treturn resultado;\n}\n\nfunction lineaYFragmento(fuente: ts.SourceFile, posicion: number): { linea: number; fragmento: string } {\n\tconst { line } = fuente.getLineAndCharacterOfPosition(posicion);\n\tconst texto = fuente.text.split(\"\\n\")[line] ?? \"\";\n\treturn { linea: line + 1, fragmento: texto.trim().slice(0, 200) };\n}\n\nexport interface Coincidencia {\n\truta: string;\n\tlinea: number;\n\tfragmento: string;\n}\n\nexport interface ResultadoBusquedaEstructural {\n\tcoincidencias: Coincidencia[];\n\t/** Ficheros de código en un lenguaje que este buscador no sabe leer. Nunca se disfraza de \"sin resultados\". */\n\tnoCubiertos: string[];\n}\n\n/**\n * `null` = el patrón no se entendió (fallo de lectura, no \"no hay nada\").\n *\n * `raices` son rutas absolutas (ficheros o directorios); `cwd` solo se usa\n * para dejar las rutas del resultado relativas y legibles.\n */\nexport function buscarEstructural(\n\tpatronCadena: string,\n\traices: string[],\n\tcwd: string,\n): ResultadoBusquedaEstructural | null {\n\tconst patron = parsearPatron(patronCadena);\n\tif (!patron) return null;\n\n\tconst coincidencias: Coincidencia[] = [];\n\tconst noCubiertos = new Set<string>();\n\tfor (const raiz of raices) {\n\t\tfor (const ruta of listarFicheros(raiz)) {\n\t\t\tconst relativa = relative(cwd, ruta) || ruta;\n\t\t\tif (esOtroLenguajeConocido(ruta)) {\n\t\t\t\tnoCubiertos.add(relativa);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!extensionCubierta(ruta)) continue; // no es código: ni cobertura ni aviso\n\t\t\tlet codigo: string;\n\t\t\ttry {\n\t\t\t\tcodigo = readFileSync(ruta, \"utf-8\");\n\t\t\t} catch {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst fuente = ts.createSourceFile(ruta, codigo, ts.ScriptTarget.Latest, false);\n\t\t\tfor (const nodo of nodosCoincidentes(fuente, patron)) {\n\t\t\t\tcoincidencias.push({ ruta: relativa, ...lineaYFragmento(fuente, nodo.getStart(fuente)) });\n\t\t\t}\n\t\t}\n\t}\n\treturn { coincidencias, noCubiertos: [...noCubiertos].sort() };\n}\n"]}
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Búsqueda por FORMA sintáctica, no por texto.
|
|
3
|
+
*
|
|
4
|
+
* `grep "function foo"` encuentra la declaración, el comentario que la
|
|
5
|
+
* menciona y la cadena que la nombra en un mensaje de error: para `grep`, las
|
|
6
|
+
* tres líneas son iguales, texto que casa con el patrón. Esto camina el AST
|
|
7
|
+
* real de TypeScript, así que un comentario (trivia, no nodo) o una cadena
|
|
8
|
+
* (`StringLiteral`, un tipo de nodo que ninguno de nuestros patrones pide)
|
|
9
|
+
* nunca pueden colar como si fueran la declaración.
|
|
10
|
+
*
|
|
11
|
+
* Mismo compilador que ya usa `edicion/parseo.ts`: sin dependencias nuevas, y
|
|
12
|
+
* ya sabemos que acierta en sintaxis (no en tipos, que es justo lo que no
|
|
13
|
+
* hace falta para esto). Cubre `.ts/.tsx/.js/.jsx` y sus variantes de módulo;
|
|
14
|
+
* el resto de lenguajes de programación conocidos se declaran SIN COBERTURA
|
|
15
|
+
* en vez de callarse y devolver cero resultados, que es indistinguible de "no
|
|
16
|
+
* hay nada que encontrar" y por eso miente.
|
|
17
|
+
*/
|
|
18
|
+
import { readdirSync, readFileSync, statSync } from "node:fs";
|
|
19
|
+
import { join, relative } from "node:path";
|
|
20
|
+
import ts from "typescript";
|
|
21
|
+
/** Alias en español e inglés para el mismo tipo de patrón. */
|
|
22
|
+
const ALIAS_TIPO = {
|
|
23
|
+
funcion: "funcion",
|
|
24
|
+
function: "funcion",
|
|
25
|
+
func: "funcion",
|
|
26
|
+
clase: "clase",
|
|
27
|
+
class: "clase",
|
|
28
|
+
tipo: "tipo",
|
|
29
|
+
type: "tipo",
|
|
30
|
+
interfaz: "tipo",
|
|
31
|
+
interface: "tipo",
|
|
32
|
+
llamada: "llamada",
|
|
33
|
+
call: "llamada",
|
|
34
|
+
import: "import",
|
|
35
|
+
importacion: "import",
|
|
36
|
+
propiedad: "propiedad",
|
|
37
|
+
property: "propiedad",
|
|
38
|
+
prop: "propiedad",
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* `null` = el patrón no tiene la forma `tipo:nombre` que entendemos.
|
|
42
|
+
*
|
|
43
|
+
* Se corta en el PRIMER `:` a propósito: `import:node:fs` tiene que dejar
|
|
44
|
+
* `nombre = "node:fs"` intacto, con su propio `:` de módulo interno de Node.
|
|
45
|
+
*/
|
|
46
|
+
export function parsearPatron(cadena) {
|
|
47
|
+
const separador = cadena.indexOf(":");
|
|
48
|
+
if (separador === -1)
|
|
49
|
+
return null;
|
|
50
|
+
const tipo = ALIAS_TIPO[cadena.slice(0, separador).trim().toLowerCase()];
|
|
51
|
+
const nombre = cadena.slice(separador + 1).trim();
|
|
52
|
+
if (!tipo || nombre === "")
|
|
53
|
+
return null;
|
|
54
|
+
return { tipo, nombre };
|
|
55
|
+
}
|
|
56
|
+
/** Lo que este buscador sabe LEER de verdad (parsea con el compilador de TS). */
|
|
57
|
+
const EXTENSIONES_CUBIERTAS = new Set([".ts", ".tsx", ".js", ".jsx", ".mts", ".cts", ".mjs", ".cjs"]);
|
|
58
|
+
/**
|
|
59
|
+
* Lenguajes de programación que reconocemos pero que este buscador NO sabe
|
|
60
|
+
* leer. Un `.py`, un `.go`, un componente `.vue`... tienen que salir como "sin
|
|
61
|
+
* cobertura", no como "cero coincidencias": lo segundo es indistinguible de
|
|
62
|
+
* haber buscado de verdad y no encontrar nada.
|
|
63
|
+
*
|
|
64
|
+
* Los ficheros que no son código en absoluto (`.json`, `.md`, imágenes...) no
|
|
65
|
+
* entran aquí: nunca pretendimos cubrirlos, así que no hay nada que avisar.
|
|
66
|
+
*/
|
|
67
|
+
const EXTENSIONES_OTRO_LENGUAJE = new Set([
|
|
68
|
+
".py",
|
|
69
|
+
".go",
|
|
70
|
+
".rs",
|
|
71
|
+
".java",
|
|
72
|
+
".rb",
|
|
73
|
+
".php",
|
|
74
|
+
".c",
|
|
75
|
+
".h",
|
|
76
|
+
".cpp",
|
|
77
|
+
".hpp",
|
|
78
|
+
".cc",
|
|
79
|
+
".cs",
|
|
80
|
+
".swift",
|
|
81
|
+
".kt",
|
|
82
|
+
".kts",
|
|
83
|
+
".scala",
|
|
84
|
+
".sh",
|
|
85
|
+
".bash",
|
|
86
|
+
".zsh",
|
|
87
|
+
".lua",
|
|
88
|
+
".pl",
|
|
89
|
+
".ex",
|
|
90
|
+
".exs",
|
|
91
|
+
".erl",
|
|
92
|
+
".hs",
|
|
93
|
+
".clj",
|
|
94
|
+
".dart",
|
|
95
|
+
".m",
|
|
96
|
+
".mm",
|
|
97
|
+
".vue",
|
|
98
|
+
".svelte",
|
|
99
|
+
]);
|
|
100
|
+
function extensionDe(ruta) {
|
|
101
|
+
const punto = ruta.lastIndexOf(".");
|
|
102
|
+
return punto === -1 ? "" : ruta.slice(punto).toLowerCase();
|
|
103
|
+
}
|
|
104
|
+
export function extensionCubierta(ruta) {
|
|
105
|
+
return EXTENSIONES_CUBIERTAS.has(extensionDe(ruta));
|
|
106
|
+
}
|
|
107
|
+
export function esOtroLenguajeConocido(ruta) {
|
|
108
|
+
return EXTENSIONES_OTRO_LENGUAJE.has(extensionDe(ruta));
|
|
109
|
+
}
|
|
110
|
+
const DIRS_IGNORADOS = new Set(["node_modules", "dist", "build", "out", "coverage", ".next", ".turbo", ".cache"]);
|
|
111
|
+
/**
|
|
112
|
+
* Todos los ficheros bajo `raiz` (o `[raiz]` si ya es un fichero).
|
|
113
|
+
*
|
|
114
|
+
* Sin `fd` ni glob: un recorrido a mano basta para lo que pide esta tool, y
|
|
115
|
+
* evita depender de un binario externo para algo que `readdirSync` ya resuelve.
|
|
116
|
+
* Se saltan los directorios ocultos y los de artefactos de build, igual que
|
|
117
|
+
* haría cualquier búsqueda de código real.
|
|
118
|
+
*/
|
|
119
|
+
export function listarFicheros(raiz) {
|
|
120
|
+
let info;
|
|
121
|
+
try {
|
|
122
|
+
info = statSync(raiz);
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
return [];
|
|
126
|
+
}
|
|
127
|
+
if (info.isFile())
|
|
128
|
+
return [raiz];
|
|
129
|
+
if (!info.isDirectory())
|
|
130
|
+
return [];
|
|
131
|
+
const resultado = [];
|
|
132
|
+
const pila = [raiz];
|
|
133
|
+
while (pila.length > 0) {
|
|
134
|
+
const dir = pila.pop();
|
|
135
|
+
let entradas;
|
|
136
|
+
try {
|
|
137
|
+
entradas = readdirSync(dir, { withFileTypes: true });
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
for (const entrada of entradas) {
|
|
143
|
+
if (entrada.name.startsWith("."))
|
|
144
|
+
continue; // .git, .cache, etc.
|
|
145
|
+
const ruta = join(dir, entrada.name);
|
|
146
|
+
if (entrada.isSymbolicLink())
|
|
147
|
+
continue; // evita ciclos por symlink
|
|
148
|
+
if (entrada.isDirectory()) {
|
|
149
|
+
if (!DIRS_IGNORADOS.has(entrada.name))
|
|
150
|
+
pila.push(ruta);
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
if (entrada.isFile())
|
|
154
|
+
resultado.push(ruta);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return resultado;
|
|
158
|
+
}
|
|
159
|
+
function nombreDeCallee(expr) {
|
|
160
|
+
if (ts.isIdentifier(expr))
|
|
161
|
+
return expr.text;
|
|
162
|
+
if (ts.isPropertyAccessExpression(expr) && ts.isIdentifier(expr.name))
|
|
163
|
+
return expr.name.text;
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
function nombreDePropiedad(nombre) {
|
|
167
|
+
if (ts.isIdentifier(nombre) || ts.isPrivateIdentifier(nombre))
|
|
168
|
+
return nombre.text;
|
|
169
|
+
if (ts.isStringLiteral(nombre))
|
|
170
|
+
return nombre.text;
|
|
171
|
+
return null;
|
|
172
|
+
}
|
|
173
|
+
/** ¿Este nodo del AST es la declaración/uso que pide el patrón? */
|
|
174
|
+
function coincideNodo(nodo, patron) {
|
|
175
|
+
switch (patron.tipo) {
|
|
176
|
+
case "funcion":
|
|
177
|
+
if (ts.isFunctionDeclaration(nodo))
|
|
178
|
+
return nodo.name?.text === patron.nombre;
|
|
179
|
+
if (ts.isVariableDeclaration(nodo) && ts.isIdentifier(nodo.name) && nodo.initializer) {
|
|
180
|
+
return (nodo.name.text === patron.nombre &&
|
|
181
|
+
(ts.isArrowFunction(nodo.initializer) || ts.isFunctionExpression(nodo.initializer)));
|
|
182
|
+
}
|
|
183
|
+
if (ts.isMethodDeclaration(nodo))
|
|
184
|
+
return nombreDePropiedad(nodo.name) === patron.nombre;
|
|
185
|
+
return false;
|
|
186
|
+
case "clase":
|
|
187
|
+
return ts.isClassDeclaration(nodo) && nodo.name?.text === patron.nombre;
|
|
188
|
+
case "tipo":
|
|
189
|
+
if (ts.isTypeAliasDeclaration(nodo))
|
|
190
|
+
return nodo.name.text === patron.nombre;
|
|
191
|
+
if (ts.isInterfaceDeclaration(nodo))
|
|
192
|
+
return nodo.name.text === patron.nombre;
|
|
193
|
+
return false;
|
|
194
|
+
case "llamada":
|
|
195
|
+
return ts.isCallExpression(nodo) && nombreDeCallee(nodo.expression) === patron.nombre;
|
|
196
|
+
case "import":
|
|
197
|
+
return (ts.isImportDeclaration(nodo) &&
|
|
198
|
+
ts.isStringLiteral(nodo.moduleSpecifier) &&
|
|
199
|
+
nodo.moduleSpecifier.text === patron.nombre);
|
|
200
|
+
case "propiedad":
|
|
201
|
+
if (ts.isPropertyAssignment(nodo) || ts.isPropertySignature(nodo) || ts.isPropertyDeclaration(nodo)) {
|
|
202
|
+
return nombreDePropiedad(nodo.name) === patron.nombre;
|
|
203
|
+
}
|
|
204
|
+
if (ts.isShorthandPropertyAssignment(nodo))
|
|
205
|
+
return nodo.name.text === patron.nombre;
|
|
206
|
+
return false;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
/** Todos los nodos de `fuente` que coinciden con `patron`, en orden de aparición. */
|
|
210
|
+
export function nodosCoincidentes(fuente, patron) {
|
|
211
|
+
const resultado = [];
|
|
212
|
+
const visitar = (nodo) => {
|
|
213
|
+
if (coincideNodo(nodo, patron))
|
|
214
|
+
resultado.push(nodo);
|
|
215
|
+
ts.forEachChild(nodo, visitar);
|
|
216
|
+
};
|
|
217
|
+
visitar(fuente);
|
|
218
|
+
return resultado;
|
|
219
|
+
}
|
|
220
|
+
function lineaYFragmento(fuente, posicion) {
|
|
221
|
+
const { line } = fuente.getLineAndCharacterOfPosition(posicion);
|
|
222
|
+
const texto = fuente.text.split("\n")[line] ?? "";
|
|
223
|
+
return { linea: line + 1, fragmento: texto.trim().slice(0, 200) };
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* `null` = el patrón no se entendió (fallo de lectura, no "no hay nada").
|
|
227
|
+
*
|
|
228
|
+
* `raices` son rutas absolutas (ficheros o directorios); `cwd` solo se usa
|
|
229
|
+
* para dejar las rutas del resultado relativas y legibles.
|
|
230
|
+
*/
|
|
231
|
+
export function buscarEstructural(patronCadena, raices, cwd) {
|
|
232
|
+
const patron = parsearPatron(patronCadena);
|
|
233
|
+
if (!patron)
|
|
234
|
+
return null;
|
|
235
|
+
const coincidencias = [];
|
|
236
|
+
const noCubiertos = new Set();
|
|
237
|
+
for (const raiz of raices) {
|
|
238
|
+
for (const ruta of listarFicheros(raiz)) {
|
|
239
|
+
const relativa = relative(cwd, ruta) || ruta;
|
|
240
|
+
if (esOtroLenguajeConocido(ruta)) {
|
|
241
|
+
noCubiertos.add(relativa);
|
|
242
|
+
continue;
|
|
243
|
+
}
|
|
244
|
+
if (!extensionCubierta(ruta))
|
|
245
|
+
continue; // no es código: ni cobertura ni aviso
|
|
246
|
+
let codigo;
|
|
247
|
+
try {
|
|
248
|
+
codigo = readFileSync(ruta, "utf-8");
|
|
249
|
+
}
|
|
250
|
+
catch {
|
|
251
|
+
continue;
|
|
252
|
+
}
|
|
253
|
+
const fuente = ts.createSourceFile(ruta, codigo, ts.ScriptTarget.Latest, false);
|
|
254
|
+
for (const nodo of nodosCoincidentes(fuente, patron)) {
|
|
255
|
+
coincidencias.push({ ruta: relativa, ...lineaYFragmento(fuente, nodo.getStart(fuente)) });
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return { coincidencias, noCubiertos: [...noCubiertos].sort() };
|
|
260
|
+
}
|
|
261
|
+
//# sourceMappingURL=buscar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buscar.js","sourceRoot":"","sources":["../../../src/core/estructural/buscar.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Búsqueda por FORMA sintáctica, no por texto.\n *\n * `grep \"function foo\"` encuentra la declaración, el comentario que la\n * menciona y la cadena que la nombra en un mensaje de error: para `grep`, las\n * tres líneas son iguales, texto que casa con el patrón. Esto camina el AST\n * real de TypeScript, así que un comentario (trivia, no nodo) o una cadena\n * (`StringLiteral`, un tipo de nodo que ninguno de nuestros patrones pide)\n * nunca pueden colar como si fueran la declaración.\n *\n * Mismo compilador que ya usa `edicion/parseo.ts`: sin dependencias nuevas, y\n * ya sabemos que acierta en sintaxis (no en tipos, que es justo lo que no\n * hace falta para esto). Cubre `.ts/.tsx/.js/.jsx` y sus variantes de módulo;\n * el resto de lenguajes de programación conocidos se declaran SIN COBERTURA\n * en vez de callarse y devolver cero resultados, que es indistinguible de \"no\n * hay nada que encontrar\" y por eso miente.\n */\n\nimport { readdirSync, readFileSync, statSync } from \"node:fs\";\nimport { join, relative } from \"node:path\";\nimport ts from \"typescript\";\n\nexport type TipoPatron = \"funcion\" | \"clase\" | \"tipo\" | \"llamada\" | \"import\" | \"propiedad\";\n\n/** Alias en español e inglés para el mismo tipo de patrón. */\nconst ALIAS_TIPO: Record<string, TipoPatron> = {\n\tfuncion: \"funcion\",\n\tfunction: \"funcion\",\n\tfunc: \"funcion\",\n\tclase: \"clase\",\n\tclass: \"clase\",\n\ttipo: \"tipo\",\n\ttype: \"tipo\",\n\tinterfaz: \"tipo\",\n\tinterface: \"tipo\",\n\tllamada: \"llamada\",\n\tcall: \"llamada\",\n\timport: \"import\",\n\timportacion: \"import\",\n\tpropiedad: \"propiedad\",\n\tproperty: \"propiedad\",\n\tprop: \"propiedad\",\n};\n\nexport interface Patron {\n\ttipo: TipoPatron;\n\tnombre: string;\n}\n\n/**\n * `null` = el patrón no tiene la forma `tipo:nombre` que entendemos.\n *\n * Se corta en el PRIMER `:` a propósito: `import:node:fs` tiene que dejar\n * `nombre = \"node:fs\"` intacto, con su propio `:` de módulo interno de Node.\n */\nexport function parsearPatron(cadena: string): Patron | null {\n\tconst separador = cadena.indexOf(\":\");\n\tif (separador === -1) return null;\n\tconst tipo = ALIAS_TIPO[cadena.slice(0, separador).trim().toLowerCase()];\n\tconst nombre = cadena.slice(separador + 1).trim();\n\tif (!tipo || nombre === \"\") return null;\n\treturn { tipo, nombre };\n}\n\n/** Lo que este buscador sabe LEER de verdad (parsea con el compilador de TS). */\nconst EXTENSIONES_CUBIERTAS = new Set([\".ts\", \".tsx\", \".js\", \".jsx\", \".mts\", \".cts\", \".mjs\", \".cjs\"]);\n\n/**\n * Lenguajes de programación que reconocemos pero que este buscador NO sabe\n * leer. Un `.py`, un `.go`, un componente `.vue`... tienen que salir como \"sin\n * cobertura\", no como \"cero coincidencias\": lo segundo es indistinguible de\n * haber buscado de verdad y no encontrar nada.\n *\n * Los ficheros que no son código en absoluto (`.json`, `.md`, imágenes...) no\n * entran aquí: nunca pretendimos cubrirlos, así que no hay nada que avisar.\n */\nconst EXTENSIONES_OTRO_LENGUAJE = new Set([\n\t\".py\",\n\t\".go\",\n\t\".rs\",\n\t\".java\",\n\t\".rb\",\n\t\".php\",\n\t\".c\",\n\t\".h\",\n\t\".cpp\",\n\t\".hpp\",\n\t\".cc\",\n\t\".cs\",\n\t\".swift\",\n\t\".kt\",\n\t\".kts\",\n\t\".scala\",\n\t\".sh\",\n\t\".bash\",\n\t\".zsh\",\n\t\".lua\",\n\t\".pl\",\n\t\".ex\",\n\t\".exs\",\n\t\".erl\",\n\t\".hs\",\n\t\".clj\",\n\t\".dart\",\n\t\".m\",\n\t\".mm\",\n\t\".vue\",\n\t\".svelte\",\n]);\n\nfunction extensionDe(ruta: string): string {\n\tconst punto = ruta.lastIndexOf(\".\");\n\treturn punto === -1 ? \"\" : ruta.slice(punto).toLowerCase();\n}\n\nexport function extensionCubierta(ruta: string): boolean {\n\treturn EXTENSIONES_CUBIERTAS.has(extensionDe(ruta));\n}\n\nexport function esOtroLenguajeConocido(ruta: string): boolean {\n\treturn EXTENSIONES_OTRO_LENGUAJE.has(extensionDe(ruta));\n}\n\nconst DIRS_IGNORADOS = new Set([\"node_modules\", \"dist\", \"build\", \"out\", \"coverage\", \".next\", \".turbo\", \".cache\"]);\n\n/**\n * Todos los ficheros bajo `raiz` (o `[raiz]` si ya es un fichero).\n *\n * Sin `fd` ni glob: un recorrido a mano basta para lo que pide esta tool, y\n * evita depender de un binario externo para algo que `readdirSync` ya resuelve.\n * Se saltan los directorios ocultos y los de artefactos de build, igual que\n * haría cualquier búsqueda de código real.\n */\nexport function listarFicheros(raiz: string): string[] {\n\tlet info: ReturnType<typeof statSync>;\n\ttry {\n\t\tinfo = statSync(raiz);\n\t} catch {\n\t\treturn [];\n\t}\n\tif (info.isFile()) return [raiz];\n\tif (!info.isDirectory()) return [];\n\n\tconst resultado: string[] = [];\n\tconst pila = [raiz];\n\twhile (pila.length > 0) {\n\t\tconst dir = pila.pop() as string;\n\t\tlet entradas: import(\"node:fs\").Dirent[];\n\t\ttry {\n\t\t\tentradas = readdirSync(dir, { withFileTypes: true });\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const entrada of entradas) {\n\t\t\tif (entrada.name.startsWith(\".\")) continue; // .git, .cache, etc.\n\t\t\tconst ruta = join(dir, entrada.name);\n\t\t\tif (entrada.isSymbolicLink()) continue; // evita ciclos por symlink\n\t\t\tif (entrada.isDirectory()) {\n\t\t\t\tif (!DIRS_IGNORADOS.has(entrada.name)) pila.push(ruta);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (entrada.isFile()) resultado.push(ruta);\n\t\t}\n\t}\n\treturn resultado;\n}\n\nfunction nombreDeCallee(expr: ts.Expression): string | null {\n\tif (ts.isIdentifier(expr)) return expr.text;\n\tif (ts.isPropertyAccessExpression(expr) && ts.isIdentifier(expr.name)) return expr.name.text;\n\treturn null;\n}\n\nfunction nombreDePropiedad(nombre: ts.PropertyName): string | null {\n\tif (ts.isIdentifier(nombre) || ts.isPrivateIdentifier(nombre)) return nombre.text;\n\tif (ts.isStringLiteral(nombre)) return nombre.text;\n\treturn null;\n}\n\n/** ¿Este nodo del AST es la declaración/uso que pide el patrón? */\nfunction coincideNodo(nodo: ts.Node, patron: Patron): boolean {\n\tswitch (patron.tipo) {\n\t\tcase \"funcion\":\n\t\t\tif (ts.isFunctionDeclaration(nodo)) return nodo.name?.text === patron.nombre;\n\t\t\tif (ts.isVariableDeclaration(nodo) && ts.isIdentifier(nodo.name) && nodo.initializer) {\n\t\t\t\treturn (\n\t\t\t\t\tnodo.name.text === patron.nombre &&\n\t\t\t\t\t(ts.isArrowFunction(nodo.initializer) || ts.isFunctionExpression(nodo.initializer))\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (ts.isMethodDeclaration(nodo)) return nombreDePropiedad(nodo.name) === patron.nombre;\n\t\t\treturn false;\n\t\tcase \"clase\":\n\t\t\treturn ts.isClassDeclaration(nodo) && nodo.name?.text === patron.nombre;\n\t\tcase \"tipo\":\n\t\t\tif (ts.isTypeAliasDeclaration(nodo)) return nodo.name.text === patron.nombre;\n\t\t\tif (ts.isInterfaceDeclaration(nodo)) return nodo.name.text === patron.nombre;\n\t\t\treturn false;\n\t\tcase \"llamada\":\n\t\t\treturn ts.isCallExpression(nodo) && nombreDeCallee(nodo.expression) === patron.nombre;\n\t\tcase \"import\":\n\t\t\treturn (\n\t\t\t\tts.isImportDeclaration(nodo) &&\n\t\t\t\tts.isStringLiteral(nodo.moduleSpecifier) &&\n\t\t\t\tnodo.moduleSpecifier.text === patron.nombre\n\t\t\t);\n\t\tcase \"propiedad\":\n\t\t\tif (ts.isPropertyAssignment(nodo) || ts.isPropertySignature(nodo) || ts.isPropertyDeclaration(nodo)) {\n\t\t\t\treturn nombreDePropiedad(nodo.name) === patron.nombre;\n\t\t\t}\n\t\t\tif (ts.isShorthandPropertyAssignment(nodo)) return nodo.name.text === patron.nombre;\n\t\t\treturn false;\n\t}\n}\n\n/** Todos los nodos de `fuente` que coinciden con `patron`, en orden de aparición. */\nexport function nodosCoincidentes(fuente: ts.SourceFile, patron: Patron): ts.Node[] {\n\tconst resultado: ts.Node[] = [];\n\tconst visitar = (nodo: ts.Node): void => {\n\t\tif (coincideNodo(nodo, patron)) resultado.push(nodo);\n\t\tts.forEachChild(nodo, visitar);\n\t};\n\tvisitar(fuente);\n\treturn resultado;\n}\n\nfunction lineaYFragmento(fuente: ts.SourceFile, posicion: number): { linea: number; fragmento: string } {\n\tconst { line } = fuente.getLineAndCharacterOfPosition(posicion);\n\tconst texto = fuente.text.split(\"\\n\")[line] ?? \"\";\n\treturn { linea: line + 1, fragmento: texto.trim().slice(0, 200) };\n}\n\nexport interface Coincidencia {\n\truta: string;\n\tlinea: number;\n\tfragmento: string;\n}\n\nexport interface ResultadoBusquedaEstructural {\n\tcoincidencias: Coincidencia[];\n\t/** Ficheros de código en un lenguaje que este buscador no sabe leer. Nunca se disfraza de \"sin resultados\". */\n\tnoCubiertos: string[];\n}\n\n/**\n * `null` = el patrón no se entendió (fallo de lectura, no \"no hay nada\").\n *\n * `raices` son rutas absolutas (ficheros o directorios); `cwd` solo se usa\n * para dejar las rutas del resultado relativas y legibles.\n */\nexport function buscarEstructural(\n\tpatronCadena: string,\n\traices: string[],\n\tcwd: string,\n): ResultadoBusquedaEstructural | null {\n\tconst patron = parsearPatron(patronCadena);\n\tif (!patron) return null;\n\n\tconst coincidencias: Coincidencia[] = [];\n\tconst noCubiertos = new Set<string>();\n\tfor (const raiz of raices) {\n\t\tfor (const ruta of listarFicheros(raiz)) {\n\t\t\tconst relativa = relative(cwd, ruta) || ruta;\n\t\t\tif (esOtroLenguajeConocido(ruta)) {\n\t\t\t\tnoCubiertos.add(relativa);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!extensionCubierta(ruta)) continue; // no es código: ni cobertura ni aviso\n\t\t\tlet codigo: string;\n\t\t\ttry {\n\t\t\t\tcodigo = readFileSync(ruta, \"utf-8\");\n\t\t\t} catch {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst fuente = ts.createSourceFile(ruta, codigo, ts.ScriptTarget.Latest, false);\n\t\t\tfor (const nodo of nodosCoincidentes(fuente, patron)) {\n\t\t\t\tcoincidencias.push({ ruta: relativa, ...lineaYFragmento(fuente, nodo.getStart(fuente)) });\n\t\t\t}\n\t\t}\n\t}\n\treturn { coincidencias, noCubiertos: [...noCubiertos].sort() };\n}\n"]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Edición por FORMA sintáctica: sustituye el nodo que coincide, no el texto
|
|
3
|
+
* que se le parece.
|
|
4
|
+
*
|
|
5
|
+
* La otra cara del mismo problema que `buscar.ts`: un `sed`/reemplazo de
|
|
6
|
+
* cadenas que renombra `foo` también renombra la cadena `"llama a foo()"` y el
|
|
7
|
+
* comentario `// foo hace el cálculo`, porque para texto plano las tres cosas
|
|
8
|
+
* son la misma palabra. Aquí se sustituye el NODO — el rango exacto que ocupa
|
|
9
|
+
* la declaración, la llamada o el import en el AST — así que lo que no es ese
|
|
10
|
+
* nodo no se toca, sea lo que sea que diga.
|
|
11
|
+
*
|
|
12
|
+
* Reindenta las líneas del reemplazo que no sean la primera con la
|
|
13
|
+
* indentación de la línea del sitio: sin esto, sustituir una declaración
|
|
14
|
+
* multilínea deja el cuerpo pegado al margen izquierdo.
|
|
15
|
+
*/
|
|
16
|
+
export interface CambioEstructural {
|
|
17
|
+
ruta: string;
|
|
18
|
+
linea: number;
|
|
19
|
+
antes: string;
|
|
20
|
+
despues: string;
|
|
21
|
+
}
|
|
22
|
+
export interface ResultadoEdicionEstructural {
|
|
23
|
+
cambios: CambioEstructural[];
|
|
24
|
+
/** Ficheros de código en un lenguaje que no sabemos editar. Igual que en la búsqueda: nunca se disfraza de "nada que cambiar". */
|
|
25
|
+
noCubiertos: string[];
|
|
26
|
+
/** Rutas cuya edición dejó de parsear (antes sí, después no). Se aplica igual, como `edit`/`write`: se avisa, no se bloquea en silencio. */
|
|
27
|
+
rompieronParseo: string[];
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* `null` = el patrón no se entendió. `aplicar: false` calcula los cambios sin
|
|
31
|
+
* tocar disco; `aplicar: true` escribe cada fichero que cambió.
|
|
32
|
+
*/
|
|
33
|
+
export declare function editarEstructural(patronCadena: string, out: string, raices: string[], cwd: string, opciones: {
|
|
34
|
+
aplicar: boolean;
|
|
35
|
+
}): ResultadoEdicionEstructural | null;
|
|
36
|
+
//# sourceMappingURL=editar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editar.d.ts","sourceRoot":"","sources":["../../../src/core/estructural/editar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAeH,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,2BAA2B;IAC3C,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,oIAAkI;IAClI,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,gJAA4I;IAC5I,eAAe,EAAE,MAAM,EAAE,CAAC;CAC1B;AAmED;;;GAGG;AACH,wBAAgB,iBAAiB,CAChC,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EAAE,EAChB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,GAC5B,2BAA2B,GAAG,IAAI,CAoCpC","sourcesContent":["/**\n * Edición por FORMA sintáctica: sustituye el nodo que coincide, no el texto\n * que se le parece.\n *\n * La otra cara del mismo problema que `buscar.ts`: un `sed`/reemplazo de\n * cadenas que renombra `foo` también renombra la cadena `\"llama a foo()\"` y el\n * comentario `// foo hace el cálculo`, porque para texto plano las tres cosas\n * son la misma palabra. Aquí se sustituye el NODO — el rango exacto que ocupa\n * la declaración, la llamada o el import en el AST — así que lo que no es ese\n * nodo no se toca, sea lo que sea que diga.\n *\n * Reindenta las líneas del reemplazo que no sean la primera con la\n * indentación de la línea del sitio: sin esto, sustituir una declaración\n * multilínea deja el cuerpo pegado al margen izquierdo.\n */\n\nimport { readFileSync, writeFileSync } from \"node:fs\";\nimport { relative } from \"node:path\";\nimport ts from \"typescript\";\nimport { parsea } from \"../edicion/parseo.ts\";\nimport {\n\tesOtroLenguajeConocido,\n\textensionCubierta,\n\tlistarFicheros,\n\tnodosCoincidentes,\n\ttype Patron,\n\tparsearPatron,\n} from \"./buscar.ts\";\n\nexport interface CambioEstructural {\n\truta: string;\n\tlinea: number;\n\tantes: string;\n\tdespues: string;\n}\n\nexport interface ResultadoEdicionEstructural {\n\tcambios: CambioEstructural[];\n\t/** Ficheros de código en un lenguaje que no sabemos editar. Igual que en la búsqueda: nunca se disfraza de \"nada que cambiar\". */\n\tnoCubiertos: string[];\n\t/** Rutas cuya edición dejó de parsear (antes sí, después no). Se aplica igual, como `edit`/`write`: se avisa, no se bloquea en silencio. */\n\trompieronParseo: string[];\n}\n\n/** La indentación (espacios/tabs) con la que empieza la línea que contiene `posicion`. */\nfunction indentacionDeLinea(fuente: ts.SourceFile, posicion: number): string {\n\tconst { line } = fuente.getLineAndCharacterOfPosition(posicion);\n\tconst texto = fuente.text.split(\"\\n\")[line] ?? \"\";\n\treturn texto.match(/^[ \\t]*/)?.[0] ?? \"\";\n}\n\n/** Las líneas 2+ del reemplazo, alineadas con la indentación del sitio donde entra. */\nfunction reindentar(texto: string, indentacion: string): string {\n\treturn texto\n\t\t.split(\"\\n\")\n\t\t.map((l, i) => (i === 0 ? l : indentacion + l))\n\t\t.join(\"\\n\");\n}\n\n/**\n * Descarta los nodos coincidentes que caen DENTRO del rango de otro nodo\n * coincidente (mismo patrón anidado en sí mismo: `{ id: { id: 1 } }` para\n * `propiedad:id`, `foo(foo(1))` para `llamada:foo`, una función sombreada\n * dentro de otra con el mismo nombre para `funcion:foo`...).\n *\n * Sin esto, sustituir el de fuera desplaza el texto y dos rangos que se\n * solapan se aplican con offsets que ya no encajan: cortan por mitad de un\n * literal y dejan basura sintáctica — a veces detectada por `parsea()`\n * después del hecho, a veces no (si por casualidad el resultado seguía\n * siendo JS válido, aunque mutilado). El nodo de dentro de todos modos\n * desaparece cuando se sustituye el de fuera, así que editarlo aparte no\n * tiene sentido: solo sobreviven los nodos que no están contenidos en\n * ningún otro nodo coincidente.\n */\nfunction sinAnidados(nodos: ts.Node[], fuente: ts.SourceFile): ts.Node[] {\n\treturn nodos.filter((nodo) => {\n\t\tconst inicio = nodo.getStart(fuente);\n\t\tconst fin = nodo.getEnd();\n\t\treturn !nodos.some((otro) => otro !== nodo && otro.getStart(fuente) <= inicio && otro.getEnd() >= fin);\n\t});\n}\n\n/** Sustituye en un fichero ya parseado todos los nodos que coinciden. `null` si ninguno coincidió. */\nfunction reescribirFuente(\n\tfuente: ts.SourceFile,\n\tpatron: Patron,\n\tout: string,\n): { contenido: string; cambios: Array<{ linea: number; antes: string; despues: string }> } | null {\n\tconst nodos = sinAnidados(nodosCoincidentes(fuente, patron), fuente);\n\tif (nodos.length === 0) return null;\n\n\t// De atrás hacia adelante: sustituir un nodo de más adelante en el fichero no\n\t// desplaza la posición de los que quedan por delante en el texto.\n\tconst ordenados = [...nodos].sort((a, b) => b.getStart(fuente) - a.getStart(fuente));\n\tlet contenido = fuente.text;\n\tconst cambios: Array<{ linea: number; antes: string; despues: string }> = [];\n\tfor (const nodo of ordenados) {\n\t\tconst inicio = nodo.getStart(fuente);\n\t\tconst fin = nodo.getEnd();\n\t\tconst antes = contenido.slice(inicio, fin);\n\t\tconst despues = reindentar(out, indentacionDeLinea(fuente, inicio));\n\t\tcontenido = contenido.slice(0, inicio) + despues + contenido.slice(fin);\n\t\tconst { line } = fuente.getLineAndCharacterOfPosition(inicio);\n\t\tcambios.push({ linea: line + 1, antes, despues });\n\t}\n\tcambios.reverse(); // en orden de aparición en el fichero, no en orden de sustitución\n\treturn { contenido, cambios };\n}\n\n/**\n * `null` = el patrón no se entendió. `aplicar: false` calcula los cambios sin\n * tocar disco; `aplicar: true` escribe cada fichero que cambió.\n */\nexport function editarEstructural(\n\tpatronCadena: string,\n\tout: string,\n\traices: string[],\n\tcwd: string,\n\topciones: { aplicar: boolean },\n): ResultadoEdicionEstructural | null {\n\tconst patron = parsearPatron(patronCadena);\n\tif (!patron) return null;\n\n\tconst cambios: CambioEstructural[] = [];\n\tconst noCubiertos = new Set<string>();\n\tconst rompieronParseo: string[] = [];\n\tfor (const raiz of raices) {\n\t\tfor (const ruta of listarFicheros(raiz)) {\n\t\t\tconst relativa = relative(cwd, ruta) || ruta;\n\t\t\tif (esOtroLenguajeConocido(ruta)) {\n\t\t\t\tnoCubiertos.add(relativa);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!extensionCubierta(ruta)) continue;\n\t\t\tlet codigo: string;\n\t\t\ttry {\n\t\t\t\tcodigo = readFileSync(ruta, \"utf-8\");\n\t\t\t} catch {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst fuente = ts.createSourceFile(ruta, codigo, ts.ScriptTarget.Latest, false);\n\t\t\tconst resultado = reescribirFuente(fuente, patron, out);\n\t\t\tif (!resultado) continue;\n\t\t\tfor (const c of resultado.cambios) cambios.push({ ruta: relativa, ...c });\n\n\t\t\t// Avisar, no bloquear: es la misma regla que ya sigue `edit`/`write` vía\n\t\t\t// `ObservadorDeEdiciones`, y esta tool no pasa por ahí porque toca varios\n\t\t\t// ficheros con un `path` que es un ámbito, no la ruta de un solo fichero.\n\t\t\tif (parsea(codigo, ruta) === true && parsea(resultado.contenido, ruta) === false) {\n\t\t\t\trompieronParseo.push(relativa);\n\t\t\t}\n\t\t\tif (opciones.aplicar) writeFileSync(ruta, resultado.contenido, \"utf-8\");\n\t\t}\n\t}\n\treturn { cambios, noCubiertos: [...noCubiertos].sort(), rompieronParseo };\n}\n"]}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Edición por FORMA sintáctica: sustituye el nodo que coincide, no el texto
|
|
3
|
+
* que se le parece.
|
|
4
|
+
*
|
|
5
|
+
* La otra cara del mismo problema que `buscar.ts`: un `sed`/reemplazo de
|
|
6
|
+
* cadenas que renombra `foo` también renombra la cadena `"llama a foo()"` y el
|
|
7
|
+
* comentario `// foo hace el cálculo`, porque para texto plano las tres cosas
|
|
8
|
+
* son la misma palabra. Aquí se sustituye el NODO — el rango exacto que ocupa
|
|
9
|
+
* la declaración, la llamada o el import en el AST — así que lo que no es ese
|
|
10
|
+
* nodo no se toca, sea lo que sea que diga.
|
|
11
|
+
*
|
|
12
|
+
* Reindenta las líneas del reemplazo que no sean la primera con la
|
|
13
|
+
* indentación de la línea del sitio: sin esto, sustituir una declaración
|
|
14
|
+
* multilínea deja el cuerpo pegado al margen izquierdo.
|
|
15
|
+
*/
|
|
16
|
+
import { readFileSync, writeFileSync } from "node:fs";
|
|
17
|
+
import { relative } from "node:path";
|
|
18
|
+
import ts from "typescript";
|
|
19
|
+
import { parsea } from "../edicion/parseo.js";
|
|
20
|
+
import { esOtroLenguajeConocido, extensionCubierta, listarFicheros, nodosCoincidentes, parsearPatron, } from "./buscar.js";
|
|
21
|
+
/** La indentación (espacios/tabs) con la que empieza la línea que contiene `posicion`. */
|
|
22
|
+
function indentacionDeLinea(fuente, posicion) {
|
|
23
|
+
const { line } = fuente.getLineAndCharacterOfPosition(posicion);
|
|
24
|
+
const texto = fuente.text.split("\n")[line] ?? "";
|
|
25
|
+
return texto.match(/^[ \t]*/)?.[0] ?? "";
|
|
26
|
+
}
|
|
27
|
+
/** Las líneas 2+ del reemplazo, alineadas con la indentación del sitio donde entra. */
|
|
28
|
+
function reindentar(texto, indentacion) {
|
|
29
|
+
return texto
|
|
30
|
+
.split("\n")
|
|
31
|
+
.map((l, i) => (i === 0 ? l : indentacion + l))
|
|
32
|
+
.join("\n");
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Descarta los nodos coincidentes que caen DENTRO del rango de otro nodo
|
|
36
|
+
* coincidente (mismo patrón anidado en sí mismo: `{ id: { id: 1 } }` para
|
|
37
|
+
* `propiedad:id`, `foo(foo(1))` para `llamada:foo`, una función sombreada
|
|
38
|
+
* dentro de otra con el mismo nombre para `funcion:foo`...).
|
|
39
|
+
*
|
|
40
|
+
* Sin esto, sustituir el de fuera desplaza el texto y dos rangos que se
|
|
41
|
+
* solapan se aplican con offsets que ya no encajan: cortan por mitad de un
|
|
42
|
+
* literal y dejan basura sintáctica — a veces detectada por `parsea()`
|
|
43
|
+
* después del hecho, a veces no (si por casualidad el resultado seguía
|
|
44
|
+
* siendo JS válido, aunque mutilado). El nodo de dentro de todos modos
|
|
45
|
+
* desaparece cuando se sustituye el de fuera, así que editarlo aparte no
|
|
46
|
+
* tiene sentido: solo sobreviven los nodos que no están contenidos en
|
|
47
|
+
* ningún otro nodo coincidente.
|
|
48
|
+
*/
|
|
49
|
+
function sinAnidados(nodos, fuente) {
|
|
50
|
+
return nodos.filter((nodo) => {
|
|
51
|
+
const inicio = nodo.getStart(fuente);
|
|
52
|
+
const fin = nodo.getEnd();
|
|
53
|
+
return !nodos.some((otro) => otro !== nodo && otro.getStart(fuente) <= inicio && otro.getEnd() >= fin);
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
/** Sustituye en un fichero ya parseado todos los nodos que coinciden. `null` si ninguno coincidió. */
|
|
57
|
+
function reescribirFuente(fuente, patron, out) {
|
|
58
|
+
const nodos = sinAnidados(nodosCoincidentes(fuente, patron), fuente);
|
|
59
|
+
if (nodos.length === 0)
|
|
60
|
+
return null;
|
|
61
|
+
// De atrás hacia adelante: sustituir un nodo de más adelante en el fichero no
|
|
62
|
+
// desplaza la posición de los que quedan por delante en el texto.
|
|
63
|
+
const ordenados = [...nodos].sort((a, b) => b.getStart(fuente) - a.getStart(fuente));
|
|
64
|
+
let contenido = fuente.text;
|
|
65
|
+
const cambios = [];
|
|
66
|
+
for (const nodo of ordenados) {
|
|
67
|
+
const inicio = nodo.getStart(fuente);
|
|
68
|
+
const fin = nodo.getEnd();
|
|
69
|
+
const antes = contenido.slice(inicio, fin);
|
|
70
|
+
const despues = reindentar(out, indentacionDeLinea(fuente, inicio));
|
|
71
|
+
contenido = contenido.slice(0, inicio) + despues + contenido.slice(fin);
|
|
72
|
+
const { line } = fuente.getLineAndCharacterOfPosition(inicio);
|
|
73
|
+
cambios.push({ linea: line + 1, antes, despues });
|
|
74
|
+
}
|
|
75
|
+
cambios.reverse(); // en orden de aparición en el fichero, no en orden de sustitución
|
|
76
|
+
return { contenido, cambios };
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* `null` = el patrón no se entendió. `aplicar: false` calcula los cambios sin
|
|
80
|
+
* tocar disco; `aplicar: true` escribe cada fichero que cambió.
|
|
81
|
+
*/
|
|
82
|
+
export function editarEstructural(patronCadena, out, raices, cwd, opciones) {
|
|
83
|
+
const patron = parsearPatron(patronCadena);
|
|
84
|
+
if (!patron)
|
|
85
|
+
return null;
|
|
86
|
+
const cambios = [];
|
|
87
|
+
const noCubiertos = new Set();
|
|
88
|
+
const rompieronParseo = [];
|
|
89
|
+
for (const raiz of raices) {
|
|
90
|
+
for (const ruta of listarFicheros(raiz)) {
|
|
91
|
+
const relativa = relative(cwd, ruta) || ruta;
|
|
92
|
+
if (esOtroLenguajeConocido(ruta)) {
|
|
93
|
+
noCubiertos.add(relativa);
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
if (!extensionCubierta(ruta))
|
|
97
|
+
continue;
|
|
98
|
+
let codigo;
|
|
99
|
+
try {
|
|
100
|
+
codigo = readFileSync(ruta, "utf-8");
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
const fuente = ts.createSourceFile(ruta, codigo, ts.ScriptTarget.Latest, false);
|
|
106
|
+
const resultado = reescribirFuente(fuente, patron, out);
|
|
107
|
+
if (!resultado)
|
|
108
|
+
continue;
|
|
109
|
+
for (const c of resultado.cambios)
|
|
110
|
+
cambios.push({ ruta: relativa, ...c });
|
|
111
|
+
// Avisar, no bloquear: es la misma regla que ya sigue `edit`/`write` vía
|
|
112
|
+
// `ObservadorDeEdiciones`, y esta tool no pasa por ahí porque toca varios
|
|
113
|
+
// ficheros con un `path` que es un ámbito, no la ruta de un solo fichero.
|
|
114
|
+
if (parsea(codigo, ruta) === true && parsea(resultado.contenido, ruta) === false) {
|
|
115
|
+
rompieronParseo.push(relativa);
|
|
116
|
+
}
|
|
117
|
+
if (opciones.aplicar)
|
|
118
|
+
writeFileSync(ruta, resultado.contenido, "utf-8");
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return { cambios, noCubiertos: [...noCubiertos].sort(), rompieronParseo };
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=editar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editar.js","sourceRoot":"","sources":["../../../src/core/estructural/editar.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Edición por FORMA sintáctica: sustituye el nodo que coincide, no el texto\n * que se le parece.\n *\n * La otra cara del mismo problema que `buscar.ts`: un `sed`/reemplazo de\n * cadenas que renombra `foo` también renombra la cadena `\"llama a foo()\"` y el\n * comentario `// foo hace el cálculo`, porque para texto plano las tres cosas\n * son la misma palabra. Aquí se sustituye el NODO — el rango exacto que ocupa\n * la declaración, la llamada o el import en el AST — así que lo que no es ese\n * nodo no se toca, sea lo que sea que diga.\n *\n * Reindenta las líneas del reemplazo que no sean la primera con la\n * indentación de la línea del sitio: sin esto, sustituir una declaración\n * multilínea deja el cuerpo pegado al margen izquierdo.\n */\n\nimport { readFileSync, writeFileSync } from \"node:fs\";\nimport { relative } from \"node:path\";\nimport ts from \"typescript\";\nimport { parsea } from \"../edicion/parseo.ts\";\nimport {\n\tesOtroLenguajeConocido,\n\textensionCubierta,\n\tlistarFicheros,\n\tnodosCoincidentes,\n\ttype Patron,\n\tparsearPatron,\n} from \"./buscar.ts\";\n\nexport interface CambioEstructural {\n\truta: string;\n\tlinea: number;\n\tantes: string;\n\tdespues: string;\n}\n\nexport interface ResultadoEdicionEstructural {\n\tcambios: CambioEstructural[];\n\t/** Ficheros de código en un lenguaje que no sabemos editar. Igual que en la búsqueda: nunca se disfraza de \"nada que cambiar\". */\n\tnoCubiertos: string[];\n\t/** Rutas cuya edición dejó de parsear (antes sí, después no). Se aplica igual, como `edit`/`write`: se avisa, no se bloquea en silencio. */\n\trompieronParseo: string[];\n}\n\n/** La indentación (espacios/tabs) con la que empieza la línea que contiene `posicion`. */\nfunction indentacionDeLinea(fuente: ts.SourceFile, posicion: number): string {\n\tconst { line } = fuente.getLineAndCharacterOfPosition(posicion);\n\tconst texto = fuente.text.split(\"\\n\")[line] ?? \"\";\n\treturn texto.match(/^[ \\t]*/)?.[0] ?? \"\";\n}\n\n/** Las líneas 2+ del reemplazo, alineadas con la indentación del sitio donde entra. */\nfunction reindentar(texto: string, indentacion: string): string {\n\treturn texto\n\t\t.split(\"\\n\")\n\t\t.map((l, i) => (i === 0 ? l : indentacion + l))\n\t\t.join(\"\\n\");\n}\n\n/**\n * Descarta los nodos coincidentes que caen DENTRO del rango de otro nodo\n * coincidente (mismo patrón anidado en sí mismo: `{ id: { id: 1 } }` para\n * `propiedad:id`, `foo(foo(1))` para `llamada:foo`, una función sombreada\n * dentro de otra con el mismo nombre para `funcion:foo`...).\n *\n * Sin esto, sustituir el de fuera desplaza el texto y dos rangos que se\n * solapan se aplican con offsets que ya no encajan: cortan por mitad de un\n * literal y dejan basura sintáctica — a veces detectada por `parsea()`\n * después del hecho, a veces no (si por casualidad el resultado seguía\n * siendo JS válido, aunque mutilado). El nodo de dentro de todos modos\n * desaparece cuando se sustituye el de fuera, así que editarlo aparte no\n * tiene sentido: solo sobreviven los nodos que no están contenidos en\n * ningún otro nodo coincidente.\n */\nfunction sinAnidados(nodos: ts.Node[], fuente: ts.SourceFile): ts.Node[] {\n\treturn nodos.filter((nodo) => {\n\t\tconst inicio = nodo.getStart(fuente);\n\t\tconst fin = nodo.getEnd();\n\t\treturn !nodos.some((otro) => otro !== nodo && otro.getStart(fuente) <= inicio && otro.getEnd() >= fin);\n\t});\n}\n\n/** Sustituye en un fichero ya parseado todos los nodos que coinciden. `null` si ninguno coincidió. */\nfunction reescribirFuente(\n\tfuente: ts.SourceFile,\n\tpatron: Patron,\n\tout: string,\n): { contenido: string; cambios: Array<{ linea: number; antes: string; despues: string }> } | null {\n\tconst nodos = sinAnidados(nodosCoincidentes(fuente, patron), fuente);\n\tif (nodos.length === 0) return null;\n\n\t// De atrás hacia adelante: sustituir un nodo de más adelante en el fichero no\n\t// desplaza la posición de los que quedan por delante en el texto.\n\tconst ordenados = [...nodos].sort((a, b) => b.getStart(fuente) - a.getStart(fuente));\n\tlet contenido = fuente.text;\n\tconst cambios: Array<{ linea: number; antes: string; despues: string }> = [];\n\tfor (const nodo of ordenados) {\n\t\tconst inicio = nodo.getStart(fuente);\n\t\tconst fin = nodo.getEnd();\n\t\tconst antes = contenido.slice(inicio, fin);\n\t\tconst despues = reindentar(out, indentacionDeLinea(fuente, inicio));\n\t\tcontenido = contenido.slice(0, inicio) + despues + contenido.slice(fin);\n\t\tconst { line } = fuente.getLineAndCharacterOfPosition(inicio);\n\t\tcambios.push({ linea: line + 1, antes, despues });\n\t}\n\tcambios.reverse(); // en orden de aparición en el fichero, no en orden de sustitución\n\treturn { contenido, cambios };\n}\n\n/**\n * `null` = el patrón no se entendió. `aplicar: false` calcula los cambios sin\n * tocar disco; `aplicar: true` escribe cada fichero que cambió.\n */\nexport function editarEstructural(\n\tpatronCadena: string,\n\tout: string,\n\traices: string[],\n\tcwd: string,\n\topciones: { aplicar: boolean },\n): ResultadoEdicionEstructural | null {\n\tconst patron = parsearPatron(patronCadena);\n\tif (!patron) return null;\n\n\tconst cambios: CambioEstructural[] = [];\n\tconst noCubiertos = new Set<string>();\n\tconst rompieronParseo: string[] = [];\n\tfor (const raiz of raices) {\n\t\tfor (const ruta of listarFicheros(raiz)) {\n\t\t\tconst relativa = relative(cwd, ruta) || ruta;\n\t\t\tif (esOtroLenguajeConocido(ruta)) {\n\t\t\t\tnoCubiertos.add(relativa);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!extensionCubierta(ruta)) continue;\n\t\t\tlet codigo: string;\n\t\t\ttry {\n\t\t\t\tcodigo = readFileSync(ruta, \"utf-8\");\n\t\t\t} catch {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst fuente = ts.createSourceFile(ruta, codigo, ts.ScriptTarget.Latest, false);\n\t\t\tconst resultado = reescribirFuente(fuente, patron, out);\n\t\t\tif (!resultado) continue;\n\t\t\tfor (const c of resultado.cambios) cambios.push({ ruta: relativa, ...c });\n\n\t\t\t// Avisar, no bloquear: es la misma regla que ya sigue `edit`/`write` vía\n\t\t\t// `ObservadorDeEdiciones`, y esta tool no pasa por ahí porque toca varios\n\t\t\t// ficheros con un `path` que es un ámbito, no la ruta de un solo fichero.\n\t\t\tif (parsea(codigo, ruta) === true && parsea(resultado.contenido, ruta) === false) {\n\t\t\t\trompieronParseo.push(relativa);\n\t\t\t}\n\t\t\tif (opciones.aplicar) writeFileSync(ruta, resultado.contenido, \"utf-8\");\n\t\t}\n\t}\n\treturn { cambios, noCubiertos: [...noCubiertos].sort(), rompieronParseo };\n}\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ast_search` y `ast_edit`: la búsqueda y la edición estructural, como tools
|
|
3
|
+
* del agente.
|
|
4
|
+
*
|
|
5
|
+
* El renderizado se deja al genérico (`ToolDefinition.renderCall/renderResult`
|
|
6
|
+
* son opcionales): igual que `crearBrowserTools`, la caja de texto por
|
|
7
|
+
* defecto ya vale para lo que devuelven estas dos.
|
|
8
|
+
*/
|
|
9
|
+
import type { ToolDefinition } from "../extensions/types.ts";
|
|
10
|
+
export declare function crearEstructuralTools(cwd: string): Record<string, ToolDefinition>;
|
|
11
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/core/estructural/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAmB,cAAc,EAAE,MAAM,wBAAwB,CAAC;AA6G9E,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAKjF","sourcesContent":["/**\n * `ast_search` y `ast_edit`: la búsqueda y la edición estructural, como tools\n * del agente.\n *\n * El renderizado se deja al genérico (`ToolDefinition.renderCall/renderResult`\n * son opcionales): igual que `crearBrowserTools`, la caja de texto por\n * defecto ya vale para lo que devuelven estas dos.\n */\n\nimport { Type } from \"typebox\";\nimport type { AgentToolResult, ToolDefinition } from \"../extensions/types.ts\";\nimport { resolveToCwd } from \"../tools/path-utils.ts\";\nimport { buscarEstructural } from \"./buscar.ts\";\nimport { editarEstructural } from \"./editar.ts\";\n\nconst AYUDA_PATRON =\n\t'Patrón estructural \"tipo:nombre\". tipo es uno de: funcion, clase, tipo, llamada, import, propiedad. ' +\n\t'Ejemplos: \"funcion:procesarPedido\", \"clase:Cliente\", \"llamada:fetch\", \"import:react\", \"propiedad:id\".';\n\nfunction rutasDe(pathParam: string | undefined, cwd: string): string[] {\n\tconst crudas = (pathParam ?? \".\")\n\t\t.split(\";\")\n\t\t.map((p) => p.trim())\n\t\t.filter((p) => p.length > 0);\n\treturn (crudas.length > 0 ? crudas : [\".\"]).map((p) => resolveToCwd(p, cwd));\n}\n\nfunction texto(t: string): AgentToolResult<unknown> {\n\treturn { content: [{ type: \"text\" as const, text: t }], details: undefined };\n}\n\nfunction avisoNoCubiertos(noCubiertos: string[]): string {\n\tif (noCubiertos.length === 0) return \"\";\n\treturn `\\n\\nSin cobertura estructural (no es .ts/.tsx/.js/.jsx), no se han mirado: ${noCubiertos.join(\", \")}`;\n}\n\nconst astSearchSchema = Type.Object({\n\tpat: Type.String({ description: AYUDA_PATRON }),\n\tpath: Type.Optional(\n\t\tType.String({ description: 'Fichero o directorio a buscar; varios separados por \";\" (default: \".\")' }),\n\t),\n});\n\nfunction crearAstSearchTool(cwd: string): ToolDefinition<typeof astSearchSchema> {\n\treturn {\n\t\tname: \"ast_search\",\n\t\tlabel: \"Búsqueda estructural\",\n\t\tpromptSnippet:\n\t\t\t\"buscar una declaración/llamada/import por su FORMA en el AST, no por texto (evita comentarios y cadenas)\",\n\t\tdescription:\n\t\t\t\"Busca en código TypeScript/JavaScript por estructura sintáctica, no por texto: encuentra la declaración de una \" +\n\t\t\t\"función/clase/tipo, una llamada, un import o una propiedad SIN que un comentario o una cadena que mencionen el \" +\n\t\t\t`mismo nombre cuenten como coincidencia. ${AYUDA_PATRON} Solo cubre .ts/.tsx/.js/.jsx (y variantes de módulo); ` +\n\t\t\t\"para otros lenguajes de programación lo dice explícitamente en vez de devolver cero resultados.\",\n\t\tparameters: astSearchSchema,\n\t\tasync execute(_toolCallId, { pat, path }): Promise<AgentToolResult<unknown>> {\n\t\t\tconst raices = rutasDe(path, cwd);\n\t\t\tconst resultado = buscarEstructural(pat, raices, cwd);\n\t\t\tif (resultado === null) {\n\t\t\t\tthrow new Error(`No se entiende el patrón \"${pat}\". ${AYUDA_PATRON}`);\n\t\t\t}\n\t\t\tconst { coincidencias, noCubiertos } = resultado;\n\t\t\tconst cuerpo =\n\t\t\t\tcoincidencias.length === 0\n\t\t\t\t\t? \"No hay coincidencias estructurales.\"\n\t\t\t\t\t: coincidencias.map((c) => `${c.ruta}:${c.linea}: ${c.fragmento}`).join(\"\\n\");\n\t\t\treturn texto(cuerpo + avisoNoCubiertos(noCubiertos));\n\t\t},\n\t};\n}\n\nconst astEditSchema = Type.Object({\n\tpat: Type.String({ description: AYUDA_PATRON }),\n\tout: Type.String({\n\t\tdescription:\n\t\t\t\"Texto que sustituye a CADA nodo que coincida, completo (por ejemplo la declaración entera con el nuevo \" +\n\t\t\t\"nombre). Las líneas 2+ se reindentan a la indentación del sitio.\",\n\t}),\n\tpath: Type.Optional(\n\t\tType.String({ description: 'Fichero o directorio a editar; varios separados por \";\" (default: \".\")' }),\n\t),\n});\n\nfunction crearAstEditTool(cwd: string): ToolDefinition<typeof astEditSchema> {\n\treturn {\n\t\tname: \"ast_edit\",\n\t\tlabel: \"Edición estructural\",\n\t\tpromptSnippet:\n\t\t\t\"sustituir una declaración/llamada por su FORMA en el AST, sin tocar cadenas/comentarios que compartan el mismo texto\",\n\t\tdescription:\n\t\t\t\"Reemplaza en código TypeScript/JavaScript el nodo que coincide con un patrón estructural (ver ast_search) \" +\n\t\t\t\"por el texto de `out`, sin tocar cadenas ni comentarios que mencionen el mismo nombre porque no son ese nodo. \" +\n\t\t\t\"Útil para renombrar una declaración con precisión donde un buscar-y-reemplazar de texto rompería otras cosas. \" +\n\t\t\t\"Escribe los ficheros que cambian. Solo cubre .ts/.tsx/.js/.jsx; para otros lenguajes lo dice en vez de fingir que no había nada que cambiar.\",\n\t\tparameters: astEditSchema,\n\t\tasync execute(_toolCallId, { pat, out, path }): Promise<AgentToolResult<unknown>> {\n\t\t\tconst raices = rutasDe(path, cwd);\n\t\t\tconst resultado = editarEstructural(pat, out, raices, cwd, { aplicar: true });\n\t\t\tif (resultado === null) {\n\t\t\t\tthrow new Error(`No se entiende el patrón \"${pat}\". ${AYUDA_PATRON}`);\n\t\t\t}\n\t\t\tconst { cambios, noCubiertos, rompieronParseo } = resultado;\n\t\t\tif (cambios.length === 0) {\n\t\t\t\treturn texto(\n\t\t\t\t\t`No hay coincidencias estructurales; ningún fichero se ha tocado.${avisoNoCubiertos(noCubiertos)}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst cuerpo = cambios.map((c) => `${c.ruta}:${c.linea}:\\n- ${c.antes}\\n+ ${c.despues}`).join(\"\\n\\n\");\n\t\t\tconst avisoRoto =\n\t\t\t\trompieronParseo.length > 0\n\t\t\t\t\t? `\\n\\n⚠ Estos ficheros han quedado sintácticamente rotos tras la edición: ${rompieronParseo.join(\", \")}. Arréglalos antes de seguir.`\n\t\t\t\t\t: \"\";\n\t\t\treturn texto(\n\t\t\t\t`${cambios.length} cambio(s) aplicados.\\n\\n${cuerpo}${avisoRoto}${avisoNoCubiertos(noCubiertos)}`,\n\t\t\t);\n\t\t},\n\t};\n}\n\nexport function crearEstructuralTools(cwd: string): Record<string, ToolDefinition> {\n\treturn {\n\t\tast_search: crearAstSearchTool(cwd) as ToolDefinition,\n\t\tast_edit: crearAstEditTool(cwd) as ToolDefinition,\n\t};\n}\n"]}
|