@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,1182 @@
|
|
|
1
|
+
import { buildHashBase, buildKeyedReplacementRun, buildPlaceholder, defaultPlaceholderKey, inferCaseHint, lookupFriendlyPlaceholderAlias, MIN_OBFUSCATE_SECRET_LEN, PLACEHOLDER_RE, placeholderWithoutFriendlyName, resumePlaceholderScanAfterRejectedCandidate, sanitizedLabelCollidesWithSecret, sanitizeForCollisionCheck, sanitizeSecretFriendlyName, } from "./placeholder.js";
|
|
2
|
+
import { buildReplaceRegexScan, countOutsidePlaceholderRanges, deepWalkStrings, deobfuscateGeneratedPlaceholderRanges, extendPastAdjacentPlaceholders, firstOutsidePlaceholderRange, mapReplaceRegexMatch, outsidePlaceholderRangesAnyIndependentlyMatch, placeholderInnerText, redactWithFixedReplacementOutsidePlaceholders, replaceRange, textOutsidePlaceholderRanges, trailingOutsidePreservedPlaceholderChunk, transformOutsidePlaceholdersTracked, } from "./placeholder-scan.js";
|
|
3
|
+
import { compileSecretRegex } from "./regex.js";
|
|
4
|
+
import { ensureDistinctReplacement, findNonMatchingReplacement, generateDeterministicReplacement, regexHasUnresolvableShortMatchFallback, regexRematchesInContext, } from "./replacement.js";
|
|
5
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
6
|
+
// SecretObfuscator
|
|
7
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
8
|
+
export class SecretObfuscator {
|
|
9
|
+
/** Plain secrets: secret → index (known at construction) */
|
|
10
|
+
#plainMappings = new Map();
|
|
11
|
+
/** Regex entries (patterns compiled at construction) */
|
|
12
|
+
#regexEntries = [];
|
|
13
|
+
/** All obfuscate-mode mappings: index → { secret, placeholder } */
|
|
14
|
+
#obfuscateMappings = new Map();
|
|
15
|
+
/** Replace-mode plain mappings: secret → replacement */
|
|
16
|
+
#replaceMappings = new Map();
|
|
17
|
+
/** Reverse lookup for LIVE deobfuscation (provider output, tool-call args):
|
|
18
|
+
* keyed placeholder → secret plus recursion policy. Only placeholders this
|
|
19
|
+
* obfuscator generated under the per-install key (and their friendly-name-
|
|
20
|
+
* independent aliases) live here, so a prompt-injected model cannot synthesize
|
|
21
|
+
* one without the key. */
|
|
22
|
+
#deobfuscateMap = new Map();
|
|
23
|
+
/** Exact placeholder tokens generated by this obfuscator revision (no aliases). */
|
|
24
|
+
#generatedPlaceholders = new Set();
|
|
25
|
+
/** Deterministic replace chunks emitted by this obfuscator, used to keep re-obfuscation idempotent. */
|
|
26
|
+
#generatedReplaceChunks = new Set();
|
|
27
|
+
/** Every configured plain-secret literal value (both obfuscate and replace
|
|
28
|
+
* mode), collected before any placeholder is minted. A generated placeholder
|
|
29
|
+
* must never equal one of these — otherwise a later-processed secret whose
|
|
30
|
+
* raw value happens to equal an earlier secret's placeholder would be
|
|
31
|
+
* indistinguishable from that placeholder on the NEXT obfuscate() pass (its
|
|
32
|
+
* own plain-secret redaction already ran, sorted by length, before the
|
|
33
|
+
* placeholder existed) and would survive verbatim in provider-visible text. */
|
|
34
|
+
#configuredSecretValues = new Set();
|
|
35
|
+
/** Regex values seen in the current obfuscate input, used to keep friendly labels from exposing normalized matches that are discovered later in the same pass. */
|
|
36
|
+
#currentRegexSecretValues = new Set();
|
|
37
|
+
/** Placeholder base-key (exact value for :M, case-folded otherwise) → base hash. */
|
|
38
|
+
#placeholderBaseByKey = new Map();
|
|
39
|
+
/** Placeholder base hash → owner key, used to avoid ambiguous placeholders. */
|
|
40
|
+
#placeholderBaseOwners = new Map();
|
|
41
|
+
/** Next available index for regex match discoveries */
|
|
42
|
+
#nextIndex;
|
|
43
|
+
/** Whether any secrets were configured */
|
|
44
|
+
#hasAny;
|
|
45
|
+
/**
|
|
46
|
+
* Private per-install (or per-process) key for the keyed placeholder digest.
|
|
47
|
+
* Resolved lazily when the constructor received a key PROVIDER: the first
|
|
48
|
+
* placeholder mint or keyed fallback marker triggers resolution, so callers
|
|
49
|
+
* can defer persisting `secret-placeholder.key` until a dynamic regex entry
|
|
50
|
+
* actually matches session content.
|
|
51
|
+
*/
|
|
52
|
+
#key;
|
|
53
|
+
#keyProvider;
|
|
54
|
+
constructor(entries, key = defaultPlaceholderKey()) {
|
|
55
|
+
if (typeof key === "function") {
|
|
56
|
+
this.#keyProvider = key;
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
this.#setPlaceholderKey(key);
|
|
60
|
+
}
|
|
61
|
+
// Collect every configured plain-secret literal AND compile every regex
|
|
62
|
+
// entry BEFORE minting any placeholder below, so a placeholder's friendly
|
|
63
|
+
// name (checked against both in `#createPlaceholder`) can never embed a
|
|
64
|
+
// LATER entry's raw value or regex coverage, regardless of entries[]
|
|
65
|
+
// order — same reasoning as the base-collision guard below, extended to
|
|
66
|
+
// the friendly-name collision guard.
|
|
67
|
+
for (const entry of entries) {
|
|
68
|
+
if (entry.type === "plain") {
|
|
69
|
+
this.#configuredSecretValues.add(entry.content);
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
try {
|
|
73
|
+
const regex = compileSecretRegex(entry.content, entry.flags);
|
|
74
|
+
const mode = entry.mode ?? "obfuscate";
|
|
75
|
+
// A default (no custom `replacement`) replace-mode regex that can
|
|
76
|
+
// never redact a 1-2 char match distinctly from itself (see
|
|
77
|
+
// `regexHasUnresolvableShortMatchFallback`) is dropped rather than
|
|
78
|
+
// risk a real secret round-tripping unredacted; `secrets/index.ts`
|
|
79
|
+
// warns loudly for the `secrets.yml`-loaded path — this is the
|
|
80
|
+
// silent backstop for direct construction.
|
|
81
|
+
if (mode === "replace" &&
|
|
82
|
+
entry.replacement === undefined &&
|
|
83
|
+
regexHasUnresolvableShortMatchFallback(regex)) {
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
this.#regexEntries.push({
|
|
87
|
+
regex,
|
|
88
|
+
mode,
|
|
89
|
+
replacement: entry.replacement,
|
|
90
|
+
friendlyName: entry.friendlyName,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
// Invalid regex — skip silently (validation happens at load time)
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
let index = 0;
|
|
98
|
+
let hasRealSec = this.#regexEntries.length > 0;
|
|
99
|
+
for (const entry of entries) {
|
|
100
|
+
if (entry.type !== "plain")
|
|
101
|
+
continue;
|
|
102
|
+
const mode = entry.mode ?? "obfuscate";
|
|
103
|
+
if (mode === "obfuscate") {
|
|
104
|
+
if (entry.content.length < MIN_OBFUSCATE_SECRET_LEN) {
|
|
105
|
+
// Tone down short plain secret obfuscation to avoid false matches on small words like "esp".
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
const placeholder = this.#createPlaceholder(entry.content, entry.friendlyName);
|
|
109
|
+
this.#plainMappings.set(entry.content, index);
|
|
110
|
+
this.#obfuscateMappings.set(index, { secret: entry.content, placeholder });
|
|
111
|
+
this.#generatedPlaceholders.add(placeholder);
|
|
112
|
+
index++;
|
|
113
|
+
hasRealSec = true;
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
// replace mode
|
|
117
|
+
const replacement = entry.replacement ?? this.#generateSecretReplacement(entry.content);
|
|
118
|
+
this.#replaceMappings.set(entry.content, replacement);
|
|
119
|
+
hasRealSec = true;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
this.#nextIndex = index;
|
|
123
|
+
this.#hasAny = hasRealSec;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* The keyed-hash key makes obfuscate-mode placeholder bases un-dictionaryable,
|
|
127
|
+
* but it can be persisted in a user-readable file (`secret-placeholder.key`).
|
|
128
|
+
* A prompt-injected tool read (read/bash) could otherwise surface it to the
|
|
129
|
+
* provider verbatim and undo that protection, so redact the key itself from
|
|
130
|
+
* obfuscated (provider-visible) output as a one-way secret.
|
|
131
|
+
*/
|
|
132
|
+
#setPlaceholderKey(key) {
|
|
133
|
+
this.#key = key;
|
|
134
|
+
this.#replaceMappings.set(key, this.#generateSecretReplacement(key));
|
|
135
|
+
this.#configuredSecretValues.add(key);
|
|
136
|
+
}
|
|
137
|
+
/** Resolve the placeholder key once, minting its self-redaction on first use. */
|
|
138
|
+
#getKey() {
|
|
139
|
+
let key = this.#key;
|
|
140
|
+
if (key === undefined) {
|
|
141
|
+
key = this.#keyProvider?.() ?? defaultPlaceholderKey();
|
|
142
|
+
this.#keyProvider = undefined;
|
|
143
|
+
this.#setPlaceholderKey(key);
|
|
144
|
+
}
|
|
145
|
+
return key;
|
|
146
|
+
}
|
|
147
|
+
/** Whether this pass will mint a keyed placeholder from a regex match. */
|
|
148
|
+
#willMintRegexPlaceholder(secretValues) {
|
|
149
|
+
for (const entry of this.#regexEntries) {
|
|
150
|
+
if (entry.mode !== "obfuscate")
|
|
151
|
+
continue;
|
|
152
|
+
for (const value of secretValues) {
|
|
153
|
+
entry.regex.lastIndex = 0;
|
|
154
|
+
const matches = entry.regex.test(value);
|
|
155
|
+
entry.regex.lastIndex = 0;
|
|
156
|
+
if (matches)
|
|
157
|
+
return true;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
hasSecrets() {
|
|
163
|
+
return this.#hasAny;
|
|
164
|
+
}
|
|
165
|
+
/** Obfuscate all secrets in text. Bidirectional placeholders for obfuscate mode, one-way for replace. */
|
|
166
|
+
obfuscate(text, sharedRegexSecretValues) {
|
|
167
|
+
if (!this.#hasAny)
|
|
168
|
+
return text;
|
|
169
|
+
this.#currentRegexSecretValues = this.collectRegexSecretValuesForObfuscation(text);
|
|
170
|
+
for (const secretValue of sharedRegexSecretValues ?? []) {
|
|
171
|
+
this.#currentRegexSecretValues.add(secretValue);
|
|
172
|
+
}
|
|
173
|
+
// Resolve a lazy key before the replace phase whenever this pass will mint
|
|
174
|
+
// a regex placeholder. The key registers itself as a replace-mode secret;
|
|
175
|
+
// resolving it later, while processing the regex match, would expose key
|
|
176
|
+
// bytes already present in this same provider-visible input.
|
|
177
|
+
if (this.#keyProvider !== undefined && this.#willMintRegexPlaceholder(this.#currentRegexSecretValues)) {
|
|
178
|
+
this.#getKey();
|
|
179
|
+
}
|
|
180
|
+
let result = text;
|
|
181
|
+
// `origin` runs parallel to `result` (one tag char per result char): "I" for
|
|
182
|
+
// bytes carried from the INPUT (placeholders from a PRIOR obfuscate() call)
|
|
183
|
+
// and "F" for bytes this call freshly inserted. The SDK obfuscates messages
|
|
184
|
+
// in both convertToLlm and transformProviderContext, and prior-turn messages
|
|
185
|
+
// re-enter every turn, so obfuscate() must be a fixed point: a regex must not
|
|
186
|
+
// re-redact around a placeholder that arrived in the input (which would
|
|
187
|
+
// corrupt a prior replacement marker, e.g. REDACTED -> REDACTEDDACTED).
|
|
188
|
+
// Tracking by RANGE (not token value) keeps a fresh placeholder that happens
|
|
189
|
+
// to equal a prior one (same secret seen raw again) eligible for cross-match.
|
|
190
|
+
let origin = "I".repeat(text.length);
|
|
191
|
+
// 1. Process replace-mode plain secrets
|
|
192
|
+
for (const [secret, replacement] of [...this.#replaceMappings].sort((a, b) => b[0].length - a[0].length)) {
|
|
193
|
+
({ text: result, origin } = this.#replaceOutsidePlaceholdersTracked(result, origin, secret, replacement, "I"));
|
|
194
|
+
}
|
|
195
|
+
for (const secretValue of this.#collectRegexSecretValues(result)) {
|
|
196
|
+
this.#currentRegexSecretValues.add(secretValue);
|
|
197
|
+
}
|
|
198
|
+
for (const secretValue of this.#collectRegexSecretValuesAfterRegexReplacements(result, origin)) {
|
|
199
|
+
this.#currentRegexSecretValues.add(secretValue);
|
|
200
|
+
}
|
|
201
|
+
for (const secretValue of sharedRegexSecretValues ?? []) {
|
|
202
|
+
this.#currentRegexSecretValues.add(secretValue);
|
|
203
|
+
}
|
|
204
|
+
({ text: result, origin } = this.#stripUnsafeFriendlyPrefixes(result, origin));
|
|
205
|
+
// 2. Process obfuscate-mode plain secrets
|
|
206
|
+
for (const [secret, index] of [...this.#plainMappings].sort((a, b) => b[0].length - a[0].length)) {
|
|
207
|
+
const mapping = this.#obfuscateMappings.get(index);
|
|
208
|
+
({ text: result, origin } = this.#replaceOutsidePlaceholdersTracked(result, origin, secret, this.#placeholderForCurrentInput(mapping.placeholder), "F"));
|
|
209
|
+
}
|
|
210
|
+
// 3. Process regex entries — discover new matches
|
|
211
|
+
for (const entry of this.#regexEntries) {
|
|
212
|
+
entry.regex.lastIndex = 0;
|
|
213
|
+
const matches = this.#collectRegexMatches(result, entry.regex, entry.mode, origin, entry.replacement);
|
|
214
|
+
for (const match of matches) {
|
|
215
|
+
if (entry.mode === "replace") {
|
|
216
|
+
if (match.preserveGeneratedPlaceholders) {
|
|
217
|
+
if (match.preserveInputPlaceholders &&
|
|
218
|
+
entry.replacement === undefined &&
|
|
219
|
+
match.inputPlaceholderOutsideChunkCount === 1 &&
|
|
220
|
+
match.inputPlaceholderOutsideStart >= 0 &&
|
|
221
|
+
origin
|
|
222
|
+
.slice(match.inputPlaceholderOutsideStart, match.inputPlaceholderOutsideStart + match.inputPlaceholderOutside.length)
|
|
223
|
+
.includes("F") &&
|
|
224
|
+
this.#generatedReplaceChunks.has(match.inputPlaceholderOutside)) {
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
227
|
+
// Same greedy-spillover fixed point as the obfuscate branch below: when
|
|
228
|
+
// the match only reached across a prior-call placeholder because the
|
|
229
|
+
// placeholder's own value satisfies the regex, and the surrounding raw
|
|
230
|
+
// bytes do not independently match, re-redacting those bytes drifts the
|
|
231
|
+
// deterministic scramble across passes (e.g. `…#…#ZZJ5sotJ` →
|
|
232
|
+
// `…#…#ZZpvsotJ`), invalidating prompt-cache prefixes despite no new
|
|
233
|
+
// input. Leave the placeholder and its spillover verbatim — a fixed
|
|
234
|
+
// point. Structurally-required bytes (placeholder value alone cannot
|
|
235
|
+
// match) and independently-matching outside chunks still fall through to
|
|
236
|
+
// the redaction below. Only prior-call (`origin "I"`) placeholders set
|
|
237
|
+
// these flags, so first-pass redaction of genuinely new bytes is intact.
|
|
238
|
+
if (match.inputPlaceholderInnerIndependentlyMatches &&
|
|
239
|
+
!match.inputPlaceholderOutsideIndependentlyMatches) {
|
|
240
|
+
continue;
|
|
241
|
+
}
|
|
242
|
+
let replaceEnd = match.end;
|
|
243
|
+
let span = result.slice(match.start, replaceEnd);
|
|
244
|
+
if (entry.replacement !== undefined) {
|
|
245
|
+
const trailingChunk = trailingOutsidePreservedPlaceholderChunk(span, (placeholder) => this.#isGeneratedPlaceholder(placeholder));
|
|
246
|
+
if (trailingChunk.length > 0 && entry.replacement.startsWith(trailingChunk)) {
|
|
247
|
+
const trailingSuffix = entry.replacement.slice(trailingChunk.length);
|
|
248
|
+
if (trailingSuffix.length > 0 && result.slice(replaceEnd).startsWith(trailingSuffix)) {
|
|
249
|
+
replaceEnd += trailingSuffix.length;
|
|
250
|
+
span = result.slice(match.start, replaceEnd);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
// A custom replacement is a single redaction marker for the whole
|
|
255
|
+
// match, so emit it once around the preserved placeholder rather
|
|
256
|
+
// than per surrounding chunk (which duplicates it, e.g.
|
|
257
|
+
// `api_key=***#…#api_key=***`). Without one, each surrounding chunk
|
|
258
|
+
// gets its own length-matched fixed-point marker, checked in the
|
|
259
|
+
// expanded scan context so marker bytes cannot re-match beside the
|
|
260
|
+
// preserved placeholder on the next pass. The origin of any placeholder
|
|
261
|
+
// PRESERVED inside `span` must survive verbatim — blanket-tagging the
|
|
262
|
+
// whole redacted span "I" would relabel a same-call-fresh ("F")
|
|
263
|
+
// placeholder as prior-call, wrongly triggering the spillover-skip
|
|
264
|
+
// above for a LATER regex entry over content this call just redacted.
|
|
265
|
+
const spanOrigin = origin.slice(match.start, replaceEnd);
|
|
266
|
+
const redacted = entry.replacement !== undefined
|
|
267
|
+
? redactWithFixedReplacementOutsidePlaceholders(span, spanOrigin, entry.replacement, (placeholder) => this.#isGeneratedPlaceholder(placeholder))
|
|
268
|
+
: this.#redactRegexMatchOutsidePlaceholders(span, spanOrigin, entry.regex, match.scanContext);
|
|
269
|
+
result = replaceRange(result, match.start, replaceEnd, redacted.text);
|
|
270
|
+
origin = replaceRange(origin, match.start, replaceEnd, redacted.origin);
|
|
271
|
+
}
|
|
272
|
+
else {
|
|
273
|
+
const replacement = entry.replacement ?? match.defaultReplacement;
|
|
274
|
+
if (replacement === undefined) {
|
|
275
|
+
throw new Error("regex replace match missing a generated replacement");
|
|
276
|
+
}
|
|
277
|
+
result = replaceRange(result, match.start, match.end, replacement);
|
|
278
|
+
origin = replaceRange(origin, match.start, match.end, "I".repeat(replacement.length));
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
else {
|
|
282
|
+
if (match.scanMatchLength < MIN_OBFUSCATE_SECRET_LEN) {
|
|
283
|
+
// Tone down short regex matches to avoid obfuscating small
|
|
284
|
+
// words/fragments. Measure the regex's own match length in the
|
|
285
|
+
// canonical (placeholder-expanded) scan view, not the rewritten
|
|
286
|
+
// source span, so the threshold reflects how much content the regex
|
|
287
|
+
// actually matched.
|
|
288
|
+
continue;
|
|
289
|
+
}
|
|
290
|
+
if (match.preserveInputPlaceholders) {
|
|
291
|
+
// The match straddled a prior-call placeholder. When the placeholder's
|
|
292
|
+
// own value already satisfies the regex on its own AND the surrounding
|
|
293
|
+
// raw bytes do not independently match, those bytes are greedy spillover
|
|
294
|
+
// (e.g. the trailing `A` in `SECRETUV→#…#A`): obfuscating them mints
|
|
295
|
+
// fresh placeholders on re-obfuscation and drifts the provider-visible
|
|
296
|
+
// history and prompt-cache prefix. Leave the placeholder atomic and the
|
|
297
|
+
// spillover verbatim — a fixed point. Outside bytes are still obfuscated
|
|
298
|
+
// when the placeholder value alone cannot match (they are structurally
|
|
299
|
+
// part of the secret, e.g. an `api_key=` prefix the regex requires) or
|
|
300
|
+
// when they independently match the regex on their own.
|
|
301
|
+
if (match.inputPlaceholderInnerIndependentlyMatches &&
|
|
302
|
+
!match.inputPlaceholderOutsideIndependentlyMatches) {
|
|
303
|
+
continue;
|
|
304
|
+
}
|
|
305
|
+
const span = result.slice(match.start, match.end);
|
|
306
|
+
const spanOrigin = origin.slice(match.start, match.end);
|
|
307
|
+
const obfuscated = this.#obfuscateOutsidePlaceholdersTracked(span, spanOrigin, entry.friendlyName);
|
|
308
|
+
result = replaceRange(result, match.start, match.end, obfuscated.text);
|
|
309
|
+
origin = replaceRange(origin, match.start, match.end, obfuscated.origin);
|
|
310
|
+
continue;
|
|
311
|
+
}
|
|
312
|
+
// obfuscate mode — get or create stable index
|
|
313
|
+
let index = this.#findObfuscateIndex(match.canonicalValue);
|
|
314
|
+
if (index === undefined) {
|
|
315
|
+
index = this.#nextIndex++;
|
|
316
|
+
const placeholder = this.#createPlaceholder(match.canonicalValue, entry.friendlyName, match.recursive);
|
|
317
|
+
this.#obfuscateMappings.set(index, { secret: match.canonicalValue, placeholder });
|
|
318
|
+
this.#generatedPlaceholders.add(placeholder);
|
|
319
|
+
}
|
|
320
|
+
const mapping = this.#obfuscateMappings.get(index);
|
|
321
|
+
const placeholder = this.#placeholderForCurrentInput(mapping.placeholder);
|
|
322
|
+
result = replaceRange(result, match.start, match.end, placeholder);
|
|
323
|
+
origin = replaceRange(origin, match.start, match.end, "F".repeat(placeholder.length));
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
if (entry.mode === "replace") {
|
|
327
|
+
for (const secretValue of this.#collectRegexSecretValues(result)) {
|
|
328
|
+
this.#currentRegexSecretValues.add(secretValue);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
({ text: result, origin } = this.#stabilizeReplaceRegexPlaceholderSpillover(result, origin));
|
|
333
|
+
this.#currentRegexSecretValues = new Set();
|
|
334
|
+
return result;
|
|
335
|
+
}
|
|
336
|
+
/** Deobfuscate keyed placeholders for provider output, tool-call arguments, replay, and display. */
|
|
337
|
+
deobfuscate(text) {
|
|
338
|
+
return this.#deobfuscate(text);
|
|
339
|
+
}
|
|
340
|
+
// Reverse-direction counterpart to `#isGeneratedPlaceholder`'s guard: the
|
|
341
|
+
// bare-alias fallback below intentionally accepts ANY prefix so a
|
|
342
|
+
// placeholder minted under a renamed friendly name still deobfuscates
|
|
343
|
+
// (see `#prefixIsSecretShaped`'s docstring for why), but unconditionally
|
|
344
|
+
// stripping and ignoring an attacker-authored prefix would let a forged
|
|
345
|
+
// token like `$$GITHUBPATABC123_<suffix-copied-from-any-real-placeholder>$$`
|
|
346
|
+
// restore to that OTHER secret's raw value with no check at all — worse
|
|
347
|
+
// than the obfuscate-direction leak, since deobfuscation is what feeds
|
|
348
|
+
// tool-call arguments and provider-output restoration. Refuse the
|
|
349
|
+
// fallback (leave the token as opaque, unresolved text) when the prefix
|
|
350
|
+
// is itself secret-shaped; an exact full-token match is unaffected, since
|
|
351
|
+
// that was minted by this instance and carries no forgery risk.
|
|
352
|
+
#lookupLiveAlias(placeholder) {
|
|
353
|
+
const direct = this.#deobfuscateMap.get(placeholder);
|
|
354
|
+
if (direct !== undefined)
|
|
355
|
+
return direct;
|
|
356
|
+
const body = placeholder.slice(2, -2);
|
|
357
|
+
const match = /^([A-Z0-9]+)_([A-Z0-9]{4,}(?::[ULCM])?)$/.exec(body);
|
|
358
|
+
if (match === null || this.#prefixIsSecretShaped(match[1]))
|
|
359
|
+
return undefined;
|
|
360
|
+
return this.#deobfuscateMap.get(`$$${match[2]}$$`);
|
|
361
|
+
}
|
|
362
|
+
#deobfuscate(text) {
|
|
363
|
+
if (!this.#hasAny || !text.includes("$$"))
|
|
364
|
+
return text;
|
|
365
|
+
let result = text;
|
|
366
|
+
for (;;) {
|
|
367
|
+
let shouldContinue = false;
|
|
368
|
+
const next = result.replace(PLACEHOLDER_RE, (match) => {
|
|
369
|
+
const mapped = this.#lookupLiveAlias(match);
|
|
370
|
+
if (mapped !== undefined) {
|
|
371
|
+
shouldContinue ||= mapped.recursive;
|
|
372
|
+
return mapped.secret;
|
|
373
|
+
}
|
|
374
|
+
return match;
|
|
375
|
+
});
|
|
376
|
+
if (next === result || !shouldContinue || !next.includes("$$"))
|
|
377
|
+
return next;
|
|
378
|
+
result = next;
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
/** Deep-walk an object, deobfuscating string values for LIVE paths (keyed placeholders only). */
|
|
382
|
+
deobfuscateObject(obj) {
|
|
383
|
+
if (!this.#hasAny)
|
|
384
|
+
return obj;
|
|
385
|
+
return deepWalkStrings(obj, (s) => this.deobfuscate(s));
|
|
386
|
+
}
|
|
387
|
+
/** Deep-walk an object, obfuscating all string values. */
|
|
388
|
+
obfuscateObject(obj) {
|
|
389
|
+
if (!this.#hasAny)
|
|
390
|
+
return obj;
|
|
391
|
+
return deepWalkStrings(obj, (s) => this.obfuscate(s));
|
|
392
|
+
}
|
|
393
|
+
#generateReplacement(chunk) {
|
|
394
|
+
// Redact a per-chunk remainder to a marker that is a fixed point under
|
|
395
|
+
// re-redaction on ANY obfuscator sharing the key, so persisted obfuscated text
|
|
396
|
+
// — and the provider prompt-cache prefixes it anchors — never drifts across a
|
|
397
|
+
// restart. The marker keeps the `Z`/`ZZ` sentinel prefix (already a fixed point
|
|
398
|
+
// for <=2-char remainders) and, for longer remainders, a key-derived run that
|
|
399
|
+
// depends ONLY on the key and length. A fresh obfuscator reproduces the
|
|
400
|
+
// identical marker (so re-redacting it stays idempotent across restarts, where
|
|
401
|
+
// the content-derived chunk plus the session-local `#generatedReplaceChunks`
|
|
402
|
+
// were not), yet the run is unpredictable without the per-install key, so raw
|
|
403
|
+
// remainder bytes that merely look sentinel-shaped (e.g. `ZZZZ`) cannot equal
|
|
404
|
+
// the marker and are still redacted instead of passed through.
|
|
405
|
+
const replacement = chunk.length <= 2
|
|
406
|
+
? "Z".repeat(chunk.length)
|
|
407
|
+
: `ZZ${buildKeyedReplacementRun(this.#getKey(), chunk.length - 2)}`;
|
|
408
|
+
this.#generatedReplaceChunks.add(replacement);
|
|
409
|
+
return replacement;
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Replacement for a whole CONFIGURED secret value (a plain replace-mode entry
|
|
413
|
+
* or the redacted key). Unlike a per-chunk remainder redaction, the output
|
|
414
|
+
* must differ from the input so a value equal to the `Z`/`ZZ` sentinel is not
|
|
415
|
+
* emitted verbatim. A plain secret only matches its own literal, so the
|
|
416
|
+
* perturbed output stays a fixed point under re-obfuscation.
|
|
417
|
+
*/
|
|
418
|
+
#generateSecretReplacement(secret) {
|
|
419
|
+
const replacement = ensureDistinctReplacement(generateDeterministicReplacement(secret), secret);
|
|
420
|
+
this.#generatedReplaceChunks.add(replacement);
|
|
421
|
+
return replacement;
|
|
422
|
+
}
|
|
423
|
+
/**
|
|
424
|
+
* Replacement for a default (no custom replacement) regex match. The output must
|
|
425
|
+
* be a fixed point under re-obfuscation: a regex can re-match its own replacement,
|
|
426
|
+
* and a later obfuscate() pass would then re-redact it — at best churning the
|
|
427
|
+
* provider-visible text, at worst oscillating back to the raw matched value. The
|
|
428
|
+
* deterministic replacement already differs from most values, but it is
|
|
429
|
+
* all-alphanumeric and a regex may still match it, either directly (a `Z`/`ZZ`
|
|
430
|
+
* sentinel collision, or a class like `[A-Za-z0-9]+`) or only in context
|
|
431
|
+
* (lookbehind/lookahead/`\b`, e.g. `(?<=api=)[AZ]`). When it would re-match,
|
|
432
|
+
* search same-length candidates IN CONTEXT for one the regex does not re-match:
|
|
433
|
+
* that value is a stable fixed point and cannot re-leak. A single perturbation is
|
|
434
|
+
* not enough — it may also match (e.g. `B`, not `A`, for `Z|A`) — so the search
|
|
435
|
+
* tries further candidates before giving up. When no candidate avoids the regex (a
|
|
436
|
+
* pathological match-everything config such as `.`/`[\s\S]`), the content-hash
|
|
437
|
+
* deterministic value is NOT usable as a fallback: it will itself be re-matched on
|
|
438
|
+
* the next pass, and because it is derived from the bytes being replaced, rehashing
|
|
439
|
+
* those bytes (the marker itself, not the original secret) produces a DIFFERENT
|
|
440
|
+
* value — churning the redaction, and the provider prompt-cache prefix it anchors,
|
|
441
|
+
* across every re-obfuscation. Fall back instead to a marker that depends only
|
|
442
|
+
* on `this.#key` and the value's length, not its content, so re-matching and
|
|
443
|
+
* re-redacting it reproduces the IDENTICAL marker every time, which the
|
|
444
|
+
* pathological case requires since no value can escape the regex at all. This
|
|
445
|
+
* cannot reuse `#generateReplacement`'s own <=2-char branch directly: that
|
|
446
|
+
* branch is the fixed `Z`/`ZZ` sentinel, which is itself a value this fallback
|
|
447
|
+
* could be asked to replace (an input of exactly `Z` or `ZZ`), and returning it
|
|
448
|
+
* unchanged would ship the raw secret to the provider — the exact failure plain
|
|
449
|
+
* replace-mode secrets avoid via `ensureDistinctReplacement`. Neither
|
|
450
|
+
* `ensureDistinctReplacement`'s single-char flip NOR a length-changing marker is
|
|
451
|
+
* usable here: a pathological regex re-matches ANY same-length value, including
|
|
452
|
+
* a flipped one, so a value-dependent flip oscillates between the two forever;
|
|
453
|
+
* and a regex with no quantifier (matching one input character per match, e.g.
|
|
454
|
+
* `.`) re-scans a LONGER marker as several independent same-regex matches on the
|
|
455
|
+
* next pass, re-expanding each one — unbounded growth, not a fixed point. Use a
|
|
456
|
+
* SAME-LENGTH keyed run instead of the sentinel for <=2 chars: content-independent
|
|
457
|
+
* (so it is trivially its own fixed point once emitted) and no longer a public,
|
|
458
|
+
* install-independent constant, closing the specific guessable collision
|
|
459
|
+
* (`Z`/`ZZ`) the sentinel had. A same-length, content-independent marker cannot
|
|
460
|
+
* mathematically rule out equaling some pathological input by construction (the
|
|
461
|
+
* marker is itself a same-length string a match-everything regex also matches),
|
|
462
|
+
* but that residual case now requires guessing this install's private key rather
|
|
463
|
+
* than a universal constant — the same class of accepted risk
|
|
464
|
+
* `generateDeterministicReplacement`'s hash collision already carries for longer
|
|
465
|
+
* values.
|
|
466
|
+
* A regex that is UNCONDITIONALLY pathological for a length <= 2 — matching
|
|
467
|
+
* literally every candidate in isolation, independent of context, like `.`
|
|
468
|
+
* or `[\s\S]` — is now rejected at construction/config-load time instead
|
|
469
|
+
* (see `regexHasUnresolvableShortMatchFallback`), since for that narrow
|
|
470
|
+
* case the residual risk above is fully avoidable rather than merely
|
|
471
|
+
* unlikely. This branch, and the residual risk above, still applies to a
|
|
472
|
+
* length > 2 pathological config and to a length <= 2 pattern that is only
|
|
473
|
+
* pathological in a SPECIFIC match's surrounding context (the
|
|
474
|
+
* construction-time check tests the regex in isolation, not every context
|
|
475
|
+
* it could appear in).
|
|
476
|
+
*/
|
|
477
|
+
#generateRegexReplacement(value, regex, context) {
|
|
478
|
+
let replacement = generateDeterministicReplacement(value);
|
|
479
|
+
// Verify in context, not just against the sentinel collision: the
|
|
480
|
+
// deterministic replacement is all-alphanumeric and a context-sensitive regex
|
|
481
|
+
// (lookbehind/lookahead/`\b`) can re-match it even when it differs from the
|
|
482
|
+
// value, so a later pass would re-redact and could oscillate back to the raw
|
|
483
|
+
// secret. Search for a candidate the regex does not re-match in place.
|
|
484
|
+
if (replacement === value || regexRematchesInContext(replacement, regex, context)) {
|
|
485
|
+
const stable = findNonMatchingReplacement(value, regex, context);
|
|
486
|
+
// See docstring above: same-length keyed run for <=2 chars (never the
|
|
487
|
+
// `Z`/`ZZ` sentinel, which a <=2 char value could itself be), otherwise
|
|
488
|
+
// the ordinary keyed-run fallback #generateReplacement already uses.
|
|
489
|
+
replacement =
|
|
490
|
+
stable ??
|
|
491
|
+
(value.length <= 2
|
|
492
|
+
? buildKeyedReplacementRun(this.#getKey(), value.length)
|
|
493
|
+
: this.#generateReplacement(value));
|
|
494
|
+
regex.lastIndex = 0;
|
|
495
|
+
}
|
|
496
|
+
this.#generatedReplaceChunks.add(replacement);
|
|
497
|
+
return replacement;
|
|
498
|
+
}
|
|
499
|
+
#generateRegexChunkReplacement(chunk, regex, context) {
|
|
500
|
+
let replacement = this.#generateReplacement(chunk);
|
|
501
|
+
if (regexRematchesInContext(replacement, regex, context)) {
|
|
502
|
+
const stable = findNonMatchingReplacement(chunk, regex, context);
|
|
503
|
+
if (stable !== undefined) {
|
|
504
|
+
replacement = stable;
|
|
505
|
+
this.#generatedReplaceChunks.add(replacement);
|
|
506
|
+
}
|
|
507
|
+
regex.lastIndex = 0;
|
|
508
|
+
}
|
|
509
|
+
return replacement;
|
|
510
|
+
}
|
|
511
|
+
#redactRegexMatchOutsidePlaceholders(text, origin, regex, context) {
|
|
512
|
+
let scanCursor = context.start;
|
|
513
|
+
return transformOutsidePlaceholdersTracked(text, origin, (placeholder) => this.#isGeneratedPlaceholder(placeholder), (chunk) => {
|
|
514
|
+
const start = scanCursor;
|
|
515
|
+
scanCursor += chunk.length;
|
|
516
|
+
if (chunk.length === 0)
|
|
517
|
+
return "";
|
|
518
|
+
return this.#generateRegexChunkReplacement(chunk, regex, {
|
|
519
|
+
text: context.text,
|
|
520
|
+
start,
|
|
521
|
+
end: scanCursor,
|
|
522
|
+
});
|
|
523
|
+
}, (placeholder) => {
|
|
524
|
+
scanCursor +=
|
|
525
|
+
lookupFriendlyPlaceholderAlias(this.#deobfuscateMap, placeholder)?.secret.length ?? placeholder.length;
|
|
526
|
+
return placeholder;
|
|
527
|
+
});
|
|
528
|
+
}
|
|
529
|
+
#stabilizeReplaceRegexPlaceholderSpillover(text, origin) {
|
|
530
|
+
let result = text;
|
|
531
|
+
let currentOrigin = origin;
|
|
532
|
+
for (const entry of this.#regexEntries) {
|
|
533
|
+
if (entry.mode !== "replace" || entry.replacement !== undefined)
|
|
534
|
+
continue;
|
|
535
|
+
entry.regex.lastIndex = 0;
|
|
536
|
+
const matches = this.#collectRegexMatches(result, entry.regex, entry.mode, currentOrigin, entry.replacement);
|
|
537
|
+
entry.regex.lastIndex = 0;
|
|
538
|
+
for (const match of matches) {
|
|
539
|
+
if (!match.preserveGeneratedPlaceholders)
|
|
540
|
+
continue;
|
|
541
|
+
if (match.preserveInputPlaceholders &&
|
|
542
|
+
entry.replacement === undefined &&
|
|
543
|
+
match.inputPlaceholderOutsideChunkCount === 1 &&
|
|
544
|
+
match.inputPlaceholderOutsideStart >= 0 &&
|
|
545
|
+
currentOrigin
|
|
546
|
+
.slice(match.inputPlaceholderOutsideStart, match.inputPlaceholderOutsideStart + match.inputPlaceholderOutside.length)
|
|
547
|
+
.includes("F") &&
|
|
548
|
+
this.#generatedReplaceChunks.has(match.inputPlaceholderOutside)) {
|
|
549
|
+
continue;
|
|
550
|
+
}
|
|
551
|
+
if (match.inputPlaceholderInnerIndependentlyMatches && !match.inputPlaceholderOutsideIndependentlyMatches) {
|
|
552
|
+
continue;
|
|
553
|
+
}
|
|
554
|
+
const span = result.slice(match.start, match.end);
|
|
555
|
+
const spanOrigin = currentOrigin.slice(match.start, match.end);
|
|
556
|
+
const redacted = entry.replacement !== undefined
|
|
557
|
+
? redactWithFixedReplacementOutsidePlaceholders(span, spanOrigin, entry.replacement, (placeholder) => this.#isGeneratedPlaceholder(placeholder))
|
|
558
|
+
: this.#redactRegexMatchOutsidePlaceholders(span, spanOrigin, entry.regex, match.scanContext);
|
|
559
|
+
if (redacted.text === span)
|
|
560
|
+
continue;
|
|
561
|
+
result = replaceRange(result, match.start, match.end, redacted.text);
|
|
562
|
+
currentOrigin = replaceRange(currentOrigin, match.start, match.end, redacted.origin);
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
return { text: result, origin: currentOrigin };
|
|
566
|
+
}
|
|
567
|
+
/** Find the obfuscate index for a known secret value. */
|
|
568
|
+
#findObfuscateIndex(secret) {
|
|
569
|
+
// Check plain mappings first
|
|
570
|
+
const plainIndex = this.#plainMappings.get(secret);
|
|
571
|
+
if (plainIndex !== undefined)
|
|
572
|
+
return plainIndex;
|
|
573
|
+
// Check regex-discovered mappings
|
|
574
|
+
for (const [index, mapping] of this.#obfuscateMappings) {
|
|
575
|
+
if (mapping.secret === secret)
|
|
576
|
+
return index;
|
|
577
|
+
}
|
|
578
|
+
return undefined;
|
|
579
|
+
}
|
|
580
|
+
#createPlaceholder(secret, friendlyName, recursive = false) {
|
|
581
|
+
const hint = inferCaseHint(secret);
|
|
582
|
+
// Key the base on the EXACT secret value, never a case-folded form. The
|
|
583
|
+
// case hint is only a model-visible label. If two distinct secrets that
|
|
584
|
+
// differ solely by ASCII case shared one case-folded base, a provider that
|
|
585
|
+
// saw one placeholder could swap the hint to synthesize the sibling
|
|
586
|
+
// secret's keyed token, and live deobfuscation (provider output / tool-call
|
|
587
|
+
// args) would restore a value that was never provider-visible. Exact-value
|
|
588
|
+
// keying gives every secret an independent base, so a sibling token cannot
|
|
589
|
+
// be derived without the per-install key.
|
|
590
|
+
const baseKey = secret;
|
|
591
|
+
// A friendly name that embeds a configured secret's literal (or matches a
|
|
592
|
+
// configured regex pattern) would bake that secret straight into a
|
|
593
|
+
// LEGITIMATE, exact-registered placeholder — later scans recognize the
|
|
594
|
+
// whole token as already-generated on an EXACT match, before the
|
|
595
|
+
// alias-fallback prefix check above ever runs, so the embedded secret
|
|
596
|
+
// would never be scanned. Drop the label for this mint rather than risk
|
|
597
|
+
// it; the secret still gets a bare (unprefixed) placeholder. The collision
|
|
598
|
+
// check runs against the FULL normalized label — `sanitizeForCollisionCheck`,
|
|
599
|
+
// not yet capped at `MAX_FRIENDLY_NAME_LEN` — so a secret longer than the
|
|
600
|
+
// 32-char display cap (or one whose sanitized form exceeds it) still gets
|
|
601
|
+
// caught: a truncated `requestedFriendlyName` can never contain a longer
|
|
602
|
+
// secret's full sanitized form, so checking the truncated label would let
|
|
603
|
+
// the secret's first 32 (post-cap) characters leak as an accepted prefix.
|
|
604
|
+
const requestedFriendlyName = friendlyName ? sanitizeSecretFriendlyName(friendlyName) : undefined;
|
|
605
|
+
const sanitizedFriendlyName = requestedFriendlyName !== undefined &&
|
|
606
|
+
friendlyName !== undefined &&
|
|
607
|
+
!this.#friendlyNameCollidesWithSecret(sanitizeForCollisionCheck(friendlyName), friendlyName, secret)
|
|
608
|
+
? requestedFriendlyName
|
|
609
|
+
: undefined;
|
|
610
|
+
const preferredBase = this.#resolvePreferredPlaceholderBase(baseKey);
|
|
611
|
+
const preferredPlaceholder = buildPlaceholder(hint, preferredBase, sanitizedFriendlyName);
|
|
612
|
+
if (!this.#placeholderConflicts(preferredPlaceholder, secret)) {
|
|
613
|
+
this.#registerDeobfuscationAlias(preferredPlaceholder, secret, recursive);
|
|
614
|
+
return preferredPlaceholder;
|
|
615
|
+
}
|
|
616
|
+
for (let attempt = 1;; attempt++) {
|
|
617
|
+
const fallbackBase = this.#reserveFallbackPlaceholderBase(baseKey, attempt);
|
|
618
|
+
const placeholder = buildPlaceholder(hint, fallbackBase, sanitizedFriendlyName);
|
|
619
|
+
if (!this.#placeholderConflicts(placeholder, secret)) {
|
|
620
|
+
this.#registerDeobfuscationAlias(placeholder, secret, recursive);
|
|
621
|
+
return placeholder;
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
#resolvePreferredPlaceholderBase(baseKey) {
|
|
626
|
+
const existing = this.#placeholderBaseByKey.get(baseKey);
|
|
627
|
+
if (existing !== undefined)
|
|
628
|
+
return existing;
|
|
629
|
+
for (let attempt = 0;; attempt++) {
|
|
630
|
+
const base = attempt === 0
|
|
631
|
+
? buildHashBase(this.#getKey(), baseKey)
|
|
632
|
+
: buildHashBase(this.#getKey(), `${baseKey}\0${attempt}`);
|
|
633
|
+
const owner = this.#placeholderBaseOwners.get(base);
|
|
634
|
+
if (owner !== undefined && owner !== baseKey)
|
|
635
|
+
continue;
|
|
636
|
+
this.#placeholderBaseOwners.set(base, baseKey);
|
|
637
|
+
this.#placeholderBaseByKey.set(baseKey, base);
|
|
638
|
+
return base;
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
#reserveFallbackPlaceholderBase(baseKey, startAttempt) {
|
|
642
|
+
for (let attempt = startAttempt;; attempt++) {
|
|
643
|
+
const owner = `${baseKey}\0collision\0${attempt}`;
|
|
644
|
+
const base = buildHashBase(this.#getKey(), `${baseKey}\0collision\0${attempt}`);
|
|
645
|
+
if (this.#placeholderBaseOwners.has(base))
|
|
646
|
+
continue;
|
|
647
|
+
this.#placeholderBaseOwners.set(base, owner);
|
|
648
|
+
return base;
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
#placeholderCollides(placeholder, secret) {
|
|
652
|
+
const existing = this.#deobfuscateMap.get(placeholder);
|
|
653
|
+
return existing !== undefined && existing.secret !== secret;
|
|
654
|
+
}
|
|
655
|
+
// A friendly placeholder is only safe if BOTH its full token and its
|
|
656
|
+
// friendly-name-independent alias are free (or already ours), AND the token
|
|
657
|
+
// itself is not another configured secret's literal value. Without the
|
|
658
|
+
// latter check, a placeholder minted for secret A that happens to equal
|
|
659
|
+
// secret B's raw content passes silently: B's own plain-secret redaction
|
|
660
|
+
// pass (sorted by length, run once per obfuscate() call) already completed
|
|
661
|
+
// before A's placeholder existed in the text, so B is never redacted out of
|
|
662
|
+
// it — A's placeholder becomes a verbatim, provider-visible copy of B.
|
|
663
|
+
#placeholderConflicts(placeholder, secret) {
|
|
664
|
+
if (this.#placeholderCollides(placeholder, secret))
|
|
665
|
+
return true;
|
|
666
|
+
if (this.#configuredSecretValues.has(placeholder) && placeholder !== secret)
|
|
667
|
+
return true;
|
|
668
|
+
const unprefixed = placeholderWithoutFriendlyName(placeholder);
|
|
669
|
+
if (unprefixed === undefined)
|
|
670
|
+
return false;
|
|
671
|
+
if (this.#placeholderCollides(unprefixed, secret))
|
|
672
|
+
return true;
|
|
673
|
+
return this.#configuredSecretValues.has(unprefixed) && unprefixed !== secret;
|
|
674
|
+
}
|
|
675
|
+
// A sanitized friendly name must not double as a live secret: it becomes a
|
|
676
|
+
// verbatim, model-visible prefix on every placeholder minted for THIS
|
|
677
|
+
// secret, baked in via an exact `#deobfuscateMap` entry rather than the
|
|
678
|
+
// alias fallback — so it needs its own check independent of the scan-skip
|
|
679
|
+
// alias guard in `#isGeneratedPlaceholder`. Reuses `#prefixIsSecretShaped`
|
|
680
|
+
// for the sanitized-vs-sanitized comparisons (configured plain secrets,
|
|
681
|
+
// every regex-discovered secret this instance has ever minted a
|
|
682
|
+
// placeholder for) and the sanitized-label-vs-regex-pattern check, then
|
|
683
|
+
// adds two label-specific checks `#prefixIsSecretShaped` cannot make: the
|
|
684
|
+
// CURRENT secret being minted right now — which, on its first-ever mint,
|
|
685
|
+
// is not yet in `#prefixIsSecretShaped`'s previously-discovered set, since
|
|
686
|
+
// that set is only populated AFTER this call returns — normalized the
|
|
687
|
+
// same way (catches, e.g., `friendlyName: "TOKABC123"` for a regex secret
|
|
688
|
+
// whose literal match is `tok_abc123`, which the sanitized-name-vs-pattern
|
|
689
|
+
// check misses when the pattern is case-sensitive/punctuated); and the RAW
|
|
690
|
+
// (pre-sanitization) label against every configured regex pattern (catches
|
|
691
|
+
// `friendlyName: "tok_abc123"` literally, which the SANITIZED label
|
|
692
|
+
// `"TOKABC123"` could never match against that same case-sensitive
|
|
693
|
+
// pattern). Any of these means the text is meant to be redacted, not
|
|
694
|
+
// stamped unredacted onto every use of this secret.
|
|
695
|
+
#collectRegexSecretValues(text) {
|
|
696
|
+
const values = new Set();
|
|
697
|
+
for (const entry of this.#regexEntries) {
|
|
698
|
+
entry.regex.lastIndex = 0;
|
|
699
|
+
for (;;) {
|
|
700
|
+
const match = entry.regex.exec(text);
|
|
701
|
+
if (match === null)
|
|
702
|
+
break;
|
|
703
|
+
if (match[0].length === 0) {
|
|
704
|
+
entry.regex.lastIndex++;
|
|
705
|
+
continue;
|
|
706
|
+
}
|
|
707
|
+
values.add(match[0]);
|
|
708
|
+
}
|
|
709
|
+
entry.regex.lastIndex = 0;
|
|
710
|
+
}
|
|
711
|
+
return values;
|
|
712
|
+
}
|
|
713
|
+
collectRegexSecretValuesForObfuscation(text) {
|
|
714
|
+
const values = this.#collectRegexSecretValues(text);
|
|
715
|
+
let result = text;
|
|
716
|
+
let origin = "I".repeat(text.length);
|
|
717
|
+
for (const [secret, replacement] of [...this.#replaceMappings].sort((a, b) => b[0].length - a[0].length)) {
|
|
718
|
+
({ text: result, origin } = this.#replaceOutsidePlaceholdersTracked(result, origin, secret, replacement, "I"));
|
|
719
|
+
}
|
|
720
|
+
for (const secretValue of this.#collectRegexSecretValues(result)) {
|
|
721
|
+
values.add(secretValue);
|
|
722
|
+
}
|
|
723
|
+
for (const secretValue of this.#collectRegexSecretValuesAfterRegexReplacements(result, origin)) {
|
|
724
|
+
values.add(secretValue);
|
|
725
|
+
}
|
|
726
|
+
return values;
|
|
727
|
+
}
|
|
728
|
+
#collectRegexSecretValuesAfterRegexReplacements(text, origin) {
|
|
729
|
+
const values = new Set();
|
|
730
|
+
let simulated = text;
|
|
731
|
+
let simulatedOrigin = origin;
|
|
732
|
+
for (const entry of this.#regexEntries) {
|
|
733
|
+
if (entry.mode !== "replace")
|
|
734
|
+
continue;
|
|
735
|
+
entry.regex.lastIndex = 0;
|
|
736
|
+
const matches = this.#collectRegexMatches(simulated, entry.regex, entry.mode, simulatedOrigin, entry.replacement);
|
|
737
|
+
entry.regex.lastIndex = 0;
|
|
738
|
+
if (matches.length === 0)
|
|
739
|
+
continue;
|
|
740
|
+
for (const match of [...matches].sort((a, b) => b.start - a.start)) {
|
|
741
|
+
const replacement = entry.replacement ?? match.defaultReplacement;
|
|
742
|
+
if (replacement === undefined)
|
|
743
|
+
continue;
|
|
744
|
+
for (const secretValue of this.#collectRegexSecretValues(replacement)) {
|
|
745
|
+
values.add(secretValue);
|
|
746
|
+
}
|
|
747
|
+
simulated = replaceRange(simulated, match.start, match.end, replacement);
|
|
748
|
+
simulatedOrigin = replaceRange(simulatedOrigin, match.start, match.end, "I".repeat(replacement.length));
|
|
749
|
+
}
|
|
750
|
+
for (const secretValue of this.#collectRegexSecretValues(simulated)) {
|
|
751
|
+
values.add(secretValue);
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
return values;
|
|
755
|
+
}
|
|
756
|
+
#friendlyNameCollidesWithSecret(sanitizedName, rawName, secret) {
|
|
757
|
+
if (this.#prefixIsSecretShaped(sanitizedName))
|
|
758
|
+
return true;
|
|
759
|
+
const sanitizedSecretValue = sanitizeForCollisionCheck(secret);
|
|
760
|
+
if (sanitizedLabelCollidesWithSecret(sanitizedName, sanitizedSecretValue))
|
|
761
|
+
return true;
|
|
762
|
+
for (const entry of this.#regexEntries) {
|
|
763
|
+
entry.regex.lastIndex = 0;
|
|
764
|
+
const matches = entry.regex.test(rawName);
|
|
765
|
+
entry.regex.lastIndex = 0;
|
|
766
|
+
if (matches)
|
|
767
|
+
return true;
|
|
768
|
+
}
|
|
769
|
+
return false;
|
|
770
|
+
}
|
|
771
|
+
#placeholderForCurrentInput(placeholder) {
|
|
772
|
+
const unprefixed = placeholderWithoutFriendlyName(placeholder);
|
|
773
|
+
if (unprefixed === undefined)
|
|
774
|
+
return placeholder;
|
|
775
|
+
const match = /^([A-Z0-9]+)_/.exec(placeholder.slice(2, -2));
|
|
776
|
+
if (match === null || !this.#prefixIsSecretShaped(match[1]))
|
|
777
|
+
return placeholder;
|
|
778
|
+
return unprefixed;
|
|
779
|
+
}
|
|
780
|
+
#stripUnsafeFriendlyPrefixes(text, origin) {
|
|
781
|
+
PLACEHOLDER_RE.lastIndex = 0;
|
|
782
|
+
let result = "";
|
|
783
|
+
let resultOrigin = "";
|
|
784
|
+
let cursor = 0;
|
|
785
|
+
for (;;) {
|
|
786
|
+
const match = PLACEHOLDER_RE.exec(text);
|
|
787
|
+
if (match === null)
|
|
788
|
+
break;
|
|
789
|
+
const placeholder = match[0];
|
|
790
|
+
const unprefixed = placeholderWithoutFriendlyName(placeholder);
|
|
791
|
+
const replacement = unprefixed !== undefined ? this.#placeholderForCurrentInput(placeholder) : placeholder;
|
|
792
|
+
if (replacement === placeholder) {
|
|
793
|
+
resumePlaceholderScanAfterRejectedCandidate(match);
|
|
794
|
+
continue;
|
|
795
|
+
}
|
|
796
|
+
result += text.slice(cursor, match.index);
|
|
797
|
+
resultOrigin += origin.slice(cursor, match.index);
|
|
798
|
+
result += replacement;
|
|
799
|
+
resultOrigin += origin[match.index]?.repeat(replacement.length) ?? "";
|
|
800
|
+
cursor = match.index + placeholder.length;
|
|
801
|
+
}
|
|
802
|
+
result += text.slice(cursor);
|
|
803
|
+
resultOrigin += origin.slice(cursor);
|
|
804
|
+
return { text: result, origin: resultOrigin };
|
|
805
|
+
}
|
|
806
|
+
stripUnsafeFriendlyPlaceholderPrefixes(text, sharedRegexSecretValues) {
|
|
807
|
+
const previousRegexSecretValues = this.#currentRegexSecretValues;
|
|
808
|
+
this.#currentRegexSecretValues = new Set(sharedRegexSecretValues);
|
|
809
|
+
try {
|
|
810
|
+
return this.#stripUnsafeFriendlyPrefixes(text, "I".repeat(text.length)).text;
|
|
811
|
+
}
|
|
812
|
+
finally {
|
|
813
|
+
this.#currentRegexSecretValues = previousRegexSecretValues;
|
|
814
|
+
}
|
|
815
|
+
}
|
|
816
|
+
#registerDeobfuscationAlias(placeholder, secret, recursive) {
|
|
817
|
+
const existing = this.#deobfuscateMap.get(placeholder);
|
|
818
|
+
if (existing === undefined || existing.secret === secret) {
|
|
819
|
+
this.#deobfuscateMap.set(placeholder, { secret, recursive });
|
|
820
|
+
}
|
|
821
|
+
const unprefixed = placeholderWithoutFriendlyName(placeholder);
|
|
822
|
+
if (unprefixed !== undefined) {
|
|
823
|
+
const existingUnprefixed = this.#deobfuscateMap.get(unprefixed);
|
|
824
|
+
if (existingUnprefixed === undefined || existingUnprefixed.secret === secret) {
|
|
825
|
+
this.#deobfuscateMap.set(unprefixed, { secret, recursive });
|
|
826
|
+
}
|
|
827
|
+
}
|
|
828
|
+
}
|
|
829
|
+
// Whether an alnum-only, uppercase friendly-name-shaped prefix dropped from
|
|
830
|
+
// a candidate placeholder token is itself something that should have been
|
|
831
|
+
// redacted, rather than an arbitrary label: a sanitized form of a
|
|
832
|
+
// configured plain secret's value, a sanitized form of any regex-
|
|
833
|
+
// discovered secret's value this instance has ever minted a placeholder
|
|
834
|
+
// for, or text a configured regex pattern matches directly. Shared by the
|
|
835
|
+
// obfuscate-direction guard below and the deobfuscate-direction bare-alias
|
|
836
|
+
// guard in `#deobfuscate` — both fall back to a friendly-name-independent
|
|
837
|
+
// alias keyed only by the hash suffix, so both need the same defense
|
|
838
|
+
// against a forged/attacker-chosen prefix.
|
|
839
|
+
#prefixIsSecretShaped(prefix) {
|
|
840
|
+
for (const secretValue of this.#configuredSecretValues) {
|
|
841
|
+
const sanitizedSecret = sanitizeForCollisionCheck(secretValue);
|
|
842
|
+
if (sanitizedLabelCollidesWithSecret(prefix, sanitizedSecret))
|
|
843
|
+
return true;
|
|
844
|
+
}
|
|
845
|
+
for (const secretValue of this.#currentRegexSecretValues) {
|
|
846
|
+
const sanitizedSecret = sanitizeForCollisionCheck(secretValue);
|
|
847
|
+
if (sanitizedLabelCollidesWithSecret(prefix, sanitizedSecret))
|
|
848
|
+
return true;
|
|
849
|
+
}
|
|
850
|
+
for (const { secret } of this.#obfuscateMappings.values()) {
|
|
851
|
+
const sanitizedSecret = sanitizeForCollisionCheck(secret);
|
|
852
|
+
if (sanitizedLabelCollidesWithSecret(prefix, sanitizedSecret))
|
|
853
|
+
return true;
|
|
854
|
+
}
|
|
855
|
+
for (const entry of this.#regexEntries) {
|
|
856
|
+
entry.regex.lastIndex = 0;
|
|
857
|
+
const matches = entry.regex.test(prefix);
|
|
858
|
+
entry.regex.lastIndex = 0;
|
|
859
|
+
if (matches)
|
|
860
|
+
return true;
|
|
861
|
+
}
|
|
862
|
+
return false;
|
|
863
|
+
}
|
|
864
|
+
// A placeholder is an exact match, or the friendly-name-independent bare
|
|
865
|
+
// alias: needed so a placeholder minted under a NOW-renamed friendly name
|
|
866
|
+
// (same secret, same key, different `secrets.yml` label) still round-trips
|
|
867
|
+
// when older provider-visible text is re-scanned by a renamed-config
|
|
868
|
+
// instance — the hash suffix is a keyed digest of the secret VALUE alone,
|
|
869
|
+
// so a same-key instance recomputes it identically regardless of the
|
|
870
|
+
// label. The dropped prefix is otherwise unconstrained text, though: an
|
|
871
|
+
// attacker who has observed ANY live placeholder's hash suffix elsewhere
|
|
872
|
+
// in the transcript could wrap it around a DIFFERENT real secret's
|
|
873
|
+
// plaintext (or a normalized rendering of one) to make the whole token
|
|
874
|
+
// look pre-redacted and smuggle that secret through untouched.
|
|
875
|
+
// `#prefixIsSecretShaped` above guards against that, shared with the
|
|
876
|
+
// deobfuscate-direction check in `#deobfuscate`.
|
|
877
|
+
#isGeneratedPlaceholder(placeholder) {
|
|
878
|
+
if (this.#deobfuscateMap.has(placeholder))
|
|
879
|
+
return true;
|
|
880
|
+
const match = /^([A-Z0-9]+)_([A-Z0-9]{4,}(?::[ULCM])?)$/.exec(placeholder.slice(2, -2));
|
|
881
|
+
if (match === null)
|
|
882
|
+
return false;
|
|
883
|
+
if (this.#prefixIsSecretShaped(match[1]))
|
|
884
|
+
return false;
|
|
885
|
+
return this.#deobfuscateMap.has(`$$${match[2]}$$`);
|
|
886
|
+
}
|
|
887
|
+
// Replace `search` with `replacement` outside known generated placeholders while
|
|
888
|
+
// maintaining a parallel `origin` tag string (one char per result char): kept
|
|
889
|
+
// bytes keep their tag, inserted `replacement` bytes get `tag`, and preserved
|
|
890
|
+
// placeholder spans keep their original tags. Lets later passes tell prior-call
|
|
891
|
+
// placeholders ("I") from ones freshly inserted this call ("F") by RANGE.
|
|
892
|
+
#replaceOutsidePlaceholdersTracked(text, origin, search, replacement, tag) {
|
|
893
|
+
if (search.length === 0)
|
|
894
|
+
return { text, origin };
|
|
895
|
+
PLACEHOLDER_RE.lastIndex = 0;
|
|
896
|
+
let outText = "";
|
|
897
|
+
let outOrigin = "";
|
|
898
|
+
let pending = 0;
|
|
899
|
+
const emitChunk = (from, to) => {
|
|
900
|
+
let last = from;
|
|
901
|
+
let idx = text.indexOf(search, from);
|
|
902
|
+
while (idx !== -1 && idx + search.length <= to) {
|
|
903
|
+
outText += text.slice(last, idx) + replacement;
|
|
904
|
+
outOrigin += origin.slice(last, idx) + tag.repeat(replacement.length);
|
|
905
|
+
last = idx + search.length;
|
|
906
|
+
idx = text.indexOf(search, last);
|
|
907
|
+
}
|
|
908
|
+
outText += text.slice(last, to);
|
|
909
|
+
outOrigin += origin.slice(last, to);
|
|
910
|
+
};
|
|
911
|
+
for (;;) {
|
|
912
|
+
const match = PLACEHOLDER_RE.exec(text);
|
|
913
|
+
if (match === null)
|
|
914
|
+
break;
|
|
915
|
+
if (!(this.#isGeneratedPlaceholder(match[0]) && match[0] !== search)) {
|
|
916
|
+
resumePlaceholderScanAfterRejectedCandidate(match);
|
|
917
|
+
continue;
|
|
918
|
+
}
|
|
919
|
+
emitChunk(pending, match.index);
|
|
920
|
+
outText += match[0];
|
|
921
|
+
outOrigin += origin.slice(match.index, match.index + match[0].length);
|
|
922
|
+
pending = match.index + match[0].length;
|
|
923
|
+
}
|
|
924
|
+
emitChunk(pending, text.length);
|
|
925
|
+
return { text: outText, origin: outOrigin };
|
|
926
|
+
}
|
|
927
|
+
#placeholderForRegexChunk(secret, friendlyName) {
|
|
928
|
+
let index = this.#findObfuscateIndex(secret);
|
|
929
|
+
if (index === undefined) {
|
|
930
|
+
index = this.#nextIndex++;
|
|
931
|
+
const placeholder = this.#createPlaceholder(secret, friendlyName);
|
|
932
|
+
this.#obfuscateMappings.set(index, { secret, placeholder });
|
|
933
|
+
this.#generatedPlaceholders.add(placeholder);
|
|
934
|
+
}
|
|
935
|
+
return this.#placeholderForCurrentInput(this.#obfuscateMappings.get(index).placeholder);
|
|
936
|
+
}
|
|
937
|
+
#obfuscateOutsidePlaceholdersTracked(text, origin, friendlyName) {
|
|
938
|
+
PLACEHOLDER_RE.lastIndex = 0;
|
|
939
|
+
let outText = "";
|
|
940
|
+
let outOrigin = "";
|
|
941
|
+
let pending = 0;
|
|
942
|
+
const emitChunk = (from, to) => {
|
|
943
|
+
if (from >= to)
|
|
944
|
+
return;
|
|
945
|
+
const placeholder = this.#placeholderForRegexChunk(text.slice(from, to), friendlyName);
|
|
946
|
+
outText += placeholder;
|
|
947
|
+
outOrigin += "F".repeat(placeholder.length);
|
|
948
|
+
};
|
|
949
|
+
for (;;) {
|
|
950
|
+
const match = PLACEHOLDER_RE.exec(text);
|
|
951
|
+
if (match === null)
|
|
952
|
+
break;
|
|
953
|
+
if (!this.#isGeneratedPlaceholder(match[0])) {
|
|
954
|
+
resumePlaceholderScanAfterRejectedCandidate(match);
|
|
955
|
+
continue;
|
|
956
|
+
}
|
|
957
|
+
emitChunk(pending, match.index);
|
|
958
|
+
outText += match[0];
|
|
959
|
+
outOrigin += origin.slice(match.index, match.index + match[0].length);
|
|
960
|
+
pending = match.index + match[0].length;
|
|
961
|
+
}
|
|
962
|
+
emitChunk(pending, text.length);
|
|
963
|
+
return { text: outText, origin: outOrigin };
|
|
964
|
+
}
|
|
965
|
+
#knownPlaceholderRanges(text) {
|
|
966
|
+
PLACEHOLDER_RE.lastIndex = 0;
|
|
967
|
+
const ranges = [];
|
|
968
|
+
for (;;) {
|
|
969
|
+
const match = PLACEHOLDER_RE.exec(text);
|
|
970
|
+
if (match === null)
|
|
971
|
+
break;
|
|
972
|
+
if (this.#isGeneratedPlaceholder(match[0])) {
|
|
973
|
+
ranges.push({ start: match.index, end: match.index + match[0].length });
|
|
974
|
+
}
|
|
975
|
+
else {
|
|
976
|
+
resumePlaceholderScanAfterRejectedCandidate(match);
|
|
977
|
+
}
|
|
978
|
+
}
|
|
979
|
+
return ranges;
|
|
980
|
+
}
|
|
981
|
+
#collectRegexMatches(text, regex, mode, origin, replacement) {
|
|
982
|
+
const knownPlaceholderRanges = this.#knownPlaceholderRanges(text);
|
|
983
|
+
const regexScan = buildReplaceRegexScan(text, knownPlaceholderRanges, this.#deobfuscateMap);
|
|
984
|
+
const scanText = regexScan.text;
|
|
985
|
+
regex.lastIndex = 0;
|
|
986
|
+
const matches = [];
|
|
987
|
+
for (;;) {
|
|
988
|
+
const match = regex.exec(scanText);
|
|
989
|
+
if (match === null)
|
|
990
|
+
break;
|
|
991
|
+
if (match[0].length === 0) {
|
|
992
|
+
regex.lastIndex++;
|
|
993
|
+
continue;
|
|
994
|
+
}
|
|
995
|
+
let start = match.index;
|
|
996
|
+
let end = match.index + match[0].length;
|
|
997
|
+
let scanMatchLength = match[0].length;
|
|
998
|
+
let scanMatchValue = match[0];
|
|
999
|
+
let canonicalValue = "";
|
|
1000
|
+
let recursive = false;
|
|
1001
|
+
let preserveGeneratedPlaceholders = false;
|
|
1002
|
+
let preserveInputPlaceholders = false;
|
|
1003
|
+
let inputPlaceholderOutside = "";
|
|
1004
|
+
let inputPlaceholderOutsideIndependentlyMatches = false;
|
|
1005
|
+
let inputPlaceholderOutsideStart = -1;
|
|
1006
|
+
let inputPlaceholderOutsideChunkCount = 0;
|
|
1007
|
+
let inputPlaceholderInnerIndependentlyMatches = false;
|
|
1008
|
+
let mapped = mapReplaceRegexMatch(regexScan.segments, start, end);
|
|
1009
|
+
if (mapped.partialPlaceholderCut) {
|
|
1010
|
+
// The match straddles a generated placeholder (its boundary falls inside
|
|
1011
|
+
// the secret's expanded value). Rewriting across the token drops bytes
|
|
1012
|
+
// (obfuscate) or drifts the redaction across re-obfuscation passes
|
|
1013
|
+
// (replace), so the cut secret must stay as its existing placeholder.
|
|
1014
|
+
// But wholly-outside bytes on either side of the placeholder are still
|
|
1015
|
+
// provider-visible content covered by the regex. Probe the prefix against
|
|
1016
|
+
// the full expanded scan text so right-hand context supplied by the
|
|
1017
|
+
// placeholder still satisfies lookahead/alternatives, then clamp the
|
|
1018
|
+
// accepted match to the prefix boundary. If no prefix is available, redact
|
|
1019
|
+
// the outside suffix that was covered by the full-context match. Every
|
|
1020
|
+
// resume point computed below is chained through
|
|
1021
|
+
// `extendPastAdjacentPlaceholders`: a resume position that lands exactly on
|
|
1022
|
+
// the START of ANOTHER placeholder must skip that one too before a fresh
|
|
1023
|
+
// `regex.exec` attempt runs there, so a run of adjacent placeholders resolves
|
|
1024
|
+
// identically whether its LEADING member is raw text this call is about to
|
|
1025
|
+
// placeholder or is already a placeholder from a prior call/pass (see that
|
|
1026
|
+
// helper's doc for the cross-call drift this prevents).
|
|
1027
|
+
const cutResumeIndex = mapped.cutResumeIndex;
|
|
1028
|
+
const prefixScanEnd = mapped.firstPlaceholderScanStart;
|
|
1029
|
+
let handledOutside = false;
|
|
1030
|
+
if (prefixScanEnd > match.index) {
|
|
1031
|
+
regex.lastIndex = match.index;
|
|
1032
|
+
const prefixMatch = regex.exec(scanText);
|
|
1033
|
+
if (prefixMatch !== null && prefixMatch[0].length > 0 && prefixMatch.index < prefixScanEnd) {
|
|
1034
|
+
const prefixStart = prefixMatch.index;
|
|
1035
|
+
const prefixEnd = Math.min(prefixMatch.index + prefixMatch[0].length, prefixScanEnd);
|
|
1036
|
+
const prefixMapped = mapReplaceRegexMatch(regexScan.segments, prefixStart, prefixEnd);
|
|
1037
|
+
if (!prefixMapped.partialPlaceholderCut && prefixEnd > prefixStart) {
|
|
1038
|
+
start = prefixStart;
|
|
1039
|
+
end = prefixEnd;
|
|
1040
|
+
scanMatchValue = scanText.slice(prefixStart, prefixEnd);
|
|
1041
|
+
// Keep the full match length in the expanded scan view (not the
|
|
1042
|
+
// clamped prefix length) — the short-match guard below measures the
|
|
1043
|
+
// regex's own match length, so a full-size match with a short
|
|
1044
|
+
// outside-prefix remainder must not be undercounted as too short,
|
|
1045
|
+
// matching the suffix-clamp branch below.
|
|
1046
|
+
scanMatchLength = match[0].length;
|
|
1047
|
+
mapped = prefixMapped;
|
|
1048
|
+
regex.lastIndex = extendPastAdjacentPlaceholders(regexScan.segments, prefixEnd);
|
|
1049
|
+
handledOutside = true;
|
|
1050
|
+
}
|
|
1051
|
+
}
|
|
1052
|
+
}
|
|
1053
|
+
if (!handledOutside && cutResumeIndex < end) {
|
|
1054
|
+
const suffixStart = cutResumeIndex;
|
|
1055
|
+
const suffixEnd = end;
|
|
1056
|
+
const suffixMapped = mapReplaceRegexMatch(regexScan.segments, suffixStart, suffixEnd);
|
|
1057
|
+
if (!suffixMapped.partialPlaceholderCut) {
|
|
1058
|
+
start = suffixStart;
|
|
1059
|
+
end = suffixEnd;
|
|
1060
|
+
scanMatchValue = scanText.slice(suffixStart, suffixEnd);
|
|
1061
|
+
scanMatchLength = match[0].length;
|
|
1062
|
+
mapped = suffixMapped;
|
|
1063
|
+
regex.lastIndex = extendPastAdjacentPlaceholders(regexScan.segments, suffixEnd);
|
|
1064
|
+
handledOutside = true;
|
|
1065
|
+
}
|
|
1066
|
+
}
|
|
1067
|
+
if (!handledOutside) {
|
|
1068
|
+
regex.lastIndex = extendPastAdjacentPlaceholders(regexScan.segments, cutResumeIndex);
|
|
1069
|
+
continue;
|
|
1070
|
+
}
|
|
1071
|
+
}
|
|
1072
|
+
// Scan-space coordinates of the match (placeholders expanded). The default
|
|
1073
|
+
// redaction's fixed-point check must run against this expanded view — the
|
|
1074
|
+
// view re-obfuscation actually scans — not the literal `#…#` text, or a
|
|
1075
|
+
// redaction adjacent to a placeholder (e.g. an outside prefix before a cut
|
|
1076
|
+
// secret) could drift when the placeholder expands and connects to it.
|
|
1077
|
+
const scanMatchStart = start;
|
|
1078
|
+
const scanMatchEnd = end;
|
|
1079
|
+
let defaultReplacement;
|
|
1080
|
+
start = mapped.start;
|
|
1081
|
+
end = mapped.end;
|
|
1082
|
+
preserveGeneratedPlaceholders = mapped.preserveGeneratedPlaceholders;
|
|
1083
|
+
// A match overlapping a placeholder that arrived in the INPUT (origin tag
|
|
1084
|
+
// "I" — generated by a PRIOR obfuscate() call) must preserve that
|
|
1085
|
+
// placeholder atomically so repeated obfuscation stays a fixed point. If
|
|
1086
|
+
// raw bytes surround it, they still need redaction; branch-specific
|
|
1087
|
+
// replacement below keeps prior placeholders while covering the
|
|
1088
|
+
// non-placeholder chunks.
|
|
1089
|
+
const overlapsInputPlaceholder = knownPlaceholderRanges.some((range) => start < range.end && end > range.start && origin[range.start] === "I");
|
|
1090
|
+
preserveInputPlaceholders = overlapsInputPlaceholder;
|
|
1091
|
+
if (overlapsInputPlaceholder) {
|
|
1092
|
+
const firstOutside = firstOutsidePlaceholderRange(start, end, knownPlaceholderRanges);
|
|
1093
|
+
if (mode === "replace" &&
|
|
1094
|
+
replacement !== undefined &&
|
|
1095
|
+
firstOutside !== undefined &&
|
|
1096
|
+
text.slice(firstOutside.start, firstOutside.start + replacement.length) === replacement) {
|
|
1097
|
+
const expandedEnd = firstOutside.start + replacement.length;
|
|
1098
|
+
if (expandedEnd > end) {
|
|
1099
|
+
regex.lastIndex = Math.max(regex.lastIndex, match.index + match[0].length + expandedEnd - end);
|
|
1100
|
+
end = expandedEnd;
|
|
1101
|
+
}
|
|
1102
|
+
}
|
|
1103
|
+
inputPlaceholderOutside = textOutsidePlaceholderRanges(text, start, end, knownPlaceholderRanges);
|
|
1104
|
+
inputPlaceholderOutsideStart =
|
|
1105
|
+
firstOutsidePlaceholderRange(start, end, knownPlaceholderRanges)?.start ?? -1;
|
|
1106
|
+
inputPlaceholderOutsideChunkCount = countOutsidePlaceholderRanges(start, end, knownPlaceholderRanges);
|
|
1107
|
+
if (inputPlaceholderOutside.length === 0)
|
|
1108
|
+
continue;
|
|
1109
|
+
const resumeIndex = regex.lastIndex;
|
|
1110
|
+
// Test each outside chunk in isolation rather than the concatenation of
|
|
1111
|
+
// all of them: concatenating chunks that sit on either side of the
|
|
1112
|
+
// placeholder erases the `#…#` token boundary between them (e.g. a
|
|
1113
|
+
// prefix "ABCDEFGH" that independently matches `\b[A-Z]{8}\b` next to a
|
|
1114
|
+
// placeholder, followed by a raw "I" suffix, concatenates to "ABCDEFGHI"
|
|
1115
|
+
// — which does NOT match, since the boundary the placeholder provided is
|
|
1116
|
+
// gone). That false negative would leave a genuinely independent,
|
|
1117
|
+
// secret-shaped chunk unredacted. Each chunk is tested in BOTH its real
|
|
1118
|
+
// literal-token context (where the token's own non-word boundary can
|
|
1119
|
+
// complete a boundary-sensitive pattern) and the EXPANDED scan context —
|
|
1120
|
+
// the same view re-obfuscation's own regex scan runs against — so a
|
|
1121
|
+
// lookbehind/lookahead that only resolves once the neighboring
|
|
1122
|
+
// placeholder is expanded (e.g. `(?<=ABCDEFGH)SECRET` beside a
|
|
1123
|
+
// placeholder for `ABCDEFGH`) also counts as an independent match.
|
|
1124
|
+
inputPlaceholderOutsideIndependentlyMatches = outsidePlaceholderRangesAnyIndependentlyMatch(text, scanText, regexScan.segments, start, end, knownPlaceholderRanges, regex);
|
|
1125
|
+
// Whether the placeholder's own (deobfuscated) value satisfies the regex
|
|
1126
|
+
// with the surrounding raw bytes dropped. When it does, those raw bytes
|
|
1127
|
+
// are greedy spillover the match never needed (e.g. the trailing `A` in
|
|
1128
|
+
// `SECRETUV→#…#A`); obfuscating them on re-obfuscation drifts the
|
|
1129
|
+
// provider-visible history and prompt-cache prefix. When it does NOT
|
|
1130
|
+
// (e.g. `api_key=` literal that the placeholder value alone cannot match),
|
|
1131
|
+
// the outside bytes are structurally required and must be obfuscated.
|
|
1132
|
+
const innerText = placeholderInnerText(text, start, end, knownPlaceholderRanges, this.#deobfuscateMap);
|
|
1133
|
+
regex.lastIndex = 0;
|
|
1134
|
+
inputPlaceholderInnerIndependentlyMatches = innerText.length > 0 && regex.test(innerText);
|
|
1135
|
+
regex.lastIndex = resumeIndex;
|
|
1136
|
+
}
|
|
1137
|
+
if (mode === "replace") {
|
|
1138
|
+
canonicalValue = scanMatchValue;
|
|
1139
|
+
recursive = mapped.recursive;
|
|
1140
|
+
}
|
|
1141
|
+
else {
|
|
1142
|
+
const overlappingRanges = knownPlaceholderRanges.filter((range) => start < range.end && end > range.start);
|
|
1143
|
+
const containedByPlaceholder = overlappingRanges.some((range) => start >= range.start && end <= range.end);
|
|
1144
|
+
if (containedByPlaceholder) {
|
|
1145
|
+
continue;
|
|
1146
|
+
}
|
|
1147
|
+
const canonical = deobfuscateGeneratedPlaceholderRanges(text, start, end, knownPlaceholderRanges, this.#deobfuscateMap);
|
|
1148
|
+
canonicalValue = canonical.text;
|
|
1149
|
+
recursive = canonical.recursive;
|
|
1150
|
+
}
|
|
1151
|
+
const scanContext = {
|
|
1152
|
+
text: scanText,
|
|
1153
|
+
start: scanMatchStart,
|
|
1154
|
+
end: scanMatchEnd,
|
|
1155
|
+
};
|
|
1156
|
+
if (mode === "replace" && replacement === undefined && !preserveGeneratedPlaceholders) {
|
|
1157
|
+
const savedLastIndex = regex.lastIndex;
|
|
1158
|
+
defaultReplacement = this.#generateRegexReplacement(scanMatchValue, regex, scanContext);
|
|
1159
|
+
regex.lastIndex = savedLastIndex;
|
|
1160
|
+
}
|
|
1161
|
+
matches.push({
|
|
1162
|
+
start,
|
|
1163
|
+
end,
|
|
1164
|
+
value: text.slice(start, end),
|
|
1165
|
+
defaultReplacement,
|
|
1166
|
+
canonicalValue,
|
|
1167
|
+
scanMatchLength,
|
|
1168
|
+
recursive,
|
|
1169
|
+
preserveGeneratedPlaceholders,
|
|
1170
|
+
preserveInputPlaceholders,
|
|
1171
|
+
inputPlaceholderOutside,
|
|
1172
|
+
inputPlaceholderOutsideIndependentlyMatches,
|
|
1173
|
+
inputPlaceholderOutsideStart,
|
|
1174
|
+
inputPlaceholderOutsideChunkCount,
|
|
1175
|
+
inputPlaceholderInnerIndependentlyMatches,
|
|
1176
|
+
scanContext,
|
|
1177
|
+
});
|
|
1178
|
+
}
|
|
1179
|
+
return matches.reverse();
|
|
1180
|
+
}
|
|
1181
|
+
}
|
|
1182
|
+
//# sourceMappingURL=obfuscator.js.map
|