@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,412 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Puente entre nuestras tools y el motor forkeado.
|
|
3
|
+
*
|
|
4
|
+
* Sustituye al driver anterior, que hablaba por CLI con `open-computer-use`.
|
|
5
|
+
* Aquel motor tenía seis acciones y le faltaban las dos que importan: esperar a
|
|
6
|
+
* que algo cambie, y buscar dentro de la interfaz. Sin espera se actúa sobre
|
|
7
|
+
* ventanas que aún no están listas — el fallo que apareció al probarlo contra
|
|
8
|
+
* TextEdit, donde la escritura se dio por buena y el fichero quedó vacío.
|
|
9
|
+
*
|
|
10
|
+
* El modelo del motor nuevo trae una garantía que antes no teníamos: **para
|
|
11
|
+
* actuar hace falta el `lookId` de una observación previa**. Nuestra guía "lee
|
|
12
|
+
* antes de pulsar" deja de ser un consejo en el prompt y pasa a ser un
|
|
13
|
+
* requisito que el motor impone. Actuar sobre estado viejo ya no compila.
|
|
14
|
+
*
|
|
15
|
+
* Aquí NO vive ninguna regla de permisos: eso es `politica.ts`, y lo aplica
|
|
16
|
+
* `tools.ts` antes de llamar a nada de esto.
|
|
17
|
+
*/
|
|
18
|
+
import { countOutlineNodes, foldToBudget, nodeByRef } from "./motor/outline.js";
|
|
19
|
+
import { currentPlatformBackend } from "./motor/platform/index.js";
|
|
20
|
+
import { macosHelper } from "./motor/platform/macos/helper.js";
|
|
21
|
+
import { scoreWindow } from "./motor/root-selection.js";
|
|
22
|
+
let arrancado = false;
|
|
23
|
+
/**
|
|
24
|
+
* Arranca el demonio nativo si hace falta.
|
|
25
|
+
*
|
|
26
|
+
* Es idempotente y se llama antes de cada operación: el demonio puede haberse
|
|
27
|
+
* caído entre dos acciones, y descubrirlo con un ENOENT de socket es peor que
|
|
28
|
+
* volver a levantarlo.
|
|
29
|
+
*/
|
|
30
|
+
export async function asegurarMotor() {
|
|
31
|
+
if (process.platform !== "darwin")
|
|
32
|
+
return;
|
|
33
|
+
if (arrancado)
|
|
34
|
+
return;
|
|
35
|
+
await macosHelper.ensureInstalled();
|
|
36
|
+
await macosHelper.ensureDaemon();
|
|
37
|
+
arrancado = true;
|
|
38
|
+
}
|
|
39
|
+
export async function listarApps(signal) {
|
|
40
|
+
await asegurarMotor();
|
|
41
|
+
const apps = await currentPlatformBackend.listApps(signal);
|
|
42
|
+
return apps.map((a) => ({
|
|
43
|
+
nombre: a.appName ?? a.bundleId ?? "(sin nombre)",
|
|
44
|
+
bundleId: a.bundleId,
|
|
45
|
+
pid: a.pid,
|
|
46
|
+
}));
|
|
47
|
+
}
|
|
48
|
+
export async function appEnPrimerPlano(signal) {
|
|
49
|
+
await asegurarMotor();
|
|
50
|
+
const f = (await currentPlatformBackend.getFrontmost(signal));
|
|
51
|
+
return { nombre: f.appName ?? "(desconocida)", bundleId: f.bundleId, pid: f.pid };
|
|
52
|
+
}
|
|
53
|
+
/** Localiza el pid de una aplicación por su nombre. */
|
|
54
|
+
export async function pidDe(nombreApp, signal) {
|
|
55
|
+
const apps = await listarApps(signal);
|
|
56
|
+
const buscado = nombreApp.trim().toLowerCase();
|
|
57
|
+
return apps.find((a) => a.nombre.trim().toLowerCase() === buscado)?.pid;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Por qué una aplicación viva no enseña ninguna ventana.
|
|
61
|
+
*
|
|
62
|
+
* Hay dos motivos y se parecen desde fuera: o de verdad no tiene ventanas, o
|
|
63
|
+
* macOS nos está negando la Accesibilidad y por eso el árbol llega vacío.
|
|
64
|
+
*
|
|
65
|
+
* Distinguirlos no es cosmético. Se descubrió probándolo: con los permisos sin
|
|
66
|
+
* conceder, `computer_read` sobre TextEdit —que estaba abierto y salía en la
|
|
67
|
+
* lista de aplicaciones— contestaba "no tiene ninguna ventana abierta". Un
|
|
68
|
+
* agente que lea eso intentará ABRIR una ventana, que no arregla nada. El error
|
|
69
|
+
* no solo era inútil: empujaba en la dirección contraria.
|
|
70
|
+
*
|
|
71
|
+
* Solo se pregunta al fallar, no en cada observación: el diagnóstico cuesta una
|
|
72
|
+
* ida y vuelta al helper y el caso normal es que haya ventanas.
|
|
73
|
+
*/
|
|
74
|
+
async function porQueNoHayVentanas(pid, signal) {
|
|
75
|
+
const sinVentanas = `El proceso ${pid} no tiene ninguna ventana abierta. Puede estar en segundo plano o minimizado.`;
|
|
76
|
+
if (process.platform !== "darwin")
|
|
77
|
+
return sinVentanas;
|
|
78
|
+
try {
|
|
79
|
+
const d = (await macosHelper.diagnosticsCommand(signal));
|
|
80
|
+
if (d.accessibility === true)
|
|
81
|
+
return sinVentanas;
|
|
82
|
+
return (`macOS está negando el permiso de Accesibilidad, así que no se puede leer la interfaz de ninguna ` +
|
|
83
|
+
`aplicación (el proceso ${pid} sí está vivo). Concédelo con 'ada-cli computer permissions', o en ` +
|
|
84
|
+
`Ajustes del Sistema → Privacidad y seguridad → Accesibilidad.`);
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
// Si ni el diagnóstico contesta, no se inventa un motivo.
|
|
88
|
+
return sinVentanas;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Traduce un fallo de captura a algo accionable.
|
|
93
|
+
*
|
|
94
|
+
* Leer una ventana necesita LOS DOS permisos, no solo Accesibilidad: el motor
|
|
95
|
+
* captura para situar los elementos. Con la Accesibilidad concedida y la
|
|
96
|
+
* Grabación de pantalla no, macOS devuelve "El usuario ha rechazado las
|
|
97
|
+
* preferencias de TCC para la captura…" — que dice la causa y ningún remedio, y
|
|
98
|
+
* además contradice lo que el usuario acaba de hacer (conceder un permiso).
|
|
99
|
+
*
|
|
100
|
+
* Se detecta por el texto porque es lo que hay: el error llega como cadena del
|
|
101
|
+
* sistema, traducida al idioma del Mac. Por eso se buscan las dos palabras que
|
|
102
|
+
* no cambian de forma —TCC y capture/captura— en vez de una frase entera.
|
|
103
|
+
*/
|
|
104
|
+
function explicarFalloDeCaptura(error) {
|
|
105
|
+
const mensaje = error instanceof Error ? error.message : String(error);
|
|
106
|
+
const esTcc = /\bTCC\b/i.test(mensaje) || /captur/i.test(mensaje);
|
|
107
|
+
if (!esTcc)
|
|
108
|
+
return mensaje;
|
|
109
|
+
return (`${mensaje}\n\n` +
|
|
110
|
+
`Leer una ventana necesita TAMBIÉN el permiso de Grabación de pantalla, no solo el de ` +
|
|
111
|
+
`Accesibilidad: el motor captura la pantalla para situar los elementos. Ábrelo con ` +
|
|
112
|
+
`'ada-cli computer permissions' y, después de concederlo, 'ada-cli computer recheck' — ` +
|
|
113
|
+
`macOS cachea los permisos por proceso y hasta que el motor no se reinicie seguirá creyendo ` +
|
|
114
|
+
`que no lo tiene.`);
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Observa una ventana y devuelve la observación con la que se puede actuar.
|
|
118
|
+
*
|
|
119
|
+
* `readText: "auto"` deja al motor decidir cuánto texto trae: pedir siempre
|
|
120
|
+
* todo el texto de una ventana grande llena el contexto de ruido, y no pedirlo
|
|
121
|
+
* nunca obliga a una segunda llamada para cada etiqueta.
|
|
122
|
+
*/
|
|
123
|
+
export async function observar(pid, opciones = {}) {
|
|
124
|
+
await asegurarMotor();
|
|
125
|
+
// Hay que resolver la VENTANA primero. Observar por pid a secas falla con
|
|
126
|
+
// "Root is not owned by a running app": un proceso puede tener cero, una o
|
|
127
|
+
// diez ventanas, y el motor necesita saber cuál.
|
|
128
|
+
const raices = await currentPlatformBackend.listRoots({ pid }, opciones.signal);
|
|
129
|
+
if (raices.length === 0)
|
|
130
|
+
throw new Error(await porQueNoHayVentanas(pid, opciones.signal));
|
|
131
|
+
// Estar minimizada se FILTRA, no se puntúa. Es una precondición, no una
|
|
132
|
+
// preferencia: una ventana minimizada no se puede observar en absoluto.
|
|
133
|
+
//
|
|
134
|
+
// Esto no es teórico. `scoreWindow` (del propio motor) da +180 a `isModal`,
|
|
135
|
+
// más que a todo lo demás junto, y las ventanas de TextEdit se declaran
|
|
136
|
+
// `AXDialog` → modales. Resultado con TextEdit abierto: una ventana
|
|
137
|
+
// minimizada ganaba a la única usable, y el motor contestaba "Root is not
|
|
138
|
+
// owned by a running app" — que no menciona ni ventanas ni minimizado. El
|
|
139
|
+
// propio `root-selection.ts` avisa de la trampa: "AXDialog can describe a
|
|
140
|
+
// background main window, so modality alone is insufficient".
|
|
141
|
+
//
|
|
142
|
+
// Entre las que SÍ sirven, `scoreWindow` ordena bien: foco, principal, en
|
|
143
|
+
// pantalla. Ahí sí es preferencia.
|
|
144
|
+
const usables = raices.filter((r) => !r.isMinimized);
|
|
145
|
+
const [raiz] = (usables.length > 0 ? usables : raices).sort((a, b) => scoreWindow(b) - scoreWindow(a));
|
|
146
|
+
if (usables.length === 0) {
|
|
147
|
+
// Todas minimizadas: es un estado del que el agente PUEDE salir, pero solo
|
|
148
|
+
// si se lo dicen. El error del motor no lo menciona.
|
|
149
|
+
const cuales = raices
|
|
150
|
+
.map((r) => `"${r.title}"`)
|
|
151
|
+
.slice(0, 5)
|
|
152
|
+
.join(", ");
|
|
153
|
+
throw new Error(`Todas las ventanas de este proceso están minimizadas (${cuales}), y una ventana minimizada no se puede leer. ` +
|
|
154
|
+
`Pídele al usuario que la restaure, o abre la aplicación desde el Dock.`);
|
|
155
|
+
}
|
|
156
|
+
let r;
|
|
157
|
+
try {
|
|
158
|
+
r = (await currentPlatformBackend.observe({
|
|
159
|
+
target: { pid, windowId: raiz.windowId },
|
|
160
|
+
readText: "auto",
|
|
161
|
+
scopeRef: opciones.scopeRef,
|
|
162
|
+
includeImage: opciones.conImagen === true,
|
|
163
|
+
}, { signal: opciones.signal, timeoutMs: opciones.timeoutMs }));
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
throw new Error(explicarFalloDeCaptura(error));
|
|
167
|
+
}
|
|
168
|
+
// `outline` NO es texto: es el árbol, con referencias al padre en cada nodo.
|
|
169
|
+
// Un `JSON.stringify` revienta con "circular structure" — y solo revienta
|
|
170
|
+
// cuando hay permisos, porque sin ellos nunca se llega hasta aquí.
|
|
171
|
+
//
|
|
172
|
+
// El motor trae su propio renderizador, `foldToBudget`, que además PLIEGA:
|
|
173
|
+
// una ventana real tiene miles de nodos y volcarlos todos llenaría el
|
|
174
|
+
// contexto de ruido dejando lo importante enterrado. Se despliega lo que
|
|
175
|
+
// tiene el foco y lo accionable, se pliega el resto.
|
|
176
|
+
// `parsedOutline` es el árbol INDEXADO (con el mapa de referencias); `outline`
|
|
177
|
+
// a secas es solo el nodo raíz, que no basta para plegar. El backend lo rellena
|
|
178
|
+
// al parsear la respuesta del helper.
|
|
179
|
+
const arbol = r.parsedOutline;
|
|
180
|
+
return {
|
|
181
|
+
lookId: r.lookId ?? "",
|
|
182
|
+
pid,
|
|
183
|
+
titulo: raiz.title,
|
|
184
|
+
resumen: arbol ? foldToBudget(arbol).text : "(el motor no devolvió ningún árbol)",
|
|
185
|
+
elementos: countOutlineNodes(r.outline),
|
|
186
|
+
arbol,
|
|
187
|
+
imagen: r.image ? { datos: r.image.jpegBase64, mimeType: r.image.mimeType ?? "image/jpeg" } : undefined,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Actúa sobre una observación.
|
|
192
|
+
*
|
|
193
|
+
* Exige el `lookId`: el motor rechaza actuar sobre una observación que ya no
|
|
194
|
+
* refleja la pantalla. Eso convierte en imposible el fallo de escribir en una
|
|
195
|
+
* ventana que se cerró en medio.
|
|
196
|
+
*/
|
|
197
|
+
export async function actuar(observacion, accion, opciones = {}) {
|
|
198
|
+
await asegurarMotor();
|
|
199
|
+
// Tipado explícito y SIN casts: es la única comprobación automática de que
|
|
200
|
+
// los nombres de acción que enviamos existen de verdad en el motor. El
|
|
201
|
+
// `screenshot` fantasma del motor anterior sobrevivió a las pruebas porque
|
|
202
|
+
// aquella llamada iba por texto libre; aquí un nombre inventado no compila.
|
|
203
|
+
const construir = (politica) => {
|
|
204
|
+
// El motor deriva el transporte de la política: en primer plano manda
|
|
205
|
+
// eventos HID (como un teclado de verdad), en segundo plano los entrega al
|
|
206
|
+
// proceso. Sin este campo la entrega queda a medias y la escritura se
|
|
207
|
+
// acepta sin surtir efecto.
|
|
208
|
+
const delivery = politica === "foreground" ? "hid" : "pid";
|
|
209
|
+
const base = { lookId: observacion.lookId, pid: observacion.pid, policy: politica };
|
|
210
|
+
switch (accion.tipo) {
|
|
211
|
+
case "click":
|
|
212
|
+
return {
|
|
213
|
+
...base,
|
|
214
|
+
target: { ref: accion.ref },
|
|
215
|
+
action: "click",
|
|
216
|
+
params: { button: accion.boton ?? "left", clickCount: accion.veces ?? 1, delivery },
|
|
217
|
+
};
|
|
218
|
+
case "escribir":
|
|
219
|
+
return {
|
|
220
|
+
...base,
|
|
221
|
+
target: { ref: accion.ref },
|
|
222
|
+
action: "typeText",
|
|
223
|
+
params: { text: accion.texto, delivery },
|
|
224
|
+
};
|
|
225
|
+
case "teclas":
|
|
226
|
+
return {
|
|
227
|
+
...base,
|
|
228
|
+
target: accion.ref ? { ref: accion.ref } : { ref: "" },
|
|
229
|
+
action: "keypress",
|
|
230
|
+
params: { keys: accion.teclas, delivery },
|
|
231
|
+
};
|
|
232
|
+
case "desplazar":
|
|
233
|
+
return {
|
|
234
|
+
...base,
|
|
235
|
+
target: { ref: accion.ref },
|
|
236
|
+
action: "scroll",
|
|
237
|
+
params: { scrollX: accion.x, scrollY: accion.y, delivery },
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
};
|
|
241
|
+
// Escribir tarda proporcionalmente a lo que se escribe. Un timeout fijo corta
|
|
242
|
+
// los textos largos por la mitad, y medio texto escrito es peor que ninguno.
|
|
243
|
+
const texto = accion.tipo === "escribir" ? accion.texto : "";
|
|
244
|
+
const timeoutMs = opciones.timeoutMs ?? Math.max(15_000, texto.length * 25 + 4_000);
|
|
245
|
+
const ejecutar = (politica) => currentPlatformBackend.act(construir(politica), { signal: opciones.signal, timeoutMs });
|
|
246
|
+
// Segundo plano PRIMERO. Es la diferencia entre trabajar mientras el usuario
|
|
247
|
+
// usa su ordenador y robarle la ventana en cada acción.
|
|
248
|
+
//
|
|
249
|
+
// Pero el segundo plano falla en aplicaciones que exigen ser la de delante
|
|
250
|
+
// para aceptar entrada — TextEdit entre ellas: el motor contesta "the
|
|
251
|
+
// background accessibility value write was accepted but did not take effect".
|
|
252
|
+
// Entonces se ESCALA a primer plano, que levanta la ventana y manda eventos
|
|
253
|
+
// HID reales. Solo para escribir y teclas: repetir un clic podría pulsar dos
|
|
254
|
+
// veces algo que ya funcionó, y esa es la asimetría que el propio motor fija
|
|
255
|
+
// en `canRetryInForeground`.
|
|
256
|
+
const puedeEscalar = accion.tipo === "escribir" || accion.tipo === "teclas";
|
|
257
|
+
try {
|
|
258
|
+
const primero = await ejecutar("background");
|
|
259
|
+
if (primero.outcome !== "didnt" || !puedeEscalar)
|
|
260
|
+
return interpretarResultado(primero);
|
|
261
|
+
// ANTES de repetir, comprobarlo por nuestra cuenta.
|
|
262
|
+
//
|
|
263
|
+
// El motor decide `didnt` mirando su propia evidencia, y con TextEdit esa
|
|
264
|
+
// evidencia es un FALSO NEGATIVO: dice `valueChanged: false, value: ""`
|
|
265
|
+
// mientras el texto está escrito y se ve en el árbol. Escalando a ciegas
|
|
266
|
+
// se escribía DOS VECES — "HOLA'ADAHOLA'ADA" en el documento de prueba.
|
|
267
|
+
//
|
|
268
|
+
// Y duplicar es peor que fallar: fallar se ve, duplicar no. Así que la
|
|
269
|
+
// escalada solo ocurre si el valor del elemento sigue igual que antes. No
|
|
270
|
+
// se compara con el texto pedido (la aplicación puede transformarlo — la
|
|
271
|
+
// sustitución tipográfica de TextEdit convierte los guiones en comillas),
|
|
272
|
+
// sino con el valor previo: cualquier cambio significa que entró.
|
|
273
|
+
if (await yaSurtioEfecto(observacion, accion, opciones.signal)) {
|
|
274
|
+
return { ok: true, detalle: "Hecho (el motor no pudo verificarlo, pero el valor cambió)." };
|
|
275
|
+
}
|
|
276
|
+
return interpretarResultado(await ejecutar("foreground"));
|
|
277
|
+
}
|
|
278
|
+
catch (error) {
|
|
279
|
+
// El motor pide primer plano explícitamente con este código.
|
|
280
|
+
const codigo = error?.code;
|
|
281
|
+
if (codigo === "foreground_required") {
|
|
282
|
+
try {
|
|
283
|
+
return interpretarResultado(await ejecutar("foreground"));
|
|
284
|
+
}
|
|
285
|
+
catch (segundo) {
|
|
286
|
+
return { ok: false, detalle: segundo instanceof Error ? segundo.message : String(segundo) };
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
return { ok: false, detalle: error instanceof Error ? error.message : String(error) };
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Busca un nodo tolerando la arroba.
|
|
294
|
+
*
|
|
295
|
+
* En el árbol el ref se guarda como `"@e10"`, pero en el texto que ve el agente
|
|
296
|
+
* aparece como `@e10` dentro de una línea, y tanto el agente como el motor
|
|
297
|
+
* aceptan `e10` a secas. Es decir: hay dos formas del mismo identificador
|
|
298
|
+
* circulando. El motor las normaliza al actuar; `nodeByRef` no, y devolvía
|
|
299
|
+
* `undefined` en silencio — que en `yaSurtioEfecto` significaba "no lo puedo
|
|
300
|
+
* comprobar" y disparaba la escalada. De ahí el texto duplicado.
|
|
301
|
+
*/
|
|
302
|
+
function nodoDe(arbol, ref) {
|
|
303
|
+
const limpio = ref.replace(/^@/, "");
|
|
304
|
+
return nodeByRef(arbol, ref) ?? nodeByRef(arbol, `@${limpio}`) ?? nodeByRef(arbol, limpio);
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* ¿Cambió el valor del elemento, aunque el motor diga que no?
|
|
308
|
+
*
|
|
309
|
+
* Se vuelve a observar y se compara el valor del MISMO ref con el que tenía en
|
|
310
|
+
* la observación de partida. Cualquier diferencia cuenta como éxito: no se
|
|
311
|
+
* compara con el texto que se pidió escribir porque la aplicación puede
|
|
312
|
+
* transformarlo al vuelo.
|
|
313
|
+
*
|
|
314
|
+
* Ante la duda devuelve `false` — es decir, deja que se escale. Un fallo por
|
|
315
|
+
* duplicar texto es silencioso; un fallo por no escribir se ve enseguida.
|
|
316
|
+
*/
|
|
317
|
+
async function yaSurtioEfecto(observacion, accion, signal) {
|
|
318
|
+
if (accion.tipo !== "escribir" || !observacion.arbol || observacion.pid === undefined)
|
|
319
|
+
return false;
|
|
320
|
+
const antes = nodoDe(observacion.arbol, accion.ref)?.value;
|
|
321
|
+
if (antes === undefined)
|
|
322
|
+
return false;
|
|
323
|
+
try {
|
|
324
|
+
const ahora = await observar(observacion.pid, { signal });
|
|
325
|
+
const despues = ahora.arbol ? nodoDe(ahora.arbol, accion.ref)?.value : undefined;
|
|
326
|
+
return despues !== undefined && despues !== antes;
|
|
327
|
+
}
|
|
328
|
+
catch {
|
|
329
|
+
return false;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Traduce la respuesta del motor a "¿pasó o no pasó?".
|
|
334
|
+
*
|
|
335
|
+
* El motor NO responde con un booleano: responde con `outcome`, que tiene tres
|
|
336
|
+
* valores. Y el tercero es el que importa:
|
|
337
|
+
*
|
|
338
|
+
* - `worked` — lo hizo y lo comprobó.
|
|
339
|
+
* - `didnt` — lo intentó y NO surtió efecto. Sin error: el clic salió, la
|
|
340
|
+
* interfaz no se movió.
|
|
341
|
+
* - `unknown` — lo hizo pero no pudo verificarlo.
|
|
342
|
+
*
|
|
343
|
+
* Tratar `didnt` como éxito es justo el fallo que motivó cambiar de motor: se
|
|
344
|
+
* dio por escrito un texto y el fichero quedó vacío. Solo `worked` es un sí.
|
|
345
|
+
* `unknown` se devuelve como fallo A PROPÓSITO, diciendo que no se pudo
|
|
346
|
+
* comprobar: es preferible que el agente vuelva a mirar con `computer_read` a
|
|
347
|
+
* que encadene diez acciones sobre una suposición.
|
|
348
|
+
*
|
|
349
|
+
* Es una función aparte, y pura, para poder probar los tres casos sin un
|
|
350
|
+
* ordenador delante — el motivo por el que el fallo anterior sobrevivió es que
|
|
351
|
+
* esto vivía dentro de una llamada al sistema que las pruebas nunca alcanzaban.
|
|
352
|
+
*/
|
|
353
|
+
export function interpretarResultado(r) {
|
|
354
|
+
const cambios = (r.rootDelta ?? [])
|
|
355
|
+
.map((d) => `${d.change}: ${d.title ?? d.kind}`)
|
|
356
|
+
.slice(0, 5)
|
|
357
|
+
.join("; ");
|
|
358
|
+
if (r.outcome === "worked") {
|
|
359
|
+
return { ok: true, detalle: cambios ? `Hecho. Cambios en pantalla — ${cambios}` : "Hecho." };
|
|
360
|
+
}
|
|
361
|
+
const motivo = r.error?.message ?? r.error?.code;
|
|
362
|
+
if (r.outcome === "didnt") {
|
|
363
|
+
return {
|
|
364
|
+
ok: false,
|
|
365
|
+
detalle: motivo
|
|
366
|
+
? `La acción no surtió efecto: ${motivo}`
|
|
367
|
+
: "La acción no surtió efecto. El elemento puede estar deshabilitado, tapado o no aceptar esta acción.",
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
return {
|
|
371
|
+
ok: false,
|
|
372
|
+
detalle: `No se pudo comprobar si la acción surtió efecto${motivo ? `: ${motivo}` : ""}. Vuelve a leer la ventana con computer_read antes de seguir.`,
|
|
373
|
+
};
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Espera a que algo aparezca (o desaparezca) en una ventana.
|
|
377
|
+
*
|
|
378
|
+
* Es la pieza por la que se cambió de motor. Sin ella, la única forma de
|
|
379
|
+
* "esperar" era dormir un rato fijo y cruzar los dedos: demasiado corto falla,
|
|
380
|
+
* demasiado largo desperdicia el turno, y ninguno de los dos sabe si lo que
|
|
381
|
+
* esperabas llegó.
|
|
382
|
+
*/
|
|
383
|
+
export async function esperar(pid, criterio, opciones = {}) {
|
|
384
|
+
await asegurarMotor();
|
|
385
|
+
const timeoutMs = Math.min(Math.max(criterio.timeoutMs ?? 10_000, 500), 60_000);
|
|
386
|
+
try {
|
|
387
|
+
const r = (await currentPlatformBackend.waitFor({ pid, text: criterio.texto, role: criterio.rol, gone: criterio.desaparezca === true, timeoutMs }, { signal: opciones.signal, timeoutMs: timeoutMs + 5_000 }));
|
|
388
|
+
return {
|
|
389
|
+
encontrado: r.found === true,
|
|
390
|
+
detalle: r.found ? "encontrado" : r.timedOut ? `no apareció en ${timeoutMs} ms` : "no encontrado",
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
catch (error) {
|
|
394
|
+
return { encontrado: false, detalle: error instanceof Error ? error.message : String(error) };
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
/** Lee el texto de un elemento, por trozos. */
|
|
398
|
+
export async function leerTexto(observacion, elementRef, opciones = {}) {
|
|
399
|
+
await asegurarMotor();
|
|
400
|
+
const r = await currentPlatformBackend.readText({
|
|
401
|
+
lookId: observacion.lookId,
|
|
402
|
+
elementRef,
|
|
403
|
+
offset: opciones.offset ?? 0,
|
|
404
|
+
limit: Math.min(opciones.limit ?? 4000, 20_000),
|
|
405
|
+
}, { signal: opciones.signal });
|
|
406
|
+
return { texto: r.text, hayMas: r.hasMore, total: r.totalChars };
|
|
407
|
+
}
|
|
408
|
+
export function cerrarMotor() {
|
|
409
|
+
arrancado = false;
|
|
410
|
+
void currentPlatformBackend.shutdown?.();
|
|
411
|
+
}
|
|
412
|
+
//# sourceMappingURL=motor-ada.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"motor-ada.js","sourceRoot":"","sources":["../../../src/core/computer/motor-ada.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Puente entre nuestras tools y el motor forkeado.\n *\n * Sustituye al driver anterior, que hablaba por CLI con `open-computer-use`.\n * Aquel motor tenía seis acciones y le faltaban las dos que importan: esperar a\n * que algo cambie, y buscar dentro de la interfaz. Sin espera se actúa sobre\n * ventanas que aún no están listas — el fallo que apareció al probarlo contra\n * TextEdit, donde la escritura se dio por buena y el fichero quedó vacío.\n *\n * El modelo del motor nuevo trae una garantía que antes no teníamos: **para\n * actuar hace falta el `lookId` de una observación previa**. Nuestra guía \"lee\n * antes de pulsar\" deja de ser un consejo en el prompt y pasa a ser un\n * requisito que el motor impone. Actuar sobre estado viejo ya no compila.\n *\n * Aquí NO vive ninguna regla de permisos: eso es `politica.ts`, y lo aplica\n * `tools.ts` antes de llamar a nada de esto.\n */\n\nimport { countOutlineNodes, foldToBudget, type LookResponse, nodeByRef, type Outline } from \"./motor/outline.ts\";\nimport { currentPlatformBackend } from \"./motor/platform/index.ts\";\nimport { macosHelper } from \"./motor/platform/macos/helper.ts\";\nimport type { HelperActResult, PlatformActRequest } from \"./motor/platform/types.ts\";\nimport { scoreWindow } from \"./motor/root-selection.ts\";\n\n/** Una observación viva. El `lookId` es lo que autoriza a actuar. */\nexport interface Observacion {\n\tlookId: string;\n\tpid?: number;\n\t/** Título de la ventana observada, para que el agente sepa dónde está. */\n\ttitulo?: string;\n\t/** Texto legible del árbol, tal y como lo devuelve el motor. */\n\tresumen: string;\n\telementos: number;\n\t/**\n\t * El árbol indexado. NO se le enseña al agente: es para comprobar por\n\t * nuestra cuenta si una acción surtió efecto, sin fiarnos de lo que diga el\n\t * motor. Ver `actuar`.\n\t */\n\tarbol?: Outline;\n\t/** Captura de la ventana, solo si se pidió `conImagen`. */\n\timagen?: { datos: string; mimeType: string };\n}\n\nlet arrancado = false;\n\n/**\n * Arranca el demonio nativo si hace falta.\n *\n * Es idempotente y se llama antes de cada operación: el demonio puede haberse\n * caído entre dos acciones, y descubrirlo con un ENOENT de socket es peor que\n * volver a levantarlo.\n */\nexport async function asegurarMotor(): Promise<void> {\n\tif (process.platform !== \"darwin\") return;\n\tif (arrancado) return;\n\tawait macosHelper.ensureInstalled();\n\tawait macosHelper.ensureDaemon();\n\tarrancado = true;\n}\n\nexport interface AppAbierta {\n\tnombre: string;\n\tbundleId?: string;\n\tpid?: number;\n}\n\nexport async function listarApps(signal?: AbortSignal): Promise<AppAbierta[]> {\n\tawait asegurarMotor();\n\tconst apps = await currentPlatformBackend.listApps(signal);\n\treturn apps.map((a) => ({\n\t\tnombre: (a as { appName?: string }).appName ?? (a as { bundleId?: string }).bundleId ?? \"(sin nombre)\",\n\t\tbundleId: (a as { bundleId?: string }).bundleId,\n\t\tpid: (a as { pid?: number }).pid,\n\t}));\n}\n\nexport async function appEnPrimerPlano(signal?: AbortSignal): Promise<AppAbierta> {\n\tawait asegurarMotor();\n\tconst f = (await currentPlatformBackend.getFrontmost(signal)) as {\n\t\tappName?: string;\n\t\tbundleId?: string;\n\t\tpid?: number;\n\t};\n\treturn { nombre: f.appName ?? \"(desconocida)\", bundleId: f.bundleId, pid: f.pid };\n}\n\n/** Localiza el pid de una aplicación por su nombre. */\nexport async function pidDe(nombreApp: string, signal?: AbortSignal): Promise<number | undefined> {\n\tconst apps = await listarApps(signal);\n\tconst buscado = nombreApp.trim().toLowerCase();\n\treturn apps.find((a) => a.nombre.trim().toLowerCase() === buscado)?.pid;\n}\n\n/**\n * Por qué una aplicación viva no enseña ninguna ventana.\n *\n * Hay dos motivos y se parecen desde fuera: o de verdad no tiene ventanas, o\n * macOS nos está negando la Accesibilidad y por eso el árbol llega vacío.\n *\n * Distinguirlos no es cosmético. Se descubrió probándolo: con los permisos sin\n * conceder, `computer_read` sobre TextEdit —que estaba abierto y salía en la\n * lista de aplicaciones— contestaba \"no tiene ninguna ventana abierta\". Un\n * agente que lea eso intentará ABRIR una ventana, que no arregla nada. El error\n * no solo era inútil: empujaba en la dirección contraria.\n *\n * Solo se pregunta al fallar, no en cada observación: el diagnóstico cuesta una\n * ida y vuelta al helper y el caso normal es que haya ventanas.\n */\nasync function porQueNoHayVentanas(pid: number, signal?: AbortSignal): Promise<string> {\n\tconst sinVentanas = `El proceso ${pid} no tiene ninguna ventana abierta. Puede estar en segundo plano o minimizado.`;\n\tif (process.platform !== \"darwin\") return sinVentanas;\n\ttry {\n\t\tconst d = (await macosHelper.diagnosticsCommand(signal)) as { accessibility?: boolean };\n\t\tif (d.accessibility === true) return sinVentanas;\n\t\treturn (\n\t\t\t`macOS está negando el permiso de Accesibilidad, así que no se puede leer la interfaz de ninguna ` +\n\t\t\t`aplicación (el proceso ${pid} sí está vivo). Concédelo con 'ada-cli computer permissions', o en ` +\n\t\t\t`Ajustes del Sistema → Privacidad y seguridad → Accesibilidad.`\n\t\t);\n\t} catch {\n\t\t// Si ni el diagnóstico contesta, no se inventa un motivo.\n\t\treturn sinVentanas;\n\t}\n}\n\n/**\n * Traduce un fallo de captura a algo accionable.\n *\n * Leer una ventana necesita LOS DOS permisos, no solo Accesibilidad: el motor\n * captura para situar los elementos. Con la Accesibilidad concedida y la\n * Grabación de pantalla no, macOS devuelve \"El usuario ha rechazado las\n * preferencias de TCC para la captura…\" — que dice la causa y ningún remedio, y\n * además contradice lo que el usuario acaba de hacer (conceder un permiso).\n *\n * Se detecta por el texto porque es lo que hay: el error llega como cadena del\n * sistema, traducida al idioma del Mac. Por eso se buscan las dos palabras que\n * no cambian de forma —TCC y capture/captura— en vez de una frase entera.\n */\nfunction explicarFalloDeCaptura(error: unknown): string {\n\tconst mensaje = error instanceof Error ? error.message : String(error);\n\tconst esTcc = /\\bTCC\\b/i.test(mensaje) || /captur/i.test(mensaje);\n\tif (!esTcc) return mensaje;\n\treturn (\n\t\t`${mensaje}\\n\\n` +\n\t\t`Leer una ventana necesita TAMBIÉN el permiso de Grabación de pantalla, no solo el de ` +\n\t\t`Accesibilidad: el motor captura la pantalla para situar los elementos. Ábrelo con ` +\n\t\t`'ada-cli computer permissions' y, después de concederlo, 'ada-cli computer recheck' — ` +\n\t\t`macOS cachea los permisos por proceso y hasta que el motor no se reinicie seguirá creyendo ` +\n\t\t`que no lo tiene.`\n\t);\n}\n\n/**\n * Observa una ventana y devuelve la observación con la que se puede actuar.\n *\n * `readText: \"auto\"` deja al motor decidir cuánto texto trae: pedir siempre\n * todo el texto de una ventana grande llena el contexto de ruido, y no pedirlo\n * nunca obliga a una segunda llamada para cada etiqueta.\n */\nexport async function observar(\n\tpid: number,\n\topciones: { scopeRef?: string; signal?: AbortSignal; timeoutMs?: number; conImagen?: boolean } = {},\n): Promise<Observacion> {\n\tawait asegurarMotor();\n\n\t// Hay que resolver la VENTANA primero. Observar por pid a secas falla con\n\t// \"Root is not owned by a running app\": un proceso puede tener cero, una o\n\t// diez ventanas, y el motor necesita saber cuál.\n\tconst raices = await currentPlatformBackend.listRoots({ pid }, opciones.signal);\n\tif (raices.length === 0) throw new Error(await porQueNoHayVentanas(pid, opciones.signal));\n\n\t// Estar minimizada se FILTRA, no se puntúa. Es una precondición, no una\n\t// preferencia: una ventana minimizada no se puede observar en absoluto.\n\t//\n\t// Esto no es teórico. `scoreWindow` (del propio motor) da +180 a `isModal`,\n\t// más que a todo lo demás junto, y las ventanas de TextEdit se declaran\n\t// `AXDialog` → modales. Resultado con TextEdit abierto: una ventana\n\t// minimizada ganaba a la única usable, y el motor contestaba \"Root is not\n\t// owned by a running app\" — que no menciona ni ventanas ni minimizado. El\n\t// propio `root-selection.ts` avisa de la trampa: \"AXDialog can describe a\n\t// background main window, so modality alone is insufficient\".\n\t//\n\t// Entre las que SÍ sirven, `scoreWindow` ordena bien: foco, principal, en\n\t// pantalla. Ahí sí es preferencia.\n\tconst usables = raices.filter((r) => !r.isMinimized);\n\tconst [raiz] = (usables.length > 0 ? usables : raices).sort((a, b) => scoreWindow(b) - scoreWindow(a));\n\tif (usables.length === 0) {\n\t\t// Todas minimizadas: es un estado del que el agente PUEDE salir, pero solo\n\t\t// si se lo dicen. El error del motor no lo menciona.\n\t\tconst cuales = raices\n\t\t\t.map((r) => `\"${r.title}\"`)\n\t\t\t.slice(0, 5)\n\t\t\t.join(\", \");\n\t\tthrow new Error(\n\t\t\t`Todas las ventanas de este proceso están minimizadas (${cuales}), y una ventana minimizada no se puede leer. ` +\n\t\t\t\t`Pídele al usuario que la restaure, o abre la aplicación desde el Dock.`,\n\t\t);\n\t}\n\n\tlet r: LookResponse;\n\ttry {\n\t\tr = (await currentPlatformBackend.observe(\n\t\t\t{\n\t\t\t\ttarget: { pid, windowId: raiz.windowId },\n\t\t\t\treadText: \"auto\",\n\t\t\t\tscopeRef: opciones.scopeRef,\n\t\t\t\tincludeImage: opciones.conImagen === true,\n\t\t\t},\n\t\t\t{ signal: opciones.signal, timeoutMs: opciones.timeoutMs },\n\t\t)) as LookResponse;\n\t} catch (error) {\n\t\tthrow new Error(explicarFalloDeCaptura(error));\n\t}\n\n\t// `outline` NO es texto: es el árbol, con referencias al padre en cada nodo.\n\t// Un `JSON.stringify` revienta con \"circular structure\" — y solo revienta\n\t// cuando hay permisos, porque sin ellos nunca se llega hasta aquí.\n\t//\n\t// El motor trae su propio renderizador, `foldToBudget`, que además PLIEGA:\n\t// una ventana real tiene miles de nodos y volcarlos todos llenaría el\n\t// contexto de ruido dejando lo importante enterrado. Se despliega lo que\n\t// tiene el foco y lo accionable, se pliega el resto.\n\t// `parsedOutline` es el árbol INDEXADO (con el mapa de referencias); `outline`\n\t// a secas es solo el nodo raíz, que no basta para plegar. El backend lo rellena\n\t// al parsear la respuesta del helper.\n\tconst arbol = r.parsedOutline;\n\treturn {\n\t\tlookId: r.lookId ?? \"\",\n\t\tpid,\n\t\ttitulo: raiz.title,\n\t\tresumen: arbol ? foldToBudget(arbol).text : \"(el motor no devolvió ningún árbol)\",\n\t\telementos: countOutlineNodes(r.outline),\n\t\tarbol,\n\t\timagen: r.image ? { datos: r.image.jpegBase64, mimeType: r.image.mimeType ?? \"image/jpeg\" } : undefined,\n\t};\n}\n\nexport type AccionMotor =\n\t| { tipo: \"click\"; ref: string; boton?: \"left\" | \"right\" | \"middle\"; veces?: number }\n\t| { tipo: \"escribir\"; ref: string; texto: string }\n\t| { tipo: \"teclas\"; ref?: string; teclas: string[] }\n\t| { tipo: \"desplazar\"; ref: string; x: number; y: number };\n\n/**\n * Actúa sobre una observación.\n *\n * Exige el `lookId`: el motor rechaza actuar sobre una observación que ya no\n * refleja la pantalla. Eso convierte en imposible el fallo de escribir en una\n * ventana que se cerró en medio.\n */\nexport async function actuar(\n\tobservacion: Observacion,\n\taccion: AccionMotor,\n\topciones: { signal?: AbortSignal; timeoutMs?: number } = {},\n): Promise<{ ok: boolean; detalle: string }> {\n\tawait asegurarMotor();\n\n\t// Tipado explícito y SIN casts: es la única comprobación automática de que\n\t// los nombres de acción que enviamos existen de verdad en el motor. El\n\t// `screenshot` fantasma del motor anterior sobrevivió a las pruebas porque\n\t// aquella llamada iba por texto libre; aquí un nombre inventado no compila.\n\tconst construir = (politica: \"background\" | \"foreground\"): PlatformActRequest => {\n\t\t// El motor deriva el transporte de la política: en primer plano manda\n\t\t// eventos HID (como un teclado de verdad), en segundo plano los entrega al\n\t\t// proceso. Sin este campo la entrega queda a medias y la escritura se\n\t\t// acepta sin surtir efecto.\n\t\tconst delivery = politica === \"foreground\" ? (\"hid\" as const) : (\"pid\" as const);\n\t\tconst base = { lookId: observacion.lookId, pid: observacion.pid, policy: politica };\n\t\tswitch (accion.tipo) {\n\t\t\tcase \"click\":\n\t\t\t\treturn {\n\t\t\t\t\t...base,\n\t\t\t\t\ttarget: { ref: accion.ref },\n\t\t\t\t\taction: \"click\" as const,\n\t\t\t\t\tparams: { button: accion.boton ?? \"left\", clickCount: accion.veces ?? 1, delivery },\n\t\t\t\t};\n\t\t\tcase \"escribir\":\n\t\t\t\treturn {\n\t\t\t\t\t...base,\n\t\t\t\t\ttarget: { ref: accion.ref },\n\t\t\t\t\taction: \"typeText\" as const,\n\t\t\t\t\tparams: { text: accion.texto, delivery },\n\t\t\t\t};\n\t\t\tcase \"teclas\":\n\t\t\t\treturn {\n\t\t\t\t\t...base,\n\t\t\t\t\ttarget: accion.ref ? { ref: accion.ref } : { ref: \"\" },\n\t\t\t\t\taction: \"keypress\" as const,\n\t\t\t\t\tparams: { keys: accion.teclas, delivery },\n\t\t\t\t};\n\t\t\tcase \"desplazar\":\n\t\t\t\treturn {\n\t\t\t\t\t...base,\n\t\t\t\t\ttarget: { ref: accion.ref },\n\t\t\t\t\taction: \"scroll\" as const,\n\t\t\t\t\tparams: { scrollX: accion.x, scrollY: accion.y, delivery },\n\t\t\t\t};\n\t\t}\n\t};\n\n\t// Escribir tarda proporcionalmente a lo que se escribe. Un timeout fijo corta\n\t// los textos largos por la mitad, y medio texto escrito es peor que ninguno.\n\tconst texto = accion.tipo === \"escribir\" ? accion.texto : \"\";\n\tconst timeoutMs = opciones.timeoutMs ?? Math.max(15_000, texto.length * 25 + 4_000);\n\tconst ejecutar = (politica: \"background\" | \"foreground\") =>\n\t\tcurrentPlatformBackend.act(construir(politica), { signal: opciones.signal, timeoutMs });\n\n\t// Segundo plano PRIMERO. Es la diferencia entre trabajar mientras el usuario\n\t// usa su ordenador y robarle la ventana en cada acción.\n\t//\n\t// Pero el segundo plano falla en aplicaciones que exigen ser la de delante\n\t// para aceptar entrada — TextEdit entre ellas: el motor contesta \"the\n\t// background accessibility value write was accepted but did not take effect\".\n\t// Entonces se ESCALA a primer plano, que levanta la ventana y manda eventos\n\t// HID reales. Solo para escribir y teclas: repetir un clic podría pulsar dos\n\t// veces algo que ya funcionó, y esa es la asimetría que el propio motor fija\n\t// en `canRetryInForeground`.\n\tconst puedeEscalar = accion.tipo === \"escribir\" || accion.tipo === \"teclas\";\n\ttry {\n\t\tconst primero = await ejecutar(\"background\");\n\t\tif (primero.outcome !== \"didnt\" || !puedeEscalar) return interpretarResultado(primero);\n\n\t\t// ANTES de repetir, comprobarlo por nuestra cuenta.\n\t\t//\n\t\t// El motor decide `didnt` mirando su propia evidencia, y con TextEdit esa\n\t\t// evidencia es un FALSO NEGATIVO: dice `valueChanged: false, value: \"\"`\n\t\t// mientras el texto está escrito y se ve en el árbol. Escalando a ciegas\n\t\t// se escribía DOS VECES — \"HOLA'ADAHOLA'ADA\" en el documento de prueba.\n\t\t//\n\t\t// Y duplicar es peor que fallar: fallar se ve, duplicar no. Así que la\n\t\t// escalada solo ocurre si el valor del elemento sigue igual que antes. No\n\t\t// se compara con el texto pedido (la aplicación puede transformarlo — la\n\t\t// sustitución tipográfica de TextEdit convierte los guiones en comillas),\n\t\t// sino con el valor previo: cualquier cambio significa que entró.\n\t\tif (await yaSurtioEfecto(observacion, accion, opciones.signal)) {\n\t\t\treturn { ok: true, detalle: \"Hecho (el motor no pudo verificarlo, pero el valor cambió).\" };\n\t\t}\n\t\treturn interpretarResultado(await ejecutar(\"foreground\"));\n\t} catch (error) {\n\t\t// El motor pide primer plano explícitamente con este código.\n\t\tconst codigo = (error as { code?: string })?.code;\n\t\tif (codigo === \"foreground_required\") {\n\t\t\ttry {\n\t\t\t\treturn interpretarResultado(await ejecutar(\"foreground\"));\n\t\t\t} catch (segundo) {\n\t\t\t\treturn { ok: false, detalle: segundo instanceof Error ? segundo.message : String(segundo) };\n\t\t\t}\n\t\t}\n\t\treturn { ok: false, detalle: error instanceof Error ? error.message : String(error) };\n\t}\n}\n\n/**\n * Busca un nodo tolerando la arroba.\n *\n * En el árbol el ref se guarda como `\"@e10\"`, pero en el texto que ve el agente\n * aparece como `@e10` dentro de una línea, y tanto el agente como el motor\n * aceptan `e10` a secas. Es decir: hay dos formas del mismo identificador\n * circulando. El motor las normaliza al actuar; `nodeByRef` no, y devolvía\n * `undefined` en silencio — que en `yaSurtioEfecto` significaba \"no lo puedo\n * comprobar\" y disparaba la escalada. De ahí el texto duplicado.\n */\nfunction nodoDe(arbol: Outline, ref: string) {\n\tconst limpio = ref.replace(/^@/, \"\");\n\treturn nodeByRef(arbol, ref) ?? nodeByRef(arbol, `@${limpio}`) ?? nodeByRef(arbol, limpio);\n}\n\n/**\n * ¿Cambió el valor del elemento, aunque el motor diga que no?\n *\n * Se vuelve a observar y se compara el valor del MISMO ref con el que tenía en\n * la observación de partida. Cualquier diferencia cuenta como éxito: no se\n * compara con el texto que se pidió escribir porque la aplicación puede\n * transformarlo al vuelo.\n *\n * Ante la duda devuelve `false` — es decir, deja que se escale. Un fallo por\n * duplicar texto es silencioso; un fallo por no escribir se ve enseguida.\n */\nasync function yaSurtioEfecto(observacion: Observacion, accion: AccionMotor, signal?: AbortSignal): Promise<boolean> {\n\tif (accion.tipo !== \"escribir\" || !observacion.arbol || observacion.pid === undefined) return false;\n\tconst antes = nodoDe(observacion.arbol, accion.ref)?.value;\n\tif (antes === undefined) return false;\n\ttry {\n\t\tconst ahora = await observar(observacion.pid, { signal });\n\t\tconst despues = ahora.arbol ? nodoDe(ahora.arbol, accion.ref)?.value : undefined;\n\t\treturn despues !== undefined && despues !== antes;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/**\n * Traduce la respuesta del motor a \"¿pasó o no pasó?\".\n *\n * El motor NO responde con un booleano: responde con `outcome`, que tiene tres\n * valores. Y el tercero es el que importa:\n *\n * - `worked` — lo hizo y lo comprobó.\n * - `didnt` — lo intentó y NO surtió efecto. Sin error: el clic salió, la\n * interfaz no se movió.\n * - `unknown` — lo hizo pero no pudo verificarlo.\n *\n * Tratar `didnt` como éxito es justo el fallo que motivó cambiar de motor: se\n * dio por escrito un texto y el fichero quedó vacío. Solo `worked` es un sí.\n * `unknown` se devuelve como fallo A PROPÓSITO, diciendo que no se pudo\n * comprobar: es preferible que el agente vuelva a mirar con `computer_read` a\n * que encadene diez acciones sobre una suposición.\n *\n * Es una función aparte, y pura, para poder probar los tres casos sin un\n * ordenador delante — el motivo por el que el fallo anterior sobrevivió es que\n * esto vivía dentro de una llamada al sistema que las pruebas nunca alcanzaban.\n */\nexport function interpretarResultado(r: HelperActResult): { ok: boolean; detalle: string } {\n\tconst cambios = (r.rootDelta ?? [])\n\t\t.map((d) => `${d.change}: ${d.title ?? d.kind}`)\n\t\t.slice(0, 5)\n\t\t.join(\"; \");\n\n\tif (r.outcome === \"worked\") {\n\t\treturn { ok: true, detalle: cambios ? `Hecho. Cambios en pantalla — ${cambios}` : \"Hecho.\" };\n\t}\n\n\tconst motivo = r.error?.message ?? r.error?.code;\n\tif (r.outcome === \"didnt\") {\n\t\treturn {\n\t\t\tok: false,\n\t\t\tdetalle: motivo\n\t\t\t\t? `La acción no surtió efecto: ${motivo}`\n\t\t\t\t: \"La acción no surtió efecto. El elemento puede estar deshabilitado, tapado o no aceptar esta acción.\",\n\t\t};\n\t}\n\n\treturn {\n\t\tok: false,\n\t\tdetalle: `No se pudo comprobar si la acción surtió efecto${motivo ? `: ${motivo}` : \"\"}. Vuelve a leer la ventana con computer_read antes de seguir.`,\n\t};\n}\n\n/**\n * Espera a que algo aparezca (o desaparezca) en una ventana.\n *\n * Es la pieza por la que se cambió de motor. Sin ella, la única forma de\n * \"esperar\" era dormir un rato fijo y cruzar los dedos: demasiado corto falla,\n * demasiado largo desperdicia el turno, y ninguno de los dos sabe si lo que\n * esperabas llegó.\n */\nexport async function esperar(\n\tpid: number,\n\tcriterio: { texto?: string; rol?: string; desaparezca?: boolean; timeoutMs?: number },\n\topciones: { signal?: AbortSignal } = {},\n): Promise<{ encontrado: boolean; detalle: string }> {\n\tawait asegurarMotor();\n\tconst timeoutMs = Math.min(Math.max(criterio.timeoutMs ?? 10_000, 500), 60_000);\n\ttry {\n\t\tconst r = (await currentPlatformBackend.waitFor(\n\t\t\t{ pid, text: criterio.texto, role: criterio.rol, gone: criterio.desaparezca === true, timeoutMs },\n\t\t\t{ signal: opciones.signal, timeoutMs: timeoutMs + 5_000 },\n\t\t)) as { found?: boolean; timedOut?: boolean };\n\t\treturn {\n\t\t\tencontrado: r.found === true,\n\t\t\tdetalle: r.found ? \"encontrado\" : r.timedOut ? `no apareció en ${timeoutMs} ms` : \"no encontrado\",\n\t\t};\n\t} catch (error) {\n\t\treturn { encontrado: false, detalle: error instanceof Error ? error.message : String(error) };\n\t}\n}\n\n/** Lee el texto de un elemento, por trozos. */\nexport async function leerTexto(\n\tobservacion: Observacion,\n\telementRef: string,\n\topciones: { offset?: number; limit?: number; signal?: AbortSignal } = {},\n): Promise<{ texto: string; hayMas: boolean; total: number }> {\n\tawait asegurarMotor();\n\tconst r = await currentPlatformBackend.readText(\n\t\t{\n\t\t\tlookId: observacion.lookId,\n\t\t\telementRef,\n\t\t\toffset: opciones.offset ?? 0,\n\t\t\tlimit: Math.min(opciones.limit ?? 4000, 20_000),\n\t\t},\n\t\t{ signal: opciones.signal },\n\t);\n\treturn { texto: r.text, hayMas: r.hasMore, total: r.totalChars };\n}\n\nexport function cerrarMotor(): void {\n\tarrancado = false;\n\tvoid currentPlatformBackend.shutdown?.();\n}\n"]}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reglas del control del ordenador. Puro: sin procesos ni capturas.
|
|
3
|
+
*
|
|
4
|
+
* Esta es la superficie más peligrosa del producto, por encima del navegador.
|
|
5
|
+
* En el navegador podíamos aislarnos con un perfil vacío: sin cookies, sin
|
|
6
|
+
* sesiones, nada que filtrar aunque el agente se equivocara. **Aquí no hay
|
|
7
|
+
* perfil vacío.** El ratón toca el escritorio de verdad, con tu correo abierto,
|
|
8
|
+
* tu banco abierto y tu terminal abierta. Un clic mal puesto no es un error de
|
|
9
|
+
* navegación: es una transferencia.
|
|
10
|
+
*
|
|
11
|
+
* Por eso el modelo no es "el navegador pero más grande". Son tres reglas:
|
|
12
|
+
*
|
|
13
|
+
* 1. **Aplicaciones prohibidas**, sin excepción. Un gestor de contraseñas o una
|
|
14
|
+
* app bancaria no se controla en ningún nivel, ni siquiera para mirar.
|
|
15
|
+
* 2. **Techo por categoría.** Un navegador ya tiene sus propias tools con
|
|
16
|
+
* perfil aislado; una terminal ya tiene `bash`. Dejar que el agente teclee
|
|
17
|
+
* ahí sería rodear las dos puertas que sí controlamos.
|
|
18
|
+
* 3. **Nunca credenciales, nunca lo irreversible sin preguntar.** Y aquí, a
|
|
19
|
+
* diferencia del navegador, no hay DOM que inspeccionar: la regla tiene que
|
|
20
|
+
* ser MÁS conservadora, no menos.
|
|
21
|
+
*
|
|
22
|
+
* Lo que NO hay es una lista de aplicaciones que el usuario tenga que
|
|
23
|
+
* mantener. Se probó y era peor: obligaba a configurar antes de poder usar
|
|
24
|
+
* nada, y un interruptor encendido con la lista vacía no hacía absolutamente
|
|
25
|
+
* nada. Las categorías protegen igual y no piden mantenimiento.
|
|
26
|
+
*/
|
|
27
|
+
/** Qué puede hacer el agente sobre una aplicación concreta. */
|
|
28
|
+
export type Nivel = "read" | "click" | "full";
|
|
29
|
+
export declare function esAppProhibida(nombreApp: string): boolean;
|
|
30
|
+
export declare class AppProhibidaError extends Error {
|
|
31
|
+
constructor(app: string);
|
|
32
|
+
}
|
|
33
|
+
/** Nivel máximo que se puede conceder a una aplicación, por su categoría. */
|
|
34
|
+
export declare function techoDeCategoria(nombreApp: string): Nivel;
|
|
35
|
+
/** El menor de dos niveles. Conceder nunca amplía por encima del techo. */
|
|
36
|
+
export declare function menorNivel(a: Nivel, b: Nivel): Nivel;
|
|
37
|
+
/** Acciones que el agente puede pedir, ordenadas por lo que exigen. */
|
|
38
|
+
export type Accion = "screenshot" | "cursor_position" | "mouse_move" | "scroll" | "left_click" | "double_click" | "triple_click" | "middle_click" | "right_click" | "left_click_drag" | "type" | "key" | "hold_key";
|
|
39
|
+
export declare class AccionNoPermitidaError extends Error {
|
|
40
|
+
constructor(accion: Accion, app: string, nivel: Nivel);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* ¿Se puede hacer esta acción sobre esta aplicación?
|
|
44
|
+
*
|
|
45
|
+
* El control del ordenador es un interruptor: o está activo o no lo está. Lo
|
|
46
|
+
* que decide qué se puede hacer sobre cada aplicación es su CATEGORÍA, que se
|
|
47
|
+
* calcula sola — no una lista que el usuario tenga que mantener al día cada
|
|
48
|
+
* vez que instala algo.
|
|
49
|
+
*/
|
|
50
|
+
export declare function exigirPermiso(accion: Accion, app: string): void;
|
|
51
|
+
export declare function pareceCredencial(texto: string): boolean;
|
|
52
|
+
export declare class CredencialError extends Error {
|
|
53
|
+
constructor();
|
|
54
|
+
}
|
|
55
|
+
export declare function teclaPeligrosa(combinacion: string): boolean;
|
|
56
|
+
//# sourceMappingURL=politica.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"politica.d.ts","sourceRoot":"","sources":["../../../src/core/computer/politica.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,iEAA+D;AAC/D,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAyB9C,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IAC3C,YAAY,GAAG,EAAE,MAAM,EAMtB;CACD;AAMD,gFAA6E;AAC7E,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,CAKzD;AAID,4EAA2E;AAC3E,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,GAAG,KAAK,CAEpD;AAED,uEAAuE;AACvE,MAAM,MAAM,MAAM,GACf,YAAY,GACZ,iBAAiB,GACjB,YAAY,GACZ,QAAQ,GACR,YAAY,GACZ,cAAc,GACd,cAAc,GACd,cAAc,GACd,aAAa,GACb,iBAAiB,GACjB,MAAM,GACN,KAAK,GACL,UAAU,CAAC;AAwBd,qBAAa,sBAAuB,SAAQ,KAAK;IAChD,YAAY,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAWpD;CACD;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAK/D;AAuBD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,qBAAa,eAAgB,SAAQ,KAAK;IACzC,cAMC;CACD;AAWD,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAE3D","sourcesContent":["/**\n * Reglas del control del ordenador. Puro: sin procesos ni capturas.\n *\n * Esta es la superficie más peligrosa del producto, por encima del navegador.\n * En el navegador podíamos aislarnos con un perfil vacío: sin cookies, sin\n * sesiones, nada que filtrar aunque el agente se equivocara. **Aquí no hay\n * perfil vacío.** El ratón toca el escritorio de verdad, con tu correo abierto,\n * tu banco abierto y tu terminal abierta. Un clic mal puesto no es un error de\n * navegación: es una transferencia.\n *\n * Por eso el modelo no es \"el navegador pero más grande\". Son tres reglas:\n *\n * 1. **Aplicaciones prohibidas**, sin excepción. Un gestor de contraseñas o una\n * app bancaria no se controla en ningún nivel, ni siquiera para mirar.\n * 2. **Techo por categoría.** Un navegador ya tiene sus propias tools con\n * perfil aislado; una terminal ya tiene `bash`. Dejar que el agente teclee\n * ahí sería rodear las dos puertas que sí controlamos.\n * 3. **Nunca credenciales, nunca lo irreversible sin preguntar.** Y aquí, a\n * diferencia del navegador, no hay DOM que inspeccionar: la regla tiene que\n * ser MÁS conservadora, no menos.\n *\n * Lo que NO hay es una lista de aplicaciones que el usuario tenga que\n * mantener. Se probó y era peor: obligaba a configurar antes de poder usar\n * nada, y un interruptor encendido con la lista vacía no hacía absolutamente\n * nada. Las categorías protegen igual y no piden mantenimiento.\n */\n\n/** Qué puede hacer el agente sobre una aplicación concreta. */\nexport type Nivel = \"read\" | \"click\" | \"full\";\n\n/**\n * Categorías que NUNCA se conceden al máximo, aunque el usuario diga que sí.\n *\n * No es paternalismo: es que para estas dos ya existe un camino mejor y\n * controlado. Teclear en un navegador se hace con las tools de navegador, que\n * corren en un perfil sin sesiones. Ejecutar un comando se hace con `bash`, que\n * pasa por los permisos y queda en el registro. Permitir el teclado aquí\n * convertiría el control del ordenador en la puerta de atrás de las otras dos.\n */\n/**\n * Aplicaciones que NO se conceden nunca, en ningún nivel.\n *\n * Un gestor de contraseñas no tiene un uso legítimo para el agente, y el modo\n * de fallo es catastrófico: aquí ni siquiera \"solo ver\" vale, porque leer la\n * pantalla de un gestor de contraseñas ES leer las contraseñas. Lo mismo con\n * el llavero y las apps de banca.\n *\n * Se descubrió mirando la lista real de esta máquina: \"Contraseñas\" salía con\n * techo \"control total\" porque no era ni navegador ni terminal.\n */\nconst PROHIBIDAS =\n\t/^(contraseñas|passwords|acceso a llaveros|keychain access|1password.*|bitwarden|dashlane|lastpass|enpass|keeper|proton pass|nordpass|authy|google authenticator|banc[oa].*|caixabank|bbva|santander)$/i;\n\nexport function esAppProhibida(nombreApp: string): boolean {\n\treturn PROHIBIDAS.test(nombreApp.trim());\n}\n\nexport class AppProhibidaError extends Error {\n\tconstructor(app: string) {\n\t\tsuper(\n\t\t\t`\"${app}\" no se puede controlar en ningún nivel: es un gestor de credenciales o una aplicación bancaria. ` +\n\t\t\t\t`Ni siquiera verla, porque leer su pantalla es leer los secretos.`,\n\t\t);\n\t\tthis.name = \"AppProhibidaError\";\n\t}\n}\n\nconst NAVEGADORES = /^(safari|google chrome|chromium|firefox|microsoft edge|brave browser|arc|opera|vivaldi|orion)$/i;\nconst TERMINALES_E_IDE =\n\t/^(terminal|iterm2?|warp|alacritty|kitty|wezterm|ghostty|hyper|visual studio code|vscodium|cursor|zed|xcode|intellij idea|pycharm|webstorm|goland|rubymine|clion|phpstorm|android studio|sublime text|nova|emacs|vim|neovide)$/i;\n\n/** Nivel máximo que se puede conceder a una aplicación, por su categoría. */\nexport function techoDeCategoria(nombreApp: string): Nivel {\n\tconst nombre = nombreApp.trim();\n\tif (NAVEGADORES.test(nombre)) return \"read\";\n\tif (TERMINALES_E_IDE.test(nombre)) return \"click\";\n\treturn \"full\";\n}\n\nconst ORDEN: Record<Nivel, number> = { read: 0, click: 1, full: 2 };\n\n/** El menor de dos niveles. Conceder nunca amplía por encima del techo. */\nexport function menorNivel(a: Nivel, b: Nivel): Nivel {\n\treturn ORDEN[a] <= ORDEN[b] ? a : b;\n}\n\n/** Acciones que el agente puede pedir, ordenadas por lo que exigen. */\nexport type Accion =\n\t| \"screenshot\"\n\t| \"cursor_position\"\n\t| \"mouse_move\"\n\t| \"scroll\"\n\t| \"left_click\"\n\t| \"double_click\"\n\t| \"triple_click\"\n\t| \"middle_click\"\n\t| \"right_click\"\n\t| \"left_click_drag\"\n\t| \"type\"\n\t| \"key\"\n\t| \"hold_key\";\n\n/** Qué nivel mínimo exige cada acción. */\nconst EXIGE: Record<Accion, Nivel> = {\n\t// Mirar y mover el puntero no cambia nada.\n\tscreenshot: \"read\",\n\tcursor_position: \"read\",\n\tmouse_move: \"read\",\n\tscroll: \"read\",\n\t// Un clic izquierdo activa cosas, pero no escribe.\n\tleft_click: \"click\",\n\tdouble_click: \"click\",\n\ttriple_click: \"click\",\n\t// El resto puede pegar, arrastrar o teclear: pleno.\n\t// El clic derecho entra aquí porque su menú contextual trae \"Pegar\", que es\n\t// escritura por la puerta de atrás.\n\tmiddle_click: \"full\",\n\tright_click: \"full\",\n\tleft_click_drag: \"full\",\n\ttype: \"full\",\n\tkey: \"full\",\n\thold_key: \"full\",\n};\n\nexport class AccionNoPermitidaError extends Error {\n\tconstructor(accion: Accion, app: string, nivel: Nivel) {\n\t\tconst alternativa =\n\t\t\tnivel === \"read\"\n\t\t\t\t? \" Para un navegador usa las tools browser_*, que corren en un perfil sin sesiones.\"\n\t\t\t\t: nivel === \"click\"\n\t\t\t\t\t? \" Para ejecutar comandos usa la tool bash, que pasa por los permisos.\"\n\t\t\t\t\t: \"\";\n\t\tsuper(\n\t\t\t`'${accion}' no se puede hacer sobre \"${app}\": es ${nivel === \"read\" ? \"un navegador\" : \"una terminal o un IDE\"}.${alternativa}`,\n\t\t);\n\t\tthis.name = \"AccionNoPermitidaError\";\n\t}\n}\n\n/**\n * ¿Se puede hacer esta acción sobre esta aplicación?\n *\n * El control del ordenador es un interruptor: o está activo o no lo está. Lo\n * que decide qué se puede hacer sobre cada aplicación es su CATEGORÍA, que se\n * calcula sola — no una lista que el usuario tenga que mantener al día cada\n * vez que instala algo.\n */\nexport function exigirPermiso(accion: Accion, app: string): void {\n\t// Primero lo que no se concede nunca.\n\tif (esAppProhibida(app)) throw new AppProhibidaError(app);\n\tconst techo = techoDeCategoria(app);\n\tif (ORDEN[EXIGE[accion]] > ORDEN[techo]) throw new AccionNoPermitidaError(accion, app, techo);\n}\n\n/**\n * Texto que el agente NUNCA teclea.\n *\n * En el navegador podíamos mirar el `type` y el `autocomplete` del campo. Aquí\n * no hay campo que inspeccionar: solo tenemos el texto. Así que la regla mira\n * lo que se va a escribir y bloquea lo que PARECE una credencial, aceptando\n * falsos positivos — es preferible que el agente diga \"escríbelo tú\" de más a\n * que teclee una clave de más.\n */\nconst PARECE_SECRETO = [\n\t/\\bsk-[a-zA-Z0-9_-]{16,}/, // claves de API estilo OpenAI/Anthropic\n\t/\\bghp_[a-zA-Z0-9]{20,}/, // tokens de GitHub\n\t/\\bgh[pousr]_[a-zA-Z0-9]{20,}/,\n\t/\\bxox[baprs]-[a-zA-Z0-9-]{10,}/, // Slack\n\t/\\bAKIA[0-9A-Z]{16}\\b/, // AWS\n\t/\\beyJ[a-zA-Z0-9_-]{10,}\\.[a-zA-Z0-9_-]{10,}\\./, // JWT\n\t/-----BEGIN [A-Z ]*PRIVATE KEY-----/,\n\t/\\b(?:\\d[ -]?){13,19}\\b/, // números de tarjeta\n\t/\\b[A-Z]{2}\\d{2}[A-Z0-9]{10,30}\\b/, // IBAN\n];\n\nexport function pareceCredencial(texto: string): boolean {\n\treturn PARECE_SECRETO.some((p) => p.test(texto));\n}\n\nexport class CredencialError extends Error {\n\tconstructor() {\n\t\tsuper(\n\t\t\t\"Ese texto parece una credencial (clave, token, tarjeta o IBAN). El agente no teclea credenciales: \" +\n\t\t\t\t\"escríbelo tú, o usa el gestor de contraseñas.\",\n\t\t);\n\t\tthis.name = \"CredencialError\";\n\t}\n}\n\n/**\n * Combinaciones de teclas que no se pulsan sin permiso explícito.\n *\n * Son las que borran, envían o salen sin vuelta atrás. Igual que en el\n * navegador, esto AVISA además de bloquear: la lista nunca será completa, y\n * fingir que sí lo es sería peor que no tenerla.\n */\nconst TECLAS_PELIGROSAS = /^(cmd\\+q|cmd\\+w|cmd\\+shift\\+q|cmd\\+delete|cmd\\+shift\\+delete|ctrl\\+alt\\+delete)$/i;\n\nexport function teclaPeligrosa(combinacion: string): boolean {\n\treturn TECLAS_PELIGROSAS.test(combinacion.trim().replace(/\\s+/g, \"\"));\n}\n"]}
|