@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,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ada Blobs — los ficheros grandes viajan una vez, no en cada turno.
|
|
3
|
+
*
|
|
4
|
+
* Hoy un PDF o una captura de 1,4 MB se adjunta en base64 dentro del cuerpo de
|
|
5
|
+
* CADA petición del turno. Diez turnos de conversación son diez veces el mismo
|
|
6
|
+
* fichero subiendo por la red y contando en el prompt. Los proveedores tienen
|
|
7
|
+
* API de ficheros: se sube una vez, devuelve un id, y el id se referencia.
|
|
8
|
+
*
|
|
9
|
+
* Vive entero en ficheros de Ada y se engancha por la API pública de
|
|
10
|
+
* extensiones (`before_provider_request`), así que no cuesta nada contra el
|
|
11
|
+
* presupuesto de sincronización con upstream.
|
|
12
|
+
*
|
|
13
|
+
* Se desactiva con `ADA_NO_BLOBS=1`.
|
|
14
|
+
*
|
|
15
|
+
* LIMITACIÓN CONOCIDA, y por qué no se arregla aquí: la Files API de Anthropic
|
|
16
|
+
* nació detrás de la cabecera beta `files-api-2025-04-14`. Esa cabecera no se
|
|
17
|
+
* puede añadir desde `before_provider_headers` sin PISAR las que calcula el SDK
|
|
18
|
+
* (`interleaved-thinking`, `fine-grained-tool-streaming`), porque el merge de
|
|
19
|
+
* `anthropic-messages.ts` deja ganar a las nuestras. Perder el pensamiento
|
|
20
|
+
* intercalado por ahorrar una subida es un mal cambio. Así que la subida —que
|
|
21
|
+
* es petición nuestra y sí lleva el beta— se hace, y si el proveedor rechaza la
|
|
22
|
+
* petición de mensajes justo después de recibir referencias, se olvidan los ids
|
|
23
|
+
* y se apaga la reescritura para el resto del proceso con el motivo a la vista
|
|
24
|
+
* en `/blobs`. Como mucho se pierde un turno por proceso, y nunca en silencio.
|
|
25
|
+
*
|
|
26
|
+
* Ese "como mucho un turno" es la parte que hay que mirar con lupa, porque la
|
|
27
|
+
* primera versión la prometía y no la cumplía: el apagado colgaba solo de
|
|
28
|
+
* `after_provider_response`, que con Anthropic NUNCA llega en un 4xx (el SDK
|
|
29
|
+
* lanza desde `asResponse()` y `packages/ai` invoca `onResponse` en la línea
|
|
30
|
+
* siguiente). Se perdían todos los turnos, no uno. Por eso el apagado cuelga
|
|
31
|
+
* también de `message_end`, que es donde el fallo asoma de verdad.
|
|
32
|
+
*/
|
|
33
|
+
import type { ExtensionAPI } from "../extensions/types.ts";
|
|
34
|
+
import { type Diagnostico } from "./broker.ts";
|
|
35
|
+
import { type Credencial, type Fetch, type ModeloParaBlobs } from "./proveedor.ts";
|
|
36
|
+
export { AlmacenDeBlobs } from "./almacen.ts";
|
|
37
|
+
export type { Diagnostico } from "./broker.ts";
|
|
38
|
+
export { BrokerDeBlobs, esRechazoDeReferencias, hashDeContenido, MIN_BYTES_POR_DEFECTO } from "./broker.ts";
|
|
39
|
+
export { bytesDeBase64, localizarBlobs, reescribirBlobs } from "./payload.ts";
|
|
40
|
+
export { capacidadDeBlobs, puedeSubir } from "./proveedor.ts";
|
|
41
|
+
export interface OpcionesDeBlobs {
|
|
42
|
+
agentDir: string;
|
|
43
|
+
disabled?: boolean;
|
|
44
|
+
/** `fetch` inyectable: los tests cuentan peticiones de subida. */
|
|
45
|
+
fetchImpl?: Fetch;
|
|
46
|
+
minBytes?: number;
|
|
47
|
+
/** Resolución de credencial inyectable, para tests sin ModelRegistry real. */
|
|
48
|
+
resolverCredencial?: (modelo: ModeloParaBlobs) => Promise<Credencial | undefined>;
|
|
49
|
+
}
|
|
50
|
+
export declare function describirDiagnostico(d: Diagnostico | undefined): string;
|
|
51
|
+
/**
|
|
52
|
+
* Estado HTTP con el que el proveedor rechazó la petición, leído del mensaje de
|
|
53
|
+
* error del turno.
|
|
54
|
+
*
|
|
55
|
+
* Existe porque `after_provider_response` NUNCA ve un 4xx: el SDK de Anthropic
|
|
56
|
+
* lanza `BadRequestError` desde `asResponse()` y `packages/ai` llama a
|
|
57
|
+
* `onResponse` en la línea siguiente, que ya no se ejecuta. Comprobado
|
|
58
|
+
* ejecutándolo contra `stream()` de anthropic-messages con un fetch que
|
|
59
|
+
* devuelve 400: `onResponse` vio `[]`. El único sitio donde ese fallo asoma a
|
|
60
|
+
* una extensión es `message_end`, con `stopReason: "error"` y el mensaje de la
|
|
61
|
+
* APIError, que empieza por el estado: `400 {"type":"error",...}`.
|
|
62
|
+
*
|
|
63
|
+
* Quién decide si el estado es atribuible a las referencias vive en
|
|
64
|
+
* `esRechazoDeReferencias` (broker.ts) y no aquí: los dos caminos que apagan
|
|
65
|
+
* —este y `after_provider_response`— tienen que opinar lo mismo, y tenerlo
|
|
66
|
+
* duplicado ya dio la respuesta equivocada una vez.
|
|
67
|
+
*/
|
|
68
|
+
export declare function estadoDeRechazo(errorMessage: string | undefined): number | undefined;
|
|
69
|
+
export declare function crearExtensionDeBlobs(opciones: OpcionesDeBlobs): (pi: ExtensionAPI) => void;
|
|
70
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/blobs/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAiB,KAAK,WAAW,EAAiD,MAAM,aAAa,CAAC;AAC7G,OAAO,EAAE,KAAK,UAAU,EAAoB,KAAK,KAAK,EAAE,KAAK,eAAe,EAAc,MAAM,gBAAgB,CAAC;AAEjH,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC5G,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE9D,MAAM,WAAW,eAAe;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kEAAkE;IAClE,SAAS,CAAC,EAAE,KAAK,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+EAA8E;IAC9E,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;CAClF;AAED,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,CAUvE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAKpF;AAOD,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,eAAe,8BAyH9D","sourcesContent":["/**\n * Ada Blobs — los ficheros grandes viajan una vez, no en cada turno.\n *\n * Hoy un PDF o una captura de 1,4 MB se adjunta en base64 dentro del cuerpo de\n * CADA petición del turno. Diez turnos de conversación son diez veces el mismo\n * fichero subiendo por la red y contando en el prompt. Los proveedores tienen\n * API de ficheros: se sube una vez, devuelve un id, y el id se referencia.\n *\n * Vive entero en ficheros de Ada y se engancha por la API pública de\n * extensiones (`before_provider_request`), así que no cuesta nada contra el\n * presupuesto de sincronización con upstream.\n *\n * Se desactiva con `ADA_NO_BLOBS=1`.\n *\n * LIMITACIÓN CONOCIDA, y por qué no se arregla aquí: la Files API de Anthropic\n * nació detrás de la cabecera beta `files-api-2025-04-14`. Esa cabecera no se\n * puede añadir desde `before_provider_headers` sin PISAR las que calcula el SDK\n * (`interleaved-thinking`, `fine-grained-tool-streaming`), porque el merge de\n * `anthropic-messages.ts` deja ganar a las nuestras. Perder el pensamiento\n * intercalado por ahorrar una subida es un mal cambio. Así que la subida —que\n * es petición nuestra y sí lleva el beta— se hace, y si el proveedor rechaza la\n * petición de mensajes justo después de recibir referencias, se olvidan los ids\n * y se apaga la reescritura para el resto del proceso con el motivo a la vista\n * en `/blobs`. Como mucho se pierde un turno por proceso, y nunca en silencio.\n *\n * Ese \"como mucho un turno\" es la parte que hay que mirar con lupa, porque la\n * primera versión la prometía y no la cumplía: el apagado colgaba solo de\n * `after_provider_response`, que con Anthropic NUNCA llega en un 4xx (el SDK\n * lanza desde `asResponse()` y `packages/ai` invoca `onResponse` en la línea\n * siguiente). Se perdían todos los turnos, no uno. Por eso el apagado cuelga\n * también de `message_end`, que es donde el fallo asoma de verdad.\n */\n\nimport type { ExtensionAPI } from \"../extensions/types.ts\";\nimport { AlmacenDeBlobs } from \"./almacen.ts\";\nimport { BrokerDeBlobs, type Diagnostico, esRechazoDeReferencias, MIN_BYTES_POR_DEFECTO } from \"./broker.ts\";\nimport { type Credencial, capacidadDeBlobs, type Fetch, type ModeloParaBlobs, puedeSubir } from \"./proveedor.ts\";\n\nexport { AlmacenDeBlobs } from \"./almacen.ts\";\nexport type { Diagnostico } from \"./broker.ts\";\nexport { BrokerDeBlobs, esRechazoDeReferencias, hashDeContenido, MIN_BYTES_POR_DEFECTO } from \"./broker.ts\";\nexport { bytesDeBase64, localizarBlobs, reescribirBlobs } from \"./payload.ts\";\nexport { capacidadDeBlobs, puedeSubir } from \"./proveedor.ts\";\n\nexport interface OpcionesDeBlobs {\n\tagentDir: string;\n\tdisabled?: boolean;\n\t/** `fetch` inyectable: los tests cuentan peticiones de subida. */\n\tfetchImpl?: Fetch;\n\tminBytes?: number;\n\t/** Resolución de credencial inyectable, para tests sin ModelRegistry real. */\n\tresolverCredencial?: (modelo: ModeloParaBlobs) => Promise<Credencial | undefined>;\n}\n\nexport function describirDiagnostico(d: Diagnostico | undefined): string {\n\tif (!d) return \"todavía no ha salido ninguna petición en esta sesión.\";\n\tif (d.estado === \"no-puedo\") return `no puedo subir ficheros: ${d.motivo}`;\n\tif (d.estado === \"nada-que-subir\") {\n\t\treturn d.pequenos === 0\n\t\t\t? \"no hay ningún adjunto en la conversación.\"\n\t\t\t: `${d.pequenos} adjunto(s), todos por debajo del umbral: van en línea.`;\n\t}\n\tconst omitidos = d.omitidos.length > 0 ? `, ${d.omitidos.length} en línea (${d.omitidos[0].motivo})` : \"\";\n\treturn `${d.subidos} subido(s), ${d.reutilizados} reutilizado(s)${omitidos}.`;\n}\n\n/**\n * Estado HTTP con el que el proveedor rechazó la petición, leído del mensaje de\n * error del turno.\n *\n * Existe porque `after_provider_response` NUNCA ve un 4xx: el SDK de Anthropic\n * lanza `BadRequestError` desde `asResponse()` y `packages/ai` llama a\n * `onResponse` en la línea siguiente, que ya no se ejecuta. Comprobado\n * ejecutándolo contra `stream()` de anthropic-messages con un fetch que\n * devuelve 400: `onResponse` vio `[]`. El único sitio donde ese fallo asoma a\n * una extensión es `message_end`, con `stopReason: \"error\"` y el mensaje de la\n * APIError, que empieza por el estado: `400 {\"type\":\"error\",...}`.\n *\n * Quién decide si el estado es atribuible a las referencias vive en\n * `esRechazoDeReferencias` (broker.ts) y no aquí: los dos caminos que apagan\n * —este y `after_provider_response`— tienen que opinar lo mismo, y tenerlo\n * duplicado ya dio la respuesta equivocada una vez.\n */\nexport function estadoDeRechazo(errorMessage: string | undefined): number | undefined {\n\tconst coincidencia = (errorMessage ?? \"\").trim().match(/^(\\d{3})\\b/);\n\tif (!coincidencia) return undefined;\n\tconst estado = Number(coincidencia[1]);\n\treturn esRechazoDeReferencias(estado) ? estado : undefined;\n}\n\nfunction leerUmbral(): number {\n\tconst bruto = Number(process.env.ADA_BLOBS_MIN_BYTES);\n\treturn Number.isFinite(bruto) && bruto > 0 ? Math.floor(bruto) : MIN_BYTES_POR_DEFECTO;\n}\n\nexport function crearExtensionDeBlobs(opciones: OpcionesDeBlobs) {\n\treturn (pi: ExtensionAPI): void => {\n\t\tif (opciones.disabled || process.env.ADA_NO_BLOBS === \"1\") return;\n\n\t\tconst almacen = new AlmacenDeBlobs(opciones.agentDir);\n\t\tconst broker = new BrokerDeBlobs({\n\t\t\talmacen,\n\t\t\tfetchImpl: opciones.fetchImpl,\n\t\t\tminBytes: opciones.minBytes ?? leerUmbral(),\n\t\t});\n\t\t// La carga y la purga son perezosas: arrancar una sesión no debe esperar\n\t\t// a un fichero de caché que puede no existir.\n\t\tconst listo = almacen\n\t\t\t.cargar()\n\t\t\t.then(() => {\n\t\t\t\talmacen.purgar();\n\t\t\t})\n\t\t\t.catch(() => {\n\t\t\t\t// Una caché ilegible degrada a \"subir siempre\", nunca a \"no arrancar\".\n\t\t\t});\n\n\t\tlet modelo: ModeloParaBlobs | undefined;\n\t\tlet ultimo: Diagnostico | undefined;\n\t\t/** Motivo por el que se apagó la reescritura en este proceso, si se apagó. */\n\t\tlet apagadoPor: string | undefined;\n\t\tlet referenciasEnVuelo = false;\n\n\t\tpi.on(\"model_select\", async (evento) => {\n\t\t\tconst m = (evento as { model?: ModeloParaBlobs }).model;\n\t\t\tif (m) modelo = { provider: m.provider, api: m.api, baseUrl: m.baseUrl };\n\t\t});\n\n\t\tpi.on(\"before_provider_request\", async (evento, ctx) => {\n\t\t\tif (apagadoPor) {\n\t\t\t\tultimo = { estado: \"no-puedo\", motivo: apagadoPor };\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tawait listo;\n\t\t\tconst activo = modeloActivo(ctx, modelo);\n\t\t\tconst credencial = await resolverCredencial(opciones, ctx, activo);\n\t\t\tconst resultado = await broker.procesar(evento.payload, activo, credencial, ctx?.signal);\n\t\t\tultimo = resultado.diagnostico;\n\t\t\treferenciasEnVuelo =\n\t\t\t\tresultado.diagnostico.estado === \"listo\" &&\n\t\t\t\tresultado.diagnostico.subidos + resultado.diagnostico.reutilizados > 0;\n\t\t\treturn resultado.payload === evento.payload ? undefined : resultado.payload;\n\t\t});\n\n\t\tpi.on(\"after_provider_response\", async (evento) => {\n\t\t\tif (!referenciasEnVuelo) return;\n\t\t\treferenciasEnVuelo = false;\n\t\t\tif (evento.status >= 200 && evento.status < 300) {\n\t\t\t\tbroker.peticionCorrecta();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst olvidados = broker.rechazoDelProveedor(evento.status);\n\t\t\tif (olvidados.length === 0) return;\n\t\t\t// El evento no trae cuerpo, así que no se puede saber si el 4xx fue por\n\t\t\t// las referencias. Se apaga en lugar de reintentar: reintentar con las\n\t\t\t// mismas referencias repetiría el fallo turno tras turno.\n\t\t\tapagadoPor = `el proveedor devolvió ${evento.status} con referencias a fichero (${olvidados.join(\", \")}); se vuelve a mandar el contenido en línea`;\n\t\t});\n\n\t\t// La otra mitad del apagado, y la única que de verdad se ejecuta contra\n\t\t// Anthropic: `after_provider_response` solo llega con 2xx, así que el 400\n\t\t// que devolvería el proveedor si exige el beta para leer un `file_id` solo\n\t\t// asoma aquí. Sin esto la promesa de la cabecera de este fichero (\"como\n\t\t// mucho se pierde un turno por proceso\") era falsa: se perdían todos.\n\t\tpi.on(\"message_end\", async (evento) => {\n\t\t\tif (!referenciasEnVuelo) return;\n\t\t\tconst mensaje = evento.message as { role?: string; stopReason?: string; errorMessage?: string };\n\t\t\tif (mensaje.role !== \"assistant\" || mensaje.stopReason !== \"error\") return;\n\t\t\tconst estado = estadoDeRechazo(mensaje.errorMessage);\n\t\t\t// Corte de red, 5xx, 429: el turno falló, pero no sabemos nada de las\n\t\t\t// referencias. \"No sé\" no es \"no puedo\", y apagar aquí sería confundirlos.\n\t\t\tif (estado === undefined) return;\n\t\t\treferenciasEnVuelo = false;\n\t\t\tconst olvidados = broker.rechazoDelProveedor(estado);\n\t\t\tif (olvidados.length === 0) return;\n\t\t\tapagadoPor = `el proveedor devolvió ${estado} con referencias a fichero (${olvidados.join(\", \")}); se vuelve a mandar el contenido en línea`;\n\t\t});\n\n\t\tpi.on(\"session_shutdown\", async () => {\n\t\t\tawait broker.volcar().catch(() => {});\n\t\t});\n\n\t\tpi.registerCommand(\"blobs\", {\n\t\t\tdescription: \"Ficheros grandes subidos al proveedor: estado, caché y purga\",\n\t\t\thandler: async (args: string, cmdCtx): Promise<void> => {\n\t\t\t\tawait listo;\n\t\t\t\tconst decir = (texto: string) => cmdCtx.ui?.notify(texto, \"info\");\n\t\t\t\tconst sub = args.trim().split(/\\s+/)[0] || \"estado\";\n\n\t\t\t\tif (sub === \"purgar\") {\n\t\t\t\t\t// `-1` y no `0`: la purga compara `ahora - usadoEn > maxEdadMs`, y una\n\t\t\t\t\t// entrada usada en este mismo milisegundo sobrevivía a un \"purgar\".\n\t\t\t\t\tconst purgadas = almacen.purgar({ maxEdadMs: -1 });\n\t\t\t\t\tawait broker.volcar().catch(() => {});\n\t\t\t\t\tdecir(`Purgadas ${purgadas.length} entrada(s) de la caché de ficheros.`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst capacidad = capacidadDeBlobs(modeloActivo(cmdCtx, modelo));\n\t\t\t\tconst cabecera = puedeSubir(capacidad)\n\t\t\t\t\t? `API de ficheros: ${capacidad.urlFicheros}`\n\t\t\t\t\t: `Sin API de ficheros: ${capacidad.motivo}`;\n\t\t\t\tconst c = broker.contadores;\n\t\t\t\tdecir(\n\t\t\t\t\t[\n\t\t\t\t\t\tcabecera,\n\t\t\t\t\t\t`Último turno: ${describirDiagnostico(ultimo)}`,\n\t\t\t\t\t\t`Acumulado: ${c.subidas} subida(s), ${c.reutilizaciones} reutilización(es), ${c.resubidasPorRechazo} resubida(s) por id muerto.`,\n\t\t\t\t\t\t`Caché: ${almacen.tamano()} entrada(s) en ${almacen.rutaFichero}.`,\n\t\t\t\t\t\tapagadoPor ? `APAGADO: ${apagadoPor}` : \"\",\n\t\t\t\t\t]\n\t\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t\t.join(\"\\n\"),\n\t\t\t\t);\n\t\t\t},\n\t\t});\n\t};\n}\n\n/** `ctx.model` es la verdad; el rastreado por `model_select` es el respaldo. */\nfunction modeloActivo(ctx: unknown, rastreado: ModeloParaBlobs | undefined): ModeloParaBlobs | undefined {\n\ttry {\n\t\tconst m = (ctx as { model?: ModeloParaBlobs } | undefined)?.model;\n\t\tif (m?.api) return { provider: m.provider, api: m.api, baseUrl: m.baseUrl };\n\t} catch {\n\t\t// El runtime de extensiones lanza si aún no se ha hecho bindCore().\n\t}\n\treturn rastreado;\n}\n\nasync function resolverCredencial(\n\topciones: OpcionesDeBlobs,\n\tctx: unknown,\n\tmodelo: ModeloParaBlobs | undefined,\n): Promise<Credencial | undefined> {\n\tif (!modelo) return undefined;\n\tif (opciones.resolverCredencial) return opciones.resolverCredencial(modelo);\n\ttry {\n\t\tconst registro = (\n\t\t\tctx as {\n\t\t\t\tmodelRegistry?: {\n\t\t\t\t\tgetApiKeyAndHeaders?: (m: unknown) => Promise<{\n\t\t\t\t\t\tok: boolean;\n\t\t\t\t\t\tapiKey?: string;\n\t\t\t\t\t\theaders?: Record<string, string | null>;\n\t\t\t\t\t}>;\n\t\t\t\t};\n\t\t\t}\n\t\t)?.modelRegistry;\n\t\tconst auth = await registro?.getApiKeyAndHeaders?.(modelo);\n\t\tif (!auth?.ok) return undefined;\n\t\tconst cabeceras: Record<string, string> = {};\n\t\tfor (const [clave, valor] of Object.entries(auth.headers ?? {})) {\n\t\t\tif (typeof valor === \"string\") cabeceras[clave] = valor;\n\t\t}\n\t\treturn { apiKey: auth.apiKey, cabeceras: Object.keys(cabeceras).length > 0 ? cabeceras : undefined };\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n"]}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ada Blobs — los ficheros grandes viajan una vez, no en cada turno.
|
|
3
|
+
*
|
|
4
|
+
* Hoy un PDF o una captura de 1,4 MB se adjunta en base64 dentro del cuerpo de
|
|
5
|
+
* CADA petición del turno. Diez turnos de conversación son diez veces el mismo
|
|
6
|
+
* fichero subiendo por la red y contando en el prompt. Los proveedores tienen
|
|
7
|
+
* API de ficheros: se sube una vez, devuelve un id, y el id se referencia.
|
|
8
|
+
*
|
|
9
|
+
* Vive entero en ficheros de Ada y se engancha por la API pública de
|
|
10
|
+
* extensiones (`before_provider_request`), así que no cuesta nada contra el
|
|
11
|
+
* presupuesto de sincronización con upstream.
|
|
12
|
+
*
|
|
13
|
+
* Se desactiva con `ADA_NO_BLOBS=1`.
|
|
14
|
+
*
|
|
15
|
+
* LIMITACIÓN CONOCIDA, y por qué no se arregla aquí: la Files API de Anthropic
|
|
16
|
+
* nació detrás de la cabecera beta `files-api-2025-04-14`. Esa cabecera no se
|
|
17
|
+
* puede añadir desde `before_provider_headers` sin PISAR las que calcula el SDK
|
|
18
|
+
* (`interleaved-thinking`, `fine-grained-tool-streaming`), porque el merge de
|
|
19
|
+
* `anthropic-messages.ts` deja ganar a las nuestras. Perder el pensamiento
|
|
20
|
+
* intercalado por ahorrar una subida es un mal cambio. Así que la subida —que
|
|
21
|
+
* es petición nuestra y sí lleva el beta— se hace, y si el proveedor rechaza la
|
|
22
|
+
* petición de mensajes justo después de recibir referencias, se olvidan los ids
|
|
23
|
+
* y se apaga la reescritura para el resto del proceso con el motivo a la vista
|
|
24
|
+
* en `/blobs`. Como mucho se pierde un turno por proceso, y nunca en silencio.
|
|
25
|
+
*
|
|
26
|
+
* Ese "como mucho un turno" es la parte que hay que mirar con lupa, porque la
|
|
27
|
+
* primera versión la prometía y no la cumplía: el apagado colgaba solo de
|
|
28
|
+
* `after_provider_response`, que con Anthropic NUNCA llega en un 4xx (el SDK
|
|
29
|
+
* lanza desde `asResponse()` y `packages/ai` invoca `onResponse` en la línea
|
|
30
|
+
* siguiente). Se perdían todos los turnos, no uno. Por eso el apagado cuelga
|
|
31
|
+
* también de `message_end`, que es donde el fallo asoma de verdad.
|
|
32
|
+
*/
|
|
33
|
+
import { AlmacenDeBlobs } from "./almacen.js";
|
|
34
|
+
import { BrokerDeBlobs, esRechazoDeReferencias, MIN_BYTES_POR_DEFECTO } from "./broker.js";
|
|
35
|
+
import { capacidadDeBlobs, puedeSubir } from "./proveedor.js";
|
|
36
|
+
export { AlmacenDeBlobs } from "./almacen.js";
|
|
37
|
+
export { BrokerDeBlobs, esRechazoDeReferencias, hashDeContenido, MIN_BYTES_POR_DEFECTO } from "./broker.js";
|
|
38
|
+
export { bytesDeBase64, localizarBlobs, reescribirBlobs } from "./payload.js";
|
|
39
|
+
export { capacidadDeBlobs, puedeSubir } from "./proveedor.js";
|
|
40
|
+
export function describirDiagnostico(d) {
|
|
41
|
+
if (!d)
|
|
42
|
+
return "todavía no ha salido ninguna petición en esta sesión.";
|
|
43
|
+
if (d.estado === "no-puedo")
|
|
44
|
+
return `no puedo subir ficheros: ${d.motivo}`;
|
|
45
|
+
if (d.estado === "nada-que-subir") {
|
|
46
|
+
return d.pequenos === 0
|
|
47
|
+
? "no hay ningún adjunto en la conversación."
|
|
48
|
+
: `${d.pequenos} adjunto(s), todos por debajo del umbral: van en línea.`;
|
|
49
|
+
}
|
|
50
|
+
const omitidos = d.omitidos.length > 0 ? `, ${d.omitidos.length} en línea (${d.omitidos[0].motivo})` : "";
|
|
51
|
+
return `${d.subidos} subido(s), ${d.reutilizados} reutilizado(s)${omitidos}.`;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Estado HTTP con el que el proveedor rechazó la petición, leído del mensaje de
|
|
55
|
+
* error del turno.
|
|
56
|
+
*
|
|
57
|
+
* Existe porque `after_provider_response` NUNCA ve un 4xx: el SDK de Anthropic
|
|
58
|
+
* lanza `BadRequestError` desde `asResponse()` y `packages/ai` llama a
|
|
59
|
+
* `onResponse` en la línea siguiente, que ya no se ejecuta. Comprobado
|
|
60
|
+
* ejecutándolo contra `stream()` de anthropic-messages con un fetch que
|
|
61
|
+
* devuelve 400: `onResponse` vio `[]`. El único sitio donde ese fallo asoma a
|
|
62
|
+
* una extensión es `message_end`, con `stopReason: "error"` y el mensaje de la
|
|
63
|
+
* APIError, que empieza por el estado: `400 {"type":"error",...}`.
|
|
64
|
+
*
|
|
65
|
+
* Quién decide si el estado es atribuible a las referencias vive en
|
|
66
|
+
* `esRechazoDeReferencias` (broker.ts) y no aquí: los dos caminos que apagan
|
|
67
|
+
* —este y `after_provider_response`— tienen que opinar lo mismo, y tenerlo
|
|
68
|
+
* duplicado ya dio la respuesta equivocada una vez.
|
|
69
|
+
*/
|
|
70
|
+
export function estadoDeRechazo(errorMessage) {
|
|
71
|
+
const coincidencia = (errorMessage ?? "").trim().match(/^(\d{3})\b/);
|
|
72
|
+
if (!coincidencia)
|
|
73
|
+
return undefined;
|
|
74
|
+
const estado = Number(coincidencia[1]);
|
|
75
|
+
return esRechazoDeReferencias(estado) ? estado : undefined;
|
|
76
|
+
}
|
|
77
|
+
function leerUmbral() {
|
|
78
|
+
const bruto = Number(process.env.ADA_BLOBS_MIN_BYTES);
|
|
79
|
+
return Number.isFinite(bruto) && bruto > 0 ? Math.floor(bruto) : MIN_BYTES_POR_DEFECTO;
|
|
80
|
+
}
|
|
81
|
+
export function crearExtensionDeBlobs(opciones) {
|
|
82
|
+
return (pi) => {
|
|
83
|
+
if (opciones.disabled || process.env.ADA_NO_BLOBS === "1")
|
|
84
|
+
return;
|
|
85
|
+
const almacen = new AlmacenDeBlobs(opciones.agentDir);
|
|
86
|
+
const broker = new BrokerDeBlobs({
|
|
87
|
+
almacen,
|
|
88
|
+
fetchImpl: opciones.fetchImpl,
|
|
89
|
+
minBytes: opciones.minBytes ?? leerUmbral(),
|
|
90
|
+
});
|
|
91
|
+
// La carga y la purga son perezosas: arrancar una sesión no debe esperar
|
|
92
|
+
// a un fichero de caché que puede no existir.
|
|
93
|
+
const listo = almacen
|
|
94
|
+
.cargar()
|
|
95
|
+
.then(() => {
|
|
96
|
+
almacen.purgar();
|
|
97
|
+
})
|
|
98
|
+
.catch(() => {
|
|
99
|
+
// Una caché ilegible degrada a "subir siempre", nunca a "no arrancar".
|
|
100
|
+
});
|
|
101
|
+
let modelo;
|
|
102
|
+
let ultimo;
|
|
103
|
+
/** Motivo por el que se apagó la reescritura en este proceso, si se apagó. */
|
|
104
|
+
let apagadoPor;
|
|
105
|
+
let referenciasEnVuelo = false;
|
|
106
|
+
pi.on("model_select", async (evento) => {
|
|
107
|
+
const m = evento.model;
|
|
108
|
+
if (m)
|
|
109
|
+
modelo = { provider: m.provider, api: m.api, baseUrl: m.baseUrl };
|
|
110
|
+
});
|
|
111
|
+
pi.on("before_provider_request", async (evento, ctx) => {
|
|
112
|
+
if (apagadoPor) {
|
|
113
|
+
ultimo = { estado: "no-puedo", motivo: apagadoPor };
|
|
114
|
+
return undefined;
|
|
115
|
+
}
|
|
116
|
+
await listo;
|
|
117
|
+
const activo = modeloActivo(ctx, modelo);
|
|
118
|
+
const credencial = await resolverCredencial(opciones, ctx, activo);
|
|
119
|
+
const resultado = await broker.procesar(evento.payload, activo, credencial, ctx?.signal);
|
|
120
|
+
ultimo = resultado.diagnostico;
|
|
121
|
+
referenciasEnVuelo =
|
|
122
|
+
resultado.diagnostico.estado === "listo" &&
|
|
123
|
+
resultado.diagnostico.subidos + resultado.diagnostico.reutilizados > 0;
|
|
124
|
+
return resultado.payload === evento.payload ? undefined : resultado.payload;
|
|
125
|
+
});
|
|
126
|
+
pi.on("after_provider_response", async (evento) => {
|
|
127
|
+
if (!referenciasEnVuelo)
|
|
128
|
+
return;
|
|
129
|
+
referenciasEnVuelo = false;
|
|
130
|
+
if (evento.status >= 200 && evento.status < 300) {
|
|
131
|
+
broker.peticionCorrecta();
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
const olvidados = broker.rechazoDelProveedor(evento.status);
|
|
135
|
+
if (olvidados.length === 0)
|
|
136
|
+
return;
|
|
137
|
+
// El evento no trae cuerpo, así que no se puede saber si el 4xx fue por
|
|
138
|
+
// las referencias. Se apaga en lugar de reintentar: reintentar con las
|
|
139
|
+
// mismas referencias repetiría el fallo turno tras turno.
|
|
140
|
+
apagadoPor = `el proveedor devolvió ${evento.status} con referencias a fichero (${olvidados.join(", ")}); se vuelve a mandar el contenido en línea`;
|
|
141
|
+
});
|
|
142
|
+
// La otra mitad del apagado, y la única que de verdad se ejecuta contra
|
|
143
|
+
// Anthropic: `after_provider_response` solo llega con 2xx, así que el 400
|
|
144
|
+
// que devolvería el proveedor si exige el beta para leer un `file_id` solo
|
|
145
|
+
// asoma aquí. Sin esto la promesa de la cabecera de este fichero ("como
|
|
146
|
+
// mucho se pierde un turno por proceso") era falsa: se perdían todos.
|
|
147
|
+
pi.on("message_end", async (evento) => {
|
|
148
|
+
if (!referenciasEnVuelo)
|
|
149
|
+
return;
|
|
150
|
+
const mensaje = evento.message;
|
|
151
|
+
if (mensaje.role !== "assistant" || mensaje.stopReason !== "error")
|
|
152
|
+
return;
|
|
153
|
+
const estado = estadoDeRechazo(mensaje.errorMessage);
|
|
154
|
+
// Corte de red, 5xx, 429: el turno falló, pero no sabemos nada de las
|
|
155
|
+
// referencias. "No sé" no es "no puedo", y apagar aquí sería confundirlos.
|
|
156
|
+
if (estado === undefined)
|
|
157
|
+
return;
|
|
158
|
+
referenciasEnVuelo = false;
|
|
159
|
+
const olvidados = broker.rechazoDelProveedor(estado);
|
|
160
|
+
if (olvidados.length === 0)
|
|
161
|
+
return;
|
|
162
|
+
apagadoPor = `el proveedor devolvió ${estado} con referencias a fichero (${olvidados.join(", ")}); se vuelve a mandar el contenido en línea`;
|
|
163
|
+
});
|
|
164
|
+
pi.on("session_shutdown", async () => {
|
|
165
|
+
await broker.volcar().catch(() => { });
|
|
166
|
+
});
|
|
167
|
+
pi.registerCommand("blobs", {
|
|
168
|
+
description: "Ficheros grandes subidos al proveedor: estado, caché y purga",
|
|
169
|
+
handler: async (args, cmdCtx) => {
|
|
170
|
+
await listo;
|
|
171
|
+
const decir = (texto) => cmdCtx.ui?.notify(texto, "info");
|
|
172
|
+
const sub = args.trim().split(/\s+/)[0] || "estado";
|
|
173
|
+
if (sub === "purgar") {
|
|
174
|
+
// `-1` y no `0`: la purga compara `ahora - usadoEn > maxEdadMs`, y una
|
|
175
|
+
// entrada usada en este mismo milisegundo sobrevivía a un "purgar".
|
|
176
|
+
const purgadas = almacen.purgar({ maxEdadMs: -1 });
|
|
177
|
+
await broker.volcar().catch(() => { });
|
|
178
|
+
decir(`Purgadas ${purgadas.length} entrada(s) de la caché de ficheros.`);
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
const capacidad = capacidadDeBlobs(modeloActivo(cmdCtx, modelo));
|
|
182
|
+
const cabecera = puedeSubir(capacidad)
|
|
183
|
+
? `API de ficheros: ${capacidad.urlFicheros}`
|
|
184
|
+
: `Sin API de ficheros: ${capacidad.motivo}`;
|
|
185
|
+
const c = broker.contadores;
|
|
186
|
+
decir([
|
|
187
|
+
cabecera,
|
|
188
|
+
`Último turno: ${describirDiagnostico(ultimo)}`,
|
|
189
|
+
`Acumulado: ${c.subidas} subida(s), ${c.reutilizaciones} reutilización(es), ${c.resubidasPorRechazo} resubida(s) por id muerto.`,
|
|
190
|
+
`Caché: ${almacen.tamano()} entrada(s) en ${almacen.rutaFichero}.`,
|
|
191
|
+
apagadoPor ? `APAGADO: ${apagadoPor}` : "",
|
|
192
|
+
]
|
|
193
|
+
.filter(Boolean)
|
|
194
|
+
.join("\n"));
|
|
195
|
+
},
|
|
196
|
+
});
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
/** `ctx.model` es la verdad; el rastreado por `model_select` es el respaldo. */
|
|
200
|
+
function modeloActivo(ctx, rastreado) {
|
|
201
|
+
try {
|
|
202
|
+
const m = ctx?.model;
|
|
203
|
+
if (m?.api)
|
|
204
|
+
return { provider: m.provider, api: m.api, baseUrl: m.baseUrl };
|
|
205
|
+
}
|
|
206
|
+
catch {
|
|
207
|
+
// El runtime de extensiones lanza si aún no se ha hecho bindCore().
|
|
208
|
+
}
|
|
209
|
+
return rastreado;
|
|
210
|
+
}
|
|
211
|
+
async function resolverCredencial(opciones, ctx, modelo) {
|
|
212
|
+
if (!modelo)
|
|
213
|
+
return undefined;
|
|
214
|
+
if (opciones.resolverCredencial)
|
|
215
|
+
return opciones.resolverCredencial(modelo);
|
|
216
|
+
try {
|
|
217
|
+
const registro = ctx?.modelRegistry;
|
|
218
|
+
const auth = await registro?.getApiKeyAndHeaders?.(modelo);
|
|
219
|
+
if (!auth?.ok)
|
|
220
|
+
return undefined;
|
|
221
|
+
const cabeceras = {};
|
|
222
|
+
for (const [clave, valor] of Object.entries(auth.headers ?? {})) {
|
|
223
|
+
if (typeof valor === "string")
|
|
224
|
+
cabeceras[clave] = valor;
|
|
225
|
+
}
|
|
226
|
+
return { apiKey: auth.apiKey, cabeceras: Object.keys(cabeceras).length > 0 ? cabeceras : undefined };
|
|
227
|
+
}
|
|
228
|
+
catch {
|
|
229
|
+
return undefined;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/blobs/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAoB,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC7G,OAAO,EAAmB,gBAAgB,EAAoC,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjH,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC5G,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAY9D,MAAM,UAAU,oBAAoB,CAAC,CAA0B,EAAU;IACxE,IAAI,CAAC,CAAC;QAAE,OAAO,0DAAuD,CAAC;IACvE,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU;QAAE,OAAO,4BAA4B,CAAC,CAAC,MAAM,EAAE,CAAC;IAC3E,IAAI,CAAC,CAAC,MAAM,KAAK,gBAAgB,EAAE,CAAC;QACnC,OAAO,CAAC,CAAC,QAAQ,KAAK,CAAC;YACtB,CAAC,CAAC,6CAA2C;YAC7C,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,0DAAyD,CAAC;IAC3E,CAAC;IACD,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,eAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1G,OAAO,GAAG,CAAC,CAAC,OAAO,eAAe,CAAC,CAAC,YAAY,kBAAkB,QAAQ,GAAG,CAAC;AAAA,CAC9E;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,eAAe,CAAC,YAAgC,EAAsB;IACrF,MAAM,YAAY,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACrE,IAAI,CAAC,YAAY;QAAE,OAAO,SAAS,CAAC;IACpC,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAAA,CAC3D;AAED,SAAS,UAAU,GAAW;IAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACtD,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC;AAAA,CACvF;AAED,MAAM,UAAU,qBAAqB,CAAC,QAAyB,EAAE;IAChE,OAAO,CAAC,EAAgB,EAAQ,EAAE,CAAC;QAClC,IAAI,QAAQ,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,GAAG;YAAE,OAAO;QAElE,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC;YAChC,OAAO;YACP,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,UAAU,EAAE;SAC3C,CAAC,CAAC;QACH,0EAAyE;QACzE,+CAA8C;QAC9C,MAAM,KAAK,GAAG,OAAO;aACnB,MAAM,EAAE;aACR,IAAI,CAAC,GAAG,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,EAAE,CAAC;QAAA,CACjB,CAAC;aACD,KAAK,CAAC,GAAG,EAAE,CAAC;YACZ,wEAAuE;QAD1D,CAEb,CAAC,CAAC;QAEJ,IAAI,MAAmC,CAAC;QACxC,IAAI,MAA+B,CAAC;QACpC,gFAA8E;QAC9E,IAAI,UAA8B,CAAC;QACnC,IAAI,kBAAkB,GAAG,KAAK,CAAC;QAE/B,EAAE,CAAC,EAAE,CAAC,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC;YACvC,MAAM,CAAC,GAAI,MAAsC,CAAC,KAAK,CAAC;YACxD,IAAI,CAAC;gBAAE,MAAM,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QAAA,CACzE,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,yBAAyB,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;YACvD,IAAI,UAAU,EAAE,CAAC;gBAChB,MAAM,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;gBACpD,OAAO,SAAS,CAAC;YAClB,CAAC;YACD,MAAM,KAAK,CAAC;YACZ,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YACzC,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;YACnE,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;YACzF,MAAM,GAAG,SAAS,CAAC,WAAW,CAAC;YAC/B,kBAAkB;gBACjB,SAAS,CAAC,WAAW,CAAC,MAAM,KAAK,OAAO;oBACxC,SAAS,CAAC,WAAW,CAAC,OAAO,GAAG,SAAS,CAAC,WAAW,CAAC,YAAY,GAAG,CAAC,CAAC;YACxE,OAAO,SAAS,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC;QAAA,CAC5E,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,yBAAyB,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC;YAClD,IAAI,CAAC,kBAAkB;gBAAE,OAAO;YAChC,kBAAkB,GAAG,KAAK,CAAC;YAC3B,IAAI,MAAM,CAAC,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;gBACjD,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBAC1B,OAAO;YACR,CAAC;YACD,MAAM,SAAS,GAAG,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC5D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YACnC,yEAAwE;YACxE,uEAAuE;YACvE,2DAA0D;YAC1D,UAAU,GAAG,0BAAyB,MAAM,CAAC,MAAM,+BAA+B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,8CAA6C,CAAC;QAAA,CACpJ,CAAC,CAAC;QAEH,yEAAwE;QACxE,2EAA0E;QAC1E,4EAA2E;QAC3E,yEAAwE;QACxE,uEAAsE;QACtE,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC;YACtC,IAAI,CAAC,kBAAkB;gBAAE,OAAO;YAChC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAwE,CAAC;YAChG,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,CAAC,UAAU,KAAK,OAAO;gBAAE,OAAO;YAC3E,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YACrD,uEAAsE;YACtE,8EAA2E;YAC3E,IAAI,MAAM,KAAK,SAAS;gBAAE,OAAO;YACjC,kBAAkB,GAAG,KAAK,CAAC;YAC3B,MAAM,SAAS,GAAG,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;YACrD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YACnC,UAAU,GAAG,0BAAyB,MAAM,+BAA+B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,8CAA6C,CAAC;QAAA,CAC7I,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE,CAAC;YACrC,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC;QAAA,CACtC,CAAC,CAAC;QAEH,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE;YAC3B,WAAW,EAAE,+DAA8D;YAC3E,OAAO,EAAE,KAAK,EAAE,IAAY,EAAE,MAAM,EAAiB,EAAE,CAAC;gBACvD,MAAM,KAAK,CAAC;gBACZ,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;gBAClE,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC;gBAEpD,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;oBACtB,uEAAuE;oBACvE,qEAAoE;oBACpE,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;oBACnD,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC;oBACtC,KAAK,CAAC,YAAY,QAAQ,CAAC,MAAM,uCAAsC,CAAC,CAAC;oBACzE,OAAO;gBACR,CAAC;gBAED,MAAM,SAAS,GAAG,gBAAgB,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;gBACjE,MAAM,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC;oBACrC,CAAC,CAAC,oBAAoB,SAAS,CAAC,WAAW,EAAE;oBAC7C,CAAC,CAAC,wBAAwB,SAAS,CAAC,MAAM,EAAE,CAAC;gBAC9C,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC;gBAC5B,KAAK,CACJ;oBACC,QAAQ;oBACR,kBAAiB,oBAAoB,CAAC,MAAM,CAAC,EAAE;oBAC/C,cAAc,CAAC,CAAC,OAAO,eAAe,CAAC,CAAC,eAAe,wBAAuB,CAAC,CAAC,mBAAmB,6BAA6B;oBAChI,WAAU,OAAO,CAAC,MAAM,EAAE,kBAAkB,OAAO,CAAC,WAAW,GAAG;oBAClE,UAAU,CAAC,CAAC,CAAC,YAAY,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE;iBAC1C;qBACC,MAAM,CAAC,OAAO,CAAC;qBACf,IAAI,CAAC,IAAI,CAAC,CACZ,CAAC;YAAA,CACF;SACD,CAAC,CAAC;IAAA,CACH,CAAC;AAAA,CACF;AAED,gFAAgF;AAChF,SAAS,YAAY,CAAC,GAAY,EAAE,SAAsC,EAA+B;IACxG,IAAI,CAAC;QACJ,MAAM,CAAC,GAAI,GAA+C,EAAE,KAAK,CAAC;QAClE,IAAI,CAAC,EAAE,GAAG;YAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IAC7E,CAAC;IAAC,MAAM,CAAC;QACR,qEAAoE;IACrE,CAAC;IACD,OAAO,SAAS,CAAC;AAAA,CACjB;AAED,KAAK,UAAU,kBAAkB,CAChC,QAAyB,EACzB,GAAY,EACZ,MAAmC,EACD;IAClC,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,IAAI,QAAQ,CAAC,kBAAkB;QAAE,OAAO,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC5E,IAAI,CAAC;QACJ,MAAM,QAAQ,GACb,GASA,EAAE,aAAa,CAAC;QACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,EAAE,mBAAmB,EAAE,CAAC,MAAM,CAAC,CAAC;QAC3D,IAAI,CAAC,IAAI,EAAE,EAAE;YAAE,OAAO,SAAS,CAAC;QAChC,MAAM,SAAS,GAA2B,EAAE,CAAC;QAC7C,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;YACjE,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;QACzD,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IACtG,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,SAAS,CAAC;IAClB,CAAC;AAAA,CACD","sourcesContent":["/**\n * Ada Blobs — los ficheros grandes viajan una vez, no en cada turno.\n *\n * Hoy un PDF o una captura de 1,4 MB se adjunta en base64 dentro del cuerpo de\n * CADA petición del turno. Diez turnos de conversación son diez veces el mismo\n * fichero subiendo por la red y contando en el prompt. Los proveedores tienen\n * API de ficheros: se sube una vez, devuelve un id, y el id se referencia.\n *\n * Vive entero en ficheros de Ada y se engancha por la API pública de\n * extensiones (`before_provider_request`), así que no cuesta nada contra el\n * presupuesto de sincronización con upstream.\n *\n * Se desactiva con `ADA_NO_BLOBS=1`.\n *\n * LIMITACIÓN CONOCIDA, y por qué no se arregla aquí: la Files API de Anthropic\n * nació detrás de la cabecera beta `files-api-2025-04-14`. Esa cabecera no se\n * puede añadir desde `before_provider_headers` sin PISAR las que calcula el SDK\n * (`interleaved-thinking`, `fine-grained-tool-streaming`), porque el merge de\n * `anthropic-messages.ts` deja ganar a las nuestras. Perder el pensamiento\n * intercalado por ahorrar una subida es un mal cambio. Así que la subida —que\n * es petición nuestra y sí lleva el beta— se hace, y si el proveedor rechaza la\n * petición de mensajes justo después de recibir referencias, se olvidan los ids\n * y se apaga la reescritura para el resto del proceso con el motivo a la vista\n * en `/blobs`. Como mucho se pierde un turno por proceso, y nunca en silencio.\n *\n * Ese \"como mucho un turno\" es la parte que hay que mirar con lupa, porque la\n * primera versión la prometía y no la cumplía: el apagado colgaba solo de\n * `after_provider_response`, que con Anthropic NUNCA llega en un 4xx (el SDK\n * lanza desde `asResponse()` y `packages/ai` invoca `onResponse` en la línea\n * siguiente). Se perdían todos los turnos, no uno. Por eso el apagado cuelga\n * también de `message_end`, que es donde el fallo asoma de verdad.\n */\n\nimport type { ExtensionAPI } from \"../extensions/types.ts\";\nimport { AlmacenDeBlobs } from \"./almacen.ts\";\nimport { BrokerDeBlobs, type Diagnostico, esRechazoDeReferencias, MIN_BYTES_POR_DEFECTO } from \"./broker.ts\";\nimport { type Credencial, capacidadDeBlobs, type Fetch, type ModeloParaBlobs, puedeSubir } from \"./proveedor.ts\";\n\nexport { AlmacenDeBlobs } from \"./almacen.ts\";\nexport type { Diagnostico } from \"./broker.ts\";\nexport { BrokerDeBlobs, esRechazoDeReferencias, hashDeContenido, MIN_BYTES_POR_DEFECTO } from \"./broker.ts\";\nexport { bytesDeBase64, localizarBlobs, reescribirBlobs } from \"./payload.ts\";\nexport { capacidadDeBlobs, puedeSubir } from \"./proveedor.ts\";\n\nexport interface OpcionesDeBlobs {\n\tagentDir: string;\n\tdisabled?: boolean;\n\t/** `fetch` inyectable: los tests cuentan peticiones de subida. */\n\tfetchImpl?: Fetch;\n\tminBytes?: number;\n\t/** Resolución de credencial inyectable, para tests sin ModelRegistry real. */\n\tresolverCredencial?: (modelo: ModeloParaBlobs) => Promise<Credencial | undefined>;\n}\n\nexport function describirDiagnostico(d: Diagnostico | undefined): string {\n\tif (!d) return \"todavía no ha salido ninguna petición en esta sesión.\";\n\tif (d.estado === \"no-puedo\") return `no puedo subir ficheros: ${d.motivo}`;\n\tif (d.estado === \"nada-que-subir\") {\n\t\treturn d.pequenos === 0\n\t\t\t? \"no hay ningún adjunto en la conversación.\"\n\t\t\t: `${d.pequenos} adjunto(s), todos por debajo del umbral: van en línea.`;\n\t}\n\tconst omitidos = d.omitidos.length > 0 ? `, ${d.omitidos.length} en línea (${d.omitidos[0].motivo})` : \"\";\n\treturn `${d.subidos} subido(s), ${d.reutilizados} reutilizado(s)${omitidos}.`;\n}\n\n/**\n * Estado HTTP con el que el proveedor rechazó la petición, leído del mensaje de\n * error del turno.\n *\n * Existe porque `after_provider_response` NUNCA ve un 4xx: el SDK de Anthropic\n * lanza `BadRequestError` desde `asResponse()` y `packages/ai` llama a\n * `onResponse` en la línea siguiente, que ya no se ejecuta. Comprobado\n * ejecutándolo contra `stream()` de anthropic-messages con un fetch que\n * devuelve 400: `onResponse` vio `[]`. El único sitio donde ese fallo asoma a\n * una extensión es `message_end`, con `stopReason: \"error\"` y el mensaje de la\n * APIError, que empieza por el estado: `400 {\"type\":\"error\",...}`.\n *\n * Quién decide si el estado es atribuible a las referencias vive en\n * `esRechazoDeReferencias` (broker.ts) y no aquí: los dos caminos que apagan\n * —este y `after_provider_response`— tienen que opinar lo mismo, y tenerlo\n * duplicado ya dio la respuesta equivocada una vez.\n */\nexport function estadoDeRechazo(errorMessage: string | undefined): number | undefined {\n\tconst coincidencia = (errorMessage ?? \"\").trim().match(/^(\\d{3})\\b/);\n\tif (!coincidencia) return undefined;\n\tconst estado = Number(coincidencia[1]);\n\treturn esRechazoDeReferencias(estado) ? estado : undefined;\n}\n\nfunction leerUmbral(): number {\n\tconst bruto = Number(process.env.ADA_BLOBS_MIN_BYTES);\n\treturn Number.isFinite(bruto) && bruto > 0 ? Math.floor(bruto) : MIN_BYTES_POR_DEFECTO;\n}\n\nexport function crearExtensionDeBlobs(opciones: OpcionesDeBlobs) {\n\treturn (pi: ExtensionAPI): void => {\n\t\tif (opciones.disabled || process.env.ADA_NO_BLOBS === \"1\") return;\n\n\t\tconst almacen = new AlmacenDeBlobs(opciones.agentDir);\n\t\tconst broker = new BrokerDeBlobs({\n\t\t\talmacen,\n\t\t\tfetchImpl: opciones.fetchImpl,\n\t\t\tminBytes: opciones.minBytes ?? leerUmbral(),\n\t\t});\n\t\t// La carga y la purga son perezosas: arrancar una sesión no debe esperar\n\t\t// a un fichero de caché que puede no existir.\n\t\tconst listo = almacen\n\t\t\t.cargar()\n\t\t\t.then(() => {\n\t\t\t\talmacen.purgar();\n\t\t\t})\n\t\t\t.catch(() => {\n\t\t\t\t// Una caché ilegible degrada a \"subir siempre\", nunca a \"no arrancar\".\n\t\t\t});\n\n\t\tlet modelo: ModeloParaBlobs | undefined;\n\t\tlet ultimo: Diagnostico | undefined;\n\t\t/** Motivo por el que se apagó la reescritura en este proceso, si se apagó. */\n\t\tlet apagadoPor: string | undefined;\n\t\tlet referenciasEnVuelo = false;\n\n\t\tpi.on(\"model_select\", async (evento) => {\n\t\t\tconst m = (evento as { model?: ModeloParaBlobs }).model;\n\t\t\tif (m) modelo = { provider: m.provider, api: m.api, baseUrl: m.baseUrl };\n\t\t});\n\n\t\tpi.on(\"before_provider_request\", async (evento, ctx) => {\n\t\t\tif (apagadoPor) {\n\t\t\t\tultimo = { estado: \"no-puedo\", motivo: apagadoPor };\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tawait listo;\n\t\t\tconst activo = modeloActivo(ctx, modelo);\n\t\t\tconst credencial = await resolverCredencial(opciones, ctx, activo);\n\t\t\tconst resultado = await broker.procesar(evento.payload, activo, credencial, ctx?.signal);\n\t\t\tultimo = resultado.diagnostico;\n\t\t\treferenciasEnVuelo =\n\t\t\t\tresultado.diagnostico.estado === \"listo\" &&\n\t\t\t\tresultado.diagnostico.subidos + resultado.diagnostico.reutilizados > 0;\n\t\t\treturn resultado.payload === evento.payload ? undefined : resultado.payload;\n\t\t});\n\n\t\tpi.on(\"after_provider_response\", async (evento) => {\n\t\t\tif (!referenciasEnVuelo) return;\n\t\t\treferenciasEnVuelo = false;\n\t\t\tif (evento.status >= 200 && evento.status < 300) {\n\t\t\t\tbroker.peticionCorrecta();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst olvidados = broker.rechazoDelProveedor(evento.status);\n\t\t\tif (olvidados.length === 0) return;\n\t\t\t// El evento no trae cuerpo, así que no se puede saber si el 4xx fue por\n\t\t\t// las referencias. Se apaga en lugar de reintentar: reintentar con las\n\t\t\t// mismas referencias repetiría el fallo turno tras turno.\n\t\t\tapagadoPor = `el proveedor devolvió ${evento.status} con referencias a fichero (${olvidados.join(\", \")}); se vuelve a mandar el contenido en línea`;\n\t\t});\n\n\t\t// La otra mitad del apagado, y la única que de verdad se ejecuta contra\n\t\t// Anthropic: `after_provider_response` solo llega con 2xx, así que el 400\n\t\t// que devolvería el proveedor si exige el beta para leer un `file_id` solo\n\t\t// asoma aquí. Sin esto la promesa de la cabecera de este fichero (\"como\n\t\t// mucho se pierde un turno por proceso\") era falsa: se perdían todos.\n\t\tpi.on(\"message_end\", async (evento) => {\n\t\t\tif (!referenciasEnVuelo) return;\n\t\t\tconst mensaje = evento.message as { role?: string; stopReason?: string; errorMessage?: string };\n\t\t\tif (mensaje.role !== \"assistant\" || mensaje.stopReason !== \"error\") return;\n\t\t\tconst estado = estadoDeRechazo(mensaje.errorMessage);\n\t\t\t// Corte de red, 5xx, 429: el turno falló, pero no sabemos nada de las\n\t\t\t// referencias. \"No sé\" no es \"no puedo\", y apagar aquí sería confundirlos.\n\t\t\tif (estado === undefined) return;\n\t\t\treferenciasEnVuelo = false;\n\t\t\tconst olvidados = broker.rechazoDelProveedor(estado);\n\t\t\tif (olvidados.length === 0) return;\n\t\t\tapagadoPor = `el proveedor devolvió ${estado} con referencias a fichero (${olvidados.join(\", \")}); se vuelve a mandar el contenido en línea`;\n\t\t});\n\n\t\tpi.on(\"session_shutdown\", async () => {\n\t\t\tawait broker.volcar().catch(() => {});\n\t\t});\n\n\t\tpi.registerCommand(\"blobs\", {\n\t\t\tdescription: \"Ficheros grandes subidos al proveedor: estado, caché y purga\",\n\t\t\thandler: async (args: string, cmdCtx): Promise<void> => {\n\t\t\t\tawait listo;\n\t\t\t\tconst decir = (texto: string) => cmdCtx.ui?.notify(texto, \"info\");\n\t\t\t\tconst sub = args.trim().split(/\\s+/)[0] || \"estado\";\n\n\t\t\t\tif (sub === \"purgar\") {\n\t\t\t\t\t// `-1` y no `0`: la purga compara `ahora - usadoEn > maxEdadMs`, y una\n\t\t\t\t\t// entrada usada en este mismo milisegundo sobrevivía a un \"purgar\".\n\t\t\t\t\tconst purgadas = almacen.purgar({ maxEdadMs: -1 });\n\t\t\t\t\tawait broker.volcar().catch(() => {});\n\t\t\t\t\tdecir(`Purgadas ${purgadas.length} entrada(s) de la caché de ficheros.`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst capacidad = capacidadDeBlobs(modeloActivo(cmdCtx, modelo));\n\t\t\t\tconst cabecera = puedeSubir(capacidad)\n\t\t\t\t\t? `API de ficheros: ${capacidad.urlFicheros}`\n\t\t\t\t\t: `Sin API de ficheros: ${capacidad.motivo}`;\n\t\t\t\tconst c = broker.contadores;\n\t\t\t\tdecir(\n\t\t\t\t\t[\n\t\t\t\t\t\tcabecera,\n\t\t\t\t\t\t`Último turno: ${describirDiagnostico(ultimo)}`,\n\t\t\t\t\t\t`Acumulado: ${c.subidas} subida(s), ${c.reutilizaciones} reutilización(es), ${c.resubidasPorRechazo} resubida(s) por id muerto.`,\n\t\t\t\t\t\t`Caché: ${almacen.tamano()} entrada(s) en ${almacen.rutaFichero}.`,\n\t\t\t\t\t\tapagadoPor ? `APAGADO: ${apagadoPor}` : \"\",\n\t\t\t\t\t]\n\t\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t\t.join(\"\\n\"),\n\t\t\t\t);\n\t\t\t},\n\t\t});\n\t};\n}\n\n/** `ctx.model` es la verdad; el rastreado por `model_select` es el respaldo. */\nfunction modeloActivo(ctx: unknown, rastreado: ModeloParaBlobs | undefined): ModeloParaBlobs | undefined {\n\ttry {\n\t\tconst m = (ctx as { model?: ModeloParaBlobs } | undefined)?.model;\n\t\tif (m?.api) return { provider: m.provider, api: m.api, baseUrl: m.baseUrl };\n\t} catch {\n\t\t// El runtime de extensiones lanza si aún no se ha hecho bindCore().\n\t}\n\treturn rastreado;\n}\n\nasync function resolverCredencial(\n\topciones: OpcionesDeBlobs,\n\tctx: unknown,\n\tmodelo: ModeloParaBlobs | undefined,\n): Promise<Credencial | undefined> {\n\tif (!modelo) return undefined;\n\tif (opciones.resolverCredencial) return opciones.resolverCredencial(modelo);\n\ttry {\n\t\tconst registro = (\n\t\t\tctx as {\n\t\t\t\tmodelRegistry?: {\n\t\t\t\t\tgetApiKeyAndHeaders?: (m: unknown) => Promise<{\n\t\t\t\t\t\tok: boolean;\n\t\t\t\t\t\tapiKey?: string;\n\t\t\t\t\t\theaders?: Record<string, string | null>;\n\t\t\t\t\t}>;\n\t\t\t\t};\n\t\t\t}\n\t\t)?.modelRegistry;\n\t\tconst auth = await registro?.getApiKeyAndHeaders?.(modelo);\n\t\tif (!auth?.ok) return undefined;\n\t\tconst cabeceras: Record<string, string> = {};\n\t\tfor (const [clave, valor] of Object.entries(auth.headers ?? {})) {\n\t\t\tif (typeof valor === \"string\") cabeceras[clave] = valor;\n\t\t}\n\t\treturn { apiKey: auth.apiKey, cabeceras: Object.keys(cabeceras).length > 0 ? cabeceras : undefined };\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n"]}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Encontrar adjuntos en línea dentro del payload del proveedor y sustituirlos
|
|
3
|
+
* por referencias a un fichero ya subido.
|
|
4
|
+
*
|
|
5
|
+
* Todo aquí es puro: entra un payload, sale otro. Ni red ni disco. Así el
|
|
6
|
+
* troceado se puede probar con el payload EXACTO que construye `packages/ai`
|
|
7
|
+
* sin montar una sesión.
|
|
8
|
+
*
|
|
9
|
+
* La distinción que sostiene la puerta 2 vive en el tipo de retorno de
|
|
10
|
+
* `localizarBlobs`:
|
|
11
|
+
*
|
|
12
|
+
* null → "no sé leer este payload" (API desconocida, o la forma no es la
|
|
13
|
+
* esperada). No es lo mismo que no haber encontrado nada.
|
|
14
|
+
* [] → "sé leerlo y no hay ningún adjunto que subir".
|
|
15
|
+
*
|
|
16
|
+
* Devolver `[]` en los dos casos convertiría un fallo de lectura en un informe
|
|
17
|
+
* tranquilizador de "no había nada", que es exactamente el defecto que este
|
|
18
|
+
* repositorio persigue.
|
|
19
|
+
*/
|
|
20
|
+
export type ApiDeBlobs = "anthropic-messages" | "openai-responses";
|
|
21
|
+
export interface BloqueBlob {
|
|
22
|
+
/**
|
|
23
|
+
* Dónde está: índice de mensaje, índice de bloque dentro de su contenido y,
|
|
24
|
+
* si el bloque cuelga del resultado de una herramienta, el índice dentro de
|
|
25
|
+
* ese resultado. `bloque: -1` = el contenedor ES el item de primer nivel
|
|
26
|
+
* (así viaja `function_call_output` en OpenAI responses).
|
|
27
|
+
*/
|
|
28
|
+
ruta: {
|
|
29
|
+
mensaje: number;
|
|
30
|
+
bloque: number;
|
|
31
|
+
anidado?: number;
|
|
32
|
+
};
|
|
33
|
+
clase: "imagen" | "documento";
|
|
34
|
+
mime: string;
|
|
35
|
+
/** Contenido en base64, sin el prefijo `data:`. */
|
|
36
|
+
base64: string;
|
|
37
|
+
/** Tamaño del contenido decodificado. */
|
|
38
|
+
bytes: number;
|
|
39
|
+
}
|
|
40
|
+
export declare function claveDeRuta(ruta: BloqueBlob["ruta"]): string;
|
|
41
|
+
/** Bytes reales que representa una cadena base64, sin decodificarla. */
|
|
42
|
+
export declare function bytesDeBase64(base64: string): number;
|
|
43
|
+
/** `data:image/png;base64,AAAA` → `{ mime, base64 }`. */
|
|
44
|
+
export declare function partirDataUrl(url: unknown): {
|
|
45
|
+
mime: string;
|
|
46
|
+
base64: string;
|
|
47
|
+
} | undefined;
|
|
48
|
+
export declare function localizarBlobs(payload: unknown, api: string): BloqueBlob[] | null;
|
|
49
|
+
/**
|
|
50
|
+
* Devuelve un payload nuevo con los bloques indicados sustituidos por su
|
|
51
|
+
* referencia. Copia solo la rama que cambia: el resto se comparte, para no
|
|
52
|
+
* duplicar en memoria un contexto que puede pesar megas.
|
|
53
|
+
*/
|
|
54
|
+
export declare function reescribirBlobs(payload: unknown, api: string, ids: Map<string, string>): unknown;
|
|
55
|
+
//# sourceMappingURL=payload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payload.d.ts","sourceRoot":"","sources":["../../../src/core/blobs/payload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,MAAM,UAAU,GAAG,oBAAoB,GAAG,kBAAkB,CAAC;AAEnE,MAAM,WAAW,UAAU;IAC1B;;;;;OAKG;IACH,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5D,KAAK,EAAE,QAAQ,GAAG,WAAW,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,0CAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,MAAM,CAE5D;AAED,wEAAwE;AACxE,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGpD;AAID,2DAAyD;AACzD,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAKxF;AAiCD,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,EAAE,GAAG,IAAI,CAwCjF;AA6BD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CA0DhG","sourcesContent":["/**\n * Encontrar adjuntos en línea dentro del payload del proveedor y sustituirlos\n * por referencias a un fichero ya subido.\n *\n * Todo aquí es puro: entra un payload, sale otro. Ni red ni disco. Así el\n * troceado se puede probar con el payload EXACTO que construye `packages/ai`\n * sin montar una sesión.\n *\n * La distinción que sostiene la puerta 2 vive en el tipo de retorno de\n * `localizarBlobs`:\n *\n * null → \"no sé leer este payload\" (API desconocida, o la forma no es la\n * esperada). No es lo mismo que no haber encontrado nada.\n * [] → \"sé leerlo y no hay ningún adjunto que subir\".\n *\n * Devolver `[]` en los dos casos convertiría un fallo de lectura en un informe\n * tranquilizador de \"no había nada\", que es exactamente el defecto que este\n * repositorio persigue.\n */\n\nexport type ApiDeBlobs = \"anthropic-messages\" | \"openai-responses\";\n\nexport interface BloqueBlob {\n\t/**\n\t * Dónde está: índice de mensaje, índice de bloque dentro de su contenido y,\n\t * si el bloque cuelga del resultado de una herramienta, el índice dentro de\n\t * ese resultado. `bloque: -1` = el contenedor ES el item de primer nivel\n\t * (así viaja `function_call_output` en OpenAI responses).\n\t */\n\truta: { mensaje: number; bloque: number; anidado?: number };\n\tclase: \"imagen\" | \"documento\";\n\tmime: string;\n\t/** Contenido en base64, sin el prefijo `data:`. */\n\tbase64: string;\n\t/** Tamaño del contenido decodificado. */\n\tbytes: number;\n}\n\nexport function claveDeRuta(ruta: BloqueBlob[\"ruta\"]): string {\n\treturn `${ruta.mensaje}:${ruta.bloque}:${ruta.anidado ?? -1}`;\n}\n\n/** Bytes reales que representa una cadena base64, sin decodificarla. */\nexport function bytesDeBase64(base64: string): number {\n\tconst sinRelleno = base64.replace(/=+$/, \"\");\n\treturn Math.floor((sinRelleno.length * 3) / 4);\n}\n\nconst DATA_URL = /^data:([^;,]+);base64,(.*)$/s;\n\n/** `data:image/png;base64,AAAA` → `{ mime, base64 }`. */\nexport function partirDataUrl(url: unknown): { mime: string; base64: string } | undefined {\n\tif (typeof url !== \"string\") return undefined;\n\tconst coincidencia = url.match(DATA_URL);\n\tif (!coincidencia) return undefined;\n\treturn { mime: coincidencia[1], base64: coincidencia[2] };\n}\n\nfunction comoObjeto(valor: unknown): Record<string, unknown> | undefined {\n\treturn valor && typeof valor === \"object\" && !Array.isArray(valor) ? (valor as Record<string, unknown>) : undefined;\n}\n\n/** Los mensajes viven en `messages` (Anthropic) o en `input` (OpenAI responses). */\nfunction listaDeMensajes(payload: Record<string, unknown>, api: ApiDeBlobs): unknown[] | undefined {\n\tconst bruto = api === \"anthropic-messages\" ? payload.messages : payload.input;\n\treturn Array.isArray(bruto) ? bruto : undefined;\n}\n\n/**\n * Nombre del campo donde un resultado de herramienta guarda sus adjuntos, o\n * `undefined` si este bloque no es un resultado de herramienta.\n *\n * Existe porque las imágenes grandes de verdad casi nunca las pega el usuario:\n * las trae una herramienta (`read` de una captura, `computer`). Y esas NO\n * cuelgan del mensaje, van anidadas un nivel más adentro: Anthropic las mete en\n * `tool_result.content[]` (anthropic-messages.ts:1141) y OpenAI responses en\n * `function_call_output.output[]` (openai-responses-shared.ts:308). Sin mirar\n * ahí, `localizarBlobs` devolvía `[]` con una captura de 2 MB delante y\n * `/blobs` informaba \"no hay ningún adjunto en la conversación\" — un \"no lo he\n * mirado\" disfrazado de \"no hay\".\n */\nfunction campoAnidado(bloque: Record<string, unknown>, api: ApiDeBlobs): \"content\" | \"output\" | undefined {\n\tif (api === \"anthropic-messages\") {\n\t\treturn bloque.type === \"tool_result\" && Array.isArray(bloque.content) ? \"content\" : undefined;\n\t}\n\tconst esSalida = bloque.type === \"function_call_output\" || bloque.type === \"custom_tool_call_output\";\n\treturn esSalida && Array.isArray(bloque.output) ? \"output\" : undefined;\n}\n\nexport function localizarBlobs(payload: unknown, api: string): BloqueBlob[] | null {\n\tif (api !== \"anthropic-messages\" && api !== \"openai-responses\") return null;\n\tconst objeto = comoObjeto(payload);\n\tif (!objeto) return null;\n\tconst mensajes = listaDeMensajes(objeto, api);\n\tif (!mensajes) return null;\n\n\tconst encontrados: BloqueBlob[] = [];\n\tconst recoger = (lista: unknown[], mensaje: number, bloque: number) => {\n\t\tfor (const [anidado, hijo] of lista.entries()) {\n\t\t\tconst encontrado = leerBloque(hijo, api);\n\t\t\tif (encontrado) encontrados.push({ ...encontrado, ruta: { mensaje, bloque, anidado } });\n\t\t}\n\t};\n\n\tfor (const [indiceMensaje, mensaje] of mensajes.entries()) {\n\t\tconst cuerpo = comoObjeto(mensaje);\n\t\tif (!cuerpo) continue;\n\t\t// OpenAI responses: el resultado de herramienta es un item de primer nivel,\n\t\t// no un bloque dentro de un mensaje. De ahí el `-1`.\n\t\tconst directo = campoAnidado(cuerpo, api);\n\t\tif (directo) {\n\t\t\trecoger(cuerpo[directo] as unknown[], indiceMensaje, -1);\n\t\t\tcontinue;\n\t\t}\n\t\t// El contenido puede ser una cadena (Anthropic lo hace cuando solo hay\n\t\t// texto): no es un fallo de lectura, es un mensaje sin adjuntos.\n\t\tif (!Array.isArray(cuerpo.content)) continue;\n\t\tfor (const [indiceBloque, bloque] of (cuerpo.content as unknown[]).entries()) {\n\t\t\tconst objetoBloque = comoObjeto(bloque);\n\t\t\tconst campo = objetoBloque && campoAnidado(objetoBloque, api);\n\t\t\tif (objetoBloque && campo) {\n\t\t\t\trecoger(objetoBloque[campo] as unknown[], indiceMensaje, indiceBloque);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst encontrado = leerBloque(bloque, api);\n\t\t\tif (encontrado) encontrados.push({ ...encontrado, ruta: { mensaje: indiceMensaje, bloque: indiceBloque } });\n\t\t}\n\t}\n\treturn encontrados;\n}\n\nfunction leerBloque(bloque: unknown, api: ApiDeBlobs): Omit<BloqueBlob, \"ruta\"> | undefined {\n\tconst objeto = comoObjeto(bloque);\n\tif (!objeto) return undefined;\n\n\tif (api === \"anthropic-messages\") {\n\t\tif (objeto.type !== \"image\" && objeto.type !== \"document\") return undefined;\n\t\tconst fuente = comoObjeto(objeto.source);\n\t\tif (!fuente || fuente.type !== \"base64\") return undefined;\n\t\tconst base64 = fuente.data;\n\t\tconst mime = fuente.media_type;\n\t\tif (typeof base64 !== \"string\" || typeof mime !== \"string\") return undefined;\n\t\treturn { clase: objeto.type === \"image\" ? \"imagen\" : \"documento\", mime, base64, bytes: bytesDeBase64(base64) };\n\t}\n\n\tif (objeto.type === \"input_image\") {\n\t\tconst partes = partirDataUrl(objeto.image_url);\n\t\tif (!partes) return undefined;\n\t\treturn { clase: \"imagen\", mime: partes.mime, base64: partes.base64, bytes: bytesDeBase64(partes.base64) };\n\t}\n\tif (objeto.type === \"input_file\") {\n\t\tconst partes = partirDataUrl(objeto.file_data);\n\t\tif (!partes) return undefined;\n\t\treturn { clase: \"documento\", mime: partes.mime, base64: partes.base64, bytes: bytesDeBase64(partes.base64) };\n\t}\n\treturn undefined;\n}\n\n/**\n * Devuelve un payload nuevo con los bloques indicados sustituidos por su\n * referencia. Copia solo la rama que cambia: el resto se comparte, para no\n * duplicar en memoria un contexto que puede pesar megas.\n */\nexport function reescribirBlobs(payload: unknown, api: string, ids: Map<string, string>): unknown {\n\tif (ids.size === 0) return payload;\n\tif (api !== \"anthropic-messages\" && api !== \"openai-responses\") return payload;\n\tconst objeto = comoObjeto(payload);\n\tif (!objeto) return payload;\n\tconst mensajes = listaDeMensajes(objeto, api);\n\tif (!mensajes) return payload;\n\n\t/** Devuelve la lista anidada reescrita, o `undefined` si no cambió nada. */\n\tconst reescribirAnidados = (lista: unknown[], mensaje: number, bloque: number): unknown[] | undefined => {\n\t\tlet cambiadoAqui = false;\n\t\tconst nueva = lista.map((hijo, anidado) => {\n\t\t\tconst id = ids.get(claveDeRuta({ mensaje, bloque, anidado }));\n\t\t\tif (!id) return hijo;\n\t\t\tconst referencia = referenciaDeFichero(hijo, api, id);\n\t\t\tif (!referencia) return hijo;\n\t\t\tcambiadoAqui = true;\n\t\t\treturn referencia;\n\t\t});\n\t\treturn cambiadoAqui ? nueva : undefined;\n\t};\n\n\tlet cambiado = false;\n\tconst nuevosMensajes = mensajes.map((mensaje, indiceMensaje) => {\n\t\tconst cuerpo = comoObjeto(mensaje);\n\t\tif (!cuerpo) return mensaje;\n\t\tconst directo = campoAnidado(cuerpo, api);\n\t\tif (directo) {\n\t\t\tconst nuevos = reescribirAnidados(cuerpo[directo] as unknown[], indiceMensaje, -1);\n\t\t\tif (!nuevos) return mensaje;\n\t\t\tcambiado = true;\n\t\t\treturn { ...cuerpo, [directo]: nuevos };\n\t\t}\n\t\tif (!Array.isArray(cuerpo.content)) return mensaje;\n\t\tlet cambiadoAqui = false;\n\t\tconst nuevoContenido = (cuerpo.content as unknown[]).map((bloque, indiceBloque) => {\n\t\t\tconst objetoBloque = comoObjeto(bloque);\n\t\t\tconst campo = objetoBloque && campoAnidado(objetoBloque, api);\n\t\t\tif (objetoBloque && campo) {\n\t\t\t\tconst nuevos = reescribirAnidados(objetoBloque[campo] as unknown[], indiceMensaje, indiceBloque);\n\t\t\t\tif (!nuevos) return bloque;\n\t\t\t\tcambiadoAqui = true;\n\t\t\t\treturn { ...objetoBloque, [campo]: nuevos };\n\t\t\t}\n\t\t\tconst id = ids.get(claveDeRuta({ mensaje: indiceMensaje, bloque: indiceBloque }));\n\t\t\tif (!id) return bloque;\n\t\t\tconst referencia = referenciaDeFichero(bloque, api, id);\n\t\t\tif (!referencia) return bloque;\n\t\t\tcambiadoAqui = true;\n\t\t\treturn referencia;\n\t\t});\n\t\tif (!cambiadoAqui) return mensaje;\n\t\tcambiado = true;\n\t\treturn { ...cuerpo, content: nuevoContenido };\n\t});\n\n\tif (!cambiado) return payload;\n\treturn api === \"anthropic-messages\" ? { ...objeto, messages: nuevosMensajes } : { ...objeto, input: nuevosMensajes };\n}\n\n/**\n * Se conserva TODO lo demás del bloque y solo se cambia de dónde salen los\n * bytes.\n *\n * Antes se construía un bloque nuevo con `type` y la referencia, y eso tiraba\n * en silencio las propiedades hermanas. La cara: `packages/ai` pone el\n * breakpoint de caché de conversación en el ÚLTIMO bloque del último mensaje de\n * usuario, y ese bloque es la imagen cuando la imagen va la última\n * (anthropic-messages.ts:1296-1306). Comprobado ejecutándolo con el payload que\n * construye `buildParams`: entraba `cache_control: {\"type\":\"ephemeral\"}` y salía\n * sin él. Un módulo que existe para ahorrar rompía la caché de prompt y lo\n * informaba como \"1 subido\". También se perdían `title`, `context` y\n * `citations` de los bloques `document`.\n */\nfunction referenciaDeFichero(bloque: unknown, api: ApiDeBlobs, id: string): Record<string, unknown> | undefined {\n\tconst objeto = comoObjeto(bloque);\n\tif (!objeto) return undefined;\n\tif (api === \"anthropic-messages\") {\n\t\tif (objeto.type !== \"image\" && objeto.type !== \"document\") return undefined;\n\t\t// Se copia el bloque entero y solo se cambia `source`. Esta es LA rama\n\t\t// donde vive el `cache_control`: el breakpoint solo se pone en bloques\n\t\t// `text`, `image` y `tool_result`, todos de Anthropic.\n\t\treturn { ...objeto, source: { type: \"file\", file_id: id } };\n\t}\n\tif (objeto.type === \"input_image\") {\n\t\t// `detail` sobrevive con el resto: es la palanca de coste de visión de\n\t\t// OpenAI y perderla cambiaría en silencio lo que paga el usuario.\n\t\tconst { image_url: _fuera, ...resto } = objeto;\n\t\treturn { ...resto, file_id: id };\n\t}\n\tif (objeto.type === \"input_file\") {\n\t\tconst { file_data: _fuera, ...resto } = objeto;\n\t\treturn { ...resto, file_id: id };\n\t}\n\treturn undefined;\n}\n"]}
|