@hoilab/ada-cli 0.84.22 → 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 +29 -2
- package/README.es.md +17 -6
- package/README.md +109 -11
- 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/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/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/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/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 +1 -1
- 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 +30 -2
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +430 -22
- 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 +17 -5
- 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/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/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/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/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +11 -1
- package/dist/core/extensions/loader.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/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 +12 -10
- package/dist/core/memory-engine/audit-export.d.ts.map +1 -1
- package/dist/core/memory-engine/audit-export.js +15 -0
- package/dist/core/memory-engine/audit-export.js.map +1 -1
- 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 +25 -42
- package/dist/core/memory-engine/audit.js.map +1 -1
- package/dist/core/memory-engine/engine.d.ts +19 -1
- package/dist/core/memory-engine/engine.d.ts.map +1 -1
- package/dist/core/memory-engine/engine.js +71 -5
- package/dist/core/memory-engine/engine.js.map +1 -1
- package/dist/core/memory-engine/observation-store.d.ts +0 -2
- package/dist/core/memory-engine/observation-store.d.ts.map +1 -1
- package/dist/core/memory-engine/observation-store.js +4 -5
- 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/tools.d.ts.map +1 -1
- package/dist/core/memory-engine/tools.js +27 -1
- 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/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +7 -1
- package/dist/core/model-resolver.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/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/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/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 +8 -0
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +93 -1
- 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/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/settings-manager.d.ts +110 -6
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +53 -2
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +3 -3
- 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 -7
- package/dist/core/tools/edit-diff.d.ts.map +1 -1
- package/dist/core/tools/edit-diff.js +232 -7
- 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 +8 -1
- 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/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/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/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 +2 -0
- package/dist/core/workflows/agent-runner.d.ts.map +1 -1
- package/dist/core/workflows/agent-runner.js +131 -44
- package/dist/core/workflows/agent-runner.js.map +1 -1
- package/dist/core/workflows/builtins.d.ts.map +1 -1
- package/dist/core/workflows/builtins.js +1 -0
- package/dist/core/workflows/builtins.js.map +1 -1
- 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 +17 -0
- package/dist/core/workflows/goal-engine/engine.d.ts.map +1 -1
- package/dist/core/workflows/goal-engine/engine.js +41 -0
- package/dist/core/workflows/goal-engine/engine.js.map +1 -1
- package/dist/core/workflows/index.d.ts +8 -0
- package/dist/core/workflows/index.d.ts.map +1 -1
- package/dist/core/workflows/index.js +4 -0
- package/dist/core/workflows/index.js.map +1 -1
- package/dist/core/workflows/manager.d.ts +10 -0
- package/dist/core/workflows/manager.d.ts.map +1 -1
- package/dist/core/workflows/manager.js +35 -11
- package/dist/core/workflows/manager.js.map +1 -1
- package/dist/core/workflows/runtime.d.ts +13 -0
- package/dist/core/workflows/runtime.d.ts.map +1 -1
- package/dist/core/workflows/runtime.js +80 -1
- package/dist/core/workflows/runtime.js.map +1 -1
- 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/types.d.ts +49 -0
- package/dist/core/workflows/types.d.ts.map +1 -1
- package/dist/core/workflows/types.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 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -16
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +6 -0
- package/dist/main.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/model-selector.d.ts +8 -1
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +41 -7
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +1 -2
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +9 -86
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts +8 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js +48 -17
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +3 -7
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +137 -146
- package/dist/modes/interactive/interactive-mode.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/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/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/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/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 +10 -10
- package/docs/compliance.md +241 -0
- package/docs/containerization.md +24 -24
- package/docs/custom-provider.md +10 -10
- package/docs/development.md +47 -10
- package/docs/docs.json +14 -2
- package/docs/environment-variables.md +20 -17
- package/docs/extensions.md +51 -49
- package/docs/index.md +15 -21
- package/docs/json.md +3 -3
- package/docs/keybindings.md +5 -5
- package/docs/llama-cpp.md +7 -7
- package/docs/models.md +12 -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 +12 -12
- 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 +45 -20
- package/docs/shell-aliases.md +2 -2
- package/docs/skills.md +11 -11
- 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/sdk/12-full-control.ts +9 -0
- package/npm-shrinkwrap.json +35 -251
- package/package.json +10 -4
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OTLP que NO PUEDE filtrar contenido.
|
|
3
|
+
*
|
|
4
|
+
* La casilla que marca un comité de compras es «exporta a OpenTelemetry». Eso
|
|
5
|
+
* lo tiene cualquiera: el contrato es un puñado de variables de entorno
|
|
6
|
+
* (`OTEL_EXPORTER_OTLP_ENDPOINT` y compañía) y un JSON con una forma fija. Lo
|
|
7
|
+
* que no tiene cualquiera es exportar SIN convertir el colector de
|
|
8
|
+
* observabilidad del cliente en un tratamiento de datos personales que nadie ha
|
|
9
|
+
* inventariado.
|
|
10
|
+
*
|
|
11
|
+
* El competidor trae una variable para capturar el CUERPO de los mensajes —el
|
|
12
|
+
* patrón se llama `CAPTURE_MESSAGE_CONTENT` en la especificación de OTel para
|
|
13
|
+
* GenAI—. Activarla mete prompts y respuestas del modelo en un almacén de
|
|
14
|
+
* trazas: un segundo depósito de justo aquello que el RGPD manda minimizar, y
|
|
15
|
+
* encima uno del que el DPO no suele saber nada porque lo administra el equipo
|
|
16
|
+
* de plataforma.
|
|
17
|
+
*
|
|
18
|
+
* PROPIEDAD DE DISEÑO, y es lo que este módulo vende:
|
|
19
|
+
*
|
|
20
|
+
* NO EXISTE en este fichero ninguna variable de entorno, opción, parámetro ni
|
|
21
|
+
* bandera que active la exportación de contenido. No es que venga apagada por
|
|
22
|
+
* defecto: es que no está. Una opción apagada la enciende alguien un martes;
|
|
23
|
+
* un mecanismo que no existe no se enciende.
|
|
24
|
+
*
|
|
25
|
+
* Hay una prueba que recorre el fuente de este módulo comprobándolo, con los
|
|
26
|
+
* comentarios quitados —porque este párrafo nombra el patrón que persigue y si
|
|
27
|
+
* no, se acusaría a sí misma—. Ver `test/otlp-sin-contenido.test.ts`.
|
|
28
|
+
*
|
|
29
|
+
* TRES CINTURONES, no uno:
|
|
30
|
+
*
|
|
31
|
+
* 1. `atributosDeSuceso` trabaja con una LISTA BLANCA explícita. Lo que no
|
|
32
|
+
* está, no sale. Es la misma regla que ya cumple `audit/libro.ts`: se
|
|
33
|
+
* registra la FORMA de lo que pasó, nunca su contenido.
|
|
34
|
+
* 2. El descarte es CONTABLE. Sale en `ada.atributos_descartados`, para que
|
|
35
|
+
* «este suceso traía cinco claves que no exporto» sea un dato y no un
|
|
36
|
+
* silencio. Un filtro mudo es indistinguible de un filtro roto.
|
|
37
|
+
* 3. `sinContenido` es la red por debajo: cualquier valor con salto de línea o
|
|
38
|
+
* más largo que 200 caracteres se cae aunque su clave esté en la lista.
|
|
39
|
+
* Sirve para el día en que alguien añada una clave sin pensarlo.
|
|
40
|
+
*
|
|
41
|
+
* LO QUE ESTE MÓDULO NO HACE. No envía nada. Construye el cuerpo y lo devuelve;
|
|
42
|
+
* quien lo suba a un colector es otro, y así este fichero no tiene ninguna
|
|
43
|
+
* salida a la red que auditar.
|
|
44
|
+
*/
|
|
45
|
+
import { createHash } from "node:crypto";
|
|
46
|
+
const SENALES = ["trazas", "logs", "metricas"];
|
|
47
|
+
/** Los dos únicos protocolos que este exportador sabe rendir. */
|
|
48
|
+
const PROTOCOLOS = ["http/protobuf", "http/json"];
|
|
49
|
+
/**
|
|
50
|
+
* El contrato estándar, tal cual. Los nombres son los de OpenTelemetry y no se
|
|
51
|
+
* traducen: son lo que un comité de compras busca en la documentación.
|
|
52
|
+
*/
|
|
53
|
+
const VARIABLE_ENDPOINT_BASE = "OTEL_EXPORTER_OTLP_ENDPOINT";
|
|
54
|
+
const VARIABLE_PROTOCOLO_BASE = "OTEL_EXPORTER_OTLP_PROTOCOL";
|
|
55
|
+
const VARIABLES_POR_SENAL = {
|
|
56
|
+
trazas: { endpoint: "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", protocolo: "OTEL_EXPORTER_OTLP_TRACES_PROTOCOL" },
|
|
57
|
+
logs: { endpoint: "OTEL_EXPORTER_OTLP_LOGS_ENDPOINT", protocolo: "OTEL_EXPORTER_OTLP_LOGS_PROTOCOL" },
|
|
58
|
+
metricas: { endpoint: "OTEL_EXPORTER_OTLP_METRICS_ENDPOINT", protocolo: "OTEL_EXPORTER_OTLP_METRICS_PROTOCOL" },
|
|
59
|
+
};
|
|
60
|
+
/** Una variable vacía o con solo espacios cuenta como no puesta. */
|
|
61
|
+
function valor(env, nombre) {
|
|
62
|
+
const crudo = env[nombre];
|
|
63
|
+
if (typeof crudo !== "string")
|
|
64
|
+
return undefined;
|
|
65
|
+
const limpio = crudo.trim();
|
|
66
|
+
return limpio === "" ? undefined : limpio;
|
|
67
|
+
}
|
|
68
|
+
function esUrlHttp(candidato) {
|
|
69
|
+
try {
|
|
70
|
+
const url = new URL(candidato);
|
|
71
|
+
return url.protocol === "http:" || url.protocol === "https:";
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Lee la configuración del entorno, con TRES estados y sin inventarse nada.
|
|
79
|
+
*
|
|
80
|
+
* La base (`OTEL_EXPORTER_OTLP_ENDPOINT` / `_PROTOCOL`) vale para las tres
|
|
81
|
+
* señales; la variable específica de una señal la sobreescribe.
|
|
82
|
+
*
|
|
83
|
+
* Lo que NO hace, y es deliberado: no cae a `http/protobuf` cuando falta el
|
|
84
|
+
* protocolo, aunque sea el defecto de la especificación. Un endpoint sin
|
|
85
|
+
* protocolo declarado sale como `invalida`. El motivo es el de siempre: elegir
|
|
86
|
+
* en silencio por el operador convierte un despiste suyo en una configuración
|
|
87
|
+
* nuestra, y el día que el colector no reciba nada nadie sabrá por qué.
|
|
88
|
+
*/
|
|
89
|
+
export function configuracionOtlp(env = process.env) {
|
|
90
|
+
const endpointBase = valor(env, VARIABLE_ENDPOINT_BASE);
|
|
91
|
+
const protocoloBase = valor(env, VARIABLE_PROTOCOLO_BASE);
|
|
92
|
+
const porSenal = {};
|
|
93
|
+
const problemas = [];
|
|
94
|
+
/** Señales con protocolo declarado y ningún endpoint donde mandarlo. */
|
|
95
|
+
const protocoloHuerfano = [];
|
|
96
|
+
for (const senal of SENALES) {
|
|
97
|
+
const variables = VARIABLES_POR_SENAL[senal];
|
|
98
|
+
const endpoint = valor(env, variables.endpoint) ?? endpointBase;
|
|
99
|
+
const protocolo = valor(env, variables.protocolo) ?? protocoloBase;
|
|
100
|
+
if (endpoint === undefined) {
|
|
101
|
+
if (protocolo !== undefined)
|
|
102
|
+
protocoloHuerfano.push(senal);
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
if (!esUrlHttp(endpoint)) {
|
|
106
|
+
problemas.push(`${senal}: el endpoint recibido (${endpoint}) no es una URL http:// ni https://`);
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
if (protocolo === undefined) {
|
|
110
|
+
problemas.push(`${senal}: hay endpoint (${endpoint}) y ningun protocolo declarado; ` +
|
|
111
|
+
`declara ${variables.protocolo} o ${VARIABLE_PROTOCOLO_BASE} con ${PROTOCOLOS.join(" o ")} ` +
|
|
112
|
+
"(no se asume ninguno por defecto)");
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
if (!PROTOCOLOS.includes(protocolo)) {
|
|
116
|
+
problemas.push(`${senal}: el protocolo recibido (${protocolo}) no es valido; los unicos validos son ${PROTOCOLOS.join(" y ")}`);
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
porSenal[senal] = { endpoint, protocolo: protocolo };
|
|
120
|
+
}
|
|
121
|
+
// Una señal mal configurada NO entra en `porSenal`: quien lea esto no puede
|
|
122
|
+
// acabar exportando a un sitio que no supimos validar.
|
|
123
|
+
if (problemas.length > 0) {
|
|
124
|
+
return { estado: "invalida", porSenal, motivo: problemas.join("; ") };
|
|
125
|
+
}
|
|
126
|
+
const configuradas = Object.keys(porSenal);
|
|
127
|
+
if (configuradas.length > 0) {
|
|
128
|
+
const detalle = configuradas.map((s) => `${s} -> ${porSenal[s]?.endpoint} (${porSenal[s]?.protocolo})`);
|
|
129
|
+
return { estado: "configurada", porSenal, motivo: `exportacion OTLP activa para ${detalle.join(", ")}` };
|
|
130
|
+
}
|
|
131
|
+
// El tercer estado se dice entero: «no hay endpoint» y «hay protocolo pero
|
|
132
|
+
// no hay endpoint» son dos situaciones distintas para quien la está montando.
|
|
133
|
+
if (protocoloHuerfano.length > 0) {
|
|
134
|
+
return {
|
|
135
|
+
estado: "sin-configurar",
|
|
136
|
+
porSenal,
|
|
137
|
+
motivo: `hay protocolo declarado para ${protocoloHuerfano.join(", ")} pero ningun endpoint: ` +
|
|
138
|
+
`sin ${VARIABLE_ENDPOINT_BASE} (o el especifico de la senal) no hay nada que exportar`,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
return {
|
|
142
|
+
estado: "sin-configurar",
|
|
143
|
+
porSenal,
|
|
144
|
+
motivo: `no hay ninguna variable ${VARIABLE_ENDPOINT_BASE} en el entorno: la exportacion OTLP esta apagada`,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* LA LISTA BLANCA. Clave del suceso -> nombre del atributo OTLP.
|
|
149
|
+
*
|
|
150
|
+
* Todo lo que hay aquí es FORMA: qué pasó, con qué herramienta, cómo acabó,
|
|
151
|
+
* cuánto ocupó. Nada de aquí puede llevar texto del usuario.
|
|
152
|
+
*
|
|
153
|
+
* Lo que NO está, y no por olvido:
|
|
154
|
+
*
|
|
155
|
+
* · `argv` — el texto del comando. Es la clave más golosa y la que más caro
|
|
156
|
+
* sale: un comando lleva rutas, nombres de cliente y a veces un secreto
|
|
157
|
+
* pegado en la línea.
|
|
158
|
+
* · `ruta` — la ruta completa del fichero. El nombre de un fichero ya es un
|
|
159
|
+
* dato: `/casos/2024/despido-<nombre>.docx` identifica a una persona sin
|
|
160
|
+
* que haga falta abrirlo. Del fichero salen sus hashes y nada más.
|
|
161
|
+
* · `motivo` — texto libre de la política. Hoy son frases nuestras; mañana
|
|
162
|
+
* alguien mete ahí lo que el modelo dijo.
|
|
163
|
+
* · `extension` — ruta en disco de la extensión, mismo argumento que `ruta`.
|
|
164
|
+
* · `violaciones` — lista de texto libre del sandbox.
|
|
165
|
+
*
|
|
166
|
+
* Y nunca, en ninguna versión: el prompt, la respuesta del modelo o el
|
|
167
|
+
* contenido de un fichero. No hay clave en `SucesoDeSesion` que los lleve, y
|
|
168
|
+
* este módulo existe para que siga sin haberla.
|
|
169
|
+
*/
|
|
170
|
+
const LISTA_BLANCA = {
|
|
171
|
+
tipo: "ada.suceso.tipo",
|
|
172
|
+
// tool
|
|
173
|
+
nombre: "ada.tool.nombre",
|
|
174
|
+
ok: "ada.tool.ok",
|
|
175
|
+
decision: "ada.permiso.veredicto",
|
|
176
|
+
// comando
|
|
177
|
+
codigo: "ada.comando.codigo",
|
|
178
|
+
sandbox: "ada.comando.encierro",
|
|
179
|
+
origen: "ada.comando.origen",
|
|
180
|
+
// modelo
|
|
181
|
+
proveedor: "ada.modelo.proveedor",
|
|
182
|
+
modelo: "ada.modelo.nombre",
|
|
183
|
+
entrada: "ada.modelo.tokens_entrada",
|
|
184
|
+
salida: "ada.modelo.tokens_salida",
|
|
185
|
+
motivoParada: "ada.modelo.motivo_parada",
|
|
186
|
+
// fichero: solo los hashes, jamás la ruta
|
|
187
|
+
antes: "ada.fichero.hash_antes",
|
|
188
|
+
despues: "ada.fichero.hash_despues",
|
|
189
|
+
tool: "ada.fichero.tool",
|
|
190
|
+
// red: el dominio, nunca la ruta ni los parametros (ahi viajan los tokens)
|
|
191
|
+
dominio: "ada.red.dominio",
|
|
192
|
+
permitido: "ada.red.permitido",
|
|
193
|
+
// credenciales: el identificador, jamas el valor
|
|
194
|
+
accion: "ada.credencial.accion",
|
|
195
|
+
credencialId: "ada.credencial.id",
|
|
196
|
+
resultado: "ada.credencial.resultado",
|
|
197
|
+
// purga por retencion
|
|
198
|
+
politica: "ada.politica.nombre",
|
|
199
|
+
entradas: "ada.purga.entradas",
|
|
200
|
+
hashDeCierre: "ada.purga.hash_de_cierre",
|
|
201
|
+
// medidas genericas, si el suceso las trae
|
|
202
|
+
bytes: "ada.bytes",
|
|
203
|
+
duracionMs: "ada.duracion_ms",
|
|
204
|
+
};
|
|
205
|
+
/** Nombre del contador de descartes. Se expone porque las pruebas lo miran. */
|
|
206
|
+
export const CLAVE_DESCARTADOS = "ada.atributos_descartados";
|
|
207
|
+
/** Un valor de cadena más largo que esto ya no es forma: es texto. */
|
|
208
|
+
const LARGO_MAXIMO = 200;
|
|
209
|
+
/**
|
|
210
|
+
* Las claves sospechosas de llevar texto libre.
|
|
211
|
+
*
|
|
212
|
+
* Dos señales, las dos baratas y las dos difíciles de fingir por un dato de
|
|
213
|
+
* forma: un salto de línea (un hash no los tiene, un diff sí) y una longitud
|
|
214
|
+
* que ningún identificador nuestro alcanza.
|
|
215
|
+
*
|
|
216
|
+
* Es un cinturón POR ENCIMA de la lista blanca, no un sustituto. Sola dejaría
|
|
217
|
+
* pasar una ruta de 40 caracteres; la lista blanca sola dejaría pasar lo que
|
|
218
|
+
* alguien añada mañana sin pensarlo. Hacen falta las dos.
|
|
219
|
+
*/
|
|
220
|
+
export function sinContenido(atributos) {
|
|
221
|
+
const sospechosas = [];
|
|
222
|
+
for (const [clave, valorDelAtributo] of Object.entries(atributos)) {
|
|
223
|
+
if (typeof valorDelAtributo !== "string")
|
|
224
|
+
continue;
|
|
225
|
+
if (valorDelAtributo.length > LARGO_MAXIMO || /[\r\n]/.test(valorDelAtributo))
|
|
226
|
+
sospechosas.push(clave);
|
|
227
|
+
}
|
|
228
|
+
return sospechosas;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Los atributos de un suceso, filtrados y con el descarte contado.
|
|
232
|
+
*
|
|
233
|
+
* `ada.atributos_descartados` cuenta lo que se quedó fuera: claves que no están
|
|
234
|
+
* en la lista blanca, claves cuyo valor no es un escalar exportable y claves
|
|
235
|
+
* que `sinContenido` marcó. Sin ese número, un filtro que se comiera todo y un
|
|
236
|
+
* suceso que no traía nada darían el mismo span.
|
|
237
|
+
*
|
|
238
|
+
* Una clave de la lista blanca con valor `null` no cuenta como descarte y no
|
|
239
|
+
* sale: en el libro `null` significa «el fichero no existía» o «no había
|
|
240
|
+
* credencial activa», y un atributo ausente en OTLP significa exactamente eso.
|
|
241
|
+
*/
|
|
242
|
+
export function atributosDeSuceso(entrada) {
|
|
243
|
+
const candidatos = {
|
|
244
|
+
"ada.sesion": entrada.sesion,
|
|
245
|
+
"ada.seq": entrada.seq,
|
|
246
|
+
};
|
|
247
|
+
let descartados = 0;
|
|
248
|
+
for (const [clave, valorCrudo] of Object.entries(entrada.suceso ?? {})) {
|
|
249
|
+
const nombre = LISTA_BLANCA[clave];
|
|
250
|
+
if (nombre === undefined) {
|
|
251
|
+
descartados++;
|
|
252
|
+
continue;
|
|
253
|
+
}
|
|
254
|
+
if (valorCrudo === null || valorCrudo === undefined)
|
|
255
|
+
continue;
|
|
256
|
+
if (typeof valorCrudo !== "string" && typeof valorCrudo !== "number" && typeof valorCrudo !== "boolean") {
|
|
257
|
+
// Un objeto o un array en una clave blanca: no se aplana ni se
|
|
258
|
+
// serializa, porque serializar es justo por donde entraría el texto.
|
|
259
|
+
descartados++;
|
|
260
|
+
continue;
|
|
261
|
+
}
|
|
262
|
+
candidatos[nombre] = valorCrudo;
|
|
263
|
+
}
|
|
264
|
+
for (const clave of sinContenido(candidatos)) {
|
|
265
|
+
delete candidatos[clave];
|
|
266
|
+
descartados++;
|
|
267
|
+
}
|
|
268
|
+
candidatos[CLAVE_DESCARTADOS] = descartados;
|
|
269
|
+
return candidatos;
|
|
270
|
+
}
|
|
271
|
+
/** Un identificador hexadecimal derivado del suceso, estable entre procesos. */
|
|
272
|
+
function hex(material, bytes) {
|
|
273
|
+
return createHash("sha256")
|
|
274
|
+
.update(material)
|
|
275
|
+
.digest("hex")
|
|
276
|
+
.slice(0, bytes * 2);
|
|
277
|
+
}
|
|
278
|
+
/** El atributo tal y como lo espera OTLP/JSON: clave y valor etiquetado. */
|
|
279
|
+
function atributoOtlp(clave, valorDelAtributo) {
|
|
280
|
+
if (typeof valorDelAtributo === "boolean")
|
|
281
|
+
return { key: clave, value: { boolValue: valorDelAtributo } };
|
|
282
|
+
if (typeof valorDelAtributo === "number") {
|
|
283
|
+
return Number.isInteger(valorDelAtributo)
|
|
284
|
+
? { key: clave, value: { intValue: String(valorDelAtributo) } }
|
|
285
|
+
: { key: clave, value: { doubleValue: valorDelAtributo } };
|
|
286
|
+
}
|
|
287
|
+
return { key: clave, value: { stringValue: valorDelAtributo } };
|
|
288
|
+
}
|
|
289
|
+
/** Códigos de `SpanKind` de OTLP. Solo se usan estos dos. */
|
|
290
|
+
const SPAN_KIND_INTERNAL = 1;
|
|
291
|
+
const SPAN_KIND_CLIENT = 3;
|
|
292
|
+
/** Códigos de `StatusCode`: 0 sin fijar, 2 error. El 1 (`OK`) se reserva. */
|
|
293
|
+
const STATUS_UNSET = 0;
|
|
294
|
+
const STATUS_ERROR = 2;
|
|
295
|
+
/** ¿El suceso terminó mal? Se mira la forma, nunca el texto del error. */
|
|
296
|
+
function fueError(suceso) {
|
|
297
|
+
if (suceso.ok === false)
|
|
298
|
+
return true;
|
|
299
|
+
if (typeof suceso.codigo === "number" && suceso.codigo !== 0)
|
|
300
|
+
return true;
|
|
301
|
+
if (suceso.permitido === false)
|
|
302
|
+
return true;
|
|
303
|
+
return false;
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Un span de OTLP a partir de una entrada del libro.
|
|
307
|
+
*
|
|
308
|
+
* `traceId` sale de la sesión y `spanId` de la sesión más el número de
|
|
309
|
+
* secuencia: los sucesos de una misma sesión cuelgan de la misma traza sin que
|
|
310
|
+
* haya que guardar estado en ningún sitio, y dos procesos que exporten el mismo
|
|
311
|
+
* libro producen los mismos identificadores en vez de duplicar la traza.
|
|
312
|
+
*
|
|
313
|
+
* Si el sello de tiempo no se puede leer, los dos tiempos van a cero y el span
|
|
314
|
+
* lo dice en `ada.sello_ilegible`. Poner la hora actual sería inventarse un
|
|
315
|
+
* dato: en un registro de cumplimiento, una hora inventada es peor que un cero.
|
|
316
|
+
*/
|
|
317
|
+
export function spanDeSuceso(entrada) {
|
|
318
|
+
const suceso = (entrada.suceso ?? {});
|
|
319
|
+
const tipo = typeof suceso.tipo === "string" ? suceso.tipo : "desconocido";
|
|
320
|
+
const atributos = atributosDeSuceso(entrada);
|
|
321
|
+
const milis = Date.parse(entrada.ts);
|
|
322
|
+
const ilegible = Number.isNaN(milis);
|
|
323
|
+
if (ilegible)
|
|
324
|
+
atributos["ada.sello_ilegible"] = true;
|
|
325
|
+
const inicio = ilegible ? 0n : BigInt(milis) * 1000000n;
|
|
326
|
+
const duracion = typeof suceso.duracionMs === "number" && suceso.duracionMs > 0 ? BigInt(Math.round(suceso.duracionMs)) : 0n;
|
|
327
|
+
return {
|
|
328
|
+
traceId: hex(`traza:${entrada.sesion}`, 16),
|
|
329
|
+
spanId: hex(`span:${entrada.sesion}:${entrada.seq}`, 8),
|
|
330
|
+
name: `ada.${tipo}`,
|
|
331
|
+
kind: tipo === "red" || tipo === "modelo" ? SPAN_KIND_CLIENT : SPAN_KIND_INTERNAL,
|
|
332
|
+
startTimeUnixNano: String(inicio),
|
|
333
|
+
endTimeUnixNano: String(inicio + duracion * 1000000n),
|
|
334
|
+
attributes: Object.entries(atributos).map(([clave, v]) => atributoOtlp(clave, v)),
|
|
335
|
+
// El estado va sin `message`: el texto de un error es contenido, y este
|
|
336
|
+
// es el hueco por donde se colaria.
|
|
337
|
+
status: { code: fueError(suceso) ? STATUS_ERROR : STATUS_UNSET },
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
/** Lo que se anuncia como productor de las trazas. Nada de esto es un dato del usuario. */
|
|
341
|
+
const RECURSO = [
|
|
342
|
+
["service.name", "ada"],
|
|
343
|
+
["telemetry.sdk.name", "ada-libro-de-sesion"],
|
|
344
|
+
["telemetry.sdk.language", "nodejs"],
|
|
345
|
+
];
|
|
346
|
+
/**
|
|
347
|
+
* El cuerpo `ResourceSpans` de OTLP/JSON, listo para que otro lo suba.
|
|
348
|
+
*
|
|
349
|
+
* La forma es la del estándar y no se improvisa:
|
|
350
|
+
* `resourceSpans[] -> scopeSpans[] -> spans[]`, con `traceId` y `spanId` en
|
|
351
|
+
* hexadecimal y los tiempos en nanosegundos desde epoch como cadena, porque son
|
|
352
|
+
* enteros de 64 bits y un `number` de JavaScript no los sostiene.
|
|
353
|
+
*
|
|
354
|
+
* Una lista vacía devuelve un cuerpo con cero spans y NO un cuerpo vacío: el
|
|
355
|
+
* colector tiene que poder distinguir «esta sesión no tuvo sucesos» de «no se
|
|
356
|
+
* exportó nada».
|
|
357
|
+
*/
|
|
358
|
+
export function cuerpoOtlp(entradas) {
|
|
359
|
+
return {
|
|
360
|
+
resourceSpans: [
|
|
361
|
+
{
|
|
362
|
+
resource: { attributes: RECURSO.map(([clave, v]) => atributoOtlp(clave, v)) },
|
|
363
|
+
scopeSpans: [
|
|
364
|
+
{
|
|
365
|
+
scope: { name: "ada.core.audit.libro", version: "1" },
|
|
366
|
+
spans: entradas.map(spanDeSuceso),
|
|
367
|
+
},
|
|
368
|
+
],
|
|
369
|
+
},
|
|
370
|
+
],
|
|
371
|
+
};
|
|
372
|
+
}
|
|
373
|
+
//# sourceMappingURL=otlp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otlp.js","sourceRoot":"","sources":["../../../src/core/telemetria/otlp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAYzC,MAAM,OAAO,GAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AAErE,kEAAiE;AACjE,MAAM,UAAU,GAAG,CAAC,eAAe,EAAE,WAAW,CAAU,CAAC;AAG3D;;;GAGG;AACH,MAAM,sBAAsB,GAAG,6BAA6B,CAAC;AAC7D,MAAM,uBAAuB,GAAG,6BAA6B,CAAC;AAC9D,MAAM,mBAAmB,GAA+D;IACvF,MAAM,EAAE,EAAE,QAAQ,EAAE,oCAAoC,EAAE,SAAS,EAAE,oCAAoC,EAAE;IAC3G,IAAI,EAAE,EAAE,QAAQ,EAAE,kCAAkC,EAAE,SAAS,EAAE,kCAAkC,EAAE;IACrG,QAAQ,EAAE,EAAE,QAAQ,EAAE,qCAAqC,EAAE,SAAS,EAAE,qCAAqC,EAAE;CAC/G,CAAC;AAEF,qEAAoE;AACpE,SAAS,KAAK,CAAC,GAAsB,EAAE,MAAc,EAAsB;IAC1E,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChD,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC5B,OAAO,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;AAAA,CAC1C;AAED,SAAS,SAAS,CAAC,SAAiB,EAAW;IAC9C,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;QAC/B,OAAO,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;AAAA,CACD;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG,EAAqB;IAC1F,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;IACxD,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAC;IAE1D,MAAM,QAAQ,GAAkC,EAAE,CAAC;IACnD,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,0EAAwE;IACxE,MAAM,iBAAiB,GAAgB,EAAE,CAAC;IAE1C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,YAAY,CAAC;QAChE,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,SAAS,CAAC,IAAI,aAAa,CAAC;QAEnE,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC5B,IAAI,SAAS,KAAK,SAAS;gBAAE,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3D,SAAS;QACV,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,2BAA2B,QAAQ,qCAAqC,CAAC,CAAC;YACjG,SAAS;QACV,CAAC;QACD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC7B,SAAS,CAAC,IAAI,CACb,GAAG,KAAK,mBAAmB,QAAQ,kCAAkC;gBACpE,WAAW,SAAS,CAAC,SAAS,MAAM,uBAAuB,QAAQ,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG;gBAC5F,mCAAmC,CACpC,CAAC;YACF,SAAS;QACV,CAAC;QACD,IAAI,CAAE,UAAgC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5D,SAAS,CAAC,IAAI,CACb,GAAG,KAAK,4BAA4B,SAAS,0CAA0C,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAC/G,CAAC;YACF,SAAS;QACV,CAAC;QACD,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAsB,EAAE,CAAC;IACnE,CAAC;IAED,6EAA4E;IAC5E,uDAAuD;IACvD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IACvE,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAgB,CAAC;IAC1D,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC;QACxG,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,gCAAgC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;IAC1G,CAAC;IAED,8EAA2E;IAC3E,gFAA8E;IAC9E,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,OAAO;YACN,MAAM,EAAE,gBAAgB;YACxB,QAAQ;YACR,MAAM,EACL,gCAAgC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB;gBACrF,OAAO,sBAAsB,yDAAyD;SACvF,CAAC;IACH,CAAC;IACD,OAAO;QACN,MAAM,EAAE,gBAAgB;QACxB,QAAQ;QACR,MAAM,EAAE,2BAA2B,sBAAsB,kDAAkD;KAC3G,CAAC;AAAA,CACF;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,YAAY,GAAqC;IACtD,IAAI,EAAE,iBAAiB;IACvB,OAAO;IACP,MAAM,EAAE,iBAAiB;IACzB,EAAE,EAAE,aAAa;IACjB,QAAQ,EAAE,uBAAuB;IACjC,UAAU;IACV,MAAM,EAAE,oBAAoB;IAC5B,OAAO,EAAE,sBAAsB;IAC/B,MAAM,EAAE,oBAAoB;IAC5B,SAAS;IACT,SAAS,EAAE,sBAAsB;IACjC,MAAM,EAAE,mBAAmB;IAC3B,OAAO,EAAE,2BAA2B;IACpC,MAAM,EAAE,0BAA0B;IAClC,YAAY,EAAE,0BAA0B;IACxC,2CAA0C;IAC1C,KAAK,EAAE,wBAAwB;IAC/B,OAAO,EAAE,0BAA0B;IACnC,IAAI,EAAE,kBAAkB;IACxB,2EAA2E;IAC3E,OAAO,EAAE,iBAAiB;IAC1B,SAAS,EAAE,mBAAmB;IAC9B,iDAAiD;IACjD,MAAM,EAAE,uBAAuB;IAC/B,YAAY,EAAE,mBAAmB;IACjC,SAAS,EAAE,0BAA0B;IACrC,sBAAsB;IACtB,QAAQ,EAAE,qBAAqB;IAC/B,QAAQ,EAAE,oBAAoB;IAC9B,YAAY,EAAE,0BAA0B;IACxC,2CAA2C;IAC3C,KAAK,EAAE,WAAW;IAClB,UAAU,EAAE,iBAAiB;CAC7B,CAAC;AAEF,+EAA+E;AAC/E,MAAM,CAAC,MAAM,iBAAiB,GAAG,2BAA2B,CAAC;AAE7D,uEAAsE;AACtE,MAAM,YAAY,GAAG,GAAG,CAAC;AAEzB;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAAC,SAAkC,EAAY;IAC1E,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,KAAK,MAAM,CAAC,KAAK,EAAE,gBAAgB,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACnE,IAAI,OAAO,gBAAgB,KAAK,QAAQ;YAAE,SAAS;QACnD,IAAI,gBAAgB,CAAC,MAAM,GAAG,YAAY,IAAI,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC;YAAE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxG,CAAC;IACD,OAAO,WAAW,CAAC;AAAA,CACnB;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAwB,EAA6C;IACtG,MAAM,UAAU,GAA8C;QAC7D,YAAY,EAAE,OAAO,CAAC,MAAM;QAC5B,SAAS,EAAE,OAAO,CAAC,GAAG;KACtB,CAAC;IACF,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,KAAK,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;QACxE,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAC1B,WAAW,EAAE,CAAC;YACd,SAAS;QACV,CAAC;QACD,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,SAAS;YAAE,SAAS;QAC9D,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,OAAO,UAAU,KAAK,SAAS,EAAE,CAAC;YACzG,+DAA+D;YAC/D,sEAAqE;YACrE,WAAW,EAAE,CAAC;YACd,SAAS;QACV,CAAC;QACD,UAAU,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC;IACjC,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9C,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;QACzB,WAAW,EAAE,CAAC;IACf,CAAC;IAED,UAAU,CAAC,iBAAiB,CAAC,GAAG,WAAW,CAAC;IAC5C,OAAO,UAAU,CAAC;AAAA,CAClB;AAED,gFAAgF;AAChF,SAAS,GAAG,CAAC,QAAgB,EAAE,KAAa,EAAU;IACrD,OAAO,UAAU,CAAC,QAAQ,CAAC;SACzB,MAAM,CAAC,QAAQ,CAAC;SAChB,MAAM,CAAC,KAAK,CAAC;SACb,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;AAAA,CACtB;AAED,4EAA4E;AAC5E,SAAS,YAAY,CAAC,KAAa,EAAE,gBAA2C,EAAU;IACzF,IAAI,OAAO,gBAAgB,KAAK,SAAS;QAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,EAAE,CAAC;IACzG,IAAI,OAAO,gBAAgB,KAAK,QAAQ,EAAE,CAAC;QAC1C,OAAO,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC;YACxC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,gBAAgB,CAAC,EAAE,EAAE;YAC/D,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,gBAAgB,EAAE,EAAE,CAAC;IAC7D,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,gBAAgB,EAAE,EAAE,CAAC;AAAA,CAChE;AAED,8DAA6D;AAC7D,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAC7B,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAC3B,8EAA6E;AAC7E,MAAM,YAAY,GAAG,CAAC,CAAC;AACvB,MAAM,YAAY,GAAG,CAAC,CAAC;AAEvB,4EAA0E;AAC1E,SAAS,QAAQ,CAAC,MAA+B,EAAW;IAC3D,IAAI,MAAM,CAAC,EAAE,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1E,IAAI,MAAM,CAAC,SAAS,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAC5C,OAAO,KAAK,CAAC;AAAA,CACb;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY,CAAC,OAAwB,EAAU;IAC9D,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAA4B,CAAC;IACjE,MAAM,IAAI,GAAG,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC;IAC3E,MAAM,SAAS,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAE7C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,QAAQ;QAAE,SAAS,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC;IACrD,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,QAAU,CAAC;IAC1D,MAAM,QAAQ,GACb,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,IAAI,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE7G,OAAO;QACN,OAAO,EAAE,GAAG,CAAC,SAAS,OAAO,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC;QAC3C,MAAM,EAAE,GAAG,CAAC,QAAQ,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACvD,IAAI,EAAE,OAAO,IAAI,EAAE;QACnB,IAAI,EAAE,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,kBAAkB;QACjF,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC;QACjC,eAAe,EAAE,MAAM,CAAC,MAAM,GAAG,QAAQ,GAAG,QAAU,CAAC;QACvD,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACjF,wEAAwE;QACxE,oCAAoC;QACpC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,EAAE;KAChE,CAAC;AAAA,CACF;AAED,2FAA2F;AAC3F,MAAM,OAAO,GAA2C;IACvD,CAAC,cAAc,EAAE,KAAK,CAAC;IACvB,CAAC,oBAAoB,EAAE,qBAAqB,CAAC;IAC7C,CAAC,wBAAwB,EAAE,QAAQ,CAAC;CACpC,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,UAAU,CAAC,QAAoC,EAAU;IACxE,OAAO;QACN,aAAa,EAAE;YACd;gBACC,QAAQ,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE;gBAC7E,UAAU,EAAE;oBACX;wBACC,KAAK,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,GAAG,EAAE;wBACrD,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC;qBACjC;iBACD;aACD;SACD;KACD,CAAC;AAAA,CACF","sourcesContent":["/**\n * OTLP que NO PUEDE filtrar contenido.\n *\n * La casilla que marca un comité de compras es «exporta a OpenTelemetry». Eso\n * lo tiene cualquiera: el contrato es un puñado de variables de entorno\n * (`OTEL_EXPORTER_OTLP_ENDPOINT` y compañía) y un JSON con una forma fija. Lo\n * que no tiene cualquiera es exportar SIN convertir el colector de\n * observabilidad del cliente en un tratamiento de datos personales que nadie ha\n * inventariado.\n *\n * El competidor trae una variable para capturar el CUERPO de los mensajes —el\n * patrón se llama `CAPTURE_MESSAGE_CONTENT` en la especificación de OTel para\n * GenAI—. Activarla mete prompts y respuestas del modelo en un almacén de\n * trazas: un segundo depósito de justo aquello que el RGPD manda minimizar, y\n * encima uno del que el DPO no suele saber nada porque lo administra el equipo\n * de plataforma.\n *\n * PROPIEDAD DE DISEÑO, y es lo que este módulo vende:\n *\n * NO EXISTE en este fichero ninguna variable de entorno, opción, parámetro ni\n * bandera que active la exportación de contenido. No es que venga apagada por\n * defecto: es que no está. Una opción apagada la enciende alguien un martes;\n * un mecanismo que no existe no se enciende.\n *\n * Hay una prueba que recorre el fuente de este módulo comprobándolo, con los\n * comentarios quitados —porque este párrafo nombra el patrón que persigue y si\n * no, se acusaría a sí misma—. Ver `test/otlp-sin-contenido.test.ts`.\n *\n * TRES CINTURONES, no uno:\n *\n * 1. `atributosDeSuceso` trabaja con una LISTA BLANCA explícita. Lo que no\n * está, no sale. Es la misma regla que ya cumple `audit/libro.ts`: se\n * registra la FORMA de lo que pasó, nunca su contenido.\n * 2. El descarte es CONTABLE. Sale en `ada.atributos_descartados`, para que\n * «este suceso traía cinco claves que no exporto» sea un dato y no un\n * silencio. Un filtro mudo es indistinguible de un filtro roto.\n * 3. `sinContenido` es la red por debajo: cualquier valor con salto de línea o\n * más largo que 200 caracteres se cae aunque su clave esté en la lista.\n * Sirve para el día en que alguien añada una clave sin pensarlo.\n *\n * LO QUE ESTE MÓDULO NO HACE. No envía nada. Construye el cuerpo y lo devuelve;\n * quien lo suba a un colector es otro, y así este fichero no tiene ninguna\n * salida a la red que auditar.\n */\n\nimport { createHash } from \"node:crypto\";\nimport type { EntradaDelLibro } from \"../audit/libro.ts\";\n\n/** Las tres señales del contrato OTLP. Se nombran en español como el resto. */\nexport type SenalOtlp = \"trazas\" | \"logs\" | \"metricas\";\n\nexport interface ConfiguracionOtlp {\n\testado: \"sin-configurar\" | \"configurada\" | \"invalida\";\n\tporSenal: Partial<Record<SenalOtlp, { endpoint: string; protocolo: \"http/protobuf\" | \"http/json\" }>>;\n\tmotivo: string;\n}\n\nconst SENALES: readonly SenalOtlp[] = [\"trazas\", \"logs\", \"metricas\"];\n\n/** Los dos únicos protocolos que este exportador sabe rendir. */\nconst PROTOCOLOS = [\"http/protobuf\", \"http/json\"] as const;\ntype Protocolo = (typeof PROTOCOLOS)[number];\n\n/**\n * El contrato estándar, tal cual. Los nombres son los de OpenTelemetry y no se\n * traducen: son lo que un comité de compras busca en la documentación.\n */\nconst VARIABLE_ENDPOINT_BASE = \"OTEL_EXPORTER_OTLP_ENDPOINT\";\nconst VARIABLE_PROTOCOLO_BASE = \"OTEL_EXPORTER_OTLP_PROTOCOL\";\nconst VARIABLES_POR_SENAL: Record<SenalOtlp, { endpoint: string; protocolo: string }> = {\n\ttrazas: { endpoint: \"OTEL_EXPORTER_OTLP_TRACES_ENDPOINT\", protocolo: \"OTEL_EXPORTER_OTLP_TRACES_PROTOCOL\" },\n\tlogs: { endpoint: \"OTEL_EXPORTER_OTLP_LOGS_ENDPOINT\", protocolo: \"OTEL_EXPORTER_OTLP_LOGS_PROTOCOL\" },\n\tmetricas: { endpoint: \"OTEL_EXPORTER_OTLP_METRICS_ENDPOINT\", protocolo: \"OTEL_EXPORTER_OTLP_METRICS_PROTOCOL\" },\n};\n\n/** Una variable vacía o con solo espacios cuenta como no puesta. */\nfunction valor(env: NodeJS.ProcessEnv, nombre: string): string | undefined {\n\tconst crudo = env[nombre];\n\tif (typeof crudo !== \"string\") return undefined;\n\tconst limpio = crudo.trim();\n\treturn limpio === \"\" ? undefined : limpio;\n}\n\nfunction esUrlHttp(candidato: string): boolean {\n\ttry {\n\t\tconst url = new URL(candidato);\n\t\treturn url.protocol === \"http:\" || url.protocol === \"https:\";\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/**\n * Lee la configuración del entorno, con TRES estados y sin inventarse nada.\n *\n * La base (`OTEL_EXPORTER_OTLP_ENDPOINT` / `_PROTOCOL`) vale para las tres\n * señales; la variable específica de una señal la sobreescribe.\n *\n * Lo que NO hace, y es deliberado: no cae a `http/protobuf` cuando falta el\n * protocolo, aunque sea el defecto de la especificación. Un endpoint sin\n * protocolo declarado sale como `invalida`. El motivo es el de siempre: elegir\n * en silencio por el operador convierte un despiste suyo en una configuración\n * nuestra, y el día que el colector no reciba nada nadie sabrá por qué.\n */\nexport function configuracionOtlp(env: NodeJS.ProcessEnv = process.env): ConfiguracionOtlp {\n\tconst endpointBase = valor(env, VARIABLE_ENDPOINT_BASE);\n\tconst protocoloBase = valor(env, VARIABLE_PROTOCOLO_BASE);\n\n\tconst porSenal: ConfiguracionOtlp[\"porSenal\"] = {};\n\tconst problemas: string[] = [];\n\t/** Señales con protocolo declarado y ningún endpoint donde mandarlo. */\n\tconst protocoloHuerfano: SenalOtlp[] = [];\n\n\tfor (const senal of SENALES) {\n\t\tconst variables = VARIABLES_POR_SENAL[senal];\n\t\tconst endpoint = valor(env, variables.endpoint) ?? endpointBase;\n\t\tconst protocolo = valor(env, variables.protocolo) ?? protocoloBase;\n\n\t\tif (endpoint === undefined) {\n\t\t\tif (protocolo !== undefined) protocoloHuerfano.push(senal);\n\t\t\tcontinue;\n\t\t}\n\t\tif (!esUrlHttp(endpoint)) {\n\t\t\tproblemas.push(`${senal}: el endpoint recibido (${endpoint}) no es una URL http:// ni https://`);\n\t\t\tcontinue;\n\t\t}\n\t\tif (protocolo === undefined) {\n\t\t\tproblemas.push(\n\t\t\t\t`${senal}: hay endpoint (${endpoint}) y ningun protocolo declarado; ` +\n\t\t\t\t\t`declara ${variables.protocolo} o ${VARIABLE_PROTOCOLO_BASE} con ${PROTOCOLOS.join(\" o \")} ` +\n\t\t\t\t\t\"(no se asume ninguno por defecto)\",\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\t\tif (!(PROTOCOLOS as readonly string[]).includes(protocolo)) {\n\t\t\tproblemas.push(\n\t\t\t\t`${senal}: el protocolo recibido (${protocolo}) no es valido; los unicos validos son ${PROTOCOLOS.join(\" y \")}`,\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\t\tporSenal[senal] = { endpoint, protocolo: protocolo as Protocolo };\n\t}\n\n\t// Una señal mal configurada NO entra en `porSenal`: quien lea esto no puede\n\t// acabar exportando a un sitio que no supimos validar.\n\tif (problemas.length > 0) {\n\t\treturn { estado: \"invalida\", porSenal, motivo: problemas.join(\"; \") };\n\t}\n\n\tconst configuradas = Object.keys(porSenal) as SenalOtlp[];\n\tif (configuradas.length > 0) {\n\t\tconst detalle = configuradas.map((s) => `${s} -> ${porSenal[s]?.endpoint} (${porSenal[s]?.protocolo})`);\n\t\treturn { estado: \"configurada\", porSenal, motivo: `exportacion OTLP activa para ${detalle.join(\", \")}` };\n\t}\n\n\t// El tercer estado se dice entero: «no hay endpoint» y «hay protocolo pero\n\t// no hay endpoint» son dos situaciones distintas para quien la está montando.\n\tif (protocoloHuerfano.length > 0) {\n\t\treturn {\n\t\t\testado: \"sin-configurar\",\n\t\t\tporSenal,\n\t\t\tmotivo:\n\t\t\t\t`hay protocolo declarado para ${protocoloHuerfano.join(\", \")} pero ningun endpoint: ` +\n\t\t\t\t`sin ${VARIABLE_ENDPOINT_BASE} (o el especifico de la senal) no hay nada que exportar`,\n\t\t};\n\t}\n\treturn {\n\t\testado: \"sin-configurar\",\n\t\tporSenal,\n\t\tmotivo: `no hay ninguna variable ${VARIABLE_ENDPOINT_BASE} en el entorno: la exportacion OTLP esta apagada`,\n\t};\n}\n\n/**\n * LA LISTA BLANCA. Clave del suceso -> nombre del atributo OTLP.\n *\n * Todo lo que hay aquí es FORMA: qué pasó, con qué herramienta, cómo acabó,\n * cuánto ocupó. Nada de aquí puede llevar texto del usuario.\n *\n * Lo que NO está, y no por olvido:\n *\n * · `argv` — el texto del comando. Es la clave más golosa y la que más caro\n * sale: un comando lleva rutas, nombres de cliente y a veces un secreto\n * pegado en la línea.\n * · `ruta` — la ruta completa del fichero. El nombre de un fichero ya es un\n * dato: `/casos/2024/despido-<nombre>.docx` identifica a una persona sin\n * que haga falta abrirlo. Del fichero salen sus hashes y nada más.\n * · `motivo` — texto libre de la política. Hoy son frases nuestras; mañana\n * alguien mete ahí lo que el modelo dijo.\n * · `extension` — ruta en disco de la extensión, mismo argumento que `ruta`.\n * · `violaciones` — lista de texto libre del sandbox.\n *\n * Y nunca, en ninguna versión: el prompt, la respuesta del modelo o el\n * contenido de un fichero. No hay clave en `SucesoDeSesion` que los lleve, y\n * este módulo existe para que siga sin haberla.\n */\nconst LISTA_BLANCA: Readonly<Record<string, string>> = {\n\ttipo: \"ada.suceso.tipo\",\n\t// tool\n\tnombre: \"ada.tool.nombre\",\n\tok: \"ada.tool.ok\",\n\tdecision: \"ada.permiso.veredicto\",\n\t// comando\n\tcodigo: \"ada.comando.codigo\",\n\tsandbox: \"ada.comando.encierro\",\n\torigen: \"ada.comando.origen\",\n\t// modelo\n\tproveedor: \"ada.modelo.proveedor\",\n\tmodelo: \"ada.modelo.nombre\",\n\tentrada: \"ada.modelo.tokens_entrada\",\n\tsalida: \"ada.modelo.tokens_salida\",\n\tmotivoParada: \"ada.modelo.motivo_parada\",\n\t// fichero: solo los hashes, jamás la ruta\n\tantes: \"ada.fichero.hash_antes\",\n\tdespues: \"ada.fichero.hash_despues\",\n\ttool: \"ada.fichero.tool\",\n\t// red: el dominio, nunca la ruta ni los parametros (ahi viajan los tokens)\n\tdominio: \"ada.red.dominio\",\n\tpermitido: \"ada.red.permitido\",\n\t// credenciales: el identificador, jamas el valor\n\taccion: \"ada.credencial.accion\",\n\tcredencialId: \"ada.credencial.id\",\n\tresultado: \"ada.credencial.resultado\",\n\t// purga por retencion\n\tpolitica: \"ada.politica.nombre\",\n\tentradas: \"ada.purga.entradas\",\n\thashDeCierre: \"ada.purga.hash_de_cierre\",\n\t// medidas genericas, si el suceso las trae\n\tbytes: \"ada.bytes\",\n\tduracionMs: \"ada.duracion_ms\",\n};\n\n/** Nombre del contador de descartes. Se expone porque las pruebas lo miran. */\nexport const CLAVE_DESCARTADOS = \"ada.atributos_descartados\";\n\n/** Un valor de cadena más largo que esto ya no es forma: es texto. */\nconst LARGO_MAXIMO = 200;\n\n/**\n * Las claves sospechosas de llevar texto libre.\n *\n * Dos señales, las dos baratas y las dos difíciles de fingir por un dato de\n * forma: un salto de línea (un hash no los tiene, un diff sí) y una longitud\n * que ningún identificador nuestro alcanza.\n *\n * Es un cinturón POR ENCIMA de la lista blanca, no un sustituto. Sola dejaría\n * pasar una ruta de 40 caracteres; la lista blanca sola dejaría pasar lo que\n * alguien añada mañana sin pensarlo. Hacen falta las dos.\n */\nexport function sinContenido(atributos: Record<string, unknown>): string[] {\n\tconst sospechosas: string[] = [];\n\tfor (const [clave, valorDelAtributo] of Object.entries(atributos)) {\n\t\tif (typeof valorDelAtributo !== \"string\") continue;\n\t\tif (valorDelAtributo.length > LARGO_MAXIMO || /[\\r\\n]/.test(valorDelAtributo)) sospechosas.push(clave);\n\t}\n\treturn sospechosas;\n}\n\n/**\n * Los atributos de un suceso, filtrados y con el descarte contado.\n *\n * `ada.atributos_descartados` cuenta lo que se quedó fuera: claves que no están\n * en la lista blanca, claves cuyo valor no es un escalar exportable y claves\n * que `sinContenido` marcó. Sin ese número, un filtro que se comiera todo y un\n * suceso que no traía nada darían el mismo span.\n *\n * Una clave de la lista blanca con valor `null` no cuenta como descarte y no\n * sale: en el libro `null` significa «el fichero no existía» o «no había\n * credencial activa», y un atributo ausente en OTLP significa exactamente eso.\n */\nexport function atributosDeSuceso(entrada: EntradaDelLibro): Record<string, string | number | boolean> {\n\tconst candidatos: Record<string, string | number | boolean> = {\n\t\t\"ada.sesion\": entrada.sesion,\n\t\t\"ada.seq\": entrada.seq,\n\t};\n\tlet descartados = 0;\n\n\tfor (const [clave, valorCrudo] of Object.entries(entrada.suceso ?? {})) {\n\t\tconst nombre = LISTA_BLANCA[clave];\n\t\tif (nombre === undefined) {\n\t\t\tdescartados++;\n\t\t\tcontinue;\n\t\t}\n\t\tif (valorCrudo === null || valorCrudo === undefined) continue;\n\t\tif (typeof valorCrudo !== \"string\" && typeof valorCrudo !== \"number\" && typeof valorCrudo !== \"boolean\") {\n\t\t\t// Un objeto o un array en una clave blanca: no se aplana ni se\n\t\t\t// serializa, porque serializar es justo por donde entraría el texto.\n\t\t\tdescartados++;\n\t\t\tcontinue;\n\t\t}\n\t\tcandidatos[nombre] = valorCrudo;\n\t}\n\n\tfor (const clave of sinContenido(candidatos)) {\n\t\tdelete candidatos[clave];\n\t\tdescartados++;\n\t}\n\n\tcandidatos[CLAVE_DESCARTADOS] = descartados;\n\treturn candidatos;\n}\n\n/** Un identificador hexadecimal derivado del suceso, estable entre procesos. */\nfunction hex(material: string, bytes: number): string {\n\treturn createHash(\"sha256\")\n\t\t.update(material)\n\t\t.digest(\"hex\")\n\t\t.slice(0, bytes * 2);\n}\n\n/** El atributo tal y como lo espera OTLP/JSON: clave y valor etiquetado. */\nfunction atributoOtlp(clave: string, valorDelAtributo: string | number | boolean): object {\n\tif (typeof valorDelAtributo === \"boolean\") return { key: clave, value: { boolValue: valorDelAtributo } };\n\tif (typeof valorDelAtributo === \"number\") {\n\t\treturn Number.isInteger(valorDelAtributo)\n\t\t\t? { key: clave, value: { intValue: String(valorDelAtributo) } }\n\t\t\t: { key: clave, value: { doubleValue: valorDelAtributo } };\n\t}\n\treturn { key: clave, value: { stringValue: valorDelAtributo } };\n}\n\n/** Códigos de `SpanKind` de OTLP. Solo se usan estos dos. */\nconst SPAN_KIND_INTERNAL = 1;\nconst SPAN_KIND_CLIENT = 3;\n/** Códigos de `StatusCode`: 0 sin fijar, 2 error. El 1 (`OK`) se reserva. */\nconst STATUS_UNSET = 0;\nconst STATUS_ERROR = 2;\n\n/** ¿El suceso terminó mal? Se mira la forma, nunca el texto del error. */\nfunction fueError(suceso: Record<string, unknown>): boolean {\n\tif (suceso.ok === false) return true;\n\tif (typeof suceso.codigo === \"number\" && suceso.codigo !== 0) return true;\n\tif (suceso.permitido === false) return true;\n\treturn false;\n}\n\n/**\n * Un span de OTLP a partir de una entrada del libro.\n *\n * `traceId` sale de la sesión y `spanId` de la sesión más el número de\n * secuencia: los sucesos de una misma sesión cuelgan de la misma traza sin que\n * haya que guardar estado en ningún sitio, y dos procesos que exporten el mismo\n * libro producen los mismos identificadores en vez de duplicar la traza.\n *\n * Si el sello de tiempo no se puede leer, los dos tiempos van a cero y el span\n * lo dice en `ada.sello_ilegible`. Poner la hora actual sería inventarse un\n * dato: en un registro de cumplimiento, una hora inventada es peor que un cero.\n */\nexport function spanDeSuceso(entrada: EntradaDelLibro): object {\n\tconst suceso = (entrada.suceso ?? {}) as Record<string, unknown>;\n\tconst tipo = typeof suceso.tipo === \"string\" ? suceso.tipo : \"desconocido\";\n\tconst atributos = atributosDeSuceso(entrada);\n\n\tconst milis = Date.parse(entrada.ts);\n\tconst ilegible = Number.isNaN(milis);\n\tif (ilegible) atributos[\"ada.sello_ilegible\"] = true;\n\tconst inicio = ilegible ? 0n : BigInt(milis) * 1_000_000n;\n\tconst duracion =\n\t\ttypeof suceso.duracionMs === \"number\" && suceso.duracionMs > 0 ? BigInt(Math.round(suceso.duracionMs)) : 0n;\n\n\treturn {\n\t\ttraceId: hex(`traza:${entrada.sesion}`, 16),\n\t\tspanId: hex(`span:${entrada.sesion}:${entrada.seq}`, 8),\n\t\tname: `ada.${tipo}`,\n\t\tkind: tipo === \"red\" || tipo === \"modelo\" ? SPAN_KIND_CLIENT : SPAN_KIND_INTERNAL,\n\t\tstartTimeUnixNano: String(inicio),\n\t\tendTimeUnixNano: String(inicio + duracion * 1_000_000n),\n\t\tattributes: Object.entries(atributos).map(([clave, v]) => atributoOtlp(clave, v)),\n\t\t// El estado va sin `message`: el texto de un error es contenido, y este\n\t\t// es el hueco por donde se colaria.\n\t\tstatus: { code: fueError(suceso) ? STATUS_ERROR : STATUS_UNSET },\n\t};\n}\n\n/** Lo que se anuncia como productor de las trazas. Nada de esto es un dato del usuario. */\nconst RECURSO: readonly (readonly [string, string])[] = [\n\t[\"service.name\", \"ada\"],\n\t[\"telemetry.sdk.name\", \"ada-libro-de-sesion\"],\n\t[\"telemetry.sdk.language\", \"nodejs\"],\n];\n\n/**\n * El cuerpo `ResourceSpans` de OTLP/JSON, listo para que otro lo suba.\n *\n * La forma es la del estándar y no se improvisa:\n * `resourceSpans[] -> scopeSpans[] -> spans[]`, con `traceId` y `spanId` en\n * hexadecimal y los tiempos en nanosegundos desde epoch como cadena, porque son\n * enteros de 64 bits y un `number` de JavaScript no los sostiene.\n *\n * Una lista vacía devuelve un cuerpo con cero spans y NO un cuerpo vacío: el\n * colector tiene que poder distinguir «esta sesión no tuvo sucesos» de «no se\n * exportó nada».\n */\nexport function cuerpoOtlp(entradas: readonly EntradaDelLibro[]): object {\n\treturn {\n\t\tresourceSpans: [\n\t\t\t{\n\t\t\t\tresource: { attributes: RECURSO.map(([clave, v]) => atributoOtlp(clave, v)) },\n\t\t\t\tscopeSpans: [\n\t\t\t\t\t{\n\t\t\t\t\t\tscope: { name: \"ada.core.audit.libro\", version: \"1\" },\n\t\t\t\t\t\tspans: entradas.map(spanDeSuceso),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t};\n}\n"]}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Coerción de argumentos para TODAS las herramientas, en el paquete que viaja.
|
|
3
|
+
*
|
|
4
|
+
* POR QUÉ EXISTE. `packages/ai` tiene la misma lógica dentro de
|
|
5
|
+
* `validateToolArguments`, pero ese paquete NO llega al cliente: el tarball de
|
|
6
|
+
* `@hoilab/ada-cli` resuelve `@earendil-works/pi-ai` del registro de npm, así
|
|
7
|
+
* que quien instala recibe el de upstream. Medido: 2.066 ficheros en el
|
|
8
|
+
* paquete, cero de `pi-ai`.
|
|
9
|
+
*
|
|
10
|
+
* `edit` ya quedó cubierto porque tiene su propio `prepareArguments`. Esto lo
|
|
11
|
+
* extiende al resto sin depender de que cada herramienta se acuerde: se aplica
|
|
12
|
+
* en los dos embudos por los que pasan todas.
|
|
13
|
+
*
|
|
14
|
+
* QUÉ ARREGLA, medido contra un modelo gratuito: el modelo manda un argumento
|
|
15
|
+
* que el esquema declara array u objeto **como cadena de JSON**, y encima con
|
|
16
|
+
* caracteres de control crudos dentro —18 tabuladores en la carga real— que el
|
|
17
|
+
* JSON prohíbe. Sin esto, la llamada se rechaza y se pierde el turno entero.
|
|
18
|
+
*
|
|
19
|
+
* LO QUE NO HACE, y es lo que la mantiene honesta:
|
|
20
|
+
*
|
|
21
|
+
* · solo mira las propiedades de primer nivel, que es donde los modelos
|
|
22
|
+
* ponen el JSON en cadena; no reescribe el argumento en profundidad;
|
|
23
|
+
* · solo actúa si el esquema pide array u objeto. Una cadena que se quería
|
|
24
|
+
* cadena no se toca — un comando de `bash` que empieza por `[` sigue
|
|
25
|
+
* siendo un comando;
|
|
26
|
+
* · solo acepta el resultado si parsea EXACTAMENTE al tipo pedido;
|
|
27
|
+
* · si no parsea, devuelve el valor intacto para que el error de validación
|
|
28
|
+
* siga siendo el que le dice al modelo qué forma esperábamos.
|
|
29
|
+
*/
|
|
30
|
+
/**
|
|
31
|
+
* Convierte las propiedades que llegaron como cadena de JSON y deberían ser
|
|
32
|
+
* array u objeto. Devuelve el MISMO objeto si no hubo nada que cambiar, para
|
|
33
|
+
* que quien compare por referencia siga pudiendo.
|
|
34
|
+
*/
|
|
35
|
+
export declare function coercionarArgumentos(args: unknown, parametros: unknown): unknown;
|
|
36
|
+
/**
|
|
37
|
+
* Envuelve una herramienta para que sus argumentos pasen por la coerción.
|
|
38
|
+
*
|
|
39
|
+
* Se compone con el `prepareArguments` que la herramienta ya tuviera: primero
|
|
40
|
+
* la coerción genérica, después el suyo. El orden importa — el de `edit`
|
|
41
|
+
* convierte un edit suelto en una lista de uno, y para eso necesita que `edits`
|
|
42
|
+
* ya sea lo que dice ser.
|
|
43
|
+
*/
|
|
44
|
+
export declare function conCoercionDeArgumentos<T extends {
|
|
45
|
+
parameters?: unknown;
|
|
46
|
+
prepareArguments?: (x: unknown) => unknown;
|
|
47
|
+
}>(herramienta: T): T;
|
|
48
|
+
//# sourceMappingURL=coercion-argumentos.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coercion-argumentos.d.ts","sourceRoot":"","sources":["../../../src/core/tools/coercion-argumentos.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAgBH;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,GAAG,OAAO,CAgChF;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,SAAS;IAAE,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,CAAA;CAAE,EACrH,WAAW,EAAE,CAAC,GACZ,CAAC,CASH","sourcesContent":["/**\n * Coerción de argumentos para TODAS las herramientas, en el paquete que viaja.\n *\n * POR QUÉ EXISTE. `packages/ai` tiene la misma lógica dentro de\n * `validateToolArguments`, pero ese paquete NO llega al cliente: el tarball de\n * `@hoilab/ada-cli` resuelve `@earendil-works/pi-ai` del registro de npm, así\n * que quien instala recibe el de upstream. Medido: 2.066 ficheros en el\n * paquete, cero de `pi-ai`.\n *\n * `edit` ya quedó cubierto porque tiene su propio `prepareArguments`. Esto lo\n * extiende al resto sin depender de que cada herramienta se acuerde: se aplica\n * en los dos embudos por los que pasan todas.\n *\n * QUÉ ARREGLA, medido contra un modelo gratuito: el modelo manda un argumento\n * que el esquema declara array u objeto **como cadena de JSON**, y encima con\n * caracteres de control crudos dentro —18 tabuladores en la carga real— que el\n * JSON prohíbe. Sin esto, la llamada se rechaza y se pierde el turno entero.\n *\n * LO QUE NO HACE, y es lo que la mantiene honesta:\n *\n * · solo mira las propiedades de primer nivel, que es donde los modelos\n * ponen el JSON en cadena; no reescribe el argumento en profundidad;\n * · solo actúa si el esquema pide array u objeto. Una cadena que se quería\n * cadena no se toca — un comando de `bash` que empieza por `[` sigue\n * siendo un comando;\n * · solo acepta el resultado si parsea EXACTAMENTE al tipo pedido;\n * · si no parsea, devuelve el valor intacto para que el error de validación\n * siga siendo el que le dice al modelo qué forma esperábamos.\n */\n\nimport { parsearJsonTolerante } from \"./json-tolerante.ts\";\n\n/** Lo mínimo que necesitamos de un esquema JSON para decidir. */\ninterface EsquemaMinimo {\n\tproperties?: Record<string, { type?: unknown } | undefined>;\n}\n\nfunction tipoDe(esquema: { type?: unknown } | undefined): string[] {\n\tconst t = esquema?.type;\n\tif (typeof t === \"string\") return [t];\n\tif (Array.isArray(t)) return t.filter((x): x is string => typeof x === \"string\");\n\treturn [];\n}\n\n/**\n * Convierte las propiedades que llegaron como cadena de JSON y deberían ser\n * array u objeto. Devuelve el MISMO objeto si no hubo nada que cambiar, para\n * que quien compare por referencia siga pudiendo.\n */\nexport function coercionarArgumentos(args: unknown, parametros: unknown): unknown {\n\tif (!args || typeof args !== \"object\" || Array.isArray(args)) return args;\n\tconst propiedades = (parametros as EsquemaMinimo | undefined)?.properties;\n\tif (!propiedades) return args;\n\n\tconst objeto = args as Record<string, unknown>;\n\tfor (const [clave, esquema] of Object.entries(propiedades)) {\n\t\tconst valor = objeto[clave];\n\t\tif (typeof valor !== \"string\") continue;\n\t\tconst tipos = tipoDe(esquema);\n\t\tconst quiereArray = tipos.includes(\"array\");\n\t\tconst quiereObjeto = tipos.includes(\"object\");\n\t\tif (!quiereArray && !quiereObjeto) continue;\n\n\t\tconst recortado = valor.trim();\n\t\t// El primer carácter descarta casi todo sin pagar un parseo, y evita\n\t\t// convertir `\"12\"` o `\"true\"` en algo que el esquema no pidió.\n\t\tconst abre = quiereArray ? \"[\" : \"{\";\n\t\tif (!recortado.startsWith(abre)) continue;\n\n\t\ttry {\n\t\t\tconst parsed = parsearJsonTolerante(recortado);\n\t\t\tconst encaja = quiereArray\n\t\t\t\t? Array.isArray(parsed)\n\t\t\t\t: typeof parsed === \"object\" && parsed !== null && !Array.isArray(parsed);\n\t\t\tif (encaja) objeto[clave] = parsed;\n\t\t} catch {\n\t\t\t// Intacto a propósito: el error de validación posterior es la pista que\n\t\t\t// el modelo necesita para reintentar con la forma correcta.\n\t\t}\n\t}\n\treturn objeto;\n}\n\n/**\n * Envuelve una herramienta para que sus argumentos pasen por la coerción.\n *\n * Se compone con el `prepareArguments` que la herramienta ya tuviera: primero\n * la coerción genérica, después el suyo. El orden importa — el de `edit`\n * convierte un edit suelto en una lista de uno, y para eso necesita que `edits`\n * ya sea lo que dice ser.\n */\nexport function conCoercionDeArgumentos<T extends { parameters?: unknown; prepareArguments?: (x: unknown) => unknown }>(\n\therramienta: T,\n): T {\n\tconst propio = herramienta.prepareArguments;\n\treturn {\n\t\t...herramienta,\n\t\tprepareArguments: (entrada: unknown) => {\n\t\t\tconst coercionado = coercionarArgumentos(entrada, herramienta.parameters);\n\t\t\treturn propio ? propio(coercionado) : coercionado;\n\t\t},\n\t};\n}\n"]}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Coerción de argumentos para TODAS las herramientas, en el paquete que viaja.
|
|
3
|
+
*
|
|
4
|
+
* POR QUÉ EXISTE. `packages/ai` tiene la misma lógica dentro de
|
|
5
|
+
* `validateToolArguments`, pero ese paquete NO llega al cliente: el tarball de
|
|
6
|
+
* `@hoilab/ada-cli` resuelve `@earendil-works/pi-ai` del registro de npm, así
|
|
7
|
+
* que quien instala recibe el de upstream. Medido: 2.066 ficheros en el
|
|
8
|
+
* paquete, cero de `pi-ai`.
|
|
9
|
+
*
|
|
10
|
+
* `edit` ya quedó cubierto porque tiene su propio `prepareArguments`. Esto lo
|
|
11
|
+
* extiende al resto sin depender de que cada herramienta se acuerde: se aplica
|
|
12
|
+
* en los dos embudos por los que pasan todas.
|
|
13
|
+
*
|
|
14
|
+
* QUÉ ARREGLA, medido contra un modelo gratuito: el modelo manda un argumento
|
|
15
|
+
* que el esquema declara array u objeto **como cadena de JSON**, y encima con
|
|
16
|
+
* caracteres de control crudos dentro —18 tabuladores en la carga real— que el
|
|
17
|
+
* JSON prohíbe. Sin esto, la llamada se rechaza y se pierde el turno entero.
|
|
18
|
+
*
|
|
19
|
+
* LO QUE NO HACE, y es lo que la mantiene honesta:
|
|
20
|
+
*
|
|
21
|
+
* · solo mira las propiedades de primer nivel, que es donde los modelos
|
|
22
|
+
* ponen el JSON en cadena; no reescribe el argumento en profundidad;
|
|
23
|
+
* · solo actúa si el esquema pide array u objeto. Una cadena que se quería
|
|
24
|
+
* cadena no se toca — un comando de `bash` que empieza por `[` sigue
|
|
25
|
+
* siendo un comando;
|
|
26
|
+
* · solo acepta el resultado si parsea EXACTAMENTE al tipo pedido;
|
|
27
|
+
* · si no parsea, devuelve el valor intacto para que el error de validación
|
|
28
|
+
* siga siendo el que le dice al modelo qué forma esperábamos.
|
|
29
|
+
*/
|
|
30
|
+
import { parsearJsonTolerante } from "./json-tolerante.js";
|
|
31
|
+
function tipoDe(esquema) {
|
|
32
|
+
const t = esquema?.type;
|
|
33
|
+
if (typeof t === "string")
|
|
34
|
+
return [t];
|
|
35
|
+
if (Array.isArray(t))
|
|
36
|
+
return t.filter((x) => typeof x === "string");
|
|
37
|
+
return [];
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Convierte las propiedades que llegaron como cadena de JSON y deberían ser
|
|
41
|
+
* array u objeto. Devuelve el MISMO objeto si no hubo nada que cambiar, para
|
|
42
|
+
* que quien compare por referencia siga pudiendo.
|
|
43
|
+
*/
|
|
44
|
+
export function coercionarArgumentos(args, parametros) {
|
|
45
|
+
if (!args || typeof args !== "object" || Array.isArray(args))
|
|
46
|
+
return args;
|
|
47
|
+
const propiedades = parametros?.properties;
|
|
48
|
+
if (!propiedades)
|
|
49
|
+
return args;
|
|
50
|
+
const objeto = args;
|
|
51
|
+
for (const [clave, esquema] of Object.entries(propiedades)) {
|
|
52
|
+
const valor = objeto[clave];
|
|
53
|
+
if (typeof valor !== "string")
|
|
54
|
+
continue;
|
|
55
|
+
const tipos = tipoDe(esquema);
|
|
56
|
+
const quiereArray = tipos.includes("array");
|
|
57
|
+
const quiereObjeto = tipos.includes("object");
|
|
58
|
+
if (!quiereArray && !quiereObjeto)
|
|
59
|
+
continue;
|
|
60
|
+
const recortado = valor.trim();
|
|
61
|
+
// El primer carácter descarta casi todo sin pagar un parseo, y evita
|
|
62
|
+
// convertir `"12"` o `"true"` en algo que el esquema no pidió.
|
|
63
|
+
const abre = quiereArray ? "[" : "{";
|
|
64
|
+
if (!recortado.startsWith(abre))
|
|
65
|
+
continue;
|
|
66
|
+
try {
|
|
67
|
+
const parsed = parsearJsonTolerante(recortado);
|
|
68
|
+
const encaja = quiereArray
|
|
69
|
+
? Array.isArray(parsed)
|
|
70
|
+
: typeof parsed === "object" && parsed !== null && !Array.isArray(parsed);
|
|
71
|
+
if (encaja)
|
|
72
|
+
objeto[clave] = parsed;
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
// Intacto a propósito: el error de validación posterior es la pista que
|
|
76
|
+
// el modelo necesita para reintentar con la forma correcta.
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return objeto;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Envuelve una herramienta para que sus argumentos pasen por la coerción.
|
|
83
|
+
*
|
|
84
|
+
* Se compone con el `prepareArguments` que la herramienta ya tuviera: primero
|
|
85
|
+
* la coerción genérica, después el suyo. El orden importa — el de `edit`
|
|
86
|
+
* convierte un edit suelto en una lista de uno, y para eso necesita que `edits`
|
|
87
|
+
* ya sea lo que dice ser.
|
|
88
|
+
*/
|
|
89
|
+
export function conCoercionDeArgumentos(herramienta) {
|
|
90
|
+
const propio = herramienta.prepareArguments;
|
|
91
|
+
return {
|
|
92
|
+
...herramienta,
|
|
93
|
+
prepareArguments: (entrada) => {
|
|
94
|
+
const coercionado = coercionarArgumentos(entrada, herramienta.parameters);
|
|
95
|
+
return propio ? propio(coercionado) : coercionado;
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=coercion-argumentos.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coercion-argumentos.js","sourceRoot":"","sources":["../../../src/core/tools/coercion-argumentos.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAO3D,SAAS,MAAM,CAAC,OAAuC,EAAY;IAClE,MAAM,CAAC,GAAG,OAAO,EAAE,IAAI,CAAC;IACxB,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACtC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;IACjF,OAAO,EAAE,CAAC;AAAA,CACV;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAa,EAAE,UAAmB,EAAW;IACjF,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1E,MAAM,WAAW,GAAI,UAAwC,EAAE,UAAU,CAAC;IAC1E,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAE9B,MAAM,MAAM,GAAG,IAA+B,CAAC;IAC/C,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,SAAS;QACxC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9B,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,CAAC,WAAW,IAAI,CAAC,YAAY;YAAE,SAAS;QAE5C,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC/B,sEAAqE;QACrE,gEAA+D;QAC/D,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACrC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS;QAE1C,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,WAAW;gBACzB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;gBACvB,CAAC,CAAC,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC3E,IAAI,MAAM;gBAAE,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACR,0EAAwE;YACxE,4DAA4D;QAC7D,CAAC;IACF,CAAC;IACD,OAAO,MAAM,CAAC;AAAA,CACd;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CACtC,WAAc,EACV;IACJ,MAAM,MAAM,GAAG,WAAW,CAAC,gBAAgB,CAAC;IAC5C,OAAO;QACN,GAAG,WAAW;QACd,gBAAgB,EAAE,CAAC,OAAgB,EAAE,EAAE,CAAC;YACvC,MAAM,WAAW,GAAG,oBAAoB,CAAC,OAAO,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;YAC1E,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;QAAA,CAClD;KACD,CAAC;AAAA,CACF","sourcesContent":["/**\n * Coerción de argumentos para TODAS las herramientas, en el paquete que viaja.\n *\n * POR QUÉ EXISTE. `packages/ai` tiene la misma lógica dentro de\n * `validateToolArguments`, pero ese paquete NO llega al cliente: el tarball de\n * `@hoilab/ada-cli` resuelve `@earendil-works/pi-ai` del registro de npm, así\n * que quien instala recibe el de upstream. Medido: 2.066 ficheros en el\n * paquete, cero de `pi-ai`.\n *\n * `edit` ya quedó cubierto porque tiene su propio `prepareArguments`. Esto lo\n * extiende al resto sin depender de que cada herramienta se acuerde: se aplica\n * en los dos embudos por los que pasan todas.\n *\n * QUÉ ARREGLA, medido contra un modelo gratuito: el modelo manda un argumento\n * que el esquema declara array u objeto **como cadena de JSON**, y encima con\n * caracteres de control crudos dentro —18 tabuladores en la carga real— que el\n * JSON prohíbe. Sin esto, la llamada se rechaza y se pierde el turno entero.\n *\n * LO QUE NO HACE, y es lo que la mantiene honesta:\n *\n * · solo mira las propiedades de primer nivel, que es donde los modelos\n * ponen el JSON en cadena; no reescribe el argumento en profundidad;\n * · solo actúa si el esquema pide array u objeto. Una cadena que se quería\n * cadena no se toca — un comando de `bash` que empieza por `[` sigue\n * siendo un comando;\n * · solo acepta el resultado si parsea EXACTAMENTE al tipo pedido;\n * · si no parsea, devuelve el valor intacto para que el error de validación\n * siga siendo el que le dice al modelo qué forma esperábamos.\n */\n\nimport { parsearJsonTolerante } from \"./json-tolerante.ts\";\n\n/** Lo mínimo que necesitamos de un esquema JSON para decidir. */\ninterface EsquemaMinimo {\n\tproperties?: Record<string, { type?: unknown } | undefined>;\n}\n\nfunction tipoDe(esquema: { type?: unknown } | undefined): string[] {\n\tconst t = esquema?.type;\n\tif (typeof t === \"string\") return [t];\n\tif (Array.isArray(t)) return t.filter((x): x is string => typeof x === \"string\");\n\treturn [];\n}\n\n/**\n * Convierte las propiedades que llegaron como cadena de JSON y deberían ser\n * array u objeto. Devuelve el MISMO objeto si no hubo nada que cambiar, para\n * que quien compare por referencia siga pudiendo.\n */\nexport function coercionarArgumentos(args: unknown, parametros: unknown): unknown {\n\tif (!args || typeof args !== \"object\" || Array.isArray(args)) return args;\n\tconst propiedades = (parametros as EsquemaMinimo | undefined)?.properties;\n\tif (!propiedades) return args;\n\n\tconst objeto = args as Record<string, unknown>;\n\tfor (const [clave, esquema] of Object.entries(propiedades)) {\n\t\tconst valor = objeto[clave];\n\t\tif (typeof valor !== \"string\") continue;\n\t\tconst tipos = tipoDe(esquema);\n\t\tconst quiereArray = tipos.includes(\"array\");\n\t\tconst quiereObjeto = tipos.includes(\"object\");\n\t\tif (!quiereArray && !quiereObjeto) continue;\n\n\t\tconst recortado = valor.trim();\n\t\t// El primer carácter descarta casi todo sin pagar un parseo, y evita\n\t\t// convertir `\"12\"` o `\"true\"` en algo que el esquema no pidió.\n\t\tconst abre = quiereArray ? \"[\" : \"{\";\n\t\tif (!recortado.startsWith(abre)) continue;\n\n\t\ttry {\n\t\t\tconst parsed = parsearJsonTolerante(recortado);\n\t\t\tconst encaja = quiereArray\n\t\t\t\t? Array.isArray(parsed)\n\t\t\t\t: typeof parsed === \"object\" && parsed !== null && !Array.isArray(parsed);\n\t\t\tif (encaja) objeto[clave] = parsed;\n\t\t} catch {\n\t\t\t// Intacto a propósito: el error de validación posterior es la pista que\n\t\t\t// el modelo necesita para reintentar con la forma correcta.\n\t\t}\n\t}\n\treturn objeto;\n}\n\n/**\n * Envuelve una herramienta para que sus argumentos pasen por la coerción.\n *\n * Se compone con el `prepareArguments` que la herramienta ya tuviera: primero\n * la coerción genérica, después el suyo. El orden importa — el de `edit`\n * convierte un edit suelto en una lista de uno, y para eso necesita que `edits`\n * ya sea lo que dice ser.\n */\nexport function conCoercionDeArgumentos<T extends { parameters?: unknown; prepareArguments?: (x: unknown) => unknown }>(\n\therramienta: T,\n): T {\n\tconst propio = herramienta.prepareArguments;\n\treturn {\n\t\t...herramienta,\n\t\tprepareArguments: (entrada: unknown) => {\n\t\t\tconst coercionado = coercionarArgumentos(entrada, herramienta.parameters);\n\t\t\treturn propio ? propio(coercionado) : coercionado;\n\t\t},\n\t};\n}\n"]}
|
|
@@ -4,13 +4,6 @@
|
|
|
4
4
|
export declare function detectLineEnding(content: string): "\r\n" | "\n";
|
|
5
5
|
export declare function normalizeToLF(text: string): string;
|
|
6
6
|
export declare function restoreLineEndings(text: string, ending: "\r\n" | "\n"): string;
|
|
7
|
-
/**
|
|
8
|
-
* Normalize text for fuzzy matching. Applies progressive transformations:
|
|
9
|
-
* - Strip trailing whitespace from each line
|
|
10
|
-
* - Normalize smart quotes to ASCII equivalents
|
|
11
|
-
* - Normalize Unicode dashes/hyphens to ASCII hyphen
|
|
12
|
-
* - Normalize special Unicode spaces to regular space
|
|
13
|
-
*/
|
|
14
7
|
export declare function normalizeForFuzzyMatch(text: string): string;
|
|
15
8
|
interface MatchedEdit {
|
|
16
9
|
editIndex: number;
|