@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,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cliente MCP nativo en TypeScript.
|
|
3
|
+
*
|
|
4
|
+
* El competidor no tiene esto: su host solo hace OAuth y el protocolo lo habla
|
|
5
|
+
* su kernel Python. Nosotros rechazamos el kernel, así que hablamos MCP
|
|
6
|
+
* directamente — lo que además elimina su dependencia de un venv de ~500MB.
|
|
7
|
+
*
|
|
8
|
+
* Implementa el transporte Streamable HTTP (JSON-RPC 2.0 sobre POST), que es el
|
|
9
|
+
* que usan los servidores MCP alojados. Los servidores stdio quedan fuera a
|
|
10
|
+
* propósito: lanzar procesos arbitrarios desde una config es una superficie de
|
|
11
|
+
* ejecución que no queremos abrir por defecto.
|
|
12
|
+
*/
|
|
13
|
+
export interface McpTool {
|
|
14
|
+
name: string;
|
|
15
|
+
description?: string;
|
|
16
|
+
inputSchema?: Record<string, unknown>;
|
|
17
|
+
}
|
|
18
|
+
export interface McpCallResult {
|
|
19
|
+
content: Array<{
|
|
20
|
+
type: string;
|
|
21
|
+
text?: string;
|
|
22
|
+
[key: string]: unknown;
|
|
23
|
+
}>;
|
|
24
|
+
isError: boolean;
|
|
25
|
+
}
|
|
26
|
+
export interface McpClientOptions {
|
|
27
|
+
url: string;
|
|
28
|
+
/** Cabeceras estáticas de la config del usuario. */
|
|
29
|
+
headers?: Record<string, string>;
|
|
30
|
+
/** Token bearer (del Vault o de una variable de entorno). */
|
|
31
|
+
bearerToken?: string;
|
|
32
|
+
timeoutMs?: number;
|
|
33
|
+
/** Inyectable para tests. */
|
|
34
|
+
fetchImpl?: typeof fetch;
|
|
35
|
+
}
|
|
36
|
+
export declare class McpError extends Error {
|
|
37
|
+
code: number;
|
|
38
|
+
constructor(message: string, code?: number);
|
|
39
|
+
}
|
|
40
|
+
export declare class McpClient {
|
|
41
|
+
private url;
|
|
42
|
+
private headers;
|
|
43
|
+
private bearerToken?;
|
|
44
|
+
private timeoutMs;
|
|
45
|
+
private fetchImpl;
|
|
46
|
+
private nextId;
|
|
47
|
+
/** Lo devuelve el servidor en `initialize`; hay que reenviarlo después. */
|
|
48
|
+
private sessionId?;
|
|
49
|
+
private initialized;
|
|
50
|
+
constructor(options: McpClientOptions);
|
|
51
|
+
private buildHeaders;
|
|
52
|
+
/** Una respuesta SSE envuelve el JSON en líneas `data:`. */
|
|
53
|
+
private static parseBody;
|
|
54
|
+
private rpc;
|
|
55
|
+
/** Handshake. Idempotente: llamarlo dos veces no reinicia la sesión. */
|
|
56
|
+
initialize(): Promise<void>;
|
|
57
|
+
listTools(): Promise<McpTool[]>;
|
|
58
|
+
callTool(name: string, args: Record<string, unknown>): Promise<McpCallResult>;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/core/mcp/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,MAAM,WAAW,OAAO;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,aAAa;IAC7B,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC,CAAC;IACxE,OAAO,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,qDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,6DAA6D;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CACzB;AASD,qBAAa,QAAS,SAAQ,KAAK;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,OAAO,EAAE,MAAM,EAAE,IAAI,SAAK,EAIrC;CACD;AAED,qBAAa,SAAS;IACrB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAe;IAChC,OAAO,CAAC,MAAM,CAAK;IACnB,4EAA2E;IAC3E,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,WAAW,CAAS;IAE5B,YAAY,OAAO,EAAE,gBAAgB,EAMpC;IAED,OAAO,CAAC,YAAY;IAYpB,6DAA4D;IAC5D,OAAO,CAAC,MAAM,CAAC,SAAS;YAgBV,GAAG;IAwCjB,yEAAwE;IAClE,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAUhC;IAEK,SAAS,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAIpC;IAEK,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAMlF;CACD","sourcesContent":["/**\n * Cliente MCP nativo en TypeScript.\n *\n * El competidor no tiene esto: su host solo hace OAuth y el protocolo lo habla\n * su kernel Python. Nosotros rechazamos el kernel, así que hablamos MCP\n * directamente — lo que además elimina su dependencia de un venv de ~500MB.\n *\n * Implementa el transporte Streamable HTTP (JSON-RPC 2.0 sobre POST), que es el\n * que usan los servidores MCP alojados. Los servidores stdio quedan fuera a\n * propósito: lanzar procesos arbitrarios desde una config es una superficie de\n * ejecución que no queremos abrir por defecto.\n */\n\nconst PROTOCOL_VERSION = \"2025-06-18\";\nconst DEFAULT_TIMEOUT_MS = 30_000;\n\nexport interface McpTool {\n\tname: string;\n\tdescription?: string;\n\tinputSchema?: Record<string, unknown>;\n}\n\nexport interface McpCallResult {\n\tcontent: Array<{ type: string; text?: string; [key: string]: unknown }>;\n\tisError: boolean;\n}\n\nexport interface McpClientOptions {\n\turl: string;\n\t/** Cabeceras estáticas de la config del usuario. */\n\theaders?: Record<string, string>;\n\t/** Token bearer (del Vault o de una variable de entorno). */\n\tbearerToken?: string;\n\ttimeoutMs?: number;\n\t/** Inyectable para tests. */\n\tfetchImpl?: typeof fetch;\n}\n\ninterface JsonRpcResponse {\n\tjsonrpc: \"2.0\";\n\tid?: number | string;\n\tresult?: unknown;\n\terror?: { code: number; message: string; data?: unknown };\n}\n\nexport class McpError extends Error {\n\tcode: number;\n\tconstructor(message: string, code = -1) {\n\t\tsuper(message);\n\t\tthis.name = \"McpError\";\n\t\tthis.code = code;\n\t}\n}\n\nexport class McpClient {\n\tprivate url: string;\n\tprivate headers: Record<string, string>;\n\tprivate bearerToken?: string;\n\tprivate timeoutMs: number;\n\tprivate fetchImpl: typeof fetch;\n\tprivate nextId = 1;\n\t/** Lo devuelve el servidor en `initialize`; hay que reenviarlo después. */\n\tprivate sessionId?: string;\n\tprivate initialized = false;\n\n\tconstructor(options: McpClientOptions) {\n\t\tthis.url = options.url;\n\t\tthis.headers = options.headers ?? {};\n\t\tthis.bearerToken = options.bearerToken;\n\t\tthis.timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n\t\tthis.fetchImpl = options.fetchImpl ?? fetch;\n\t}\n\n\tprivate buildHeaders(): Record<string, string> {\n\t\tconst headers: Record<string, string> = {\n\t\t\t\"content-type\": \"application/json\",\n\t\t\t// Los servidores Streamable HTTP pueden responder JSON o SSE.\n\t\t\taccept: \"application/json, text/event-stream\",\n\t\t\t...this.headers,\n\t\t};\n\t\tif (this.bearerToken) headers.authorization = `Bearer ${this.bearerToken}`;\n\t\tif (this.sessionId) headers[\"mcp-session-id\"] = this.sessionId;\n\t\treturn headers;\n\t}\n\n\t/** Una respuesta SSE envuelve el JSON en líneas `data:`. */\n\tprivate static parseBody(contentType: string, body: string): JsonRpcResponse {\n\t\tif (!contentType.includes(\"text/event-stream\")) return JSON.parse(body) as JsonRpcResponse;\n\t\tfor (const line of body.split(\"\\n\")) {\n\t\t\tconst trimmed = line.trim();\n\t\t\tif (!trimmed.startsWith(\"data:\")) continue;\n\t\t\tconst payload = trimmed.slice(5).trim();\n\t\t\tif (!payload || payload === \"[DONE]\") continue;\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(payload) as JsonRpcResponse;\n\t\t\t} catch {\n\t\t\t\t// siguiente evento\n\t\t\t}\n\t\t}\n\t\tthrow new McpError(\"Respuesta SSE sin payload JSON-RPC\");\n\t}\n\n\tprivate async rpc(method: string, params?: Record<string, unknown>): Promise<unknown> {\n\t\tconst id = this.nextId++;\n\t\tconst controller = new AbortController();\n\t\tconst timer = setTimeout(() => controller.abort(), this.timeoutMs);\n\t\ttry {\n\t\t\tconst response = await this.fetchImpl(this.url, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: this.buildHeaders(),\n\t\t\t\tbody: JSON.stringify({ jsonrpc: \"2.0\", id, method, ...(params ? { params } : {}) }),\n\t\t\t\tsignal: controller.signal,\n\t\t\t});\n\n\t\t\tconst sessionHeader = response.headers?.get?.(\"mcp-session-id\");\n\t\t\tif (sessionHeader) this.sessionId = sessionHeader;\n\n\t\t\tif (!response.ok) {\n\t\t\t\t// 401 se distingue a propósito: es \"falta autenticar\", no un fallo del\n\t\t\t\t// servidor, y el mensaje debe llevar al usuario a /mcp login.\n\t\t\t\tif (response.status === 401 || response.status === 403) {\n\t\t\t\t\tthrow new McpError(`No autenticado contra ${this.url} (HTTP ${response.status})`, response.status);\n\t\t\t\t}\n\t\t\t\tthrow new McpError(`El servidor MCP devolvió HTTP ${response.status}`, response.status);\n\t\t\t}\n\n\t\t\tconst body = await response.text();\n\t\t\tif (!body.trim()) return undefined; // notificación aceptada sin cuerpo\n\t\t\tconst parsed = McpClient.parseBody(response.headers?.get?.(\"content-type\") ?? \"\", body);\n\t\t\tif (parsed.error) throw new McpError(parsed.error.message, parsed.error.code);\n\t\t\treturn parsed.result;\n\t\t} catch (error) {\n\t\t\tif (error instanceof McpError) throw error;\n\t\t\tif ((error as { name?: string }).name === \"AbortError\") {\n\t\t\t\tthrow new McpError(`El servidor MCP no respondió en ${this.timeoutMs}ms`);\n\t\t\t}\n\t\t\tthrow new McpError(error instanceof Error ? error.message : String(error));\n\t\t} finally {\n\t\t\tclearTimeout(timer);\n\t\t}\n\t}\n\n\t/** Handshake. Idempotente: llamarlo dos veces no reinicia la sesión. */\n\tasync initialize(): Promise<void> {\n\t\tif (this.initialized) return;\n\t\tawait this.rpc(\"initialize\", {\n\t\t\tprotocolVersion: PROTOCOL_VERSION,\n\t\t\tcapabilities: {},\n\t\t\tclientInfo: { name: \"ada-cli\", version: \"1\" },\n\t\t});\n\t\t// El servidor espera la notificación antes de aceptar peticiones normales.\n\t\tawait this.rpc(\"notifications/initialized\").catch(() => {});\n\t\tthis.initialized = true;\n\t}\n\n\tasync listTools(): Promise<McpTool[]> {\n\t\tawait this.initialize();\n\t\tconst result = (await this.rpc(\"tools/list\")) as { tools?: McpTool[] } | undefined;\n\t\treturn result?.tools ?? [];\n\t}\n\n\tasync callTool(name: string, args: Record<string, unknown>): Promise<McpCallResult> {\n\t\tawait this.initialize();\n\t\tconst result = (await this.rpc(\"tools/call\", { name, arguments: args })) as\n\t\t\t| { content?: McpCallResult[\"content\"]; isError?: boolean }\n\t\t\t| undefined;\n\t\treturn { content: result?.content ?? [], isError: result?.isError === true };\n\t}\n}\n"]}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cliente MCP nativo en TypeScript.
|
|
3
|
+
*
|
|
4
|
+
* El competidor no tiene esto: su host solo hace OAuth y el protocolo lo habla
|
|
5
|
+
* su kernel Python. Nosotros rechazamos el kernel, así que hablamos MCP
|
|
6
|
+
* directamente — lo que además elimina su dependencia de un venv de ~500MB.
|
|
7
|
+
*
|
|
8
|
+
* Implementa el transporte Streamable HTTP (JSON-RPC 2.0 sobre POST), que es el
|
|
9
|
+
* que usan los servidores MCP alojados. Los servidores stdio quedan fuera a
|
|
10
|
+
* propósito: lanzar procesos arbitrarios desde una config es una superficie de
|
|
11
|
+
* ejecución que no queremos abrir por defecto.
|
|
12
|
+
*/
|
|
13
|
+
const PROTOCOL_VERSION = "2025-06-18";
|
|
14
|
+
const DEFAULT_TIMEOUT_MS = 30_000;
|
|
15
|
+
export class McpError extends Error {
|
|
16
|
+
code;
|
|
17
|
+
constructor(message, code = -1) {
|
|
18
|
+
super(message);
|
|
19
|
+
this.name = "McpError";
|
|
20
|
+
this.code = code;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export class McpClient {
|
|
24
|
+
url;
|
|
25
|
+
headers;
|
|
26
|
+
bearerToken;
|
|
27
|
+
timeoutMs;
|
|
28
|
+
fetchImpl;
|
|
29
|
+
nextId = 1;
|
|
30
|
+
/** Lo devuelve el servidor en `initialize`; hay que reenviarlo después. */
|
|
31
|
+
sessionId;
|
|
32
|
+
initialized = false;
|
|
33
|
+
constructor(options) {
|
|
34
|
+
this.url = options.url;
|
|
35
|
+
this.headers = options.headers ?? {};
|
|
36
|
+
this.bearerToken = options.bearerToken;
|
|
37
|
+
this.timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
38
|
+
this.fetchImpl = options.fetchImpl ?? fetch;
|
|
39
|
+
}
|
|
40
|
+
buildHeaders() {
|
|
41
|
+
const headers = {
|
|
42
|
+
"content-type": "application/json",
|
|
43
|
+
// Los servidores Streamable HTTP pueden responder JSON o SSE.
|
|
44
|
+
accept: "application/json, text/event-stream",
|
|
45
|
+
...this.headers,
|
|
46
|
+
};
|
|
47
|
+
if (this.bearerToken)
|
|
48
|
+
headers.authorization = `Bearer ${this.bearerToken}`;
|
|
49
|
+
if (this.sessionId)
|
|
50
|
+
headers["mcp-session-id"] = this.sessionId;
|
|
51
|
+
return headers;
|
|
52
|
+
}
|
|
53
|
+
/** Una respuesta SSE envuelve el JSON en líneas `data:`. */
|
|
54
|
+
static parseBody(contentType, body) {
|
|
55
|
+
if (!contentType.includes("text/event-stream"))
|
|
56
|
+
return JSON.parse(body);
|
|
57
|
+
for (const line of body.split("\n")) {
|
|
58
|
+
const trimmed = line.trim();
|
|
59
|
+
if (!trimmed.startsWith("data:"))
|
|
60
|
+
continue;
|
|
61
|
+
const payload = trimmed.slice(5).trim();
|
|
62
|
+
if (!payload || payload === "[DONE]")
|
|
63
|
+
continue;
|
|
64
|
+
try {
|
|
65
|
+
return JSON.parse(payload);
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
// siguiente evento
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
throw new McpError("Respuesta SSE sin payload JSON-RPC");
|
|
72
|
+
}
|
|
73
|
+
async rpc(method, params) {
|
|
74
|
+
const id = this.nextId++;
|
|
75
|
+
const controller = new AbortController();
|
|
76
|
+
const timer = setTimeout(() => controller.abort(), this.timeoutMs);
|
|
77
|
+
try {
|
|
78
|
+
const response = await this.fetchImpl(this.url, {
|
|
79
|
+
method: "POST",
|
|
80
|
+
headers: this.buildHeaders(),
|
|
81
|
+
body: JSON.stringify({ jsonrpc: "2.0", id, method, ...(params ? { params } : {}) }),
|
|
82
|
+
signal: controller.signal,
|
|
83
|
+
});
|
|
84
|
+
const sessionHeader = response.headers?.get?.("mcp-session-id");
|
|
85
|
+
if (sessionHeader)
|
|
86
|
+
this.sessionId = sessionHeader;
|
|
87
|
+
if (!response.ok) {
|
|
88
|
+
// 401 se distingue a propósito: es "falta autenticar", no un fallo del
|
|
89
|
+
// servidor, y el mensaje debe llevar al usuario a /mcp login.
|
|
90
|
+
if (response.status === 401 || response.status === 403) {
|
|
91
|
+
throw new McpError(`No autenticado contra ${this.url} (HTTP ${response.status})`, response.status);
|
|
92
|
+
}
|
|
93
|
+
throw new McpError(`El servidor MCP devolvió HTTP ${response.status}`, response.status);
|
|
94
|
+
}
|
|
95
|
+
const body = await response.text();
|
|
96
|
+
if (!body.trim())
|
|
97
|
+
return undefined; // notificación aceptada sin cuerpo
|
|
98
|
+
const parsed = McpClient.parseBody(response.headers?.get?.("content-type") ?? "", body);
|
|
99
|
+
if (parsed.error)
|
|
100
|
+
throw new McpError(parsed.error.message, parsed.error.code);
|
|
101
|
+
return parsed.result;
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
if (error instanceof McpError)
|
|
105
|
+
throw error;
|
|
106
|
+
if (error.name === "AbortError") {
|
|
107
|
+
throw new McpError(`El servidor MCP no respondió en ${this.timeoutMs}ms`);
|
|
108
|
+
}
|
|
109
|
+
throw new McpError(error instanceof Error ? error.message : String(error));
|
|
110
|
+
}
|
|
111
|
+
finally {
|
|
112
|
+
clearTimeout(timer);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/** Handshake. Idempotente: llamarlo dos veces no reinicia la sesión. */
|
|
116
|
+
async initialize() {
|
|
117
|
+
if (this.initialized)
|
|
118
|
+
return;
|
|
119
|
+
await this.rpc("initialize", {
|
|
120
|
+
protocolVersion: PROTOCOL_VERSION,
|
|
121
|
+
capabilities: {},
|
|
122
|
+
clientInfo: { name: "ada-cli", version: "1" },
|
|
123
|
+
});
|
|
124
|
+
// El servidor espera la notificación antes de aceptar peticiones normales.
|
|
125
|
+
await this.rpc("notifications/initialized").catch(() => { });
|
|
126
|
+
this.initialized = true;
|
|
127
|
+
}
|
|
128
|
+
async listTools() {
|
|
129
|
+
await this.initialize();
|
|
130
|
+
const result = (await this.rpc("tools/list"));
|
|
131
|
+
return result?.tools ?? [];
|
|
132
|
+
}
|
|
133
|
+
async callTool(name, args) {
|
|
134
|
+
await this.initialize();
|
|
135
|
+
const result = (await this.rpc("tools/call", { name, arguments: args }));
|
|
136
|
+
return { content: result?.content ?? [], isError: result?.isError === true };
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/core/mcp/client.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Cliente MCP nativo en TypeScript.\n *\n * El competidor no tiene esto: su host solo hace OAuth y el protocolo lo habla\n * su kernel Python. Nosotros rechazamos el kernel, así que hablamos MCP\n * directamente — lo que además elimina su dependencia de un venv de ~500MB.\n *\n * Implementa el transporte Streamable HTTP (JSON-RPC 2.0 sobre POST), que es el\n * que usan los servidores MCP alojados. Los servidores stdio quedan fuera a\n * propósito: lanzar procesos arbitrarios desde una config es una superficie de\n * ejecución que no queremos abrir por defecto.\n */\n\nconst PROTOCOL_VERSION = \"2025-06-18\";\nconst DEFAULT_TIMEOUT_MS = 30_000;\n\nexport interface McpTool {\n\tname: string;\n\tdescription?: string;\n\tinputSchema?: Record<string, unknown>;\n}\n\nexport interface McpCallResult {\n\tcontent: Array<{ type: string; text?: string; [key: string]: unknown }>;\n\tisError: boolean;\n}\n\nexport interface McpClientOptions {\n\turl: string;\n\t/** Cabeceras estáticas de la config del usuario. */\n\theaders?: Record<string, string>;\n\t/** Token bearer (del Vault o de una variable de entorno). */\n\tbearerToken?: string;\n\ttimeoutMs?: number;\n\t/** Inyectable para tests. */\n\tfetchImpl?: typeof fetch;\n}\n\ninterface JsonRpcResponse {\n\tjsonrpc: \"2.0\";\n\tid?: number | string;\n\tresult?: unknown;\n\terror?: { code: number; message: string; data?: unknown };\n}\n\nexport class McpError extends Error {\n\tcode: number;\n\tconstructor(message: string, code = -1) {\n\t\tsuper(message);\n\t\tthis.name = \"McpError\";\n\t\tthis.code = code;\n\t}\n}\n\nexport class McpClient {\n\tprivate url: string;\n\tprivate headers: Record<string, string>;\n\tprivate bearerToken?: string;\n\tprivate timeoutMs: number;\n\tprivate fetchImpl: typeof fetch;\n\tprivate nextId = 1;\n\t/** Lo devuelve el servidor en `initialize`; hay que reenviarlo después. */\n\tprivate sessionId?: string;\n\tprivate initialized = false;\n\n\tconstructor(options: McpClientOptions) {\n\t\tthis.url = options.url;\n\t\tthis.headers = options.headers ?? {};\n\t\tthis.bearerToken = options.bearerToken;\n\t\tthis.timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n\t\tthis.fetchImpl = options.fetchImpl ?? fetch;\n\t}\n\n\tprivate buildHeaders(): Record<string, string> {\n\t\tconst headers: Record<string, string> = {\n\t\t\t\"content-type\": \"application/json\",\n\t\t\t// Los servidores Streamable HTTP pueden responder JSON o SSE.\n\t\t\taccept: \"application/json, text/event-stream\",\n\t\t\t...this.headers,\n\t\t};\n\t\tif (this.bearerToken) headers.authorization = `Bearer ${this.bearerToken}`;\n\t\tif (this.sessionId) headers[\"mcp-session-id\"] = this.sessionId;\n\t\treturn headers;\n\t}\n\n\t/** Una respuesta SSE envuelve el JSON en líneas `data:`. */\n\tprivate static parseBody(contentType: string, body: string): JsonRpcResponse {\n\t\tif (!contentType.includes(\"text/event-stream\")) return JSON.parse(body) as JsonRpcResponse;\n\t\tfor (const line of body.split(\"\\n\")) {\n\t\t\tconst trimmed = line.trim();\n\t\t\tif (!trimmed.startsWith(\"data:\")) continue;\n\t\t\tconst payload = trimmed.slice(5).trim();\n\t\t\tif (!payload || payload === \"[DONE]\") continue;\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(payload) as JsonRpcResponse;\n\t\t\t} catch {\n\t\t\t\t// siguiente evento\n\t\t\t}\n\t\t}\n\t\tthrow new McpError(\"Respuesta SSE sin payload JSON-RPC\");\n\t}\n\n\tprivate async rpc(method: string, params?: Record<string, unknown>): Promise<unknown> {\n\t\tconst id = this.nextId++;\n\t\tconst controller = new AbortController();\n\t\tconst timer = setTimeout(() => controller.abort(), this.timeoutMs);\n\t\ttry {\n\t\t\tconst response = await this.fetchImpl(this.url, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: this.buildHeaders(),\n\t\t\t\tbody: JSON.stringify({ jsonrpc: \"2.0\", id, method, ...(params ? { params } : {}) }),\n\t\t\t\tsignal: controller.signal,\n\t\t\t});\n\n\t\t\tconst sessionHeader = response.headers?.get?.(\"mcp-session-id\");\n\t\t\tif (sessionHeader) this.sessionId = sessionHeader;\n\n\t\t\tif (!response.ok) {\n\t\t\t\t// 401 se distingue a propósito: es \"falta autenticar\", no un fallo del\n\t\t\t\t// servidor, y el mensaje debe llevar al usuario a /mcp login.\n\t\t\t\tif (response.status === 401 || response.status === 403) {\n\t\t\t\t\tthrow new McpError(`No autenticado contra ${this.url} (HTTP ${response.status})`, response.status);\n\t\t\t\t}\n\t\t\t\tthrow new McpError(`El servidor MCP devolvió HTTP ${response.status}`, response.status);\n\t\t\t}\n\n\t\t\tconst body = await response.text();\n\t\t\tif (!body.trim()) return undefined; // notificación aceptada sin cuerpo\n\t\t\tconst parsed = McpClient.parseBody(response.headers?.get?.(\"content-type\") ?? \"\", body);\n\t\t\tif (parsed.error) throw new McpError(parsed.error.message, parsed.error.code);\n\t\t\treturn parsed.result;\n\t\t} catch (error) {\n\t\t\tif (error instanceof McpError) throw error;\n\t\t\tif ((error as { name?: string }).name === \"AbortError\") {\n\t\t\t\tthrow new McpError(`El servidor MCP no respondió en ${this.timeoutMs}ms`);\n\t\t\t}\n\t\t\tthrow new McpError(error instanceof Error ? error.message : String(error));\n\t\t} finally {\n\t\t\tclearTimeout(timer);\n\t\t}\n\t}\n\n\t/** Handshake. Idempotente: llamarlo dos veces no reinicia la sesión. */\n\tasync initialize(): Promise<void> {\n\t\tif (this.initialized) return;\n\t\tawait this.rpc(\"initialize\", {\n\t\t\tprotocolVersion: PROTOCOL_VERSION,\n\t\t\tcapabilities: {},\n\t\t\tclientInfo: { name: \"ada-cli\", version: \"1\" },\n\t\t});\n\t\t// El servidor espera la notificación antes de aceptar peticiones normales.\n\t\tawait this.rpc(\"notifications/initialized\").catch(() => {});\n\t\tthis.initialized = true;\n\t}\n\n\tasync listTools(): Promise<McpTool[]> {\n\t\tawait this.initialize();\n\t\tconst result = (await this.rpc(\"tools/list\")) as { tools?: McpTool[] } | undefined;\n\t\treturn result?.tools ?? [];\n\t}\n\n\tasync callTool(name: string, args: Record<string, unknown>): Promise<McpCallResult> {\n\t\tawait this.initialize();\n\t\tconst result = (await this.rpc(\"tools/call\", { name, arguments: args })) as\n\t\t\t| { content?: McpCallResult[\"content\"]; isError?: boolean }\n\t\t\t| undefined;\n\t\treturn { content: result?.content ?? [], isError: result?.isError === true };\n\t}\n}\n"]}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gestor de integraciones MCP.
|
|
3
|
+
*
|
|
4
|
+
* Diferencias deliberadas con el competidor, todas a nuestro favor:
|
|
5
|
+
*
|
|
6
|
+
* - El protocolo se habla en TypeScript (`client.ts`), no en un kernel Python.
|
|
7
|
+
* - Los tokens salen del **Vault cifrado**, no de un `auth.json` en claro.
|
|
8
|
+
* - Se exponen al modelo EXACTAMENTE DOS tools (`mcp_list_tools`,
|
|
9
|
+
* `mcp_call_tool`), no una por cada tool remota: un servidor con 40 tools no
|
|
10
|
+
* puede inflar el prompt ni desplazar el prefijo cacheable.
|
|
11
|
+
* - Solo en la sesión principal (anti-recursión): un subagente no alcanza Jira.
|
|
12
|
+
*
|
|
13
|
+
* Y una regla suya que SÍ copiamos porque no es obvia y la acertaron: si el
|
|
14
|
+
* usuario redefine un servidor del catálogo con su propia URL, esa entrada NO
|
|
15
|
+
* hereda las credenciales del builtin. Si no, el token emitido para el endpoint
|
|
16
|
+
* oficial acabaría enviándose a una URL arbitraria.
|
|
17
|
+
*/
|
|
18
|
+
import { type McpCallResult, McpClient, type McpTool } from "./client.ts";
|
|
19
|
+
export interface McpServerConfig {
|
|
20
|
+
url: string;
|
|
21
|
+
/** Cabeceras estáticas (p. ej. una API key propia). */
|
|
22
|
+
headers?: Record<string, string>;
|
|
23
|
+
/** Variable de entorno con el bearer token. */
|
|
24
|
+
bearerTokenEnvVar?: string;
|
|
25
|
+
/** Nombre del secreto en el Vault. Preferido sobre la variable de entorno. */
|
|
26
|
+
vaultSecret?: string;
|
|
27
|
+
enabled?: boolean;
|
|
28
|
+
}
|
|
29
|
+
export interface McpCatalogEntry {
|
|
30
|
+
server: string;
|
|
31
|
+
label: string;
|
|
32
|
+
url: string;
|
|
33
|
+
}
|
|
34
|
+
/** Catálogo mínimo. Se mantiene corto a propósito: cada entrada es soporte. */
|
|
35
|
+
export declare const BUILTIN_MCP_CATALOG: readonly McpCatalogEntry[];
|
|
36
|
+
export declare function getCatalogEntry(server: string): McpCatalogEntry | undefined;
|
|
37
|
+
export interface ResolvedIntegration {
|
|
38
|
+
server: string;
|
|
39
|
+
label: string;
|
|
40
|
+
url: string;
|
|
41
|
+
headers?: Record<string, string>;
|
|
42
|
+
bearerTokenEnvVar?: string;
|
|
43
|
+
vaultSecret?: string;
|
|
44
|
+
enabled: boolean;
|
|
45
|
+
/** Viene de la config del usuario (puede redefinir un nombre del catálogo). */
|
|
46
|
+
userDeclared: boolean;
|
|
47
|
+
}
|
|
48
|
+
export interface McpManagerOptions {
|
|
49
|
+
getServers: () => Record<string, McpServerConfig> | undefined;
|
|
50
|
+
/** Lee un secreto del Vault. Devuelve undefined si está bloqueado. */
|
|
51
|
+
getVaultSecret?: (name: string) => Promise<string | undefined>;
|
|
52
|
+
/** Inyectable para tests. */
|
|
53
|
+
createClient?: (integration: ResolvedIntegration, token?: string) => McpClient;
|
|
54
|
+
/**
|
|
55
|
+
* `fetch` con el que hablar con los servidores MCP.
|
|
56
|
+
*
|
|
57
|
+
* Existe para que las salidas queden en el libro de sesión. Sin esto, el
|
|
58
|
+
* informe para el DPO escribía «No hubo transferencias» sobre una sesión que
|
|
59
|
+
* había hablado con un MCP remoto — y contactar con un servidor de terceros
|
|
60
|
+
* ES una transferencia (art. 44 RGPD). Ver `core/web/registro-red.ts`.
|
|
61
|
+
*/
|
|
62
|
+
fetchImpl?: typeof fetch;
|
|
63
|
+
}
|
|
64
|
+
export declare class McpManager {
|
|
65
|
+
private options;
|
|
66
|
+
private integrations;
|
|
67
|
+
private clients;
|
|
68
|
+
constructor(options: McpManagerOptions);
|
|
69
|
+
/** Re-lee la configuración. Llamar tras un reload de sesión. */
|
|
70
|
+
refresh(): void;
|
|
71
|
+
list(): ResolvedIntegration[];
|
|
72
|
+
/**
|
|
73
|
+
* Token de una integración.
|
|
74
|
+
*
|
|
75
|
+
* Regla de seguridad: una entrada del usuario que redefine un nombre del
|
|
76
|
+
* catálogo NO hereda credenciales del builtin — solo se autentica con lo que
|
|
77
|
+
* ella misma declara (vault o variable de entorno). Sin esto, el token del
|
|
78
|
+
* endpoint oficial podría acabar en una URL arbitraria.
|
|
79
|
+
*/
|
|
80
|
+
tokenFor(integration: ResolvedIntegration): Promise<string | undefined>;
|
|
81
|
+
isAvailable(integration: ResolvedIntegration): Promise<boolean>;
|
|
82
|
+
private clientFor;
|
|
83
|
+
listTools(server: string): Promise<McpTool[]>;
|
|
84
|
+
callTool(server: string, tool: string, args: Record<string, unknown>): Promise<McpCallResult>;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/core/mcp/manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,KAAK,aAAa,EAAE,SAAS,EAAE,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAE1E,MAAM,WAAW,eAAe;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,wDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,+CAA+C;IAC/C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,8EAA8E;IAC9E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,kFAA+E;AAC/E,eAAO,MAAM,mBAAmB,EAAE,SAAS,eAAe,EAGzD,CAAC;AAEF,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAE3E;AAED,MAAM,WAAW,mBAAmB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,gFAA+E;IAC/E,YAAY,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IACjC,UAAU,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,SAAS,CAAC;IAC9D,uEAAsE;IACtE,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC/D,6BAA6B;IAC7B,YAAY,CAAC,EAAE,CAAC,WAAW,EAAE,mBAAmB,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,SAAS,CAAC;IAC/E;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CACzB;AAED,qBAAa,UAAU;IACtB,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,YAAY,CAA0C;IAC9D,OAAO,CAAC,OAAO,CAAgC;IAE/C,YAAY,OAAO,EAAE,iBAAiB,EAGrC;IAED,kEAAgE;IAChE,OAAO,IAAI,IAAI,CAyBd;IAED,IAAI,IAAI,mBAAmB,EAAE,CAE5B;IAED;;;;;;;OAOG;IACG,QAAQ,CAAC,WAAW,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAU5E;IAEK,WAAW,CAAC,WAAW,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CAGpE;YAEa,SAAS;IA0BjB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAElD;IAEK,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAElG;CACD","sourcesContent":["/**\n * Gestor de integraciones MCP.\n *\n * Diferencias deliberadas con el competidor, todas a nuestro favor:\n *\n * - El protocolo se habla en TypeScript (`client.ts`), no en un kernel Python.\n * - Los tokens salen del **Vault cifrado**, no de un `auth.json` en claro.\n * - Se exponen al modelo EXACTAMENTE DOS tools (`mcp_list_tools`,\n * `mcp_call_tool`), no una por cada tool remota: un servidor con 40 tools no\n * puede inflar el prompt ni desplazar el prefijo cacheable.\n * - Solo en la sesión principal (anti-recursión): un subagente no alcanza Jira.\n *\n * Y una regla suya que SÍ copiamos porque no es obvia y la acertaron: si el\n * usuario redefine un servidor del catálogo con su propia URL, esa entrada NO\n * hereda las credenciales del builtin. Si no, el token emitido para el endpoint\n * oficial acabaría enviándose a una URL arbitraria.\n */\n\nimport { anotarRedDeLaSesion, fetchConRegistro } from \"../web/registro-red.ts\";\nimport { type McpCallResult, McpClient, type McpTool } from \"./client.ts\";\n\nexport interface McpServerConfig {\n\turl: string;\n\t/** Cabeceras estáticas (p. ej. una API key propia). */\n\theaders?: Record<string, string>;\n\t/** Variable de entorno con el bearer token. */\n\tbearerTokenEnvVar?: string;\n\t/** Nombre del secreto en el Vault. Preferido sobre la variable de entorno. */\n\tvaultSecret?: string;\n\tenabled?: boolean;\n}\n\nexport interface McpCatalogEntry {\n\tserver: string;\n\tlabel: string;\n\turl: string;\n}\n\n/** Catálogo mínimo. Se mantiene corto a propósito: cada entrada es soporte. */\nexport const BUILTIN_MCP_CATALOG: readonly McpCatalogEntry[] = [\n\t{ server: \"linear\", label: \"Linear\", url: \"https://mcp.linear.app/mcp\" },\n\t{ server: \"notion\", label: \"Notion\", url: \"https://mcp.notion.com/mcp\" },\n];\n\nexport function getCatalogEntry(server: string): McpCatalogEntry | undefined {\n\treturn BUILTIN_MCP_CATALOG.find((entry) => entry.server === server);\n}\n\nexport interface ResolvedIntegration {\n\tserver: string;\n\tlabel: string;\n\turl: string;\n\theaders?: Record<string, string>;\n\tbearerTokenEnvVar?: string;\n\tvaultSecret?: string;\n\tenabled: boolean;\n\t/** Viene de la config del usuario (puede redefinir un nombre del catálogo). */\n\tuserDeclared: boolean;\n}\n\nexport interface McpManagerOptions {\n\tgetServers: () => Record<string, McpServerConfig> | undefined;\n\t/** Lee un secreto del Vault. Devuelve undefined si está bloqueado. */\n\tgetVaultSecret?: (name: string) => Promise<string | undefined>;\n\t/** Inyectable para tests. */\n\tcreateClient?: (integration: ResolvedIntegration, token?: string) => McpClient;\n\t/**\n\t * `fetch` con el que hablar con los servidores MCP.\n\t *\n\t * Existe para que las salidas queden en el libro de sesión. Sin esto, el\n\t * informe para el DPO escribía «No hubo transferencias» sobre una sesión que\n\t * había hablado con un MCP remoto — y contactar con un servidor de terceros\n\t * ES una transferencia (art. 44 RGPD). Ver `core/web/registro-red.ts`.\n\t */\n\tfetchImpl?: typeof fetch;\n}\n\nexport class McpManager {\n\tprivate options: McpManagerOptions;\n\tprivate integrations = new Map<string, ResolvedIntegration>();\n\tprivate clients = new Map<string, McpClient>();\n\n\tconstructor(options: McpManagerOptions) {\n\t\tthis.options = options;\n\t\tthis.refresh();\n\t}\n\n\t/** Re-lee la configuración. Llamar tras un reload de sesión. */\n\trefresh(): void {\n\t\tconst resolved = new Map<string, ResolvedIntegration>();\n\t\tfor (const entry of BUILTIN_MCP_CATALOG) {\n\t\t\tresolved.set(entry.server, {\n\t\t\t\tserver: entry.server,\n\t\t\t\tlabel: entry.label,\n\t\t\t\turl: entry.url,\n\t\t\t\tenabled: false, // sin credenciales no está disponible\n\t\t\t\tuserDeclared: false,\n\t\t\t});\n\t\t}\n\t\tfor (const [server, config] of Object.entries(this.options.getServers() ?? {})) {\n\t\t\tresolved.set(server, {\n\t\t\t\tserver,\n\t\t\t\tlabel: server,\n\t\t\t\turl: config.url,\n\t\t\t\theaders: config.headers,\n\t\t\t\tbearerTokenEnvVar: config.bearerTokenEnvVar,\n\t\t\t\tvaultSecret: config.vaultSecret,\n\t\t\t\tenabled: config.enabled !== false,\n\t\t\t\tuserDeclared: true,\n\t\t\t});\n\t\t}\n\t\tthis.integrations = resolved;\n\t\tthis.clients.clear();\n\t}\n\n\tlist(): ResolvedIntegration[] {\n\t\treturn [...this.integrations.values()];\n\t}\n\n\t/**\n\t * Token de una integración.\n\t *\n\t * Regla de seguridad: una entrada del usuario que redefine un nombre del\n\t * catálogo NO hereda credenciales del builtin — solo se autentica con lo que\n\t * ella misma declara (vault o variable de entorno). Sin esto, el token del\n\t * endpoint oficial podría acabar en una URL arbitraria.\n\t */\n\tasync tokenFor(integration: ResolvedIntegration): Promise<string | undefined> {\n\t\tif (integration.vaultSecret && this.options.getVaultSecret) {\n\t\t\tconst secret = await this.options.getVaultSecret(integration.vaultSecret);\n\t\t\tif (secret) return secret;\n\t\t}\n\t\tif (integration.bearerTokenEnvVar) {\n\t\t\tconst value = process.env[integration.bearerTokenEnvVar]?.trim();\n\t\t\tif (value) return value;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tasync isAvailable(integration: ResolvedIntegration): Promise<boolean> {\n\t\tif (!integration.enabled) return false;\n\t\treturn (await this.tokenFor(integration)) !== undefined;\n\t}\n\n\tprivate async clientFor(server: string): Promise<McpClient> {\n\t\tconst integration = this.integrations.get(server);\n\t\tif (!integration) throw new Error(`Servidor MCP desconocido: ${server}. Usa /mcp para ver los configurados.`);\n\t\tif (!integration.enabled) throw new Error(`El servidor MCP '${server}' está desactivado.`);\n\t\tconst cached = this.clients.get(server);\n\t\tif (cached) return cached;\n\t\tconst token = await this.tokenFor(integration);\n\t\tif (!token) {\n\t\t\tthrow new Error(\n\t\t\t\t`Sin credenciales para '${server}'. Guarda el token en el vault (/vault add) y referencia vaultSecret, o define ${integration.bearerTokenEnvVar ?? \"un bearerTokenEnvVar\"}.`,\n\t\t\t);\n\t\t}\n\t\tconst client =\n\t\t\tthis.options.createClient?.(integration, token) ??\n\t\t\tnew McpClient({\n\t\t\t\turl: integration.url,\n\t\t\t\theaders: integration.headers,\n\t\t\t\tbearerToken: token,\n\t\t\t\t// El publicado por la sesión si no nos han pasado uno: `resource-loader`\n\t\t\t\t// construye este manager y no tiene el libro a mano.\n\t\t\t\tfetchImpl: this.options.fetchImpl ?? fetchConRegistro(fetch, anotarRedDeLaSesion()),\n\t\t\t});\n\t\tthis.clients.set(server, client);\n\t\treturn client;\n\t}\n\n\tasync listTools(server: string): Promise<McpTool[]> {\n\t\treturn (await this.clientFor(server)).listTools();\n\t}\n\n\tasync callTool(server: string, tool: string, args: Record<string, unknown>): Promise<McpCallResult> {\n\t\treturn (await this.clientFor(server)).callTool(tool, args);\n\t}\n}\n"]}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gestor de integraciones MCP.
|
|
3
|
+
*
|
|
4
|
+
* Diferencias deliberadas con el competidor, todas a nuestro favor:
|
|
5
|
+
*
|
|
6
|
+
* - El protocolo se habla en TypeScript (`client.ts`), no en un kernel Python.
|
|
7
|
+
* - Los tokens salen del **Vault cifrado**, no de un `auth.json` en claro.
|
|
8
|
+
* - Se exponen al modelo EXACTAMENTE DOS tools (`mcp_list_tools`,
|
|
9
|
+
* `mcp_call_tool`), no una por cada tool remota: un servidor con 40 tools no
|
|
10
|
+
* puede inflar el prompt ni desplazar el prefijo cacheable.
|
|
11
|
+
* - Solo en la sesión principal (anti-recursión): un subagente no alcanza Jira.
|
|
12
|
+
*
|
|
13
|
+
* Y una regla suya que SÍ copiamos porque no es obvia y la acertaron: si el
|
|
14
|
+
* usuario redefine un servidor del catálogo con su propia URL, esa entrada NO
|
|
15
|
+
* hereda las credenciales del builtin. Si no, el token emitido para el endpoint
|
|
16
|
+
* oficial acabaría enviándose a una URL arbitraria.
|
|
17
|
+
*/
|
|
18
|
+
import { anotarRedDeLaSesion, fetchConRegistro } from "../web/registro-red.js";
|
|
19
|
+
import { McpClient } from "./client.js";
|
|
20
|
+
/** Catálogo mínimo. Se mantiene corto a propósito: cada entrada es soporte. */
|
|
21
|
+
export const BUILTIN_MCP_CATALOG = [
|
|
22
|
+
{ server: "linear", label: "Linear", url: "https://mcp.linear.app/mcp" },
|
|
23
|
+
{ server: "notion", label: "Notion", url: "https://mcp.notion.com/mcp" },
|
|
24
|
+
];
|
|
25
|
+
export function getCatalogEntry(server) {
|
|
26
|
+
return BUILTIN_MCP_CATALOG.find((entry) => entry.server === server);
|
|
27
|
+
}
|
|
28
|
+
export class McpManager {
|
|
29
|
+
options;
|
|
30
|
+
integrations = new Map();
|
|
31
|
+
clients = new Map();
|
|
32
|
+
constructor(options) {
|
|
33
|
+
this.options = options;
|
|
34
|
+
this.refresh();
|
|
35
|
+
}
|
|
36
|
+
/** Re-lee la configuración. Llamar tras un reload de sesión. */
|
|
37
|
+
refresh() {
|
|
38
|
+
const resolved = new Map();
|
|
39
|
+
for (const entry of BUILTIN_MCP_CATALOG) {
|
|
40
|
+
resolved.set(entry.server, {
|
|
41
|
+
server: entry.server,
|
|
42
|
+
label: entry.label,
|
|
43
|
+
url: entry.url,
|
|
44
|
+
enabled: false, // sin credenciales no está disponible
|
|
45
|
+
userDeclared: false,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
for (const [server, config] of Object.entries(this.options.getServers() ?? {})) {
|
|
49
|
+
resolved.set(server, {
|
|
50
|
+
server,
|
|
51
|
+
label: server,
|
|
52
|
+
url: config.url,
|
|
53
|
+
headers: config.headers,
|
|
54
|
+
bearerTokenEnvVar: config.bearerTokenEnvVar,
|
|
55
|
+
vaultSecret: config.vaultSecret,
|
|
56
|
+
enabled: config.enabled !== false,
|
|
57
|
+
userDeclared: true,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
this.integrations = resolved;
|
|
61
|
+
this.clients.clear();
|
|
62
|
+
}
|
|
63
|
+
list() {
|
|
64
|
+
return [...this.integrations.values()];
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Token de una integración.
|
|
68
|
+
*
|
|
69
|
+
* Regla de seguridad: una entrada del usuario que redefine un nombre del
|
|
70
|
+
* catálogo NO hereda credenciales del builtin — solo se autentica con lo que
|
|
71
|
+
* ella misma declara (vault o variable de entorno). Sin esto, el token del
|
|
72
|
+
* endpoint oficial podría acabar en una URL arbitraria.
|
|
73
|
+
*/
|
|
74
|
+
async tokenFor(integration) {
|
|
75
|
+
if (integration.vaultSecret && this.options.getVaultSecret) {
|
|
76
|
+
const secret = await this.options.getVaultSecret(integration.vaultSecret);
|
|
77
|
+
if (secret)
|
|
78
|
+
return secret;
|
|
79
|
+
}
|
|
80
|
+
if (integration.bearerTokenEnvVar) {
|
|
81
|
+
const value = process.env[integration.bearerTokenEnvVar]?.trim();
|
|
82
|
+
if (value)
|
|
83
|
+
return value;
|
|
84
|
+
}
|
|
85
|
+
return undefined;
|
|
86
|
+
}
|
|
87
|
+
async isAvailable(integration) {
|
|
88
|
+
if (!integration.enabled)
|
|
89
|
+
return false;
|
|
90
|
+
return (await this.tokenFor(integration)) !== undefined;
|
|
91
|
+
}
|
|
92
|
+
async clientFor(server) {
|
|
93
|
+
const integration = this.integrations.get(server);
|
|
94
|
+
if (!integration)
|
|
95
|
+
throw new Error(`Servidor MCP desconocido: ${server}. Usa /mcp para ver los configurados.`);
|
|
96
|
+
if (!integration.enabled)
|
|
97
|
+
throw new Error(`El servidor MCP '${server}' está desactivado.`);
|
|
98
|
+
const cached = this.clients.get(server);
|
|
99
|
+
if (cached)
|
|
100
|
+
return cached;
|
|
101
|
+
const token = await this.tokenFor(integration);
|
|
102
|
+
if (!token) {
|
|
103
|
+
throw new Error(`Sin credenciales para '${server}'. Guarda el token en el vault (/vault add) y referencia vaultSecret, o define ${integration.bearerTokenEnvVar ?? "un bearerTokenEnvVar"}.`);
|
|
104
|
+
}
|
|
105
|
+
const client = this.options.createClient?.(integration, token) ??
|
|
106
|
+
new McpClient({
|
|
107
|
+
url: integration.url,
|
|
108
|
+
headers: integration.headers,
|
|
109
|
+
bearerToken: token,
|
|
110
|
+
// El publicado por la sesión si no nos han pasado uno: `resource-loader`
|
|
111
|
+
// construye este manager y no tiene el libro a mano.
|
|
112
|
+
fetchImpl: this.options.fetchImpl ?? fetchConRegistro(fetch, anotarRedDeLaSesion()),
|
|
113
|
+
});
|
|
114
|
+
this.clients.set(server, client);
|
|
115
|
+
return client;
|
|
116
|
+
}
|
|
117
|
+
async listTools(server) {
|
|
118
|
+
return (await this.clientFor(server)).listTools();
|
|
119
|
+
}
|
|
120
|
+
async callTool(server, tool, args) {
|
|
121
|
+
return (await this.clientFor(server)).callTool(tool, args);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/core/mcp/manager.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Gestor de integraciones MCP.\n *\n * Diferencias deliberadas con el competidor, todas a nuestro favor:\n *\n * - El protocolo se habla en TypeScript (`client.ts`), no en un kernel Python.\n * - Los tokens salen del **Vault cifrado**, no de un `auth.json` en claro.\n * - Se exponen al modelo EXACTAMENTE DOS tools (`mcp_list_tools`,\n * `mcp_call_tool`), no una por cada tool remota: un servidor con 40 tools no\n * puede inflar el prompt ni desplazar el prefijo cacheable.\n * - Solo en la sesión principal (anti-recursión): un subagente no alcanza Jira.\n *\n * Y una regla suya que SÍ copiamos porque no es obvia y la acertaron: si el\n * usuario redefine un servidor del catálogo con su propia URL, esa entrada NO\n * hereda las credenciales del builtin. Si no, el token emitido para el endpoint\n * oficial acabaría enviándose a una URL arbitraria.\n */\n\nimport { anotarRedDeLaSesion, fetchConRegistro } from \"../web/registro-red.ts\";\nimport { type McpCallResult, McpClient, type McpTool } from \"./client.ts\";\n\nexport interface McpServerConfig {\n\turl: string;\n\t/** Cabeceras estáticas (p. ej. una API key propia). */\n\theaders?: Record<string, string>;\n\t/** Variable de entorno con el bearer token. */\n\tbearerTokenEnvVar?: string;\n\t/** Nombre del secreto en el Vault. Preferido sobre la variable de entorno. */\n\tvaultSecret?: string;\n\tenabled?: boolean;\n}\n\nexport interface McpCatalogEntry {\n\tserver: string;\n\tlabel: string;\n\turl: string;\n}\n\n/** Catálogo mínimo. Se mantiene corto a propósito: cada entrada es soporte. */\nexport const BUILTIN_MCP_CATALOG: readonly McpCatalogEntry[] = [\n\t{ server: \"linear\", label: \"Linear\", url: \"https://mcp.linear.app/mcp\" },\n\t{ server: \"notion\", label: \"Notion\", url: \"https://mcp.notion.com/mcp\" },\n];\n\nexport function getCatalogEntry(server: string): McpCatalogEntry | undefined {\n\treturn BUILTIN_MCP_CATALOG.find((entry) => entry.server === server);\n}\n\nexport interface ResolvedIntegration {\n\tserver: string;\n\tlabel: string;\n\turl: string;\n\theaders?: Record<string, string>;\n\tbearerTokenEnvVar?: string;\n\tvaultSecret?: string;\n\tenabled: boolean;\n\t/** Viene de la config del usuario (puede redefinir un nombre del catálogo). */\n\tuserDeclared: boolean;\n}\n\nexport interface McpManagerOptions {\n\tgetServers: () => Record<string, McpServerConfig> | undefined;\n\t/** Lee un secreto del Vault. Devuelve undefined si está bloqueado. */\n\tgetVaultSecret?: (name: string) => Promise<string | undefined>;\n\t/** Inyectable para tests. */\n\tcreateClient?: (integration: ResolvedIntegration, token?: string) => McpClient;\n\t/**\n\t * `fetch` con el que hablar con los servidores MCP.\n\t *\n\t * Existe para que las salidas queden en el libro de sesión. Sin esto, el\n\t * informe para el DPO escribía «No hubo transferencias» sobre una sesión que\n\t * había hablado con un MCP remoto — y contactar con un servidor de terceros\n\t * ES una transferencia (art. 44 RGPD). Ver `core/web/registro-red.ts`.\n\t */\n\tfetchImpl?: typeof fetch;\n}\n\nexport class McpManager {\n\tprivate options: McpManagerOptions;\n\tprivate integrations = new Map<string, ResolvedIntegration>();\n\tprivate clients = new Map<string, McpClient>();\n\n\tconstructor(options: McpManagerOptions) {\n\t\tthis.options = options;\n\t\tthis.refresh();\n\t}\n\n\t/** Re-lee la configuración. Llamar tras un reload de sesión. */\n\trefresh(): void {\n\t\tconst resolved = new Map<string, ResolvedIntegration>();\n\t\tfor (const entry of BUILTIN_MCP_CATALOG) {\n\t\t\tresolved.set(entry.server, {\n\t\t\t\tserver: entry.server,\n\t\t\t\tlabel: entry.label,\n\t\t\t\turl: entry.url,\n\t\t\t\tenabled: false, // sin credenciales no está disponible\n\t\t\t\tuserDeclared: false,\n\t\t\t});\n\t\t}\n\t\tfor (const [server, config] of Object.entries(this.options.getServers() ?? {})) {\n\t\t\tresolved.set(server, {\n\t\t\t\tserver,\n\t\t\t\tlabel: server,\n\t\t\t\turl: config.url,\n\t\t\t\theaders: config.headers,\n\t\t\t\tbearerTokenEnvVar: config.bearerTokenEnvVar,\n\t\t\t\tvaultSecret: config.vaultSecret,\n\t\t\t\tenabled: config.enabled !== false,\n\t\t\t\tuserDeclared: true,\n\t\t\t});\n\t\t}\n\t\tthis.integrations = resolved;\n\t\tthis.clients.clear();\n\t}\n\n\tlist(): ResolvedIntegration[] {\n\t\treturn [...this.integrations.values()];\n\t}\n\n\t/**\n\t * Token de una integración.\n\t *\n\t * Regla de seguridad: una entrada del usuario que redefine un nombre del\n\t * catálogo NO hereda credenciales del builtin — solo se autentica con lo que\n\t * ella misma declara (vault o variable de entorno). Sin esto, el token del\n\t * endpoint oficial podría acabar en una URL arbitraria.\n\t */\n\tasync tokenFor(integration: ResolvedIntegration): Promise<string | undefined> {\n\t\tif (integration.vaultSecret && this.options.getVaultSecret) {\n\t\t\tconst secret = await this.options.getVaultSecret(integration.vaultSecret);\n\t\t\tif (secret) return secret;\n\t\t}\n\t\tif (integration.bearerTokenEnvVar) {\n\t\t\tconst value = process.env[integration.bearerTokenEnvVar]?.trim();\n\t\t\tif (value) return value;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tasync isAvailable(integration: ResolvedIntegration): Promise<boolean> {\n\t\tif (!integration.enabled) return false;\n\t\treturn (await this.tokenFor(integration)) !== undefined;\n\t}\n\n\tprivate async clientFor(server: string): Promise<McpClient> {\n\t\tconst integration = this.integrations.get(server);\n\t\tif (!integration) throw new Error(`Servidor MCP desconocido: ${server}. Usa /mcp para ver los configurados.`);\n\t\tif (!integration.enabled) throw new Error(`El servidor MCP '${server}' está desactivado.`);\n\t\tconst cached = this.clients.get(server);\n\t\tif (cached) return cached;\n\t\tconst token = await this.tokenFor(integration);\n\t\tif (!token) {\n\t\t\tthrow new Error(\n\t\t\t\t`Sin credenciales para '${server}'. Guarda el token en el vault (/vault add) y referencia vaultSecret, o define ${integration.bearerTokenEnvVar ?? \"un bearerTokenEnvVar\"}.`,\n\t\t\t);\n\t\t}\n\t\tconst client =\n\t\t\tthis.options.createClient?.(integration, token) ??\n\t\t\tnew McpClient({\n\t\t\t\turl: integration.url,\n\t\t\t\theaders: integration.headers,\n\t\t\t\tbearerToken: token,\n\t\t\t\t// El publicado por la sesión si no nos han pasado uno: `resource-loader`\n\t\t\t\t// construye este manager y no tiene el libro a mano.\n\t\t\t\tfetchImpl: this.options.fetchImpl ?? fetchConRegistro(fetch, anotarRedDeLaSesion()),\n\t\t\t});\n\t\tthis.clients.set(server, client);\n\t\treturn client;\n\t}\n\n\tasync listTools(server: string): Promise<McpTool[]> {\n\t\treturn (await this.clientFor(server)).listTools();\n\t}\n\n\tasync callTool(server: string, tool: string, args: Record<string, unknown>): Promise<McpCallResult> {\n\t\treturn (await this.clientFor(server)).callTool(tool, args);\n\t}\n}\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tools MCP expuestas al modelo: EXACTAMENTE DOS.
|
|
3
|
+
*
|
|
4
|
+
* No una por cada tool remota, a propósito. Un servidor con 40 herramientas
|
|
5
|
+
* inflaría el system prompt con 40 esquemas, desplazaría el prefijo cacheable
|
|
6
|
+
* (a 31x el token de miss en DeepSeek, eso se paga) y ahogaría a las tools
|
|
7
|
+
* propias del agente. Con dos, el descubrimiento es explícito y bajo demanda.
|
|
8
|
+
*
|
|
9
|
+
* Se registran SOLO en la sesión principal: un subagente no debe poder alcanzar
|
|
10
|
+
* el Jira de la empresa.
|
|
11
|
+
*/
|
|
12
|
+
import type { ToolDefinition } from "../extensions/types.ts";
|
|
13
|
+
import type { McpManager } from "./manager.ts";
|
|
14
|
+
export declare function createMcpTools(manager: McpManager): Record<string, ToolDefinition>;
|
|
15
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/core/mcp/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAmB,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAyB/C,wBAAgB,cAAc,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CA2DlF","sourcesContent":["/**\n * Tools MCP expuestas al modelo: EXACTAMENTE DOS.\n *\n * No una por cada tool remota, a propósito. Un servidor con 40 herramientas\n * inflaría el system prompt con 40 esquemas, desplazaría el prefijo cacheable\n * (a 31x el token de miss en DeepSeek, eso se paga) y ahogaría a las tools\n * propias del agente. Con dos, el descubrimiento es explícito y bajo demanda.\n *\n * Se registran SOLO en la sesión principal: un subagente no debe poder alcanzar\n * el Jira de la empresa.\n */\n\nimport { Type } from \"typebox\";\nimport type { AgentToolResult, ToolDefinition } from \"../extensions/types.ts\";\nimport type { McpManager } from \"./manager.ts\";\n\nfunction textResult(text: string): AgentToolResult<unknown> {\n\treturn { content: [{ type: \"text\" as const, text }], details: undefined };\n}\n\nfunction textOf(content: Array<{ type: string; text?: string }>): string {\n\tconst text = content\n\t\t.filter((block) => block.type === \"text\" && block.text)\n\t\t.map((block) => block.text)\n\t\t.join(\"\\n\")\n\t\t.trim();\n\treturn text || \"(sin contenido textual)\";\n}\n\nconst listParams = Type.Object({\n\tserver: Type.Optional(Type.String({ description: \"Nombre del servidor. Omítelo para listar los servidores.\" })),\n});\n\nconst callParams = Type.Object({\n\tserver: Type.String({ description: \"Nombre del servidor MCP.\" }),\n\ttool: Type.String({ description: \"Nombre de la herramienta remota.\" }),\n\targuments: Type.Optional(Type.Any({ description: \"Argumentos según el inputSchema de la herramienta.\" })),\n});\n\nexport function createMcpTools(manager: McpManager): Record<string, ToolDefinition> {\n\tconst listTools: ToolDefinition<typeof listParams> = {\n\t\tname: \"mcp_list_tools\",\n\t\tlabel: \"Listar tools MCP\",\n\t\tdescription:\n\t\t\t\"Lista las herramientas disponibles en un servidor MCP configurado (Jira, Linear, Notion…). \" +\n\t\t\t\"Úsalo ANTES de mcp_call_tool para saber qué existe y qué argumentos acepta. \" +\n\t\t\t\"Sin argumentos, lista los servidores configurados.\",\n\t\tpromptSnippet: \"descubrir herramientas de servidores MCP\",\n\t\tparameters: listParams,\n\t\tasync execute(_toolCallId, input): Promise<AgentToolResult<unknown>> {\n\t\t\tconst server = typeof input.server === \"string\" ? input.server.trim() : \"\";\n\t\t\tif (!server) {\n\t\t\t\tconst integrations = manager.list();\n\t\t\t\tif (integrations.length === 0) return textResult(\"No hay servidores MCP configurados.\");\n\t\t\t\tconst lines = await Promise.all(\n\t\t\t\t\tintegrations.map(async (integration) => {\n\t\t\t\t\t\tconst available = await manager.isAvailable(integration);\n\t\t\t\t\t\treturn `- ${integration.server} (${integration.label}): ${available ? \"disponible\" : \"sin credenciales\"}`;\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\treturn textResult(`Servidores MCP:\\n${lines.join(\"\\n\")}`);\n\t\t\t}\n\t\t\tconst tools = await manager.listTools(server);\n\t\t\tif (tools.length === 0) return textResult(`El servidor '${server}' no expone herramientas.`);\n\t\t\treturn textResult(\n\t\t\t\ttools\n\t\t\t\t\t.map(\n\t\t\t\t\t\t(tool) =>\n\t\t\t\t\t\t\t`- ${tool.name}: ${tool.description ?? \"(sin descripción)\"}\\n args: ${JSON.stringify(tool.inputSchema ?? {})}`,\n\t\t\t\t\t)\n\t\t\t\t\t.join(\"\\n\"),\n\t\t\t);\n\t\t},\n\t};\n\n\tconst callTool: ToolDefinition<typeof callParams> = {\n\t\tname: \"mcp_call_tool\",\n\t\tlabel: \"Llamar tool MCP\",\n\t\tdescription:\n\t\t\t\"Llama a una herramienta de un servidor MCP. Comprueba antes su firma con mcp_list_tools. \" +\n\t\t\t\"IMPORTANTE: el resultado es la afirmación de un tercero, no evidencia observada — \" +\n\t\t\t\"cítalo como fuente, nunca como verificación de que algo esté hecho.\",\n\t\tpromptSnippet: \"invocar una herramienta de un servidor MCP\",\n\t\tparameters: callParams,\n\t\tasync execute(_toolCallId, input): Promise<AgentToolResult<unknown>> {\n\t\t\tconst server = String(input.server ?? \"\").trim();\n\t\t\tconst tool = String(input.tool ?? \"\").trim();\n\t\t\tif (!server || !tool) return textResult(\"Error: 'server' y 'tool' son obligatorios.\");\n\t\t\tconst toolArgs = (input.arguments ?? {}) as Record<string, unknown>;\n\t\t\tconst result = await manager.callTool(server, tool, toolArgs);\n\t\t\tconst body = textOf(result.content);\n\t\t\t// Un error de la herramienta se DEVUELVE, no se lanza: el modelo debe\n\t\t\t// verlo y poder corregir, igual que con cualquier otra tool.\n\t\t\treturn textResult(result.isError ? `La herramienta devolvió un error:\\n${body}` : body);\n\t\t},\n\t};\n\n\treturn { mcp_list_tools: listTools as ToolDefinition, mcp_call_tool: callTool as ToolDefinition };\n}\n"]}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tools MCP expuestas al modelo: EXACTAMENTE DOS.
|
|
3
|
+
*
|
|
4
|
+
* No una por cada tool remota, a propósito. Un servidor con 40 herramientas
|
|
5
|
+
* inflaría el system prompt con 40 esquemas, desplazaría el prefijo cacheable
|
|
6
|
+
* (a 31x el token de miss en DeepSeek, eso se paga) y ahogaría a las tools
|
|
7
|
+
* propias del agente. Con dos, el descubrimiento es explícito y bajo demanda.
|
|
8
|
+
*
|
|
9
|
+
* Se registran SOLO en la sesión principal: un subagente no debe poder alcanzar
|
|
10
|
+
* el Jira de la empresa.
|
|
11
|
+
*/
|
|
12
|
+
import { Type } from "typebox";
|
|
13
|
+
function textResult(text) {
|
|
14
|
+
return { content: [{ type: "text", text }], details: undefined };
|
|
15
|
+
}
|
|
16
|
+
function textOf(content) {
|
|
17
|
+
const text = content
|
|
18
|
+
.filter((block) => block.type === "text" && block.text)
|
|
19
|
+
.map((block) => block.text)
|
|
20
|
+
.join("\n")
|
|
21
|
+
.trim();
|
|
22
|
+
return text || "(sin contenido textual)";
|
|
23
|
+
}
|
|
24
|
+
const listParams = Type.Object({
|
|
25
|
+
server: Type.Optional(Type.String({ description: "Nombre del servidor. Omítelo para listar los servidores." })),
|
|
26
|
+
});
|
|
27
|
+
const callParams = Type.Object({
|
|
28
|
+
server: Type.String({ description: "Nombre del servidor MCP." }),
|
|
29
|
+
tool: Type.String({ description: "Nombre de la herramienta remota." }),
|
|
30
|
+
arguments: Type.Optional(Type.Any({ description: "Argumentos según el inputSchema de la herramienta." })),
|
|
31
|
+
});
|
|
32
|
+
export function createMcpTools(manager) {
|
|
33
|
+
const listTools = {
|
|
34
|
+
name: "mcp_list_tools",
|
|
35
|
+
label: "Listar tools MCP",
|
|
36
|
+
description: "Lista las herramientas disponibles en un servidor MCP configurado (Jira, Linear, Notion…). " +
|
|
37
|
+
"Úsalo ANTES de mcp_call_tool para saber qué existe y qué argumentos acepta. " +
|
|
38
|
+
"Sin argumentos, lista los servidores configurados.",
|
|
39
|
+
promptSnippet: "descubrir herramientas de servidores MCP",
|
|
40
|
+
parameters: listParams,
|
|
41
|
+
async execute(_toolCallId, input) {
|
|
42
|
+
const server = typeof input.server === "string" ? input.server.trim() : "";
|
|
43
|
+
if (!server) {
|
|
44
|
+
const integrations = manager.list();
|
|
45
|
+
if (integrations.length === 0)
|
|
46
|
+
return textResult("No hay servidores MCP configurados.");
|
|
47
|
+
const lines = await Promise.all(integrations.map(async (integration) => {
|
|
48
|
+
const available = await manager.isAvailable(integration);
|
|
49
|
+
return `- ${integration.server} (${integration.label}): ${available ? "disponible" : "sin credenciales"}`;
|
|
50
|
+
}));
|
|
51
|
+
return textResult(`Servidores MCP:\n${lines.join("\n")}`);
|
|
52
|
+
}
|
|
53
|
+
const tools = await manager.listTools(server);
|
|
54
|
+
if (tools.length === 0)
|
|
55
|
+
return textResult(`El servidor '${server}' no expone herramientas.`);
|
|
56
|
+
return textResult(tools
|
|
57
|
+
.map((tool) => `- ${tool.name}: ${tool.description ?? "(sin descripción)"}\n args: ${JSON.stringify(tool.inputSchema ?? {})}`)
|
|
58
|
+
.join("\n"));
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
const callTool = {
|
|
62
|
+
name: "mcp_call_tool",
|
|
63
|
+
label: "Llamar tool MCP",
|
|
64
|
+
description: "Llama a una herramienta de un servidor MCP. Comprueba antes su firma con mcp_list_tools. " +
|
|
65
|
+
"IMPORTANTE: el resultado es la afirmación de un tercero, no evidencia observada — " +
|
|
66
|
+
"cítalo como fuente, nunca como verificación de que algo esté hecho.",
|
|
67
|
+
promptSnippet: "invocar una herramienta de un servidor MCP",
|
|
68
|
+
parameters: callParams,
|
|
69
|
+
async execute(_toolCallId, input) {
|
|
70
|
+
const server = String(input.server ?? "").trim();
|
|
71
|
+
const tool = String(input.tool ?? "").trim();
|
|
72
|
+
if (!server || !tool)
|
|
73
|
+
return textResult("Error: 'server' y 'tool' son obligatorios.");
|
|
74
|
+
const toolArgs = (input.arguments ?? {});
|
|
75
|
+
const result = await manager.callTool(server, tool, toolArgs);
|
|
76
|
+
const body = textOf(result.content);
|
|
77
|
+
// Un error de la herramienta se DEVUELVE, no se lanza: el modelo debe
|
|
78
|
+
// verlo y poder corregir, igual que con cualquier otra tool.
|
|
79
|
+
return textResult(result.isError ? `La herramienta devolvió un error:\n${body}` : body);
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
return { mcp_list_tools: listTools, mcp_call_tool: callTool };
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/core/mcp/tools.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Tools MCP expuestas al modelo: EXACTAMENTE DOS.\n *\n * No una por cada tool remota, a propósito. Un servidor con 40 herramientas\n * inflaría el system prompt con 40 esquemas, desplazaría el prefijo cacheable\n * (a 31x el token de miss en DeepSeek, eso se paga) y ahogaría a las tools\n * propias del agente. Con dos, el descubrimiento es explícito y bajo demanda.\n *\n * Se registran SOLO en la sesión principal: un subagente no debe poder alcanzar\n * el Jira de la empresa.\n */\n\nimport { Type } from \"typebox\";\nimport type { AgentToolResult, ToolDefinition } from \"../extensions/types.ts\";\nimport type { McpManager } from \"./manager.ts\";\n\nfunction textResult(text: string): AgentToolResult<unknown> {\n\treturn { content: [{ type: \"text\" as const, text }], details: undefined };\n}\n\nfunction textOf(content: Array<{ type: string; text?: string }>): string {\n\tconst text = content\n\t\t.filter((block) => block.type === \"text\" && block.text)\n\t\t.map((block) => block.text)\n\t\t.join(\"\\n\")\n\t\t.trim();\n\treturn text || \"(sin contenido textual)\";\n}\n\nconst listParams = Type.Object({\n\tserver: Type.Optional(Type.String({ description: \"Nombre del servidor. Omítelo para listar los servidores.\" })),\n});\n\nconst callParams = Type.Object({\n\tserver: Type.String({ description: \"Nombre del servidor MCP.\" }),\n\ttool: Type.String({ description: \"Nombre de la herramienta remota.\" }),\n\targuments: Type.Optional(Type.Any({ description: \"Argumentos según el inputSchema de la herramienta.\" })),\n});\n\nexport function createMcpTools(manager: McpManager): Record<string, ToolDefinition> {\n\tconst listTools: ToolDefinition<typeof listParams> = {\n\t\tname: \"mcp_list_tools\",\n\t\tlabel: \"Listar tools MCP\",\n\t\tdescription:\n\t\t\t\"Lista las herramientas disponibles en un servidor MCP configurado (Jira, Linear, Notion…). \" +\n\t\t\t\"Úsalo ANTES de mcp_call_tool para saber qué existe y qué argumentos acepta. \" +\n\t\t\t\"Sin argumentos, lista los servidores configurados.\",\n\t\tpromptSnippet: \"descubrir herramientas de servidores MCP\",\n\t\tparameters: listParams,\n\t\tasync execute(_toolCallId, input): Promise<AgentToolResult<unknown>> {\n\t\t\tconst server = typeof input.server === \"string\" ? input.server.trim() : \"\";\n\t\t\tif (!server) {\n\t\t\t\tconst integrations = manager.list();\n\t\t\t\tif (integrations.length === 0) return textResult(\"No hay servidores MCP configurados.\");\n\t\t\t\tconst lines = await Promise.all(\n\t\t\t\t\tintegrations.map(async (integration) => {\n\t\t\t\t\t\tconst available = await manager.isAvailable(integration);\n\t\t\t\t\t\treturn `- ${integration.server} (${integration.label}): ${available ? \"disponible\" : \"sin credenciales\"}`;\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\treturn textResult(`Servidores MCP:\\n${lines.join(\"\\n\")}`);\n\t\t\t}\n\t\t\tconst tools = await manager.listTools(server);\n\t\t\tif (tools.length === 0) return textResult(`El servidor '${server}' no expone herramientas.`);\n\t\t\treturn textResult(\n\t\t\t\ttools\n\t\t\t\t\t.map(\n\t\t\t\t\t\t(tool) =>\n\t\t\t\t\t\t\t`- ${tool.name}: ${tool.description ?? \"(sin descripción)\"}\\n args: ${JSON.stringify(tool.inputSchema ?? {})}`,\n\t\t\t\t\t)\n\t\t\t\t\t.join(\"\\n\"),\n\t\t\t);\n\t\t},\n\t};\n\n\tconst callTool: ToolDefinition<typeof callParams> = {\n\t\tname: \"mcp_call_tool\",\n\t\tlabel: \"Llamar tool MCP\",\n\t\tdescription:\n\t\t\t\"Llama a una herramienta de un servidor MCP. Comprueba antes su firma con mcp_list_tools. \" +\n\t\t\t\"IMPORTANTE: el resultado es la afirmación de un tercero, no evidencia observada — \" +\n\t\t\t\"cítalo como fuente, nunca como verificación de que algo esté hecho.\",\n\t\tpromptSnippet: \"invocar una herramienta de un servidor MCP\",\n\t\tparameters: callParams,\n\t\tasync execute(_toolCallId, input): Promise<AgentToolResult<unknown>> {\n\t\t\tconst server = String(input.server ?? \"\").trim();\n\t\t\tconst tool = String(input.tool ?? \"\").trim();\n\t\t\tif (!server || !tool) return textResult(\"Error: 'server' y 'tool' son obligatorios.\");\n\t\t\tconst toolArgs = (input.arguments ?? {}) as Record<string, unknown>;\n\t\t\tconst result = await manager.callTool(server, tool, toolArgs);\n\t\t\tconst body = textOf(result.content);\n\t\t\t// Un error de la herramienta se DEVUELVE, no se lanza: el modelo debe\n\t\t\t// verlo y poder corregir, igual que con cualquier otra tool.\n\t\t\treturn textResult(result.isError ? `La herramienta devolvió un error:\\n${body}` : body);\n\t\t},\n\t};\n\n\treturn { mcp_list_tools: listTools as ToolDefinition, mcp_call_tool: callTool as ToolDefinition };\n}\n"]}
|