@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,232 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cliente JSON-RPC sobre stdio contra un servidor de lenguaje (LSP).
|
|
3
|
+
*
|
|
4
|
+
* Fichero nuestro (coste cero de fork): el LanguageService de TypeScript en
|
|
5
|
+
* `core/edicion/tipos.ts` cubre un único lenguaje sin salir de proceso; esto
|
|
6
|
+
* es lo que hace falta para los demás — hablar el protocolo LSP con un
|
|
7
|
+
* binario externo que arranca y para por comando.
|
|
8
|
+
*
|
|
9
|
+
* Decisión deliberada de diseño (ponytail): un servidor por LLAMADA, no un
|
|
10
|
+
* pool de servidores vivos entre llamadas. Arrancar `gopls`/`rust-analyzer`
|
|
11
|
+
* cuesta cientos de ms, pero un servidor que sobrevive a la llamada que lo
|
|
12
|
+
* arrancó es exactamente el "proceso huérfano" que la puerta de este hueco
|
|
13
|
+
* prohíbe, y mantener un pool con temporizador de inactividad es la mitad de
|
|
14
|
+
* `client.ts` del competidor (1601 líneas) para un problema que aquí no
|
|
15
|
+
* existe todavía. Subir a un pool es la mejora natural si el coste de
|
|
16
|
+
* relanzar por llamada llega a notarse.
|
|
17
|
+
*/
|
|
18
|
+
import { spawn } from "node:child_process";
|
|
19
|
+
/** Cabecera LSP: los mensajes van precedidos de `Content-Length` en BYTES, no en caracteres. */
|
|
20
|
+
const SEPARADOR = "\r\n\r\n";
|
|
21
|
+
const PATRON_LONGITUD = /Content-Length:\s*(\d+)/i;
|
|
22
|
+
/** Lo que de verdad puede fallar al hablar con el servidor: nunca se colapsa en un único "error". */
|
|
23
|
+
export class ErrorLsp extends Error {
|
|
24
|
+
// Campo explícito, no propiedad de parámetro: el proyecto compila con
|
|
25
|
+
// `erasableSyntaxOnly`, que prohíbe la forma corta por no ser borrable.
|
|
26
|
+
tipo;
|
|
27
|
+
constructor(message, tipo) {
|
|
28
|
+
super(message);
|
|
29
|
+
this.name = "ErrorLsp";
|
|
30
|
+
this.tipo = tipo;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function escribirMensaje(proc, cuerpo) {
|
|
34
|
+
const json = JSON.stringify(cuerpo);
|
|
35
|
+
// Content-Length cuenta BYTES UTF-8, no unidades de código: un símbolo o
|
|
36
|
+
// comentario no-ASCII en el nombre nuevo de un rename lo desincroniza si se
|
|
37
|
+
// mide en caracteres.
|
|
38
|
+
const bytes = Buffer.byteLength(json, "utf-8");
|
|
39
|
+
proc.stdin.write(`Content-Length: ${bytes}${SEPARADOR}${json}`);
|
|
40
|
+
}
|
|
41
|
+
/** Trocea el flujo de stdout del servidor en mensajes JSON-RPC completos, cabecera incluida. */
|
|
42
|
+
class Trocador {
|
|
43
|
+
buffer = Buffer.alloc(0);
|
|
44
|
+
agregar(chunk) {
|
|
45
|
+
this.buffer = Buffer.concat([this.buffer, chunk]);
|
|
46
|
+
const mensajes = [];
|
|
47
|
+
for (;;) {
|
|
48
|
+
const finCabecera = this.buffer.indexOf(SEPARADOR);
|
|
49
|
+
if (finCabecera === -1)
|
|
50
|
+
return mensajes;
|
|
51
|
+
const cabecera = this.buffer.subarray(0, finCabecera).toString("utf-8");
|
|
52
|
+
const coincidencia = cabecera.match(PATRON_LONGITUD);
|
|
53
|
+
if (!coincidencia) {
|
|
54
|
+
// Cabecera sin Content-Length: no hay forma fiable de saber dónde
|
|
55
|
+
// empieza el siguiente mensaje. Se descarta hasta el separador y se
|
|
56
|
+
// sigue — un servidor mal comportado no debe colgar el cliente.
|
|
57
|
+
this.buffer = this.buffer.subarray(finCabecera + SEPARADOR.length);
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
const longitud = Number(coincidencia[1]);
|
|
61
|
+
const inicioCuerpo = finCabecera + SEPARADOR.length;
|
|
62
|
+
if (this.buffer.length < inicioCuerpo + longitud)
|
|
63
|
+
return mensajes; // cuerpo incompleto, esperar más datos
|
|
64
|
+
const cuerpo = this.buffer.subarray(inicioCuerpo, inicioCuerpo + longitud).toString("utf-8");
|
|
65
|
+
this.buffer = this.buffer.subarray(inicioCuerpo + longitud);
|
|
66
|
+
try {
|
|
67
|
+
mensajes.push(JSON.parse(cuerpo));
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
// JSON roto de un servidor concreto no debe tirar abajo al cliente:
|
|
71
|
+
// se ignora ese mensaje y se sigue troceando el resto del flujo.
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const ESPERA_SALIDA_MS = 2000;
|
|
77
|
+
/** Espera a que el proceso emita `exit`, o hasta `timeoutMs`. `true` = salió solo. */
|
|
78
|
+
function esperarSalida(proc, timeoutMs) {
|
|
79
|
+
if (proc.exitCode !== null || proc.signalCode !== null)
|
|
80
|
+
return Promise.resolve(true);
|
|
81
|
+
return new Promise((resolver) => {
|
|
82
|
+
const temporizador = setTimeout(() => {
|
|
83
|
+
proc.off("exit", alSalir);
|
|
84
|
+
resolver(false);
|
|
85
|
+
}, timeoutMs);
|
|
86
|
+
function alSalir() {
|
|
87
|
+
clearTimeout(temporizador);
|
|
88
|
+
resolver(true);
|
|
89
|
+
}
|
|
90
|
+
proc.once("exit", alSalir);
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
/** Capacidades mínimas que necesitan rename/symbols/definition/references. Ampliar aquí, no en cada tool. */
|
|
94
|
+
const CAPACIDADES_CLIENTE = {
|
|
95
|
+
textDocument: {
|
|
96
|
+
synchronization: { didSave: true, dynamicRegistration: false },
|
|
97
|
+
definition: { dynamicRegistration: false, linkSupport: false },
|
|
98
|
+
references: { dynamicRegistration: false },
|
|
99
|
+
documentSymbol: { dynamicRegistration: false, hierarchicalDocumentSymbolSupport: true },
|
|
100
|
+
rename: { dynamicRegistration: false, prepareSupport: false },
|
|
101
|
+
},
|
|
102
|
+
workspace: {
|
|
103
|
+
applyEdit: false, // el cliente aplica el WorkspaceEdit él mismo (edits.ts); no delega en el servidor
|
|
104
|
+
workspaceEdit: { documentChanges: true, resourceOperations: [] },
|
|
105
|
+
workspaceFolders: true,
|
|
106
|
+
symbol: { dynamicRegistration: false },
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
function uriDeRuta(ruta) {
|
|
110
|
+
// file:// + porcentaje-escapado, igual que hace cualquier cliente LSP normal.
|
|
111
|
+
return `file://${encodeURI(ruta).replace(/#/g, "%23")}`;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Arranca `comando` como servidor LSP, hace el handshake `initialize` +
|
|
115
|
+
* `initialized` y devuelve un cliente listo para usar.
|
|
116
|
+
*
|
|
117
|
+
* Lanza `ErrorLsp` (nunca falla en silencio) si el binario no arranca o el
|
|
118
|
+
* `initialize` no responde a tiempo — quien llama distingue "no se pudo
|
|
119
|
+
* hablar con el servidor" de "el servidor contestó vacío".
|
|
120
|
+
*/
|
|
121
|
+
export async function conectar(comando, args, cwd, opciones) {
|
|
122
|
+
const proc = spawn(comando, args, { cwd, stdio: ["pipe", "pipe", "pipe"] });
|
|
123
|
+
const pendientes = new Map();
|
|
124
|
+
let siguienteId = 1;
|
|
125
|
+
let cerrado = false;
|
|
126
|
+
const trocador = new Trocador();
|
|
127
|
+
proc.stdout.on("data", (chunk) => {
|
|
128
|
+
for (const mensaje of trocador.agregar(chunk))
|
|
129
|
+
manejarMensaje(mensaje);
|
|
130
|
+
});
|
|
131
|
+
// stderr de un servidor LSP suele ser su log, no un fallo: se descarta salvo
|
|
132
|
+
// que el proceso muera, momento en el que sí importa para el mensaje de error.
|
|
133
|
+
let ultimoStderr = "";
|
|
134
|
+
proc.stderr.on("data", (chunk) => {
|
|
135
|
+
ultimoStderr = chunk.toString("utf-8").slice(-2000);
|
|
136
|
+
});
|
|
137
|
+
function manejarMensaje(mensaje) {
|
|
138
|
+
if (typeof mensaje.id !== "number")
|
|
139
|
+
return; // notificación del servidor (p. ej. publishDiagnostics): se ignora, no la necesitamos
|
|
140
|
+
const pendiente = pendientes.get(mensaje.id);
|
|
141
|
+
if (!pendiente)
|
|
142
|
+
return;
|
|
143
|
+
pendientes.delete(mensaje.id);
|
|
144
|
+
if (mensaje.error) {
|
|
145
|
+
const err = mensaje.error;
|
|
146
|
+
pendiente.rechazar(new ErrorLsp(`el servidor respondió un error: ${err.message ?? JSON.stringify(err)}`, "rpc"));
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
pendiente.resolver(mensaje.result);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
function rechazarTodoPendiente(error) {
|
|
153
|
+
for (const p of pendientes.values())
|
|
154
|
+
p.rechazar(error);
|
|
155
|
+
pendientes.clear();
|
|
156
|
+
}
|
|
157
|
+
let procesoMuerto = null;
|
|
158
|
+
proc.once("exit", (codigo, senal) => {
|
|
159
|
+
if (!cerrado) {
|
|
160
|
+
procesoMuerto = new ErrorLsp(`el servidor de lenguaje terminó solo (código ${codigo}, señal ${senal}): ${ultimoStderr || "sin salida en stderr"}`, "proceso_murio");
|
|
161
|
+
rechazarTodoPendiente(procesoMuerto);
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
proc.once("error", (error) => {
|
|
165
|
+
procesoMuerto = new ErrorLsp(`no se pudo arrancar «${comando}»: ${error.message}`, "proceso_murio");
|
|
166
|
+
rechazarTodoPendiente(procesoMuerto);
|
|
167
|
+
});
|
|
168
|
+
function enviar(metodo, params, timeoutMs = 30_000) {
|
|
169
|
+
if (procesoMuerto)
|
|
170
|
+
return Promise.reject(procesoMuerto);
|
|
171
|
+
const id = siguienteId++;
|
|
172
|
+
return new Promise((resolver, rechazar) => {
|
|
173
|
+
const temporizador = setTimeout(() => {
|
|
174
|
+
pendientes.delete(id);
|
|
175
|
+
rechazar(new ErrorLsp(`«${metodo}» no respondió en ${timeoutMs}ms`, "timeout"));
|
|
176
|
+
}, timeoutMs);
|
|
177
|
+
pendientes.set(id, {
|
|
178
|
+
resolver: (v) => {
|
|
179
|
+
clearTimeout(temporizador);
|
|
180
|
+
resolver(v);
|
|
181
|
+
},
|
|
182
|
+
rechazar: (e) => {
|
|
183
|
+
clearTimeout(temporizador);
|
|
184
|
+
rechazar(e);
|
|
185
|
+
},
|
|
186
|
+
});
|
|
187
|
+
escribirMensaje(proc, { jsonrpc: "2.0", id, method: metodo, params });
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
function notificar(metodo, params) {
|
|
191
|
+
if (procesoMuerto)
|
|
192
|
+
return;
|
|
193
|
+
escribirMensaje(proc, { jsonrpc: "2.0", method: metodo, params });
|
|
194
|
+
}
|
|
195
|
+
async function cerrar() {
|
|
196
|
+
if (cerrado)
|
|
197
|
+
return;
|
|
198
|
+
cerrado = true;
|
|
199
|
+
if (!procesoMuerto) {
|
|
200
|
+
// Handshake formal primero: le da al servidor la oportunidad de soltar
|
|
201
|
+
// ficheros de bloqueo, sockets, etc. antes del kill.
|
|
202
|
+
await enviar("shutdown", null, 3000).catch(() => { });
|
|
203
|
+
notificar("exit", undefined);
|
|
204
|
+
}
|
|
205
|
+
rechazarTodoPendiente(new ErrorLsp("cliente LSP cerrado", "cierre"));
|
|
206
|
+
if (await esperarSalida(proc, ESPERA_SALIDA_MS))
|
|
207
|
+
return;
|
|
208
|
+
proc.kill("SIGKILL");
|
|
209
|
+
await esperarSalida(proc, ESPERA_SALIDA_MS);
|
|
210
|
+
// Si tras SIGKILL sigue sin confirmar salida (proceso zombi, señal
|
|
211
|
+
// bloqueada) no hay nada más que este cliente pueda hacer: se ha hecho
|
|
212
|
+
// lo posible y se devuelve el control. Quien orquesta varios clientes
|
|
213
|
+
// puede comprobar el pid con `process.kill(-1, 0)` para decidir si avisa.
|
|
214
|
+
}
|
|
215
|
+
try {
|
|
216
|
+
const timeoutInit = opciones?.timeoutInicializacionMs ?? 15_000;
|
|
217
|
+
await enviar("initialize", {
|
|
218
|
+
processId: process.pid,
|
|
219
|
+
rootUri: uriDeRuta(cwd),
|
|
220
|
+
workspaceFolders: [{ uri: uriDeRuta(cwd), name: cwd }],
|
|
221
|
+
capabilities: CAPACIDADES_CLIENTE,
|
|
222
|
+
}, timeoutInit);
|
|
223
|
+
notificar("initialized", {});
|
|
224
|
+
}
|
|
225
|
+
catch (error) {
|
|
226
|
+
await cerrar();
|
|
227
|
+
throw error;
|
|
228
|
+
}
|
|
229
|
+
return { enviar, notificar, cerrar, pid: proc.pid };
|
|
230
|
+
}
|
|
231
|
+
export { uriDeRuta };
|
|
232
|
+
//# sourceMappingURL=cliente.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cliente.js","sourceRoot":"","sources":["../../../src/core/lsp/cliente.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Cliente JSON-RPC sobre stdio contra un servidor de lenguaje (LSP).\n *\n * Fichero nuestro (coste cero de fork): el LanguageService de TypeScript en\n * `core/edicion/tipos.ts` cubre un único lenguaje sin salir de proceso; esto\n * es lo que hace falta para los demás — hablar el protocolo LSP con un\n * binario externo que arranca y para por comando.\n *\n * Decisión deliberada de diseño (ponytail): un servidor por LLAMADA, no un\n * pool de servidores vivos entre llamadas. Arrancar `gopls`/`rust-analyzer`\n * cuesta cientos de ms, pero un servidor que sobrevive a la llamada que lo\n * arrancó es exactamente el \"proceso huérfano\" que la puerta de este hueco\n * prohíbe, y mantener un pool con temporizador de inactividad es la mitad de\n * `client.ts` del competidor (1601 líneas) para un problema que aquí no\n * existe todavía. Subir a un pool es la mejora natural si el coste de\n * relanzar por llamada llega a notarse.\n */\n\nimport { type ChildProcessWithoutNullStreams, spawn } from \"node:child_process\";\n\n/** Cabecera LSP: los mensajes van precedidos de `Content-Length` en BYTES, no en caracteres. */\nconst SEPARADOR = \"\\r\\n\\r\\n\";\nconst PATRON_LONGITUD = /Content-Length:\\s*(\\d+)/i;\n\ninterface PeticionPendiente {\n\tresolver: (valor: unknown) => void;\n\trechazar: (error: Error) => void;\n}\n\n/** Lo que de verdad puede fallar al hablar con el servidor: nunca se colapsa en un único \"error\". */\nexport class ErrorLsp extends Error {\n\t// Campo explícito, no propiedad de parámetro: el proyecto compila con\n\t// `erasableSyntaxOnly`, que prohíbe la forma corta por no ser borrable.\n\treadonly tipo: \"proceso_murio\" | \"timeout\" | \"rpc\" | \"cierre\";\n\n\tconstructor(message: string, tipo: \"proceso_murio\" | \"timeout\" | \"rpc\" | \"cierre\") {\n\t\tsuper(message);\n\t\tthis.name = \"ErrorLsp\";\n\t\tthis.tipo = tipo;\n\t}\n}\n\n/** Conexión JSON-RPC ya inicializada (handshake `initialize`/`initialized` hecho) contra un servidor LSP. */\nexport interface ClienteLsp {\n\t/** Petición LSP que espera respuesta. Rechaza con `ErrorLsp` si el proceso muere o se agota el tiempo. */\n\tenviar<T>(metodo: string, params: unknown, timeoutMs?: number): Promise<T>;\n\t/** Notificación LSP sin respuesta (p. ej. `textDocument/didOpen`). */\n\tnotificar(metodo: string, params: unknown): void;\n\t/**\n\t * Cierre limpio: `shutdown` (petición) → `exit` (notificación) → espera a que\n\t * el proceso termine solo → `SIGKILL` si no lo ha hecho a tiempo.\n\t * Al resolver, el proceso YA NO existe — es la garantía que pide la puerta\n\t * de \"ningún servidor queda vivo al terminar\".\n\t */\n\tcerrar(): Promise<void>;\n\t/** PID del proceso del servidor. Solo para diagnóstico/pruebas: comprobar que no queda vivo tras `cerrar()`. */\n\treadonly pid: number | undefined;\n}\n\nfunction escribirMensaje(proc: ChildProcessWithoutNullStreams, cuerpo: unknown): void {\n\tconst json = JSON.stringify(cuerpo);\n\t// Content-Length cuenta BYTES UTF-8, no unidades de código: un símbolo o\n\t// comentario no-ASCII en el nombre nuevo de un rename lo desincroniza si se\n\t// mide en caracteres.\n\tconst bytes = Buffer.byteLength(json, \"utf-8\");\n\tproc.stdin.write(`Content-Length: ${bytes}${SEPARADOR}${json}`);\n}\n\n/** Trocea el flujo de stdout del servidor en mensajes JSON-RPC completos, cabecera incluida. */\nclass Trocador {\n\tprivate buffer = Buffer.alloc(0);\n\n\tagregar(chunk: Buffer): unknown[] {\n\t\tthis.buffer = Buffer.concat([this.buffer, chunk]);\n\t\tconst mensajes: unknown[] = [];\n\t\tfor (;;) {\n\t\t\tconst finCabecera = this.buffer.indexOf(SEPARADOR);\n\t\t\tif (finCabecera === -1) return mensajes;\n\t\t\tconst cabecera = this.buffer.subarray(0, finCabecera).toString(\"utf-8\");\n\t\t\tconst coincidencia = cabecera.match(PATRON_LONGITUD);\n\t\t\tif (!coincidencia) {\n\t\t\t\t// Cabecera sin Content-Length: no hay forma fiable de saber dónde\n\t\t\t\t// empieza el siguiente mensaje. Se descarta hasta el separador y se\n\t\t\t\t// sigue — un servidor mal comportado no debe colgar el cliente.\n\t\t\t\tthis.buffer = this.buffer.subarray(finCabecera + SEPARADOR.length);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst longitud = Number(coincidencia[1]);\n\t\t\tconst inicioCuerpo = finCabecera + SEPARADOR.length;\n\t\t\tif (this.buffer.length < inicioCuerpo + longitud) return mensajes; // cuerpo incompleto, esperar más datos\n\t\t\tconst cuerpo = this.buffer.subarray(inicioCuerpo, inicioCuerpo + longitud).toString(\"utf-8\");\n\t\t\tthis.buffer = this.buffer.subarray(inicioCuerpo + longitud);\n\t\t\ttry {\n\t\t\t\tmensajes.push(JSON.parse(cuerpo));\n\t\t\t} catch {\n\t\t\t\t// JSON roto de un servidor concreto no debe tirar abajo al cliente:\n\t\t\t\t// se ignora ese mensaje y se sigue troceando el resto del flujo.\n\t\t\t}\n\t\t}\n\t}\n}\n\nconst ESPERA_SALIDA_MS = 2000;\n\n/** Espera a que el proceso emita `exit`, o hasta `timeoutMs`. `true` = salió solo. */\nfunction esperarSalida(proc: ChildProcessWithoutNullStreams, timeoutMs: number): Promise<boolean> {\n\tif (proc.exitCode !== null || proc.signalCode !== null) return Promise.resolve(true);\n\treturn new Promise((resolver) => {\n\t\tconst temporizador = setTimeout(() => {\n\t\t\tproc.off(\"exit\", alSalir);\n\t\t\tresolver(false);\n\t\t}, timeoutMs);\n\t\tfunction alSalir() {\n\t\t\tclearTimeout(temporizador);\n\t\t\tresolver(true);\n\t\t}\n\t\tproc.once(\"exit\", alSalir);\n\t});\n}\n\n/** Capacidades mínimas que necesitan rename/symbols/definition/references. Ampliar aquí, no en cada tool. */\nconst CAPACIDADES_CLIENTE = {\n\ttextDocument: {\n\t\tsynchronization: { didSave: true, dynamicRegistration: false },\n\t\tdefinition: { dynamicRegistration: false, linkSupport: false },\n\t\treferences: { dynamicRegistration: false },\n\t\tdocumentSymbol: { dynamicRegistration: false, hierarchicalDocumentSymbolSupport: true },\n\t\trename: { dynamicRegistration: false, prepareSupport: false },\n\t},\n\tworkspace: {\n\t\tapplyEdit: false, // el cliente aplica el WorkspaceEdit él mismo (edits.ts); no delega en el servidor\n\t\tworkspaceEdit: { documentChanges: true, resourceOperations: [] },\n\t\tworkspaceFolders: true,\n\t\tsymbol: { dynamicRegistration: false },\n\t},\n} as const;\n\nfunction uriDeRuta(ruta: string): string {\n\t// file:// + porcentaje-escapado, igual que hace cualquier cliente LSP normal.\n\treturn `file://${encodeURI(ruta).replace(/#/g, \"%23\")}`;\n}\n\n/**\n * Arranca `comando` como servidor LSP, hace el handshake `initialize` +\n * `initialized` y devuelve un cliente listo para usar.\n *\n * Lanza `ErrorLsp` (nunca falla en silencio) si el binario no arranca o el\n * `initialize` no responde a tiempo — quien llama distingue \"no se pudo\n * hablar con el servidor\" de \"el servidor contestó vacío\".\n */\nexport async function conectar(\n\tcomando: string,\n\targs: string[],\n\tcwd: string,\n\topciones?: { timeoutInicializacionMs?: number },\n): Promise<ClienteLsp> {\n\tconst proc = spawn(comando, args, { cwd, stdio: [\"pipe\", \"pipe\", \"pipe\"] });\n\n\tconst pendientes = new Map<number, PeticionPendiente>();\n\tlet siguienteId = 1;\n\tlet cerrado = false;\n\n\tconst trocador = new Trocador();\n\tproc.stdout.on(\"data\", (chunk: Buffer) => {\n\t\tfor (const mensaje of trocador.agregar(chunk)) manejarMensaje(mensaje as Record<string, unknown>);\n\t});\n\n\t// stderr de un servidor LSP suele ser su log, no un fallo: se descarta salvo\n\t// que el proceso muera, momento en el que sí importa para el mensaje de error.\n\tlet ultimoStderr = \"\";\n\tproc.stderr.on(\"data\", (chunk: Buffer) => {\n\t\tultimoStderr = chunk.toString(\"utf-8\").slice(-2000);\n\t});\n\n\tfunction manejarMensaje(mensaje: Record<string, unknown>): void {\n\t\tif (typeof mensaje.id !== \"number\") return; // notificación del servidor (p. ej. publishDiagnostics): se ignora, no la necesitamos\n\t\tconst pendiente = pendientes.get(mensaje.id);\n\t\tif (!pendiente) return;\n\t\tpendientes.delete(mensaje.id);\n\t\tif (mensaje.error) {\n\t\t\tconst err = mensaje.error as { message?: string; code?: number };\n\t\t\tpendiente.rechazar(\n\t\t\t\tnew ErrorLsp(`el servidor respondió un error: ${err.message ?? JSON.stringify(err)}`, \"rpc\"),\n\t\t\t);\n\t\t} else {\n\t\t\tpendiente.resolver(mensaje.result);\n\t\t}\n\t}\n\n\tfunction rechazarTodoPendiente(error: Error): void {\n\t\tfor (const p of pendientes.values()) p.rechazar(error);\n\t\tpendientes.clear();\n\t}\n\n\tlet procesoMuerto: Error | null = null;\n\tproc.once(\"exit\", (codigo, senal) => {\n\t\tif (!cerrado) {\n\t\t\tprocesoMuerto = new ErrorLsp(\n\t\t\t\t`el servidor de lenguaje terminó solo (código ${codigo}, señal ${senal}): ${ultimoStderr || \"sin salida en stderr\"}`,\n\t\t\t\t\"proceso_murio\",\n\t\t\t);\n\t\t\trechazarTodoPendiente(procesoMuerto);\n\t\t}\n\t});\n\tproc.once(\"error\", (error) => {\n\t\tprocesoMuerto = new ErrorLsp(`no se pudo arrancar «${comando}»: ${error.message}`, \"proceso_murio\");\n\t\trechazarTodoPendiente(procesoMuerto);\n\t});\n\n\tfunction enviar<T>(metodo: string, params: unknown, timeoutMs = 30_000): Promise<T> {\n\t\tif (procesoMuerto) return Promise.reject(procesoMuerto);\n\t\tconst id = siguienteId++;\n\t\treturn new Promise<T>((resolver, rechazar) => {\n\t\t\tconst temporizador = setTimeout(() => {\n\t\t\t\tpendientes.delete(id);\n\t\t\t\trechazar(new ErrorLsp(`«${metodo}» no respondió en ${timeoutMs}ms`, \"timeout\"));\n\t\t\t}, timeoutMs);\n\t\t\tpendientes.set(id, {\n\t\t\t\tresolver: (v) => {\n\t\t\t\t\tclearTimeout(temporizador);\n\t\t\t\t\tresolver(v as T);\n\t\t\t\t},\n\t\t\t\trechazar: (e) => {\n\t\t\t\t\tclearTimeout(temporizador);\n\t\t\t\t\trechazar(e);\n\t\t\t\t},\n\t\t\t});\n\t\t\tescribirMensaje(proc, { jsonrpc: \"2.0\", id, method: metodo, params });\n\t\t});\n\t}\n\n\tfunction notificar(metodo: string, params: unknown): void {\n\t\tif (procesoMuerto) return;\n\t\tescribirMensaje(proc, { jsonrpc: \"2.0\", method: metodo, params });\n\t}\n\n\tasync function cerrar(): Promise<void> {\n\t\tif (cerrado) return;\n\t\tcerrado = true;\n\t\tif (!procesoMuerto) {\n\t\t\t// Handshake formal primero: le da al servidor la oportunidad de soltar\n\t\t\t// ficheros de bloqueo, sockets, etc. antes del kill.\n\t\t\tawait enviar(\"shutdown\", null, 3000).catch(() => {});\n\t\t\tnotificar(\"exit\", undefined);\n\t\t}\n\t\trechazarTodoPendiente(new ErrorLsp(\"cliente LSP cerrado\", \"cierre\"));\n\t\tif (await esperarSalida(proc, ESPERA_SALIDA_MS)) return;\n\t\tproc.kill(\"SIGKILL\");\n\t\tawait esperarSalida(proc, ESPERA_SALIDA_MS);\n\t\t// Si tras SIGKILL sigue sin confirmar salida (proceso zombi, señal\n\t\t// bloqueada) no hay nada más que este cliente pueda hacer: se ha hecho\n\t\t// lo posible y se devuelve el control. Quien orquesta varios clientes\n\t\t// puede comprobar el pid con `process.kill(-1, 0)` para decidir si avisa.\n\t}\n\n\ttry {\n\t\tconst timeoutInit = opciones?.timeoutInicializacionMs ?? 15_000;\n\t\tawait enviar(\n\t\t\t\"initialize\",\n\t\t\t{\n\t\t\t\tprocessId: process.pid,\n\t\t\t\trootUri: uriDeRuta(cwd),\n\t\t\t\tworkspaceFolders: [{ uri: uriDeRuta(cwd), name: cwd }],\n\t\t\t\tcapabilities: CAPACIDADES_CLIENTE,\n\t\t\t},\n\t\t\ttimeoutInit,\n\t\t);\n\t\tnotificar(\"initialized\", {});\n\t} catch (error) {\n\t\tawait cerrar();\n\t\tthrow error;\n\t}\n\n\treturn { enviar, notificar, cerrar, pid: proc.pid };\n}\n\nexport { uriDeRuta };\n"]}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Qué servidor de lenguaje toca para un fichero, y si está instalado.
|
|
3
|
+
*
|
|
4
|
+
* TypeScript/JS quedan fuera a propósito: los cubre el LanguageService de
|
|
5
|
+
* `core/edicion/tipos.ts` (más rápido, ya pagado, sin salir de proceso). Este
|
|
6
|
+
* módulo es solo para los lenguajes donde no hay alternativa a hablar LSP con
|
|
7
|
+
* un binario externo.
|
|
8
|
+
*
|
|
9
|
+
* Regla 6 del hueco, aplicada aquí sin excepción: "no pude" (el binario no
|
|
10
|
+
* está instalado) y "no hay" (esta extensión no tiene servidor conocido) son
|
|
11
|
+
* dos resultados DISTINTOS. Ninguno de los dos es un error silencioso ni un
|
|
12
|
+
* "no hay símbolos" genérico — cada uno lleva lo que hace falta para actuar.
|
|
13
|
+
*/
|
|
14
|
+
/** Un servidor de lenguaje conocido: cómo arrancarlo, para qué ficheros sirve, y cómo instalarlo si falta. */
|
|
15
|
+
export interface ServidorLsp {
|
|
16
|
+
nombre: string;
|
|
17
|
+
comando: string;
|
|
18
|
+
args: string[];
|
|
19
|
+
/** Extensiones con punto, en minúsculas: ".go", ".rs"... */
|
|
20
|
+
extensiones: string[];
|
|
21
|
+
/** Al menos uno de estos ficheros/directorios debe existir en algún ancestro del fichero para considerar el proyecto "de este lenguaje". */
|
|
22
|
+
marcadoresRaiz: string[];
|
|
23
|
+
/** Comando EXACTO para instalarlo. Se muestra tal cual al usuario: nada de "instala un LSP de Go". */
|
|
24
|
+
instalar: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Resultado de buscar servidor para un fichero. Tres formas, nunca
|
|
28
|
+
* colapsadas: hay servidor listo para usar; hay servidor conocido pero el
|
|
29
|
+
* binario no está instalado (con el comando exacto para arreglarlo); o esta
|
|
30
|
+
* extensión no tiene servidor conocido en absoluto (cobertura, no fallo).
|
|
31
|
+
*/
|
|
32
|
+
export type ResultadoDescubrimiento = {
|
|
33
|
+
estado: "disponible";
|
|
34
|
+
servidor: ServidorLsp;
|
|
35
|
+
} | {
|
|
36
|
+
estado: "no_instalado";
|
|
37
|
+
servidor: ServidorLsp;
|
|
38
|
+
} | {
|
|
39
|
+
estado: "sin_cobertura";
|
|
40
|
+
extension: string;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Busca el servidor LSP para `rutaFichero` dentro del proyecto `cwd`.
|
|
44
|
+
*
|
|
45
|
+
* No lanza nunca: toda situación (sin cobertura, servidor conocido pero no
|
|
46
|
+
* instalado, o servidor listo) es un valor de retorno distinguible, no una
|
|
47
|
+
* excepción que el llamador tenga que adivinar.
|
|
48
|
+
*/
|
|
49
|
+
export declare function descubrirParaFichero(rutaFichero: string, cwd: string): ResultadoDescubrimiento;
|
|
50
|
+
/** Lista de servidores curados, para diagnóstico (`ada-cli` mostrando qué lenguajes cubre el cliente LSP). */
|
|
51
|
+
export declare function servidoresConocidos(): readonly ServidorLsp[];
|
|
52
|
+
/**
|
|
53
|
+
* ¿Hay algún lenguaje con servidor conocido en este proyecto? No mira si el
|
|
54
|
+
* binario está instalado — solo si el proyecto es "de ese lenguaje" (marcador
|
|
55
|
+
* de raíz específico presente). Es la comprobación que decide si vale la pena
|
|
56
|
+
* registrar los tools: si el proyecto no toca ningún lenguaje que cubrimos,
|
|
57
|
+
* no hay nada que ofrecer y las tools solo serían ruido en el contexto del
|
|
58
|
+
* modelo — un `.git` (casi cualquier proyecto lo tiene) no cuenta como señal
|
|
59
|
+
* de "este proyecto usa Bash" a estos efectos.
|
|
60
|
+
*/
|
|
61
|
+
export declare function hayLenguajeReconocidoEnProyecto(cwd: string): boolean;
|
|
62
|
+
//# sourceMappingURL=descubrimiento.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"descubrimiento.d.ts","sourceRoot":"","sources":["../../../src/core/lsp/descubrimiento.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,iHAA8G;AAC9G,MAAM,WAAW,WAAW;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,6DAA4D;IAC5D,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,6IAA4I;IAC5I,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,sGAAsG;IACtG,QAAQ,EAAE,MAAM,CAAC;CACjB;AAyFD;;;;;GAKG;AACH,MAAM,MAAM,uBAAuB,GAChC;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,WAAW,CAAA;CAAE,GAC/C;IAAE,MAAM,EAAE,cAAc,CAAC;IAAC,QAAQ,EAAE,WAAW,CAAA;CAAE,GACjD;IAAE,MAAM,EAAE,eAAe,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAElD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,uBAAuB,CAc9F;AAED,gHAA8G;AAC9G,wBAAgB,mBAAmB,IAAI,SAAS,WAAW,EAAE,CAE5D;AAaD;;;;;;;;GAQG;AACH,wBAAgB,+BAA+B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAKpE","sourcesContent":["/**\n * Qué servidor de lenguaje toca para un fichero, y si está instalado.\n *\n * TypeScript/JS quedan fuera a propósito: los cubre el LanguageService de\n * `core/edicion/tipos.ts` (más rápido, ya pagado, sin salir de proceso). Este\n * módulo es solo para los lenguajes donde no hay alternativa a hablar LSP con\n * un binario externo.\n *\n * Regla 6 del hueco, aplicada aquí sin excepción: \"no pude\" (el binario no\n * está instalado) y \"no hay\" (esta extensión no tiene servidor conocido) son\n * dos resultados DISTINTOS. Ninguno de los dos es un error silencioso ni un\n * \"no hay símbolos\" genérico — cada uno lleva lo que hace falta para actuar.\n */\n\nimport { existsSync, readdirSync } from \"node:fs\";\nimport { dirname, join, delimiter as SEP_PATH, sep as SEP_RUTA } from \"node:path\";\n\n/** Un servidor de lenguaje conocido: cómo arrancarlo, para qué ficheros sirve, y cómo instalarlo si falta. */\nexport interface ServidorLsp {\n\tnombre: string;\n\tcomando: string;\n\targs: string[];\n\t/** Extensiones con punto, en minúsculas: \".go\", \".rs\"... */\n\textensiones: string[];\n\t/** Al menos uno de estos ficheros/directorios debe existir en algún ancestro del fichero para considerar el proyecto \"de este lenguaje\". */\n\tmarcadoresRaiz: string[];\n\t/** Comando EXACTO para instalarlo. Se muestra tal cual al usuario: nada de \"instala un LSP de Go\". */\n\tinstalar: string;\n}\n\n/**\n * Lista curada, no exhaustiva (ponytail: los lenguajes más comunes, no los 50\n * del competidor). Añadir uno nuevo es una entrada más aquí, nunca lógica\n * nueva — si hace falta más cobertura, este es el único sitio que crece.\n */\nconst SERVIDORES: readonly ServidorLsp[] = [\n\t{\n\t\tnombre: \"gopls\",\n\t\tcomando: \"gopls\",\n\t\targs: [\"serve\"],\n\t\textensiones: [\".go\"],\n\t\tmarcadoresRaiz: [\"go.mod\", \"go.work\"],\n\t\tinstalar: \"go install golang.org/x/tools/gopls@latest\",\n\t},\n\t{\n\t\tnombre: \"rust-analyzer\",\n\t\tcomando: \"rust-analyzer\",\n\t\targs: [],\n\t\textensiones: [\".rs\"],\n\t\tmarcadoresRaiz: [\"Cargo.toml\"],\n\t\tinstalar: \"rustup component add rust-analyzer\",\n\t},\n\t{\n\t\tnombre: \"pyright\",\n\t\tcomando: \"pyright-langserver\",\n\t\targs: [\"--stdio\"],\n\t\textensiones: [\".py\", \".pyi\"],\n\t\tmarcadoresRaiz: [\"pyproject.toml\", \"setup.py\", \"requirements.txt\"],\n\t\tinstalar: \"npm install -g pyright\",\n\t},\n\t{\n\t\tnombre: \"clangd\",\n\t\tcomando: \"clangd\",\n\t\targs: [],\n\t\textensiones: [\".c\", \".h\", \".cpp\", \".cc\", \".hpp\"],\n\t\tmarcadoresRaiz: [\"compile_commands.json\", \"CMakeLists.txt\"],\n\t\tinstalar: process.platform === \"darwin\" ? \"brew install llvm\" : \"sudo apt install clangd\",\n\t},\n\t{\n\t\tnombre: \"bash-language-server\",\n\t\tcomando: \"bash-language-server\",\n\t\targs: [\"start\"],\n\t\textensiones: [\".sh\", \".bash\"],\n\t\tmarcadoresRaiz: [\".git\"],\n\t\tinstalar: \"npm install -g bash-language-server\",\n\t},\n];\n\n/** Directorios y (en Windows) extensiones ejecutables candidatas para un `comando`. */\nfunction candidatosDeComando(comando: string): string[] {\n\tconst directorios = (process.env.PATH ?? \"\").split(SEP_PATH).filter(Boolean);\n\tconst extensiones = process.platform === \"win32\" ? (process.env.PATHEXT ?? \".EXE;.CMD;.BAT\").split(\";\") : [\"\"];\n\tconst candidatos: string[] = [];\n\tfor (const dir of directorios) {\n\t\tfor (const ext of extensiones) candidatos.push(join(dir, comando + ext));\n\t}\n\treturn candidatos;\n}\n\n/** ¿Está `comando` en el PATH? No usa un `which` de shell: mismo resultado en macOS, Linux y Windows sin depender de que exista ese binario. */\nfunction estaInstalado(comando: string): boolean {\n\treturn candidatosDeComando(comando).some((ruta) => existsSync(ruta));\n}\n\n/** ¿Hay algún marcador de `marcadores` en `dir` o en algún ancestro de `dir`? */\nfunction tieneMarcadorAncestro(dir: string, marcadores: string[]): boolean {\n\tlet actual = dir;\n\tfor (;;) {\n\t\tlet entradas: string[];\n\t\ttry {\n\t\t\tentradas = readdirSync(actual);\n\t\t} catch {\n\t\t\tentradas = [];\n\t\t}\n\t\tif (marcadores.some((m) => entradas.includes(m))) return true;\n\t\tconst padre = dirname(actual);\n\t\tif (padre === actual) return false; // llegado a la raíz del sistema de ficheros\n\t\tactual = padre;\n\t}\n}\n\nfunction extensionDe(ruta: string): string {\n\tconst base = ruta.slice(ruta.lastIndexOf(SEP_RUTA) + 1);\n\tconst punto = base.lastIndexOf(\".\");\n\treturn punto <= 0 ? \"\" : base.slice(punto).toLowerCase();\n}\n\n/**\n * Resultado de buscar servidor para un fichero. Tres formas, nunca\n * colapsadas: hay servidor listo para usar; hay servidor conocido pero el\n * binario no está instalado (con el comando exacto para arreglarlo); o esta\n * extensión no tiene servidor conocido en absoluto (cobertura, no fallo).\n */\nexport type ResultadoDescubrimiento =\n\t| { estado: \"disponible\"; servidor: ServidorLsp }\n\t| { estado: \"no_instalado\"; servidor: ServidorLsp }\n\t| { estado: \"sin_cobertura\"; extension: string };\n\n/**\n * Busca el servidor LSP para `rutaFichero` dentro del proyecto `cwd`.\n *\n * No lanza nunca: toda situación (sin cobertura, servidor conocido pero no\n * instalado, o servidor listo) es un valor de retorno distinguible, no una\n * excepción que el llamador tenga que adivinar.\n */\nexport function descubrirParaFichero(rutaFichero: string, cwd: string): ResultadoDescubrimiento {\n\tconst extension = extensionDe(rutaFichero);\n\tconst candidato = SERVIDORES.find((s) => s.extensiones.includes(extension));\n\tif (!candidato) return { estado: \"sin_cobertura\", extension: extension || \"(sin extensión)\" };\n\n\tconst dirFichero = dirname(rutaFichero);\n\tconst raizDelLenguaje =\n\t\ttieneMarcadorAncestro(dirFichero, candidato.marcadoresRaiz) ||\n\t\ttieneMarcadorAncestro(cwd, candidato.marcadoresRaiz);\n\tif (!raizDelLenguaje) return { estado: \"sin_cobertura\", extension };\n\n\treturn estaInstalado(candidato.comando)\n\t\t? { estado: \"disponible\", servidor: candidato }\n\t\t: { estado: \"no_instalado\", servidor: candidato };\n}\n\n/** Lista de servidores curados, para diagnóstico (`ada-cli` mostrando qué lenguajes cubre el cliente LSP). */\nexport function servidoresConocidos(): readonly ServidorLsp[] {\n\treturn SERVIDORES;\n}\n\n/**\n * Marcadores demasiado genéricos para decidir por sí solos \"este proyecto es\n * de este lenguaje\": `.git` (el marcador de bash-language-server, elegido\n * porque cualquier `.sh` en un repo git es un script legítimo) está presente\n * en prácticamente TODO proyecto, sea cual sea su lenguaje. Sirve para\n * `descubrirParaFichero` (ahí ya viene acotado por la extensión real del\n * fichero), pero colaría a `hayLenguajeReconocidoEnProyecto` a devolver\n * `true` siempre — el mismo marcador con dos papeles distintos.\n */\nconst MARCADORES_DEMASIADO_GENERICOS = new Set([\".git\"]);\n\n/**\n * ¿Hay algún lenguaje con servidor conocido en este proyecto? No mira si el\n * binario está instalado — solo si el proyecto es \"de ese lenguaje\" (marcador\n * de raíz específico presente). Es la comprobación que decide si vale la pena\n * registrar los tools: si el proyecto no toca ningún lenguaje que cubrimos,\n * no hay nada que ofrecer y las tools solo serían ruido en el contexto del\n * modelo — un `.git` (casi cualquier proyecto lo tiene) no cuenta como señal\n * de \"este proyecto usa Bash\" a estos efectos.\n */\nexport function hayLenguajeReconocidoEnProyecto(cwd: string): boolean {\n\treturn SERVIDORES.some((s) => {\n\t\tconst marcadoresFiables = s.marcadoresRaiz.filter((m) => !MARCADORES_DEMASIADO_GENERICOS.has(m));\n\t\treturn marcadoresFiables.length > 0 && tieneMarcadorAncestro(cwd, marcadoresFiables);\n\t});\n}\n"]}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Qué servidor de lenguaje toca para un fichero, y si está instalado.
|
|
3
|
+
*
|
|
4
|
+
* TypeScript/JS quedan fuera a propósito: los cubre el LanguageService de
|
|
5
|
+
* `core/edicion/tipos.ts` (más rápido, ya pagado, sin salir de proceso). Este
|
|
6
|
+
* módulo es solo para los lenguajes donde no hay alternativa a hablar LSP con
|
|
7
|
+
* un binario externo.
|
|
8
|
+
*
|
|
9
|
+
* Regla 6 del hueco, aplicada aquí sin excepción: "no pude" (el binario no
|
|
10
|
+
* está instalado) y "no hay" (esta extensión no tiene servidor conocido) son
|
|
11
|
+
* dos resultados DISTINTOS. Ninguno de los dos es un error silencioso ni un
|
|
12
|
+
* "no hay símbolos" genérico — cada uno lleva lo que hace falta para actuar.
|
|
13
|
+
*/
|
|
14
|
+
import { existsSync, readdirSync } from "node:fs";
|
|
15
|
+
import { dirname, join, delimiter as SEP_PATH, sep as SEP_RUTA } from "node:path";
|
|
16
|
+
/**
|
|
17
|
+
* Lista curada, no exhaustiva (ponytail: los lenguajes más comunes, no los 50
|
|
18
|
+
* del competidor). Añadir uno nuevo es una entrada más aquí, nunca lógica
|
|
19
|
+
* nueva — si hace falta más cobertura, este es el único sitio que crece.
|
|
20
|
+
*/
|
|
21
|
+
const SERVIDORES = [
|
|
22
|
+
{
|
|
23
|
+
nombre: "gopls",
|
|
24
|
+
comando: "gopls",
|
|
25
|
+
args: ["serve"],
|
|
26
|
+
extensiones: [".go"],
|
|
27
|
+
marcadoresRaiz: ["go.mod", "go.work"],
|
|
28
|
+
instalar: "go install golang.org/x/tools/gopls@latest",
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
nombre: "rust-analyzer",
|
|
32
|
+
comando: "rust-analyzer",
|
|
33
|
+
args: [],
|
|
34
|
+
extensiones: [".rs"],
|
|
35
|
+
marcadoresRaiz: ["Cargo.toml"],
|
|
36
|
+
instalar: "rustup component add rust-analyzer",
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
nombre: "pyright",
|
|
40
|
+
comando: "pyright-langserver",
|
|
41
|
+
args: ["--stdio"],
|
|
42
|
+
extensiones: [".py", ".pyi"],
|
|
43
|
+
marcadoresRaiz: ["pyproject.toml", "setup.py", "requirements.txt"],
|
|
44
|
+
instalar: "npm install -g pyright",
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
nombre: "clangd",
|
|
48
|
+
comando: "clangd",
|
|
49
|
+
args: [],
|
|
50
|
+
extensiones: [".c", ".h", ".cpp", ".cc", ".hpp"],
|
|
51
|
+
marcadoresRaiz: ["compile_commands.json", "CMakeLists.txt"],
|
|
52
|
+
instalar: process.platform === "darwin" ? "brew install llvm" : "sudo apt install clangd",
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
nombre: "bash-language-server",
|
|
56
|
+
comando: "bash-language-server",
|
|
57
|
+
args: ["start"],
|
|
58
|
+
extensiones: [".sh", ".bash"],
|
|
59
|
+
marcadoresRaiz: [".git"],
|
|
60
|
+
instalar: "npm install -g bash-language-server",
|
|
61
|
+
},
|
|
62
|
+
];
|
|
63
|
+
/** Directorios y (en Windows) extensiones ejecutables candidatas para un `comando`. */
|
|
64
|
+
function candidatosDeComando(comando) {
|
|
65
|
+
const directorios = (process.env.PATH ?? "").split(SEP_PATH).filter(Boolean);
|
|
66
|
+
const extensiones = process.platform === "win32" ? (process.env.PATHEXT ?? ".EXE;.CMD;.BAT").split(";") : [""];
|
|
67
|
+
const candidatos = [];
|
|
68
|
+
for (const dir of directorios) {
|
|
69
|
+
for (const ext of extensiones)
|
|
70
|
+
candidatos.push(join(dir, comando + ext));
|
|
71
|
+
}
|
|
72
|
+
return candidatos;
|
|
73
|
+
}
|
|
74
|
+
/** ¿Está `comando` en el PATH? No usa un `which` de shell: mismo resultado en macOS, Linux y Windows sin depender de que exista ese binario. */
|
|
75
|
+
function estaInstalado(comando) {
|
|
76
|
+
return candidatosDeComando(comando).some((ruta) => existsSync(ruta));
|
|
77
|
+
}
|
|
78
|
+
/** ¿Hay algún marcador de `marcadores` en `dir` o en algún ancestro de `dir`? */
|
|
79
|
+
function tieneMarcadorAncestro(dir, marcadores) {
|
|
80
|
+
let actual = dir;
|
|
81
|
+
for (;;) {
|
|
82
|
+
let entradas;
|
|
83
|
+
try {
|
|
84
|
+
entradas = readdirSync(actual);
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
entradas = [];
|
|
88
|
+
}
|
|
89
|
+
if (marcadores.some((m) => entradas.includes(m)))
|
|
90
|
+
return true;
|
|
91
|
+
const padre = dirname(actual);
|
|
92
|
+
if (padre === actual)
|
|
93
|
+
return false; // llegado a la raíz del sistema de ficheros
|
|
94
|
+
actual = padre;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
function extensionDe(ruta) {
|
|
98
|
+
const base = ruta.slice(ruta.lastIndexOf(SEP_RUTA) + 1);
|
|
99
|
+
const punto = base.lastIndexOf(".");
|
|
100
|
+
return punto <= 0 ? "" : base.slice(punto).toLowerCase();
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Busca el servidor LSP para `rutaFichero` dentro del proyecto `cwd`.
|
|
104
|
+
*
|
|
105
|
+
* No lanza nunca: toda situación (sin cobertura, servidor conocido pero no
|
|
106
|
+
* instalado, o servidor listo) es un valor de retorno distinguible, no una
|
|
107
|
+
* excepción que el llamador tenga que adivinar.
|
|
108
|
+
*/
|
|
109
|
+
export function descubrirParaFichero(rutaFichero, cwd) {
|
|
110
|
+
const extension = extensionDe(rutaFichero);
|
|
111
|
+
const candidato = SERVIDORES.find((s) => s.extensiones.includes(extension));
|
|
112
|
+
if (!candidato)
|
|
113
|
+
return { estado: "sin_cobertura", extension: extension || "(sin extensión)" };
|
|
114
|
+
const dirFichero = dirname(rutaFichero);
|
|
115
|
+
const raizDelLenguaje = tieneMarcadorAncestro(dirFichero, candidato.marcadoresRaiz) ||
|
|
116
|
+
tieneMarcadorAncestro(cwd, candidato.marcadoresRaiz);
|
|
117
|
+
if (!raizDelLenguaje)
|
|
118
|
+
return { estado: "sin_cobertura", extension };
|
|
119
|
+
return estaInstalado(candidato.comando)
|
|
120
|
+
? { estado: "disponible", servidor: candidato }
|
|
121
|
+
: { estado: "no_instalado", servidor: candidato };
|
|
122
|
+
}
|
|
123
|
+
/** Lista de servidores curados, para diagnóstico (`ada-cli` mostrando qué lenguajes cubre el cliente LSP). */
|
|
124
|
+
export function servidoresConocidos() {
|
|
125
|
+
return SERVIDORES;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Marcadores demasiado genéricos para decidir por sí solos "este proyecto es
|
|
129
|
+
* de este lenguaje": `.git` (el marcador de bash-language-server, elegido
|
|
130
|
+
* porque cualquier `.sh` en un repo git es un script legítimo) está presente
|
|
131
|
+
* en prácticamente TODO proyecto, sea cual sea su lenguaje. Sirve para
|
|
132
|
+
* `descubrirParaFichero` (ahí ya viene acotado por la extensión real del
|
|
133
|
+
* fichero), pero colaría a `hayLenguajeReconocidoEnProyecto` a devolver
|
|
134
|
+
* `true` siempre — el mismo marcador con dos papeles distintos.
|
|
135
|
+
*/
|
|
136
|
+
const MARCADORES_DEMASIADO_GENERICOS = new Set([".git"]);
|
|
137
|
+
/**
|
|
138
|
+
* ¿Hay algún lenguaje con servidor conocido en este proyecto? No mira si el
|
|
139
|
+
* binario está instalado — solo si el proyecto es "de ese lenguaje" (marcador
|
|
140
|
+
* de raíz específico presente). Es la comprobación que decide si vale la pena
|
|
141
|
+
* registrar los tools: si el proyecto no toca ningún lenguaje que cubrimos,
|
|
142
|
+
* no hay nada que ofrecer y las tools solo serían ruido en el contexto del
|
|
143
|
+
* modelo — un `.git` (casi cualquier proyecto lo tiene) no cuenta como señal
|
|
144
|
+
* de "este proyecto usa Bash" a estos efectos.
|
|
145
|
+
*/
|
|
146
|
+
export function hayLenguajeReconocidoEnProyecto(cwd) {
|
|
147
|
+
return SERVIDORES.some((s) => {
|
|
148
|
+
const marcadoresFiables = s.marcadoresRaiz.filter((m) => !MARCADORES_DEMASIADO_GENERICOS.has(m));
|
|
149
|
+
return marcadoresFiables.length > 0 && tieneMarcadorAncestro(cwd, marcadoresFiables);
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=descubrimiento.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"descubrimiento.js","sourceRoot":"","sources":["../../../src/core/lsp/descubrimiento.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Qué servidor de lenguaje toca para un fichero, y si está instalado.\n *\n * TypeScript/JS quedan fuera a propósito: los cubre el LanguageService de\n * `core/edicion/tipos.ts` (más rápido, ya pagado, sin salir de proceso). Este\n * módulo es solo para los lenguajes donde no hay alternativa a hablar LSP con\n * un binario externo.\n *\n * Regla 6 del hueco, aplicada aquí sin excepción: \"no pude\" (el binario no\n * está instalado) y \"no hay\" (esta extensión no tiene servidor conocido) son\n * dos resultados DISTINTOS. Ninguno de los dos es un error silencioso ni un\n * \"no hay símbolos\" genérico — cada uno lleva lo que hace falta para actuar.\n */\n\nimport { existsSync, readdirSync } from \"node:fs\";\nimport { dirname, join, delimiter as SEP_PATH, sep as SEP_RUTA } from \"node:path\";\n\n/** Un servidor de lenguaje conocido: cómo arrancarlo, para qué ficheros sirve, y cómo instalarlo si falta. */\nexport interface ServidorLsp {\n\tnombre: string;\n\tcomando: string;\n\targs: string[];\n\t/** Extensiones con punto, en minúsculas: \".go\", \".rs\"... */\n\textensiones: string[];\n\t/** Al menos uno de estos ficheros/directorios debe existir en algún ancestro del fichero para considerar el proyecto \"de este lenguaje\". */\n\tmarcadoresRaiz: string[];\n\t/** Comando EXACTO para instalarlo. Se muestra tal cual al usuario: nada de \"instala un LSP de Go\". */\n\tinstalar: string;\n}\n\n/**\n * Lista curada, no exhaustiva (ponytail: los lenguajes más comunes, no los 50\n * del competidor). Añadir uno nuevo es una entrada más aquí, nunca lógica\n * nueva — si hace falta más cobertura, este es el único sitio que crece.\n */\nconst SERVIDORES: readonly ServidorLsp[] = [\n\t{\n\t\tnombre: \"gopls\",\n\t\tcomando: \"gopls\",\n\t\targs: [\"serve\"],\n\t\textensiones: [\".go\"],\n\t\tmarcadoresRaiz: [\"go.mod\", \"go.work\"],\n\t\tinstalar: \"go install golang.org/x/tools/gopls@latest\",\n\t},\n\t{\n\t\tnombre: \"rust-analyzer\",\n\t\tcomando: \"rust-analyzer\",\n\t\targs: [],\n\t\textensiones: [\".rs\"],\n\t\tmarcadoresRaiz: [\"Cargo.toml\"],\n\t\tinstalar: \"rustup component add rust-analyzer\",\n\t},\n\t{\n\t\tnombre: \"pyright\",\n\t\tcomando: \"pyright-langserver\",\n\t\targs: [\"--stdio\"],\n\t\textensiones: [\".py\", \".pyi\"],\n\t\tmarcadoresRaiz: [\"pyproject.toml\", \"setup.py\", \"requirements.txt\"],\n\t\tinstalar: \"npm install -g pyright\",\n\t},\n\t{\n\t\tnombre: \"clangd\",\n\t\tcomando: \"clangd\",\n\t\targs: [],\n\t\textensiones: [\".c\", \".h\", \".cpp\", \".cc\", \".hpp\"],\n\t\tmarcadoresRaiz: [\"compile_commands.json\", \"CMakeLists.txt\"],\n\t\tinstalar: process.platform === \"darwin\" ? \"brew install llvm\" : \"sudo apt install clangd\",\n\t},\n\t{\n\t\tnombre: \"bash-language-server\",\n\t\tcomando: \"bash-language-server\",\n\t\targs: [\"start\"],\n\t\textensiones: [\".sh\", \".bash\"],\n\t\tmarcadoresRaiz: [\".git\"],\n\t\tinstalar: \"npm install -g bash-language-server\",\n\t},\n];\n\n/** Directorios y (en Windows) extensiones ejecutables candidatas para un `comando`. */\nfunction candidatosDeComando(comando: string): string[] {\n\tconst directorios = (process.env.PATH ?? \"\").split(SEP_PATH).filter(Boolean);\n\tconst extensiones = process.platform === \"win32\" ? (process.env.PATHEXT ?? \".EXE;.CMD;.BAT\").split(\";\") : [\"\"];\n\tconst candidatos: string[] = [];\n\tfor (const dir of directorios) {\n\t\tfor (const ext of extensiones) candidatos.push(join(dir, comando + ext));\n\t}\n\treturn candidatos;\n}\n\n/** ¿Está `comando` en el PATH? No usa un `which` de shell: mismo resultado en macOS, Linux y Windows sin depender de que exista ese binario. */\nfunction estaInstalado(comando: string): boolean {\n\treturn candidatosDeComando(comando).some((ruta) => existsSync(ruta));\n}\n\n/** ¿Hay algún marcador de `marcadores` en `dir` o en algún ancestro de `dir`? */\nfunction tieneMarcadorAncestro(dir: string, marcadores: string[]): boolean {\n\tlet actual = dir;\n\tfor (;;) {\n\t\tlet entradas: string[];\n\t\ttry {\n\t\t\tentradas = readdirSync(actual);\n\t\t} catch {\n\t\t\tentradas = [];\n\t\t}\n\t\tif (marcadores.some((m) => entradas.includes(m))) return true;\n\t\tconst padre = dirname(actual);\n\t\tif (padre === actual) return false; // llegado a la raíz del sistema de ficheros\n\t\tactual = padre;\n\t}\n}\n\nfunction extensionDe(ruta: string): string {\n\tconst base = ruta.slice(ruta.lastIndexOf(SEP_RUTA) + 1);\n\tconst punto = base.lastIndexOf(\".\");\n\treturn punto <= 0 ? \"\" : base.slice(punto).toLowerCase();\n}\n\n/**\n * Resultado de buscar servidor para un fichero. Tres formas, nunca\n * colapsadas: hay servidor listo para usar; hay servidor conocido pero el\n * binario no está instalado (con el comando exacto para arreglarlo); o esta\n * extensión no tiene servidor conocido en absoluto (cobertura, no fallo).\n */\nexport type ResultadoDescubrimiento =\n\t| { estado: \"disponible\"; servidor: ServidorLsp }\n\t| { estado: \"no_instalado\"; servidor: ServidorLsp }\n\t| { estado: \"sin_cobertura\"; extension: string };\n\n/**\n * Busca el servidor LSP para `rutaFichero` dentro del proyecto `cwd`.\n *\n * No lanza nunca: toda situación (sin cobertura, servidor conocido pero no\n * instalado, o servidor listo) es un valor de retorno distinguible, no una\n * excepción que el llamador tenga que adivinar.\n */\nexport function descubrirParaFichero(rutaFichero: string, cwd: string): ResultadoDescubrimiento {\n\tconst extension = extensionDe(rutaFichero);\n\tconst candidato = SERVIDORES.find((s) => s.extensiones.includes(extension));\n\tif (!candidato) return { estado: \"sin_cobertura\", extension: extension || \"(sin extensión)\" };\n\n\tconst dirFichero = dirname(rutaFichero);\n\tconst raizDelLenguaje =\n\t\ttieneMarcadorAncestro(dirFichero, candidato.marcadoresRaiz) ||\n\t\ttieneMarcadorAncestro(cwd, candidato.marcadoresRaiz);\n\tif (!raizDelLenguaje) return { estado: \"sin_cobertura\", extension };\n\n\treturn estaInstalado(candidato.comando)\n\t\t? { estado: \"disponible\", servidor: candidato }\n\t\t: { estado: \"no_instalado\", servidor: candidato };\n}\n\n/** Lista de servidores curados, para diagnóstico (`ada-cli` mostrando qué lenguajes cubre el cliente LSP). */\nexport function servidoresConocidos(): readonly ServidorLsp[] {\n\treturn SERVIDORES;\n}\n\n/**\n * Marcadores demasiado genéricos para decidir por sí solos \"este proyecto es\n * de este lenguaje\": `.git` (el marcador de bash-language-server, elegido\n * porque cualquier `.sh` en un repo git es un script legítimo) está presente\n * en prácticamente TODO proyecto, sea cual sea su lenguaje. Sirve para\n * `descubrirParaFichero` (ahí ya viene acotado por la extensión real del\n * fichero), pero colaría a `hayLenguajeReconocidoEnProyecto` a devolver\n * `true` siempre — el mismo marcador con dos papeles distintos.\n */\nconst MARCADORES_DEMASIADO_GENERICOS = new Set([\".git\"]);\n\n/**\n * ¿Hay algún lenguaje con servidor conocido en este proyecto? No mira si el\n * binario está instalado — solo si el proyecto es \"de ese lenguaje\" (marcador\n * de raíz específico presente). Es la comprobación que decide si vale la pena\n * registrar los tools: si el proyecto no toca ningún lenguaje que cubrimos,\n * no hay nada que ofrecer y las tools solo serían ruido en el contexto del\n * modelo — un `.git` (casi cualquier proyecto lo tiene) no cuenta como señal\n * de \"este proyecto usa Bash\" a estos efectos.\n */\nexport function hayLenguajeReconocidoEnProyecto(cwd: string): boolean {\n\treturn SERVIDORES.some((s) => {\n\t\tconst marcadoresFiables = s.marcadoresRaiz.filter((m) => !MARCADORES_DEMASIADO_GENERICOS.has(m));\n\t\treturn marcadoresFiables.length > 0 && tieneMarcadorAncestro(cwd, marcadoresFiables);\n\t});\n}\n"]}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Aplica un `WorkspaceEdit` de LSP (el resultado de `textDocument/rename`) a
|
|
3
|
+
* disco, fichero por fichero.
|
|
4
|
+
*
|
|
5
|
+
* Las posiciones LSP son `{line, character}` en unidades UTF-16 — que es
|
|
6
|
+
* exactamente cómo Python... no, cómo JAVASCRIPT indexa sus strings (UTF-16
|
|
7
|
+
* interno). Por eso `slice(character)` sobre un string de JS ya hace lo
|
|
8
|
+
* correcto sin convertir a offsets de bytes: es la pereza correcta, no un
|
|
9
|
+
* atajo que rompa con acentos o emoji en el nombre nuevo.
|
|
10
|
+
*/
|
|
11
|
+
export interface Posicion {
|
|
12
|
+
line: number;
|
|
13
|
+
character: number;
|
|
14
|
+
}
|
|
15
|
+
export interface RangoLsp {
|
|
16
|
+
start: Posicion;
|
|
17
|
+
end: Posicion;
|
|
18
|
+
}
|
|
19
|
+
export interface EdicionTexto {
|
|
20
|
+
range: RangoLsp;
|
|
21
|
+
newText: string;
|
|
22
|
+
}
|
|
23
|
+
interface CambioDocumento {
|
|
24
|
+
textDocument: {
|
|
25
|
+
uri: string;
|
|
26
|
+
version?: number | null;
|
|
27
|
+
};
|
|
28
|
+
edits: EdicionTexto[];
|
|
29
|
+
}
|
|
30
|
+
/** Subconjunto de `WorkspaceEdit` que cubrimos: ediciones de texto puras. Crear/renombrar/borrar ficheros no hace falta para rename de símbolos. */
|
|
31
|
+
export interface WorkspaceEditLsp {
|
|
32
|
+
changes?: Record<string, EdicionTexto[]>;
|
|
33
|
+
documentChanges?: Array<CambioDocumento | {
|
|
34
|
+
kind: string;
|
|
35
|
+
}>;
|
|
36
|
+
}
|
|
37
|
+
/** `file:///a/b%20c.go` → `/a/b c.go`. Inversa de `uriDeRuta` en cliente.ts. */
|
|
38
|
+
export declare function rutaDeUri(uri: string): string;
|
|
39
|
+
/** Agrupa `changes` y `documentChanges` en un único `Map<uri, ediciones>`; ignora operaciones de fichero (create/rename/delete) que no necesitamos. */
|
|
40
|
+
export declare function aplanar(edit: WorkspaceEditLsp): Map<string, EdicionTexto[]>;
|
|
41
|
+
/** Aplica las ediciones a un texto en memoria, de abajo a arriba para no desincronizar los índices de las que faltan. */
|
|
42
|
+
export declare function aplicarEnTexto(contenido: string, ediciones: EdicionTexto[]): string;
|
|
43
|
+
export interface CambioAplicado {
|
|
44
|
+
ruta: string;
|
|
45
|
+
antes: string;
|
|
46
|
+
despues: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Aplica un WorkspaceEdit completo a disco. Devuelve un `CambioAplicado` por
|
|
50
|
+
* fichero tocado, con el contenido antes/después — así quien llama puede
|
|
51
|
+
* enseñar el diff real, no solo decir "aplicado".
|
|
52
|
+
*
|
|
53
|
+
* Lanza si un fichero no se puede leer o escribir: un rename que dice
|
|
54
|
+
* "aplicado" sobre un fichero que en realidad no cambió es el error que la
|
|
55
|
+
* regla 6 prohíbe (éxito que no lo fue).
|
|
56
|
+
*/
|
|
57
|
+
export declare function aplicarWorkspaceEdit(edit: WorkspaceEditLsp): Promise<CambioAplicado[]>;
|
|
58
|
+
export {};
|
|
59
|
+
//# sourceMappingURL=ediciones.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ediciones.d.ts","sourceRoot":"","sources":["../../../src/core/lsp/ediciones.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,WAAW,QAAQ;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACxB,KAAK,EAAE,QAAQ,CAAC;IAChB,GAAG,EAAE,QAAQ,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC5B,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,eAAe;IACxB,YAAY,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACvD,KAAK,EAAE,YAAY,EAAE,CAAC;CACtB;AAED,qJAAoJ;AACpJ,MAAM,WAAW,gBAAgB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IACzC,eAAe,CAAC,EAAE,KAAK,CAAC,eAAe,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5D;AAED,kFAAgF;AAChF,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG7C;AAED,wJAAuJ;AACvJ,wBAAgB,OAAO,CAAC,IAAI,EAAE,gBAAgB,GAAG,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,CAiB3E;AAMD,0HAAyH;AACzH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,MAAM,CAkBnF;AAED,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAY5F","sourcesContent":["/**\n * Aplica un `WorkspaceEdit` de LSP (el resultado de `textDocument/rename`) a\n * disco, fichero por fichero.\n *\n * Las posiciones LSP son `{line, character}` en unidades UTF-16 — que es\n * exactamente cómo Python... no, cómo JAVASCRIPT indexa sus strings (UTF-16\n * interno). Por eso `slice(character)` sobre un string de JS ya hace lo\n * correcto sin convertir a offsets de bytes: es la pereza correcta, no un\n * atajo que rompa con acentos o emoji en el nombre nuevo.\n */\n\nimport { readFile, writeFile } from \"node:fs/promises\";\n\nexport interface Posicion {\n\tline: number;\n\tcharacter: number;\n}\n\nexport interface RangoLsp {\n\tstart: Posicion;\n\tend: Posicion;\n}\n\nexport interface EdicionTexto {\n\trange: RangoLsp;\n\tnewText: string;\n}\n\ninterface CambioDocumento {\n\ttextDocument: { uri: string; version?: number | null };\n\tedits: EdicionTexto[];\n}\n\n/** Subconjunto de `WorkspaceEdit` que cubrimos: ediciones de texto puras. Crear/renombrar/borrar ficheros no hace falta para rename de símbolos. */\nexport interface WorkspaceEditLsp {\n\tchanges?: Record<string, EdicionTexto[]>;\n\tdocumentChanges?: Array<CambioDocumento | { kind: string }>;\n}\n\n/** `file:///a/b%20c.go` → `/a/b c.go`. Inversa de `uriDeRuta` en cliente.ts. */\nexport function rutaDeUri(uri: string): string {\n\tif (!uri.startsWith(\"file://\")) throw new Error(`URI no soportada (no es file://): ${uri}`);\n\treturn decodeURIComponent(uri.slice(\"file://\".length));\n}\n\n/** Agrupa `changes` y `documentChanges` en un único `Map<uri, ediciones>`; ignora operaciones de fichero (create/rename/delete) que no necesitamos. */\nexport function aplanar(edit: WorkspaceEditLsp): Map<string, EdicionTexto[]> {\n\tconst porUri = new Map<string, EdicionTexto[]>();\n\tconst agregar = (uri: string, ediciones: EdicionTexto[]) => {\n\t\tif (ediciones.length === 0) return;\n\t\tconst previas = porUri.get(uri);\n\t\tif (previas) previas.push(...ediciones);\n\t\telse porUri.set(uri, [...ediciones]);\n\t};\n\tif (edit.changes) {\n\t\tfor (const [uri, ediciones] of Object.entries(edit.changes)) agregar(uri, ediciones);\n\t}\n\tif (edit.documentChanges) {\n\t\tfor (const cambio of edit.documentChanges) {\n\t\t\tif (\"textDocument\" in cambio && \"edits\" in cambio) agregar(cambio.textDocument.uri, cambio.edits);\n\t\t}\n\t}\n\treturn porUri;\n}\n\nfunction compararPosicion(a: Posicion, b: Posicion): number {\n\treturn a.line === b.line ? a.character - b.character : a.line - b.line;\n}\n\n/** Aplica las ediciones a un texto en memoria, de abajo a arriba para no desincronizar los índices de las que faltan. */\nexport function aplicarEnTexto(contenido: string, ediciones: EdicionTexto[]): string {\n\tconst lineas = contenido.split(\"\\n\");\n\t// Orden descendente por posición de inicio: aplicar la de más abajo primero\n\t// deja intactos los índices de línea de las que quedan por aplicar.\n\tconst ordenadas = [...ediciones].sort((a, b) => compararPosicion(b.range.start, a.range.start));\n\tfor (const edicion of ordenadas) {\n\t\tconst { start, end } = edicion.range;\n\t\tif (start.line === end.line) {\n\t\t\tconst linea = lineas[start.line] ?? \"\";\n\t\t\tlineas[start.line] = linea.slice(0, start.character) + edicion.newText + linea.slice(end.character);\n\t\t} else {\n\t\t\tconst lineaInicio = lineas[start.line] ?? \"\";\n\t\t\tconst lineaFin = lineas[end.line] ?? \"\";\n\t\t\tconst nuevoContenido = lineaInicio.slice(0, start.character) + edicion.newText + lineaFin.slice(end.character);\n\t\t\tlineas.splice(start.line, end.line - start.line + 1, ...nuevoContenido.split(\"\\n\"));\n\t\t}\n\t}\n\treturn lineas.join(\"\\n\");\n}\n\nexport interface CambioAplicado {\n\truta: string;\n\tantes: string;\n\tdespues: string;\n}\n\n/**\n * Aplica un WorkspaceEdit completo a disco. Devuelve un `CambioAplicado` por\n * fichero tocado, con el contenido antes/después — así quien llama puede\n * enseñar el diff real, no solo decir \"aplicado\".\n *\n * Lanza si un fichero no se puede leer o escribir: un rename que dice\n * \"aplicado\" sobre un fichero que en realidad no cambió es el error que la\n * regla 6 prohíbe (éxito que no lo fue).\n */\nexport async function aplicarWorkspaceEdit(edit: WorkspaceEditLsp): Promise<CambioAplicado[]> {\n\tconst porUri = aplanar(edit);\n\tconst cambios: CambioAplicado[] = [];\n\tfor (const [uri, ediciones] of porUri) {\n\t\tconst ruta = rutaDeUri(uri);\n\t\tconst antes = await readFile(ruta, \"utf-8\");\n\t\tconst despues = aplicarEnTexto(antes, ediciones);\n\t\tif (despues === antes) continue; // ediciones vacías tras aplicar (raro, pero no es un cambio real)\n\t\tawait writeFile(ruta, despues, \"utf-8\");\n\t\tcambios.push({ ruta, antes, despues });\n\t}\n\treturn cambios;\n}\n"]}
|