@hoilab/ada-cli 0.84.22 → 0.85.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +29 -2
- package/README.es.md +17 -6
- package/README.md +109 -11
- package/dist/ada-publico.d.ts +35 -0
- package/dist/ada-publico.d.ts.map +1 -0
- package/dist/ada-publico.js +40 -0
- package/dist/ada-publico.js.map +1 -0
- package/dist/cli/audit-command.d.ts +15 -0
- package/dist/cli/audit-command.d.ts.map +1 -0
- package/dist/cli/audit-command.js +280 -0
- package/dist/cli/audit-command.js.map +1 -0
- package/dist/cli/banco-command.d.ts +15 -0
- package/dist/cli/banco-command.d.ts.map +1 -0
- package/dist/cli/banco-command.js +213 -0
- package/dist/cli/banco-command.js.map +1 -0
- package/dist/cli/cleanse-command.d.ts +11 -0
- package/dist/cli/cleanse-command.d.ts.map +1 -0
- package/dist/cli/cleanse-command.js +101 -0
- package/dist/cli/cleanse-command.js.map +1 -0
- package/dist/cli/commit-command.d.ts +31 -0
- package/dist/cli/commit-command.d.ts.map +1 -0
- package/dist/cli/commit-command.js +158 -0
- package/dist/cli/commit-command.js.map +1 -0
- package/dist/cli/computer-command.d.ts +12 -0
- package/dist/cli/computer-command.d.ts.map +1 -0
- package/dist/cli/computer-command.js +141 -0
- package/dist/cli/computer-command.js.map +1 -0
- package/dist/cli/discover-command.d.ts +18 -0
- package/dist/cli/discover-command.d.ts.map +1 -0
- package/dist/cli/discover-command.js +108 -0
- package/dist/cli/discover-command.js.map +1 -0
- package/dist/cli/hashline-command.d.ts +11 -0
- package/dist/cli/hashline-command.d.ts.map +1 -0
- package/dist/cli/hashline-command.js +106 -0
- package/dist/cli/hashline-command.js.map +1 -0
- package/dist/cli/import-command.d.ts +35 -0
- package/dist/cli/import-command.d.ts.map +1 -0
- package/dist/cli/import-command.js +164 -0
- package/dist/cli/import-command.js.map +1 -0
- package/dist/cli/politica-command.d.ts +20 -0
- package/dist/cli/politica-command.d.ts.map +1 -0
- package/dist/cli/politica-command.js +93 -0
- package/dist/cli/politica-command.js.map +1 -0
- package/dist/cli/refine-command.d.ts +18 -0
- package/dist/cli/refine-command.d.ts.map +1 -0
- package/dist/cli/refine-command.js +101 -0
- package/dist/cli/refine-command.js.map +1 -0
- package/dist/cli/review-command.d.ts +24 -0
- package/dist/cli/review-command.d.ts.map +1 -0
- package/dist/cli/review-command.js +168 -0
- package/dist/cli/review-command.js.map +1 -0
- package/dist/cli/schedule-command.d.ts +17 -0
- package/dist/cli/schedule-command.d.ts.map +1 -0
- package/dist/cli/schedule-command.js +117 -0
- package/dist/cli/schedule-command.js.map +1 -0
- package/dist/cli/serve-command.d.ts +72 -0
- package/dist/cli/serve-command.d.ts.map +1 -0
- package/dist/cli/serve-command.js +568 -0
- package/dist/cli/serve-command.js.map +1 -0
- package/dist/cli/telegram-command.d.ts +18 -0
- package/dist/cli/telegram-command.d.ts.map +1 -0
- package/dist/cli/telegram-command.js +137 -0
- package/dist/cli/telegram-command.js.map +1 -0
- package/dist/cli/telemetria-command.d.ts +22 -0
- package/dist/cli/telemetria-command.d.ts.map +1 -0
- package/dist/cli/telemetria-command.js +127 -0
- package/dist/cli/telemetria-command.js.map +1 -0
- package/dist/cli/undo-command.d.ts +9 -0
- package/dist/cli/undo-command.d.ts.map +1 -0
- package/dist/cli/undo-command.js +56 -0
- package/dist/cli/undo-command.js.map +1 -0
- package/dist/cli/usage-command.d.ts +10 -0
- package/dist/cli/usage-command.d.ts.map +1 -0
- package/dist/cli/usage-command.js +209 -0
- package/dist/cli/usage-command.js.map +1 -0
- package/dist/cli/wiki-command.d.ts +9 -0
- package/dist/cli/wiki-command.d.ts.map +1 -0
- package/dist/cli/wiki-command.js +76 -0
- package/dist/cli/wiki-command.js.map +1 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +10 -11
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -1
- package/dist/config.js.map +1 -1
- package/dist/core/ada.d.ts +58 -0
- package/dist/core/ada.d.ts.map +1 -0
- package/dist/core/ada.js +61 -0
- package/dist/core/ada.js.map +1 -0
- package/dist/core/advisor/guarda.d.ts +66 -0
- package/dist/core/advisor/guarda.d.ts.map +1 -0
- package/dist/core/advisor/guarda.js +191 -0
- package/dist/core/advisor/guarda.js.map +1 -0
- package/dist/core/advisor/runtime.d.ts +66 -0
- package/dist/core/advisor/runtime.d.ts.map +1 -0
- package/dist/core/advisor/runtime.js +121 -0
- package/dist/core/advisor/runtime.js.map +1 -0
- package/dist/core/advisor/sesion.d.ts +109 -0
- package/dist/core/advisor/sesion.d.ts.map +1 -0
- package/dist/core/advisor/sesion.js +139 -0
- package/dist/core/advisor/sesion.js.map +1 -0
- package/dist/core/agent-session.d.ts +30 -2
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +430 -22
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/agents/loader.d.ts +77 -0
- package/dist/core/agents/loader.d.ts.map +1 -0
- package/dist/core/agents/loader.js +154 -0
- package/dist/core/agents/loader.js.map +1 -0
- package/dist/core/aprobacion/generados.d.ts +37 -0
- package/dist/core/aprobacion/generados.d.ts.map +1 -0
- package/dist/core/aprobacion/generados.js +85 -0
- package/dist/core/aprobacion/generados.js.map +1 -0
- package/dist/core/aprobacion/politica-de-maquina.d.ts +90 -0
- package/dist/core/aprobacion/politica-de-maquina.d.ts.map +1 -0
- package/dist/core/aprobacion/politica-de-maquina.js +212 -0
- package/dist/core/aprobacion/politica-de-maquina.js.map +1 -0
- package/dist/core/aprobacion/politica.d.ts +90 -0
- package/dist/core/aprobacion/politica.d.ts.map +1 -0
- package/dist/core/aprobacion/politica.js +375 -0
- package/dist/core/aprobacion/politica.js.map +1 -0
- package/dist/core/arranque/atajos.d.ts +46 -0
- package/dist/core/arranque/atajos.d.ts.map +1 -0
- package/dist/core/arranque/atajos.js +113 -0
- package/dist/core/arranque/atajos.js.map +1 -0
- package/dist/core/audit/exportacion.d.ts +54 -0
- package/dist/core/audit/exportacion.d.ts.map +1 -0
- package/dist/core/audit/exportacion.js +265 -0
- package/dist/core/audit/exportacion.js.map +1 -0
- package/dist/core/audit/libro.d.ts +318 -0
- package/dist/core/audit/libro.d.ts.map +1 -0
- package/dist/core/audit/libro.js +508 -0
- package/dist/core/audit/libro.js.map +1 -0
- package/dist/core/audit/registro-sesion.d.ts +78 -0
- package/dist/core/audit/registro-sesion.d.ts.map +1 -0
- package/dist/core/audit/registro-sesion.js +202 -0
- package/dist/core/audit/registro-sesion.js.map +1 -0
- package/dist/core/audit/retencion.d.ts +82 -0
- package/dist/core/audit/retencion.d.ts.map +1 -0
- package/dist/core/audit/retencion.js +152 -0
- package/dist/core/audit/retencion.js.map +1 -0
- package/dist/core/audit/rutas.d.ts +23 -0
- package/dist/core/audit/rutas.d.ts.map +1 -0
- package/dist/core/audit/rutas.js +23 -0
- package/dist/core/audit/rutas.js.map +1 -0
- package/dist/core/auth-storage.d.ts +0 -3
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +17 -5
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/banco/almacenamiento.d.ts +18 -0
- package/dist/core/banco/almacenamiento.d.ts.map +1 -0
- package/dist/core/banco/almacenamiento.js +50 -0
- package/dist/core/banco/almacenamiento.js.map +1 -0
- package/dist/core/banco/analisis.d.ts +37 -0
- package/dist/core/banco/analisis.d.ts.map +1 -0
- package/dist/core/banco/analisis.js +164 -0
- package/dist/core/banco/analisis.js.map +1 -0
- package/dist/core/banco/bloques.d.ts +39 -0
- package/dist/core/banco/bloques.d.ts.map +1 -0
- package/dist/core/banco/bloques.js +84 -0
- package/dist/core/banco/bloques.js.map +1 -0
- package/dist/core/banco/cargas.d.ts +84 -0
- package/dist/core/banco/cargas.d.ts.map +1 -0
- package/dist/core/banco/cargas.js +520 -0
- package/dist/core/banco/cargas.js.map +1 -0
- package/dist/core/banco/comparar.d.ts +29 -0
- package/dist/core/banco/comparar.d.ts.map +1 -0
- package/dist/core/banco/comparar.js +28 -0
- package/dist/core/banco/comparar.js.map +1 -0
- package/dist/core/banco/ejecutar.d.ts +44 -0
- package/dist/core/banco/ejecutar.d.ts.map +1 -0
- package/dist/core/banco/ejecutar.js +183 -0
- package/dist/core/banco/ejecutar.js.map +1 -0
- package/dist/core/banco/generar.d.ts +24 -0
- package/dist/core/banco/generar.d.ts.map +1 -0
- package/dist/core/banco/generar.js +159 -0
- package/dist/core/banco/generar.js.map +1 -0
- package/dist/core/banco/mutaciones.d.ts +25 -0
- package/dist/core/banco/mutaciones.d.ts.map +1 -0
- package/dist/core/banco/mutaciones.js +215 -0
- package/dist/core/banco/mutaciones.js.map +1 -0
- package/dist/core/banco/tipos.d.ts +121 -0
- package/dist/core/banco/tipos.d.ts.map +1 -0
- package/dist/core/banco/tipos.js +16 -0
- package/dist/core/banco/tipos.js.map +1 -0
- package/dist/core/blobs/almacen.d.ts +81 -0
- package/dist/core/blobs/almacen.d.ts.map +1 -0
- package/dist/core/blobs/almacen.js +198 -0
- package/dist/core/blobs/almacen.js.map +1 -0
- package/dist/core/blobs/broker.d.ts +103 -0
- package/dist/core/blobs/broker.d.ts.map +1 -0
- package/dist/core/blobs/broker.js +204 -0
- package/dist/core/blobs/broker.js.map +1 -0
- package/dist/core/blobs/index.d.ts +70 -0
- package/dist/core/blobs/index.d.ts.map +1 -0
- package/dist/core/blobs/index.js +232 -0
- package/dist/core/blobs/index.js.map +1 -0
- package/dist/core/blobs/payload.d.ts +55 -0
- package/dist/core/blobs/payload.d.ts.map +1 -0
- package/dist/core/blobs/payload.js +255 -0
- package/dist/core/blobs/payload.js.map +1 -0
- package/dist/core/blobs/proveedor.d.ts +85 -0
- package/dist/core/blobs/proveedor.d.ts.map +1 -0
- package/dist/core/blobs/proveedor.js +196 -0
- package/dist/core/blobs/proveedor.js.map +1 -0
- package/dist/core/browser/cdp.d.ts +41 -0
- package/dist/core/browser/cdp.d.ts.map +1 -0
- package/dist/core/browser/cdp.js +119 -0
- package/dist/core/browser/cdp.js.map +1 -0
- package/dist/core/browser/politica.d.ts +51 -0
- package/dist/core/browser/politica.d.ts.map +1 -0
- package/dist/core/browser/politica.js +123 -0
- package/dist/core/browser/politica.js.map +1 -0
- package/dist/core/browser/sesion.d.ts +52 -0
- package/dist/core/browser/sesion.d.ts.map +1 -0
- package/dist/core/browser/sesion.js +176 -0
- package/dist/core/browser/sesion.js.map +1 -0
- package/dist/core/browser/tools.d.ts +16 -0
- package/dist/core/browser/tools.d.ts.map +1 -0
- package/dist/core/browser/tools.js +279 -0
- package/dist/core/browser/tools.js.map +1 -0
- package/dist/core/commit/diff.d.ts +56 -0
- package/dist/core/commit/diff.d.ts.map +1 -0
- package/dist/core/commit/diff.js +145 -0
- package/dist/core/commit/diff.js.map +1 -0
- package/dist/core/commit/mensaje.d.ts +80 -0
- package/dist/core/commit/mensaje.d.ts.map +1 -0
- package/dist/core/commit/mensaje.js +207 -0
- package/dist/core/commit/mensaje.js.map +1 -0
- package/dist/core/compactar/index.d.ts +52 -0
- package/dist/core/compactar/index.d.ts.map +1 -0
- package/dist/core/compactar/index.js +91 -0
- package/dist/core/compactar/index.js.map +1 -0
- package/dist/core/compactar/registro-denso.d.ts +160 -0
- package/dist/core/compactar/registro-denso.d.ts.map +1 -0
- package/dist/core/compactar/registro-denso.js +620 -0
- package/dist/core/compactar/registro-denso.js.map +1 -0
- package/dist/core/computer/captura.d.ts +35 -0
- package/dist/core/computer/captura.d.ts.map +1 -0
- package/dist/core/computer/captura.js +140 -0
- package/dist/core/computer/captura.js.map +1 -0
- package/dist/core/computer/driver.d.ts +130 -0
- package/dist/core/computer/driver.d.ts.map +1 -0
- package/dist/core/computer/driver.js +206 -0
- package/dist/core/computer/driver.js.map +1 -0
- package/dist/core/computer/motor/actions.d.ts +109 -0
- package/dist/core/computer/motor/actions.d.ts.map +1 -0
- package/dist/core/computer/motor/actions.js +157 -0
- package/dist/core/computer/motor/actions.js.map +1 -0
- package/dist/core/computer/motor/bridge.d.ts +232 -0
- package/dist/core/computer/motor/bridge.d.ts.map +1 -0
- package/dist/core/computer/motor/bridge.js +2335 -0
- package/dist/core/computer/motor/bridge.js.map +1 -0
- package/dist/core/computer/motor/cdp.d.ts +107 -0
- package/dist/core/computer/motor/cdp.d.ts.map +1 -0
- package/dist/core/computer/motor/cdp.js +659 -0
- package/dist/core/computer/motor/cdp.js.map +1 -0
- package/dist/core/computer/motor/config.d.ts +23 -0
- package/dist/core/computer/motor/config.d.ts.map +1 -0
- package/dist/core/computer/motor/config.js +100 -0
- package/dist/core/computer/motor/config.js.map +1 -0
- package/dist/core/computer/motor/contract.d.ts +81 -0
- package/dist/core/computer/motor/contract.d.ts.map +1 -0
- package/dist/core/computer/motor/contract.js +14 -0
- package/dist/core/computer/motor/contract.js.map +1 -0
- package/dist/core/computer/motor/note.d.ts +37 -0
- package/dist/core/computer/motor/note.d.ts.map +1 -0
- package/dist/core/computer/motor/note.js +162 -0
- package/dist/core/computer/motor/note.js.map +1 -0
- package/dist/core/computer/motor/outline.d.ts +155 -0
- package/dist/core/computer/motor/outline.d.ts.map +1 -0
- package/dist/core/computer/motor/outline.js +590 -0
- package/dist/core/computer/motor/outline.js.map +1 -0
- package/dist/core/computer/motor/output.d.ts +18 -0
- package/dist/core/computer/motor/output.d.ts.map +1 -0
- package/dist/core/computer/motor/output.js +148 -0
- package/dist/core/computer/motor/output.js.map +1 -0
- package/dist/core/computer/motor/permissions.d.ts +41 -0
- package/dist/core/computer/motor/permissions.d.ts.map +1 -0
- package/dist/core/computer/motor/permissions.js +51 -0
- package/dist/core/computer/motor/permissions.js.map +1 -0
- package/dist/core/computer/motor/platform/architecture.d.ts +5 -0
- package/dist/core/computer/motor/platform/architecture.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/architecture.js +21 -0
- package/dist/core/computer/motor/platform/architecture.js.map +1 -0
- package/dist/core/computer/motor/platform/coerce.d.ts +4 -0
- package/dist/core/computer/motor/platform/coerce.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/coerce.js +17 -0
- package/dist/core/computer/motor/platform/coerce.js.map +1 -0
- package/dist/core/computer/motor/platform/index.d.ts +4 -0
- package/dist/core/computer/motor/platform/index.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/index.js +79 -0
- package/dist/core/computer/motor/platform/index.js.map +1 -0
- package/dist/core/computer/motor/platform/linux/backend.d.ts +3 -0
- package/dist/core/computer/motor/platform/linux/backend.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/linux/backend.js +173 -0
- package/dist/core/computer/motor/platform/linux/backend.js.map +1 -0
- package/dist/core/computer/motor/platform/linux/helper.d.ts +29 -0
- package/dist/core/computer/motor/platform/linux/helper.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/linux/helper.js +261 -0
- package/dist/core/computer/motor/platform/linux/helper.js.map +1 -0
- package/dist/core/computer/motor/platform/macos/backend.d.ts +3 -0
- package/dist/core/computer/motor/platform/macos/backend.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/macos/backend.js +124 -0
- package/dist/core/computer/motor/platform/macos/backend.js.map +1 -0
- package/dist/core/computer/motor/platform/macos/browser.d.ts +7 -0
- package/dist/core/computer/motor/platform/macos/browser.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/macos/browser.js +101 -0
- package/dist/core/computer/motor/platform/macos/browser.js.map +1 -0
- package/dist/core/computer/motor/platform/macos/helper-path.mjs +34 -0
- package/dist/core/computer/motor/platform/macos/helper.d.ts +32 -0
- package/dist/core/computer/motor/platform/macos/helper.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/macos/helper.js +277 -0
- package/dist/core/computer/motor/platform/macos/helper.js.map +1 -0
- package/dist/core/computer/motor/platform/macos/permissions.d.ts +4 -0
- package/dist/core/computer/motor/platform/macos/permissions.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/macos/permissions.js +118 -0
- package/dist/core/computer/motor/platform/macos/permissions.js.map +1 -0
- package/dist/core/computer/motor/platform/types.d.ts +263 -0
- package/dist/core/computer/motor/platform/types.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/types.js +2 -0
- package/dist/core/computer/motor/platform/types.js.map +1 -0
- package/dist/core/computer/motor/platform/windows/backend.d.ts +3 -0
- package/dist/core/computer/motor/platform/windows/backend.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/windows/backend.js +163 -0
- package/dist/core/computer/motor/platform/windows/backend.js.map +1 -0
- package/dist/core/computer/motor/platform/windows/helper.d.ts +18 -0
- package/dist/core/computer/motor/platform/windows/helper.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/windows/helper.js +174 -0
- package/dist/core/computer/motor/platform/windows/helper.js.map +1 -0
- package/dist/core/computer/motor/root-selection.d.ts +6 -0
- package/dist/core/computer/motor/root-selection.d.ts.map +1 -0
- package/dist/core/computer/motor/root-selection.js +28 -0
- package/dist/core/computer/motor/root-selection.js.map +1 -0
- package/dist/core/computer/motor/runtime.d.ts +50 -0
- package/dist/core/computer/motor/runtime.d.ts.map +1 -0
- package/dist/core/computer/motor/runtime.js +119 -0
- package/dist/core/computer/motor/runtime.js.map +1 -0
- package/dist/core/computer/motor/state.d.ts +68 -0
- package/dist/core/computer/motor/state.d.ts.map +1 -0
- package/dist/core/computer/motor/state.js +100 -0
- package/dist/core/computer/motor/state.js.map +1 -0
- package/dist/core/computer/motor/view.d.ts +6 -0
- package/dist/core/computer/motor/view.d.ts.map +1 -0
- package/dist/core/computer/motor/view.js +185 -0
- package/dist/core/computer/motor/view.js.map +1 -0
- package/dist/core/computer/motor-ada.d.ts +159 -0
- package/dist/core/computer/motor-ada.d.ts.map +1 -0
- package/dist/core/computer/motor-ada.js +412 -0
- package/dist/core/computer/motor-ada.js.map +1 -0
- package/dist/core/computer/politica.d.ts +56 -0
- package/dist/core/computer/politica.d.ts.map +1 -0
- package/dist/core/computer/politica.js +163 -0
- package/dist/core/computer/politica.js.map +1 -0
- package/dist/core/computer/tools.d.ts +26 -0
- package/dist/core/computer/tools.d.ts.map +1 -0
- package/dist/core/computer/tools.js +399 -0
- package/dist/core/computer/tools.js.map +1 -0
- package/dist/core/context-breakdown.d.ts +80 -0
- package/dist/core/context-breakdown.d.ts.map +1 -0
- package/dist/core/context-breakdown.js +87 -0
- package/dist/core/context-breakdown.js.map +1 -0
- package/dist/core/credenciales/cliente.d.ts +60 -0
- package/dist/core/credenciales/cliente.d.ts.map +1 -0
- package/dist/core/credenciales/cliente.js +81 -0
- package/dist/core/credenciales/cliente.js.map +1 -0
- package/dist/core/credenciales/pool.d.ts +96 -0
- package/dist/core/credenciales/pool.d.ts.map +1 -0
- package/dist/core/credenciales/pool.js +128 -0
- package/dist/core/credenciales/pool.js.map +1 -0
- package/dist/core/credenciales/reposo.d.ts +93 -0
- package/dist/core/credenciales/reposo.d.ts.map +1 -0
- package/dist/core/credenciales/reposo.js +489 -0
- package/dist/core/credenciales/reposo.js.map +1 -0
- package/dist/core/credenciales/servidor.d.ts +55 -0
- package/dist/core/credenciales/servidor.d.ts.map +1 -0
- package/dist/core/credenciales/servidor.js +205 -0
- package/dist/core/credenciales/servidor.js.map +1 -0
- package/dist/core/descubrimiento/comandos.d.ts +30 -0
- package/dist/core/descubrimiento/comandos.d.ts.map +1 -0
- package/dist/core/descubrimiento/comandos.js +76 -0
- package/dist/core/descubrimiento/comandos.js.map +1 -0
- package/dist/core/descubrimiento/mcp.d.ts +42 -0
- package/dist/core/descubrimiento/mcp.d.ts.map +1 -0
- package/dist/core/descubrimiento/mcp.js +130 -0
- package/dist/core/descubrimiento/mcp.js.map +1 -0
- package/dist/core/descubrimiento/reglas.d.ts +61 -0
- package/dist/core/descubrimiento/reglas.d.ts.map +1 -0
- package/dist/core/descubrimiento/reglas.js +134 -0
- package/dist/core/descubrimiento/reglas.js.map +1 -0
- package/dist/core/descubrimiento/skills.d.ts +57 -0
- package/dist/core/descubrimiento/skills.d.ts.map +1 -0
- package/dist/core/descubrimiento/skills.js +113 -0
- package/dist/core/descubrimiento/skills.js.map +1 -0
- package/dist/core/dificultad/clasificador.d.ts +133 -0
- package/dist/core/dificultad/clasificador.d.ts.map +1 -0
- package/dist/core/dificultad/clasificador.js +288 -0
- package/dist/core/dificultad/clasificador.js.map +1 -0
- package/dist/core/edicion/diario.d.ts +37 -0
- package/dist/core/edicion/diario.d.ts.map +1 -0
- package/dist/core/edicion/diario.js +51 -0
- package/dist/core/edicion/diario.js.map +1 -0
- package/dist/core/edicion/hashline.d.ts +71 -0
- package/dist/core/edicion/hashline.d.ts.map +1 -0
- package/dist/core/edicion/hashline.js +111 -0
- package/dist/core/edicion/hashline.js.map +1 -0
- package/dist/core/edicion/hueco.d.ts +64 -0
- package/dist/core/edicion/hueco.d.ts.map +1 -0
- package/dist/core/edicion/hueco.js +162 -0
- package/dist/core/edicion/hueco.js.map +1 -0
- package/dist/core/edicion/limpiar-carga.d.ts +39 -0
- package/dist/core/edicion/limpiar-carga.d.ts.map +1 -0
- package/dist/core/edicion/limpiar-carga.js +121 -0
- package/dist/core/edicion/limpiar-carga.js.map +1 -0
- package/dist/core/edicion/observador.d.ts +80 -0
- package/dist/core/edicion/observador.d.ts.map +1 -0
- package/dist/core/edicion/observador.js +183 -0
- package/dist/core/edicion/observador.js.map +1 -0
- package/dist/core/edicion/parecido.d.ts +53 -0
- package/dist/core/edicion/parecido.d.ts.map +1 -0
- package/dist/core/edicion/parecido.js +145 -0
- package/dist/core/edicion/parecido.js.map +1 -0
- package/dist/core/edicion/parseo.d.ts +58 -0
- package/dist/core/edicion/parseo.d.ts.map +1 -0
- package/dist/core/edicion/parseo.js +124 -0
- package/dist/core/edicion/parseo.js.map +1 -0
- package/dist/core/edicion/reparacion.d.ts +67 -0
- package/dist/core/edicion/reparacion.d.ts.map +1 -0
- package/dist/core/edicion/reparacion.js +202 -0
- package/dist/core/edicion/reparacion.js.map +1 -0
- package/dist/core/edicion/sangria.d.ts +121 -0
- package/dist/core/edicion/sangria.d.ts.map +1 -0
- package/dist/core/edicion/sangria.js +341 -0
- package/dist/core/edicion/sangria.js.map +1 -0
- package/dist/core/edicion/tipos.d.ts +58 -0
- package/dist/core/edicion/tipos.d.ts.map +1 -0
- package/dist/core/edicion/tipos.js +160 -0
- package/dist/core/edicion/tipos.js.map +1 -0
- package/dist/core/errores/proveedor.d.ts +53 -0
- package/dist/core/errores/proveedor.d.ts.map +1 -0
- package/dist/core/errores/proveedor.js +191 -0
- package/dist/core/errores/proveedor.js.map +1 -0
- package/dist/core/estructural/buscar.d.ts +61 -0
- package/dist/core/estructural/buscar.d.ts.map +1 -0
- package/dist/core/estructural/buscar.js +261 -0
- package/dist/core/estructural/buscar.js.map +1 -0
- package/dist/core/estructural/editar.d.ts +36 -0
- package/dist/core/estructural/editar.d.ts.map +1 -0
- package/dist/core/estructural/editar.js +123 -0
- package/dist/core/estructural/editar.js.map +1 -0
- package/dist/core/estructural/tools.d.ts +11 -0
- package/dist/core/estructural/tools.d.ts.map +1 -0
- package/dist/core/estructural/tools.js +100 -0
- package/dist/core/estructural/tools.js.map +1 -0
- package/dist/core/experimental.d.ts.map +1 -1
- package/dist/core/experimental.js +10 -1
- package/dist/core/experimental.js.map +1 -1
- package/dist/core/extensiones/suplantacion.d.ts +49 -0
- package/dist/core/extensiones/suplantacion.d.ts.map +1 -0
- package/dist/core/extensiones/suplantacion.js +61 -0
- package/dist/core/extensiones/suplantacion.js.map +1 -0
- package/dist/core/extensiones/vigilancia.d.ts +54 -0
- package/dist/core/extensiones/vigilancia.d.ts.map +1 -0
- package/dist/core/extensiones/vigilancia.js +217 -0
- package/dist/core/extensiones/vigilancia.js.map +1 -0
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +11 -1
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/harness/fuentes-de-contexto.d.ts +29 -0
- package/dist/core/harness/fuentes-de-contexto.d.ts.map +1 -0
- package/dist/core/harness/fuentes-de-contexto.js +44 -0
- package/dist/core/harness/fuentes-de-contexto.js.map +1 -0
- package/dist/core/harness/refine.d.ts +40 -0
- package/dist/core/harness/refine.d.ts.map +1 -0
- package/dist/core/harness/refine.js +109 -0
- package/dist/core/harness/refine.js.map +1 -0
- package/dist/core/harness/store.d.ts +75 -0
- package/dist/core/harness/store.d.ts.map +1 -0
- package/dist/core/harness/store.js +149 -0
- package/dist/core/harness/store.js.map +1 -0
- package/dist/core/hooks/contract.d.ts +85 -0
- package/dist/core/hooks/contract.d.ts.map +1 -0
- package/dist/core/hooks/contract.js +140 -0
- package/dist/core/hooks/contract.js.map +1 -0
- package/dist/core/hooks/runner.d.ts +42 -0
- package/dist/core/hooks/runner.d.ts.map +1 -0
- package/dist/core/hooks/runner.js +85 -0
- package/dist/core/hooks/runner.js.map +1 -0
- package/dist/core/hooks/session-hooks.d.ts +62 -0
- package/dist/core/hooks/session-hooks.d.ts.map +1 -0
- package/dist/core/hooks/session-hooks.js +84 -0
- package/dist/core/hooks/session-hooks.js.map +1 -0
- package/dist/core/importar/formatos.d.ts +69 -0
- package/dist/core/importar/formatos.d.ts.map +1 -0
- package/dist/core/importar/formatos.js +235 -0
- package/dist/core/importar/formatos.js.map +1 -0
- package/dist/core/interactivo/deteccion.d.ts +44 -0
- package/dist/core/interactivo/deteccion.d.ts.map +1 -0
- package/dist/core/interactivo/deteccion.js +82 -0
- package/dist/core/interactivo/deteccion.js.map +1 -0
- package/dist/core/interactivo/sesion.d.ts +50 -0
- package/dist/core/interactivo/sesion.d.ts.map +1 -0
- package/dist/core/interactivo/sesion.js +156 -0
- package/dist/core/interactivo/sesion.js.map +1 -0
- package/dist/core/interactivo/tools.d.ts +21 -0
- package/dist/core/interactivo/tools.d.ts.map +1 -0
- package/dist/core/interactivo/tools.js +122 -0
- package/dist/core/interactivo/tools.js.map +1 -0
- package/dist/core/lectura/mapa.d.ts +70 -0
- package/dist/core/lectura/mapa.d.ts.map +1 -0
- package/dist/core/lectura/mapa.js +177 -0
- package/dist/core/lectura/mapa.js.map +1 -0
- package/dist/core/lectura/pdf.d.ts +49 -0
- package/dist/core/lectura/pdf.d.ts.map +1 -0
- package/dist/core/lectura/pdf.js +337 -0
- package/dist/core/lectura/pdf.js.map +1 -0
- package/dist/core/limpieza/comprobadores.d.ts +28 -0
- package/dist/core/limpieza/comprobadores.d.ts.map +1 -0
- package/dist/core/limpieza/comprobadores.js +311 -0
- package/dist/core/limpieza/comprobadores.js.map +1 -0
- package/dist/core/limpieza/parseo.d.ts +19 -0
- package/dist/core/limpieza/parseo.d.ts.map +1 -0
- package/dist/core/limpieza/parseo.js +124 -0
- package/dist/core/limpieza/parseo.js.map +1 -0
- package/dist/core/limpieza/reparacion.d.ts +77 -0
- package/dist/core/limpieza/reparacion.d.ts.map +1 -0
- package/dist/core/limpieza/reparacion.js +254 -0
- package/dist/core/limpieza/reparacion.js.map +1 -0
- package/dist/core/limpieza/tipos.d.ts +56 -0
- package/dist/core/limpieza/tipos.d.ts.map +1 -0
- package/dist/core/limpieza/tipos.js +9 -0
- package/dist/core/limpieza/tipos.js.map +1 -0
- package/dist/core/lsp/cliente.d.ts +52 -0
- package/dist/core/lsp/cliente.d.ts.map +1 -0
- package/dist/core/lsp/cliente.js +232 -0
- package/dist/core/lsp/cliente.js.map +1 -0
- package/dist/core/lsp/descubrimiento.d.ts +62 -0
- package/dist/core/lsp/descubrimiento.d.ts.map +1 -0
- package/dist/core/lsp/descubrimiento.js +152 -0
- package/dist/core/lsp/descubrimiento.js.map +1 -0
- package/dist/core/lsp/ediciones.d.ts +59 -0
- package/dist/core/lsp/ediciones.d.ts.map +1 -0
- package/dist/core/lsp/ediciones.js +89 -0
- package/dist/core/lsp/ediciones.js.map +1 -0
- package/dist/core/lsp/extension.d.ts +28 -0
- package/dist/core/lsp/extension.d.ts.map +1 -0
- package/dist/core/lsp/extension.js +34 -0
- package/dist/core/lsp/extension.js.map +1 -0
- package/dist/core/lsp/tools.d.ts +45 -0
- package/dist/core/lsp/tools.d.ts.map +1 -0
- package/dist/core/lsp/tools.js +265 -0
- package/dist/core/lsp/tools.js.map +1 -0
- package/dist/core/mcp/client.d.ts +60 -0
- package/dist/core/mcp/client.d.ts.map +1 -0
- package/dist/core/mcp/client.js +139 -0
- package/dist/core/mcp/client.js.map +1 -0
- package/dist/core/mcp/manager.d.ts +86 -0
- package/dist/core/mcp/manager.d.ts.map +1 -0
- package/dist/core/mcp/manager.js +124 -0
- package/dist/core/mcp/manager.js.map +1 -0
- package/dist/core/mcp/tools.d.ts +15 -0
- package/dist/core/mcp/tools.d.ts.map +1 -0
- package/dist/core/mcp/tools.js +84 -0
- package/dist/core/mcp/tools.js.map +1 -0
- package/dist/core/memory-engine/audit-export.d.ts +12 -10
- package/dist/core/memory-engine/audit-export.d.ts.map +1 -1
- package/dist/core/memory-engine/audit-export.js +15 -0
- package/dist/core/memory-engine/audit-export.js.map +1 -1
- package/dist/core/memory-engine/audit-indice.d.ts +153 -0
- package/dist/core/memory-engine/audit-indice.d.ts.map +1 -0
- package/dist/core/memory-engine/audit-indice.js +271 -0
- package/dist/core/memory-engine/audit-indice.js.map +1 -0
- package/dist/core/memory-engine/audit.d.ts +18 -6
- package/dist/core/memory-engine/audit.d.ts.map +1 -1
- package/dist/core/memory-engine/audit.js +25 -42
- package/dist/core/memory-engine/audit.js.map +1 -1
- package/dist/core/memory-engine/engine.d.ts +19 -1
- package/dist/core/memory-engine/engine.d.ts.map +1 -1
- package/dist/core/memory-engine/engine.js +71 -5
- package/dist/core/memory-engine/engine.js.map +1 -1
- package/dist/core/memory-engine/observation-store.d.ts +0 -2
- package/dist/core/memory-engine/observation-store.d.ts.map +1 -1
- package/dist/core/memory-engine/observation-store.js +4 -5
- package/dist/core/memory-engine/observation-store.js.map +1 -1
- package/dist/core/memory-engine/refinements.d.ts +51 -0
- package/dist/core/memory-engine/refinements.d.ts.map +1 -0
- package/dist/core/memory-engine/refinements.js +99 -0
- package/dist/core/memory-engine/refinements.js.map +1 -0
- package/dist/core/memory-engine/tools.d.ts.map +1 -1
- package/dist/core/memory-engine/tools.js +27 -1
- package/dist/core/memory-engine/tools.js.map +1 -1
- package/dist/core/memory-engine/types.d.ts +2 -0
- package/dist/core/memory-engine/types.d.ts.map +1 -1
- package/dist/core/memory-engine/types.js.map +1 -1
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +7 -1
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/muestreo-restringido.d.ts +49 -0
- package/dist/core/muestreo-restringido.d.ts.map +1 -0
- package/dist/core/muestreo-restringido.js +65 -0
- package/dist/core/muestreo-restringido.js.map +1 -0
- package/dist/core/orphan-process-journal.d.ts +48 -0
- package/dist/core/orphan-process-journal.d.ts.map +1 -0
- package/dist/core/orphan-process-journal.js +116 -0
- package/dist/core/orphan-process-journal.js.map +1 -0
- package/dist/core/privacidad/categorias-especiales.d.ts +186 -0
- package/dist/core/privacidad/categorias-especiales.d.ts.map +1 -0
- package/dist/core/privacidad/categorias-especiales.js +745 -0
- package/dist/core/privacidad/categorias-especiales.js.map +1 -0
- package/dist/core/privacidad/tapar.d.ts +48 -0
- package/dist/core/privacidad/tapar.d.ts.map +1 -0
- package/dist/core/privacidad/tapar.js +66 -0
- package/dist/core/privacidad/tapar.js.map +1 -0
- package/dist/core/prompt-cache/diagnostics.d.ts +33 -0
- package/dist/core/prompt-cache/diagnostics.d.ts.map +1 -0
- package/dist/core/prompt-cache/diagnostics.js +100 -0
- package/dist/core/prompt-cache/diagnostics.js.map +1 -0
- package/dist/core/prompt-cache/index.d.ts +33 -0
- package/dist/core/prompt-cache/index.d.ts.map +1 -0
- package/dist/core/prompt-cache/index.js +189 -0
- package/dist/core/prompt-cache/index.js.map +1 -0
- package/dist/core/prompt-cache/payload.d.ts +58 -0
- package/dist/core/prompt-cache/payload.d.ts.map +1 -0
- package/dist/core/prompt-cache/payload.js +122 -0
- package/dist/core/prompt-cache/payload.js.map +1 -0
- package/dist/core/prompt-cache/stabilize.d.ts +65 -0
- package/dist/core/prompt-cache/stabilize.d.ts.map +1 -0
- package/dist/core/prompt-cache/stabilize.js +137 -0
- package/dist/core/prompt-cache/stabilize.js.map +1 -0
- package/dist/core/prompt-cache/stats.d.ts +55 -0
- package/dist/core/prompt-cache/stats.d.ts.map +1 -0
- package/dist/core/prompt-cache/stats.js +158 -0
- package/dist/core/prompt-cache/stats.js.map +1 -0
- package/dist/core/prompt-eleccion.d.ts +38 -0
- package/dist/core/prompt-eleccion.d.ts.map +1 -0
- package/dist/core/prompt-eleccion.js +46 -0
- package/dist/core/prompt-eleccion.js.map +1 -0
- package/dist/core/prompts/montar.d.ts +75 -0
- package/dist/core/prompts/montar.d.ts.map +1 -0
- package/dist/core/prompts/montar.js +146 -0
- package/dist/core/prompts/montar.js.map +1 -0
- package/dist/core/prompts/plantilla.d.ts +54 -0
- package/dist/core/prompts/plantilla.d.ts.map +1 -0
- package/dist/core/prompts/plantilla.js +153 -0
- package/dist/core/prompts/plantilla.js.map +1 -0
- package/dist/core/prompts/sistema.md +134 -0
- package/dist/core/provider-attribution.d.ts +24 -2
- package/dist/core/provider-attribution.d.ts.map +1 -1
- package/dist/core/provider-attribution.js +24 -42
- package/dist/core/provider-attribution.js.map +1 -1
- package/dist/core/remoto/destino.d.ts +38 -0
- package/dist/core/remoto/destino.d.ts.map +1 -0
- package/dist/core/remoto/destino.js +105 -0
- package/dist/core/remoto/destino.js.map +1 -0
- package/dist/core/remoto/ejecutor.d.ts +59 -0
- package/dist/core/remoto/ejecutor.d.ts.map +1 -0
- package/dist/core/remoto/ejecutor.js +225 -0
- package/dist/core/remoto/ejecutor.js.map +1 -0
- package/dist/core/remoto/ficheros.d.ts +29 -0
- package/dist/core/remoto/ficheros.d.ts.map +1 -0
- package/dist/core/remoto/ficheros.js +90 -0
- package/dist/core/remoto/ficheros.js.map +1 -0
- package/dist/core/remoto/registro-extension.d.ts +15 -0
- package/dist/core/remoto/registro-extension.d.ts.map +1 -0
- package/dist/core/remoto/registro-extension.js +17 -0
- package/dist/core/remoto/registro-extension.js.map +1 -0
- package/dist/core/remoto/tools.d.ts +28 -0
- package/dist/core/remoto/tools.d.ts.map +1 -0
- package/dist/core/remoto/tools.js +31 -0
- package/dist/core/remoto/tools.js.map +1 -0
- package/dist/core/resource-loader.d.ts +8 -0
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +93 -1
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/revision/hallazgo.d.ts +51 -0
- package/dist/core/revision/hallazgo.d.ts.map +1 -0
- package/dist/core/revision/hallazgo.js +73 -0
- package/dist/core/revision/hallazgo.js.map +1 -0
- package/dist/core/revision/revisor.d.ts +81 -0
- package/dist/core/revision/revisor.d.ts.map +1 -0
- package/dist/core/revision/revisor.js +132 -0
- package/dist/core/revision/revisor.js.map +1 -0
- package/dist/core/revision/sarif.d.ts +30 -0
- package/dist/core/revision/sarif.d.ts.map +1 -0
- package/dist/core/revision/sarif.js +83 -0
- package/dist/core/revision/sarif.js.map +1 -0
- package/dist/core/scheduler/scheduler.d.ts +87 -0
- package/dist/core/scheduler/scheduler.d.ts.map +1 -0
- package/dist/core/scheduler/scheduler.js +178 -0
- package/dist/core/scheduler/scheduler.js.map +1 -0
- package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts +49 -0
- package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts.map +1 -0
- package/dist/core/sesion/cerrar-llamadas-abiertas.js +77 -0
- package/dist/core/sesion/cerrar-llamadas-abiertas.js.map +1 -0
- package/dist/core/settings-manager.d.ts +110 -6
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +53 -2
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +3 -3
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/system-prompt.d.ts +17 -0
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +13 -5
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/telemetria/otlp.d.ts +122 -0
- package/dist/core/telemetria/otlp.d.ts.map +1 -0
- package/dist/core/telemetria/otlp.js +373 -0
- package/dist/core/telemetria/otlp.js.map +1 -0
- package/dist/core/tools/coercion-argumentos.d.ts +48 -0
- package/dist/core/tools/coercion-argumentos.d.ts.map +1 -0
- package/dist/core/tools/coercion-argumentos.js +99 -0
- package/dist/core/tools/coercion-argumentos.js.map +1 -0
- package/dist/core/tools/edit-diff.d.ts +0 -7
- package/dist/core/tools/edit-diff.d.ts.map +1 -1
- package/dist/core/tools/edit-diff.js +232 -7
- 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 +8 -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 +5 -0
- package/dist/core/tools/file-mutation-queue.js.map +1 -1
- package/dist/core/tools/json-tolerante.d.ts +30 -0
- package/dist/core/tools/json-tolerante.d.ts.map +1 -0
- package/dist/core/tools/json-tolerante.js +70 -0
- package/dist/core/tools/json-tolerante.js.map +1 -0
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +17 -0
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts +14 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.js +17 -1
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
- package/dist/core/turno-vacio/detectar.d.ts +38 -0
- package/dist/core/turno-vacio/detectar.d.ts.map +1 -0
- package/dist/core/turno-vacio/detectar.js +66 -0
- package/dist/core/turno-vacio/detectar.js.map +1 -0
- package/dist/core/undo/journal.d.ts +57 -0
- package/dist/core/undo/journal.d.ts.map +1 -0
- package/dist/core/undo/journal.js +178 -0
- package/dist/core/undo/journal.js.map +1 -0
- package/dist/core/urls-internas/auditoria.d.ts +10 -0
- package/dist/core/urls-internas/auditoria.d.ts.map +1 -0
- package/dist/core/urls-internas/auditoria.js +42 -0
- package/dist/core/urls-internas/auditoria.js.map +1 -0
- package/dist/core/urls-internas/boveda.d.ts +13 -0
- package/dist/core/urls-internas/boveda.d.ts.map +1 -0
- package/dist/core/urls-internas/boveda.js +40 -0
- package/dist/core/urls-internas/boveda.js.map +1 -0
- package/dist/core/urls-internas/lector.d.ts +30 -0
- package/dist/core/urls-internas/lector.d.ts.map +1 -0
- package/dist/core/urls-internas/lector.js +56 -0
- package/dist/core/urls-internas/lector.js.map +1 -0
- package/dist/core/urls-internas/memoria.d.ts +11 -0
- package/dist/core/urls-internas/memoria.d.ts.map +1 -0
- package/dist/core/urls-internas/memoria.js +25 -0
- package/dist/core/urls-internas/memoria.js.map +1 -0
- package/dist/core/urls-internas/parse.d.ts +28 -0
- package/dist/core/urls-internas/parse.d.ts.map +1 -0
- package/dist/core/urls-internas/parse.js +32 -0
- package/dist/core/urls-internas/parse.js.map +1 -0
- package/dist/core/urls-internas/reglas.d.ts +10 -0
- package/dist/core/urls-internas/reglas.d.ts.map +1 -0
- package/dist/core/urls-internas/reglas.js +31 -0
- package/dist/core/urls-internas/reglas.js.map +1 -0
- package/dist/core/usage/aggregate.d.ts +68 -0
- package/dist/core/usage/aggregate.d.ts.map +1 -0
- package/dist/core/usage/aggregate.js +93 -0
- package/dist/core/usage/aggregate.js.map +1 -0
- package/dist/core/usage/cuota/anthropic.d.ts +10 -0
- package/dist/core/usage/cuota/anthropic.d.ts.map +1 -0
- package/dist/core/usage/cuota/anthropic.js +63 -0
- package/dist/core/usage/cuota/anthropic.js.map +1 -0
- package/dist/core/usage/cuota/cache.d.ts +20 -0
- package/dist/core/usage/cuota/cache.d.ts.map +1 -0
- package/dist/core/usage/cuota/cache.js +36 -0
- package/dist/core/usage/cuota/cache.js.map +1 -0
- package/dist/core/usage/cuota/github-copilot.d.ts +9 -0
- package/dist/core/usage/cuota/github-copilot.d.ts.map +1 -0
- package/dist/core/usage/cuota/github-copilot.js +67 -0
- package/dist/core/usage/cuota/github-copilot.js.map +1 -0
- package/dist/core/usage/cuota/google-gemini.d.ts +9 -0
- package/dist/core/usage/cuota/google-gemini.d.ts.map +1 -0
- package/dist/core/usage/cuota/google-gemini.js +72 -0
- package/dist/core/usage/cuota/google-gemini.js.map +1 -0
- package/dist/core/usage/cuota/index.d.ts +25 -0
- package/dist/core/usage/cuota/index.d.ts.map +1 -0
- package/dist/core/usage/cuota/index.js +50 -0
- package/dist/core/usage/cuota/index.js.map +1 -0
- package/dist/core/usage/cuota/openai-codex.d.ts +9 -0
- package/dist/core/usage/cuota/openai-codex.d.ts.map +1 -0
- package/dist/core/usage/cuota/openai-codex.js +59 -0
- package/dist/core/usage/cuota/openai-codex.js.map +1 -0
- package/dist/core/usage/cuota/openrouter.d.ts +10 -0
- package/dist/core/usage/cuota/openrouter.d.ts.map +1 -0
- package/dist/core/usage/cuota/openrouter.js +47 -0
- package/dist/core/usage/cuota/openrouter.js.map +1 -0
- package/dist/core/usage/cuota/tipos.d.ts +50 -0
- package/dist/core/usage/cuota/tipos.d.ts.map +1 -0
- package/dist/core/usage/cuota/tipos.js +25 -0
- package/dist/core/usage/cuota/tipos.js.map +1 -0
- package/dist/core/web/busqueda-nativa.d.ts +82 -0
- package/dist/core/web/busqueda-nativa.d.ts.map +1 -0
- package/dist/core/web/busqueda-nativa.js +163 -0
- package/dist/core/web/busqueda-nativa.js.map +1 -0
- package/dist/core/web/destino.d.ts +58 -0
- package/dist/core/web/destino.d.ts.map +1 -0
- package/dist/core/web/destino.js +127 -0
- package/dist/core/web/destino.js.map +1 -0
- package/dist/core/web/proveedores/brave.d.ts +6 -0
- package/dist/core/web/proveedores/brave.d.ts.map +1 -0
- package/dist/core/web/proveedores/brave.js +20 -0
- package/dist/core/web/proveedores/brave.js.map +1 -0
- package/dist/core/web/proveedores/claves.d.ts +19 -0
- package/dist/core/web/proveedores/claves.d.ts.map +1 -0
- package/dist/core/web/proveedores/claves.js +36 -0
- package/dist/core/web/proveedores/claves.js.map +1 -0
- package/dist/core/web/proveedores/duckduckgo.d.ts +3 -0
- package/dist/core/web/proveedores/duckduckgo.d.ts.map +1 -0
- package/dist/core/web/proveedores/duckduckgo.js +109 -0
- package/dist/core/web/proveedores/duckduckgo.js.map +1 -0
- package/dist/core/web/proveedores/ecosia.d.ts +3 -0
- package/dist/core/web/proveedores/ecosia.d.ts.map +1 -0
- package/dist/core/web/proveedores/ecosia.js +72 -0
- package/dist/core/web/proveedores/ecosia.js.map +1 -0
- package/dist/core/web/proveedores/exa.d.ts +6 -0
- package/dist/core/web/proveedores/exa.d.ts.map +1 -0
- package/dist/core/web/proveedores/exa.js +24 -0
- package/dist/core/web/proveedores/exa.js.map +1 -0
- package/dist/core/web/proveedores/mojeek.d.ts +3 -0
- package/dist/core/web/proveedores/mojeek.d.ts.map +1 -0
- package/dist/core/web/proveedores/mojeek.js +65 -0
- package/dist/core/web/proveedores/mojeek.js.map +1 -0
- package/dist/core/web/proveedores/navegador.d.ts +10 -0
- package/dist/core/web/proveedores/navegador.d.ts.map +1 -0
- package/dist/core/web/proveedores/navegador.js +13 -0
- package/dist/core/web/proveedores/navegador.js.map +1 -0
- package/dist/core/web/proveedores/registro.d.ts +43 -0
- package/dist/core/web/proveedores/registro.d.ts.map +1 -0
- package/dist/core/web/proveedores/registro.js +49 -0
- package/dist/core/web/proveedores/registro.js.map +1 -0
- package/dist/core/web/proveedores/searxng.d.ts +9 -0
- package/dist/core/web/proveedores/searxng.d.ts.map +1 -0
- package/dist/core/web/proveedores/searxng.js +17 -0
- package/dist/core/web/proveedores/searxng.js.map +1 -0
- package/dist/core/web/proveedores/serper.d.ts +9 -0
- package/dist/core/web/proveedores/serper.d.ts.map +1 -0
- package/dist/core/web/proveedores/serper.js +19 -0
- package/dist/core/web/proveedores/serper.js.map +1 -0
- package/dist/core/web/proveedores/tavily.d.ts +6 -0
- package/dist/core/web/proveedores/tavily.d.ts.map +1 -0
- package/dist/core/web/proveedores/tavily.js +19 -0
- package/dist/core/web/proveedores/tavily.js.map +1 -0
- package/dist/core/web/proveedores/tipos.d.ts +36 -0
- package/dist/core/web/proveedores/tipos.d.ts.map +1 -0
- package/dist/core/web/proveedores/tipos.js +10 -0
- package/dist/core/web/proveedores/tipos.js.map +1 -0
- package/dist/core/web/registro-red.d.ts +43 -0
- package/dist/core/web/registro-red.d.ts.map +1 -0
- package/dist/core/web/registro-red.js +86 -0
- package/dist/core/web/registro-red.js.map +1 -0
- package/dist/core/web/scrapers/cisa-kev.d.ts +10 -0
- package/dist/core/web/scrapers/cisa-kev.d.ts.map +1 -0
- package/dist/core/web/scrapers/cisa-kev.js +38 -0
- package/dist/core/web/scrapers/cisa-kev.js.map +1 -0
- package/dist/core/web/scrapers/crates-io.d.ts +11 -0
- package/dist/core/web/scrapers/crates-io.d.ts.map +1 -0
- package/dist/core/web/scrapers/crates-io.js +29 -0
- package/dist/core/web/scrapers/crates-io.js.map +1 -0
- package/dist/core/web/scrapers/docs-rs.d.ts +10 -0
- package/dist/core/web/scrapers/docs-rs.d.ts.map +1 -0
- package/dist/core/web/scrapers/docs-rs.js +35 -0
- package/dist/core/web/scrapers/docs-rs.js.map +1 -0
- package/dist/core/web/scrapers/github.d.ts +3 -0
- package/dist/core/web/scrapers/github.d.ts.map +1 -0
- package/dist/core/web/scrapers/github.js +72 -0
- package/dist/core/web/scrapers/github.js.map +1 -0
- package/dist/core/web/scrapers/go-pkg.d.ts +7 -0
- package/dist/core/web/scrapers/go-pkg.d.ts.map +1 -0
- package/dist/core/web/scrapers/go-pkg.js +30 -0
- package/dist/core/web/scrapers/go-pkg.js.map +1 -0
- package/dist/core/web/scrapers/hex.d.ts +6 -0
- package/dist/core/web/scrapers/hex.d.ts.map +1 -0
- package/dist/core/web/scrapers/hex.js +27 -0
- package/dist/core/web/scrapers/hex.js.map +1 -0
- package/dist/core/web/scrapers/maven.d.ts +8 -0
- package/dist/core/web/scrapers/maven.d.ts.map +1 -0
- package/dist/core/web/scrapers/maven.js +41 -0
- package/dist/core/web/scrapers/maven.js.map +1 -0
- package/dist/core/web/scrapers/mdn.d.ts +6 -0
- package/dist/core/web/scrapers/mdn.d.ts.map +1 -0
- package/dist/core/web/scrapers/mdn.js +28 -0
- package/dist/core/web/scrapers/mdn.js.map +1 -0
- package/dist/core/web/scrapers/npm.d.ts +11 -0
- package/dist/core/web/scrapers/npm.d.ts.map +1 -0
- package/dist/core/web/scrapers/npm.js +57 -0
- package/dist/core/web/scrapers/npm.js.map +1 -0
- package/dist/core/web/scrapers/nuget.d.ts +8 -0
- package/dist/core/web/scrapers/nuget.d.ts.map +1 -0
- package/dist/core/web/scrapers/nuget.js +22 -0
- package/dist/core/web/scrapers/nuget.js.map +1 -0
- package/dist/core/web/scrapers/nvd.d.ts +7 -0
- package/dist/core/web/scrapers/nvd.d.ts.map +1 -0
- package/dist/core/web/scrapers/nvd.js +37 -0
- package/dist/core/web/scrapers/nvd.js.map +1 -0
- package/dist/core/web/scrapers/pypi.d.ts +6 -0
- package/dist/core/web/scrapers/pypi.d.ts.map +1 -0
- package/dist/core/web/scrapers/pypi.js +31 -0
- package/dist/core/web/scrapers/pypi.js.map +1 -0
- package/dist/core/web/scrapers/registro.d.ts +13 -0
- package/dist/core/web/scrapers/registro.d.ts.map +1 -0
- package/dist/core/web/scrapers/registro.js +65 -0
- package/dist/core/web/scrapers/registro.js.map +1 -0
- package/dist/core/web/scrapers/rubygems.d.ts +6 -0
- package/dist/core/web/scrapers/rubygems.d.ts.map +1 -0
- package/dist/core/web/scrapers/rubygems.js +23 -0
- package/dist/core/web/scrapers/rubygems.js.map +1 -0
- package/dist/core/web/scrapers/stackoverflow.d.ts +3 -0
- package/dist/core/web/scrapers/stackoverflow.d.ts.map +1 -0
- package/dist/core/web/scrapers/stackoverflow.js +46 -0
- package/dist/core/web/scrapers/stackoverflow.js.map +1 -0
- package/dist/core/web/scrapers/tipos.d.ts +42 -0
- package/dist/core/web/scrapers/tipos.d.ts.map +1 -0
- package/dist/core/web/scrapers/tipos.js +23 -0
- package/dist/core/web/scrapers/tipos.js.map +1 -0
- package/dist/core/web/texto.d.ts +10 -0
- package/dist/core/web/texto.d.ts.map +1 -0
- package/dist/core/web/texto.js +26 -0
- package/dist/core/web/texto.js.map +1 -0
- package/dist/core/web/tools.d.ts +91 -0
- package/dist/core/web/tools.d.ts.map +1 -0
- package/dist/core/web/tools.js +304 -0
- package/dist/core/web/tools.js.map +1 -0
- package/dist/core/wiki/almacen.d.ts +33 -0
- package/dist/core/wiki/almacen.d.ts.map +1 -0
- package/dist/core/wiki/almacen.js +93 -0
- package/dist/core/wiki/almacen.js.map +1 -0
- package/dist/core/wiki/citas.d.ts +111 -0
- package/dist/core/wiki/citas.d.ts.map +1 -0
- package/dist/core/wiki/citas.js +146 -0
- package/dist/core/wiki/citas.js.map +1 -0
- package/dist/core/workflows/agent-runner.d.ts +2 -0
- package/dist/core/workflows/agent-runner.d.ts.map +1 -1
- package/dist/core/workflows/agent-runner.js +131 -44
- 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 +1 -0
- package/dist/core/workflows/builtins.js.map +1 -1
- package/dist/core/workflows/contrato/esquema.d.ts +32 -0
- package/dist/core/workflows/contrato/esquema.d.ts.map +1 -0
- package/dist/core/workflows/contrato/esquema.js +25 -0
- package/dist/core/workflows/contrato/esquema.js.map +1 -0
- package/dist/core/workflows/contrato/reparar-argumentos.d.ts +69 -0
- package/dist/core/workflows/contrato/reparar-argumentos.d.ts.map +1 -0
- package/dist/core/workflows/contrato/reparar-argumentos.js +117 -0
- package/dist/core/workflows/contrato/reparar-argumentos.js.map +1 -0
- package/dist/core/workflows/contrato/validador.d.ts +30 -0
- package/dist/core/workflows/contrato/validador.d.ts.map +1 -0
- package/dist/core/workflows/contrato/validador.js +56 -0
- package/dist/core/workflows/contrato/validador.js.map +1 -0
- package/dist/core/workflows/contrato/yield.d.ts +65 -0
- package/dist/core/workflows/contrato/yield.d.ts.map +1 -0
- package/dist/core/workflows/contrato/yield.js +80 -0
- package/dist/core/workflows/contrato/yield.js.map +1 -0
- package/dist/core/workflows/goal-engine/engine.d.ts +17 -0
- package/dist/core/workflows/goal-engine/engine.d.ts.map +1 -1
- package/dist/core/workflows/goal-engine/engine.js +41 -0
- package/dist/core/workflows/goal-engine/engine.js.map +1 -1
- package/dist/core/workflows/index.d.ts +8 -0
- package/dist/core/workflows/index.d.ts.map +1 -1
- package/dist/core/workflows/index.js +4 -0
- package/dist/core/workflows/index.js.map +1 -1
- package/dist/core/workflows/manager.d.ts +10 -0
- package/dist/core/workflows/manager.d.ts.map +1 -1
- package/dist/core/workflows/manager.js +35 -11
- package/dist/core/workflows/manager.js.map +1 -1
- package/dist/core/workflows/runtime.d.ts +13 -0
- package/dist/core/workflows/runtime.d.ts.map +1 -1
- package/dist/core/workflows/runtime.js +80 -1
- package/dist/core/workflows/runtime.js.map +1 -1
- package/dist/core/workflows/save-as-skill.d.ts +27 -0
- package/dist/core/workflows/save-as-skill.d.ts.map +1 -0
- package/dist/core/workflows/save-as-skill.js +54 -0
- package/dist/core/workflows/save-as-skill.js.map +1 -0
- package/dist/core/workflows/types.d.ts +49 -0
- package/dist/core/workflows/types.d.ts.map +1 -1
- package/dist/core/workflows/types.js.map +1 -1
- package/dist/extensions/remoto/index.d.ts +22 -0
- package/dist/extensions/remoto/index.d.ts.map +1 -0
- package/dist/extensions/remoto/index.js +54 -0
- package/dist/extensions/remoto/index.js.map +1 -0
- package/dist/index.d.ts +1 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -16
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +6 -0
- package/dist/main.js.map +1 -1
- package/dist/modes/acp/acp-mode.d.ts +42 -0
- package/dist/modes/acp/acp-mode.d.ts.map +1 -0
- package/dist/modes/acp/acp-mode.js +190 -0
- package/dist/modes/acp/acp-mode.js.map +1 -0
- package/dist/modes/acp/events.d.ts +74 -0
- package/dist/modes/acp/events.d.ts.map +1 -0
- package/dist/modes/acp/events.js +116 -0
- package/dist/modes/acp/events.js.map +1 -0
- package/dist/modes/interactive/components/model-selector.d.ts +8 -1
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +41 -7
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +1 -2
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +9 -86
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts +8 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js +48 -17
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +3 -7
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +137 -146
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js +11 -0
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +27 -5
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/server/attach.d.ts +56 -0
- package/dist/server/attach.d.ts.map +1 -0
- package/dist/server/attach.js +130 -0
- package/dist/server/attach.js.map +1 -0
- package/dist/server/extension-ops.d.ts +40 -0
- package/dist/server/extension-ops.d.ts.map +1 -0
- package/dist/server/extension-ops.js +146 -0
- package/dist/server/extension-ops.js.map +1 -0
- package/dist/server/pi-server-service.d.ts +85 -0
- package/dist/server/pi-server-service.d.ts.map +1 -0
- package/dist/server/pi-server-service.js +213 -0
- package/dist/server/pi-server-service.js.map +1 -0
- package/dist/server/scheduler-tick.d.ts +32 -0
- package/dist/server/scheduler-tick.d.ts.map +1 -0
- package/dist/server/scheduler-tick.js +47 -0
- package/dist/server/scheduler-tick.js.map +1 -0
- package/dist/server/serve.d.ts +25 -0
- package/dist/server/serve.d.ts.map +1 -0
- package/dist/server/serve.js +83 -0
- package/dist/server/serve.js.map +1 -0
- package/dist/server/transcript.d.ts +38 -0
- package/dist/server/transcript.d.ts.map +1 -0
- package/dist/server/transcript.js +176 -0
- package/dist/server/transcript.js.map +1 -0
- package/dist/skills/skill-creator/SKILL.md +90 -0
- package/dist/telegram/api.d.ts +75 -0
- package/dist/telegram/api.d.ts.map +1 -0
- package/dist/telegram/api.js +104 -0
- package/dist/telegram/api.js.map +1 -0
- package/dist/telegram/bridge.d.ts +85 -0
- package/dist/telegram/bridge.d.ts.map +1 -0
- package/dist/telegram/bridge.js +182 -0
- package/dist/telegram/bridge.js.map +1 -0
- package/dist/telegram/journal.d.ts +67 -0
- package/dist/telegram/journal.d.ts.map +1 -0
- package/dist/telegram/journal.js +119 -0
- package/dist/telegram/journal.js.map +1 -0
- package/dist/telegram/servidor.d.ts +15 -0
- package/dist/telegram/servidor.d.ts.map +1 -0
- package/dist/telegram/servidor.js +74 -0
- package/dist/telegram/servidor.js.map +1 -0
- package/dist/utils/shell.d.ts +11 -0
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +11 -0
- package/dist/utils/shell.js.map +1 -1
- package/dist/utils/version-check.d.ts.map +1 -1
- package/dist/utils/version-check.js +29 -1
- package/dist/utils/version-check.js.map +1 -1
- package/docs/compaction.md +10 -10
- package/docs/compliance.md +241 -0
- package/docs/containerization.md +24 -24
- package/docs/custom-provider.md +10 -10
- package/docs/development.md +47 -10
- package/docs/docs.json +14 -2
- package/docs/environment-variables.md +20 -17
- package/docs/extensions.md +51 -49
- package/docs/index.md +15 -21
- package/docs/json.md +3 -3
- package/docs/keybindings.md +5 -5
- package/docs/llama-cpp.md +7 -7
- package/docs/models.md +12 -12
- package/docs/packages.md +45 -45
- package/docs/prompt-templates.md +5 -5
- package/docs/providers.md +12 -12
- package/docs/quickstart.md +39 -39
- package/docs/rpc.md +12 -12
- package/docs/sdk.md +38 -38
- package/docs/security.md +26 -21
- package/docs/session-format.md +7 -7
- package/docs/sessions.md +14 -14
- package/docs/settings.md +45 -20
- package/docs/shell-aliases.md +2 -2
- package/docs/skills.md +11 -11
- package/docs/terminal-setup.md +14 -14
- package/docs/termux.md +7 -7
- package/docs/themes.md +11 -11
- package/docs/tmux.md +4 -4
- package/docs/tui.md +3 -3
- package/docs/usage.md +54 -54
- package/docs/windows.md +2 -2
- package/examples/sdk/12-full-control.ts +9 -0
- package/npm-shrinkwrap.json +35 -251
- package/package.json +10 -4
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parseo de URLs internas: `esquema://resto`.
|
|
3
|
+
*
|
|
4
|
+
* oh-my-pi (el competidor, ver `/Users/31017423z/auditoria-omp/oh-my-pi`)
|
|
5
|
+
* tiene veinte esquemas y un parser que reconstruye `URL` a mano para
|
|
6
|
+
* aguantar dos puntos dentro del host (`skill://plugin:name`). Nosotros no
|
|
7
|
+
* tenemos esa forma — nuestro "resto" es una consulta, un nombre o un número,
|
|
8
|
+
* nunca un host con puerto — así que un regex basta y no hace falta
|
|
9
|
+
* replicar esa máquina.
|
|
10
|
+
*
|
|
11
|
+
* La frontera es literal: cualquier texto con forma `algo://algo` entra en
|
|
12
|
+
* este espacio de nombres y YA NO se intenta como ruta de fichero. Una ruta
|
|
13
|
+
* real de disco no lleva `://`, así que no hay colisión que resolver.
|
|
14
|
+
*/
|
|
15
|
+
/** Los únicos cuatro esquemas que existen hoy. Cualquier otro es un error con lista. */
|
|
16
|
+
export declare const ESQUEMAS_INTERNOS: readonly ["memory", "vault", "rule", "audit"];
|
|
17
|
+
export type EsquemaInterno = (typeof ESQUEMAS_INTERNOS)[number];
|
|
18
|
+
export interface UrlInterna {
|
|
19
|
+
esquema: string;
|
|
20
|
+
/** Todo lo que va después de `://`, sin decodificar: cada manejador decide qué hacer con él. */
|
|
21
|
+
resto: string;
|
|
22
|
+
}
|
|
23
|
+
/** `null` cuando el texto no tiene forma de URL — no es "no reconocido", es "no aplica". */
|
|
24
|
+
export declare function parseaUrlInterna(texto: string): UrlInterna | null;
|
|
25
|
+
export declare function esEsquemaConocido(esquema: string): esquema is EsquemaInterno;
|
|
26
|
+
/** El error que ve el modelo cuando pide un esquema que no existe. Siempre nombra los que sí. */
|
|
27
|
+
export declare function errorEsquemaDesconocido(esquema: string): Error;
|
|
28
|
+
//# sourceMappingURL=parse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../src/core/urls-internas/parse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,yFAAwF;AACxF,eAAO,MAAM,iBAAiB,+CAAgD,CAAC;AAC/E,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhE,MAAM,WAAW,UAAU;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,mGAAgG;IAChG,KAAK,EAAE,MAAM,CAAC;CACd;AAID,8FAA4F;AAC5F,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAIjE;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,IAAI,cAAc,CAE5E;AAED,kGAAiG;AACjG,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAI9D","sourcesContent":["/**\n * Parseo de URLs internas: `esquema://resto`.\n *\n * oh-my-pi (el competidor, ver `/Users/31017423z/auditoria-omp/oh-my-pi`)\n * tiene veinte esquemas y un parser que reconstruye `URL` a mano para\n * aguantar dos puntos dentro del host (`skill://plugin:name`). Nosotros no\n * tenemos esa forma — nuestro \"resto\" es una consulta, un nombre o un número,\n * nunca un host con puerto — así que un regex basta y no hace falta\n * replicar esa máquina.\n *\n * La frontera es literal: cualquier texto con forma `algo://algo` entra en\n * este espacio de nombres y YA NO se intenta como ruta de fichero. Una ruta\n * real de disco no lleva `://`, así que no hay colisión que resolver.\n */\n\n/** Los únicos cuatro esquemas que existen hoy. Cualquier otro es un error con lista. */\nexport const ESQUEMAS_INTERNOS = [\"memory\", \"vault\", \"rule\", \"audit\"] as const;\nexport type EsquemaInterno = (typeof ESQUEMAS_INTERNOS)[number];\n\nexport interface UrlInterna {\n\tesquema: string;\n\t/** Todo lo que va después de `://`, sin decodificar: cada manejador decide qué hacer con él. */\n\tresto: string;\n}\n\nconst PATRON = /^([a-zA-Z][a-zA-Z0-9+.-]*):\\/\\/(.*)$/s;\n\n/** `null` cuando el texto no tiene forma de URL — no es \"no reconocido\", es \"no aplica\". */\nexport function parseaUrlInterna(texto: string): UrlInterna | null {\n\tconst m = PATRON.exec(texto);\n\tif (!m) return null;\n\treturn { esquema: m[1].toLowerCase(), resto: m[2] };\n}\n\nexport function esEsquemaConocido(esquema: string): esquema is EsquemaInterno {\n\treturn (ESQUEMAS_INTERNOS as readonly string[]).includes(esquema);\n}\n\n/** El error que ve el modelo cuando pide un esquema que no existe. Siempre nombra los que sí. */\nexport function errorEsquemaDesconocido(esquema: string): Error {\n\treturn new Error(\n\t\t`Esquema interno desconocido: \"${esquema}://\". Esquemas disponibles: ${ESQUEMAS_INTERNOS.map((e) => `${e}://`).join(\", \")}.`,\n\t);\n}\n"]}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parseo de URLs internas: `esquema://resto`.
|
|
3
|
+
*
|
|
4
|
+
* oh-my-pi (el competidor, ver `/Users/31017423z/auditoria-omp/oh-my-pi`)
|
|
5
|
+
* tiene veinte esquemas y un parser que reconstruye `URL` a mano para
|
|
6
|
+
* aguantar dos puntos dentro del host (`skill://plugin:name`). Nosotros no
|
|
7
|
+
* tenemos esa forma — nuestro "resto" es una consulta, un nombre o un número,
|
|
8
|
+
* nunca un host con puerto — así que un regex basta y no hace falta
|
|
9
|
+
* replicar esa máquina.
|
|
10
|
+
*
|
|
11
|
+
* La frontera es literal: cualquier texto con forma `algo://algo` entra en
|
|
12
|
+
* este espacio de nombres y YA NO se intenta como ruta de fichero. Una ruta
|
|
13
|
+
* real de disco no lleva `://`, así que no hay colisión que resolver.
|
|
14
|
+
*/
|
|
15
|
+
/** Los únicos cuatro esquemas que existen hoy. Cualquier otro es un error con lista. */
|
|
16
|
+
export const ESQUEMAS_INTERNOS = ["memory", "vault", "rule", "audit"];
|
|
17
|
+
const PATRON = /^([a-zA-Z][a-zA-Z0-9+.-]*):\/\/(.*)$/s;
|
|
18
|
+
/** `null` cuando el texto no tiene forma de URL — no es "no reconocido", es "no aplica". */
|
|
19
|
+
export function parseaUrlInterna(texto) {
|
|
20
|
+
const m = PATRON.exec(texto);
|
|
21
|
+
if (!m)
|
|
22
|
+
return null;
|
|
23
|
+
return { esquema: m[1].toLowerCase(), resto: m[2] };
|
|
24
|
+
}
|
|
25
|
+
export function esEsquemaConocido(esquema) {
|
|
26
|
+
return ESQUEMAS_INTERNOS.includes(esquema);
|
|
27
|
+
}
|
|
28
|
+
/** El error que ve el modelo cuando pide un esquema que no existe. Siempre nombra los que sí. */
|
|
29
|
+
export function errorEsquemaDesconocido(esquema) {
|
|
30
|
+
return new Error(`Esquema interno desconocido: "${esquema}://". Esquemas disponibles: ${ESQUEMAS_INTERNOS.map((e) => `${e}://`).join(", ")}.`);
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../../src/core/urls-internas/parse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,yFAAwF;AACxF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAU,CAAC;AAS/E,MAAM,MAAM,GAAG,uCAAuC,CAAC;AAEvD,8FAA4F;AAC5F,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAqB;IAClE,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAAA,CACpD;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAe,EAA6B;IAC7E,OAAQ,iBAAuC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAAA,CAClE;AAED,kGAAiG;AACjG,MAAM,UAAU,uBAAuB,CAAC,OAAe,EAAS;IAC/D,OAAO,IAAI,KAAK,CACf,iCAAiC,OAAO,+BAA+B,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC5H,CAAC;AAAA,CACF","sourcesContent":["/**\n * Parseo de URLs internas: `esquema://resto`.\n *\n * oh-my-pi (el competidor, ver `/Users/31017423z/auditoria-omp/oh-my-pi`)\n * tiene veinte esquemas y un parser que reconstruye `URL` a mano para\n * aguantar dos puntos dentro del host (`skill://plugin:name`). Nosotros no\n * tenemos esa forma — nuestro \"resto\" es una consulta, un nombre o un número,\n * nunca un host con puerto — así que un regex basta y no hace falta\n * replicar esa máquina.\n *\n * La frontera es literal: cualquier texto con forma `algo://algo` entra en\n * este espacio de nombres y YA NO se intenta como ruta de fichero. Una ruta\n * real de disco no lleva `://`, así que no hay colisión que resolver.\n */\n\n/** Los únicos cuatro esquemas que existen hoy. Cualquier otro es un error con lista. */\nexport const ESQUEMAS_INTERNOS = [\"memory\", \"vault\", \"rule\", \"audit\"] as const;\nexport type EsquemaInterno = (typeof ESQUEMAS_INTERNOS)[number];\n\nexport interface UrlInterna {\n\tesquema: string;\n\t/** Todo lo que va después de `://`, sin decodificar: cada manejador decide qué hacer con él. */\n\tresto: string;\n}\n\nconst PATRON = /^([a-zA-Z][a-zA-Z0-9+.-]*):\\/\\/(.*)$/s;\n\n/** `null` cuando el texto no tiene forma de URL — no es \"no reconocido\", es \"no aplica\". */\nexport function parseaUrlInterna(texto: string): UrlInterna | null {\n\tconst m = PATRON.exec(texto);\n\tif (!m) return null;\n\treturn { esquema: m[1].toLowerCase(), resto: m[2] };\n}\n\nexport function esEsquemaConocido(esquema: string): esquema is EsquemaInterno {\n\treturn (ESQUEMAS_INTERNOS as readonly string[]).includes(esquema);\n}\n\n/** El error que ve el modelo cuando pide un esquema que no existe. Siempre nombra los que sí. */\nexport function errorEsquemaDesconocido(esquema: string): Error {\n\treturn new Error(\n\t\t`Esquema interno desconocido: \"${esquema}://\". Esquemas disponibles: ${ESQUEMAS_INTERNOS.map((e) => `${e}://`).join(\", \")}.`,\n\t);\n}\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `rule://<origen>` — las reglas que `descubrimiento/reglas.ts` ya encuentra
|
|
3
|
+
* (`.cursorrules`, `.clinerules`, `.windsurfrules`, GEMINI.md, Copilot…).
|
|
4
|
+
*
|
|
5
|
+
* `descubrirReglas` ya hace la deduplicación por contenido y el tope de
|
|
6
|
+
* tamaño; aquí solo se filtra por origen y se recorta el texto final para no
|
|
7
|
+
* volcar un fichero de 32KB entero en una respuesta de `read`.
|
|
8
|
+
*/
|
|
9
|
+
export declare function leerReglas(cwd: string, origen: string): string;
|
|
10
|
+
//# sourceMappingURL=reglas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reglas.d.ts","sourceRoot":"","sources":["../../../src/core/urls-internas/reglas.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAiB9D","sourcesContent":["/**\n * `rule://<origen>` — las reglas que `descubrimiento/reglas.ts` ya encuentra\n * (`.cursorrules`, `.clinerules`, `.windsurfrules`, GEMINI.md, Copilot…).\n *\n * `descubrirReglas` ya hace la deduplicación por contenido y el tope de\n * tamaño; aquí solo se filtra por origen y se recorta el texto final para no\n * volcar un fichero de 32KB entero en una respuesta de `read`.\n */\n\nimport { descubrirReglas } from \"../descubrimiento/reglas.ts\";\nimport { truncateHead } from \"../tools/truncate.ts\";\n\nconst TOPE_SALIDA = 8 * 1024;\n\nexport function leerReglas(cwd: string, origen: string): string {\n\tconst { reglas, omitidas } = descubrirReglas(cwd);\n\tconst filtro = origen.trim().toLowerCase();\n\tconst encontradas = filtro ? reglas.filter((r) => r.origen.toLowerCase().includes(filtro)) : reglas;\n\n\tif (reglas.length === 0) return \"rule://: no se ha descubierto ninguna regla en este proyecto.\";\n\tif (encontradas.length === 0) {\n\t\tconst origenes = [...new Set(reglas.map((r) => r.origen))].join(\", \");\n\t\treturn `rule://${origen}: ninguna regla descubierta de ese origen. Orígenes presentes: ${origenes}.`;\n\t}\n\n\tconst cuerpo = encontradas.map((r) => `── ${r.ruta} (${r.origen}) ──\\n${r.contenido}`).join(\"\\n\\n\");\n\tconst recortado = truncateHead(cuerpo, { maxBytes: TOPE_SALIDA });\n\tlet salida = `${encontradas.length} regla(s) de ${filtro ? origen : \"todos los orígenes\"}:\\n${recortado.content}`;\n\tif (recortado.truncated) salida += \"\\n\\n[recortado; pide un origen más concreto para ver el resto]\";\n\tif (omitidas.length > 0) salida += `\\n\\nOmitidas: ${omitidas.map((o) => `${o.ruta} (${o.motivo})`).join(\"; \")}`;\n\treturn salida;\n}\n"]}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `rule://<origen>` — las reglas que `descubrimiento/reglas.ts` ya encuentra
|
|
3
|
+
* (`.cursorrules`, `.clinerules`, `.windsurfrules`, GEMINI.md, Copilot…).
|
|
4
|
+
*
|
|
5
|
+
* `descubrirReglas` ya hace la deduplicación por contenido y el tope de
|
|
6
|
+
* tamaño; aquí solo se filtra por origen y se recorta el texto final para no
|
|
7
|
+
* volcar un fichero de 32KB entero en una respuesta de `read`.
|
|
8
|
+
*/
|
|
9
|
+
import { descubrirReglas } from "../descubrimiento/reglas.js";
|
|
10
|
+
import { truncateHead } from "../tools/truncate.js";
|
|
11
|
+
const TOPE_SALIDA = 8 * 1024;
|
|
12
|
+
export function leerReglas(cwd, origen) {
|
|
13
|
+
const { reglas, omitidas } = descubrirReglas(cwd);
|
|
14
|
+
const filtro = origen.trim().toLowerCase();
|
|
15
|
+
const encontradas = filtro ? reglas.filter((r) => r.origen.toLowerCase().includes(filtro)) : reglas;
|
|
16
|
+
if (reglas.length === 0)
|
|
17
|
+
return "rule://: no se ha descubierto ninguna regla en este proyecto.";
|
|
18
|
+
if (encontradas.length === 0) {
|
|
19
|
+
const origenes = [...new Set(reglas.map((r) => r.origen))].join(", ");
|
|
20
|
+
return `rule://${origen}: ninguna regla descubierta de ese origen. Orígenes presentes: ${origenes}.`;
|
|
21
|
+
}
|
|
22
|
+
const cuerpo = encontradas.map((r) => `── ${r.ruta} (${r.origen}) ──\n${r.contenido}`).join("\n\n");
|
|
23
|
+
const recortado = truncateHead(cuerpo, { maxBytes: TOPE_SALIDA });
|
|
24
|
+
let salida = `${encontradas.length} regla(s) de ${filtro ? origen : "todos los orígenes"}:\n${recortado.content}`;
|
|
25
|
+
if (recortado.truncated)
|
|
26
|
+
salida += "\n\n[recortado; pide un origen más concreto para ver el resto]";
|
|
27
|
+
if (omitidas.length > 0)
|
|
28
|
+
salida += `\n\nOmitidas: ${omitidas.map((o) => `${o.ruta} (${o.motivo})`).join("; ")}`;
|
|
29
|
+
return salida;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=reglas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reglas.js","sourceRoot":"","sources":["../../../src/core/urls-internas/reglas.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC;AAE7B,MAAM,UAAU,UAAU,CAAC,GAAW,EAAE,MAAc,EAAU;IAC/D,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAEpG,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,+DAA+D,CAAC;IAChG,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtE,OAAO,UAAU,MAAM,mEAAkE,QAAQ,GAAG,CAAC;IACtG,CAAC;IAED,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAM,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,aAAS,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpG,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;IAClE,IAAI,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,gBAAgB,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,qBAAoB,MAAM,SAAS,CAAC,OAAO,EAAE,CAAC;IAClH,IAAI,SAAS,CAAC,SAAS;QAAE,MAAM,IAAI,iEAAgE,CAAC;IACpG,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,iBAAiB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAChH,OAAO,MAAM,CAAC;AAAA,CACd","sourcesContent":["/**\n * `rule://<origen>` — las reglas que `descubrimiento/reglas.ts` ya encuentra\n * (`.cursorrules`, `.clinerules`, `.windsurfrules`, GEMINI.md, Copilot…).\n *\n * `descubrirReglas` ya hace la deduplicación por contenido y el tope de\n * tamaño; aquí solo se filtra por origen y se recorta el texto final para no\n * volcar un fichero de 32KB entero en una respuesta de `read`.\n */\n\nimport { descubrirReglas } from \"../descubrimiento/reglas.ts\";\nimport { truncateHead } from \"../tools/truncate.ts\";\n\nconst TOPE_SALIDA = 8 * 1024;\n\nexport function leerReglas(cwd: string, origen: string): string {\n\tconst { reglas, omitidas } = descubrirReglas(cwd);\n\tconst filtro = origen.trim().toLowerCase();\n\tconst encontradas = filtro ? reglas.filter((r) => r.origen.toLowerCase().includes(filtro)) : reglas;\n\n\tif (reglas.length === 0) return \"rule://: no se ha descubierto ninguna regla en este proyecto.\";\n\tif (encontradas.length === 0) {\n\t\tconst origenes = [...new Set(reglas.map((r) => r.origen))].join(\", \");\n\t\treturn `rule://${origen}: ninguna regla descubierta de ese origen. Orígenes presentes: ${origenes}.`;\n\t}\n\n\tconst cuerpo = encontradas.map((r) => `── ${r.ruta} (${r.origen}) ──\\n${r.contenido}`).join(\"\\n\\n\");\n\tconst recortado = truncateHead(cuerpo, { maxBytes: TOPE_SALIDA });\n\tlet salida = `${encontradas.length} regla(s) de ${filtro ? origen : \"todos los orígenes\"}:\\n${recortado.content}`;\n\tif (recortado.truncated) salida += \"\\n\\n[recortado; pide un origen más concreto para ver el resto]\";\n\tif (omitidas.length > 0) salida += `\\n\\nOmitidas: ${omitidas.map((o) => `${o.ruta} (${o.motivo})`).join(\"; \")}`;\n\treturn salida;\n}\n"]}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agrega el consumo real a partir de los JSONL de sesión.
|
|
3
|
+
*
|
|
4
|
+
* El dato ya estaba ahí —cada mensaje del asistente guarda `usage` con tokens y
|
|
5
|
+
* coste—, solo que nadie lo leía. Esto no estima nada: suma lo que el proveedor
|
|
6
|
+
* cobró.
|
|
7
|
+
*
|
|
8
|
+
* Los tokens de caché se cuentan APARTE. Meterlos en el total haría que un día
|
|
9
|
+
* con mucha caché pareciera carísimo cuando es justo lo contrario: la caché es
|
|
10
|
+
* lo que abarata: en DeepSeek un acierto cuesta ~1/31 de un fallo. Un panel que
|
|
11
|
+
* los mezcla enseña un número que no se corresponde con la factura.
|
|
12
|
+
*/
|
|
13
|
+
export interface UsoBruto {
|
|
14
|
+
input?: number;
|
|
15
|
+
output?: number;
|
|
16
|
+
cacheRead?: number;
|
|
17
|
+
cacheWrite?: number;
|
|
18
|
+
cost?: {
|
|
19
|
+
total?: number;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export interface LineaSesion {
|
|
23
|
+
type?: string;
|
|
24
|
+
timestamp?: string;
|
|
25
|
+
cwd?: string;
|
|
26
|
+
message?: {
|
|
27
|
+
role?: string;
|
|
28
|
+
provider?: string;
|
|
29
|
+
model?: string;
|
|
30
|
+
usage?: UsoBruto;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export interface Totales {
|
|
34
|
+
mensajes: number;
|
|
35
|
+
entrada: number;
|
|
36
|
+
salida: number;
|
|
37
|
+
cacheRead: number;
|
|
38
|
+
cacheWrite: number;
|
|
39
|
+
coste: number;
|
|
40
|
+
}
|
|
41
|
+
export interface Resumen extends Totales {
|
|
42
|
+
sesiones: number;
|
|
43
|
+
/** Sesiones descartadas por vivir en un directorio temporal. */
|
|
44
|
+
sesionesTemporales: number;
|
|
45
|
+
porModelo: Record<string, Totales>;
|
|
46
|
+
porDia: Record<string, Totales>;
|
|
47
|
+
porProyecto: Record<string, Totales>;
|
|
48
|
+
}
|
|
49
|
+
export declare function esRutaTemporal(ruta: string): boolean;
|
|
50
|
+
export interface OpcionesResumen {
|
|
51
|
+
/** Solo mensajes a partir de esta fecha (ISO). */
|
|
52
|
+
desde?: string;
|
|
53
|
+
/** Incluir las sesiones de directorios temporales (las de los tests). */
|
|
54
|
+
incluirTemporales?: boolean;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Resume una o varias sesiones.
|
|
58
|
+
*
|
|
59
|
+
* Una sesión cuenta solo si aportó consumo: los JSONL abandonados sin una sola
|
|
60
|
+
* respuesta inflarían el recuento de sesiones sin corresponder a trabajo.
|
|
61
|
+
*/
|
|
62
|
+
export declare function resumir(sesiones: Array<{
|
|
63
|
+
cwd?: string;
|
|
64
|
+
lineas: LineaSesion[];
|
|
65
|
+
}>, opciones?: OpcionesResumen): Resumen;
|
|
66
|
+
/** Ordena un desglose de mayor a menor coste, que es el orden que importa. */
|
|
67
|
+
export declare function porCoste(cubos: Record<string, Totales>): Array<[string, Totales]>;
|
|
68
|
+
//# sourceMappingURL=aggregate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregate.d.ts","sourceRoot":"","sources":["../../../src/core/usage/aggregate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,QAAQ;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE;QACT,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,QAAQ,CAAC;KACjB,CAAC;CACF;AAED,MAAM,WAAW,OAAO;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,OAAQ,SAAQ,OAAO;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAoCD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,MAAM,WAAW,eAAe;IAC/B,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CACtB,QAAQ,EAAE,KAAK,CAAC;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,EAAE,CAAA;CAAE,CAAC,EACxD,QAAQ,GAAE,eAAoB,GAC5B,OAAO,CAmCT;AAED,8EAA8E;AAC9E,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAEjF","sourcesContent":["/**\n * Agrega el consumo real a partir de los JSONL de sesión.\n *\n * El dato ya estaba ahí —cada mensaje del asistente guarda `usage` con tokens y\n * coste—, solo que nadie lo leía. Esto no estima nada: suma lo que el proveedor\n * cobró.\n *\n * Los tokens de caché se cuentan APARTE. Meterlos en el total haría que un día\n * con mucha caché pareciera carísimo cuando es justo lo contrario: la caché es\n * lo que abarata: en DeepSeek un acierto cuesta ~1/31 de un fallo. Un panel que\n * los mezcla enseña un número que no se corresponde con la factura.\n */\n\nexport interface UsoBruto {\n\tinput?: number;\n\toutput?: number;\n\tcacheRead?: number;\n\tcacheWrite?: number;\n\tcost?: { total?: number };\n}\n\nexport interface LineaSesion {\n\ttype?: string;\n\ttimestamp?: string;\n\tcwd?: string;\n\tmessage?: {\n\t\trole?: string;\n\t\tprovider?: string;\n\t\tmodel?: string;\n\t\tusage?: UsoBruto;\n\t};\n}\n\nexport interface Totales {\n\tmensajes: number;\n\tentrada: number;\n\tsalida: number;\n\tcacheRead: number;\n\tcacheWrite: number;\n\tcoste: number;\n}\n\nexport interface Resumen extends Totales {\n\tsesiones: number;\n\t/** Sesiones descartadas por vivir en un directorio temporal. */\n\tsesionesTemporales: number;\n\tporModelo: Record<string, Totales>;\n\tporDia: Record<string, Totales>;\n\tporProyecto: Record<string, Totales>;\n}\n\nfunction vacio(): Totales {\n\treturn { mensajes: 0, entrada: 0, salida: 0, cacheRead: 0, cacheWrite: 0, coste: 0 };\n}\n\nfunction acumular(destino: Totales, uso: UsoBruto): void {\n\tdestino.mensajes += 1;\n\tdestino.entrada += uso.input ?? 0;\n\tdestino.salida += uso.output ?? 0;\n\tdestino.cacheRead += uso.cacheRead ?? 0;\n\tdestino.cacheWrite += uso.cacheWrite ?? 0;\n\tdestino.coste += uso.cost?.total ?? 0;\n}\n\nfunction enCubo(mapa: Record<string, Totales>, clave: string): Totales {\n\tconst actual = mapa[clave];\n\tif (actual) return actual;\n\tconst nuevo = vacio();\n\tmapa[clave] = nuevo;\n\treturn nuevo;\n}\n\n/**\n * Directorios que nunca son un proyecto del usuario.\n *\n * Las suites de tests crean sus sesiones en temporales del sistema y acaban en\n * el mismo almacén que las reales: sin filtrarlas, el desglose por proyecto son\n * 989 rutas `/var/folders/kl/5b56hptn6…` que ya ni existen, y el consumo real\n * queda enterrado debajo.\n *\n * Estrecho a propósito: esconder un proyecto real sería peor que enseñar una\n * ruta rara, y por eso hay `--all`.\n */\nconst RUTAS_TEMPORALES = [/^\\/var\\/folders\\//, /^\\/private\\/var\\/folders\\//, /^\\/tmp\\//, /[\\\\/]Temp[\\\\/]/i];\n\nexport function esRutaTemporal(ruta: string): boolean {\n\treturn RUTAS_TEMPORALES.some((patron) => patron.test(ruta));\n}\n\nexport interface OpcionesResumen {\n\t/** Solo mensajes a partir de esta fecha (ISO). */\n\tdesde?: string;\n\t/** Incluir las sesiones de directorios temporales (las de los tests). */\n\tincluirTemporales?: boolean;\n}\n\n/**\n * Resume una o varias sesiones.\n *\n * Una sesión cuenta solo si aportó consumo: los JSONL abandonados sin una sola\n * respuesta inflarían el recuento de sesiones sin corresponder a trabajo.\n */\nexport function resumir(\n\tsesiones: Array<{ cwd?: string; lineas: LineaSesion[] }>,\n\topciones: OpcionesResumen = {},\n): Resumen {\n\tconst resumen: Resumen = {\n\t\t...vacio(),\n\t\tsesiones: 0,\n\t\tsesionesTemporales: 0,\n\t\tporModelo: {},\n\t\tporDia: {},\n\t\tporProyecto: {},\n\t};\n\n\tfor (const sesion of sesiones) {\n\t\tlet aporto = false;\n\t\t// El `cwd` viene en la cabecera; si falta, se etiqueta explícitamente en\n\t\t// vez de repartirlo entre los demás proyectos.\n\t\tconst proyecto = sesion.cwd ?? sesion.lineas.find((l) => l.type === \"session\")?.cwd ?? \"(desconocido)\";\n\t\tif (!opciones.incluirTemporales && esRutaTemporal(proyecto)) {\n\t\t\tresumen.sesionesTemporales += 1;\n\t\t\tcontinue;\n\t\t}\n\n\t\tfor (const linea of sesion.lineas) {\n\t\t\tconst uso = linea.message?.usage;\n\t\t\tif (!uso || linea.message?.role !== \"assistant\") continue;\n\t\t\tif (opciones.desde && linea.timestamp && linea.timestamp < opciones.desde) continue;\n\n\t\t\taporto = true;\n\t\t\tacumular(resumen, uso);\n\t\t\tacumular(enCubo(resumen.porModelo, `${linea.message.provider ?? \"?\"}/${linea.message.model ?? \"?\"}`), uso);\n\t\t\tacumular(enCubo(resumen.porProyecto, proyecto), uso);\n\t\t\tif (linea.timestamp) acumular(enCubo(resumen.porDia, linea.timestamp.slice(0, 10)), uso);\n\t\t}\n\t\tif (aporto) resumen.sesiones += 1;\n\t}\n\n\treturn resumen;\n}\n\n/** Ordena un desglose de mayor a menor coste, que es el orden que importa. */\nexport function porCoste(cubos: Record<string, Totales>): Array<[string, Totales]> {\n\treturn Object.entries(cubos).sort((a, b) => b[1].coste - a[1].coste || b[1].salida - a[1].salida);\n}\n"]}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agrega el consumo real a partir de los JSONL de sesión.
|
|
3
|
+
*
|
|
4
|
+
* El dato ya estaba ahí —cada mensaje del asistente guarda `usage` con tokens y
|
|
5
|
+
* coste—, solo que nadie lo leía. Esto no estima nada: suma lo que el proveedor
|
|
6
|
+
* cobró.
|
|
7
|
+
*
|
|
8
|
+
* Los tokens de caché se cuentan APARTE. Meterlos en el total haría que un día
|
|
9
|
+
* con mucha caché pareciera carísimo cuando es justo lo contrario: la caché es
|
|
10
|
+
* lo que abarata: en DeepSeek un acierto cuesta ~1/31 de un fallo. Un panel que
|
|
11
|
+
* los mezcla enseña un número que no se corresponde con la factura.
|
|
12
|
+
*/
|
|
13
|
+
function vacio() {
|
|
14
|
+
return { mensajes: 0, entrada: 0, salida: 0, cacheRead: 0, cacheWrite: 0, coste: 0 };
|
|
15
|
+
}
|
|
16
|
+
function acumular(destino, uso) {
|
|
17
|
+
destino.mensajes += 1;
|
|
18
|
+
destino.entrada += uso.input ?? 0;
|
|
19
|
+
destino.salida += uso.output ?? 0;
|
|
20
|
+
destino.cacheRead += uso.cacheRead ?? 0;
|
|
21
|
+
destino.cacheWrite += uso.cacheWrite ?? 0;
|
|
22
|
+
destino.coste += uso.cost?.total ?? 0;
|
|
23
|
+
}
|
|
24
|
+
function enCubo(mapa, clave) {
|
|
25
|
+
const actual = mapa[clave];
|
|
26
|
+
if (actual)
|
|
27
|
+
return actual;
|
|
28
|
+
const nuevo = vacio();
|
|
29
|
+
mapa[clave] = nuevo;
|
|
30
|
+
return nuevo;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Directorios que nunca son un proyecto del usuario.
|
|
34
|
+
*
|
|
35
|
+
* Las suites de tests crean sus sesiones en temporales del sistema y acaban en
|
|
36
|
+
* el mismo almacén que las reales: sin filtrarlas, el desglose por proyecto son
|
|
37
|
+
* 989 rutas `/var/folders/kl/5b56hptn6…` que ya ni existen, y el consumo real
|
|
38
|
+
* queda enterrado debajo.
|
|
39
|
+
*
|
|
40
|
+
* Estrecho a propósito: esconder un proyecto real sería peor que enseñar una
|
|
41
|
+
* ruta rara, y por eso hay `--all`.
|
|
42
|
+
*/
|
|
43
|
+
const RUTAS_TEMPORALES = [/^\/var\/folders\//, /^\/private\/var\/folders\//, /^\/tmp\//, /[\\/]Temp[\\/]/i];
|
|
44
|
+
export function esRutaTemporal(ruta) {
|
|
45
|
+
return RUTAS_TEMPORALES.some((patron) => patron.test(ruta));
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Resume una o varias sesiones.
|
|
49
|
+
*
|
|
50
|
+
* Una sesión cuenta solo si aportó consumo: los JSONL abandonados sin una sola
|
|
51
|
+
* respuesta inflarían el recuento de sesiones sin corresponder a trabajo.
|
|
52
|
+
*/
|
|
53
|
+
export function resumir(sesiones, opciones = {}) {
|
|
54
|
+
const resumen = {
|
|
55
|
+
...vacio(),
|
|
56
|
+
sesiones: 0,
|
|
57
|
+
sesionesTemporales: 0,
|
|
58
|
+
porModelo: {},
|
|
59
|
+
porDia: {},
|
|
60
|
+
porProyecto: {},
|
|
61
|
+
};
|
|
62
|
+
for (const sesion of sesiones) {
|
|
63
|
+
let aporto = false;
|
|
64
|
+
// El `cwd` viene en la cabecera; si falta, se etiqueta explícitamente en
|
|
65
|
+
// vez de repartirlo entre los demás proyectos.
|
|
66
|
+
const proyecto = sesion.cwd ?? sesion.lineas.find((l) => l.type === "session")?.cwd ?? "(desconocido)";
|
|
67
|
+
if (!opciones.incluirTemporales && esRutaTemporal(proyecto)) {
|
|
68
|
+
resumen.sesionesTemporales += 1;
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
for (const linea of sesion.lineas) {
|
|
72
|
+
const uso = linea.message?.usage;
|
|
73
|
+
if (!uso || linea.message?.role !== "assistant")
|
|
74
|
+
continue;
|
|
75
|
+
if (opciones.desde && linea.timestamp && linea.timestamp < opciones.desde)
|
|
76
|
+
continue;
|
|
77
|
+
aporto = true;
|
|
78
|
+
acumular(resumen, uso);
|
|
79
|
+
acumular(enCubo(resumen.porModelo, `${linea.message.provider ?? "?"}/${linea.message.model ?? "?"}`), uso);
|
|
80
|
+
acumular(enCubo(resumen.porProyecto, proyecto), uso);
|
|
81
|
+
if (linea.timestamp)
|
|
82
|
+
acumular(enCubo(resumen.porDia, linea.timestamp.slice(0, 10)), uso);
|
|
83
|
+
}
|
|
84
|
+
if (aporto)
|
|
85
|
+
resumen.sesiones += 1;
|
|
86
|
+
}
|
|
87
|
+
return resumen;
|
|
88
|
+
}
|
|
89
|
+
/** Ordena un desglose de mayor a menor coste, que es el orden que importa. */
|
|
90
|
+
export function porCoste(cubos) {
|
|
91
|
+
return Object.entries(cubos).sort((a, b) => b[1].coste - a[1].coste || b[1].salida - a[1].salida);
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=aggregate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregate.js","sourceRoot":"","sources":["../../../src/core/usage/aggregate.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Agrega el consumo real a partir de los JSONL de sesión.\n *\n * El dato ya estaba ahí —cada mensaje del asistente guarda `usage` con tokens y\n * coste—, solo que nadie lo leía. Esto no estima nada: suma lo que el proveedor\n * cobró.\n *\n * Los tokens de caché se cuentan APARTE. Meterlos en el total haría que un día\n * con mucha caché pareciera carísimo cuando es justo lo contrario: la caché es\n * lo que abarata: en DeepSeek un acierto cuesta ~1/31 de un fallo. Un panel que\n * los mezcla enseña un número que no se corresponde con la factura.\n */\n\nexport interface UsoBruto {\n\tinput?: number;\n\toutput?: number;\n\tcacheRead?: number;\n\tcacheWrite?: number;\n\tcost?: { total?: number };\n}\n\nexport interface LineaSesion {\n\ttype?: string;\n\ttimestamp?: string;\n\tcwd?: string;\n\tmessage?: {\n\t\trole?: string;\n\t\tprovider?: string;\n\t\tmodel?: string;\n\t\tusage?: UsoBruto;\n\t};\n}\n\nexport interface Totales {\n\tmensajes: number;\n\tentrada: number;\n\tsalida: number;\n\tcacheRead: number;\n\tcacheWrite: number;\n\tcoste: number;\n}\n\nexport interface Resumen extends Totales {\n\tsesiones: number;\n\t/** Sesiones descartadas por vivir en un directorio temporal. */\n\tsesionesTemporales: number;\n\tporModelo: Record<string, Totales>;\n\tporDia: Record<string, Totales>;\n\tporProyecto: Record<string, Totales>;\n}\n\nfunction vacio(): Totales {\n\treturn { mensajes: 0, entrada: 0, salida: 0, cacheRead: 0, cacheWrite: 0, coste: 0 };\n}\n\nfunction acumular(destino: Totales, uso: UsoBruto): void {\n\tdestino.mensajes += 1;\n\tdestino.entrada += uso.input ?? 0;\n\tdestino.salida += uso.output ?? 0;\n\tdestino.cacheRead += uso.cacheRead ?? 0;\n\tdestino.cacheWrite += uso.cacheWrite ?? 0;\n\tdestino.coste += uso.cost?.total ?? 0;\n}\n\nfunction enCubo(mapa: Record<string, Totales>, clave: string): Totales {\n\tconst actual = mapa[clave];\n\tif (actual) return actual;\n\tconst nuevo = vacio();\n\tmapa[clave] = nuevo;\n\treturn nuevo;\n}\n\n/**\n * Directorios que nunca son un proyecto del usuario.\n *\n * Las suites de tests crean sus sesiones en temporales del sistema y acaban en\n * el mismo almacén que las reales: sin filtrarlas, el desglose por proyecto son\n * 989 rutas `/var/folders/kl/5b56hptn6…` que ya ni existen, y el consumo real\n * queda enterrado debajo.\n *\n * Estrecho a propósito: esconder un proyecto real sería peor que enseñar una\n * ruta rara, y por eso hay `--all`.\n */\nconst RUTAS_TEMPORALES = [/^\\/var\\/folders\\//, /^\\/private\\/var\\/folders\\//, /^\\/tmp\\//, /[\\\\/]Temp[\\\\/]/i];\n\nexport function esRutaTemporal(ruta: string): boolean {\n\treturn RUTAS_TEMPORALES.some((patron) => patron.test(ruta));\n}\n\nexport interface OpcionesResumen {\n\t/** Solo mensajes a partir de esta fecha (ISO). */\n\tdesde?: string;\n\t/** Incluir las sesiones de directorios temporales (las de los tests). */\n\tincluirTemporales?: boolean;\n}\n\n/**\n * Resume una o varias sesiones.\n *\n * Una sesión cuenta solo si aportó consumo: los JSONL abandonados sin una sola\n * respuesta inflarían el recuento de sesiones sin corresponder a trabajo.\n */\nexport function resumir(\n\tsesiones: Array<{ cwd?: string; lineas: LineaSesion[] }>,\n\topciones: OpcionesResumen = {},\n): Resumen {\n\tconst resumen: Resumen = {\n\t\t...vacio(),\n\t\tsesiones: 0,\n\t\tsesionesTemporales: 0,\n\t\tporModelo: {},\n\t\tporDia: {},\n\t\tporProyecto: {},\n\t};\n\n\tfor (const sesion of sesiones) {\n\t\tlet aporto = false;\n\t\t// El `cwd` viene en la cabecera; si falta, se etiqueta explícitamente en\n\t\t// vez de repartirlo entre los demás proyectos.\n\t\tconst proyecto = sesion.cwd ?? sesion.lineas.find((l) => l.type === \"session\")?.cwd ?? \"(desconocido)\";\n\t\tif (!opciones.incluirTemporales && esRutaTemporal(proyecto)) {\n\t\t\tresumen.sesionesTemporales += 1;\n\t\t\tcontinue;\n\t\t}\n\n\t\tfor (const linea of sesion.lineas) {\n\t\t\tconst uso = linea.message?.usage;\n\t\t\tif (!uso || linea.message?.role !== \"assistant\") continue;\n\t\t\tif (opciones.desde && linea.timestamp && linea.timestamp < opciones.desde) continue;\n\n\t\t\taporto = true;\n\t\t\tacumular(resumen, uso);\n\t\t\tacumular(enCubo(resumen.porModelo, `${linea.message.provider ?? \"?\"}/${linea.message.model ?? \"?\"}`), uso);\n\t\t\tacumular(enCubo(resumen.porProyecto, proyecto), uso);\n\t\t\tif (linea.timestamp) acumular(enCubo(resumen.porDia, linea.timestamp.slice(0, 10)), uso);\n\t\t}\n\t\tif (aporto) resumen.sesiones += 1;\n\t}\n\n\treturn resumen;\n}\n\n/** Ordena un desglose de mayor a menor coste, que es el orden que importa. */\nexport function porCoste(cubos: Record<string, Totales>): Array<[string, Totales]> {\n\treturn Object.entries(cubos).sort((a, b) => b[1].coste - a[1].coste || b[1].salida - a[1].salida);\n}\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cuota de Anthropic — solo publica límites la sesión OAuth de Claude
|
|
3
|
+
* (claude.ai/Claude Code); la clave de API de la consola es pago por token,
|
|
4
|
+
* sin techo que consultar.
|
|
5
|
+
*
|
|
6
|
+
* Mismo endpoint que usa Claude Code para pintar "Usage limit" en su CLI.
|
|
7
|
+
*/
|
|
8
|
+
import { type ConsultorCuota } from "./tipos.ts";
|
|
9
|
+
export declare const consultorAnthropic: ConsultorCuota;
|
|
10
|
+
//# sourceMappingURL=anthropic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../../src/core/usage/cuota/anthropic.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,cAAc,EAAyC,MAAM,YAAY,CAAC;AA0BxF,eAAO,MAAM,kBAAkB,EAAE,cA0ChC,CAAC","sourcesContent":["/**\n * Cuota de Anthropic — solo publica límites la sesión OAuth de Claude\n * (claude.ai/Claude Code); la clave de API de la consola es pago por token,\n * sin techo que consultar.\n *\n * Mismo endpoint que usa Claude Code para pintar \"Usage limit\" en su CLI.\n */\n\nimport { type ConsultorCuota, ErrorConsultaCuota, type VentanaCuota } from \"./tipos.ts\";\n\nconst ENDPOINT = \"https://api.anthropic.com/api/oauth/usage\";\n\ninterface CuboBruto {\n\tutilization?: number;\n\tresets_at?: string | null;\n}\n\ninterface RespuestaAnthropic {\n\tfive_hour?: CuboBruto | null;\n\tseven_day?: CuboBruto | null;\n}\n\nfunction aVentana(etiqueta: string, cubo: CuboBruto | null | undefined): VentanaCuota | undefined {\n\tif (!cubo || typeof cubo.utilization !== \"number\") return undefined;\n\tconst seReinicia = cubo.resets_at ? Date.parse(cubo.resets_at) : Number.NaN;\n\treturn {\n\t\tetiqueta,\n\t\tusado: Math.min(Math.max(cubo.utilization, 0), 100),\n\t\tlimite: 100,\n\t\tseReinicia: Number.isFinite(seReinicia) ? seReinicia : null,\n\t\tunidad: \"porcentaje\",\n\t};\n}\n\nexport const consultorAnthropic: ConsultorCuota = {\n\tid: \"anthropic\",\n\tsoporta: (credencial) => credencial.type === \"oauth\",\n\tasync consultar({ credencial, fetch: fetchImpl = fetch, señal }) {\n\t\tif (credencial.type !== \"oauth\") return null;\n\n\t\tlet respuesta: Response;\n\t\ttry {\n\t\t\trespuesta = await fetchImpl(ENDPOINT, {\n\t\t\t\theaders: {\n\t\t\t\t\taccept: \"application/json\",\n\t\t\t\t\t\"anthropic-beta\": \"oauth-2025-04-20\",\n\t\t\t\t\t\"content-type\": \"application/json\",\n\t\t\t\t\tauthorization: `Bearer ${credencial.access}`,\n\t\t\t\t},\n\t\t\t\tsignal: señal,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tthrow new ErrorConsultaCuota(\"anthropic\", `no se pudo contactar con Anthropic: ${String(error)}`, {\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t}\n\t\tif (!respuesta.ok) {\n\t\t\tthrow new ErrorConsultaCuota(\"anthropic\", `Anthropic respondió ${respuesta.status} ${respuesta.statusText}`);\n\t\t}\n\n\t\tlet datos: RespuestaAnthropic;\n\t\ttry {\n\t\t\tdatos = (await respuesta.json()) as RespuestaAnthropic;\n\t\t} catch (error) {\n\t\t\tthrow new ErrorConsultaCuota(\"anthropic\", `la respuesta de Anthropic no es JSON válido: ${String(error)}`, {\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t}\n\n\t\tconst ventanas = [aVentana(\"5 horas\", datos.five_hour), aVentana(\"7 días\", datos.seven_day)].filter(\n\t\t\t(v): v is VentanaCuota => v !== undefined,\n\t\t);\n\t\t// Cero ventanas reconocibles no es \"cero cuota usada\": es que la cuenta\n\t\t// no publicó ningún cubo, y eso hay que enseñarlo como \"no publica\".\n\t\treturn ventanas.length > 0 ? ventanas : null;\n\t},\n};\n"]}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cuota de Anthropic — solo publica límites la sesión OAuth de Claude
|
|
3
|
+
* (claude.ai/Claude Code); la clave de API de la consola es pago por token,
|
|
4
|
+
* sin techo que consultar.
|
|
5
|
+
*
|
|
6
|
+
* Mismo endpoint que usa Claude Code para pintar "Usage limit" en su CLI.
|
|
7
|
+
*/
|
|
8
|
+
import { ErrorConsultaCuota } from "./tipos.js";
|
|
9
|
+
const ENDPOINT = "https://api.anthropic.com/api/oauth/usage";
|
|
10
|
+
function aVentana(etiqueta, cubo) {
|
|
11
|
+
if (!cubo || typeof cubo.utilization !== "number")
|
|
12
|
+
return undefined;
|
|
13
|
+
const seReinicia = cubo.resets_at ? Date.parse(cubo.resets_at) : Number.NaN;
|
|
14
|
+
return {
|
|
15
|
+
etiqueta,
|
|
16
|
+
usado: Math.min(Math.max(cubo.utilization, 0), 100),
|
|
17
|
+
limite: 100,
|
|
18
|
+
seReinicia: Number.isFinite(seReinicia) ? seReinicia : null,
|
|
19
|
+
unidad: "porcentaje",
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export const consultorAnthropic = {
|
|
23
|
+
id: "anthropic",
|
|
24
|
+
soporta: (credencial) => credencial.type === "oauth",
|
|
25
|
+
async consultar({ credencial, fetch: fetchImpl = fetch, señal }) {
|
|
26
|
+
if (credencial.type !== "oauth")
|
|
27
|
+
return null;
|
|
28
|
+
let respuesta;
|
|
29
|
+
try {
|
|
30
|
+
respuesta = await fetchImpl(ENDPOINT, {
|
|
31
|
+
headers: {
|
|
32
|
+
accept: "application/json",
|
|
33
|
+
"anthropic-beta": "oauth-2025-04-20",
|
|
34
|
+
"content-type": "application/json",
|
|
35
|
+
authorization: `Bearer ${credencial.access}`,
|
|
36
|
+
},
|
|
37
|
+
signal: señal,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
throw new ErrorConsultaCuota("anthropic", `no se pudo contactar con Anthropic: ${String(error)}`, {
|
|
42
|
+
cause: error,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
if (!respuesta.ok) {
|
|
46
|
+
throw new ErrorConsultaCuota("anthropic", `Anthropic respondió ${respuesta.status} ${respuesta.statusText}`);
|
|
47
|
+
}
|
|
48
|
+
let datos;
|
|
49
|
+
try {
|
|
50
|
+
datos = (await respuesta.json());
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
throw new ErrorConsultaCuota("anthropic", `la respuesta de Anthropic no es JSON válido: ${String(error)}`, {
|
|
54
|
+
cause: error,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
const ventanas = [aVentana("5 horas", datos.five_hour), aVentana("7 días", datos.seven_day)].filter((v) => v !== undefined);
|
|
58
|
+
// Cero ventanas reconocibles no es "cero cuota usada": es que la cuenta
|
|
59
|
+
// no publicó ningún cubo, y eso hay que enseñarlo como "no publica".
|
|
60
|
+
return ventanas.length > 0 ? ventanas : null;
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=anthropic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../../../src/core/usage/cuota/anthropic.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAuB,kBAAkB,EAAqB,MAAM,YAAY,CAAC;AAExF,MAAM,QAAQ,GAAG,2CAA2C,CAAC;AAY7D,SAAS,QAAQ,CAAC,QAAgB,EAAE,IAAkC,EAA4B;IACjG,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IACpE,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;IAC5E,OAAO;QACN,QAAQ;QACR,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC;QACnD,MAAM,EAAE,GAAG;QACX,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI;QAC3D,MAAM,EAAE,YAAY;KACpB,CAAC;AAAA,CACF;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAmB;IACjD,EAAE,EAAE,WAAW;IACf,OAAO,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,OAAO;IACpD,KAAK,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,GAAG,KAAK,EAAE,MAAK,EAAE,EAAE;QAChE,IAAI,UAAU,CAAC,IAAI,KAAK,OAAO;YAAE,OAAO,IAAI,CAAC;QAE7C,IAAI,SAAmB,CAAC;QACxB,IAAI,CAAC;YACJ,SAAS,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE;gBACrC,OAAO,EAAE;oBACR,MAAM,EAAE,kBAAkB;oBAC1B,gBAAgB,EAAE,kBAAkB;oBACpC,cAAc,EAAE,kBAAkB;oBAClC,aAAa,EAAE,UAAU,UAAU,CAAC,MAAM,EAAE;iBAC5C;gBACD,MAAM,EAAE,MAAK;aACb,CAAC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,kBAAkB,CAAC,WAAW,EAAE,uCAAuC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE;gBACjG,KAAK,EAAE,KAAK;aACZ,CAAC,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;YACnB,MAAM,IAAI,kBAAkB,CAAC,WAAW,EAAE,wBAAuB,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC;QAC9G,CAAC;QAED,IAAI,KAAyB,CAAC;QAC9B,IAAI,CAAC;YACJ,KAAK,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAuB,CAAC;QACxD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,kBAAkB,CAAC,WAAW,EAAE,iDAAgD,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE;gBAC1G,KAAK,EAAE,KAAK;aACZ,CAAC,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,SAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAClG,CAAC,CAAC,EAAqB,EAAE,CAAC,CAAC,KAAK,SAAS,CACzC,CAAC;QACF,wEAAwE;QACxE,wEAAqE;QACrE,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;IAAA,CAC7C;CACD,CAAC","sourcesContent":["/**\n * Cuota de Anthropic — solo publica límites la sesión OAuth de Claude\n * (claude.ai/Claude Code); la clave de API de la consola es pago por token,\n * sin techo que consultar.\n *\n * Mismo endpoint que usa Claude Code para pintar \"Usage limit\" en su CLI.\n */\n\nimport { type ConsultorCuota, ErrorConsultaCuota, type VentanaCuota } from \"./tipos.ts\";\n\nconst ENDPOINT = \"https://api.anthropic.com/api/oauth/usage\";\n\ninterface CuboBruto {\n\tutilization?: number;\n\tresets_at?: string | null;\n}\n\ninterface RespuestaAnthropic {\n\tfive_hour?: CuboBruto | null;\n\tseven_day?: CuboBruto | null;\n}\n\nfunction aVentana(etiqueta: string, cubo: CuboBruto | null | undefined): VentanaCuota | undefined {\n\tif (!cubo || typeof cubo.utilization !== \"number\") return undefined;\n\tconst seReinicia = cubo.resets_at ? Date.parse(cubo.resets_at) : Number.NaN;\n\treturn {\n\t\tetiqueta,\n\t\tusado: Math.min(Math.max(cubo.utilization, 0), 100),\n\t\tlimite: 100,\n\t\tseReinicia: Number.isFinite(seReinicia) ? seReinicia : null,\n\t\tunidad: \"porcentaje\",\n\t};\n}\n\nexport const consultorAnthropic: ConsultorCuota = {\n\tid: \"anthropic\",\n\tsoporta: (credencial) => credencial.type === \"oauth\",\n\tasync consultar({ credencial, fetch: fetchImpl = fetch, señal }) {\n\t\tif (credencial.type !== \"oauth\") return null;\n\n\t\tlet respuesta: Response;\n\t\ttry {\n\t\t\trespuesta = await fetchImpl(ENDPOINT, {\n\t\t\t\theaders: {\n\t\t\t\t\taccept: \"application/json\",\n\t\t\t\t\t\"anthropic-beta\": \"oauth-2025-04-20\",\n\t\t\t\t\t\"content-type\": \"application/json\",\n\t\t\t\t\tauthorization: `Bearer ${credencial.access}`,\n\t\t\t\t},\n\t\t\t\tsignal: señal,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tthrow new ErrorConsultaCuota(\"anthropic\", `no se pudo contactar con Anthropic: ${String(error)}`, {\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t}\n\t\tif (!respuesta.ok) {\n\t\t\tthrow new ErrorConsultaCuota(\"anthropic\", `Anthropic respondió ${respuesta.status} ${respuesta.statusText}`);\n\t\t}\n\n\t\tlet datos: RespuestaAnthropic;\n\t\ttry {\n\t\t\tdatos = (await respuesta.json()) as RespuestaAnthropic;\n\t\t} catch (error) {\n\t\t\tthrow new ErrorConsultaCuota(\"anthropic\", `la respuesta de Anthropic no es JSON válido: ${String(error)}`, {\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t}\n\n\t\tconst ventanas = [aVentana(\"5 horas\", datos.five_hour), aVentana(\"7 días\", datos.seven_day)].filter(\n\t\t\t(v): v is VentanaCuota => v !== undefined,\n\t\t);\n\t\t// Cero ventanas reconocibles no es \"cero cuota usada\": es que la cuenta\n\t\t// no publicó ningún cubo, y eso hay que enseñarlo como \"no publica\".\n\t\treturn ventanas.length > 0 ? ventanas : null;\n\t},\n};\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cachea la respuesta de cuota unos minutos.
|
|
3
|
+
*
|
|
4
|
+
* Sin esto, cada turno del agente dispararía una petición HTTP más solo para
|
|
5
|
+
* enseñar un número que apenas cambia turno a turno — el hueco que describe
|
|
6
|
+
* la tarea: "una petición de más por turno".
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Devuelve el valor cacheado si sigue vivo; si no, lo calcula y lo guarda.
|
|
10
|
+
*
|
|
11
|
+
* Cachea la PROMESA, no el resultado ya resuelto: dos llamadas concurrentes
|
|
12
|
+
* antes de que la primera responda comparten la misma petición en vuelo en
|
|
13
|
+
* vez de disparar dos. Si la promesa acaba en rechazo, se borra de la caché
|
|
14
|
+
* para que la siguiente consulta pueda reintentar — un fallo cacheado como
|
|
15
|
+
* si fuera bueno sería peor que no cachear nada.
|
|
16
|
+
*/
|
|
17
|
+
export declare function conCache<T>(clave: string, calcular: () => Promise<T>, ttlMs?: number): Promise<T>;
|
|
18
|
+
/** Solo para pruebas: vacía la caché entre casos. */
|
|
19
|
+
export declare function limpiarCacheCuota(): void;
|
|
20
|
+
//# sourceMappingURL=cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../../src/core/usage/cuota/cache.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAWH;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,CAWjG;AAED,uDAAqD;AACrD,wBAAgB,iBAAiB,IAAI,IAAI,CAExC","sourcesContent":["/**\n * Cachea la respuesta de cuota unos minutos.\n *\n * Sin esto, cada turno del agente dispararía una petición HTTP más solo para\n * enseñar un número que apenas cambia turno a turno — el hueco que describe\n * la tarea: \"una petición de más por turno\".\n */\n\nconst TTL_MS = 5 * 60_000;\n\ninterface Entrada<T> {\n\texpira: number;\n\tvalor: Promise<T>;\n}\n\nconst cache = new Map<string, Entrada<unknown>>();\n\n/**\n * Devuelve el valor cacheado si sigue vivo; si no, lo calcula y lo guarda.\n *\n * Cachea la PROMESA, no el resultado ya resuelto: dos llamadas concurrentes\n * antes de que la primera responda comparten la misma petición en vuelo en\n * vez de disparar dos. Si la promesa acaba en rechazo, se borra de la caché\n * para que la siguiente consulta pueda reintentar — un fallo cacheado como\n * si fuera bueno sería peor que no cachear nada.\n */\nexport function conCache<T>(clave: string, calcular: () => Promise<T>, ttlMs = TTL_MS): Promise<T> {\n\tconst ahora = Date.now();\n\tconst existente = cache.get(clave) as Entrada<T> | undefined;\n\tif (existente && existente.expira > ahora) return existente.valor;\n\n\tconst valor = calcular();\n\tcache.set(clave, { expira: ahora + ttlMs, valor });\n\tvalor.catch(() => {\n\t\tif (cache.get(clave)?.valor === valor) cache.delete(clave);\n\t});\n\treturn valor;\n}\n\n/** Solo para pruebas: vacía la caché entre casos. */\nexport function limpiarCacheCuota(): void {\n\tcache.clear();\n}\n"]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cachea la respuesta de cuota unos minutos.
|
|
3
|
+
*
|
|
4
|
+
* Sin esto, cada turno del agente dispararía una petición HTTP más solo para
|
|
5
|
+
* enseñar un número que apenas cambia turno a turno — el hueco que describe
|
|
6
|
+
* la tarea: "una petición de más por turno".
|
|
7
|
+
*/
|
|
8
|
+
const TTL_MS = 5 * 60_000;
|
|
9
|
+
const cache = new Map();
|
|
10
|
+
/**
|
|
11
|
+
* Devuelve el valor cacheado si sigue vivo; si no, lo calcula y lo guarda.
|
|
12
|
+
*
|
|
13
|
+
* Cachea la PROMESA, no el resultado ya resuelto: dos llamadas concurrentes
|
|
14
|
+
* antes de que la primera responda comparten la misma petición en vuelo en
|
|
15
|
+
* vez de disparar dos. Si la promesa acaba en rechazo, se borra de la caché
|
|
16
|
+
* para que la siguiente consulta pueda reintentar — un fallo cacheado como
|
|
17
|
+
* si fuera bueno sería peor que no cachear nada.
|
|
18
|
+
*/
|
|
19
|
+
export function conCache(clave, calcular, ttlMs = TTL_MS) {
|
|
20
|
+
const ahora = Date.now();
|
|
21
|
+
const existente = cache.get(clave);
|
|
22
|
+
if (existente && existente.expira > ahora)
|
|
23
|
+
return existente.valor;
|
|
24
|
+
const valor = calcular();
|
|
25
|
+
cache.set(clave, { expira: ahora + ttlMs, valor });
|
|
26
|
+
valor.catch(() => {
|
|
27
|
+
if (cache.get(clave)?.valor === valor)
|
|
28
|
+
cache.delete(clave);
|
|
29
|
+
});
|
|
30
|
+
return valor;
|
|
31
|
+
}
|
|
32
|
+
/** Solo para pruebas: vacía la caché entre casos. */
|
|
33
|
+
export function limpiarCacheCuota() {
|
|
34
|
+
cache.clear();
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../../src/core/usage/cuota/cache.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC;AAO1B,MAAM,KAAK,GAAG,IAAI,GAAG,EAA4B,CAAC;AAElD;;;;;;;;GAQG;AACH,MAAM,UAAU,QAAQ,CAAI,KAAa,EAAE,QAA0B,EAAE,KAAK,GAAG,MAAM,EAAc;IAClG,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAA2B,CAAC;IAC7D,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,KAAK;QAAE,OAAO,SAAS,CAAC,KAAK,CAAC;IAElE,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IACnD,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACjB,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,KAAK;YAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAAA,CAC3D,CAAC,CAAC;IACH,OAAO,KAAK,CAAC;AAAA,CACb;AAED,uDAAqD;AACrD,MAAM,UAAU,iBAAiB,GAAS;IACzC,KAAK,CAAC,KAAK,EAAE,CAAC;AAAA,CACd","sourcesContent":["/**\n * Cachea la respuesta de cuota unos minutos.\n *\n * Sin esto, cada turno del agente dispararía una petición HTTP más solo para\n * enseñar un número que apenas cambia turno a turno — el hueco que describe\n * la tarea: \"una petición de más por turno\".\n */\n\nconst TTL_MS = 5 * 60_000;\n\ninterface Entrada<T> {\n\texpira: number;\n\tvalor: Promise<T>;\n}\n\nconst cache = new Map<string, Entrada<unknown>>();\n\n/**\n * Devuelve el valor cacheado si sigue vivo; si no, lo calcula y lo guarda.\n *\n * Cachea la PROMESA, no el resultado ya resuelto: dos llamadas concurrentes\n * antes de que la primera responda comparten la misma petición en vuelo en\n * vez de disparar dos. Si la promesa acaba en rechazo, se borra de la caché\n * para que la siguiente consulta pueda reintentar — un fallo cacheado como\n * si fuera bueno sería peor que no cachear nada.\n */\nexport function conCache<T>(clave: string, calcular: () => Promise<T>, ttlMs = TTL_MS): Promise<T> {\n\tconst ahora = Date.now();\n\tconst existente = cache.get(clave) as Entrada<T> | undefined;\n\tif (existente && existente.expira > ahora) return existente.valor;\n\n\tconst valor = calcular();\n\tcache.set(clave, { expira: ahora + ttlMs, valor });\n\tvalor.catch(() => {\n\t\tif (cache.get(clave)?.valor === valor) cache.delete(clave);\n\t});\n\treturn valor;\n}\n\n/** Solo para pruebas: vacía la caché entre casos. */\nexport function limpiarCacheCuota(): void {\n\tcache.clear();\n}\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cuota de GitHub Copilot — `quota_snapshots` en el endpoint interno de
|
|
3
|
+
* cuenta. Un cubo `unlimited: true` (plan Business/Enterprise sin techo de
|
|
4
|
+
* peticiones premium) se descarta a propósito: no tiene "usado/límite" que
|
|
5
|
+
* enseñar, y forzar un 0/0 mentiría sobre haber consultado algo real.
|
|
6
|
+
*/
|
|
7
|
+
import { type ConsultorCuota } from "./tipos.ts";
|
|
8
|
+
export declare const consultorGithubCopilot: ConsultorCuota;
|
|
9
|
+
//# sourceMappingURL=github-copilot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-copilot.d.ts","sourceRoot":"","sources":["../../../../src/core/usage/cuota/github-copilot.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,KAAK,cAAc,EAAyC,MAAM,YAAY,CAAC;AAsCxF,eAAO,MAAM,sBAAsB,EAAE,cA8CpC,CAAC","sourcesContent":["/**\n * Cuota de GitHub Copilot — `quota_snapshots` en el endpoint interno de\n * cuenta. Un cubo `unlimited: true` (plan Business/Enterprise sin techo de\n * peticiones premium) se descarta a propósito: no tiene \"usado/límite\" que\n * enseñar, y forzar un 0/0 mentiría sobre haber consultado algo real.\n */\n\nimport type { Credential } from \"@earendil-works/pi-ai\";\nimport { type ConsultorCuota, ErrorConsultaCuota, type VentanaCuota } from \"./tipos.ts\";\n\nconst ENDPOINT = \"https://api.github.com/copilot_internal/user\";\n\ninterface CuotaBruta {\n\tentitlement?: number;\n\tremaining?: number;\n\tunlimited?: boolean;\n}\n\ninterface RespuestaCopilot {\n\tquota_reset_date?: string;\n\tquota_snapshots?: {\n\t\tchat?: CuotaBruta;\n\t\tcompletions?: CuotaBruta;\n\t\tpremium_interactions?: CuotaBruta;\n\t};\n}\n\nfunction aVentana(etiqueta: string, cubo: CuotaBruta | undefined, seReinicia: number | null): VentanaCuota | undefined {\n\tif (!cubo || cubo.unlimited || typeof cubo.entitlement !== \"number\" || typeof cubo.remaining !== \"number\") {\n\t\treturn undefined;\n\t}\n\treturn {\n\t\tetiqueta,\n\t\tusado: Math.max(0, cubo.entitlement - cubo.remaining),\n\t\tlimite: cubo.entitlement,\n\t\tseReinicia,\n\t\tunidad: \"peticiones\",\n\t};\n}\n\n/** OAuth guarda el token de GitHub en `refresh`; api_key es un PAT directo. */\nfunction tokenDe(credencial: Credential): string | undefined {\n\tif (credencial.type === \"oauth\") return credencial.refresh || credencial.access;\n\treturn credencial.key;\n}\n\nexport const consultorGithubCopilot: ConsultorCuota = {\n\tid: \"github-copilot\",\n\tsoporta: (credencial) => Boolean(tokenDe(credencial)),\n\tasync consultar({ credencial, fetch: fetchImpl = fetch, señal }) {\n\t\tconst token = tokenDe(credencial);\n\t\tif (!token) return null;\n\n\t\tlet respuesta: Response;\n\t\ttry {\n\t\t\trespuesta = await fetchImpl(ENDPOINT, {\n\t\t\t\theaders: { accept: \"application/json\", authorization: `Bearer ${token}` },\n\t\t\t\tsignal: señal,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tthrow new ErrorConsultaCuota(\"github-copilot\", `no se pudo contactar con GitHub Copilot: ${String(error)}`, {\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t}\n\t\tif (!respuesta.ok) {\n\t\t\tthrow new ErrorConsultaCuota(\n\t\t\t\t\"github-copilot\",\n\t\t\t\t`GitHub Copilot respondió ${respuesta.status} ${respuesta.statusText}`,\n\t\t\t);\n\t\t}\n\n\t\tlet datos: RespuestaCopilot;\n\t\ttry {\n\t\t\tdatos = (await respuesta.json()) as RespuestaCopilot;\n\t\t} catch (error) {\n\t\t\tthrow new ErrorConsultaCuota(\n\t\t\t\t\"github-copilot\",\n\t\t\t\t`la respuesta de GitHub Copilot no es JSON válido: ${String(error)}`,\n\t\t\t\t{ cause: error },\n\t\t\t);\n\t\t}\n\n\t\tconst seReiniciaBruto = datos.quota_reset_date ? Date.parse(datos.quota_reset_date) : Number.NaN;\n\t\tconst seReinicia = Number.isFinite(seReiniciaBruto) ? seReiniciaBruto : null;\n\t\tconst snapshots = datos.quota_snapshots ?? {};\n\t\tconst ventanas = [\n\t\t\taVentana(\"Peticiones premium\", snapshots.premium_interactions, seReinicia),\n\t\t\taVentana(\"Chat\", snapshots.chat, seReinicia),\n\t\t\taVentana(\"Autocompletado\", snapshots.completions, seReinicia),\n\t\t].filter((v): v is VentanaCuota => v !== undefined);\n\t\treturn ventanas.length > 0 ? ventanas : null;\n\t},\n};\n"]}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cuota de GitHub Copilot — `quota_snapshots` en el endpoint interno de
|
|
3
|
+
* cuenta. Un cubo `unlimited: true` (plan Business/Enterprise sin techo de
|
|
4
|
+
* peticiones premium) se descarta a propósito: no tiene "usado/límite" que
|
|
5
|
+
* enseñar, y forzar un 0/0 mentiría sobre haber consultado algo real.
|
|
6
|
+
*/
|
|
7
|
+
import { ErrorConsultaCuota } from "./tipos.js";
|
|
8
|
+
const ENDPOINT = "https://api.github.com/copilot_internal/user";
|
|
9
|
+
function aVentana(etiqueta, cubo, seReinicia) {
|
|
10
|
+
if (!cubo || cubo.unlimited || typeof cubo.entitlement !== "number" || typeof cubo.remaining !== "number") {
|
|
11
|
+
return undefined;
|
|
12
|
+
}
|
|
13
|
+
return {
|
|
14
|
+
etiqueta,
|
|
15
|
+
usado: Math.max(0, cubo.entitlement - cubo.remaining),
|
|
16
|
+
limite: cubo.entitlement,
|
|
17
|
+
seReinicia,
|
|
18
|
+
unidad: "peticiones",
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/** OAuth guarda el token de GitHub en `refresh`; api_key es un PAT directo. */
|
|
22
|
+
function tokenDe(credencial) {
|
|
23
|
+
if (credencial.type === "oauth")
|
|
24
|
+
return credencial.refresh || credencial.access;
|
|
25
|
+
return credencial.key;
|
|
26
|
+
}
|
|
27
|
+
export const consultorGithubCopilot = {
|
|
28
|
+
id: "github-copilot",
|
|
29
|
+
soporta: (credencial) => Boolean(tokenDe(credencial)),
|
|
30
|
+
async consultar({ credencial, fetch: fetchImpl = fetch, señal }) {
|
|
31
|
+
const token = tokenDe(credencial);
|
|
32
|
+
if (!token)
|
|
33
|
+
return null;
|
|
34
|
+
let respuesta;
|
|
35
|
+
try {
|
|
36
|
+
respuesta = await fetchImpl(ENDPOINT, {
|
|
37
|
+
headers: { accept: "application/json", authorization: `Bearer ${token}` },
|
|
38
|
+
signal: señal,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
throw new ErrorConsultaCuota("github-copilot", `no se pudo contactar con GitHub Copilot: ${String(error)}`, {
|
|
43
|
+
cause: error,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
if (!respuesta.ok) {
|
|
47
|
+
throw new ErrorConsultaCuota("github-copilot", `GitHub Copilot respondió ${respuesta.status} ${respuesta.statusText}`);
|
|
48
|
+
}
|
|
49
|
+
let datos;
|
|
50
|
+
try {
|
|
51
|
+
datos = (await respuesta.json());
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
throw new ErrorConsultaCuota("github-copilot", `la respuesta de GitHub Copilot no es JSON válido: ${String(error)}`, { cause: error });
|
|
55
|
+
}
|
|
56
|
+
const seReiniciaBruto = datos.quota_reset_date ? Date.parse(datos.quota_reset_date) : Number.NaN;
|
|
57
|
+
const seReinicia = Number.isFinite(seReiniciaBruto) ? seReiniciaBruto : null;
|
|
58
|
+
const snapshots = datos.quota_snapshots ?? {};
|
|
59
|
+
const ventanas = [
|
|
60
|
+
aVentana("Peticiones premium", snapshots.premium_interactions, seReinicia),
|
|
61
|
+
aVentana("Chat", snapshots.chat, seReinicia),
|
|
62
|
+
aVentana("Autocompletado", snapshots.completions, seReinicia),
|
|
63
|
+
].filter((v) => v !== undefined);
|
|
64
|
+
return ventanas.length > 0 ? ventanas : null;
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
//# sourceMappingURL=github-copilot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-copilot.js","sourceRoot":"","sources":["../../../../src/core/usage/cuota/github-copilot.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Cuota de GitHub Copilot — `quota_snapshots` en el endpoint interno de\n * cuenta. Un cubo `unlimited: true` (plan Business/Enterprise sin techo de\n * peticiones premium) se descarta a propósito: no tiene \"usado/límite\" que\n * enseñar, y forzar un 0/0 mentiría sobre haber consultado algo real.\n */\n\nimport type { Credential } from \"@earendil-works/pi-ai\";\nimport { type ConsultorCuota, ErrorConsultaCuota, type VentanaCuota } from \"./tipos.ts\";\n\nconst ENDPOINT = \"https://api.github.com/copilot_internal/user\";\n\ninterface CuotaBruta {\n\tentitlement?: number;\n\tremaining?: number;\n\tunlimited?: boolean;\n}\n\ninterface RespuestaCopilot {\n\tquota_reset_date?: string;\n\tquota_snapshots?: {\n\t\tchat?: CuotaBruta;\n\t\tcompletions?: CuotaBruta;\n\t\tpremium_interactions?: CuotaBruta;\n\t};\n}\n\nfunction aVentana(etiqueta: string, cubo: CuotaBruta | undefined, seReinicia: number | null): VentanaCuota | undefined {\n\tif (!cubo || cubo.unlimited || typeof cubo.entitlement !== \"number\" || typeof cubo.remaining !== \"number\") {\n\t\treturn undefined;\n\t}\n\treturn {\n\t\tetiqueta,\n\t\tusado: Math.max(0, cubo.entitlement - cubo.remaining),\n\t\tlimite: cubo.entitlement,\n\t\tseReinicia,\n\t\tunidad: \"peticiones\",\n\t};\n}\n\n/** OAuth guarda el token de GitHub en `refresh`; api_key es un PAT directo. */\nfunction tokenDe(credencial: Credential): string | undefined {\n\tif (credencial.type === \"oauth\") return credencial.refresh || credencial.access;\n\treturn credencial.key;\n}\n\nexport const consultorGithubCopilot: ConsultorCuota = {\n\tid: \"github-copilot\",\n\tsoporta: (credencial) => Boolean(tokenDe(credencial)),\n\tasync consultar({ credencial, fetch: fetchImpl = fetch, señal }) {\n\t\tconst token = tokenDe(credencial);\n\t\tif (!token) return null;\n\n\t\tlet respuesta: Response;\n\t\ttry {\n\t\t\trespuesta = await fetchImpl(ENDPOINT, {\n\t\t\t\theaders: { accept: \"application/json\", authorization: `Bearer ${token}` },\n\t\t\t\tsignal: señal,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tthrow new ErrorConsultaCuota(\"github-copilot\", `no se pudo contactar con GitHub Copilot: ${String(error)}`, {\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t}\n\t\tif (!respuesta.ok) {\n\t\t\tthrow new ErrorConsultaCuota(\n\t\t\t\t\"github-copilot\",\n\t\t\t\t`GitHub Copilot respondió ${respuesta.status} ${respuesta.statusText}`,\n\t\t\t);\n\t\t}\n\n\t\tlet datos: RespuestaCopilot;\n\t\ttry {\n\t\t\tdatos = (await respuesta.json()) as RespuestaCopilot;\n\t\t} catch (error) {\n\t\t\tthrow new ErrorConsultaCuota(\n\t\t\t\t\"github-copilot\",\n\t\t\t\t`la respuesta de GitHub Copilot no es JSON válido: ${String(error)}`,\n\t\t\t\t{ cause: error },\n\t\t\t);\n\t\t}\n\n\t\tconst seReiniciaBruto = datos.quota_reset_date ? Date.parse(datos.quota_reset_date) : Number.NaN;\n\t\tconst seReinicia = Number.isFinite(seReiniciaBruto) ? seReiniciaBruto : null;\n\t\tconst snapshots = datos.quota_snapshots ?? {};\n\t\tconst ventanas = [\n\t\t\taVentana(\"Peticiones premium\", snapshots.premium_interactions, seReinicia),\n\t\t\taVentana(\"Chat\", snapshots.chat, seReinicia),\n\t\t\taVentana(\"Autocompletado\", snapshots.completions, seReinicia),\n\t\t].filter((v): v is VentanaCuota => v !== undefined);\n\t\treturn ventanas.length > 0 ? ventanas : null;\n\t},\n};\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cuota de Gemini (Google Code Assist / Antigravity) — dos llamadas: primero
|
|
3
|
+
* `loadCodeAssist` para resolver el proyecto de Cloud, luego
|
|
4
|
+
* `retrieveUserQuota` con ese proyecto. Si la credencial ya trae un
|
|
5
|
+
* `projectId` guardado se usa ese y se ahorra la primera petición.
|
|
6
|
+
*/
|
|
7
|
+
import { type ConsultorCuota } from "./tipos.ts";
|
|
8
|
+
export declare const consultorGoogleGemini: ConsultorCuota;
|
|
9
|
+
//# sourceMappingURL=google-gemini.d.ts.map
|