@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,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cliente mínimo del Chrome DevTools Protocol.
|
|
3
|
+
*
|
|
4
|
+
* Sin Playwright ni Puppeteer a propósito. Playwright son cientos de megas y
|
|
5
|
+
* se descarga sus propios navegadores; el mismo coste de cadena de suministro
|
|
6
|
+
* que ya rechazamos dos veces en este repo. CDP es un WebSocket con JSON, y
|
|
7
|
+
* Node trae `WebSocket` nativo desde la 22.
|
|
8
|
+
*
|
|
9
|
+
* Solo cubre lo que necesitan las tools: conectar, pedir y escuchar. No
|
|
10
|
+
* pretende ser una librería.
|
|
11
|
+
*/
|
|
12
|
+
export interface OpcionesCdp {
|
|
13
|
+
/** Tope por petición. Una página colgada no puede colgar el turno. */
|
|
14
|
+
timeoutMs?: number;
|
|
15
|
+
/** Inyectable para poder probar el enmarcado sin un navegador. */
|
|
16
|
+
crearSocket?: (url: string) => WebSocketLike;
|
|
17
|
+
}
|
|
18
|
+
/** Lo mínimo que usamos de un WebSocket, para poder falsearlo en pruebas. */
|
|
19
|
+
export interface WebSocketLike {
|
|
20
|
+
send(datos: string): void;
|
|
21
|
+
close(): void;
|
|
22
|
+
addEventListener(tipo: "message" | "open" | "close" | "error", handler: (evento: unknown) => void): void;
|
|
23
|
+
}
|
|
24
|
+
export declare class ClienteCdp {
|
|
25
|
+
private socket;
|
|
26
|
+
private siguienteId;
|
|
27
|
+
private pendientes;
|
|
28
|
+
private oyentes;
|
|
29
|
+
private cerrado;
|
|
30
|
+
private timeoutMs;
|
|
31
|
+
private constructor();
|
|
32
|
+
static conectar(url: string, opciones?: OpcionesCdp): Promise<ClienteCdp>;
|
|
33
|
+
/** Para pruebas: cliente sobre un socket ya "abierto". */
|
|
34
|
+
static sobreSocket(socket: WebSocketLike, timeoutMs?: number): ClienteCdp;
|
|
35
|
+
private recibir;
|
|
36
|
+
private alCerrar;
|
|
37
|
+
enviar<T = unknown>(method: string, params?: Record<string, unknown>, sessionId?: string): Promise<T>;
|
|
38
|
+
escuchar(method: string, handler: (params: unknown) => void): () => void;
|
|
39
|
+
cerrar(): void;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=cdp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cdp.d.ts","sourceRoot":"","sources":["../../../src/core/browser/cdp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAQH,MAAM,WAAW,WAAW;IAC3B,wEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kEAAkE;IAClE,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,aAAa,CAAC;CAC7C;AAED,8EAA6E;AAC7E,MAAM,WAAW,aAAa;IAC7B,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,IAAI,IAAI,CAAC;IACd,gBAAgB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAC;CACzG;AAID,qBAAa,UAAU;IACtB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,UAAU,CAAgC;IAClD,OAAO,CAAC,OAAO,CAAqD;IACpE,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAS;IAE1B,OAAO,eAQN;IAED,OAAa,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,GAAE,WAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,CAkBlF;IAED,0DAA0D;IAC1D,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,SAAsB,GAAG,UAAU,CAErF;IAED,OAAO,CAAC,OAAO;IAwBf,OAAO,CAAC,QAAQ;IAaV,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAY9G;IAED,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,CAKvE;IAED,MAAM,IAAI,IAAI,CAOb;CACD","sourcesContent":["/**\n * Cliente mínimo del Chrome DevTools Protocol.\n *\n * Sin Playwright ni Puppeteer a propósito. Playwright son cientos de megas y\n * se descarga sus propios navegadores; el mismo coste de cadena de suministro\n * que ya rechazamos dos veces en este repo. CDP es un WebSocket con JSON, y\n * Node trae `WebSocket` nativo desde la 22.\n *\n * Solo cubre lo que necesitan las tools: conectar, pedir y escuchar. No\n * pretende ser una librería.\n */\n\ninterface Pendiente {\n\tresolve: (valor: unknown) => void;\n\treject: (error: Error) => void;\n\ttemporizador: ReturnType<typeof setTimeout>;\n}\n\nexport interface OpcionesCdp {\n\t/** Tope por petición. Una página colgada no puede colgar el turno. */\n\ttimeoutMs?: number;\n\t/** Inyectable para poder probar el enmarcado sin un navegador. */\n\tcrearSocket?: (url: string) => WebSocketLike;\n}\n\n/** Lo mínimo que usamos de un WebSocket, para poder falsearlo en pruebas. */\nexport interface WebSocketLike {\n\tsend(datos: string): void;\n\tclose(): void;\n\taddEventListener(tipo: \"message\" | \"open\" | \"close\" | \"error\", handler: (evento: unknown) => void): void;\n}\n\nconst TIMEOUT_POR_DEFECTO = 30_000;\n\nexport class ClienteCdp {\n\tprivate socket: WebSocketLike;\n\tprivate siguienteId = 1;\n\tprivate pendientes = new Map<number, Pendiente>();\n\tprivate oyentes = new Map<string, Set<(params: unknown) => void>>();\n\tprivate cerrado = false;\n\tprivate timeoutMs: number;\n\n\tprivate constructor(socket: WebSocketLike, timeoutMs: number) {\n\t\tthis.socket = socket;\n\t\tthis.timeoutMs = timeoutMs;\n\t\tthis.socket.addEventListener(\"message\", (evento) => {\n\t\t\tthis.recibir((evento as { data?: unknown }).data);\n\t\t});\n\t\tthis.socket.addEventListener(\"close\", () => this.alCerrar(new Error(\"el navegador cerró la conexión\")));\n\t\tthis.socket.addEventListener(\"error\", () => this.alCerrar(new Error(\"error de conexión con el navegador\")));\n\t}\n\n\tstatic async conectar(url: string, opciones: OpcionesCdp = {}): Promise<ClienteCdp> {\n\t\tconst crear = opciones.crearSocket ?? ((u: string) => new WebSocket(u) as unknown as WebSocketLike);\n\t\tconst socket = crear(url);\n\t\tawait new Promise<void>((resolve, reject) => {\n\t\t\tconst temporizador = setTimeout(\n\t\t\t\t() => reject(new Error(`no se pudo conectar a ${url} en ${opciones.timeoutMs ?? TIMEOUT_POR_DEFECTO} ms`)),\n\t\t\t\topciones.timeoutMs ?? TIMEOUT_POR_DEFECTO,\n\t\t\t);\n\t\t\tsocket.addEventListener(\"open\", () => {\n\t\t\t\tclearTimeout(temporizador);\n\t\t\t\tresolve();\n\t\t\t});\n\t\t\tsocket.addEventListener(\"error\", () => {\n\t\t\t\tclearTimeout(temporizador);\n\t\t\t\treject(new Error(`no se pudo conectar a ${url}`));\n\t\t\t});\n\t\t});\n\t\treturn new ClienteCdp(socket, opciones.timeoutMs ?? TIMEOUT_POR_DEFECTO);\n\t}\n\n\t/** Para pruebas: cliente sobre un socket ya \"abierto\". */\n\tstatic sobreSocket(socket: WebSocketLike, timeoutMs = TIMEOUT_POR_DEFECTO): ClienteCdp {\n\t\treturn new ClienteCdp(socket, timeoutMs);\n\t}\n\n\tprivate recibir(datos: unknown): void {\n\t\tif (typeof datos !== \"string\") return;\n\t\tlet mensaje: { id?: number; method?: string; params?: unknown; result?: unknown; error?: { message?: string } };\n\t\ttry {\n\t\t\tmensaje = JSON.parse(datos);\n\t\t} catch {\n\t\t\treturn;\n\t\t}\n\n\t\tif (typeof mensaje.id === \"number\") {\n\t\t\tconst pendiente = this.pendientes.get(mensaje.id);\n\t\t\tif (!pendiente) return;\n\t\t\tthis.pendientes.delete(mensaje.id);\n\t\t\tclearTimeout(pendiente.temporizador);\n\t\t\tif (mensaje.error) pendiente.reject(new Error(mensaje.error.message ?? \"error del navegador\"));\n\t\t\telse pendiente.resolve(mensaje.result ?? {});\n\t\t\treturn;\n\t\t}\n\n\t\tif (mensaje.method) {\n\t\t\tfor (const oyente of this.oyentes.get(mensaje.method) ?? []) oyente(mensaje.params);\n\t\t}\n\t}\n\n\tprivate alCerrar(error: Error): void {\n\t\tif (this.cerrado) return;\n\t\tthis.cerrado = true;\n\t\t// Rechazar TODO lo pendiente: si no, una petición hecha justo antes de que\n\t\t// el navegador se cierre se queda esperando hasta su temporizador y el\n\t\t// turno espera con ella sin motivo.\n\t\tfor (const [, pendiente] of this.pendientes) {\n\t\t\tclearTimeout(pendiente.temporizador);\n\t\t\tpendiente.reject(error);\n\t\t}\n\t\tthis.pendientes.clear();\n\t}\n\n\tasync enviar<T = unknown>(method: string, params: Record<string, unknown> = {}, sessionId?: string): Promise<T> {\n\t\tif (this.cerrado) throw new Error(\"la conexión con el navegador está cerrada\");\n\t\tconst id = this.siguienteId++;\n\t\tconst promesa = new Promise<T>((resolve, reject) => {\n\t\t\tconst temporizador = setTimeout(() => {\n\t\t\t\tthis.pendientes.delete(id);\n\t\t\t\treject(new Error(`'${method}' no respondió en ${this.timeoutMs} ms`));\n\t\t\t}, this.timeoutMs);\n\t\t\tthis.pendientes.set(id, { resolve: resolve as (v: unknown) => void, reject, temporizador });\n\t\t});\n\t\tthis.socket.send(JSON.stringify(sessionId ? { id, method, params, sessionId } : { id, method, params }));\n\t\treturn promesa;\n\t}\n\n\tescuchar(method: string, handler: (params: unknown) => void): () => void {\n\t\tconst conjunto = this.oyentes.get(method) ?? new Set();\n\t\tconjunto.add(handler);\n\t\tthis.oyentes.set(method, conjunto);\n\t\treturn () => conjunto.delete(handler);\n\t}\n\n\tcerrar(): void {\n\t\tthis.alCerrar(new Error(\"conexión cerrada por el agente\"));\n\t\ttry {\n\t\t\tthis.socket.close();\n\t\t} catch {\n\t\t\t// Ya estaba cerrado.\n\t\t}\n\t}\n}\n"]}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cliente mínimo del Chrome DevTools Protocol.
|
|
3
|
+
*
|
|
4
|
+
* Sin Playwright ni Puppeteer a propósito. Playwright son cientos de megas y
|
|
5
|
+
* se descarga sus propios navegadores; el mismo coste de cadena de suministro
|
|
6
|
+
* que ya rechazamos dos veces en este repo. CDP es un WebSocket con JSON, y
|
|
7
|
+
* Node trae `WebSocket` nativo desde la 22.
|
|
8
|
+
*
|
|
9
|
+
* Solo cubre lo que necesitan las tools: conectar, pedir y escuchar. No
|
|
10
|
+
* pretende ser una librería.
|
|
11
|
+
*/
|
|
12
|
+
const TIMEOUT_POR_DEFECTO = 30_000;
|
|
13
|
+
export class ClienteCdp {
|
|
14
|
+
socket;
|
|
15
|
+
siguienteId = 1;
|
|
16
|
+
pendientes = new Map();
|
|
17
|
+
oyentes = new Map();
|
|
18
|
+
cerrado = false;
|
|
19
|
+
timeoutMs;
|
|
20
|
+
constructor(socket, timeoutMs) {
|
|
21
|
+
this.socket = socket;
|
|
22
|
+
this.timeoutMs = timeoutMs;
|
|
23
|
+
this.socket.addEventListener("message", (evento) => {
|
|
24
|
+
this.recibir(evento.data);
|
|
25
|
+
});
|
|
26
|
+
this.socket.addEventListener("close", () => this.alCerrar(new Error("el navegador cerró la conexión")));
|
|
27
|
+
this.socket.addEventListener("error", () => this.alCerrar(new Error("error de conexión con el navegador")));
|
|
28
|
+
}
|
|
29
|
+
static async conectar(url, opciones = {}) {
|
|
30
|
+
const crear = opciones.crearSocket ?? ((u) => new WebSocket(u));
|
|
31
|
+
const socket = crear(url);
|
|
32
|
+
await new Promise((resolve, reject) => {
|
|
33
|
+
const temporizador = setTimeout(() => reject(new Error(`no se pudo conectar a ${url} en ${opciones.timeoutMs ?? TIMEOUT_POR_DEFECTO} ms`)), opciones.timeoutMs ?? TIMEOUT_POR_DEFECTO);
|
|
34
|
+
socket.addEventListener("open", () => {
|
|
35
|
+
clearTimeout(temporizador);
|
|
36
|
+
resolve();
|
|
37
|
+
});
|
|
38
|
+
socket.addEventListener("error", () => {
|
|
39
|
+
clearTimeout(temporizador);
|
|
40
|
+
reject(new Error(`no se pudo conectar a ${url}`));
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
return new ClienteCdp(socket, opciones.timeoutMs ?? TIMEOUT_POR_DEFECTO);
|
|
44
|
+
}
|
|
45
|
+
/** Para pruebas: cliente sobre un socket ya "abierto". */
|
|
46
|
+
static sobreSocket(socket, timeoutMs = TIMEOUT_POR_DEFECTO) {
|
|
47
|
+
return new ClienteCdp(socket, timeoutMs);
|
|
48
|
+
}
|
|
49
|
+
recibir(datos) {
|
|
50
|
+
if (typeof datos !== "string")
|
|
51
|
+
return;
|
|
52
|
+
let mensaje;
|
|
53
|
+
try {
|
|
54
|
+
mensaje = JSON.parse(datos);
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
if (typeof mensaje.id === "number") {
|
|
60
|
+
const pendiente = this.pendientes.get(mensaje.id);
|
|
61
|
+
if (!pendiente)
|
|
62
|
+
return;
|
|
63
|
+
this.pendientes.delete(mensaje.id);
|
|
64
|
+
clearTimeout(pendiente.temporizador);
|
|
65
|
+
if (mensaje.error)
|
|
66
|
+
pendiente.reject(new Error(mensaje.error.message ?? "error del navegador"));
|
|
67
|
+
else
|
|
68
|
+
pendiente.resolve(mensaje.result ?? {});
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (mensaje.method) {
|
|
72
|
+
for (const oyente of this.oyentes.get(mensaje.method) ?? [])
|
|
73
|
+
oyente(mensaje.params);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
alCerrar(error) {
|
|
77
|
+
if (this.cerrado)
|
|
78
|
+
return;
|
|
79
|
+
this.cerrado = true;
|
|
80
|
+
// Rechazar TODO lo pendiente: si no, una petición hecha justo antes de que
|
|
81
|
+
// el navegador se cierre se queda esperando hasta su temporizador y el
|
|
82
|
+
// turno espera con ella sin motivo.
|
|
83
|
+
for (const [, pendiente] of this.pendientes) {
|
|
84
|
+
clearTimeout(pendiente.temporizador);
|
|
85
|
+
pendiente.reject(error);
|
|
86
|
+
}
|
|
87
|
+
this.pendientes.clear();
|
|
88
|
+
}
|
|
89
|
+
async enviar(method, params = {}, sessionId) {
|
|
90
|
+
if (this.cerrado)
|
|
91
|
+
throw new Error("la conexión con el navegador está cerrada");
|
|
92
|
+
const id = this.siguienteId++;
|
|
93
|
+
const promesa = new Promise((resolve, reject) => {
|
|
94
|
+
const temporizador = setTimeout(() => {
|
|
95
|
+
this.pendientes.delete(id);
|
|
96
|
+
reject(new Error(`'${method}' no respondió en ${this.timeoutMs} ms`));
|
|
97
|
+
}, this.timeoutMs);
|
|
98
|
+
this.pendientes.set(id, { resolve: resolve, reject, temporizador });
|
|
99
|
+
});
|
|
100
|
+
this.socket.send(JSON.stringify(sessionId ? { id, method, params, sessionId } : { id, method, params }));
|
|
101
|
+
return promesa;
|
|
102
|
+
}
|
|
103
|
+
escuchar(method, handler) {
|
|
104
|
+
const conjunto = this.oyentes.get(method) ?? new Set();
|
|
105
|
+
conjunto.add(handler);
|
|
106
|
+
this.oyentes.set(method, conjunto);
|
|
107
|
+
return () => conjunto.delete(handler);
|
|
108
|
+
}
|
|
109
|
+
cerrar() {
|
|
110
|
+
this.alCerrar(new Error("conexión cerrada por el agente"));
|
|
111
|
+
try {
|
|
112
|
+
this.socket.close();
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
// Ya estaba cerrado.
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=cdp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cdp.js","sourceRoot":"","sources":["../../../src/core/browser/cdp.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Cliente mínimo del Chrome DevTools Protocol.\n *\n * Sin Playwright ni Puppeteer a propósito. Playwright son cientos de megas y\n * se descarga sus propios navegadores; el mismo coste de cadena de suministro\n * que ya rechazamos dos veces en este repo. CDP es un WebSocket con JSON, y\n * Node trae `WebSocket` nativo desde la 22.\n *\n * Solo cubre lo que necesitan las tools: conectar, pedir y escuchar. No\n * pretende ser una librería.\n */\n\ninterface Pendiente {\n\tresolve: (valor: unknown) => void;\n\treject: (error: Error) => void;\n\ttemporizador: ReturnType<typeof setTimeout>;\n}\n\nexport interface OpcionesCdp {\n\t/** Tope por petición. Una página colgada no puede colgar el turno. */\n\ttimeoutMs?: number;\n\t/** Inyectable para poder probar el enmarcado sin un navegador. */\n\tcrearSocket?: (url: string) => WebSocketLike;\n}\n\n/** Lo mínimo que usamos de un WebSocket, para poder falsearlo en pruebas. */\nexport interface WebSocketLike {\n\tsend(datos: string): void;\n\tclose(): void;\n\taddEventListener(tipo: \"message\" | \"open\" | \"close\" | \"error\", handler: (evento: unknown) => void): void;\n}\n\nconst TIMEOUT_POR_DEFECTO = 30_000;\n\nexport class ClienteCdp {\n\tprivate socket: WebSocketLike;\n\tprivate siguienteId = 1;\n\tprivate pendientes = new Map<number, Pendiente>();\n\tprivate oyentes = new Map<string, Set<(params: unknown) => void>>();\n\tprivate cerrado = false;\n\tprivate timeoutMs: number;\n\n\tprivate constructor(socket: WebSocketLike, timeoutMs: number) {\n\t\tthis.socket = socket;\n\t\tthis.timeoutMs = timeoutMs;\n\t\tthis.socket.addEventListener(\"message\", (evento) => {\n\t\t\tthis.recibir((evento as { data?: unknown }).data);\n\t\t});\n\t\tthis.socket.addEventListener(\"close\", () => this.alCerrar(new Error(\"el navegador cerró la conexión\")));\n\t\tthis.socket.addEventListener(\"error\", () => this.alCerrar(new Error(\"error de conexión con el navegador\")));\n\t}\n\n\tstatic async conectar(url: string, opciones: OpcionesCdp = {}): Promise<ClienteCdp> {\n\t\tconst crear = opciones.crearSocket ?? ((u: string) => new WebSocket(u) as unknown as WebSocketLike);\n\t\tconst socket = crear(url);\n\t\tawait new Promise<void>((resolve, reject) => {\n\t\t\tconst temporizador = setTimeout(\n\t\t\t\t() => reject(new Error(`no se pudo conectar a ${url} en ${opciones.timeoutMs ?? TIMEOUT_POR_DEFECTO} ms`)),\n\t\t\t\topciones.timeoutMs ?? TIMEOUT_POR_DEFECTO,\n\t\t\t);\n\t\t\tsocket.addEventListener(\"open\", () => {\n\t\t\t\tclearTimeout(temporizador);\n\t\t\t\tresolve();\n\t\t\t});\n\t\t\tsocket.addEventListener(\"error\", () => {\n\t\t\t\tclearTimeout(temporizador);\n\t\t\t\treject(new Error(`no se pudo conectar a ${url}`));\n\t\t\t});\n\t\t});\n\t\treturn new ClienteCdp(socket, opciones.timeoutMs ?? TIMEOUT_POR_DEFECTO);\n\t}\n\n\t/** Para pruebas: cliente sobre un socket ya \"abierto\". */\n\tstatic sobreSocket(socket: WebSocketLike, timeoutMs = TIMEOUT_POR_DEFECTO): ClienteCdp {\n\t\treturn new ClienteCdp(socket, timeoutMs);\n\t}\n\n\tprivate recibir(datos: unknown): void {\n\t\tif (typeof datos !== \"string\") return;\n\t\tlet mensaje: { id?: number; method?: string; params?: unknown; result?: unknown; error?: { message?: string } };\n\t\ttry {\n\t\t\tmensaje = JSON.parse(datos);\n\t\t} catch {\n\t\t\treturn;\n\t\t}\n\n\t\tif (typeof mensaje.id === \"number\") {\n\t\t\tconst pendiente = this.pendientes.get(mensaje.id);\n\t\t\tif (!pendiente) return;\n\t\t\tthis.pendientes.delete(mensaje.id);\n\t\t\tclearTimeout(pendiente.temporizador);\n\t\t\tif (mensaje.error) pendiente.reject(new Error(mensaje.error.message ?? \"error del navegador\"));\n\t\t\telse pendiente.resolve(mensaje.result ?? {});\n\t\t\treturn;\n\t\t}\n\n\t\tif (mensaje.method) {\n\t\t\tfor (const oyente of this.oyentes.get(mensaje.method) ?? []) oyente(mensaje.params);\n\t\t}\n\t}\n\n\tprivate alCerrar(error: Error): void {\n\t\tif (this.cerrado) return;\n\t\tthis.cerrado = true;\n\t\t// Rechazar TODO lo pendiente: si no, una petición hecha justo antes de que\n\t\t// el navegador se cierre se queda esperando hasta su temporizador y el\n\t\t// turno espera con ella sin motivo.\n\t\tfor (const [, pendiente] of this.pendientes) {\n\t\t\tclearTimeout(pendiente.temporizador);\n\t\t\tpendiente.reject(error);\n\t\t}\n\t\tthis.pendientes.clear();\n\t}\n\n\tasync enviar<T = unknown>(method: string, params: Record<string, unknown> = {}, sessionId?: string): Promise<T> {\n\t\tif (this.cerrado) throw new Error(\"la conexión con el navegador está cerrada\");\n\t\tconst id = this.siguienteId++;\n\t\tconst promesa = new Promise<T>((resolve, reject) => {\n\t\t\tconst temporizador = setTimeout(() => {\n\t\t\t\tthis.pendientes.delete(id);\n\t\t\t\treject(new Error(`'${method}' no respondió en ${this.timeoutMs} ms`));\n\t\t\t}, this.timeoutMs);\n\t\t\tthis.pendientes.set(id, { resolve: resolve as (v: unknown) => void, reject, temporizador });\n\t\t});\n\t\tthis.socket.send(JSON.stringify(sessionId ? { id, method, params, sessionId } : { id, method, params }));\n\t\treturn promesa;\n\t}\n\n\tescuchar(method: string, handler: (params: unknown) => void): () => void {\n\t\tconst conjunto = this.oyentes.get(method) ?? new Set();\n\t\tconjunto.add(handler);\n\t\tthis.oyentes.set(method, conjunto);\n\t\treturn () => conjunto.delete(handler);\n\t}\n\n\tcerrar(): void {\n\t\tthis.alCerrar(new Error(\"conexión cerrada por el agente\"));\n\t\ttry {\n\t\t\tthis.socket.close();\n\t\t} catch {\n\t\t\t// Ya estaba cerrado.\n\t\t}\n\t}\n}\n"]}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reglas del navegador. Puro: sin sockets ni procesos.
|
|
3
|
+
*
|
|
4
|
+
* Un agente que conduce un navegador es la superficie más peligrosa que tiene
|
|
5
|
+
* este producto: hay sesiones iniciadas, cookies, correo y banca detrás de las
|
|
6
|
+
* pestañas que ya están abiertas. Por eso las reglas viven aparte y se prueban
|
|
7
|
+
* solas, en vez de estar repartidas por el código que habla con Chrome.
|
|
8
|
+
*
|
|
9
|
+
* Las tres:
|
|
10
|
+
*
|
|
11
|
+
* 1. **Solo se conducen las pestañas que abrió el agente.** Nunca las del
|
|
12
|
+
* usuario. Es la regla que copiamos de ZCode y la más importante: sin ella,
|
|
13
|
+
* "resume esta página" puede acabar leyendo el banco.
|
|
14
|
+
* 2. **Las URL pasan por la misma guarda SSRF que `web_fetch`.** Un navegador
|
|
15
|
+
* que puede ir a `169.254.169.254` es una fuga de credenciales de nube.
|
|
16
|
+
* 3. **Nunca se escribe en un campo de contraseña.** Ni aunque se lo pidan.
|
|
17
|
+
*/
|
|
18
|
+
/** Una pestaña conocida por el agente. */
|
|
19
|
+
export interface Pestaña {
|
|
20
|
+
targetId: string;
|
|
21
|
+
url: string;
|
|
22
|
+
/** `true` solo si la abrió el agente. */
|
|
23
|
+
propia: boolean;
|
|
24
|
+
}
|
|
25
|
+
export declare class PestañaAjenaError extends Error {
|
|
26
|
+
constructor(targetId: string);
|
|
27
|
+
}
|
|
28
|
+
/** Lanza si la pestaña no es del agente. Ver regla 1. */
|
|
29
|
+
export declare function exigirPestañaPropia(pestañas: Map<string, Pestaña>, targetId: string): Pestaña;
|
|
30
|
+
export interface CampoFormulario {
|
|
31
|
+
type?: string;
|
|
32
|
+
name?: string;
|
|
33
|
+
id?: string;
|
|
34
|
+
autocomplete?: string;
|
|
35
|
+
placeholder?: string;
|
|
36
|
+
ariaLabel?: string;
|
|
37
|
+
}
|
|
38
|
+
export declare function esCampoSecreto(campo: CampoFormulario): boolean;
|
|
39
|
+
export declare class CampoSecretoError extends Error {
|
|
40
|
+
constructor();
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Acciones que no se hacen sin que una persona lo diga en el chat.
|
|
44
|
+
*
|
|
45
|
+
* No es una lista de botones prohibidos: es qué hay que preguntar antes. El
|
|
46
|
+
* agente puede navegar y leer sin permiso; enviar, comprar o publicar, no.
|
|
47
|
+
*/
|
|
48
|
+
export declare const ACCIONES_QUE_PIDEN_PERMISO: readonly ["enviar un formulario", "publicar contenido", "comprar o pagar", "aceptar términos o consentimientos", "conceder permisos OAuth", "borrar datos"];
|
|
49
|
+
export declare function urlNavegable(bruta: string): URL;
|
|
50
|
+
export declare function pareceIrreversible(textoDelBoton: string): boolean;
|
|
51
|
+
//# sourceMappingURL=politica.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"politica.d.ts","sourceRoot":"","sources":["../../../src/core/browser/politica.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,2CAA0C;AAC1C,MAAM,WAAW,QAAO;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,0CAAyC;IACzC,MAAM,EAAE,OAAO,CAAC;CAChB;AAED,qBAAa,kBAAkB,SAAQ,KAAK;IAC3C,YAAY,QAAQ,EAAE,MAAM,EAM3B;CACD;AAED,0DAAyD;AACzD,wBAAgB,oBAAmB,CAAC,SAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,QAAO,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,QAAO,CAI7F;AAWD,MAAM,WAAW,eAAe;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAK9D;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IAC3C,cAMC;CACD;AAED;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,8JAO7B,CAAC;AA2BX,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAoB/C;AAYD,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAEjE","sourcesContent":["/**\n * Reglas del navegador. Puro: sin sockets ni procesos.\n *\n * Un agente que conduce un navegador es la superficie más peligrosa que tiene\n * este producto: hay sesiones iniciadas, cookies, correo y banca detrás de las\n * pestañas que ya están abiertas. Por eso las reglas viven aparte y se prueban\n * solas, en vez de estar repartidas por el código que habla con Chrome.\n *\n * Las tres:\n *\n * 1. **Solo se conducen las pestañas que abrió el agente.** Nunca las del\n * usuario. Es la regla que copiamos de ZCode y la más importante: sin ella,\n * \"resume esta página\" puede acabar leyendo el banco.\n * 2. **Las URL pasan por la misma guarda SSRF que `web_fetch`.** Un navegador\n * que puede ir a `169.254.169.254` es una fuga de credenciales de nube.\n * 3. **Nunca se escribe en un campo de contraseña.** Ni aunque se lo pidan.\n */\n\n/** Una pestaña conocida por el agente. */\nexport interface Pestaña {\n\ttargetId: string;\n\turl: string;\n\t/** `true` solo si la abrió el agente. */\n\tpropia: boolean;\n}\n\nexport class PestañaAjenaError extends Error {\n\tconstructor(targetId: string) {\n\t\tsuper(\n\t\t\t`La pestaña ${targetId} no la abrió el agente. Solo se pueden conducir pestañas abiertas con browser_open; ` +\n\t\t\t\t`las del usuario tienen sesiones iniciadas detrás.`,\n\t\t);\n\t\tthis.name = \"PestañaAjenaError\";\n\t}\n}\n\n/** Lanza si la pestaña no es del agente. Ver regla 1. */\nexport function exigirPestañaPropia(pestañas: Map<string, Pestaña>, targetId: string): Pestaña {\n\tconst pestaña = pestañas.get(targetId);\n\tif (!pestaña || !pestaña.propia) throw new PestañaAjenaError(targetId);\n\treturn pestaña;\n}\n\n/**\n * Campos donde el agente no escribe nunca.\n *\n * Se mira el tipo, el nombre, el id y el autocomplete: un formulario puede\n * usar `type=\"text\"` con `autocomplete=\"current-password\"` para su propio\n * gestor, y sigue siendo una contraseña.\n */\nconst PISTAS_SECRETO = /pass(word|wd)?|contrase|secret|token|api[-_ ]?key|cvv|cvc|card[-_ ]?number|tarjeta|iban|ssn/i;\n\nexport interface CampoFormulario {\n\ttype?: string;\n\tname?: string;\n\tid?: string;\n\tautocomplete?: string;\n\tplaceholder?: string;\n\tariaLabel?: string;\n}\n\nexport function esCampoSecreto(campo: CampoFormulario): boolean {\n\tif ((campo.type ?? \"\").toLowerCase() === \"password\") return true;\n\treturn [campo.name, campo.id, campo.autocomplete, campo.placeholder, campo.ariaLabel].some(\n\t\t(v) => typeof v === \"string\" && PISTAS_SECRETO.test(v),\n\t);\n}\n\nexport class CampoSecretoError extends Error {\n\tconstructor() {\n\t\tsuper(\n\t\t\t\"Ese campo pide una credencial. El agente no escribe contraseñas, tokens ni datos de tarjeta: \" +\n\t\t\t\t\"escríbelo tú, o usa el gestor de contraseñas.\",\n\t\t);\n\t\tthis.name = \"CampoSecretoError\";\n\t}\n}\n\n/**\n * Acciones que no se hacen sin que una persona lo diga en el chat.\n *\n * No es una lista de botones prohibidos: es qué hay que preguntar antes. El\n * agente puede navegar y leer sin permiso; enviar, comprar o publicar, no.\n */\nexport const ACCIONES_QUE_PIDEN_PERMISO = [\n\t\"enviar un formulario\",\n\t\"publicar contenido\",\n\t\"comprar o pagar\",\n\t\"aceptar términos o consentimientos\",\n\t\"conceder permisos OAuth\",\n\t\"borrar datos\",\n] as const;\n\n/**\n * URL a las que el navegador del agente puede ir.\n *\n * Es MÁS PERMISIVA que la de `web_fetch`, y a propósito: `web_fetch` descarga\n * una URL que ha propuesto el modelo, muchas veces leída de un README, y ahí\n * `localhost` no tiene por qué ser cosa del usuario. El navegador es otra cosa:\n * mirar `http://localhost:3000` es EL caso de uso de un agente de programación.\n * Bloquearlo dejaría la herramienta sin su motivo de existir.\n *\n * Lo que sigue prohibido es lo que nunca es \"mi aplicación\":\n * - los endpoints de metadatos de nube, que devuelven credenciales de la\n * instancia y son el objetivo clásico de un SSRF;\n * - el resto de la red privada, que son OTRAS máquinas, no la del usuario;\n * - todo lo que no sea http o https — nada de `file:`, que daría acceso al\n * disco entero a través del navegador.\n */\nconst METADATOS_NUBE = new Set([\"169.254.169.254\", \"metadata.google.internal\", \"metadata\", \"100.100.100.200\"]);\nconst LOOPBACK = /^(?:127\\.\\d+\\.\\d+\\.\\d+|::1|localhost)$/i;\n// Incluye 127/8 a propósito, aunque el loopback se permita: la lista describe\n// \"esto no es internet público\", y la excepción se hace ARRIBA y explícita. Sin\n// el 127 aquí, la rama de loopback era código muerto — quitarla no rompía nada,\n// y una prueba que intentó romperla pasó igual.\nconst RANGOS_NO_PUBLICOS =\n\t/^(?:10\\.|127\\.|192\\.168\\.|172\\.(?:1[6-9]|2\\d|3[01])\\.|169\\.254\\.|100\\.(?:6[4-9]|[7-9]\\d|1[01]\\d|12[0-7])\\.)/;\n\nexport function urlNavegable(bruta: string): URL {\n\tlet url: URL;\n\ttry {\n\t\turl = new URL(bruta);\n\t} catch {\n\t\tthrow new Error(`URL inválida: ${bruta}`);\n\t}\n\tif (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n\t\tthrow new Error(`Solo se permiten http y https (recibido: ${url.protocol})`);\n\t}\n\tconst host = url.hostname.replace(/^\\[|\\]$/g, \"\").toLowerCase();\n\tif (METADATOS_NUBE.has(host)) {\n\t\tthrow new Error(`Bloqueado: ${host} es el endpoint de metadatos de la nube y devuelve credenciales.`);\n\t}\n\t// El loopback SÍ se permite: es la aplicación del propio usuario.\n\tif (LOOPBACK.test(host)) return url;\n\tif (RANGOS_NO_PUBLICOS.test(host)) {\n\t\tthrow new Error(`Bloqueado: ${host} es una máquina de la red interna, no tu aplicación local.`);\n\t}\n\treturn url;\n}\n\n/**\n * Texto de botones que casi siempre son irreversibles.\n *\n * Sirve para AVISAR, no para bloquear: la decisión es del usuario y una lista\n * de palabras nunca va a ser completa. Bloquear con ella daría una falsa\n * sensación de seguridad y rompería páginas legítimas.\n */\nconst TEXTO_IRREVERSIBLE =\n\t/^\\s*(enviar|send|submit|publicar|publish|post|comprar|buy|pagar|pay|confirmar|confirm|borrar|delete|eliminar|aceptar|accept|agree|allow|permitir)\\b/i;\n\nexport function pareceIrreversible(textoDelBoton: string): boolean {\n\treturn TEXTO_IRREVERSIBLE.test(textoDelBoton);\n}\n"]}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reglas del navegador. Puro: sin sockets ni procesos.
|
|
3
|
+
*
|
|
4
|
+
* Un agente que conduce un navegador es la superficie más peligrosa que tiene
|
|
5
|
+
* este producto: hay sesiones iniciadas, cookies, correo y banca detrás de las
|
|
6
|
+
* pestañas que ya están abiertas. Por eso las reglas viven aparte y se prueban
|
|
7
|
+
* solas, en vez de estar repartidas por el código que habla con Chrome.
|
|
8
|
+
*
|
|
9
|
+
* Las tres:
|
|
10
|
+
*
|
|
11
|
+
* 1. **Solo se conducen las pestañas que abrió el agente.** Nunca las del
|
|
12
|
+
* usuario. Es la regla que copiamos de ZCode y la más importante: sin ella,
|
|
13
|
+
* "resume esta página" puede acabar leyendo el banco.
|
|
14
|
+
* 2. **Las URL pasan por la misma guarda SSRF que `web_fetch`.** Un navegador
|
|
15
|
+
* que puede ir a `169.254.169.254` es una fuga de credenciales de nube.
|
|
16
|
+
* 3. **Nunca se escribe en un campo de contraseña.** Ni aunque se lo pidan.
|
|
17
|
+
*/
|
|
18
|
+
export class PestañaAjenaError extends Error {
|
|
19
|
+
constructor(targetId) {
|
|
20
|
+
super(`La pestaña ${targetId} no la abrió el agente. Solo se pueden conducir pestañas abiertas con browser_open; ` +
|
|
21
|
+
`las del usuario tienen sesiones iniciadas detrás.`);
|
|
22
|
+
this.name = "PestañaAjenaError";
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/** Lanza si la pestaña no es del agente. Ver regla 1. */
|
|
26
|
+
export function exigirPestañaPropia(pestañas, targetId) {
|
|
27
|
+
const pestaña = pestañas.get(targetId);
|
|
28
|
+
if (!pestaña || !pestaña.propia)
|
|
29
|
+
throw new PestañaAjenaError(targetId);
|
|
30
|
+
return pestaña;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Campos donde el agente no escribe nunca.
|
|
34
|
+
*
|
|
35
|
+
* Se mira el tipo, el nombre, el id y el autocomplete: un formulario puede
|
|
36
|
+
* usar `type="text"` con `autocomplete="current-password"` para su propio
|
|
37
|
+
* gestor, y sigue siendo una contraseña.
|
|
38
|
+
*/
|
|
39
|
+
const PISTAS_SECRETO = /pass(word|wd)?|contrase|secret|token|api[-_ ]?key|cvv|cvc|card[-_ ]?number|tarjeta|iban|ssn/i;
|
|
40
|
+
export function esCampoSecreto(campo) {
|
|
41
|
+
if ((campo.type ?? "").toLowerCase() === "password")
|
|
42
|
+
return true;
|
|
43
|
+
return [campo.name, campo.id, campo.autocomplete, campo.placeholder, campo.ariaLabel].some((v) => typeof v === "string" && PISTAS_SECRETO.test(v));
|
|
44
|
+
}
|
|
45
|
+
export class CampoSecretoError extends Error {
|
|
46
|
+
constructor() {
|
|
47
|
+
super("Ese campo pide una credencial. El agente no escribe contraseñas, tokens ni datos de tarjeta: " +
|
|
48
|
+
"escríbelo tú, o usa el gestor de contraseñas.");
|
|
49
|
+
this.name = "CampoSecretoError";
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Acciones que no se hacen sin que una persona lo diga en el chat.
|
|
54
|
+
*
|
|
55
|
+
* No es una lista de botones prohibidos: es qué hay que preguntar antes. El
|
|
56
|
+
* agente puede navegar y leer sin permiso; enviar, comprar o publicar, no.
|
|
57
|
+
*/
|
|
58
|
+
export const ACCIONES_QUE_PIDEN_PERMISO = [
|
|
59
|
+
"enviar un formulario",
|
|
60
|
+
"publicar contenido",
|
|
61
|
+
"comprar o pagar",
|
|
62
|
+
"aceptar términos o consentimientos",
|
|
63
|
+
"conceder permisos OAuth",
|
|
64
|
+
"borrar datos",
|
|
65
|
+
];
|
|
66
|
+
/**
|
|
67
|
+
* URL a las que el navegador del agente puede ir.
|
|
68
|
+
*
|
|
69
|
+
* Es MÁS PERMISIVA que la de `web_fetch`, y a propósito: `web_fetch` descarga
|
|
70
|
+
* una URL que ha propuesto el modelo, muchas veces leída de un README, y ahí
|
|
71
|
+
* `localhost` no tiene por qué ser cosa del usuario. El navegador es otra cosa:
|
|
72
|
+
* mirar `http://localhost:3000` es EL caso de uso de un agente de programación.
|
|
73
|
+
* Bloquearlo dejaría la herramienta sin su motivo de existir.
|
|
74
|
+
*
|
|
75
|
+
* Lo que sigue prohibido es lo que nunca es "mi aplicación":
|
|
76
|
+
* - los endpoints de metadatos de nube, que devuelven credenciales de la
|
|
77
|
+
* instancia y son el objetivo clásico de un SSRF;
|
|
78
|
+
* - el resto de la red privada, que son OTRAS máquinas, no la del usuario;
|
|
79
|
+
* - todo lo que no sea http o https — nada de `file:`, que daría acceso al
|
|
80
|
+
* disco entero a través del navegador.
|
|
81
|
+
*/
|
|
82
|
+
const METADATOS_NUBE = new Set(["169.254.169.254", "metadata.google.internal", "metadata", "100.100.100.200"]);
|
|
83
|
+
const LOOPBACK = /^(?:127\.\d+\.\d+\.\d+|::1|localhost)$/i;
|
|
84
|
+
// Incluye 127/8 a propósito, aunque el loopback se permita: la lista describe
|
|
85
|
+
// "esto no es internet público", y la excepción se hace ARRIBA y explícita. Sin
|
|
86
|
+
// el 127 aquí, la rama de loopback era código muerto — quitarla no rompía nada,
|
|
87
|
+
// y una prueba que intentó romperla pasó igual.
|
|
88
|
+
const RANGOS_NO_PUBLICOS = /^(?:10\.|127\.|192\.168\.|172\.(?:1[6-9]|2\d|3[01])\.|169\.254\.|100\.(?:6[4-9]|[7-9]\d|1[01]\d|12[0-7])\.)/;
|
|
89
|
+
export function urlNavegable(bruta) {
|
|
90
|
+
let url;
|
|
91
|
+
try {
|
|
92
|
+
url = new URL(bruta);
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
throw new Error(`URL inválida: ${bruta}`);
|
|
96
|
+
}
|
|
97
|
+
if (url.protocol !== "http:" && url.protocol !== "https:") {
|
|
98
|
+
throw new Error(`Solo se permiten http y https (recibido: ${url.protocol})`);
|
|
99
|
+
}
|
|
100
|
+
const host = url.hostname.replace(/^\[|\]$/g, "").toLowerCase();
|
|
101
|
+
if (METADATOS_NUBE.has(host)) {
|
|
102
|
+
throw new Error(`Bloqueado: ${host} es el endpoint de metadatos de la nube y devuelve credenciales.`);
|
|
103
|
+
}
|
|
104
|
+
// El loopback SÍ se permite: es la aplicación del propio usuario.
|
|
105
|
+
if (LOOPBACK.test(host))
|
|
106
|
+
return url;
|
|
107
|
+
if (RANGOS_NO_PUBLICOS.test(host)) {
|
|
108
|
+
throw new Error(`Bloqueado: ${host} es una máquina de la red interna, no tu aplicación local.`);
|
|
109
|
+
}
|
|
110
|
+
return url;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Texto de botones que casi siempre son irreversibles.
|
|
114
|
+
*
|
|
115
|
+
* Sirve para AVISAR, no para bloquear: la decisión es del usuario y una lista
|
|
116
|
+
* de palabras nunca va a ser completa. Bloquear con ella daría una falsa
|
|
117
|
+
* sensación de seguridad y rompería páginas legítimas.
|
|
118
|
+
*/
|
|
119
|
+
const TEXTO_IRREVERSIBLE = /^\s*(enviar|send|submit|publicar|publish|post|comprar|buy|pagar|pay|confirmar|confirm|borrar|delete|eliminar|aceptar|accept|agree|allow|permitir)\b/i;
|
|
120
|
+
export function pareceIrreversible(textoDelBoton) {
|
|
121
|
+
return TEXTO_IRREVERSIBLE.test(textoDelBoton);
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=politica.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"politica.js","sourceRoot":"","sources":["../../../src/core/browser/politica.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Reglas del navegador. Puro: sin sockets ni procesos.\n *\n * Un agente que conduce un navegador es la superficie más peligrosa que tiene\n * este producto: hay sesiones iniciadas, cookies, correo y banca detrás de las\n * pestañas que ya están abiertas. Por eso las reglas viven aparte y se prueban\n * solas, en vez de estar repartidas por el código que habla con Chrome.\n *\n * Las tres:\n *\n * 1. **Solo se conducen las pestañas que abrió el agente.** Nunca las del\n * usuario. Es la regla que copiamos de ZCode y la más importante: sin ella,\n * \"resume esta página\" puede acabar leyendo el banco.\n * 2. **Las URL pasan por la misma guarda SSRF que `web_fetch`.** Un navegador\n * que puede ir a `169.254.169.254` es una fuga de credenciales de nube.\n * 3. **Nunca se escribe en un campo de contraseña.** Ni aunque se lo pidan.\n */\n\n/** Una pestaña conocida por el agente. */\nexport interface Pestaña {\n\ttargetId: string;\n\turl: string;\n\t/** `true` solo si la abrió el agente. */\n\tpropia: boolean;\n}\n\nexport class PestañaAjenaError extends Error {\n\tconstructor(targetId: string) {\n\t\tsuper(\n\t\t\t`La pestaña ${targetId} no la abrió el agente. Solo se pueden conducir pestañas abiertas con browser_open; ` +\n\t\t\t\t`las del usuario tienen sesiones iniciadas detrás.`,\n\t\t);\n\t\tthis.name = \"PestañaAjenaError\";\n\t}\n}\n\n/** Lanza si la pestaña no es del agente. Ver regla 1. */\nexport function exigirPestañaPropia(pestañas: Map<string, Pestaña>, targetId: string): Pestaña {\n\tconst pestaña = pestañas.get(targetId);\n\tif (!pestaña || !pestaña.propia) throw new PestañaAjenaError(targetId);\n\treturn pestaña;\n}\n\n/**\n * Campos donde el agente no escribe nunca.\n *\n * Se mira el tipo, el nombre, el id y el autocomplete: un formulario puede\n * usar `type=\"text\"` con `autocomplete=\"current-password\"` para su propio\n * gestor, y sigue siendo una contraseña.\n */\nconst PISTAS_SECRETO = /pass(word|wd)?|contrase|secret|token|api[-_ ]?key|cvv|cvc|card[-_ ]?number|tarjeta|iban|ssn/i;\n\nexport interface CampoFormulario {\n\ttype?: string;\n\tname?: string;\n\tid?: string;\n\tautocomplete?: string;\n\tplaceholder?: string;\n\tariaLabel?: string;\n}\n\nexport function esCampoSecreto(campo: CampoFormulario): boolean {\n\tif ((campo.type ?? \"\").toLowerCase() === \"password\") return true;\n\treturn [campo.name, campo.id, campo.autocomplete, campo.placeholder, campo.ariaLabel].some(\n\t\t(v) => typeof v === \"string\" && PISTAS_SECRETO.test(v),\n\t);\n}\n\nexport class CampoSecretoError extends Error {\n\tconstructor() {\n\t\tsuper(\n\t\t\t\"Ese campo pide una credencial. El agente no escribe contraseñas, tokens ni datos de tarjeta: \" +\n\t\t\t\t\"escríbelo tú, o usa el gestor de contraseñas.\",\n\t\t);\n\t\tthis.name = \"CampoSecretoError\";\n\t}\n}\n\n/**\n * Acciones que no se hacen sin que una persona lo diga en el chat.\n *\n * No es una lista de botones prohibidos: es qué hay que preguntar antes. El\n * agente puede navegar y leer sin permiso; enviar, comprar o publicar, no.\n */\nexport const ACCIONES_QUE_PIDEN_PERMISO = [\n\t\"enviar un formulario\",\n\t\"publicar contenido\",\n\t\"comprar o pagar\",\n\t\"aceptar términos o consentimientos\",\n\t\"conceder permisos OAuth\",\n\t\"borrar datos\",\n] as const;\n\n/**\n * URL a las que el navegador del agente puede ir.\n *\n * Es MÁS PERMISIVA que la de `web_fetch`, y a propósito: `web_fetch` descarga\n * una URL que ha propuesto el modelo, muchas veces leída de un README, y ahí\n * `localhost` no tiene por qué ser cosa del usuario. El navegador es otra cosa:\n * mirar `http://localhost:3000` es EL caso de uso de un agente de programación.\n * Bloquearlo dejaría la herramienta sin su motivo de existir.\n *\n * Lo que sigue prohibido es lo que nunca es \"mi aplicación\":\n * - los endpoints de metadatos de nube, que devuelven credenciales de la\n * instancia y son el objetivo clásico de un SSRF;\n * - el resto de la red privada, que son OTRAS máquinas, no la del usuario;\n * - todo lo que no sea http o https — nada de `file:`, que daría acceso al\n * disco entero a través del navegador.\n */\nconst METADATOS_NUBE = new Set([\"169.254.169.254\", \"metadata.google.internal\", \"metadata\", \"100.100.100.200\"]);\nconst LOOPBACK = /^(?:127\\.\\d+\\.\\d+\\.\\d+|::1|localhost)$/i;\n// Incluye 127/8 a propósito, aunque el loopback se permita: la lista describe\n// \"esto no es internet público\", y la excepción se hace ARRIBA y explícita. Sin\n// el 127 aquí, la rama de loopback era código muerto — quitarla no rompía nada,\n// y una prueba que intentó romperla pasó igual.\nconst RANGOS_NO_PUBLICOS =\n\t/^(?:10\\.|127\\.|192\\.168\\.|172\\.(?:1[6-9]|2\\d|3[01])\\.|169\\.254\\.|100\\.(?:6[4-9]|[7-9]\\d|1[01]\\d|12[0-7])\\.)/;\n\nexport function urlNavegable(bruta: string): URL {\n\tlet url: URL;\n\ttry {\n\t\turl = new URL(bruta);\n\t} catch {\n\t\tthrow new Error(`URL inválida: ${bruta}`);\n\t}\n\tif (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n\t\tthrow new Error(`Solo se permiten http y https (recibido: ${url.protocol})`);\n\t}\n\tconst host = url.hostname.replace(/^\\[|\\]$/g, \"\").toLowerCase();\n\tif (METADATOS_NUBE.has(host)) {\n\t\tthrow new Error(`Bloqueado: ${host} es el endpoint de metadatos de la nube y devuelve credenciales.`);\n\t}\n\t// El loopback SÍ se permite: es la aplicación del propio usuario.\n\tif (LOOPBACK.test(host)) return url;\n\tif (RANGOS_NO_PUBLICOS.test(host)) {\n\t\tthrow new Error(`Bloqueado: ${host} es una máquina de la red interna, no tu aplicación local.`);\n\t}\n\treturn url;\n}\n\n/**\n * Texto de botones que casi siempre son irreversibles.\n *\n * Sirve para AVISAR, no para bloquear: la decisión es del usuario y una lista\n * de palabras nunca va a ser completa. Bloquear con ella daría una falsa\n * sensación de seguridad y rompería páginas legítimas.\n */\nconst TEXTO_IRREVERSIBLE =\n\t/^\\s*(enviar|send|submit|publicar|publish|post|comprar|buy|pagar|pay|confirmar|confirm|borrar|delete|eliminar|aceptar|accept|agree|allow|permitir)\\b/i;\n\nexport function pareceIrreversible(textoDelBoton: string): boolean {\n\treturn TEXTO_IRREVERSIBLE.test(textoDelBoton);\n}\n"]}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* El navegador del agente.
|
|
3
|
+
*
|
|
4
|
+
* Arranca Chrome con un **perfil propio y vacío** (`--user-data-dir` dentro de
|
|
5
|
+
* `<agentDir>/browser`). Eso no es un detalle de limpieza: convierte la regla
|
|
6
|
+
* de "solo se conducen las pestañas del agente" en algo estructural en vez de
|
|
7
|
+
* una promesa. En ese perfil no hay cookies, ni sesiones iniciadas, ni el
|
|
8
|
+
* correo del usuario — aunque el agente se equivoque, no hay nada que filtrar.
|
|
9
|
+
*
|
|
10
|
+
* El precio es que no puede usar sitios donde el usuario ya está identificado.
|
|
11
|
+
* Es el precio correcto: la alternativa es un agente con acceso al banco.
|
|
12
|
+
*/
|
|
13
|
+
import { type Pestaña } from "./politica.ts";
|
|
14
|
+
export declare function buscarNavegador(candidatos?: string[]): string | null;
|
|
15
|
+
export interface OpcionesNavegador {
|
|
16
|
+
agentDir: string;
|
|
17
|
+
/** 0 = que el sistema elija uno libre, que es lo que queremos. */
|
|
18
|
+
puerto?: number;
|
|
19
|
+
headless?: boolean;
|
|
20
|
+
ejecutable?: string;
|
|
21
|
+
/** Ancho y alto iniciales; `browser_viewport` los cambia después. */
|
|
22
|
+
viewport?: {
|
|
23
|
+
width: number;
|
|
24
|
+
height: number;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export declare class NavegadorAgente {
|
|
28
|
+
private proceso;
|
|
29
|
+
private cliente;
|
|
30
|
+
private pestañas;
|
|
31
|
+
private sesionesPorTarget;
|
|
32
|
+
private viewport;
|
|
33
|
+
private constructor();
|
|
34
|
+
static abrir(opciones: OpcionesNavegador): Promise<NavegadorAgente>;
|
|
35
|
+
private exigirCliente;
|
|
36
|
+
/** Abre una pestaña NUEVA. Es la única forma de que el agente tenga una. */
|
|
37
|
+
abrirPestaña(url: string): Promise<Pestaña>;
|
|
38
|
+
private sesionDe;
|
|
39
|
+
navegar(targetId: string, url: string): Promise<void>;
|
|
40
|
+
/** Evalúa JavaScript en la pestaña y devuelve el valor serializado. */
|
|
41
|
+
evaluar<T = unknown>(targetId: string, expresion: string): Promise<T>;
|
|
42
|
+
capturar(targetId: string): Promise<string>;
|
|
43
|
+
cambiarViewport(targetId: string, width: number, height: number, movil?: boolean): Promise<void>;
|
|
44
|
+
get viewportActual(): {
|
|
45
|
+
width: number;
|
|
46
|
+
height: number;
|
|
47
|
+
};
|
|
48
|
+
cerrarPestaña(targetId: string): Promise<void>;
|
|
49
|
+
listarPestañas(): Pestaña[];
|
|
50
|
+
cerrar(): void;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=sesion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sesion.d.ts","sourceRoot":"","sources":["../../../src/core/browser/sesion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,EAAuB,KAAK,QAAO,EAAE,MAAM,eAAe,CAAC;AAclE,wBAAgB,eAAe,CAAC,UAAU,GAAE,MAAM,EAAsB,GAAG,MAAM,GAAG,IAAI,CAEvF;AAED,MAAM,WAAW,iBAAiB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sEAAqE;IACrE,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7C;AAED,qBAAa,eAAe;IAC3B,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,SAAQ,CAA8B;IAC9C,OAAO,CAAC,iBAAiB,CAA6B;IAItD,OAAO,CAAC,QAAQ,CAAoC;IAEpD,OAAO,eAIN;IAED,OAAa,KAAK,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC,CAiCxE;IAED,OAAO,CAAC,aAAa;IAKrB,8EAA4E;IACtE,aAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAO,CAAC,CAahD;IAED,OAAO,CAAC,QAAQ;IAOV,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAK1D;IAED,yEAAuE;IACjE,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAc1E;IAEK,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQhD;IAEK,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAQnG;IAED,IAAI,cAAc,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAEtD;IAEK,cAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKnD;IAED,eAAc,IAAI,QAAO,EAAE,CAE1B;IAED,MAAM,IAAI,IAAI,CAOb;CACD","sourcesContent":["/**\n * El navegador del agente.\n *\n * Arranca Chrome con un **perfil propio y vacío** (`--user-data-dir` dentro de\n * `<agentDir>/browser`). Eso no es un detalle de limpieza: convierte la regla\n * de \"solo se conducen las pestañas del agente\" en algo estructural en vez de\n * una promesa. En ese perfil no hay cookies, ni sesiones iniciadas, ni el\n * correo del usuario — aunque el agente se equivoque, no hay nada que filtrar.\n *\n * El precio es que no puede usar sitios donde el usuario ya está identificado.\n * Es el precio correcto: la alternativa es un agente con acceso al banco.\n */\n\nimport { type ChildProcess, spawn } from \"node:child_process\";\nimport { existsSync, mkdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { ClienteCdp } from \"./cdp.ts\";\nimport { exigirPestañaPropia, type Pestaña } from \"./politica.ts\";\n\nconst CANDIDATOS_CHROME = [\n\t\"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome\",\n\t\"/Applications/Chromium.app/Contents/MacOS/Chromium\",\n\t\"/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge\",\n\t\"/Applications/Brave Browser.app/Contents/MacOS/Brave Browser\",\n\t\"/usr/bin/google-chrome\",\n\t\"/usr/bin/chromium\",\n\t\"/usr/bin/chromium-browser\",\n\t\"C:\\\\Program Files\\\\Google\\\\Chrome\\\\Application\\\\chrome.exe\",\n\t\"C:\\\\Program Files (x86)\\\\Google\\\\Chrome\\\\Application\\\\chrome.exe\",\n];\n\nexport function buscarNavegador(candidatos: string[] = CANDIDATOS_CHROME): string | null {\n\treturn candidatos.find((ruta) => existsSync(ruta)) ?? null;\n}\n\nexport interface OpcionesNavegador {\n\tagentDir: string;\n\t/** 0 = que el sistema elija uno libre, que es lo que queremos. */\n\tpuerto?: number;\n\theadless?: boolean;\n\tejecutable?: string;\n\t/** Ancho y alto iniciales; `browser_viewport` los cambia después. */\n\tviewport?: { width: number; height: number };\n}\n\nexport class NavegadorAgente {\n\tprivate proceso: ChildProcess | null = null;\n\tprivate cliente: ClienteCdp | null = null;\n\tprivate pestañas = new Map<string, Pestaña>();\n\tprivate sesionesPorTarget = new Map<string, string>();\n\n\t// Campo normal y no propiedad de constructor: el repo compila con\n\t// `erasableSyntaxOnly`, que prohíbe la forma corta.\n\tprivate viewport: { width: number; height: number };\n\n\tprivate constructor(proceso: ChildProcess, cliente: ClienteCdp, viewport: { width: number; height: number }) {\n\t\tthis.proceso = proceso;\n\t\tthis.cliente = cliente;\n\t\tthis.viewport = viewport;\n\t}\n\n\tstatic async abrir(opciones: OpcionesNavegador): Promise<NavegadorAgente> {\n\t\tconst ejecutable = opciones.ejecutable ?? buscarNavegador();\n\t\tif (!ejecutable) {\n\t\t\tthrow new Error(\n\t\t\t\t\"No se encontró Chrome, Chromium, Edge ni Brave. Instala uno o pasa la ruta en la configuración.\",\n\t\t\t);\n\t\t}\n\t\tconst perfil = join(opciones.agentDir, \"browser\", \"perfil\");\n\t\tmkdirSync(perfil, { recursive: true, mode: 0o700 });\n\t\tconst viewport = opciones.viewport ?? { width: 1280, height: 800 };\n\n\t\tconst puerto = opciones.puerto ?? 0;\n\t\tconst proceso = spawn(\n\t\t\tejecutable,\n\t\t\t[\n\t\t\t\t`--remote-debugging-port=${puerto}`,\n\t\t\t\t// Perfil propio y vacío: ver la cabecera del fichero.\n\t\t\t\t`--user-data-dir=${perfil}`,\n\t\t\t\t\"--no-first-run\",\n\t\t\t\t\"--no-default-browser-check\",\n\t\t\t\t// Sin esto, Chrome puede reutilizar una instancia ya abierta del\n\t\t\t\t// usuario y acabaríamos conduciendo SU navegador.\n\t\t\t\t\"--disable-features=ChromeWhatsNewUI\",\n\t\t\t\t`--window-size=${viewport.width},${viewport.height}`,\n\t\t\t\t...(opciones.headless ? [\"--headless=new\"] : []),\n\t\t\t\t\"about:blank\",\n\t\t\t],\n\t\t\t{ stdio: [\"ignore\", \"ignore\", \"pipe\"] },\n\t\t);\n\n\t\tconst urlWs = await leerUrlDevTools(proceso);\n\t\tconst cliente = await ClienteCdp.conectar(urlWs);\n\t\treturn new NavegadorAgente(proceso, cliente, viewport);\n\t}\n\n\tprivate exigirCliente(): ClienteCdp {\n\t\tif (!this.cliente) throw new Error(\"el navegador está cerrado\");\n\t\treturn this.cliente;\n\t}\n\n\t/** Abre una pestaña NUEVA. Es la única forma de que el agente tenga una. */\n\tasync abrirPestaña(url: string): Promise<Pestaña> {\n\t\tconst cliente = this.exigirCliente();\n\t\tconst { targetId } = await cliente.enviar<{ targetId: string }>(\"Target.createTarget\", { url });\n\t\tconst { sessionId } = await cliente.enviar<{ sessionId: string }>(\"Target.attachToTarget\", {\n\t\t\ttargetId,\n\t\t\tflatten: true,\n\t\t});\n\t\tthis.sesionesPorTarget.set(targetId, sessionId);\n\t\tconst pestaña: Pestaña = { targetId, url, propia: true };\n\t\tthis.pestañas.set(targetId, pestaña);\n\t\tawait cliente.enviar(\"Page.enable\", {}, sessionId);\n\t\tawait cliente.enviar(\"Runtime.enable\", {}, sessionId);\n\t\treturn pestaña;\n\t}\n\n\tprivate sesionDe(targetId: string): string {\n\t\texigirPestañaPropia(this.pestañas, targetId);\n\t\tconst sessionId = this.sesionesPorTarget.get(targetId);\n\t\tif (!sessionId) throw new Error(`la pestaña ${targetId} no está conectada`);\n\t\treturn sessionId;\n\t}\n\n\tasync navegar(targetId: string, url: string): Promise<void> {\n\t\tconst sessionId = this.sesionDe(targetId);\n\t\tawait this.exigirCliente().enviar(\"Page.navigate\", { url }, sessionId);\n\t\tconst pestaña = this.pestañas.get(targetId);\n\t\tif (pestaña) pestaña.url = url;\n\t}\n\n\t/** Evalúa JavaScript en la pestaña y devuelve el valor serializado. */\n\tasync evaluar<T = unknown>(targetId: string, expresion: string): Promise<T> {\n\t\tconst sessionId = this.sesionDe(targetId);\n\t\tconst respuesta = await this.exigirCliente().enviar<{\n\t\t\tresult?: { value?: T };\n\t\t\texceptionDetails?: { text?: string; exception?: { description?: string } };\n\t\t}>(\"Runtime.evaluate\", { expression: expresion, returnByValue: true, awaitPromise: true }, sessionId);\n\t\tif (respuesta.exceptionDetails) {\n\t\t\tthrow new Error(\n\t\t\t\trespuesta.exceptionDetails.exception?.description ??\n\t\t\t\t\trespuesta.exceptionDetails.text ??\n\t\t\t\t\t\"error en la página\",\n\t\t\t);\n\t\t}\n\t\treturn respuesta.result?.value as T;\n\t}\n\n\tasync capturar(targetId: string): Promise<string> {\n\t\tconst sessionId = this.sesionDe(targetId);\n\t\tconst { data } = await this.exigirCliente().enviar<{ data: string }>(\n\t\t\t\"Page.captureScreenshot\",\n\t\t\t{ format: \"png\" },\n\t\t\tsessionId,\n\t\t);\n\t\treturn data;\n\t}\n\n\tasync cambiarViewport(targetId: string, width: number, height: number, movil = false): Promise<void> {\n\t\tconst sessionId = this.sesionDe(targetId);\n\t\tawait this.exigirCliente().enviar(\n\t\t\t\"Emulation.setDeviceMetricsOverride\",\n\t\t\t{ width, height, deviceScaleFactor: 1, mobile: movil },\n\t\t\tsessionId,\n\t\t);\n\t\tthis.viewport = { width, height };\n\t}\n\n\tget viewportActual(): { width: number; height: number } {\n\t\treturn { ...this.viewport };\n\t}\n\n\tasync cerrarPestaña(targetId: string): Promise<void> {\n\t\tthis.sesionDe(targetId);\n\t\tawait this.exigirCliente().enviar(\"Target.closeTarget\", { targetId });\n\t\tthis.pestañas.delete(targetId);\n\t\tthis.sesionesPorTarget.delete(targetId);\n\t}\n\n\tlistarPestañas(): Pestaña[] {\n\t\treturn [...this.pestañas.values()];\n\t}\n\n\tcerrar(): void {\n\t\tthis.cliente?.cerrar();\n\t\tthis.cliente = null;\n\t\tthis.proceso?.kill();\n\t\tthis.proceso = null;\n\t\tthis.pestañas.clear();\n\t\tthis.sesionesPorTarget.clear();\n\t}\n}\n\n/**\n * Lee la URL de DevTools que Chrome escribe en stderr al arrancar.\n *\n * Se lee del proceso en vez de sondear `http://localhost:<puerto>/json/version`\n * porque con `--remote-debugging-port=0` el puerto lo elige el sistema y no lo\n * sabemos de antemano. Sondear un puerto fijo, además, podría acertar con una\n * instancia de Chrome que ya tuviera el usuario abierta — y acabaríamos\n * conduciendo su navegador con sus sesiones.\n */\nfunction leerUrlDevTools(proceso: ChildProcess, timeoutMs = 15_000): Promise<string> {\n\treturn new Promise((resolve, reject) => {\n\t\tlet acumulado = \"\";\n\t\tconst temporizador = setTimeout(() => {\n\t\t\treject(new Error(`el navegador no anunció su puerto de depuración en ${timeoutMs} ms`));\n\t\t}, timeoutMs);\n\n\t\tconst terminar = (fn: () => void) => {\n\t\t\tclearTimeout(temporizador);\n\t\t\tfn();\n\t\t};\n\n\t\tproceso.stderr?.on(\"data\", (trozo: Buffer) => {\n\t\t\tacumulado += trozo.toString(\"utf8\");\n\t\t\tconst encontrado = acumulado.match(/ws:\\/\\/[^\\s]+/);\n\t\t\tif (encontrado) terminar(() => resolve(encontrado[0]));\n\t\t});\n\t\tproceso.on(\"error\", (error) => terminar(() => reject(error)));\n\t\tproceso.on(\"exit\", (codigo) =>\n\t\t\tterminar(() => reject(new Error(`el navegador se cerró con código ${codigo} antes de arrancar`))),\n\t\t);\n\t});\n}\n"]}
|