@hoilab/ada-cli 0.84.21 → 0.85.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +49 -2
- package/README.es.md +174 -0
- package/README.md +203 -658
- package/dist/ada-publico.d.ts +35 -0
- package/dist/ada-publico.d.ts.map +1 -0
- package/dist/ada-publico.js +40 -0
- package/dist/ada-publico.js.map +1 -0
- package/dist/cli/args.d.ts +3 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +11 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/audit-command.d.ts +15 -0
- package/dist/cli/audit-command.d.ts.map +1 -0
- package/dist/cli/audit-command.js +280 -0
- package/dist/cli/audit-command.js.map +1 -0
- package/dist/cli/banco-command.d.ts +15 -0
- package/dist/cli/banco-command.d.ts.map +1 -0
- package/dist/cli/banco-command.js +213 -0
- package/dist/cli/banco-command.js.map +1 -0
- package/dist/cli/cleanse-command.d.ts +11 -0
- package/dist/cli/cleanse-command.d.ts.map +1 -0
- package/dist/cli/cleanse-command.js +101 -0
- package/dist/cli/cleanse-command.js.map +1 -0
- package/dist/cli/commit-command.d.ts +31 -0
- package/dist/cli/commit-command.d.ts.map +1 -0
- package/dist/cli/commit-command.js +158 -0
- package/dist/cli/commit-command.js.map +1 -0
- package/dist/cli/computer-command.d.ts +12 -0
- package/dist/cli/computer-command.d.ts.map +1 -0
- package/dist/cli/computer-command.js +141 -0
- package/dist/cli/computer-command.js.map +1 -0
- package/dist/cli/discover-command.d.ts +18 -0
- package/dist/cli/discover-command.d.ts.map +1 -0
- package/dist/cli/discover-command.js +108 -0
- package/dist/cli/discover-command.js.map +1 -0
- package/dist/cli/file-processor.d.ts.map +1 -1
- package/dist/cli/file-processor.js +2 -1
- package/dist/cli/file-processor.js.map +1 -1
- package/dist/cli/hashline-command.d.ts +11 -0
- package/dist/cli/hashline-command.d.ts.map +1 -0
- package/dist/cli/hashline-command.js +106 -0
- package/dist/cli/hashline-command.js.map +1 -0
- package/dist/cli/home-screen.d.ts.map +1 -1
- package/dist/cli/home-screen.js +2 -2
- package/dist/cli/home-screen.js.map +1 -1
- package/dist/cli/import-command.d.ts +35 -0
- package/dist/cli/import-command.d.ts.map +1 -0
- package/dist/cli/import-command.js +164 -0
- package/dist/cli/import-command.js.map +1 -0
- package/dist/cli/politica-command.d.ts +20 -0
- package/dist/cli/politica-command.d.ts.map +1 -0
- package/dist/cli/politica-command.js +93 -0
- package/dist/cli/politica-command.js.map +1 -0
- package/dist/cli/refine-command.d.ts +18 -0
- package/dist/cli/refine-command.d.ts.map +1 -0
- package/dist/cli/refine-command.js +101 -0
- package/dist/cli/refine-command.js.map +1 -0
- package/dist/cli/review-command.d.ts +24 -0
- package/dist/cli/review-command.d.ts.map +1 -0
- package/dist/cli/review-command.js +168 -0
- package/dist/cli/review-command.js.map +1 -0
- package/dist/cli/schedule-command.d.ts +17 -0
- package/dist/cli/schedule-command.d.ts.map +1 -0
- package/dist/cli/schedule-command.js +117 -0
- package/dist/cli/schedule-command.js.map +1 -0
- package/dist/cli/serve-command.d.ts +72 -0
- package/dist/cli/serve-command.d.ts.map +1 -0
- package/dist/cli/serve-command.js +568 -0
- package/dist/cli/serve-command.js.map +1 -0
- package/dist/cli/startup-ui.d.ts.map +1 -1
- package/dist/cli/startup-ui.js +9 -3
- package/dist/cli/startup-ui.js.map +1 -1
- package/dist/cli/telegram-command.d.ts +18 -0
- package/dist/cli/telegram-command.d.ts.map +1 -0
- package/dist/cli/telegram-command.js +137 -0
- package/dist/cli/telegram-command.js.map +1 -0
- package/dist/cli/telemetria-command.d.ts +22 -0
- package/dist/cli/telemetria-command.d.ts.map +1 -0
- package/dist/cli/telemetria-command.js +127 -0
- package/dist/cli/telemetria-command.js.map +1 -0
- package/dist/cli/undo-command.d.ts +9 -0
- package/dist/cli/undo-command.d.ts.map +1 -0
- package/dist/cli/undo-command.js +56 -0
- package/dist/cli/undo-command.js.map +1 -0
- package/dist/cli/usage-command.d.ts +10 -0
- package/dist/cli/usage-command.d.ts.map +1 -0
- package/dist/cli/usage-command.js +209 -0
- package/dist/cli/usage-command.js.map +1 -0
- package/dist/cli/wiki-command.d.ts +9 -0
- package/dist/cli/wiki-command.d.ts.map +1 -0
- package/dist/cli/wiki-command.js +76 -0
- package/dist/cli/wiki-command.js.map +1 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +10 -11
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +3 -2
- package/dist/config.js.map +1 -1
- package/dist/core/ada.d.ts +58 -0
- package/dist/core/ada.d.ts.map +1 -0
- package/dist/core/ada.js +61 -0
- package/dist/core/ada.js.map +1 -0
- package/dist/core/advisor/guarda.d.ts +66 -0
- package/dist/core/advisor/guarda.d.ts.map +1 -0
- package/dist/core/advisor/guarda.js +191 -0
- package/dist/core/advisor/guarda.js.map +1 -0
- package/dist/core/advisor/runtime.d.ts +66 -0
- package/dist/core/advisor/runtime.d.ts.map +1 -0
- package/dist/core/advisor/runtime.js +121 -0
- package/dist/core/advisor/runtime.js.map +1 -0
- package/dist/core/advisor/sesion.d.ts +109 -0
- package/dist/core/advisor/sesion.d.ts.map +1 -0
- package/dist/core/advisor/sesion.js +139 -0
- package/dist/core/advisor/sesion.js.map +1 -0
- package/dist/core/agent-session.d.ts +85 -7
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +862 -78
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/agents/loader.d.ts +77 -0
- package/dist/core/agents/loader.d.ts.map +1 -0
- package/dist/core/agents/loader.js +154 -0
- package/dist/core/agents/loader.js.map +1 -0
- package/dist/core/aprobacion/generados.d.ts +37 -0
- package/dist/core/aprobacion/generados.d.ts.map +1 -0
- package/dist/core/aprobacion/generados.js +85 -0
- package/dist/core/aprobacion/generados.js.map +1 -0
- package/dist/core/aprobacion/politica-de-maquina.d.ts +90 -0
- package/dist/core/aprobacion/politica-de-maquina.d.ts.map +1 -0
- package/dist/core/aprobacion/politica-de-maquina.js +212 -0
- package/dist/core/aprobacion/politica-de-maquina.js.map +1 -0
- package/dist/core/aprobacion/politica.d.ts +90 -0
- package/dist/core/aprobacion/politica.d.ts.map +1 -0
- package/dist/core/aprobacion/politica.js +375 -0
- package/dist/core/aprobacion/politica.js.map +1 -0
- package/dist/core/arranque/atajos.d.ts +46 -0
- package/dist/core/arranque/atajos.d.ts.map +1 -0
- package/dist/core/arranque/atajos.js +113 -0
- package/dist/core/arranque/atajos.js.map +1 -0
- package/dist/core/audit/exportacion.d.ts +54 -0
- package/dist/core/audit/exportacion.d.ts.map +1 -0
- package/dist/core/audit/exportacion.js +265 -0
- package/dist/core/audit/exportacion.js.map +1 -0
- package/dist/core/audit/libro.d.ts +318 -0
- package/dist/core/audit/libro.d.ts.map +1 -0
- package/dist/core/audit/libro.js +508 -0
- package/dist/core/audit/libro.js.map +1 -0
- package/dist/core/audit/registro-sesion.d.ts +78 -0
- package/dist/core/audit/registro-sesion.d.ts.map +1 -0
- package/dist/core/audit/registro-sesion.js +202 -0
- package/dist/core/audit/registro-sesion.js.map +1 -0
- package/dist/core/audit/retencion.d.ts +82 -0
- package/dist/core/audit/retencion.d.ts.map +1 -0
- package/dist/core/audit/retencion.js +152 -0
- package/dist/core/audit/retencion.js.map +1 -0
- package/dist/core/audit/rutas.d.ts +23 -0
- package/dist/core/audit/rutas.d.ts.map +1 -0
- package/dist/core/audit/rutas.js +23 -0
- package/dist/core/audit/rutas.js.map +1 -0
- package/dist/core/auth-storage.d.ts +0 -3
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +21 -8
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/banco/almacenamiento.d.ts +18 -0
- package/dist/core/banco/almacenamiento.d.ts.map +1 -0
- package/dist/core/banco/almacenamiento.js +50 -0
- package/dist/core/banco/almacenamiento.js.map +1 -0
- package/dist/core/banco/analisis.d.ts +37 -0
- package/dist/core/banco/analisis.d.ts.map +1 -0
- package/dist/core/banco/analisis.js +164 -0
- package/dist/core/banco/analisis.js.map +1 -0
- package/dist/core/banco/bloques.d.ts +39 -0
- package/dist/core/banco/bloques.d.ts.map +1 -0
- package/dist/core/banco/bloques.js +84 -0
- package/dist/core/banco/bloques.js.map +1 -0
- package/dist/core/banco/cargas.d.ts +84 -0
- package/dist/core/banco/cargas.d.ts.map +1 -0
- package/dist/core/banco/cargas.js +520 -0
- package/dist/core/banco/cargas.js.map +1 -0
- package/dist/core/banco/comparar.d.ts +29 -0
- package/dist/core/banco/comparar.d.ts.map +1 -0
- package/dist/core/banco/comparar.js +28 -0
- package/dist/core/banco/comparar.js.map +1 -0
- package/dist/core/banco/ejecutar.d.ts +44 -0
- package/dist/core/banco/ejecutar.d.ts.map +1 -0
- package/dist/core/banco/ejecutar.js +183 -0
- package/dist/core/banco/ejecutar.js.map +1 -0
- package/dist/core/banco/generar.d.ts +24 -0
- package/dist/core/banco/generar.d.ts.map +1 -0
- package/dist/core/banco/generar.js +159 -0
- package/dist/core/banco/generar.js.map +1 -0
- package/dist/core/banco/mutaciones.d.ts +25 -0
- package/dist/core/banco/mutaciones.d.ts.map +1 -0
- package/dist/core/banco/mutaciones.js +215 -0
- package/dist/core/banco/mutaciones.js.map +1 -0
- package/dist/core/banco/tipos.d.ts +121 -0
- package/dist/core/banco/tipos.d.ts.map +1 -0
- package/dist/core/banco/tipos.js +16 -0
- package/dist/core/banco/tipos.js.map +1 -0
- package/dist/core/blobs/almacen.d.ts +81 -0
- package/dist/core/blobs/almacen.d.ts.map +1 -0
- package/dist/core/blobs/almacen.js +198 -0
- package/dist/core/blobs/almacen.js.map +1 -0
- package/dist/core/blobs/broker.d.ts +103 -0
- package/dist/core/blobs/broker.d.ts.map +1 -0
- package/dist/core/blobs/broker.js +204 -0
- package/dist/core/blobs/broker.js.map +1 -0
- package/dist/core/blobs/index.d.ts +70 -0
- package/dist/core/blobs/index.d.ts.map +1 -0
- package/dist/core/blobs/index.js +232 -0
- package/dist/core/blobs/index.js.map +1 -0
- package/dist/core/blobs/payload.d.ts +55 -0
- package/dist/core/blobs/payload.d.ts.map +1 -0
- package/dist/core/blobs/payload.js +255 -0
- package/dist/core/blobs/payload.js.map +1 -0
- package/dist/core/blobs/proveedor.d.ts +85 -0
- package/dist/core/blobs/proveedor.d.ts.map +1 -0
- package/dist/core/blobs/proveedor.js +196 -0
- package/dist/core/blobs/proveedor.js.map +1 -0
- package/dist/core/browser/cdp.d.ts +41 -0
- package/dist/core/browser/cdp.d.ts.map +1 -0
- package/dist/core/browser/cdp.js +119 -0
- package/dist/core/browser/cdp.js.map +1 -0
- package/dist/core/browser/politica.d.ts +51 -0
- package/dist/core/browser/politica.d.ts.map +1 -0
- package/dist/core/browser/politica.js +123 -0
- package/dist/core/browser/politica.js.map +1 -0
- package/dist/core/browser/sesion.d.ts +52 -0
- package/dist/core/browser/sesion.d.ts.map +1 -0
- package/dist/core/browser/sesion.js +176 -0
- package/dist/core/browser/sesion.js.map +1 -0
- package/dist/core/browser/tools.d.ts +16 -0
- package/dist/core/browser/tools.d.ts.map +1 -0
- package/dist/core/browser/tools.js +279 -0
- package/dist/core/browser/tools.js.map +1 -0
- package/dist/core/commit/diff.d.ts +56 -0
- package/dist/core/commit/diff.d.ts.map +1 -0
- package/dist/core/commit/diff.js +145 -0
- package/dist/core/commit/diff.js.map +1 -0
- package/dist/core/commit/mensaje.d.ts +80 -0
- package/dist/core/commit/mensaje.d.ts.map +1 -0
- package/dist/core/commit/mensaje.js +207 -0
- package/dist/core/commit/mensaje.js.map +1 -0
- package/dist/core/compactar/index.d.ts +52 -0
- package/dist/core/compactar/index.d.ts.map +1 -0
- package/dist/core/compactar/index.js +91 -0
- package/dist/core/compactar/index.js.map +1 -0
- package/dist/core/compactar/registro-denso.d.ts +160 -0
- package/dist/core/compactar/registro-denso.d.ts.map +1 -0
- package/dist/core/compactar/registro-denso.js +620 -0
- package/dist/core/compactar/registro-denso.js.map +1 -0
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js +3 -0
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +4 -3
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +41 -32
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/computer/captura.d.ts +35 -0
- package/dist/core/computer/captura.d.ts.map +1 -0
- package/dist/core/computer/captura.js +140 -0
- package/dist/core/computer/captura.js.map +1 -0
- package/dist/core/computer/driver.d.ts +130 -0
- package/dist/core/computer/driver.d.ts.map +1 -0
- package/dist/core/computer/driver.js +206 -0
- package/dist/core/computer/driver.js.map +1 -0
- package/dist/core/computer/motor/actions.d.ts +109 -0
- package/dist/core/computer/motor/actions.d.ts.map +1 -0
- package/dist/core/computer/motor/actions.js +157 -0
- package/dist/core/computer/motor/actions.js.map +1 -0
- package/dist/core/computer/motor/bridge.d.ts +232 -0
- package/dist/core/computer/motor/bridge.d.ts.map +1 -0
- package/dist/core/computer/motor/bridge.js +2335 -0
- package/dist/core/computer/motor/bridge.js.map +1 -0
- package/dist/core/computer/motor/cdp.d.ts +107 -0
- package/dist/core/computer/motor/cdp.d.ts.map +1 -0
- package/dist/core/computer/motor/cdp.js +659 -0
- package/dist/core/computer/motor/cdp.js.map +1 -0
- package/dist/core/computer/motor/config.d.ts +23 -0
- package/dist/core/computer/motor/config.d.ts.map +1 -0
- package/dist/core/computer/motor/config.js +100 -0
- package/dist/core/computer/motor/config.js.map +1 -0
- package/dist/core/computer/motor/contract.d.ts +81 -0
- package/dist/core/computer/motor/contract.d.ts.map +1 -0
- package/dist/core/computer/motor/contract.js +14 -0
- package/dist/core/computer/motor/contract.js.map +1 -0
- package/dist/core/computer/motor/note.d.ts +37 -0
- package/dist/core/computer/motor/note.d.ts.map +1 -0
- package/dist/core/computer/motor/note.js +162 -0
- package/dist/core/computer/motor/note.js.map +1 -0
- package/dist/core/computer/motor/outline.d.ts +155 -0
- package/dist/core/computer/motor/outline.d.ts.map +1 -0
- package/dist/core/computer/motor/outline.js +590 -0
- package/dist/core/computer/motor/outline.js.map +1 -0
- package/dist/core/computer/motor/output.d.ts +18 -0
- package/dist/core/computer/motor/output.d.ts.map +1 -0
- package/dist/core/computer/motor/output.js +148 -0
- package/dist/core/computer/motor/output.js.map +1 -0
- package/dist/core/computer/motor/permissions.d.ts +41 -0
- package/dist/core/computer/motor/permissions.d.ts.map +1 -0
- package/dist/core/computer/motor/permissions.js +51 -0
- package/dist/core/computer/motor/permissions.js.map +1 -0
- package/dist/core/computer/motor/platform/architecture.d.ts +5 -0
- package/dist/core/computer/motor/platform/architecture.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/architecture.js +21 -0
- package/dist/core/computer/motor/platform/architecture.js.map +1 -0
- package/dist/core/computer/motor/platform/coerce.d.ts +4 -0
- package/dist/core/computer/motor/platform/coerce.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/coerce.js +17 -0
- package/dist/core/computer/motor/platform/coerce.js.map +1 -0
- package/dist/core/computer/motor/platform/index.d.ts +4 -0
- package/dist/core/computer/motor/platform/index.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/index.js +79 -0
- package/dist/core/computer/motor/platform/index.js.map +1 -0
- package/dist/core/computer/motor/platform/linux/backend.d.ts +3 -0
- package/dist/core/computer/motor/platform/linux/backend.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/linux/backend.js +173 -0
- package/dist/core/computer/motor/platform/linux/backend.js.map +1 -0
- package/dist/core/computer/motor/platform/linux/helper.d.ts +29 -0
- package/dist/core/computer/motor/platform/linux/helper.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/linux/helper.js +261 -0
- package/dist/core/computer/motor/platform/linux/helper.js.map +1 -0
- package/dist/core/computer/motor/platform/macos/backend.d.ts +3 -0
- package/dist/core/computer/motor/platform/macos/backend.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/macos/backend.js +124 -0
- package/dist/core/computer/motor/platform/macos/backend.js.map +1 -0
- package/dist/core/computer/motor/platform/macos/browser.d.ts +7 -0
- package/dist/core/computer/motor/platform/macos/browser.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/macos/browser.js +101 -0
- package/dist/core/computer/motor/platform/macos/browser.js.map +1 -0
- package/dist/core/computer/motor/platform/macos/helper-path.mjs +34 -0
- package/dist/core/computer/motor/platform/macos/helper.d.ts +32 -0
- package/dist/core/computer/motor/platform/macos/helper.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/macos/helper.js +277 -0
- package/dist/core/computer/motor/platform/macos/helper.js.map +1 -0
- package/dist/core/computer/motor/platform/macos/permissions.d.ts +4 -0
- package/dist/core/computer/motor/platform/macos/permissions.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/macos/permissions.js +118 -0
- package/dist/core/computer/motor/platform/macos/permissions.js.map +1 -0
- package/dist/core/computer/motor/platform/types.d.ts +263 -0
- package/dist/core/computer/motor/platform/types.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/types.js +2 -0
- package/dist/core/computer/motor/platform/types.js.map +1 -0
- package/dist/core/computer/motor/platform/windows/backend.d.ts +3 -0
- package/dist/core/computer/motor/platform/windows/backend.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/windows/backend.js +163 -0
- package/dist/core/computer/motor/platform/windows/backend.js.map +1 -0
- package/dist/core/computer/motor/platform/windows/helper.d.ts +18 -0
- package/dist/core/computer/motor/platform/windows/helper.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/windows/helper.js +174 -0
- package/dist/core/computer/motor/platform/windows/helper.js.map +1 -0
- package/dist/core/computer/motor/root-selection.d.ts +6 -0
- package/dist/core/computer/motor/root-selection.d.ts.map +1 -0
- package/dist/core/computer/motor/root-selection.js +28 -0
- package/dist/core/computer/motor/root-selection.js.map +1 -0
- package/dist/core/computer/motor/runtime.d.ts +50 -0
- package/dist/core/computer/motor/runtime.d.ts.map +1 -0
- package/dist/core/computer/motor/runtime.js +119 -0
- package/dist/core/computer/motor/runtime.js.map +1 -0
- package/dist/core/computer/motor/state.d.ts +68 -0
- package/dist/core/computer/motor/state.d.ts.map +1 -0
- package/dist/core/computer/motor/state.js +100 -0
- package/dist/core/computer/motor/state.js.map +1 -0
- package/dist/core/computer/motor/view.d.ts +6 -0
- package/dist/core/computer/motor/view.d.ts.map +1 -0
- package/dist/core/computer/motor/view.js +185 -0
- package/dist/core/computer/motor/view.js.map +1 -0
- package/dist/core/computer/motor-ada.d.ts +159 -0
- package/dist/core/computer/motor-ada.d.ts.map +1 -0
- package/dist/core/computer/motor-ada.js +412 -0
- package/dist/core/computer/motor-ada.js.map +1 -0
- package/dist/core/computer/politica.d.ts +56 -0
- package/dist/core/computer/politica.d.ts.map +1 -0
- package/dist/core/computer/politica.js +163 -0
- package/dist/core/computer/politica.js.map +1 -0
- package/dist/core/computer/tools.d.ts +26 -0
- package/dist/core/computer/tools.d.ts.map +1 -0
- package/dist/core/computer/tools.js +399 -0
- package/dist/core/computer/tools.js.map +1 -0
- package/dist/core/context-breakdown.d.ts +80 -0
- package/dist/core/context-breakdown.d.ts.map +1 -0
- package/dist/core/context-breakdown.js +87 -0
- package/dist/core/context-breakdown.js.map +1 -0
- package/dist/core/credenciales/cliente.d.ts +60 -0
- package/dist/core/credenciales/cliente.d.ts.map +1 -0
- package/dist/core/credenciales/cliente.js +81 -0
- package/dist/core/credenciales/cliente.js.map +1 -0
- package/dist/core/credenciales/pool.d.ts +96 -0
- package/dist/core/credenciales/pool.d.ts.map +1 -0
- package/dist/core/credenciales/pool.js +128 -0
- package/dist/core/credenciales/pool.js.map +1 -0
- package/dist/core/credenciales/reposo.d.ts +93 -0
- package/dist/core/credenciales/reposo.d.ts.map +1 -0
- package/dist/core/credenciales/reposo.js +489 -0
- package/dist/core/credenciales/reposo.js.map +1 -0
- package/dist/core/credenciales/servidor.d.ts +55 -0
- package/dist/core/credenciales/servidor.d.ts.map +1 -0
- package/dist/core/credenciales/servidor.js +205 -0
- package/dist/core/credenciales/servidor.js.map +1 -0
- package/dist/core/defaults.d.ts +1 -0
- package/dist/core/defaults.d.ts.map +1 -1
- package/dist/core/defaults.js +9 -0
- package/dist/core/defaults.js.map +1 -1
- package/dist/core/descubrimiento/comandos.d.ts +30 -0
- package/dist/core/descubrimiento/comandos.d.ts.map +1 -0
- package/dist/core/descubrimiento/comandos.js +76 -0
- package/dist/core/descubrimiento/comandos.js.map +1 -0
- package/dist/core/descubrimiento/mcp.d.ts +42 -0
- package/dist/core/descubrimiento/mcp.d.ts.map +1 -0
- package/dist/core/descubrimiento/mcp.js +130 -0
- package/dist/core/descubrimiento/mcp.js.map +1 -0
- package/dist/core/descubrimiento/reglas.d.ts +61 -0
- package/dist/core/descubrimiento/reglas.d.ts.map +1 -0
- package/dist/core/descubrimiento/reglas.js +134 -0
- package/dist/core/descubrimiento/reglas.js.map +1 -0
- package/dist/core/descubrimiento/skills.d.ts +57 -0
- package/dist/core/descubrimiento/skills.d.ts.map +1 -0
- package/dist/core/descubrimiento/skills.js +113 -0
- package/dist/core/descubrimiento/skills.js.map +1 -0
- package/dist/core/dificultad/clasificador.d.ts +133 -0
- package/dist/core/dificultad/clasificador.d.ts.map +1 -0
- package/dist/core/dificultad/clasificador.js +288 -0
- package/dist/core/dificultad/clasificador.js.map +1 -0
- package/dist/core/edicion/diario.d.ts +37 -0
- package/dist/core/edicion/diario.d.ts.map +1 -0
- package/dist/core/edicion/diario.js +51 -0
- package/dist/core/edicion/diario.js.map +1 -0
- package/dist/core/edicion/hashline.d.ts +71 -0
- package/dist/core/edicion/hashline.d.ts.map +1 -0
- package/dist/core/edicion/hashline.js +111 -0
- package/dist/core/edicion/hashline.js.map +1 -0
- package/dist/core/edicion/hueco.d.ts +64 -0
- package/dist/core/edicion/hueco.d.ts.map +1 -0
- package/dist/core/edicion/hueco.js +162 -0
- package/dist/core/edicion/hueco.js.map +1 -0
- package/dist/core/edicion/limpiar-carga.d.ts +39 -0
- package/dist/core/edicion/limpiar-carga.d.ts.map +1 -0
- package/dist/core/edicion/limpiar-carga.js +121 -0
- package/dist/core/edicion/limpiar-carga.js.map +1 -0
- package/dist/core/edicion/observador.d.ts +80 -0
- package/dist/core/edicion/observador.d.ts.map +1 -0
- package/dist/core/edicion/observador.js +183 -0
- package/dist/core/edicion/observador.js.map +1 -0
- package/dist/core/edicion/parecido.d.ts +53 -0
- package/dist/core/edicion/parecido.d.ts.map +1 -0
- package/dist/core/edicion/parecido.js +145 -0
- package/dist/core/edicion/parecido.js.map +1 -0
- package/dist/core/edicion/parseo.d.ts +58 -0
- package/dist/core/edicion/parseo.d.ts.map +1 -0
- package/dist/core/edicion/parseo.js +124 -0
- package/dist/core/edicion/parseo.js.map +1 -0
- package/dist/core/edicion/reparacion.d.ts +67 -0
- package/dist/core/edicion/reparacion.d.ts.map +1 -0
- package/dist/core/edicion/reparacion.js +202 -0
- package/dist/core/edicion/reparacion.js.map +1 -0
- package/dist/core/edicion/sangria.d.ts +121 -0
- package/dist/core/edicion/sangria.d.ts.map +1 -0
- package/dist/core/edicion/sangria.js +341 -0
- package/dist/core/edicion/sangria.js.map +1 -0
- package/dist/core/edicion/tipos.d.ts +58 -0
- package/dist/core/edicion/tipos.d.ts.map +1 -0
- package/dist/core/edicion/tipos.js +160 -0
- package/dist/core/edicion/tipos.js.map +1 -0
- package/dist/core/engine-personality.d.ts +12 -0
- package/dist/core/engine-personality.d.ts.map +1 -0
- package/dist/core/engine-personality.js +53 -0
- package/dist/core/engine-personality.js.map +1 -0
- package/dist/core/errores/proveedor.d.ts +53 -0
- package/dist/core/errores/proveedor.d.ts.map +1 -0
- package/dist/core/errores/proveedor.js +191 -0
- package/dist/core/errores/proveedor.js.map +1 -0
- package/dist/core/estructural/buscar.d.ts +61 -0
- package/dist/core/estructural/buscar.d.ts.map +1 -0
- package/dist/core/estructural/buscar.js +261 -0
- package/dist/core/estructural/buscar.js.map +1 -0
- package/dist/core/estructural/editar.d.ts +36 -0
- package/dist/core/estructural/editar.d.ts.map +1 -0
- package/dist/core/estructural/editar.js +123 -0
- package/dist/core/estructural/editar.js.map +1 -0
- package/dist/core/estructural/tools.d.ts +11 -0
- package/dist/core/estructural/tools.d.ts.map +1 -0
- package/dist/core/estructural/tools.js +100 -0
- package/dist/core/estructural/tools.js.map +1 -0
- package/dist/core/experimental.d.ts.map +1 -1
- package/dist/core/experimental.js +10 -1
- package/dist/core/experimental.js.map +1 -1
- package/dist/core/extensiones/suplantacion.d.ts +49 -0
- package/dist/core/extensiones/suplantacion.d.ts.map +1 -0
- package/dist/core/extensiones/suplantacion.js +61 -0
- package/dist/core/extensiones/suplantacion.js.map +1 -0
- package/dist/core/extensiones/vigilancia.d.ts +54 -0
- package/dist/core/extensiones/vigilancia.d.ts.map +1 -0
- package/dist/core/extensiones/vigilancia.js +217 -0
- package/dist/core/extensiones/vigilancia.js.map +1 -0
- package/dist/core/extensions/index.d.ts +1 -1
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +21 -6
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/types.d.ts +23 -4
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/harness/fuentes-de-contexto.d.ts +29 -0
- package/dist/core/harness/fuentes-de-contexto.d.ts.map +1 -0
- package/dist/core/harness/fuentes-de-contexto.js +44 -0
- package/dist/core/harness/fuentes-de-contexto.js.map +1 -0
- package/dist/core/harness/refine.d.ts +40 -0
- package/dist/core/harness/refine.d.ts.map +1 -0
- package/dist/core/harness/refine.js +109 -0
- package/dist/core/harness/refine.js.map +1 -0
- package/dist/core/harness/store.d.ts +75 -0
- package/dist/core/harness/store.d.ts.map +1 -0
- package/dist/core/harness/store.js +149 -0
- package/dist/core/harness/store.js.map +1 -0
- package/dist/core/hooks/contract.d.ts +85 -0
- package/dist/core/hooks/contract.d.ts.map +1 -0
- package/dist/core/hooks/contract.js +140 -0
- package/dist/core/hooks/contract.js.map +1 -0
- package/dist/core/hooks/runner.d.ts +42 -0
- package/dist/core/hooks/runner.d.ts.map +1 -0
- package/dist/core/hooks/runner.js +85 -0
- package/dist/core/hooks/runner.js.map +1 -0
- package/dist/core/hooks/session-hooks.d.ts +62 -0
- package/dist/core/hooks/session-hooks.d.ts.map +1 -0
- package/dist/core/hooks/session-hooks.js +84 -0
- package/dist/core/hooks/session-hooks.js.map +1 -0
- package/dist/core/importar/formatos.d.ts +69 -0
- package/dist/core/importar/formatos.d.ts.map +1 -0
- package/dist/core/importar/formatos.js +235 -0
- package/dist/core/importar/formatos.js.map +1 -0
- package/dist/core/interactivo/deteccion.d.ts +44 -0
- package/dist/core/interactivo/deteccion.d.ts.map +1 -0
- package/dist/core/interactivo/deteccion.js +82 -0
- package/dist/core/interactivo/deteccion.js.map +1 -0
- package/dist/core/interactivo/sesion.d.ts +50 -0
- package/dist/core/interactivo/sesion.d.ts.map +1 -0
- package/dist/core/interactivo/sesion.js +156 -0
- package/dist/core/interactivo/sesion.js.map +1 -0
- package/dist/core/interactivo/tools.d.ts +21 -0
- package/dist/core/interactivo/tools.d.ts.map +1 -0
- package/dist/core/interactivo/tools.js +122 -0
- package/dist/core/interactivo/tools.js.map +1 -0
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +2 -1
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/lectura/mapa.d.ts +70 -0
- package/dist/core/lectura/mapa.d.ts.map +1 -0
- package/dist/core/lectura/mapa.js +177 -0
- package/dist/core/lectura/mapa.js.map +1 -0
- package/dist/core/lectura/pdf.d.ts +49 -0
- package/dist/core/lectura/pdf.d.ts.map +1 -0
- package/dist/core/lectura/pdf.js +337 -0
- package/dist/core/lectura/pdf.js.map +1 -0
- package/dist/core/limpieza/comprobadores.d.ts +28 -0
- package/dist/core/limpieza/comprobadores.d.ts.map +1 -0
- package/dist/core/limpieza/comprobadores.js +311 -0
- package/dist/core/limpieza/comprobadores.js.map +1 -0
- package/dist/core/limpieza/parseo.d.ts +19 -0
- package/dist/core/limpieza/parseo.d.ts.map +1 -0
- package/dist/core/limpieza/parseo.js +124 -0
- package/dist/core/limpieza/parseo.js.map +1 -0
- package/dist/core/limpieza/reparacion.d.ts +77 -0
- package/dist/core/limpieza/reparacion.d.ts.map +1 -0
- package/dist/core/limpieza/reparacion.js +254 -0
- package/dist/core/limpieza/reparacion.js.map +1 -0
- package/dist/core/limpieza/tipos.d.ts +56 -0
- package/dist/core/limpieza/tipos.d.ts.map +1 -0
- package/dist/core/limpieza/tipos.js +9 -0
- package/dist/core/limpieza/tipos.js.map +1 -0
- package/dist/core/lsp/cliente.d.ts +52 -0
- package/dist/core/lsp/cliente.d.ts.map +1 -0
- package/dist/core/lsp/cliente.js +232 -0
- package/dist/core/lsp/cliente.js.map +1 -0
- package/dist/core/lsp/descubrimiento.d.ts +62 -0
- package/dist/core/lsp/descubrimiento.d.ts.map +1 -0
- package/dist/core/lsp/descubrimiento.js +152 -0
- package/dist/core/lsp/descubrimiento.js.map +1 -0
- package/dist/core/lsp/ediciones.d.ts +59 -0
- package/dist/core/lsp/ediciones.d.ts.map +1 -0
- package/dist/core/lsp/ediciones.js +89 -0
- package/dist/core/lsp/ediciones.js.map +1 -0
- package/dist/core/lsp/extension.d.ts +28 -0
- package/dist/core/lsp/extension.d.ts.map +1 -0
- package/dist/core/lsp/extension.js +34 -0
- package/dist/core/lsp/extension.js.map +1 -0
- package/dist/core/lsp/tools.d.ts +45 -0
- package/dist/core/lsp/tools.d.ts.map +1 -0
- package/dist/core/lsp/tools.js +265 -0
- package/dist/core/lsp/tools.js.map +1 -0
- package/dist/core/mcp/client.d.ts +60 -0
- package/dist/core/mcp/client.d.ts.map +1 -0
- package/dist/core/mcp/client.js +139 -0
- package/dist/core/mcp/client.js.map +1 -0
- package/dist/core/mcp/manager.d.ts +86 -0
- package/dist/core/mcp/manager.d.ts.map +1 -0
- package/dist/core/mcp/manager.js +124 -0
- package/dist/core/mcp/manager.js.map +1 -0
- package/dist/core/mcp/tools.d.ts +15 -0
- package/dist/core/mcp/tools.d.ts.map +1 -0
- package/dist/core/mcp/tools.js +84 -0
- package/dist/core/mcp/tools.js.map +1 -0
- package/dist/core/memory-engine/audit-export.d.ts +56 -0
- package/dist/core/memory-engine/audit-export.d.ts.map +1 -0
- package/dist/core/memory-engine/audit-export.js +100 -0
- package/dist/core/memory-engine/audit-export.js.map +1 -0
- package/dist/core/memory-engine/audit-indice.d.ts +153 -0
- package/dist/core/memory-engine/audit-indice.d.ts.map +1 -0
- package/dist/core/memory-engine/audit-indice.js +271 -0
- package/dist/core/memory-engine/audit-indice.js.map +1 -0
- package/dist/core/memory-engine/audit.d.ts +18 -6
- package/dist/core/memory-engine/audit.d.ts.map +1 -1
- package/dist/core/memory-engine/audit.js +32 -50
- package/dist/core/memory-engine/audit.js.map +1 -1
- package/dist/core/memory-engine/engine.d.ts +21 -4
- package/dist/core/memory-engine/engine.d.ts.map +1 -1
- package/dist/core/memory-engine/engine.js +219 -55
- package/dist/core/memory-engine/engine.js.map +1 -1
- package/dist/core/memory-engine/inverted-index.d.ts.map +1 -1
- package/dist/core/memory-engine/inverted-index.js +67 -10
- package/dist/core/memory-engine/inverted-index.js.map +1 -1
- package/dist/core/memory-engine/keychain.d.ts.map +1 -1
- package/dist/core/memory-engine/keychain.js +1 -6
- package/dist/core/memory-engine/keychain.js.map +1 -1
- package/dist/core/memory-engine/observation-store.d.ts +0 -1
- package/dist/core/memory-engine/observation-store.d.ts.map +1 -1
- package/dist/core/memory-engine/observation-store.js +40 -12
- package/dist/core/memory-engine/observation-store.js.map +1 -1
- package/dist/core/memory-engine/refinements.d.ts +51 -0
- package/dist/core/memory-engine/refinements.d.ts.map +1 -0
- package/dist/core/memory-engine/refinements.js +99 -0
- package/dist/core/memory-engine/refinements.js.map +1 -0
- package/dist/core/memory-engine/scanner.d.ts.map +1 -1
- package/dist/core/memory-engine/scanner.js +25 -5
- package/dist/core/memory-engine/scanner.js.map +1 -1
- package/dist/core/memory-engine/security.d.ts.map +1 -1
- package/dist/core/memory-engine/security.js +131 -23
- package/dist/core/memory-engine/security.js.map +1 -1
- package/dist/core/memory-engine/session-indexer.d.ts.map +1 -1
- package/dist/core/memory-engine/session-indexer.js +8 -2
- package/dist/core/memory-engine/session-indexer.js.map +1 -1
- package/dist/core/memory-engine/tools.d.ts +2 -2
- package/dist/core/memory-engine/tools.d.ts.map +1 -1
- package/dist/core/memory-engine/tools.js +41 -8
- package/dist/core/memory-engine/tools.js.map +1 -1
- package/dist/core/memory-engine/types.d.ts +2 -0
- package/dist/core/memory-engine/types.d.ts.map +1 -1
- package/dist/core/memory-engine/types.js.map +1 -1
- package/dist/core/memory-engine/vault.d.ts.map +1 -1
- package/dist/core/memory-engine/vault.js +2 -2
- package/dist/core/memory-engine/vault.js.map +1 -1
- package/dist/core/model-config.d.ts.map +1 -1
- package/dist/core/model-config.js +2 -1
- package/dist/core/model-config.js.map +1 -1
- package/dist/core/model-resolver.d.ts +1 -0
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +19 -7
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/models-store.d.ts.map +1 -1
- package/dist/core/models-store.js +2 -1
- package/dist/core/models-store.js.map +1 -1
- package/dist/core/muestreo-restringido.d.ts +49 -0
- package/dist/core/muestreo-restringido.d.ts.map +1 -0
- package/dist/core/muestreo-restringido.js +65 -0
- package/dist/core/muestreo-restringido.js.map +1 -0
- package/dist/core/orphan-process-journal.d.ts +48 -0
- package/dist/core/orphan-process-journal.d.ts.map +1 -0
- package/dist/core/orphan-process-journal.js +116 -0
- package/dist/core/orphan-process-journal.js.map +1 -0
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +11 -6
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/pi-manifest.d.ts.map +1 -1
- package/dist/core/pi-manifest.js +2 -1
- package/dist/core/pi-manifest.js.map +1 -1
- package/dist/core/privacidad/categorias-especiales.d.ts +186 -0
- package/dist/core/privacidad/categorias-especiales.d.ts.map +1 -0
- package/dist/core/privacidad/categorias-especiales.js +745 -0
- package/dist/core/privacidad/categorias-especiales.js.map +1 -0
- package/dist/core/privacidad/tapar.d.ts +48 -0
- package/dist/core/privacidad/tapar.d.ts.map +1 -0
- package/dist/core/privacidad/tapar.js +66 -0
- package/dist/core/privacidad/tapar.js.map +1 -0
- package/dist/core/prompt-cache/diagnostics.d.ts +33 -0
- package/dist/core/prompt-cache/diagnostics.d.ts.map +1 -0
- package/dist/core/prompt-cache/diagnostics.js +100 -0
- package/dist/core/prompt-cache/diagnostics.js.map +1 -0
- package/dist/core/prompt-cache/index.d.ts +33 -0
- package/dist/core/prompt-cache/index.d.ts.map +1 -0
- package/dist/core/prompt-cache/index.js +189 -0
- package/dist/core/prompt-cache/index.js.map +1 -0
- package/dist/core/prompt-cache/payload.d.ts +58 -0
- package/dist/core/prompt-cache/payload.d.ts.map +1 -0
- package/dist/core/prompt-cache/payload.js +122 -0
- package/dist/core/prompt-cache/payload.js.map +1 -0
- package/dist/core/prompt-cache/stabilize.d.ts +65 -0
- package/dist/core/prompt-cache/stabilize.d.ts.map +1 -0
- package/dist/core/prompt-cache/stabilize.js +137 -0
- package/dist/core/prompt-cache/stabilize.js.map +1 -0
- package/dist/core/prompt-cache/stats.d.ts +55 -0
- package/dist/core/prompt-cache/stats.d.ts.map +1 -0
- package/dist/core/prompt-cache/stats.js +158 -0
- package/dist/core/prompt-cache/stats.js.map +1 -0
- package/dist/core/prompt-eleccion.d.ts +38 -0
- package/dist/core/prompt-eleccion.d.ts.map +1 -0
- package/dist/core/prompt-eleccion.js +46 -0
- package/dist/core/prompt-eleccion.js.map +1 -0
- package/dist/core/prompt-optimizer.d.ts +53 -0
- package/dist/core/prompt-optimizer.d.ts.map +1 -0
- package/dist/core/prompt-optimizer.js +138 -0
- package/dist/core/prompt-optimizer.js.map +1 -0
- package/dist/core/prompts/montar.d.ts +75 -0
- package/dist/core/prompts/montar.d.ts.map +1 -0
- package/dist/core/prompts/montar.js +146 -0
- package/dist/core/prompts/montar.js.map +1 -0
- package/dist/core/prompts/plantilla.d.ts +54 -0
- package/dist/core/prompts/plantilla.d.ts.map +1 -0
- package/dist/core/prompts/plantilla.js +153 -0
- package/dist/core/prompts/plantilla.js.map +1 -0
- package/dist/core/prompts/sistema.md +134 -0
- package/dist/core/provider-attribution.d.ts +24 -2
- package/dist/core/provider-attribution.d.ts.map +1 -1
- package/dist/core/provider-attribution.js +24 -42
- package/dist/core/provider-attribution.js.map +1 -1
- package/dist/core/remote-catalog-provider.d.ts.map +1 -1
- package/dist/core/remote-catalog-provider.js +2 -1
- package/dist/core/remote-catalog-provider.js.map +1 -1
- package/dist/core/remoto/destino.d.ts +38 -0
- package/dist/core/remoto/destino.d.ts.map +1 -0
- package/dist/core/remoto/destino.js +105 -0
- package/dist/core/remoto/destino.js.map +1 -0
- package/dist/core/remoto/ejecutor.d.ts +59 -0
- package/dist/core/remoto/ejecutor.d.ts.map +1 -0
- package/dist/core/remoto/ejecutor.js +225 -0
- package/dist/core/remoto/ejecutor.js.map +1 -0
- package/dist/core/remoto/ficheros.d.ts +29 -0
- package/dist/core/remoto/ficheros.d.ts.map +1 -0
- package/dist/core/remoto/ficheros.js +90 -0
- package/dist/core/remoto/ficheros.js.map +1 -0
- package/dist/core/remoto/registro-extension.d.ts +15 -0
- package/dist/core/remoto/registro-extension.d.ts.map +1 -0
- package/dist/core/remoto/registro-extension.js +17 -0
- package/dist/core/remoto/registro-extension.js.map +1 -0
- package/dist/core/remoto/tools.d.ts +28 -0
- package/dist/core/remoto/tools.d.ts.map +1 -0
- package/dist/core/remoto/tools.js +31 -0
- package/dist/core/remoto/tools.js.map +1 -0
- package/dist/core/resource-loader.d.ts +58 -0
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +326 -8
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/revision/hallazgo.d.ts +51 -0
- package/dist/core/revision/hallazgo.d.ts.map +1 -0
- package/dist/core/revision/hallazgo.js +73 -0
- package/dist/core/revision/hallazgo.js.map +1 -0
- package/dist/core/revision/revisor.d.ts +81 -0
- package/dist/core/revision/revisor.d.ts.map +1 -0
- package/dist/core/revision/revisor.js +132 -0
- package/dist/core/revision/revisor.js.map +1 -0
- package/dist/core/revision/sarif.d.ts +30 -0
- package/dist/core/revision/sarif.d.ts.map +1 -0
- package/dist/core/revision/sarif.js +83 -0
- package/dist/core/revision/sarif.js.map +1 -0
- package/dist/core/scheduler/scheduler.d.ts +87 -0
- package/dist/core/scheduler/scheduler.d.ts.map +1 -0
- package/dist/core/scheduler/scheduler.js +178 -0
- package/dist/core/scheduler/scheduler.js.map +1 -0
- package/dist/core/sdk.d.ts +8 -0
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +11 -1
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts +49 -0
- package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts.map +1 -0
- package/dist/core/sesion/cerrar-llamadas-abiertas.js +77 -0
- package/dist/core/sesion/cerrar-llamadas-abiertas.js.map +1 -0
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +2 -1
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-diagnostics.d.ts +9 -0
- package/dist/core/settings-diagnostics.d.ts.map +1 -0
- package/dist/core/settings-diagnostics.js +21 -0
- package/dist/core/settings-diagnostics.js.map +1 -0
- package/dist/core/settings-manager.d.ts +156 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +255 -10
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +51 -33
- package/dist/core/skills.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +2 -1
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/system-prompt.d.ts +17 -0
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +13 -5
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/telemetria/otlp.d.ts +122 -0
- package/dist/core/telemetria/otlp.d.ts.map +1 -0
- package/dist/core/telemetria/otlp.js +373 -0
- package/dist/core/telemetria/otlp.js.map +1 -0
- package/dist/core/tools/coercion-argumentos.d.ts +48 -0
- package/dist/core/tools/coercion-argumentos.d.ts.map +1 -0
- package/dist/core/tools/coercion-argumentos.js +99 -0
- package/dist/core/tools/coercion-argumentos.js.map +1 -0
- package/dist/core/tools/edit-diff.d.ts +0 -12
- package/dist/core/tools/edit-diff.d.ts.map +1 -1
- package/dist/core/tools/edit-diff.js +234 -12
- package/dist/core/tools/edit-diff.js.map +1 -1
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +28 -5
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
- package/dist/core/tools/file-mutation-queue.js +5 -0
- package/dist/core/tools/file-mutation-queue.js.map +1 -1
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +2 -2
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/json-tolerante.d.ts +30 -0
- package/dist/core/tools/json-tolerante.d.ts.map +1 -0
- package/dist/core/tools/json-tolerante.js +70 -0
- package/dist/core/tools/json-tolerante.js.map +1 -0
- package/dist/core/tools/project-memory-tool.d.ts.map +1 -1
- package/dist/core/tools/project-memory-tool.js +4 -1
- package/dist/core/tools/project-memory-tool.js.map +1 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +17 -0
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts +14 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.js +17 -1
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
- package/dist/core/trust-manager.d.ts.map +1 -1
- package/dist/core/trust-manager.js +2 -1
- package/dist/core/trust-manager.js.map +1 -1
- package/dist/core/turno-vacio/detectar.d.ts +38 -0
- package/dist/core/turno-vacio/detectar.d.ts.map +1 -0
- package/dist/core/turno-vacio/detectar.js +66 -0
- package/dist/core/turno-vacio/detectar.js.map +1 -0
- package/dist/core/undo/journal.d.ts +57 -0
- package/dist/core/undo/journal.d.ts.map +1 -0
- package/dist/core/undo/journal.js +178 -0
- package/dist/core/undo/journal.js.map +1 -0
- package/dist/core/urls-internas/auditoria.d.ts +10 -0
- package/dist/core/urls-internas/auditoria.d.ts.map +1 -0
- package/dist/core/urls-internas/auditoria.js +42 -0
- package/dist/core/urls-internas/auditoria.js.map +1 -0
- package/dist/core/urls-internas/boveda.d.ts +13 -0
- package/dist/core/urls-internas/boveda.d.ts.map +1 -0
- package/dist/core/urls-internas/boveda.js +40 -0
- package/dist/core/urls-internas/boveda.js.map +1 -0
- package/dist/core/urls-internas/lector.d.ts +30 -0
- package/dist/core/urls-internas/lector.d.ts.map +1 -0
- package/dist/core/urls-internas/lector.js +56 -0
- package/dist/core/urls-internas/lector.js.map +1 -0
- package/dist/core/urls-internas/memoria.d.ts +11 -0
- package/dist/core/urls-internas/memoria.d.ts.map +1 -0
- package/dist/core/urls-internas/memoria.js +25 -0
- package/dist/core/urls-internas/memoria.js.map +1 -0
- package/dist/core/urls-internas/parse.d.ts +28 -0
- package/dist/core/urls-internas/parse.d.ts.map +1 -0
- package/dist/core/urls-internas/parse.js +32 -0
- package/dist/core/urls-internas/parse.js.map +1 -0
- package/dist/core/urls-internas/reglas.d.ts +10 -0
- package/dist/core/urls-internas/reglas.d.ts.map +1 -0
- package/dist/core/urls-internas/reglas.js +31 -0
- package/dist/core/urls-internas/reglas.js.map +1 -0
- package/dist/core/usage/aggregate.d.ts +68 -0
- package/dist/core/usage/aggregate.d.ts.map +1 -0
- package/dist/core/usage/aggregate.js +93 -0
- package/dist/core/usage/aggregate.js.map +1 -0
- package/dist/core/usage/cuota/anthropic.d.ts +10 -0
- package/dist/core/usage/cuota/anthropic.d.ts.map +1 -0
- package/dist/core/usage/cuota/anthropic.js +63 -0
- package/dist/core/usage/cuota/anthropic.js.map +1 -0
- package/dist/core/usage/cuota/cache.d.ts +20 -0
- package/dist/core/usage/cuota/cache.d.ts.map +1 -0
- package/dist/core/usage/cuota/cache.js +36 -0
- package/dist/core/usage/cuota/cache.js.map +1 -0
- package/dist/core/usage/cuota/github-copilot.d.ts +9 -0
- package/dist/core/usage/cuota/github-copilot.d.ts.map +1 -0
- package/dist/core/usage/cuota/github-copilot.js +67 -0
- package/dist/core/usage/cuota/github-copilot.js.map +1 -0
- package/dist/core/usage/cuota/google-gemini.d.ts +9 -0
- package/dist/core/usage/cuota/google-gemini.d.ts.map +1 -0
- package/dist/core/usage/cuota/google-gemini.js +72 -0
- package/dist/core/usage/cuota/google-gemini.js.map +1 -0
- package/dist/core/usage/cuota/index.d.ts +25 -0
- package/dist/core/usage/cuota/index.d.ts.map +1 -0
- package/dist/core/usage/cuota/index.js +50 -0
- package/dist/core/usage/cuota/index.js.map +1 -0
- package/dist/core/usage/cuota/openai-codex.d.ts +9 -0
- package/dist/core/usage/cuota/openai-codex.d.ts.map +1 -0
- package/dist/core/usage/cuota/openai-codex.js +59 -0
- package/dist/core/usage/cuota/openai-codex.js.map +1 -0
- package/dist/core/usage/cuota/openrouter.d.ts +10 -0
- package/dist/core/usage/cuota/openrouter.d.ts.map +1 -0
- package/dist/core/usage/cuota/openrouter.js +47 -0
- package/dist/core/usage/cuota/openrouter.js.map +1 -0
- package/dist/core/usage/cuota/tipos.d.ts +50 -0
- package/dist/core/usage/cuota/tipos.d.ts.map +1 -0
- package/dist/core/usage/cuota/tipos.js +25 -0
- package/dist/core/usage/cuota/tipos.js.map +1 -0
- package/dist/core/web/busqueda-nativa.d.ts +82 -0
- package/dist/core/web/busqueda-nativa.d.ts.map +1 -0
- package/dist/core/web/busqueda-nativa.js +163 -0
- package/dist/core/web/busqueda-nativa.js.map +1 -0
- package/dist/core/web/destino.d.ts +58 -0
- package/dist/core/web/destino.d.ts.map +1 -0
- package/dist/core/web/destino.js +127 -0
- package/dist/core/web/destino.js.map +1 -0
- package/dist/core/web/proveedores/brave.d.ts +6 -0
- package/dist/core/web/proveedores/brave.d.ts.map +1 -0
- package/dist/core/web/proveedores/brave.js +20 -0
- package/dist/core/web/proveedores/brave.js.map +1 -0
- package/dist/core/web/proveedores/claves.d.ts +19 -0
- package/dist/core/web/proveedores/claves.d.ts.map +1 -0
- package/dist/core/web/proveedores/claves.js +36 -0
- package/dist/core/web/proveedores/claves.js.map +1 -0
- package/dist/core/web/proveedores/duckduckgo.d.ts +3 -0
- package/dist/core/web/proveedores/duckduckgo.d.ts.map +1 -0
- package/dist/core/web/proveedores/duckduckgo.js +109 -0
- package/dist/core/web/proveedores/duckduckgo.js.map +1 -0
- package/dist/core/web/proveedores/ecosia.d.ts +3 -0
- package/dist/core/web/proveedores/ecosia.d.ts.map +1 -0
- package/dist/core/web/proveedores/ecosia.js +72 -0
- package/dist/core/web/proveedores/ecosia.js.map +1 -0
- package/dist/core/web/proveedores/exa.d.ts +6 -0
- package/dist/core/web/proveedores/exa.d.ts.map +1 -0
- package/dist/core/web/proveedores/exa.js +24 -0
- package/dist/core/web/proveedores/exa.js.map +1 -0
- package/dist/core/web/proveedores/mojeek.d.ts +3 -0
- package/dist/core/web/proveedores/mojeek.d.ts.map +1 -0
- package/dist/core/web/proveedores/mojeek.js +65 -0
- package/dist/core/web/proveedores/mojeek.js.map +1 -0
- package/dist/core/web/proveedores/navegador.d.ts +10 -0
- package/dist/core/web/proveedores/navegador.d.ts.map +1 -0
- package/dist/core/web/proveedores/navegador.js +13 -0
- package/dist/core/web/proveedores/navegador.js.map +1 -0
- package/dist/core/web/proveedores/registro.d.ts +43 -0
- package/dist/core/web/proveedores/registro.d.ts.map +1 -0
- package/dist/core/web/proveedores/registro.js +49 -0
- package/dist/core/web/proveedores/registro.js.map +1 -0
- package/dist/core/web/proveedores/searxng.d.ts +9 -0
- package/dist/core/web/proveedores/searxng.d.ts.map +1 -0
- package/dist/core/web/proveedores/searxng.js +17 -0
- package/dist/core/web/proveedores/searxng.js.map +1 -0
- package/dist/core/web/proveedores/serper.d.ts +9 -0
- package/dist/core/web/proveedores/serper.d.ts.map +1 -0
- package/dist/core/web/proveedores/serper.js +19 -0
- package/dist/core/web/proveedores/serper.js.map +1 -0
- package/dist/core/web/proveedores/tavily.d.ts +6 -0
- package/dist/core/web/proveedores/tavily.d.ts.map +1 -0
- package/dist/core/web/proveedores/tavily.js +19 -0
- package/dist/core/web/proveedores/tavily.js.map +1 -0
- package/dist/core/web/proveedores/tipos.d.ts +36 -0
- package/dist/core/web/proveedores/tipos.d.ts.map +1 -0
- package/dist/core/web/proveedores/tipos.js +10 -0
- package/dist/core/web/proveedores/tipos.js.map +1 -0
- package/dist/core/web/registro-red.d.ts +43 -0
- package/dist/core/web/registro-red.d.ts.map +1 -0
- package/dist/core/web/registro-red.js +86 -0
- package/dist/core/web/registro-red.js.map +1 -0
- package/dist/core/web/scrapers/cisa-kev.d.ts +10 -0
- package/dist/core/web/scrapers/cisa-kev.d.ts.map +1 -0
- package/dist/core/web/scrapers/cisa-kev.js +38 -0
- package/dist/core/web/scrapers/cisa-kev.js.map +1 -0
- package/dist/core/web/scrapers/crates-io.d.ts +11 -0
- package/dist/core/web/scrapers/crates-io.d.ts.map +1 -0
- package/dist/core/web/scrapers/crates-io.js +29 -0
- package/dist/core/web/scrapers/crates-io.js.map +1 -0
- package/dist/core/web/scrapers/docs-rs.d.ts +10 -0
- package/dist/core/web/scrapers/docs-rs.d.ts.map +1 -0
- package/dist/core/web/scrapers/docs-rs.js +35 -0
- package/dist/core/web/scrapers/docs-rs.js.map +1 -0
- package/dist/core/web/scrapers/github.d.ts +3 -0
- package/dist/core/web/scrapers/github.d.ts.map +1 -0
- package/dist/core/web/scrapers/github.js +72 -0
- package/dist/core/web/scrapers/github.js.map +1 -0
- package/dist/core/web/scrapers/go-pkg.d.ts +7 -0
- package/dist/core/web/scrapers/go-pkg.d.ts.map +1 -0
- package/dist/core/web/scrapers/go-pkg.js +30 -0
- package/dist/core/web/scrapers/go-pkg.js.map +1 -0
- package/dist/core/web/scrapers/hex.d.ts +6 -0
- package/dist/core/web/scrapers/hex.d.ts.map +1 -0
- package/dist/core/web/scrapers/hex.js +27 -0
- package/dist/core/web/scrapers/hex.js.map +1 -0
- package/dist/core/web/scrapers/maven.d.ts +8 -0
- package/dist/core/web/scrapers/maven.d.ts.map +1 -0
- package/dist/core/web/scrapers/maven.js +41 -0
- package/dist/core/web/scrapers/maven.js.map +1 -0
- package/dist/core/web/scrapers/mdn.d.ts +6 -0
- package/dist/core/web/scrapers/mdn.d.ts.map +1 -0
- package/dist/core/web/scrapers/mdn.js +28 -0
- package/dist/core/web/scrapers/mdn.js.map +1 -0
- package/dist/core/web/scrapers/npm.d.ts +11 -0
- package/dist/core/web/scrapers/npm.d.ts.map +1 -0
- package/dist/core/web/scrapers/npm.js +57 -0
- package/dist/core/web/scrapers/npm.js.map +1 -0
- package/dist/core/web/scrapers/nuget.d.ts +8 -0
- package/dist/core/web/scrapers/nuget.d.ts.map +1 -0
- package/dist/core/web/scrapers/nuget.js +22 -0
- package/dist/core/web/scrapers/nuget.js.map +1 -0
- package/dist/core/web/scrapers/nvd.d.ts +7 -0
- package/dist/core/web/scrapers/nvd.d.ts.map +1 -0
- package/dist/core/web/scrapers/nvd.js +37 -0
- package/dist/core/web/scrapers/nvd.js.map +1 -0
- package/dist/core/web/scrapers/pypi.d.ts +6 -0
- package/dist/core/web/scrapers/pypi.d.ts.map +1 -0
- package/dist/core/web/scrapers/pypi.js +31 -0
- package/dist/core/web/scrapers/pypi.js.map +1 -0
- package/dist/core/web/scrapers/registro.d.ts +13 -0
- package/dist/core/web/scrapers/registro.d.ts.map +1 -0
- package/dist/core/web/scrapers/registro.js +65 -0
- package/dist/core/web/scrapers/registro.js.map +1 -0
- package/dist/core/web/scrapers/rubygems.d.ts +6 -0
- package/dist/core/web/scrapers/rubygems.d.ts.map +1 -0
- package/dist/core/web/scrapers/rubygems.js +23 -0
- package/dist/core/web/scrapers/rubygems.js.map +1 -0
- package/dist/core/web/scrapers/stackoverflow.d.ts +3 -0
- package/dist/core/web/scrapers/stackoverflow.d.ts.map +1 -0
- package/dist/core/web/scrapers/stackoverflow.js +46 -0
- package/dist/core/web/scrapers/stackoverflow.js.map +1 -0
- package/dist/core/web/scrapers/tipos.d.ts +42 -0
- package/dist/core/web/scrapers/tipos.d.ts.map +1 -0
- package/dist/core/web/scrapers/tipos.js +23 -0
- package/dist/core/web/scrapers/tipos.js.map +1 -0
- package/dist/core/web/texto.d.ts +10 -0
- package/dist/core/web/texto.d.ts.map +1 -0
- package/dist/core/web/texto.js +26 -0
- package/dist/core/web/texto.js.map +1 -0
- package/dist/core/web/tools.d.ts +91 -0
- package/dist/core/web/tools.d.ts.map +1 -0
- package/dist/core/web/tools.js +304 -0
- package/dist/core/web/tools.js.map +1 -0
- package/dist/core/wiki/almacen.d.ts +33 -0
- package/dist/core/wiki/almacen.d.ts.map +1 -0
- package/dist/core/wiki/almacen.js +93 -0
- package/dist/core/wiki/almacen.js.map +1 -0
- package/dist/core/wiki/citas.d.ts +111 -0
- package/dist/core/wiki/citas.d.ts.map +1 -0
- package/dist/core/wiki/citas.js +146 -0
- package/dist/core/wiki/citas.js.map +1 -0
- package/dist/core/workflows/agent-runner.d.ts +88 -0
- package/dist/core/workflows/agent-runner.d.ts.map +1 -0
- package/dist/core/workflows/agent-runner.js +312 -0
- package/dist/core/workflows/agent-runner.js.map +1 -0
- package/dist/core/workflows/builtins.d.ts +41 -0
- package/dist/core/workflows/builtins.d.ts.map +1 -0
- package/dist/core/workflows/builtins.js +283 -0
- package/dist/core/workflows/builtins.js.map +1 -0
- package/dist/core/workflows/contrato/esquema.d.ts +32 -0
- package/dist/core/workflows/contrato/esquema.d.ts.map +1 -0
- package/dist/core/workflows/contrato/esquema.js +25 -0
- package/dist/core/workflows/contrato/esquema.js.map +1 -0
- package/dist/core/workflows/contrato/reparar-argumentos.d.ts +69 -0
- package/dist/core/workflows/contrato/reparar-argumentos.d.ts.map +1 -0
- package/dist/core/workflows/contrato/reparar-argumentos.js +117 -0
- package/dist/core/workflows/contrato/reparar-argumentos.js.map +1 -0
- package/dist/core/workflows/contrato/validador.d.ts +30 -0
- package/dist/core/workflows/contrato/validador.d.ts.map +1 -0
- package/dist/core/workflows/contrato/validador.js +56 -0
- package/dist/core/workflows/contrato/validador.js.map +1 -0
- package/dist/core/workflows/contrato/yield.d.ts +65 -0
- package/dist/core/workflows/contrato/yield.d.ts.map +1 -0
- package/dist/core/workflows/contrato/yield.js +80 -0
- package/dist/core/workflows/contrato/yield.js.map +1 -0
- package/dist/core/workflows/goal-engine/engine.d.ts +151 -0
- package/dist/core/workflows/goal-engine/engine.d.ts.map +1 -0
- package/dist/core/workflows/goal-engine/engine.js +503 -0
- package/dist/core/workflows/goal-engine/engine.js.map +1 -0
- package/dist/core/workflows/goal-engine/errors.d.ts +7 -0
- package/dist/core/workflows/goal-engine/errors.d.ts.map +1 -0
- package/dist/core/workflows/goal-engine/errors.js +9 -0
- package/dist/core/workflows/goal-engine/errors.js.map +1 -0
- package/dist/core/workflows/goal-engine/index.d.ts +13 -0
- package/dist/core/workflows/goal-engine/index.d.ts.map +1 -0
- package/dist/core/workflows/goal-engine/index.js +8 -0
- package/dist/core/workflows/goal-engine/index.js.map +1 -0
- package/dist/core/workflows/goal-engine/persistence.d.ts +31 -0
- package/dist/core/workflows/goal-engine/persistence.d.ts.map +1 -0
- package/dist/core/workflows/goal-engine/persistence.js +145 -0
- package/dist/core/workflows/goal-engine/persistence.js.map +1 -0
- package/dist/core/workflows/goal-engine/prompts.d.ts +37 -0
- package/dist/core/workflows/goal-engine/prompts.d.ts.map +1 -0
- package/dist/core/workflows/goal-engine/prompts.js +131 -0
- package/dist/core/workflows/goal-engine/prompts.js.map +1 -0
- package/dist/core/workflows/goal-engine/state.d.ts +41 -0
- package/dist/core/workflows/goal-engine/state.d.ts.map +1 -0
- package/dist/core/workflows/goal-engine/state.js +397 -0
- package/dist/core/workflows/goal-engine/state.js.map +1 -0
- package/dist/core/workflows/goal-engine/tools.d.ts +31 -0
- package/dist/core/workflows/goal-engine/tools.d.ts.map +1 -0
- package/dist/core/workflows/goal-engine/tools.js +211 -0
- package/dist/core/workflows/goal-engine/tools.js.map +1 -0
- package/dist/core/workflows/goal-engine/types.d.ts +286 -0
- package/dist/core/workflows/goal-engine/types.d.ts.map +1 -0
- package/dist/core/workflows/goal-engine/types.js +17 -0
- package/dist/core/workflows/goal-engine/types.js.map +1 -0
- package/dist/core/workflows/goal-engine/worktree-fingerprint.d.ts +23 -0
- package/dist/core/workflows/goal-engine/worktree-fingerprint.d.ts.map +1 -0
- package/dist/core/workflows/goal-engine/worktree-fingerprint.js +72 -0
- package/dist/core/workflows/goal-engine/worktree-fingerprint.js.map +1 -0
- package/dist/core/workflows/graph-sync.d.ts +67 -0
- package/dist/core/workflows/graph-sync.d.ts.map +1 -0
- package/dist/core/workflows/graph-sync.js +188 -0
- package/dist/core/workflows/graph-sync.js.map +1 -0
- package/dist/core/workflows/graph.d.ts +143 -0
- package/dist/core/workflows/graph.d.ts.map +1 -0
- package/dist/core/workflows/graph.js +319 -0
- package/dist/core/workflows/graph.js.map +1 -0
- package/dist/core/workflows/index.d.ts +26 -0
- package/dist/core/workflows/index.d.ts.map +1 -0
- package/dist/core/workflows/index.js +18 -0
- package/dist/core/workflows/index.js.map +1 -0
- package/dist/core/workflows/journal.d.ts +68 -0
- package/dist/core/workflows/journal.d.ts.map +1 -0
- package/dist/core/workflows/journal.js +83 -0
- package/dist/core/workflows/journal.js.map +1 -0
- package/dist/core/workflows/manager.d.ts +122 -0
- package/dist/core/workflows/manager.d.ts.map +1 -0
- package/dist/core/workflows/manager.js +351 -0
- package/dist/core/workflows/manager.js.map +1 -0
- package/dist/core/workflows/resolve-script.d.ts +35 -0
- package/dist/core/workflows/resolve-script.d.ts.map +1 -0
- package/dist/core/workflows/resolve-script.js +66 -0
- package/dist/core/workflows/resolve-script.js.map +1 -0
- package/dist/core/workflows/runtime.d.ts +62 -0
- package/dist/core/workflows/runtime.d.ts.map +1 -0
- package/dist/core/workflows/runtime.js +380 -0
- package/dist/core/workflows/runtime.js.map +1 -0
- package/dist/core/workflows/save-as-skill.d.ts +27 -0
- package/dist/core/workflows/save-as-skill.d.ts.map +1 -0
- package/dist/core/workflows/save-as-skill.js +54 -0
- package/dist/core/workflows/save-as-skill.js.map +1 -0
- package/dist/core/workflows/shared-store.d.ts +31 -0
- package/dist/core/workflows/shared-store.d.ts.map +1 -0
- package/dist/core/workflows/shared-store.js +80 -0
- package/dist/core/workflows/shared-store.js.map +1 -0
- package/dist/core/workflows/subagent-host.d.ts +50 -0
- package/dist/core/workflows/subagent-host.d.ts.map +1 -0
- package/dist/core/workflows/subagent-host.js +225 -0
- package/dist/core/workflows/subagent-host.js.map +1 -0
- package/dist/core/workflows/tool-workflow.d.ts +22 -0
- package/dist/core/workflows/tool-workflow.d.ts.map +1 -0
- package/dist/core/workflows/tool-workflow.js +120 -0
- package/dist/core/workflows/tool-workflow.js.map +1 -0
- package/dist/core/workflows/types.d.ts +191 -0
- package/dist/core/workflows/types.d.ts.map +1 -0
- package/dist/core/workflows/types.js +26 -0
- package/dist/core/workflows/types.js.map +1 -0
- package/dist/core/workflows/worktree.d.ts +42 -0
- package/dist/core/workflows/worktree.d.ts.map +1 -0
- package/dist/core/workflows/worktree.js +107 -0
- package/dist/core/workflows/worktree.js.map +1 -0
- package/dist/extensions/llama/index.d.ts.map +1 -1
- package/dist/extensions/llama/index.js +2 -0
- package/dist/extensions/llama/index.js.map +1 -1
- package/dist/extensions/llama/provider.d.ts.map +1 -1
- package/dist/extensions/llama/provider.js +6 -2
- package/dist/extensions/llama/provider.js.map +1 -1
- package/dist/extensions/remoto/index.d.ts +22 -0
- package/dist/extensions/remoto/index.d.ts.map +1 -0
- package/dist/extensions/remoto/index.js +54 -0
- package/dist/extensions/remoto/index.js.map +1 -0
- package/dist/index.d.ts +1 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -13
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts +4 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +26 -15
- package/dist/main.js.map +1 -1
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +4 -3
- package/dist/migrations.js.map +1 -1
- package/dist/modes/acp/acp-mode.d.ts +42 -0
- package/dist/modes/acp/acp-mode.d.ts.map +1 -0
- package/dist/modes/acp/acp-mode.js +190 -0
- package/dist/modes/acp/acp-mode.js.map +1 -0
- package/dist/modes/acp/events.d.ts +74 -0
- package/dist/modes/acp/events.d.ts.map +1 -0
- package/dist/modes/acp/events.js +116 -0
- package/dist/modes/acp/events.js.map +1 -0
- package/dist/modes/interactive/components/home-screen.d.ts.map +1 -1
- package/dist/modes/interactive/components/home-screen.js +2 -2
- package/dist/modes/interactive/components/home-screen.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts +9 -3
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +56 -12
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/prompt-optimization.d.ts +16 -0
- package/dist/modes/interactive/components/prompt-optimization.d.ts.map +1 -0
- package/dist/modes/interactive/components/prompt-optimization.js +46 -0
- package/dist/modes/interactive/components/prompt-optimization.js.map +1 -0
- package/dist/modes/interactive/components/settings-selector.d.ts +19 -2
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +180 -56
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-submenu.d.ts +72 -0
- package/dist/modes/interactive/components/settings-submenu.d.ts.map +1 -0
- package/dist/modes/interactive/components/settings-submenu.js +165 -0
- package/dist/modes/interactive/components/settings-submenu.js.map +1 -0
- package/dist/modes/interactive/components/thinking-selector.d.ts +15 -3
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js +74 -17
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/external-editor.d.ts.map +1 -1
- package/dist/modes/interactive/external-editor.js +2 -1
- package/dist/modes/interactive/external-editor.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +21 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +709 -75
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +4 -3
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/json-event.d.ts +16 -13
- package/dist/modes/json-event.d.ts.map +1 -1
- package/dist/modes/json-event.js +20 -6
- package/dist/modes/json-event.js.map +1 -1
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js +11 -0
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +173 -0
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +29 -0
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +27 -5
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/server/attach.d.ts +56 -0
- package/dist/server/attach.d.ts.map +1 -0
- package/dist/server/attach.js +130 -0
- package/dist/server/attach.js.map +1 -0
- package/dist/server/extension-ops.d.ts +40 -0
- package/dist/server/extension-ops.d.ts.map +1 -0
- package/dist/server/extension-ops.js +146 -0
- package/dist/server/extension-ops.js.map +1 -0
- package/dist/server/pi-server-service.d.ts +85 -0
- package/dist/server/pi-server-service.d.ts.map +1 -0
- package/dist/server/pi-server-service.js +213 -0
- package/dist/server/pi-server-service.js.map +1 -0
- package/dist/server/scheduler-tick.d.ts +32 -0
- package/dist/server/scheduler-tick.d.ts.map +1 -0
- package/dist/server/scheduler-tick.js +47 -0
- package/dist/server/scheduler-tick.js.map +1 -0
- package/dist/server/serve.d.ts +25 -0
- package/dist/server/serve.d.ts.map +1 -0
- package/dist/server/serve.js +83 -0
- package/dist/server/serve.js.map +1 -0
- package/dist/server/transcript.d.ts +38 -0
- package/dist/server/transcript.d.ts.map +1 -0
- package/dist/server/transcript.js +176 -0
- package/dist/server/transcript.js.map +1 -0
- package/dist/skills/ada-engine/SKILL.md +153 -0
- package/dist/skills/skill-creator/SKILL.md +90 -0
- package/dist/telegram/api.d.ts +75 -0
- package/dist/telegram/api.d.ts.map +1 -0
- package/dist/telegram/api.js +104 -0
- package/dist/telegram/api.js.map +1 -0
- package/dist/telegram/bridge.d.ts +85 -0
- package/dist/telegram/bridge.d.ts.map +1 -0
- package/dist/telegram/bridge.js +182 -0
- package/dist/telegram/bridge.js.map +1 -0
- package/dist/telegram/journal.d.ts +67 -0
- package/dist/telegram/journal.d.ts.map +1 -0
- package/dist/telegram/journal.js +119 -0
- package/dist/telegram/journal.js.map +1 -0
- package/dist/telegram/servidor.d.ts +15 -0
- package/dist/telegram/servidor.d.ts.map +1 -0
- package/dist/telegram/servidor.js +74 -0
- package/dist/telegram/servidor.js.map +1 -0
- package/dist/utils/frontmatter.d.ts.map +1 -1
- package/dist/utils/frontmatter.js +2 -1
- package/dist/utils/frontmatter.js.map +1 -1
- package/dist/utils/management-http.d.ts +5 -3
- package/dist/utils/management-http.d.ts.map +1 -1
- package/dist/utils/management-http.js +14 -10
- package/dist/utils/management-http.js.map +1 -1
- package/dist/utils/shell.d.ts +11 -0
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +11 -0
- package/dist/utils/shell.js.map +1 -1
- package/dist/utils/text.d.ts +8 -0
- package/dist/utils/text.d.ts.map +1 -0
- package/dist/utils/text.js +9 -0
- package/dist/utils/text.js.map +1 -0
- package/dist/utils/version-check.d.ts.map +1 -1
- package/dist/utils/version-check.js +29 -1
- package/dist/utils/version-check.js.map +1 -1
- package/docs/compaction.md +25 -10
- package/docs/compliance.md +241 -0
- package/docs/containerization.md +24 -24
- package/docs/custom-provider.md +15 -12
- package/docs/development.md +47 -10
- package/docs/docs.json +14 -2
- package/docs/environment-variables.md +20 -17
- package/docs/extensions.md +62 -51
- package/docs/index.md +15 -21
- package/docs/json.md +10 -5
- package/docs/keybindings.md +5 -5
- package/docs/llama-cpp.md +9 -7
- package/docs/models.md +18 -12
- package/docs/packages.md +45 -45
- package/docs/prompt-templates.md +5 -5
- package/docs/providers.md +12 -12
- package/docs/quickstart.md +39 -39
- package/docs/rpc.md +21 -15
- package/docs/sdk.md +38 -38
- package/docs/security.md +26 -21
- package/docs/session-format.md +7 -7
- package/docs/sessions.md +14 -14
- package/docs/settings.md +47 -22
- package/docs/shell-aliases.md +2 -2
- package/docs/skills.md +14 -13
- package/docs/terminal-setup.md +14 -14
- package/docs/termux.md +7 -7
- package/docs/themes.md +11 -11
- package/docs/tmux.md +4 -4
- package/docs/tui.md +3 -3
- package/docs/usage.md +54 -54
- package/docs/windows.md +2 -2
- package/examples/extensions/border-status-editor.ts +1 -1
- package/examples/extensions/git-checkpoint.ts +2 -2
- package/examples/extensions/notify.ts +3 -1
- package/examples/extensions/subagent/README.md +1 -1
- package/examples/extensions/subagent/index.ts +6 -1
- package/examples/extensions/titlebar-spinner.ts +1 -1
- package/examples/rpc-extension-ui.ts +1 -1
- package/examples/sdk/06-extensions.ts +1 -1
- package/examples/sdk/12-full-control.ts +9 -0
- package/examples/sdk/README.md +1 -1
- package/npm-shrinkwrap.json +35 -261
- package/package.json +9 -3
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Estabilización del prefijo del prompt.
|
|
3
|
+
*
|
|
4
|
+
* Las cachés de prompt (DeepSeek, OpenAI, Anthropic) casan por PREFIJO: un byte
|
|
5
|
+
* distinto en la posición N invalida todo lo que va detrás. En DeepSeek el hit
|
|
6
|
+
* cuesta ~31x menos que el miss, así que el coste de un cambio no es
|
|
7
|
+
* proporcional a su tamaño sino a su POSICIÓN.
|
|
8
|
+
*
|
|
9
|
+
* Esto reordena el system prompt para que todo lo estable quede por delante y lo
|
|
10
|
+
* dinámico detrás de un separador, de modo que el sufijo invalidado sea lo más
|
|
11
|
+
* pequeño posible.
|
|
12
|
+
*
|
|
13
|
+
* Dos decisiones de diseño que no son obvias:
|
|
14
|
+
*
|
|
15
|
+
* 1. Los candidatos ANIDAN — el bloque de un context file contiene su propio
|
|
16
|
+
* contenido a secas. Por eso las ocurrencias se cuentan contra UNA instantánea
|
|
17
|
+
* inmutable del prompt original, no contra el texto que va quedando: recontar
|
|
18
|
+
* tras cada extracción daría resultados incoherentes. Cualquier candidato que
|
|
19
|
+
* no aparezca EXACTAMENTE una vez se deja en su sitio.
|
|
20
|
+
*
|
|
21
|
+
* 2. Hay guardia de integridad. Si tras reordenar desaparece cualquier marcador
|
|
22
|
+
* estructural (una etiqueta, un delimitador), se descarta la reescritura
|
|
23
|
+
* entera y se devuelve el original. Un reordenado con un bug que corrompe el
|
|
24
|
+
* prompt en silencio es mucho peor que no cachear.
|
|
25
|
+
*/
|
|
26
|
+
/** Por debajo de esto un "candidato" es ruido que aparece en cualquier sitio. */
|
|
27
|
+
const MIN_CANDIDATE_LENGTH = 8;
|
|
28
|
+
/** Separador entre la zona estable y la dinámica. */
|
|
29
|
+
export const STABLE_SEPARATOR = "\n\n---\n\n";
|
|
30
|
+
/**
|
|
31
|
+
* Ficheros de contexto que se consideran estables.
|
|
32
|
+
*
|
|
33
|
+
* El tamaño NO es criterio: un fichero grande puede cambiar cada turno. Solo se
|
|
34
|
+
* suben ficheros de instrucciones cuyo contenido se sabe estable durante la
|
|
35
|
+
* sesión.
|
|
36
|
+
*/
|
|
37
|
+
const STABLE_CONTEXT_FILES = /(^|\/)(agents(\.override)?\.md|claude\.md|gemini\.md|cursor\.md)$/i;
|
|
38
|
+
export function isStableContextFile(path) {
|
|
39
|
+
return STABLE_CONTEXT_FILES.test(path.replace(/\\/g, "/").toLowerCase());
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Marcadores estructurales: etiquetas y delimitadores de bloque. Si el
|
|
43
|
+
* reordenado pierde alguno, algo se ha comido texto.
|
|
44
|
+
*/
|
|
45
|
+
export function extractStructuralMarkers(text) {
|
|
46
|
+
const markers = [];
|
|
47
|
+
for (const match of text.matchAll(/<\/?[a-zA-Z][\w-]*>/g))
|
|
48
|
+
markers.push(match[0]);
|
|
49
|
+
for (const match of text.matchAll(/<!--\s*[A-Z_]+:(START|END)\s*-->/g))
|
|
50
|
+
markers.push(match[0]);
|
|
51
|
+
return markers.sort();
|
|
52
|
+
}
|
|
53
|
+
/** Construye los bloques candidatos a subir, en orden determinista. */
|
|
54
|
+
export function buildStableCandidates(input) {
|
|
55
|
+
const candidates = [];
|
|
56
|
+
const push = (value) => {
|
|
57
|
+
const trimmed = value?.trim();
|
|
58
|
+
if (trimmed && trimmed.length >= MIN_CANDIDATE_LENGTH)
|
|
59
|
+
candidates.push(trimmed);
|
|
60
|
+
};
|
|
61
|
+
push(input.customPrompt);
|
|
62
|
+
push(input.appendSystemPrompt);
|
|
63
|
+
for (const guideline of input.promptGuidelines ?? [])
|
|
64
|
+
push(`- ${guideline}`);
|
|
65
|
+
for (const file of input.contextFiles ?? []) {
|
|
66
|
+
if (!isStableContextFile(file.path))
|
|
67
|
+
continue;
|
|
68
|
+
// Dos formas: con cabecera de ruta y sin ella. El ensamblador puede usar
|
|
69
|
+
// cualquiera de las dos y solo una casará.
|
|
70
|
+
push(`## ${file.path}\n\n${file.content}`);
|
|
71
|
+
push(file.content);
|
|
72
|
+
}
|
|
73
|
+
return candidates;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Reordena el prompt: estable primero, dinámico después del separador.
|
|
77
|
+
*
|
|
78
|
+
* No-op seguro: si nada casa exactamente una vez, o si la guardia de integridad
|
|
79
|
+
* salta, devuelve el prompt original sin tocar.
|
|
80
|
+
*/
|
|
81
|
+
export function stabilizeSystemPrompt(input) {
|
|
82
|
+
const original = input.prompt;
|
|
83
|
+
if (!original.trim())
|
|
84
|
+
return { prompt: original, lifted: 0, rolledBack: false };
|
|
85
|
+
const candidates = buildStableCandidates(input);
|
|
86
|
+
if (candidates.length === 0)
|
|
87
|
+
return { prompt: original, lifted: 0, rolledBack: false };
|
|
88
|
+
// Contar SIEMPRE contra la instantánea original: los candidatos anidan.
|
|
89
|
+
const snapshot = original;
|
|
90
|
+
const occurrencesOf = (needle) => {
|
|
91
|
+
let count = 0;
|
|
92
|
+
let from = 0;
|
|
93
|
+
while (true) {
|
|
94
|
+
const at = snapshot.indexOf(needle, from);
|
|
95
|
+
if (at === -1)
|
|
96
|
+
break;
|
|
97
|
+
count++;
|
|
98
|
+
from = at + needle.length;
|
|
99
|
+
if (count > 1)
|
|
100
|
+
break; // con saber que hay más de una basta
|
|
101
|
+
}
|
|
102
|
+
return count;
|
|
103
|
+
};
|
|
104
|
+
const stable = [];
|
|
105
|
+
let rest = original;
|
|
106
|
+
const seen = new Set();
|
|
107
|
+
for (const candidate of candidates) {
|
|
108
|
+
if (seen.has(candidate))
|
|
109
|
+
continue;
|
|
110
|
+
if (occurrencesOf(candidate) !== 1)
|
|
111
|
+
continue;
|
|
112
|
+
const at = rest.indexOf(candidate);
|
|
113
|
+
if (at === -1)
|
|
114
|
+
continue; // ya extraído dentro de otro candidato
|
|
115
|
+
seen.add(candidate);
|
|
116
|
+
stable.push(candidate);
|
|
117
|
+
rest = rest.slice(0, at) + rest.slice(at + candidate.length);
|
|
118
|
+
}
|
|
119
|
+
if (stable.length === 0)
|
|
120
|
+
return { prompt: original, lifted: 0, rolledBack: false };
|
|
121
|
+
const stableJoined = stable.join("\n\n");
|
|
122
|
+
// Ya estabilizado: sin esto una segunda pasada apilaría otro separador y el
|
|
123
|
+
// prefijo se movería en cada turno — exactamente lo contrario de lo que
|
|
124
|
+
// buscamos. La idempotencia no es elegancia aquí, es la propiedad.
|
|
125
|
+
if (original.startsWith(stableJoined + STABLE_SEPARATOR)) {
|
|
126
|
+
return { prompt: original, lifted: 0, rolledBack: false };
|
|
127
|
+
}
|
|
128
|
+
const rewritten = `${stableJoined}${STABLE_SEPARATOR}${rest.trim()}`;
|
|
129
|
+
// Guardia de integridad: ningún marcador estructural puede desaparecer.
|
|
130
|
+
const before = extractStructuralMarkers(original);
|
|
131
|
+
const after = extractStructuralMarkers(rewritten);
|
|
132
|
+
if (before.length !== after.length || before.some((m, i) => m !== after[i])) {
|
|
133
|
+
return { prompt: original, lifted: 0, rolledBack: true };
|
|
134
|
+
}
|
|
135
|
+
return { prompt: rewritten, lifted: stable.length, rolledBack: false };
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=stabilize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stabilize.js","sourceRoot":"","sources":["../../../src/core/prompt-cache/stabilize.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Estabilización del prefijo del prompt.\n *\n * Las cachés de prompt (DeepSeek, OpenAI, Anthropic) casan por PREFIJO: un byte\n * distinto en la posición N invalida todo lo que va detrás. En DeepSeek el hit\n * cuesta ~31x menos que el miss, así que el coste de un cambio no es\n * proporcional a su tamaño sino a su POSICIÓN.\n *\n * Esto reordena el system prompt para que todo lo estable quede por delante y lo\n * dinámico detrás de un separador, de modo que el sufijo invalidado sea lo más\n * pequeño posible.\n *\n * Dos decisiones de diseño que no son obvias:\n *\n * 1. Los candidatos ANIDAN — el bloque de un context file contiene su propio\n * contenido a secas. Por eso las ocurrencias se cuentan contra UNA instantánea\n * inmutable del prompt original, no contra el texto que va quedando: recontar\n * tras cada extracción daría resultados incoherentes. Cualquier candidato que\n * no aparezca EXACTAMENTE una vez se deja en su sitio.\n *\n * 2. Hay guardia de integridad. Si tras reordenar desaparece cualquier marcador\n * estructural (una etiqueta, un delimitador), se descarta la reescritura\n * entera y se devuelve el original. Un reordenado con un bug que corrompe el\n * prompt en silencio es mucho peor que no cachear.\n */\n\n/** Por debajo de esto un \"candidato\" es ruido que aparece en cualquier sitio. */\nconst MIN_CANDIDATE_LENGTH = 8;\n\n/** Separador entre la zona estable y la dinámica. */\nexport const STABLE_SEPARATOR = \"\\n\\n---\\n\\n\";\n\n/**\n * Ficheros de contexto que se consideran estables.\n *\n * El tamaño NO es criterio: un fichero grande puede cambiar cada turno. Solo se\n * suben ficheros de instrucciones cuyo contenido se sabe estable durante la\n * sesión.\n */\nconst STABLE_CONTEXT_FILES = /(^|\\/)(agents(\\.override)?\\.md|claude\\.md|gemini\\.md|cursor\\.md)$/i;\n\nexport function isStableContextFile(path: string): boolean {\n\treturn STABLE_CONTEXT_FILES.test(path.replace(/\\\\/g, \"/\").toLowerCase());\n}\n\nexport interface StabilizeInput {\n\t/** El system prompt ya ensamblado. */\n\tprompt: string;\n\t/** Prompt de sistema propio del usuario, si lo hay. */\n\tcustomPrompt?: string;\n\t/** Bloques añadidos al final (incluye la personalidad del engine). */\n\tappendSystemPrompt?: string;\n\t/** Guidelines por tool. */\n\tpromptGuidelines?: string[];\n\t/** Ficheros de contexto cargados. */\n\tcontextFiles?: Array<{ path: string; content: string }>;\n}\n\nexport interface StabilizeResult {\n\tprompt: string;\n\t/** Cuántos bloques se subieron al prefijo estable. */\n\tlifted: number;\n\t/** True si la guardia de integridad descartó la reescritura. */\n\trolledBack: boolean;\n}\n\n/**\n * Marcadores estructurales: etiquetas y delimitadores de bloque. Si el\n * reordenado pierde alguno, algo se ha comido texto.\n */\nexport function extractStructuralMarkers(text: string): string[] {\n\tconst markers: string[] = [];\n\tfor (const match of text.matchAll(/<\\/?[a-zA-Z][\\w-]*>/g)) markers.push(match[0]);\n\tfor (const match of text.matchAll(/<!--\\s*[A-Z_]+:(START|END)\\s*-->/g)) markers.push(match[0]);\n\treturn markers.sort();\n}\n\n/** Construye los bloques candidatos a subir, en orden determinista. */\nexport function buildStableCandidates(input: StabilizeInput): string[] {\n\tconst candidates: string[] = [];\n\tconst push = (value: string | undefined) => {\n\t\tconst trimmed = value?.trim();\n\t\tif (trimmed && trimmed.length >= MIN_CANDIDATE_LENGTH) candidates.push(trimmed);\n\t};\n\n\tpush(input.customPrompt);\n\tpush(input.appendSystemPrompt);\n\tfor (const guideline of input.promptGuidelines ?? []) push(`- ${guideline}`);\n\tfor (const file of input.contextFiles ?? []) {\n\t\tif (!isStableContextFile(file.path)) continue;\n\t\t// Dos formas: con cabecera de ruta y sin ella. El ensamblador puede usar\n\t\t// cualquiera de las dos y solo una casará.\n\t\tpush(`## ${file.path}\\n\\n${file.content}`);\n\t\tpush(file.content);\n\t}\n\treturn candidates;\n}\n\n/**\n * Reordena el prompt: estable primero, dinámico después del separador.\n *\n * No-op seguro: si nada casa exactamente una vez, o si la guardia de integridad\n * salta, devuelve el prompt original sin tocar.\n */\nexport function stabilizeSystemPrompt(input: StabilizeInput): StabilizeResult {\n\tconst original = input.prompt;\n\tif (!original.trim()) return { prompt: original, lifted: 0, rolledBack: false };\n\n\tconst candidates = buildStableCandidates(input);\n\tif (candidates.length === 0) return { prompt: original, lifted: 0, rolledBack: false };\n\n\t// Contar SIEMPRE contra la instantánea original: los candidatos anidan.\n\tconst snapshot = original;\n\tconst occurrencesOf = (needle: string): number => {\n\t\tlet count = 0;\n\t\tlet from = 0;\n\t\twhile (true) {\n\t\t\tconst at = snapshot.indexOf(needle, from);\n\t\t\tif (at === -1) break;\n\t\t\tcount++;\n\t\t\tfrom = at + needle.length;\n\t\t\tif (count > 1) break; // con saber que hay más de una basta\n\t\t}\n\t\treturn count;\n\t};\n\n\tconst stable: string[] = [];\n\tlet rest = original;\n\tconst seen = new Set<string>();\n\tfor (const candidate of candidates) {\n\t\tif (seen.has(candidate)) continue;\n\t\tif (occurrencesOf(candidate) !== 1) continue;\n\t\tconst at = rest.indexOf(candidate);\n\t\tif (at === -1) continue; // ya extraído dentro de otro candidato\n\t\tseen.add(candidate);\n\t\tstable.push(candidate);\n\t\trest = rest.slice(0, at) + rest.slice(at + candidate.length);\n\t}\n\n\tif (stable.length === 0) return { prompt: original, lifted: 0, rolledBack: false };\n\n\tconst stableJoined = stable.join(\"\\n\\n\");\n\t// Ya estabilizado: sin esto una segunda pasada apilaría otro separador y el\n\t// prefijo se movería en cada turno — exactamente lo contrario de lo que\n\t// buscamos. La idempotencia no es elegancia aquí, es la propiedad.\n\tif (original.startsWith(stableJoined + STABLE_SEPARATOR)) {\n\t\treturn { prompt: original, lifted: 0, rolledBack: false };\n\t}\n\n\tconst rewritten = `${stableJoined}${STABLE_SEPARATOR}${rest.trim()}`;\n\n\t// Guardia de integridad: ningún marcador estructural puede desaparecer.\n\tconst before = extractStructuralMarkers(original);\n\tconst after = extractStructuralMarkers(rewritten);\n\tif (before.length !== after.length || before.some((m, i) => m !== after[i])) {\n\t\treturn { prompt: original, lifted: 0, rolledBack: true };\n\t}\n\n\treturn { prompt: rewritten, lifted: stable.length, rolledBack: false };\n}\n"]}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lectura y persistencia de estadísticas de caché.
|
|
3
|
+
*
|
|
4
|
+
* Sin medición, todo lo demás es fe. Cada familia de proveedor reporta el uso de
|
|
5
|
+
* caché con nombres distintos, y algunos proxies los omiten — en cuyo caso hay
|
|
6
|
+
* que decirlo en vez de mostrar un 0% que parece un problema de caché cuando en
|
|
7
|
+
* realidad es un problema de telemetría.
|
|
8
|
+
*/
|
|
9
|
+
export interface CacheUsage {
|
|
10
|
+
/** Tokens de entrada servidos desde caché. */
|
|
11
|
+
cacheRead: number;
|
|
12
|
+
/** Tokens escritos a la caché (Anthropic los cobra aparte). */
|
|
13
|
+
cacheWrite: number;
|
|
14
|
+
/** Total de tokens de entrada, incluyendo los cacheados. */
|
|
15
|
+
totalInput: number;
|
|
16
|
+
/** True si el proveedor no reportó campos de caché (≠ 0 aciertos). */
|
|
17
|
+
missingFields: boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Normaliza el usage de cualquier familia de proveedor.
|
|
21
|
+
*
|
|
22
|
+
* Los nombres NO son intercambiables:
|
|
23
|
+
* - DeepSeek: `prompt_cache_hit_tokens` + `prompt_cache_miss_tokens` suman el total.
|
|
24
|
+
* - OpenAI: `prompt_tokens_details.cached_tokens` es un SUBCONJUNTO de `prompt_tokens`.
|
|
25
|
+
* - Anthropic: `input_tokens` EXCLUYE lo cacheado, así que hay que sumarlo.
|
|
26
|
+
* - Gemini: `cachedContentTokenCount` sobre `promptTokenCount`.
|
|
27
|
+
*/
|
|
28
|
+
export declare function readCacheUsage(raw: unknown): CacheUsage;
|
|
29
|
+
export interface ModelCacheStats {
|
|
30
|
+
day: string;
|
|
31
|
+
requests: number;
|
|
32
|
+
hits: number;
|
|
33
|
+
cachedTokens: number;
|
|
34
|
+
totalTokens: number;
|
|
35
|
+
missingFieldRequests: number;
|
|
36
|
+
}
|
|
37
|
+
export declare function emptyStats(day: string): ModelCacheStats;
|
|
38
|
+
export declare function accumulate(stats: ModelCacheStats, usage: CacheUsage): ModelCacheStats;
|
|
39
|
+
/** Línea del footer: `DS cache 42/57·1.20M/1.85M 64.9%`. */
|
|
40
|
+
export declare function formatStats(label: string, stats: ModelCacheStats): string;
|
|
41
|
+
/** Persistencia con escritura debounced; el disco nunca bloquea una petición. */
|
|
42
|
+
export declare class CacheStatsStore {
|
|
43
|
+
private path;
|
|
44
|
+
private data;
|
|
45
|
+
private timer;
|
|
46
|
+
constructor(agentDir: string);
|
|
47
|
+
load(): Promise<void>;
|
|
48
|
+
record(modelKey: string, day: string, usage: CacheUsage): ModelCacheStats;
|
|
49
|
+
get(modelKey: string): ModelCacheStats | undefined;
|
|
50
|
+
all(): Record<string, ModelCacheStats>;
|
|
51
|
+
reset(modelKey?: string): void;
|
|
52
|
+
private schedulePersist;
|
|
53
|
+
flush(): Promise<void>;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=stats.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../../src/core/prompt-cache/stats.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,MAAM,WAAW,UAAU;IAC1B,+CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,gEAA+D;IAC/D,UAAU,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,UAAU,EAAE,MAAM,CAAC;IACnB,0EAAsE;IACtE,aAAa,EAAE,OAAO,CAAC;CACvB;AAQD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,CAyDvD;AAED,MAAM,WAAW,eAAe;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAEvD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,UAAU,GAAG,eAAe,CASrF;AAED,8DAA4D;AAC5D,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,MAAM,CAMzE;AAOD,kFAAiF;AACjF,qBAAa,eAAe;IAC3B,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAA0C;IACtD,OAAO,CAAC,KAAK,CAA8C;IAE3D,YAAY,QAAQ,EAAE,MAAM,EAE3B;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAO1B;IAED,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,eAAe,CAOxE;IAED,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAEjD;IAED,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAErC;IAED,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAI7B;IAED,OAAO,CAAC,eAAe;IAMjB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAW3B;CACD","sourcesContent":["/**\n * Lectura y persistencia de estadísticas de caché.\n *\n * Sin medición, todo lo demás es fe. Cada familia de proveedor reporta el uso de\n * caché con nombres distintos, y algunos proxies los omiten — en cuyo caso hay\n * que decirlo en vez de mostrar un 0% que parece un problema de caché cuando en\n * realidad es un problema de telemetría.\n */\n\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\n\nexport interface CacheUsage {\n\t/** Tokens de entrada servidos desde caché. */\n\tcacheRead: number;\n\t/** Tokens escritos a la caché (Anthropic los cobra aparte). */\n\tcacheWrite: number;\n\t/** Total de tokens de entrada, incluyendo los cacheados. */\n\ttotalInput: number;\n\t/** True si el proveedor no reportó campos de caché (≠ 0 aciertos). */\n\tmissingFields: boolean;\n}\n\nconst ZERO: CacheUsage = { cacheRead: 0, cacheWrite: 0, totalInput: 0, missingFields: true };\n\nfunction num(value: unknown): number {\n\treturn typeof value === \"number\" && Number.isFinite(value) ? value : 0;\n}\n\n/**\n * Normaliza el usage de cualquier familia de proveedor.\n *\n * Los nombres NO son intercambiables:\n * - DeepSeek: `prompt_cache_hit_tokens` + `prompt_cache_miss_tokens` suman el total.\n * - OpenAI: `prompt_tokens_details.cached_tokens` es un SUBCONJUNTO de `prompt_tokens`.\n * - Anthropic: `input_tokens` EXCLUYE lo cacheado, así que hay que sumarlo.\n * - Gemini: `cachedContentTokenCount` sobre `promptTokenCount`.\n */\nexport function readCacheUsage(raw: unknown): CacheUsage {\n\tif (!raw || typeof raw !== \"object\") return { ...ZERO };\n\tconst u = raw as Record<string, unknown>;\n\n\t// DeepSeek\n\tif (\"prompt_cache_hit_tokens\" in u || \"prompt_cache_miss_tokens\" in u) {\n\t\tconst hit = num(u.prompt_cache_hit_tokens);\n\t\tconst miss = num(u.prompt_cache_miss_tokens);\n\t\treturn { cacheRead: hit, cacheWrite: 0, totalInput: hit + miss || num(u.prompt_tokens), missingFields: false };\n\t}\n\n\t// Anthropic: input_tokens NO incluye lo cacheado.\n\tif (\"cache_read_input_tokens\" in u || \"cache_creation_input_tokens\" in u) {\n\t\tconst read = num(u.cache_read_input_tokens);\n\t\tconst write = num(u.cache_creation_input_tokens);\n\t\treturn {\n\t\t\tcacheRead: read,\n\t\t\tcacheWrite: write,\n\t\t\ttotalInput: num(u.input_tokens) + read + write,\n\t\t\tmissingFields: false,\n\t\t};\n\t}\n\n\t// OpenAI: cached_tokens es subconjunto de prompt_tokens.\n\tconst details = (u.prompt_tokens_details ?? u.input_tokens_details) as Record<string, unknown> | undefined;\n\tif (details && typeof details === \"object\" && \"cached_tokens\" in details) {\n\t\tconst read = num(details.cached_tokens);\n\t\treturn {\n\t\t\tcacheRead: read,\n\t\t\tcacheWrite: num(u.cache_write_tokens),\n\t\t\ttotalInput: num(u.prompt_tokens) || num(u.input_tokens) || read,\n\t\t\tmissingFields: false,\n\t\t};\n\t}\n\n\t// Gemini\n\tconst meta = u.usageMetadata as Record<string, unknown> | undefined;\n\tif (meta && typeof meta === \"object\" && \"cachedContentTokenCount\" in meta) {\n\t\tconst read = num(meta.cachedContentTokenCount);\n\t\treturn { cacheRead: read, cacheWrite: 0, totalInput: num(meta.promptTokenCount) || read, missingFields: false };\n\t}\n\n\t// Forma ya normalizada por el SDK.\n\tif (\"cacheRead\" in u || \"input\" in u) {\n\t\tconst read = num(u.cacheRead);\n\t\tconst write = num(u.cacheWrite);\n\t\treturn {\n\t\t\tcacheRead: read,\n\t\t\tcacheWrite: write,\n\t\t\t// Suelo: el total nunca puede ser menor que lo cacheado, o saldrían\n\t\t\t// ratios por encima del 100% cuando un proxy omite el total.\n\t\t\ttotalInput: Math.max(num(u.input), read + write),\n\t\t\tmissingFields: !(\"cacheRead\" in u),\n\t\t};\n\t}\n\n\treturn { ...ZERO };\n}\n\nexport interface ModelCacheStats {\n\tday: string;\n\trequests: number;\n\thits: number;\n\tcachedTokens: number;\n\ttotalTokens: number;\n\tmissingFieldRequests: number;\n}\n\nexport function emptyStats(day: string): ModelCacheStats {\n\treturn { day, requests: 0, hits: 0, cachedTokens: 0, totalTokens: 0, missingFieldRequests: 0 };\n}\n\nexport function accumulate(stats: ModelCacheStats, usage: CacheUsage): ModelCacheStats {\n\treturn {\n\t\t...stats,\n\t\trequests: stats.requests + 1,\n\t\thits: stats.hits + (usage.cacheRead > 0 ? 1 : 0),\n\t\tcachedTokens: stats.cachedTokens + usage.cacheRead,\n\t\ttotalTokens: stats.totalTokens + usage.totalInput,\n\t\tmissingFieldRequests: stats.missingFieldRequests + (usage.missingFields ? 1 : 0),\n\t};\n}\n\n/** Línea del footer: `DS cache 42/57·1.20M/1.85M 64.9%`. */\nexport function formatStats(label: string, stats: ModelCacheStats): string {\n\tif (stats.requests === 0) return \"\";\n\tconst pct = stats.totalTokens > 0 ? ((stats.cachedTokens / stats.totalTokens) * 100).toFixed(1) : \"0.0\";\n\tconst m = (n: number) => `${(n / 1_000_000).toFixed(2)}M`;\n\tconst warn = stats.missingFieldRequests > 0 ? \" ⚠️ sin datos de caché\" : \"\";\n\treturn `${label} ${stats.hits}/${stats.requests}·${m(stats.cachedTokens)}/${m(stats.totalTokens)} ${pct}%${warn}`;\n}\n\ninterface StatsFile {\n\tversion: 1;\n\tbyModel: Record<string, ModelCacheStats>;\n}\n\n/** Persistencia con escritura debounced; el disco nunca bloquea una petición. */\nexport class CacheStatsStore {\n\tprivate path: string;\n\tprivate data: StatsFile = { version: 1, byModel: {} };\n\tprivate timer: ReturnType<typeof setTimeout> | null = null;\n\n\tconstructor(agentDir: string) {\n\t\tthis.path = join(agentDir, \"prompt-cache-stats.json\");\n\t}\n\n\tasync load(): Promise<void> {\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(await readFile(this.path, \"utf-8\")) as StatsFile;\n\t\t\tif (parsed.version === 1 && parsed.byModel) this.data = parsed;\n\t\t} catch {\n\t\t\t// primer arranque / fichero corrupto: se empieza de cero\n\t\t}\n\t}\n\n\trecord(modelKey: string, day: string, usage: CacheUsage): ModelCacheStats {\n\t\tconst current = this.data.byModel[modelKey];\n\t\tconst base = current && current.day === day ? current : emptyStats(day);\n\t\tconst next = accumulate(base, usage);\n\t\tthis.data.byModel[modelKey] = next;\n\t\tthis.schedulePersist();\n\t\treturn next;\n\t}\n\n\tget(modelKey: string): ModelCacheStats | undefined {\n\t\treturn this.data.byModel[modelKey];\n\t}\n\n\tall(): Record<string, ModelCacheStats> {\n\t\treturn { ...this.data.byModel };\n\t}\n\n\treset(modelKey?: string): void {\n\t\tif (modelKey) delete this.data.byModel[modelKey];\n\t\telse this.data.byModel = {};\n\t\tthis.schedulePersist();\n\t}\n\n\tprivate schedulePersist(): void {\n\t\tif (this.timer) clearTimeout(this.timer);\n\t\tthis.timer = setTimeout(() => void this.flush(), 2000);\n\t\t(this.timer as unknown as { unref?: () => void }).unref?.();\n\t}\n\n\tasync flush(): Promise<void> {\n\t\tif (this.timer) {\n\t\t\tclearTimeout(this.timer);\n\t\t\tthis.timer = null;\n\t\t}\n\t\ttry {\n\t\t\tawait mkdir(dirname(this.path), { recursive: true });\n\t\t\tawait writeFile(this.path, JSON.stringify(this.data), \"utf-8\");\n\t\t} catch {\n\t\t\t// las estadísticas nunca deben romper una sesión\n\t\t}\n\t}\n}\n"]}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lectura y persistencia de estadísticas de caché.
|
|
3
|
+
*
|
|
4
|
+
* Sin medición, todo lo demás es fe. Cada familia de proveedor reporta el uso de
|
|
5
|
+
* caché con nombres distintos, y algunos proxies los omiten — en cuyo caso hay
|
|
6
|
+
* que decirlo en vez de mostrar un 0% que parece un problema de caché cuando en
|
|
7
|
+
* realidad es un problema de telemetría.
|
|
8
|
+
*/
|
|
9
|
+
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
10
|
+
import { dirname, join } from "node:path";
|
|
11
|
+
const ZERO = { cacheRead: 0, cacheWrite: 0, totalInput: 0, missingFields: true };
|
|
12
|
+
function num(value) {
|
|
13
|
+
return typeof value === "number" && Number.isFinite(value) ? value : 0;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Normaliza el usage de cualquier familia de proveedor.
|
|
17
|
+
*
|
|
18
|
+
* Los nombres NO son intercambiables:
|
|
19
|
+
* - DeepSeek: `prompt_cache_hit_tokens` + `prompt_cache_miss_tokens` suman el total.
|
|
20
|
+
* - OpenAI: `prompt_tokens_details.cached_tokens` es un SUBCONJUNTO de `prompt_tokens`.
|
|
21
|
+
* - Anthropic: `input_tokens` EXCLUYE lo cacheado, así que hay que sumarlo.
|
|
22
|
+
* - Gemini: `cachedContentTokenCount` sobre `promptTokenCount`.
|
|
23
|
+
*/
|
|
24
|
+
export function readCacheUsage(raw) {
|
|
25
|
+
if (!raw || typeof raw !== "object")
|
|
26
|
+
return { ...ZERO };
|
|
27
|
+
const u = raw;
|
|
28
|
+
// DeepSeek
|
|
29
|
+
if ("prompt_cache_hit_tokens" in u || "prompt_cache_miss_tokens" in u) {
|
|
30
|
+
const hit = num(u.prompt_cache_hit_tokens);
|
|
31
|
+
const miss = num(u.prompt_cache_miss_tokens);
|
|
32
|
+
return { cacheRead: hit, cacheWrite: 0, totalInput: hit + miss || num(u.prompt_tokens), missingFields: false };
|
|
33
|
+
}
|
|
34
|
+
// Anthropic: input_tokens NO incluye lo cacheado.
|
|
35
|
+
if ("cache_read_input_tokens" in u || "cache_creation_input_tokens" in u) {
|
|
36
|
+
const read = num(u.cache_read_input_tokens);
|
|
37
|
+
const write = num(u.cache_creation_input_tokens);
|
|
38
|
+
return {
|
|
39
|
+
cacheRead: read,
|
|
40
|
+
cacheWrite: write,
|
|
41
|
+
totalInput: num(u.input_tokens) + read + write,
|
|
42
|
+
missingFields: false,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
// OpenAI: cached_tokens es subconjunto de prompt_tokens.
|
|
46
|
+
const details = (u.prompt_tokens_details ?? u.input_tokens_details);
|
|
47
|
+
if (details && typeof details === "object" && "cached_tokens" in details) {
|
|
48
|
+
const read = num(details.cached_tokens);
|
|
49
|
+
return {
|
|
50
|
+
cacheRead: read,
|
|
51
|
+
cacheWrite: num(u.cache_write_tokens),
|
|
52
|
+
totalInput: num(u.prompt_tokens) || num(u.input_tokens) || read,
|
|
53
|
+
missingFields: false,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
// Gemini
|
|
57
|
+
const meta = u.usageMetadata;
|
|
58
|
+
if (meta && typeof meta === "object" && "cachedContentTokenCount" in meta) {
|
|
59
|
+
const read = num(meta.cachedContentTokenCount);
|
|
60
|
+
return { cacheRead: read, cacheWrite: 0, totalInput: num(meta.promptTokenCount) || read, missingFields: false };
|
|
61
|
+
}
|
|
62
|
+
// Forma ya normalizada por el SDK.
|
|
63
|
+
if ("cacheRead" in u || "input" in u) {
|
|
64
|
+
const read = num(u.cacheRead);
|
|
65
|
+
const write = num(u.cacheWrite);
|
|
66
|
+
return {
|
|
67
|
+
cacheRead: read,
|
|
68
|
+
cacheWrite: write,
|
|
69
|
+
// Suelo: el total nunca puede ser menor que lo cacheado, o saldrían
|
|
70
|
+
// ratios por encima del 100% cuando un proxy omite el total.
|
|
71
|
+
totalInput: Math.max(num(u.input), read + write),
|
|
72
|
+
missingFields: !("cacheRead" in u),
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
return { ...ZERO };
|
|
76
|
+
}
|
|
77
|
+
export function emptyStats(day) {
|
|
78
|
+
return { day, requests: 0, hits: 0, cachedTokens: 0, totalTokens: 0, missingFieldRequests: 0 };
|
|
79
|
+
}
|
|
80
|
+
export function accumulate(stats, usage) {
|
|
81
|
+
return {
|
|
82
|
+
...stats,
|
|
83
|
+
requests: stats.requests + 1,
|
|
84
|
+
hits: stats.hits + (usage.cacheRead > 0 ? 1 : 0),
|
|
85
|
+
cachedTokens: stats.cachedTokens + usage.cacheRead,
|
|
86
|
+
totalTokens: stats.totalTokens + usage.totalInput,
|
|
87
|
+
missingFieldRequests: stats.missingFieldRequests + (usage.missingFields ? 1 : 0),
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/** Línea del footer: `DS cache 42/57·1.20M/1.85M 64.9%`. */
|
|
91
|
+
export function formatStats(label, stats) {
|
|
92
|
+
if (stats.requests === 0)
|
|
93
|
+
return "";
|
|
94
|
+
const pct = stats.totalTokens > 0 ? ((stats.cachedTokens / stats.totalTokens) * 100).toFixed(1) : "0.0";
|
|
95
|
+
const m = (n) => `${(n / 1_000_000).toFixed(2)}M`;
|
|
96
|
+
const warn = stats.missingFieldRequests > 0 ? " ⚠️ sin datos de caché" : "";
|
|
97
|
+
return `${label} ${stats.hits}/${stats.requests}·${m(stats.cachedTokens)}/${m(stats.totalTokens)} ${pct}%${warn}`;
|
|
98
|
+
}
|
|
99
|
+
/** Persistencia con escritura debounced; el disco nunca bloquea una petición. */
|
|
100
|
+
export class CacheStatsStore {
|
|
101
|
+
path;
|
|
102
|
+
data = { version: 1, byModel: {} };
|
|
103
|
+
timer = null;
|
|
104
|
+
constructor(agentDir) {
|
|
105
|
+
this.path = join(agentDir, "prompt-cache-stats.json");
|
|
106
|
+
}
|
|
107
|
+
async load() {
|
|
108
|
+
try {
|
|
109
|
+
const parsed = JSON.parse(await readFile(this.path, "utf-8"));
|
|
110
|
+
if (parsed.version === 1 && parsed.byModel)
|
|
111
|
+
this.data = parsed;
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
// primer arranque / fichero corrupto: se empieza de cero
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
record(modelKey, day, usage) {
|
|
118
|
+
const current = this.data.byModel[modelKey];
|
|
119
|
+
const base = current && current.day === day ? current : emptyStats(day);
|
|
120
|
+
const next = accumulate(base, usage);
|
|
121
|
+
this.data.byModel[modelKey] = next;
|
|
122
|
+
this.schedulePersist();
|
|
123
|
+
return next;
|
|
124
|
+
}
|
|
125
|
+
get(modelKey) {
|
|
126
|
+
return this.data.byModel[modelKey];
|
|
127
|
+
}
|
|
128
|
+
all() {
|
|
129
|
+
return { ...this.data.byModel };
|
|
130
|
+
}
|
|
131
|
+
reset(modelKey) {
|
|
132
|
+
if (modelKey)
|
|
133
|
+
delete this.data.byModel[modelKey];
|
|
134
|
+
else
|
|
135
|
+
this.data.byModel = {};
|
|
136
|
+
this.schedulePersist();
|
|
137
|
+
}
|
|
138
|
+
schedulePersist() {
|
|
139
|
+
if (this.timer)
|
|
140
|
+
clearTimeout(this.timer);
|
|
141
|
+
this.timer = setTimeout(() => void this.flush(), 2000);
|
|
142
|
+
this.timer.unref?.();
|
|
143
|
+
}
|
|
144
|
+
async flush() {
|
|
145
|
+
if (this.timer) {
|
|
146
|
+
clearTimeout(this.timer);
|
|
147
|
+
this.timer = null;
|
|
148
|
+
}
|
|
149
|
+
try {
|
|
150
|
+
await mkdir(dirname(this.path), { recursive: true });
|
|
151
|
+
await writeFile(this.path, JSON.stringify(this.data), "utf-8");
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
// las estadísticas nunca deben romper una sesión
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=stats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../../src/core/prompt-cache/stats.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Lectura y persistencia de estadísticas de caché.\n *\n * Sin medición, todo lo demás es fe. Cada familia de proveedor reporta el uso de\n * caché con nombres distintos, y algunos proxies los omiten — en cuyo caso hay\n * que decirlo en vez de mostrar un 0% que parece un problema de caché cuando en\n * realidad es un problema de telemetría.\n */\n\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\n\nexport interface CacheUsage {\n\t/** Tokens de entrada servidos desde caché. */\n\tcacheRead: number;\n\t/** Tokens escritos a la caché (Anthropic los cobra aparte). */\n\tcacheWrite: number;\n\t/** Total de tokens de entrada, incluyendo los cacheados. */\n\ttotalInput: number;\n\t/** True si el proveedor no reportó campos de caché (≠ 0 aciertos). */\n\tmissingFields: boolean;\n}\n\nconst ZERO: CacheUsage = { cacheRead: 0, cacheWrite: 0, totalInput: 0, missingFields: true };\n\nfunction num(value: unknown): number {\n\treturn typeof value === \"number\" && Number.isFinite(value) ? value : 0;\n}\n\n/**\n * Normaliza el usage de cualquier familia de proveedor.\n *\n * Los nombres NO son intercambiables:\n * - DeepSeek: `prompt_cache_hit_tokens` + `prompt_cache_miss_tokens` suman el total.\n * - OpenAI: `prompt_tokens_details.cached_tokens` es un SUBCONJUNTO de `prompt_tokens`.\n * - Anthropic: `input_tokens` EXCLUYE lo cacheado, así que hay que sumarlo.\n * - Gemini: `cachedContentTokenCount` sobre `promptTokenCount`.\n */\nexport function readCacheUsage(raw: unknown): CacheUsage {\n\tif (!raw || typeof raw !== \"object\") return { ...ZERO };\n\tconst u = raw as Record<string, unknown>;\n\n\t// DeepSeek\n\tif (\"prompt_cache_hit_tokens\" in u || \"prompt_cache_miss_tokens\" in u) {\n\t\tconst hit = num(u.prompt_cache_hit_tokens);\n\t\tconst miss = num(u.prompt_cache_miss_tokens);\n\t\treturn { cacheRead: hit, cacheWrite: 0, totalInput: hit + miss || num(u.prompt_tokens), missingFields: false };\n\t}\n\n\t// Anthropic: input_tokens NO incluye lo cacheado.\n\tif (\"cache_read_input_tokens\" in u || \"cache_creation_input_tokens\" in u) {\n\t\tconst read = num(u.cache_read_input_tokens);\n\t\tconst write = num(u.cache_creation_input_tokens);\n\t\treturn {\n\t\t\tcacheRead: read,\n\t\t\tcacheWrite: write,\n\t\t\ttotalInput: num(u.input_tokens) + read + write,\n\t\t\tmissingFields: false,\n\t\t};\n\t}\n\n\t// OpenAI: cached_tokens es subconjunto de prompt_tokens.\n\tconst details = (u.prompt_tokens_details ?? u.input_tokens_details) as Record<string, unknown> | undefined;\n\tif (details && typeof details === \"object\" && \"cached_tokens\" in details) {\n\t\tconst read = num(details.cached_tokens);\n\t\treturn {\n\t\t\tcacheRead: read,\n\t\t\tcacheWrite: num(u.cache_write_tokens),\n\t\t\ttotalInput: num(u.prompt_tokens) || num(u.input_tokens) || read,\n\t\t\tmissingFields: false,\n\t\t};\n\t}\n\n\t// Gemini\n\tconst meta = u.usageMetadata as Record<string, unknown> | undefined;\n\tif (meta && typeof meta === \"object\" && \"cachedContentTokenCount\" in meta) {\n\t\tconst read = num(meta.cachedContentTokenCount);\n\t\treturn { cacheRead: read, cacheWrite: 0, totalInput: num(meta.promptTokenCount) || read, missingFields: false };\n\t}\n\n\t// Forma ya normalizada por el SDK.\n\tif (\"cacheRead\" in u || \"input\" in u) {\n\t\tconst read = num(u.cacheRead);\n\t\tconst write = num(u.cacheWrite);\n\t\treturn {\n\t\t\tcacheRead: read,\n\t\t\tcacheWrite: write,\n\t\t\t// Suelo: el total nunca puede ser menor que lo cacheado, o saldrían\n\t\t\t// ratios por encima del 100% cuando un proxy omite el total.\n\t\t\ttotalInput: Math.max(num(u.input), read + write),\n\t\t\tmissingFields: !(\"cacheRead\" in u),\n\t\t};\n\t}\n\n\treturn { ...ZERO };\n}\n\nexport interface ModelCacheStats {\n\tday: string;\n\trequests: number;\n\thits: number;\n\tcachedTokens: number;\n\ttotalTokens: number;\n\tmissingFieldRequests: number;\n}\n\nexport function emptyStats(day: string): ModelCacheStats {\n\treturn { day, requests: 0, hits: 0, cachedTokens: 0, totalTokens: 0, missingFieldRequests: 0 };\n}\n\nexport function accumulate(stats: ModelCacheStats, usage: CacheUsage): ModelCacheStats {\n\treturn {\n\t\t...stats,\n\t\trequests: stats.requests + 1,\n\t\thits: stats.hits + (usage.cacheRead > 0 ? 1 : 0),\n\t\tcachedTokens: stats.cachedTokens + usage.cacheRead,\n\t\ttotalTokens: stats.totalTokens + usage.totalInput,\n\t\tmissingFieldRequests: stats.missingFieldRequests + (usage.missingFields ? 1 : 0),\n\t};\n}\n\n/** Línea del footer: `DS cache 42/57·1.20M/1.85M 64.9%`. */\nexport function formatStats(label: string, stats: ModelCacheStats): string {\n\tif (stats.requests === 0) return \"\";\n\tconst pct = stats.totalTokens > 0 ? ((stats.cachedTokens / stats.totalTokens) * 100).toFixed(1) : \"0.0\";\n\tconst m = (n: number) => `${(n / 1_000_000).toFixed(2)}M`;\n\tconst warn = stats.missingFieldRequests > 0 ? \" ⚠️ sin datos de caché\" : \"\";\n\treturn `${label} ${stats.hits}/${stats.requests}·${m(stats.cachedTokens)}/${m(stats.totalTokens)} ${pct}%${warn}`;\n}\n\ninterface StatsFile {\n\tversion: 1;\n\tbyModel: Record<string, ModelCacheStats>;\n}\n\n/** Persistencia con escritura debounced; el disco nunca bloquea una petición. */\nexport class CacheStatsStore {\n\tprivate path: string;\n\tprivate data: StatsFile = { version: 1, byModel: {} };\n\tprivate timer: ReturnType<typeof setTimeout> | null = null;\n\n\tconstructor(agentDir: string) {\n\t\tthis.path = join(agentDir, \"prompt-cache-stats.json\");\n\t}\n\n\tasync load(): Promise<void> {\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(await readFile(this.path, \"utf-8\")) as StatsFile;\n\t\t\tif (parsed.version === 1 && parsed.byModel) this.data = parsed;\n\t\t} catch {\n\t\t\t// primer arranque / fichero corrupto: se empieza de cero\n\t\t}\n\t}\n\n\trecord(modelKey: string, day: string, usage: CacheUsage): ModelCacheStats {\n\t\tconst current = this.data.byModel[modelKey];\n\t\tconst base = current && current.day === day ? current : emptyStats(day);\n\t\tconst next = accumulate(base, usage);\n\t\tthis.data.byModel[modelKey] = next;\n\t\tthis.schedulePersist();\n\t\treturn next;\n\t}\n\n\tget(modelKey: string): ModelCacheStats | undefined {\n\t\treturn this.data.byModel[modelKey];\n\t}\n\n\tall(): Record<string, ModelCacheStats> {\n\t\treturn { ...this.data.byModel };\n\t}\n\n\treset(modelKey?: string): void {\n\t\tif (modelKey) delete this.data.byModel[modelKey];\n\t\telse this.data.byModel = {};\n\t\tthis.schedulePersist();\n\t}\n\n\tprivate schedulePersist(): void {\n\t\tif (this.timer) clearTimeout(this.timer);\n\t\tthis.timer = setTimeout(() => void this.flush(), 2000);\n\t\t(this.timer as unknown as { unref?: () => void }).unref?.();\n\t}\n\n\tasync flush(): Promise<void> {\n\t\tif (this.timer) {\n\t\t\tclearTimeout(this.timer);\n\t\t\tthis.timer = null;\n\t\t}\n\t\ttry {\n\t\t\tawait mkdir(dirname(this.path), { recursive: true });\n\t\t\tawait writeFile(this.path, JSON.stringify(this.data), \"utf-8\");\n\t\t} catch {\n\t\t\t// las estadísticas nunca deben romper una sesión\n\t\t}\n\t}\n}\n"]}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* La regla de elección de herramienta, en un solo sitio y construida con lo que
|
|
3
|
+
* de verdad está disponible.
|
|
4
|
+
*
|
|
5
|
+
* Antes vivía duplicada literalmente en `browser/tools.ts` y `computer/tools.ts`,
|
|
6
|
+
* y cada copia enrutaba a las cuatro familias — incluida la que su propio
|
|
7
|
+
* fichero no podía garantizar. Con el control del ordenador apagado, el prompt
|
|
8
|
+
* seguía diciendo "una aplicación de escritorio → computer_*" y esas tools no
|
|
9
|
+
* existían para el modelo. El agente las pedía, recibía un error opaco, y desde
|
|
10
|
+
* fuera parecía que "no sabe elegir herramienta".
|
|
11
|
+
*
|
|
12
|
+
* Una regla que nombra destinos inexistentes es peor que no tener regla: manda
|
|
13
|
+
* en la dirección equivocada con la autoridad del prompt de sistema.
|
|
14
|
+
*/
|
|
15
|
+
export interface DestinosDisponibles {
|
|
16
|
+
/** Las tools `browser_*` están registradas. */
|
|
17
|
+
navegador: boolean;
|
|
18
|
+
/** Las tools `computer_*` están registradas. */
|
|
19
|
+
ordenador: boolean;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Devuelve la línea de enrutado, omitiendo lo que no existe.
|
|
23
|
+
*
|
|
24
|
+
* `web_fetch` y `bash` van siempre porque siempre están: son el suelo del
|
|
25
|
+
* agente. Los otros dos son opcionales y cada uno tiene su interruptor.
|
|
26
|
+
*/
|
|
27
|
+
export declare function reglaDeEleccion(disponibles: DestinosDisponibles): string;
|
|
28
|
+
/**
|
|
29
|
+
* Qué decirle al agente sobre los navegadores cuando NO tiene tools de
|
|
30
|
+
* navegador.
|
|
31
|
+
*
|
|
32
|
+
* La política del control del ordenador impide teclear en un navegador, y su
|
|
33
|
+
* mensaje de error redirige a `browser_*`. Si esas tools están apagadas, esa
|
|
34
|
+
* redirección apunta al vacío y el agente se queda sin salida. Mejor decírselo
|
|
35
|
+
* antes: no es que deba usar otra cosa, es que no puede hacerlo.
|
|
36
|
+
*/
|
|
37
|
+
export declare function avisoSinNavegador(): string;
|
|
38
|
+
//# sourceMappingURL=prompt-eleccion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-eleccion.d.ts","sourceRoot":"","sources":["../../src/core/prompt-eleccion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,mBAAmB;IACnC,gDAA+C;IAC/C,SAAS,EAAE,OAAO,CAAC;IACnB,iDAAgD;IAChD,SAAS,EAAE,OAAO,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,mBAAmB,GAAG,MAAM,CAUxE;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAM1C","sourcesContent":["/**\n * La regla de elección de herramienta, en un solo sitio y construida con lo que\n * de verdad está disponible.\n *\n * Antes vivía duplicada literalmente en `browser/tools.ts` y `computer/tools.ts`,\n * y cada copia enrutaba a las cuatro familias — incluida la que su propio\n * fichero no podía garantizar. Con el control del ordenador apagado, el prompt\n * seguía diciendo \"una aplicación de escritorio → computer_*\" y esas tools no\n * existían para el modelo. El agente las pedía, recibía un error opaco, y desde\n * fuera parecía que \"no sabe elegir herramienta\".\n *\n * Una regla que nombra destinos inexistentes es peor que no tener regla: manda\n * en la dirección equivocada con la autoridad del prompt de sistema.\n */\n\nexport interface DestinosDisponibles {\n\t/** Las tools `browser_*` están registradas. */\n\tnavegador: boolean;\n\t/** Las tools `computer_*` están registradas. */\n\tordenador: boolean;\n}\n\n/**\n * Devuelve la línea de enrutado, omitiendo lo que no existe.\n *\n * `web_fetch` y `bash` van siempre porque siempre están: son el suelo del\n * agente. Los otros dos son opcionales y cada uno tiene su interruptor.\n */\nexport function reglaDeEleccion(disponibles: DestinosDisponibles): string {\n\tconst destinos = [\"leer una URL sin tocar nada → web_fetch\"];\n\tif (disponibles.navegador) {\n\t\tdestinos.push(\"interactuar con una web, incluida tu app en localhost → browser_*\");\n\t}\n\tdestinos.push(\"ejecutar comandos, git o mover ficheros → bash\");\n\tif (disponibles.ordenador) {\n\t\tdestinos.push(\"una aplicación de escritorio que no sea navegador ni terminal → computer_*\");\n\t}\n\treturn `Elegir herramienta: ${destinos.join(\"; \")}.`;\n}\n\n/**\n * Qué decirle al agente sobre los navegadores cuando NO tiene tools de\n * navegador.\n *\n * La política del control del ordenador impide teclear en un navegador, y su\n * mensaje de error redirige a `browser_*`. Si esas tools están apagadas, esa\n * redirección apunta al vacío y el agente se queda sin salida. Mejor decírselo\n * antes: no es que deba usar otra cosa, es que no puede hacerlo.\n */\nexport function avisoSinNavegador(): string {\n\treturn (\n\t\t\"No tienes tools de navegador en esta sesión: no puedes manejar páginas web. \" +\n\t\t\"Para leer una URL usa web_fetch. Si la tarea necesita interactuar con una web, \" +\n\t\t\"díselo al usuario en vez de intentarlo por otra vía.\"\n\t);\n}\n"]}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* La regla de elección de herramienta, en un solo sitio y construida con lo que
|
|
3
|
+
* de verdad está disponible.
|
|
4
|
+
*
|
|
5
|
+
* Antes vivía duplicada literalmente en `browser/tools.ts` y `computer/tools.ts`,
|
|
6
|
+
* y cada copia enrutaba a las cuatro familias — incluida la que su propio
|
|
7
|
+
* fichero no podía garantizar. Con el control del ordenador apagado, el prompt
|
|
8
|
+
* seguía diciendo "una aplicación de escritorio → computer_*" y esas tools no
|
|
9
|
+
* existían para el modelo. El agente las pedía, recibía un error opaco, y desde
|
|
10
|
+
* fuera parecía que "no sabe elegir herramienta".
|
|
11
|
+
*
|
|
12
|
+
* Una regla que nombra destinos inexistentes es peor que no tener regla: manda
|
|
13
|
+
* en la dirección equivocada con la autoridad del prompt de sistema.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Devuelve la línea de enrutado, omitiendo lo que no existe.
|
|
17
|
+
*
|
|
18
|
+
* `web_fetch` y `bash` van siempre porque siempre están: son el suelo del
|
|
19
|
+
* agente. Los otros dos son opcionales y cada uno tiene su interruptor.
|
|
20
|
+
*/
|
|
21
|
+
export function reglaDeEleccion(disponibles) {
|
|
22
|
+
const destinos = ["leer una URL sin tocar nada → web_fetch"];
|
|
23
|
+
if (disponibles.navegador) {
|
|
24
|
+
destinos.push("interactuar con una web, incluida tu app en localhost → browser_*");
|
|
25
|
+
}
|
|
26
|
+
destinos.push("ejecutar comandos, git o mover ficheros → bash");
|
|
27
|
+
if (disponibles.ordenador) {
|
|
28
|
+
destinos.push("una aplicación de escritorio que no sea navegador ni terminal → computer_*");
|
|
29
|
+
}
|
|
30
|
+
return `Elegir herramienta: ${destinos.join("; ")}.`;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Qué decirle al agente sobre los navegadores cuando NO tiene tools de
|
|
34
|
+
* navegador.
|
|
35
|
+
*
|
|
36
|
+
* La política del control del ordenador impide teclear en un navegador, y su
|
|
37
|
+
* mensaje de error redirige a `browser_*`. Si esas tools están apagadas, esa
|
|
38
|
+
* redirección apunta al vacío y el agente se queda sin salida. Mejor decírselo
|
|
39
|
+
* antes: no es que deba usar otra cosa, es que no puede hacerlo.
|
|
40
|
+
*/
|
|
41
|
+
export function avisoSinNavegador() {
|
|
42
|
+
return ("No tienes tools de navegador en esta sesión: no puedes manejar páginas web. " +
|
|
43
|
+
"Para leer una URL usa web_fetch. Si la tarea necesita interactuar con una web, " +
|
|
44
|
+
"díselo al usuario en vez de intentarlo por otra vía.");
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=prompt-eleccion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-eleccion.js","sourceRoot":"","sources":["../../src/core/prompt-eleccion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AASH;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,WAAgC,EAAU;IACzE,MAAM,QAAQ,GAAG,CAAC,2CAAyC,CAAC,CAAC;IAC7D,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;QAC3B,QAAQ,CAAC,IAAI,CAAC,qEAAmE,CAAC,CAAC;IACpF,CAAC;IACD,QAAQ,CAAC,IAAI,CAAC,kDAAgD,CAAC,CAAC;IAChE,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;QAC3B,QAAQ,CAAC,IAAI,CAAC,+EAA4E,CAAC,CAAC;IAC7F,CAAC;IACD,OAAO,uBAAuB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AAAA,CACrD;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,GAAW;IAC3C,OAAO,CACN,gFAA8E;QAC9E,iFAAiF;QACjF,wDAAsD,CACtD,CAAC;AAAA,CACF","sourcesContent":["/**\n * La regla de elección de herramienta, en un solo sitio y construida con lo que\n * de verdad está disponible.\n *\n * Antes vivía duplicada literalmente en `browser/tools.ts` y `computer/tools.ts`,\n * y cada copia enrutaba a las cuatro familias — incluida la que su propio\n * fichero no podía garantizar. Con el control del ordenador apagado, el prompt\n * seguía diciendo \"una aplicación de escritorio → computer_*\" y esas tools no\n * existían para el modelo. El agente las pedía, recibía un error opaco, y desde\n * fuera parecía que \"no sabe elegir herramienta\".\n *\n * Una regla que nombra destinos inexistentes es peor que no tener regla: manda\n * en la dirección equivocada con la autoridad del prompt de sistema.\n */\n\nexport interface DestinosDisponibles {\n\t/** Las tools `browser_*` están registradas. */\n\tnavegador: boolean;\n\t/** Las tools `computer_*` están registradas. */\n\tordenador: boolean;\n}\n\n/**\n * Devuelve la línea de enrutado, omitiendo lo que no existe.\n *\n * `web_fetch` y `bash` van siempre porque siempre están: son el suelo del\n * agente. Los otros dos son opcionales y cada uno tiene su interruptor.\n */\nexport function reglaDeEleccion(disponibles: DestinosDisponibles): string {\n\tconst destinos = [\"leer una URL sin tocar nada → web_fetch\"];\n\tif (disponibles.navegador) {\n\t\tdestinos.push(\"interactuar con una web, incluida tu app en localhost → browser_*\");\n\t}\n\tdestinos.push(\"ejecutar comandos, git o mover ficheros → bash\");\n\tif (disponibles.ordenador) {\n\t\tdestinos.push(\"una aplicación de escritorio que no sea navegador ni terminal → computer_*\");\n\t}\n\treturn `Elegir herramienta: ${destinos.join(\"; \")}.`;\n}\n\n/**\n * Qué decirle al agente sobre los navegadores cuando NO tiene tools de\n * navegador.\n *\n * La política del control del ordenador impide teclear en un navegador, y su\n * mensaje de error redirige a `browser_*`. Si esas tools están apagadas, esa\n * redirección apunta al vacío y el agente se queda sin salida. Mejor decírselo\n * antes: no es que deba usar otra cosa, es que no puede hacerlo.\n */\nexport function avisoSinNavegador(): string {\n\treturn (\n\t\t\"No tienes tools de navegador en esta sesión: no puedes manejar páginas web. \" +\n\t\t\"Para leer una URL usa web_fetch. Si la tarea necesita interactuar con una web, \" +\n\t\t\"díselo al usuario en vez de intentarlo por otra vía.\"\n\t);\n}\n"]}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Optimizador de prompt autónomo (Ada Intelligence Engine).
|
|
3
|
+
*
|
|
4
|
+
* Antes de procesar la petición del usuario, el sistema la analiza contra las
|
|
5
|
+
* mejores prácticas de ingeniería de prompts (basadas en las guías de Claude —
|
|
6
|
+
* claridad, contexto, ejemplos, estructura XML, rol, formato de salida, criterios
|
|
7
|
+
* de éxito, alcance) y decide:
|
|
8
|
+
*
|
|
9
|
+
* 1. CLARIFY — hay gaps de información críticos → genera preguntas de
|
|
10
|
+
* clarificación (máx. 3) para dejar el prompt sin huecos.
|
|
11
|
+
* 2. ENHANCE — la petición es suficiente → la reescribe como un prompt
|
|
12
|
+
* estructurado y sin ambigüedad.
|
|
13
|
+
*
|
|
14
|
+
* El resultado es un JSON estructurado (never free-text) para consumo fiable
|
|
15
|
+
* por la sesión, el CLI y el desktop.
|
|
16
|
+
*/
|
|
17
|
+
export type PromptOptimizerDecision = "clarify" | "enhance";
|
|
18
|
+
export interface PromptOptimizerInput {
|
|
19
|
+
/** La petición original del usuario. */
|
|
20
|
+
text: string;
|
|
21
|
+
/** Contexto disponible: proyecto, objetivo activo, mensajes recientes. */
|
|
22
|
+
context?: {
|
|
23
|
+
projectDir?: string;
|
|
24
|
+
activeGoal?: string;
|
|
25
|
+
recentMessages?: string[];
|
|
26
|
+
};
|
|
27
|
+
/** Máximo de preguntas de clarificación (default 3). */
|
|
28
|
+
maxQuestions?: number;
|
|
29
|
+
/**
|
|
30
|
+
* Modo "auto": si el LLM pide clarificar, NO preguntar al usuario —
|
|
31
|
+
* hacer una segunda pasada que fuerza un prompt mejorado con supuestos
|
|
32
|
+
* razonables (mejora sin interrumpir).
|
|
33
|
+
*/
|
|
34
|
+
forceEnhance?: boolean;
|
|
35
|
+
}
|
|
36
|
+
export interface PromptOptimizerResult {
|
|
37
|
+
decision: PromptOptimizerDecision;
|
|
38
|
+
/** Preguntas de clarificación (solo si decision === "clarify"). */
|
|
39
|
+
questions: string[];
|
|
40
|
+
/** Prompt mejorado y estructurado (solo si decision === "enhance"). */
|
|
41
|
+
enhanced: string;
|
|
42
|
+
/** Resumen breve de qué se mejoró (para mostrar al usuario). */
|
|
43
|
+
summary: string;
|
|
44
|
+
}
|
|
45
|
+
/** Callback que ejecuta una llamada LLM (inyectado por la sesión). */
|
|
46
|
+
export type PromptOptimizerComplete = (systemPrompt: string, userContent: string) => Promise<string>;
|
|
47
|
+
/**
|
|
48
|
+
* Optimiza (o solicita clarificación para) la petición del usuario.
|
|
49
|
+
* Usa el callback LLM inyectado. Nunca lanza: en fallo devuelve la petición
|
|
50
|
+
* original sin cambios con decision "enhance".
|
|
51
|
+
*/
|
|
52
|
+
export declare function optimizeUserPrompt(input: PromptOptimizerInput, complete: PromptOptimizerComplete): Promise<PromptOptimizerResult>;
|
|
53
|
+
//# sourceMappingURL=prompt-optimizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-optimizer.d.ts","sourceRoot":"","sources":["../../src/core/prompt-optimizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,SAAS,CAAC;AAE5D,MAAM,WAAW,oBAAoB;IACpC,yCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,OAAO,CAAC,EAAE;QACT,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;KAC1B,CAAC;IACF,0DAAwD;IACxD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACrC,QAAQ,EAAE,uBAAuB,CAAC;IAClC,oEAAmE;IACnE,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,uEAAuE;IACvE,QAAQ,EAAE,MAAM,CAAC;IACjB,kEAAgE;IAChE,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,uEAAsE;AACtE,MAAM,MAAM,uBAAuB,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAgCrG;;;;GAIG;AACH,wBAAsB,kBAAkB,CACvC,KAAK,EAAE,oBAAoB,EAC3B,QAAQ,EAAE,uBAAuB,GAC/B,OAAO,CAAC,qBAAqB,CAAC,CAmEhC","sourcesContent":["/**\n * Optimizador de prompt autónomo (Ada Intelligence Engine).\n *\n * Antes de procesar la petición del usuario, el sistema la analiza contra las\n * mejores prácticas de ingeniería de prompts (basadas en las guías de Claude —\n * claridad, contexto, ejemplos, estructura XML, rol, formato de salida, criterios\n * de éxito, alcance) y decide:\n *\n * 1. CLARIFY — hay gaps de información críticos → genera preguntas de\n * clarificación (máx. 3) para dejar el prompt sin huecos.\n * 2. ENHANCE — la petición es suficiente → la reescribe como un prompt\n * estructurado y sin ambigüedad.\n *\n * El resultado es un JSON estructurado (never free-text) para consumo fiable\n * por la sesión, el CLI y el desktop.\n */\n\nexport type PromptOptimizerDecision = \"clarify\" | \"enhance\";\n\nexport interface PromptOptimizerInput {\n\t/** La petición original del usuario. */\n\ttext: string;\n\t/** Contexto disponible: proyecto, objetivo activo, mensajes recientes. */\n\tcontext?: {\n\t\tprojectDir?: string;\n\t\tactiveGoal?: string;\n\t\trecentMessages?: string[];\n\t};\n\t/** Máximo de preguntas de clarificación (default 3). */\n\tmaxQuestions?: number;\n\t/**\n\t * Modo \"auto\": si el LLM pide clarificar, NO preguntar al usuario —\n\t * hacer una segunda pasada que fuerza un prompt mejorado con supuestos\n\t * razonables (mejora sin interrumpir).\n\t */\n\tforceEnhance?: boolean;\n}\n\nexport interface PromptOptimizerResult {\n\tdecision: PromptOptimizerDecision;\n\t/** Preguntas de clarificación (solo si decision === \"clarify\"). */\n\tquestions: string[];\n\t/** Prompt mejorado y estructurado (solo si decision === \"enhance\"). */\n\tenhanced: string;\n\t/** Resumen breve de qué se mejoró (para mostrar al usuario). */\n\tsummary: string;\n}\n\n/** Callback que ejecuta una llamada LLM (inyectado por la sesión). */\nexport type PromptOptimizerComplete = (systemPrompt: string, userContent: string) => Promise<string>;\n\n/** Guías de ingeniería de prompts que codifica el optimizador. */\nconst OPTIMIZER_SYSTEM_PROMPT = `Eres un experto en ingeniería de prompts. Tu trabajo es tomar la petición de un usuario y producir una versión perfecta, sin huecos, que maximice la calidad de la respuesta de cualquier modelo LLM.\n\nAplica estas mejores prácticas (basadas en las guías de referencia de Anthropic):\n\n1. CLARIDAD: sé específico sobre qué se quiere, el formato de salida deseado y las restricciones. Instrucciones como pasos numerados o bullets cuando el orden importa.\n2. CONTEXTO: añade el contexto o motivación detrás de la petición (\"por qué es importante\") para que el modelo entienda el objetivo.\n3. ROL: da al modelo un rol claro y enfocado (\"Actúa como un ingeniero de software senior especializado en X\").\n4. ESTRUCTURA XML: organiza el prompt con etiquetas descriptivas (<context>, <instructions>, <input>, <constraints>, <output_format>) para eliminar ambigüedad de parseo.\n5. EJEMPLOS: incluye 1-3 ejemplos concretos (few-shot) cuando el formato de salida no sea obvio.\n6. FORMATO DE SALIDA: especifica exactamente el formato esperado (JSON, markdown, resumen de N líneas, código con tests...).\n7. CRITERIOS DE ÉXITO: define qué constituye un resultado correcto y verificación (por ejemplo, \"ejecuta los tests antes de terminar\").\n8. ALCANCE: limita el trabajo (\"no añadas features fuera de lo pedido\", \"solo modifica estos archivos\").\n9. ACCIÓN vs SUGERENCIA: si el usuario pide un cambio, sé explícito sobre que debe IMPLEMENTARLO, no solo sugerirlo (\"Implementa X\" en vez de \"¿podrías sugerir cambios a X?\").\n10. SIN GAPS: identifica la información que falta y que cambiaría materialmente el resultado.\n\nRUTINA:\nPaso 1 — Analiza la petición del usuario contra las 10 prácticas.\nPaso 2 — Decide si hay gaps CRÍTICOS (falta de contexto, ambigüedad sobre alcance/formato/destino que cambiaría el resultado):\n - Si SÍ: decision = \"clarify\". Genera como máximo ${\"{{MAX_QUESTIONS}}\"} preguntas, cada una específica y accionable, que el usuario pueda responder en una línea. No hagas preguntas triviales.\n - Si NO (o los gaps son menores): decision = \"enhance\". Reescribe el prompt completo como un prompt estructurado y profesional, SIN preguntar nada.\nPaso 3 — summary: una frase corta (máx. 12 palabras, en el idioma del usuario) sobre lo que se mejoró (o que se necesitan aclaraciones).\n\nREGLAS DE SALIDA:\n- Responde SOLO JSON válido con esta forma exacta:\n {\"decision\":\"clarify\"|\"enhance\",\"questions\":[...],\"enhanced\":\"...\",\"summary\":\"...\"}\n- questions vacío si decision es enhance. enhanced vacío si decision es clarify.\n- Si el prompt ya es excelente, enhance puede devolverlo casi igual (solo estructura) — no inflar.\n- Preserva el idioma del usuario en el prompt mejorado y en summary.`;\n\n/**\n * Optimiza (o solicita clarificación para) la petición del usuario.\n * Usa el callback LLM inyectado. Nunca lanza: en fallo devuelve la petición\n * original sin cambios con decision \"enhance\".\n */\nexport async function optimizeUserPrompt(\n\tinput: PromptOptimizerInput,\n\tcomplete: PromptOptimizerComplete,\n): Promise<PromptOptimizerResult> {\n\tconst maxQuestions = input.maxQuestions ?? 3;\n\n\tconst userContent = [\n\t\t\"<user_request>\",\n\t\tinput.text,\n\t\t\"</user_request>\",\n\t\tinput.context?.projectDir ? `<project_dir>${input.context.projectDir}</project_dir>` : \"\",\n\t\tinput.context?.activeGoal ? `<active_goal>${input.context.activeGoal}</active_goal>` : \"\",\n\t\tinput.context?.recentMessages?.length\n\t\t\t? `<conversation_context>\\n${input.context.recentMessages.slice(-4).join(\"\\n---\\n\")}\\n</conversation_context>`\n\t\t\t: \"\",\n\t]\n\t\t.filter(Boolean)\n\t\t.join(\"\\n\");\n\n\tconst systemPrompt = OPTIMIZER_SYSTEM_PROMPT.replace(\"{{MAX_QUESTIONS}}\", String(maxQuestions));\n\n\ttry {\n\t\tconst raw = await complete(systemPrompt, userContent);\n\t\tconst parsed = parseOptimizerJson(raw);\n\t\tif (!parsed) return fallbackEnhance(input.text);\n\t\tif (parsed.decision === \"clarify\" && input.forceEnhance) {\n\t\t\t// Segunda pasada: mejorar sin preguntar (modo auto).\n\t\t\tconst forcedRaw = await complete(\n\t\t\t\tsystemPrompt,\n\t\t\t\tuserContent +\n\t\t\t\t\t\"\\n\\nIMPORTANTE: modo automático — NO hagas preguntas. \" +\n\t\t\t\t\t\"Resuelve los gaps con supuestos razonables y devuelve SOLO un \" +\n\t\t\t\t\t'prompt mejorado con decision \"enhance\".',\n\t\t\t);\n\t\t\tconst forced = parseOptimizerJson(forcedRaw);\n\t\t\tif (forced && forced.decision === \"enhance\" && typeof forced.enhanced === \"string\" && forced.enhanced.trim()) {\n\t\t\t\treturn {\n\t\t\t\t\tdecision: \"enhance\",\n\t\t\t\t\tquestions: [],\n\t\t\t\t\tenhanced: forced.enhanced.trim(),\n\t\t\t\t\tsummary: typeof forced.summary === \"string\" ? forced.summary : \"\",\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn fallbackEnhance(input.text);\n\t\t}\n\t\tif (parsed.decision === \"clarify\") {\n\t\t\tconst questions = Array.isArray(parsed.questions)\n\t\t\t\t? parsed.questions\n\t\t\t\t\t\t.filter((q): q is string => typeof q === \"string\" && q.trim().length > 0)\n\t\t\t\t\t\t.slice(0, maxQuestions)\n\t\t\t\t: [];\n\t\t\tif (questions.length === 0) return fallbackEnhance(input.text);\n\t\t\treturn {\n\t\t\t\tdecision: \"clarify\",\n\t\t\t\tquestions,\n\t\t\t\tenhanced: \"\",\n\t\t\t\tsummary: typeof parsed.summary === \"string\" && parsed.summary ? parsed.summary : \"\",\n\t\t\t};\n\t\t}\n\t\tconst enhanced =\n\t\t\ttypeof parsed.enhanced === \"string\" && parsed.enhanced.trim() ? parsed.enhanced.trim() : input.text;\n\t\treturn {\n\t\t\tdecision: \"enhance\",\n\t\t\tquestions: [],\n\t\t\tenhanced,\n\t\t\tsummary: typeof parsed.summary === \"string\" ? parsed.summary : \"\",\n\t\t};\n\t} catch {\n\t\treturn fallbackEnhance(input.text);\n\t}\n}\n\n/** Extrae JSON robusto de la salida del LLM (tolera texto alrededor y fences). */\nfunction parseOptimizerJson(raw: string): {\n\tdecision?: string;\n\tquestions?: unknown;\n\tenhanced?: unknown;\n\tsummary?: unknown;\n} | null {\n\tconst cleaned = raw\n\t\t.trim()\n\t\t.replace(/^```(?:json)?/i, \"\")\n\t\t.replace(/```$/, \"\")\n\t\t.trim();\n\t// Buscar el primer objeto JSON balanceado.\n\tconst start = cleaned.indexOf(\"{\");\n\tconst end = cleaned.lastIndexOf(\"}\");\n\tif (start === -1 || end === -1 || end <= start) return null;\n\ttry {\n\t\treturn JSON.parse(cleaned.slice(start, end + 1)) as {\n\t\t\tdecision?: string;\n\t\t\tquestions?: unknown;\n\t\t\tenhanced?: unknown;\n\t\t\tsummary?: unknown;\n\t\t};\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n/** Fallback seguro: devuelve la petición tal cual (nunca degrada la experiencia). */\nfunction fallbackEnhance(text: string): PromptOptimizerResult {\n\treturn { decision: \"enhance\", questions: [], enhanced: text, summary: \"\" };\n}\n"]}
|