@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,138 @@
|
|
|
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
|
+
/** Guías de ingeniería de prompts que codifica el optimizador. */
|
|
18
|
+
const 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.
|
|
19
|
+
|
|
20
|
+
Aplica estas mejores prácticas (basadas en las guías de referencia de Anthropic):
|
|
21
|
+
|
|
22
|
+
1. 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.
|
|
23
|
+
2. 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.
|
|
24
|
+
3. ROL: da al modelo un rol claro y enfocado ("Actúa como un ingeniero de software senior especializado en X").
|
|
25
|
+
4. ESTRUCTURA XML: organiza el prompt con etiquetas descriptivas (<context>, <instructions>, <input>, <constraints>, <output_format>) para eliminar ambigüedad de parseo.
|
|
26
|
+
5. EJEMPLOS: incluye 1-3 ejemplos concretos (few-shot) cuando el formato de salida no sea obvio.
|
|
27
|
+
6. FORMATO DE SALIDA: especifica exactamente el formato esperado (JSON, markdown, resumen de N líneas, código con tests...).
|
|
28
|
+
7. CRITERIOS DE ÉXITO: define qué constituye un resultado correcto y verificación (por ejemplo, "ejecuta los tests antes de terminar").
|
|
29
|
+
8. ALCANCE: limita el trabajo ("no añadas features fuera de lo pedido", "solo modifica estos archivos").
|
|
30
|
+
9. 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?").
|
|
31
|
+
10. SIN GAPS: identifica la información que falta y que cambiaría materialmente el resultado.
|
|
32
|
+
|
|
33
|
+
RUTINA:
|
|
34
|
+
Paso 1 — Analiza la petición del usuario contra las 10 prácticas.
|
|
35
|
+
Paso 2 — Decide si hay gaps CRÍTICOS (falta de contexto, ambigüedad sobre alcance/formato/destino que cambiaría el resultado):
|
|
36
|
+
- 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.
|
|
37
|
+
- Si NO (o los gaps son menores): decision = "enhance". Reescribe el prompt completo como un prompt estructurado y profesional, SIN preguntar nada.
|
|
38
|
+
Paso 3 — summary: una frase corta (máx. 12 palabras, en el idioma del usuario) sobre lo que se mejoró (o que se necesitan aclaraciones).
|
|
39
|
+
|
|
40
|
+
REGLAS DE SALIDA:
|
|
41
|
+
- Responde SOLO JSON válido con esta forma exacta:
|
|
42
|
+
{"decision":"clarify"|"enhance","questions":[...],"enhanced":"...","summary":"..."}
|
|
43
|
+
- questions vacío si decision es enhance. enhanced vacío si decision es clarify.
|
|
44
|
+
- Si el prompt ya es excelente, enhance puede devolverlo casi igual (solo estructura) — no inflar.
|
|
45
|
+
- Preserva el idioma del usuario en el prompt mejorado y en summary.`;
|
|
46
|
+
/**
|
|
47
|
+
* Optimiza (o solicita clarificación para) la petición del usuario.
|
|
48
|
+
* Usa el callback LLM inyectado. Nunca lanza: en fallo devuelve la petición
|
|
49
|
+
* original sin cambios con decision "enhance".
|
|
50
|
+
*/
|
|
51
|
+
export async function optimizeUserPrompt(input, complete) {
|
|
52
|
+
const maxQuestions = input.maxQuestions ?? 3;
|
|
53
|
+
const userContent = [
|
|
54
|
+
"<user_request>",
|
|
55
|
+
input.text,
|
|
56
|
+
"</user_request>",
|
|
57
|
+
input.context?.projectDir ? `<project_dir>${input.context.projectDir}</project_dir>` : "",
|
|
58
|
+
input.context?.activeGoal ? `<active_goal>${input.context.activeGoal}</active_goal>` : "",
|
|
59
|
+
input.context?.recentMessages?.length
|
|
60
|
+
? `<conversation_context>\n${input.context.recentMessages.slice(-4).join("\n---\n")}\n</conversation_context>`
|
|
61
|
+
: "",
|
|
62
|
+
]
|
|
63
|
+
.filter(Boolean)
|
|
64
|
+
.join("\n");
|
|
65
|
+
const systemPrompt = OPTIMIZER_SYSTEM_PROMPT.replace("{{MAX_QUESTIONS}}", String(maxQuestions));
|
|
66
|
+
try {
|
|
67
|
+
const raw = await complete(systemPrompt, userContent);
|
|
68
|
+
const parsed = parseOptimizerJson(raw);
|
|
69
|
+
if (!parsed)
|
|
70
|
+
return fallbackEnhance(input.text);
|
|
71
|
+
if (parsed.decision === "clarify" && input.forceEnhance) {
|
|
72
|
+
// Segunda pasada: mejorar sin preguntar (modo auto).
|
|
73
|
+
const forcedRaw = await complete(systemPrompt, userContent +
|
|
74
|
+
"\n\nIMPORTANTE: modo automático — NO hagas preguntas. " +
|
|
75
|
+
"Resuelve los gaps con supuestos razonables y devuelve SOLO un " +
|
|
76
|
+
'prompt mejorado con decision "enhance".');
|
|
77
|
+
const forced = parseOptimizerJson(forcedRaw);
|
|
78
|
+
if (forced && forced.decision === "enhance" && typeof forced.enhanced === "string" && forced.enhanced.trim()) {
|
|
79
|
+
return {
|
|
80
|
+
decision: "enhance",
|
|
81
|
+
questions: [],
|
|
82
|
+
enhanced: forced.enhanced.trim(),
|
|
83
|
+
summary: typeof forced.summary === "string" ? forced.summary : "",
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
return fallbackEnhance(input.text);
|
|
87
|
+
}
|
|
88
|
+
if (parsed.decision === "clarify") {
|
|
89
|
+
const questions = Array.isArray(parsed.questions)
|
|
90
|
+
? parsed.questions
|
|
91
|
+
.filter((q) => typeof q === "string" && q.trim().length > 0)
|
|
92
|
+
.slice(0, maxQuestions)
|
|
93
|
+
: [];
|
|
94
|
+
if (questions.length === 0)
|
|
95
|
+
return fallbackEnhance(input.text);
|
|
96
|
+
return {
|
|
97
|
+
decision: "clarify",
|
|
98
|
+
questions,
|
|
99
|
+
enhanced: "",
|
|
100
|
+
summary: typeof parsed.summary === "string" && parsed.summary ? parsed.summary : "",
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
const enhanced = typeof parsed.enhanced === "string" && parsed.enhanced.trim() ? parsed.enhanced.trim() : input.text;
|
|
104
|
+
return {
|
|
105
|
+
decision: "enhance",
|
|
106
|
+
questions: [],
|
|
107
|
+
enhanced,
|
|
108
|
+
summary: typeof parsed.summary === "string" ? parsed.summary : "",
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
return fallbackEnhance(input.text);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/** Extrae JSON robusto de la salida del LLM (tolera texto alrededor y fences). */
|
|
116
|
+
function parseOptimizerJson(raw) {
|
|
117
|
+
const cleaned = raw
|
|
118
|
+
.trim()
|
|
119
|
+
.replace(/^```(?:json)?/i, "")
|
|
120
|
+
.replace(/```$/, "")
|
|
121
|
+
.trim();
|
|
122
|
+
// Buscar el primer objeto JSON balanceado.
|
|
123
|
+
const start = cleaned.indexOf("{");
|
|
124
|
+
const end = cleaned.lastIndexOf("}");
|
|
125
|
+
if (start === -1 || end === -1 || end <= start)
|
|
126
|
+
return null;
|
|
127
|
+
try {
|
|
128
|
+
return JSON.parse(cleaned.slice(start, end + 1));
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/** Fallback seguro: devuelve la petición tal cual (nunca degrada la experiencia). */
|
|
135
|
+
function fallbackEnhance(text) {
|
|
136
|
+
return { decision: "enhance", questions: [], enhanced: text, summary: "" };
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=prompt-optimizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-optimizer.js","sourceRoot":"","sources":["../../src/core/prompt-optimizer.ts"],"names":[],"mappings":"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","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"]}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Monta el prompt del sistema desde `sistema.md`.
|
|
3
|
+
*
|
|
4
|
+
* DE DÓNDE VIENE ESTO. El prompt de Ada era una cadena dentro de
|
|
5
|
+
* `system-prompt.ts` con dos directrices —«Be concise» y «Show file paths
|
|
6
|
+
* clearly»— más un bloque sobre dónde vive la documentación de Ada. Es decir:
|
|
7
|
+
* le explicábamos al modelo dónde están NUESTROS documentos y no le
|
|
8
|
+
* explicábamos cómo programar bien.
|
|
9
|
+
*
|
|
10
|
+
* Y había un dato peor, medido: de las TRECE capacidades construidas en cuatro
|
|
11
|
+
* tandas de trabajo (`lsp`, `ast_edit`, `hashline`, `remoto`, `web_search`,
|
|
12
|
+
* `computer`, `browser`, `audit`, `banco`, `cleanse`, `discover`, `review`,
|
|
13
|
+
* `ast_search`), **ninguna aparecía en el prompt**. De nuestras tools, solo UNA
|
|
14
|
+
* definía `promptSnippet`. El modelo veía el nombre y nada más: ni cuándo usar
|
|
15
|
+
* `lsp_references` antes de renombrar, ni que `ast_edit` es para codemods.
|
|
16
|
+
*
|
|
17
|
+
* Es capacidad construida y desenchufada en su forma más difícil de ver: la
|
|
18
|
+
* herramienta está registrada, así que NADA FALLA. Solo hay un agente peor de
|
|
19
|
+
* lo que debería, sin error que investigar.
|
|
20
|
+
*
|
|
21
|
+
* DOS DECISIONES QUE NO SON DE ESTILO:
|
|
22
|
+
*
|
|
23
|
+
* 1. **Si falta el `.md`, se LANZA.** Un `catch` que devolviera cadena vacía
|
|
24
|
+
* dejaría al agente sin prompt del sistema —sin doctrina, sin contrato de
|
|
25
|
+
* entrega, sin las reglas de cumplimiento— y arrancaría igual. Sería el
|
|
26
|
+
* fallo que se lee como éxito en el sitio más caro posible. Como `dist/` es
|
|
27
|
+
* superficie ciega para vitest (las pruebas leen `src/`, el paquete
|
|
28
|
+
* publicado lee `dist/`), esto además convierte un `copy-assets` olvidado en
|
|
29
|
+
* un arranque roto y visible en vez de en un agente silenciosamente tonto.
|
|
30
|
+
*
|
|
31
|
+
* 2. **Los nombres de herramienta salen del registro, no de la plantilla.** Si
|
|
32
|
+
* alguien renombra `ast_search`, la línea del prompt que lo menciona se
|
|
33
|
+
* queda mintiendo, y un prompt que nombra una tool inexistente le enseña al
|
|
34
|
+
* modelo a desconfiar de sus instrucciones. Aquí la lista se construye desde
|
|
35
|
+
* los nombres reales que recibe `montarPromptDelSistema`.
|
|
36
|
+
*/
|
|
37
|
+
import { type Contexto } from "./plantilla.ts";
|
|
38
|
+
/** Qué sabe el montador sobre la sesión. Todo opcional salvo las tools. */
|
|
39
|
+
export interface EntradaDelPrompt {
|
|
40
|
+
/** Los nombres de tool REALES y activos de esta sesión. */
|
|
41
|
+
nombresDeHerramienta: readonly string[];
|
|
42
|
+
/** Frases de una línea por tool, si la tool las aporta. */
|
|
43
|
+
frasesDeHerramienta?: Readonly<Record<string, string>>;
|
|
44
|
+
personalidad?: string;
|
|
45
|
+
/**
|
|
46
|
+
* `true` cuando la política de aprobación está en modo plan.
|
|
47
|
+
*
|
|
48
|
+
* Existe porque el modo plan estaba impuesto SOLO en código: `decidir()`
|
|
49
|
+
* devuelve `denegada` con política `modo-plan` para toda escritura y toda
|
|
50
|
+
* ejecución, y el prompt no lo mencionaba. El modelo intentaba editar, se
|
|
51
|
+
* llevaba un rechazo que no esperaba, y gastaba turnos aprendiendo por
|
|
52
|
+
* golpes una regla que se le podía haber dicho: el guardián estaba
|
|
53
|
+
* construido y el modelo no lo conocía.
|
|
54
|
+
*/
|
|
55
|
+
modoPlan?: boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Tools que el usuario ha denegado (`permissions.denied`).
|
|
58
|
+
*
|
|
59
|
+
* No es lo mismo que «no activa»: una tool denegada SIGUE en el inventario y
|
|
60
|
+
* en el conjunto activo, y lo que la para es `decidir()`, que consulta el
|
|
61
|
+
* `deny` del usuario en el paso 3 —antes del modo— y contesta `denegada` con
|
|
62
|
+
* política `deny-de-usuario`. Filtrar solo por `nivelDe` dejaba a la sección
|
|
63
|
+
* de modo plan prometiendo, por ejemplo, `web_fetch` con `permissions.denied:
|
|
64
|
+
* ["web_fetch"]` en settings: el rechazo inesperado que esta sección existe
|
|
65
|
+
* para evitar, servido por la propia sección.
|
|
66
|
+
*/
|
|
67
|
+
toolsDenegadas?: readonly string[];
|
|
68
|
+
}
|
|
69
|
+
/** El contexto que ve la plantilla. Público porque las pruebas lo comprueban. */
|
|
70
|
+
export declare function contextoDelPrompt(entrada: EntradaDelPrompt): Contexto;
|
|
71
|
+
/** Solo para pruebas: olvida la plantilla cacheada. */
|
|
72
|
+
export declare function __olvidarPlantillaParaPruebas(): void;
|
|
73
|
+
/** El prompt del sistema de Ada, con las secciones que la sesión merece. */
|
|
74
|
+
export declare function montarPromptDelSistema(entrada: EntradaDelPrompt): string;
|
|
75
|
+
//# sourceMappingURL=montar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"montar.d.ts","sourceRoot":"","sources":["../../../src/core/prompts/montar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAMH,OAAO,EAAE,KAAK,QAAQ,EAAc,MAAM,gBAAgB,CAAC;AAI3D,6EAA2E;AAC3E,MAAM,WAAW,gBAAgB;IAChC,4DAA2D;IAC3D,oBAAoB,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,4DAA2D;IAC3D,mBAAmB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAgDD,kFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,GAAG,QAAQ,CAgCrE;AAsBD,uDAAuD;AACvD,wBAAgB,6BAA6B,IAAI,IAAI,CAEpD;AAED,6EAA4E;AAC5E,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAIxE","sourcesContent":["/**\n * Monta el prompt del sistema desde `sistema.md`.\n *\n * DE DÓNDE VIENE ESTO. El prompt de Ada era una cadena dentro de\n * `system-prompt.ts` con dos directrices —«Be concise» y «Show file paths\n * clearly»— más un bloque sobre dónde vive la documentación de Ada. Es decir:\n * le explicábamos al modelo dónde están NUESTROS documentos y no le\n * explicábamos cómo programar bien.\n *\n * Y había un dato peor, medido: de las TRECE capacidades construidas en cuatro\n * tandas de trabajo (`lsp`, `ast_edit`, `hashline`, `remoto`, `web_search`,\n * `computer`, `browser`, `audit`, `banco`, `cleanse`, `discover`, `review`,\n * `ast_search`), **ninguna aparecía en el prompt**. De nuestras tools, solo UNA\n * definía `promptSnippet`. El modelo veía el nombre y nada más: ni cuándo usar\n * `lsp_references` antes de renombrar, ni que `ast_edit` es para codemods.\n *\n * Es capacidad construida y desenchufada en su forma más difícil de ver: la\n * herramienta está registrada, así que NADA FALLA. Solo hay un agente peor de\n * lo que debería, sin error que investigar.\n *\n * DOS DECISIONES QUE NO SON DE ESTILO:\n *\n * 1. **Si falta el `.md`, se LANZA.** Un `catch` que devolviera cadena vacía\n * dejaría al agente sin prompt del sistema —sin doctrina, sin contrato de\n * entrega, sin las reglas de cumplimiento— y arrancaría igual. Sería el\n * fallo que se lee como éxito en el sitio más caro posible. Como `dist/` es\n * superficie ciega para vitest (las pruebas leen `src/`, el paquete\n * publicado lee `dist/`), esto además convierte un `copy-assets` olvidado en\n * un arranque roto y visible en vez de en un agente silenciosamente tonto.\n *\n * 2. **Los nombres de herramienta salen del registro, no de la plantilla.** Si\n * alguien renombra `ast_search`, la línea del prompt que lo menciona se\n * queda mintiendo, y un prompt que nombra una tool inexistente le enseña al\n * modelo a desconfiar de sus instrucciones. Aquí la lista se construye desde\n * los nombres reales que recibe `montarPromptDelSistema`.\n */\n\nimport { readFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { nivelDe } from \"../aprobacion/politica.ts\";\nimport { type Contexto, renderizar } from \"./plantilla.ts\";\n\nconst NOMBRE = \"sistema.md\";\n\n/** Qué sabe el montador sobre la sesión. Todo opcional salvo las tools. */\nexport interface EntradaDelPrompt {\n\t/** Los nombres de tool REALES y activos de esta sesión. */\n\tnombresDeHerramienta: readonly string[];\n\t/** Frases de una línea por tool, si la tool las aporta. */\n\tfrasesDeHerramienta?: Readonly<Record<string, string>>;\n\tpersonalidad?: string;\n\t/**\n\t * `true` cuando la política de aprobación está en modo plan.\n\t *\n\t * Existe porque el modo plan estaba impuesto SOLO en código: `decidir()`\n\t * devuelve `denegada` con política `modo-plan` para toda escritura y toda\n\t * ejecución, y el prompt no lo mencionaba. El modelo intentaba editar, se\n\t * llevaba un rechazo que no esperaba, y gastaba turnos aprendiendo por\n\t * golpes una regla que se le podía haber dicho: el guardián estaba\n\t * construido y el modelo no lo conocía.\n\t */\n\tmodoPlan?: boolean;\n\t/**\n\t * Tools que el usuario ha denegado (`permissions.denied`).\n\t *\n\t * No es lo mismo que «no activa»: una tool denegada SIGUE en el inventario y\n\t * en el conjunto activo, y lo que la para es `decidir()`, que consulta el\n\t * `deny` del usuario en el paso 3 —antes del modo— y contesta `denegada` con\n\t * política `deny-de-usuario`. Filtrar solo por `nivelDe` dejaba a la sección\n\t * de modo plan prometiendo, por ejemplo, `web_fetch` con `permissions.denied:\n\t * [\"web_fetch\"]` en settings: el rechazo inesperado que esta sección existe\n\t * para evitar, servido por la propia sección.\n\t */\n\ttoolsDenegadas?: readonly string[];\n}\n\n/**\n * Una línea por herramienta especializada, construida desde los nombres reales.\n *\n * Solo se listan las que el modelo confunde con `bash` — es donde la guía paga.\n * Enumerar `read` junto a veinte más diluye las que importan.\n */\nconst GUIA: ReadonlyArray<{ tool: string; linea: (n: string) => string }> = [\n\t{ tool: \"read\", linea: (n) => `File and directory reads → \\`${n}\\`, never \\`cat\\` or \\`ls\\` through the shell.` },\n\t{ tool: \"grep\", linea: (n) => `Regex search → \\`${n}\\`, never shell \\`grep\\`, \\`rg\\` or \\`awk\\`.` },\n\t{ tool: \"find\", linea: (n) => `Locating files by name or glob → \\`${n}\\`, never \\`find\\` or \\`fd\\`.` },\n\t{ tool: \"edit\", linea: (n) => `Surgical edits → \\`${n}\\`. Never rewrite a whole file to change a few lines.` },\n\t{ tool: \"write\", linea: (n) => `Creating or fully replacing a file → \\`${n}\\`.` },\n\t{\n\t\ttool: \"web_search\",\n\t\tlinea: (n) => `Anything you do not know and cannot read locally → \\`${n}\\`. Do not guess an API from memory.`,\n\t},\n];\n\n/**\n * La línea del modo plan que dice qué tools SIGUEN valiendo.\n *\n * Los nombres salen del conjunto REAL de tools activas filtrado por `nivelDe`,\n * el mismo clasificador que usa la política de aprobación: si alguien mueve una\n * tool de `LECTURA` a `ESCRITURA`, esta línea se mueve con ella. Escribirlos a\n * mano en la plantilla sería prometerle al modelo tools que quizá no tiene, y\n * un prompt que nombra una tool inexistente le enseña a desconfiar de sus\n * instrucciones.\n *\n * El filtro son las DOS condiciones que `decidir()` aplica antes de dejar pasar\n * una lectura en modo plan: nivel de lectura (paso 4) y no estar en el `deny`\n * del usuario (paso 3). Con solo la primera, `permissions.denied: [\"web_fetch\"]`\n * dejaba la línea prometiendo `web_fetch`.\n *\n * El caso vacío (`ada-cli --tools bash` en modo plan) no es decorativo: ahí el\n * agente no puede ni leer, y decirlo es mejor que dejar una lista en blanco que\n * el modelo interpretará como que puede con todo. Se calcula aquí en vez de con\n * un `{{#si}}` dentro del `{{#si modoPlan}}` porque anidar dos bloques del\n * mismo tipo borraba el resto de la sección en silencio (ver `plantilla.ts`).\n */\nfunction lineaDePlan(lectura: readonly string[]): string {\n\tif (lectura.length === 0) {\n\t\treturn \"No read-only tool is active in this session, so you cannot investigate either. Say exactly that and stop.\";\n\t}\n\treturn `Still available in this mode: ${lectura.map((n) => `\\`${n}\\``).join(\", \")}. Nothing else is.`;\n}\n\n/** El contexto que ve la plantilla. Público porque las pruebas lo comprueban. */\nexport function contextoDelPrompt(entrada: EntradaDelPrompt): Contexto {\n\tconst activas = new Set(entrada.nombresDeHerramienta);\n\tconst denegadas = new Set(entrada.toolsDenegadas ?? []);\n\tconst tiene = (prefijo: string) => [...activas].some((n) => n === prefijo || n.startsWith(`${prefijo}_`));\n\n\tconst herramientas: string[] = [];\n\tfor (const { tool, linea } of GUIA) {\n\t\tif (activas.has(tool)) herramientas.push(linea(tool));\n\t}\n\t// Y las que aportan su propia frase, que nadie más conoce.\n\tfor (const [nombre, frase] of Object.entries(entrada.frasesDeHerramienta ?? {})) {\n\t\tif (activas.has(nombre) && !GUIA.some((g) => g.tool === nombre)) {\n\t\t\therramientas.push(`\\`${nombre}\\`: ${frase}`);\n\t\t}\n\t}\n\n\treturn {\n\t\therramientas,\n\t\tpersonalidad: entrada.personalidad,\n\t\tmodoPlan: entrada.modoPlan === true,\n\t\tlineaHerramientasDePlan: lineaDePlan(\n\t\t\t[...activas].filter((n) => nivelDe(n) === \"lectura\" && !denegadas.has(n)).sort(),\n\t\t),\n\t\ttieneLsp: tiene(\"lsp\"),\n\t\ttieneEstructural: activas.has(\"ast_search\") || activas.has(\"ast_edit\"),\n\t\ttieneBash: activas.has(\"bash\"),\n\t\ttieneNavegador: tiene(\"browser\"),\n\t\ttieneEscritorio: tiene(\"computer\"),\n\t\t// El libro de auditoría no es una tool: es una propiedad del arnés, y\n\t\t// siempre está. Se declara explícito para que la plantilla no adivine.\n\t\ttieneAudit: true,\n\t};\n}\n\nlet cacheDeLaPlantilla: string | undefined;\n\n/** Lee `sistema.md` de junto a este módulo. Lanza si no está. */\nfunction leerPlantilla(): string {\n\tif (cacheDeLaPlantilla !== undefined) return cacheDeLaPlantilla;\n\tconst ruta = join(dirname(fileURLToPath(import.meta.url)), NOMBRE);\n\ttry {\n\t\tcacheDeLaPlantilla = readFileSync(ruta, \"utf-8\");\n\t} catch (error) {\n\t\tthrow new Error(\n\t\t\t`No se ha podido leer el prompt del sistema (${ruta}).\\n` +\n\t\t\t\t\"Arrancar sin él dejaría al agente sin doctrina, sin contrato de entrega y sin\\n\" +\n\t\t\t\t\"las reglas de cumplimiento, y lo haría en silencio. Si esto sale desde el\\n\" +\n\t\t\t\t\"paquete compilado, falta el paso `copy-assets` que lleva los .md a dist/.\\n\" +\n\t\t\t\t`Causa: ${error instanceof Error ? error.message : String(error)}`,\n\t\t);\n\t}\n\treturn cacheDeLaPlantilla;\n}\n\n/** Solo para pruebas: olvida la plantilla cacheada. */\nexport function __olvidarPlantillaParaPruebas(): void {\n\tcacheDeLaPlantilla = undefined;\n}\n\n/** El prompt del sistema de Ada, con las secciones que la sesión merece. */\nexport function montarPromptDelSistema(entrada: EntradaDelPrompt): string {\n\treturn renderizar(leerPlantilla(), contextoDelPrompt(entrada), NOMBRE)\n\t\t.replace(/\\n{3,}/g, \"\\n\\n\")\n\t\t.trim();\n}\n"]}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Monta el prompt del sistema desde `sistema.md`.
|
|
3
|
+
*
|
|
4
|
+
* DE DÓNDE VIENE ESTO. El prompt de Ada era una cadena dentro de
|
|
5
|
+
* `system-prompt.ts` con dos directrices —«Be concise» y «Show file paths
|
|
6
|
+
* clearly»— más un bloque sobre dónde vive la documentación de Ada. Es decir:
|
|
7
|
+
* le explicábamos al modelo dónde están NUESTROS documentos y no le
|
|
8
|
+
* explicábamos cómo programar bien.
|
|
9
|
+
*
|
|
10
|
+
* Y había un dato peor, medido: de las TRECE capacidades construidas en cuatro
|
|
11
|
+
* tandas de trabajo (`lsp`, `ast_edit`, `hashline`, `remoto`, `web_search`,
|
|
12
|
+
* `computer`, `browser`, `audit`, `banco`, `cleanse`, `discover`, `review`,
|
|
13
|
+
* `ast_search`), **ninguna aparecía en el prompt**. De nuestras tools, solo UNA
|
|
14
|
+
* definía `promptSnippet`. El modelo veía el nombre y nada más: ni cuándo usar
|
|
15
|
+
* `lsp_references` antes de renombrar, ni que `ast_edit` es para codemods.
|
|
16
|
+
*
|
|
17
|
+
* Es capacidad construida y desenchufada en su forma más difícil de ver: la
|
|
18
|
+
* herramienta está registrada, así que NADA FALLA. Solo hay un agente peor de
|
|
19
|
+
* lo que debería, sin error que investigar.
|
|
20
|
+
*
|
|
21
|
+
* DOS DECISIONES QUE NO SON DE ESTILO:
|
|
22
|
+
*
|
|
23
|
+
* 1. **Si falta el `.md`, se LANZA.** Un `catch` que devolviera cadena vacía
|
|
24
|
+
* dejaría al agente sin prompt del sistema —sin doctrina, sin contrato de
|
|
25
|
+
* entrega, sin las reglas de cumplimiento— y arrancaría igual. Sería el
|
|
26
|
+
* fallo que se lee como éxito en el sitio más caro posible. Como `dist/` es
|
|
27
|
+
* superficie ciega para vitest (las pruebas leen `src/`, el paquete
|
|
28
|
+
* publicado lee `dist/`), esto además convierte un `copy-assets` olvidado en
|
|
29
|
+
* un arranque roto y visible en vez de en un agente silenciosamente tonto.
|
|
30
|
+
*
|
|
31
|
+
* 2. **Los nombres de herramienta salen del registro, no de la plantilla.** Si
|
|
32
|
+
* alguien renombra `ast_search`, la línea del prompt que lo menciona se
|
|
33
|
+
* queda mintiendo, y un prompt que nombra una tool inexistente le enseña al
|
|
34
|
+
* modelo a desconfiar de sus instrucciones. Aquí la lista se construye desde
|
|
35
|
+
* los nombres reales que recibe `montarPromptDelSistema`.
|
|
36
|
+
*/
|
|
37
|
+
import { readFileSync } from "node:fs";
|
|
38
|
+
import { dirname, join } from "node:path";
|
|
39
|
+
import { fileURLToPath } from "node:url";
|
|
40
|
+
import { nivelDe } from "../aprobacion/politica.js";
|
|
41
|
+
import { renderizar } from "./plantilla.js";
|
|
42
|
+
const NOMBRE = "sistema.md";
|
|
43
|
+
/**
|
|
44
|
+
* Una línea por herramienta especializada, construida desde los nombres reales.
|
|
45
|
+
*
|
|
46
|
+
* Solo se listan las que el modelo confunde con `bash` — es donde la guía paga.
|
|
47
|
+
* Enumerar `read` junto a veinte más diluye las que importan.
|
|
48
|
+
*/
|
|
49
|
+
const GUIA = [
|
|
50
|
+
{ tool: "read", linea: (n) => `File and directory reads → \`${n}\`, never \`cat\` or \`ls\` through the shell.` },
|
|
51
|
+
{ tool: "grep", linea: (n) => `Regex search → \`${n}\`, never shell \`grep\`, \`rg\` or \`awk\`.` },
|
|
52
|
+
{ tool: "find", linea: (n) => `Locating files by name or glob → \`${n}\`, never \`find\` or \`fd\`.` },
|
|
53
|
+
{ tool: "edit", linea: (n) => `Surgical edits → \`${n}\`. Never rewrite a whole file to change a few lines.` },
|
|
54
|
+
{ tool: "write", linea: (n) => `Creating or fully replacing a file → \`${n}\`.` },
|
|
55
|
+
{
|
|
56
|
+
tool: "web_search",
|
|
57
|
+
linea: (n) => `Anything you do not know and cannot read locally → \`${n}\`. Do not guess an API from memory.`,
|
|
58
|
+
},
|
|
59
|
+
];
|
|
60
|
+
/**
|
|
61
|
+
* La línea del modo plan que dice qué tools SIGUEN valiendo.
|
|
62
|
+
*
|
|
63
|
+
* Los nombres salen del conjunto REAL de tools activas filtrado por `nivelDe`,
|
|
64
|
+
* el mismo clasificador que usa la política de aprobación: si alguien mueve una
|
|
65
|
+
* tool de `LECTURA` a `ESCRITURA`, esta línea se mueve con ella. Escribirlos a
|
|
66
|
+
* mano en la plantilla sería prometerle al modelo tools que quizá no tiene, y
|
|
67
|
+
* un prompt que nombra una tool inexistente le enseña a desconfiar de sus
|
|
68
|
+
* instrucciones.
|
|
69
|
+
*
|
|
70
|
+
* El filtro son las DOS condiciones que `decidir()` aplica antes de dejar pasar
|
|
71
|
+
* una lectura en modo plan: nivel de lectura (paso 4) y no estar en el `deny`
|
|
72
|
+
* del usuario (paso 3). Con solo la primera, `permissions.denied: ["web_fetch"]`
|
|
73
|
+
* dejaba la línea prometiendo `web_fetch`.
|
|
74
|
+
*
|
|
75
|
+
* El caso vacío (`ada-cli --tools bash` en modo plan) no es decorativo: ahí el
|
|
76
|
+
* agente no puede ni leer, y decirlo es mejor que dejar una lista en blanco que
|
|
77
|
+
* el modelo interpretará como que puede con todo. Se calcula aquí en vez de con
|
|
78
|
+
* un `{{#si}}` dentro del `{{#si modoPlan}}` porque anidar dos bloques del
|
|
79
|
+
* mismo tipo borraba el resto de la sección en silencio (ver `plantilla.ts`).
|
|
80
|
+
*/
|
|
81
|
+
function lineaDePlan(lectura) {
|
|
82
|
+
if (lectura.length === 0) {
|
|
83
|
+
return "No read-only tool is active in this session, so you cannot investigate either. Say exactly that and stop.";
|
|
84
|
+
}
|
|
85
|
+
return `Still available in this mode: ${lectura.map((n) => `\`${n}\``).join(", ")}. Nothing else is.`;
|
|
86
|
+
}
|
|
87
|
+
/** El contexto que ve la plantilla. Público porque las pruebas lo comprueban. */
|
|
88
|
+
export function contextoDelPrompt(entrada) {
|
|
89
|
+
const activas = new Set(entrada.nombresDeHerramienta);
|
|
90
|
+
const denegadas = new Set(entrada.toolsDenegadas ?? []);
|
|
91
|
+
const tiene = (prefijo) => [...activas].some((n) => n === prefijo || n.startsWith(`${prefijo}_`));
|
|
92
|
+
const herramientas = [];
|
|
93
|
+
for (const { tool, linea } of GUIA) {
|
|
94
|
+
if (activas.has(tool))
|
|
95
|
+
herramientas.push(linea(tool));
|
|
96
|
+
}
|
|
97
|
+
// Y las que aportan su propia frase, que nadie más conoce.
|
|
98
|
+
for (const [nombre, frase] of Object.entries(entrada.frasesDeHerramienta ?? {})) {
|
|
99
|
+
if (activas.has(nombre) && !GUIA.some((g) => g.tool === nombre)) {
|
|
100
|
+
herramientas.push(`\`${nombre}\`: ${frase}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return {
|
|
104
|
+
herramientas,
|
|
105
|
+
personalidad: entrada.personalidad,
|
|
106
|
+
modoPlan: entrada.modoPlan === true,
|
|
107
|
+
lineaHerramientasDePlan: lineaDePlan([...activas].filter((n) => nivelDe(n) === "lectura" && !denegadas.has(n)).sort()),
|
|
108
|
+
tieneLsp: tiene("lsp"),
|
|
109
|
+
tieneEstructural: activas.has("ast_search") || activas.has("ast_edit"),
|
|
110
|
+
tieneBash: activas.has("bash"),
|
|
111
|
+
tieneNavegador: tiene("browser"),
|
|
112
|
+
tieneEscritorio: tiene("computer"),
|
|
113
|
+
// El libro de auditoría no es una tool: es una propiedad del arnés, y
|
|
114
|
+
// siempre está. Se declara explícito para que la plantilla no adivine.
|
|
115
|
+
tieneAudit: true,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
let cacheDeLaPlantilla;
|
|
119
|
+
/** Lee `sistema.md` de junto a este módulo. Lanza si no está. */
|
|
120
|
+
function leerPlantilla() {
|
|
121
|
+
if (cacheDeLaPlantilla !== undefined)
|
|
122
|
+
return cacheDeLaPlantilla;
|
|
123
|
+
const ruta = join(dirname(fileURLToPath(import.meta.url)), NOMBRE);
|
|
124
|
+
try {
|
|
125
|
+
cacheDeLaPlantilla = readFileSync(ruta, "utf-8");
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
throw new Error(`No se ha podido leer el prompt del sistema (${ruta}).\n` +
|
|
129
|
+
"Arrancar sin él dejaría al agente sin doctrina, sin contrato de entrega y sin\n" +
|
|
130
|
+
"las reglas de cumplimiento, y lo haría en silencio. Si esto sale desde el\n" +
|
|
131
|
+
"paquete compilado, falta el paso `copy-assets` que lleva los .md a dist/.\n" +
|
|
132
|
+
`Causa: ${error instanceof Error ? error.message : String(error)}`);
|
|
133
|
+
}
|
|
134
|
+
return cacheDeLaPlantilla;
|
|
135
|
+
}
|
|
136
|
+
/** Solo para pruebas: olvida la plantilla cacheada. */
|
|
137
|
+
export function __olvidarPlantillaParaPruebas() {
|
|
138
|
+
cacheDeLaPlantilla = undefined;
|
|
139
|
+
}
|
|
140
|
+
/** El prompt del sistema de Ada, con las secciones que la sesión merece. */
|
|
141
|
+
export function montarPromptDelSistema(entrada) {
|
|
142
|
+
return renderizar(leerPlantilla(), contextoDelPrompt(entrada), NOMBRE)
|
|
143
|
+
.replace(/\n{3,}/g, "\n\n")
|
|
144
|
+
.trim();
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=montar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"montar.js","sourceRoot":"","sources":["../../../src/core/prompts/montar.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Monta el prompt del sistema desde `sistema.md`.\n *\n * DE DÓNDE VIENE ESTO. El prompt de Ada era una cadena dentro de\n * `system-prompt.ts` con dos directrices —«Be concise» y «Show file paths\n * clearly»— más un bloque sobre dónde vive la documentación de Ada. Es decir:\n * le explicábamos al modelo dónde están NUESTROS documentos y no le\n * explicábamos cómo programar bien.\n *\n * Y había un dato peor, medido: de las TRECE capacidades construidas en cuatro\n * tandas de trabajo (`lsp`, `ast_edit`, `hashline`, `remoto`, `web_search`,\n * `computer`, `browser`, `audit`, `banco`, `cleanse`, `discover`, `review`,\n * `ast_search`), **ninguna aparecía en el prompt**. De nuestras tools, solo UNA\n * definía `promptSnippet`. El modelo veía el nombre y nada más: ni cuándo usar\n * `lsp_references` antes de renombrar, ni que `ast_edit` es para codemods.\n *\n * Es capacidad construida y desenchufada en su forma más difícil de ver: la\n * herramienta está registrada, así que NADA FALLA. Solo hay un agente peor de\n * lo que debería, sin error que investigar.\n *\n * DOS DECISIONES QUE NO SON DE ESTILO:\n *\n * 1. **Si falta el `.md`, se LANZA.** Un `catch` que devolviera cadena vacía\n * dejaría al agente sin prompt del sistema —sin doctrina, sin contrato de\n * entrega, sin las reglas de cumplimiento— y arrancaría igual. Sería el\n * fallo que se lee como éxito en el sitio más caro posible. Como `dist/` es\n * superficie ciega para vitest (las pruebas leen `src/`, el paquete\n * publicado lee `dist/`), esto además convierte un `copy-assets` olvidado en\n * un arranque roto y visible en vez de en un agente silenciosamente tonto.\n *\n * 2. **Los nombres de herramienta salen del registro, no de la plantilla.** Si\n * alguien renombra `ast_search`, la línea del prompt que lo menciona se\n * queda mintiendo, y un prompt que nombra una tool inexistente le enseña al\n * modelo a desconfiar de sus instrucciones. Aquí la lista se construye desde\n * los nombres reales que recibe `montarPromptDelSistema`.\n */\n\nimport { readFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { nivelDe } from \"../aprobacion/politica.ts\";\nimport { type Contexto, renderizar } from \"./plantilla.ts\";\n\nconst NOMBRE = \"sistema.md\";\n\n/** Qué sabe el montador sobre la sesión. Todo opcional salvo las tools. */\nexport interface EntradaDelPrompt {\n\t/** Los nombres de tool REALES y activos de esta sesión. */\n\tnombresDeHerramienta: readonly string[];\n\t/** Frases de una línea por tool, si la tool las aporta. */\n\tfrasesDeHerramienta?: Readonly<Record<string, string>>;\n\tpersonalidad?: string;\n\t/**\n\t * `true` cuando la política de aprobación está en modo plan.\n\t *\n\t * Existe porque el modo plan estaba impuesto SOLO en código: `decidir()`\n\t * devuelve `denegada` con política `modo-plan` para toda escritura y toda\n\t * ejecución, y el prompt no lo mencionaba. El modelo intentaba editar, se\n\t * llevaba un rechazo que no esperaba, y gastaba turnos aprendiendo por\n\t * golpes una regla que se le podía haber dicho: el guardián estaba\n\t * construido y el modelo no lo conocía.\n\t */\n\tmodoPlan?: boolean;\n\t/**\n\t * Tools que el usuario ha denegado (`permissions.denied`).\n\t *\n\t * No es lo mismo que «no activa»: una tool denegada SIGUE en el inventario y\n\t * en el conjunto activo, y lo que la para es `decidir()`, que consulta el\n\t * `deny` del usuario en el paso 3 —antes del modo— y contesta `denegada` con\n\t * política `deny-de-usuario`. Filtrar solo por `nivelDe` dejaba a la sección\n\t * de modo plan prometiendo, por ejemplo, `web_fetch` con `permissions.denied:\n\t * [\"web_fetch\"]` en settings: el rechazo inesperado que esta sección existe\n\t * para evitar, servido por la propia sección.\n\t */\n\ttoolsDenegadas?: readonly string[];\n}\n\n/**\n * Una línea por herramienta especializada, construida desde los nombres reales.\n *\n * Solo se listan las que el modelo confunde con `bash` — es donde la guía paga.\n * Enumerar `read` junto a veinte más diluye las que importan.\n */\nconst GUIA: ReadonlyArray<{ tool: string; linea: (n: string) => string }> = [\n\t{ tool: \"read\", linea: (n) => `File and directory reads → \\`${n}\\`, never \\`cat\\` or \\`ls\\` through the shell.` },\n\t{ tool: \"grep\", linea: (n) => `Regex search → \\`${n}\\`, never shell \\`grep\\`, \\`rg\\` or \\`awk\\`.` },\n\t{ tool: \"find\", linea: (n) => `Locating files by name or glob → \\`${n}\\`, never \\`find\\` or \\`fd\\`.` },\n\t{ tool: \"edit\", linea: (n) => `Surgical edits → \\`${n}\\`. Never rewrite a whole file to change a few lines.` },\n\t{ tool: \"write\", linea: (n) => `Creating or fully replacing a file → \\`${n}\\`.` },\n\t{\n\t\ttool: \"web_search\",\n\t\tlinea: (n) => `Anything you do not know and cannot read locally → \\`${n}\\`. Do not guess an API from memory.`,\n\t},\n];\n\n/**\n * La línea del modo plan que dice qué tools SIGUEN valiendo.\n *\n * Los nombres salen del conjunto REAL de tools activas filtrado por `nivelDe`,\n * el mismo clasificador que usa la política de aprobación: si alguien mueve una\n * tool de `LECTURA` a `ESCRITURA`, esta línea se mueve con ella. Escribirlos a\n * mano en la plantilla sería prometerle al modelo tools que quizá no tiene, y\n * un prompt que nombra una tool inexistente le enseña a desconfiar de sus\n * instrucciones.\n *\n * El filtro son las DOS condiciones que `decidir()` aplica antes de dejar pasar\n * una lectura en modo plan: nivel de lectura (paso 4) y no estar en el `deny`\n * del usuario (paso 3). Con solo la primera, `permissions.denied: [\"web_fetch\"]`\n * dejaba la línea prometiendo `web_fetch`.\n *\n * El caso vacío (`ada-cli --tools bash` en modo plan) no es decorativo: ahí el\n * agente no puede ni leer, y decirlo es mejor que dejar una lista en blanco que\n * el modelo interpretará como que puede con todo. Se calcula aquí en vez de con\n * un `{{#si}}` dentro del `{{#si modoPlan}}` porque anidar dos bloques del\n * mismo tipo borraba el resto de la sección en silencio (ver `plantilla.ts`).\n */\nfunction lineaDePlan(lectura: readonly string[]): string {\n\tif (lectura.length === 0) {\n\t\treturn \"No read-only tool is active in this session, so you cannot investigate either. Say exactly that and stop.\";\n\t}\n\treturn `Still available in this mode: ${lectura.map((n) => `\\`${n}\\``).join(\", \")}. Nothing else is.`;\n}\n\n/** El contexto que ve la plantilla. Público porque las pruebas lo comprueban. */\nexport function contextoDelPrompt(entrada: EntradaDelPrompt): Contexto {\n\tconst activas = new Set(entrada.nombresDeHerramienta);\n\tconst denegadas = new Set(entrada.toolsDenegadas ?? []);\n\tconst tiene = (prefijo: string) => [...activas].some((n) => n === prefijo || n.startsWith(`${prefijo}_`));\n\n\tconst herramientas: string[] = [];\n\tfor (const { tool, linea } of GUIA) {\n\t\tif (activas.has(tool)) herramientas.push(linea(tool));\n\t}\n\t// Y las que aportan su propia frase, que nadie más conoce.\n\tfor (const [nombre, frase] of Object.entries(entrada.frasesDeHerramienta ?? {})) {\n\t\tif (activas.has(nombre) && !GUIA.some((g) => g.tool === nombre)) {\n\t\t\therramientas.push(`\\`${nombre}\\`: ${frase}`);\n\t\t}\n\t}\n\n\treturn {\n\t\therramientas,\n\t\tpersonalidad: entrada.personalidad,\n\t\tmodoPlan: entrada.modoPlan === true,\n\t\tlineaHerramientasDePlan: lineaDePlan(\n\t\t\t[...activas].filter((n) => nivelDe(n) === \"lectura\" && !denegadas.has(n)).sort(),\n\t\t),\n\t\ttieneLsp: tiene(\"lsp\"),\n\t\ttieneEstructural: activas.has(\"ast_search\") || activas.has(\"ast_edit\"),\n\t\ttieneBash: activas.has(\"bash\"),\n\t\ttieneNavegador: tiene(\"browser\"),\n\t\ttieneEscritorio: tiene(\"computer\"),\n\t\t// El libro de auditoría no es una tool: es una propiedad del arnés, y\n\t\t// siempre está. Se declara explícito para que la plantilla no adivine.\n\t\ttieneAudit: true,\n\t};\n}\n\nlet cacheDeLaPlantilla: string | undefined;\n\n/** Lee `sistema.md` de junto a este módulo. Lanza si no está. */\nfunction leerPlantilla(): string {\n\tif (cacheDeLaPlantilla !== undefined) return cacheDeLaPlantilla;\n\tconst ruta = join(dirname(fileURLToPath(import.meta.url)), NOMBRE);\n\ttry {\n\t\tcacheDeLaPlantilla = readFileSync(ruta, \"utf-8\");\n\t} catch (error) {\n\t\tthrow new Error(\n\t\t\t`No se ha podido leer el prompt del sistema (${ruta}).\\n` +\n\t\t\t\t\"Arrancar sin él dejaría al agente sin doctrina, sin contrato de entrega y sin\\n\" +\n\t\t\t\t\"las reglas de cumplimiento, y lo haría en silencio. Si esto sale desde el\\n\" +\n\t\t\t\t\"paquete compilado, falta el paso `copy-assets` que lleva los .md a dist/.\\n\" +\n\t\t\t\t`Causa: ${error instanceof Error ? error.message : String(error)}`,\n\t\t);\n\t}\n\treturn cacheDeLaPlantilla;\n}\n\n/** Solo para pruebas: olvida la plantilla cacheada. */\nexport function __olvidarPlantillaParaPruebas(): void {\n\tcacheDeLaPlantilla = undefined;\n}\n\n/** El prompt del sistema de Ada, con las secciones que la sesión merece. */\nexport function montarPromptDelSistema(entrada: EntradaDelPrompt): string {\n\treturn renderizar(leerPlantilla(), contextoDelPrompt(entrada), NOMBRE)\n\t\t.replace(/\\n{3,}/g, \"\\n\\n\")\n\t\t.trim();\n}\n"]}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Motor de plantillas mínimo para los prompts de Ada.
|
|
3
|
+
*
|
|
4
|
+
* POR QUÉ EXISTE. Nuestro prompt del sistema era una cadena dentro de
|
|
5
|
+
* `system-prompt.ts` con dos directrices («sé conciso», «enseña las rutas») y
|
|
6
|
+
* un bloque fijo sobre dónde está la documentación de Ada. oh-my-pi tiene 3.379
|
|
7
|
+
* líneas de prompt en ~40 ficheros `.md` montadas con condicionales, y esa
|
|
8
|
+
* diferencia se nota: cada sección suya existe SOLO si la capacidad de la que
|
|
9
|
+
* habla está disponible.
|
|
10
|
+
*
|
|
11
|
+
* Eso es lo que hay que copiar. Un prompt que explica el LSP a un agente sin
|
|
12
|
+
* LSP no es solo ruido: le enseña a pedir algo que no existe, y cuando falla el
|
|
13
|
+
* modelo aprende a desconfiar de sus propias instrucciones.
|
|
14
|
+
*
|
|
15
|
+
* POR QUÉ PROPIO Y NO HANDLEBARS. Son ~130 líneas frente a una dependencia
|
|
16
|
+
* nueva con su puerta de versión clavada, su `npm-shrinkwrap` y su superficie.
|
|
17
|
+
* Y necesitamos una cosa que Handlebars NO hace por defecto y que aquí es
|
|
18
|
+
* innegociable: fallar ante lo desconocido.
|
|
19
|
+
*
|
|
20
|
+
* LA DECISIÓN QUE IMPORTA. Una variable no declarada LANZA. No se sustituye por
|
|
21
|
+
* cadena vacía.
|
|
22
|
+
*
|
|
23
|
+
* Es la lección de esta casa aplicada al prompt: una sustitución vacía en
|
|
24
|
+
* silencio es «no lo he mirado» leído como «no hay». Un `{{herramientas}}` mal
|
|
25
|
+
* escrito borraría el inventario entero de tools del prompt, el agente perdería
|
|
26
|
+
* la mitad de sus capacidades y nadie vería un error — solo un agente
|
|
27
|
+
* misteriosamente peor. Con un `throw` te enteras al arrancar, y hay prueba.
|
|
28
|
+
*/
|
|
29
|
+
/** Lo que se le pasa a una plantilla. Nada más existe dentro. */
|
|
30
|
+
export interface Contexto {
|
|
31
|
+
[clave: string]: string | number | boolean | null | undefined | readonly Contexto[] | readonly string[];
|
|
32
|
+
}
|
|
33
|
+
/** Un fallo de plantilla es un fallo de programación, no del usuario. */
|
|
34
|
+
export declare class ErrorDePlantilla extends Error {
|
|
35
|
+
readonly nombreDeLaPlantilla?: string;
|
|
36
|
+
constructor(mensaje: string, nombreDeLaPlantilla?: string);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Renderiza `plantilla` con `contexto`.
|
|
40
|
+
*
|
|
41
|
+
* Directivas, en español como todo lo nuestro:
|
|
42
|
+
*
|
|
43
|
+
* {{clave}} sustitución; LANZA si `clave` no está declarada
|
|
44
|
+
* {{#si clave}}…{{/si}} solo si es verdadera
|
|
45
|
+
* {{#noSi clave}}…{{/noSi}} solo si es falsa — para el «no tienes X, haz Y»
|
|
46
|
+
* {{#cada lista}}…{{/cada}} una vez por elemento; dentro, `{{esto}}` es el
|
|
47
|
+
* elemento si es cadena, y sus campos si es objeto
|
|
48
|
+
*
|
|
49
|
+
* Anidar un bloque dentro de otro del MISMO tipo LANZA, y eso es una guarda, no
|
|
50
|
+
* una nota: en cuanto un prompt necesita eso, lo que necesita de verdad es
|
|
51
|
+
* precalcular el trozo variable en el contexto o partirse en dos ficheros.
|
|
52
|
+
*/
|
|
53
|
+
export declare function renderizar(plantilla: string, contexto: Contexto, nombre?: string): string;
|
|
54
|
+
//# sourceMappingURL=plantilla.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plantilla.d.ts","sourceRoot":"","sources":["../../../src/core/prompts/plantilla.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,kEAAiE;AACjE,MAAM,WAAW,QAAQ;IACxB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS,QAAQ,EAAE,GAAG,SAAS,MAAM,EAAE,CAAC;CACxG;AAED,0EAAyE;AACzE,qBAAa,gBAAiB,SAAQ,KAAK;IAI1C,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAEtC,YAAY,OAAO,EAAE,MAAM,EAAE,mBAAmB,CAAC,EAAE,MAAM,EAIxD;CACD;AAiBD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAgEzF","sourcesContent":["/**\n * Motor de plantillas mínimo para los prompts de Ada.\n *\n * POR QUÉ EXISTE. Nuestro prompt del sistema era una cadena dentro de\n * `system-prompt.ts` con dos directrices («sé conciso», «enseña las rutas») y\n * un bloque fijo sobre dónde está la documentación de Ada. oh-my-pi tiene 3.379\n * líneas de prompt en ~40 ficheros `.md` montadas con condicionales, y esa\n * diferencia se nota: cada sección suya existe SOLO si la capacidad de la que\n * habla está disponible.\n *\n * Eso es lo que hay que copiar. Un prompt que explica el LSP a un agente sin\n * LSP no es solo ruido: le enseña a pedir algo que no existe, y cuando falla el\n * modelo aprende a desconfiar de sus propias instrucciones.\n *\n * POR QUÉ PROPIO Y NO HANDLEBARS. Son ~130 líneas frente a una dependencia\n * nueva con su puerta de versión clavada, su `npm-shrinkwrap` y su superficie.\n * Y necesitamos una cosa que Handlebars NO hace por defecto y que aquí es\n * innegociable: fallar ante lo desconocido.\n *\n * LA DECISIÓN QUE IMPORTA. Una variable no declarada LANZA. No se sustituye por\n * cadena vacía.\n *\n * Es la lección de esta casa aplicada al prompt: una sustitución vacía en\n * silencio es «no lo he mirado» leído como «no hay». Un `{{herramientas}}` mal\n * escrito borraría el inventario entero de tools del prompt, el agente perdería\n * la mitad de sus capacidades y nadie vería un error — solo un agente\n * misteriosamente peor. Con un `throw` te enteras al arrancar, y hay prueba.\n */\n\n/** Lo que se le pasa a una plantilla. Nada más existe dentro. */\nexport interface Contexto {\n\t[clave: string]: string | number | boolean | null | undefined | readonly Contexto[] | readonly string[];\n}\n\n/** Un fallo de plantilla es un fallo de programación, no del usuario. */\nexport class ErrorDePlantilla extends Error {\n\t// Campo declarado y asignado en el cuerpo, no en la firma: el proyecto va con\n\t// `erasableSyntaxOnly`, que prohíbe las propiedades de constructor porque no\n\t// se pueden borrar con solo quitar los tipos.\n\treadonly nombreDeLaPlantilla?: string;\n\n\tconstructor(mensaje: string, nombreDeLaPlantilla?: string) {\n\t\tsuper(nombreDeLaPlantilla ? `${nombreDeLaPlantilla}: ${mensaje}` : mensaje);\n\t\tthis.name = \"ErrorDePlantilla\";\n\t\tthis.nombreDeLaPlantilla = nombreDeLaPlantilla;\n\t}\n}\n\n/** Falso, cadena vacía, cero, lista vacía y ausente. Todo lo demás es cierto. */\nfunction esVerdadero(valor: unknown): boolean {\n\tif (valor === undefined || valor === null || valor === false) return false;\n\tif (valor === \"\" || valor === 0) return false;\n\tif (Array.isArray(valor)) return valor.length > 0;\n\treturn true;\n}\n\nfunction aTexto(valor: unknown): string {\n\tif (valor === undefined || valor === null) return \"\";\n\treturn String(valor);\n}\n\nconst APERTURA = /\\{\\{#(si|noSi|cada)\\s+([A-Za-z0-9_.]+)\\s*\\}\\}/;\n\n/**\n * Renderiza `plantilla` con `contexto`.\n *\n * Directivas, en español como todo lo nuestro:\n *\n * {{clave}} sustitución; LANZA si `clave` no está declarada\n * {{#si clave}}…{{/si}} solo si es verdadera\n * {{#noSi clave}}…{{/noSi}} solo si es falsa — para el «no tienes X, haz Y»\n * {{#cada lista}}…{{/cada}} una vez por elemento; dentro, `{{esto}}` es el\n * elemento si es cadena, y sus campos si es objeto\n *\n * Anidar un bloque dentro de otro del MISMO tipo LANZA, y eso es una guarda, no\n * una nota: en cuanto un prompt necesita eso, lo que necesita de verdad es\n * precalcular el trozo variable en el contexto o partirse en dos ficheros.\n */\nexport function renderizar(plantilla: string, contexto: Contexto, nombre?: string): string {\n\tlet texto = plantilla;\n\n\t// Bloques primero: dentro pueden vivir sustituciones que solo existen ahí.\n\tlet guarda = 0;\n\twhile (true) {\n\t\tif (++guarda > 500) throw new ErrorDePlantilla(\"demasiados bloques anidados o sin cerrar\", nombre);\n\t\tconst apertura = texto.match(APERTURA);\n\t\tif (!apertura || apertura.index === undefined) break;\n\t\tconst [etiqueta, tipo, clave] = apertura;\n\t\tconst cierre = `{{/${tipo}}}`;\n\t\tconst inicioCuerpo = apertura.index + etiqueta.length;\n\t\tconst inicioCierre = texto.indexOf(cierre, inicioCuerpo);\n\t\tif (inicioCierre === -1) {\n\t\t\tthrow new ErrorDePlantilla(`bloque {{#${tipo} ${clave}}} sin su ${cierre}`, nombre);\n\t\t}\n\t\t// Anidar dos bloques del MISMO tipo estaba «no soportado» solo en el\n\t\t// comentario de la cabecera, y el resultado era una precondición escrita\n\t\t// en un comentario: nadie la imponía y se rompió a la primera. Medido con\n\t\t// `{{#si a}}A1{{#si b}}B{{/si}}A2{{/si}}` y b falso, esto rendía \"A1\" —el\n\t\t// `{{/si}}` interior cerraba el bloque exterior y A2 desaparecía sin\n\t\t// error. En un prompt eso borra media sección y deja al modelo sin la\n\t\t// regla, que es el fallo que se lee como éxito en el sitio más caro.\n\t\tconst dentro = texto.slice(inicioCuerpo, inicioCierre);\n\t\tconst anidado = dentro.match(new RegExp(`\\\\{\\\\{#${tipo}\\\\s`));\n\t\tif (anidado) {\n\t\t\tthrow new ErrorDePlantilla(\n\t\t\t\t`{{#${tipo} ${clave}}} contiene otro {{#${tipo}}} antes de su ${cierre}. ` +\n\t\t\t\t\t\"Anidar dos bloques del mismo tipo NO está soportado: el cierre interior \" +\n\t\t\t\t\t\"cerraría el exterior y el resto de la sección desaparecería en silencio. \" +\n\t\t\t\t\t\"Precalcula el trozo variable en el contexto, o parte la plantilla en dos.\",\n\t\t\t\tnombre,\n\t\t\t);\n\t\t}\n\t\tconst cuerpo = dentro;\n\t\tconst valor = leer(contexto, clave, nombre);\n\n\t\tlet sustitucion: string;\n\t\tif (tipo === \"si\") {\n\t\t\tsustitucion = esVerdadero(valor) ? cuerpo : \"\";\n\t\t} else if (tipo === \"noSi\") {\n\t\t\tsustitucion = esVerdadero(valor) ? \"\" : cuerpo;\n\t\t} else {\n\t\t\tif (!Array.isArray(valor)) {\n\t\t\t\tthrow new ErrorDePlantilla(\n\t\t\t\t\t`{{#cada ${clave}}} necesita una lista, y \"${clave}\" es ${typeof valor}`,\n\t\t\t\t\tnombre,\n\t\t\t\t);\n\t\t\t}\n\t\t\tsustitucion = valor\n\t\t\t\t.map((elemento) =>\n\t\t\t\t\trenderizar(\n\t\t\t\t\t\tcuerpo,\n\t\t\t\t\t\ttypeof elemento === \"string\" ? { esto: elemento } : { ...elemento, esto: \"\" },\n\t\t\t\t\t\tnombre,\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t\t.join(\"\");\n\t\t}\n\t\ttexto = texto.slice(0, apertura.index) + sustitucion + texto.slice(inicioCierre + cierre.length);\n\t}\n\n\t// Y ahora las sustituciones sueltas.\n\treturn texto.replace(/\\{\\{([A-Za-z0-9_.]+)\\}\\}/g, (_todo, clave: string) => aTexto(leer(contexto, clave, nombre)));\n}\n\n/**\n * Lee `clave` del contexto. LANZA si no está DECLARADA.\n *\n * Declarada y `undefined` es válido —significa «esta capacidad no está»— y\n * rinde vacío o falso. Lo que no vale es que la clave no exista: eso es una\n * errata en la plantilla, y borrar una sección del prompt por una errata es\n * exactamente el fallo que este módulo existe para no tener.\n */\nfunction leer(contexto: Contexto, clave: string, nombre?: string): unknown {\n\tconst partes = clave.split(\".\");\n\tlet actual: unknown = contexto;\n\tfor (const parte of partes) {\n\t\tif (actual === null || actual === undefined) return undefined;\n\t\tif (typeof actual !== \"object\") {\n\t\t\tthrow new ErrorDePlantilla(`\"${clave}\" atraviesa \"${parte}\", que no es un objeto`, nombre);\n\t\t}\n\t\tif (!(parte in (actual as Record<string, unknown>))) {\n\t\t\tconst disponibles = Object.keys(actual as Record<string, unknown>)\n\t\t\t\t.sort()\n\t\t\t\t.join(\", \");\n\t\t\tthrow new ErrorDePlantilla(\n\t\t\t\t`\"${clave}\" no está declarada (falta \"${parte}\"). Declaradas: ${disponibles || \"ninguna\"}`,\n\t\t\t\tnombre,\n\t\t\t);\n\t\t}\n\t\tactual = (actual as Record<string, unknown>)[parte];\n\t}\n\treturn actual;\n}\n"]}
|