@hoilab/ada-cli 0.84.21 → 0.85.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +49 -2
- package/README.es.md +174 -0
- package/README.md +203 -658
- package/dist/ada-publico.d.ts +35 -0
- package/dist/ada-publico.d.ts.map +1 -0
- package/dist/ada-publico.js +40 -0
- package/dist/ada-publico.js.map +1 -0
- package/dist/cli/args.d.ts +3 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +11 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/audit-command.d.ts +15 -0
- package/dist/cli/audit-command.d.ts.map +1 -0
- package/dist/cli/audit-command.js +280 -0
- package/dist/cli/audit-command.js.map +1 -0
- package/dist/cli/banco-command.d.ts +15 -0
- package/dist/cli/banco-command.d.ts.map +1 -0
- package/dist/cli/banco-command.js +213 -0
- package/dist/cli/banco-command.js.map +1 -0
- package/dist/cli/cleanse-command.d.ts +11 -0
- package/dist/cli/cleanse-command.d.ts.map +1 -0
- package/dist/cli/cleanse-command.js +101 -0
- package/dist/cli/cleanse-command.js.map +1 -0
- package/dist/cli/commit-command.d.ts +31 -0
- package/dist/cli/commit-command.d.ts.map +1 -0
- package/dist/cli/commit-command.js +158 -0
- package/dist/cli/commit-command.js.map +1 -0
- package/dist/cli/computer-command.d.ts +12 -0
- package/dist/cli/computer-command.d.ts.map +1 -0
- package/dist/cli/computer-command.js +141 -0
- package/dist/cli/computer-command.js.map +1 -0
- package/dist/cli/discover-command.d.ts +18 -0
- package/dist/cli/discover-command.d.ts.map +1 -0
- package/dist/cli/discover-command.js +108 -0
- package/dist/cli/discover-command.js.map +1 -0
- package/dist/cli/file-processor.d.ts.map +1 -1
- package/dist/cli/file-processor.js +2 -1
- package/dist/cli/file-processor.js.map +1 -1
- package/dist/cli/hashline-command.d.ts +11 -0
- package/dist/cli/hashline-command.d.ts.map +1 -0
- package/dist/cli/hashline-command.js +106 -0
- package/dist/cli/hashline-command.js.map +1 -0
- package/dist/cli/home-screen.d.ts.map +1 -1
- package/dist/cli/home-screen.js +2 -2
- package/dist/cli/home-screen.js.map +1 -1
- package/dist/cli/import-command.d.ts +35 -0
- package/dist/cli/import-command.d.ts.map +1 -0
- package/dist/cli/import-command.js +164 -0
- package/dist/cli/import-command.js.map +1 -0
- package/dist/cli/politica-command.d.ts +20 -0
- package/dist/cli/politica-command.d.ts.map +1 -0
- package/dist/cli/politica-command.js +93 -0
- package/dist/cli/politica-command.js.map +1 -0
- package/dist/cli/refine-command.d.ts +18 -0
- package/dist/cli/refine-command.d.ts.map +1 -0
- package/dist/cli/refine-command.js +101 -0
- package/dist/cli/refine-command.js.map +1 -0
- package/dist/cli/review-command.d.ts +24 -0
- package/dist/cli/review-command.d.ts.map +1 -0
- package/dist/cli/review-command.js +168 -0
- package/dist/cli/review-command.js.map +1 -0
- package/dist/cli/schedule-command.d.ts +17 -0
- package/dist/cli/schedule-command.d.ts.map +1 -0
- package/dist/cli/schedule-command.js +117 -0
- package/dist/cli/schedule-command.js.map +1 -0
- package/dist/cli/serve-command.d.ts +72 -0
- package/dist/cli/serve-command.d.ts.map +1 -0
- package/dist/cli/serve-command.js +568 -0
- package/dist/cli/serve-command.js.map +1 -0
- package/dist/cli/startup-ui.d.ts.map +1 -1
- package/dist/cli/startup-ui.js +9 -3
- package/dist/cli/startup-ui.js.map +1 -1
- package/dist/cli/telegram-command.d.ts +18 -0
- package/dist/cli/telegram-command.d.ts.map +1 -0
- package/dist/cli/telegram-command.js +137 -0
- package/dist/cli/telegram-command.js.map +1 -0
- package/dist/cli/telemetria-command.d.ts +22 -0
- package/dist/cli/telemetria-command.d.ts.map +1 -0
- package/dist/cli/telemetria-command.js +127 -0
- package/dist/cli/telemetria-command.js.map +1 -0
- package/dist/cli/undo-command.d.ts +9 -0
- package/dist/cli/undo-command.d.ts.map +1 -0
- package/dist/cli/undo-command.js +56 -0
- package/dist/cli/undo-command.js.map +1 -0
- package/dist/cli/usage-command.d.ts +10 -0
- package/dist/cli/usage-command.d.ts.map +1 -0
- package/dist/cli/usage-command.js +209 -0
- package/dist/cli/usage-command.js.map +1 -0
- package/dist/cli/wiki-command.d.ts +9 -0
- package/dist/cli/wiki-command.d.ts.map +1 -0
- package/dist/cli/wiki-command.js +76 -0
- package/dist/cli/wiki-command.js.map +1 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +10 -11
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +3 -2
- package/dist/config.js.map +1 -1
- package/dist/core/ada.d.ts +58 -0
- package/dist/core/ada.d.ts.map +1 -0
- package/dist/core/ada.js +61 -0
- package/dist/core/ada.js.map +1 -0
- package/dist/core/advisor/guarda.d.ts +66 -0
- package/dist/core/advisor/guarda.d.ts.map +1 -0
- package/dist/core/advisor/guarda.js +191 -0
- package/dist/core/advisor/guarda.js.map +1 -0
- package/dist/core/advisor/runtime.d.ts +66 -0
- package/dist/core/advisor/runtime.d.ts.map +1 -0
- package/dist/core/advisor/runtime.js +121 -0
- package/dist/core/advisor/runtime.js.map +1 -0
- package/dist/core/advisor/sesion.d.ts +109 -0
- package/dist/core/advisor/sesion.d.ts.map +1 -0
- package/dist/core/advisor/sesion.js +139 -0
- package/dist/core/advisor/sesion.js.map +1 -0
- package/dist/core/agent-session.d.ts +85 -7
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +862 -78
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/agents/loader.d.ts +77 -0
- package/dist/core/agents/loader.d.ts.map +1 -0
- package/dist/core/agents/loader.js +154 -0
- package/dist/core/agents/loader.js.map +1 -0
- package/dist/core/aprobacion/generados.d.ts +37 -0
- package/dist/core/aprobacion/generados.d.ts.map +1 -0
- package/dist/core/aprobacion/generados.js +85 -0
- package/dist/core/aprobacion/generados.js.map +1 -0
- package/dist/core/aprobacion/politica-de-maquina.d.ts +90 -0
- package/dist/core/aprobacion/politica-de-maquina.d.ts.map +1 -0
- package/dist/core/aprobacion/politica-de-maquina.js +212 -0
- package/dist/core/aprobacion/politica-de-maquina.js.map +1 -0
- package/dist/core/aprobacion/politica.d.ts +90 -0
- package/dist/core/aprobacion/politica.d.ts.map +1 -0
- package/dist/core/aprobacion/politica.js +375 -0
- package/dist/core/aprobacion/politica.js.map +1 -0
- package/dist/core/arranque/atajos.d.ts +46 -0
- package/dist/core/arranque/atajos.d.ts.map +1 -0
- package/dist/core/arranque/atajos.js +113 -0
- package/dist/core/arranque/atajos.js.map +1 -0
- package/dist/core/audit/exportacion.d.ts +54 -0
- package/dist/core/audit/exportacion.d.ts.map +1 -0
- package/dist/core/audit/exportacion.js +265 -0
- package/dist/core/audit/exportacion.js.map +1 -0
- package/dist/core/audit/libro.d.ts +318 -0
- package/dist/core/audit/libro.d.ts.map +1 -0
- package/dist/core/audit/libro.js +508 -0
- package/dist/core/audit/libro.js.map +1 -0
- package/dist/core/audit/registro-sesion.d.ts +78 -0
- package/dist/core/audit/registro-sesion.d.ts.map +1 -0
- package/dist/core/audit/registro-sesion.js +202 -0
- package/dist/core/audit/registro-sesion.js.map +1 -0
- package/dist/core/audit/retencion.d.ts +82 -0
- package/dist/core/audit/retencion.d.ts.map +1 -0
- package/dist/core/audit/retencion.js +152 -0
- package/dist/core/audit/retencion.js.map +1 -0
- package/dist/core/audit/rutas.d.ts +23 -0
- package/dist/core/audit/rutas.d.ts.map +1 -0
- package/dist/core/audit/rutas.js +23 -0
- package/dist/core/audit/rutas.js.map +1 -0
- package/dist/core/auth-storage.d.ts +0 -3
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +21 -8
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/banco/almacenamiento.d.ts +18 -0
- package/dist/core/banco/almacenamiento.d.ts.map +1 -0
- package/dist/core/banco/almacenamiento.js +50 -0
- package/dist/core/banco/almacenamiento.js.map +1 -0
- package/dist/core/banco/analisis.d.ts +37 -0
- package/dist/core/banco/analisis.d.ts.map +1 -0
- package/dist/core/banco/analisis.js +164 -0
- package/dist/core/banco/analisis.js.map +1 -0
- package/dist/core/banco/bloques.d.ts +39 -0
- package/dist/core/banco/bloques.d.ts.map +1 -0
- package/dist/core/banco/bloques.js +84 -0
- package/dist/core/banco/bloques.js.map +1 -0
- package/dist/core/banco/cargas.d.ts +84 -0
- package/dist/core/banco/cargas.d.ts.map +1 -0
- package/dist/core/banco/cargas.js +520 -0
- package/dist/core/banco/cargas.js.map +1 -0
- package/dist/core/banco/comparar.d.ts +29 -0
- package/dist/core/banco/comparar.d.ts.map +1 -0
- package/dist/core/banco/comparar.js +28 -0
- package/dist/core/banco/comparar.js.map +1 -0
- package/dist/core/banco/ejecutar.d.ts +44 -0
- package/dist/core/banco/ejecutar.d.ts.map +1 -0
- package/dist/core/banco/ejecutar.js +183 -0
- package/dist/core/banco/ejecutar.js.map +1 -0
- package/dist/core/banco/generar.d.ts +24 -0
- package/dist/core/banco/generar.d.ts.map +1 -0
- package/dist/core/banco/generar.js +159 -0
- package/dist/core/banco/generar.js.map +1 -0
- package/dist/core/banco/mutaciones.d.ts +25 -0
- package/dist/core/banco/mutaciones.d.ts.map +1 -0
- package/dist/core/banco/mutaciones.js +215 -0
- package/dist/core/banco/mutaciones.js.map +1 -0
- package/dist/core/banco/tipos.d.ts +121 -0
- package/dist/core/banco/tipos.d.ts.map +1 -0
- package/dist/core/banco/tipos.js +16 -0
- package/dist/core/banco/tipos.js.map +1 -0
- package/dist/core/blobs/almacen.d.ts +81 -0
- package/dist/core/blobs/almacen.d.ts.map +1 -0
- package/dist/core/blobs/almacen.js +198 -0
- package/dist/core/blobs/almacen.js.map +1 -0
- package/dist/core/blobs/broker.d.ts +103 -0
- package/dist/core/blobs/broker.d.ts.map +1 -0
- package/dist/core/blobs/broker.js +204 -0
- package/dist/core/blobs/broker.js.map +1 -0
- package/dist/core/blobs/index.d.ts +70 -0
- package/dist/core/blobs/index.d.ts.map +1 -0
- package/dist/core/blobs/index.js +232 -0
- package/dist/core/blobs/index.js.map +1 -0
- package/dist/core/blobs/payload.d.ts +55 -0
- package/dist/core/blobs/payload.d.ts.map +1 -0
- package/dist/core/blobs/payload.js +255 -0
- package/dist/core/blobs/payload.js.map +1 -0
- package/dist/core/blobs/proveedor.d.ts +85 -0
- package/dist/core/blobs/proveedor.d.ts.map +1 -0
- package/dist/core/blobs/proveedor.js +196 -0
- package/dist/core/blobs/proveedor.js.map +1 -0
- package/dist/core/browser/cdp.d.ts +41 -0
- package/dist/core/browser/cdp.d.ts.map +1 -0
- package/dist/core/browser/cdp.js +119 -0
- package/dist/core/browser/cdp.js.map +1 -0
- package/dist/core/browser/politica.d.ts +51 -0
- package/dist/core/browser/politica.d.ts.map +1 -0
- package/dist/core/browser/politica.js +123 -0
- package/dist/core/browser/politica.js.map +1 -0
- package/dist/core/browser/sesion.d.ts +52 -0
- package/dist/core/browser/sesion.d.ts.map +1 -0
- package/dist/core/browser/sesion.js +176 -0
- package/dist/core/browser/sesion.js.map +1 -0
- package/dist/core/browser/tools.d.ts +16 -0
- package/dist/core/browser/tools.d.ts.map +1 -0
- package/dist/core/browser/tools.js +279 -0
- package/dist/core/browser/tools.js.map +1 -0
- package/dist/core/commit/diff.d.ts +56 -0
- package/dist/core/commit/diff.d.ts.map +1 -0
- package/dist/core/commit/diff.js +145 -0
- package/dist/core/commit/diff.js.map +1 -0
- package/dist/core/commit/mensaje.d.ts +80 -0
- package/dist/core/commit/mensaje.d.ts.map +1 -0
- package/dist/core/commit/mensaje.js +207 -0
- package/dist/core/commit/mensaje.js.map +1 -0
- package/dist/core/compactar/index.d.ts +52 -0
- package/dist/core/compactar/index.d.ts.map +1 -0
- package/dist/core/compactar/index.js +91 -0
- package/dist/core/compactar/index.js.map +1 -0
- package/dist/core/compactar/registro-denso.d.ts +160 -0
- package/dist/core/compactar/registro-denso.d.ts.map +1 -0
- package/dist/core/compactar/registro-denso.js +620 -0
- package/dist/core/compactar/registro-denso.js.map +1 -0
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js +3 -0
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +4 -3
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +41 -32
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/computer/captura.d.ts +35 -0
- package/dist/core/computer/captura.d.ts.map +1 -0
- package/dist/core/computer/captura.js +140 -0
- package/dist/core/computer/captura.js.map +1 -0
- package/dist/core/computer/driver.d.ts +130 -0
- package/dist/core/computer/driver.d.ts.map +1 -0
- package/dist/core/computer/driver.js +206 -0
- package/dist/core/computer/driver.js.map +1 -0
- package/dist/core/computer/motor/actions.d.ts +109 -0
- package/dist/core/computer/motor/actions.d.ts.map +1 -0
- package/dist/core/computer/motor/actions.js +157 -0
- package/dist/core/computer/motor/actions.js.map +1 -0
- package/dist/core/computer/motor/bridge.d.ts +232 -0
- package/dist/core/computer/motor/bridge.d.ts.map +1 -0
- package/dist/core/computer/motor/bridge.js +2335 -0
- package/dist/core/computer/motor/bridge.js.map +1 -0
- package/dist/core/computer/motor/cdp.d.ts +107 -0
- package/dist/core/computer/motor/cdp.d.ts.map +1 -0
- package/dist/core/computer/motor/cdp.js +659 -0
- package/dist/core/computer/motor/cdp.js.map +1 -0
- package/dist/core/computer/motor/config.d.ts +23 -0
- package/dist/core/computer/motor/config.d.ts.map +1 -0
- package/dist/core/computer/motor/config.js +100 -0
- package/dist/core/computer/motor/config.js.map +1 -0
- package/dist/core/computer/motor/contract.d.ts +81 -0
- package/dist/core/computer/motor/contract.d.ts.map +1 -0
- package/dist/core/computer/motor/contract.js +14 -0
- package/dist/core/computer/motor/contract.js.map +1 -0
- package/dist/core/computer/motor/note.d.ts +37 -0
- package/dist/core/computer/motor/note.d.ts.map +1 -0
- package/dist/core/computer/motor/note.js +162 -0
- package/dist/core/computer/motor/note.js.map +1 -0
- package/dist/core/computer/motor/outline.d.ts +155 -0
- package/dist/core/computer/motor/outline.d.ts.map +1 -0
- package/dist/core/computer/motor/outline.js +590 -0
- package/dist/core/computer/motor/outline.js.map +1 -0
- package/dist/core/computer/motor/output.d.ts +18 -0
- package/dist/core/computer/motor/output.d.ts.map +1 -0
- package/dist/core/computer/motor/output.js +148 -0
- package/dist/core/computer/motor/output.js.map +1 -0
- package/dist/core/computer/motor/permissions.d.ts +41 -0
- package/dist/core/computer/motor/permissions.d.ts.map +1 -0
- package/dist/core/computer/motor/permissions.js +51 -0
- package/dist/core/computer/motor/permissions.js.map +1 -0
- package/dist/core/computer/motor/platform/architecture.d.ts +5 -0
- package/dist/core/computer/motor/platform/architecture.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/architecture.js +21 -0
- package/dist/core/computer/motor/platform/architecture.js.map +1 -0
- package/dist/core/computer/motor/platform/coerce.d.ts +4 -0
- package/dist/core/computer/motor/platform/coerce.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/coerce.js +17 -0
- package/dist/core/computer/motor/platform/coerce.js.map +1 -0
- package/dist/core/computer/motor/platform/index.d.ts +4 -0
- package/dist/core/computer/motor/platform/index.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/index.js +79 -0
- package/dist/core/computer/motor/platform/index.js.map +1 -0
- package/dist/core/computer/motor/platform/linux/backend.d.ts +3 -0
- package/dist/core/computer/motor/platform/linux/backend.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/linux/backend.js +173 -0
- package/dist/core/computer/motor/platform/linux/backend.js.map +1 -0
- package/dist/core/computer/motor/platform/linux/helper.d.ts +29 -0
- package/dist/core/computer/motor/platform/linux/helper.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/linux/helper.js +261 -0
- package/dist/core/computer/motor/platform/linux/helper.js.map +1 -0
- package/dist/core/computer/motor/platform/macos/backend.d.ts +3 -0
- package/dist/core/computer/motor/platform/macos/backend.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/macos/backend.js +124 -0
- package/dist/core/computer/motor/platform/macos/backend.js.map +1 -0
- package/dist/core/computer/motor/platform/macos/browser.d.ts +7 -0
- package/dist/core/computer/motor/platform/macos/browser.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/macos/browser.js +101 -0
- package/dist/core/computer/motor/platform/macos/browser.js.map +1 -0
- package/dist/core/computer/motor/platform/macos/helper-path.mjs +34 -0
- package/dist/core/computer/motor/platform/macos/helper.d.ts +32 -0
- package/dist/core/computer/motor/platform/macos/helper.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/macos/helper.js +277 -0
- package/dist/core/computer/motor/platform/macos/helper.js.map +1 -0
- package/dist/core/computer/motor/platform/macos/permissions.d.ts +4 -0
- package/dist/core/computer/motor/platform/macos/permissions.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/macos/permissions.js +118 -0
- package/dist/core/computer/motor/platform/macos/permissions.js.map +1 -0
- package/dist/core/computer/motor/platform/types.d.ts +263 -0
- package/dist/core/computer/motor/platform/types.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/types.js +2 -0
- package/dist/core/computer/motor/platform/types.js.map +1 -0
- package/dist/core/computer/motor/platform/windows/backend.d.ts +3 -0
- package/dist/core/computer/motor/platform/windows/backend.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/windows/backend.js +163 -0
- package/dist/core/computer/motor/platform/windows/backend.js.map +1 -0
- package/dist/core/computer/motor/platform/windows/helper.d.ts +18 -0
- package/dist/core/computer/motor/platform/windows/helper.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/windows/helper.js +174 -0
- package/dist/core/computer/motor/platform/windows/helper.js.map +1 -0
- package/dist/core/computer/motor/root-selection.d.ts +6 -0
- package/dist/core/computer/motor/root-selection.d.ts.map +1 -0
- package/dist/core/computer/motor/root-selection.js +28 -0
- package/dist/core/computer/motor/root-selection.js.map +1 -0
- package/dist/core/computer/motor/runtime.d.ts +50 -0
- package/dist/core/computer/motor/runtime.d.ts.map +1 -0
- package/dist/core/computer/motor/runtime.js +119 -0
- package/dist/core/computer/motor/runtime.js.map +1 -0
- package/dist/core/computer/motor/state.d.ts +68 -0
- package/dist/core/computer/motor/state.d.ts.map +1 -0
- package/dist/core/computer/motor/state.js +100 -0
- package/dist/core/computer/motor/state.js.map +1 -0
- package/dist/core/computer/motor/view.d.ts +6 -0
- package/dist/core/computer/motor/view.d.ts.map +1 -0
- package/dist/core/computer/motor/view.js +185 -0
- package/dist/core/computer/motor/view.js.map +1 -0
- package/dist/core/computer/motor-ada.d.ts +159 -0
- package/dist/core/computer/motor-ada.d.ts.map +1 -0
- package/dist/core/computer/motor-ada.js +412 -0
- package/dist/core/computer/motor-ada.js.map +1 -0
- package/dist/core/computer/politica.d.ts +56 -0
- package/dist/core/computer/politica.d.ts.map +1 -0
- package/dist/core/computer/politica.js +163 -0
- package/dist/core/computer/politica.js.map +1 -0
- package/dist/core/computer/tools.d.ts +26 -0
- package/dist/core/computer/tools.d.ts.map +1 -0
- package/dist/core/computer/tools.js +399 -0
- package/dist/core/computer/tools.js.map +1 -0
- package/dist/core/context-breakdown.d.ts +80 -0
- package/dist/core/context-breakdown.d.ts.map +1 -0
- package/dist/core/context-breakdown.js +87 -0
- package/dist/core/context-breakdown.js.map +1 -0
- package/dist/core/credenciales/cliente.d.ts +60 -0
- package/dist/core/credenciales/cliente.d.ts.map +1 -0
- package/dist/core/credenciales/cliente.js +81 -0
- package/dist/core/credenciales/cliente.js.map +1 -0
- package/dist/core/credenciales/pool.d.ts +96 -0
- package/dist/core/credenciales/pool.d.ts.map +1 -0
- package/dist/core/credenciales/pool.js +128 -0
- package/dist/core/credenciales/pool.js.map +1 -0
- package/dist/core/credenciales/reposo.d.ts +93 -0
- package/dist/core/credenciales/reposo.d.ts.map +1 -0
- package/dist/core/credenciales/reposo.js +489 -0
- package/dist/core/credenciales/reposo.js.map +1 -0
- package/dist/core/credenciales/servidor.d.ts +55 -0
- package/dist/core/credenciales/servidor.d.ts.map +1 -0
- package/dist/core/credenciales/servidor.js +205 -0
- package/dist/core/credenciales/servidor.js.map +1 -0
- package/dist/core/defaults.d.ts +1 -0
- package/dist/core/defaults.d.ts.map +1 -1
- package/dist/core/defaults.js +9 -0
- package/dist/core/defaults.js.map +1 -1
- package/dist/core/descubrimiento/comandos.d.ts +30 -0
- package/dist/core/descubrimiento/comandos.d.ts.map +1 -0
- package/dist/core/descubrimiento/comandos.js +76 -0
- package/dist/core/descubrimiento/comandos.js.map +1 -0
- package/dist/core/descubrimiento/mcp.d.ts +42 -0
- package/dist/core/descubrimiento/mcp.d.ts.map +1 -0
- package/dist/core/descubrimiento/mcp.js +130 -0
- package/dist/core/descubrimiento/mcp.js.map +1 -0
- package/dist/core/descubrimiento/reglas.d.ts +61 -0
- package/dist/core/descubrimiento/reglas.d.ts.map +1 -0
- package/dist/core/descubrimiento/reglas.js +134 -0
- package/dist/core/descubrimiento/reglas.js.map +1 -0
- package/dist/core/descubrimiento/skills.d.ts +57 -0
- package/dist/core/descubrimiento/skills.d.ts.map +1 -0
- package/dist/core/descubrimiento/skills.js +113 -0
- package/dist/core/descubrimiento/skills.js.map +1 -0
- package/dist/core/dificultad/clasificador.d.ts +133 -0
- package/dist/core/dificultad/clasificador.d.ts.map +1 -0
- package/dist/core/dificultad/clasificador.js +288 -0
- package/dist/core/dificultad/clasificador.js.map +1 -0
- package/dist/core/edicion/diario.d.ts +37 -0
- package/dist/core/edicion/diario.d.ts.map +1 -0
- package/dist/core/edicion/diario.js +51 -0
- package/dist/core/edicion/diario.js.map +1 -0
- package/dist/core/edicion/hashline.d.ts +71 -0
- package/dist/core/edicion/hashline.d.ts.map +1 -0
- package/dist/core/edicion/hashline.js +111 -0
- package/dist/core/edicion/hashline.js.map +1 -0
- package/dist/core/edicion/hueco.d.ts +64 -0
- package/dist/core/edicion/hueco.d.ts.map +1 -0
- package/dist/core/edicion/hueco.js +162 -0
- package/dist/core/edicion/hueco.js.map +1 -0
- package/dist/core/edicion/limpiar-carga.d.ts +39 -0
- package/dist/core/edicion/limpiar-carga.d.ts.map +1 -0
- package/dist/core/edicion/limpiar-carga.js +121 -0
- package/dist/core/edicion/limpiar-carga.js.map +1 -0
- package/dist/core/edicion/observador.d.ts +80 -0
- package/dist/core/edicion/observador.d.ts.map +1 -0
- package/dist/core/edicion/observador.js +183 -0
- package/dist/core/edicion/observador.js.map +1 -0
- package/dist/core/edicion/parecido.d.ts +53 -0
- package/dist/core/edicion/parecido.d.ts.map +1 -0
- package/dist/core/edicion/parecido.js +145 -0
- package/dist/core/edicion/parecido.js.map +1 -0
- package/dist/core/edicion/parseo.d.ts +58 -0
- package/dist/core/edicion/parseo.d.ts.map +1 -0
- package/dist/core/edicion/parseo.js +124 -0
- package/dist/core/edicion/parseo.js.map +1 -0
- package/dist/core/edicion/reparacion.d.ts +67 -0
- package/dist/core/edicion/reparacion.d.ts.map +1 -0
- package/dist/core/edicion/reparacion.js +202 -0
- package/dist/core/edicion/reparacion.js.map +1 -0
- package/dist/core/edicion/sangria.d.ts +121 -0
- package/dist/core/edicion/sangria.d.ts.map +1 -0
- package/dist/core/edicion/sangria.js +341 -0
- package/dist/core/edicion/sangria.js.map +1 -0
- package/dist/core/edicion/tipos.d.ts +58 -0
- package/dist/core/edicion/tipos.d.ts.map +1 -0
- package/dist/core/edicion/tipos.js +160 -0
- package/dist/core/edicion/tipos.js.map +1 -0
- package/dist/core/engine-personality.d.ts +12 -0
- package/dist/core/engine-personality.d.ts.map +1 -0
- package/dist/core/engine-personality.js +53 -0
- package/dist/core/engine-personality.js.map +1 -0
- package/dist/core/errores/proveedor.d.ts +53 -0
- package/dist/core/errores/proveedor.d.ts.map +1 -0
- package/dist/core/errores/proveedor.js +191 -0
- package/dist/core/errores/proveedor.js.map +1 -0
- package/dist/core/estructural/buscar.d.ts +61 -0
- package/dist/core/estructural/buscar.d.ts.map +1 -0
- package/dist/core/estructural/buscar.js +261 -0
- package/dist/core/estructural/buscar.js.map +1 -0
- package/dist/core/estructural/editar.d.ts +36 -0
- package/dist/core/estructural/editar.d.ts.map +1 -0
- package/dist/core/estructural/editar.js +123 -0
- package/dist/core/estructural/editar.js.map +1 -0
- package/dist/core/estructural/tools.d.ts +11 -0
- package/dist/core/estructural/tools.d.ts.map +1 -0
- package/dist/core/estructural/tools.js +100 -0
- package/dist/core/estructural/tools.js.map +1 -0
- package/dist/core/experimental.d.ts.map +1 -1
- package/dist/core/experimental.js +10 -1
- package/dist/core/experimental.js.map +1 -1
- package/dist/core/extensiones/suplantacion.d.ts +49 -0
- package/dist/core/extensiones/suplantacion.d.ts.map +1 -0
- package/dist/core/extensiones/suplantacion.js +61 -0
- package/dist/core/extensiones/suplantacion.js.map +1 -0
- package/dist/core/extensiones/vigilancia.d.ts +54 -0
- package/dist/core/extensiones/vigilancia.d.ts.map +1 -0
- package/dist/core/extensiones/vigilancia.js +217 -0
- package/dist/core/extensiones/vigilancia.js.map +1 -0
- package/dist/core/extensions/index.d.ts +1 -1
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +21 -6
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/types.d.ts +23 -4
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/harness/fuentes-de-contexto.d.ts +29 -0
- package/dist/core/harness/fuentes-de-contexto.d.ts.map +1 -0
- package/dist/core/harness/fuentes-de-contexto.js +44 -0
- package/dist/core/harness/fuentes-de-contexto.js.map +1 -0
- package/dist/core/harness/refine.d.ts +40 -0
- package/dist/core/harness/refine.d.ts.map +1 -0
- package/dist/core/harness/refine.js +109 -0
- package/dist/core/harness/refine.js.map +1 -0
- package/dist/core/harness/store.d.ts +75 -0
- package/dist/core/harness/store.d.ts.map +1 -0
- package/dist/core/harness/store.js +149 -0
- package/dist/core/harness/store.js.map +1 -0
- package/dist/core/hooks/contract.d.ts +85 -0
- package/dist/core/hooks/contract.d.ts.map +1 -0
- package/dist/core/hooks/contract.js +140 -0
- package/dist/core/hooks/contract.js.map +1 -0
- package/dist/core/hooks/runner.d.ts +42 -0
- package/dist/core/hooks/runner.d.ts.map +1 -0
- package/dist/core/hooks/runner.js +85 -0
- package/dist/core/hooks/runner.js.map +1 -0
- package/dist/core/hooks/session-hooks.d.ts +62 -0
- package/dist/core/hooks/session-hooks.d.ts.map +1 -0
- package/dist/core/hooks/session-hooks.js +84 -0
- package/dist/core/hooks/session-hooks.js.map +1 -0
- package/dist/core/importar/formatos.d.ts +69 -0
- package/dist/core/importar/formatos.d.ts.map +1 -0
- package/dist/core/importar/formatos.js +235 -0
- package/dist/core/importar/formatos.js.map +1 -0
- package/dist/core/interactivo/deteccion.d.ts +44 -0
- package/dist/core/interactivo/deteccion.d.ts.map +1 -0
- package/dist/core/interactivo/deteccion.js +82 -0
- package/dist/core/interactivo/deteccion.js.map +1 -0
- package/dist/core/interactivo/sesion.d.ts +50 -0
- package/dist/core/interactivo/sesion.d.ts.map +1 -0
- package/dist/core/interactivo/sesion.js +156 -0
- package/dist/core/interactivo/sesion.js.map +1 -0
- package/dist/core/interactivo/tools.d.ts +21 -0
- package/dist/core/interactivo/tools.d.ts.map +1 -0
- package/dist/core/interactivo/tools.js +122 -0
- package/dist/core/interactivo/tools.js.map +1 -0
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +2 -1
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/lectura/mapa.d.ts +70 -0
- package/dist/core/lectura/mapa.d.ts.map +1 -0
- package/dist/core/lectura/mapa.js +177 -0
- package/dist/core/lectura/mapa.js.map +1 -0
- package/dist/core/lectura/pdf.d.ts +49 -0
- package/dist/core/lectura/pdf.d.ts.map +1 -0
- package/dist/core/lectura/pdf.js +337 -0
- package/dist/core/lectura/pdf.js.map +1 -0
- package/dist/core/limpieza/comprobadores.d.ts +28 -0
- package/dist/core/limpieza/comprobadores.d.ts.map +1 -0
- package/dist/core/limpieza/comprobadores.js +311 -0
- package/dist/core/limpieza/comprobadores.js.map +1 -0
- package/dist/core/limpieza/parseo.d.ts +19 -0
- package/dist/core/limpieza/parseo.d.ts.map +1 -0
- package/dist/core/limpieza/parseo.js +124 -0
- package/dist/core/limpieza/parseo.js.map +1 -0
- package/dist/core/limpieza/reparacion.d.ts +77 -0
- package/dist/core/limpieza/reparacion.d.ts.map +1 -0
- package/dist/core/limpieza/reparacion.js +254 -0
- package/dist/core/limpieza/reparacion.js.map +1 -0
- package/dist/core/limpieza/tipos.d.ts +56 -0
- package/dist/core/limpieza/tipos.d.ts.map +1 -0
- package/dist/core/limpieza/tipos.js +9 -0
- package/dist/core/limpieza/tipos.js.map +1 -0
- package/dist/core/lsp/cliente.d.ts +52 -0
- package/dist/core/lsp/cliente.d.ts.map +1 -0
- package/dist/core/lsp/cliente.js +232 -0
- package/dist/core/lsp/cliente.js.map +1 -0
- package/dist/core/lsp/descubrimiento.d.ts +62 -0
- package/dist/core/lsp/descubrimiento.d.ts.map +1 -0
- package/dist/core/lsp/descubrimiento.js +152 -0
- package/dist/core/lsp/descubrimiento.js.map +1 -0
- package/dist/core/lsp/ediciones.d.ts +59 -0
- package/dist/core/lsp/ediciones.d.ts.map +1 -0
- package/dist/core/lsp/ediciones.js +89 -0
- package/dist/core/lsp/ediciones.js.map +1 -0
- package/dist/core/lsp/extension.d.ts +28 -0
- package/dist/core/lsp/extension.d.ts.map +1 -0
- package/dist/core/lsp/extension.js +34 -0
- package/dist/core/lsp/extension.js.map +1 -0
- package/dist/core/lsp/tools.d.ts +45 -0
- package/dist/core/lsp/tools.d.ts.map +1 -0
- package/dist/core/lsp/tools.js +265 -0
- package/dist/core/lsp/tools.js.map +1 -0
- package/dist/core/mcp/client.d.ts +60 -0
- package/dist/core/mcp/client.d.ts.map +1 -0
- package/dist/core/mcp/client.js +139 -0
- package/dist/core/mcp/client.js.map +1 -0
- package/dist/core/mcp/manager.d.ts +86 -0
- package/dist/core/mcp/manager.d.ts.map +1 -0
- package/dist/core/mcp/manager.js +124 -0
- package/dist/core/mcp/manager.js.map +1 -0
- package/dist/core/mcp/tools.d.ts +15 -0
- package/dist/core/mcp/tools.d.ts.map +1 -0
- package/dist/core/mcp/tools.js +84 -0
- package/dist/core/mcp/tools.js.map +1 -0
- package/dist/core/memory-engine/audit-export.d.ts +56 -0
- package/dist/core/memory-engine/audit-export.d.ts.map +1 -0
- package/dist/core/memory-engine/audit-export.js +100 -0
- package/dist/core/memory-engine/audit-export.js.map +1 -0
- package/dist/core/memory-engine/audit-indice.d.ts +153 -0
- package/dist/core/memory-engine/audit-indice.d.ts.map +1 -0
- package/dist/core/memory-engine/audit-indice.js +271 -0
- package/dist/core/memory-engine/audit-indice.js.map +1 -0
- package/dist/core/memory-engine/audit.d.ts +18 -6
- package/dist/core/memory-engine/audit.d.ts.map +1 -1
- package/dist/core/memory-engine/audit.js +32 -50
- package/dist/core/memory-engine/audit.js.map +1 -1
- package/dist/core/memory-engine/engine.d.ts +21 -4
- package/dist/core/memory-engine/engine.d.ts.map +1 -1
- package/dist/core/memory-engine/engine.js +219 -55
- package/dist/core/memory-engine/engine.js.map +1 -1
- package/dist/core/memory-engine/inverted-index.d.ts.map +1 -1
- package/dist/core/memory-engine/inverted-index.js +67 -10
- package/dist/core/memory-engine/inverted-index.js.map +1 -1
- package/dist/core/memory-engine/keychain.d.ts.map +1 -1
- package/dist/core/memory-engine/keychain.js +1 -6
- package/dist/core/memory-engine/keychain.js.map +1 -1
- package/dist/core/memory-engine/observation-store.d.ts +0 -1
- package/dist/core/memory-engine/observation-store.d.ts.map +1 -1
- package/dist/core/memory-engine/observation-store.js +40 -12
- package/dist/core/memory-engine/observation-store.js.map +1 -1
- package/dist/core/memory-engine/refinements.d.ts +51 -0
- package/dist/core/memory-engine/refinements.d.ts.map +1 -0
- package/dist/core/memory-engine/refinements.js +99 -0
- package/dist/core/memory-engine/refinements.js.map +1 -0
- package/dist/core/memory-engine/scanner.d.ts.map +1 -1
- package/dist/core/memory-engine/scanner.js +25 -5
- package/dist/core/memory-engine/scanner.js.map +1 -1
- package/dist/core/memory-engine/security.d.ts.map +1 -1
- package/dist/core/memory-engine/security.js +131 -23
- package/dist/core/memory-engine/security.js.map +1 -1
- package/dist/core/memory-engine/session-indexer.d.ts.map +1 -1
- package/dist/core/memory-engine/session-indexer.js +8 -2
- package/dist/core/memory-engine/session-indexer.js.map +1 -1
- package/dist/core/memory-engine/tools.d.ts +2 -2
- package/dist/core/memory-engine/tools.d.ts.map +1 -1
- package/dist/core/memory-engine/tools.js +41 -8
- package/dist/core/memory-engine/tools.js.map +1 -1
- package/dist/core/memory-engine/types.d.ts +2 -0
- package/dist/core/memory-engine/types.d.ts.map +1 -1
- package/dist/core/memory-engine/types.js.map +1 -1
- package/dist/core/memory-engine/vault.d.ts.map +1 -1
- package/dist/core/memory-engine/vault.js +2 -2
- package/dist/core/memory-engine/vault.js.map +1 -1
- package/dist/core/model-config.d.ts.map +1 -1
- package/dist/core/model-config.js +2 -1
- package/dist/core/model-config.js.map +1 -1
- package/dist/core/model-resolver.d.ts +1 -0
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +19 -7
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/models-store.d.ts.map +1 -1
- package/dist/core/models-store.js +2 -1
- package/dist/core/models-store.js.map +1 -1
- package/dist/core/muestreo-restringido.d.ts +49 -0
- package/dist/core/muestreo-restringido.d.ts.map +1 -0
- package/dist/core/muestreo-restringido.js +65 -0
- package/dist/core/muestreo-restringido.js.map +1 -0
- package/dist/core/orphan-process-journal.d.ts +48 -0
- package/dist/core/orphan-process-journal.d.ts.map +1 -0
- package/dist/core/orphan-process-journal.js +116 -0
- package/dist/core/orphan-process-journal.js.map +1 -0
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +11 -6
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/pi-manifest.d.ts.map +1 -1
- package/dist/core/pi-manifest.js +2 -1
- package/dist/core/pi-manifest.js.map +1 -1
- package/dist/core/privacidad/categorias-especiales.d.ts +186 -0
- package/dist/core/privacidad/categorias-especiales.d.ts.map +1 -0
- package/dist/core/privacidad/categorias-especiales.js +745 -0
- package/dist/core/privacidad/categorias-especiales.js.map +1 -0
- package/dist/core/privacidad/tapar.d.ts +48 -0
- package/dist/core/privacidad/tapar.d.ts.map +1 -0
- package/dist/core/privacidad/tapar.js +66 -0
- package/dist/core/privacidad/tapar.js.map +1 -0
- package/dist/core/prompt-cache/diagnostics.d.ts +33 -0
- package/dist/core/prompt-cache/diagnostics.d.ts.map +1 -0
- package/dist/core/prompt-cache/diagnostics.js +100 -0
- package/dist/core/prompt-cache/diagnostics.js.map +1 -0
- package/dist/core/prompt-cache/index.d.ts +33 -0
- package/dist/core/prompt-cache/index.d.ts.map +1 -0
- package/dist/core/prompt-cache/index.js +189 -0
- package/dist/core/prompt-cache/index.js.map +1 -0
- package/dist/core/prompt-cache/payload.d.ts +58 -0
- package/dist/core/prompt-cache/payload.d.ts.map +1 -0
- package/dist/core/prompt-cache/payload.js +122 -0
- package/dist/core/prompt-cache/payload.js.map +1 -0
- package/dist/core/prompt-cache/stabilize.d.ts +65 -0
- package/dist/core/prompt-cache/stabilize.d.ts.map +1 -0
- package/dist/core/prompt-cache/stabilize.js +137 -0
- package/dist/core/prompt-cache/stabilize.js.map +1 -0
- package/dist/core/prompt-cache/stats.d.ts +55 -0
- package/dist/core/prompt-cache/stats.d.ts.map +1 -0
- package/dist/core/prompt-cache/stats.js +158 -0
- package/dist/core/prompt-cache/stats.js.map +1 -0
- package/dist/core/prompt-eleccion.d.ts +38 -0
- package/dist/core/prompt-eleccion.d.ts.map +1 -0
- package/dist/core/prompt-eleccion.js +46 -0
- package/dist/core/prompt-eleccion.js.map +1 -0
- package/dist/core/prompt-optimizer.d.ts +53 -0
- package/dist/core/prompt-optimizer.d.ts.map +1 -0
- package/dist/core/prompt-optimizer.js +138 -0
- package/dist/core/prompt-optimizer.js.map +1 -0
- package/dist/core/prompts/montar.d.ts +75 -0
- package/dist/core/prompts/montar.d.ts.map +1 -0
- package/dist/core/prompts/montar.js +146 -0
- package/dist/core/prompts/montar.js.map +1 -0
- package/dist/core/prompts/plantilla.d.ts +54 -0
- package/dist/core/prompts/plantilla.d.ts.map +1 -0
- package/dist/core/prompts/plantilla.js +153 -0
- package/dist/core/prompts/plantilla.js.map +1 -0
- package/dist/core/prompts/sistema.md +134 -0
- package/dist/core/provider-attribution.d.ts +24 -2
- package/dist/core/provider-attribution.d.ts.map +1 -1
- package/dist/core/provider-attribution.js +24 -42
- package/dist/core/provider-attribution.js.map +1 -1
- package/dist/core/remote-catalog-provider.d.ts.map +1 -1
- package/dist/core/remote-catalog-provider.js +2 -1
- package/dist/core/remote-catalog-provider.js.map +1 -1
- package/dist/core/remoto/destino.d.ts +38 -0
- package/dist/core/remoto/destino.d.ts.map +1 -0
- package/dist/core/remoto/destino.js +105 -0
- package/dist/core/remoto/destino.js.map +1 -0
- package/dist/core/remoto/ejecutor.d.ts +59 -0
- package/dist/core/remoto/ejecutor.d.ts.map +1 -0
- package/dist/core/remoto/ejecutor.js +225 -0
- package/dist/core/remoto/ejecutor.js.map +1 -0
- package/dist/core/remoto/ficheros.d.ts +29 -0
- package/dist/core/remoto/ficheros.d.ts.map +1 -0
- package/dist/core/remoto/ficheros.js +90 -0
- package/dist/core/remoto/ficheros.js.map +1 -0
- package/dist/core/remoto/registro-extension.d.ts +15 -0
- package/dist/core/remoto/registro-extension.d.ts.map +1 -0
- package/dist/core/remoto/registro-extension.js +17 -0
- package/dist/core/remoto/registro-extension.js.map +1 -0
- package/dist/core/remoto/tools.d.ts +28 -0
- package/dist/core/remoto/tools.d.ts.map +1 -0
- package/dist/core/remoto/tools.js +31 -0
- package/dist/core/remoto/tools.js.map +1 -0
- package/dist/core/resource-loader.d.ts +58 -0
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +326 -8
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/revision/hallazgo.d.ts +51 -0
- package/dist/core/revision/hallazgo.d.ts.map +1 -0
- package/dist/core/revision/hallazgo.js +73 -0
- package/dist/core/revision/hallazgo.js.map +1 -0
- package/dist/core/revision/revisor.d.ts +81 -0
- package/dist/core/revision/revisor.d.ts.map +1 -0
- package/dist/core/revision/revisor.js +132 -0
- package/dist/core/revision/revisor.js.map +1 -0
- package/dist/core/revision/sarif.d.ts +30 -0
- package/dist/core/revision/sarif.d.ts.map +1 -0
- package/dist/core/revision/sarif.js +83 -0
- package/dist/core/revision/sarif.js.map +1 -0
- package/dist/core/scheduler/scheduler.d.ts +87 -0
- package/dist/core/scheduler/scheduler.d.ts.map +1 -0
- package/dist/core/scheduler/scheduler.js +178 -0
- package/dist/core/scheduler/scheduler.js.map +1 -0
- package/dist/core/sdk.d.ts +8 -0
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +11 -1
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts +49 -0
- package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts.map +1 -0
- package/dist/core/sesion/cerrar-llamadas-abiertas.js +77 -0
- package/dist/core/sesion/cerrar-llamadas-abiertas.js.map +1 -0
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +2 -1
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-diagnostics.d.ts +9 -0
- package/dist/core/settings-diagnostics.d.ts.map +1 -0
- package/dist/core/settings-diagnostics.js +21 -0
- package/dist/core/settings-diagnostics.js.map +1 -0
- package/dist/core/settings-manager.d.ts +156 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +255 -10
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +51 -33
- package/dist/core/skills.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +2 -1
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/system-prompt.d.ts +17 -0
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +13 -5
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/telemetria/otlp.d.ts +122 -0
- package/dist/core/telemetria/otlp.d.ts.map +1 -0
- package/dist/core/telemetria/otlp.js +373 -0
- package/dist/core/telemetria/otlp.js.map +1 -0
- package/dist/core/tools/coercion-argumentos.d.ts +48 -0
- package/dist/core/tools/coercion-argumentos.d.ts.map +1 -0
- package/dist/core/tools/coercion-argumentos.js +99 -0
- package/dist/core/tools/coercion-argumentos.js.map +1 -0
- package/dist/core/tools/edit-diff.d.ts +0 -12
- package/dist/core/tools/edit-diff.d.ts.map +1 -1
- package/dist/core/tools/edit-diff.js +234 -12
- package/dist/core/tools/edit-diff.js.map +1 -1
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +28 -5
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
- package/dist/core/tools/file-mutation-queue.js +5 -0
- package/dist/core/tools/file-mutation-queue.js.map +1 -1
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +2 -2
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/json-tolerante.d.ts +30 -0
- package/dist/core/tools/json-tolerante.d.ts.map +1 -0
- package/dist/core/tools/json-tolerante.js +70 -0
- package/dist/core/tools/json-tolerante.js.map +1 -0
- package/dist/core/tools/project-memory-tool.d.ts.map +1 -1
- package/dist/core/tools/project-memory-tool.js +4 -1
- package/dist/core/tools/project-memory-tool.js.map +1 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +17 -0
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts +14 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.js +17 -1
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
- package/dist/core/trust-manager.d.ts.map +1 -1
- package/dist/core/trust-manager.js +2 -1
- package/dist/core/trust-manager.js.map +1 -1
- package/dist/core/turno-vacio/detectar.d.ts +38 -0
- package/dist/core/turno-vacio/detectar.d.ts.map +1 -0
- package/dist/core/turno-vacio/detectar.js +66 -0
- package/dist/core/turno-vacio/detectar.js.map +1 -0
- package/dist/core/undo/journal.d.ts +57 -0
- package/dist/core/undo/journal.d.ts.map +1 -0
- package/dist/core/undo/journal.js +178 -0
- package/dist/core/undo/journal.js.map +1 -0
- package/dist/core/urls-internas/auditoria.d.ts +10 -0
- package/dist/core/urls-internas/auditoria.d.ts.map +1 -0
- package/dist/core/urls-internas/auditoria.js +42 -0
- package/dist/core/urls-internas/auditoria.js.map +1 -0
- package/dist/core/urls-internas/boveda.d.ts +13 -0
- package/dist/core/urls-internas/boveda.d.ts.map +1 -0
- package/dist/core/urls-internas/boveda.js +40 -0
- package/dist/core/urls-internas/boveda.js.map +1 -0
- package/dist/core/urls-internas/lector.d.ts +30 -0
- package/dist/core/urls-internas/lector.d.ts.map +1 -0
- package/dist/core/urls-internas/lector.js +56 -0
- package/dist/core/urls-internas/lector.js.map +1 -0
- package/dist/core/urls-internas/memoria.d.ts +11 -0
- package/dist/core/urls-internas/memoria.d.ts.map +1 -0
- package/dist/core/urls-internas/memoria.js +25 -0
- package/dist/core/urls-internas/memoria.js.map +1 -0
- package/dist/core/urls-internas/parse.d.ts +28 -0
- package/dist/core/urls-internas/parse.d.ts.map +1 -0
- package/dist/core/urls-internas/parse.js +32 -0
- package/dist/core/urls-internas/parse.js.map +1 -0
- package/dist/core/urls-internas/reglas.d.ts +10 -0
- package/dist/core/urls-internas/reglas.d.ts.map +1 -0
- package/dist/core/urls-internas/reglas.js +31 -0
- package/dist/core/urls-internas/reglas.js.map +1 -0
- package/dist/core/usage/aggregate.d.ts +68 -0
- package/dist/core/usage/aggregate.d.ts.map +1 -0
- package/dist/core/usage/aggregate.js +93 -0
- package/dist/core/usage/aggregate.js.map +1 -0
- package/dist/core/usage/cuota/anthropic.d.ts +10 -0
- package/dist/core/usage/cuota/anthropic.d.ts.map +1 -0
- package/dist/core/usage/cuota/anthropic.js +63 -0
- package/dist/core/usage/cuota/anthropic.js.map +1 -0
- package/dist/core/usage/cuota/cache.d.ts +20 -0
- package/dist/core/usage/cuota/cache.d.ts.map +1 -0
- package/dist/core/usage/cuota/cache.js +36 -0
- package/dist/core/usage/cuota/cache.js.map +1 -0
- package/dist/core/usage/cuota/github-copilot.d.ts +9 -0
- package/dist/core/usage/cuota/github-copilot.d.ts.map +1 -0
- package/dist/core/usage/cuota/github-copilot.js +67 -0
- package/dist/core/usage/cuota/github-copilot.js.map +1 -0
- package/dist/core/usage/cuota/google-gemini.d.ts +9 -0
- package/dist/core/usage/cuota/google-gemini.d.ts.map +1 -0
- package/dist/core/usage/cuota/google-gemini.js +72 -0
- package/dist/core/usage/cuota/google-gemini.js.map +1 -0
- package/dist/core/usage/cuota/index.d.ts +25 -0
- package/dist/core/usage/cuota/index.d.ts.map +1 -0
- package/dist/core/usage/cuota/index.js +50 -0
- package/dist/core/usage/cuota/index.js.map +1 -0
- package/dist/core/usage/cuota/openai-codex.d.ts +9 -0
- package/dist/core/usage/cuota/openai-codex.d.ts.map +1 -0
- package/dist/core/usage/cuota/openai-codex.js +59 -0
- package/dist/core/usage/cuota/openai-codex.js.map +1 -0
- package/dist/core/usage/cuota/openrouter.d.ts +10 -0
- package/dist/core/usage/cuota/openrouter.d.ts.map +1 -0
- package/dist/core/usage/cuota/openrouter.js +47 -0
- package/dist/core/usage/cuota/openrouter.js.map +1 -0
- package/dist/core/usage/cuota/tipos.d.ts +50 -0
- package/dist/core/usage/cuota/tipos.d.ts.map +1 -0
- package/dist/core/usage/cuota/tipos.js +25 -0
- package/dist/core/usage/cuota/tipos.js.map +1 -0
- package/dist/core/web/busqueda-nativa.d.ts +82 -0
- package/dist/core/web/busqueda-nativa.d.ts.map +1 -0
- package/dist/core/web/busqueda-nativa.js +163 -0
- package/dist/core/web/busqueda-nativa.js.map +1 -0
- package/dist/core/web/destino.d.ts +58 -0
- package/dist/core/web/destino.d.ts.map +1 -0
- package/dist/core/web/destino.js +127 -0
- package/dist/core/web/destino.js.map +1 -0
- package/dist/core/web/proveedores/brave.d.ts +6 -0
- package/dist/core/web/proveedores/brave.d.ts.map +1 -0
- package/dist/core/web/proveedores/brave.js +20 -0
- package/dist/core/web/proveedores/brave.js.map +1 -0
- package/dist/core/web/proveedores/claves.d.ts +19 -0
- package/dist/core/web/proveedores/claves.d.ts.map +1 -0
- package/dist/core/web/proveedores/claves.js +36 -0
- package/dist/core/web/proveedores/claves.js.map +1 -0
- package/dist/core/web/proveedores/duckduckgo.d.ts +3 -0
- package/dist/core/web/proveedores/duckduckgo.d.ts.map +1 -0
- package/dist/core/web/proveedores/duckduckgo.js +109 -0
- package/dist/core/web/proveedores/duckduckgo.js.map +1 -0
- package/dist/core/web/proveedores/ecosia.d.ts +3 -0
- package/dist/core/web/proveedores/ecosia.d.ts.map +1 -0
- package/dist/core/web/proveedores/ecosia.js +72 -0
- package/dist/core/web/proveedores/ecosia.js.map +1 -0
- package/dist/core/web/proveedores/exa.d.ts +6 -0
- package/dist/core/web/proveedores/exa.d.ts.map +1 -0
- package/dist/core/web/proveedores/exa.js +24 -0
- package/dist/core/web/proveedores/exa.js.map +1 -0
- package/dist/core/web/proveedores/mojeek.d.ts +3 -0
- package/dist/core/web/proveedores/mojeek.d.ts.map +1 -0
- package/dist/core/web/proveedores/mojeek.js +65 -0
- package/dist/core/web/proveedores/mojeek.js.map +1 -0
- package/dist/core/web/proveedores/navegador.d.ts +10 -0
- package/dist/core/web/proveedores/navegador.d.ts.map +1 -0
- package/dist/core/web/proveedores/navegador.js +13 -0
- package/dist/core/web/proveedores/navegador.js.map +1 -0
- package/dist/core/web/proveedores/registro.d.ts +43 -0
- package/dist/core/web/proveedores/registro.d.ts.map +1 -0
- package/dist/core/web/proveedores/registro.js +49 -0
- package/dist/core/web/proveedores/registro.js.map +1 -0
- package/dist/core/web/proveedores/searxng.d.ts +9 -0
- package/dist/core/web/proveedores/searxng.d.ts.map +1 -0
- package/dist/core/web/proveedores/searxng.js +17 -0
- package/dist/core/web/proveedores/searxng.js.map +1 -0
- package/dist/core/web/proveedores/serper.d.ts +9 -0
- package/dist/core/web/proveedores/serper.d.ts.map +1 -0
- package/dist/core/web/proveedores/serper.js +19 -0
- package/dist/core/web/proveedores/serper.js.map +1 -0
- package/dist/core/web/proveedores/tavily.d.ts +6 -0
- package/dist/core/web/proveedores/tavily.d.ts.map +1 -0
- package/dist/core/web/proveedores/tavily.js +19 -0
- package/dist/core/web/proveedores/tavily.js.map +1 -0
- package/dist/core/web/proveedores/tipos.d.ts +36 -0
- package/dist/core/web/proveedores/tipos.d.ts.map +1 -0
- package/dist/core/web/proveedores/tipos.js +10 -0
- package/dist/core/web/proveedores/tipos.js.map +1 -0
- package/dist/core/web/registro-red.d.ts +43 -0
- package/dist/core/web/registro-red.d.ts.map +1 -0
- package/dist/core/web/registro-red.js +86 -0
- package/dist/core/web/registro-red.js.map +1 -0
- package/dist/core/web/scrapers/cisa-kev.d.ts +10 -0
- package/dist/core/web/scrapers/cisa-kev.d.ts.map +1 -0
- package/dist/core/web/scrapers/cisa-kev.js +38 -0
- package/dist/core/web/scrapers/cisa-kev.js.map +1 -0
- package/dist/core/web/scrapers/crates-io.d.ts +11 -0
- package/dist/core/web/scrapers/crates-io.d.ts.map +1 -0
- package/dist/core/web/scrapers/crates-io.js +29 -0
- package/dist/core/web/scrapers/crates-io.js.map +1 -0
- package/dist/core/web/scrapers/docs-rs.d.ts +10 -0
- package/dist/core/web/scrapers/docs-rs.d.ts.map +1 -0
- package/dist/core/web/scrapers/docs-rs.js +35 -0
- package/dist/core/web/scrapers/docs-rs.js.map +1 -0
- package/dist/core/web/scrapers/github.d.ts +3 -0
- package/dist/core/web/scrapers/github.d.ts.map +1 -0
- package/dist/core/web/scrapers/github.js +72 -0
- package/dist/core/web/scrapers/github.js.map +1 -0
- package/dist/core/web/scrapers/go-pkg.d.ts +7 -0
- package/dist/core/web/scrapers/go-pkg.d.ts.map +1 -0
- package/dist/core/web/scrapers/go-pkg.js +30 -0
- package/dist/core/web/scrapers/go-pkg.js.map +1 -0
- package/dist/core/web/scrapers/hex.d.ts +6 -0
- package/dist/core/web/scrapers/hex.d.ts.map +1 -0
- package/dist/core/web/scrapers/hex.js +27 -0
- package/dist/core/web/scrapers/hex.js.map +1 -0
- package/dist/core/web/scrapers/maven.d.ts +8 -0
- package/dist/core/web/scrapers/maven.d.ts.map +1 -0
- package/dist/core/web/scrapers/maven.js +41 -0
- package/dist/core/web/scrapers/maven.js.map +1 -0
- package/dist/core/web/scrapers/mdn.d.ts +6 -0
- package/dist/core/web/scrapers/mdn.d.ts.map +1 -0
- package/dist/core/web/scrapers/mdn.js +28 -0
- package/dist/core/web/scrapers/mdn.js.map +1 -0
- package/dist/core/web/scrapers/npm.d.ts +11 -0
- package/dist/core/web/scrapers/npm.d.ts.map +1 -0
- package/dist/core/web/scrapers/npm.js +57 -0
- package/dist/core/web/scrapers/npm.js.map +1 -0
- package/dist/core/web/scrapers/nuget.d.ts +8 -0
- package/dist/core/web/scrapers/nuget.d.ts.map +1 -0
- package/dist/core/web/scrapers/nuget.js +22 -0
- package/dist/core/web/scrapers/nuget.js.map +1 -0
- package/dist/core/web/scrapers/nvd.d.ts +7 -0
- package/dist/core/web/scrapers/nvd.d.ts.map +1 -0
- package/dist/core/web/scrapers/nvd.js +37 -0
- package/dist/core/web/scrapers/nvd.js.map +1 -0
- package/dist/core/web/scrapers/pypi.d.ts +6 -0
- package/dist/core/web/scrapers/pypi.d.ts.map +1 -0
- package/dist/core/web/scrapers/pypi.js +31 -0
- package/dist/core/web/scrapers/pypi.js.map +1 -0
- package/dist/core/web/scrapers/registro.d.ts +13 -0
- package/dist/core/web/scrapers/registro.d.ts.map +1 -0
- package/dist/core/web/scrapers/registro.js +65 -0
- package/dist/core/web/scrapers/registro.js.map +1 -0
- package/dist/core/web/scrapers/rubygems.d.ts +6 -0
- package/dist/core/web/scrapers/rubygems.d.ts.map +1 -0
- package/dist/core/web/scrapers/rubygems.js +23 -0
- package/dist/core/web/scrapers/rubygems.js.map +1 -0
- package/dist/core/web/scrapers/stackoverflow.d.ts +3 -0
- package/dist/core/web/scrapers/stackoverflow.d.ts.map +1 -0
- package/dist/core/web/scrapers/stackoverflow.js +46 -0
- package/dist/core/web/scrapers/stackoverflow.js.map +1 -0
- package/dist/core/web/scrapers/tipos.d.ts +42 -0
- package/dist/core/web/scrapers/tipos.d.ts.map +1 -0
- package/dist/core/web/scrapers/tipos.js +23 -0
- package/dist/core/web/scrapers/tipos.js.map +1 -0
- package/dist/core/web/texto.d.ts +10 -0
- package/dist/core/web/texto.d.ts.map +1 -0
- package/dist/core/web/texto.js +26 -0
- package/dist/core/web/texto.js.map +1 -0
- package/dist/core/web/tools.d.ts +91 -0
- package/dist/core/web/tools.d.ts.map +1 -0
- package/dist/core/web/tools.js +304 -0
- package/dist/core/web/tools.js.map +1 -0
- package/dist/core/wiki/almacen.d.ts +33 -0
- package/dist/core/wiki/almacen.d.ts.map +1 -0
- package/dist/core/wiki/almacen.js +93 -0
- package/dist/core/wiki/almacen.js.map +1 -0
- package/dist/core/wiki/citas.d.ts +111 -0
- package/dist/core/wiki/citas.d.ts.map +1 -0
- package/dist/core/wiki/citas.js +146 -0
- package/dist/core/wiki/citas.js.map +1 -0
- package/dist/core/workflows/agent-runner.d.ts +88 -0
- package/dist/core/workflows/agent-runner.d.ts.map +1 -0
- package/dist/core/workflows/agent-runner.js +312 -0
- package/dist/core/workflows/agent-runner.js.map +1 -0
- package/dist/core/workflows/builtins.d.ts +41 -0
- package/dist/core/workflows/builtins.d.ts.map +1 -0
- package/dist/core/workflows/builtins.js +283 -0
- package/dist/core/workflows/builtins.js.map +1 -0
- package/dist/core/workflows/contrato/esquema.d.ts +32 -0
- package/dist/core/workflows/contrato/esquema.d.ts.map +1 -0
- package/dist/core/workflows/contrato/esquema.js +25 -0
- package/dist/core/workflows/contrato/esquema.js.map +1 -0
- package/dist/core/workflows/contrato/reparar-argumentos.d.ts +69 -0
- package/dist/core/workflows/contrato/reparar-argumentos.d.ts.map +1 -0
- package/dist/core/workflows/contrato/reparar-argumentos.js +117 -0
- package/dist/core/workflows/contrato/reparar-argumentos.js.map +1 -0
- package/dist/core/workflows/contrato/validador.d.ts +30 -0
- package/dist/core/workflows/contrato/validador.d.ts.map +1 -0
- package/dist/core/workflows/contrato/validador.js +56 -0
- package/dist/core/workflows/contrato/validador.js.map +1 -0
- package/dist/core/workflows/contrato/yield.d.ts +65 -0
- package/dist/core/workflows/contrato/yield.d.ts.map +1 -0
- package/dist/core/workflows/contrato/yield.js +80 -0
- package/dist/core/workflows/contrato/yield.js.map +1 -0
- package/dist/core/workflows/goal-engine/engine.d.ts +151 -0
- package/dist/core/workflows/goal-engine/engine.d.ts.map +1 -0
- package/dist/core/workflows/goal-engine/engine.js +503 -0
- package/dist/core/workflows/goal-engine/engine.js.map +1 -0
- package/dist/core/workflows/goal-engine/errors.d.ts +7 -0
- package/dist/core/workflows/goal-engine/errors.d.ts.map +1 -0
- package/dist/core/workflows/goal-engine/errors.js +9 -0
- package/dist/core/workflows/goal-engine/errors.js.map +1 -0
- package/dist/core/workflows/goal-engine/index.d.ts +13 -0
- package/dist/core/workflows/goal-engine/index.d.ts.map +1 -0
- package/dist/core/workflows/goal-engine/index.js +8 -0
- package/dist/core/workflows/goal-engine/index.js.map +1 -0
- package/dist/core/workflows/goal-engine/persistence.d.ts +31 -0
- package/dist/core/workflows/goal-engine/persistence.d.ts.map +1 -0
- package/dist/core/workflows/goal-engine/persistence.js +145 -0
- package/dist/core/workflows/goal-engine/persistence.js.map +1 -0
- package/dist/core/workflows/goal-engine/prompts.d.ts +37 -0
- package/dist/core/workflows/goal-engine/prompts.d.ts.map +1 -0
- package/dist/core/workflows/goal-engine/prompts.js +131 -0
- package/dist/core/workflows/goal-engine/prompts.js.map +1 -0
- package/dist/core/workflows/goal-engine/state.d.ts +41 -0
- package/dist/core/workflows/goal-engine/state.d.ts.map +1 -0
- package/dist/core/workflows/goal-engine/state.js +397 -0
- package/dist/core/workflows/goal-engine/state.js.map +1 -0
- package/dist/core/workflows/goal-engine/tools.d.ts +31 -0
- package/dist/core/workflows/goal-engine/tools.d.ts.map +1 -0
- package/dist/core/workflows/goal-engine/tools.js +211 -0
- package/dist/core/workflows/goal-engine/tools.js.map +1 -0
- package/dist/core/workflows/goal-engine/types.d.ts +286 -0
- package/dist/core/workflows/goal-engine/types.d.ts.map +1 -0
- package/dist/core/workflows/goal-engine/types.js +17 -0
- package/dist/core/workflows/goal-engine/types.js.map +1 -0
- package/dist/core/workflows/goal-engine/worktree-fingerprint.d.ts +23 -0
- package/dist/core/workflows/goal-engine/worktree-fingerprint.d.ts.map +1 -0
- package/dist/core/workflows/goal-engine/worktree-fingerprint.js +72 -0
- package/dist/core/workflows/goal-engine/worktree-fingerprint.js.map +1 -0
- package/dist/core/workflows/graph-sync.d.ts +67 -0
- package/dist/core/workflows/graph-sync.d.ts.map +1 -0
- package/dist/core/workflows/graph-sync.js +188 -0
- package/dist/core/workflows/graph-sync.js.map +1 -0
- package/dist/core/workflows/graph.d.ts +143 -0
- package/dist/core/workflows/graph.d.ts.map +1 -0
- package/dist/core/workflows/graph.js +319 -0
- package/dist/core/workflows/graph.js.map +1 -0
- package/dist/core/workflows/index.d.ts +26 -0
- package/dist/core/workflows/index.d.ts.map +1 -0
- package/dist/core/workflows/index.js +18 -0
- package/dist/core/workflows/index.js.map +1 -0
- package/dist/core/workflows/journal.d.ts +68 -0
- package/dist/core/workflows/journal.d.ts.map +1 -0
- package/dist/core/workflows/journal.js +83 -0
- package/dist/core/workflows/journal.js.map +1 -0
- package/dist/core/workflows/manager.d.ts +122 -0
- package/dist/core/workflows/manager.d.ts.map +1 -0
- package/dist/core/workflows/manager.js +351 -0
- package/dist/core/workflows/manager.js.map +1 -0
- package/dist/core/workflows/resolve-script.d.ts +35 -0
- package/dist/core/workflows/resolve-script.d.ts.map +1 -0
- package/dist/core/workflows/resolve-script.js +66 -0
- package/dist/core/workflows/resolve-script.js.map +1 -0
- package/dist/core/workflows/runtime.d.ts +62 -0
- package/dist/core/workflows/runtime.d.ts.map +1 -0
- package/dist/core/workflows/runtime.js +380 -0
- package/dist/core/workflows/runtime.js.map +1 -0
- package/dist/core/workflows/save-as-skill.d.ts +27 -0
- package/dist/core/workflows/save-as-skill.d.ts.map +1 -0
- package/dist/core/workflows/save-as-skill.js +54 -0
- package/dist/core/workflows/save-as-skill.js.map +1 -0
- package/dist/core/workflows/shared-store.d.ts +31 -0
- package/dist/core/workflows/shared-store.d.ts.map +1 -0
- package/dist/core/workflows/shared-store.js +80 -0
- package/dist/core/workflows/shared-store.js.map +1 -0
- package/dist/core/workflows/subagent-host.d.ts +50 -0
- package/dist/core/workflows/subagent-host.d.ts.map +1 -0
- package/dist/core/workflows/subagent-host.js +225 -0
- package/dist/core/workflows/subagent-host.js.map +1 -0
- package/dist/core/workflows/tool-workflow.d.ts +22 -0
- package/dist/core/workflows/tool-workflow.d.ts.map +1 -0
- package/dist/core/workflows/tool-workflow.js +120 -0
- package/dist/core/workflows/tool-workflow.js.map +1 -0
- package/dist/core/workflows/types.d.ts +191 -0
- package/dist/core/workflows/types.d.ts.map +1 -0
- package/dist/core/workflows/types.js +26 -0
- package/dist/core/workflows/types.js.map +1 -0
- package/dist/core/workflows/worktree.d.ts +42 -0
- package/dist/core/workflows/worktree.d.ts.map +1 -0
- package/dist/core/workflows/worktree.js +107 -0
- package/dist/core/workflows/worktree.js.map +1 -0
- package/dist/extensions/llama/index.d.ts.map +1 -1
- package/dist/extensions/llama/index.js +2 -0
- package/dist/extensions/llama/index.js.map +1 -1
- package/dist/extensions/llama/provider.d.ts.map +1 -1
- package/dist/extensions/llama/provider.js +6 -2
- package/dist/extensions/llama/provider.js.map +1 -1
- package/dist/extensions/remoto/index.d.ts +22 -0
- package/dist/extensions/remoto/index.d.ts.map +1 -0
- package/dist/extensions/remoto/index.js +54 -0
- package/dist/extensions/remoto/index.js.map +1 -0
- package/dist/index.d.ts +1 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -13
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts +4 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +26 -15
- package/dist/main.js.map +1 -1
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +4 -3
- package/dist/migrations.js.map +1 -1
- package/dist/modes/acp/acp-mode.d.ts +42 -0
- package/dist/modes/acp/acp-mode.d.ts.map +1 -0
- package/dist/modes/acp/acp-mode.js +190 -0
- package/dist/modes/acp/acp-mode.js.map +1 -0
- package/dist/modes/acp/events.d.ts +74 -0
- package/dist/modes/acp/events.d.ts.map +1 -0
- package/dist/modes/acp/events.js +116 -0
- package/dist/modes/acp/events.js.map +1 -0
- package/dist/modes/interactive/components/home-screen.d.ts.map +1 -1
- package/dist/modes/interactive/components/home-screen.js +2 -2
- package/dist/modes/interactive/components/home-screen.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts +9 -3
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +56 -12
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/prompt-optimization.d.ts +16 -0
- package/dist/modes/interactive/components/prompt-optimization.d.ts.map +1 -0
- package/dist/modes/interactive/components/prompt-optimization.js +46 -0
- package/dist/modes/interactive/components/prompt-optimization.js.map +1 -0
- package/dist/modes/interactive/components/settings-selector.d.ts +19 -2
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +180 -56
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-submenu.d.ts +72 -0
- package/dist/modes/interactive/components/settings-submenu.d.ts.map +1 -0
- package/dist/modes/interactive/components/settings-submenu.js +165 -0
- package/dist/modes/interactive/components/settings-submenu.js.map +1 -0
- package/dist/modes/interactive/components/thinking-selector.d.ts +15 -3
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js +74 -17
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/external-editor.d.ts.map +1 -1
- package/dist/modes/interactive/external-editor.js +2 -1
- package/dist/modes/interactive/external-editor.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +21 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +709 -75
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +4 -3
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/json-event.d.ts +16 -13
- package/dist/modes/json-event.d.ts.map +1 -1
- package/dist/modes/json-event.js +20 -6
- package/dist/modes/json-event.js.map +1 -1
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js +11 -0
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +173 -0
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +29 -0
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +27 -5
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/server/attach.d.ts +56 -0
- package/dist/server/attach.d.ts.map +1 -0
- package/dist/server/attach.js +130 -0
- package/dist/server/attach.js.map +1 -0
- package/dist/server/extension-ops.d.ts +40 -0
- package/dist/server/extension-ops.d.ts.map +1 -0
- package/dist/server/extension-ops.js +146 -0
- package/dist/server/extension-ops.js.map +1 -0
- package/dist/server/pi-server-service.d.ts +85 -0
- package/dist/server/pi-server-service.d.ts.map +1 -0
- package/dist/server/pi-server-service.js +213 -0
- package/dist/server/pi-server-service.js.map +1 -0
- package/dist/server/scheduler-tick.d.ts +32 -0
- package/dist/server/scheduler-tick.d.ts.map +1 -0
- package/dist/server/scheduler-tick.js +47 -0
- package/dist/server/scheduler-tick.js.map +1 -0
- package/dist/server/serve.d.ts +25 -0
- package/dist/server/serve.d.ts.map +1 -0
- package/dist/server/serve.js +83 -0
- package/dist/server/serve.js.map +1 -0
- package/dist/server/transcript.d.ts +38 -0
- package/dist/server/transcript.d.ts.map +1 -0
- package/dist/server/transcript.js +176 -0
- package/dist/server/transcript.js.map +1 -0
- package/dist/skills/ada-engine/SKILL.md +153 -0
- package/dist/skills/skill-creator/SKILL.md +90 -0
- package/dist/telegram/api.d.ts +75 -0
- package/dist/telegram/api.d.ts.map +1 -0
- package/dist/telegram/api.js +104 -0
- package/dist/telegram/api.js.map +1 -0
- package/dist/telegram/bridge.d.ts +85 -0
- package/dist/telegram/bridge.d.ts.map +1 -0
- package/dist/telegram/bridge.js +182 -0
- package/dist/telegram/bridge.js.map +1 -0
- package/dist/telegram/journal.d.ts +67 -0
- package/dist/telegram/journal.d.ts.map +1 -0
- package/dist/telegram/journal.js +119 -0
- package/dist/telegram/journal.js.map +1 -0
- package/dist/telegram/servidor.d.ts +15 -0
- package/dist/telegram/servidor.d.ts.map +1 -0
- package/dist/telegram/servidor.js +74 -0
- package/dist/telegram/servidor.js.map +1 -0
- package/dist/utils/frontmatter.d.ts.map +1 -1
- package/dist/utils/frontmatter.js +2 -1
- package/dist/utils/frontmatter.js.map +1 -1
- package/dist/utils/management-http.d.ts +5 -3
- package/dist/utils/management-http.d.ts.map +1 -1
- package/dist/utils/management-http.js +14 -10
- package/dist/utils/management-http.js.map +1 -1
- package/dist/utils/shell.d.ts +11 -0
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +11 -0
- package/dist/utils/shell.js.map +1 -1
- package/dist/utils/text.d.ts +8 -0
- package/dist/utils/text.d.ts.map +1 -0
- package/dist/utils/text.js +9 -0
- package/dist/utils/text.js.map +1 -0
- package/dist/utils/version-check.d.ts.map +1 -1
- package/dist/utils/version-check.js +29 -1
- package/dist/utils/version-check.js.map +1 -1
- package/docs/compaction.md +25 -10
- package/docs/compliance.md +241 -0
- package/docs/containerization.md +24 -24
- package/docs/custom-provider.md +15 -12
- package/docs/development.md +47 -10
- package/docs/docs.json +14 -2
- package/docs/environment-variables.md +20 -17
- package/docs/extensions.md +62 -51
- package/docs/index.md +15 -21
- package/docs/json.md +10 -5
- package/docs/keybindings.md +5 -5
- package/docs/llama-cpp.md +9 -7
- package/docs/models.md +18 -12
- package/docs/packages.md +45 -45
- package/docs/prompt-templates.md +5 -5
- package/docs/providers.md +12 -12
- package/docs/quickstart.md +39 -39
- package/docs/rpc.md +21 -15
- package/docs/sdk.md +38 -38
- package/docs/security.md +26 -21
- package/docs/session-format.md +7 -7
- package/docs/sessions.md +14 -14
- package/docs/settings.md +47 -22
- package/docs/shell-aliases.md +2 -2
- package/docs/skills.md +14 -13
- package/docs/terminal-setup.md +14 -14
- package/docs/termux.md +7 -7
- package/docs/themes.md +11 -11
- package/docs/tmux.md +4 -4
- package/docs/tui.md +3 -3
- package/docs/usage.md +54 -54
- package/docs/windows.md +2 -2
- package/examples/extensions/border-status-editor.ts +1 -1
- package/examples/extensions/git-checkpoint.ts +2 -2
- package/examples/extensions/notify.ts +3 -1
- package/examples/extensions/subagent/README.md +1 -1
- package/examples/extensions/subagent/index.ts +6 -1
- package/examples/extensions/titlebar-spinner.ts +1 -1
- package/examples/rpc-extension-ui.ts +1 -1
- package/examples/sdk/06-extensions.ts +1 -1
- package/examples/sdk/12-full-control.ts +9 -0
- package/examples/sdk/README.md +1 -1
- package/npm-shrinkwrap.json +35 -261
- package/package.json +9 -3
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bundle de evidencia — auditoría que se queda con el cliente.
|
|
3
|
+
*
|
|
4
|
+
* Es la dirección OPUESTA a subir transcripciones a una nube: un cliente
|
|
5
|
+
* regulado produce, en local y por sí mismo, un artefacto verificable de qué
|
|
6
|
+
* hizo el agente y qué se verificó. Cero red.
|
|
7
|
+
*
|
|
8
|
+
* No inventa nada: junta tres fuentes que ya existen y añade el resultado de la
|
|
9
|
+
* verificación de la cadena hash.
|
|
10
|
+
*
|
|
11
|
+
* ponytail: la cadena hash prueba consistencia interna, NO procedencia. Si un
|
|
12
|
+
* cliente necesita no-repudio, eso es una conversación de HSM/firma — el
|
|
13
|
+
* manifiesto lo dice explícitamente en vez de insinuar que lo cubre.
|
|
14
|
+
*/
|
|
15
|
+
import type { VeredictoDelRegistro } from "./audit-indice.ts";
|
|
16
|
+
export interface AuditBundleInput {
|
|
17
|
+
/** Raíz del engine (`<agentDir>/memory-engine`). */
|
|
18
|
+
rootDir: string;
|
|
19
|
+
/** Directorio de runs de workflow (`<agentDir>/workflows/runs`). */
|
|
20
|
+
runsDir?: string;
|
|
21
|
+
/** Fichero del grafo, si existe. */
|
|
22
|
+
graphPath?: string;
|
|
23
|
+
/** Solo entradas con `ts >= since` (ISO). */
|
|
24
|
+
since?: string;
|
|
25
|
+
/** Verificador de la cadena (inyectable para tests). */
|
|
26
|
+
verify: () => Promise<VeredictoDelRegistro>;
|
|
27
|
+
/** Lector de entradas de auditoría. */
|
|
28
|
+
entries: (limit: number) => Promise<Array<Record<string, unknown>>>;
|
|
29
|
+
}
|
|
30
|
+
export interface AuditBundleManifest {
|
|
31
|
+
version: 1;
|
|
32
|
+
generatedAt: string;
|
|
33
|
+
since?: string;
|
|
34
|
+
/**
|
|
35
|
+
* El veredicto ENTERO, no un resumen.
|
|
36
|
+
*
|
|
37
|
+
* Antes este campo estaba declarado como `{valid, tamperedAt, entriesChecked}`
|
|
38
|
+
* y el veredicto pasaba por ese hueco perdiendo lo demás sin dar un solo
|
|
39
|
+
* error: el manifiesto decía `"chain": {"valid": true}` sobre un registro al
|
|
40
|
+
* que le faltaban ficheros enteros. Un tipo intermedio que recorta campos es
|
|
41
|
+
* peor que uno que se queja, porque el recorte no se ve en ningún sitio.
|
|
42
|
+
*/
|
|
43
|
+
chain: VeredictoDelRegistro;
|
|
44
|
+
counts: {
|
|
45
|
+
auditEntries: number;
|
|
46
|
+
workflowRuns: number;
|
|
47
|
+
};
|
|
48
|
+
/** Lo que este bundle NO prueba. Explícito a propósito. */
|
|
49
|
+
limitations: string[];
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Escribe el bundle en `outDir`. Devuelve el manifiesto.
|
|
53
|
+
* `generatedAt` se inyecta para que el test sea determinista.
|
|
54
|
+
*/
|
|
55
|
+
export declare function exportAuditBundle(input: AuditBundleInput, outDir: string, now?: () => string): Promise<AuditBundleManifest>;
|
|
56
|
+
//# sourceMappingURL=audit-export.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-export.d.ts","sourceRoot":"","sources":["../../../src/core/memory-engine/audit-export.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAE9D,MAAM,WAAW,gBAAgB;IAChC,qDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,MAAM,EAAE,MAAM,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC5C,wCAAuC;IACvC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;CACpE;AAED,MAAM,WAAW,mBAAmB;IACnC,OAAO,EAAE,CAAC,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;;OAQG;IACH,KAAK,EAAE,oBAAoB,CAAC;IAC5B,MAAM,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IACvD,6DAA2D;IAC3D,WAAW,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACtC,KAAK,EAAE,gBAAgB,EACvB,MAAM,EAAE,MAAM,EACd,GAAG,GAAE,MAAM,MAAuC,GAChD,OAAO,CAAC,mBAAmB,CAAC,CA+E9B","sourcesContent":["/**\n * Bundle de evidencia — auditoría que se queda con el cliente.\n *\n * Es la dirección OPUESTA a subir transcripciones a una nube: un cliente\n * regulado produce, en local y por sí mismo, un artefacto verificable de qué\n * hizo el agente y qué se verificó. Cero red.\n *\n * No inventa nada: junta tres fuentes que ya existen y añade el resultado de la\n * verificación de la cadena hash.\n *\n * ponytail: la cadena hash prueba consistencia interna, NO procedencia. Si un\n * cliente necesita no-repudio, eso es una conversación de HSM/firma — el\n * manifiesto lo dice explícitamente en vez de insinuar que lo cubre.\n */\n\nimport { mkdir, readdir, readFile, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport type { VeredictoDelRegistro } from \"./audit-indice.ts\";\n\nexport interface AuditBundleInput {\n\t/** Raíz del engine (`<agentDir>/memory-engine`). */\n\trootDir: string;\n\t/** Directorio de runs de workflow (`<agentDir>/workflows/runs`). */\n\trunsDir?: string;\n\t/** Fichero del grafo, si existe. */\n\tgraphPath?: string;\n\t/** Solo entradas con `ts >= since` (ISO). */\n\tsince?: string;\n\t/** Verificador de la cadena (inyectable para tests). */\n\tverify: () => Promise<VeredictoDelRegistro>;\n\t/** Lector de entradas de auditoría. */\n\tentries: (limit: number) => Promise<Array<Record<string, unknown>>>;\n}\n\nexport interface AuditBundleManifest {\n\tversion: 1;\n\tgeneratedAt: string;\n\tsince?: string;\n\t/**\n\t * El veredicto ENTERO, no un resumen.\n\t *\n\t * Antes este campo estaba declarado como `{valid, tamperedAt, entriesChecked}`\n\t * y el veredicto pasaba por ese hueco perdiendo lo demás sin dar un solo\n\t * error: el manifiesto decía `\"chain\": {\"valid\": true}` sobre un registro al\n\t * que le faltaban ficheros enteros. Un tipo intermedio que recorta campos es\n\t * peor que uno que se queja, porque el recorte no se ve en ningún sitio.\n\t */\n\tchain: VeredictoDelRegistro;\n\tcounts: { auditEntries: number; workflowRuns: number };\n\t/** Lo que este bundle NO prueba. Explícito a propósito. */\n\tlimitations: string[];\n}\n\n/**\n * Escribe el bundle en `outDir`. Devuelve el manifiesto.\n * `generatedAt` se inyecta para que el test sea determinista.\n */\nexport async function exportAuditBundle(\n\tinput: AuditBundleInput,\n\toutDir: string,\n\tnow: () => string = () => new Date().toISOString(),\n): Promise<AuditBundleManifest> {\n\tawait mkdir(outDir, { recursive: true });\n\n\tconst chain = await input.verify();\n\n\tconst all = await input.entries(100000);\n\tconst audit = input.since\n\t\t? all.filter((e) => typeof e.ts === \"string\" && (e.ts as string) >= (input.since as string))\n\t\t: all;\n\tawait writeFile(join(outDir, \"audit.jsonl\"), audit.map((e) => JSON.stringify(e)).join(\"\\n\"), \"utf-8\");\n\n\t// Runs de workflow: el journal ya guarda script, args, fases y resultPath.\n\tconst runs: Array<Record<string, unknown>> = [];\n\tif (input.runsDir) {\n\t\ttry {\n\t\t\tfor (const file of (await readdir(input.runsDir)).filter((f) => f.endsWith(\".json\"))) {\n\t\t\t\ttry {\n\t\t\t\t\tconst state = JSON.parse(await readFile(join(input.runsDir, file), \"utf-8\")) as Record<string, unknown>;\n\t\t\t\t\tif (input.since && typeof state.startedAt === \"string\" && state.startedAt < input.since) continue;\n\t\t\t\t\truns.push({\n\t\t\t\t\t\trunId: state.runId,\n\t\t\t\t\t\tname: state.name,\n\t\t\t\t\t\tstatus: state.status,\n\t\t\t\t\t\tstartedAt: state.startedAt,\n\t\t\t\t\t\tupdatedAt: state.updatedAt,\n\t\t\t\t\t\tagentCount: state.agentCount,\n\t\t\t\t\t\ttokenUsage: state.tokenUsage,\n\t\t\t\t\t\tphases: state.phases,\n\t\t\t\t\t\tresultPath: state.resultPath,\n\t\t\t\t\t\targs: state.args,\n\t\t\t\t\t});\n\t\t\t\t} catch {\n\t\t\t\t\t// un run ilegible no invalida el bundle\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {\n\t\t\t// sin runs todavía\n\t\t}\n\t}\n\tawait writeFile(join(outDir, \"workflow-runs.json\"), JSON.stringify(runs, null, 2), \"utf-8\");\n\n\t// Grafo: la traza de qué se verificó y con qué evidencia.\n\tif (input.graphPath) {\n\t\ttry {\n\t\t\tawait writeFile(join(outDir, \"graph.json\"), await readFile(input.graphPath, \"utf-8\"), \"utf-8\");\n\t\t} catch {\n\t\t\t// sin grafo\n\t\t}\n\t}\n\n\tconst manifest: AuditBundleManifest = {\n\t\tversion: 1,\n\t\tgeneratedAt: now(),\n\t\tsince: input.since,\n\t\tchain,\n\t\tcounts: { auditEntries: audit.length, workflowRuns: runs.length },\n\t\tlimitations: [\n\t\t\t...(chain.borrados?.length\n\t\t\t\t? [\n\t\t\t\t\t\t`FALTAN ${chain.borrados.length} fichero(s) que el índice recuerda, con ${chain.borrados.reduce((n, f) => n + f.entradas, 0)} entrada(s): ${chain.borrados.map((f) => f.fichero).join(\", \")}.`,\n\t\t\t\t\t]\n\t\t\t\t: []),\n\t\t\t...(chain.incompletos?.length\n\t\t\t\t? [\n\t\t\t\t\t\t`${chain.incompletos.length} fichero(s) han perdido entradas por la cola: ${chain.incompletos.map((f) => `${f.fichero} (faltan ${f.faltan})`).join(\", \")}.`,\n\t\t\t\t\t]\n\t\t\t\t: []),\n\t\t\t...(chain.sinAncla?.length\n\t\t\t\t? [\n\t\t\t\t\t\t`${chain.sinAncla.length} fichero(s) sin ancla en el índice (escritos antes de que existiera): su desaparición no se podría detectar.`,\n\t\t\t\t\t]\n\t\t\t\t: []),\n\t\t\t\"La cadena hash prueba INTEGRIDAD INTERNA del log (que no se editó ni reordenó), no PROCEDENCIA: no acredita quién lo generó ni en qué máquina.\",\n\t\t\t\"Para no-repudio hace falta firma con clave gestionada (HSM); este bundle no la incluye.\",\n\t\t\t\"El bundle refleja lo que el agente registró. No es una auditoría independiente del código resultante.\",\n\t\t],\n\t};\n\tawait writeFile(join(outDir, \"manifest.json\"), JSON.stringify(manifest, null, 2), \"utf-8\");\n\treturn manifest;\n}\n"]}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bundle de evidencia — auditoría que se queda con el cliente.
|
|
3
|
+
*
|
|
4
|
+
* Es la dirección OPUESTA a subir transcripciones a una nube: un cliente
|
|
5
|
+
* regulado produce, en local y por sí mismo, un artefacto verificable de qué
|
|
6
|
+
* hizo el agente y qué se verificó. Cero red.
|
|
7
|
+
*
|
|
8
|
+
* No inventa nada: junta tres fuentes que ya existen y añade el resultado de la
|
|
9
|
+
* verificación de la cadena hash.
|
|
10
|
+
*
|
|
11
|
+
* ponytail: la cadena hash prueba consistencia interna, NO procedencia. Si un
|
|
12
|
+
* cliente necesita no-repudio, eso es una conversación de HSM/firma — el
|
|
13
|
+
* manifiesto lo dice explícitamente en vez de insinuar que lo cubre.
|
|
14
|
+
*/
|
|
15
|
+
import { mkdir, readdir, readFile, writeFile } from "node:fs/promises";
|
|
16
|
+
import { join } from "node:path";
|
|
17
|
+
/**
|
|
18
|
+
* Escribe el bundle en `outDir`. Devuelve el manifiesto.
|
|
19
|
+
* `generatedAt` se inyecta para que el test sea determinista.
|
|
20
|
+
*/
|
|
21
|
+
export async function exportAuditBundle(input, outDir, now = () => new Date().toISOString()) {
|
|
22
|
+
await mkdir(outDir, { recursive: true });
|
|
23
|
+
const chain = await input.verify();
|
|
24
|
+
const all = await input.entries(100000);
|
|
25
|
+
const audit = input.since
|
|
26
|
+
? all.filter((e) => typeof e.ts === "string" && e.ts >= input.since)
|
|
27
|
+
: all;
|
|
28
|
+
await writeFile(join(outDir, "audit.jsonl"), audit.map((e) => JSON.stringify(e)).join("\n"), "utf-8");
|
|
29
|
+
// Runs de workflow: el journal ya guarda script, args, fases y resultPath.
|
|
30
|
+
const runs = [];
|
|
31
|
+
if (input.runsDir) {
|
|
32
|
+
try {
|
|
33
|
+
for (const file of (await readdir(input.runsDir)).filter((f) => f.endsWith(".json"))) {
|
|
34
|
+
try {
|
|
35
|
+
const state = JSON.parse(await readFile(join(input.runsDir, file), "utf-8"));
|
|
36
|
+
if (input.since && typeof state.startedAt === "string" && state.startedAt < input.since)
|
|
37
|
+
continue;
|
|
38
|
+
runs.push({
|
|
39
|
+
runId: state.runId,
|
|
40
|
+
name: state.name,
|
|
41
|
+
status: state.status,
|
|
42
|
+
startedAt: state.startedAt,
|
|
43
|
+
updatedAt: state.updatedAt,
|
|
44
|
+
agentCount: state.agentCount,
|
|
45
|
+
tokenUsage: state.tokenUsage,
|
|
46
|
+
phases: state.phases,
|
|
47
|
+
resultPath: state.resultPath,
|
|
48
|
+
args: state.args,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// un run ilegible no invalida el bundle
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
// sin runs todavía
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
await writeFile(join(outDir, "workflow-runs.json"), JSON.stringify(runs, null, 2), "utf-8");
|
|
61
|
+
// Grafo: la traza de qué se verificó y con qué evidencia.
|
|
62
|
+
if (input.graphPath) {
|
|
63
|
+
try {
|
|
64
|
+
await writeFile(join(outDir, "graph.json"), await readFile(input.graphPath, "utf-8"), "utf-8");
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
// sin grafo
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
const manifest = {
|
|
71
|
+
version: 1,
|
|
72
|
+
generatedAt: now(),
|
|
73
|
+
since: input.since,
|
|
74
|
+
chain,
|
|
75
|
+
counts: { auditEntries: audit.length, workflowRuns: runs.length },
|
|
76
|
+
limitations: [
|
|
77
|
+
...(chain.borrados?.length
|
|
78
|
+
? [
|
|
79
|
+
`FALTAN ${chain.borrados.length} fichero(s) que el índice recuerda, con ${chain.borrados.reduce((n, f) => n + f.entradas, 0)} entrada(s): ${chain.borrados.map((f) => f.fichero).join(", ")}.`,
|
|
80
|
+
]
|
|
81
|
+
: []),
|
|
82
|
+
...(chain.incompletos?.length
|
|
83
|
+
? [
|
|
84
|
+
`${chain.incompletos.length} fichero(s) han perdido entradas por la cola: ${chain.incompletos.map((f) => `${f.fichero} (faltan ${f.faltan})`).join(", ")}.`,
|
|
85
|
+
]
|
|
86
|
+
: []),
|
|
87
|
+
...(chain.sinAncla?.length
|
|
88
|
+
? [
|
|
89
|
+
`${chain.sinAncla.length} fichero(s) sin ancla en el índice (escritos antes de que existiera): su desaparición no se podría detectar.`,
|
|
90
|
+
]
|
|
91
|
+
: []),
|
|
92
|
+
"La cadena hash prueba INTEGRIDAD INTERNA del log (que no se editó ni reordenó), no PROCEDENCIA: no acredita quién lo generó ni en qué máquina.",
|
|
93
|
+
"Para no-repudio hace falta firma con clave gestionada (HSM); este bundle no la incluye.",
|
|
94
|
+
"El bundle refleja lo que el agente registró. No es una auditoría independiente del código resultante.",
|
|
95
|
+
],
|
|
96
|
+
};
|
|
97
|
+
await writeFile(join(outDir, "manifest.json"), JSON.stringify(manifest, null, 2), "utf-8");
|
|
98
|
+
return manifest;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=audit-export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-export.js","sourceRoot":"","sources":["../../../src/core/memory-engine/audit-export.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAqCjC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACtC,KAAuB,EACvB,MAAc,EACd,GAAG,GAAiB,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EACnB;IAC/B,MAAM,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEzC,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;IAEnC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK;QACxB,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,IAAK,CAAC,CAAC,EAAa,IAAK,KAAK,CAAC,KAAgB,CAAC;QAC5F,CAAC,CAAC,GAAG,CAAC;IACP,MAAM,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IAEtG,2EAA2E;IAC3E,MAAM,IAAI,GAAmC,EAAE,CAAC;IAChD,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QACnB,IAAI,CAAC;YACJ,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;gBACtF,IAAI,CAAC;oBACJ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAA4B,CAAC;oBACxG,IAAI,KAAK,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK;wBAAE,SAAS;oBAClG,IAAI,CAAC,IAAI,CAAC;wBACT,KAAK,EAAE,KAAK,CAAC,KAAK;wBAClB,IAAI,EAAE,KAAK,CAAC,IAAI;wBAChB,MAAM,EAAE,KAAK,CAAC,MAAM;wBACpB,SAAS,EAAE,KAAK,CAAC,SAAS;wBAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;wBAC1B,UAAU,EAAE,KAAK,CAAC,UAAU;wBAC5B,UAAU,EAAE,KAAK,CAAC,UAAU;wBAC5B,MAAM,EAAE,KAAK,CAAC,MAAM;wBACpB,UAAU,EAAE,KAAK,CAAC,UAAU;wBAC5B,IAAI,EAAE,KAAK,CAAC,IAAI;qBAChB,CAAC,CAAC;gBACJ,CAAC;gBAAC,MAAM,CAAC;oBACR,wCAAwC;gBACzC,CAAC;YACF,CAAC;QACF,CAAC;QAAC,MAAM,CAAC;YACR,oBAAmB;QACpB,CAAC;IACF,CAAC;IACD,MAAM,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,oBAAoB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAE5F,6DAA0D;IAC1D,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACrB,IAAI,CAAC;YACJ,MAAM,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;QAChG,CAAC;QAAC,MAAM,CAAC;YACR,YAAY;QACb,CAAC;IACF,CAAC;IAED,MAAM,QAAQ,GAAwB;QACrC,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,GAAG,EAAE;QAClB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,KAAK;QACL,MAAM,EAAE,EAAE,YAAY,EAAE,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE;QACjE,WAAW,EAAE;YACZ,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM;gBACzB,CAAC,CAAC;oBACA,UAAU,KAAK,CAAC,QAAQ,CAAC,MAAM,4CAA2C,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,gBAAgB,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;iBAC9L;gBACF,CAAC,CAAC,EAAE,CAAC;YACN,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM;gBAC5B,CAAC,CAAC;oBACA,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,iDAAiD,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;iBAC3J;gBACF,CAAC,CAAC,EAAE,CAAC;YACN,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM;gBACzB,CAAC,CAAC;oBACA,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,iHAA8G;iBACtI;gBACF,CAAC,CAAC,EAAE,CAAC;YACN,sJAAgJ;YAChJ,yFAAyF;YACzF,0GAAuG;SACvG;KACD,CAAC;IACF,MAAM,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC3F,OAAO,QAAQ,CAAC;AAAA,CAChB","sourcesContent":["/**\n * Bundle de evidencia — auditoría que se queda con el cliente.\n *\n * Es la dirección OPUESTA a subir transcripciones a una nube: un cliente\n * regulado produce, en local y por sí mismo, un artefacto verificable de qué\n * hizo el agente y qué se verificó. Cero red.\n *\n * No inventa nada: junta tres fuentes que ya existen y añade el resultado de la\n * verificación de la cadena hash.\n *\n * ponytail: la cadena hash prueba consistencia interna, NO procedencia. Si un\n * cliente necesita no-repudio, eso es una conversación de HSM/firma — el\n * manifiesto lo dice explícitamente en vez de insinuar que lo cubre.\n */\n\nimport { mkdir, readdir, readFile, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport type { VeredictoDelRegistro } from \"./audit-indice.ts\";\n\nexport interface AuditBundleInput {\n\t/** Raíz del engine (`<agentDir>/memory-engine`). */\n\trootDir: string;\n\t/** Directorio de runs de workflow (`<agentDir>/workflows/runs`). */\n\trunsDir?: string;\n\t/** Fichero del grafo, si existe. */\n\tgraphPath?: string;\n\t/** Solo entradas con `ts >= since` (ISO). */\n\tsince?: string;\n\t/** Verificador de la cadena (inyectable para tests). */\n\tverify: () => Promise<VeredictoDelRegistro>;\n\t/** Lector de entradas de auditoría. */\n\tentries: (limit: number) => Promise<Array<Record<string, unknown>>>;\n}\n\nexport interface AuditBundleManifest {\n\tversion: 1;\n\tgeneratedAt: string;\n\tsince?: string;\n\t/**\n\t * El veredicto ENTERO, no un resumen.\n\t *\n\t * Antes este campo estaba declarado como `{valid, tamperedAt, entriesChecked}`\n\t * y el veredicto pasaba por ese hueco perdiendo lo demás sin dar un solo\n\t * error: el manifiesto decía `\"chain\": {\"valid\": true}` sobre un registro al\n\t * que le faltaban ficheros enteros. Un tipo intermedio que recorta campos es\n\t * peor que uno que se queja, porque el recorte no se ve en ningún sitio.\n\t */\n\tchain: VeredictoDelRegistro;\n\tcounts: { auditEntries: number; workflowRuns: number };\n\t/** Lo que este bundle NO prueba. Explícito a propósito. */\n\tlimitations: string[];\n}\n\n/**\n * Escribe el bundle en `outDir`. Devuelve el manifiesto.\n * `generatedAt` se inyecta para que el test sea determinista.\n */\nexport async function exportAuditBundle(\n\tinput: AuditBundleInput,\n\toutDir: string,\n\tnow: () => string = () => new Date().toISOString(),\n): Promise<AuditBundleManifest> {\n\tawait mkdir(outDir, { recursive: true });\n\n\tconst chain = await input.verify();\n\n\tconst all = await input.entries(100000);\n\tconst audit = input.since\n\t\t? all.filter((e) => typeof e.ts === \"string\" && (e.ts as string) >= (input.since as string))\n\t\t: all;\n\tawait writeFile(join(outDir, \"audit.jsonl\"), audit.map((e) => JSON.stringify(e)).join(\"\\n\"), \"utf-8\");\n\n\t// Runs de workflow: el journal ya guarda script, args, fases y resultPath.\n\tconst runs: Array<Record<string, unknown>> = [];\n\tif (input.runsDir) {\n\t\ttry {\n\t\t\tfor (const file of (await readdir(input.runsDir)).filter((f) => f.endsWith(\".json\"))) {\n\t\t\t\ttry {\n\t\t\t\t\tconst state = JSON.parse(await readFile(join(input.runsDir, file), \"utf-8\")) as Record<string, unknown>;\n\t\t\t\t\tif (input.since && typeof state.startedAt === \"string\" && state.startedAt < input.since) continue;\n\t\t\t\t\truns.push({\n\t\t\t\t\t\trunId: state.runId,\n\t\t\t\t\t\tname: state.name,\n\t\t\t\t\t\tstatus: state.status,\n\t\t\t\t\t\tstartedAt: state.startedAt,\n\t\t\t\t\t\tupdatedAt: state.updatedAt,\n\t\t\t\t\t\tagentCount: state.agentCount,\n\t\t\t\t\t\ttokenUsage: state.tokenUsage,\n\t\t\t\t\t\tphases: state.phases,\n\t\t\t\t\t\tresultPath: state.resultPath,\n\t\t\t\t\t\targs: state.args,\n\t\t\t\t\t});\n\t\t\t\t} catch {\n\t\t\t\t\t// un run ilegible no invalida el bundle\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {\n\t\t\t// sin runs todavía\n\t\t}\n\t}\n\tawait writeFile(join(outDir, \"workflow-runs.json\"), JSON.stringify(runs, null, 2), \"utf-8\");\n\n\t// Grafo: la traza de qué se verificó y con qué evidencia.\n\tif (input.graphPath) {\n\t\ttry {\n\t\t\tawait writeFile(join(outDir, \"graph.json\"), await readFile(input.graphPath, \"utf-8\"), \"utf-8\");\n\t\t} catch {\n\t\t\t// sin grafo\n\t\t}\n\t}\n\n\tconst manifest: AuditBundleManifest = {\n\t\tversion: 1,\n\t\tgeneratedAt: now(),\n\t\tsince: input.since,\n\t\tchain,\n\t\tcounts: { auditEntries: audit.length, workflowRuns: runs.length },\n\t\tlimitations: [\n\t\t\t...(chain.borrados?.length\n\t\t\t\t? [\n\t\t\t\t\t\t`FALTAN ${chain.borrados.length} fichero(s) que el índice recuerda, con ${chain.borrados.reduce((n, f) => n + f.entradas, 0)} entrada(s): ${chain.borrados.map((f) => f.fichero).join(\", \")}.`,\n\t\t\t\t\t]\n\t\t\t\t: []),\n\t\t\t...(chain.incompletos?.length\n\t\t\t\t? [\n\t\t\t\t\t\t`${chain.incompletos.length} fichero(s) han perdido entradas por la cola: ${chain.incompletos.map((f) => `${f.fichero} (faltan ${f.faltan})`).join(\", \")}.`,\n\t\t\t\t\t]\n\t\t\t\t: []),\n\t\t\t...(chain.sinAncla?.length\n\t\t\t\t? [\n\t\t\t\t\t\t`${chain.sinAncla.length} fichero(s) sin ancla en el índice (escritos antes de que existiera): su desaparición no se podría detectar.`,\n\t\t\t\t\t]\n\t\t\t\t: []),\n\t\t\t\"La cadena hash prueba INTEGRIDAD INTERNA del log (que no se editó ni reordenó), no PROCEDENCIA: no acredita quién lo generó ni en qué máquina.\",\n\t\t\t\"Para no-repudio hace falta firma con clave gestionada (HSM); este bundle no la incluye.\",\n\t\t\t\"El bundle refleja lo que el agente registró. No es una auditoría independiente del código resultante.\",\n\t\t],\n\t};\n\tawait writeFile(join(outDir, \"manifest.json\"), JSON.stringify(manifest, null, 2), \"utf-8\");\n\treturn manifest;\n}\n"]}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* El índice del audit del motor de memoria: lo que DEBERÍA existir.
|
|
3
|
+
*
|
|
4
|
+
* EL AGUJERO, medido antes de escribir nada, sobre un directorio temporal con
|
|
5
|
+
* cinco entradas y la implementación de `audit.ts` tal como estaba:
|
|
6
|
+
*
|
|
7
|
+
* 1) las 5 entradas intactas : {"valid":true,"entriesChecked":5}
|
|
8
|
+
* 2) editada la del medio : {"valid":false,"entriesChecked":2}
|
|
9
|
+
* 3) fichero BORRADO entero : {"valid":true,"entriesChecked":0} <- éxito
|
|
10
|
+
* 4) TRUNCADO (-2 últimas) : {"valid":true,"entriesChecked":3} <- éxito
|
|
11
|
+
* 5) QUITADA una del medio : {"valid":false,"entriesChecked":2}
|
|
12
|
+
*
|
|
13
|
+
* Y las dos que sacan la forma completa:
|
|
14
|
+
*
|
|
15
|
+
* B) directorio `audit/` borrado : {"valid":false,"entriesChecked":0}
|
|
16
|
+
* C) instalación nueva : {"valid":false,"entriesChecked":0} <- lo mismo
|
|
17
|
+
*
|
|
18
|
+
* O sea: no había tres estados, había dos, y ninguno caía donde debía. Un
|
|
19
|
+
* borrado se leía como éxito y una instalación virgen se leía como
|
|
20
|
+
* manipulación — un detector que acusa a toda instalación limpia deja de
|
|
21
|
+
* leerse, y con él se va también la señal de la manipulación real.
|
|
22
|
+
*
|
|
23
|
+
* LA RAZÓN DE FONDO, y por eso esto es un módulo aparte y no un `if` más en
|
|
24
|
+
* `verify`: la cadena de hashes NO PUEDE, por construcción, hablar de lo que ya
|
|
25
|
+
* no está. `readdir(audit/)` solo sabe contestar «lo que hay». Para contestar
|
|
26
|
+
* «lo que debería haber» hace falta un registro APARTE, que es exactamente lo
|
|
27
|
+
* que `audit/libro.ts` resolvió con su índice de dos directorios.
|
|
28
|
+
*
|
|
29
|
+
* LA DIFERENCIA CON `libro.ts`, que es la que decide el diseño: allí el ancla
|
|
30
|
+
* es un ENLACE DURO por fichero, y basta porque el ataque que importa es `rm`.
|
|
31
|
+
* Aquí no basta. Un enlace duro comparte inodo, así que `truncate` recorta los
|
|
32
|
+
* bytes de los DOS nombres a la vez y el caso 4 seguiría pasando entero. Y el
|
|
33
|
+
* caso 4 tiene una variante peor, la que de verdad ocurre: truncar y dejar que
|
|
34
|
+
* el proceso siga: `load()` lee la última entrada superviviente, retoma `seq` y
|
|
35
|
+
* `lastHash` desde ahí y encadena por encima del hueco. Quedan `seq` 1,2,3,4
|
|
36
|
+
* correlativos y cadena perfecta, con dos entradas desaparecidas y ni una sola
|
|
37
|
+
* señal.
|
|
38
|
+
*
|
|
39
|
+
* Por eso el ancla de aquí es por ENTRADA y no por fichero: un fichero
|
|
40
|
+
* `<nombre>.ancla` en `audit-indice/`, append-only, con el hash de cada entrada
|
|
41
|
+
* escrita, uno por línea. Verificar es entonces una resta de conjuntos: los
|
|
42
|
+
* hashes que el índice recuerda y que ya no aparecen en el log son entradas que
|
|
43
|
+
* han desaparecido, se las hayan llevado borrando el fichero, recortándole la
|
|
44
|
+
* cola o quitándolas del medio.
|
|
45
|
+
*
|
|
46
|
+
* DOS DECISIONES QUE CONVIENE NO DESHACER SIN PENSARLAS:
|
|
47
|
+
*
|
|
48
|
+
* 1. **Se ancla DESPUÉS de escribir la entrada, nunca antes.** Al revés —
|
|
49
|
+
* escribir el ancla primero— un proceso que muera entre las dos escrituras
|
|
50
|
+
* dejaría un hash anclado cuya entrada no llegó nunca, y la siguiente
|
|
51
|
+
* verificación acusaría de manipulación a un simple corte de luz. Se prefiere
|
|
52
|
+
* el fallo del otro lado: durante esa ventana de microsegundos la última
|
|
53
|
+
* entrada está sin anclar y su desaparición no se detectaría. Un falso
|
|
54
|
+
* negativo estrechísimo es mejor que un falso positivo en cada caída.
|
|
55
|
+
* 2. **Lo que sobra no acusa.** Entradas del log que no estén en el índice NO
|
|
56
|
+
* son un hallazgo: son logs escritos antes de que el índice existiera, o la
|
|
57
|
+
* ventana del punto anterior. Solo cuenta lo que el índice recuerda y ya no
|
|
58
|
+
* está. Sin esta asimetría, el día de la actualización toda instalación
|
|
59
|
+
* existente gritaría «manipulado».
|
|
60
|
+
*
|
|
61
|
+
* HASTA DÓNDE LLEGA, dicho sin adornos: quien borre los DOS directorios deja un
|
|
62
|
+
* registro vacío indistinguible de una instalación nueva. Contra eso no hay
|
|
63
|
+
* ancla local que valga —cualquier ancla en el mismo disco y con los mismos
|
|
64
|
+
* permisos se borra igual—; hace falta un ancla externa. Lo que esto elimina es
|
|
65
|
+
* que un solo `rm` o un solo `truncate` pasen desapercibidos.
|
|
66
|
+
*/
|
|
67
|
+
/** Donde vive el log: `<rootDir>/audit/audit-YYYY-MM-DD.jsonl`. */
|
|
68
|
+
export declare const DIR_AUDIT = "audit";
|
|
69
|
+
/**
|
|
70
|
+
* El índice: `<rootDir>/audit-indice/<nombre del log>.ancla`.
|
|
71
|
+
*
|
|
72
|
+
* Va FUERA de `audit/` a propósito. Dentro, el `rm -rf audit/` que este
|
|
73
|
+
* mecanismo existe para detectar se llevaría por delante también la prueba.
|
|
74
|
+
*/
|
|
75
|
+
export declare const DIR_INDICE_AUDIT = "audit-indice";
|
|
76
|
+
/** Los tres estados. «Vacío» NO es «íntegro»: ver la cabecera de este fichero. */
|
|
77
|
+
export type EstadoDelRegistro = "integro" | "alterado" | "vacio";
|
|
78
|
+
/**
|
|
79
|
+
* Por qué está alterado, que no es lo mismo que el hecho de que lo esté.
|
|
80
|
+
*
|
|
81
|
+
* Un detector que diera el mismo veredicto a tres causas distintas no
|
|
82
|
+
* distinguiría ninguna, y el mensaje acabaría acusando de lo que no es.
|
|
83
|
+
*
|
|
84
|
+
* `ilegible` es el que no acusa de nada: es «no lo he podido mirar», y va
|
|
85
|
+
* separado de los demás porque para quien responde a una auditoría no es lo
|
|
86
|
+
* mismo que «lo he mirado y no cuadra».
|
|
87
|
+
*/
|
|
88
|
+
export type CausaDeAlteracion = "editada" | "enlace-roto" | "borrado" | "faltan-entradas" | "ilegible";
|
|
89
|
+
export interface VeredictoDelRegistro {
|
|
90
|
+
estado: EstadoDelRegistro;
|
|
91
|
+
/**
|
|
92
|
+
* Compat con quien ya lee este veredicto: el modo interactivo, la ruta
|
|
93
|
+
* `/api/memory/audit` del escritorio y `audit-export.ts`. Es `estado ===
|
|
94
|
+
* "integro" || estado === "vacio"` — una instalación virgen no está
|
|
95
|
+
* manipulada, y quien quiera distinguirlas tiene `estado`.
|
|
96
|
+
*/
|
|
97
|
+
valid: boolean;
|
|
98
|
+
entriesChecked: number;
|
|
99
|
+
/** Sello de tiempo de la primera entrada que no cuadra. */
|
|
100
|
+
tamperedAt?: string;
|
|
101
|
+
causa?: CausaDeAlteracion;
|
|
102
|
+
/** Por qué no verifica, en una frase estable. */
|
|
103
|
+
motivo?: string;
|
|
104
|
+
/** Dónde mirar. Sin esto el aviso de manipulación se queda en susto. */
|
|
105
|
+
ficheroAlterado?: string;
|
|
106
|
+
/** Ficheros que el índice recuerda y que ya no están, con cuántas entradas tenían. */
|
|
107
|
+
borrados?: {
|
|
108
|
+
fichero: string;
|
|
109
|
+
entradas: number;
|
|
110
|
+
}[];
|
|
111
|
+
/** Ficheros que siguen ahí pero a los que les faltan entradas ancladas. */
|
|
112
|
+
incompletos?: {
|
|
113
|
+
fichero: string;
|
|
114
|
+
entradas: number;
|
|
115
|
+
faltan: number;
|
|
116
|
+
}[];
|
|
117
|
+
/**
|
|
118
|
+
* Ficheros del log sin ancla en el índice: logs anteriores al índice.
|
|
119
|
+
*
|
|
120
|
+
* NO es una acusación y por eso va aparte: meterlo en `estado: "alterado"`
|
|
121
|
+
* habría hecho que toda instalación ya existente gritara «manipulado» el día
|
|
122
|
+
* de la actualización.
|
|
123
|
+
*/
|
|
124
|
+
sinAncla?: string[];
|
|
125
|
+
}
|
|
126
|
+
/** Carga a hashear de una entrada, tal y como `audit.ts` la reconstruye. */
|
|
127
|
+
type Rehasheador = (prevHash: string | null, carga: Record<string, unknown>) => string;
|
|
128
|
+
/**
|
|
129
|
+
* Anota en el índice el hash de una entrada recién escrita.
|
|
130
|
+
*
|
|
131
|
+
* Append-only y una línea por entrada: sobrescribir un ancla con «la última»
|
|
132
|
+
* la volvería inútil justo en el caso que importa, porque tras un truncado el
|
|
133
|
+
* proceso siguiente la sobrescribiría con un número MENOR y borraría la prueba.
|
|
134
|
+
*/
|
|
135
|
+
export declare function anclarEntrada(raiz: string, fichero: string, hash: string): Promise<void>;
|
|
136
|
+
/**
|
|
137
|
+
* Verifica el registro entero y contesta TRES estados.
|
|
138
|
+
*
|
|
139
|
+
* Reparto de tareas, que es lo que hace que esto no sea un parche:
|
|
140
|
+
*
|
|
141
|
+
* · la cadena de hashes dice si lo que HAY está intacto y en orden;
|
|
142
|
+
* · el índice dice si lo que hay es TODO lo que hubo.
|
|
143
|
+
*
|
|
144
|
+
* Ninguna de las dos puede contestar la pregunta de la otra.
|
|
145
|
+
*
|
|
146
|
+
* `rehash` se inyecta en vez de importarse para no crear un ciclo con
|
|
147
|
+
* `audit.ts`, que es quien tiene la única canonicalización buena — la misma que
|
|
148
|
+
* usa al escribir, reconstruida con un rest para que las dos caras no puedan
|
|
149
|
+
* divergir.
|
|
150
|
+
*/
|
|
151
|
+
export declare function verificarRegistro(raiz: string, rehash: Rehasheador): Promise<VeredictoDelRegistro>;
|
|
152
|
+
export {};
|
|
153
|
+
//# sourceMappingURL=audit-indice.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-indice.d.ts","sourceRoot":"","sources":["../../../src/core/memory-engine/audit-indice.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiEG;AAKH,mEAAmE;AACnE,eAAO,MAAM,SAAS,UAAU,CAAC;AAEjC;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,iBAAiB,CAAC;AAK/C,wFAAkF;AAClF,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;AAEjE;;;;;;;;;GASG;AACH,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,GAAG,iBAAiB,GAAG,UAAU,CAAC;AAEvG,MAAM,WAAW,oBAAoB;IACpC,MAAM,EAAE,iBAAiB,CAAC;IAC1B;;;;;OAKG;IACH,KAAK,EAAE,OAAO,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,kDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0EAAwE;IACxE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,0FAAsF;IACtF,QAAQ,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACnD,4EAA2E;IAC3E,WAAW,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACtE;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,4EAA4E;AAC5E,KAAK,WAAW,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;AAUvF;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI9F;AAgBD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAuJxG","sourcesContent":["/**\n * El índice del audit del motor de memoria: lo que DEBERÍA existir.\n *\n * EL AGUJERO, medido antes de escribir nada, sobre un directorio temporal con\n * cinco entradas y la implementación de `audit.ts` tal como estaba:\n *\n * 1) las 5 entradas intactas : {\"valid\":true,\"entriesChecked\":5}\n * 2) editada la del medio : {\"valid\":false,\"entriesChecked\":2}\n * 3) fichero BORRADO entero : {\"valid\":true,\"entriesChecked\":0} <- éxito\n * 4) TRUNCADO (-2 últimas) : {\"valid\":true,\"entriesChecked\":3} <- éxito\n * 5) QUITADA una del medio : {\"valid\":false,\"entriesChecked\":2}\n *\n * Y las dos que sacan la forma completa:\n *\n * B) directorio `audit/` borrado : {\"valid\":false,\"entriesChecked\":0}\n * C) instalación nueva : {\"valid\":false,\"entriesChecked\":0} <- lo mismo\n *\n * O sea: no había tres estados, había dos, y ninguno caía donde debía. Un\n * borrado se leía como éxito y una instalación virgen se leía como\n * manipulación — un detector que acusa a toda instalación limpia deja de\n * leerse, y con él se va también la señal de la manipulación real.\n *\n * LA RAZÓN DE FONDO, y por eso esto es un módulo aparte y no un `if` más en\n * `verify`: la cadena de hashes NO PUEDE, por construcción, hablar de lo que ya\n * no está. `readdir(audit/)` solo sabe contestar «lo que hay». Para contestar\n * «lo que debería haber» hace falta un registro APARTE, que es exactamente lo\n * que `audit/libro.ts` resolvió con su índice de dos directorios.\n *\n * LA DIFERENCIA CON `libro.ts`, que es la que decide el diseño: allí el ancla\n * es un ENLACE DURO por fichero, y basta porque el ataque que importa es `rm`.\n * Aquí no basta. Un enlace duro comparte inodo, así que `truncate` recorta los\n * bytes de los DOS nombres a la vez y el caso 4 seguiría pasando entero. Y el\n * caso 4 tiene una variante peor, la que de verdad ocurre: truncar y dejar que\n * el proceso siga: `load()` lee la última entrada superviviente, retoma `seq` y\n * `lastHash` desde ahí y encadena por encima del hueco. Quedan `seq` 1,2,3,4\n * correlativos y cadena perfecta, con dos entradas desaparecidas y ni una sola\n * señal.\n *\n * Por eso el ancla de aquí es por ENTRADA y no por fichero: un fichero\n * `<nombre>.ancla` en `audit-indice/`, append-only, con el hash de cada entrada\n * escrita, uno por línea. Verificar es entonces una resta de conjuntos: los\n * hashes que el índice recuerda y que ya no aparecen en el log son entradas que\n * han desaparecido, se las hayan llevado borrando el fichero, recortándole la\n * cola o quitándolas del medio.\n *\n * DOS DECISIONES QUE CONVIENE NO DESHACER SIN PENSARLAS:\n *\n * 1. **Se ancla DESPUÉS de escribir la entrada, nunca antes.** Al revés —\n * escribir el ancla primero— un proceso que muera entre las dos escrituras\n * dejaría un hash anclado cuya entrada no llegó nunca, y la siguiente\n * verificación acusaría de manipulación a un simple corte de luz. Se prefiere\n * el fallo del otro lado: durante esa ventana de microsegundos la última\n * entrada está sin anclar y su desaparición no se detectaría. Un falso\n * negativo estrechísimo es mejor que un falso positivo en cada caída.\n * 2. **Lo que sobra no acusa.** Entradas del log que no estén en el índice NO\n * son un hallazgo: son logs escritos antes de que el índice existiera, o la\n * ventana del punto anterior. Solo cuenta lo que el índice recuerda y ya no\n * está. Sin esta asimetría, el día de la actualización toda instalación\n * existente gritaría «manipulado».\n *\n * HASTA DÓNDE LLEGA, dicho sin adornos: quien borre los DOS directorios deja un\n * registro vacío indistinguible de una instalación nueva. Contra eso no hay\n * ancla local que valga —cualquier ancla en el mismo disco y con los mismos\n * permisos se borra igual—; hace falta un ancla externa. Lo que esto elimina es\n * que un solo `rm` o un solo `truncate` pasen desapercibidos.\n */\n\nimport { appendFile, mkdir, readdir, readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\n/** Donde vive el log: `<rootDir>/audit/audit-YYYY-MM-DD.jsonl`. */\nexport const DIR_AUDIT = \"audit\";\n\n/**\n * El índice: `<rootDir>/audit-indice/<nombre del log>.ancla`.\n *\n * Va FUERA de `audit/` a propósito. Dentro, el `rm -rf audit/` que este\n * mecanismo existe para detectar se llevaría por delante también la prueba.\n */\nexport const DIR_INDICE_AUDIT = \"audit-indice\";\n\nconst RE_LOG = /^audit-.*\\.jsonl$/;\nconst SUFIJO_ANCLA = \".ancla\";\n\n/** Los tres estados. «Vacío» NO es «íntegro»: ver la cabecera de este fichero. */\nexport type EstadoDelRegistro = \"integro\" | \"alterado\" | \"vacio\";\n\n/**\n * Por qué está alterado, que no es lo mismo que el hecho de que lo esté.\n *\n * Un detector que diera el mismo veredicto a tres causas distintas no\n * distinguiría ninguna, y el mensaje acabaría acusando de lo que no es.\n *\n * `ilegible` es el que no acusa de nada: es «no lo he podido mirar», y va\n * separado de los demás porque para quien responde a una auditoría no es lo\n * mismo que «lo he mirado y no cuadra».\n */\nexport type CausaDeAlteracion = \"editada\" | \"enlace-roto\" | \"borrado\" | \"faltan-entradas\" | \"ilegible\";\n\nexport interface VeredictoDelRegistro {\n\testado: EstadoDelRegistro;\n\t/**\n\t * Compat con quien ya lee este veredicto: el modo interactivo, la ruta\n\t * `/api/memory/audit` del escritorio y `audit-export.ts`. Es `estado ===\n\t * \"integro\" || estado === \"vacio\"` — una instalación virgen no está\n\t * manipulada, y quien quiera distinguirlas tiene `estado`.\n\t */\n\tvalid: boolean;\n\tentriesChecked: number;\n\t/** Sello de tiempo de la primera entrada que no cuadra. */\n\ttamperedAt?: string;\n\tcausa?: CausaDeAlteracion;\n\t/** Por qué no verifica, en una frase estable. */\n\tmotivo?: string;\n\t/** Dónde mirar. Sin esto el aviso de manipulación se queda en susto. */\n\tficheroAlterado?: string;\n\t/** Ficheros que el índice recuerda y que ya no están, con cuántas entradas tenían. */\n\tborrados?: { fichero: string; entradas: number }[];\n\t/** Ficheros que siguen ahí pero a los que les faltan entradas ancladas. */\n\tincompletos?: { fichero: string; entradas: number; faltan: number }[];\n\t/**\n\t * Ficheros del log sin ancla en el índice: logs anteriores al índice.\n\t *\n\t * NO es una acusación y por eso va aparte: meterlo en `estado: \"alterado\"`\n\t * habría hecho que toda instalación ya existente gritara «manipulado» el día\n\t * de la actualización.\n\t */\n\tsinAncla?: string[];\n}\n\n/** Carga a hashear de una entrada, tal y como `audit.ts` la reconstruye. */\ntype Rehasheador = (prevHash: string | null, carga: Record<string, unknown>) => string;\n\n/** Lo mínimo que la verificación necesita saber de una entrada. */\ninterface EntradaLeida {\n\tts?: string;\n\thash?: string;\n\tprevHash?: string | null;\n\t[campo: string]: unknown;\n}\n\n/**\n * Anota en el índice el hash de una entrada recién escrita.\n *\n * Append-only y una línea por entrada: sobrescribir un ancla con «la última»\n * la volvería inútil justo en el caso que importa, porque tras un truncado el\n * proceso siguiente la sobrescribiría con un número MENOR y borraría la prueba.\n */\nexport async function anclarEntrada(raiz: string, fichero: string, hash: string): Promise<void> {\n\tconst dir = join(raiz, DIR_INDICE_AUDIT);\n\tawait mkdir(dir, { recursive: true });\n\tawait appendFile(join(dir, fichero + SUFIJO_ANCLA), `${hash}\\n`, \"utf-8\");\n}\n\n/** `null` = no se ha podido mirar, que no es lo mismo que «no hay nada». */\nasync function listar(dir: string, filtro: RegExp): Promise<string[] | null> {\n\ttry {\n\t\treturn (await readdir(dir)).filter((f) => filtro.test(f)).sort();\n\t} catch (error) {\n\t\tif ((error as NodeJS.ErrnoException).code === \"ENOENT\") return [];\n\t\treturn null;\n\t}\n}\n\nfunction veredictoIlegible(motivo: string, comprobadas = 0): VeredictoDelRegistro {\n\treturn { estado: \"alterado\", valid: false, entriesChecked: comprobadas, causa: \"ilegible\", motivo };\n}\n\n/**\n * Verifica el registro entero y contesta TRES estados.\n *\n * Reparto de tareas, que es lo que hace que esto no sea un parche:\n *\n * · la cadena de hashes dice si lo que HAY está intacto y en orden;\n * · el índice dice si lo que hay es TODO lo que hubo.\n *\n * Ninguna de las dos puede contestar la pregunta de la otra.\n *\n * `rehash` se inyecta en vez de importarse para no crear un ciclo con\n * `audit.ts`, que es quien tiene la única canonicalización buena — la misma que\n * usa al escribir, reconstruida con un rest para que las dos caras no puedan\n * divergir.\n */\nexport async function verificarRegistro(raiz: string, rehash: Rehasheador): Promise<VeredictoDelRegistro> {\n\tconst dirAudit = join(raiz, DIR_AUDIT);\n\tconst dirIndice = join(raiz, DIR_INDICE_AUDIT);\n\n\tconst logs = await listar(dirAudit, RE_LOG);\n\tif (logs === null)\n\t\treturn veredictoIlegible(\"no se ha podido leer el directorio del registro: no es «está bien», es «no lo sé»\");\n\tconst anclas = await listar(dirIndice, new RegExp(`^audit-.*\\\\.jsonl\\\\${SUFIJO_ANCLA}$`));\n\tif (anclas === null)\n\t\treturn veredictoIlegible(\"no se ha podido leer el índice del registro: no es «está bien», es «no lo sé»\");\n\n\t// Lo que el índice recuerda, por fichero.\n\tconst recordados = new Map<string, string[]>();\n\tfor (const ancla of anclas) {\n\t\tconst nombre = ancla.slice(0, -SUFIJO_ANCLA.length);\n\t\ttry {\n\t\t\tconst hashes = (await readFile(join(dirIndice, ancla), \"utf-8\")).split(\"\\n\").filter(Boolean);\n\t\t\tif (hashes.length > 0) recordados.set(nombre, hashes);\n\t\t} catch {\n\t\t\treturn veredictoIlegible(`no se ha podido leer el ancla de ${nombre}: no es «está bien», es «no lo sé»`);\n\t\t}\n\t}\n\n\t// Un registro que nunca se escribió NO es un registro íntegro. Este es el\n\t// caso C: sin esto, la instalación virgen daba el mismo veredicto que el\n\t// directorio borrado del caso B.\n\tif (logs.length === 0 && recordados.size === 0) {\n\t\treturn { estado: \"vacio\", valid: true, entriesChecked: 0 };\n\t}\n\n\tconst presentes = new Set(logs);\n\tconst borrados: { fichero: string; entradas: number }[] = [];\n\tconst incompletos: { fichero: string; entradas: number; faltan: number }[] = [];\n\tconst sinAncla: string[] = [];\n\n\t// Los ficheros que el índice recuerda y ya NO están. Se cuentan antes de\n\t// recorrer la cadena porque son la EXPLICACIÓN de los enlaces rotos que\n\t// vengan después: sin esto, un fichero borrado se denunciaría como «enlace\n\t// roto» en el fichero siguiente, acusando de mover entradas a quien borró un\n\t// día entero.\n\tfor (const [nombre, hashes] of recordados) {\n\t\tif (!presentes.has(nombre)) borrados.push({ fichero: nombre, entradas: hashes.length });\n\t}\n\n\tlet prevHash: string | null = null;\n\tlet comprobadas = 0;\n\t// La cadena del audit de memoria es GLOBAL entre ficheros —`append` nunca\n\t// reinicia `prevHash` al cambiar de día—, así que se arrastra de un fichero\n\t// al siguiente. Es justo al revés que en `libro.ts`, donde cada fichero es\n\t// una sesión y empieza en `null`.\n\tfor (const nombre of logs) {\n\t\tconst anclados = recordados.get(nombre);\n\t\tif (!anclados) sinAncla.push(nombre);\n\t\tlet crudo: string;\n\t\ttry {\n\t\t\tcrudo = await readFile(join(dirAudit, nombre), \"utf-8\");\n\t\t} catch {\n\t\t\treturn {\n\t\t\t\t...veredictoIlegible(`no se ha podido leer ${nombre}: no es «está bien», es «no lo sé»`, comprobadas),\n\t\t\t\tficheroAlterado: nombre,\n\t\t\t};\n\t\t}\n\t\tconst vistos = new Set<string>();\n\t\tfor (const linea of crudo.split(\"\\n\").filter(Boolean)) {\n\t\t\tlet entrada: EntradaLeida;\n\t\t\ttry {\n\t\t\t\tentrada = JSON.parse(linea) as EntradaLeida;\n\t\t\t} catch {\n\t\t\t\treturn {\n\t\t\t\t\testado: \"alterado\",\n\t\t\t\t\tvalid: false,\n\t\t\t\t\tentriesChecked: comprobadas,\n\t\t\t\t\tcausa: \"editada\",\n\t\t\t\t\tmotivo: \"hay una línea que no es JSON válido\",\n\t\t\t\t\tficheroAlterado: nombre,\n\t\t\t\t\t...(borrados.length ? { borrados } : {}),\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst { hash, prevHash: declarado, ...carga } = entrada;\n\t\t\t// Dos preguntas distintas que antes iban juntas y contestaban lo mismo:\n\t\t\t//\n\t\t\t// · ¿el hash cuadra con SU PROPIO contenido? -> la han editado.\n\t\t\t// · ¿su `prevHash` apunta a la anterior? -> faltan entradas o\n\t\t\t// están cambiadas de orden.\n\t\t\tif (typeof hash !== \"string\" || hash !== rehash(declarado ?? null, carga)) {\n\t\t\t\treturn {\n\t\t\t\t\testado: \"alterado\",\n\t\t\t\t\tvalid: false,\n\t\t\t\t\tentriesChecked: comprobadas,\n\t\t\t\t\ttamperedAt: entrada.ts,\n\t\t\t\t\tcausa: \"editada\",\n\t\t\t\t\tmotivo: \"el hash de una entrada no cuadra con su contenido: la han editado\",\n\t\t\t\t\tficheroAlterado: nombre,\n\t\t\t\t\t...(borrados.length ? { borrados } : {}),\n\t\t\t\t};\n\t\t\t}\n\t\t\tif ((declarado ?? null) !== prevHash) {\n\t\t\t\t// Un enlace roto DESPUÉS de una ausencia ya conocida no es un\n\t\t\t\t// hallazgo nuevo: es su consecuencia. Se sigue leyendo para poder\n\t\t\t\t// contar lo que queda, y la causa se decide al final.\n\t\t\t\tif (borrados.length === 0 && incompletos.length === 0) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\testado: \"alterado\",\n\t\t\t\t\t\tvalid: false,\n\t\t\t\t\t\tentriesChecked: comprobadas,\n\t\t\t\t\t\ttamperedAt: entrada.ts,\n\t\t\t\t\t\tcausa: \"enlace-roto\",\n\t\t\t\t\t\tmotivo:\n\t\t\t\t\t\t\t\"el enlace de una entrada no apunta a la anterior: faltan entradas o están cambiadas de orden\",\n\t\t\t\t\t\tficheroAlterado: nombre,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t\tvistos.add(hash);\n\t\t\tprevHash = hash;\n\t\t\tcomprobadas++;\n\t\t}\n\t\t// La resta que la cadena no puede hacer: lo que el índice recuerda y el\n\t\t// fichero ya no enseña. Cubre el truncado, el truncado-y-seguir-\n\t\t// escribiendo, y la entrada quitada del medio.\n\t\tif (anclados) {\n\t\t\tconst faltan = anclados.filter((h) => !vistos.has(h)).length;\n\t\t\tif (faltan > 0) incompletos.push({ fichero: nombre, entradas: anclados.length, faltan });\n\t\t}\n\t}\n\n\tif (borrados.length > 0 || incompletos.length > 0) {\n\t\tconst soloBorrados = incompletos.length === 0;\n\t\treturn {\n\t\t\testado: \"alterado\",\n\t\t\tvalid: false,\n\t\t\tentriesChecked: comprobadas,\n\t\t\tcausa: soloBorrados ? \"borrado\" : \"faltan-entradas\",\n\t\t\tmotivo: soloBorrados\n\t\t\t\t? \"el índice recuerda ficheros que ya no están: los han borrado\"\n\t\t\t\t: \"faltan entradas que el índice recuerda haber escrito: las han quitado del registro\",\n\t\t\t...(borrados.length ? { borrados } : {}),\n\t\t\t...(incompletos.length ? { incompletos } : {}),\n\t\t\t...(sinAncla.length ? { sinAncla } : {}),\n\t\t};\n\t}\n\n\t// Un registro con ancla y sin entradas todavía sigue siendo un registro\n\t// vacío: `estado: \"vacio\"` y no `\"integro\"`, para que la respuesta no\n\t// dependa de si el índice llegó a crearse antes de la primera entrada.\n\treturn {\n\t\testado: comprobadas === 0 ? \"vacio\" : \"integro\",\n\t\tvalid: true,\n\t\tentriesChecked: comprobadas,\n\t\t...(sinAncla.length ? { sinAncla } : {}),\n\t};\n}\n"]}
|