@hoilab/ada-cli 0.84.22 → 0.85.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +29 -2
- package/README.es.md +17 -6
- package/README.md +109 -11
- package/dist/ada-publico.d.ts +35 -0
- package/dist/ada-publico.d.ts.map +1 -0
- package/dist/ada-publico.js +40 -0
- package/dist/ada-publico.js.map +1 -0
- package/dist/cli/audit-command.d.ts +15 -0
- package/dist/cli/audit-command.d.ts.map +1 -0
- package/dist/cli/audit-command.js +280 -0
- package/dist/cli/audit-command.js.map +1 -0
- package/dist/cli/banco-command.d.ts +15 -0
- package/dist/cli/banco-command.d.ts.map +1 -0
- package/dist/cli/banco-command.js +213 -0
- package/dist/cli/banco-command.js.map +1 -0
- package/dist/cli/cleanse-command.d.ts +11 -0
- package/dist/cli/cleanse-command.d.ts.map +1 -0
- package/dist/cli/cleanse-command.js +101 -0
- package/dist/cli/cleanse-command.js.map +1 -0
- package/dist/cli/commit-command.d.ts +31 -0
- package/dist/cli/commit-command.d.ts.map +1 -0
- package/dist/cli/commit-command.js +158 -0
- package/dist/cli/commit-command.js.map +1 -0
- package/dist/cli/computer-command.d.ts +12 -0
- package/dist/cli/computer-command.d.ts.map +1 -0
- package/dist/cli/computer-command.js +141 -0
- package/dist/cli/computer-command.js.map +1 -0
- package/dist/cli/discover-command.d.ts +18 -0
- package/dist/cli/discover-command.d.ts.map +1 -0
- package/dist/cli/discover-command.js +108 -0
- package/dist/cli/discover-command.js.map +1 -0
- package/dist/cli/hashline-command.d.ts +11 -0
- package/dist/cli/hashline-command.d.ts.map +1 -0
- package/dist/cli/hashline-command.js +106 -0
- package/dist/cli/hashline-command.js.map +1 -0
- package/dist/cli/import-command.d.ts +35 -0
- package/dist/cli/import-command.d.ts.map +1 -0
- package/dist/cli/import-command.js +164 -0
- package/dist/cli/import-command.js.map +1 -0
- package/dist/cli/politica-command.d.ts +20 -0
- package/dist/cli/politica-command.d.ts.map +1 -0
- package/dist/cli/politica-command.js +93 -0
- package/dist/cli/politica-command.js.map +1 -0
- package/dist/cli/refine-command.d.ts +18 -0
- package/dist/cli/refine-command.d.ts.map +1 -0
- package/dist/cli/refine-command.js +101 -0
- package/dist/cli/refine-command.js.map +1 -0
- package/dist/cli/review-command.d.ts +24 -0
- package/dist/cli/review-command.d.ts.map +1 -0
- package/dist/cli/review-command.js +168 -0
- package/dist/cli/review-command.js.map +1 -0
- package/dist/cli/schedule-command.d.ts +17 -0
- package/dist/cli/schedule-command.d.ts.map +1 -0
- package/dist/cli/schedule-command.js +117 -0
- package/dist/cli/schedule-command.js.map +1 -0
- package/dist/cli/serve-command.d.ts +72 -0
- package/dist/cli/serve-command.d.ts.map +1 -0
- package/dist/cli/serve-command.js +568 -0
- package/dist/cli/serve-command.js.map +1 -0
- package/dist/cli/telegram-command.d.ts +18 -0
- package/dist/cli/telegram-command.d.ts.map +1 -0
- package/dist/cli/telegram-command.js +137 -0
- package/dist/cli/telegram-command.js.map +1 -0
- package/dist/cli/telemetria-command.d.ts +22 -0
- package/dist/cli/telemetria-command.d.ts.map +1 -0
- package/dist/cli/telemetria-command.js +127 -0
- package/dist/cli/telemetria-command.js.map +1 -0
- package/dist/cli/undo-command.d.ts +9 -0
- package/dist/cli/undo-command.d.ts.map +1 -0
- package/dist/cli/undo-command.js +56 -0
- package/dist/cli/undo-command.js.map +1 -0
- package/dist/cli/usage-command.d.ts +10 -0
- package/dist/cli/usage-command.d.ts.map +1 -0
- package/dist/cli/usage-command.js +209 -0
- package/dist/cli/usage-command.js.map +1 -0
- package/dist/cli/wiki-command.d.ts +9 -0
- package/dist/cli/wiki-command.d.ts.map +1 -0
- package/dist/cli/wiki-command.js +76 -0
- package/dist/cli/wiki-command.js.map +1 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +10 -11
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -1
- package/dist/config.js.map +1 -1
- package/dist/core/ada.d.ts +58 -0
- package/dist/core/ada.d.ts.map +1 -0
- package/dist/core/ada.js +61 -0
- package/dist/core/ada.js.map +1 -0
- package/dist/core/advisor/guarda.d.ts +66 -0
- package/dist/core/advisor/guarda.d.ts.map +1 -0
- package/dist/core/advisor/guarda.js +191 -0
- package/dist/core/advisor/guarda.js.map +1 -0
- package/dist/core/advisor/runtime.d.ts +66 -0
- package/dist/core/advisor/runtime.d.ts.map +1 -0
- package/dist/core/advisor/runtime.js +121 -0
- package/dist/core/advisor/runtime.js.map +1 -0
- package/dist/core/advisor/sesion.d.ts +109 -0
- package/dist/core/advisor/sesion.d.ts.map +1 -0
- package/dist/core/advisor/sesion.js +139 -0
- package/dist/core/advisor/sesion.js.map +1 -0
- package/dist/core/agent-session.d.ts +30 -2
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +430 -22
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/agents/loader.d.ts +77 -0
- package/dist/core/agents/loader.d.ts.map +1 -0
- package/dist/core/agents/loader.js +154 -0
- package/dist/core/agents/loader.js.map +1 -0
- package/dist/core/aprobacion/generados.d.ts +37 -0
- package/dist/core/aprobacion/generados.d.ts.map +1 -0
- package/dist/core/aprobacion/generados.js +85 -0
- package/dist/core/aprobacion/generados.js.map +1 -0
- package/dist/core/aprobacion/politica-de-maquina.d.ts +90 -0
- package/dist/core/aprobacion/politica-de-maquina.d.ts.map +1 -0
- package/dist/core/aprobacion/politica-de-maquina.js +212 -0
- package/dist/core/aprobacion/politica-de-maquina.js.map +1 -0
- package/dist/core/aprobacion/politica.d.ts +90 -0
- package/dist/core/aprobacion/politica.d.ts.map +1 -0
- package/dist/core/aprobacion/politica.js +375 -0
- package/dist/core/aprobacion/politica.js.map +1 -0
- package/dist/core/arranque/atajos.d.ts +46 -0
- package/dist/core/arranque/atajos.d.ts.map +1 -0
- package/dist/core/arranque/atajos.js +113 -0
- package/dist/core/arranque/atajos.js.map +1 -0
- package/dist/core/audit/exportacion.d.ts +54 -0
- package/dist/core/audit/exportacion.d.ts.map +1 -0
- package/dist/core/audit/exportacion.js +265 -0
- package/dist/core/audit/exportacion.js.map +1 -0
- package/dist/core/audit/libro.d.ts +318 -0
- package/dist/core/audit/libro.d.ts.map +1 -0
- package/dist/core/audit/libro.js +508 -0
- package/dist/core/audit/libro.js.map +1 -0
- package/dist/core/audit/registro-sesion.d.ts +78 -0
- package/dist/core/audit/registro-sesion.d.ts.map +1 -0
- package/dist/core/audit/registro-sesion.js +202 -0
- package/dist/core/audit/registro-sesion.js.map +1 -0
- package/dist/core/audit/retencion.d.ts +82 -0
- package/dist/core/audit/retencion.d.ts.map +1 -0
- package/dist/core/audit/retencion.js +152 -0
- package/dist/core/audit/retencion.js.map +1 -0
- package/dist/core/audit/rutas.d.ts +23 -0
- package/dist/core/audit/rutas.d.ts.map +1 -0
- package/dist/core/audit/rutas.js +23 -0
- package/dist/core/audit/rutas.js.map +1 -0
- package/dist/core/auth-storage.d.ts +0 -3
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +17 -5
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/banco/almacenamiento.d.ts +18 -0
- package/dist/core/banco/almacenamiento.d.ts.map +1 -0
- package/dist/core/banco/almacenamiento.js +50 -0
- package/dist/core/banco/almacenamiento.js.map +1 -0
- package/dist/core/banco/analisis.d.ts +37 -0
- package/dist/core/banco/analisis.d.ts.map +1 -0
- package/dist/core/banco/analisis.js +164 -0
- package/dist/core/banco/analisis.js.map +1 -0
- package/dist/core/banco/bloques.d.ts +39 -0
- package/dist/core/banco/bloques.d.ts.map +1 -0
- package/dist/core/banco/bloques.js +84 -0
- package/dist/core/banco/bloques.js.map +1 -0
- package/dist/core/banco/cargas.d.ts +84 -0
- package/dist/core/banco/cargas.d.ts.map +1 -0
- package/dist/core/banco/cargas.js +520 -0
- package/dist/core/banco/cargas.js.map +1 -0
- package/dist/core/banco/comparar.d.ts +29 -0
- package/dist/core/banco/comparar.d.ts.map +1 -0
- package/dist/core/banco/comparar.js +28 -0
- package/dist/core/banco/comparar.js.map +1 -0
- package/dist/core/banco/ejecutar.d.ts +44 -0
- package/dist/core/banco/ejecutar.d.ts.map +1 -0
- package/dist/core/banco/ejecutar.js +183 -0
- package/dist/core/banco/ejecutar.js.map +1 -0
- package/dist/core/banco/generar.d.ts +24 -0
- package/dist/core/banco/generar.d.ts.map +1 -0
- package/dist/core/banco/generar.js +159 -0
- package/dist/core/banco/generar.js.map +1 -0
- package/dist/core/banco/mutaciones.d.ts +25 -0
- package/dist/core/banco/mutaciones.d.ts.map +1 -0
- package/dist/core/banco/mutaciones.js +215 -0
- package/dist/core/banco/mutaciones.js.map +1 -0
- package/dist/core/banco/tipos.d.ts +121 -0
- package/dist/core/banco/tipos.d.ts.map +1 -0
- package/dist/core/banco/tipos.js +16 -0
- package/dist/core/banco/tipos.js.map +1 -0
- package/dist/core/blobs/almacen.d.ts +81 -0
- package/dist/core/blobs/almacen.d.ts.map +1 -0
- package/dist/core/blobs/almacen.js +198 -0
- package/dist/core/blobs/almacen.js.map +1 -0
- package/dist/core/blobs/broker.d.ts +103 -0
- package/dist/core/blobs/broker.d.ts.map +1 -0
- package/dist/core/blobs/broker.js +204 -0
- package/dist/core/blobs/broker.js.map +1 -0
- package/dist/core/blobs/index.d.ts +70 -0
- package/dist/core/blobs/index.d.ts.map +1 -0
- package/dist/core/blobs/index.js +232 -0
- package/dist/core/blobs/index.js.map +1 -0
- package/dist/core/blobs/payload.d.ts +55 -0
- package/dist/core/blobs/payload.d.ts.map +1 -0
- package/dist/core/blobs/payload.js +255 -0
- package/dist/core/blobs/payload.js.map +1 -0
- package/dist/core/blobs/proveedor.d.ts +85 -0
- package/dist/core/blobs/proveedor.d.ts.map +1 -0
- package/dist/core/blobs/proveedor.js +196 -0
- package/dist/core/blobs/proveedor.js.map +1 -0
- package/dist/core/browser/cdp.d.ts +41 -0
- package/dist/core/browser/cdp.d.ts.map +1 -0
- package/dist/core/browser/cdp.js +119 -0
- package/dist/core/browser/cdp.js.map +1 -0
- package/dist/core/browser/politica.d.ts +51 -0
- package/dist/core/browser/politica.d.ts.map +1 -0
- package/dist/core/browser/politica.js +123 -0
- package/dist/core/browser/politica.js.map +1 -0
- package/dist/core/browser/sesion.d.ts +52 -0
- package/dist/core/browser/sesion.d.ts.map +1 -0
- package/dist/core/browser/sesion.js +176 -0
- package/dist/core/browser/sesion.js.map +1 -0
- package/dist/core/browser/tools.d.ts +16 -0
- package/dist/core/browser/tools.d.ts.map +1 -0
- package/dist/core/browser/tools.js +279 -0
- package/dist/core/browser/tools.js.map +1 -0
- package/dist/core/commit/diff.d.ts +56 -0
- package/dist/core/commit/diff.d.ts.map +1 -0
- package/dist/core/commit/diff.js +145 -0
- package/dist/core/commit/diff.js.map +1 -0
- package/dist/core/commit/mensaje.d.ts +80 -0
- package/dist/core/commit/mensaje.d.ts.map +1 -0
- package/dist/core/commit/mensaje.js +207 -0
- package/dist/core/commit/mensaje.js.map +1 -0
- package/dist/core/compactar/index.d.ts +52 -0
- package/dist/core/compactar/index.d.ts.map +1 -0
- package/dist/core/compactar/index.js +91 -0
- package/dist/core/compactar/index.js.map +1 -0
- package/dist/core/compactar/registro-denso.d.ts +160 -0
- package/dist/core/compactar/registro-denso.d.ts.map +1 -0
- package/dist/core/compactar/registro-denso.js +620 -0
- package/dist/core/compactar/registro-denso.js.map +1 -0
- package/dist/core/computer/captura.d.ts +35 -0
- package/dist/core/computer/captura.d.ts.map +1 -0
- package/dist/core/computer/captura.js +140 -0
- package/dist/core/computer/captura.js.map +1 -0
- package/dist/core/computer/driver.d.ts +130 -0
- package/dist/core/computer/driver.d.ts.map +1 -0
- package/dist/core/computer/driver.js +206 -0
- package/dist/core/computer/driver.js.map +1 -0
- package/dist/core/computer/motor/actions.d.ts +109 -0
- package/dist/core/computer/motor/actions.d.ts.map +1 -0
- package/dist/core/computer/motor/actions.js +157 -0
- package/dist/core/computer/motor/actions.js.map +1 -0
- package/dist/core/computer/motor/bridge.d.ts +232 -0
- package/dist/core/computer/motor/bridge.d.ts.map +1 -0
- package/dist/core/computer/motor/bridge.js +2335 -0
- package/dist/core/computer/motor/bridge.js.map +1 -0
- package/dist/core/computer/motor/cdp.d.ts +107 -0
- package/dist/core/computer/motor/cdp.d.ts.map +1 -0
- package/dist/core/computer/motor/cdp.js +659 -0
- package/dist/core/computer/motor/cdp.js.map +1 -0
- package/dist/core/computer/motor/config.d.ts +23 -0
- package/dist/core/computer/motor/config.d.ts.map +1 -0
- package/dist/core/computer/motor/config.js +100 -0
- package/dist/core/computer/motor/config.js.map +1 -0
- package/dist/core/computer/motor/contract.d.ts +81 -0
- package/dist/core/computer/motor/contract.d.ts.map +1 -0
- package/dist/core/computer/motor/contract.js +14 -0
- package/dist/core/computer/motor/contract.js.map +1 -0
- package/dist/core/computer/motor/note.d.ts +37 -0
- package/dist/core/computer/motor/note.d.ts.map +1 -0
- package/dist/core/computer/motor/note.js +162 -0
- package/dist/core/computer/motor/note.js.map +1 -0
- package/dist/core/computer/motor/outline.d.ts +155 -0
- package/dist/core/computer/motor/outline.d.ts.map +1 -0
- package/dist/core/computer/motor/outline.js +590 -0
- package/dist/core/computer/motor/outline.js.map +1 -0
- package/dist/core/computer/motor/output.d.ts +18 -0
- package/dist/core/computer/motor/output.d.ts.map +1 -0
- package/dist/core/computer/motor/output.js +148 -0
- package/dist/core/computer/motor/output.js.map +1 -0
- package/dist/core/computer/motor/permissions.d.ts +41 -0
- package/dist/core/computer/motor/permissions.d.ts.map +1 -0
- package/dist/core/computer/motor/permissions.js +51 -0
- package/dist/core/computer/motor/permissions.js.map +1 -0
- package/dist/core/computer/motor/platform/architecture.d.ts +5 -0
- package/dist/core/computer/motor/platform/architecture.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/architecture.js +21 -0
- package/dist/core/computer/motor/platform/architecture.js.map +1 -0
- package/dist/core/computer/motor/platform/coerce.d.ts +4 -0
- package/dist/core/computer/motor/platform/coerce.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/coerce.js +17 -0
- package/dist/core/computer/motor/platform/coerce.js.map +1 -0
- package/dist/core/computer/motor/platform/index.d.ts +4 -0
- package/dist/core/computer/motor/platform/index.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/index.js +79 -0
- package/dist/core/computer/motor/platform/index.js.map +1 -0
- package/dist/core/computer/motor/platform/linux/backend.d.ts +3 -0
- package/dist/core/computer/motor/platform/linux/backend.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/linux/backend.js +173 -0
- package/dist/core/computer/motor/platform/linux/backend.js.map +1 -0
- package/dist/core/computer/motor/platform/linux/helper.d.ts +29 -0
- package/dist/core/computer/motor/platform/linux/helper.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/linux/helper.js +261 -0
- package/dist/core/computer/motor/platform/linux/helper.js.map +1 -0
- package/dist/core/computer/motor/platform/macos/backend.d.ts +3 -0
- package/dist/core/computer/motor/platform/macos/backend.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/macos/backend.js +124 -0
- package/dist/core/computer/motor/platform/macos/backend.js.map +1 -0
- package/dist/core/computer/motor/platform/macos/browser.d.ts +7 -0
- package/dist/core/computer/motor/platform/macos/browser.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/macos/browser.js +101 -0
- package/dist/core/computer/motor/platform/macos/browser.js.map +1 -0
- package/dist/core/computer/motor/platform/macos/helper-path.mjs +34 -0
- package/dist/core/computer/motor/platform/macos/helper.d.ts +32 -0
- package/dist/core/computer/motor/platform/macos/helper.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/macos/helper.js +277 -0
- package/dist/core/computer/motor/platform/macos/helper.js.map +1 -0
- package/dist/core/computer/motor/platform/macos/permissions.d.ts +4 -0
- package/dist/core/computer/motor/platform/macos/permissions.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/macos/permissions.js +118 -0
- package/dist/core/computer/motor/platform/macos/permissions.js.map +1 -0
- package/dist/core/computer/motor/platform/types.d.ts +263 -0
- package/dist/core/computer/motor/platform/types.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/types.js +2 -0
- package/dist/core/computer/motor/platform/types.js.map +1 -0
- package/dist/core/computer/motor/platform/windows/backend.d.ts +3 -0
- package/dist/core/computer/motor/platform/windows/backend.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/windows/backend.js +163 -0
- package/dist/core/computer/motor/platform/windows/backend.js.map +1 -0
- package/dist/core/computer/motor/platform/windows/helper.d.ts +18 -0
- package/dist/core/computer/motor/platform/windows/helper.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/windows/helper.js +174 -0
- package/dist/core/computer/motor/platform/windows/helper.js.map +1 -0
- package/dist/core/computer/motor/root-selection.d.ts +6 -0
- package/dist/core/computer/motor/root-selection.d.ts.map +1 -0
- package/dist/core/computer/motor/root-selection.js +28 -0
- package/dist/core/computer/motor/root-selection.js.map +1 -0
- package/dist/core/computer/motor/runtime.d.ts +50 -0
- package/dist/core/computer/motor/runtime.d.ts.map +1 -0
- package/dist/core/computer/motor/runtime.js +119 -0
- package/dist/core/computer/motor/runtime.js.map +1 -0
- package/dist/core/computer/motor/state.d.ts +68 -0
- package/dist/core/computer/motor/state.d.ts.map +1 -0
- package/dist/core/computer/motor/state.js +100 -0
- package/dist/core/computer/motor/state.js.map +1 -0
- package/dist/core/computer/motor/view.d.ts +6 -0
- package/dist/core/computer/motor/view.d.ts.map +1 -0
- package/dist/core/computer/motor/view.js +185 -0
- package/dist/core/computer/motor/view.js.map +1 -0
- package/dist/core/computer/motor-ada.d.ts +159 -0
- package/dist/core/computer/motor-ada.d.ts.map +1 -0
- package/dist/core/computer/motor-ada.js +412 -0
- package/dist/core/computer/motor-ada.js.map +1 -0
- package/dist/core/computer/politica.d.ts +56 -0
- package/dist/core/computer/politica.d.ts.map +1 -0
- package/dist/core/computer/politica.js +163 -0
- package/dist/core/computer/politica.js.map +1 -0
- package/dist/core/computer/tools.d.ts +26 -0
- package/dist/core/computer/tools.d.ts.map +1 -0
- package/dist/core/computer/tools.js +399 -0
- package/dist/core/computer/tools.js.map +1 -0
- package/dist/core/context-breakdown.d.ts +80 -0
- package/dist/core/context-breakdown.d.ts.map +1 -0
- package/dist/core/context-breakdown.js +87 -0
- package/dist/core/context-breakdown.js.map +1 -0
- package/dist/core/credenciales/cliente.d.ts +60 -0
- package/dist/core/credenciales/cliente.d.ts.map +1 -0
- package/dist/core/credenciales/cliente.js +81 -0
- package/dist/core/credenciales/cliente.js.map +1 -0
- package/dist/core/credenciales/pool.d.ts +96 -0
- package/dist/core/credenciales/pool.d.ts.map +1 -0
- package/dist/core/credenciales/pool.js +128 -0
- package/dist/core/credenciales/pool.js.map +1 -0
- package/dist/core/credenciales/reposo.d.ts +93 -0
- package/dist/core/credenciales/reposo.d.ts.map +1 -0
- package/dist/core/credenciales/reposo.js +489 -0
- package/dist/core/credenciales/reposo.js.map +1 -0
- package/dist/core/credenciales/servidor.d.ts +55 -0
- package/dist/core/credenciales/servidor.d.ts.map +1 -0
- package/dist/core/credenciales/servidor.js +205 -0
- package/dist/core/credenciales/servidor.js.map +1 -0
- package/dist/core/descubrimiento/comandos.d.ts +30 -0
- package/dist/core/descubrimiento/comandos.d.ts.map +1 -0
- package/dist/core/descubrimiento/comandos.js +76 -0
- package/dist/core/descubrimiento/comandos.js.map +1 -0
- package/dist/core/descubrimiento/mcp.d.ts +42 -0
- package/dist/core/descubrimiento/mcp.d.ts.map +1 -0
- package/dist/core/descubrimiento/mcp.js +130 -0
- package/dist/core/descubrimiento/mcp.js.map +1 -0
- package/dist/core/descubrimiento/reglas.d.ts +61 -0
- package/dist/core/descubrimiento/reglas.d.ts.map +1 -0
- package/dist/core/descubrimiento/reglas.js +134 -0
- package/dist/core/descubrimiento/reglas.js.map +1 -0
- package/dist/core/descubrimiento/skills.d.ts +57 -0
- package/dist/core/descubrimiento/skills.d.ts.map +1 -0
- package/dist/core/descubrimiento/skills.js +113 -0
- package/dist/core/descubrimiento/skills.js.map +1 -0
- package/dist/core/dificultad/clasificador.d.ts +133 -0
- package/dist/core/dificultad/clasificador.d.ts.map +1 -0
- package/dist/core/dificultad/clasificador.js +288 -0
- package/dist/core/dificultad/clasificador.js.map +1 -0
- package/dist/core/edicion/diario.d.ts +37 -0
- package/dist/core/edicion/diario.d.ts.map +1 -0
- package/dist/core/edicion/diario.js +51 -0
- package/dist/core/edicion/diario.js.map +1 -0
- package/dist/core/edicion/hashline.d.ts +71 -0
- package/dist/core/edicion/hashline.d.ts.map +1 -0
- package/dist/core/edicion/hashline.js +111 -0
- package/dist/core/edicion/hashline.js.map +1 -0
- package/dist/core/edicion/hueco.d.ts +64 -0
- package/dist/core/edicion/hueco.d.ts.map +1 -0
- package/dist/core/edicion/hueco.js +162 -0
- package/dist/core/edicion/hueco.js.map +1 -0
- package/dist/core/edicion/limpiar-carga.d.ts +39 -0
- package/dist/core/edicion/limpiar-carga.d.ts.map +1 -0
- package/dist/core/edicion/limpiar-carga.js +121 -0
- package/dist/core/edicion/limpiar-carga.js.map +1 -0
- package/dist/core/edicion/observador.d.ts +80 -0
- package/dist/core/edicion/observador.d.ts.map +1 -0
- package/dist/core/edicion/observador.js +183 -0
- package/dist/core/edicion/observador.js.map +1 -0
- package/dist/core/edicion/parecido.d.ts +53 -0
- package/dist/core/edicion/parecido.d.ts.map +1 -0
- package/dist/core/edicion/parecido.js +145 -0
- package/dist/core/edicion/parecido.js.map +1 -0
- package/dist/core/edicion/parseo.d.ts +58 -0
- package/dist/core/edicion/parseo.d.ts.map +1 -0
- package/dist/core/edicion/parseo.js +124 -0
- package/dist/core/edicion/parseo.js.map +1 -0
- package/dist/core/edicion/reparacion.d.ts +67 -0
- package/dist/core/edicion/reparacion.d.ts.map +1 -0
- package/dist/core/edicion/reparacion.js +202 -0
- package/dist/core/edicion/reparacion.js.map +1 -0
- package/dist/core/edicion/sangria.d.ts +121 -0
- package/dist/core/edicion/sangria.d.ts.map +1 -0
- package/dist/core/edicion/sangria.js +341 -0
- package/dist/core/edicion/sangria.js.map +1 -0
- package/dist/core/edicion/tipos.d.ts +58 -0
- package/dist/core/edicion/tipos.d.ts.map +1 -0
- package/dist/core/edicion/tipos.js +160 -0
- package/dist/core/edicion/tipos.js.map +1 -0
- package/dist/core/errores/proveedor.d.ts +53 -0
- package/dist/core/errores/proveedor.d.ts.map +1 -0
- package/dist/core/errores/proveedor.js +191 -0
- package/dist/core/errores/proveedor.js.map +1 -0
- package/dist/core/estructural/buscar.d.ts +61 -0
- package/dist/core/estructural/buscar.d.ts.map +1 -0
- package/dist/core/estructural/buscar.js +261 -0
- package/dist/core/estructural/buscar.js.map +1 -0
- package/dist/core/estructural/editar.d.ts +36 -0
- package/dist/core/estructural/editar.d.ts.map +1 -0
- package/dist/core/estructural/editar.js +123 -0
- package/dist/core/estructural/editar.js.map +1 -0
- package/dist/core/estructural/tools.d.ts +11 -0
- package/dist/core/estructural/tools.d.ts.map +1 -0
- package/dist/core/estructural/tools.js +100 -0
- package/dist/core/estructural/tools.js.map +1 -0
- package/dist/core/experimental.d.ts.map +1 -1
- package/dist/core/experimental.js +10 -1
- package/dist/core/experimental.js.map +1 -1
- package/dist/core/extensiones/suplantacion.d.ts +49 -0
- package/dist/core/extensiones/suplantacion.d.ts.map +1 -0
- package/dist/core/extensiones/suplantacion.js +61 -0
- package/dist/core/extensiones/suplantacion.js.map +1 -0
- package/dist/core/extensiones/vigilancia.d.ts +54 -0
- package/dist/core/extensiones/vigilancia.d.ts.map +1 -0
- package/dist/core/extensiones/vigilancia.js +217 -0
- package/dist/core/extensiones/vigilancia.js.map +1 -0
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +11 -1
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/harness/fuentes-de-contexto.d.ts +29 -0
- package/dist/core/harness/fuentes-de-contexto.d.ts.map +1 -0
- package/dist/core/harness/fuentes-de-contexto.js +44 -0
- package/dist/core/harness/fuentes-de-contexto.js.map +1 -0
- package/dist/core/harness/refine.d.ts +40 -0
- package/dist/core/harness/refine.d.ts.map +1 -0
- package/dist/core/harness/refine.js +109 -0
- package/dist/core/harness/refine.js.map +1 -0
- package/dist/core/harness/store.d.ts +75 -0
- package/dist/core/harness/store.d.ts.map +1 -0
- package/dist/core/harness/store.js +149 -0
- package/dist/core/harness/store.js.map +1 -0
- package/dist/core/hooks/contract.d.ts +85 -0
- package/dist/core/hooks/contract.d.ts.map +1 -0
- package/dist/core/hooks/contract.js +140 -0
- package/dist/core/hooks/contract.js.map +1 -0
- package/dist/core/hooks/runner.d.ts +42 -0
- package/dist/core/hooks/runner.d.ts.map +1 -0
- package/dist/core/hooks/runner.js +85 -0
- package/dist/core/hooks/runner.js.map +1 -0
- package/dist/core/hooks/session-hooks.d.ts +62 -0
- package/dist/core/hooks/session-hooks.d.ts.map +1 -0
- package/dist/core/hooks/session-hooks.js +84 -0
- package/dist/core/hooks/session-hooks.js.map +1 -0
- package/dist/core/importar/formatos.d.ts +69 -0
- package/dist/core/importar/formatos.d.ts.map +1 -0
- package/dist/core/importar/formatos.js +235 -0
- package/dist/core/importar/formatos.js.map +1 -0
- package/dist/core/interactivo/deteccion.d.ts +44 -0
- package/dist/core/interactivo/deteccion.d.ts.map +1 -0
- package/dist/core/interactivo/deteccion.js +82 -0
- package/dist/core/interactivo/deteccion.js.map +1 -0
- package/dist/core/interactivo/sesion.d.ts +50 -0
- package/dist/core/interactivo/sesion.d.ts.map +1 -0
- package/dist/core/interactivo/sesion.js +156 -0
- package/dist/core/interactivo/sesion.js.map +1 -0
- package/dist/core/interactivo/tools.d.ts +21 -0
- package/dist/core/interactivo/tools.d.ts.map +1 -0
- package/dist/core/interactivo/tools.js +122 -0
- package/dist/core/interactivo/tools.js.map +1 -0
- package/dist/core/lectura/mapa.d.ts +70 -0
- package/dist/core/lectura/mapa.d.ts.map +1 -0
- package/dist/core/lectura/mapa.js +177 -0
- package/dist/core/lectura/mapa.js.map +1 -0
- package/dist/core/lectura/pdf.d.ts +49 -0
- package/dist/core/lectura/pdf.d.ts.map +1 -0
- package/dist/core/lectura/pdf.js +337 -0
- package/dist/core/lectura/pdf.js.map +1 -0
- package/dist/core/limpieza/comprobadores.d.ts +28 -0
- package/dist/core/limpieza/comprobadores.d.ts.map +1 -0
- package/dist/core/limpieza/comprobadores.js +311 -0
- package/dist/core/limpieza/comprobadores.js.map +1 -0
- package/dist/core/limpieza/parseo.d.ts +19 -0
- package/dist/core/limpieza/parseo.d.ts.map +1 -0
- package/dist/core/limpieza/parseo.js +124 -0
- package/dist/core/limpieza/parseo.js.map +1 -0
- package/dist/core/limpieza/reparacion.d.ts +77 -0
- package/dist/core/limpieza/reparacion.d.ts.map +1 -0
- package/dist/core/limpieza/reparacion.js +254 -0
- package/dist/core/limpieza/reparacion.js.map +1 -0
- package/dist/core/limpieza/tipos.d.ts +56 -0
- package/dist/core/limpieza/tipos.d.ts.map +1 -0
- package/dist/core/limpieza/tipos.js +9 -0
- package/dist/core/limpieza/tipos.js.map +1 -0
- package/dist/core/lsp/cliente.d.ts +52 -0
- package/dist/core/lsp/cliente.d.ts.map +1 -0
- package/dist/core/lsp/cliente.js +232 -0
- package/dist/core/lsp/cliente.js.map +1 -0
- package/dist/core/lsp/descubrimiento.d.ts +62 -0
- package/dist/core/lsp/descubrimiento.d.ts.map +1 -0
- package/dist/core/lsp/descubrimiento.js +152 -0
- package/dist/core/lsp/descubrimiento.js.map +1 -0
- package/dist/core/lsp/ediciones.d.ts +59 -0
- package/dist/core/lsp/ediciones.d.ts.map +1 -0
- package/dist/core/lsp/ediciones.js +89 -0
- package/dist/core/lsp/ediciones.js.map +1 -0
- package/dist/core/lsp/extension.d.ts +28 -0
- package/dist/core/lsp/extension.d.ts.map +1 -0
- package/dist/core/lsp/extension.js +34 -0
- package/dist/core/lsp/extension.js.map +1 -0
- package/dist/core/lsp/tools.d.ts +45 -0
- package/dist/core/lsp/tools.d.ts.map +1 -0
- package/dist/core/lsp/tools.js +265 -0
- package/dist/core/lsp/tools.js.map +1 -0
- package/dist/core/mcp/client.d.ts +60 -0
- package/dist/core/mcp/client.d.ts.map +1 -0
- package/dist/core/mcp/client.js +139 -0
- package/dist/core/mcp/client.js.map +1 -0
- package/dist/core/mcp/manager.d.ts +86 -0
- package/dist/core/mcp/manager.d.ts.map +1 -0
- package/dist/core/mcp/manager.js +124 -0
- package/dist/core/mcp/manager.js.map +1 -0
- package/dist/core/mcp/tools.d.ts +15 -0
- package/dist/core/mcp/tools.d.ts.map +1 -0
- package/dist/core/mcp/tools.js +84 -0
- package/dist/core/mcp/tools.js.map +1 -0
- package/dist/core/memory-engine/audit-export.d.ts +12 -10
- package/dist/core/memory-engine/audit-export.d.ts.map +1 -1
- package/dist/core/memory-engine/audit-export.js +15 -0
- package/dist/core/memory-engine/audit-export.js.map +1 -1
- package/dist/core/memory-engine/audit-indice.d.ts +153 -0
- package/dist/core/memory-engine/audit-indice.d.ts.map +1 -0
- package/dist/core/memory-engine/audit-indice.js +271 -0
- package/dist/core/memory-engine/audit-indice.js.map +1 -0
- package/dist/core/memory-engine/audit.d.ts +18 -6
- package/dist/core/memory-engine/audit.d.ts.map +1 -1
- package/dist/core/memory-engine/audit.js +25 -42
- package/dist/core/memory-engine/audit.js.map +1 -1
- package/dist/core/memory-engine/engine.d.ts +19 -1
- package/dist/core/memory-engine/engine.d.ts.map +1 -1
- package/dist/core/memory-engine/engine.js +71 -5
- package/dist/core/memory-engine/engine.js.map +1 -1
- package/dist/core/memory-engine/observation-store.d.ts +0 -2
- package/dist/core/memory-engine/observation-store.d.ts.map +1 -1
- package/dist/core/memory-engine/observation-store.js +4 -5
- package/dist/core/memory-engine/observation-store.js.map +1 -1
- package/dist/core/memory-engine/refinements.d.ts +51 -0
- package/dist/core/memory-engine/refinements.d.ts.map +1 -0
- package/dist/core/memory-engine/refinements.js +99 -0
- package/dist/core/memory-engine/refinements.js.map +1 -0
- package/dist/core/memory-engine/tools.d.ts.map +1 -1
- package/dist/core/memory-engine/tools.js +27 -1
- package/dist/core/memory-engine/tools.js.map +1 -1
- package/dist/core/memory-engine/types.d.ts +2 -0
- package/dist/core/memory-engine/types.d.ts.map +1 -1
- package/dist/core/memory-engine/types.js.map +1 -1
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +7 -1
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/muestreo-restringido.d.ts +49 -0
- package/dist/core/muestreo-restringido.d.ts.map +1 -0
- package/dist/core/muestreo-restringido.js +65 -0
- package/dist/core/muestreo-restringido.js.map +1 -0
- package/dist/core/orphan-process-journal.d.ts +48 -0
- package/dist/core/orphan-process-journal.d.ts.map +1 -0
- package/dist/core/orphan-process-journal.js +116 -0
- package/dist/core/orphan-process-journal.js.map +1 -0
- package/dist/core/privacidad/categorias-especiales.d.ts +186 -0
- package/dist/core/privacidad/categorias-especiales.d.ts.map +1 -0
- package/dist/core/privacidad/categorias-especiales.js +745 -0
- package/dist/core/privacidad/categorias-especiales.js.map +1 -0
- package/dist/core/privacidad/tapar.d.ts +48 -0
- package/dist/core/privacidad/tapar.d.ts.map +1 -0
- package/dist/core/privacidad/tapar.js +66 -0
- package/dist/core/privacidad/tapar.js.map +1 -0
- package/dist/core/prompt-cache/diagnostics.d.ts +33 -0
- package/dist/core/prompt-cache/diagnostics.d.ts.map +1 -0
- package/dist/core/prompt-cache/diagnostics.js +100 -0
- package/dist/core/prompt-cache/diagnostics.js.map +1 -0
- package/dist/core/prompt-cache/index.d.ts +33 -0
- package/dist/core/prompt-cache/index.d.ts.map +1 -0
- package/dist/core/prompt-cache/index.js +189 -0
- package/dist/core/prompt-cache/index.js.map +1 -0
- package/dist/core/prompt-cache/payload.d.ts +58 -0
- package/dist/core/prompt-cache/payload.d.ts.map +1 -0
- package/dist/core/prompt-cache/payload.js +122 -0
- package/dist/core/prompt-cache/payload.js.map +1 -0
- package/dist/core/prompt-cache/stabilize.d.ts +65 -0
- package/dist/core/prompt-cache/stabilize.d.ts.map +1 -0
- package/dist/core/prompt-cache/stabilize.js +137 -0
- package/dist/core/prompt-cache/stabilize.js.map +1 -0
- package/dist/core/prompt-cache/stats.d.ts +55 -0
- package/dist/core/prompt-cache/stats.d.ts.map +1 -0
- package/dist/core/prompt-cache/stats.js +158 -0
- package/dist/core/prompt-cache/stats.js.map +1 -0
- package/dist/core/prompt-eleccion.d.ts +38 -0
- package/dist/core/prompt-eleccion.d.ts.map +1 -0
- package/dist/core/prompt-eleccion.js +46 -0
- package/dist/core/prompt-eleccion.js.map +1 -0
- package/dist/core/prompts/montar.d.ts +75 -0
- package/dist/core/prompts/montar.d.ts.map +1 -0
- package/dist/core/prompts/montar.js +146 -0
- package/dist/core/prompts/montar.js.map +1 -0
- package/dist/core/prompts/plantilla.d.ts +54 -0
- package/dist/core/prompts/plantilla.d.ts.map +1 -0
- package/dist/core/prompts/plantilla.js +153 -0
- package/dist/core/prompts/plantilla.js.map +1 -0
- package/dist/core/prompts/sistema.md +134 -0
- package/dist/core/provider-attribution.d.ts +24 -2
- package/dist/core/provider-attribution.d.ts.map +1 -1
- package/dist/core/provider-attribution.js +24 -42
- package/dist/core/provider-attribution.js.map +1 -1
- package/dist/core/remoto/destino.d.ts +38 -0
- package/dist/core/remoto/destino.d.ts.map +1 -0
- package/dist/core/remoto/destino.js +105 -0
- package/dist/core/remoto/destino.js.map +1 -0
- package/dist/core/remoto/ejecutor.d.ts +59 -0
- package/dist/core/remoto/ejecutor.d.ts.map +1 -0
- package/dist/core/remoto/ejecutor.js +225 -0
- package/dist/core/remoto/ejecutor.js.map +1 -0
- package/dist/core/remoto/ficheros.d.ts +29 -0
- package/dist/core/remoto/ficheros.d.ts.map +1 -0
- package/dist/core/remoto/ficheros.js +90 -0
- package/dist/core/remoto/ficheros.js.map +1 -0
- package/dist/core/remoto/registro-extension.d.ts +15 -0
- package/dist/core/remoto/registro-extension.d.ts.map +1 -0
- package/dist/core/remoto/registro-extension.js +17 -0
- package/dist/core/remoto/registro-extension.js.map +1 -0
- package/dist/core/remoto/tools.d.ts +28 -0
- package/dist/core/remoto/tools.d.ts.map +1 -0
- package/dist/core/remoto/tools.js +31 -0
- package/dist/core/remoto/tools.js.map +1 -0
- package/dist/core/resource-loader.d.ts +8 -0
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +93 -1
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/revision/hallazgo.d.ts +51 -0
- package/dist/core/revision/hallazgo.d.ts.map +1 -0
- package/dist/core/revision/hallazgo.js +73 -0
- package/dist/core/revision/hallazgo.js.map +1 -0
- package/dist/core/revision/revisor.d.ts +81 -0
- package/dist/core/revision/revisor.d.ts.map +1 -0
- package/dist/core/revision/revisor.js +132 -0
- package/dist/core/revision/revisor.js.map +1 -0
- package/dist/core/revision/sarif.d.ts +30 -0
- package/dist/core/revision/sarif.d.ts.map +1 -0
- package/dist/core/revision/sarif.js +83 -0
- package/dist/core/revision/sarif.js.map +1 -0
- package/dist/core/scheduler/scheduler.d.ts +87 -0
- package/dist/core/scheduler/scheduler.d.ts.map +1 -0
- package/dist/core/scheduler/scheduler.js +178 -0
- package/dist/core/scheduler/scheduler.js.map +1 -0
- package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts +49 -0
- package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts.map +1 -0
- package/dist/core/sesion/cerrar-llamadas-abiertas.js +77 -0
- package/dist/core/sesion/cerrar-llamadas-abiertas.js.map +1 -0
- package/dist/core/settings-manager.d.ts +110 -6
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +53 -2
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +3 -3
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/system-prompt.d.ts +17 -0
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +13 -5
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/telemetria/otlp.d.ts +122 -0
- package/dist/core/telemetria/otlp.d.ts.map +1 -0
- package/dist/core/telemetria/otlp.js +373 -0
- package/dist/core/telemetria/otlp.js.map +1 -0
- package/dist/core/tools/coercion-argumentos.d.ts +48 -0
- package/dist/core/tools/coercion-argumentos.d.ts.map +1 -0
- package/dist/core/tools/coercion-argumentos.js +99 -0
- package/dist/core/tools/coercion-argumentos.js.map +1 -0
- package/dist/core/tools/edit-diff.d.ts +0 -7
- package/dist/core/tools/edit-diff.d.ts.map +1 -1
- package/dist/core/tools/edit-diff.js +232 -7
- package/dist/core/tools/edit-diff.js.map +1 -1
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +8 -1
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
- package/dist/core/tools/file-mutation-queue.js +5 -0
- package/dist/core/tools/file-mutation-queue.js.map +1 -1
- package/dist/core/tools/json-tolerante.d.ts +30 -0
- package/dist/core/tools/json-tolerante.d.ts.map +1 -0
- package/dist/core/tools/json-tolerante.js +70 -0
- package/dist/core/tools/json-tolerante.js.map +1 -0
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +17 -0
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts +14 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.js +17 -1
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
- package/dist/core/turno-vacio/detectar.d.ts +38 -0
- package/dist/core/turno-vacio/detectar.d.ts.map +1 -0
- package/dist/core/turno-vacio/detectar.js +66 -0
- package/dist/core/turno-vacio/detectar.js.map +1 -0
- package/dist/core/undo/journal.d.ts +57 -0
- package/dist/core/undo/journal.d.ts.map +1 -0
- package/dist/core/undo/journal.js +178 -0
- package/dist/core/undo/journal.js.map +1 -0
- package/dist/core/urls-internas/auditoria.d.ts +10 -0
- package/dist/core/urls-internas/auditoria.d.ts.map +1 -0
- package/dist/core/urls-internas/auditoria.js +42 -0
- package/dist/core/urls-internas/auditoria.js.map +1 -0
- package/dist/core/urls-internas/boveda.d.ts +13 -0
- package/dist/core/urls-internas/boveda.d.ts.map +1 -0
- package/dist/core/urls-internas/boveda.js +40 -0
- package/dist/core/urls-internas/boveda.js.map +1 -0
- package/dist/core/urls-internas/lector.d.ts +30 -0
- package/dist/core/urls-internas/lector.d.ts.map +1 -0
- package/dist/core/urls-internas/lector.js +56 -0
- package/dist/core/urls-internas/lector.js.map +1 -0
- package/dist/core/urls-internas/memoria.d.ts +11 -0
- package/dist/core/urls-internas/memoria.d.ts.map +1 -0
- package/dist/core/urls-internas/memoria.js +25 -0
- package/dist/core/urls-internas/memoria.js.map +1 -0
- package/dist/core/urls-internas/parse.d.ts +28 -0
- package/dist/core/urls-internas/parse.d.ts.map +1 -0
- package/dist/core/urls-internas/parse.js +32 -0
- package/dist/core/urls-internas/parse.js.map +1 -0
- package/dist/core/urls-internas/reglas.d.ts +10 -0
- package/dist/core/urls-internas/reglas.d.ts.map +1 -0
- package/dist/core/urls-internas/reglas.js +31 -0
- package/dist/core/urls-internas/reglas.js.map +1 -0
- package/dist/core/usage/aggregate.d.ts +68 -0
- package/dist/core/usage/aggregate.d.ts.map +1 -0
- package/dist/core/usage/aggregate.js +93 -0
- package/dist/core/usage/aggregate.js.map +1 -0
- package/dist/core/usage/cuota/anthropic.d.ts +10 -0
- package/dist/core/usage/cuota/anthropic.d.ts.map +1 -0
- package/dist/core/usage/cuota/anthropic.js +63 -0
- package/dist/core/usage/cuota/anthropic.js.map +1 -0
- package/dist/core/usage/cuota/cache.d.ts +20 -0
- package/dist/core/usage/cuota/cache.d.ts.map +1 -0
- package/dist/core/usage/cuota/cache.js +36 -0
- package/dist/core/usage/cuota/cache.js.map +1 -0
- package/dist/core/usage/cuota/github-copilot.d.ts +9 -0
- package/dist/core/usage/cuota/github-copilot.d.ts.map +1 -0
- package/dist/core/usage/cuota/github-copilot.js +67 -0
- package/dist/core/usage/cuota/github-copilot.js.map +1 -0
- package/dist/core/usage/cuota/google-gemini.d.ts +9 -0
- package/dist/core/usage/cuota/google-gemini.d.ts.map +1 -0
- package/dist/core/usage/cuota/google-gemini.js +72 -0
- package/dist/core/usage/cuota/google-gemini.js.map +1 -0
- package/dist/core/usage/cuota/index.d.ts +25 -0
- package/dist/core/usage/cuota/index.d.ts.map +1 -0
- package/dist/core/usage/cuota/index.js +50 -0
- package/dist/core/usage/cuota/index.js.map +1 -0
- package/dist/core/usage/cuota/openai-codex.d.ts +9 -0
- package/dist/core/usage/cuota/openai-codex.d.ts.map +1 -0
- package/dist/core/usage/cuota/openai-codex.js +59 -0
- package/dist/core/usage/cuota/openai-codex.js.map +1 -0
- package/dist/core/usage/cuota/openrouter.d.ts +10 -0
- package/dist/core/usage/cuota/openrouter.d.ts.map +1 -0
- package/dist/core/usage/cuota/openrouter.js +47 -0
- package/dist/core/usage/cuota/openrouter.js.map +1 -0
- package/dist/core/usage/cuota/tipos.d.ts +50 -0
- package/dist/core/usage/cuota/tipos.d.ts.map +1 -0
- package/dist/core/usage/cuota/tipos.js +25 -0
- package/dist/core/usage/cuota/tipos.js.map +1 -0
- package/dist/core/web/busqueda-nativa.d.ts +82 -0
- package/dist/core/web/busqueda-nativa.d.ts.map +1 -0
- package/dist/core/web/busqueda-nativa.js +163 -0
- package/dist/core/web/busqueda-nativa.js.map +1 -0
- package/dist/core/web/destino.d.ts +58 -0
- package/dist/core/web/destino.d.ts.map +1 -0
- package/dist/core/web/destino.js +127 -0
- package/dist/core/web/destino.js.map +1 -0
- package/dist/core/web/proveedores/brave.d.ts +6 -0
- package/dist/core/web/proveedores/brave.d.ts.map +1 -0
- package/dist/core/web/proveedores/brave.js +20 -0
- package/dist/core/web/proveedores/brave.js.map +1 -0
- package/dist/core/web/proveedores/claves.d.ts +19 -0
- package/dist/core/web/proveedores/claves.d.ts.map +1 -0
- package/dist/core/web/proveedores/claves.js +36 -0
- package/dist/core/web/proveedores/claves.js.map +1 -0
- package/dist/core/web/proveedores/duckduckgo.d.ts +3 -0
- package/dist/core/web/proveedores/duckduckgo.d.ts.map +1 -0
- package/dist/core/web/proveedores/duckduckgo.js +109 -0
- package/dist/core/web/proveedores/duckduckgo.js.map +1 -0
- package/dist/core/web/proveedores/ecosia.d.ts +3 -0
- package/dist/core/web/proveedores/ecosia.d.ts.map +1 -0
- package/dist/core/web/proveedores/ecosia.js +72 -0
- package/dist/core/web/proveedores/ecosia.js.map +1 -0
- package/dist/core/web/proveedores/exa.d.ts +6 -0
- package/dist/core/web/proveedores/exa.d.ts.map +1 -0
- package/dist/core/web/proveedores/exa.js +24 -0
- package/dist/core/web/proveedores/exa.js.map +1 -0
- package/dist/core/web/proveedores/mojeek.d.ts +3 -0
- package/dist/core/web/proveedores/mojeek.d.ts.map +1 -0
- package/dist/core/web/proveedores/mojeek.js +65 -0
- package/dist/core/web/proveedores/mojeek.js.map +1 -0
- package/dist/core/web/proveedores/navegador.d.ts +10 -0
- package/dist/core/web/proveedores/navegador.d.ts.map +1 -0
- package/dist/core/web/proveedores/navegador.js +13 -0
- package/dist/core/web/proveedores/navegador.js.map +1 -0
- package/dist/core/web/proveedores/registro.d.ts +43 -0
- package/dist/core/web/proveedores/registro.d.ts.map +1 -0
- package/dist/core/web/proveedores/registro.js +49 -0
- package/dist/core/web/proveedores/registro.js.map +1 -0
- package/dist/core/web/proveedores/searxng.d.ts +9 -0
- package/dist/core/web/proveedores/searxng.d.ts.map +1 -0
- package/dist/core/web/proveedores/searxng.js +17 -0
- package/dist/core/web/proveedores/searxng.js.map +1 -0
- package/dist/core/web/proveedores/serper.d.ts +9 -0
- package/dist/core/web/proveedores/serper.d.ts.map +1 -0
- package/dist/core/web/proveedores/serper.js +19 -0
- package/dist/core/web/proveedores/serper.js.map +1 -0
- package/dist/core/web/proveedores/tavily.d.ts +6 -0
- package/dist/core/web/proveedores/tavily.d.ts.map +1 -0
- package/dist/core/web/proveedores/tavily.js +19 -0
- package/dist/core/web/proveedores/tavily.js.map +1 -0
- package/dist/core/web/proveedores/tipos.d.ts +36 -0
- package/dist/core/web/proveedores/tipos.d.ts.map +1 -0
- package/dist/core/web/proveedores/tipos.js +10 -0
- package/dist/core/web/proveedores/tipos.js.map +1 -0
- package/dist/core/web/registro-red.d.ts +43 -0
- package/dist/core/web/registro-red.d.ts.map +1 -0
- package/dist/core/web/registro-red.js +86 -0
- package/dist/core/web/registro-red.js.map +1 -0
- package/dist/core/web/scrapers/cisa-kev.d.ts +10 -0
- package/dist/core/web/scrapers/cisa-kev.d.ts.map +1 -0
- package/dist/core/web/scrapers/cisa-kev.js +38 -0
- package/dist/core/web/scrapers/cisa-kev.js.map +1 -0
- package/dist/core/web/scrapers/crates-io.d.ts +11 -0
- package/dist/core/web/scrapers/crates-io.d.ts.map +1 -0
- package/dist/core/web/scrapers/crates-io.js +29 -0
- package/dist/core/web/scrapers/crates-io.js.map +1 -0
- package/dist/core/web/scrapers/docs-rs.d.ts +10 -0
- package/dist/core/web/scrapers/docs-rs.d.ts.map +1 -0
- package/dist/core/web/scrapers/docs-rs.js +35 -0
- package/dist/core/web/scrapers/docs-rs.js.map +1 -0
- package/dist/core/web/scrapers/github.d.ts +3 -0
- package/dist/core/web/scrapers/github.d.ts.map +1 -0
- package/dist/core/web/scrapers/github.js +72 -0
- package/dist/core/web/scrapers/github.js.map +1 -0
- package/dist/core/web/scrapers/go-pkg.d.ts +7 -0
- package/dist/core/web/scrapers/go-pkg.d.ts.map +1 -0
- package/dist/core/web/scrapers/go-pkg.js +30 -0
- package/dist/core/web/scrapers/go-pkg.js.map +1 -0
- package/dist/core/web/scrapers/hex.d.ts +6 -0
- package/dist/core/web/scrapers/hex.d.ts.map +1 -0
- package/dist/core/web/scrapers/hex.js +27 -0
- package/dist/core/web/scrapers/hex.js.map +1 -0
- package/dist/core/web/scrapers/maven.d.ts +8 -0
- package/dist/core/web/scrapers/maven.d.ts.map +1 -0
- package/dist/core/web/scrapers/maven.js +41 -0
- package/dist/core/web/scrapers/maven.js.map +1 -0
- package/dist/core/web/scrapers/mdn.d.ts +6 -0
- package/dist/core/web/scrapers/mdn.d.ts.map +1 -0
- package/dist/core/web/scrapers/mdn.js +28 -0
- package/dist/core/web/scrapers/mdn.js.map +1 -0
- package/dist/core/web/scrapers/npm.d.ts +11 -0
- package/dist/core/web/scrapers/npm.d.ts.map +1 -0
- package/dist/core/web/scrapers/npm.js +57 -0
- package/dist/core/web/scrapers/npm.js.map +1 -0
- package/dist/core/web/scrapers/nuget.d.ts +8 -0
- package/dist/core/web/scrapers/nuget.d.ts.map +1 -0
- package/dist/core/web/scrapers/nuget.js +22 -0
- package/dist/core/web/scrapers/nuget.js.map +1 -0
- package/dist/core/web/scrapers/nvd.d.ts +7 -0
- package/dist/core/web/scrapers/nvd.d.ts.map +1 -0
- package/dist/core/web/scrapers/nvd.js +37 -0
- package/dist/core/web/scrapers/nvd.js.map +1 -0
- package/dist/core/web/scrapers/pypi.d.ts +6 -0
- package/dist/core/web/scrapers/pypi.d.ts.map +1 -0
- package/dist/core/web/scrapers/pypi.js +31 -0
- package/dist/core/web/scrapers/pypi.js.map +1 -0
- package/dist/core/web/scrapers/registro.d.ts +13 -0
- package/dist/core/web/scrapers/registro.d.ts.map +1 -0
- package/dist/core/web/scrapers/registro.js +65 -0
- package/dist/core/web/scrapers/registro.js.map +1 -0
- package/dist/core/web/scrapers/rubygems.d.ts +6 -0
- package/dist/core/web/scrapers/rubygems.d.ts.map +1 -0
- package/dist/core/web/scrapers/rubygems.js +23 -0
- package/dist/core/web/scrapers/rubygems.js.map +1 -0
- package/dist/core/web/scrapers/stackoverflow.d.ts +3 -0
- package/dist/core/web/scrapers/stackoverflow.d.ts.map +1 -0
- package/dist/core/web/scrapers/stackoverflow.js +46 -0
- package/dist/core/web/scrapers/stackoverflow.js.map +1 -0
- package/dist/core/web/scrapers/tipos.d.ts +42 -0
- package/dist/core/web/scrapers/tipos.d.ts.map +1 -0
- package/dist/core/web/scrapers/tipos.js +23 -0
- package/dist/core/web/scrapers/tipos.js.map +1 -0
- package/dist/core/web/texto.d.ts +10 -0
- package/dist/core/web/texto.d.ts.map +1 -0
- package/dist/core/web/texto.js +26 -0
- package/dist/core/web/texto.js.map +1 -0
- package/dist/core/web/tools.d.ts +91 -0
- package/dist/core/web/tools.d.ts.map +1 -0
- package/dist/core/web/tools.js +304 -0
- package/dist/core/web/tools.js.map +1 -0
- package/dist/core/wiki/almacen.d.ts +33 -0
- package/dist/core/wiki/almacen.d.ts.map +1 -0
- package/dist/core/wiki/almacen.js +93 -0
- package/dist/core/wiki/almacen.js.map +1 -0
- package/dist/core/wiki/citas.d.ts +111 -0
- package/dist/core/wiki/citas.d.ts.map +1 -0
- package/dist/core/wiki/citas.js +146 -0
- package/dist/core/wiki/citas.js.map +1 -0
- package/dist/core/workflows/agent-runner.d.ts +2 -0
- package/dist/core/workflows/agent-runner.d.ts.map +1 -1
- package/dist/core/workflows/agent-runner.js +131 -44
- package/dist/core/workflows/agent-runner.js.map +1 -1
- package/dist/core/workflows/builtins.d.ts.map +1 -1
- package/dist/core/workflows/builtins.js +1 -0
- package/dist/core/workflows/builtins.js.map +1 -1
- package/dist/core/workflows/contrato/esquema.d.ts +32 -0
- package/dist/core/workflows/contrato/esquema.d.ts.map +1 -0
- package/dist/core/workflows/contrato/esquema.js +25 -0
- package/dist/core/workflows/contrato/esquema.js.map +1 -0
- package/dist/core/workflows/contrato/reparar-argumentos.d.ts +69 -0
- package/dist/core/workflows/contrato/reparar-argumentos.d.ts.map +1 -0
- package/dist/core/workflows/contrato/reparar-argumentos.js +117 -0
- package/dist/core/workflows/contrato/reparar-argumentos.js.map +1 -0
- package/dist/core/workflows/contrato/validador.d.ts +30 -0
- package/dist/core/workflows/contrato/validador.d.ts.map +1 -0
- package/dist/core/workflows/contrato/validador.js +56 -0
- package/dist/core/workflows/contrato/validador.js.map +1 -0
- package/dist/core/workflows/contrato/yield.d.ts +65 -0
- package/dist/core/workflows/contrato/yield.d.ts.map +1 -0
- package/dist/core/workflows/contrato/yield.js +80 -0
- package/dist/core/workflows/contrato/yield.js.map +1 -0
- package/dist/core/workflows/goal-engine/engine.d.ts +17 -0
- package/dist/core/workflows/goal-engine/engine.d.ts.map +1 -1
- package/dist/core/workflows/goal-engine/engine.js +41 -0
- package/dist/core/workflows/goal-engine/engine.js.map +1 -1
- package/dist/core/workflows/index.d.ts +8 -0
- package/dist/core/workflows/index.d.ts.map +1 -1
- package/dist/core/workflows/index.js +4 -0
- package/dist/core/workflows/index.js.map +1 -1
- package/dist/core/workflows/manager.d.ts +10 -0
- package/dist/core/workflows/manager.d.ts.map +1 -1
- package/dist/core/workflows/manager.js +35 -11
- package/dist/core/workflows/manager.js.map +1 -1
- package/dist/core/workflows/runtime.d.ts +13 -0
- package/dist/core/workflows/runtime.d.ts.map +1 -1
- package/dist/core/workflows/runtime.js +80 -1
- package/dist/core/workflows/runtime.js.map +1 -1
- package/dist/core/workflows/save-as-skill.d.ts +27 -0
- package/dist/core/workflows/save-as-skill.d.ts.map +1 -0
- package/dist/core/workflows/save-as-skill.js +54 -0
- package/dist/core/workflows/save-as-skill.js.map +1 -0
- package/dist/core/workflows/types.d.ts +49 -0
- package/dist/core/workflows/types.d.ts.map +1 -1
- package/dist/core/workflows/types.js.map +1 -1
- package/dist/extensions/remoto/index.d.ts +22 -0
- package/dist/extensions/remoto/index.d.ts.map +1 -0
- package/dist/extensions/remoto/index.js +54 -0
- package/dist/extensions/remoto/index.js.map +1 -0
- package/dist/index.d.ts +1 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -16
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +6 -0
- package/dist/main.js.map +1 -1
- package/dist/modes/acp/acp-mode.d.ts +42 -0
- package/dist/modes/acp/acp-mode.d.ts.map +1 -0
- package/dist/modes/acp/acp-mode.js +190 -0
- package/dist/modes/acp/acp-mode.js.map +1 -0
- package/dist/modes/acp/events.d.ts +74 -0
- package/dist/modes/acp/events.d.ts.map +1 -0
- package/dist/modes/acp/events.js +116 -0
- package/dist/modes/acp/events.js.map +1 -0
- package/dist/modes/interactive/components/model-selector.d.ts +8 -1
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +41 -7
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +1 -2
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +9 -86
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts +8 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js +48 -17
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +3 -7
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +137 -146
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js +11 -0
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +27 -5
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/server/attach.d.ts +56 -0
- package/dist/server/attach.d.ts.map +1 -0
- package/dist/server/attach.js +130 -0
- package/dist/server/attach.js.map +1 -0
- package/dist/server/extension-ops.d.ts +40 -0
- package/dist/server/extension-ops.d.ts.map +1 -0
- package/dist/server/extension-ops.js +146 -0
- package/dist/server/extension-ops.js.map +1 -0
- package/dist/server/pi-server-service.d.ts +85 -0
- package/dist/server/pi-server-service.d.ts.map +1 -0
- package/dist/server/pi-server-service.js +213 -0
- package/dist/server/pi-server-service.js.map +1 -0
- package/dist/server/scheduler-tick.d.ts +32 -0
- package/dist/server/scheduler-tick.d.ts.map +1 -0
- package/dist/server/scheduler-tick.js +47 -0
- package/dist/server/scheduler-tick.js.map +1 -0
- package/dist/server/serve.d.ts +25 -0
- package/dist/server/serve.d.ts.map +1 -0
- package/dist/server/serve.js +83 -0
- package/dist/server/serve.js.map +1 -0
- package/dist/server/transcript.d.ts +38 -0
- package/dist/server/transcript.d.ts.map +1 -0
- package/dist/server/transcript.js +176 -0
- package/dist/server/transcript.js.map +1 -0
- package/dist/skills/skill-creator/SKILL.md +90 -0
- package/dist/telegram/api.d.ts +75 -0
- package/dist/telegram/api.d.ts.map +1 -0
- package/dist/telegram/api.js +104 -0
- package/dist/telegram/api.js.map +1 -0
- package/dist/telegram/bridge.d.ts +85 -0
- package/dist/telegram/bridge.d.ts.map +1 -0
- package/dist/telegram/bridge.js +182 -0
- package/dist/telegram/bridge.js.map +1 -0
- package/dist/telegram/journal.d.ts +67 -0
- package/dist/telegram/journal.d.ts.map +1 -0
- package/dist/telegram/journal.js +119 -0
- package/dist/telegram/journal.js.map +1 -0
- package/dist/telegram/servidor.d.ts +15 -0
- package/dist/telegram/servidor.d.ts.map +1 -0
- package/dist/telegram/servidor.js +74 -0
- package/dist/telegram/servidor.js.map +1 -0
- package/dist/utils/shell.d.ts +11 -0
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +11 -0
- package/dist/utils/shell.js.map +1 -1
- package/dist/utils/version-check.d.ts.map +1 -1
- package/dist/utils/version-check.js +29 -1
- package/dist/utils/version-check.js.map +1 -1
- package/docs/compaction.md +10 -10
- package/docs/compliance.md +241 -0
- package/docs/containerization.md +24 -24
- package/docs/custom-provider.md +10 -10
- package/docs/development.md +47 -10
- package/docs/docs.json +14 -2
- package/docs/environment-variables.md +20 -17
- package/docs/extensions.md +51 -49
- package/docs/index.md +15 -21
- package/docs/json.md +3 -3
- package/docs/keybindings.md +5 -5
- package/docs/llama-cpp.md +7 -7
- package/docs/models.md +12 -12
- package/docs/packages.md +45 -45
- package/docs/prompt-templates.md +5 -5
- package/docs/providers.md +12 -12
- package/docs/quickstart.md +39 -39
- package/docs/rpc.md +12 -12
- package/docs/sdk.md +38 -38
- package/docs/security.md +26 -21
- package/docs/session-format.md +7 -7
- package/docs/sessions.md +14 -14
- package/docs/settings.md +45 -20
- package/docs/shell-aliases.md +2 -2
- package/docs/skills.md +11 -11
- package/docs/terminal-setup.md +14 -14
- package/docs/termux.md +7 -7
- package/docs/themes.md +11 -11
- package/docs/tmux.md +4 -4
- package/docs/tui.md +3 -3
- package/docs/usage.md +54 -54
- package/docs/windows.md +2 -2
- package/examples/sdk/12-full-control.ts +9 -0
- package/npm-shrinkwrap.json +35 -251
- package/package.json +10 -4
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Diario para deshacer los cambios de ficheros de un turno.
|
|
3
|
+
*
|
|
4
|
+
* Guarda el estado ANTERIOR de cada fichero justo antes de tocarlo, agrupado
|
|
5
|
+
* por turno. `deshacer()` devuelve todos los ficheros del último turno a la vez,
|
|
6
|
+
* o ninguno: revertir la mitad de un cambio deja el repositorio en un estado que
|
|
7
|
+
* el agente no produjo nunca y que nadie ha revisado.
|
|
8
|
+
*
|
|
9
|
+
* El punto de captura es `withFileMutationQueue`, por donde pasan tanto `edit`
|
|
10
|
+
* como `write`. Engancharse ahí cubre las dos herramientas con un solo sitio, y
|
|
11
|
+
* cualquier herramienta futura que escriba ficheros entra gratis.
|
|
12
|
+
*/
|
|
13
|
+
export interface EntradaDiario {
|
|
14
|
+
turno: number;
|
|
15
|
+
path: string;
|
|
16
|
+
/** Contenido anterior; `null` si el fichero no existía (lo creó el turno). */
|
|
17
|
+
previo: string | null;
|
|
18
|
+
/** `true` si era demasiado grande para fotografiar. */
|
|
19
|
+
omitido?: boolean;
|
|
20
|
+
ts: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Abre un turno nuevo. Todo lo que se escriba a partir de aquí se agrupa junto.
|
|
24
|
+
*
|
|
25
|
+
* El número de turno sale del diario, no de un contador en memoria: si el
|
|
26
|
+
* proceso se reinicia a mitad de sesión, el turno siguiente no puede reutilizar
|
|
27
|
+
* un número y mezclarse con cambios viejos.
|
|
28
|
+
*/
|
|
29
|
+
export declare function abrirTurno(agentDir: string, cwd: string, ahora: number): number;
|
|
30
|
+
export declare function cerrarTurno(): void;
|
|
31
|
+
/**
|
|
32
|
+
* Fotografía un fichero antes de que lo toquen.
|
|
33
|
+
*
|
|
34
|
+
* Solo la PRIMERA vez dentro del turno: si el agente edita el mismo fichero
|
|
35
|
+
* cinco veces, deshacer debe devolverlo a como estaba antes de las cinco, no
|
|
36
|
+
* antes de la última.
|
|
37
|
+
*/
|
|
38
|
+
export declare function registrarPrevio(rutaFichero: string): void;
|
|
39
|
+
export interface ResultadoDeshacer {
|
|
40
|
+
turno: number | null;
|
|
41
|
+
restaurados: string[];
|
|
42
|
+
borrados: string[];
|
|
43
|
+
omitidos: string[];
|
|
44
|
+
error?: string;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Deshace el último turno con cambios. Todo o nada.
|
|
48
|
+
*
|
|
49
|
+
* Antes de escribir nada se fotografía el estado actual de cada objetivo; si
|
|
50
|
+
* una escritura falla a mitad, se devuelven todas atrás. Sin eso, un fallo de
|
|
51
|
+
* permisos en el tercer fichero dejaría dos revertidos y tres no — un estado
|
|
52
|
+
* que nadie escribió ni revisó.
|
|
53
|
+
*/
|
|
54
|
+
export declare function deshacer(agentDir: string, cwd: string): ResultadoDeshacer;
|
|
55
|
+
/** Qué haría un `undo` sin llegar a hacerlo. */
|
|
56
|
+
export declare function previsualizar(agentDir: string, cwd: string): EntradaDiario[];
|
|
57
|
+
//# sourceMappingURL=journal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal.d.ts","sourceRoot":"","sources":["../../../src/core/undo/journal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAcH,MAAM,WAAW,aAAa;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,gFAA8E;IAC9E,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,uDAAuD;IACvD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;CACX;AAgBD;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAO/E;AAED,wBAAgB,WAAW,IAAI,IAAI,CAElC;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CA6BzD;AAgBD,MAAM,WAAW,iBAAiB;IACjC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAyDzE;AAED,kDAAgD;AAChD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,aAAa,EAAE,CAI5E","sourcesContent":["/**\n * Diario para deshacer los cambios de ficheros de un turno.\n *\n * Guarda el estado ANTERIOR de cada fichero justo antes de tocarlo, agrupado\n * por turno. `deshacer()` devuelve todos los ficheros del último turno a la vez,\n * o ninguno: revertir la mitad de un cambio deja el repositorio en un estado que\n * el agente no produjo nunca y que nadie ha revisado.\n *\n * El punto de captura es `withFileMutationQueue`, por donde pasan tanto `edit`\n * como `write`. Engancharse ahí cubre las dos herramientas con un solo sitio, y\n * cualquier herramienta futura que escriba ficheros entra gratis.\n */\n\nimport { createHash } from \"node:crypto\";\nimport { appendFileSync, existsSync, mkdirSync, readFileSync, statSync, unlinkSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\n\n/**\n * Un fichero más grande que esto no se fotografía.\n *\n * Se registra igualmente, marcado, para poder DECIRLO al deshacer. Callarlo\n * sería peor: el usuario creería que revirtió todo cuando faltó un fichero.\n */\nconst MAX_FOTO_BYTES = 4 * 1024 * 1024;\n\nexport interface EntradaDiario {\n\tturno: number;\n\tpath: string;\n\t/** Contenido anterior; `null` si el fichero no existía (lo creó el turno). */\n\tprevio: string | null;\n\t/** `true` si era demasiado grande para fotografiar. */\n\tomitido?: boolean;\n\tts: number;\n}\n\ninterface TurnoActivo {\n\trutaDiario: string;\n\tturno: number;\n\tvistos: Set<string>;\n}\n\n/** El turno abierto ahora mismo. La cola de mutaciones no conoce la sesión. */\nlet activo: TurnoActivo | null = null;\n\nfunction rutaDelDiario(agentDir: string, cwd: string): string {\n\tconst clave = createHash(\"sha256\").update(cwd).digest(\"hex\").slice(0, 16);\n\treturn join(agentDir, \"undo\", `${clave}.jsonl`);\n}\n\n/**\n * Abre un turno nuevo. Todo lo que se escriba a partir de aquí se agrupa junto.\n *\n * El número de turno sale del diario, no de un contador en memoria: si el\n * proceso se reinicia a mitad de sesión, el turno siguiente no puede reutilizar\n * un número y mezclarse con cambios viejos.\n */\nexport function abrirTurno(agentDir: string, cwd: string, ahora: number): number {\n\tconst rutaDiario = rutaDelDiario(agentDir, cwd);\n\tmkdirSync(dirname(rutaDiario), { recursive: true, mode: 0o700 });\n\tconst turno = (leerEntradas(rutaDiario).at(-1)?.turno ?? 0) + 1;\n\tactivo = { rutaDiario, turno, vistos: new Set() };\n\tvoid ahora;\n\treturn turno;\n}\n\nexport function cerrarTurno(): void {\n\tactivo = null;\n}\n\n/**\n * Fotografía un fichero antes de que lo toquen.\n *\n * Solo la PRIMERA vez dentro del turno: si el agente edita el mismo fichero\n * cinco veces, deshacer debe devolverlo a como estaba antes de las cinco, no\n * antes de la última.\n */\nexport function registrarPrevio(rutaFichero: string): void {\n\tif (!activo || activo.vistos.has(rutaFichero)) return;\n\tactivo.vistos.add(rutaFichero);\n\n\tlet entrada: EntradaDiario;\n\ttry {\n\t\tif (!existsSync(rutaFichero)) {\n\t\t\tentrada = { turno: activo.turno, path: rutaFichero, previo: null, ts: Date.now() };\n\t\t} else if (statSync(rutaFichero).size > MAX_FOTO_BYTES) {\n\t\t\tentrada = { turno: activo.turno, path: rutaFichero, previo: null, omitido: true, ts: Date.now() };\n\t\t} else {\n\t\t\tentrada = {\n\t\t\t\tturno: activo.turno,\n\t\t\t\tpath: rutaFichero,\n\t\t\t\tprevio: readFileSync(rutaFichero, \"utf8\"),\n\t\t\t\tts: Date.now(),\n\t\t\t};\n\t\t}\n\t} catch {\n\t\t// Un fichero ilegible no puede impedir la edición; se marca omitido para\n\t\t// que deshacer lo diga en vez de fingir que lo revirtió.\n\t\tentrada = { turno: activo.turno, path: rutaFichero, previo: null, omitido: true, ts: Date.now() };\n\t}\n\ttry {\n\t\tappendFileSync(activo.rutaDiario, `${JSON.stringify(entrada)}\\n`, { mode: 0o600 });\n\t} catch {\n\t\t// El diario es una comodidad, no una garantía: si no se puede escribir,\n\t\t// la edición sigue adelante.\n\t}\n}\n\nfunction leerEntradas(rutaDiario: string): EntradaDiario[] {\n\tif (!existsSync(rutaDiario)) return [];\n\tconst entradas: EntradaDiario[] = [];\n\tfor (const linea of readFileSync(rutaDiario, \"utf8\").split(\"\\n\")) {\n\t\tif (!linea.trim()) continue;\n\t\ttry {\n\t\t\tentradas.push(JSON.parse(linea) as EntradaDiario);\n\t\t} catch {\n\t\t\t// Una línea corrupta no invalida el resto del diario.\n\t\t}\n\t}\n\treturn entradas;\n}\n\nexport interface ResultadoDeshacer {\n\tturno: number | null;\n\trestaurados: string[];\n\tborrados: string[];\n\tomitidos: string[];\n\terror?: string;\n}\n\n/**\n * Deshace el último turno con cambios. Todo o nada.\n *\n * Antes de escribir nada se fotografía el estado actual de cada objetivo; si\n * una escritura falla a mitad, se devuelven todas atrás. Sin eso, un fallo de\n * permisos en el tercer fichero dejaría dos revertidos y tres no — un estado\n * que nadie escribió ni revisó.\n */\nexport function deshacer(agentDir: string, cwd: string): ResultadoDeshacer {\n\tconst rutaDiario = rutaDelDiario(agentDir, cwd);\n\tconst entradas = leerEntradas(rutaDiario);\n\tconst ultimo = entradas.at(-1)?.turno;\n\tif (ultimo === undefined) return { turno: null, restaurados: [], borrados: [], omitidos: [] };\n\n\tconst delTurno = entradas.filter((e) => e.turno === ultimo);\n\tconst aplicables = delTurno.filter((e) => !e.omitido);\n\tconst omitidos = delTurno.filter((e) => e.omitido).map((e) => e.path);\n\n\t// Foto de seguridad para poder retroceder si algo peta a mitad.\n\tconst seguro = new Map<string, string | null>();\n\tfor (const e of aplicables) {\n\t\tseguro.set(e.path, existsSync(e.path) ? readFileSync(e.path, \"utf8\") : null);\n\t}\n\n\tconst restaurados: string[] = [];\n\tconst borrados: string[] = [];\n\ttry {\n\t\tfor (const e of aplicables) {\n\t\t\tif (e.previo === null) {\n\t\t\t\t// El turno creó el fichero: deshacer es borrarlo.\n\t\t\t\tif (existsSync(e.path)) unlinkSync(e.path);\n\t\t\t\tborrados.push(e.path);\n\t\t\t} else {\n\t\t\t\tmkdirSync(dirname(e.path), { recursive: true });\n\t\t\t\twriteFileSync(e.path, e.previo, \"utf8\");\n\t\t\t\trestaurados.push(e.path);\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\tfor (const [ruta, contenido] of seguro) {\n\t\t\ttry {\n\t\t\t\tif (contenido === null) {\n\t\t\t\t\tif (existsSync(ruta)) unlinkSync(ruta);\n\t\t\t\t} else {\n\t\t\t\t\twriteFileSync(ruta, contenido, \"utf8\");\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Poco más se puede hacer; el mensaje de error lo dirá.\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tturno: ultimo,\n\t\t\trestaurados: [],\n\t\t\tborrados: [],\n\t\t\tomitidos,\n\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t};\n\t}\n\n\t// El turno deshecho sale del diario: deshacer dos veces debe ir al anterior,\n\t// no repetir el mismo.\n\tconst restantes = entradas.filter((e) => e.turno !== ultimo);\n\twriteFileSync(rutaDiario, restantes.map((e) => `${JSON.stringify(e)}\\n`).join(\"\"), { mode: 0o600 });\n\n\treturn { turno: ultimo, restaurados, borrados, omitidos };\n}\n\n/** Qué haría un `undo` sin llegar a hacerlo. */\nexport function previsualizar(agentDir: string, cwd: string): EntradaDiario[] {\n\tconst entradas = leerEntradas(rutaDelDiario(agentDir, cwd));\n\tconst ultimo = entradas.at(-1)?.turno;\n\treturn ultimo === undefined ? [] : entradas.filter((e) => e.turno === ultimo);\n}\n"]}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Diario para deshacer los cambios de ficheros de un turno.
|
|
3
|
+
*
|
|
4
|
+
* Guarda el estado ANTERIOR de cada fichero justo antes de tocarlo, agrupado
|
|
5
|
+
* por turno. `deshacer()` devuelve todos los ficheros del último turno a la vez,
|
|
6
|
+
* o ninguno: revertir la mitad de un cambio deja el repositorio en un estado que
|
|
7
|
+
* el agente no produjo nunca y que nadie ha revisado.
|
|
8
|
+
*
|
|
9
|
+
* El punto de captura es `withFileMutationQueue`, por donde pasan tanto `edit`
|
|
10
|
+
* como `write`. Engancharse ahí cubre las dos herramientas con un solo sitio, y
|
|
11
|
+
* cualquier herramienta futura que escriba ficheros entra gratis.
|
|
12
|
+
*/
|
|
13
|
+
import { createHash } from "node:crypto";
|
|
14
|
+
import { appendFileSync, existsSync, mkdirSync, readFileSync, statSync, unlinkSync, writeFileSync } from "node:fs";
|
|
15
|
+
import { dirname, join } from "node:path";
|
|
16
|
+
/**
|
|
17
|
+
* Un fichero más grande que esto no se fotografía.
|
|
18
|
+
*
|
|
19
|
+
* Se registra igualmente, marcado, para poder DECIRLO al deshacer. Callarlo
|
|
20
|
+
* sería peor: el usuario creería que revirtió todo cuando faltó un fichero.
|
|
21
|
+
*/
|
|
22
|
+
const MAX_FOTO_BYTES = 4 * 1024 * 1024;
|
|
23
|
+
/** El turno abierto ahora mismo. La cola de mutaciones no conoce la sesión. */
|
|
24
|
+
let activo = null;
|
|
25
|
+
function rutaDelDiario(agentDir, cwd) {
|
|
26
|
+
const clave = createHash("sha256").update(cwd).digest("hex").slice(0, 16);
|
|
27
|
+
return join(agentDir, "undo", `${clave}.jsonl`);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Abre un turno nuevo. Todo lo que se escriba a partir de aquí se agrupa junto.
|
|
31
|
+
*
|
|
32
|
+
* El número de turno sale del diario, no de un contador en memoria: si el
|
|
33
|
+
* proceso se reinicia a mitad de sesión, el turno siguiente no puede reutilizar
|
|
34
|
+
* un número y mezclarse con cambios viejos.
|
|
35
|
+
*/
|
|
36
|
+
export function abrirTurno(agentDir, cwd, ahora) {
|
|
37
|
+
const rutaDiario = rutaDelDiario(agentDir, cwd);
|
|
38
|
+
mkdirSync(dirname(rutaDiario), { recursive: true, mode: 0o700 });
|
|
39
|
+
const turno = (leerEntradas(rutaDiario).at(-1)?.turno ?? 0) + 1;
|
|
40
|
+
activo = { rutaDiario, turno, vistos: new Set() };
|
|
41
|
+
void ahora;
|
|
42
|
+
return turno;
|
|
43
|
+
}
|
|
44
|
+
export function cerrarTurno() {
|
|
45
|
+
activo = null;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Fotografía un fichero antes de que lo toquen.
|
|
49
|
+
*
|
|
50
|
+
* Solo la PRIMERA vez dentro del turno: si el agente edita el mismo fichero
|
|
51
|
+
* cinco veces, deshacer debe devolverlo a como estaba antes de las cinco, no
|
|
52
|
+
* antes de la última.
|
|
53
|
+
*/
|
|
54
|
+
export function registrarPrevio(rutaFichero) {
|
|
55
|
+
if (!activo || activo.vistos.has(rutaFichero))
|
|
56
|
+
return;
|
|
57
|
+
activo.vistos.add(rutaFichero);
|
|
58
|
+
let entrada;
|
|
59
|
+
try {
|
|
60
|
+
if (!existsSync(rutaFichero)) {
|
|
61
|
+
entrada = { turno: activo.turno, path: rutaFichero, previo: null, ts: Date.now() };
|
|
62
|
+
}
|
|
63
|
+
else if (statSync(rutaFichero).size > MAX_FOTO_BYTES) {
|
|
64
|
+
entrada = { turno: activo.turno, path: rutaFichero, previo: null, omitido: true, ts: Date.now() };
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
entrada = {
|
|
68
|
+
turno: activo.turno,
|
|
69
|
+
path: rutaFichero,
|
|
70
|
+
previo: readFileSync(rutaFichero, "utf8"),
|
|
71
|
+
ts: Date.now(),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
// Un fichero ilegible no puede impedir la edición; se marca omitido para
|
|
77
|
+
// que deshacer lo diga en vez de fingir que lo revirtió.
|
|
78
|
+
entrada = { turno: activo.turno, path: rutaFichero, previo: null, omitido: true, ts: Date.now() };
|
|
79
|
+
}
|
|
80
|
+
try {
|
|
81
|
+
appendFileSync(activo.rutaDiario, `${JSON.stringify(entrada)}\n`, { mode: 0o600 });
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
// El diario es una comodidad, no una garantía: si no se puede escribir,
|
|
85
|
+
// la edición sigue adelante.
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
function leerEntradas(rutaDiario) {
|
|
89
|
+
if (!existsSync(rutaDiario))
|
|
90
|
+
return [];
|
|
91
|
+
const entradas = [];
|
|
92
|
+
for (const linea of readFileSync(rutaDiario, "utf8").split("\n")) {
|
|
93
|
+
if (!linea.trim())
|
|
94
|
+
continue;
|
|
95
|
+
try {
|
|
96
|
+
entradas.push(JSON.parse(linea));
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
// Una línea corrupta no invalida el resto del diario.
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return entradas;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Deshace el último turno con cambios. Todo o nada.
|
|
106
|
+
*
|
|
107
|
+
* Antes de escribir nada se fotografía el estado actual de cada objetivo; si
|
|
108
|
+
* una escritura falla a mitad, se devuelven todas atrás. Sin eso, un fallo de
|
|
109
|
+
* permisos en el tercer fichero dejaría dos revertidos y tres no — un estado
|
|
110
|
+
* que nadie escribió ni revisó.
|
|
111
|
+
*/
|
|
112
|
+
export function deshacer(agentDir, cwd) {
|
|
113
|
+
const rutaDiario = rutaDelDiario(agentDir, cwd);
|
|
114
|
+
const entradas = leerEntradas(rutaDiario);
|
|
115
|
+
const ultimo = entradas.at(-1)?.turno;
|
|
116
|
+
if (ultimo === undefined)
|
|
117
|
+
return { turno: null, restaurados: [], borrados: [], omitidos: [] };
|
|
118
|
+
const delTurno = entradas.filter((e) => e.turno === ultimo);
|
|
119
|
+
const aplicables = delTurno.filter((e) => !e.omitido);
|
|
120
|
+
const omitidos = delTurno.filter((e) => e.omitido).map((e) => e.path);
|
|
121
|
+
// Foto de seguridad para poder retroceder si algo peta a mitad.
|
|
122
|
+
const seguro = new Map();
|
|
123
|
+
for (const e of aplicables) {
|
|
124
|
+
seguro.set(e.path, existsSync(e.path) ? readFileSync(e.path, "utf8") : null);
|
|
125
|
+
}
|
|
126
|
+
const restaurados = [];
|
|
127
|
+
const borrados = [];
|
|
128
|
+
try {
|
|
129
|
+
for (const e of aplicables) {
|
|
130
|
+
if (e.previo === null) {
|
|
131
|
+
// El turno creó el fichero: deshacer es borrarlo.
|
|
132
|
+
if (existsSync(e.path))
|
|
133
|
+
unlinkSync(e.path);
|
|
134
|
+
borrados.push(e.path);
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
mkdirSync(dirname(e.path), { recursive: true });
|
|
138
|
+
writeFileSync(e.path, e.previo, "utf8");
|
|
139
|
+
restaurados.push(e.path);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
for (const [ruta, contenido] of seguro) {
|
|
145
|
+
try {
|
|
146
|
+
if (contenido === null) {
|
|
147
|
+
if (existsSync(ruta))
|
|
148
|
+
unlinkSync(ruta);
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
writeFileSync(ruta, contenido, "utf8");
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
// Poco más se puede hacer; el mensaje de error lo dirá.
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return {
|
|
159
|
+
turno: ultimo,
|
|
160
|
+
restaurados: [],
|
|
161
|
+
borrados: [],
|
|
162
|
+
omitidos,
|
|
163
|
+
error: error instanceof Error ? error.message : String(error),
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
// El turno deshecho sale del diario: deshacer dos veces debe ir al anterior,
|
|
167
|
+
// no repetir el mismo.
|
|
168
|
+
const restantes = entradas.filter((e) => e.turno !== ultimo);
|
|
169
|
+
writeFileSync(rutaDiario, restantes.map((e) => `${JSON.stringify(e)}\n`).join(""), { mode: 0o600 });
|
|
170
|
+
return { turno: ultimo, restaurados, borrados, omitidos };
|
|
171
|
+
}
|
|
172
|
+
/** Qué haría un `undo` sin llegar a hacerlo. */
|
|
173
|
+
export function previsualizar(agentDir, cwd) {
|
|
174
|
+
const entradas = leerEntradas(rutaDelDiario(agentDir, cwd));
|
|
175
|
+
const ultimo = entradas.at(-1)?.turno;
|
|
176
|
+
return ultimo === undefined ? [] : entradas.filter((e) => e.turno === ultimo);
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=journal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal.js","sourceRoot":"","sources":["../../../src/core/undo/journal.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Diario para deshacer los cambios de ficheros de un turno.\n *\n * Guarda el estado ANTERIOR de cada fichero justo antes de tocarlo, agrupado\n * por turno. `deshacer()` devuelve todos los ficheros del último turno a la vez,\n * o ninguno: revertir la mitad de un cambio deja el repositorio en un estado que\n * el agente no produjo nunca y que nadie ha revisado.\n *\n * El punto de captura es `withFileMutationQueue`, por donde pasan tanto `edit`\n * como `write`. Engancharse ahí cubre las dos herramientas con un solo sitio, y\n * cualquier herramienta futura que escriba ficheros entra gratis.\n */\n\nimport { createHash } from \"node:crypto\";\nimport { appendFileSync, existsSync, mkdirSync, readFileSync, statSync, unlinkSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\n\n/**\n * Un fichero más grande que esto no se fotografía.\n *\n * Se registra igualmente, marcado, para poder DECIRLO al deshacer. Callarlo\n * sería peor: el usuario creería que revirtió todo cuando faltó un fichero.\n */\nconst MAX_FOTO_BYTES = 4 * 1024 * 1024;\n\nexport interface EntradaDiario {\n\tturno: number;\n\tpath: string;\n\t/** Contenido anterior; `null` si el fichero no existía (lo creó el turno). */\n\tprevio: string | null;\n\t/** `true` si era demasiado grande para fotografiar. */\n\tomitido?: boolean;\n\tts: number;\n}\n\ninterface TurnoActivo {\n\trutaDiario: string;\n\tturno: number;\n\tvistos: Set<string>;\n}\n\n/** El turno abierto ahora mismo. La cola de mutaciones no conoce la sesión. */\nlet activo: TurnoActivo | null = null;\n\nfunction rutaDelDiario(agentDir: string, cwd: string): string {\n\tconst clave = createHash(\"sha256\").update(cwd).digest(\"hex\").slice(0, 16);\n\treturn join(agentDir, \"undo\", `${clave}.jsonl`);\n}\n\n/**\n * Abre un turno nuevo. Todo lo que se escriba a partir de aquí se agrupa junto.\n *\n * El número de turno sale del diario, no de un contador en memoria: si el\n * proceso se reinicia a mitad de sesión, el turno siguiente no puede reutilizar\n * un número y mezclarse con cambios viejos.\n */\nexport function abrirTurno(agentDir: string, cwd: string, ahora: number): number {\n\tconst rutaDiario = rutaDelDiario(agentDir, cwd);\n\tmkdirSync(dirname(rutaDiario), { recursive: true, mode: 0o700 });\n\tconst turno = (leerEntradas(rutaDiario).at(-1)?.turno ?? 0) + 1;\n\tactivo = { rutaDiario, turno, vistos: new Set() };\n\tvoid ahora;\n\treturn turno;\n}\n\nexport function cerrarTurno(): void {\n\tactivo = null;\n}\n\n/**\n * Fotografía un fichero antes de que lo toquen.\n *\n * Solo la PRIMERA vez dentro del turno: si el agente edita el mismo fichero\n * cinco veces, deshacer debe devolverlo a como estaba antes de las cinco, no\n * antes de la última.\n */\nexport function registrarPrevio(rutaFichero: string): void {\n\tif (!activo || activo.vistos.has(rutaFichero)) return;\n\tactivo.vistos.add(rutaFichero);\n\n\tlet entrada: EntradaDiario;\n\ttry {\n\t\tif (!existsSync(rutaFichero)) {\n\t\t\tentrada = { turno: activo.turno, path: rutaFichero, previo: null, ts: Date.now() };\n\t\t} else if (statSync(rutaFichero).size > MAX_FOTO_BYTES) {\n\t\t\tentrada = { turno: activo.turno, path: rutaFichero, previo: null, omitido: true, ts: Date.now() };\n\t\t} else {\n\t\t\tentrada = {\n\t\t\t\tturno: activo.turno,\n\t\t\t\tpath: rutaFichero,\n\t\t\t\tprevio: readFileSync(rutaFichero, \"utf8\"),\n\t\t\t\tts: Date.now(),\n\t\t\t};\n\t\t}\n\t} catch {\n\t\t// Un fichero ilegible no puede impedir la edición; se marca omitido para\n\t\t// que deshacer lo diga en vez de fingir que lo revirtió.\n\t\tentrada = { turno: activo.turno, path: rutaFichero, previo: null, omitido: true, ts: Date.now() };\n\t}\n\ttry {\n\t\tappendFileSync(activo.rutaDiario, `${JSON.stringify(entrada)}\\n`, { mode: 0o600 });\n\t} catch {\n\t\t// El diario es una comodidad, no una garantía: si no se puede escribir,\n\t\t// la edición sigue adelante.\n\t}\n}\n\nfunction leerEntradas(rutaDiario: string): EntradaDiario[] {\n\tif (!existsSync(rutaDiario)) return [];\n\tconst entradas: EntradaDiario[] = [];\n\tfor (const linea of readFileSync(rutaDiario, \"utf8\").split(\"\\n\")) {\n\t\tif (!linea.trim()) continue;\n\t\ttry {\n\t\t\tentradas.push(JSON.parse(linea) as EntradaDiario);\n\t\t} catch {\n\t\t\t// Una línea corrupta no invalida el resto del diario.\n\t\t}\n\t}\n\treturn entradas;\n}\n\nexport interface ResultadoDeshacer {\n\tturno: number | null;\n\trestaurados: string[];\n\tborrados: string[];\n\tomitidos: string[];\n\terror?: string;\n}\n\n/**\n * Deshace el último turno con cambios. Todo o nada.\n *\n * Antes de escribir nada se fotografía el estado actual de cada objetivo; si\n * una escritura falla a mitad, se devuelven todas atrás. Sin eso, un fallo de\n * permisos en el tercer fichero dejaría dos revertidos y tres no — un estado\n * que nadie escribió ni revisó.\n */\nexport function deshacer(agentDir: string, cwd: string): ResultadoDeshacer {\n\tconst rutaDiario = rutaDelDiario(agentDir, cwd);\n\tconst entradas = leerEntradas(rutaDiario);\n\tconst ultimo = entradas.at(-1)?.turno;\n\tif (ultimo === undefined) return { turno: null, restaurados: [], borrados: [], omitidos: [] };\n\n\tconst delTurno = entradas.filter((e) => e.turno === ultimo);\n\tconst aplicables = delTurno.filter((e) => !e.omitido);\n\tconst omitidos = delTurno.filter((e) => e.omitido).map((e) => e.path);\n\n\t// Foto de seguridad para poder retroceder si algo peta a mitad.\n\tconst seguro = new Map<string, string | null>();\n\tfor (const e of aplicables) {\n\t\tseguro.set(e.path, existsSync(e.path) ? readFileSync(e.path, \"utf8\") : null);\n\t}\n\n\tconst restaurados: string[] = [];\n\tconst borrados: string[] = [];\n\ttry {\n\t\tfor (const e of aplicables) {\n\t\t\tif (e.previo === null) {\n\t\t\t\t// El turno creó el fichero: deshacer es borrarlo.\n\t\t\t\tif (existsSync(e.path)) unlinkSync(e.path);\n\t\t\t\tborrados.push(e.path);\n\t\t\t} else {\n\t\t\t\tmkdirSync(dirname(e.path), { recursive: true });\n\t\t\t\twriteFileSync(e.path, e.previo, \"utf8\");\n\t\t\t\trestaurados.push(e.path);\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\tfor (const [ruta, contenido] of seguro) {\n\t\t\ttry {\n\t\t\t\tif (contenido === null) {\n\t\t\t\t\tif (existsSync(ruta)) unlinkSync(ruta);\n\t\t\t\t} else {\n\t\t\t\t\twriteFileSync(ruta, contenido, \"utf8\");\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Poco más se puede hacer; el mensaje de error lo dirá.\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tturno: ultimo,\n\t\t\trestaurados: [],\n\t\t\tborrados: [],\n\t\t\tomitidos,\n\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t};\n\t}\n\n\t// El turno deshecho sale del diario: deshacer dos veces debe ir al anterior,\n\t// no repetir el mismo.\n\tconst restantes = entradas.filter((e) => e.turno !== ultimo);\n\twriteFileSync(rutaDiario, restantes.map((e) => `${JSON.stringify(e)}\\n`).join(\"\"), { mode: 0o600 });\n\n\treturn { turno: ultimo, restaurados, borrados, omitidos };\n}\n\n/** Qué haría un `undo` sin llegar a hacerlo. */\nexport function previsualizar(agentDir: string, cwd: string): EntradaDiario[] {\n\tconst entradas = leerEntradas(rutaDelDiario(agentDir, cwd));\n\tconst ultimo = entradas.at(-1)?.turno;\n\treturn ultimo === undefined ? [] : entradas.filter((e) => e.turno === ultimo);\n}\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `audit://<n>` — las últimas `n` entradas del libro de sesión
|
|
3
|
+
* (`audit/libro.ts`), con el veredicto de la cadena de hashes.
|
|
4
|
+
*
|
|
5
|
+
* El veredicto va SIEMPRE, no solo cuando algo falla: "válida" es tan
|
|
6
|
+
* informativo como "alterada" para quien pregunta qué hizo el agente.
|
|
7
|
+
*/
|
|
8
|
+
import type { LibroDeSesion } from "../audit/libro.ts";
|
|
9
|
+
export declare function leerAuditoria(libro: LibroDeSesion, resto: string): Promise<string>;
|
|
10
|
+
//# sourceMappingURL=auditoria.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auditoria.d.ts","sourceRoot":"","sources":["../../../src/core/urls-internas/auditoria.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAavD,wBAAsB,aAAa,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA0BxF","sourcesContent":["/**\n * `audit://<n>` — las últimas `n` entradas del libro de sesión\n * (`audit/libro.ts`), con el veredicto de la cadena de hashes.\n *\n * El veredicto va SIEMPRE, no solo cuando algo falla: \"válida\" es tan\n * informativo como \"alterada\" para quien pregunta qué hizo el agente.\n */\n\nimport type { LibroDeSesion } from \"../audit/libro.ts\";\n\nconst LIMITE_DEFECTO = 20;\n\nfunction resumenSuceso(suceso: Record<string, unknown>): string {\n\tconst tipo = String(suceso.tipo ?? \"?\");\n\tconst resto = Object.entries(suceso)\n\t\t.filter(([k]) => k !== \"tipo\")\n\t\t.map(([k, v]) => `${k}=${JSON.stringify(v)}`)\n\t\t.join(\" \");\n\treturn resto ? `${tipo} ${resto}` : tipo;\n}\n\nexport async function leerAuditoria(libro: LibroDeSesion, resto: string): Promise<string> {\n\tconst texto = resto.trim();\n\tlet limite = LIMITE_DEFECTO;\n\tif (texto) {\n\t\tlimite = Number.parseInt(texto, 10);\n\t\tif (!Number.isFinite(limite) || limite <= 0) {\n\t\t\tthrow new Error(`audit://: \"${resto}\" no es un número positivo. Usa audit://<n>, por ejemplo audit://5.`);\n\t\t}\n\t}\n\n\tconst entradas = await libro.leer(limite);\n\tconst veredicto = await libro.verificar();\n\t// El caso «falta un fichero entero» no tiene `alteradaEn`, porque no hay\n\t// ninguna entrada que no cuadre: lo que no cuadra es el inventario. Sin esta\n\t// rama el texto decía «cadena ALTERADA en undefined», que es la peor versión\n\t// de un aviso — grita y no dice qué.\n\tconst cadena = veredicto.faltan?.length\n\t\t? `FALTAN ${veredicto.faltan.length} fichero(s) del libro con ${veredicto.faltan.reduce((n, f) => n + f.entradas, 0)} entrada(s), borrados de sesion/ y recuperados del índice`\n\t\t: veredicto.valido\n\t\t\t? `cadena válida (${veredicto.comprobadas} entrada(s) comprobada(s))`\n\t\t\t: `cadena ALTERADA${veredicto.alteradaEn ? ` en ${veredicto.alteradaEn}` : \"\"} (${veredicto.comprobadas} entrada(s) válidas antes de eso${veredicto.motivo ? `; ${veredicto.motivo}` : \"\"})`;\n\n\tif (entradas.length === 0) return `audit://${resto}: el libro de sesión está vacío. ${cadena}.`;\n\n\tconst lineas = entradas.map((e) => `#${e.seq} ${e.ts} ${resumenSuceso(e.suceso)}`);\n\treturn `${entradas.length} entrada(s) (de más reciente a más antigua), ${cadena}:\\n${lineas.join(\"\\n\")}`;\n}\n"]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `audit://<n>` — las últimas `n` entradas del libro de sesión
|
|
3
|
+
* (`audit/libro.ts`), con el veredicto de la cadena de hashes.
|
|
4
|
+
*
|
|
5
|
+
* El veredicto va SIEMPRE, no solo cuando algo falla: "válida" es tan
|
|
6
|
+
* informativo como "alterada" para quien pregunta qué hizo el agente.
|
|
7
|
+
*/
|
|
8
|
+
const LIMITE_DEFECTO = 20;
|
|
9
|
+
function resumenSuceso(suceso) {
|
|
10
|
+
const tipo = String(suceso.tipo ?? "?");
|
|
11
|
+
const resto = Object.entries(suceso)
|
|
12
|
+
.filter(([k]) => k !== "tipo")
|
|
13
|
+
.map(([k, v]) => `${k}=${JSON.stringify(v)}`)
|
|
14
|
+
.join(" ");
|
|
15
|
+
return resto ? `${tipo} ${resto}` : tipo;
|
|
16
|
+
}
|
|
17
|
+
export async function leerAuditoria(libro, resto) {
|
|
18
|
+
const texto = resto.trim();
|
|
19
|
+
let limite = LIMITE_DEFECTO;
|
|
20
|
+
if (texto) {
|
|
21
|
+
limite = Number.parseInt(texto, 10);
|
|
22
|
+
if (!Number.isFinite(limite) || limite <= 0) {
|
|
23
|
+
throw new Error(`audit://: "${resto}" no es un número positivo. Usa audit://<n>, por ejemplo audit://5.`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
const entradas = await libro.leer(limite);
|
|
27
|
+
const veredicto = await libro.verificar();
|
|
28
|
+
// El caso «falta un fichero entero» no tiene `alteradaEn`, porque no hay
|
|
29
|
+
// ninguna entrada que no cuadre: lo que no cuadra es el inventario. Sin esta
|
|
30
|
+
// rama el texto decía «cadena ALTERADA en undefined», que es la peor versión
|
|
31
|
+
// de un aviso — grita y no dice qué.
|
|
32
|
+
const cadena = veredicto.faltan?.length
|
|
33
|
+
? `FALTAN ${veredicto.faltan.length} fichero(s) del libro con ${veredicto.faltan.reduce((n, f) => n + f.entradas, 0)} entrada(s), borrados de sesion/ y recuperados del índice`
|
|
34
|
+
: veredicto.valido
|
|
35
|
+
? `cadena válida (${veredicto.comprobadas} entrada(s) comprobada(s))`
|
|
36
|
+
: `cadena ALTERADA${veredicto.alteradaEn ? ` en ${veredicto.alteradaEn}` : ""} (${veredicto.comprobadas} entrada(s) válidas antes de eso${veredicto.motivo ? `; ${veredicto.motivo}` : ""})`;
|
|
37
|
+
if (entradas.length === 0)
|
|
38
|
+
return `audit://${resto}: el libro de sesión está vacío. ${cadena}.`;
|
|
39
|
+
const lineas = entradas.map((e) => `#${e.seq} ${e.ts} ${resumenSuceso(e.suceso)}`);
|
|
40
|
+
return `${entradas.length} entrada(s) (de más reciente a más antigua), ${cadena}:\n${lineas.join("\n")}`;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=auditoria.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auditoria.js","sourceRoot":"","sources":["../../../src/core/urls-internas/auditoria.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,cAAc,GAAG,EAAE,CAAC;AAE1B,SAAS,aAAa,CAAC,MAA+B,EAAU;IAC/D,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SAClC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC;SAC7B,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5C,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAAA,CACzC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAoB,EAAE,KAAa,EAAmB;IACzF,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,MAAM,GAAG,cAAc,CAAC;IAC5B,IAAI,KAAK,EAAE,CAAC;QACX,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,cAAc,KAAK,sEAAqE,CAAC,CAAC;QAC3G,CAAC;IACF,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE,CAAC;IAC1C,2EAAyE;IACzE,6EAA6E;IAC7E,iFAA6E;IAC7E,wCAAqC;IACrC,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM;QACtC,CAAC,CAAC,UAAU,SAAS,CAAC,MAAM,CAAC,MAAM,6BAA6B,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,4DAA2D;QAC/K,CAAC,CAAC,SAAS,CAAC,MAAM;YACjB,CAAC,CAAC,mBAAkB,SAAS,CAAC,WAAW,4BAA4B;YACrE,CAAC,CAAC,kBAAkB,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,WAAW,oCAAmC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;IAE/L,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,WAAW,KAAK,uCAAoC,MAAM,GAAG,CAAC;IAEhG,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,IAAI,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACnF,OAAO,GAAG,QAAQ,CAAC,MAAM,kDAAgD,MAAM,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAAA,CACzG","sourcesContent":["/**\n * `audit://<n>` — las últimas `n` entradas del libro de sesión\n * (`audit/libro.ts`), con el veredicto de la cadena de hashes.\n *\n * El veredicto va SIEMPRE, no solo cuando algo falla: \"válida\" es tan\n * informativo como \"alterada\" para quien pregunta qué hizo el agente.\n */\n\nimport type { LibroDeSesion } from \"../audit/libro.ts\";\n\nconst LIMITE_DEFECTO = 20;\n\nfunction resumenSuceso(suceso: Record<string, unknown>): string {\n\tconst tipo = String(suceso.tipo ?? \"?\");\n\tconst resto = Object.entries(suceso)\n\t\t.filter(([k]) => k !== \"tipo\")\n\t\t.map(([k, v]) => `${k}=${JSON.stringify(v)}`)\n\t\t.join(\" \");\n\treturn resto ? `${tipo} ${resto}` : tipo;\n}\n\nexport async function leerAuditoria(libro: LibroDeSesion, resto: string): Promise<string> {\n\tconst texto = resto.trim();\n\tlet limite = LIMITE_DEFECTO;\n\tif (texto) {\n\t\tlimite = Number.parseInt(texto, 10);\n\t\tif (!Number.isFinite(limite) || limite <= 0) {\n\t\t\tthrow new Error(`audit://: \"${resto}\" no es un número positivo. Usa audit://<n>, por ejemplo audit://5.`);\n\t\t}\n\t}\n\n\tconst entradas = await libro.leer(limite);\n\tconst veredicto = await libro.verificar();\n\t// El caso «falta un fichero entero» no tiene `alteradaEn`, porque no hay\n\t// ninguna entrada que no cuadre: lo que no cuadra es el inventario. Sin esta\n\t// rama el texto decía «cadena ALTERADA en undefined», que es la peor versión\n\t// de un aviso — grita y no dice qué.\n\tconst cadena = veredicto.faltan?.length\n\t\t? `FALTAN ${veredicto.faltan.length} fichero(s) del libro con ${veredicto.faltan.reduce((n, f) => n + f.entradas, 0)} entrada(s), borrados de sesion/ y recuperados del índice`\n\t\t: veredicto.valido\n\t\t\t? `cadena válida (${veredicto.comprobadas} entrada(s) comprobada(s))`\n\t\t\t: `cadena ALTERADA${veredicto.alteradaEn ? ` en ${veredicto.alteradaEn}` : \"\"} (${veredicto.comprobadas} entrada(s) válidas antes de eso${veredicto.motivo ? `; ${veredicto.motivo}` : \"\"})`;\n\n\tif (entradas.length === 0) return `audit://${resto}: el libro de sesión está vacío. ${cadena}.`;\n\n\tconst lineas = entradas.map((e) => `#${e.seq} ${e.ts} ${resumenSuceso(e.suceso)}`);\n\treturn `${entradas.length} entrada(s) (de más reciente a más antigua), ${cadena}:\\n${lineas.join(\"\\n\")}`;\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `vault://<nombre>` — lista los NOMBRES del vault y su clasificación.
|
|
3
|
+
*
|
|
4
|
+
* Nunca el valor. La política de aprobación (`aprobacion/politica.ts`,
|
|
5
|
+
* `rutaProtegida`) deniega a propósito leer `<agentDir>/vault/…` incluso en
|
|
6
|
+
* modo `yolo` — es la única ruta que no es configurable. Este esquema no
|
|
7
|
+
* puede ser la puerta trasera que deshaga esa decisión, así que ni siquiera
|
|
8
|
+
* llama a `VaultManager.getSecret()`: solo a `.list()`, que por construcción
|
|
9
|
+
* no puede devolver un valor porque `VaultListEntry` no tiene ese campo.
|
|
10
|
+
*/
|
|
11
|
+
import type { VaultManager } from "../memory-engine/vault.ts";
|
|
12
|
+
export declare function leerBoveda(vault: VaultManager | null, nombre: string): string;
|
|
13
|
+
//# sourceMappingURL=boveda.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"boveda.d.ts","sourceRoot":"","sources":["../../../src/core/urls-internas/boveda.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAO9E,wBAAgB,UAAU,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAwB7E","sourcesContent":["/**\n * `vault://<nombre>` — lista los NOMBRES del vault y su clasificación.\n *\n * Nunca el valor. La política de aprobación (`aprobacion/politica.ts`,\n * `rutaProtegida`) deniega a propósito leer `<agentDir>/vault/…` incluso en\n * modo `yolo` — es la única ruta que no es configurable. Este esquema no\n * puede ser la puerta trasera que deshaga esa decisión, así que ni siquiera\n * llama a `VaultManager.getSecret()`: solo a `.list()`, que por construcción\n * no puede devolver un valor porque `VaultListEntry` no tiene ese campo.\n */\n\nimport type { VaultListEntry, VaultManager } from \"../memory-engine/vault.ts\";\n\nfunction formatoEntrada(e: VaultListEntry): string {\n\tconst categoria = e.category ?? \"sin categoría\";\n\treturn `- ${e.name} [${categoria}] (${e.source})${e.note ? ` — ${e.note}` : \"\"}`;\n}\n\nexport function leerBoveda(vault: VaultManager | null, nombre: string): string {\n\tif (!vault) throw new Error(\"vault://: no hay vault configurado en esta sesión.\");\n\tconst objetivo = nombre.trim();\n\tconst entradas = vault.list();\n\n\t// TRES estados, no dos.\n\t//\n\t// `VaultManager.list()` devuelve `[]` tanto cuando el vault está VACÍO como\n\t// cuando está BLOQUEADO —`projectVault` es `null` hasta que alguien lo\n\t// desbloquea—, así que un usuario con doce secretos guardados leía «no hay\n\t// secretos guardados». Es «no puedo» disfrazado de «no hay», y en la ruta de\n\t// seguridad: le empujaría a volver a guardarlos o a dar el vault por roto.\n\tif (entradas.length === 0 && vault.exists() && !vault.isUnlocked) {\n\t\treturn \"vault://: el vault de este proyecto existe pero está BLOQUEADO. No es que no haya secretos: no se han podido leer. Desbloquéalo para listarlos.\";\n\t}\n\n\tif (!objetivo) {\n\t\tif (entradas.length === 0) return \"vault://: no hay secretos guardados en este proyecto.\";\n\t\treturn `${entradas.length} secreto(s) en el vault (solo nombre y clasificación, nunca el valor):\\n${entradas.map(formatoEntrada).join(\"\\n\")}`;\n\t}\n\n\tconst encontrada = entradas.find((e) => e.name === objetivo);\n\tif (!encontrada) return `vault://${objetivo}: no existe una entrada con ese nombre.`;\n\treturn `${formatoEntrada(encontrada)}\\n(el valor no se expone por esta vía: la política de aprobación deniega leer el vault)`;\n}\n"]}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `vault://<nombre>` — lista los NOMBRES del vault y su clasificación.
|
|
3
|
+
*
|
|
4
|
+
* Nunca el valor. La política de aprobación (`aprobacion/politica.ts`,
|
|
5
|
+
* `rutaProtegida`) deniega a propósito leer `<agentDir>/vault/…` incluso en
|
|
6
|
+
* modo `yolo` — es la única ruta que no es configurable. Este esquema no
|
|
7
|
+
* puede ser la puerta trasera que deshaga esa decisión, así que ni siquiera
|
|
8
|
+
* llama a `VaultManager.getSecret()`: solo a `.list()`, que por construcción
|
|
9
|
+
* no puede devolver un valor porque `VaultListEntry` no tiene ese campo.
|
|
10
|
+
*/
|
|
11
|
+
function formatoEntrada(e) {
|
|
12
|
+
const categoria = e.category ?? "sin categoría";
|
|
13
|
+
return `- ${e.name} [${categoria}] (${e.source})${e.note ? ` — ${e.note}` : ""}`;
|
|
14
|
+
}
|
|
15
|
+
export function leerBoveda(vault, nombre) {
|
|
16
|
+
if (!vault)
|
|
17
|
+
throw new Error("vault://: no hay vault configurado en esta sesión.");
|
|
18
|
+
const objetivo = nombre.trim();
|
|
19
|
+
const entradas = vault.list();
|
|
20
|
+
// TRES estados, no dos.
|
|
21
|
+
//
|
|
22
|
+
// `VaultManager.list()` devuelve `[]` tanto cuando el vault está VACÍO como
|
|
23
|
+
// cuando está BLOQUEADO —`projectVault` es `null` hasta que alguien lo
|
|
24
|
+
// desbloquea—, así que un usuario con doce secretos guardados leía «no hay
|
|
25
|
+
// secretos guardados». Es «no puedo» disfrazado de «no hay», y en la ruta de
|
|
26
|
+
// seguridad: le empujaría a volver a guardarlos o a dar el vault por roto.
|
|
27
|
+
if (entradas.length === 0 && vault.exists() && !vault.isUnlocked) {
|
|
28
|
+
return "vault://: el vault de este proyecto existe pero está BLOQUEADO. No es que no haya secretos: no se han podido leer. Desbloquéalo para listarlos.";
|
|
29
|
+
}
|
|
30
|
+
if (!objetivo) {
|
|
31
|
+
if (entradas.length === 0)
|
|
32
|
+
return "vault://: no hay secretos guardados en este proyecto.";
|
|
33
|
+
return `${entradas.length} secreto(s) en el vault (solo nombre y clasificación, nunca el valor):\n${entradas.map(formatoEntrada).join("\n")}`;
|
|
34
|
+
}
|
|
35
|
+
const encontrada = entradas.find((e) => e.name === objetivo);
|
|
36
|
+
if (!encontrada)
|
|
37
|
+
return `vault://${objetivo}: no existe una entrada con ese nombre.`;
|
|
38
|
+
return `${formatoEntrada(encontrada)}\n(el valor no se expone por esta vía: la política de aprobación deniega leer el vault)`;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=boveda.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"boveda.js","sourceRoot":"","sources":["../../../src/core/urls-internas/boveda.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,SAAS,cAAc,CAAC,CAAiB,EAAU;IAClD,MAAM,SAAS,GAAG,CAAC,CAAC,QAAQ,IAAI,gBAAe,CAAC;IAChD,OAAO,KAAK,CAAC,CAAC,IAAI,KAAK,SAAS,MAAM,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAAA,CACjF;AAED,MAAM,UAAU,UAAU,CAAC,KAA0B,EAAE,MAAc,EAAU;IAC9E,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,qDAAoD,CAAC,CAAC;IAClF,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAE9B,wBAAwB;IACxB,EAAE;IACF,8EAA4E;IAC5E,0EAAuE;IACvE,gFAA2E;IAC3E,kFAA6E;IAC7E,4EAA2E;IAC3E,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QAClE,OAAO,mJAAiJ,CAAC;IAC1J,CAAC;IAED,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,uDAAuD,CAAC;QAC1F,OAAO,GAAG,QAAQ,CAAC,MAAM,4EAA2E,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAC/I,CAAC;IAED,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IAC7D,IAAI,CAAC,UAAU;QAAE,OAAO,WAAW,QAAQ,yCAAyC,CAAC;IACrF,OAAO,GAAG,cAAc,CAAC,UAAU,CAAC,4FAAyF,CAAC;AAAA,CAC9H","sourcesContent":["/**\n * `vault://<nombre>` — lista los NOMBRES del vault y su clasificación.\n *\n * Nunca el valor. La política de aprobación (`aprobacion/politica.ts`,\n * `rutaProtegida`) deniega a propósito leer `<agentDir>/vault/…` incluso en\n * modo `yolo` — es la única ruta que no es configurable. Este esquema no\n * puede ser la puerta trasera que deshaga esa decisión, así que ni siquiera\n * llama a `VaultManager.getSecret()`: solo a `.list()`, que por construcción\n * no puede devolver un valor porque `VaultListEntry` no tiene ese campo.\n */\n\nimport type { VaultListEntry, VaultManager } from \"../memory-engine/vault.ts\";\n\nfunction formatoEntrada(e: VaultListEntry): string {\n\tconst categoria = e.category ?? \"sin categoría\";\n\treturn `- ${e.name} [${categoria}] (${e.source})${e.note ? ` — ${e.note}` : \"\"}`;\n}\n\nexport function leerBoveda(vault: VaultManager | null, nombre: string): string {\n\tif (!vault) throw new Error(\"vault://: no hay vault configurado en esta sesión.\");\n\tconst objetivo = nombre.trim();\n\tconst entradas = vault.list();\n\n\t// TRES estados, no dos.\n\t//\n\t// `VaultManager.list()` devuelve `[]` tanto cuando el vault está VACÍO como\n\t// cuando está BLOQUEADO —`projectVault` es `null` hasta que alguien lo\n\t// desbloquea—, así que un usuario con doce secretos guardados leía «no hay\n\t// secretos guardados». Es «no puedo» disfrazado de «no hay», y en la ruta de\n\t// seguridad: le empujaría a volver a guardarlos o a dar el vault por roto.\n\tif (entradas.length === 0 && vault.exists() && !vault.isUnlocked) {\n\t\treturn \"vault://: el vault de este proyecto existe pero está BLOQUEADO. No es que no haya secretos: no se han podido leer. Desbloquéalo para listarlos.\";\n\t}\n\n\tif (!objetivo) {\n\t\tif (entradas.length === 0) return \"vault://: no hay secretos guardados en este proyecto.\";\n\t\treturn `${entradas.length} secreto(s) en el vault (solo nombre y clasificación, nunca el valor):\\n${entradas.map(formatoEntrada).join(\"\\n\")}`;\n\t}\n\n\tconst encontrada = entradas.find((e) => e.name === objetivo);\n\tif (!encontrada) return `vault://${objetivo}: no existe una entrada con ese nombre.`;\n\treturn `${formatoEntrada(encontrada)}\\n(el valor no se expone por esta vía: la política de aprobación deniega leer el vault)`;\n}\n"]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Engancha las cuatro URLs internas (`memory://`, `vault://`, `rule://`,
|
|
3
|
+
* `audit://`) en la tool `read`, SIN tocar `core/tools/read.ts`.
|
|
4
|
+
*
|
|
5
|
+
* `read.ts` es de upstream y el presupuesto de sincronización ya está al
|
|
6
|
+
* tope (115/115, ver `scripts/sync-ada.sh --check`): un hunk más ahí hace
|
|
7
|
+
* fallar la construcción. La tool en sí ya expone el hueco que hace falta —
|
|
8
|
+
* es un `ToolDefinition` normal, y `agent-session.ts` construye el registro
|
|
9
|
+
* de tools con `Map<string, ToolDefinition>` donde el nombre gana por
|
|
10
|
+
* inserción — así que envolver la definición y reemplazarla con
|
|
11
|
+
* `_baseToolDefinitions.set("read", …)` no es un rodeo, es como Ada ya
|
|
12
|
+
* registra `memory_*`, `web_*` y el resto de sus capacidades en ese mismo
|
|
13
|
+
* método.
|
|
14
|
+
*
|
|
15
|
+
* Delega TODO lo que no sea una URL interna al `read` original: rutas de
|
|
16
|
+
* fichero, imágenes, `offset`/`limit`… nada de eso cambia.
|
|
17
|
+
*/
|
|
18
|
+
import type { LibroDeSesion } from "../audit/libro.ts";
|
|
19
|
+
import type { ToolDefinition } from "../extensions/types.ts";
|
|
20
|
+
import type { MemoryEngine } from "../memory-engine/engine.ts";
|
|
21
|
+
import type { VaultManager } from "../memory-engine/vault.ts";
|
|
22
|
+
export interface DependenciasUrlsInternas {
|
|
23
|
+
memoryEngine: MemoryEngine | null;
|
|
24
|
+
vaultManager: VaultManager | null;
|
|
25
|
+
cwd: string;
|
|
26
|
+
/** Perezoso porque el libro también lo es (ver `RegistroDeSesion.libro()`). */
|
|
27
|
+
libro: () => LibroDeSesion;
|
|
28
|
+
}
|
|
29
|
+
export declare function envolverReadConUrlsInternas(base: ToolDefinition, deps: DependenciasUrlsInternas): ToolDefinition;
|
|
30
|
+
//# sourceMappingURL=lector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lector.d.ts","sourceRoot":"","sources":["../../../src/core/urls-internas/lector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAmB,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAO9D,MAAM,WAAW,wBAAwB;IACxC,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,gFAA+E;IAC/E,KAAK,EAAE,MAAM,aAAa,CAAC;CAC3B;AAoBD,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,wBAAwB,GAAG,cAAc,CAchH","sourcesContent":["/**\n * Engancha las cuatro URLs internas (`memory://`, `vault://`, `rule://`,\n * `audit://`) en la tool `read`, SIN tocar `core/tools/read.ts`.\n *\n * `read.ts` es de upstream y el presupuesto de sincronización ya está al\n * tope (115/115, ver `scripts/sync-ada.sh --check`): un hunk más ahí hace\n * fallar la construcción. La tool en sí ya expone el hueco que hace falta —\n * es un `ToolDefinition` normal, y `agent-session.ts` construye el registro\n * de tools con `Map<string, ToolDefinition>` donde el nombre gana por\n * inserción — así que envolver la definición y reemplazarla con\n * `_baseToolDefinitions.set(\"read\", …)` no es un rodeo, es como Ada ya\n * registra `memory_*`, `web_*` y el resto de sus capacidades en ese mismo\n * método.\n *\n * Delega TODO lo que no sea una URL interna al `read` original: rutas de\n * fichero, imágenes, `offset`/`limit`… nada de eso cambia.\n */\n\nimport type { LibroDeSesion } from \"../audit/libro.ts\";\nimport type { AgentToolResult, ToolDefinition } from \"../extensions/types.ts\";\nimport type { MemoryEngine } from \"../memory-engine/engine.ts\";\nimport type { VaultManager } from \"../memory-engine/vault.ts\";\nimport { leerAuditoria } from \"./auditoria.ts\";\nimport { leerBoveda } from \"./boveda.ts\";\nimport { leerMemoria } from \"./memoria.ts\";\nimport { errorEsquemaDesconocido, esEsquemaConocido, parseaUrlInterna } from \"./parse.ts\";\nimport { leerReglas } from \"./reglas.ts\";\n\nexport interface DependenciasUrlsInternas {\n\tmemoryEngine: MemoryEngine | null;\n\tvaultManager: VaultManager | null;\n\tcwd: string;\n\t/** Perezoso porque el libro también lo es (ver `RegistroDeSesion.libro()`). */\n\tlibro: () => LibroDeSesion;\n}\n\nasync function resuelveUrlInterna(esquema: string, resto: string, deps: DependenciasUrlsInternas): Promise<string> {\n\tswitch (esquema) {\n\t\tcase \"memory\":\n\t\t\treturn leerMemoria(deps.memoryEngine, resto);\n\t\tcase \"vault\":\n\t\t\treturn leerBoveda(deps.vaultManager, resto);\n\t\tcase \"rule\":\n\t\t\treturn leerReglas(deps.cwd, resto);\n\t\tcase \"audit\":\n\t\t\treturn leerAuditoria(deps.libro(), resto);\n\t\tdefault:\n\t\t\t// Inalcanzable si `esEsquemaConocido` ya filtró, pero deja el fallo\n\t\t\t// hablando en vez de romper con un `undefined` silencioso si alguien\n\t\t\t// añade un esquema a la lista y olvida este switch.\n\t\t\tthrow errorEsquemaDesconocido(esquema);\n\t}\n}\n\nexport function envolverReadConUrlsInternas(base: ToolDefinition, deps: DependenciasUrlsInternas): ToolDefinition {\n\treturn {\n\t\t...base,\n\t\tdescription: `${base.description} Además de rutas de fichero, acepta URLs internas: memory://<consulta>, vault://<nombre> (solo nombre y clasificación, nunca el valor), rule://<origen>, audit://<n>.`,\n\t\tasync execute(toolCallId, params, signal, onUpdate, ctx): Promise<AgentToolResult<unknown>> {\n\t\t\tconst ruta = (params as { path?: unknown }).path;\n\t\t\tconst url = typeof ruta === \"string\" ? parseaUrlInterna(ruta) : null;\n\t\t\tif (!url) return base.execute(toolCallId, params, signal, onUpdate, ctx);\n\n\t\t\tif (!esEsquemaConocido(url.esquema)) throw errorEsquemaDesconocido(url.esquema);\n\t\t\tconst texto = await resuelveUrlInterna(url.esquema, url.resto, deps);\n\t\t\treturn { content: [{ type: \"text\", text: texto }], details: undefined };\n\t\t},\n\t};\n}\n"]}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Engancha las cuatro URLs internas (`memory://`, `vault://`, `rule://`,
|
|
3
|
+
* `audit://`) en la tool `read`, SIN tocar `core/tools/read.ts`.
|
|
4
|
+
*
|
|
5
|
+
* `read.ts` es de upstream y el presupuesto de sincronización ya está al
|
|
6
|
+
* tope (115/115, ver `scripts/sync-ada.sh --check`): un hunk más ahí hace
|
|
7
|
+
* fallar la construcción. La tool en sí ya expone el hueco que hace falta —
|
|
8
|
+
* es un `ToolDefinition` normal, y `agent-session.ts` construye el registro
|
|
9
|
+
* de tools con `Map<string, ToolDefinition>` donde el nombre gana por
|
|
10
|
+
* inserción — así que envolver la definición y reemplazarla con
|
|
11
|
+
* `_baseToolDefinitions.set("read", …)` no es un rodeo, es como Ada ya
|
|
12
|
+
* registra `memory_*`, `web_*` y el resto de sus capacidades en ese mismo
|
|
13
|
+
* método.
|
|
14
|
+
*
|
|
15
|
+
* Delega TODO lo que no sea una URL interna al `read` original: rutas de
|
|
16
|
+
* fichero, imágenes, `offset`/`limit`… nada de eso cambia.
|
|
17
|
+
*/
|
|
18
|
+
import { leerAuditoria } from "./auditoria.js";
|
|
19
|
+
import { leerBoveda } from "./boveda.js";
|
|
20
|
+
import { leerMemoria } from "./memoria.js";
|
|
21
|
+
import { errorEsquemaDesconocido, esEsquemaConocido, parseaUrlInterna } from "./parse.js";
|
|
22
|
+
import { leerReglas } from "./reglas.js";
|
|
23
|
+
async function resuelveUrlInterna(esquema, resto, deps) {
|
|
24
|
+
switch (esquema) {
|
|
25
|
+
case "memory":
|
|
26
|
+
return leerMemoria(deps.memoryEngine, resto);
|
|
27
|
+
case "vault":
|
|
28
|
+
return leerBoveda(deps.vaultManager, resto);
|
|
29
|
+
case "rule":
|
|
30
|
+
return leerReglas(deps.cwd, resto);
|
|
31
|
+
case "audit":
|
|
32
|
+
return leerAuditoria(deps.libro(), resto);
|
|
33
|
+
default:
|
|
34
|
+
// Inalcanzable si `esEsquemaConocido` ya filtró, pero deja el fallo
|
|
35
|
+
// hablando en vez de romper con un `undefined` silencioso si alguien
|
|
36
|
+
// añade un esquema a la lista y olvida este switch.
|
|
37
|
+
throw errorEsquemaDesconocido(esquema);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
export function envolverReadConUrlsInternas(base, deps) {
|
|
41
|
+
return {
|
|
42
|
+
...base,
|
|
43
|
+
description: `${base.description} Además de rutas de fichero, acepta URLs internas: memory://<consulta>, vault://<nombre> (solo nombre y clasificación, nunca el valor), rule://<origen>, audit://<n>.`,
|
|
44
|
+
async execute(toolCallId, params, signal, onUpdate, ctx) {
|
|
45
|
+
const ruta = params.path;
|
|
46
|
+
const url = typeof ruta === "string" ? parseaUrlInterna(ruta) : null;
|
|
47
|
+
if (!url)
|
|
48
|
+
return base.execute(toolCallId, params, signal, onUpdate, ctx);
|
|
49
|
+
if (!esEsquemaConocido(url.esquema))
|
|
50
|
+
throw errorEsquemaDesconocido(url.esquema);
|
|
51
|
+
const texto = await resuelveUrlInterna(url.esquema, url.resto, deps);
|
|
52
|
+
return { content: [{ type: "text", text: texto }], details: undefined };
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=lector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lector.js","sourceRoot":"","sources":["../../../src/core/urls-internas/lector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAMH,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC1F,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAUzC,KAAK,UAAU,kBAAkB,CAAC,OAAe,EAAE,KAAa,EAAE,IAA8B,EAAmB;IAClH,QAAQ,OAAO,EAAE,CAAC;QACjB,KAAK,QAAQ;YACZ,OAAO,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAC9C,KAAK,OAAO;YACX,OAAO,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAC7C,KAAK,MAAM;YACV,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACpC,KAAK,OAAO;YACX,OAAO,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;QAC3C;YACC,qEAAoE;YACpE,qEAAqE;YACrE,qDAAoD;YACpD,MAAM,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;AAAA,CACD;AAED,MAAM,UAAU,2BAA2B,CAAC,IAAoB,EAAE,IAA8B,EAAkB;IACjH,OAAO;QACN,GAAG,IAAI;QACP,WAAW,EAAE,GAAG,IAAI,CAAC,WAAW,yKAAuK;QACvM,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAqC;YAC3F,MAAM,IAAI,GAAI,MAA6B,CAAC,IAAI,CAAC;YACjD,MAAM,GAAG,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACrE,IAAI,CAAC,GAAG;gBAAE,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;YAEzE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC;gBAAE,MAAM,uBAAuB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAChF,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACrE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;QAAA,CACxE;KACD,CAAC;AAAA,CACF","sourcesContent":["/**\n * Engancha las cuatro URLs internas (`memory://`, `vault://`, `rule://`,\n * `audit://`) en la tool `read`, SIN tocar `core/tools/read.ts`.\n *\n * `read.ts` es de upstream y el presupuesto de sincronización ya está al\n * tope (115/115, ver `scripts/sync-ada.sh --check`): un hunk más ahí hace\n * fallar la construcción. La tool en sí ya expone el hueco que hace falta —\n * es un `ToolDefinition` normal, y `agent-session.ts` construye el registro\n * de tools con `Map<string, ToolDefinition>` donde el nombre gana por\n * inserción — así que envolver la definición y reemplazarla con\n * `_baseToolDefinitions.set(\"read\", …)` no es un rodeo, es como Ada ya\n * registra `memory_*`, `web_*` y el resto de sus capacidades en ese mismo\n * método.\n *\n * Delega TODO lo que no sea una URL interna al `read` original: rutas de\n * fichero, imágenes, `offset`/`limit`… nada de eso cambia.\n */\n\nimport type { LibroDeSesion } from \"../audit/libro.ts\";\nimport type { AgentToolResult, ToolDefinition } from \"../extensions/types.ts\";\nimport type { MemoryEngine } from \"../memory-engine/engine.ts\";\nimport type { VaultManager } from \"../memory-engine/vault.ts\";\nimport { leerAuditoria } from \"./auditoria.ts\";\nimport { leerBoveda } from \"./boveda.ts\";\nimport { leerMemoria } from \"./memoria.ts\";\nimport { errorEsquemaDesconocido, esEsquemaConocido, parseaUrlInterna } from \"./parse.ts\";\nimport { leerReglas } from \"./reglas.ts\";\n\nexport interface DependenciasUrlsInternas {\n\tmemoryEngine: MemoryEngine | null;\n\tvaultManager: VaultManager | null;\n\tcwd: string;\n\t/** Perezoso porque el libro también lo es (ver `RegistroDeSesion.libro()`). */\n\tlibro: () => LibroDeSesion;\n}\n\nasync function resuelveUrlInterna(esquema: string, resto: string, deps: DependenciasUrlsInternas): Promise<string> {\n\tswitch (esquema) {\n\t\tcase \"memory\":\n\t\t\treturn leerMemoria(deps.memoryEngine, resto);\n\t\tcase \"vault\":\n\t\t\treturn leerBoveda(deps.vaultManager, resto);\n\t\tcase \"rule\":\n\t\t\treturn leerReglas(deps.cwd, resto);\n\t\tcase \"audit\":\n\t\t\treturn leerAuditoria(deps.libro(), resto);\n\t\tdefault:\n\t\t\t// Inalcanzable si `esEsquemaConocido` ya filtró, pero deja el fallo\n\t\t\t// hablando en vez de romper con un `undefined` silencioso si alguien\n\t\t\t// añade un esquema a la lista y olvida este switch.\n\t\t\tthrow errorEsquemaDesconocido(esquema);\n\t}\n}\n\nexport function envolverReadConUrlsInternas(base: ToolDefinition, deps: DependenciasUrlsInternas): ToolDefinition {\n\treturn {\n\t\t...base,\n\t\tdescription: `${base.description} Además de rutas de fichero, acepta URLs internas: memory://<consulta>, vault://<nombre> (solo nombre y clasificación, nunca el valor), rule://<origen>, audit://<n>.`,\n\t\tasync execute(toolCallId, params, signal, onUpdate, ctx): Promise<AgentToolResult<unknown>> {\n\t\t\tconst ruta = (params as { path?: unknown }).path;\n\t\t\tconst url = typeof ruta === \"string\" ? parseaUrlInterna(ruta) : null;\n\t\t\tif (!url) return base.execute(toolCallId, params, signal, onUpdate, ctx);\n\n\t\t\tif (!esEsquemaConocido(url.esquema)) throw errorEsquemaDesconocido(url.esquema);\n\t\t\tconst texto = await resuelveUrlInterna(url.esquema, url.resto, deps);\n\t\t\treturn { content: [{ type: \"text\", text: texto }], details: undefined };\n\t\t},\n\t};\n}\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `memory://<consulta>` — busca en el motor de memoria (`memory-engine/engine.ts`).
|
|
3
|
+
*
|
|
4
|
+
* No es un tool nuevo: es el mismo `searchMemories` que ya usa `memory_search`
|
|
5
|
+
* en `memory-engine/tools.ts`, con el mismo formato de salida. Reutilizarlo en
|
|
6
|
+
* vez de reimplementar la búsqueda es justo el punto del hueco — un `read` en
|
|
7
|
+
* vez de veinte tools.
|
|
8
|
+
*/
|
|
9
|
+
import type { MemoryEngine } from "../memory-engine/engine.ts";
|
|
10
|
+
export declare function leerMemoria(engine: MemoryEngine | null, consulta: string): string;
|
|
11
|
+
//# sourceMappingURL=memoria.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memoria.d.ts","sourceRoot":"","sources":["../../../src/core/urls-internas/memoria.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAI/D,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAajF","sourcesContent":["/**\n * `memory://<consulta>` — busca en el motor de memoria (`memory-engine/engine.ts`).\n *\n * No es un tool nuevo: es el mismo `searchMemories` que ya usa `memory_search`\n * en `memory-engine/tools.ts`, con el mismo formato de salida. Reutilizarlo en\n * vez de reimplementar la búsqueda es justo el punto del hueco — un `read` en\n * vez de veinte tools.\n */\n\nimport type { MemoryEngine } from \"../memory-engine/engine.ts\";\n\nconst LIMITE = 10;\n\nexport function leerMemoria(engine: MemoryEngine | null, consulta: string): string {\n\tif (!engine) throw new Error(\"memory://: el motor de memoria no está disponible en esta sesión.\");\n\tconst texto = consulta.trim();\n\tif (!texto) throw new Error(\"memory://: falta la consulta. Usa memory://<lo que buscas>.\");\n\n\tconst hits = engine.searchMemories({ text: texto, limit: LIMITE });\n\tif (hits.length === 0) return `memory://${consulta}: sin resultados.`;\n\n\tconst lineas = hits.map((hit, i) => {\n\t\tconst alcance = hit.observation.project ? \"project\" : \"global/user\";\n\t\treturn `${i + 1}. [${hit.observation.type} · ${alcance}] ${hit.observation.text}`;\n\t});\n\treturn `${hits.length} resultado(s) para memory://${consulta}:\\n${lineas.join(\"\\n\")}`;\n}\n"]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `memory://<consulta>` — busca en el motor de memoria (`memory-engine/engine.ts`).
|
|
3
|
+
*
|
|
4
|
+
* No es un tool nuevo: es el mismo `searchMemories` que ya usa `memory_search`
|
|
5
|
+
* en `memory-engine/tools.ts`, con el mismo formato de salida. Reutilizarlo en
|
|
6
|
+
* vez de reimplementar la búsqueda es justo el punto del hueco — un `read` en
|
|
7
|
+
* vez de veinte tools.
|
|
8
|
+
*/
|
|
9
|
+
const LIMITE = 10;
|
|
10
|
+
export function leerMemoria(engine, consulta) {
|
|
11
|
+
if (!engine)
|
|
12
|
+
throw new Error("memory://: el motor de memoria no está disponible en esta sesión.");
|
|
13
|
+
const texto = consulta.trim();
|
|
14
|
+
if (!texto)
|
|
15
|
+
throw new Error("memory://: falta la consulta. Usa memory://<lo que buscas>.");
|
|
16
|
+
const hits = engine.searchMemories({ text: texto, limit: LIMITE });
|
|
17
|
+
if (hits.length === 0)
|
|
18
|
+
return `memory://${consulta}: sin resultados.`;
|
|
19
|
+
const lineas = hits.map((hit, i) => {
|
|
20
|
+
const alcance = hit.observation.project ? "project" : "global/user";
|
|
21
|
+
return `${i + 1}. [${hit.observation.type} · ${alcance}] ${hit.observation.text}`;
|
|
22
|
+
});
|
|
23
|
+
return `${hits.length} resultado(s) para memory://${consulta}:\n${lineas.join("\n")}`;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=memoria.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memoria.js","sourceRoot":"","sources":["../../../src/core/urls-internas/memoria.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,MAAM,MAAM,GAAG,EAAE,CAAC;AAElB,MAAM,UAAU,WAAW,CAAC,MAA2B,EAAE,QAAgB,EAAU;IAClF,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,qEAAmE,CAAC,CAAC;IAClG,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC9B,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;IAE3F,MAAM,IAAI,GAAG,MAAM,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACnE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,YAAY,QAAQ,mBAAmB,CAAC;IAEtE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC;QACpE,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,WAAW,CAAC,IAAI,OAAM,OAAO,KAAK,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IAAA,CAClF,CAAC,CAAC;IACH,OAAO,GAAG,IAAI,CAAC,MAAM,+BAA+B,QAAQ,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAAA,CACtF","sourcesContent":["/**\n * `memory://<consulta>` — busca en el motor de memoria (`memory-engine/engine.ts`).\n *\n * No es un tool nuevo: es el mismo `searchMemories` que ya usa `memory_search`\n * en `memory-engine/tools.ts`, con el mismo formato de salida. Reutilizarlo en\n * vez de reimplementar la búsqueda es justo el punto del hueco — un `read` en\n * vez de veinte tools.\n */\n\nimport type { MemoryEngine } from \"../memory-engine/engine.ts\";\n\nconst LIMITE = 10;\n\nexport function leerMemoria(engine: MemoryEngine | null, consulta: string): string {\n\tif (!engine) throw new Error(\"memory://: el motor de memoria no está disponible en esta sesión.\");\n\tconst texto = consulta.trim();\n\tif (!texto) throw new Error(\"memory://: falta la consulta. Usa memory://<lo que buscas>.\");\n\n\tconst hits = engine.searchMemories({ text: texto, limit: LIMITE });\n\tif (hits.length === 0) return `memory://${consulta}: sin resultados.`;\n\n\tconst lineas = hits.map((hit, i) => {\n\t\tconst alcance = hit.observation.project ? \"project\" : \"global/user\";\n\t\treturn `${i + 1}. [${hit.observation.type} · ${alcance}] ${hit.observation.text}`;\n\t});\n\treturn `${hits.length} resultado(s) para memory://${consulta}:\\n${lineas.join(\"\\n\")}`;\n}\n"]}
|