@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,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Servidores MCP que otras herramientas ya han configurado en este proyecto
|
|
3
|
+
* (o para este usuario), leídos de sus propios ficheros de config.
|
|
4
|
+
*
|
|
5
|
+
* La decisión que no es obvia: un servidor `stdio` se LISTA, nunca se lanza.
|
|
6
|
+
* `core/mcp/client.ts` solo habla Streamable HTTP a propósito — lanzar un
|
|
7
|
+
* proceso arbitrario que otra herramienta dejó apuntado en un JSON es
|
|
8
|
+
* superficie de ejecución que no se abre por defecto. Así que aquí no hay
|
|
9
|
+
* "activar": hay "encontrado y soportado" frente a "encontrado y no
|
|
10
|
+
* soportado, y por qué".
|
|
11
|
+
*
|
|
12
|
+
* Cada fichero mirado se anota exista o no: es lo único que permite decir
|
|
13
|
+
* DÓNDE se ha buscado en un proyecto vacío, en vez de un "nada" mudo.
|
|
14
|
+
*/
|
|
15
|
+
export type NivelConfigMcp = "usuario" | "proyecto";
|
|
16
|
+
export interface ServidorMcpDescubierto {
|
|
17
|
+
/** De qué herramienta viene la config. */
|
|
18
|
+
origen: string;
|
|
19
|
+
/** Ruta absoluta al fichero de config. */
|
|
20
|
+
ruta: string;
|
|
21
|
+
nivel: NivelConfigMcp;
|
|
22
|
+
nombre: string;
|
|
23
|
+
transporte: "http" | "stdio";
|
|
24
|
+
url?: string;
|
|
25
|
+
comando?: string;
|
|
26
|
+
/** true solo si Ada puede hablar con él de verdad (HTTP y no desactivado). */
|
|
27
|
+
soportado: boolean;
|
|
28
|
+
/** Por qué no está soportado. Ausente cuando `soportado` es true. */
|
|
29
|
+
motivo?: string;
|
|
30
|
+
}
|
|
31
|
+
export interface ResultadoDescubrimientoMcp {
|
|
32
|
+
servidores: ServidorMcpDescubierto[];
|
|
33
|
+
/** Todos los ficheros mirados, existan o no. */
|
|
34
|
+
ficherosMirados: string[];
|
|
35
|
+
/** Ficheros o entradas que existían pero no se pudieron leer/interpretar. */
|
|
36
|
+
errores: Array<{
|
|
37
|
+
ruta: string;
|
|
38
|
+
motivo: string;
|
|
39
|
+
}>;
|
|
40
|
+
}
|
|
41
|
+
export declare function descubrirServidoresMcp(cwd: string, home?: string): ResultadoDescubrimientoMcp;
|
|
42
|
+
//# sourceMappingURL=mcp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../../src/core/descubrimiento/mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAMH,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,UAAU,CAAC;AAEpD,MAAM,WAAW,sBAAsB;IACtC,2CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,cAAc,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+EAA8E;IAC9E,SAAS,EAAE,OAAO,CAAC;IACnB,uEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,0BAA0B;IAC1C,UAAU,EAAE,sBAAsB,EAAE,CAAC;IACrC,gDAAgD;IAChD,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,8EAA6E;IAC7E,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjD;AAqDD,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,MAAkB,GAAG,0BAA0B,CAiFxG","sourcesContent":["/**\n * Servidores MCP que otras herramientas ya han configurado en este proyecto\n * (o para este usuario), leídos de sus propios ficheros de config.\n *\n * La decisión que no es obvia: un servidor `stdio` se LISTA, nunca se lanza.\n * `core/mcp/client.ts` solo habla Streamable HTTP a propósito — lanzar un\n * proceso arbitrario que otra herramienta dejó apuntado en un JSON es\n * superficie de ejecución que no se abre por defecto. Así que aquí no hay\n * \"activar\": hay \"encontrado y soportado\" frente a \"encontrado y no\n * soportado, y por qué\".\n *\n * Cada fichero mirado se anota exista o no: es lo único que permite decir\n * DÓNDE se ha buscado en un proyecto vacío, en vez de un \"nada\" mudo.\n */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join, resolve } from \"node:path\";\n\nexport type NivelConfigMcp = \"usuario\" | \"proyecto\";\n\nexport interface ServidorMcpDescubierto {\n\t/** De qué herramienta viene la config. */\n\torigen: string;\n\t/** Ruta absoluta al fichero de config. */\n\truta: string;\n\tnivel: NivelConfigMcp;\n\tnombre: string;\n\ttransporte: \"http\" | \"stdio\";\n\turl?: string;\n\tcomando?: string;\n\t/** true solo si Ada puede hablar con él de verdad (HTTP y no desactivado). */\n\tsoportado: boolean;\n\t/** Por qué no está soportado. Ausente cuando `soportado` es true. */\n\tmotivo?: string;\n}\n\nexport interface ResultadoDescubrimientoMcp {\n\tservidores: ServidorMcpDescubierto[];\n\t/** Todos los ficheros mirados, existan o no. */\n\tficherosMirados: string[];\n\t/** Ficheros o entradas que existían pero no se pudieron leer/interpretar. */\n\terrores: Array<{ ruta: string; motivo: string }>;\n}\n\ninterface FuenteMcp {\n\torigen: string;\n\trelativa: string;\n\tbase: \"proyecto\" | \"usuario\";\n\t/**\n\t * \"plano\": {mcpServers:{...}} en la raíz (Cursor, Claude Code, Gemini CLI,\n\t * .mcp.json). \"vscode\": {servers:{...}} en la raíz — VS Code NO anida bajo\n\t * \"mcp\" en `.vscode/mcp.json`; eso solo pasa en su settings.json de\n\t * usuario, que aquí no se lee. \"claude-proyecto\": servidores que Claude\n\t * Code guarda para ESTE proyecto dentro de `~/.claude.json`, en\n\t * `projects[cwd].mcpServers` — el caso más común en la práctica (MCP\n\t * añadido con `claude mcp add` sin `--scope user`), y el que un `mcpServers`\n\t * de nivel superior nunca ve.\n\t */\n\tformato: \"plano\" | \"vscode\" | \"claude-proyecto\";\n}\n\n/**\n * Dónde mira cada herramienta, tomado de sus propios adaptadores\n * (oh-my-pi: claude.ts, cursor.ts, vscode.ts, gemini.ts, mcp-json.ts).\n *\n * `.claude/mcp.json` NO es un fichero real de Claude Code (fue una feature\n * request rechazada, anthropics/claude-code#5350) — se quitó de aquí porque\n * \"mirado en\" no puede incluir un sitio que la herramienta real nunca escribe.\n */\nconst FUENTES: FuenteMcp[] = [\n\t{ origen: \"MCP (raíz del proyecto)\", relativa: \".mcp.json\", base: \"proyecto\", formato: \"plano\" },\n\t{ origen: \"Cursor\", relativa: \".cursor/mcp.json\", base: \"proyecto\", formato: \"plano\" },\n\t{ origen: \"VS Code\", relativa: \".vscode/mcp.json\", base: \"proyecto\", formato: \"vscode\" },\n\t{ origen: \"Gemini CLI\", relativa: \".gemini/settings.json\", base: \"proyecto\", formato: \"plano\" },\n\t{ origen: \"Claude Code\", relativa: \".claude.json\", base: \"usuario\", formato: \"plano\" },\n\t{ origen: \"Claude Code (proyecto)\", relativa: \".claude.json\", base: \"usuario\", formato: \"claude-proyecto\" },\n\t{ origen: \"Cursor\", relativa: \".cursor/mcp.json\", base: \"usuario\", formato: \"plano\" },\n];\n\nfunction serversDe(json: unknown, formato: FuenteMcp[\"formato\"], cwd: string): Record<string, unknown> | null {\n\tif (!json || typeof json !== \"object\") return null;\n\tif (formato === \"claude-proyecto\") {\n\t\tconst projects = (json as Record<string, unknown>).projects;\n\t\tif (!projects || typeof projects !== \"object\") return null;\n\t\tconst clave = resolve(cwd);\n\t\tconst proyecto = (projects as Record<string, unknown>)[clave] ?? (projects as Record<string, unknown>)[cwd];\n\t\tif (!proyecto || typeof proyecto !== \"object\") return null;\n\t\tconst servers = (proyecto as Record<string, unknown>).mcpServers;\n\t\treturn servers && typeof servers === \"object\" ? (servers as Record<string, unknown>) : null;\n\t}\n\tconst clave = formato === \"vscode\" ? \"servers\" : \"mcpServers\";\n\tconst servers = (json as Record<string, unknown>)[clave];\n\treturn servers && typeof servers === \"object\" ? (servers as Record<string, unknown>) : null;\n}\n\nexport function descubrirServidoresMcp(cwd: string, home: string = homedir()): ResultadoDescubrimientoMcp {\n\tconst servidores: ServidorMcpDescubierto[] = [];\n\tconst ficherosMirados: string[] = [];\n\tconst errores: Array<{ ruta: string; motivo: string }> = [];\n\n\tfor (const fuente of FUENTES) {\n\t\tconst absoluta = join(fuente.base === \"usuario\" ? home : cwd, fuente.relativa);\n\t\t// Un mismo fichero puede aparecer en dos fuentes (p.ej. `.claude.json`\n\t\t// para el scope de usuario y para el de proyecto): se mira una vez, se\n\t\t// anota una vez.\n\t\tif (!ficherosMirados.includes(absoluta)) ficherosMirados.push(absoluta);\n\t\tif (!existsSync(absoluta)) continue;\n\n\t\tlet contenido: string;\n\t\ttry {\n\t\t\tcontenido = readFileSync(absoluta, \"utf-8\");\n\t\t} catch (error) {\n\t\t\terrores.push({ ruta: absoluta, motivo: error instanceof Error ? error.message : \"no se pudo leer\" });\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet json: unknown;\n\t\ttry {\n\t\t\tjson = JSON.parse(contenido);\n\t\t} catch {\n\t\t\terrores.push({ ruta: absoluta, motivo: \"JSON inválido\" });\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst servers = serversDe(json, fuente.formato, cwd);\n\t\t// Fichero válido sin mcpServers: no hay nada que listar, no es un fallo.\n\t\tif (!servers) continue;\n\n\t\tfor (const [nombre, raw] of Object.entries(servers)) {\n\t\t\tif (!raw || typeof raw !== \"object\") {\n\t\t\t\terrores.push({ ruta: absoluta, motivo: `servidor '${nombre}': configuración inválida` });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst config = raw as Record<string, unknown>;\n\t\t\t// Gemini CLI usa `httpUrl` (no `url`) para transporte HTTP — ver\n\t\t\t// docs/tools/mcp-server.md de google-gemini/gemini-cli.\n\t\t\tconst url =\n\t\t\t\ttypeof config.url === \"string\"\n\t\t\t\t\t? config.url\n\t\t\t\t\t: typeof config.httpUrl === \"string\"\n\t\t\t\t\t\t? config.httpUrl\n\t\t\t\t\t\t: undefined;\n\t\t\tconst comando = typeof config.command === \"string\" ? config.command : undefined;\n\n\t\t\tif (!url && !comando) {\n\t\t\t\terrores.push({ ruta: absoluta, motivo: `servidor '${nombre}': sin 'url' ni 'command'` });\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst transporte: \"http\" | \"stdio\" = url ? \"http\" : \"stdio\";\n\t\t\tconst desactivado = config.enabled === false;\n\t\t\tconst soportado = transporte === \"http\" && !desactivado;\n\t\t\tconst motivo = desactivado\n\t\t\t\t? \"desactivado en su propia configuración (enabled: false)\"\n\t\t\t\t: transporte === \"stdio\"\n\t\t\t\t\t? \"servidor stdio: el cliente MCP de Ada solo habla HTTP a propósito (core/mcp/client.ts)\"\n\t\t\t\t\t: undefined;\n\n\t\t\tservidores.push({\n\t\t\t\torigen: fuente.origen,\n\t\t\t\truta: absoluta,\n\t\t\t\t// `claude-proyecto` vive físicamente en el fichero de usuario, pero\n\t\t\t\t// es config de ESTE proyecto — el nivel que importa para quien lee\n\t\t\t\t// la salida es el lógico, no dónde Claude Code decidió guardarlo.\n\t\t\t\tnivel: fuente.formato === \"claude-proyecto\" ? \"proyecto\" : fuente.base,\n\t\t\t\tnombre,\n\t\t\t\ttransporte,\n\t\t\t\turl,\n\t\t\t\tcomando,\n\t\t\t\tsoportado,\n\t\t\t\tmotivo,\n\t\t\t});\n\t\t}\n\t}\n\n\treturn { servidores, ficherosMirados, errores };\n}\n"]}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Servidores MCP que otras herramientas ya han configurado en este proyecto
|
|
3
|
+
* (o para este usuario), leídos de sus propios ficheros de config.
|
|
4
|
+
*
|
|
5
|
+
* La decisión que no es obvia: un servidor `stdio` se LISTA, nunca se lanza.
|
|
6
|
+
* `core/mcp/client.ts` solo habla Streamable HTTP a propósito — lanzar un
|
|
7
|
+
* proceso arbitrario que otra herramienta dejó apuntado en un JSON es
|
|
8
|
+
* superficie de ejecución que no se abre por defecto. Así que aquí no hay
|
|
9
|
+
* "activar": hay "encontrado y soportado" frente a "encontrado y no
|
|
10
|
+
* soportado, y por qué".
|
|
11
|
+
*
|
|
12
|
+
* Cada fichero mirado se anota exista o no: es lo único que permite decir
|
|
13
|
+
* DÓNDE se ha buscado en un proyecto vacío, en vez de un "nada" mudo.
|
|
14
|
+
*/
|
|
15
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
16
|
+
import { homedir } from "node:os";
|
|
17
|
+
import { join, resolve } from "node:path";
|
|
18
|
+
/**
|
|
19
|
+
* Dónde mira cada herramienta, tomado de sus propios adaptadores
|
|
20
|
+
* (oh-my-pi: claude.ts, cursor.ts, vscode.ts, gemini.ts, mcp-json.ts).
|
|
21
|
+
*
|
|
22
|
+
* `.claude/mcp.json` NO es un fichero real de Claude Code (fue una feature
|
|
23
|
+
* request rechazada, anthropics/claude-code#5350) — se quitó de aquí porque
|
|
24
|
+
* "mirado en" no puede incluir un sitio que la herramienta real nunca escribe.
|
|
25
|
+
*/
|
|
26
|
+
const FUENTES = [
|
|
27
|
+
{ origen: "MCP (raíz del proyecto)", relativa: ".mcp.json", base: "proyecto", formato: "plano" },
|
|
28
|
+
{ origen: "Cursor", relativa: ".cursor/mcp.json", base: "proyecto", formato: "plano" },
|
|
29
|
+
{ origen: "VS Code", relativa: ".vscode/mcp.json", base: "proyecto", formato: "vscode" },
|
|
30
|
+
{ origen: "Gemini CLI", relativa: ".gemini/settings.json", base: "proyecto", formato: "plano" },
|
|
31
|
+
{ origen: "Claude Code", relativa: ".claude.json", base: "usuario", formato: "plano" },
|
|
32
|
+
{ origen: "Claude Code (proyecto)", relativa: ".claude.json", base: "usuario", formato: "claude-proyecto" },
|
|
33
|
+
{ origen: "Cursor", relativa: ".cursor/mcp.json", base: "usuario", formato: "plano" },
|
|
34
|
+
];
|
|
35
|
+
function serversDe(json, formato, cwd) {
|
|
36
|
+
if (!json || typeof json !== "object")
|
|
37
|
+
return null;
|
|
38
|
+
if (formato === "claude-proyecto") {
|
|
39
|
+
const projects = json.projects;
|
|
40
|
+
if (!projects || typeof projects !== "object")
|
|
41
|
+
return null;
|
|
42
|
+
const clave = resolve(cwd);
|
|
43
|
+
const proyecto = projects[clave] ?? projects[cwd];
|
|
44
|
+
if (!proyecto || typeof proyecto !== "object")
|
|
45
|
+
return null;
|
|
46
|
+
const servers = proyecto.mcpServers;
|
|
47
|
+
return servers && typeof servers === "object" ? servers : null;
|
|
48
|
+
}
|
|
49
|
+
const clave = formato === "vscode" ? "servers" : "mcpServers";
|
|
50
|
+
const servers = json[clave];
|
|
51
|
+
return servers && typeof servers === "object" ? servers : null;
|
|
52
|
+
}
|
|
53
|
+
export function descubrirServidoresMcp(cwd, home = homedir()) {
|
|
54
|
+
const servidores = [];
|
|
55
|
+
const ficherosMirados = [];
|
|
56
|
+
const errores = [];
|
|
57
|
+
for (const fuente of FUENTES) {
|
|
58
|
+
const absoluta = join(fuente.base === "usuario" ? home : cwd, fuente.relativa);
|
|
59
|
+
// Un mismo fichero puede aparecer en dos fuentes (p.ej. `.claude.json`
|
|
60
|
+
// para el scope de usuario y para el de proyecto): se mira una vez, se
|
|
61
|
+
// anota una vez.
|
|
62
|
+
if (!ficherosMirados.includes(absoluta))
|
|
63
|
+
ficherosMirados.push(absoluta);
|
|
64
|
+
if (!existsSync(absoluta))
|
|
65
|
+
continue;
|
|
66
|
+
let contenido;
|
|
67
|
+
try {
|
|
68
|
+
contenido = readFileSync(absoluta, "utf-8");
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
errores.push({ ruta: absoluta, motivo: error instanceof Error ? error.message : "no se pudo leer" });
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
let json;
|
|
75
|
+
try {
|
|
76
|
+
json = JSON.parse(contenido);
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
errores.push({ ruta: absoluta, motivo: "JSON inválido" });
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
const servers = serversDe(json, fuente.formato, cwd);
|
|
83
|
+
// Fichero válido sin mcpServers: no hay nada que listar, no es un fallo.
|
|
84
|
+
if (!servers)
|
|
85
|
+
continue;
|
|
86
|
+
for (const [nombre, raw] of Object.entries(servers)) {
|
|
87
|
+
if (!raw || typeof raw !== "object") {
|
|
88
|
+
errores.push({ ruta: absoluta, motivo: `servidor '${nombre}': configuración inválida` });
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
const config = raw;
|
|
92
|
+
// Gemini CLI usa `httpUrl` (no `url`) para transporte HTTP — ver
|
|
93
|
+
// docs/tools/mcp-server.md de google-gemini/gemini-cli.
|
|
94
|
+
const url = typeof config.url === "string"
|
|
95
|
+
? config.url
|
|
96
|
+
: typeof config.httpUrl === "string"
|
|
97
|
+
? config.httpUrl
|
|
98
|
+
: undefined;
|
|
99
|
+
const comando = typeof config.command === "string" ? config.command : undefined;
|
|
100
|
+
if (!url && !comando) {
|
|
101
|
+
errores.push({ ruta: absoluta, motivo: `servidor '${nombre}': sin 'url' ni 'command'` });
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
const transporte = url ? "http" : "stdio";
|
|
105
|
+
const desactivado = config.enabled === false;
|
|
106
|
+
const soportado = transporte === "http" && !desactivado;
|
|
107
|
+
const motivo = desactivado
|
|
108
|
+
? "desactivado en su propia configuración (enabled: false)"
|
|
109
|
+
: transporte === "stdio"
|
|
110
|
+
? "servidor stdio: el cliente MCP de Ada solo habla HTTP a propósito (core/mcp/client.ts)"
|
|
111
|
+
: undefined;
|
|
112
|
+
servidores.push({
|
|
113
|
+
origen: fuente.origen,
|
|
114
|
+
ruta: absoluta,
|
|
115
|
+
// `claude-proyecto` vive físicamente en el fichero de usuario, pero
|
|
116
|
+
// es config de ESTE proyecto — el nivel que importa para quien lee
|
|
117
|
+
// la salida es el lógico, no dónde Claude Code decidió guardarlo.
|
|
118
|
+
nivel: fuente.formato === "claude-proyecto" ? "proyecto" : fuente.base,
|
|
119
|
+
nombre,
|
|
120
|
+
transporte,
|
|
121
|
+
url,
|
|
122
|
+
comando,
|
|
123
|
+
soportado,
|
|
124
|
+
motivo,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return { servidores, ficherosMirados, errores };
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../../src/core/descubrimiento/mcp.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Servidores MCP que otras herramientas ya han configurado en este proyecto\n * (o para este usuario), leídos de sus propios ficheros de config.\n *\n * La decisión que no es obvia: un servidor `stdio` se LISTA, nunca se lanza.\n * `core/mcp/client.ts` solo habla Streamable HTTP a propósito — lanzar un\n * proceso arbitrario que otra herramienta dejó apuntado en un JSON es\n * superficie de ejecución que no se abre por defecto. Así que aquí no hay\n * \"activar\": hay \"encontrado y soportado\" frente a \"encontrado y no\n * soportado, y por qué\".\n *\n * Cada fichero mirado se anota exista o no: es lo único que permite decir\n * DÓNDE se ha buscado en un proyecto vacío, en vez de un \"nada\" mudo.\n */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join, resolve } from \"node:path\";\n\nexport type NivelConfigMcp = \"usuario\" | \"proyecto\";\n\nexport interface ServidorMcpDescubierto {\n\t/** De qué herramienta viene la config. */\n\torigen: string;\n\t/** Ruta absoluta al fichero de config. */\n\truta: string;\n\tnivel: NivelConfigMcp;\n\tnombre: string;\n\ttransporte: \"http\" | \"stdio\";\n\turl?: string;\n\tcomando?: string;\n\t/** true solo si Ada puede hablar con él de verdad (HTTP y no desactivado). */\n\tsoportado: boolean;\n\t/** Por qué no está soportado. Ausente cuando `soportado` es true. */\n\tmotivo?: string;\n}\n\nexport interface ResultadoDescubrimientoMcp {\n\tservidores: ServidorMcpDescubierto[];\n\t/** Todos los ficheros mirados, existan o no. */\n\tficherosMirados: string[];\n\t/** Ficheros o entradas que existían pero no se pudieron leer/interpretar. */\n\terrores: Array<{ ruta: string; motivo: string }>;\n}\n\ninterface FuenteMcp {\n\torigen: string;\n\trelativa: string;\n\tbase: \"proyecto\" | \"usuario\";\n\t/**\n\t * \"plano\": {mcpServers:{...}} en la raíz (Cursor, Claude Code, Gemini CLI,\n\t * .mcp.json). \"vscode\": {servers:{...}} en la raíz — VS Code NO anida bajo\n\t * \"mcp\" en `.vscode/mcp.json`; eso solo pasa en su settings.json de\n\t * usuario, que aquí no se lee. \"claude-proyecto\": servidores que Claude\n\t * Code guarda para ESTE proyecto dentro de `~/.claude.json`, en\n\t * `projects[cwd].mcpServers` — el caso más común en la práctica (MCP\n\t * añadido con `claude mcp add` sin `--scope user`), y el que un `mcpServers`\n\t * de nivel superior nunca ve.\n\t */\n\tformato: \"plano\" | \"vscode\" | \"claude-proyecto\";\n}\n\n/**\n * Dónde mira cada herramienta, tomado de sus propios adaptadores\n * (oh-my-pi: claude.ts, cursor.ts, vscode.ts, gemini.ts, mcp-json.ts).\n *\n * `.claude/mcp.json` NO es un fichero real de Claude Code (fue una feature\n * request rechazada, anthropics/claude-code#5350) — se quitó de aquí porque\n * \"mirado en\" no puede incluir un sitio que la herramienta real nunca escribe.\n */\nconst FUENTES: FuenteMcp[] = [\n\t{ origen: \"MCP (raíz del proyecto)\", relativa: \".mcp.json\", base: \"proyecto\", formato: \"plano\" },\n\t{ origen: \"Cursor\", relativa: \".cursor/mcp.json\", base: \"proyecto\", formato: \"plano\" },\n\t{ origen: \"VS Code\", relativa: \".vscode/mcp.json\", base: \"proyecto\", formato: \"vscode\" },\n\t{ origen: \"Gemini CLI\", relativa: \".gemini/settings.json\", base: \"proyecto\", formato: \"plano\" },\n\t{ origen: \"Claude Code\", relativa: \".claude.json\", base: \"usuario\", formato: \"plano\" },\n\t{ origen: \"Claude Code (proyecto)\", relativa: \".claude.json\", base: \"usuario\", formato: \"claude-proyecto\" },\n\t{ origen: \"Cursor\", relativa: \".cursor/mcp.json\", base: \"usuario\", formato: \"plano\" },\n];\n\nfunction serversDe(json: unknown, formato: FuenteMcp[\"formato\"], cwd: string): Record<string, unknown> | null {\n\tif (!json || typeof json !== \"object\") return null;\n\tif (formato === \"claude-proyecto\") {\n\t\tconst projects = (json as Record<string, unknown>).projects;\n\t\tif (!projects || typeof projects !== \"object\") return null;\n\t\tconst clave = resolve(cwd);\n\t\tconst proyecto = (projects as Record<string, unknown>)[clave] ?? (projects as Record<string, unknown>)[cwd];\n\t\tif (!proyecto || typeof proyecto !== \"object\") return null;\n\t\tconst servers = (proyecto as Record<string, unknown>).mcpServers;\n\t\treturn servers && typeof servers === \"object\" ? (servers as Record<string, unknown>) : null;\n\t}\n\tconst clave = formato === \"vscode\" ? \"servers\" : \"mcpServers\";\n\tconst servers = (json as Record<string, unknown>)[clave];\n\treturn servers && typeof servers === \"object\" ? (servers as Record<string, unknown>) : null;\n}\n\nexport function descubrirServidoresMcp(cwd: string, home: string = homedir()): ResultadoDescubrimientoMcp {\n\tconst servidores: ServidorMcpDescubierto[] = [];\n\tconst ficherosMirados: string[] = [];\n\tconst errores: Array<{ ruta: string; motivo: string }> = [];\n\n\tfor (const fuente of FUENTES) {\n\t\tconst absoluta = join(fuente.base === \"usuario\" ? home : cwd, fuente.relativa);\n\t\t// Un mismo fichero puede aparecer en dos fuentes (p.ej. `.claude.json`\n\t\t// para el scope de usuario y para el de proyecto): se mira una vez, se\n\t\t// anota una vez.\n\t\tif (!ficherosMirados.includes(absoluta)) ficherosMirados.push(absoluta);\n\t\tif (!existsSync(absoluta)) continue;\n\n\t\tlet contenido: string;\n\t\ttry {\n\t\t\tcontenido = readFileSync(absoluta, \"utf-8\");\n\t\t} catch (error) {\n\t\t\terrores.push({ ruta: absoluta, motivo: error instanceof Error ? error.message : \"no se pudo leer\" });\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet json: unknown;\n\t\ttry {\n\t\t\tjson = JSON.parse(contenido);\n\t\t} catch {\n\t\t\terrores.push({ ruta: absoluta, motivo: \"JSON inválido\" });\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst servers = serversDe(json, fuente.formato, cwd);\n\t\t// Fichero válido sin mcpServers: no hay nada que listar, no es un fallo.\n\t\tif (!servers) continue;\n\n\t\tfor (const [nombre, raw] of Object.entries(servers)) {\n\t\t\tif (!raw || typeof raw !== \"object\") {\n\t\t\t\terrores.push({ ruta: absoluta, motivo: `servidor '${nombre}': configuración inválida` });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst config = raw as Record<string, unknown>;\n\t\t\t// Gemini CLI usa `httpUrl` (no `url`) para transporte HTTP — ver\n\t\t\t// docs/tools/mcp-server.md de google-gemini/gemini-cli.\n\t\t\tconst url =\n\t\t\t\ttypeof config.url === \"string\"\n\t\t\t\t\t? config.url\n\t\t\t\t\t: typeof config.httpUrl === \"string\"\n\t\t\t\t\t\t? config.httpUrl\n\t\t\t\t\t\t: undefined;\n\t\t\tconst comando = typeof config.command === \"string\" ? config.command : undefined;\n\n\t\t\tif (!url && !comando) {\n\t\t\t\terrores.push({ ruta: absoluta, motivo: `servidor '${nombre}': sin 'url' ni 'command'` });\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst transporte: \"http\" | \"stdio\" = url ? \"http\" : \"stdio\";\n\t\t\tconst desactivado = config.enabled === false;\n\t\t\tconst soportado = transporte === \"http\" && !desactivado;\n\t\t\tconst motivo = desactivado\n\t\t\t\t? \"desactivado en su propia configuración (enabled: false)\"\n\t\t\t\t: transporte === \"stdio\"\n\t\t\t\t\t? \"servidor stdio: el cliente MCP de Ada solo habla HTTP a propósito (core/mcp/client.ts)\"\n\t\t\t\t\t: undefined;\n\n\t\t\tservidores.push({\n\t\t\t\torigen: fuente.origen,\n\t\t\t\truta: absoluta,\n\t\t\t\t// `claude-proyecto` vive físicamente en el fichero de usuario, pero\n\t\t\t\t// es config de ESTE proyecto — el nivel que importa para quien lee\n\t\t\t\t// la salida es el lógico, no dónde Claude Code decidió guardarlo.\n\t\t\t\tnivel: fuente.formato === \"claude-proyecto\" ? \"proyecto\" : fuente.base,\n\t\t\t\tnombre,\n\t\t\t\ttransporte,\n\t\t\t\turl,\n\t\t\t\tcomando,\n\t\t\t\tsoportado,\n\t\t\t\tmotivo,\n\t\t\t});\n\t\t}\n\t}\n\n\treturn { servidores, ficherosMirados, errores };\n}\n"]}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Las reglas que el proyecto YA tiene escritas, vengan de la herramienta que
|
|
3
|
+
* vengan.
|
|
4
|
+
*
|
|
5
|
+
* Ada leía `AGENTS.md` y `CLAUDE.md`. Un repositorio real suele tener además
|
|
6
|
+
* `.cursor/rules/*.mdc`, `.clinerules`, `GEMINI.md` o
|
|
7
|
+
* `.github/copilot-instructions.md`, escritos con esfuerzo y que dicen cosas
|
|
8
|
+
* como «este proyecto usa pnpm, no npm» o «nunca toques `generated/`».
|
|
9
|
+
* Ignorarlas obliga a reescribirlas para que Ada sea útil, y esa media hora es
|
|
10
|
+
* exactamente donde se abandona una herramienta nueva.
|
|
11
|
+
*
|
|
12
|
+
* oh-my-pi tiene un `discovery/` de 8.773 líneas que lee la configuración de
|
|
13
|
+
* diez competidores: Claude, Cursor, Codex, Cline, Gemini, Windsurf, OpenCode,
|
|
14
|
+
* VS Code, GitHub Copilot y sus plugins. Esto cubre la parte que se nota el
|
|
15
|
+
* primer minuto: las REGLAS.
|
|
16
|
+
*
|
|
17
|
+
* Tres decisiones que no son obvias:
|
|
18
|
+
*
|
|
19
|
+
* - **`AGENTS.md` y `CLAUDE.md` no se tocan.** Los carga `resource-loader` con
|
|
20
|
+
* su propia precedencia y su herencia por directorios. Duplicarlos aquí los
|
|
21
|
+
* inyectaría dos veces.
|
|
22
|
+
* - **Se deduplica por CONTENIDO**, no por ruta. Es muy común tener el mismo
|
|
23
|
+
* texto en `CLAUDE.md` y en `.cursorrules`: quien mantiene los dos los copia.
|
|
24
|
+
* Inyectarlo dos veces gasta contexto y le dice al modelo, sin querer, que
|
|
25
|
+
* esa regla importa el doble.
|
|
26
|
+
* - **Hay tope de tamaño y se dice cuando se corta.** Un `.cursor/rules/`
|
|
27
|
+
* grande puede llevarse el contexto entero, y quedarse sin sitio para el
|
|
28
|
+
* código es peor que perder una regla. Lo que no se hace es cortar en
|
|
29
|
+
* silencio.
|
|
30
|
+
*/
|
|
31
|
+
export interface ReglaDescubierta {
|
|
32
|
+
/** De qué herramienta viene. Va en la etiqueta para que el modelo lo sepa. */
|
|
33
|
+
origen: string;
|
|
34
|
+
/** Ruta relativa al proyecto. */
|
|
35
|
+
ruta: string;
|
|
36
|
+
contenido: string;
|
|
37
|
+
}
|
|
38
|
+
export interface ResultadoDescubrimiento {
|
|
39
|
+
reglas: ReglaDescubierta[];
|
|
40
|
+
/** Rutas que existían y se dejaron fuera, con el motivo. Nunca se callan. */
|
|
41
|
+
omitidas: Array<{
|
|
42
|
+
ruta: string;
|
|
43
|
+
motivo: string;
|
|
44
|
+
}>;
|
|
45
|
+
}
|
|
46
|
+
export declare function descubrirReglas(cwd: string, opciones?: {
|
|
47
|
+
topeTotal?: number;
|
|
48
|
+
}): ResultadoDescubrimiento;
|
|
49
|
+
/**
|
|
50
|
+
* Las reglas en la forma que consume el prompt de sistema.
|
|
51
|
+
*
|
|
52
|
+
* La etiqueta lleva la herramienta de origen porque el modelo tiene que poder
|
|
53
|
+
* decidir cuánto pesa: una regla de `.cursor/rules` es contexto del proyecto,
|
|
54
|
+
* igual que `AGENTS.md`, pero saber de dónde sale ayuda cuando dos se
|
|
55
|
+
* contradicen — que pasa, porque cada equipo actualiza una y olvida la otra.
|
|
56
|
+
*/
|
|
57
|
+
export declare function comoFicherosDeContexto(cwd: string): Array<{
|
|
58
|
+
path: string;
|
|
59
|
+
content: string;
|
|
60
|
+
}>;
|
|
61
|
+
//# sourceMappingURL=reglas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reglas.d.ts","sourceRoot":"","sources":["../../../src/core/descubrimiento/reglas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAMH,MAAM,WAAW,gBAAgB;IAChC,+EAA8E;IAC9E,MAAM,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CAClB;AAuDD,MAAM,WAAW,uBAAuB;IACvC,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,8EAA6E;IAC7E,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,uBAAuB,CA4CvG;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAG5F","sourcesContent":["/**\n * Las reglas que el proyecto YA tiene escritas, vengan de la herramienta que\n * vengan.\n *\n * Ada leía `AGENTS.md` y `CLAUDE.md`. Un repositorio real suele tener además\n * `.cursor/rules/*.mdc`, `.clinerules`, `GEMINI.md` o\n * `.github/copilot-instructions.md`, escritos con esfuerzo y que dicen cosas\n * como «este proyecto usa pnpm, no npm» o «nunca toques `generated/`».\n * Ignorarlas obliga a reescribirlas para que Ada sea útil, y esa media hora es\n * exactamente donde se abandona una herramienta nueva.\n *\n * oh-my-pi tiene un `discovery/` de 8.773 líneas que lee la configuración de\n * diez competidores: Claude, Cursor, Codex, Cline, Gemini, Windsurf, OpenCode,\n * VS Code, GitHub Copilot y sus plugins. Esto cubre la parte que se nota el\n * primer minuto: las REGLAS.\n *\n * Tres decisiones que no son obvias:\n *\n * - **`AGENTS.md` y `CLAUDE.md` no se tocan.** Los carga `resource-loader` con\n * su propia precedencia y su herencia por directorios. Duplicarlos aquí los\n * inyectaría dos veces.\n * - **Se deduplica por CONTENIDO**, no por ruta. Es muy común tener el mismo\n * texto en `CLAUDE.md` y en `.cursorrules`: quien mantiene los dos los copia.\n * Inyectarlo dos veces gasta contexto y le dice al modelo, sin querer, que\n * esa regla importa el doble.\n * - **Hay tope de tamaño y se dice cuando se corta.** Un `.cursor/rules/`\n * grande puede llevarse el contexto entero, y quedarse sin sitio para el\n * código es peor que perder una regla. Lo que no se hace es cortar en\n * silencio.\n */\n\nimport { createHash } from \"node:crypto\";\nimport { existsSync, readdirSync, readFileSync, statSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nexport interface ReglaDescubierta {\n\t/** De qué herramienta viene. Va en la etiqueta para que el modelo lo sepa. */\n\torigen: string;\n\t/** Ruta relativa al proyecto. */\n\truta: string;\n\tcontenido: string;\n}\n\n/** Presupuesto por defecto: suficiente para reglas, no para un manual. */\nconst TOPE_TOTAL = 64 * 1024;\nconst TOPE_FICHERO = 32 * 1024;\n\ninterface Fuente {\n\torigen: string;\n\t/** Fichero suelto. */\n\tfichero?: string;\n\t/** Directorio del que se leen todos los ficheros con estas extensiones. */\n\tdirectorio?: string;\n\textensiones?: string[];\n}\n\n/**\n * Dónde mira cada herramienta, tomado de sus propios adaptadores.\n *\n * No se incluyen `AGENTS.md` ni `CLAUDE.md`: de esos ya se encarga\n * `resource-loader`, con herencia por directorios.\n */\nconst FUENTES: Fuente[] = [\n\t{ origen: \"Gemini\", fichero: \"GEMINI.md\" },\n\t{ origen: \"Cursor\", fichero: \".cursorrules\" },\n\t{ origen: \"Cursor\", directorio: \".cursor/rules\", extensiones: [\".mdc\", \".md\"] },\n\t{ origen: \"Cline\", fichero: \".clinerules\" },\n\t{ origen: \"Cline\", directorio: \".clinerules\", extensiones: [\".md\"] },\n\t{ origen: \"Windsurf\", fichero: \".windsurfrules\" },\n\t{ origen: \"Windsurf\", directorio: \".windsurf/rules\", extensiones: [\".md\"] },\n\t{ origen: \"GitHub Copilot\", fichero: \".github/copilot-instructions.md\" },\n\t{ origen: \"GitHub Copilot\", directorio: \".github/instructions\", extensiones: [\".md\"] },\n];\n\nfunction leer(ruta: string): string | null {\n\ttry {\n\t\tif (!statSync(ruta).isFile()) return null;\n\t\tconst texto = readFileSync(ruta, \"utf-8\");\n\t\treturn texto.trim() === \"\" ? null : texto;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n/** Los ficheros de un directorio de reglas, en orden estable. */\nfunction ficherosDe(dir: string, extensiones: string[]): string[] {\n\ttry {\n\t\tif (!statSync(dir).isDirectory()) return [];\n\t\treturn readdirSync(dir)\n\t\t\t.filter((n) => extensiones.some((e) => n.endsWith(e)))\n\t\t\t.sort();\n\t} catch {\n\t\treturn [];\n\t}\n}\n\nexport interface ResultadoDescubrimiento {\n\treglas: ReglaDescubierta[];\n\t/** Rutas que existían y se dejaron fuera, con el motivo. Nunca se callan. */\n\tomitidas: Array<{ ruta: string; motivo: string }>;\n}\n\nexport function descubrirReglas(cwd: string, opciones?: { topeTotal?: number }): ResultadoDescubrimiento {\n\tconst topeTotal = opciones?.topeTotal ?? TOPE_TOTAL;\n\tconst reglas: ReglaDescubierta[] = [];\n\tconst omitidas: Array<{ ruta: string; motivo: string }> = [];\n\tconst huellas = new Set<string>();\n\tlet gastado = 0;\n\n\tfor (const fuente of FUENTES) {\n\t\tconst rutas: string[] = [];\n\t\tif (fuente.fichero) rutas.push(fuente.fichero);\n\t\tif (fuente.directorio) {\n\t\t\tfor (const n of ficherosDe(join(cwd, fuente.directorio), fuente.extensiones ?? [\".md\"])) {\n\t\t\t\trutas.push(join(fuente.directorio, n));\n\t\t\t}\n\t\t}\n\n\t\tfor (const relativa of rutas) {\n\t\t\tconst absoluta = join(cwd, relativa);\n\t\t\tif (!existsSync(absoluta)) continue;\n\t\t\tconst contenido = leer(absoluta);\n\t\t\tif (contenido === null) continue;\n\n\t\t\tif (contenido.length > TOPE_FICHERO) {\n\t\t\t\tomitidas.push({ ruta: relativa, motivo: `pasa de ${Math.round(TOPE_FICHERO / 1024)} KB` });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t// Por contenido, no por ruta: el mismo texto en CLAUDE.md y en\n\t\t\t// .cursorrules es lo normal cuando alguien mantiene las dos.\n\t\t\tconst huella = createHash(\"sha256\").update(contenido.trim()).digest(\"hex\");\n\t\t\tif (huellas.has(huella)) {\n\t\t\t\tomitidas.push({ ruta: relativa, motivo: \"mismo contenido que otra regla ya cargada\" });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (gastado + contenido.length > topeTotal) {\n\t\t\t\tomitidas.push({ ruta: relativa, motivo: \"no cabe en el presupuesto de contexto para reglas\" });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\thuellas.add(huella);\n\t\t\tgastado += contenido.length;\n\t\t\treglas.push({ origen: fuente.origen, ruta: relativa, contenido });\n\t\t}\n\t}\n\n\treturn { reglas, omitidas };\n}\n\n/**\n * Las reglas en la forma que consume el prompt de sistema.\n *\n * La etiqueta lleva la herramienta de origen porque el modelo tiene que poder\n * decidir cuánto pesa: una regla de `.cursor/rules` es contexto del proyecto,\n * igual que `AGENTS.md`, pero saber de dónde sale ayuda cuando dos se\n * contradicen — que pasa, porque cada equipo actualiza una y olvida la otra.\n */\nexport function comoFicherosDeContexto(cwd: string): Array<{ path: string; content: string }> {\n\tconst { reglas } = descubrirReglas(cwd);\n\treturn reglas.map((r) => ({ path: `${r.ruta} (regla de ${r.origen})`, content: r.contenido }));\n}\n"]}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Las reglas que el proyecto YA tiene escritas, vengan de la herramienta que
|
|
3
|
+
* vengan.
|
|
4
|
+
*
|
|
5
|
+
* Ada leía `AGENTS.md` y `CLAUDE.md`. Un repositorio real suele tener además
|
|
6
|
+
* `.cursor/rules/*.mdc`, `.clinerules`, `GEMINI.md` o
|
|
7
|
+
* `.github/copilot-instructions.md`, escritos con esfuerzo y que dicen cosas
|
|
8
|
+
* como «este proyecto usa pnpm, no npm» o «nunca toques `generated/`».
|
|
9
|
+
* Ignorarlas obliga a reescribirlas para que Ada sea útil, y esa media hora es
|
|
10
|
+
* exactamente donde se abandona una herramienta nueva.
|
|
11
|
+
*
|
|
12
|
+
* oh-my-pi tiene un `discovery/` de 8.773 líneas que lee la configuración de
|
|
13
|
+
* diez competidores: Claude, Cursor, Codex, Cline, Gemini, Windsurf, OpenCode,
|
|
14
|
+
* VS Code, GitHub Copilot y sus plugins. Esto cubre la parte que se nota el
|
|
15
|
+
* primer minuto: las REGLAS.
|
|
16
|
+
*
|
|
17
|
+
* Tres decisiones que no son obvias:
|
|
18
|
+
*
|
|
19
|
+
* - **`AGENTS.md` y `CLAUDE.md` no se tocan.** Los carga `resource-loader` con
|
|
20
|
+
* su propia precedencia y su herencia por directorios. Duplicarlos aquí los
|
|
21
|
+
* inyectaría dos veces.
|
|
22
|
+
* - **Se deduplica por CONTENIDO**, no por ruta. Es muy común tener el mismo
|
|
23
|
+
* texto en `CLAUDE.md` y en `.cursorrules`: quien mantiene los dos los copia.
|
|
24
|
+
* Inyectarlo dos veces gasta contexto y le dice al modelo, sin querer, que
|
|
25
|
+
* esa regla importa el doble.
|
|
26
|
+
* - **Hay tope de tamaño y se dice cuando se corta.** Un `.cursor/rules/`
|
|
27
|
+
* grande puede llevarse el contexto entero, y quedarse sin sitio para el
|
|
28
|
+
* código es peor que perder una regla. Lo que no se hace es cortar en
|
|
29
|
+
* silencio.
|
|
30
|
+
*/
|
|
31
|
+
import { createHash } from "node:crypto";
|
|
32
|
+
import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
|
|
33
|
+
import { join } from "node:path";
|
|
34
|
+
/** Presupuesto por defecto: suficiente para reglas, no para un manual. */
|
|
35
|
+
const TOPE_TOTAL = 64 * 1024;
|
|
36
|
+
const TOPE_FICHERO = 32 * 1024;
|
|
37
|
+
/**
|
|
38
|
+
* Dónde mira cada herramienta, tomado de sus propios adaptadores.
|
|
39
|
+
*
|
|
40
|
+
* No se incluyen `AGENTS.md` ni `CLAUDE.md`: de esos ya se encarga
|
|
41
|
+
* `resource-loader`, con herencia por directorios.
|
|
42
|
+
*/
|
|
43
|
+
const FUENTES = [
|
|
44
|
+
{ origen: "Gemini", fichero: "GEMINI.md" },
|
|
45
|
+
{ origen: "Cursor", fichero: ".cursorrules" },
|
|
46
|
+
{ origen: "Cursor", directorio: ".cursor/rules", extensiones: [".mdc", ".md"] },
|
|
47
|
+
{ origen: "Cline", fichero: ".clinerules" },
|
|
48
|
+
{ origen: "Cline", directorio: ".clinerules", extensiones: [".md"] },
|
|
49
|
+
{ origen: "Windsurf", fichero: ".windsurfrules" },
|
|
50
|
+
{ origen: "Windsurf", directorio: ".windsurf/rules", extensiones: [".md"] },
|
|
51
|
+
{ origen: "GitHub Copilot", fichero: ".github/copilot-instructions.md" },
|
|
52
|
+
{ origen: "GitHub Copilot", directorio: ".github/instructions", extensiones: [".md"] },
|
|
53
|
+
];
|
|
54
|
+
function leer(ruta) {
|
|
55
|
+
try {
|
|
56
|
+
if (!statSync(ruta).isFile())
|
|
57
|
+
return null;
|
|
58
|
+
const texto = readFileSync(ruta, "utf-8");
|
|
59
|
+
return texto.trim() === "" ? null : texto;
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/** Los ficheros de un directorio de reglas, en orden estable. */
|
|
66
|
+
function ficherosDe(dir, extensiones) {
|
|
67
|
+
try {
|
|
68
|
+
if (!statSync(dir).isDirectory())
|
|
69
|
+
return [];
|
|
70
|
+
return readdirSync(dir)
|
|
71
|
+
.filter((n) => extensiones.some((e) => n.endsWith(e)))
|
|
72
|
+
.sort();
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
return [];
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
export function descubrirReglas(cwd, opciones) {
|
|
79
|
+
const topeTotal = opciones?.topeTotal ?? TOPE_TOTAL;
|
|
80
|
+
const reglas = [];
|
|
81
|
+
const omitidas = [];
|
|
82
|
+
const huellas = new Set();
|
|
83
|
+
let gastado = 0;
|
|
84
|
+
for (const fuente of FUENTES) {
|
|
85
|
+
const rutas = [];
|
|
86
|
+
if (fuente.fichero)
|
|
87
|
+
rutas.push(fuente.fichero);
|
|
88
|
+
if (fuente.directorio) {
|
|
89
|
+
for (const n of ficherosDe(join(cwd, fuente.directorio), fuente.extensiones ?? [".md"])) {
|
|
90
|
+
rutas.push(join(fuente.directorio, n));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
for (const relativa of rutas) {
|
|
94
|
+
const absoluta = join(cwd, relativa);
|
|
95
|
+
if (!existsSync(absoluta))
|
|
96
|
+
continue;
|
|
97
|
+
const contenido = leer(absoluta);
|
|
98
|
+
if (contenido === null)
|
|
99
|
+
continue;
|
|
100
|
+
if (contenido.length > TOPE_FICHERO) {
|
|
101
|
+
omitidas.push({ ruta: relativa, motivo: `pasa de ${Math.round(TOPE_FICHERO / 1024)} KB` });
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
// Por contenido, no por ruta: el mismo texto en CLAUDE.md y en
|
|
105
|
+
// .cursorrules es lo normal cuando alguien mantiene las dos.
|
|
106
|
+
const huella = createHash("sha256").update(contenido.trim()).digest("hex");
|
|
107
|
+
if (huellas.has(huella)) {
|
|
108
|
+
omitidas.push({ ruta: relativa, motivo: "mismo contenido que otra regla ya cargada" });
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
if (gastado + contenido.length > topeTotal) {
|
|
112
|
+
omitidas.push({ ruta: relativa, motivo: "no cabe en el presupuesto de contexto para reglas" });
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
huellas.add(huella);
|
|
116
|
+
gastado += contenido.length;
|
|
117
|
+
reglas.push({ origen: fuente.origen, ruta: relativa, contenido });
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return { reglas, omitidas };
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Las reglas en la forma que consume el prompt de sistema.
|
|
124
|
+
*
|
|
125
|
+
* La etiqueta lleva la herramienta de origen porque el modelo tiene que poder
|
|
126
|
+
* decidir cuánto pesa: una regla de `.cursor/rules` es contexto del proyecto,
|
|
127
|
+
* igual que `AGENTS.md`, pero saber de dónde sale ayuda cuando dos se
|
|
128
|
+
* contradicen — que pasa, porque cada equipo actualiza una y olvida la otra.
|
|
129
|
+
*/
|
|
130
|
+
export function comoFicherosDeContexto(cwd) {
|
|
131
|
+
const { reglas } = descubrirReglas(cwd);
|
|
132
|
+
return reglas.map((r) => ({ path: `${r.ruta} (regla de ${r.origen})`, content: r.contenido }));
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=reglas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reglas.js","sourceRoot":"","sources":["../../../src/core/descubrimiento/reglas.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Las reglas que el proyecto YA tiene escritas, vengan de la herramienta que\n * vengan.\n *\n * Ada leía `AGENTS.md` y `CLAUDE.md`. Un repositorio real suele tener además\n * `.cursor/rules/*.mdc`, `.clinerules`, `GEMINI.md` o\n * `.github/copilot-instructions.md`, escritos con esfuerzo y que dicen cosas\n * como «este proyecto usa pnpm, no npm» o «nunca toques `generated/`».\n * Ignorarlas obliga a reescribirlas para que Ada sea útil, y esa media hora es\n * exactamente donde se abandona una herramienta nueva.\n *\n * oh-my-pi tiene un `discovery/` de 8.773 líneas que lee la configuración de\n * diez competidores: Claude, Cursor, Codex, Cline, Gemini, Windsurf, OpenCode,\n * VS Code, GitHub Copilot y sus plugins. Esto cubre la parte que se nota el\n * primer minuto: las REGLAS.\n *\n * Tres decisiones que no son obvias:\n *\n * - **`AGENTS.md` y `CLAUDE.md` no se tocan.** Los carga `resource-loader` con\n * su propia precedencia y su herencia por directorios. Duplicarlos aquí los\n * inyectaría dos veces.\n * - **Se deduplica por CONTENIDO**, no por ruta. Es muy común tener el mismo\n * texto en `CLAUDE.md` y en `.cursorrules`: quien mantiene los dos los copia.\n * Inyectarlo dos veces gasta contexto y le dice al modelo, sin querer, que\n * esa regla importa el doble.\n * - **Hay tope de tamaño y se dice cuando se corta.** Un `.cursor/rules/`\n * grande puede llevarse el contexto entero, y quedarse sin sitio para el\n * código es peor que perder una regla. Lo que no se hace es cortar en\n * silencio.\n */\n\nimport { createHash } from \"node:crypto\";\nimport { existsSync, readdirSync, readFileSync, statSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nexport interface ReglaDescubierta {\n\t/** De qué herramienta viene. Va en la etiqueta para que el modelo lo sepa. */\n\torigen: string;\n\t/** Ruta relativa al proyecto. */\n\truta: string;\n\tcontenido: string;\n}\n\n/** Presupuesto por defecto: suficiente para reglas, no para un manual. */\nconst TOPE_TOTAL = 64 * 1024;\nconst TOPE_FICHERO = 32 * 1024;\n\ninterface Fuente {\n\torigen: string;\n\t/** Fichero suelto. */\n\tfichero?: string;\n\t/** Directorio del que se leen todos los ficheros con estas extensiones. */\n\tdirectorio?: string;\n\textensiones?: string[];\n}\n\n/**\n * Dónde mira cada herramienta, tomado de sus propios adaptadores.\n *\n * No se incluyen `AGENTS.md` ni `CLAUDE.md`: de esos ya se encarga\n * `resource-loader`, con herencia por directorios.\n */\nconst FUENTES: Fuente[] = [\n\t{ origen: \"Gemini\", fichero: \"GEMINI.md\" },\n\t{ origen: \"Cursor\", fichero: \".cursorrules\" },\n\t{ origen: \"Cursor\", directorio: \".cursor/rules\", extensiones: [\".mdc\", \".md\"] },\n\t{ origen: \"Cline\", fichero: \".clinerules\" },\n\t{ origen: \"Cline\", directorio: \".clinerules\", extensiones: [\".md\"] },\n\t{ origen: \"Windsurf\", fichero: \".windsurfrules\" },\n\t{ origen: \"Windsurf\", directorio: \".windsurf/rules\", extensiones: [\".md\"] },\n\t{ origen: \"GitHub Copilot\", fichero: \".github/copilot-instructions.md\" },\n\t{ origen: \"GitHub Copilot\", directorio: \".github/instructions\", extensiones: [\".md\"] },\n];\n\nfunction leer(ruta: string): string | null {\n\ttry {\n\t\tif (!statSync(ruta).isFile()) return null;\n\t\tconst texto = readFileSync(ruta, \"utf-8\");\n\t\treturn texto.trim() === \"\" ? null : texto;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n/** Los ficheros de un directorio de reglas, en orden estable. */\nfunction ficherosDe(dir: string, extensiones: string[]): string[] {\n\ttry {\n\t\tif (!statSync(dir).isDirectory()) return [];\n\t\treturn readdirSync(dir)\n\t\t\t.filter((n) => extensiones.some((e) => n.endsWith(e)))\n\t\t\t.sort();\n\t} catch {\n\t\treturn [];\n\t}\n}\n\nexport interface ResultadoDescubrimiento {\n\treglas: ReglaDescubierta[];\n\t/** Rutas que existían y se dejaron fuera, con el motivo. Nunca se callan. */\n\tomitidas: Array<{ ruta: string; motivo: string }>;\n}\n\nexport function descubrirReglas(cwd: string, opciones?: { topeTotal?: number }): ResultadoDescubrimiento {\n\tconst topeTotal = opciones?.topeTotal ?? TOPE_TOTAL;\n\tconst reglas: ReglaDescubierta[] = [];\n\tconst omitidas: Array<{ ruta: string; motivo: string }> = [];\n\tconst huellas = new Set<string>();\n\tlet gastado = 0;\n\n\tfor (const fuente of FUENTES) {\n\t\tconst rutas: string[] = [];\n\t\tif (fuente.fichero) rutas.push(fuente.fichero);\n\t\tif (fuente.directorio) {\n\t\t\tfor (const n of ficherosDe(join(cwd, fuente.directorio), fuente.extensiones ?? [\".md\"])) {\n\t\t\t\trutas.push(join(fuente.directorio, n));\n\t\t\t}\n\t\t}\n\n\t\tfor (const relativa of rutas) {\n\t\t\tconst absoluta = join(cwd, relativa);\n\t\t\tif (!existsSync(absoluta)) continue;\n\t\t\tconst contenido = leer(absoluta);\n\t\t\tif (contenido === null) continue;\n\n\t\t\tif (contenido.length > TOPE_FICHERO) {\n\t\t\t\tomitidas.push({ ruta: relativa, motivo: `pasa de ${Math.round(TOPE_FICHERO / 1024)} KB` });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t// Por contenido, no por ruta: el mismo texto en CLAUDE.md y en\n\t\t\t// .cursorrules es lo normal cuando alguien mantiene las dos.\n\t\t\tconst huella = createHash(\"sha256\").update(contenido.trim()).digest(\"hex\");\n\t\t\tif (huellas.has(huella)) {\n\t\t\t\tomitidas.push({ ruta: relativa, motivo: \"mismo contenido que otra regla ya cargada\" });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (gastado + contenido.length > topeTotal) {\n\t\t\t\tomitidas.push({ ruta: relativa, motivo: \"no cabe en el presupuesto de contexto para reglas\" });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\thuellas.add(huella);\n\t\t\tgastado += contenido.length;\n\t\t\treglas.push({ origen: fuente.origen, ruta: relativa, contenido });\n\t\t}\n\t}\n\n\treturn { reglas, omitidas };\n}\n\n/**\n * Las reglas en la forma que consume el prompt de sistema.\n *\n * La etiqueta lleva la herramienta de origen porque el modelo tiene que poder\n * decidir cuánto pesa: una regla de `.cursor/rules` es contexto del proyecto,\n * igual que `AGENTS.md`, pero saber de dónde sale ayuda cuando dos se\n * contradicen — que pasa, porque cada equipo actualiza una y olvida la otra.\n */\nexport function comoFicherosDeContexto(cwd: string): Array<{ path: string; content: string }> {\n\tconst { reglas } = descubrirReglas(cwd);\n\treturn reglas.map((r) => ({ path: `${r.ruta} (regla de ${r.origen})`, content: r.contenido }));\n}\n"]}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skills que otras herramientas dejaron en el proyecto: `.claude/skills/<nombre>/SKILL.md`
|
|
3
|
+
* y `.github/skills/`.
|
|
4
|
+
*
|
|
5
|
+
* No se reimplementa el parseo de SKILL.md: `../skills.ts` ya sabe leer
|
|
6
|
+
* frontmatter, validar nombre/descripción y bajar por subdirectorios — es
|
|
7
|
+
* exactamente el mismo formato (Agent Skills).
|
|
8
|
+
*
|
|
9
|
+
* `instalarSkillsDescubiertas` es la parte que las hace disponibles DE
|
|
10
|
+
* VERDAD, no solo listadas: enlaza cada una dentro de `.ada/skills`, la
|
|
11
|
+
* carpeta de proyecto que `core/skills.ts` YA recorre sin que se le haya
|
|
12
|
+
* tocado ni una línea. Es la alternativa a pasar `additionalSkillPaths` por
|
|
13
|
+
* `agent-session-services.ts` — que también habría funcionado, pero ese
|
|
14
|
+
* fichero es de upstream y el presupuesto de sincronización ya estaba en
|
|
15
|
+
* 115/115 antes de este cambio (`./scripts/sync-ada.sh --check`). Un symlink
|
|
16
|
+
* en un directorio que Ada ya escanea consigue lo mismo por CERO hunks.
|
|
17
|
+
*/
|
|
18
|
+
export interface SkillDescubierta {
|
|
19
|
+
/** De qué herramienta viene. */
|
|
20
|
+
origen: string;
|
|
21
|
+
/** Ruta al SKILL.md (o al .md suelto). */
|
|
22
|
+
ruta: string;
|
|
23
|
+
/** Carpeta que contiene el SKILL.md. */
|
|
24
|
+
baseDir: string;
|
|
25
|
+
nombre: string;
|
|
26
|
+
descripcion: string;
|
|
27
|
+
}
|
|
28
|
+
export interface ResultadoDescubrimientoSkills {
|
|
29
|
+
skills: SkillDescubierta[];
|
|
30
|
+
/** Directorios mirados, existan o no. */
|
|
31
|
+
directoriosMirados: string[];
|
|
32
|
+
/** SKILL.md que existían pero no pasaron el parseo/validación. */
|
|
33
|
+
errores: Array<{
|
|
34
|
+
ruta: string;
|
|
35
|
+
motivo: string;
|
|
36
|
+
}>;
|
|
37
|
+
}
|
|
38
|
+
export declare function descubrirSkills(cwd: string): ResultadoDescubrimientoSkills;
|
|
39
|
+
export interface SkillInstalada {
|
|
40
|
+
nombre: string;
|
|
41
|
+
origen: string;
|
|
42
|
+
/** El symlink creado (o ya existente) dentro de `.ada/skills`. */
|
|
43
|
+
enlace: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Enlaza cada skill descubierta dentro de `.ada/skills` para que la próxima
|
|
47
|
+
* sesión (interactiva, `serve`, `acp`...) la cargue de verdad, sin que nadie
|
|
48
|
+
* tenga que pasar `--skill` a mano.
|
|
49
|
+
*
|
|
50
|
+
* ponytail: no limpia symlinks de skills que dejaron de existir en origen.
|
|
51
|
+
* Un symlink roto no rompe nada — `core/skills.ts` ya lo salta en silencio —
|
|
52
|
+
* pero se queda ahí. Si el descuido empieza a notarse, un `discover --prune`
|
|
53
|
+
* que borre los symlinks propios (prefijo `descubierta-`) que ya no resuelven
|
|
54
|
+
* es la subida natural.
|
|
55
|
+
*/
|
|
56
|
+
export declare function instalarSkillsDescubiertas(cwd: string): SkillInstalada[];
|
|
57
|
+
//# sourceMappingURL=skills.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../../src/core/descubrimiento/skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAOH,MAAM,WAAW,gBAAgB;IAChC,iCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,6BAA6B;IAC7C,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,yCAAyC;IACzC,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,oEAAkE;IAClE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjD;AAYD,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,6BAA6B,CA4B1E;AAED,MAAM,WAAW,cAAc;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,MAAM,EAAE,MAAM,CAAC;CACf;AAiCD;;;;;;;;;;GAUG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,EAAE,CAiBxE","sourcesContent":["/**\n * Skills que otras herramientas dejaron en el proyecto: `.claude/skills/<nombre>/SKILL.md`\n * y `.github/skills/`.\n *\n * No se reimplementa el parseo de SKILL.md: `../skills.ts` ya sabe leer\n * frontmatter, validar nombre/descripción y bajar por subdirectorios — es\n * exactamente el mismo formato (Agent Skills).\n *\n * `instalarSkillsDescubiertas` es la parte que las hace disponibles DE\n * VERDAD, no solo listadas: enlaza cada una dentro de `.ada/skills`, la\n * carpeta de proyecto que `core/skills.ts` YA recorre sin que se le haya\n * tocado ni una línea. Es la alternativa a pasar `additionalSkillPaths` por\n * `agent-session-services.ts` — que también habría funcionado, pero ese\n * fichero es de upstream y el presupuesto de sincronización ya estaba en\n * 115/115 antes de este cambio (`./scripts/sync-ada.sh --check`). Un symlink\n * en un directorio que Ada ya escanea consigue lo mismo por CERO hunks.\n */\n\nimport { lstatSync, mkdirSync, readlinkSync, symlinkSync, unlinkSync } from \"node:fs\";\nimport { basename, dirname, join, resolve } from \"node:path\";\nimport { CONFIG_DIR_NAME } from \"../../config.ts\";\nimport { loadSkillsFromDir } from \"../skills.ts\";\n\nexport interface SkillDescubierta {\n\t/** De qué herramienta viene. */\n\torigen: string;\n\t/** Ruta al SKILL.md (o al .md suelto). */\n\truta: string;\n\t/** Carpeta que contiene el SKILL.md. */\n\tbaseDir: string;\n\tnombre: string;\n\tdescripcion: string;\n}\n\nexport interface ResultadoDescubrimientoSkills {\n\tskills: SkillDescubierta[];\n\t/** Directorios mirados, existan o no. */\n\tdirectoriosMirados: string[];\n\t/** SKILL.md que existían pero no pasaron el parseo/validación. */\n\terrores: Array<{ ruta: string; motivo: string }>;\n}\n\ninterface FuenteSkills {\n\torigen: string;\n\trelativa: string;\n}\n\nconst FUENTES: FuenteSkills[] = [\n\t{ origen: \"Claude Code\", relativa: \".claude/skills\" },\n\t{ origen: \"GitHub Copilot\", relativa: \".github/skills\" },\n];\n\nexport function descubrirSkills(cwd: string): ResultadoDescubrimientoSkills {\n\tconst skills: SkillDescubierta[] = [];\n\tconst directoriosMirados: string[] = [];\n\tconst errores: Array<{ ruta: string; motivo: string }> = [];\n\n\tfor (const fuente of FUENTES) {\n\t\tdirectoriosMirados.push(fuente.relativa);\n\t\tconst dir = join(cwd, fuente.relativa);\n\t\t// Directorio ausente: \"no hay\", `loadSkillsFromDir` devuelve vacío sin\n\t\t// diagnóstico. Un SKILL.md que existe pero no pasa el parseo SÍ genera uno:\n\t\t// esa es la diferencia entre \"no hay\" y \"no he podido\" que pide la regla 6.\n\t\tconst { skills: encontradas, diagnostics } = loadSkillsFromDir({ dir, source: `descubierta:${fuente.origen}` });\n\n\t\tfor (const skill of encontradas) {\n\t\t\tskills.push({\n\t\t\t\torigen: fuente.origen,\n\t\t\t\truta: skill.filePath,\n\t\t\t\tbaseDir: skill.baseDir,\n\t\t\t\tnombre: skill.name,\n\t\t\t\tdescripcion: skill.description,\n\t\t\t});\n\t\t}\n\t\tfor (const diagnostic of diagnostics) {\n\t\t\terrores.push({ ruta: diagnostic.path ?? dir, motivo: diagnostic.message });\n\t\t}\n\t}\n\n\treturn { skills, directoriosMirados, errores };\n}\n\nexport interface SkillInstalada {\n\tnombre: string;\n\torigen: string;\n\t/** El symlink creado (o ya existente) dentro de `.ada/skills`. */\n\tenlace: string;\n}\n\nfunction slugificar(texto: string): string {\n\treturn texto\n\t\t.toLowerCase()\n\t\t.replace(/[^a-z0-9]+/g, \"-\")\n\t\t.replace(/(^-+|-+$)/g, \"\");\n}\n\n/**\n * Deja `enlace` como symlink a `destino`. Devuelve false sin tocar nada si\n * `enlace` ya existe y NO es un symlink nuestro — nunca se borra un fichero\n * real que el usuario pueda tener ahí con el mismo nombre.\n */\nfunction asegurarEnlace(destino: string, enlace: string): boolean {\n\ttry {\n\t\tconst info = lstatSync(enlace);\n\t\tif (!info.isSymbolicLink()) return false;\n\t\tif (resolve(dirname(enlace), readlinkSync(enlace)) === destino) return true; // ya estaba\n\t\tunlinkSync(enlace);\n\t} catch {\n\t\t// no existe todavía: se crea abajo\n\t}\n\ttry {\n\t\tsymlinkSync(destino, enlace, \"dir\");\n\t\treturn true;\n\t} catch {\n\t\t// sistema de ficheros sin symlinks (o sin permiso): se queda sin instalar,\n\t\t// pero sigue apareciendo en `descubrirSkills` — listada, no disponible.\n\t\treturn false;\n\t}\n}\n\n/**\n * Enlaza cada skill descubierta dentro de `.ada/skills` para que la próxima\n * sesión (interactiva, `serve`, `acp`...) la cargue de verdad, sin que nadie\n * tenga que pasar `--skill` a mano.\n *\n * ponytail: no limpia symlinks de skills que dejaron de existir en origen.\n * Un symlink roto no rompe nada — `core/skills.ts` ya lo salta en silencio —\n * pero se queda ahí. Si el descuido empieza a notarse, un `discover --prune`\n * que borre los symlinks propios (prefijo `descubierta-`) que ya no resuelven\n * es la subida natural.\n */\nexport function instalarSkillsDescubiertas(cwd: string): SkillInstalada[] {\n\tconst { skills } = descubrirSkills(cwd);\n\tif (skills.length === 0) return [];\n\n\tconst destinoBase = join(cwd, CONFIG_DIR_NAME, \"skills\");\n\tmkdirSync(destinoBase, { recursive: true });\n\n\tconst instaladas: SkillInstalada[] = [];\n\tfor (const skill of skills) {\n\t\tconst slug = `descubierta-${slugificar(skill.origen)}-${basename(skill.baseDir)}`;\n\t\tconst enlace = join(destinoBase, slug);\n\t\tconst destino = resolve(skill.baseDir);\n\t\tif (asegurarEnlace(destino, enlace)) {\n\t\t\tinstaladas.push({ nombre: skill.nombre, origen: skill.origen, enlace });\n\t\t}\n\t}\n\treturn instaladas;\n}\n"]}
|