@hoilab/ada-cli 0.85.0 → 0.85.3
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/dist/ada-publico.d.ts.map +1 -1
- package/dist/ada-publico.js.map +1 -1
- package/dist/bun/cli.d.ts.map +1 -1
- package/dist/bun/cli.js.map +1 -1
- package/dist/bun/register-bedrock.d.ts.map +1 -1
- package/dist/bun/register-bedrock.js.map +1 -1
- package/dist/bun/restore-sandbox-env.d.ts.map +1 -1
- package/dist/bun/restore-sandbox-env.js.map +1 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/audit-command.d.ts.map +1 -1
- package/dist/cli/audit-command.js.map +1 -1
- package/dist/cli/auth-check.d.ts.map +1 -1
- package/dist/cli/auth-check.js.map +1 -1
- package/dist/cli/auth-command.d.ts.map +1 -1
- package/dist/cli/auth-command.js.map +1 -1
- package/dist/cli/banco-command.d.ts.map +1 -1
- package/dist/cli/banco-command.js.map +1 -1
- package/dist/cli/cleanse-command.d.ts.map +1 -1
- package/dist/cli/cleanse-command.js +5 -2
- package/dist/cli/cleanse-command.js.map +1 -1
- package/dist/cli/commit-command.d.ts +8 -6
- package/dist/cli/commit-command.d.ts.map +1 -1
- package/dist/cli/commit-command.js +124 -92
- package/dist/cli/commit-command.js.map +1 -1
- package/dist/cli/completion.d.ts +20 -0
- package/dist/cli/completion.d.ts.map +1 -0
- package/dist/cli/completion.js +75 -0
- package/dist/cli/completion.js.map +1 -0
- package/dist/cli/computer-command.d.ts.map +1 -1
- package/dist/cli/computer-command.js.map +1 -1
- package/dist/cli/config-selector.d.ts.map +1 -1
- package/dist/cli/config-selector.js.map +1 -1
- package/dist/cli/credential-print.d.ts.map +1 -1
- package/dist/cli/credential-print.js.map +1 -1
- package/dist/cli/discover-command.d.ts.map +1 -1
- package/dist/cli/discover-command.js +5 -1
- package/dist/cli/discover-command.js.map +1 -1
- package/dist/cli/experimental/auth.d.ts.map +1 -1
- package/dist/cli/experimental/auth.js.map +1 -1
- package/dist/cli/experimental/cli.d.ts +1 -1
- package/dist/cli/experimental/cli.d.ts.map +1 -1
- package/dist/cli/experimental/cli.js.map +1 -1
- package/dist/cli/experimental/command-options.d.ts.map +1 -1
- package/dist/cli/experimental/command-options.js.map +1 -1
- package/dist/cli/experimental/command.d.ts.map +1 -1
- package/dist/cli/experimental/command.js.map +1 -1
- package/dist/cli/experimental/commands/client.d.ts.map +1 -1
- package/dist/cli/experimental/commands/client.js.map +1 -1
- package/dist/cli/experimental/commands/pi.d.ts.map +1 -1
- package/dist/cli/experimental/commands/pi.js.map +1 -1
- package/dist/cli/experimental/commands/server.d.ts.map +1 -1
- package/dist/cli/experimental/commands/server.js.map +1 -1
- package/dist/cli/experimental/transport-address.d.ts.map +1 -1
- package/dist/cli/experimental/transport-address.js.map +1 -1
- package/dist/cli/file-processor.d.ts.map +1 -1
- package/dist/cli/file-processor.js.map +1 -1
- package/dist/cli/guardrails.d.ts +14 -0
- package/dist/cli/guardrails.d.ts.map +1 -0
- package/dist/cli/guardrails.js +47 -0
- package/dist/cli/guardrails.js.map +1 -0
- package/dist/cli/hashline-command.d.ts.map +1 -1
- package/dist/cli/hashline-command.js.map +1 -1
- package/dist/cli/home-screen.d.ts.map +1 -1
- package/dist/cli/home-screen.js +1 -0
- package/dist/cli/home-screen.js.map +1 -1
- package/dist/cli/import-command.d.ts.map +1 -1
- package/dist/cli/import-command.js.map +1 -1
- package/dist/cli/initial-message.d.ts +1 -1
- package/dist/cli/initial-message.d.ts.map +1 -1
- package/dist/cli/initial-message.js.map +1 -1
- package/dist/cli/list-models.d.ts.map +1 -1
- package/dist/cli/list-models.js.map +1 -1
- package/dist/cli/politica-command.d.ts.map +1 -1
- package/dist/cli/politica-command.js.map +1 -1
- package/dist/cli/project-trust.d.ts.map +1 -1
- package/dist/cli/project-trust.js.map +1 -1
- package/dist/cli/refine-command.d.ts.map +1 -1
- package/dist/cli/refine-command.js.map +1 -1
- package/dist/cli/review-command.d.ts.map +1 -1
- package/dist/cli/review-command.js +77 -13
- package/dist/cli/review-command.js.map +1 -1
- package/dist/cli/schedule-command.d.ts.map +1 -1
- package/dist/cli/schedule-command.js.map +1 -1
- package/dist/cli/serve-command.d.ts +0 -1
- package/dist/cli/serve-command.d.ts.map +1 -1
- package/dist/cli/serve-command.js +12 -6
- package/dist/cli/serve-command.js.map +1 -1
- package/dist/cli/session-picker.d.ts.map +1 -1
- package/dist/cli/session-picker.js.map +1 -1
- package/dist/cli/startup-ui.d.ts.map +1 -1
- package/dist/cli/startup-ui.js.map +1 -1
- package/dist/cli/telegram-command.d.ts.map +1 -1
- package/dist/cli/telegram-command.js.map +1 -1
- package/dist/cli/telemetria-command.d.ts.map +1 -1
- package/dist/cli/telemetria-command.js.map +1 -1
- package/dist/cli/undo-command.d.ts.map +1 -1
- package/dist/cli/undo-command.js.map +1 -1
- package/dist/cli/update-cli.d.ts +82 -0
- package/dist/cli/update-cli.d.ts.map +1 -0
- package/dist/cli/update-cli.js +372 -0
- package/dist/cli/update-cli.js.map +1 -0
- package/dist/cli/usage-command.d.ts.map +1 -1
- package/dist/cli/usage-command.js +75 -6
- package/dist/cli/usage-command.js.map +1 -1
- package/dist/cli/wiki-command.d.ts.map +1 -1
- package/dist/cli/wiki-command.js.map +1 -1
- package/dist/cli.d.ts +0 -6
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +0 -0
- package/dist/cli.js.map +1 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/remote-session.d.ts.map +1 -1
- package/dist/client/remote-session.js.map +1 -1
- package/dist/client/transcript.d.ts.map +1 -1
- package/dist/client/transcript.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/core/ada.d.ts +5 -0
- package/dist/core/ada.d.ts.map +1 -1
- package/dist/core/ada.js +5 -0
- package/dist/core/ada.js.map +1 -1
- package/dist/core/advisor/guarda.d.ts.map +1 -1
- package/dist/core/advisor/guarda.js.map +1 -1
- package/dist/core/advisor/runtime.d.ts.map +1 -1
- package/dist/core/advisor/runtime.js.map +1 -1
- package/dist/core/advisor/sesion.d.ts.map +1 -1
- package/dist/core/advisor/sesion.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +33 -0
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session.d.ts +67 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +43 -2
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/agents/loader.d.ts.map +1 -1
- package/dist/core/agents/loader.js.map +1 -1
- package/dist/core/appendonly/append-only-context.d.ts +118 -0
- package/dist/core/appendonly/append-only-context.d.ts.map +1 -0
- package/dist/core/appendonly/append-only-context.js +256 -0
- package/dist/core/appendonly/append-only-context.js.map +1 -0
- package/dist/core/appendonly/auto.d.ts +30 -0
- package/dist/core/appendonly/auto.d.ts.map +1 -0
- package/dist/core/appendonly/auto.js +68 -0
- package/dist/core/appendonly/auto.js.map +1 -0
- package/dist/core/appendonly/extension.d.ts +29 -0
- package/dist/core/appendonly/extension.d.ts.map +1 -0
- package/dist/core/appendonly/extension.js +51 -0
- package/dist/core/appendonly/extension.js.map +1 -0
- package/dist/core/appendonly/index.d.ts +41 -0
- package/dist/core/appendonly/index.d.ts.map +1 -0
- package/dist/core/appendonly/index.js +42 -0
- package/dist/core/appendonly/index.js.map +1 -0
- package/dist/core/aprobacion/generados.d.ts.map +1 -1
- package/dist/core/aprobacion/generados.js.map +1 -1
- package/dist/core/aprobacion/politica-de-maquina.d.ts.map +1 -1
- package/dist/core/aprobacion/politica-de-maquina.js.map +1 -1
- package/dist/core/aprobacion/politica.d.ts +1 -1
- package/dist/core/aprobacion/politica.d.ts.map +1 -1
- package/dist/core/aprobacion/politica.js.map +1 -1
- package/dist/core/arranque/atajos.d.ts.map +1 -1
- package/dist/core/arranque/atajos.js +20 -0
- package/dist/core/arranque/atajos.js.map +1 -1
- package/dist/core/audit/exportacion.d.ts.map +1 -1
- package/dist/core/audit/exportacion.js +5 -3
- package/dist/core/audit/exportacion.js.map +1 -1
- package/dist/core/audit/libro.d.ts +7 -0
- package/dist/core/audit/libro.d.ts.map +1 -1
- package/dist/core/audit/libro.js.map +1 -1
- package/dist/core/audit/registro-sesion.d.ts.map +1 -1
- package/dist/core/audit/registro-sesion.js.map +1 -1
- package/dist/core/audit/retencion.d.ts.map +1 -1
- package/dist/core/audit/retencion.js.map +1 -1
- package/dist/core/audit/rutas.d.ts.map +1 -1
- package/dist/core/audit/rutas.js.map +1 -1
- package/dist/core/auth-guidance.d.ts.map +1 -1
- package/dist/core/auth-guidance.js.map +1 -1
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/banco/almacenamiento.d.ts.map +1 -1
- package/dist/core/banco/almacenamiento.js.map +1 -1
- package/dist/core/banco/analisis.d.ts.map +1 -1
- package/dist/core/banco/analisis.js.map +1 -1
- package/dist/core/banco/asides.d.ts +64 -0
- package/dist/core/banco/asides.d.ts.map +1 -0
- package/dist/core/banco/asides.js +113 -0
- package/dist/core/banco/asides.js.map +1 -0
- package/dist/core/banco/bloques.d.ts.map +1 -1
- package/dist/core/banco/bloques.js.map +1 -1
- package/dist/core/banco/cargas.d.ts.map +1 -1
- package/dist/core/banco/cargas.js.map +1 -1
- package/dist/core/banco/comparar.d.ts.map +1 -1
- package/dist/core/banco/comparar.js.map +1 -1
- package/dist/core/banco/cow-isolation.d.ts +74 -0
- package/dist/core/banco/cow-isolation.d.ts.map +1 -0
- package/dist/core/banco/cow-isolation.js +259 -0
- package/dist/core/banco/cow-isolation.js.map +1 -0
- package/dist/core/banco/ejecutar.d.ts.map +1 -1
- package/dist/core/banco/ejecutar.js.map +1 -1
- package/dist/core/banco/generar.d.ts.map +1 -1
- package/dist/core/banco/generar.js.map +1 -1
- package/dist/core/banco/mutaciones.d.ts.map +1 -1
- package/dist/core/banco/mutaciones.js.map +1 -1
- package/dist/core/banco/park-revive.d.ts +67 -0
- package/dist/core/banco/park-revive.d.ts.map +1 -0
- package/dist/core/banco/park-revive.js +130 -0
- package/dist/core/banco/park-revive.js.map +1 -0
- package/dist/core/banco/pruning.d.ts +48 -0
- package/dist/core/banco/pruning.d.ts.map +1 -0
- package/dist/core/banco/pruning.js +146 -0
- package/dist/core/banco/pruning.js.map +1 -0
- package/dist/core/banco/steering.d.ts +81 -0
- package/dist/core/banco/steering.d.ts.map +1 -0
- package/dist/core/banco/steering.js +96 -0
- package/dist/core/banco/steering.js.map +1 -0
- package/dist/core/banco/tipos.d.ts.map +1 -1
- package/dist/core/banco/tipos.js.map +1 -1
- package/dist/core/bash-executor.d.ts.map +1 -1
- package/dist/core/bash-executor.js.map +1 -1
- package/dist/core/blobs/almacen.d.ts.map +1 -1
- package/dist/core/blobs/almacen.js.map +1 -1
- package/dist/core/blobs/broker.d.ts +1 -0
- package/dist/core/blobs/broker.d.ts.map +1 -1
- package/dist/core/blobs/broker.js +1 -1
- package/dist/core/blobs/broker.js.map +1 -1
- package/dist/core/blobs/index.d.ts +1 -0
- package/dist/core/blobs/index.d.ts.map +1 -1
- package/dist/core/blobs/index.js +1 -0
- package/dist/core/blobs/index.js.map +1 -1
- package/dist/core/blobs/payload.d.ts.map +1 -1
- package/dist/core/blobs/payload.js.map +1 -1
- package/dist/core/blobs/proveedor.d.ts.map +1 -1
- package/dist/core/blobs/proveedor.js.map +1 -1
- package/dist/core/blobs/uploaders.d.ts +105 -0
- package/dist/core/blobs/uploaders.d.ts.map +1 -0
- package/dist/core/blobs/uploaders.js +224 -0
- package/dist/core/blobs/uploaders.js.map +1 -0
- package/dist/core/broker/broker.d.ts +54 -0
- package/dist/core/broker/broker.d.ts.map +1 -0
- package/dist/core/broker/broker.js +216 -0
- package/dist/core/broker/broker.js.map +1 -0
- package/dist/core/broker/index.d.ts +21 -0
- package/dist/core/broker/index.d.ts.map +1 -0
- package/dist/core/broker/index.js +33 -0
- package/dist/core/broker/index.js.map +1 -0
- package/dist/core/broker/ps.d.ts +20 -0
- package/dist/core/broker/ps.d.ts.map +1 -0
- package/dist/core/broker/ps.js +55 -0
- package/dist/core/broker/ps.js.map +1 -0
- package/dist/core/broker/types.d.ts +45 -0
- package/dist/core/broker/types.d.ts.map +1 -0
- package/dist/core/broker/types.js +19 -0
- package/dist/core/broker/types.js.map +1 -0
- package/dist/core/browser/cdp.d.ts.map +1 -1
- package/dist/core/browser/cdp.js.map +1 -1
- package/dist/core/browser/politica.d.ts.map +1 -1
- package/dist/core/browser/politica.js.map +1 -1
- package/dist/core/browser/sesion.d.ts.map +1 -1
- package/dist/core/browser/sesion.js.map +1 -1
- package/dist/core/browser/tools.d.ts.map +1 -1
- package/dist/core/browser/tools.js.map +1 -1
- package/dist/core/cache-stats.d.ts.map +1 -1
- package/dist/core/cache-stats.js.map +1 -1
- package/dist/core/capability/capability.test.d.ts +12 -0
- package/dist/core/capability/capability.test.d.ts.map +1 -0
- package/dist/core/capability/capability.test.js +258 -0
- package/dist/core/capability/capability.test.js.map +1 -0
- package/dist/core/capability/fs.d.ts +32 -0
- package/dist/core/capability/fs.d.ts.map +1 -0
- package/dist/core/capability/fs.js +106 -0
- package/dist/core/capability/fs.js.map +1 -0
- package/dist/core/capability/index.d.ts +68 -0
- package/dist/core/capability/index.d.ts.map +1 -0
- package/dist/core/capability/index.js +258 -0
- package/dist/core/capability/index.js.map +1 -0
- package/dist/core/capability/types.d.ts +168 -0
- package/dist/core/capability/types.d.ts.map +1 -0
- package/dist/core/capability/types.js +16 -0
- package/dist/core/capability/types.js.map +1 -0
- package/dist/core/carga-plugins/index.d.ts +49 -0
- package/dist/core/carga-plugins/index.d.ts.map +1 -0
- package/dist/core/carga-plugins/index.js +85 -0
- package/dist/core/carga-plugins/index.js.map +1 -0
- package/dist/core/carga-plugins/invalidacion.d.ts +60 -0
- package/dist/core/carga-plugins/invalidacion.d.ts.map +1 -0
- package/dist/core/carga-plugins/invalidacion.js +94 -0
- package/dist/core/carga-plugins/invalidacion.js.map +1 -0
- package/dist/core/carga-plugins/paralelo.d.ts +48 -0
- package/dist/core/carga-plugins/paralelo.d.ts.map +1 -0
- package/dist/core/carga-plugins/paralelo.js +47 -0
- package/dist/core/carga-plugins/paralelo.js.map +1 -0
- package/dist/core/colaboracion/autoresearch.d.ts +56 -0
- package/dist/core/colaboracion/autoresearch.d.ts.map +1 -0
- package/dist/core/colaboracion/autoresearch.js +95 -0
- package/dist/core/colaboracion/autoresearch.js.map +1 -0
- package/dist/core/colaboracion/index.d.ts +10 -0
- package/dist/core/colaboracion/index.d.ts.map +1 -0
- package/dist/core/colaboracion/index.js +7 -0
- package/dist/core/colaboracion/index.js.map +1 -0
- package/dist/core/colaboracion/kernels.d.ts +63 -0
- package/dist/core/colaboracion/kernels.d.ts.map +1 -0
- package/dist/core/colaboracion/kernels.js +99 -0
- package/dist/core/colaboracion/kernels.js.map +1 -0
- package/dist/core/colaboracion/rele/index.d.ts +8 -0
- package/dist/core/colaboracion/rele/index.d.ts.map +1 -0
- package/dist/core/colaboracion/rele/index.js +6 -0
- package/dist/core/colaboracion/rele/index.js.map +1 -0
- package/dist/core/colaboracion/rele/rele-servidor.d.ts +69 -0
- package/dist/core/colaboracion/rele/rele-servidor.d.ts.map +1 -0
- package/dist/core/colaboracion/rele/rele-servidor.js +197 -0
- package/dist/core/colaboracion/rele/rele-servidor.js.map +1 -0
- package/dist/core/colaboracion/rele/suscriptor.d.ts +31 -0
- package/dist/core/colaboracion/rele/suscriptor.d.ts.map +1 -0
- package/dist/core/colaboracion/rele/suscriptor.js +173 -0
- package/dist/core/colaboracion/rele/suscriptor.js.map +1 -0
- package/dist/core/colaboracion/sesion-colaborativa.d.ts +61 -0
- package/dist/core/colaboracion/sesion-colaborativa.d.ts.map +1 -0
- package/dist/core/colaboracion/sesion-colaborativa.js +127 -0
- package/dist/core/colaboracion/sesion-colaborativa.js.map +1 -0
- package/dist/core/commits/agentic.d.ts +101 -0
- package/dist/core/commits/agentic.d.ts.map +1 -0
- package/dist/core/commits/agentic.js +268 -0
- package/dist/core/commits/agentic.js.map +1 -0
- package/dist/core/commits/changelog.d.ts +37 -0
- package/dist/core/commits/changelog.d.ts.map +1 -0
- package/dist/core/commits/changelog.js +155 -0
- package/dist/core/commits/changelog.js.map +1 -0
- package/dist/core/commits/diff.d.ts.map +1 -0
- package/dist/core/commits/diff.js.map +1 -0
- package/dist/core/commits/git.d.ts +43 -0
- package/dist/core/commits/git.d.ts.map +1 -0
- package/dist/core/commits/git.js +61 -0
- package/dist/core/commits/git.js.map +1 -0
- package/dist/core/commits/split.d.ts +45 -0
- package/dist/core/commits/split.d.ts.map +1 -0
- package/dist/core/commits/split.js +128 -0
- package/dist/core/commits/split.js.map +1 -0
- package/dist/core/compactacion/comandos.d.ts +53 -0
- package/dist/core/compactacion/comandos.d.ts.map +1 -0
- package/dist/core/compactacion/comandos.js +155 -0
- package/dist/core/compactacion/comandos.js.map +1 -0
- package/dist/core/compactacion/extension.d.ts +28 -0
- package/dist/core/compactacion/extension.d.ts.map +1 -0
- package/dist/core/compactacion/extension.js +159 -0
- package/dist/core/compactacion/extension.js.map +1 -0
- package/dist/core/compactacion/handoff.d.ts +61 -0
- package/dist/core/compactacion/handoff.d.ts.map +1 -0
- package/dist/core/compactacion/handoff.js +139 -0
- package/dist/core/compactacion/handoff.js.map +1 -0
- package/dist/core/compactacion/index.d.ts +15 -0
- package/dist/core/compactacion/index.d.ts.map +1 -0
- package/dist/core/compactacion/index.js +15 -0
- package/dist/core/compactacion/index.js.map +1 -0
- package/dist/core/compactacion/prune.d.ts +38 -0
- package/dist/core/compactacion/prune.d.ts.map +1 -0
- package/dist/core/compactacion/prune.js +81 -0
- package/dist/core/compactacion/prune.js.map +1 -0
- package/dist/core/compactacion/shake.d.ts +40 -0
- package/dist/core/compactacion/shake.d.ts.map +1 -0
- package/dist/core/compactacion/shake.js +106 -0
- package/dist/core/compactacion/shake.js.map +1 -0
- package/dist/core/compactacion/tipos.d.ts +54 -0
- package/dist/core/compactacion/tipos.d.ts.map +1 -0
- package/dist/core/compactacion/tipos.js +44 -0
- package/dist/core/compactacion/tipos.js.map +1 -0
- package/dist/core/compactar/index.d.ts.map +1 -1
- package/dist/core/compactar/index.js.map +1 -1
- package/dist/core/compactar/registro-denso.d.ts.map +1 -1
- package/dist/core/compactar/registro-denso.js.map +1 -1
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/compaction/index.d.ts.map +1 -1
- package/dist/core/compaction/index.js.map +1 -1
- package/dist/core/compaction/utils.d.ts.map +1 -1
- package/dist/core/compaction/utils.js.map +1 -1
- package/dist/core/computer/captura.d.ts.map +1 -1
- package/dist/core/computer/captura.js.map +1 -1
- package/dist/core/computer/driver.d.ts.map +1 -1
- package/dist/core/computer/driver.js.map +1 -1
- package/dist/core/computer/motor/actions.d.ts.map +1 -1
- package/dist/core/computer/motor/actions.js.map +1 -1
- package/dist/core/computer/motor/bridge.d.ts +2 -2
- package/dist/core/computer/motor/bridge.d.ts.map +1 -1
- package/dist/core/computer/motor/bridge.js.map +1 -1
- package/dist/core/computer/motor/cdp.d.ts.map +1 -1
- package/dist/core/computer/motor/cdp.js.map +1 -1
- package/dist/core/computer/motor/config.d.ts.map +1 -1
- package/dist/core/computer/motor/config.js.map +1 -1
- package/dist/core/computer/motor/contract.d.ts.map +1 -1
- package/dist/core/computer/motor/contract.js.map +1 -1
- package/dist/core/computer/motor/note.d.ts.map +1 -1
- package/dist/core/computer/motor/note.js.map +1 -1
- package/dist/core/computer/motor/outline.d.ts.map +1 -1
- package/dist/core/computer/motor/outline.js.map +1 -1
- package/dist/core/computer/motor/output.d.ts.map +1 -1
- package/dist/core/computer/motor/output.js.map +1 -1
- package/dist/core/computer/motor/permissions.d.ts.map +1 -1
- package/dist/core/computer/motor/permissions.js.map +1 -1
- package/dist/core/computer/motor/platform/architecture.d.ts.map +1 -1
- package/dist/core/computer/motor/platform/architecture.js.map +1 -1
- package/dist/core/computer/motor/platform/coerce.d.ts.map +1 -1
- package/dist/core/computer/motor/platform/coerce.js.map +1 -1
- package/dist/core/computer/motor/platform/index.d.ts.map +1 -1
- package/dist/core/computer/motor/platform/index.js.map +1 -1
- package/dist/core/computer/motor/platform/linux/backend.d.ts.map +1 -1
- package/dist/core/computer/motor/platform/linux/backend.js.map +1 -1
- package/dist/core/computer/motor/platform/linux/helper.d.ts.map +1 -1
- package/dist/core/computer/motor/platform/linux/helper.js.map +1 -1
- package/dist/core/computer/motor/platform/macos/backend.d.ts.map +1 -1
- package/dist/core/computer/motor/platform/macos/backend.js.map +1 -1
- package/dist/core/computer/motor/platform/macos/browser.d.ts.map +1 -1
- package/dist/core/computer/motor/platform/macos/browser.js.map +1 -1
- package/dist/core/computer/motor/platform/macos/helper.d.ts.map +1 -1
- package/dist/core/computer/motor/platform/macos/helper.js.map +1 -1
- package/dist/core/computer/motor/platform/macos/permissions.d.ts.map +1 -1
- package/dist/core/computer/motor/platform/macos/permissions.js.map +1 -1
- package/dist/core/computer/motor/platform/types.d.ts.map +1 -1
- package/dist/core/computer/motor/platform/types.js.map +1 -1
- package/dist/core/computer/motor/platform/windows/backend.d.ts.map +1 -1
- package/dist/core/computer/motor/platform/windows/backend.js.map +1 -1
- package/dist/core/computer/motor/platform/windows/helper.d.ts.map +1 -1
- package/dist/core/computer/motor/platform/windows/helper.js.map +1 -1
- package/dist/core/computer/motor/root-selection.d.ts.map +1 -1
- package/dist/core/computer/motor/root-selection.js.map +1 -1
- package/dist/core/computer/motor/runtime.d.ts.map +1 -1
- package/dist/core/computer/motor/runtime.js.map +1 -1
- package/dist/core/computer/motor/state.d.ts.map +1 -1
- package/dist/core/computer/motor/state.js.map +1 -1
- package/dist/core/computer/motor/view.d.ts.map +1 -1
- package/dist/core/computer/motor/view.js.map +1 -1
- package/dist/core/computer/motor-ada.d.ts.map +1 -1
- package/dist/core/computer/motor-ada.js.map +1 -1
- package/dist/core/computer/politica.d.ts.map +1 -1
- package/dist/core/computer/politica.js.map +1 -1
- package/dist/core/computer/tools.d.ts.map +1 -1
- package/dist/core/computer/tools.js.map +1 -1
- package/dist/core/config/quarantine.d.ts +57 -0
- package/dist/core/config/quarantine.d.ts.map +1 -0
- package/dist/core/config/quarantine.js +161 -0
- package/dist/core/config/quarantine.js.map +1 -0
- package/dist/core/config-viva/ambito.d.ts +46 -0
- package/dist/core/config-viva/ambito.d.ts.map +1 -0
- package/dist/core/config-viva/ambito.js +62 -0
- package/dist/core/config-viva/ambito.js.map +1 -0
- package/dist/core/config-viva/cache-negativa.d.ts +50 -0
- package/dist/core/config-viva/cache-negativa.d.ts.map +1 -0
- package/dist/core/config-viva/cache-negativa.js +78 -0
- package/dist/core/config-viva/cache-negativa.js.map +1 -0
- package/dist/core/config-viva/headers-vivos.d.ts +41 -0
- package/dist/core/config-viva/headers-vivos.d.ts.map +1 -0
- package/dist/core/config-viva/headers-vivos.js +43 -0
- package/dist/core/config-viva/headers-vivos.js.map +1 -0
- package/dist/core/config-viva/index.d.ts +16 -0
- package/dist/core/config-viva/index.d.ts.map +1 -0
- package/dist/core/config-viva/index.js +16 -0
- package/dist/core/config-viva/index.js.map +1 -0
- package/dist/core/config-viva/proveedor.d.ts +48 -0
- package/dist/core/config-viva/proveedor.d.ts.map +1 -0
- package/dist/core/config-viva/proveedor.js +78 -0
- package/dist/core/config-viva/proveedor.js.map +1 -0
- package/dist/core/context-breakdown.d.ts.map +1 -1
- package/dist/core/context-breakdown.js.map +1 -1
- package/dist/core/credenciales/cliente.d.ts.map +1 -1
- package/dist/core/credenciales/cliente.js.map +1 -1
- package/dist/core/credenciales/pool.d.ts +36 -1
- package/dist/core/credenciales/pool.d.ts.map +1 -1
- package/dist/core/credenciales/pool.js +56 -7
- package/dist/core/credenciales/pool.js.map +1 -1
- package/dist/core/credenciales/ranking.d.ts +56 -0
- package/dist/core/credenciales/ranking.d.ts.map +1 -0
- package/dist/core/credenciales/ranking.js +94 -0
- package/dist/core/credenciales/ranking.js.map +1 -0
- package/dist/core/credenciales/ratelimit.d.ts +54 -0
- package/dist/core/credenciales/ratelimit.d.ts.map +1 -0
- package/dist/core/credenciales/ratelimit.js +116 -0
- package/dist/core/credenciales/ratelimit.js.map +1 -0
- package/dist/core/credenciales/reposo.d.ts.map +1 -1
- package/dist/core/credenciales/reposo.js.map +1 -1
- package/dist/core/credenciales/servidor.d.ts +8 -0
- package/dist/core/credenciales/servidor.d.ts.map +1 -1
- package/dist/core/credenciales/servidor.js +9 -1
- package/dist/core/credenciales/servidor.js.map +1 -1
- package/dist/core/defaults.d.ts.map +1 -1
- package/dist/core/defaults.js.map +1 -1
- package/dist/core/descubrimiento/comandos.d.ts.map +1 -1
- package/dist/core/descubrimiento/comandos.js.map +1 -1
- package/dist/core/descubrimiento/mcp.d.ts +12 -0
- package/dist/core/descubrimiento/mcp.d.ts.map +1 -1
- package/dist/core/descubrimiento/mcp.js +32 -0
- package/dist/core/descubrimiento/mcp.js.map +1 -1
- package/dist/core/descubrimiento/reglas.d.ts.map +1 -1
- package/dist/core/descubrimiento/reglas.js.map +1 -1
- package/dist/core/descubrimiento/runtimes/index.d.ts +24 -0
- package/dist/core/descubrimiento/runtimes/index.d.ts.map +1 -0
- package/dist/core/descubrimiento/runtimes/index.js +109 -0
- package/dist/core/descubrimiento/runtimes/index.js.map +1 -0
- package/dist/core/descubrimiento/runtimes/litellm.d.ts +12 -0
- package/dist/core/descubrimiento/runtimes/litellm.d.ts.map +1 -0
- package/dist/core/descubrimiento/runtimes/litellm.js +185 -0
- package/dist/core/descubrimiento/runtimes/litellm.js.map +1 -0
- package/dist/core/descubrimiento/runtimes/lm-studio.d.ts +13 -0
- package/dist/core/descubrimiento/runtimes/lm-studio.d.ts.map +1 -0
- package/dist/core/descubrimiento/runtimes/lm-studio.js +142 -0
- package/dist/core/descubrimiento/runtimes/lm-studio.js.map +1 -0
- package/dist/core/descubrimiento/runtimes/ollama.d.ts +8 -0
- package/dist/core/descubrimiento/runtimes/ollama.d.ts.map +1 -0
- package/dist/core/descubrimiento/runtimes/ollama.js +96 -0
- package/dist/core/descubrimiento/runtimes/ollama.js.map +1 -0
- package/dist/core/descubrimiento/runtimes/tipos.d.ts +47 -0
- package/dist/core/descubrimiento/runtimes/tipos.d.ts.map +1 -0
- package/dist/core/descubrimiento/runtimes/tipos.js +10 -0
- package/dist/core/descubrimiento/runtimes/tipos.js.map +1 -0
- package/dist/core/descubrimiento/skills.d.ts.map +1 -1
- package/dist/core/descubrimiento/skills.js.map +1 -1
- package/dist/core/diagnostics.d.ts.map +1 -1
- package/dist/core/diagnostics.js.map +1 -1
- package/dist/core/dificultad/clasificador.d.ts.map +1 -1
- package/dist/core/dificultad/clasificador.js.map +1 -1
- package/dist/core/edicion/diario.d.ts.map +1 -1
- package/dist/core/edicion/diario.js.map +1 -1
- package/dist/core/edicion/hashline.d.ts.map +1 -1
- package/dist/core/edicion/hashline.js.map +1 -1
- package/dist/core/edicion/hueco.d.ts.map +1 -1
- package/dist/core/edicion/hueco.js.map +1 -1
- package/dist/core/edicion/ipynb.d.ts +51 -0
- package/dist/core/edicion/ipynb.d.ts.map +1 -0
- package/dist/core/edicion/ipynb.js +110 -0
- package/dist/core/edicion/ipynb.js.map +1 -0
- package/dist/core/edicion/limpiar-carga.d.ts.map +1 -1
- package/dist/core/edicion/limpiar-carga.js.map +1 -1
- package/dist/core/edicion/observador.d.ts.map +1 -1
- package/dist/core/edicion/observador.js.map +1 -1
- package/dist/core/edicion/parecido.d.ts.map +1 -1
- package/dist/core/edicion/parecido.js.map +1 -1
- package/dist/core/edicion/parseo.d.ts.map +1 -1
- package/dist/core/edicion/parseo.js.map +1 -1
- package/dist/core/edicion/portapapeles.d.ts +28 -0
- package/dist/core/edicion/portapapeles.d.ts.map +1 -0
- package/dist/core/edicion/portapapeles.js +49 -0
- package/dist/core/edicion/portapapeles.js.map +1 -0
- package/dist/core/edicion/reparacion.d.ts.map +1 -1
- package/dist/core/edicion/reparacion.js.map +1 -1
- package/dist/core/edicion/rutas-difusas.d.ts +44 -0
- package/dist/core/edicion/rutas-difusas.d.ts.map +1 -0
- package/dist/core/edicion/rutas-difusas.js +93 -0
- package/dist/core/edicion/rutas-difusas.js.map +1 -0
- package/dist/core/edicion/sangria.d.ts.map +1 -1
- package/dist/core/edicion/sangria.js.map +1 -1
- package/dist/core/edicion/tipos.d.ts.map +1 -1
- package/dist/core/edicion/tipos.js.map +1 -1
- package/dist/core/engine-personality.d.ts.map +1 -1
- package/dist/core/engine-personality.js.map +1 -1
- package/dist/core/errores/proveedor.d.ts.map +1 -1
- package/dist/core/errores/proveedor.js.map +1 -1
- package/dist/core/estructural/buscar.d.ts.map +1 -1
- package/dist/core/estructural/buscar.js.map +1 -1
- package/dist/core/estructural/editar.d.ts.map +1 -1
- package/dist/core/estructural/editar.js.map +1 -1
- package/dist/core/estructural/tools.d.ts.map +1 -1
- package/dist/core/estructural/tools.js.map +1 -1
- package/dist/core/event-bus.d.ts.map +1 -1
- package/dist/core/event-bus.js.map +1 -1
- package/dist/core/exec.d.ts.map +1 -1
- package/dist/core/exec.js.map +1 -1
- package/dist/core/experimental.d.ts.map +1 -1
- package/dist/core/experimental.js.map +1 -1
- package/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
- package/dist/core/export-html/ansi-to-html.js.map +1 -1
- package/dist/core/export-html/index.d.ts.map +1 -1
- package/dist/core/export-html/index.js +183 -13
- package/dist/core/export-html/index.js.map +1 -1
- package/dist/core/export-html/template.css +88 -4
- package/dist/core/export-html/template.html +3 -1
- package/dist/core/export-html/template.js +84 -0
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
- package/dist/core/export-html/tool-renderer.js.map +1 -1
- package/dist/core/extensiones/suplantacion.d.ts.map +1 -1
- package/dist/core/extensiones/suplantacion.js.map +1 -1
- package/dist/core/extensiones/vigilancia.d.ts.map +1 -1
- package/dist/core/extensiones/vigilancia.js.map +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.map +1 -1
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/extensions/wrapper.d.ts.map +1 -1
- package/dist/core/extensions/wrapper.js.map +1 -1
- package/dist/core/footer-data-provider.d.ts.map +1 -1
- package/dist/core/footer-data-provider.js.map +1 -1
- package/dist/core/gc/archivo-frio.d.ts +33 -0
- package/dist/core/gc/archivo-frio.d.ts.map +1 -0
- package/dist/core/gc/archivo-frio.js +152 -0
- package/dist/core/gc/archivo-frio.js.map +1 -0
- package/dist/core/gc/blobs-gc.d.ts +25 -0
- package/dist/core/gc/blobs-gc.d.ts.map +1 -0
- package/dist/core/gc/blobs-gc.js +143 -0
- package/dist/core/gc/blobs-gc.js.map +1 -0
- package/dist/core/gc/index.d.ts +42 -0
- package/dist/core/gc/index.d.ts.map +1 -0
- package/dist/core/gc/index.js +50 -0
- package/dist/core/gc/index.js.map +1 -0
- package/dist/core/gc/lock.d.ts +19 -0
- package/dist/core/gc/lock.d.ts.map +1 -0
- package/dist/core/gc/lock.js +48 -0
- package/dist/core/gc/lock.js.map +1 -0
- package/dist/core/gc/reconciliacion.d.ts +19 -0
- package/dist/core/gc/reconciliacion.d.ts.map +1 -0
- package/dist/core/gc/reconciliacion.js +102 -0
- package/dist/core/gc/reconciliacion.js.map +1 -0
- package/dist/core/gc/wal.d.ts +15 -0
- package/dist/core/gc/wal.d.ts.map +1 -0
- package/dist/core/gc/wal.js +44 -0
- package/dist/core/gc/wal.js.map +1 -0
- package/dist/core/harness/fuentes-de-contexto.d.ts.map +1 -1
- package/dist/core/harness/fuentes-de-contexto.js.map +1 -1
- package/dist/core/harness/refine.d.ts.map +1 -1
- package/dist/core/harness/refine.js.map +1 -1
- package/dist/core/harness/store.d.ts.map +1 -1
- package/dist/core/harness/store.js.map +1 -1
- package/dist/core/higiene/index.d.ts +8 -0
- package/dist/core/higiene/index.d.ts.map +1 -0
- package/dist/core/higiene/index.js +8 -0
- package/dist/core/higiene/index.js.map +1 -0
- package/dist/core/higiene/managed-timers.d.ts +19 -0
- package/dist/core/higiene/managed-timers.d.ts.map +1 -0
- package/dist/core/higiene/managed-timers.js +68 -0
- package/dist/core/higiene/managed-timers.js.map +1 -0
- package/dist/core/higiene/race-handler.d.ts +7 -0
- package/dist/core/higiene/race-handler.d.ts.map +1 -0
- package/dist/core/higiene/race-handler.js +32 -0
- package/dist/core/higiene/race-handler.js.map +1 -0
- package/dist/core/higiene/withHostGuard.d.ts +27 -0
- package/dist/core/higiene/withHostGuard.d.ts.map +1 -0
- package/dist/core/higiene/withHostGuard.js +79 -0
- package/dist/core/higiene/withHostGuard.js.map +1 -0
- package/dist/core/hooks/contract.d.ts.map +1 -1
- package/dist/core/hooks/contract.js.map +1 -1
- package/dist/core/hooks/runner.d.ts.map +1 -1
- package/dist/core/hooks/runner.js.map +1 -1
- package/dist/core/hooks/session-hooks.d.ts.map +1 -1
- package/dist/core/hooks/session-hooks.js.map +1 -1
- package/dist/core/hooks-ts/cargador.d.ts +29 -0
- package/dist/core/hooks-ts/cargador.d.ts.map +1 -0
- package/dist/core/hooks-ts/cargador.js +51 -0
- package/dist/core/hooks-ts/cargador.js.map +1 -0
- package/dist/core/hooks-ts/index.d.ts +25 -0
- package/dist/core/hooks-ts/index.d.ts.map +1 -0
- package/dist/core/hooks-ts/index.js +25 -0
- package/dist/core/hooks-ts/index.js.map +1 -0
- package/dist/core/hooks-ts/runner.d.ts +40 -0
- package/dist/core/hooks-ts/runner.d.ts.map +1 -0
- package/dist/core/hooks-ts/runner.js +95 -0
- package/dist/core/hooks-ts/runner.js.map +1 -0
- package/dist/core/hooks-ts/tipos.d.ts +69 -0
- package/dist/core/hooks-ts/tipos.d.ts.map +1 -0
- package/dist/core/hooks-ts/tipos.js +90 -0
- package/dist/core/hooks-ts/tipos.js.map +1 -0
- package/dist/core/http-dispatcher.d.ts.map +1 -1
- package/dist/core/http-dispatcher.js.map +1 -1
- package/dist/core/importar/formatos.d.ts.map +1 -1
- package/dist/core/importar/formatos.js.map +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/interactivo/deteccion.d.ts.map +1 -1
- package/dist/core/interactivo/deteccion.js.map +1 -1
- package/dist/core/interactivo/sesion.d.ts.map +1 -1
- package/dist/core/interactivo/sesion.js.map +1 -1
- package/dist/core/interactivo/tools.d.ts.map +1 -1
- package/dist/core/interactivo/tools.js.map +1 -1
- package/dist/core/keybindings.d.ts +170 -170
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/lectura/mapa.d.ts.map +1 -1
- package/dist/core/lectura/mapa.js.map +1 -1
- package/dist/core/lectura/pdf.d.ts.map +1 -1
- package/dist/core/lectura/pdf.js.map +1 -1
- package/dist/core/lectura/sniffer.d.ts +54 -0
- package/dist/core/lectura/sniffer.d.ts.map +1 -0
- package/dist/core/lectura/sniffer.js +106 -0
- package/dist/core/lectura/sniffer.js.map +1 -0
- package/dist/core/limpieza/comprobadores.d.ts +16 -2
- package/dist/core/limpieza/comprobadores.d.ts.map +1 -1
- package/dist/core/limpieza/comprobadores.js +200 -6
- package/dist/core/limpieza/comprobadores.js.map +1 -1
- package/dist/core/limpieza/flujo.d.ts +36 -0
- package/dist/core/limpieza/flujo.d.ts.map +1 -0
- package/dist/core/limpieza/flujo.js +89 -0
- package/dist/core/limpieza/flujo.js.map +1 -0
- package/dist/core/limpieza/parseo.d.ts.map +1 -1
- package/dist/core/limpieza/parseo.js.map +1 -1
- package/dist/core/limpieza/peso.d.ts +17 -0
- package/dist/core/limpieza/peso.d.ts.map +1 -0
- package/dist/core/limpieza/peso.js +52 -0
- package/dist/core/limpieza/peso.js.map +1 -0
- package/dist/core/limpieza/pool.d.ts +44 -0
- package/dist/core/limpieza/pool.d.ts.map +1 -0
- package/dist/core/limpieza/pool.js +123 -0
- package/dist/core/limpieza/pool.js.map +1 -0
- package/dist/core/limpieza/reparacion.d.ts +19 -2
- package/dist/core/limpieza/reparacion.d.ts.map +1 -1
- package/dist/core/limpieza/reparacion.js +95 -8
- package/dist/core/limpieza/reparacion.js.map +1 -1
- package/dist/core/limpieza/tablero.d.ts +47 -0
- package/dist/core/limpieza/tablero.d.ts.map +1 -0
- package/dist/core/limpieza/tablero.js +78 -0
- package/dist/core/limpieza/tablero.js.map +1 -0
- package/dist/core/limpieza/tipos.d.ts +25 -0
- package/dist/core/limpieza/tipos.d.ts.map +1 -1
- package/dist/core/limpieza/tipos.js.map +1 -1
- package/dist/core/lsp/cliente.d.ts +7 -0
- package/dist/core/lsp/cliente.d.ts.map +1 -1
- package/dist/core/lsp/cliente.js +4 -2
- package/dist/core/lsp/cliente.js.map +1 -1
- package/dist/core/lsp/descubrimiento.d.ts.map +1 -1
- package/dist/core/lsp/descubrimiento.js.map +1 -1
- package/dist/core/lsp/ediciones.d.ts.map +1 -1
- package/dist/core/lsp/ediciones.js.map +1 -1
- package/dist/core/lsp/extension.d.ts +9 -0
- package/dist/core/lsp/extension.d.ts.map +1 -1
- package/dist/core/lsp/extension.js +60 -4
- package/dist/core/lsp/extension.js.map +1 -1
- package/dist/core/lsp/formato.d.ts +72 -0
- package/dist/core/lsp/formato.d.ts.map +1 -0
- package/dist/core/lsp/formato.js +117 -0
- package/dist/core/lsp/formato.js.map +1 -0
- package/dist/core/lsp/tools.d.ts +3 -3
- package/dist/core/lsp/tools.d.ts.map +1 -1
- package/dist/core/lsp/tools.js.map +1 -1
- package/dist/core/lsp/writethrough.d.ts +165 -0
- package/dist/core/lsp/writethrough.d.ts.map +1 -0
- package/dist/core/lsp/writethrough.js +282 -0
- package/dist/core/lsp/writethrough.js.map +1 -0
- package/dist/core/marketplace/catalogo.d.ts +32 -0
- package/dist/core/marketplace/catalogo.d.ts.map +1 -0
- package/dist/core/marketplace/catalogo.js +122 -0
- package/dist/core/marketplace/catalogo.js.map +1 -0
- package/dist/core/marketplace/doctor.d.ts +47 -0
- package/dist/core/marketplace/doctor.d.ts.map +1 -0
- package/dist/core/marketplace/doctor.js +155 -0
- package/dist/core/marketplace/doctor.js.map +1 -0
- package/dist/core/marketplace/features.d.ts +22 -0
- package/dist/core/marketplace/features.d.ts.map +1 -0
- package/dist/core/marketplace/features.js +70 -0
- package/dist/core/marketplace/features.js.map +1 -0
- package/dist/core/marketplace/index.d.ts +33 -0
- package/dist/core/marketplace/index.d.ts.map +1 -0
- package/dist/core/marketplace/index.js +33 -0
- package/dist/core/marketplace/index.js.map +1 -0
- package/dist/core/marketplace/instalar.d.ts +27 -0
- package/dist/core/marketplace/instalar.d.ts.map +1 -0
- package/dist/core/marketplace/instalar.js +50 -0
- package/dist/core/marketplace/instalar.js.map +1 -0
- package/dist/core/mcp/client.d.ts.map +1 -1
- package/dist/core/mcp/client.js.map +1 -1
- package/dist/core/mcp/manager.d.ts.map +1 -1
- package/dist/core/mcp/manager.js.map +1 -1
- package/dist/core/mcp/oauth.d.ts +138 -0
- package/dist/core/mcp/oauth.d.ts.map +1 -0
- package/dist/core/mcp/oauth.js +348 -0
- package/dist/core/mcp/oauth.js.map +1 -0
- package/dist/core/mcp/tools.d.ts.map +1 -1
- package/dist/core/mcp/tools.js.map +1 -1
- package/dist/core/memoria/almacen.d.ts +56 -0
- package/dist/core/memoria/almacen.d.ts.map +1 -0
- package/dist/core/memoria/almacen.js +214 -0
- package/dist/core/memoria/almacen.js.map +1 -0
- package/dist/core/memoria/dr/respaldo.d.ts +34 -0
- package/dist/core/memoria/dr/respaldo.d.ts.map +1 -0
- package/dist/core/memoria/dr/respaldo.js +133 -0
- package/dist/core/memoria/dr/respaldo.js.map +1 -0
- package/dist/core/memoria/embeddings.d.ts +21 -0
- package/dist/core/memoria/embeddings.d.ts.map +1 -0
- package/dist/core/memoria/embeddings.js +87 -0
- package/dist/core/memoria/embeddings.js.map +1 -0
- package/dist/core/memoria/grafo.d.ts +56 -0
- package/dist/core/memoria/grafo.d.ts.map +1 -0
- package/dist/core/memoria/grafo.js +143 -0
- package/dist/core/memoria/grafo.js.map +1 -0
- package/dist/core/memoria/redaccion.d.ts +32 -0
- package/dist/core/memoria/redaccion.d.ts.map +1 -0
- package/dist/core/memoria/redaccion.js +76 -0
- package/dist/core/memoria/redaccion.js.map +1 -0
- package/dist/core/memoria/servidor/almacen-json.d.ts +26 -0
- package/dist/core/memoria/servidor/almacen-json.d.ts.map +1 -0
- package/dist/core/memoria/servidor/almacen-json.js +90 -0
- package/dist/core/memoria/servidor/almacen-json.js.map +1 -0
- package/dist/core/memoria/servidor/servidor.d.ts +43 -0
- package/dist/core/memoria/servidor/servidor.d.ts.map +1 -0
- package/dist/core/memoria/servidor/servidor.js +195 -0
- package/dist/core/memoria/servidor/servidor.js.map +1 -0
- package/dist/core/memoria/servidor/tipos.d.ts +44 -0
- package/dist/core/memoria/servidor/tipos.d.ts.map +1 -0
- package/dist/core/memoria/servidor/tipos.js +12 -0
- package/dist/core/memoria/servidor/tipos.js.map +1 -0
- package/dist/core/memoria/tipos.d.ts +63 -0
- package/dist/core/memoria/tipos.d.ts.map +1 -0
- package/dist/core/memoria/tipos.js +14 -0
- package/dist/core/memoria/tipos.js.map +1 -0
- package/dist/core/memory-engine/audit-export.d.ts.map +1 -1
- package/dist/core/memory-engine/audit-export.js.map +1 -1
- package/dist/core/memory-engine/audit-indice.d.ts.map +1 -1
- package/dist/core/memory-engine/audit-indice.js.map +1 -1
- package/dist/core/memory-engine/audit.d.ts.map +1 -1
- package/dist/core/memory-engine/audit.js.map +1 -1
- package/dist/core/memory-engine/engine.d.ts +7 -0
- package/dist/core/memory-engine/engine.d.ts.map +1 -1
- 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.map +1 -1
- package/dist/core/memory-engine/keychain.d.ts.map +1 -1
- package/dist/core/memory-engine/keychain.js.map +1 -1
- package/dist/core/memory-engine/observation-store.d.ts +1 -0
- package/dist/core/memory-engine/observation-store.d.ts.map +1 -1
- package/dist/core/memory-engine/observation-store.js.map +1 -1
- package/dist/core/memory-engine/refinements.d.ts.map +1 -1
- package/dist/core/memory-engine/refinements.js.map +1 -1
- package/dist/core/memory-engine/scanner.d.ts.map +1 -1
- 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.map +1 -1
- package/dist/core/memory-engine/session-indexer.d.ts.map +1 -1
- package/dist/core/memory-engine/session-indexer.js.map +1 -1
- package/dist/core/memory-engine/tools.d.ts.map +1 -1
- package/dist/core/memory-engine/tools.js.map +1 -1
- 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.map +1 -1
- package/dist/core/messages.d.ts.map +1 -1
- package/dist/core/messages.js.map +1 -1
- package/dist/core/metaharness/cli.d.ts +19 -0
- package/dist/core/metaharness/cli.d.ts.map +1 -0
- package/dist/core/metaharness/cli.js +171 -0
- package/dist/core/metaharness/cli.js.map +1 -0
- package/dist/core/metaharness/comparar.d.ts +21 -0
- package/dist/core/metaharness/comparar.d.ts.map +1 -0
- package/dist/core/metaharness/comparar.js +64 -0
- package/dist/core/metaharness/comparar.js.map +1 -0
- package/dist/core/metaharness/ejecutar.d.ts +70 -0
- package/dist/core/metaharness/ejecutar.d.ts.map +1 -0
- package/dist/core/metaharness/ejecutar.js +249 -0
- package/dist/core/metaharness/ejecutar.js.map +1 -0
- package/dist/core/metaharness/tipos.d.ts +142 -0
- package/dist/core/metaharness/tipos.d.ts.map +1 -0
- package/dist/core/metaharness/tipos.js +17 -0
- package/dist/core/metaharness/tipos.js.map +1 -0
- package/dist/core/model-config.d.ts +8 -8
- package/dist/core/model-config.d.ts.map +1 -1
- package/dist/core/model-config.js.map +1 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/models-store.d.ts.map +1 -1
- package/dist/core/models-store.js.map +1 -1
- package/dist/core/muestreo-restringido.d.ts.map +1 -1
- package/dist/core/muestreo-restringido.js.map +1 -1
- package/dist/core/orphan-process-journal.d.ts.map +1 -1
- package/dist/core/orphan-process-journal.js.map +1 -1
- package/dist/core/output-guard.d.ts.map +1 -1
- package/dist/core/output-guard.js.map +1 -1
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/parche/aplicar.d.ts +19 -0
- package/dist/core/parche/aplicar.d.ts.map +1 -0
- package/dist/core/parche/aplicar.js +243 -0
- package/dist/core/parche/aplicar.js.map +1 -0
- package/dist/core/parche/parser.d.ts +38 -0
- package/dist/core/parche/parser.d.ts.map +1 -0
- package/dist/core/parche/parser.js +217 -0
- package/dist/core/parche/parser.js.map +1 -0
- package/dist/core/parche/registro.d.ts +12 -0
- package/dist/core/parche/registro.d.ts.map +1 -0
- package/dist/core/parche/registro.js +58 -0
- package/dist/core/parche/registro.js.map +1 -0
- package/dist/core/perfiles/index.d.ts +22 -0
- package/dist/core/perfiles/index.d.ts.map +1 -0
- package/dist/core/perfiles/index.js +21 -0
- package/dist/core/perfiles/index.js.map +1 -0
- package/dist/core/perfiles/resolver.d.ts +51 -0
- package/dist/core/perfiles/resolver.d.ts.map +1 -0
- package/dist/core/perfiles/resolver.js +329 -0
- package/dist/core/perfiles/resolver.js.map +1 -0
- package/dist/core/perfiles/tipos.d.ts +69 -0
- package/dist/core/perfiles/tipos.d.ts.map +1 -0
- package/dist/core/perfiles/tipos.js +98 -0
- package/dist/core/perfiles/tipos.js.map +1 -0
- package/dist/core/pi-manifest.d.ts.map +1 -1
- package/dist/core/pi-manifest.js.map +1 -1
- package/dist/core/privacidad/categorias-especiales.d.ts.map +1 -1
- package/dist/core/privacidad/categorias-especiales.js +4 -0
- package/dist/core/privacidad/categorias-especiales.js.map +1 -1
- package/dist/core/privacidad/tapar.d.ts.map +1 -1
- package/dist/core/privacidad/tapar.js.map +1 -1
- package/dist/core/project-memory.d.ts.map +1 -1
- package/dist/core/project-memory.js.map +1 -1
- package/dist/core/project-trust.d.ts.map +1 -1
- package/dist/core/project-trust.js.map +1 -1
- package/dist/core/prompt-cache/diagnostics.d.ts.map +1 -1
- package/dist/core/prompt-cache/diagnostics.js.map +1 -1
- package/dist/core/prompt-cache/index.d.ts.map +1 -1
- package/dist/core/prompt-cache/index.js.map +1 -1
- package/dist/core/prompt-cache/payload.d.ts.map +1 -1
- package/dist/core/prompt-cache/payload.js.map +1 -1
- package/dist/core/prompt-cache/stabilize.d.ts.map +1 -1
- package/dist/core/prompt-cache/stabilize.js.map +1 -1
- package/dist/core/prompt-cache/stats.d.ts.map +1 -1
- package/dist/core/prompt-cache/stats.js.map +1 -1
- package/dist/core/prompt-eleccion.d.ts.map +1 -1
- package/dist/core/prompt-eleccion.js.map +1 -1
- package/dist/core/prompt-optimizer.d.ts.map +1 -1
- package/dist/core/prompt-optimizer.js.map +1 -1
- package/dist/core/prompt-templates.d.ts.map +1 -1
- package/dist/core/prompt-templates.js.map +1 -1
- package/dist/core/prompts/montar.d.ts.map +1 -1
- package/dist/core/prompts/montar.js.map +1 -1
- package/dist/core/prompts/plantilla.d.ts.map +1 -1
- package/dist/core/prompts/plantilla.js.map +1 -1
- package/dist/core/proveedores-registry/definiciones.d.ts +15 -0
- package/dist/core/proveedores-registry/definiciones.d.ts.map +1 -0
- package/dist/core/proveedores-registry/definiciones.js +22 -0
- package/dist/core/proveedores-registry/definiciones.js.map +1 -0
- package/dist/core/proveedores-registry/index.d.ts +14 -0
- package/dist/core/proveedores-registry/index.d.ts.map +1 -0
- package/dist/core/proveedores-registry/index.js +13 -0
- package/dist/core/proveedores-registry/index.js.map +1 -0
- package/dist/core/proveedores-registry/resolver.d.ts +25 -0
- package/dist/core/proveedores-registry/resolver.d.ts.map +1 -0
- package/dist/core/proveedores-registry/resolver.js +69 -0
- package/dist/core/proveedores-registry/resolver.js.map +1 -0
- package/dist/core/proveedores-registry/tipos.d.ts +47 -0
- package/dist/core/proveedores-registry/tipos.d.ts.map +1 -0
- package/dist/core/proveedores-registry/tipos.js +15 -0
- package/dist/core/proveedores-registry/tipos.js.map +1 -0
- package/dist/core/provider-attribution.d.ts.map +1 -1
- package/dist/core/provider-attribution.js.map +1 -1
- package/dist/core/provider-composer.d.ts.map +1 -1
- package/dist/core/provider-composer.js.map +1 -1
- package/dist/core/radius.d.ts.map +1 -1
- package/dist/core/radius.js.map +1 -1
- package/dist/core/remote-catalog-provider.d.ts.map +1 -1
- package/dist/core/remote-catalog-provider.js.map +1 -1
- package/dist/core/remoto/destino.d.ts.map +1 -1
- package/dist/core/remoto/destino.js.map +1 -1
- package/dist/core/remoto/ejecutor.d.ts.map +1 -1
- package/dist/core/remoto/ejecutor.js.map +1 -1
- package/dist/core/remoto/ficheros.d.ts.map +1 -1
- package/dist/core/remoto/ficheros.js.map +1 -1
- package/dist/core/remoto/registro-extension.d.ts.map +1 -1
- package/dist/core/remoto/registro-extension.js.map +1 -1
- package/dist/core/remoto/tools.d.ts.map +1 -1
- package/dist/core/remoto/tools.js.map +1 -1
- package/dist/core/reparacion/index.d.ts +2 -0
- package/dist/core/reparacion/index.d.ts.map +1 -0
- package/dist/core/reparacion/index.js +2 -0
- package/dist/core/reparacion/index.js.map +1 -0
- package/dist/core/reparacion/reparar-hunk.d.ts +27 -0
- package/dist/core/reparacion/reparar-hunk.d.ts.map +1 -0
- package/dist/core/reparacion/reparar-hunk.js +139 -0
- package/dist/core/reparacion/reparar-hunk.js.map +1 -0
- package/dist/core/resolve-config-value.d.ts.map +1 -1
- package/dist/core/resolve-config-value.js.map +1 -1
- package/dist/core/resource-loader.d.ts +13 -0
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +7 -4
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/revision/dispositions.d.ts +86 -0
- package/dist/core/revision/dispositions.d.ts.map +1 -0
- package/dist/core/revision/dispositions.js +137 -0
- package/dist/core/revision/dispositions.js.map +1 -0
- package/dist/core/revision/hallazgo.d.ts.map +1 -1
- package/dist/core/revision/hallazgo.js.map +1 -1
- package/dist/core/revision/procedencia.d.ts +63 -0
- package/dist/core/revision/procedencia.d.ts.map +1 -0
- package/dist/core/revision/procedencia.js +72 -0
- package/dist/core/revision/procedencia.js.map +1 -0
- package/dist/core/revision/publicar.d.ts +26 -0
- package/dist/core/revision/publicar.d.ts.map +1 -0
- package/dist/core/revision/publicar.js +34 -0
- package/dist/core/revision/publicar.js.map +1 -0
- package/dist/core/revision/revisor.d.ts.map +1 -1
- package/dist/core/revision/revisor.js.map +1 -1
- package/dist/core/revision/sarif.d.ts.map +1 -1
- package/dist/core/revision/sarif.js.map +1 -1
- package/dist/core/router-uris/index.d.ts +12 -0
- package/dist/core/router-uris/index.d.ts.map +1 -0
- package/dist/core/router-uris/index.js +12 -0
- package/dist/core/router-uris/index.js.map +1 -0
- package/dist/core/router-uris/router.d.ts +2 -0
- package/dist/core/router-uris/router.d.ts.map +1 -0
- package/dist/core/router-uris/router.js +2 -0
- package/dist/core/router-uris/router.js.map +1 -0
- package/dist/core/runtime-credentials.d.ts.map +1 -1
- package/dist/core/runtime-credentials.js.map +1 -1
- package/dist/core/rutas/envoltorio.d.ts +20 -0
- package/dist/core/rutas/envoltorio.d.ts.map +1 -0
- package/dist/core/rutas/envoltorio.js +48 -0
- package/dist/core/rutas/envoltorio.js.map +1 -0
- package/dist/core/rutas/index.d.ts +11 -0
- package/dist/core/rutas/index.d.ts.map +1 -0
- package/dist/core/rutas/index.js +11 -0
- package/dist/core/rutas/index.js.map +1 -0
- package/dist/core/rutas/router.d.ts +82 -0
- package/dist/core/rutas/router.d.ts.map +1 -0
- package/dist/core/rutas/router.js +161 -0
- package/dist/core/rutas/router.js.map +1 -0
- package/dist/core/scheduler/scheduler.d.ts.map +1 -1
- package/dist/core/scheduler/scheduler.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/secretos/extension.d.ts +31 -0
- package/dist/core/secretos/extension.d.ts.map +1 -0
- package/dist/core/secretos/extension.js +64 -0
- package/dist/core/secretos/extension.js.map +1 -0
- package/dist/core/secretos/index.d.ts +75 -0
- package/dist/core/secretos/index.d.ts.map +1 -0
- package/dist/core/secretos/index.js +385 -0
- package/dist/core/secretos/index.js.map +1 -0
- package/dist/core/secretos/message-transform.d.ts +44 -0
- package/dist/core/secretos/message-transform.d.ts.map +1 -0
- package/dist/core/secretos/message-transform.js +246 -0
- package/dist/core/secretos/message-transform.js.map +1 -0
- package/dist/core/secretos/obfuscator.d.ts +30 -0
- package/dist/core/secretos/obfuscator.d.ts.map +1 -0
- package/dist/core/secretos/obfuscator.js +1182 -0
- package/dist/core/secretos/obfuscator.js.map +1 -0
- package/dist/core/secretos/placeholder-scan.d.ts +96 -0
- package/dist/core/secretos/placeholder-scan.d.ts.map +1 -0
- package/dist/core/secretos/placeholder-scan.js +433 -0
- package/dist/core/secretos/placeholder-scan.js.map +1 -0
- package/dist/core/secretos/placeholder.d.ts +95 -0
- package/dist/core/secretos/placeholder.d.ts.map +1 -0
- package/dist/core/secretos/placeholder.js +283 -0
- package/dist/core/secretos/placeholder.js.map +1 -0
- package/dist/core/secretos/regex.d.ts +3 -0
- package/dist/core/secretos/regex.d.ts.map +1 -0
- package/dist/core/secretos/regex.js +19 -0
- package/dist/core/secretos/regex.js.map +1 -0
- package/dist/core/secretos/replacement.d.ts +83 -0
- package/dist/core/secretos/replacement.d.ts.map +1 -0
- package/dist/core/secretos/replacement.js +211 -0
- package/dist/core/secretos/replacement.js.map +1 -0
- package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts.map +1 -1
- package/dist/core/sesion/cerrar-llamadas-abiertas.js.map +1 -1
- package/dist/core/sesion/journal-tree.d.ts +73 -0
- package/dist/core/sesion/journal-tree.d.ts.map +1 -0
- package/dist/core/sesion/journal-tree.js +241 -0
- package/dist/core/sesion/journal-tree.js.map +1 -0
- package/dist/core/sesion/turn-recovery.d.ts +48 -0
- package/dist/core/sesion/turn-recovery.d.ts.map +1 -0
- package/dist/core/sesion/turn-recovery.js +182 -0
- package/dist/core/sesion/turn-recovery.js.map +1 -0
- package/dist/core/session-cwd.d.ts.map +1 -1
- package/dist/core/session-cwd.js.map +1 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-diagnostics.d.ts.map +1 -1
- package/dist/core/settings-diagnostics.js.map +1 -1
- package/dist/core/settings-manager.d.ts +2 -2
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/share/cifrado.d.ts +39 -0
- package/dist/core/share/cifrado.d.ts.map +1 -0
- package/dist/core/share/cifrado.js +81 -0
- package/dist/core/share/cifrado.js.map +1 -0
- package/dist/core/share/exportar.d.ts +69 -0
- package/dist/core/share/exportar.d.ts.map +1 -0
- package/dist/core/share/exportar.js +247 -0
- package/dist/core/share/exportar.js.map +1 -0
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/source-info.d.ts.map +1 -1
- package/dist/core/source-info.js.map +1 -1
- package/dist/core/stream-guard/guardia.d.ts +45 -0
- package/dist/core/stream-guard/guardia.d.ts.map +1 -0
- package/dist/core/stream-guard/guardia.js +100 -0
- package/dist/core/stream-guard/guardia.js.map +1 -0
- package/dist/core/stream-guard/index.d.ts +9 -0
- package/dist/core/stream-guard/index.d.ts.map +1 -0
- package/dist/core/stream-guard/index.js +7 -0
- package/dist/core/stream-guard/index.js.map +1 -0
- package/dist/core/stream-guard/replay.d.ts +39 -0
- package/dist/core/stream-guard/replay.d.ts.map +1 -0
- package/dist/core/stream-guard/replay.js +68 -0
- package/dist/core/stream-guard/replay.js.map +1 -0
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/telemetria/otlp.d.ts.map +1 -1
- package/dist/core/telemetria/otlp.js.map +1 -1
- package/dist/core/telemetry/otel-genai.d.ts +44 -0
- package/dist/core/telemetry/otel-genai.d.ts.map +1 -0
- package/dist/core/telemetry/otel-genai.js +124 -0
- package/dist/core/telemetry/otel-genai.js.map +1 -0
- package/dist/core/telemetry.d.ts.map +1 -1
- package/dist/core/telemetry.js.map +1 -1
- package/dist/core/terminal/backlog-guard.d.ts +53 -0
- package/dist/core/terminal/backlog-guard.d.ts.map +1 -0
- package/dist/core/terminal/backlog-guard.js +122 -0
- package/dist/core/terminal/backlog-guard.js.map +1 -0
- package/dist/core/terminal/conpty.d.ts +29 -0
- package/dist/core/terminal/conpty.d.ts.map +1 -0
- package/dist/core/terminal/conpty.js +67 -0
- package/dist/core/terminal/conpty.js.map +1 -0
- package/dist/core/terminal/conptyChunking.d.ts +2 -0
- package/dist/core/terminal/conptyChunking.d.ts.map +1 -0
- package/dist/core/terminal/conptyChunking.js +2 -0
- package/dist/core/terminal/conptyChunking.js.map +1 -0
- package/dist/core/terminal/index.d.ts +5 -0
- package/dist/core/terminal/index.d.ts.map +1 -0
- package/dist/core/terminal/index.js +5 -0
- package/dist/core/terminal/index.js.map +1 -0
- package/dist/core/terminal/loop-watchdog.d.ts +43 -0
- package/dist/core/terminal/loop-watchdog.d.ts.map +1 -0
- package/dist/core/terminal/loop-watchdog.js +117 -0
- package/dist/core/terminal/loop-watchdog.js.map +1 -0
- package/dist/core/terminal/runner.d.ts +55 -0
- package/dist/core/terminal/runner.d.ts.map +1 -0
- package/dist/core/terminal/runner.js +102 -0
- package/dist/core/terminal/runner.js.map +1 -0
- package/dist/core/timings.d.ts.map +1 -1
- package/dist/core/timings.js.map +1 -1
- package/dist/core/tools/apply_patch.d.ts +29 -0
- package/dist/core/tools/apply_patch.d.ts.map +1 -0
- package/dist/core/tools/apply_patch.js +54 -0
- package/dist/core/tools/apply_patch.js.map +1 -0
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/coercion-argumentos.d.ts.map +1 -1
- package/dist/core/tools/coercion-argumentos.js.map +1 -1
- package/dist/core/tools/edit-diff.d.ts.map +1 -1
- 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 +43 -1
- 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.map +1 -1
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/json-tolerante.d.ts.map +1 -1
- package/dist/core/tools/json-tolerante.js.map +1 -1
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/noop-loop-guard.d.ts +46 -0
- package/dist/core/tools/noop-loop-guard.d.ts.map +1 -0
- package/dist/core/tools/noop-loop-guard.js +57 -0
- package/dist/core/tools/noop-loop-guard.js.map +1 -0
- package/dist/core/tools/output-accumulator.d.ts.map +1 -1
- package/dist/core/tools/output-accumulator.js.map +1 -1
- package/dist/core/tools/path-utils.d.ts.map +1 -1
- package/dist/core/tools/path-utils.js.map +1 -1
- package/dist/core/tools/project-memory-tool.d.ts.map +1 -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.map +1 -1
- package/dist/core/tools/render-utils.d.ts.map +1 -1
- package/dist/core/tools/render-utils.js.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
- package/dist/core/tools/truncate.d.ts.map +1 -1
- package/dist/core/tools/truncate.js.map +1 -1
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js.map +1 -1
- package/dist/core/trust-manager.d.ts.map +1 -1
- package/dist/core/trust-manager.js.map +1 -1
- package/dist/core/ttsr/captura.d.ts +72 -0
- package/dist/core/ttsr/captura.d.ts.map +1 -0
- package/dist/core/ttsr/captura.js +183 -0
- package/dist/core/ttsr/captura.js.map +1 -0
- package/dist/core/ttsr/index.d.ts +24 -0
- package/dist/core/ttsr/index.d.ts.map +1 -0
- package/dist/core/ttsr/index.js +57 -0
- package/dist/core/ttsr/index.js.map +1 -0
- package/dist/core/ttsr/preview.d.ts +48 -0
- package/dist/core/ttsr/preview.d.ts.map +1 -0
- package/dist/core/ttsr/preview.js +83 -0
- package/dist/core/ttsr/preview.js.map +1 -0
- package/dist/core/turno-vacio/detectar.d.ts.map +1 -1
- package/dist/core/turno-vacio/detectar.js.map +1 -1
- package/dist/core/undo/journal.d.ts.map +1 -1
- package/dist/core/undo/journal.js.map +1 -1
- package/dist/core/urls-internas/auditoria.d.ts.map +1 -1
- package/dist/core/urls-internas/auditoria.js.map +1 -1
- package/dist/core/urls-internas/boveda.d.ts.map +1 -1
- package/dist/core/urls-internas/boveda.js.map +1 -1
- package/dist/core/urls-internas/lector.d.ts +14 -10
- package/dist/core/urls-internas/lector.d.ts.map +1 -1
- package/dist/core/urls-internas/lector.js +50 -36
- package/dist/core/urls-internas/lector.js.map +1 -1
- package/dist/core/urls-internas/memoria.d.ts.map +1 -1
- package/dist/core/urls-internas/memoria.js.map +1 -1
- package/dist/core/urls-internas/parse.d.ts +6 -13
- package/dist/core/urls-internas/parse.d.ts.map +1 -1
- package/dist/core/urls-internas/parse.js +6 -17
- package/dist/core/urls-internas/parse.js.map +1 -1
- package/dist/core/urls-internas/reglas.d.ts.map +1 -1
- package/dist/core/urls-internas/reglas.js.map +1 -1
- package/dist/core/usage/aggregate.d.ts +1 -0
- package/dist/core/usage/aggregate.d.ts.map +1 -1
- package/dist/core/usage/aggregate.js +1 -1
- package/dist/core/usage/aggregate.js.map +1 -1
- package/dist/core/usage/cuota/anthropic.d.ts.map +1 -1
- package/dist/core/usage/cuota/anthropic.js.map +1 -1
- package/dist/core/usage/cuota/cache.d.ts.map +1 -1
- package/dist/core/usage/cuota/cache.js.map +1 -1
- package/dist/core/usage/cuota/github-copilot.d.ts.map +1 -1
- package/dist/core/usage/cuota/github-copilot.js.map +1 -1
- package/dist/core/usage/cuota/google-gemini.d.ts.map +1 -1
- package/dist/core/usage/cuota/google-gemini.js.map +1 -1
- package/dist/core/usage/cuota/index.d.ts.map +1 -1
- package/dist/core/usage/cuota/index.js.map +1 -1
- package/dist/core/usage/cuota/openai-codex.d.ts.map +1 -1
- package/dist/core/usage/cuota/openai-codex.js.map +1 -1
- package/dist/core/usage/cuota/openrouter.d.ts.map +1 -1
- package/dist/core/usage/cuota/openrouter.js.map +1 -1
- package/dist/core/usage/cuota/tipos.d.ts.map +1 -1
- package/dist/core/usage/cuota/tipos.js.map +1 -1
- package/dist/core/usage/index.d.ts +11 -0
- package/dist/core/usage/index.d.ts.map +1 -0
- package/dist/core/usage/index.js +11 -0
- package/dist/core/usage/index.js.map +1 -0
- package/dist/core/usage/multi.d.ts +62 -0
- package/dist/core/usage/multi.d.ts.map +1 -0
- package/dist/core/usage/multi.js +122 -0
- package/dist/core/usage/multi.js.map +1 -0
- package/dist/core/usage/redaccion.d.ts +48 -0
- package/dist/core/usage/redaccion.d.ts.map +1 -0
- package/dist/core/usage/redaccion.js +72 -0
- package/dist/core/usage/redaccion.js.map +1 -0
- package/dist/core/usage-totals.d.ts.map +1 -1
- package/dist/core/usage-totals.js.map +1 -1
- package/dist/core/utils/atomic-write.d.ts +55 -0
- package/dist/core/utils/atomic-write.d.ts.map +1 -0
- package/dist/core/utils/atomic-write.js +293 -0
- package/dist/core/utils/atomic-write.js.map +1 -0
- package/dist/core/utils/git.d.ts +24 -0
- package/dist/core/utils/git.d.ts.map +1 -0
- package/dist/core/utils/git.js +107 -0
- package/dist/core/utils/git.js.map +1 -0
- package/dist/core/utils/logger.d.ts +26 -0
- package/dist/core/utils/logger.d.ts.map +1 -0
- package/dist/core/utils/logger.js +104 -0
- package/dist/core/utils/logger.js.map +1 -0
- package/dist/core/utils/shell-snapshot.d.ts +21 -0
- package/dist/core/utils/shell-snapshot.d.ts.map +1 -0
- package/dist/core/utils/shell-snapshot.js +32 -0
- package/dist/core/utils/shell-snapshot.js.map +1 -0
- package/dist/core/utils/startup-watchdog.d.ts +11 -0
- package/dist/core/utils/startup-watchdog.d.ts.map +1 -0
- package/dist/core/utils/startup-watchdog.js +34 -0
- package/dist/core/utils/startup-watchdog.js.map +1 -0
- package/dist/core/utils/tls-ca-shim.d.ts +17 -0
- package/dist/core/utils/tls-ca-shim.d.ts.map +1 -0
- package/dist/core/utils/tls-ca-shim.js +33 -0
- package/dist/core/utils/tls-ca-shim.js.map +1 -0
- package/dist/core/web/agregador.d.ts +67 -0
- package/dist/core/web/agregador.d.ts.map +1 -0
- package/dist/core/web/agregador.js +182 -0
- package/dist/core/web/agregador.js.map +1 -0
- package/dist/core/web/busqueda-nativa.d.ts.map +1 -1
- package/dist/core/web/busqueda-nativa.js.map +1 -1
- package/dist/core/web/consulta.d.ts +53 -0
- package/dist/core/web/consulta.d.ts.map +1 -0
- package/dist/core/web/consulta.js +213 -0
- package/dist/core/web/consulta.js.map +1 -0
- package/dist/core/web/destino.d.ts +11 -0
- package/dist/core/web/destino.d.ts.map +1 -1
- package/dist/core/web/destino.js +35 -0
- package/dist/core/web/destino.js.map +1 -1
- package/dist/core/web/load-page.d.ts +52 -0
- package/dist/core/web/load-page.d.ts.map +1 -0
- package/dist/core/web/load-page.js +221 -0
- package/dist/core/web/load-page.js.map +1 -0
- package/dist/core/web/proveedores/brave.d.ts.map +1 -1
- package/dist/core/web/proveedores/brave.js.map +1 -1
- package/dist/core/web/proveedores/claves.d.ts.map +1 -1
- package/dist/core/web/proveedores/claves.js.map +1 -1
- package/dist/core/web/proveedores/duckduckgo.d.ts.map +1 -1
- package/dist/core/web/proveedores/duckduckgo.js.map +1 -1
- package/dist/core/web/proveedores/ecosia.d.ts.map +1 -1
- package/dist/core/web/proveedores/ecosia.js.map +1 -1
- package/dist/core/web/proveedores/exa.d.ts.map +1 -1
- package/dist/core/web/proveedores/exa.js.map +1 -1
- package/dist/core/web/proveedores/mojeek.d.ts.map +1 -1
- package/dist/core/web/proveedores/mojeek.js.map +1 -1
- package/dist/core/web/proveedores/navegador.d.ts.map +1 -1
- package/dist/core/web/proveedores/navegador.js.map +1 -1
- package/dist/core/web/proveedores/registro.d.ts.map +1 -1
- package/dist/core/web/proveedores/registro.js.map +1 -1
- package/dist/core/web/proveedores/searxng.d.ts.map +1 -1
- package/dist/core/web/proveedores/searxng.js.map +1 -1
- package/dist/core/web/proveedores/serper.d.ts.map +1 -1
- package/dist/core/web/proveedores/serper.js.map +1 -1
- package/dist/core/web/proveedores/tavily.d.ts.map +1 -1
- package/dist/core/web/proveedores/tavily.js.map +1 -1
- package/dist/core/web/proveedores/tipos.d.ts.map +1 -1
- package/dist/core/web/proveedores/tipos.js.map +1 -1
- package/dist/core/web/registro-red.d.ts.map +1 -1
- package/dist/core/web/registro-red.js.map +1 -1
- package/dist/core/web/scrapers/cisa-kev.d.ts.map +1 -1
- package/dist/core/web/scrapers/cisa-kev.js.map +1 -1
- package/dist/core/web/scrapers/crates-io.d.ts.map +1 -1
- package/dist/core/web/scrapers/crates-io.js.map +1 -1
- package/dist/core/web/scrapers/docs-rs.d.ts.map +1 -1
- package/dist/core/web/scrapers/docs-rs.js.map +1 -1
- package/dist/core/web/scrapers/github.d.ts.map +1 -1
- package/dist/core/web/scrapers/github.js.map +1 -1
- package/dist/core/web/scrapers/go-pkg.d.ts.map +1 -1
- package/dist/core/web/scrapers/go-pkg.js.map +1 -1
- package/dist/core/web/scrapers/hex.d.ts.map +1 -1
- package/dist/core/web/scrapers/hex.js.map +1 -1
- package/dist/core/web/scrapers/maven.d.ts.map +1 -1
- package/dist/core/web/scrapers/maven.js.map +1 -1
- package/dist/core/web/scrapers/mdn.d.ts.map +1 -1
- package/dist/core/web/scrapers/mdn.js.map +1 -1
- package/dist/core/web/scrapers/npm.d.ts.map +1 -1
- package/dist/core/web/scrapers/npm.js.map +1 -1
- package/dist/core/web/scrapers/nuget.d.ts.map +1 -1
- package/dist/core/web/scrapers/nuget.js.map +1 -1
- package/dist/core/web/scrapers/nvd.d.ts.map +1 -1
- package/dist/core/web/scrapers/nvd.js.map +1 -1
- package/dist/core/web/scrapers/pypi.d.ts.map +1 -1
- package/dist/core/web/scrapers/pypi.js.map +1 -1
- package/dist/core/web/scrapers/registro.d.ts.map +1 -1
- package/dist/core/web/scrapers/registro.js.map +1 -1
- package/dist/core/web/scrapers/rubygems.d.ts.map +1 -1
- package/dist/core/web/scrapers/rubygems.js.map +1 -1
- package/dist/core/web/scrapers/stackoverflow.d.ts.map +1 -1
- package/dist/core/web/scrapers/stackoverflow.js.map +1 -1
- package/dist/core/web/scrapers/tipos.d.ts.map +1 -1
- package/dist/core/web/scrapers/tipos.js.map +1 -1
- package/dist/core/web/texto.d.ts.map +1 -1
- package/dist/core/web/texto.js.map +1 -1
- package/dist/core/web/tools.d.ts +1 -8
- package/dist/core/web/tools.d.ts.map +1 -1
- package/dist/core/web/tools.js +2 -33
- package/dist/core/web/tools.js.map +1 -1
- package/dist/core/wiki/almacen.d.ts.map +1 -1
- package/dist/core/wiki/almacen.js.map +1 -1
- package/dist/core/wiki/citas.d.ts.map +1 -1
- package/dist/core/wiki/citas.js.map +1 -1
- package/dist/core/workflows/agent-runner.d.ts.map +1 -1
- package/dist/core/workflows/agent-runner.js.map +1 -1
- package/dist/core/workflows/builtins.d.ts.map +1 -1
- package/dist/core/workflows/builtins.js.map +1 -1
- package/dist/core/workflows/contrato/esquema.d.ts.map +1 -1
- package/dist/core/workflows/contrato/esquema.js.map +1 -1
- package/dist/core/workflows/contrato/reparar-argumentos.d.ts.map +1 -1
- package/dist/core/workflows/contrato/reparar-argumentos.js.map +1 -1
- package/dist/core/workflows/contrato/validador.d.ts.map +1 -1
- package/dist/core/workflows/contrato/validador.js.map +1 -1
- package/dist/core/workflows/contrato/yield.d.ts.map +1 -1
- package/dist/core/workflows/contrato/yield.js.map +1 -1
- package/dist/core/workflows/goal-engine/engine.d.ts +5 -0
- package/dist/core/workflows/goal-engine/engine.d.ts.map +1 -1
- package/dist/core/workflows/goal-engine/engine.js.map +1 -1
- package/dist/core/workflows/goal-engine/errors.d.ts.map +1 -1
- package/dist/core/workflows/goal-engine/errors.js.map +1 -1
- package/dist/core/workflows/goal-engine/index.d.ts.map +1 -1
- package/dist/core/workflows/goal-engine/index.js.map +1 -1
- package/dist/core/workflows/goal-engine/persistence.d.ts.map +1 -1
- package/dist/core/workflows/goal-engine/persistence.js.map +1 -1
- package/dist/core/workflows/goal-engine/prompts.d.ts.map +1 -1
- package/dist/core/workflows/goal-engine/prompts.js.map +1 -1
- package/dist/core/workflows/goal-engine/state.d.ts.map +1 -1
- package/dist/core/workflows/goal-engine/state.js.map +1 -1
- package/dist/core/workflows/goal-engine/tools.d.ts.map +1 -1
- package/dist/core/workflows/goal-engine/tools.js.map +1 -1
- package/dist/core/workflows/goal-engine/types.d.ts.map +1 -1
- package/dist/core/workflows/goal-engine/types.js.map +1 -1
- package/dist/core/workflows/goal-engine/worktree-fingerprint.d.ts.map +1 -1
- package/dist/core/workflows/goal-engine/worktree-fingerprint.js.map +1 -1
- package/dist/core/workflows/graph-sync.d.ts.map +1 -1
- package/dist/core/workflows/graph-sync.js.map +1 -1
- package/dist/core/workflows/graph.d.ts.map +1 -1
- package/dist/core/workflows/graph.js.map +1 -1
- package/dist/core/workflows/index.d.ts +6 -0
- package/dist/core/workflows/index.d.ts.map +1 -1
- package/dist/core/workflows/index.js +3 -0
- package/dist/core/workflows/index.js.map +1 -1
- package/dist/core/workflows/journal.d.ts.map +1 -1
- package/dist/core/workflows/journal.js.map +1 -1
- package/dist/core/workflows/manager.d.ts.map +1 -1
- package/dist/core/workflows/manager.js.map +1 -1
- package/dist/core/workflows/provider-caps.d.ts +103 -0
- package/dist/core/workflows/provider-caps.d.ts.map +1 -0
- package/dist/core/workflows/provider-caps.js +235 -0
- package/dist/core/workflows/provider-caps.js.map +1 -0
- package/dist/core/workflows/resolve-script.d.ts.map +1 -1
- package/dist/core/workflows/resolve-script.js.map +1 -1
- package/dist/core/workflows/runtime.d.ts.map +1 -1
- package/dist/core/workflows/runtime.js.map +1 -1
- package/dist/core/workflows/save-as-skill.d.ts.map +1 -1
- package/dist/core/workflows/save-as-skill.js.map +1 -1
- package/dist/core/workflows/shared-store.d.ts.map +1 -1
- package/dist/core/workflows/shared-store.js.map +1 -1
- package/dist/core/workflows/soft-budget.d.ts +27 -0
- package/dist/core/workflows/soft-budget.d.ts.map +1 -0
- package/dist/core/workflows/soft-budget.js +47 -0
- package/dist/core/workflows/soft-budget.js.map +1 -0
- package/dist/core/workflows/subagent-host.d.ts.map +1 -1
- package/dist/core/workflows/subagent-host.js.map +1 -1
- package/dist/core/workflows/tool-scheduling.d.ts +47 -0
- package/dist/core/workflows/tool-scheduling.d.ts.map +1 -0
- package/dist/core/workflows/tool-scheduling.js +102 -0
- package/dist/core/workflows/tool-scheduling.js.map +1 -0
- package/dist/core/workflows/tool-workflow.d.ts.map +1 -1
- package/dist/core/workflows/tool-workflow.js.map +1 -1
- package/dist/core/workflows/types.d.ts.map +1 -1
- package/dist/core/workflows/types.js.map +1 -1
- package/dist/core/workflows/worktree.d.ts.map +1 -1
- package/dist/core/workflows/worktree.js.map +1 -1
- package/dist/extensions/index.d.ts.map +1 -1
- package/dist/extensions/index.js.map +1 -1
- package/dist/extensions/llama/client.d.ts.map +1 -1
- package/dist/extensions/llama/client.js.map +1 -1
- package/dist/extensions/llama/huggingface.d.ts.map +1 -1
- package/dist/extensions/llama/huggingface.js.map +1 -1
- package/dist/extensions/llama/index.d.ts.map +1 -1
- 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.map +1 -1
- package/dist/extensions/llama/ui.d.ts.map +1 -1
- package/dist/extensions/llama/ui.js.map +1 -1
- package/dist/extensions/remoto/index.d.ts.map +1 -1
- package/dist/extensions/remoto/index.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +71 -3
- package/dist/main.js.map +1 -1
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js.map +1 -1
- package/dist/modes/acp/acp-mode.d.ts.map +1 -1
- package/dist/modes/acp/acp-mode.js.map +1 -1
- package/dist/modes/acp/events.d.ts.map +1 -1
- package/dist/modes/acp/events.js.map +1 -1
- package/dist/modes/index.d.ts.map +1 -1
- package/dist/modes/index.js.map +1 -1
- package/dist/modes/interactive/components/armin.d.ts.map +1 -1
- package/dist/modes/interactive/components/armin.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector.js.map +1 -1
- package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
- package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-editor.js.map +1 -1
- package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-entry.js.map +1 -1
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
- package/dist/modes/interactive/components/daxnuts.js.map +1 -1
- package/dist/modes/interactive/components/diff.d.ts.map +1 -1
- package/dist/modes/interactive/components/diff.js.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
- package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -1
- package/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-editor.js.map +1 -1
- package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-input.js.map +1 -1
- package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-selector.js.map +1 -1
- package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
- package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/home-screen.d.ts +2 -0
- package/dist/modes/interactive/components/home-screen.d.ts.map +1 -1
- package/dist/modes/interactive/components/home-screen.js +5 -6
- package/dist/modes/interactive/components/home-screen.js.map +1 -1
- package/dist/modes/interactive/components/index.d.ts.map +1 -1
- package/dist/modes/interactive/components/index.js.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/markdown-transform.d.ts.map +1 -1
- package/dist/modes/interactive/components/markdown-transform.js.map +1 -1
- package/dist/modes/interactive/components/mermaid.d.ts.map +1 -1
- package/dist/modes/interactive/components/mermaid.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/components/prompt-optimization.d.ts.map +1 -1
- package/dist/modes/interactive/components/prompt-optimization.js.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-submenu.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-submenu.js.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
- package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
- package/dist/modes/interactive/components/status-indicator.js.map +1 -1
- package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/theme-selector.js.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-selector.js.map +1 -1
- package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/trust-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message.js.map +1 -1
- package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
- package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
- package/dist/modes/interactive/external-editor.d.ts.map +1 -1
- package/dist/modes/interactive/external-editor.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +19 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +29 -0
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/model-catalog-refresh.d.ts.map +1 -1
- package/dist/modes/interactive/model-catalog-refresh.js.map +1 -1
- package/dist/modes/interactive/model-search.d.ts.map +1 -1
- package/dist/modes/interactive/model-search.js.map +1 -1
- package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
- package/dist/modes/interactive/theme/theme.d.ts +2 -2
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/json-event.d.ts.map +1 -1
- 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.map +1 -1
- package/dist/modes/rpc/jsonl.d.ts.map +1 -1
- package/dist/modes/rpc/jsonl.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- 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.map +1 -1
- package/dist/rpc-entry.d.ts.map +1 -1
- package/dist/rpc-entry.js +0 -0
- package/dist/rpc-entry.js.map +1 -1
- package/dist/server/attach.d.ts.map +1 -1
- package/dist/server/attach.js.map +1 -1
- package/dist/server/create-harness.d.ts.map +1 -1
- package/dist/server/create-harness.js.map +1 -1
- package/dist/server/extension-ops.d.ts.map +1 -1
- package/dist/server/extension-ops.js.map +1 -1
- package/dist/server/pi-server-service.d.ts.map +1 -1
- package/dist/server/pi-server-service.js.map +1 -1
- package/dist/server/scheduler-tick.d.ts.map +1 -1
- package/dist/server/scheduler-tick.js.map +1 -1
- package/dist/server/serve.d.ts.map +1 -1
- package/dist/server/serve.js.map +1 -1
- package/dist/server/transcript.d.ts.map +1 -1
- package/dist/server/transcript.js.map +1 -1
- package/dist/telegram/api.d.ts +6 -0
- package/dist/telegram/api.d.ts.map +1 -1
- package/dist/telegram/api.js.map +1 -1
- package/dist/telegram/bridge.d.ts.map +1 -1
- package/dist/telegram/bridge.js.map +1 -1
- package/dist/telegram/journal.d.ts.map +1 -1
- package/dist/telegram/journal.js.map +1 -1
- package/dist/telegram/servidor.d.ts.map +1 -1
- package/dist/telegram/servidor.js.map +1 -1
- package/dist/utils/abort.d.ts.map +1 -1
- package/dist/utils/abort.js.map +1 -1
- package/dist/utils/ansi.d.ts.map +1 -1
- package/dist/utils/ansi.js.map +1 -1
- package/dist/utils/changelog.d.ts.map +1 -1
- package/dist/utils/changelog.js.map +1 -1
- package/dist/utils/child-process.d.ts.map +1 -1
- package/dist/utils/child-process.js.map +1 -1
- package/dist/utils/clipboard-image.d.ts.map +1 -1
- package/dist/utils/clipboard-image.js.map +1 -1
- package/dist/utils/clipboard-native.d.ts.map +1 -1
- package/dist/utils/clipboard-native.js.map +1 -1
- package/dist/utils/clipboard.d.ts.map +1 -1
- package/dist/utils/clipboard.js.map +1 -1
- package/dist/utils/deprecation.d.ts.map +1 -1
- package/dist/utils/deprecation.js.map +1 -1
- package/dist/utils/exif-orientation.d.ts.map +1 -1
- package/dist/utils/exif-orientation.js.map +1 -1
- package/dist/utils/frontmatter.d.ts.map +1 -1
- package/dist/utils/frontmatter.js.map +1 -1
- package/dist/utils/fs-watch.d.ts.map +1 -1
- package/dist/utils/fs-watch.js.map +1 -1
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/html.d.ts.map +1 -1
- package/dist/utils/html.js.map +1 -1
- package/dist/utils/image-convert.d.ts.map +1 -1
- package/dist/utils/image-convert.js.map +1 -1
- package/dist/utils/image-process.d.ts.map +1 -1
- package/dist/utils/image-process.js.map +1 -1
- package/dist/utils/image-resize-core.d.ts.map +1 -1
- package/dist/utils/image-resize-core.js.map +1 -1
- package/dist/utils/image-resize-worker.d.ts.map +1 -1
- package/dist/utils/image-resize-worker.js.map +1 -1
- package/dist/utils/image-resize.d.ts.map +1 -1
- package/dist/utils/image-resize.js.map +1 -1
- package/dist/utils/json.d.ts.map +1 -1
- package/dist/utils/json.js.map +1 -1
- package/dist/utils/management-http.d.ts.map +1 -1
- package/dist/utils/management-http.js.map +1 -1
- package/dist/utils/mime.d.ts.map +1 -1
- package/dist/utils/mime.js.map +1 -1
- package/dist/utils/open-browser.d.ts.map +1 -1
- package/dist/utils/open-browser.js.map +1 -1
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/photon.d.ts.map +1 -1
- package/dist/utils/photon.js.map +1 -1
- package/dist/utils/pi-user-agent.d.ts.map +1 -1
- package/dist/utils/pi-user-agent.js.map +1 -1
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js.map +1 -1
- package/dist/utils/sleep.d.ts.map +1 -1
- package/dist/utils/sleep.js.map +1 -1
- package/dist/utils/syntax-highlight.d.ts.map +1 -1
- package/dist/utils/syntax-highlight.js.map +1 -1
- package/dist/utils/text.d.ts.map +1 -1
- package/dist/utils/text.js.map +1 -1
- package/dist/utils/tool-result-images.d.ts.map +1 -1
- package/dist/utils/tool-result-images.js.map +1 -1
- package/dist/utils/tools-manager.d.ts.map +1 -1
- package/dist/utils/tools-manager.js.map +1 -1
- package/dist/utils/version-check.d.ts.map +1 -1
- package/dist/utils/version-check.js.map +1 -1
- package/dist/utils/windows-self-update.d.ts.map +1 -1
- package/dist/utils/windows-self-update.js.map +1 -1
- package/docs/development-fork.md +170 -0
- package/docs/docs.json +25 -0
- package/docs/modules-infraestructura.md +115 -0
- package/docs/modules-motor.md +160 -0
- package/docs/modules-producto.md +179 -0
- package/docs/modules-seguridad.md +158 -0
- package/package.json +113 -113
- package/dist/core/commit/diff.d.ts.map +0 -1
- package/dist/core/commit/diff.js.map +0 -1
- package/dist/core/commit/mensaje.d.ts +0 -80
- package/dist/core/commit/mensaje.d.ts.map +0 -1
- package/dist/core/commit/mensaje.js +0 -207
- package/dist/core/commit/mensaje.js.map +0 -1
- /package/dist/core/{commit → commits}/diff.d.ts +0 -0
- /package/dist/core/{commit → commits}/diff.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"steering.d.ts","sourceRoot":"","sources":["../../../src/core/banco/steering.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,4CAA4C;AAC5C,MAAM,MAAM,aAAa,GACtB;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,GAClF;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,GACjF;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,GACnF;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,GAC1E;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,GAC5E;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC;AAE1C,6EAA6E;AAC7E,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,EAAE,CAAC;AAE7C,oCAAoC;AACpC,MAAM,MAAM,gBAAgB,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,EAAE,CAAC;AAWhD;;;;;;;;;GASG;AACH,qBAAa,kBAAkB;IAC9B,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,YAAY,CAAK;IAEzB,qEAAqE;IACrE,OAAO,CAAC,iBAAiB;IAWzB;;;OAGG;IACH,OAAO,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAWnC,2DAA2D;IAC3D,WAAW,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO;IAI3C;;;;;OAKG;IACH,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC;IAYpF,wEAAwE;IACxE,eAAe,IAAI,MAAM;IAIzB,8DAA8D;IAC9D,qBAAqB,IAAI,MAAM,GAAG,IAAI;IAItC,+CAA+C;IAC/C,KAAK,IAAI,IAAI;CAIb"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Steering mid-batch event-driven — AG1.
|
|
3
|
+
*
|
|
4
|
+
* Inspirado en omp `packages/agent/src/agent-loop.ts` (steering via
|
|
5
|
+
* `getSteeringMessages` entre turnos) y `session/turn-recovery.ts`.
|
|
6
|
+
* En omp el steering se drena entre turnos (después del batch de tools);
|
|
7
|
+
* aquí se modela la decisión intra-batch: escuchar eventos onToolResult/
|
|
8
|
+
* onMessage y decidir si inyectar una instrucción de steering en el batch
|
|
9
|
+
* en vuelo. El controlador es pasivo y coalescea múltiples eventos.
|
|
10
|
+
*/
|
|
11
|
+
/** Lookup de tipos relevantes: onToolResult / onMessage (snake y camel). */
|
|
12
|
+
const RELEVANT = {
|
|
13
|
+
tool_result: true,
|
|
14
|
+
toolResult: true,
|
|
15
|
+
onToolResult: true,
|
|
16
|
+
message: true,
|
|
17
|
+
onMessage: true,
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Controlador de steering mid-batch event-driven.
|
|
21
|
+
*
|
|
22
|
+
* - `onEvent(event)` escucha cada toolResult/mensaje y marca steering pendiente.
|
|
23
|
+
* - `shouldSteer(batch)` indica si hay steering pendiente para el batch.
|
|
24
|
+
* - `injectSteering(batch, instruction)` devuelve nuevo batch con la instrucción
|
|
25
|
+
* al inicio. Coalescea: múltiples eventos relevantes generan UNA sola inyección.
|
|
26
|
+
*
|
|
27
|
+
* El batch original nunca se muta.
|
|
28
|
+
*/
|
|
29
|
+
export class SteeringController {
|
|
30
|
+
pendingInstruction = null;
|
|
31
|
+
pendingCount = 0;
|
|
32
|
+
/** Deriva la instrucción de steering del evento, si es relevante. */
|
|
33
|
+
deriveInstruction(event) {
|
|
34
|
+
if (RELEVANT[event.type] !== true)
|
|
35
|
+
return null;
|
|
36
|
+
if (typeof event.instruction === "string" && event.instruction.trim().length > 0) {
|
|
37
|
+
return event.instruction.trim();
|
|
38
|
+
}
|
|
39
|
+
if (typeof event.content === "string" && event.content.trim().length > 0) {
|
|
40
|
+
return event.content.trim();
|
|
41
|
+
}
|
|
42
|
+
return "__steering__";
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Escucha un evento del loop. Solo tool_result/message marcan steering.
|
|
46
|
+
* Llamadas múltiples coalescean: no acumula instrucciones, solo una.
|
|
47
|
+
*/
|
|
48
|
+
onEvent(event) {
|
|
49
|
+
if (!event || typeof event.type !== "string")
|
|
50
|
+
return;
|
|
51
|
+
if (RELEVANT[event.type] !== true)
|
|
52
|
+
return;
|
|
53
|
+
const instr = this.deriveInstruction(event);
|
|
54
|
+
if (instr === null)
|
|
55
|
+
return;
|
|
56
|
+
if (this.pendingInstruction === null) {
|
|
57
|
+
this.pendingInstruction = instr;
|
|
58
|
+
}
|
|
59
|
+
this.pendingCount += 1;
|
|
60
|
+
}
|
|
61
|
+
/** ¿Hay steering pendiente para inyectar en este batch? */
|
|
62
|
+
shouldSteer(_batch) {
|
|
63
|
+
return this.pendingInstruction !== null;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Inyecta la instrucción de steering al inicio del batch.
|
|
67
|
+
* - No muta el batch original.
|
|
68
|
+
* - Consume el pendiente (siguiente shouldSteer === false hasta nuevo evento).
|
|
69
|
+
* - Si no hay pendiente, devuelve copia del batch sin cambios.
|
|
70
|
+
*/
|
|
71
|
+
injectSteering(batch, instruction) {
|
|
72
|
+
const copy = [...batch];
|
|
73
|
+
if (this.pendingInstruction === null) {
|
|
74
|
+
return copy;
|
|
75
|
+
}
|
|
76
|
+
const toInject = instruction && instruction.trim().length > 0 ? instruction.trim() : this.pendingInstruction;
|
|
77
|
+
const result = [toInject, ...copy];
|
|
78
|
+
this.pendingInstruction = null;
|
|
79
|
+
this.pendingCount = 0;
|
|
80
|
+
return result;
|
|
81
|
+
}
|
|
82
|
+
/** Para inspección en tests: cuántos eventos relevantes coalescaron. */
|
|
83
|
+
getPendingCount() {
|
|
84
|
+
return this.pendingCount;
|
|
85
|
+
}
|
|
86
|
+
/** Para inspección en tests: instrucción pendiente actual. */
|
|
87
|
+
getPendingInstruction() {
|
|
88
|
+
return this.pendingInstruction;
|
|
89
|
+
}
|
|
90
|
+
/** Limpia el estado pendiente sin inyectar. */
|
|
91
|
+
clear() {
|
|
92
|
+
this.pendingInstruction = null;
|
|
93
|
+
this.pendingCount = 0;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=steering.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"steering.js","sourceRoot":"","sources":["../../../src/core/banco/steering.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAiBH,4EAA4E;AAC5E,MAAM,QAAQ,GAAyB;IACtC,WAAW,EAAE,IAAI;IACjB,UAAU,EAAE,IAAI;IAChB,YAAY,EAAE,IAAI;IAClB,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,IAAI;CACf,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,OAAO,kBAAkB;IACtB,kBAAkB,GAAkB,IAAI,CAAC;IACzC,YAAY,GAAG,CAAC,CAAC;IAEzB,qEAAqE;IAC7D,iBAAiB,CAAC,KAAoB;QAC7C,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAC/C,IAAI,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,IAAK,KAAK,CAAC,WAAsB,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9F,OAAQ,KAAK,CAAC,WAAsB,CAAC,IAAI,EAAE,CAAC;QAC7C,CAAC;QACD,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAK,KAAK,CAAC,OAAkB,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtF,OAAQ,KAAK,CAAC,OAAkB,CAAC,IAAI,EAAE,CAAC;QACzC,CAAC;QACD,OAAO,cAAc,CAAC;IACvB,CAAC;IAED;;;OAGG;IACH,OAAO,CAAC,KAAoB;QAC3B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO;QACrD,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI;YAAE,OAAO;QAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO;QAC3B,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,EAAE,CAAC;YACtC,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QACjC,CAAC;QACD,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,2DAA2D;IAC3D,WAAW,CAAC,MAAqB;QAChC,OAAO,IAAI,CAAC,kBAAkB,KAAK,IAAI,CAAC;IACzC,CAAC;IAED;;;;;OAKG;IACH,cAAc,CAAI,KAAuB,EAAE,WAAmB;QAC7D,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;QACxB,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC;QACb,CAAC;QACD,MAAM,QAAQ,GAAG,WAAW,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC;QAC7G,MAAM,MAAM,GAAG,CAAC,QAAwB,EAAE,GAAG,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QACtB,OAAO,MAAM,CAAC;IACf,CAAC;IAED,wEAAwE;IACxE,eAAe;QACd,OAAO,IAAI,CAAC,YAAY,CAAC;IAC1B,CAAC;IAED,8DAA8D;IAC9D,qBAAqB;QACpB,OAAO,IAAI,CAAC,kBAAkB,CAAC;IAChC,CAAC;IAED,+CAA+C;IAC/C,KAAK;QACJ,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;IACvB,CAAC;CACD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tipos.d.ts","sourceRoot":"","sources":["../../../src/core/banco/tipos.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,CAAC;AAErE,gFAAgF;AAChF,MAAM,WAAW,SAAS;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,gFAAgF;IAChF,eAAe,EAAE,MAAM,CAAC;IACxB,sEAAsE;IACtE,gBAAgB,EAAE,MAAM,CAAC;IACzB,4EAA4E;IAC5E,iBAAiB,EAAE,MAAM,CAAC;IAC1B,
|
|
1
|
+
{"version":3,"file":"tipos.d.ts","sourceRoot":"","sources":["../../../src/core/banco/tipos.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,CAAC;AAErE,gFAAgF;AAChF,MAAM,WAAW,SAAS;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,gFAAgF;IAChF,eAAe,EAAE,MAAM,CAAC;IACxB,sEAAsE;IACtE,gBAAgB,EAAE,MAAM,CAAC;IACzB,4EAA4E;IAC5E,iBAAiB,EAAE,MAAM,CAAC;IAC1B,6EAA6E;IAC7E,WAAW,EAAE,MAAM,CAAC;IACpB,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE;QACT,aAAa,EAAE,MAAM,CAAC;QACtB,eAAe,EAAE,OAAO,CAAC;QACzB,aAAa,EAAE,MAAM,CAAC;QACtB,gBAAgB,EAAE,MAAM,CAAC;QACzB,QAAQ,EAAE,MAAM,CAAC;KACjB,CAAC;CACF;AAED,MAAM,WAAW,aAAa;IAC7B,OAAO,EAAE,CAAC,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,yBAAyB,EAAE,MAAM,CAAC;IAClC,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,sDAAsD;AACtD,MAAM,WAAW,aAAa;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,SAAS,EAAE,OAAO,CAAC;IACnB;;;;;;;;;;;;;;;;OAgBG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,KAAK,EAAE,OAAO,CAAC;IACf,yEAAyE;IACzE,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,iGAAiG;IACjG,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IACnC,OAAO,EAAE,CAAC,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,OAAO,EAAE,eAAe,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,kFAAkF;IAClF,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,uFAAuF;IACvF,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC3F"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tipos.js","sourceRoot":"","sources":["../../../src/core/banco/tipos.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"
|
|
1
|
+
{"version":3,"file":"tipos.js","sourceRoot":"","sources":["../../../src/core/banco/tipos.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bash-executor.d.ts","sourceRoot":"","sources":["../../src/core/bash-executor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAOtD,MAAM,WAAW,mBAAmB;IACnC,+DAA+D;IAC/D,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,mCAAmC;IACnC,MAAM,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IAC1B,sEAAsE;IACtE,MAAM,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,mDAAmD;IACnD,SAAS,EAAE,OAAO,CAAC;IACnB,uCAAuC;IACvC,SAAS,EAAE,OAAO,CAAC;IACnB,yFAAyF;IACzF,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAMD;;;GAGG;AACH,wBAAsB,yBAAyB,CAC9C,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,cAAc,EAC1B,OAAO,CAAC,EAAE,mBAAmB,GAC3B,OAAO,CAAC,UAAU,CAAC,CAqGrB"
|
|
1
|
+
{"version":3,"file":"bash-executor.d.ts","sourceRoot":"","sources":["../../src/core/bash-executor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAOtD,MAAM,WAAW,mBAAmB;IACnC,+DAA+D;IAC/D,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,mCAAmC;IACnC,MAAM,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IAC1B,sEAAsE;IACtE,MAAM,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,mDAAmD;IACnD,SAAS,EAAE,OAAO,CAAC;IACnB,uCAAuC;IACvC,SAAS,EAAE,OAAO,CAAC;IACnB,yFAAyF;IACzF,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAMD;;;GAGG;AACH,wBAAsB,yBAAyB,CAC9C,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,cAAc,EAC1B,OAAO,CAAC,EAAE,mBAAmB,GAC3B,OAAO,CAAC,UAAU,CAAC,CAqGrB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bash-executor.js","sourceRoot":"","sources":["../../src/core/bash-executor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAoB,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AA0BtE,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC9C,OAAe,EACf,GAAW,EACX,UAA0B,EAC1B,OAA6B
|
|
1
|
+
{"version":3,"file":"bash-executor.js","sourceRoot":"","sources":["../../src/core/bash-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"almacen.d.ts","sourceRoot":"","sources":["../../../src/core/blobs/almacen.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,MAAM,WAAW,aAAa;IAC7B,0EAAyE;IACzE,EAAE,EAAE,MAAM,CAAC;IACX,4EAA2E;IAC3E,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,6EAA2E;IAC3E,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC/B,+DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qEAAmE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAKD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnE;AAsCD,qBAAa,cAAc;IAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAoC;IACpD,OAAO,CAAC,KAAK,CAAS;IACtB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAE/C,YAAY,QAAQ,EAAE,MAAM,EAAE,aAAa,SAAe,EAEzD;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAEK,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAO5B;IAED,uEAAuE;IACvE,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,SAAa,GAAG,aAAa,GAAG,SAAS,CAMnF;IAED,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAOrE;IAED;;;OAGG;IACH,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAMhD;IAED,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAUjC;IAED,MAAM,IAAI,MAAM,CAEf;IAMD,4EAA0E;IAC1E,MAAM,CAAC,QAAQ,GAAE,eAAoB,GAAG,MAAM,EAAE,CAyB/C;IAED;;;;;OAKG;IACG,MAAM,CAAC,SAAS,GAAE,QAAQ,CAAC,MAAM,CAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB5D;CACD","sourcesContent":["/**\n * Caché en disco de los identificadores que devuelve la API de ficheros del\n * proveedor, indexada por (proveedor, hash del contenido).\n *\n * Por qué en disco y no en memoria: el ahorro grande no es entre turnos de una\n * sesión —eso lo daría un Map— sino entre SESIONES. La captura de pantalla que\n * pegaste ayer y vuelves a pegar hoy es el mismo fichero para el proveedor, y\n * volver a subir 1,4 MB es tiempo y cuota tirados.\n *\n * Por qué se relee el fichero antes de escribir: hay más de un proceso de Ada\n * a la vez (CLI + escritorio + subagentes) y todos apuntan al mismo agentDir.\n * Escribir el mapa entero desde memoria haría que el último en cerrar borrase\n * lo que subieron los demás; ya nos pasó con un fichero compartido y varios\n * escritores. Aquí se funde por entrada, quedándose con la de uso más reciente.\n */\n\nimport { mkdir, readFile, rename, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\n\nexport interface EntradaDeBlob {\n\t/** Identificador que devolvió el proveedor (`file_...` / `file-...`). */\n\tid: string;\n\t/** Tamaño en bytes del contenido original, para el informe de `/blobs`. */\n\tbytes: number;\n\tmime: string;\n\t/** Milisegundos epoch de la subida. */\n\tsubidoEn: number;\n\t/** Milisegundos epoch del último uso; manda en la purga y en la fusión. */\n\tusadoEn: number;\n}\n\nexport interface OpcionesDePurga {\n\t/** Edad máxima desde el último uso. Por defecto 30 días. */\n\tmaxEdadMs?: number;\n\t/** Número máximo de entradas que se conservan. Por defecto 500. */\n\tmaxEntradas?: number;\n\t/** Reloj inyectable; los tests no pueden esperar 30 días. */\n\tahora?: number;\n}\n\nconst MAX_EDAD_POR_DEFECTO_MS = 30 * 24 * 60 * 60 * 1000;\nconst MAX_ENTRADAS_POR_DEFECTO = 500;\n\n/**\n * Clave del mapa. El separador es `|` y no un byte NUL a propósito: un NUL en\n * el fichero lo vuelve binario para `grep` y para `git diff`, y este fichero se\n * mira a mano cuando algo va mal.\n */\nexport function claveDeBlob(proveedor: string, hash: string): string {\n\treturn `${proveedor}|${hash}`;\n}\n\ninterface FicheroDeBlobs {\n\tversion: number;\n\tentradas: Record<string, EntradaDeBlob>;\n}\n\nfunction esEntrada(valor: unknown): valor is EntradaDeBlob {\n\tif (!valor || typeof valor !== \"object\") return false;\n\tconst e = valor as Record<string, unknown>;\n\treturn (\n\t\ttypeof e.id === \"string\" &&\n\t\te.id.length > 0 &&\n\t\ttypeof e.bytes === \"number\" &&\n\t\ttypeof e.mime === \"string\" &&\n\t\ttypeof e.subidoEn === \"number\" &&\n\t\ttypeof e.usadoEn === \"number\"\n\t);\n}\n\nfunction leerFichero(texto: string): Map<string, EntradaDeBlob> {\n\tconst mapa = new Map<string, EntradaDeBlob>();\n\tlet crudo: unknown;\n\ttry {\n\t\tcrudo = JSON.parse(texto);\n\t} catch {\n\t\t// Un fichero corrupto se trata como vacío: como mucho se resube. Fallar\n\t\t// aquí dejaría al agente sin poder mandar adjuntos por un JSON roto.\n\t\treturn mapa;\n\t}\n\tconst doc = crudo as Partial<FicheroDeBlobs> | null;\n\tif (!doc || typeof doc !== \"object\" || !doc.entradas || typeof doc.entradas !== \"object\") return mapa;\n\tfor (const [clave, valor] of Object.entries(doc.entradas)) {\n\t\tif (esEntrada(valor)) mapa.set(clave, valor);\n\t}\n\treturn mapa;\n}\n\nexport class AlmacenDeBlobs {\n\tprivate readonly ruta: string;\n\tprivate entradas = new Map<string, EntradaDeBlob>();\n\tprivate sucio = false;\n\t/**\n\t * Claves quitadas A PROPÓSITO (id muerto, purga por edad, purga a mano). La\n\t * fusión de `volcar()` las tiene que borrar también de la copia en disco: si\n\t * no, la entrada que este proceso acaba de tirar vuelve desde el fichero que\n\t * dejó otro proceso y la purga no llega nunca al disco.\n\t *\n\t * Vive aquí y no en quien llama porque el llamador se olvida: la purga\n\t * automática del arranque lo hacía y la de `/blobs purgar` no, así que el\n\t * fichero crecía sin límite y las entradas de más de 30 días resucitaban en\n\t * cada volcado. Comprobado ejecutándolo: purgar + volcar dejaba la clave\n\t * `anthropic|aaa` intacta en disco.\n\t */\n\tprivate readonly olvidadas = new Set<string>();\n\n\tconstructor(agentDir: string, nombreFichero = \"blobs.json\") {\n\t\tthis.ruta = join(agentDir, nombreFichero);\n\t}\n\n\tget rutaFichero(): string {\n\t\treturn this.ruta;\n\t}\n\n\tasync cargar(): Promise<void> {\n\t\ttry {\n\t\t\tthis.entradas = leerFichero(await readFile(this.ruta, \"utf-8\"));\n\t\t} catch {\n\t\t\t// No existe todavía: primer arranque.\n\t\t\tthis.entradas = new Map();\n\t\t}\n\t}\n\n\t/** Devuelve la entrada y marca el uso. `undefined` = no la tenemos. */\n\tleer(proveedor: string, hash: string, ahora = Date.now()): EntradaDeBlob | undefined {\n\t\tconst entrada = this.entradas.get(claveDeBlob(proveedor, hash));\n\t\tif (!entrada) return undefined;\n\t\tentrada.usadoEn = ahora;\n\t\tthis.sucio = true;\n\t\treturn entrada;\n\t}\n\n\tguardar(proveedor: string, hash: string, entrada: EntradaDeBlob): void {\n\t\tconst clave = claveDeBlob(proveedor, hash);\n\t\tthis.entradas.set(clave, entrada);\n\t\t// Se ha vuelto a subir: deja de estar olvidada, o la fusión la borraría\n\t\t// justo después de haberla pagado.\n\t\tthis.olvidadas.delete(clave);\n\t\tthis.sucio = true;\n\t}\n\n\t/**\n\t * Borra una entrada. Se llama cuando el proveedor rechaza el id: mejor\n\t * resubir 1 MB que dejar la conversación atada a un id muerto.\n\t */\n\tolvidar(proveedor: string, hash: string): boolean {\n\t\tconst clave = claveDeBlob(proveedor, hash);\n\t\tconst borrada = this.entradas.delete(clave);\n\t\tthis.olvidadas.add(clave);\n\t\tif (borrada) this.sucio = true;\n\t\treturn borrada;\n\t}\n\n\tolvidarPorId(id: string): string[] {\n\t\tconst borradas: string[] = [];\n\t\tfor (const [clave, entrada] of this.entradas) {\n\t\t\tif (entrada.id !== id) continue;\n\t\t\tthis.entradas.delete(clave);\n\t\t\tthis.olvidadas.add(clave);\n\t\t\tborradas.push(clave);\n\t\t}\n\t\tif (borradas.length > 0) this.sucio = true;\n\t\treturn borradas;\n\t}\n\n\ttamano(): number {\n\t\treturn this.entradas.size;\n\t}\n\n\t// Aquí vivía `listar()`. Nadie lo llamaba: `/blobs` enseña el tamaño y la\n\t// ruta del fichero, que se mira a mano. Borrado por lo mismo que\n\t// `borrarFichero`.\n\n\t/** Devuelve las claves purgadas. Por edad primero, por número después. */\n\tpurgar(opciones: OpcionesDePurga = {}): string[] {\n\t\tconst ahora = opciones.ahora ?? Date.now();\n\t\tconst maxEdadMs = opciones.maxEdadMs ?? MAX_EDAD_POR_DEFECTO_MS;\n\t\tconst maxEntradas = opciones.maxEntradas ?? MAX_ENTRADAS_POR_DEFECTO;\n\t\tconst purgadas: string[] = [];\n\n\t\tfor (const [clave, entrada] of this.entradas) {\n\t\t\tif (ahora - entrada.usadoEn > maxEdadMs) {\n\t\t\t\tthis.entradas.delete(clave);\n\t\t\t\tpurgadas.push(clave);\n\t\t\t}\n\t\t}\n\n\t\tif (this.entradas.size > maxEntradas) {\n\t\t\tconst porAntiguedad = [...this.entradas].sort((a, b) => a[1].usadoEn - b[1].usadoEn);\n\t\t\tconst sobran = this.entradas.size - maxEntradas;\n\t\t\tfor (const [clave] of porAntiguedad.slice(0, sobran)) {\n\t\t\t\tthis.entradas.delete(clave);\n\t\t\t\tpurgadas.push(clave);\n\t\t\t}\n\t\t}\n\n\t\tif (purgadas.length > 0) this.sucio = true;\n\t\tfor (const clave of purgadas) this.olvidadas.add(clave);\n\t\treturn purgadas;\n\t}\n\n\t/**\n\t * Escribe fundiendo con lo que haya en disco. Las claves que este proceso ha\n\t * borrado a propósito se quitan de la fusión: sin eso, la fusión las\n\t * resucitaría desde la copia en disco de otro proceso y volveríamos a mandar\n\t * un id que ya sabemos muerto, o a guardar para siempre lo que purgamos.\n\t */\n\tasync volcar(olvidadas: Iterable<string> = []): Promise<void> {\n\t\tif (!this.sucio) return;\n\t\tlet enDisco = new Map<string, EntradaDeBlob>();\n\t\ttry {\n\t\t\tenDisco = leerFichero(await readFile(this.ruta, \"utf-8\"));\n\t\t} catch {\n\t\t\t// Sin fichero previo: la fusión es la identidad.\n\t\t}\n\t\tfor (const clave of this.olvidadas) enDisco.delete(clave);\n\t\tfor (const clave of olvidadas) enDisco.delete(clave);\n\t\tfor (const [clave, mia] of this.entradas) {\n\t\t\tconst suya = enDisco.get(clave);\n\t\t\tenDisco.set(clave, !suya || mia.usadoEn >= suya.usadoEn ? mia : suya);\n\t\t}\n\t\tconst doc: FicheroDeBlobs = { version: 1, entradas: Object.fromEntries(enDisco) };\n\t\tawait mkdir(dirname(this.ruta), { recursive: true });\n\t\tconst temporal = `${this.ruta}.${process.pid}.tmp`;\n\t\tawait writeFile(temporal, JSON.stringify(doc, null, \"\\t\"), \"utf-8\");\n\t\tawait rename(temporal, this.ruta);\n\t\tthis.entradas = enDisco;\n\t\tthis.sucio = false;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"almacen.d.ts","sourceRoot":"","sources":["../../../src/core/blobs/almacen.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,MAAM,WAAW,aAAa;IAC7B,yEAAyE;IACzE,EAAE,EAAE,MAAM,CAAC;IACX,2EAA2E;IAC3E,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC/B,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAKD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnE;AAsCD,qBAAa,cAAc;IAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAoC;IACpD,OAAO,CAAC,KAAK,CAAS;IACtB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;gBAEnC,QAAQ,EAAE,MAAM,EAAE,aAAa,SAAe;IAI1D,IAAI,WAAW,IAAI,MAAM,CAExB;IAEK,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAS7B,uEAAuE;IACvE,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,SAAa,GAAG,aAAa,GAAG,SAAS;IAQpF,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI;IAStE;;;OAGG;IACH,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAQjD,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE;IAYlC,MAAM,IAAI,MAAM;IAQhB,0EAA0E;IAC1E,MAAM,CAAC,QAAQ,GAAE,eAAoB,GAAG,MAAM,EAAE;IA2BhD;;;;;OAKG;IACG,MAAM,CAAC,SAAS,GAAE,QAAQ,CAAC,MAAM,CAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAsB7D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"almacen.js","sourceRoot":"","sources":["../../../src/core/blobs/almacen.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAuB1C,MAAM,uBAAuB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACzD,MAAM,wBAAwB,GAAG,GAAG,CAAC;AAErC;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,SAAiB,EAAE,IAAY,EAAU;IACpE,OAAO,GAAG,SAAS,IAAI,IAAI,EAAE,CAAC;AAAA,CAC9B;AAOD,SAAS,SAAS,CAAC,KAAc,EAA0B;IAC1D,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,CAAC,GAAG,KAAgC,CAAC;IAC3C,OAAO,CACN,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ;QACxB,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC;QACf,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ;QAC3B,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;QAC1B,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ;QAC9B,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAC7B,CAAC;AAAA,CACF;AAED,SAAS,WAAW,CAAC,KAAa,EAA8B;IAC/D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC9C,IAAI,KAAc,CAAC;IACnB,IAAI,CAAC;QACJ,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACR,yEAAwE;QACxE,uEAAqE;QACrE,OAAO,IAAI,CAAC;IACb,CAAC;IACD,MAAM,GAAG,GAAG,KAAuC,CAAC;IACpD,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACtG,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3D,IAAI,SAAS,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,IAAI,CAAC;AAAA,CACZ;AAED,MAAM,OAAO,cAAc;IACT,IAAI,CAAS;IACtB,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC5C,KAAK,GAAG,KAAK,CAAC;IACtB;;;;;;;;;;;OAWG;IACc,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/C,YAAY,QAAgB,EAAE,aAAa,GAAG,YAAY,EAAE;QAC3D,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IAAA,CAC1C;IAED,IAAI,WAAW,GAAW;QACzB,OAAO,IAAI,CAAC,IAAI,CAAC;IAAA,CACjB;IAED,KAAK,CAAC,MAAM,GAAkB;QAC7B,IAAI,CAAC;YACJ,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QACjE,CAAC;QAAC,MAAM,CAAC;YACR,uCAAsC;YACtC,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;QAC3B,CAAC;IAAA,CACD;IAED,uEAAuE;IACvE,IAAI,CAAC,SAAiB,EAAE,IAAY,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,EAA6B;QACpF,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;QAChE,IAAI,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QAC/B,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,OAAO,OAAO,CAAC;IAAA,CACf;IAED,OAAO,CAAC,SAAiB,EAAE,IAAY,EAAE,OAAsB,EAAQ;QACtE,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAClC,0EAAwE;QACxE,oCAAmC;QACnC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IAAA,CAClB;IAED;;;OAGG;IACH,OAAO,CAAC,SAAiB,EAAE,IAAY,EAAW;QACjD,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,OAAO;YAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAC/B,OAAO,OAAO,CAAC;IAAA,CACf;IAED,YAAY,CAAC,EAAU,EAAY;QAClC,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9C,IAAI,OAAO,CAAC,EAAE,KAAK,EAAE;gBAAE,SAAS;YAChC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAC3C,OAAO,QAAQ,CAAC;IAAA,CAChB;IAED,MAAM,GAAW;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAAA,CAC1B;IAED,8EAA0E;IAC1E,iEAAiE;IACjE,mBAAmB;IAEnB,4EAA0E;IAC1E,MAAM,CAAC,QAAQ,GAAoB,EAAE,EAAY;QAChD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3C,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,IAAI,uBAAuB,CAAC;QAChE,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,IAAI,wBAAwB,CAAC;QACrE,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9C,IAAI,KAAK,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,EAAE,CAAC;gBACzC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC5B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;QACF,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,WAAW,EAAE,CAAC;YACtC,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YACrF,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,WAAW,CAAC;YAChD,KAAK,MAAM,CAAC,KAAK,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC;gBACtD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC5B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;QACF,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAC3C,KAAK,MAAM,KAAK,IAAI,QAAQ;YAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACxD,OAAO,QAAQ,CAAC;IAAA,CAChB;IAED;;;;;OAKG;IACH,KAAK,CAAC,MAAM,CAAC,SAAS,GAAqB,EAAE,EAAiB;QAC7D,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO;QACxB,IAAI,OAAO,GAAG,IAAI,GAAG,EAAyB,CAAC;QAC/C,IAAI,CAAC;YACJ,OAAO,GAAG,WAAW,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QAC3D,CAAC;QAAC,MAAM,CAAC;YACR,kDAAiD;QAClD,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1D,KAAK,MAAM,KAAK,IAAI,SAAS;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrD,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACvE,CAAC;QACD,MAAM,GAAG,GAAmB,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;QAClF,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,MAAM,CAAC;QACnD,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;QACpE,MAAM,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IAAA,CACnB;CACD","sourcesContent":["/**\n * Caché en disco de los identificadores que devuelve la API de ficheros del\n * proveedor, indexada por (proveedor, hash del contenido).\n *\n * Por qué en disco y no en memoria: el ahorro grande no es entre turnos de una\n * sesión —eso lo daría un Map— sino entre SESIONES. La captura de pantalla que\n * pegaste ayer y vuelves a pegar hoy es el mismo fichero para el proveedor, y\n * volver a subir 1,4 MB es tiempo y cuota tirados.\n *\n * Por qué se relee el fichero antes de escribir: hay más de un proceso de Ada\n * a la vez (CLI + escritorio + subagentes) y todos apuntan al mismo agentDir.\n * Escribir el mapa entero desde memoria haría que el último en cerrar borrase\n * lo que subieron los demás; ya nos pasó con un fichero compartido y varios\n * escritores. Aquí se funde por entrada, quedándose con la de uso más reciente.\n */\n\nimport { mkdir, readFile, rename, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\n\nexport interface EntradaDeBlob {\n\t/** Identificador que devolvió el proveedor (`file_...` / `file-...`). */\n\tid: string;\n\t/** Tamaño en bytes del contenido original, para el informe de `/blobs`. */\n\tbytes: number;\n\tmime: string;\n\t/** Milisegundos epoch de la subida. */\n\tsubidoEn: number;\n\t/** Milisegundos epoch del último uso; manda en la purga y en la fusión. */\n\tusadoEn: number;\n}\n\nexport interface OpcionesDePurga {\n\t/** Edad máxima desde el último uso. Por defecto 30 días. */\n\tmaxEdadMs?: number;\n\t/** Número máximo de entradas que se conservan. Por defecto 500. */\n\tmaxEntradas?: number;\n\t/** Reloj inyectable; los tests no pueden esperar 30 días. */\n\tahora?: number;\n}\n\nconst MAX_EDAD_POR_DEFECTO_MS = 30 * 24 * 60 * 60 * 1000;\nconst MAX_ENTRADAS_POR_DEFECTO = 500;\n\n/**\n * Clave del mapa. El separador es `|` y no un byte NUL a propósito: un NUL en\n * el fichero lo vuelve binario para `grep` y para `git diff`, y este fichero se\n * mira a mano cuando algo va mal.\n */\nexport function claveDeBlob(proveedor: string, hash: string): string {\n\treturn `${proveedor}|${hash}`;\n}\n\ninterface FicheroDeBlobs {\n\tversion: number;\n\tentradas: Record<string, EntradaDeBlob>;\n}\n\nfunction esEntrada(valor: unknown): valor is EntradaDeBlob {\n\tif (!valor || typeof valor !== \"object\") return false;\n\tconst e = valor as Record<string, unknown>;\n\treturn (\n\t\ttypeof e.id === \"string\" &&\n\t\te.id.length > 0 &&\n\t\ttypeof e.bytes === \"number\" &&\n\t\ttypeof e.mime === \"string\" &&\n\t\ttypeof e.subidoEn === \"number\" &&\n\t\ttypeof e.usadoEn === \"number\"\n\t);\n}\n\nfunction leerFichero(texto: string): Map<string, EntradaDeBlob> {\n\tconst mapa = new Map<string, EntradaDeBlob>();\n\tlet crudo: unknown;\n\ttry {\n\t\tcrudo = JSON.parse(texto);\n\t} catch {\n\t\t// Un fichero corrupto se trata como vacío: como mucho se resube. Fallar\n\t\t// aquí dejaría al agente sin poder mandar adjuntos por un JSON roto.\n\t\treturn mapa;\n\t}\n\tconst doc = crudo as Partial<FicheroDeBlobs> | null;\n\tif (!doc || typeof doc !== \"object\" || !doc.entradas || typeof doc.entradas !== \"object\") return mapa;\n\tfor (const [clave, valor] of Object.entries(doc.entradas)) {\n\t\tif (esEntrada(valor)) mapa.set(clave, valor);\n\t}\n\treturn mapa;\n}\n\nexport class AlmacenDeBlobs {\n\tprivate readonly ruta: string;\n\tprivate entradas = new Map<string, EntradaDeBlob>();\n\tprivate sucio = false;\n\t/**\n\t * Claves quitadas A PROPÓSITO (id muerto, purga por edad, purga a mano). La\n\t * fusión de `volcar()` las tiene que borrar también de la copia en disco: si\n\t * no, la entrada que este proceso acaba de tirar vuelve desde el fichero que\n\t * dejó otro proceso y la purga no llega nunca al disco.\n\t *\n\t * Vive aquí y no en quien llama porque el llamador se olvida: la purga\n\t * automática del arranque lo hacía y la de `/blobs purgar` no, así que el\n\t * fichero crecía sin límite y las entradas de más de 30 días resucitaban en\n\t * cada volcado. Comprobado ejecutándolo: purgar + volcar dejaba la clave\n\t * `anthropic|aaa` intacta en disco.\n\t */\n\tprivate readonly olvidadas = new Set<string>();\n\n\tconstructor(agentDir: string, nombreFichero = \"blobs.json\") {\n\t\tthis.ruta = join(agentDir, nombreFichero);\n\t}\n\n\tget rutaFichero(): string {\n\t\treturn this.ruta;\n\t}\n\n\tasync cargar(): Promise<void> {\n\t\ttry {\n\t\t\tthis.entradas = leerFichero(await readFile(this.ruta, \"utf-8\"));\n\t\t} catch {\n\t\t\t// No existe todavía: primer arranque.\n\t\t\tthis.entradas = new Map();\n\t\t}\n\t}\n\n\t/** Devuelve la entrada y marca el uso. `undefined` = no la tenemos. */\n\tleer(proveedor: string, hash: string, ahora = Date.now()): EntradaDeBlob | undefined {\n\t\tconst entrada = this.entradas.get(claveDeBlob(proveedor, hash));\n\t\tif (!entrada) return undefined;\n\t\tentrada.usadoEn = ahora;\n\t\tthis.sucio = true;\n\t\treturn entrada;\n\t}\n\n\tguardar(proveedor: string, hash: string, entrada: EntradaDeBlob): void {\n\t\tconst clave = claveDeBlob(proveedor, hash);\n\t\tthis.entradas.set(clave, entrada);\n\t\t// Se ha vuelto a subir: deja de estar olvidada, o la fusión la borraría\n\t\t// justo después de haberla pagado.\n\t\tthis.olvidadas.delete(clave);\n\t\tthis.sucio = true;\n\t}\n\n\t/**\n\t * Borra una entrada. Se llama cuando el proveedor rechaza el id: mejor\n\t * resubir 1 MB que dejar la conversación atada a un id muerto.\n\t */\n\tolvidar(proveedor: string, hash: string): boolean {\n\t\tconst clave = claveDeBlob(proveedor, hash);\n\t\tconst borrada = this.entradas.delete(clave);\n\t\tthis.olvidadas.add(clave);\n\t\tif (borrada) this.sucio = true;\n\t\treturn borrada;\n\t}\n\n\tolvidarPorId(id: string): string[] {\n\t\tconst borradas: string[] = [];\n\t\tfor (const [clave, entrada] of this.entradas) {\n\t\t\tif (entrada.id !== id) continue;\n\t\t\tthis.entradas.delete(clave);\n\t\t\tthis.olvidadas.add(clave);\n\t\t\tborradas.push(clave);\n\t\t}\n\t\tif (borradas.length > 0) this.sucio = true;\n\t\treturn borradas;\n\t}\n\n\ttamano(): number {\n\t\treturn this.entradas.size;\n\t}\n\n\t// Aquí vivía `listar()`. Nadie lo llamaba: `/blobs` enseña el tamaño y la\n\t// ruta del fichero, que se mira a mano. Borrado por lo mismo que\n\t// `borrarFichero`.\n\n\t/** Devuelve las claves purgadas. Por edad primero, por número después. */\n\tpurgar(opciones: OpcionesDePurga = {}): string[] {\n\t\tconst ahora = opciones.ahora ?? Date.now();\n\t\tconst maxEdadMs = opciones.maxEdadMs ?? MAX_EDAD_POR_DEFECTO_MS;\n\t\tconst maxEntradas = opciones.maxEntradas ?? MAX_ENTRADAS_POR_DEFECTO;\n\t\tconst purgadas: string[] = [];\n\n\t\tfor (const [clave, entrada] of this.entradas) {\n\t\t\tif (ahora - entrada.usadoEn > maxEdadMs) {\n\t\t\t\tthis.entradas.delete(clave);\n\t\t\t\tpurgadas.push(clave);\n\t\t\t}\n\t\t}\n\n\t\tif (this.entradas.size > maxEntradas) {\n\t\t\tconst porAntiguedad = [...this.entradas].sort((a, b) => a[1].usadoEn - b[1].usadoEn);\n\t\t\tconst sobran = this.entradas.size - maxEntradas;\n\t\t\tfor (const [clave] of porAntiguedad.slice(0, sobran)) {\n\t\t\t\tthis.entradas.delete(clave);\n\t\t\t\tpurgadas.push(clave);\n\t\t\t}\n\t\t}\n\n\t\tif (purgadas.length > 0) this.sucio = true;\n\t\tfor (const clave of purgadas) this.olvidadas.add(clave);\n\t\treturn purgadas;\n\t}\n\n\t/**\n\t * Escribe fundiendo con lo que haya en disco. Las claves que este proceso ha\n\t * borrado a propósito se quitan de la fusión: sin eso, la fusión las\n\t * resucitaría desde la copia en disco de otro proceso y volveríamos a mandar\n\t * un id que ya sabemos muerto, o a guardar para siempre lo que purgamos.\n\t */\n\tasync volcar(olvidadas: Iterable<string> = []): Promise<void> {\n\t\tif (!this.sucio) return;\n\t\tlet enDisco = new Map<string, EntradaDeBlob>();\n\t\ttry {\n\t\t\tenDisco = leerFichero(await readFile(this.ruta, \"utf-8\"));\n\t\t} catch {\n\t\t\t// Sin fichero previo: la fusión es la identidad.\n\t\t}\n\t\tfor (const clave of this.olvidadas) enDisco.delete(clave);\n\t\tfor (const clave of olvidadas) enDisco.delete(clave);\n\t\tfor (const [clave, mia] of this.entradas) {\n\t\t\tconst suya = enDisco.get(clave);\n\t\t\tenDisco.set(clave, !suya || mia.usadoEn >= suya.usadoEn ? mia : suya);\n\t\t}\n\t\tconst doc: FicheroDeBlobs = { version: 1, entradas: Object.fromEntries(enDisco) };\n\t\tawait mkdir(dirname(this.ruta), { recursive: true });\n\t\tconst temporal = `${this.ruta}.${process.pid}.tmp`;\n\t\tawait writeFile(temporal, JSON.stringify(doc, null, \"\\t\"), \"utf-8\");\n\t\tawait rename(temporal, this.ruta);\n\t\tthis.entradas = enDisco;\n\t\tthis.sucio = false;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"almacen.js","sourceRoot":"","sources":["../../../src/core/blobs/almacen.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broker.d.ts","sourceRoot":"","sources":["../../../src/core/blobs/broker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,EAEN,KAAK,UAAU,EAEf,KAAK,KAAK,EACV,KAAK,eAAe,EAIpB,MAAM,gBAAgB,CAAC;AAExB,iFAAgF;AAChF,eAAO,MAAM,qBAAqB,QAAc,CAAC;AAEjD,MAAM,WAAW,aAAa;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,WAAW,GACpB;IACA,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,0EAAyE;IACzE,QAAQ,EAAE,aAAa,EAAE,CAAC;CACzB,GACD;IACA,MAAM,EAAE,gBAAgB,CAAC;IACzB,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC;CAChB,GACD;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1C,MAAM,WAAW,kBAAkB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,WAAW,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAChC,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,CAAC,EAAE,KAAK,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAQD,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAEzD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAG9D;AAED,qBAAa,aAAa;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoB;IAC9C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,2EAAwE;IACxE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,8EAA4E;IAC5E,OAAO,CAAC,eAAe,CAAmB;IAC1C,gCAAgC;IAChC,QAAQ,CAAC,UAAU;;;;MAA8D;IAEjF,YAAY,QAAQ,EAAE,gBAAgB,EAIrC;IAEK,QAAQ,CACb,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,eAAe,GAAG,SAAS,EACnC,UAAU,EAAE,UAAU,GAAG,SAAS,EAClC,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,kBAAkB,CAAC,CAmE7B;YAEa,cAAc;IAgD5B;;;;;OAKG;IACH,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAY5C;IAED,gBAAgB,IAAI,IAAI,CAEvB;IAED,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,OAAO;IAIT,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAE5B;CACD","sourcesContent":["/**\n * El broker: decide, para cada adjunto de una petición, si se sube, se\n * reutiliza un id que ya teníamos, o se deja en línea como siempre.\n *\n * Tres reglas que no son negociables, y por qué:\n *\n * 1. Nunca se rompe la conversación. Si la subida falla, si la credencial no\n * está, si el proveedor no contesta — el adjunto viaja en línea igual que\n * antes de que este módulo existiera. Este módulo solo puede AHORRAR; nunca\n * puede ser el motivo de que un turno no salga.\n *\n * 2. Un id que viene de una sesión anterior no se usa a ciegas. Se comprueba\n * UNA vez por proceso. Si el proveedor dice 404, se olvida y se resube; si\n * la red falla no sabemos nada, y \"no sé\" no es \"está muerto\": ese turno va\n * en línea y se vuelve a intentar en el siguiente.\n *\n * 3. El informe distingue tres cosas: \"no había nada que subir\", \"no puedo\n * subir y este es el motivo\" y \"lo he subido/reutilizado\". Un `[]` y un\n * `null` no significan lo mismo y no se mezclan nunca.\n */\n\nimport { createHash } from \"node:crypto\";\nimport type { AlmacenDeBlobs } from \"./almacen.ts\";\nimport { type BloqueBlob, claveDeRuta, localizarBlobs, reescribirBlobs } from \"./payload.ts\";\nimport {\n\ttype CapacidadDeBlobs,\n\ttype Credencial,\n\tcapacidadDeBlobs,\n\ttype Fetch,\n\ttype ModeloParaBlobs,\n\tpuedeSubir,\n\tsubirFichero,\n\tverificarFichero,\n} from \"./proveedor.ts\";\n\n/** 1 MiB. Por debajo de esto la subida cuesta más latencia de la que ahorra. */\nexport const MIN_BYTES_POR_DEFECTO = 1024 * 1024;\n\nexport interface OmisionDeBlob {\n\tbytes: number;\n\tmotivo: string;\n}\n\nexport type Diagnostico =\n\t| {\n\t\t\testado: \"listo\";\n\t\t\tsubidos: number;\n\t\t\treutilizados: number;\n\t\t\t/** Adjuntos que había pero no se pudieron referenciar, con su motivo. */\n\t\t\tomitidos: OmisionDeBlob[];\n\t }\n\t| {\n\t\t\testado: \"nada-que-subir\";\n\t\t\t/** Adjuntos vistos pero por debajo del umbral. */\n\t\t\tpequenos: number;\n\t }\n\t| { estado: \"no-puedo\"; motivo: string };\n\nexport interface ResultadoDeProceso {\n\tpayload: unknown;\n\tdiagnostico: Diagnostico;\n}\n\nexport interface OpcionesDeBroker {\n\talmacen: AlmacenDeBlobs;\n\tfetchImpl?: Fetch;\n\tminBytes?: number;\n}\n\ninterface IdEnviado {\n\tproveedor: string;\n\thash: string;\n\tid: string;\n}\n\nexport function hashDeContenido(datos: Uint8Array): string {\n\treturn createHash(\"sha256\").update(datos).digest(\"hex\");\n}\n\n/**\n * ¿Este estado HTTP se puede achacar a las referencias a fichero que acabamos\n * de mandar?\n *\n * 401, 403 y 429 quedan fuera: son credencial y cuota. Apagar el ahorro para el\n * resto del proceso en la primera racha de rate limit sería leer \"espera\" como\n * \"no puedes\", que es el defecto que este repositorio persigue. El resto de la\n * familia 4xx sí: un `file_id` que el proveedor no acepta sale por ahí, y\n * pagar una subida de más es más barato que repetir el fallo turno tras turno.\n *\n * Vive suelta y no dentro de la clase porque la usan los DOS caminos que apagan\n * la reescritura (`after_provider_response` y `message_end`); tenerlo duplicado\n * ya hizo que uno de los dos apagara con un 429.\n */\nexport function esRechazoDeReferencias(estado: number): boolean {\n\tif (estado < 400 || estado >= 500) return false;\n\treturn estado !== 401 && estado !== 403 && estado !== 429;\n}\n\nexport class BrokerDeBlobs {\n\tprivate readonly almacen: AlmacenDeBlobs;\n\t/**\n\t * `undefined` = usar el `fetch` global EN EL MOMENTO DE LA LLAMADA, no el\n\t * que hubiera al construir el broker. El despachador HTTP de Ada instala su\n\t * propio `globalThis.fetch` (proxy, timeouts) DESPUÉS de cargar las\n\t * extensiones; capturarlo en el constructor se saltaría esa configuración.\n\t */\n\tprivate readonly fetchImpl: Fetch | undefined;\n\tprivate readonly minBytes: number;\n\t/** Ids que este proceso ya sabe vivos (los subió él o los verificó). */\n\tprivate readonly verificados = new Set<string>();\n\t/** Referencias que viajaron en la última petición, para atribuir un 4xx. */\n\tprivate ultimosEnviados: IdEnviado[] = [];\n\t/** Contadores para `/blobs`. */\n\treadonly contadores = { subidas: 0, reutilizaciones: 0, resubidasPorRechazo: 0 };\n\n\tconstructor(opciones: OpcionesDeBroker) {\n\t\tthis.almacen = opciones.almacen;\n\t\tthis.fetchImpl = opciones.fetchImpl;\n\t\tthis.minBytes = opciones.minBytes ?? MIN_BYTES_POR_DEFECTO;\n\t}\n\n\tasync procesar(\n\t\tpayload: unknown,\n\t\tmodelo: ModeloParaBlobs | undefined,\n\t\tcredencial: Credencial | undefined,\n\t\tsignal?: AbortSignal,\n\t): Promise<ResultadoDeProceso> {\n\t\tthis.ultimosEnviados = [];\n\t\tconst capacidad = capacidadDeBlobs(modelo);\n\t\tif (!puedeSubir(capacidad)) {\n\t\t\treturn { payload, diagnostico: { estado: \"no-puedo\", motivo: capacidad.motivo } };\n\t\t}\n\t\tif (!credencial || (!credencial.apiKey && !credencial.cabeceras)) {\n\t\t\treturn {\n\t\t\t\tpayload,\n\t\t\t\tdiagnostico: { estado: \"no-puedo\", motivo: `sin credencial resuelta para \"${capacidad.proveedor}\"` },\n\t\t\t};\n\t\t}\n\n\t\tconst candidatos = localizarBlobs(payload, modelo?.api ?? \"\");\n\t\tif (candidatos === null) {\n\t\t\t// El payload no tiene la forma que esperábamos para esta API. Decirlo,\n\t\t\t// no callarlo: si upstream cambia la forma, esto se ve en `/blobs`.\n\t\t\treturn {\n\t\t\t\tpayload,\n\t\t\t\tdiagnostico: { estado: \"no-puedo\", motivo: `el payload de \"${modelo?.api}\" no tiene la forma esperada` },\n\t\t\t};\n\t\t}\n\n\t\tconst grandes = candidatos.filter((bloque) => bloque.bytes >= this.minBytes);\n\t\tif (grandes.length === 0) {\n\t\t\treturn { payload, diagnostico: { estado: \"nada-que-subir\", pequenos: candidatos.length } };\n\t\t}\n\n\t\tconst ids = new Map<string, string>();\n\t\tconst omitidos: OmisionDeBlob[] = [];\n\t\tlet subidos = 0;\n\t\tlet reutilizados = 0;\n\t\t/** Dentro de una misma petición, el mismo contenido se resuelve una vez. */\n\t\tconst resueltosAqui = new Map<string, string>();\n\n\t\tfor (const bloque of grandes) {\n\t\t\tconst datos = Buffer.from(bloque.base64, \"base64\");\n\t\t\tconst hash = hashDeContenido(datos);\n\n\t\t\tconst yaResuelto = resueltosAqui.get(hash);\n\t\t\tif (yaResuelto) {\n\t\t\t\tids.set(claveDeRuta(bloque.ruta), yaResuelto);\n\t\t\t\treutilizados++;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst resultado = await this.referenciaPara(capacidad, credencial, hash, datos, bloque, signal);\n\t\t\tif (!resultado.ok) {\n\t\t\t\tomitidos.push({ bytes: bloque.bytes, motivo: resultado.motivo });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tresueltosAqui.set(hash, resultado.id);\n\t\t\tids.set(claveDeRuta(bloque.ruta), resultado.id);\n\t\t\tthis.ultimosEnviados.push({ proveedor: capacidad.proveedor, hash, id: resultado.id });\n\t\t\tif (resultado.nueva) {\n\t\t\t\tsubidos++;\n\t\t\t\tthis.contadores.subidas++;\n\t\t\t} else {\n\t\t\t\treutilizados++;\n\t\t\t\tthis.contadores.reutilizaciones++;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tpayload: reescribirBlobs(payload, modelo?.api ?? \"\", ids),\n\t\t\tdiagnostico: { estado: \"listo\", subidos, reutilizados, omitidos },\n\t\t};\n\t}\n\n\tprivate async referenciaPara(\n\t\tcapacidad: CapacidadDeBlobs,\n\t\tcredencial: Credencial,\n\t\thash: string,\n\t\tdatos: Uint8Array,\n\t\tbloque: BloqueBlob,\n\t\tsignal?: AbortSignal,\n\t): Promise<{ ok: true; id: string; nueva: boolean } | { ok: false; motivo: string }> {\n\t\tconst entrada = this.almacen.leer(capacidad.proveedor, hash);\n\t\tif (entrada) {\n\t\t\tif (this.verificados.has(entrada.id)) return { ok: true, id: entrada.id, nueva: false };\n\t\t\tconst estado = await verificarFichero(capacidad, credencial, entrada.id, this.red(), signal);\n\t\t\tif (estado === \"vivo\") {\n\t\t\t\tthis.verificados.add(entrada.id);\n\t\t\t\treturn { ok: true, id: entrada.id, nueva: false };\n\t\t\t}\n\t\t\tif (estado === \"muerto\") {\n\t\t\t\tthis.olvidar(capacidad.proveedor, hash);\n\t\t\t\tthis.contadores.resubidasPorRechazo++;\n\t\t\t\t// Cae a la subida de abajo: un id caducado se resube, no se falla.\n\t\t\t} else {\n\t\t\t\t// \"desconocido\": no sabemos si sirve. Este turno va en línea.\n\t\t\t\treturn { ok: false, motivo: `no se pudo verificar el id ${entrada.id}; el adjunto va en línea` };\n\t\t\t}\n\t\t}\n\n\t\tconst nombre = `ada-${hash.slice(0, 16)}.${extensionDe(bloque.mime)}`;\n\t\tconst subida = await subirFichero(\n\t\t\tcapacidad,\n\t\t\tcredencial,\n\t\t\t{ datos, mime: bloque.mime, nombre },\n\t\t\tthis.red(),\n\t\t\tsignal,\n\t\t);\n\t\tif (!subida.ok) return { ok: false, motivo: subida.motivo };\n\n\t\tconst ahora = Date.now();\n\t\tthis.almacen.guardar(capacidad.proveedor, hash, {\n\t\t\tid: subida.id,\n\t\t\tbytes: bloque.bytes,\n\t\t\tmime: bloque.mime,\n\t\t\tsubidoEn: ahora,\n\t\t\tusadoEn: ahora,\n\t\t});\n\t\tthis.verificados.add(subida.id);\n\t\treturn { ok: true, id: subida.id, nueva: true };\n\t}\n\n\t/**\n\t * El proveedor rechazó la petición justo después de que le mandáramos\n\t * referencias. No sabemos si fue por ellas —el evento no trae cuerpo—, pero\n\t * un id inválido es la causa más cara de descartar: se olvidan y el turno\n\t * siguiente resube. Como mucho se paga una subida de más.\n\t */\n\trechazoDelProveedor(estado: number): string[] {\n\t\tif (!esRechazoDeReferencias(estado)) return [];\n\t\tif (this.ultimosEnviados.length === 0) return [];\n\t\tconst olvidados: string[] = [];\n\t\tfor (const enviado of this.ultimosEnviados) {\n\t\t\tthis.olvidar(enviado.proveedor, enviado.hash);\n\t\t\tthis.verificados.delete(enviado.id);\n\t\t\tthis.contadores.resubidasPorRechazo++;\n\t\t\tolvidados.push(enviado.id);\n\t\t}\n\t\tthis.ultimosEnviados = [];\n\t\treturn olvidados;\n\t}\n\n\tpeticionCorrecta(): void {\n\t\tthis.ultimosEnviados = [];\n\t}\n\n\tprivate red(): Fetch {\n\t\treturn this.fetchImpl ?? globalThis.fetch;\n\t}\n\n\tprivate olvidar(proveedor: string, hash: string): void {\n\t\tthis.almacen.olvidar(proveedor, hash);\n\t}\n\n\tasync volcar(): Promise<void> {\n\t\tawait this.almacen.volcar();\n\t}\n}\n\nfunction extensionDe(mime: string): string {\n\tconst cola = mime.split(\"/\")[1] ?? \"bin\";\n\treturn cola.replace(/[^a-z0-9]/gi, \"\") || \"bin\";\n}\n"]}
|
|
1
|
+
{"version":3,"file":"broker.d.ts","sourceRoot":"","sources":["../../../src/core/blobs/broker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,EAEN,KAAK,UAAU,EAEf,KAAK,KAAK,EACV,KAAK,eAAe,EAIpB,MAAM,gBAAgB,CAAC;AAExB,gFAAgF;AAChF,eAAO,MAAM,qBAAqB,QAAc,CAAC;AAEjD,MAAM,WAAW,aAAa;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,WAAW,GACpB;IACA,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,yEAAyE;IACzE,QAAQ,EAAE,aAAa,EAAE,CAAC;CACzB,GACD;IACA,MAAM,EAAE,gBAAgB,CAAC;IACzB,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC;CAChB,GACD;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1C,MAAM,WAAW,kBAAkB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,WAAW,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAChC,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,CAAC,EAAE,KAAK,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAQD,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAEzD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAG9D;AAED,qBAAa,aAAa;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoB;IAC9C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,wEAAwE;IACxE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,4EAA4E;IAC5E,OAAO,CAAC,eAAe,CAAmB;IAC1C,gCAAgC;IAChC,QAAQ,CAAC,UAAU;;;;MAA8D;gBAErE,QAAQ,EAAE,gBAAgB;IAMhC,QAAQ,CACb,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,eAAe,GAAG,SAAS,EACnC,UAAU,EAAE,UAAU,GAAG,SAAS,EAClC,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,kBAAkB,CAAC;YAqEhB,cAAc;IAgD5B;;;;;OAKG;IACH,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IAc7C,gBAAgB,IAAI,IAAI;IAIxB,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,OAAO;IAIT,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGhD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broker.js","sourceRoot":"","sources":["../../../src/core/blobs/broker.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * El broker: decide, para cada adjunto de una petición, si se sube, se\n * reutiliza un id que ya teníamos, o se deja en línea como siempre.\n *\n * Tres reglas que no son negociables, y por qué:\n *\n * 1. Nunca se rompe la conversación. Si la subida falla, si la credencial no\n * está, si el proveedor no contesta — el adjunto viaja en línea igual que\n * antes de que este módulo existiera. Este módulo solo puede AHORRAR; nunca\n * puede ser el motivo de que un turno no salga.\n *\n * 2. Un id que viene de una sesión anterior no se usa a ciegas. Se comprueba\n * UNA vez por proceso. Si el proveedor dice 404, se olvida y se resube; si\n * la red falla no sabemos nada, y \"no sé\" no es \"está muerto\": ese turno va\n * en línea y se vuelve a intentar en el siguiente.\n *\n * 3. El informe distingue tres cosas: \"no había nada que subir\", \"no puedo\n * subir y este es el motivo\" y \"lo he subido/reutilizado\". Un `[]` y un\n * `null` no significan lo mismo y no se mezclan nunca.\n */\n\nimport { createHash } from \"node:crypto\";\nimport type { AlmacenDeBlobs } from \"./almacen.ts\";\nimport { type BloqueBlob, claveDeRuta, localizarBlobs, reescribirBlobs } from \"./payload.ts\";\nimport {\n\ttype CapacidadDeBlobs,\n\ttype Credencial,\n\tcapacidadDeBlobs,\n\ttype Fetch,\n\ttype ModeloParaBlobs,\n\tpuedeSubir,\n\tsubirFichero,\n\tverificarFichero,\n} from \"./proveedor.ts\";\n\n/** 1 MiB. Por debajo de esto la subida cuesta más latencia de la que ahorra. */\nexport const MIN_BYTES_POR_DEFECTO = 1024 * 1024;\n\nexport interface OmisionDeBlob {\n\tbytes: number;\n\tmotivo: string;\n}\n\nexport type Diagnostico =\n\t| {\n\t\t\testado: \"listo\";\n\t\t\tsubidos: number;\n\t\t\treutilizados: number;\n\t\t\t/** Adjuntos que había pero no se pudieron referenciar, con su motivo. */\n\t\t\tomitidos: OmisionDeBlob[];\n\t }\n\t| {\n\t\t\testado: \"nada-que-subir\";\n\t\t\t/** Adjuntos vistos pero por debajo del umbral. */\n\t\t\tpequenos: number;\n\t }\n\t| { estado: \"no-puedo\"; motivo: string };\n\nexport interface ResultadoDeProceso {\n\tpayload: unknown;\n\tdiagnostico: Diagnostico;\n}\n\nexport interface OpcionesDeBroker {\n\talmacen: AlmacenDeBlobs;\n\tfetchImpl?: Fetch;\n\tminBytes?: number;\n}\n\ninterface IdEnviado {\n\tproveedor: string;\n\thash: string;\n\tid: string;\n}\n\nexport function hashDeContenido(datos: Uint8Array): string {\n\treturn createHash(\"sha256\").update(datos).digest(\"hex\");\n}\n\n/**\n * ¿Este estado HTTP se puede achacar a las referencias a fichero que acabamos\n * de mandar?\n *\n * 401, 403 y 429 quedan fuera: son credencial y cuota. Apagar el ahorro para el\n * resto del proceso en la primera racha de rate limit sería leer \"espera\" como\n * \"no puedes\", que es el defecto que este repositorio persigue. El resto de la\n * familia 4xx sí: un `file_id` que el proveedor no acepta sale por ahí, y\n * pagar una subida de más es más barato que repetir el fallo turno tras turno.\n *\n * Vive suelta y no dentro de la clase porque la usan los DOS caminos que apagan\n * la reescritura (`after_provider_response` y `message_end`); tenerlo duplicado\n * ya hizo que uno de los dos apagara con un 429.\n */\nexport function esRechazoDeReferencias(estado: number): boolean {\n\tif (estado < 400 || estado >= 500) return false;\n\treturn estado !== 401 && estado !== 403 && estado !== 429;\n}\n\nexport class BrokerDeBlobs {\n\tprivate readonly almacen: AlmacenDeBlobs;\n\t/**\n\t * `undefined` = usar el `fetch` global EN EL MOMENTO DE LA LLAMADA, no el\n\t * que hubiera al construir el broker. El despachador HTTP de Ada instala su\n\t * propio `globalThis.fetch` (proxy, timeouts) DESPUÉS de cargar las\n\t * extensiones; capturarlo en el constructor se saltaría esa configuración.\n\t */\n\tprivate readonly fetchImpl: Fetch | undefined;\n\tprivate readonly minBytes: number;\n\t/** Ids que este proceso ya sabe vivos (los subió él o los verificó). */\n\tprivate readonly verificados = new Set<string>();\n\t/** Referencias que viajaron en la última petición, para atribuir un 4xx. */\n\tprivate ultimosEnviados: IdEnviado[] = [];\n\t/** Contadores para `/blobs`. */\n\treadonly contadores = { subidas: 0, reutilizaciones: 0, resubidasPorRechazo: 0 };\n\n\tconstructor(opciones: OpcionesDeBroker) {\n\t\tthis.almacen = opciones.almacen;\n\t\tthis.fetchImpl = opciones.fetchImpl;\n\t\tthis.minBytes = opciones.minBytes ?? MIN_BYTES_POR_DEFECTO;\n\t}\n\n\tasync procesar(\n\t\tpayload: unknown,\n\t\tmodelo: ModeloParaBlobs | undefined,\n\t\tcredencial: Credencial | undefined,\n\t\tsignal?: AbortSignal,\n\t): Promise<ResultadoDeProceso> {\n\t\tthis.ultimosEnviados = [];\n\t\tconst capacidad = capacidadDeBlobs(modelo);\n\t\tif (!puedeSubir(capacidad)) {\n\t\t\treturn { payload, diagnostico: { estado: \"no-puedo\", motivo: capacidad.motivo } };\n\t\t}\n\t\tif (!credencial || (!credencial.apiKey && !credencial.cabeceras)) {\n\t\t\treturn {\n\t\t\t\tpayload,\n\t\t\t\tdiagnostico: { estado: \"no-puedo\", motivo: `sin credencial resuelta para \"${capacidad.proveedor}\"` },\n\t\t\t};\n\t\t}\n\n\t\tconst candidatos = localizarBlobs(payload, modelo?.api ?? \"\");\n\t\tif (candidatos === null) {\n\t\t\t// El payload no tiene la forma que esperábamos para esta API. Decirlo,\n\t\t\t// no callarlo: si upstream cambia la forma, esto se ve en `/blobs`.\n\t\t\treturn {\n\t\t\t\tpayload,\n\t\t\t\tdiagnostico: { estado: \"no-puedo\", motivo: `el payload de \"${modelo?.api}\" no tiene la forma esperada` },\n\t\t\t};\n\t\t}\n\n\t\tconst grandes = candidatos.filter((bloque) => bloque.bytes >= this.minBytes);\n\t\tif (grandes.length === 0) {\n\t\t\treturn { payload, diagnostico: { estado: \"nada-que-subir\", pequenos: candidatos.length } };\n\t\t}\n\n\t\tconst ids = new Map<string, string>();\n\t\tconst omitidos: OmisionDeBlob[] = [];\n\t\tlet subidos = 0;\n\t\tlet reutilizados = 0;\n\t\t/** Dentro de una misma petición, el mismo contenido se resuelve una vez. */\n\t\tconst resueltosAqui = new Map<string, string>();\n\n\t\tfor (const bloque of grandes) {\n\t\t\tconst datos = Buffer.from(bloque.base64, \"base64\");\n\t\t\tconst hash = hashDeContenido(datos);\n\n\t\t\tconst yaResuelto = resueltosAqui.get(hash);\n\t\t\tif (yaResuelto) {\n\t\t\t\tids.set(claveDeRuta(bloque.ruta), yaResuelto);\n\t\t\t\treutilizados++;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst resultado = await this.referenciaPara(capacidad, credencial, hash, datos, bloque, signal);\n\t\t\tif (!resultado.ok) {\n\t\t\t\tomitidos.push({ bytes: bloque.bytes, motivo: resultado.motivo });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tresueltosAqui.set(hash, resultado.id);\n\t\t\tids.set(claveDeRuta(bloque.ruta), resultado.id);\n\t\t\tthis.ultimosEnviados.push({ proveedor: capacidad.proveedor, hash, id: resultado.id });\n\t\t\tif (resultado.nueva) {\n\t\t\t\tsubidos++;\n\t\t\t\tthis.contadores.subidas++;\n\t\t\t} else {\n\t\t\t\treutilizados++;\n\t\t\t\tthis.contadores.reutilizaciones++;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tpayload: reescribirBlobs(payload, modelo?.api ?? \"\", ids),\n\t\t\tdiagnostico: { estado: \"listo\", subidos, reutilizados, omitidos },\n\t\t};\n\t}\n\n\tprivate async referenciaPara(\n\t\tcapacidad: CapacidadDeBlobs,\n\t\tcredencial: Credencial,\n\t\thash: string,\n\t\tdatos: Uint8Array,\n\t\tbloque: BloqueBlob,\n\t\tsignal?: AbortSignal,\n\t): Promise<{ ok: true; id: string; nueva: boolean } | { ok: false; motivo: string }> {\n\t\tconst entrada = this.almacen.leer(capacidad.proveedor, hash);\n\t\tif (entrada) {\n\t\t\tif (this.verificados.has(entrada.id)) return { ok: true, id: entrada.id, nueva: false };\n\t\t\tconst estado = await verificarFichero(capacidad, credencial, entrada.id, this.red(), signal);\n\t\t\tif (estado === \"vivo\") {\n\t\t\t\tthis.verificados.add(entrada.id);\n\t\t\t\treturn { ok: true, id: entrada.id, nueva: false };\n\t\t\t}\n\t\t\tif (estado === \"muerto\") {\n\t\t\t\tthis.olvidar(capacidad.proveedor, hash);\n\t\t\t\tthis.contadores.resubidasPorRechazo++;\n\t\t\t\t// Cae a la subida de abajo: un id caducado se resube, no se falla.\n\t\t\t} else {\n\t\t\t\t// \"desconocido\": no sabemos si sirve. Este turno va en línea.\n\t\t\t\treturn { ok: false, motivo: `no se pudo verificar el id ${entrada.id}; el adjunto va en línea` };\n\t\t\t}\n\t\t}\n\n\t\tconst nombre = `ada-${hash.slice(0, 16)}.${extensionDe(bloque.mime)}`;\n\t\tconst subida = await subirFichero(\n\t\t\tcapacidad,\n\t\t\tcredencial,\n\t\t\t{ datos, mime: bloque.mime, nombre },\n\t\t\tthis.red(),\n\t\t\tsignal,\n\t\t);\n\t\tif (!subida.ok) return { ok: false, motivo: subida.motivo };\n\n\t\tconst ahora = Date.now();\n\t\tthis.almacen.guardar(capacidad.proveedor, hash, {\n\t\t\tid: subida.id,\n\t\t\tbytes: bloque.bytes,\n\t\t\tmime: bloque.mime,\n\t\t\tsubidoEn: ahora,\n\t\t\tusadoEn: ahora,\n\t\t});\n\t\tthis.verificados.add(subida.id);\n\t\treturn { ok: true, id: subida.id, nueva: true };\n\t}\n\n\t/**\n\t * El proveedor rechazó la petición justo después de que le mandáramos\n\t * referencias. No sabemos si fue por ellas —el evento no trae cuerpo—, pero\n\t * un id inválido es la causa más cara de descartar: se olvidan y el turno\n\t * siguiente resube. Como mucho se paga una subida de más.\n\t */\n\trechazoDelProveedor(estado: number): string[] {\n\t\tif (!esRechazoDeReferencias(estado)) return [];\n\t\tif (this.ultimosEnviados.length === 0) return [];\n\t\tconst olvidados: string[] = [];\n\t\tfor (const enviado of this.ultimosEnviados) {\n\t\t\tthis.olvidar(enviado.proveedor, enviado.hash);\n\t\t\tthis.verificados.delete(enviado.id);\n\t\t\tthis.contadores.resubidasPorRechazo++;\n\t\t\tolvidados.push(enviado.id);\n\t\t}\n\t\tthis.ultimosEnviados = [];\n\t\treturn olvidados;\n\t}\n\n\tpeticionCorrecta(): void {\n\t\tthis.ultimosEnviados = [];\n\t}\n\n\tprivate red(): Fetch {\n\t\treturn this.fetchImpl ?? globalThis.fetch;\n\t}\n\n\tprivate olvidar(proveedor: string, hash: string): void {\n\t\tthis.almacen.olvidar(proveedor, hash);\n\t}\n\n\tasync volcar(): Promise<void> {\n\t\tawait this.almacen.volcar();\n\t}\n}\n\nfunction extensionDe(mime: string): string {\n\tconst cola = mime.split(\"/\")[1] ?? \"bin\";\n\treturn cola.replace(/[^a-z0-9]/gi, \"\") || \"bin\";\n}\n"]}
|
|
1
|
+
{"version":3,"file":"broker.js","sourceRoot":"","sources":["../../../src/core/blobs/broker.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,6 +38,7 @@ export type { Diagnostico } from "./broker.ts";
|
|
|
38
38
|
export { BrokerDeBlobs, esRechazoDeReferencias, hashDeContenido, MIN_BYTES_POR_DEFECTO } from "./broker.ts";
|
|
39
39
|
export { bytesDeBase64, localizarBlobs, reescribirBlobs } from "./payload.ts";
|
|
40
40
|
export { capacidadDeBlobs, puedeSubir } from "./proveedor.ts";
|
|
41
|
+
export { anotarJournal, CUARENTENA_MS, Cuarentena, ceroPorCero, type EntradaJournal, FALLOS_PARA_CUARENTENA, fileIo, type OpcionesDeCadena, subirConCadena, TIMEOUT_SUBIDA_MS, tmpfilesOrg, UPLOADERS_PUBLICOS, type Uploader, type ViaDeSubida, } from "./uploaders.ts";
|
|
41
42
|
export interface OpcionesDeBlobs {
|
|
42
43
|
agentDir: string;
|
|
43
44
|
disabled?: boolean;
|
|
@@ -1 +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"]}
|
|
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;AAC9D,OAAO,EACN,aAAa,EACb,aAAa,EACb,UAAU,EACV,WAAW,EACX,KAAK,cAAc,EACnB,sBAAsB,EACtB,MAAM,EACN,KAAK,gBAAgB,EACrB,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,kBAAkB,EAClB,KAAK,QAAQ,EACb,KAAK,WAAW,GAChB,MAAM,gBAAgB,CAAC;AAExB,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,8EAA8E;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,IACtD,IAAI,YAAY,KAAG,IAAI,CAwH/B"}
|
package/dist/core/blobs/index.js
CHANGED
|
@@ -37,6 +37,7 @@ export { AlmacenDeBlobs } from "./almacen.js";
|
|
|
37
37
|
export { BrokerDeBlobs, esRechazoDeReferencias, hashDeContenido, MIN_BYTES_POR_DEFECTO } from "./broker.js";
|
|
38
38
|
export { bytesDeBase64, localizarBlobs, reescribirBlobs } from "./payload.js";
|
|
39
39
|
export { capacidadDeBlobs, puedeSubir } from "./proveedor.js";
|
|
40
|
+
export { anotarJournal, CUARENTENA_MS, Cuarentena, ceroPorCero, FALLOS_PARA_CUARENTENA, fileIo, subirConCadena, TIMEOUT_SUBIDA_MS, tmpfilesOrg, UPLOADERS_PUBLICOS, } from "./uploaders.js";
|
|
40
41
|
export function describirDiagnostico(d) {
|
|
41
42
|
if (!d)
|
|
42
43
|
return "todavía no ha salido ninguna petición en esta sesión.";
|
|
@@ -1 +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"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/blobs/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +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"]}
|
|
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,yCAAyC;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,yDAAyD;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"}
|