@hoilab/ada-cli 0.84.21 → 0.85.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +49 -2
- package/README.es.md +174 -0
- package/README.md +203 -658
- package/dist/ada-publico.d.ts +35 -0
- package/dist/ada-publico.d.ts.map +1 -0
- package/dist/ada-publico.js +40 -0
- package/dist/ada-publico.js.map +1 -0
- package/dist/cli/args.d.ts +3 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +11 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/audit-command.d.ts +15 -0
- package/dist/cli/audit-command.d.ts.map +1 -0
- package/dist/cli/audit-command.js +280 -0
- package/dist/cli/audit-command.js.map +1 -0
- package/dist/cli/banco-command.d.ts +15 -0
- package/dist/cli/banco-command.d.ts.map +1 -0
- package/dist/cli/banco-command.js +213 -0
- package/dist/cli/banco-command.js.map +1 -0
- package/dist/cli/cleanse-command.d.ts +11 -0
- package/dist/cli/cleanse-command.d.ts.map +1 -0
- package/dist/cli/cleanse-command.js +101 -0
- package/dist/cli/cleanse-command.js.map +1 -0
- package/dist/cli/commit-command.d.ts +31 -0
- package/dist/cli/commit-command.d.ts.map +1 -0
- package/dist/cli/commit-command.js +158 -0
- package/dist/cli/commit-command.js.map +1 -0
- package/dist/cli/computer-command.d.ts +12 -0
- package/dist/cli/computer-command.d.ts.map +1 -0
- package/dist/cli/computer-command.js +141 -0
- package/dist/cli/computer-command.js.map +1 -0
- package/dist/cli/discover-command.d.ts +18 -0
- package/dist/cli/discover-command.d.ts.map +1 -0
- package/dist/cli/discover-command.js +108 -0
- package/dist/cli/discover-command.js.map +1 -0
- package/dist/cli/file-processor.d.ts.map +1 -1
- package/dist/cli/file-processor.js +2 -1
- package/dist/cli/file-processor.js.map +1 -1
- package/dist/cli/hashline-command.d.ts +11 -0
- package/dist/cli/hashline-command.d.ts.map +1 -0
- package/dist/cli/hashline-command.js +106 -0
- package/dist/cli/hashline-command.js.map +1 -0
- package/dist/cli/home-screen.d.ts.map +1 -1
- package/dist/cli/home-screen.js +2 -2
- package/dist/cli/home-screen.js.map +1 -1
- package/dist/cli/import-command.d.ts +35 -0
- package/dist/cli/import-command.d.ts.map +1 -0
- package/dist/cli/import-command.js +164 -0
- package/dist/cli/import-command.js.map +1 -0
- package/dist/cli/politica-command.d.ts +20 -0
- package/dist/cli/politica-command.d.ts.map +1 -0
- package/dist/cli/politica-command.js +93 -0
- package/dist/cli/politica-command.js.map +1 -0
- package/dist/cli/refine-command.d.ts +18 -0
- package/dist/cli/refine-command.d.ts.map +1 -0
- package/dist/cli/refine-command.js +101 -0
- package/dist/cli/refine-command.js.map +1 -0
- package/dist/cli/review-command.d.ts +24 -0
- package/dist/cli/review-command.d.ts.map +1 -0
- package/dist/cli/review-command.js +168 -0
- package/dist/cli/review-command.js.map +1 -0
- package/dist/cli/schedule-command.d.ts +17 -0
- package/dist/cli/schedule-command.d.ts.map +1 -0
- package/dist/cli/schedule-command.js +117 -0
- package/dist/cli/schedule-command.js.map +1 -0
- package/dist/cli/serve-command.d.ts +72 -0
- package/dist/cli/serve-command.d.ts.map +1 -0
- package/dist/cli/serve-command.js +568 -0
- package/dist/cli/serve-command.js.map +1 -0
- package/dist/cli/startup-ui.d.ts.map +1 -1
- package/dist/cli/startup-ui.js +9 -3
- package/dist/cli/startup-ui.js.map +1 -1
- package/dist/cli/telegram-command.d.ts +18 -0
- package/dist/cli/telegram-command.d.ts.map +1 -0
- package/dist/cli/telegram-command.js +137 -0
- package/dist/cli/telegram-command.js.map +1 -0
- package/dist/cli/telemetria-command.d.ts +22 -0
- package/dist/cli/telemetria-command.d.ts.map +1 -0
- package/dist/cli/telemetria-command.js +127 -0
- package/dist/cli/telemetria-command.js.map +1 -0
- package/dist/cli/undo-command.d.ts +9 -0
- package/dist/cli/undo-command.d.ts.map +1 -0
- package/dist/cli/undo-command.js +56 -0
- package/dist/cli/undo-command.js.map +1 -0
- package/dist/cli/usage-command.d.ts +10 -0
- package/dist/cli/usage-command.d.ts.map +1 -0
- package/dist/cli/usage-command.js +209 -0
- package/dist/cli/usage-command.js.map +1 -0
- package/dist/cli/wiki-command.d.ts +9 -0
- package/dist/cli/wiki-command.d.ts.map +1 -0
- package/dist/cli/wiki-command.js +76 -0
- package/dist/cli/wiki-command.js.map +1 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +10 -11
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +3 -2
- package/dist/config.js.map +1 -1
- package/dist/core/ada.d.ts +58 -0
- package/dist/core/ada.d.ts.map +1 -0
- package/dist/core/ada.js +61 -0
- package/dist/core/ada.js.map +1 -0
- package/dist/core/advisor/guarda.d.ts +66 -0
- package/dist/core/advisor/guarda.d.ts.map +1 -0
- package/dist/core/advisor/guarda.js +191 -0
- package/dist/core/advisor/guarda.js.map +1 -0
- package/dist/core/advisor/runtime.d.ts +66 -0
- package/dist/core/advisor/runtime.d.ts.map +1 -0
- package/dist/core/advisor/runtime.js +121 -0
- package/dist/core/advisor/runtime.js.map +1 -0
- package/dist/core/advisor/sesion.d.ts +109 -0
- package/dist/core/advisor/sesion.d.ts.map +1 -0
- package/dist/core/advisor/sesion.js +139 -0
- package/dist/core/advisor/sesion.js.map +1 -0
- package/dist/core/agent-session.d.ts +85 -7
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +862 -78
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/agents/loader.d.ts +77 -0
- package/dist/core/agents/loader.d.ts.map +1 -0
- package/dist/core/agents/loader.js +154 -0
- package/dist/core/agents/loader.js.map +1 -0
- package/dist/core/aprobacion/generados.d.ts +37 -0
- package/dist/core/aprobacion/generados.d.ts.map +1 -0
- package/dist/core/aprobacion/generados.js +85 -0
- package/dist/core/aprobacion/generados.js.map +1 -0
- package/dist/core/aprobacion/politica-de-maquina.d.ts +90 -0
- package/dist/core/aprobacion/politica-de-maquina.d.ts.map +1 -0
- package/dist/core/aprobacion/politica-de-maquina.js +212 -0
- package/dist/core/aprobacion/politica-de-maquina.js.map +1 -0
- package/dist/core/aprobacion/politica.d.ts +90 -0
- package/dist/core/aprobacion/politica.d.ts.map +1 -0
- package/dist/core/aprobacion/politica.js +375 -0
- package/dist/core/aprobacion/politica.js.map +1 -0
- package/dist/core/arranque/atajos.d.ts +46 -0
- package/dist/core/arranque/atajos.d.ts.map +1 -0
- package/dist/core/arranque/atajos.js +113 -0
- package/dist/core/arranque/atajos.js.map +1 -0
- package/dist/core/audit/exportacion.d.ts +54 -0
- package/dist/core/audit/exportacion.d.ts.map +1 -0
- package/dist/core/audit/exportacion.js +265 -0
- package/dist/core/audit/exportacion.js.map +1 -0
- package/dist/core/audit/libro.d.ts +318 -0
- package/dist/core/audit/libro.d.ts.map +1 -0
- package/dist/core/audit/libro.js +508 -0
- package/dist/core/audit/libro.js.map +1 -0
- package/dist/core/audit/registro-sesion.d.ts +78 -0
- package/dist/core/audit/registro-sesion.d.ts.map +1 -0
- package/dist/core/audit/registro-sesion.js +202 -0
- package/dist/core/audit/registro-sesion.js.map +1 -0
- package/dist/core/audit/retencion.d.ts +82 -0
- package/dist/core/audit/retencion.d.ts.map +1 -0
- package/dist/core/audit/retencion.js +152 -0
- package/dist/core/audit/retencion.js.map +1 -0
- package/dist/core/audit/rutas.d.ts +23 -0
- package/dist/core/audit/rutas.d.ts.map +1 -0
- package/dist/core/audit/rutas.js +23 -0
- package/dist/core/audit/rutas.js.map +1 -0
- package/dist/core/auth-storage.d.ts +0 -3
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +21 -8
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/banco/almacenamiento.d.ts +18 -0
- package/dist/core/banco/almacenamiento.d.ts.map +1 -0
- package/dist/core/banco/almacenamiento.js +50 -0
- package/dist/core/banco/almacenamiento.js.map +1 -0
- package/dist/core/banco/analisis.d.ts +37 -0
- package/dist/core/banco/analisis.d.ts.map +1 -0
- package/dist/core/banco/analisis.js +164 -0
- package/dist/core/banco/analisis.js.map +1 -0
- package/dist/core/banco/bloques.d.ts +39 -0
- package/dist/core/banco/bloques.d.ts.map +1 -0
- package/dist/core/banco/bloques.js +84 -0
- package/dist/core/banco/bloques.js.map +1 -0
- package/dist/core/banco/cargas.d.ts +84 -0
- package/dist/core/banco/cargas.d.ts.map +1 -0
- package/dist/core/banco/cargas.js +520 -0
- package/dist/core/banco/cargas.js.map +1 -0
- package/dist/core/banco/comparar.d.ts +29 -0
- package/dist/core/banco/comparar.d.ts.map +1 -0
- package/dist/core/banco/comparar.js +28 -0
- package/dist/core/banco/comparar.js.map +1 -0
- package/dist/core/banco/ejecutar.d.ts +44 -0
- package/dist/core/banco/ejecutar.d.ts.map +1 -0
- package/dist/core/banco/ejecutar.js +183 -0
- package/dist/core/banco/ejecutar.js.map +1 -0
- package/dist/core/banco/generar.d.ts +24 -0
- package/dist/core/banco/generar.d.ts.map +1 -0
- package/dist/core/banco/generar.js +159 -0
- package/dist/core/banco/generar.js.map +1 -0
- package/dist/core/banco/mutaciones.d.ts +25 -0
- package/dist/core/banco/mutaciones.d.ts.map +1 -0
- package/dist/core/banco/mutaciones.js +215 -0
- package/dist/core/banco/mutaciones.js.map +1 -0
- package/dist/core/banco/tipos.d.ts +121 -0
- package/dist/core/banco/tipos.d.ts.map +1 -0
- package/dist/core/banco/tipos.js +16 -0
- package/dist/core/banco/tipos.js.map +1 -0
- package/dist/core/blobs/almacen.d.ts +81 -0
- package/dist/core/blobs/almacen.d.ts.map +1 -0
- package/dist/core/blobs/almacen.js +198 -0
- package/dist/core/blobs/almacen.js.map +1 -0
- package/dist/core/blobs/broker.d.ts +103 -0
- package/dist/core/blobs/broker.d.ts.map +1 -0
- package/dist/core/blobs/broker.js +204 -0
- package/dist/core/blobs/broker.js.map +1 -0
- package/dist/core/blobs/index.d.ts +70 -0
- package/dist/core/blobs/index.d.ts.map +1 -0
- package/dist/core/blobs/index.js +232 -0
- package/dist/core/blobs/index.js.map +1 -0
- package/dist/core/blobs/payload.d.ts +55 -0
- package/dist/core/blobs/payload.d.ts.map +1 -0
- package/dist/core/blobs/payload.js +255 -0
- package/dist/core/blobs/payload.js.map +1 -0
- package/dist/core/blobs/proveedor.d.ts +85 -0
- package/dist/core/blobs/proveedor.d.ts.map +1 -0
- package/dist/core/blobs/proveedor.js +196 -0
- package/dist/core/blobs/proveedor.js.map +1 -0
- package/dist/core/browser/cdp.d.ts +41 -0
- package/dist/core/browser/cdp.d.ts.map +1 -0
- package/dist/core/browser/cdp.js +119 -0
- package/dist/core/browser/cdp.js.map +1 -0
- package/dist/core/browser/politica.d.ts +51 -0
- package/dist/core/browser/politica.d.ts.map +1 -0
- package/dist/core/browser/politica.js +123 -0
- package/dist/core/browser/politica.js.map +1 -0
- package/dist/core/browser/sesion.d.ts +52 -0
- package/dist/core/browser/sesion.d.ts.map +1 -0
- package/dist/core/browser/sesion.js +176 -0
- package/dist/core/browser/sesion.js.map +1 -0
- package/dist/core/browser/tools.d.ts +16 -0
- package/dist/core/browser/tools.d.ts.map +1 -0
- package/dist/core/browser/tools.js +279 -0
- package/dist/core/browser/tools.js.map +1 -0
- package/dist/core/commit/diff.d.ts +56 -0
- package/dist/core/commit/diff.d.ts.map +1 -0
- package/dist/core/commit/diff.js +145 -0
- package/dist/core/commit/diff.js.map +1 -0
- package/dist/core/commit/mensaje.d.ts +80 -0
- package/dist/core/commit/mensaje.d.ts.map +1 -0
- package/dist/core/commit/mensaje.js +207 -0
- package/dist/core/commit/mensaje.js.map +1 -0
- package/dist/core/compactar/index.d.ts +52 -0
- package/dist/core/compactar/index.d.ts.map +1 -0
- package/dist/core/compactar/index.js +91 -0
- package/dist/core/compactar/index.js.map +1 -0
- package/dist/core/compactar/registro-denso.d.ts +160 -0
- package/dist/core/compactar/registro-denso.d.ts.map +1 -0
- package/dist/core/compactar/registro-denso.js +620 -0
- package/dist/core/compactar/registro-denso.js.map +1 -0
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js +3 -0
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +4 -3
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +41 -32
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/computer/captura.d.ts +35 -0
- package/dist/core/computer/captura.d.ts.map +1 -0
- package/dist/core/computer/captura.js +140 -0
- package/dist/core/computer/captura.js.map +1 -0
- package/dist/core/computer/driver.d.ts +130 -0
- package/dist/core/computer/driver.d.ts.map +1 -0
- package/dist/core/computer/driver.js +206 -0
- package/dist/core/computer/driver.js.map +1 -0
- package/dist/core/computer/motor/actions.d.ts +109 -0
- package/dist/core/computer/motor/actions.d.ts.map +1 -0
- package/dist/core/computer/motor/actions.js +157 -0
- package/dist/core/computer/motor/actions.js.map +1 -0
- package/dist/core/computer/motor/bridge.d.ts +232 -0
- package/dist/core/computer/motor/bridge.d.ts.map +1 -0
- package/dist/core/computer/motor/bridge.js +2335 -0
- package/dist/core/computer/motor/bridge.js.map +1 -0
- package/dist/core/computer/motor/cdp.d.ts +107 -0
- package/dist/core/computer/motor/cdp.d.ts.map +1 -0
- package/dist/core/computer/motor/cdp.js +659 -0
- package/dist/core/computer/motor/cdp.js.map +1 -0
- package/dist/core/computer/motor/config.d.ts +23 -0
- package/dist/core/computer/motor/config.d.ts.map +1 -0
- package/dist/core/computer/motor/config.js +100 -0
- package/dist/core/computer/motor/config.js.map +1 -0
- package/dist/core/computer/motor/contract.d.ts +81 -0
- package/dist/core/computer/motor/contract.d.ts.map +1 -0
- package/dist/core/computer/motor/contract.js +14 -0
- package/dist/core/computer/motor/contract.js.map +1 -0
- package/dist/core/computer/motor/note.d.ts +37 -0
- package/dist/core/computer/motor/note.d.ts.map +1 -0
- package/dist/core/computer/motor/note.js +162 -0
- package/dist/core/computer/motor/note.js.map +1 -0
- package/dist/core/computer/motor/outline.d.ts +155 -0
- package/dist/core/computer/motor/outline.d.ts.map +1 -0
- package/dist/core/computer/motor/outline.js +590 -0
- package/dist/core/computer/motor/outline.js.map +1 -0
- package/dist/core/computer/motor/output.d.ts +18 -0
- package/dist/core/computer/motor/output.d.ts.map +1 -0
- package/dist/core/computer/motor/output.js +148 -0
- package/dist/core/computer/motor/output.js.map +1 -0
- package/dist/core/computer/motor/permissions.d.ts +41 -0
- package/dist/core/computer/motor/permissions.d.ts.map +1 -0
- package/dist/core/computer/motor/permissions.js +51 -0
- package/dist/core/computer/motor/permissions.js.map +1 -0
- package/dist/core/computer/motor/platform/architecture.d.ts +5 -0
- package/dist/core/computer/motor/platform/architecture.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/architecture.js +21 -0
- package/dist/core/computer/motor/platform/architecture.js.map +1 -0
- package/dist/core/computer/motor/platform/coerce.d.ts +4 -0
- package/dist/core/computer/motor/platform/coerce.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/coerce.js +17 -0
- package/dist/core/computer/motor/platform/coerce.js.map +1 -0
- package/dist/core/computer/motor/platform/index.d.ts +4 -0
- package/dist/core/computer/motor/platform/index.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/index.js +79 -0
- package/dist/core/computer/motor/platform/index.js.map +1 -0
- package/dist/core/computer/motor/platform/linux/backend.d.ts +3 -0
- package/dist/core/computer/motor/platform/linux/backend.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/linux/backend.js +173 -0
- package/dist/core/computer/motor/platform/linux/backend.js.map +1 -0
- package/dist/core/computer/motor/platform/linux/helper.d.ts +29 -0
- package/dist/core/computer/motor/platform/linux/helper.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/linux/helper.js +261 -0
- package/dist/core/computer/motor/platform/linux/helper.js.map +1 -0
- package/dist/core/computer/motor/platform/macos/backend.d.ts +3 -0
- package/dist/core/computer/motor/platform/macos/backend.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/macos/backend.js +124 -0
- package/dist/core/computer/motor/platform/macos/backend.js.map +1 -0
- package/dist/core/computer/motor/platform/macos/browser.d.ts +7 -0
- package/dist/core/computer/motor/platform/macos/browser.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/macos/browser.js +101 -0
- package/dist/core/computer/motor/platform/macos/browser.js.map +1 -0
- package/dist/core/computer/motor/platform/macos/helper-path.mjs +34 -0
- package/dist/core/computer/motor/platform/macos/helper.d.ts +32 -0
- package/dist/core/computer/motor/platform/macos/helper.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/macos/helper.js +277 -0
- package/dist/core/computer/motor/platform/macos/helper.js.map +1 -0
- package/dist/core/computer/motor/platform/macos/permissions.d.ts +4 -0
- package/dist/core/computer/motor/platform/macos/permissions.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/macos/permissions.js +118 -0
- package/dist/core/computer/motor/platform/macos/permissions.js.map +1 -0
- package/dist/core/computer/motor/platform/types.d.ts +263 -0
- package/dist/core/computer/motor/platform/types.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/types.js +2 -0
- package/dist/core/computer/motor/platform/types.js.map +1 -0
- package/dist/core/computer/motor/platform/windows/backend.d.ts +3 -0
- package/dist/core/computer/motor/platform/windows/backend.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/windows/backend.js +163 -0
- package/dist/core/computer/motor/platform/windows/backend.js.map +1 -0
- package/dist/core/computer/motor/platform/windows/helper.d.ts +18 -0
- package/dist/core/computer/motor/platform/windows/helper.d.ts.map +1 -0
- package/dist/core/computer/motor/platform/windows/helper.js +174 -0
- package/dist/core/computer/motor/platform/windows/helper.js.map +1 -0
- package/dist/core/computer/motor/root-selection.d.ts +6 -0
- package/dist/core/computer/motor/root-selection.d.ts.map +1 -0
- package/dist/core/computer/motor/root-selection.js +28 -0
- package/dist/core/computer/motor/root-selection.js.map +1 -0
- package/dist/core/computer/motor/runtime.d.ts +50 -0
- package/dist/core/computer/motor/runtime.d.ts.map +1 -0
- package/dist/core/computer/motor/runtime.js +119 -0
- package/dist/core/computer/motor/runtime.js.map +1 -0
- package/dist/core/computer/motor/state.d.ts +68 -0
- package/dist/core/computer/motor/state.d.ts.map +1 -0
- package/dist/core/computer/motor/state.js +100 -0
- package/dist/core/computer/motor/state.js.map +1 -0
- package/dist/core/computer/motor/view.d.ts +6 -0
- package/dist/core/computer/motor/view.d.ts.map +1 -0
- package/dist/core/computer/motor/view.js +185 -0
- package/dist/core/computer/motor/view.js.map +1 -0
- package/dist/core/computer/motor-ada.d.ts +159 -0
- package/dist/core/computer/motor-ada.d.ts.map +1 -0
- package/dist/core/computer/motor-ada.js +412 -0
- package/dist/core/computer/motor-ada.js.map +1 -0
- package/dist/core/computer/politica.d.ts +56 -0
- package/dist/core/computer/politica.d.ts.map +1 -0
- package/dist/core/computer/politica.js +163 -0
- package/dist/core/computer/politica.js.map +1 -0
- package/dist/core/computer/tools.d.ts +26 -0
- package/dist/core/computer/tools.d.ts.map +1 -0
- package/dist/core/computer/tools.js +399 -0
- package/dist/core/computer/tools.js.map +1 -0
- package/dist/core/context-breakdown.d.ts +80 -0
- package/dist/core/context-breakdown.d.ts.map +1 -0
- package/dist/core/context-breakdown.js +87 -0
- package/dist/core/context-breakdown.js.map +1 -0
- package/dist/core/credenciales/cliente.d.ts +60 -0
- package/dist/core/credenciales/cliente.d.ts.map +1 -0
- package/dist/core/credenciales/cliente.js +81 -0
- package/dist/core/credenciales/cliente.js.map +1 -0
- package/dist/core/credenciales/pool.d.ts +96 -0
- package/dist/core/credenciales/pool.d.ts.map +1 -0
- package/dist/core/credenciales/pool.js +128 -0
- package/dist/core/credenciales/pool.js.map +1 -0
- package/dist/core/credenciales/reposo.d.ts +93 -0
- package/dist/core/credenciales/reposo.d.ts.map +1 -0
- package/dist/core/credenciales/reposo.js +489 -0
- package/dist/core/credenciales/reposo.js.map +1 -0
- package/dist/core/credenciales/servidor.d.ts +55 -0
- package/dist/core/credenciales/servidor.d.ts.map +1 -0
- package/dist/core/credenciales/servidor.js +205 -0
- package/dist/core/credenciales/servidor.js.map +1 -0
- package/dist/core/defaults.d.ts +1 -0
- package/dist/core/defaults.d.ts.map +1 -1
- package/dist/core/defaults.js +9 -0
- package/dist/core/defaults.js.map +1 -1
- package/dist/core/descubrimiento/comandos.d.ts +30 -0
- package/dist/core/descubrimiento/comandos.d.ts.map +1 -0
- package/dist/core/descubrimiento/comandos.js +76 -0
- package/dist/core/descubrimiento/comandos.js.map +1 -0
- package/dist/core/descubrimiento/mcp.d.ts +42 -0
- package/dist/core/descubrimiento/mcp.d.ts.map +1 -0
- package/dist/core/descubrimiento/mcp.js +130 -0
- package/dist/core/descubrimiento/mcp.js.map +1 -0
- package/dist/core/descubrimiento/reglas.d.ts +61 -0
- package/dist/core/descubrimiento/reglas.d.ts.map +1 -0
- package/dist/core/descubrimiento/reglas.js +134 -0
- package/dist/core/descubrimiento/reglas.js.map +1 -0
- package/dist/core/descubrimiento/skills.d.ts +57 -0
- package/dist/core/descubrimiento/skills.d.ts.map +1 -0
- package/dist/core/descubrimiento/skills.js +113 -0
- package/dist/core/descubrimiento/skills.js.map +1 -0
- package/dist/core/dificultad/clasificador.d.ts +133 -0
- package/dist/core/dificultad/clasificador.d.ts.map +1 -0
- package/dist/core/dificultad/clasificador.js +288 -0
- package/dist/core/dificultad/clasificador.js.map +1 -0
- package/dist/core/edicion/diario.d.ts +37 -0
- package/dist/core/edicion/diario.d.ts.map +1 -0
- package/dist/core/edicion/diario.js +51 -0
- package/dist/core/edicion/diario.js.map +1 -0
- package/dist/core/edicion/hashline.d.ts +71 -0
- package/dist/core/edicion/hashline.d.ts.map +1 -0
- package/dist/core/edicion/hashline.js +111 -0
- package/dist/core/edicion/hashline.js.map +1 -0
- package/dist/core/edicion/hueco.d.ts +64 -0
- package/dist/core/edicion/hueco.d.ts.map +1 -0
- package/dist/core/edicion/hueco.js +162 -0
- package/dist/core/edicion/hueco.js.map +1 -0
- package/dist/core/edicion/limpiar-carga.d.ts +39 -0
- package/dist/core/edicion/limpiar-carga.d.ts.map +1 -0
- package/dist/core/edicion/limpiar-carga.js +121 -0
- package/dist/core/edicion/limpiar-carga.js.map +1 -0
- package/dist/core/edicion/observador.d.ts +80 -0
- package/dist/core/edicion/observador.d.ts.map +1 -0
- package/dist/core/edicion/observador.js +183 -0
- package/dist/core/edicion/observador.js.map +1 -0
- package/dist/core/edicion/parecido.d.ts +53 -0
- package/dist/core/edicion/parecido.d.ts.map +1 -0
- package/dist/core/edicion/parecido.js +145 -0
- package/dist/core/edicion/parecido.js.map +1 -0
- package/dist/core/edicion/parseo.d.ts +58 -0
- package/dist/core/edicion/parseo.d.ts.map +1 -0
- package/dist/core/edicion/parseo.js +124 -0
- package/dist/core/edicion/parseo.js.map +1 -0
- package/dist/core/edicion/reparacion.d.ts +67 -0
- package/dist/core/edicion/reparacion.d.ts.map +1 -0
- package/dist/core/edicion/reparacion.js +202 -0
- package/dist/core/edicion/reparacion.js.map +1 -0
- package/dist/core/edicion/sangria.d.ts +121 -0
- package/dist/core/edicion/sangria.d.ts.map +1 -0
- package/dist/core/edicion/sangria.js +341 -0
- package/dist/core/edicion/sangria.js.map +1 -0
- package/dist/core/edicion/tipos.d.ts +58 -0
- package/dist/core/edicion/tipos.d.ts.map +1 -0
- package/dist/core/edicion/tipos.js +160 -0
- package/dist/core/edicion/tipos.js.map +1 -0
- package/dist/core/engine-personality.d.ts +12 -0
- package/dist/core/engine-personality.d.ts.map +1 -0
- package/dist/core/engine-personality.js +53 -0
- package/dist/core/engine-personality.js.map +1 -0
- package/dist/core/errores/proveedor.d.ts +53 -0
- package/dist/core/errores/proveedor.d.ts.map +1 -0
- package/dist/core/errores/proveedor.js +191 -0
- package/dist/core/errores/proveedor.js.map +1 -0
- package/dist/core/estructural/buscar.d.ts +61 -0
- package/dist/core/estructural/buscar.d.ts.map +1 -0
- package/dist/core/estructural/buscar.js +261 -0
- package/dist/core/estructural/buscar.js.map +1 -0
- package/dist/core/estructural/editar.d.ts +36 -0
- package/dist/core/estructural/editar.d.ts.map +1 -0
- package/dist/core/estructural/editar.js +123 -0
- package/dist/core/estructural/editar.js.map +1 -0
- package/dist/core/estructural/tools.d.ts +11 -0
- package/dist/core/estructural/tools.d.ts.map +1 -0
- package/dist/core/estructural/tools.js +100 -0
- package/dist/core/estructural/tools.js.map +1 -0
- package/dist/core/experimental.d.ts.map +1 -1
- package/dist/core/experimental.js +10 -1
- package/dist/core/experimental.js.map +1 -1
- package/dist/core/extensiones/suplantacion.d.ts +49 -0
- package/dist/core/extensiones/suplantacion.d.ts.map +1 -0
- package/dist/core/extensiones/suplantacion.js +61 -0
- package/dist/core/extensiones/suplantacion.js.map +1 -0
- package/dist/core/extensiones/vigilancia.d.ts +54 -0
- package/dist/core/extensiones/vigilancia.d.ts.map +1 -0
- package/dist/core/extensiones/vigilancia.js +217 -0
- package/dist/core/extensiones/vigilancia.js.map +1 -0
- package/dist/core/extensions/index.d.ts +1 -1
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +21 -6
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/types.d.ts +23 -4
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/harness/fuentes-de-contexto.d.ts +29 -0
- package/dist/core/harness/fuentes-de-contexto.d.ts.map +1 -0
- package/dist/core/harness/fuentes-de-contexto.js +44 -0
- package/dist/core/harness/fuentes-de-contexto.js.map +1 -0
- package/dist/core/harness/refine.d.ts +40 -0
- package/dist/core/harness/refine.d.ts.map +1 -0
- package/dist/core/harness/refine.js +109 -0
- package/dist/core/harness/refine.js.map +1 -0
- package/dist/core/harness/store.d.ts +75 -0
- package/dist/core/harness/store.d.ts.map +1 -0
- package/dist/core/harness/store.js +149 -0
- package/dist/core/harness/store.js.map +1 -0
- package/dist/core/hooks/contract.d.ts +85 -0
- package/dist/core/hooks/contract.d.ts.map +1 -0
- package/dist/core/hooks/contract.js +140 -0
- package/dist/core/hooks/contract.js.map +1 -0
- package/dist/core/hooks/runner.d.ts +42 -0
- package/dist/core/hooks/runner.d.ts.map +1 -0
- package/dist/core/hooks/runner.js +85 -0
- package/dist/core/hooks/runner.js.map +1 -0
- package/dist/core/hooks/session-hooks.d.ts +62 -0
- package/dist/core/hooks/session-hooks.d.ts.map +1 -0
- package/dist/core/hooks/session-hooks.js +84 -0
- package/dist/core/hooks/session-hooks.js.map +1 -0
- package/dist/core/importar/formatos.d.ts +69 -0
- package/dist/core/importar/formatos.d.ts.map +1 -0
- package/dist/core/importar/formatos.js +235 -0
- package/dist/core/importar/formatos.js.map +1 -0
- package/dist/core/interactivo/deteccion.d.ts +44 -0
- package/dist/core/interactivo/deteccion.d.ts.map +1 -0
- package/dist/core/interactivo/deteccion.js +82 -0
- package/dist/core/interactivo/deteccion.js.map +1 -0
- package/dist/core/interactivo/sesion.d.ts +50 -0
- package/dist/core/interactivo/sesion.d.ts.map +1 -0
- package/dist/core/interactivo/sesion.js +156 -0
- package/dist/core/interactivo/sesion.js.map +1 -0
- package/dist/core/interactivo/tools.d.ts +21 -0
- package/dist/core/interactivo/tools.d.ts.map +1 -0
- package/dist/core/interactivo/tools.js +122 -0
- package/dist/core/interactivo/tools.js.map +1 -0
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +2 -1
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/lectura/mapa.d.ts +70 -0
- package/dist/core/lectura/mapa.d.ts.map +1 -0
- package/dist/core/lectura/mapa.js +177 -0
- package/dist/core/lectura/mapa.js.map +1 -0
- package/dist/core/lectura/pdf.d.ts +49 -0
- package/dist/core/lectura/pdf.d.ts.map +1 -0
- package/dist/core/lectura/pdf.js +337 -0
- package/dist/core/lectura/pdf.js.map +1 -0
- package/dist/core/limpieza/comprobadores.d.ts +28 -0
- package/dist/core/limpieza/comprobadores.d.ts.map +1 -0
- package/dist/core/limpieza/comprobadores.js +311 -0
- package/dist/core/limpieza/comprobadores.js.map +1 -0
- package/dist/core/limpieza/parseo.d.ts +19 -0
- package/dist/core/limpieza/parseo.d.ts.map +1 -0
- package/dist/core/limpieza/parseo.js +124 -0
- package/dist/core/limpieza/parseo.js.map +1 -0
- package/dist/core/limpieza/reparacion.d.ts +77 -0
- package/dist/core/limpieza/reparacion.d.ts.map +1 -0
- package/dist/core/limpieza/reparacion.js +254 -0
- package/dist/core/limpieza/reparacion.js.map +1 -0
- package/dist/core/limpieza/tipos.d.ts +56 -0
- package/dist/core/limpieza/tipos.d.ts.map +1 -0
- package/dist/core/limpieza/tipos.js +9 -0
- package/dist/core/limpieza/tipos.js.map +1 -0
- package/dist/core/lsp/cliente.d.ts +52 -0
- package/dist/core/lsp/cliente.d.ts.map +1 -0
- package/dist/core/lsp/cliente.js +232 -0
- package/dist/core/lsp/cliente.js.map +1 -0
- package/dist/core/lsp/descubrimiento.d.ts +62 -0
- package/dist/core/lsp/descubrimiento.d.ts.map +1 -0
- package/dist/core/lsp/descubrimiento.js +152 -0
- package/dist/core/lsp/descubrimiento.js.map +1 -0
- package/dist/core/lsp/ediciones.d.ts +59 -0
- package/dist/core/lsp/ediciones.d.ts.map +1 -0
- package/dist/core/lsp/ediciones.js +89 -0
- package/dist/core/lsp/ediciones.js.map +1 -0
- package/dist/core/lsp/extension.d.ts +28 -0
- package/dist/core/lsp/extension.d.ts.map +1 -0
- package/dist/core/lsp/extension.js +34 -0
- package/dist/core/lsp/extension.js.map +1 -0
- package/dist/core/lsp/tools.d.ts +45 -0
- package/dist/core/lsp/tools.d.ts.map +1 -0
- package/dist/core/lsp/tools.js +265 -0
- package/dist/core/lsp/tools.js.map +1 -0
- package/dist/core/mcp/client.d.ts +60 -0
- package/dist/core/mcp/client.d.ts.map +1 -0
- package/dist/core/mcp/client.js +139 -0
- package/dist/core/mcp/client.js.map +1 -0
- package/dist/core/mcp/manager.d.ts +86 -0
- package/dist/core/mcp/manager.d.ts.map +1 -0
- package/dist/core/mcp/manager.js +124 -0
- package/dist/core/mcp/manager.js.map +1 -0
- package/dist/core/mcp/tools.d.ts +15 -0
- package/dist/core/mcp/tools.d.ts.map +1 -0
- package/dist/core/mcp/tools.js +84 -0
- package/dist/core/mcp/tools.js.map +1 -0
- package/dist/core/memory-engine/audit-export.d.ts +56 -0
- package/dist/core/memory-engine/audit-export.d.ts.map +1 -0
- package/dist/core/memory-engine/audit-export.js +100 -0
- package/dist/core/memory-engine/audit-export.js.map +1 -0
- package/dist/core/memory-engine/audit-indice.d.ts +153 -0
- package/dist/core/memory-engine/audit-indice.d.ts.map +1 -0
- package/dist/core/memory-engine/audit-indice.js +271 -0
- package/dist/core/memory-engine/audit-indice.js.map +1 -0
- package/dist/core/memory-engine/audit.d.ts +18 -6
- package/dist/core/memory-engine/audit.d.ts.map +1 -1
- package/dist/core/memory-engine/audit.js +32 -50
- package/dist/core/memory-engine/audit.js.map +1 -1
- package/dist/core/memory-engine/engine.d.ts +21 -4
- package/dist/core/memory-engine/engine.d.ts.map +1 -1
- package/dist/core/memory-engine/engine.js +219 -55
- package/dist/core/memory-engine/engine.js.map +1 -1
- package/dist/core/memory-engine/inverted-index.d.ts.map +1 -1
- package/dist/core/memory-engine/inverted-index.js +67 -10
- package/dist/core/memory-engine/inverted-index.js.map +1 -1
- package/dist/core/memory-engine/keychain.d.ts.map +1 -1
- package/dist/core/memory-engine/keychain.js +1 -6
- package/dist/core/memory-engine/keychain.js.map +1 -1
- package/dist/core/memory-engine/observation-store.d.ts +0 -1
- package/dist/core/memory-engine/observation-store.d.ts.map +1 -1
- package/dist/core/memory-engine/observation-store.js +40 -12
- package/dist/core/memory-engine/observation-store.js.map +1 -1
- package/dist/core/memory-engine/refinements.d.ts +51 -0
- package/dist/core/memory-engine/refinements.d.ts.map +1 -0
- package/dist/core/memory-engine/refinements.js +99 -0
- package/dist/core/memory-engine/refinements.js.map +1 -0
- package/dist/core/memory-engine/scanner.d.ts.map +1 -1
- package/dist/core/memory-engine/scanner.js +25 -5
- package/dist/core/memory-engine/scanner.js.map +1 -1
- package/dist/core/memory-engine/security.d.ts.map +1 -1
- package/dist/core/memory-engine/security.js +131 -23
- package/dist/core/memory-engine/security.js.map +1 -1
- package/dist/core/memory-engine/session-indexer.d.ts.map +1 -1
- package/dist/core/memory-engine/session-indexer.js +8 -2
- package/dist/core/memory-engine/session-indexer.js.map +1 -1
- package/dist/core/memory-engine/tools.d.ts +2 -2
- package/dist/core/memory-engine/tools.d.ts.map +1 -1
- package/dist/core/memory-engine/tools.js +41 -8
- package/dist/core/memory-engine/tools.js.map +1 -1
- package/dist/core/memory-engine/types.d.ts +2 -0
- package/dist/core/memory-engine/types.d.ts.map +1 -1
- package/dist/core/memory-engine/types.js.map +1 -1
- package/dist/core/memory-engine/vault.d.ts.map +1 -1
- package/dist/core/memory-engine/vault.js +2 -2
- package/dist/core/memory-engine/vault.js.map +1 -1
- package/dist/core/model-config.d.ts.map +1 -1
- package/dist/core/model-config.js +2 -1
- package/dist/core/model-config.js.map +1 -1
- package/dist/core/model-resolver.d.ts +1 -0
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +19 -7
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/models-store.d.ts.map +1 -1
- package/dist/core/models-store.js +2 -1
- package/dist/core/models-store.js.map +1 -1
- package/dist/core/muestreo-restringido.d.ts +49 -0
- package/dist/core/muestreo-restringido.d.ts.map +1 -0
- package/dist/core/muestreo-restringido.js +65 -0
- package/dist/core/muestreo-restringido.js.map +1 -0
- package/dist/core/orphan-process-journal.d.ts +48 -0
- package/dist/core/orphan-process-journal.d.ts.map +1 -0
- package/dist/core/orphan-process-journal.js +116 -0
- package/dist/core/orphan-process-journal.js.map +1 -0
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +11 -6
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/pi-manifest.d.ts.map +1 -1
- package/dist/core/pi-manifest.js +2 -1
- package/dist/core/pi-manifest.js.map +1 -1
- package/dist/core/privacidad/categorias-especiales.d.ts +186 -0
- package/dist/core/privacidad/categorias-especiales.d.ts.map +1 -0
- package/dist/core/privacidad/categorias-especiales.js +745 -0
- package/dist/core/privacidad/categorias-especiales.js.map +1 -0
- package/dist/core/privacidad/tapar.d.ts +48 -0
- package/dist/core/privacidad/tapar.d.ts.map +1 -0
- package/dist/core/privacidad/tapar.js +66 -0
- package/dist/core/privacidad/tapar.js.map +1 -0
- package/dist/core/prompt-cache/diagnostics.d.ts +33 -0
- package/dist/core/prompt-cache/diagnostics.d.ts.map +1 -0
- package/dist/core/prompt-cache/diagnostics.js +100 -0
- package/dist/core/prompt-cache/diagnostics.js.map +1 -0
- package/dist/core/prompt-cache/index.d.ts +33 -0
- package/dist/core/prompt-cache/index.d.ts.map +1 -0
- package/dist/core/prompt-cache/index.js +189 -0
- package/dist/core/prompt-cache/index.js.map +1 -0
- package/dist/core/prompt-cache/payload.d.ts +58 -0
- package/dist/core/prompt-cache/payload.d.ts.map +1 -0
- package/dist/core/prompt-cache/payload.js +122 -0
- package/dist/core/prompt-cache/payload.js.map +1 -0
- package/dist/core/prompt-cache/stabilize.d.ts +65 -0
- package/dist/core/prompt-cache/stabilize.d.ts.map +1 -0
- package/dist/core/prompt-cache/stabilize.js +137 -0
- package/dist/core/prompt-cache/stabilize.js.map +1 -0
- package/dist/core/prompt-cache/stats.d.ts +55 -0
- package/dist/core/prompt-cache/stats.d.ts.map +1 -0
- package/dist/core/prompt-cache/stats.js +158 -0
- package/dist/core/prompt-cache/stats.js.map +1 -0
- package/dist/core/prompt-eleccion.d.ts +38 -0
- package/dist/core/prompt-eleccion.d.ts.map +1 -0
- package/dist/core/prompt-eleccion.js +46 -0
- package/dist/core/prompt-eleccion.js.map +1 -0
- package/dist/core/prompt-optimizer.d.ts +53 -0
- package/dist/core/prompt-optimizer.d.ts.map +1 -0
- package/dist/core/prompt-optimizer.js +138 -0
- package/dist/core/prompt-optimizer.js.map +1 -0
- package/dist/core/prompts/montar.d.ts +75 -0
- package/dist/core/prompts/montar.d.ts.map +1 -0
- package/dist/core/prompts/montar.js +146 -0
- package/dist/core/prompts/montar.js.map +1 -0
- package/dist/core/prompts/plantilla.d.ts +54 -0
- package/dist/core/prompts/plantilla.d.ts.map +1 -0
- package/dist/core/prompts/plantilla.js +153 -0
- package/dist/core/prompts/plantilla.js.map +1 -0
- package/dist/core/prompts/sistema.md +134 -0
- package/dist/core/provider-attribution.d.ts +24 -2
- package/dist/core/provider-attribution.d.ts.map +1 -1
- package/dist/core/provider-attribution.js +24 -42
- package/dist/core/provider-attribution.js.map +1 -1
- package/dist/core/remote-catalog-provider.d.ts.map +1 -1
- package/dist/core/remote-catalog-provider.js +2 -1
- package/dist/core/remote-catalog-provider.js.map +1 -1
- package/dist/core/remoto/destino.d.ts +38 -0
- package/dist/core/remoto/destino.d.ts.map +1 -0
- package/dist/core/remoto/destino.js +105 -0
- package/dist/core/remoto/destino.js.map +1 -0
- package/dist/core/remoto/ejecutor.d.ts +59 -0
- package/dist/core/remoto/ejecutor.d.ts.map +1 -0
- package/dist/core/remoto/ejecutor.js +225 -0
- package/dist/core/remoto/ejecutor.js.map +1 -0
- package/dist/core/remoto/ficheros.d.ts +29 -0
- package/dist/core/remoto/ficheros.d.ts.map +1 -0
- package/dist/core/remoto/ficheros.js +90 -0
- package/dist/core/remoto/ficheros.js.map +1 -0
- package/dist/core/remoto/registro-extension.d.ts +15 -0
- package/dist/core/remoto/registro-extension.d.ts.map +1 -0
- package/dist/core/remoto/registro-extension.js +17 -0
- package/dist/core/remoto/registro-extension.js.map +1 -0
- package/dist/core/remoto/tools.d.ts +28 -0
- package/dist/core/remoto/tools.d.ts.map +1 -0
- package/dist/core/remoto/tools.js +31 -0
- package/dist/core/remoto/tools.js.map +1 -0
- package/dist/core/resource-loader.d.ts +58 -0
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +326 -8
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/revision/hallazgo.d.ts +51 -0
- package/dist/core/revision/hallazgo.d.ts.map +1 -0
- package/dist/core/revision/hallazgo.js +73 -0
- package/dist/core/revision/hallazgo.js.map +1 -0
- package/dist/core/revision/revisor.d.ts +81 -0
- package/dist/core/revision/revisor.d.ts.map +1 -0
- package/dist/core/revision/revisor.js +132 -0
- package/dist/core/revision/revisor.js.map +1 -0
- package/dist/core/revision/sarif.d.ts +30 -0
- package/dist/core/revision/sarif.d.ts.map +1 -0
- package/dist/core/revision/sarif.js +83 -0
- package/dist/core/revision/sarif.js.map +1 -0
- package/dist/core/scheduler/scheduler.d.ts +87 -0
- package/dist/core/scheduler/scheduler.d.ts.map +1 -0
- package/dist/core/scheduler/scheduler.js +178 -0
- package/dist/core/scheduler/scheduler.js.map +1 -0
- package/dist/core/sdk.d.ts +8 -0
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +11 -1
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts +49 -0
- package/dist/core/sesion/cerrar-llamadas-abiertas.d.ts.map +1 -0
- package/dist/core/sesion/cerrar-llamadas-abiertas.js +77 -0
- package/dist/core/sesion/cerrar-llamadas-abiertas.js.map +1 -0
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +2 -1
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-diagnostics.d.ts +9 -0
- package/dist/core/settings-diagnostics.d.ts.map +1 -0
- package/dist/core/settings-diagnostics.js +21 -0
- package/dist/core/settings-diagnostics.js.map +1 -0
- package/dist/core/settings-manager.d.ts +156 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +255 -10
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +51 -33
- package/dist/core/skills.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +2 -1
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/system-prompt.d.ts +17 -0
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +13 -5
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/telemetria/otlp.d.ts +122 -0
- package/dist/core/telemetria/otlp.d.ts.map +1 -0
- package/dist/core/telemetria/otlp.js +373 -0
- package/dist/core/telemetria/otlp.js.map +1 -0
- package/dist/core/tools/coercion-argumentos.d.ts +48 -0
- package/dist/core/tools/coercion-argumentos.d.ts.map +1 -0
- package/dist/core/tools/coercion-argumentos.js +99 -0
- package/dist/core/tools/coercion-argumentos.js.map +1 -0
- package/dist/core/tools/edit-diff.d.ts +0 -12
- package/dist/core/tools/edit-diff.d.ts.map +1 -1
- package/dist/core/tools/edit-diff.js +234 -12
- package/dist/core/tools/edit-diff.js.map +1 -1
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +28 -5
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
- package/dist/core/tools/file-mutation-queue.js +5 -0
- package/dist/core/tools/file-mutation-queue.js.map +1 -1
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +2 -2
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/json-tolerante.d.ts +30 -0
- package/dist/core/tools/json-tolerante.d.ts.map +1 -0
- package/dist/core/tools/json-tolerante.js +70 -0
- package/dist/core/tools/json-tolerante.js.map +1 -0
- package/dist/core/tools/project-memory-tool.d.ts.map +1 -1
- package/dist/core/tools/project-memory-tool.js +4 -1
- package/dist/core/tools/project-memory-tool.js.map +1 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +17 -0
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts +14 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.js +17 -1
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
- package/dist/core/trust-manager.d.ts.map +1 -1
- package/dist/core/trust-manager.js +2 -1
- package/dist/core/trust-manager.js.map +1 -1
- package/dist/core/turno-vacio/detectar.d.ts +38 -0
- package/dist/core/turno-vacio/detectar.d.ts.map +1 -0
- package/dist/core/turno-vacio/detectar.js +66 -0
- package/dist/core/turno-vacio/detectar.js.map +1 -0
- package/dist/core/undo/journal.d.ts +57 -0
- package/dist/core/undo/journal.d.ts.map +1 -0
- package/dist/core/undo/journal.js +178 -0
- package/dist/core/undo/journal.js.map +1 -0
- package/dist/core/urls-internas/auditoria.d.ts +10 -0
- package/dist/core/urls-internas/auditoria.d.ts.map +1 -0
- package/dist/core/urls-internas/auditoria.js +42 -0
- package/dist/core/urls-internas/auditoria.js.map +1 -0
- package/dist/core/urls-internas/boveda.d.ts +13 -0
- package/dist/core/urls-internas/boveda.d.ts.map +1 -0
- package/dist/core/urls-internas/boveda.js +40 -0
- package/dist/core/urls-internas/boveda.js.map +1 -0
- package/dist/core/urls-internas/lector.d.ts +30 -0
- package/dist/core/urls-internas/lector.d.ts.map +1 -0
- package/dist/core/urls-internas/lector.js +56 -0
- package/dist/core/urls-internas/lector.js.map +1 -0
- package/dist/core/urls-internas/memoria.d.ts +11 -0
- package/dist/core/urls-internas/memoria.d.ts.map +1 -0
- package/dist/core/urls-internas/memoria.js +25 -0
- package/dist/core/urls-internas/memoria.js.map +1 -0
- package/dist/core/urls-internas/parse.d.ts +28 -0
- package/dist/core/urls-internas/parse.d.ts.map +1 -0
- package/dist/core/urls-internas/parse.js +32 -0
- package/dist/core/urls-internas/parse.js.map +1 -0
- package/dist/core/urls-internas/reglas.d.ts +10 -0
- package/dist/core/urls-internas/reglas.d.ts.map +1 -0
- package/dist/core/urls-internas/reglas.js +31 -0
- package/dist/core/urls-internas/reglas.js.map +1 -0
- package/dist/core/usage/aggregate.d.ts +68 -0
- package/dist/core/usage/aggregate.d.ts.map +1 -0
- package/dist/core/usage/aggregate.js +93 -0
- package/dist/core/usage/aggregate.js.map +1 -0
- package/dist/core/usage/cuota/anthropic.d.ts +10 -0
- package/dist/core/usage/cuota/anthropic.d.ts.map +1 -0
- package/dist/core/usage/cuota/anthropic.js +63 -0
- package/dist/core/usage/cuota/anthropic.js.map +1 -0
- package/dist/core/usage/cuota/cache.d.ts +20 -0
- package/dist/core/usage/cuota/cache.d.ts.map +1 -0
- package/dist/core/usage/cuota/cache.js +36 -0
- package/dist/core/usage/cuota/cache.js.map +1 -0
- package/dist/core/usage/cuota/github-copilot.d.ts +9 -0
- package/dist/core/usage/cuota/github-copilot.d.ts.map +1 -0
- package/dist/core/usage/cuota/github-copilot.js +67 -0
- package/dist/core/usage/cuota/github-copilot.js.map +1 -0
- package/dist/core/usage/cuota/google-gemini.d.ts +9 -0
- package/dist/core/usage/cuota/google-gemini.d.ts.map +1 -0
- package/dist/core/usage/cuota/google-gemini.js +72 -0
- package/dist/core/usage/cuota/google-gemini.js.map +1 -0
- package/dist/core/usage/cuota/index.d.ts +25 -0
- package/dist/core/usage/cuota/index.d.ts.map +1 -0
- package/dist/core/usage/cuota/index.js +50 -0
- package/dist/core/usage/cuota/index.js.map +1 -0
- package/dist/core/usage/cuota/openai-codex.d.ts +9 -0
- package/dist/core/usage/cuota/openai-codex.d.ts.map +1 -0
- package/dist/core/usage/cuota/openai-codex.js +59 -0
- package/dist/core/usage/cuota/openai-codex.js.map +1 -0
- package/dist/core/usage/cuota/openrouter.d.ts +10 -0
- package/dist/core/usage/cuota/openrouter.d.ts.map +1 -0
- package/dist/core/usage/cuota/openrouter.js +47 -0
- package/dist/core/usage/cuota/openrouter.js.map +1 -0
- package/dist/core/usage/cuota/tipos.d.ts +50 -0
- package/dist/core/usage/cuota/tipos.d.ts.map +1 -0
- package/dist/core/usage/cuota/tipos.js +25 -0
- package/dist/core/usage/cuota/tipos.js.map +1 -0
- package/dist/core/web/busqueda-nativa.d.ts +82 -0
- package/dist/core/web/busqueda-nativa.d.ts.map +1 -0
- package/dist/core/web/busqueda-nativa.js +163 -0
- package/dist/core/web/busqueda-nativa.js.map +1 -0
- package/dist/core/web/destino.d.ts +58 -0
- package/dist/core/web/destino.d.ts.map +1 -0
- package/dist/core/web/destino.js +127 -0
- package/dist/core/web/destino.js.map +1 -0
- package/dist/core/web/proveedores/brave.d.ts +6 -0
- package/dist/core/web/proveedores/brave.d.ts.map +1 -0
- package/dist/core/web/proveedores/brave.js +20 -0
- package/dist/core/web/proveedores/brave.js.map +1 -0
- package/dist/core/web/proveedores/claves.d.ts +19 -0
- package/dist/core/web/proveedores/claves.d.ts.map +1 -0
- package/dist/core/web/proveedores/claves.js +36 -0
- package/dist/core/web/proveedores/claves.js.map +1 -0
- package/dist/core/web/proveedores/duckduckgo.d.ts +3 -0
- package/dist/core/web/proveedores/duckduckgo.d.ts.map +1 -0
- package/dist/core/web/proveedores/duckduckgo.js +109 -0
- package/dist/core/web/proveedores/duckduckgo.js.map +1 -0
- package/dist/core/web/proveedores/ecosia.d.ts +3 -0
- package/dist/core/web/proveedores/ecosia.d.ts.map +1 -0
- package/dist/core/web/proveedores/ecosia.js +72 -0
- package/dist/core/web/proveedores/ecosia.js.map +1 -0
- package/dist/core/web/proveedores/exa.d.ts +6 -0
- package/dist/core/web/proveedores/exa.d.ts.map +1 -0
- package/dist/core/web/proveedores/exa.js +24 -0
- package/dist/core/web/proveedores/exa.js.map +1 -0
- package/dist/core/web/proveedores/mojeek.d.ts +3 -0
- package/dist/core/web/proveedores/mojeek.d.ts.map +1 -0
- package/dist/core/web/proveedores/mojeek.js +65 -0
- package/dist/core/web/proveedores/mojeek.js.map +1 -0
- package/dist/core/web/proveedores/navegador.d.ts +10 -0
- package/dist/core/web/proveedores/navegador.d.ts.map +1 -0
- package/dist/core/web/proveedores/navegador.js +13 -0
- package/dist/core/web/proveedores/navegador.js.map +1 -0
- package/dist/core/web/proveedores/registro.d.ts +43 -0
- package/dist/core/web/proveedores/registro.d.ts.map +1 -0
- package/dist/core/web/proveedores/registro.js +49 -0
- package/dist/core/web/proveedores/registro.js.map +1 -0
- package/dist/core/web/proveedores/searxng.d.ts +9 -0
- package/dist/core/web/proveedores/searxng.d.ts.map +1 -0
- package/dist/core/web/proveedores/searxng.js +17 -0
- package/dist/core/web/proveedores/searxng.js.map +1 -0
- package/dist/core/web/proveedores/serper.d.ts +9 -0
- package/dist/core/web/proveedores/serper.d.ts.map +1 -0
- package/dist/core/web/proveedores/serper.js +19 -0
- package/dist/core/web/proveedores/serper.js.map +1 -0
- package/dist/core/web/proveedores/tavily.d.ts +6 -0
- package/dist/core/web/proveedores/tavily.d.ts.map +1 -0
- package/dist/core/web/proveedores/tavily.js +19 -0
- package/dist/core/web/proveedores/tavily.js.map +1 -0
- package/dist/core/web/proveedores/tipos.d.ts +36 -0
- package/dist/core/web/proveedores/tipos.d.ts.map +1 -0
- package/dist/core/web/proveedores/tipos.js +10 -0
- package/dist/core/web/proveedores/tipos.js.map +1 -0
- package/dist/core/web/registro-red.d.ts +43 -0
- package/dist/core/web/registro-red.d.ts.map +1 -0
- package/dist/core/web/registro-red.js +86 -0
- package/dist/core/web/registro-red.js.map +1 -0
- package/dist/core/web/scrapers/cisa-kev.d.ts +10 -0
- package/dist/core/web/scrapers/cisa-kev.d.ts.map +1 -0
- package/dist/core/web/scrapers/cisa-kev.js +38 -0
- package/dist/core/web/scrapers/cisa-kev.js.map +1 -0
- package/dist/core/web/scrapers/crates-io.d.ts +11 -0
- package/dist/core/web/scrapers/crates-io.d.ts.map +1 -0
- package/dist/core/web/scrapers/crates-io.js +29 -0
- package/dist/core/web/scrapers/crates-io.js.map +1 -0
- package/dist/core/web/scrapers/docs-rs.d.ts +10 -0
- package/dist/core/web/scrapers/docs-rs.d.ts.map +1 -0
- package/dist/core/web/scrapers/docs-rs.js +35 -0
- package/dist/core/web/scrapers/docs-rs.js.map +1 -0
- package/dist/core/web/scrapers/github.d.ts +3 -0
- package/dist/core/web/scrapers/github.d.ts.map +1 -0
- package/dist/core/web/scrapers/github.js +72 -0
- package/dist/core/web/scrapers/github.js.map +1 -0
- package/dist/core/web/scrapers/go-pkg.d.ts +7 -0
- package/dist/core/web/scrapers/go-pkg.d.ts.map +1 -0
- package/dist/core/web/scrapers/go-pkg.js +30 -0
- package/dist/core/web/scrapers/go-pkg.js.map +1 -0
- package/dist/core/web/scrapers/hex.d.ts +6 -0
- package/dist/core/web/scrapers/hex.d.ts.map +1 -0
- package/dist/core/web/scrapers/hex.js +27 -0
- package/dist/core/web/scrapers/hex.js.map +1 -0
- package/dist/core/web/scrapers/maven.d.ts +8 -0
- package/dist/core/web/scrapers/maven.d.ts.map +1 -0
- package/dist/core/web/scrapers/maven.js +41 -0
- package/dist/core/web/scrapers/maven.js.map +1 -0
- package/dist/core/web/scrapers/mdn.d.ts +6 -0
- package/dist/core/web/scrapers/mdn.d.ts.map +1 -0
- package/dist/core/web/scrapers/mdn.js +28 -0
- package/dist/core/web/scrapers/mdn.js.map +1 -0
- package/dist/core/web/scrapers/npm.d.ts +11 -0
- package/dist/core/web/scrapers/npm.d.ts.map +1 -0
- package/dist/core/web/scrapers/npm.js +57 -0
- package/dist/core/web/scrapers/npm.js.map +1 -0
- package/dist/core/web/scrapers/nuget.d.ts +8 -0
- package/dist/core/web/scrapers/nuget.d.ts.map +1 -0
- package/dist/core/web/scrapers/nuget.js +22 -0
- package/dist/core/web/scrapers/nuget.js.map +1 -0
- package/dist/core/web/scrapers/nvd.d.ts +7 -0
- package/dist/core/web/scrapers/nvd.d.ts.map +1 -0
- package/dist/core/web/scrapers/nvd.js +37 -0
- package/dist/core/web/scrapers/nvd.js.map +1 -0
- package/dist/core/web/scrapers/pypi.d.ts +6 -0
- package/dist/core/web/scrapers/pypi.d.ts.map +1 -0
- package/dist/core/web/scrapers/pypi.js +31 -0
- package/dist/core/web/scrapers/pypi.js.map +1 -0
- package/dist/core/web/scrapers/registro.d.ts +13 -0
- package/dist/core/web/scrapers/registro.d.ts.map +1 -0
- package/dist/core/web/scrapers/registro.js +65 -0
- package/dist/core/web/scrapers/registro.js.map +1 -0
- package/dist/core/web/scrapers/rubygems.d.ts +6 -0
- package/dist/core/web/scrapers/rubygems.d.ts.map +1 -0
- package/dist/core/web/scrapers/rubygems.js +23 -0
- package/dist/core/web/scrapers/rubygems.js.map +1 -0
- package/dist/core/web/scrapers/stackoverflow.d.ts +3 -0
- package/dist/core/web/scrapers/stackoverflow.d.ts.map +1 -0
- package/dist/core/web/scrapers/stackoverflow.js +46 -0
- package/dist/core/web/scrapers/stackoverflow.js.map +1 -0
- package/dist/core/web/scrapers/tipos.d.ts +42 -0
- package/dist/core/web/scrapers/tipos.d.ts.map +1 -0
- package/dist/core/web/scrapers/tipos.js +23 -0
- package/dist/core/web/scrapers/tipos.js.map +1 -0
- package/dist/core/web/texto.d.ts +10 -0
- package/dist/core/web/texto.d.ts.map +1 -0
- package/dist/core/web/texto.js +26 -0
- package/dist/core/web/texto.js.map +1 -0
- package/dist/core/web/tools.d.ts +91 -0
- package/dist/core/web/tools.d.ts.map +1 -0
- package/dist/core/web/tools.js +304 -0
- package/dist/core/web/tools.js.map +1 -0
- package/dist/core/wiki/almacen.d.ts +33 -0
- package/dist/core/wiki/almacen.d.ts.map +1 -0
- package/dist/core/wiki/almacen.js +93 -0
- package/dist/core/wiki/almacen.js.map +1 -0
- package/dist/core/wiki/citas.d.ts +111 -0
- package/dist/core/wiki/citas.d.ts.map +1 -0
- package/dist/core/wiki/citas.js +146 -0
- package/dist/core/wiki/citas.js.map +1 -0
- package/dist/core/workflows/agent-runner.d.ts +88 -0
- package/dist/core/workflows/agent-runner.d.ts.map +1 -0
- package/dist/core/workflows/agent-runner.js +312 -0
- package/dist/core/workflows/agent-runner.js.map +1 -0
- package/dist/core/workflows/builtins.d.ts +41 -0
- package/dist/core/workflows/builtins.d.ts.map +1 -0
- package/dist/core/workflows/builtins.js +283 -0
- package/dist/core/workflows/builtins.js.map +1 -0
- package/dist/core/workflows/contrato/esquema.d.ts +32 -0
- package/dist/core/workflows/contrato/esquema.d.ts.map +1 -0
- package/dist/core/workflows/contrato/esquema.js +25 -0
- package/dist/core/workflows/contrato/esquema.js.map +1 -0
- package/dist/core/workflows/contrato/reparar-argumentos.d.ts +69 -0
- package/dist/core/workflows/contrato/reparar-argumentos.d.ts.map +1 -0
- package/dist/core/workflows/contrato/reparar-argumentos.js +117 -0
- package/dist/core/workflows/contrato/reparar-argumentos.js.map +1 -0
- package/dist/core/workflows/contrato/validador.d.ts +30 -0
- package/dist/core/workflows/contrato/validador.d.ts.map +1 -0
- package/dist/core/workflows/contrato/validador.js +56 -0
- package/dist/core/workflows/contrato/validador.js.map +1 -0
- package/dist/core/workflows/contrato/yield.d.ts +65 -0
- package/dist/core/workflows/contrato/yield.d.ts.map +1 -0
- package/dist/core/workflows/contrato/yield.js +80 -0
- package/dist/core/workflows/contrato/yield.js.map +1 -0
- package/dist/core/workflows/goal-engine/engine.d.ts +151 -0
- package/dist/core/workflows/goal-engine/engine.d.ts.map +1 -0
- package/dist/core/workflows/goal-engine/engine.js +503 -0
- package/dist/core/workflows/goal-engine/engine.js.map +1 -0
- package/dist/core/workflows/goal-engine/errors.d.ts +7 -0
- package/dist/core/workflows/goal-engine/errors.d.ts.map +1 -0
- package/dist/core/workflows/goal-engine/errors.js +9 -0
- package/dist/core/workflows/goal-engine/errors.js.map +1 -0
- package/dist/core/workflows/goal-engine/index.d.ts +13 -0
- package/dist/core/workflows/goal-engine/index.d.ts.map +1 -0
- package/dist/core/workflows/goal-engine/index.js +8 -0
- package/dist/core/workflows/goal-engine/index.js.map +1 -0
- package/dist/core/workflows/goal-engine/persistence.d.ts +31 -0
- package/dist/core/workflows/goal-engine/persistence.d.ts.map +1 -0
- package/dist/core/workflows/goal-engine/persistence.js +145 -0
- package/dist/core/workflows/goal-engine/persistence.js.map +1 -0
- package/dist/core/workflows/goal-engine/prompts.d.ts +37 -0
- package/dist/core/workflows/goal-engine/prompts.d.ts.map +1 -0
- package/dist/core/workflows/goal-engine/prompts.js +131 -0
- package/dist/core/workflows/goal-engine/prompts.js.map +1 -0
- package/dist/core/workflows/goal-engine/state.d.ts +41 -0
- package/dist/core/workflows/goal-engine/state.d.ts.map +1 -0
- package/dist/core/workflows/goal-engine/state.js +397 -0
- package/dist/core/workflows/goal-engine/state.js.map +1 -0
- package/dist/core/workflows/goal-engine/tools.d.ts +31 -0
- package/dist/core/workflows/goal-engine/tools.d.ts.map +1 -0
- package/dist/core/workflows/goal-engine/tools.js +211 -0
- package/dist/core/workflows/goal-engine/tools.js.map +1 -0
- package/dist/core/workflows/goal-engine/types.d.ts +286 -0
- package/dist/core/workflows/goal-engine/types.d.ts.map +1 -0
- package/dist/core/workflows/goal-engine/types.js +17 -0
- package/dist/core/workflows/goal-engine/types.js.map +1 -0
- package/dist/core/workflows/goal-engine/worktree-fingerprint.d.ts +23 -0
- package/dist/core/workflows/goal-engine/worktree-fingerprint.d.ts.map +1 -0
- package/dist/core/workflows/goal-engine/worktree-fingerprint.js +72 -0
- package/dist/core/workflows/goal-engine/worktree-fingerprint.js.map +1 -0
- package/dist/core/workflows/graph-sync.d.ts +67 -0
- package/dist/core/workflows/graph-sync.d.ts.map +1 -0
- package/dist/core/workflows/graph-sync.js +188 -0
- package/dist/core/workflows/graph-sync.js.map +1 -0
- package/dist/core/workflows/graph.d.ts +143 -0
- package/dist/core/workflows/graph.d.ts.map +1 -0
- package/dist/core/workflows/graph.js +319 -0
- package/dist/core/workflows/graph.js.map +1 -0
- package/dist/core/workflows/index.d.ts +26 -0
- package/dist/core/workflows/index.d.ts.map +1 -0
- package/dist/core/workflows/index.js +18 -0
- package/dist/core/workflows/index.js.map +1 -0
- package/dist/core/workflows/journal.d.ts +68 -0
- package/dist/core/workflows/journal.d.ts.map +1 -0
- package/dist/core/workflows/journal.js +83 -0
- package/dist/core/workflows/journal.js.map +1 -0
- package/dist/core/workflows/manager.d.ts +122 -0
- package/dist/core/workflows/manager.d.ts.map +1 -0
- package/dist/core/workflows/manager.js +351 -0
- package/dist/core/workflows/manager.js.map +1 -0
- package/dist/core/workflows/resolve-script.d.ts +35 -0
- package/dist/core/workflows/resolve-script.d.ts.map +1 -0
- package/dist/core/workflows/resolve-script.js +66 -0
- package/dist/core/workflows/resolve-script.js.map +1 -0
- package/dist/core/workflows/runtime.d.ts +62 -0
- package/dist/core/workflows/runtime.d.ts.map +1 -0
- package/dist/core/workflows/runtime.js +380 -0
- package/dist/core/workflows/runtime.js.map +1 -0
- package/dist/core/workflows/save-as-skill.d.ts +27 -0
- package/dist/core/workflows/save-as-skill.d.ts.map +1 -0
- package/dist/core/workflows/save-as-skill.js +54 -0
- package/dist/core/workflows/save-as-skill.js.map +1 -0
- package/dist/core/workflows/shared-store.d.ts +31 -0
- package/dist/core/workflows/shared-store.d.ts.map +1 -0
- package/dist/core/workflows/shared-store.js +80 -0
- package/dist/core/workflows/shared-store.js.map +1 -0
- package/dist/core/workflows/subagent-host.d.ts +50 -0
- package/dist/core/workflows/subagent-host.d.ts.map +1 -0
- package/dist/core/workflows/subagent-host.js +225 -0
- package/dist/core/workflows/subagent-host.js.map +1 -0
- package/dist/core/workflows/tool-workflow.d.ts +22 -0
- package/dist/core/workflows/tool-workflow.d.ts.map +1 -0
- package/dist/core/workflows/tool-workflow.js +120 -0
- package/dist/core/workflows/tool-workflow.js.map +1 -0
- package/dist/core/workflows/types.d.ts +191 -0
- package/dist/core/workflows/types.d.ts.map +1 -0
- package/dist/core/workflows/types.js +26 -0
- package/dist/core/workflows/types.js.map +1 -0
- package/dist/core/workflows/worktree.d.ts +42 -0
- package/dist/core/workflows/worktree.d.ts.map +1 -0
- package/dist/core/workflows/worktree.js +107 -0
- package/dist/core/workflows/worktree.js.map +1 -0
- package/dist/extensions/llama/index.d.ts.map +1 -1
- package/dist/extensions/llama/index.js +2 -0
- package/dist/extensions/llama/index.js.map +1 -1
- package/dist/extensions/llama/provider.d.ts.map +1 -1
- package/dist/extensions/llama/provider.js +6 -2
- package/dist/extensions/llama/provider.js.map +1 -1
- package/dist/extensions/remoto/index.d.ts +22 -0
- package/dist/extensions/remoto/index.d.ts.map +1 -0
- package/dist/extensions/remoto/index.js +54 -0
- package/dist/extensions/remoto/index.js.map +1 -0
- package/dist/index.d.ts +1 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -13
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts +4 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +26 -15
- package/dist/main.js.map +1 -1
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +4 -3
- package/dist/migrations.js.map +1 -1
- package/dist/modes/acp/acp-mode.d.ts +42 -0
- package/dist/modes/acp/acp-mode.d.ts.map +1 -0
- package/dist/modes/acp/acp-mode.js +190 -0
- package/dist/modes/acp/acp-mode.js.map +1 -0
- package/dist/modes/acp/events.d.ts +74 -0
- package/dist/modes/acp/events.d.ts.map +1 -0
- package/dist/modes/acp/events.js +116 -0
- package/dist/modes/acp/events.js.map +1 -0
- package/dist/modes/interactive/components/home-screen.d.ts.map +1 -1
- package/dist/modes/interactive/components/home-screen.js +2 -2
- package/dist/modes/interactive/components/home-screen.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts +9 -3
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +56 -12
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/prompt-optimization.d.ts +16 -0
- package/dist/modes/interactive/components/prompt-optimization.d.ts.map +1 -0
- package/dist/modes/interactive/components/prompt-optimization.js +46 -0
- package/dist/modes/interactive/components/prompt-optimization.js.map +1 -0
- package/dist/modes/interactive/components/settings-selector.d.ts +19 -2
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +180 -56
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-submenu.d.ts +72 -0
- package/dist/modes/interactive/components/settings-submenu.d.ts.map +1 -0
- package/dist/modes/interactive/components/settings-submenu.js +165 -0
- package/dist/modes/interactive/components/settings-submenu.js.map +1 -0
- package/dist/modes/interactive/components/thinking-selector.d.ts +15 -3
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js +74 -17
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/external-editor.d.ts.map +1 -1
- package/dist/modes/interactive/external-editor.js +2 -1
- package/dist/modes/interactive/external-editor.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +21 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +709 -75
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +4 -3
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/json-event.d.ts +16 -13
- package/dist/modes/json-event.d.ts.map +1 -1
- package/dist/modes/json-event.js +20 -6
- package/dist/modes/json-event.js.map +1 -1
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js +11 -0
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +173 -0
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +29 -0
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +27 -5
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/server/attach.d.ts +56 -0
- package/dist/server/attach.d.ts.map +1 -0
- package/dist/server/attach.js +130 -0
- package/dist/server/attach.js.map +1 -0
- package/dist/server/extension-ops.d.ts +40 -0
- package/dist/server/extension-ops.d.ts.map +1 -0
- package/dist/server/extension-ops.js +146 -0
- package/dist/server/extension-ops.js.map +1 -0
- package/dist/server/pi-server-service.d.ts +85 -0
- package/dist/server/pi-server-service.d.ts.map +1 -0
- package/dist/server/pi-server-service.js +213 -0
- package/dist/server/pi-server-service.js.map +1 -0
- package/dist/server/scheduler-tick.d.ts +32 -0
- package/dist/server/scheduler-tick.d.ts.map +1 -0
- package/dist/server/scheduler-tick.js +47 -0
- package/dist/server/scheduler-tick.js.map +1 -0
- package/dist/server/serve.d.ts +25 -0
- package/dist/server/serve.d.ts.map +1 -0
- package/dist/server/serve.js +83 -0
- package/dist/server/serve.js.map +1 -0
- package/dist/server/transcript.d.ts +38 -0
- package/dist/server/transcript.d.ts.map +1 -0
- package/dist/server/transcript.js +176 -0
- package/dist/server/transcript.js.map +1 -0
- package/dist/skills/ada-engine/SKILL.md +153 -0
- package/dist/skills/skill-creator/SKILL.md +90 -0
- package/dist/telegram/api.d.ts +75 -0
- package/dist/telegram/api.d.ts.map +1 -0
- package/dist/telegram/api.js +104 -0
- package/dist/telegram/api.js.map +1 -0
- package/dist/telegram/bridge.d.ts +85 -0
- package/dist/telegram/bridge.d.ts.map +1 -0
- package/dist/telegram/bridge.js +182 -0
- package/dist/telegram/bridge.js.map +1 -0
- package/dist/telegram/journal.d.ts +67 -0
- package/dist/telegram/journal.d.ts.map +1 -0
- package/dist/telegram/journal.js +119 -0
- package/dist/telegram/journal.js.map +1 -0
- package/dist/telegram/servidor.d.ts +15 -0
- package/dist/telegram/servidor.d.ts.map +1 -0
- package/dist/telegram/servidor.js +74 -0
- package/dist/telegram/servidor.js.map +1 -0
- package/dist/utils/frontmatter.d.ts.map +1 -1
- package/dist/utils/frontmatter.js +2 -1
- package/dist/utils/frontmatter.js.map +1 -1
- package/dist/utils/management-http.d.ts +5 -3
- package/dist/utils/management-http.d.ts.map +1 -1
- package/dist/utils/management-http.js +14 -10
- package/dist/utils/management-http.js.map +1 -1
- package/dist/utils/shell.d.ts +11 -0
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +11 -0
- package/dist/utils/shell.js.map +1 -1
- package/dist/utils/text.d.ts +8 -0
- package/dist/utils/text.d.ts.map +1 -0
- package/dist/utils/text.js +9 -0
- package/dist/utils/text.js.map +1 -0
- package/dist/utils/version-check.d.ts.map +1 -1
- package/dist/utils/version-check.js +29 -1
- package/dist/utils/version-check.js.map +1 -1
- package/docs/compaction.md +25 -10
- package/docs/compliance.md +241 -0
- package/docs/containerization.md +24 -24
- package/docs/custom-provider.md +15 -12
- package/docs/development.md +47 -10
- package/docs/docs.json +14 -2
- package/docs/environment-variables.md +20 -17
- package/docs/extensions.md +62 -51
- package/docs/index.md +15 -21
- package/docs/json.md +10 -5
- package/docs/keybindings.md +5 -5
- package/docs/llama-cpp.md +9 -7
- package/docs/models.md +18 -12
- package/docs/packages.md +45 -45
- package/docs/prompt-templates.md +5 -5
- package/docs/providers.md +12 -12
- package/docs/quickstart.md +39 -39
- package/docs/rpc.md +21 -15
- package/docs/sdk.md +38 -38
- package/docs/security.md +26 -21
- package/docs/session-format.md +7 -7
- package/docs/sessions.md +14 -14
- package/docs/settings.md +47 -22
- package/docs/shell-aliases.md +2 -2
- package/docs/skills.md +14 -13
- package/docs/terminal-setup.md +14 -14
- package/docs/termux.md +7 -7
- package/docs/themes.md +11 -11
- package/docs/tmux.md +4 -4
- package/docs/tui.md +3 -3
- package/docs/usage.md +54 -54
- package/docs/windows.md +2 -2
- package/examples/extensions/border-status-editor.ts +1 -1
- package/examples/extensions/git-checkpoint.ts +2 -2
- package/examples/extensions/notify.ts +3 -1
- package/examples/extensions/subagent/README.md +1 -1
- package/examples/extensions/subagent/index.ts +6 -1
- package/examples/extensions/titlebar-spinner.ts +1 -1
- package/examples/rpc-extension-ui.ts +1 -1
- package/examples/sdk/06-extensions.ts +1 -1
- package/examples/sdk/12-full-control.ts +9 -0
- package/examples/sdk/README.md +1 -1
- package/npm-shrinkwrap.json +35 -261
- package/package.json +9 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve-command.js","sourceRoot":"","sources":["../../src/cli/serve-command.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Subcomandos que no abren el TUI: `serve`, `sessions`, `session`, `attach`,\n * `acp`, `schedule`, `refine` y `telegram`.\n *\n * Se mantienen en un fichero propio y el enganche en `main.ts` es un import y\n * una llamada, para no engordar la superficie de conflicto con upstream. `acp`\n * entra aquí por lo mismo: añadirlo cuesta cero hunks nuevos contra upstream.\n */\n\nimport { join } from \"node:path\";\nimport { getAgentDir } from \"../config.ts\";\n\n/**\n * Separa `--socket <ruta>` de los argumentos de la operación.\n *\n * Existe porque sin ella se colaban dentro: `session x rename --socket /tmp/s`\n * acababa poniéndole a la sesión el nombre \"--socket /tmp/s\". Se exporta para\n * poder probarlo sin levantar un servidor.\n */\nexport function parseSessionOpArgs(args: string[]): { sessionId?: string; op?: string; rest: string[] } {\n\tconst socketIndex = args.indexOf(\"--socket\");\n\tconst cleaned = socketIndex >= 0 ? args.filter((_, i) => i !== socketIndex && i !== socketIndex + 1) : args;\n\tconst [, sessionId, op, ...rest] = cleaned;\n\treturn { sessionId, op, rest };\n}\n\n/**\n * Por qué lo que ha llegado del modelo NO es una respuesta, o `null` si sí lo es.\n *\n * DOS formas de no serlo, y solo se miraba una:\n *\n * - `vacia`: no ha llegado texto. Ésta ya se miraba.\n * - `cortada`: el proveedor se murió con el stream YA EMPEZADO. Llega texto,\n * así que la guarda de «texto vacío» no lo ve, y el trozo sale como si\n * fuera la respuesta buena.\n *\n * Reproducido con un servidor que emite un trozo y destruye el socket. La\n * respuesta que devuelve el SDK es literalmente:\n *\n * { stopReason: \"error\", errorMessage: \"terminated\",\n * texto: \"reintenta las peti\" }\n *\n * Y con eso, `ada-cli commit --hacer` dejó ESTO en la historia de git, con\n * salida 0 y stderr vacío:\n *\n * [main c3a409b] reintenta las peti\n * 1 file changed, 7 insertions(+)\n *\n * `review` entra por la misma puerta: media revisión sale como la revisión\n * entera. Es exactamente el fallo que esta función dice impedir, colándose por\n * el lado que no se miraba.\n *\n * El trozo se DESCARTA entero a propósito: media revisión no es una revisión y\n * medio titular no es un titular. `length` NO cuenta como corte — ahí el modelo\n * terminó de hablar, aunque fuera por el tope de tokens, y rechazarlo sería un\n * falso positivo que rompe la cara buena.\n */\nexport function porQueNoEsRespuesta(stopReason: string, texto: string): \"vacia\" | \"cortada\" | null {\n\tif (stopReason === \"error\" || stopReason === \"aborted\") return \"cortada\";\n\tif (texto.trim() === \"\") return \"vacia\";\n\treturn null;\n}\n\n/**\n * Una llamada al modelo configurado, lista para inyectar en un subcomando.\n *\n * Vive aquí y no en cada comando porque `review` y `commit` la necesitan igual,\n * y sobre todo porque la parte que importa —una respuesta vacía o cortada es un\n * FALLO, no un resultado— no puede depender de que cada comando se acuerde de\n * escribirla. Ya nos costó cuatro revisiones falsamente limpias: eran 429 del\n * proveedor que se leyeron como \"tu código está limpio\".\n *\n * `advertencia` es lo que cambia entre comandos: la frase que evita que el\n * usuario interprete el fallo como un veredicto.\n */\nfunction crearLlamadaAlModelo(\n\targs: string[],\n\tagentDir: string,\n\tadvertencia: string,\n): (sistema: string, usuario: string) => Promise<string> {\n\treturn async (sistema, usuario) => {\n\t\tconst { ModelRuntime } = await import(\"../core/model-runtime.ts\");\n\t\tconst { resolveCliModel } = await import(\"../core/model-resolver.ts\");\n\t\tconst { SettingsManager } = await import(\"../core/settings-manager.ts\");\n\t\tconst { homedir } = await import(\"node:os\");\n\t\tconst modelRuntime = await ModelRuntime.create();\n\t\t// El modelo de los ajustes, que es el que el usuario ya eligió. Sin esto\n\t\t// habría que pasarlo a mano en cada llamada, y un comando que exige\n\t\t// recordar un identificador de modelo no lo lanza nadie.\n\t\tconst ajustes = SettingsManager.create(homedir(), agentDir);\n\t\t// `--model proveedor/modelo` gana a los ajustes: un CI necesita fijar con\n\t\t// qué se ejecuta, y no depender de lo que tenga elegido quien lo configuró.\n\t\tconst iModelo = args.indexOf(\"--model\");\n\t\tconst spec = iModelo >= 0 ? args[iModelo + 1] : undefined;\n\t\tconst barra = spec?.indexOf(\"/\") ?? -1;\n\t\tconst { model } = resolveCliModel({\n\t\t\tmodelRuntime,\n\t\t\tcliProvider: barra > 0 ? spec?.slice(0, barra) : ajustes.getDefaultProvider(),\n\t\t\tcliModel: barra > 0 ? spec?.slice(barra + 1) : ajustes.getDefaultModel(),\n\t\t});\n\t\tif (!model) {\n\t\t\tthrow new Error(\"No hay modelo configurado. Abre `ada-cli` y elige uno con /login o /model.\");\n\t\t}\n\t\tconst { contentText } = await import(\"@earendil-works/pi-ai\");\n\t\tconst respuesta = await modelRuntime.completeSimple(model, {\n\t\t\tsystemPrompt: sistema,\n\t\t\tmessages: [{ role: \"user\", content: usuario }],\n\t\t} as never);\n\t\tconst texto = contentText(respuesta.content, \"\");\n\t\t// Ni vacía ni cortada. Lo encontró el propio `ada-cli review` revisando\n\t\t// este mismo diff, y tenía razón: cuatro de cinco ejecuciones sobre un\n\t\t// fallo sembrado decían \"el revisor no ha encontrado nada\" cuando lo que\n\t\t// pasaba era un 429 del proveedor.\n\t\tconst motivo = porQueNoEsRespuesta(respuesta.stopReason, texto);\n\t\tif (motivo) {\n\t\t\t// El error del proveedor, clasificado. Antes se le enseñaba al usuario el\n\t\t\t// volcado JSON entero —400 caracteres con tres cosas útiles dentro— y la\n\t\t\t// mayoría no lo lee: un error que no se lee se interpreta como \"esto no\n\t\t\t// funciona\".\n\t\t\tconst { clasificarError, explicarError } = await import(\"../core/errores/proveedor.ts\");\n\t\t\tconst clasificado = clasificarError({ mensaje: respuesta.errorMessage ?? respuesta.stopReason });\n\t\t\t// Decir CUÁNTO llegó y que se tira. Callarlo dejaría al usuario creyendo\n\t\t\t// que el proveedor no contestó nada, cuando lo que pasó es que contestó\n\t\t\t// a medias y hemos decidido no fiarnos.\n\t\t\tconst aMedias =\n\t\t\t\tmotivo === \"cortada\" && texto.trim() !== \"\"\n\t\t\t\t\t? `\\nLa respuesta llegó a medias (${texto.trim().length} caracteres) y se DESCARTA: media respuesta no es una respuesta.`\n\t\t\t\t\t: \"\";\n\t\t\tthrow new Error(`${explicarError(clasificado)}${aMedias}\\n${advertencia}`);\n\t\t}\n\t\treturn texto;\n\t};\n}\n\n/**\n * Los subcomandos que se despachan aquí. La fuente de verdad, exportada.\n *\n * Se exporta para que la prueba de la ayuda pueda recorrer ESTA lista y no una\n * copia. Con la copia, añadir un subcomando nuevo sin documentarlo dejaba la\n * prueba en verde: se comprobó añadiendo `fantasma` a la lista y sin tocar la\n * ayuda, y pasaron 21 de 21. La prueba decía mirar la fuente de verdad y miraba\n * su propia copia, que es el mismo defecto que dice prevenir.\n */\nexport const SUBCOMANDOS_SERVE: readonly string[] = [\n\t\"serve\",\n\t\"attach\",\n\t\"sessions\",\n\t\"session\",\n\t\"acp\",\n\t\"schedule\",\n\t\"refine\",\n\t\"telegram\",\n\t\"undo\",\n\t\"usage\",\n\t\"wiki\",\n\t\"audit\",\n\t\"review\",\n\t\"import\",\n\t\"discover\",\n\t\"hashline\",\n\t\"cleanse\",\n\t\"banco\",\n\t\"commit\",\n\t// `computer` faltaba mientras `runServeCommand` lo manejaba y `printServeHelp`\n\t// lo anunciaba: `ada-cli computer status` no llegaba nunca a su rama, se iba\n\t// al camino normal y salía \"No API key found\" con código 0 — capacidad\n\t// construida, documentada y desenchufada. Se perdió justamente porque la\n\t// lista vivía copiada en dos sitios; por eso ahora es UNA constante y la\n\t// guarda de `test/serve-command-lista.test.ts` la compara con el despacho.\n\t\"computer\",\n\t// `politica`/`policy`: el ámbito de configuración que el usuario no puede\n\t// editar. Va en la lista, en `ownsItsHelp` y en la ayuda a la vez, que son\n\t// los tres sitios donde `computer` se quedó a medias.\n\t\"politica\",\n\t\"policy\",\n\t\"telemetria\",\n\t\"telemetry\",\n];\n\nexport function isServeCommand(args: string[]): boolean {\n\treturn SUBCOMANDOS_SERVE.includes(args[0] ?? \"\");\n}\n\nexport function printServeHelp(): void {\n\tconsole.log(`Uso:\n ada-cli serve [--socket <ruta>] Hospeda sesiones residentes; el trabajo sobrevive al cierre del terminal\n ada-cli serve --broker [--escuchar host:puerto] [--credenciales <archivo.json>]\n Broker de credenciales: las claves salen del portátil de cada dev\n ada-cli sessions Lista las sesiones conocidas\n ada-cli attach <id> [--watch] Reconecta a una sesión servida (--watch = solo mirar)\n ada-cli session <id> <op> compact | rename <nombre> | fork | kill | ops\n ada-cli acp Habla Agent Client Protocol por stdio (Zed y otros editores)\n ada-cli schedule <acción> Trabajo recurrente (corre dentro de 'serve')\n ada-cli refine [sessionId] Extrae lecciones durables de una sesión al harness\n ada-cli telegram Controla las sesiones residentes desde Telegram\n ada-cli undo [--dry-run] Deshace los cambios de ficheros del último turno\n ada-cli usage [--days N] Tokens y coste reales, por modelo, proyecto y día\n ada-cli wiki <index|check> Wiki del repositorio con citas que caducan\n ada-cli computer <status|install> Motor de control del ordenador y sus permisos\n ada-cli review [--sarif <f>] Revisa el diff con hallazgos anclados al código y SARIF 2.1.0\n ada-cli audit <...> Registro de cumplimiento: solo lee ficheros, contesta aunque el resto esté caído\n ada-cli politica Política del equipo: el único ámbito que el usuario no puede editar\n (en inglés: ada-cli policy)\n ada-cli telemetria [--cuerpo] Exportación OTLP: qué sale de esta máquina, y qué no\n (en inglés: ada-cli telemetry)\n ada-cli import <...> Trae sesiones y configuración de otras herramientas\n ada-cli discover Lista MCP, skills y comandos que otras herramientas dejaron en el proyecto\n ada-cli hashline <tag|apply> Formato de edición anclado por hash de línea\n ada-cli cleanse [--dry-run] Detecta y arregla en paralelo los diagnósticos de lint/typecheck/test\n ada-cli banco <generar|run|comparar> Banco de fiabilidad de edición: casos, ejecución y comparación\n ada-cli commit [--hacer] Mensaje de commit de lo que hay en el índice, por map-reduce sobre el diff\n\nEl socket vive por defecto en <agentDir>/server.sock y solo lo puede leer tu usuario.`);\n}\n\n/**\n * Ejecuta el subcomando. Devuelve true si consumió los argumentos.\n *\n * Las dependencias pesadas se cargan de forma perezosa: un arranque normal del\n * CLI no debe pagar el coste de importar el servidor.\n */\nexport async function runServeCommand(args: string[]): Promise<boolean> {\n\tif (!isServeCommand(args)) return false;\n\n\t// La ayuda genérica solo cubre los subcomandos que NO traen la suya. Antes\n\t// se comprobaba primero y se comía a las demás: `refine --help` acababa\n\t// enseñando la ayuda de `serve`.\n\tconst ownsItsHelp = [\n\t\t\"acp\",\n\t\t\"schedule\",\n\t\t\"refine\",\n\t\t\"telegram\",\n\t\t\"undo\",\n\t\t\"usage\",\n\t\t\"wiki\",\n\t\t\"computer\",\n\t\t\"audit\",\n\t\t\"politica\",\n\t\t\"policy\",\n\t\t\"telemetria\",\n\t\t\"telemetry\",\n\t\t\"review\",\n\t\t\"import\",\n\t\t\"discover\",\n\t\t\"hashline\",\n\t\t\"cleanse\",\n\t\t\"banco\",\n\t\t\"commit\",\n\t].includes(args[0] ?? \"\");\n\tif (!ownsItsHelp && (args.includes(\"--help\") || args.includes(\"-h\"))) {\n\t\tprintServeHelp();\n\t\treturn true;\n\t}\n\n\tconst agentDir = getAgentDir();\n\n\t// `audit` va lo primero: solo lee ficheros, no necesita socket ni servidor,\n\t// y tiene que poder contestar aunque el resto esté caído — un registro de\n\t// cumplimiento que exige que el producto arranque no sirve de mucho.\n\tconst { runPoliticaCommand } = await import(\"./politica-command.ts\");\n\tif (await runPoliticaCommand(args)) return true;\n\n\tconst { runTelemetriaCommand } = await import(\"./telemetria-command.ts\");\n\tif (await runTelemetriaCommand(args, agentDir)) return true;\n\n\tconst { runAuditCommand } = await import(\"./audit-command.ts\");\n\tif (await runAuditCommand(args, agentDir)) return true;\n\n\t// `discover` tampoco necesita servidor: solo lee ficheros de otras\n\t// herramientas en el cwd (MCP, skills, comandos de barra).\n\tconst { runDiscoverCommand } = await import(\"./discover-command.ts\");\n\tif (await runDiscoverCommand(args)) return true;\n\n\t// `import` tampoco necesita servidor: lee ficheros de otras herramientas y\n\t// escribe los nuestros.\n\tif (args[0] === \"import\") {\n\t\tconst { runImportCommand } = await import(\"./import-command.ts\");\n\t\tconst { randomUUID } = await import(\"node:crypto\");\n\t\treturn runImportCommand(args, agentDir, () => randomUUID());\n\t}\n\n\t// Frontera de red. `audit`, `discover` e `import` solo leen y escriben\n\t// ficheros, y cargar `undici` para ellos cuesta 221 módulos medidos (`discover`\n\t// pasaba de 120 a 341). Todo lo que va DEBAJO puede hablar por red, así que el\n\t// dispatcher se configura aquí.\n\t//\n\t// El sentido en el que se estropea es el bueno a propósito: un subcomando nuevo\n\t// se añade debajo y recibe el dispatcher. Subirlo por encima de esta línea es\n\t// lo que hay que justificar, no bajarlo.\n\tconst { configureHttpDispatcher } = await import(\"../core/http-dispatcher.ts\");\n\tconfigureHttpDispatcher();\n\n\t// `cleanse` tampoco necesita servidor: detecta comprobadores del proyecto,\n\t// los ejecuta y lanza subagentes de reparación directamente.\n\tif (args[0] === \"cleanse\") {\n\t\tconst { runCleanseCommand } = await import(\"./cleanse-command.ts\");\n\t\treturn runCleanseCommand(args, agentDir);\n\t}\n\n\t// `banco` tampoco necesita servidor: `generar`/`comparar` solo leen y\n\t// escriben ficheros; `run` abre sus propias sesiones de agente puntuales.\n\tif (args[0] === \"banco\") {\n\t\tconst { runBancoCommand } = await import(\"./banco-command.ts\");\n\t\treturn runBancoCommand(args);\n\t}\n\n\t// `review` y `commit` necesitan el modelo, así que se les pasa la llamada ya\n\t// construida. La lógica vive en `core/revision/` y `core/commit/`, que se\n\t// pueden probar sin red.\n\tif (args[0] === \"review\") {\n\t\tconst { runReviewCommand } = await import(\"./review-command.ts\");\n\t\treturn await runReviewCommand(args, {\n\t\t\trevisar: crearLlamadaAlModelo(args, agentDir, \"NO se ha revisado el diff. Esto no significa que esté limpio.\"),\n\t\t});\n\t}\n\n\t// `commit` tampoco necesita servidor: lee el índice de git, resume cada\n\t// fichero por separado (map) y sintetiza el mensaje (reduce).\n\tif (args[0] === \"commit\") {\n\t\tconst { runCommitCommand } = await import(\"./commit-command.ts\");\n\t\treturn await runCommitCommand(args, {\n\t\t\tllamar: crearLlamadaAlModelo(args, agentDir, \"NO se ha generado ningún mensaje. El índice sigue intacto.\"),\n\t\t});\n\t}\n\n\t// `acp` va antes de resolver el socket: no usa ninguno, habla JSON-RPC por\n\t// stdio. Y sobre todo, no puede escribir NADA en stdout antes de arrancar —\n\t// stdout es el cable.\n\tif (args[0] === \"acp\") {\n\t\tif (args.includes(\"--help\") || args.includes(\"-h\")) {\n\t\t\tconsole.log(`Uso:\n ada-cli acp [--model <provider/model>] Habla Agent Client Protocol por stdio\n\nPensado para que lo lance un editor (Zed y otros clientes ACP), no para\nejecutarlo a mano: stdout es el cable JSON-RPC. Configúralo como comando del\nagente en tu editor.`);\n\t\t\treturn true;\n\t\t}\n\t\tconst { runAcpMode } = await import(\"../modes/acp/acp-mode.ts\");\n\t\tconst { createAgentSession } = await import(\"../core/sdk.ts\");\n\t\t// `--model provider/model`. Se parte por la PRIMERA barra: los ids de\n\t\t// modelo pueden llevar más (openrouter/stealth/ox-alpha).\n\t\tconst modelIndex = args.indexOf(\"--model\");\n\t\tconst modelSpec = modelIndex >= 0 ? args[modelIndex + 1] : undefined;\n\t\tlet model: import(\"@earendil-works/pi-ai\").Model<never> | undefined;\n\t\tif (modelSpec) {\n\t\t\tconst slash = modelSpec.indexOf(\"/\");\n\t\t\tif (slash <= 0) {\n\t\t\t\tprocess.stderr.write(`[acp] --model debe ser 'provider/model' (recibido: ${modelSpec}).\\n`);\n\t\t\t\tprocess.exitCode = 1;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tconst { ModelRuntime } = await import(\"../core/model-runtime.ts\");\n\t\t\tconst runtime = await ModelRuntime.create({\n\t\t\t\tauthPath: join(agentDir, \"auth.json\"),\n\t\t\t\tmodelsPath: join(agentDir, \"models.json\"),\n\t\t\t});\n\t\t\tmodel = runtime.getModel(modelSpec.slice(0, slash), modelSpec.slice(slash + 1)) as never;\n\t\t\tif (!model) {\n\t\t\t\t// Fallar aquí y no más tarde: arrancar con el modelo equivocado y no\n\t\t\t\t// decirlo produce una prueba que parece pasar y no prueba nada.\n\t\t\t\tprocess.stderr.write(`[acp] modelo no encontrado: ${modelSpec}\\n`);\n\t\t\t\tprocess.exitCode = 1;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\tawait runAcpMode({\n\t\t\tcreateSession: async ({ cwd }) => {\n\t\t\t\tconst { session } = await createAgentSession({ cwd, agentDir, model });\n\t\t\t\treturn session;\n\t\t\t},\n\t\t});\n\t\treturn true;\n\t}\n\n\t// Ni `schedule` ni `refine` usan el socket: uno escribe el fichero de jobs\n\t// que `serve` lee, y el otro trabaja sobre una sesión en disco.\n\tif (args[0] === \"schedule\") {\n\t\tconst { runScheduleCommand } = await import(\"./schedule-command.ts\");\n\t\treturn runScheduleCommand(args);\n\t}\n\tif (args[0] === \"refine\") {\n\t\tconst { runRefineCommand } = await import(\"./refine-command.ts\");\n\t\treturn runRefineCommand(args);\n\t}\n\tif (args[0] === \"telegram\") {\n\t\tconst { runTelegramCommand } = await import(\"./telegram-command.ts\");\n\t\treturn runTelegramCommand(args);\n\t}\n\tif (args[0] === \"undo\") {\n\t\tconst { runUndoCommand } = await import(\"./undo-command.ts\");\n\t\treturn runUndoCommand(args, agentDir);\n\t}\n\tif (args[0] === \"usage\") {\n\t\tconst { runUsageCommand } = await import(\"./usage-command.ts\");\n\t\treturn runUsageCommand(args, agentDir);\n\t}\n\tif (args[0] === \"wiki\") {\n\t\tconst { runWikiCommand } = await import(\"./wiki-command.ts\");\n\t\treturn runWikiCommand(args);\n\t}\n\tif (args[0] === \"computer\") {\n\t\tconst { runComputerCommand } = await import(\"./computer-command.ts\");\n\t\treturn runComputerCommand(args);\n\t}\n\tif (args[0] === \"hashline\") {\n\t\tconst { runHashlineCommand } = await import(\"./hashline-command.ts\");\n\t\treturn runHashlineCommand(args);\n\t}\n\n\t// `serve --broker`: modo alternativo, no usa el socket Unix de sesiones. Es\n\t// lo que hace viable el hueco sin construir un producto servidor nuevo — un\n\t// equipo que quiera centralizar credenciales levanta esto, y quien no\n\t// quiera no paga nada porque el flag no existe hasta que se pide.\n\tif (args[0] === \"serve\" && args.includes(\"--broker\")) {\n\t\tconst { CredencialPool } = await import(\"../core/credenciales/pool.ts\");\n\t\tconst { iniciarServidorBroker, DEFAULT_BROKER_BIND } = await import(\"../core/credenciales/servidor.ts\");\n\t\tconst { LibroDeSesion } = await import(\"../core/audit/libro.ts\");\n\t\tconst { readFile } = await import(\"node:fs/promises\");\n\n\t\t// Fallar cerrado en el propio CLI, antes de tocar el pool o el fichero:\n\t\t// un broker sin bearer no debe ni intentar arrancar. `iniciarServidorBroker`\n\t\t// repite esta comprobación (es la que de verdad importa, por si algún día\n\t\t// se llama sin pasar por este CLI) — dos capas, un solo mensaje.\n\t\tconst token = process.env.ADA_BROKER_TOKEN?.trim();\n\t\tif (!token) {\n\t\t\tconsole.error(\n\t\t\t\t\"Falta ADA_BROKER_TOKEN. El broker no arranca sin un bearer: escuchar sin auth expondría \" +\n\t\t\t\t\t\"las credenciales de todo el equipo a quien alcance el puerto.\\n\" +\n\t\t\t\t\t'Genera uno y expórtalo, por ejemplo: export ADA_BROKER_TOKEN=\"$(node -e \\'console.log(require(\"crypto\").randomBytes(24).toString(\"hex\"))\\')\"',\n\t\t\t);\n\t\t\tprocess.exitCode = 1;\n\t\t\treturn true;\n\t\t}\n\n\t\tconst iCredenciales = args.indexOf(\"--credenciales\");\n\t\tconst rutaCredenciales = iCredenciales >= 0 ? args[iCredenciales + 1] : undefined;\n\t\tif (!rutaCredenciales) {\n\t\t\tconsole.error(\n\t\t\t\t\"Falta --credenciales <archivo.json> con las credenciales del pool. Formato: \" +\n\t\t\t\t\t'{\"<proveedor>\": [{\"id\": \"...\", \"valor\": \"...\"}, ...]}',\n\t\t\t);\n\t\t\tprocess.exitCode = 1;\n\t\t\treturn true;\n\t\t}\n\n\t\tlet credencialesCrudo: string;\n\t\ttry {\n\t\t\tcredencialesCrudo = await readFile(rutaCredenciales, \"utf-8\");\n\t\t} catch (error) {\n\t\t\tconsole.error(\n\t\t\t\t`No se puede leer ${rutaCredenciales}: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t);\n\t\t\tprocess.exitCode = 1;\n\t\t\treturn true;\n\t\t}\n\n\t\tconst pool = new CredencialPool(JSON.parse(credencialesCrudo));\n\t\t// Sesión propia \"broker\": no es una sesión de agente, pero el libro es el\n\t\t// mismo mecanismo y el mismo directorio — es lo que hace auditable \"quién\n\t\t// usó qué cuenta y cuándo\" sin construir un segundo sistema de registro.\n\t\tconst libro = new LibroDeSesion(agentDir, \"broker\");\n\n\t\tconst iEscuchar = args.indexOf(\"--escuchar\");\n\t\tconst bind = iEscuchar >= 0 && args[iEscuchar + 1] ? args[iEscuchar + 1] : DEFAULT_BROKER_BIND;\n\n\t\ttry {\n\t\t\tconst servidor = await iniciarServidorBroker({ pool, token, libro, bind });\n\t\t\tconsole.log(`Broker de credenciales escuchando en ${servidor.url}`);\n\t\t\tconsole.log(\"Bearer requerido en cada petición salvo /v1/health. Ctrl-C para parar.\");\n\t\t\tawait new Promise<void>(() => {});\n\t\t} catch (error) {\n\t\t\tconsole.error(error instanceof Error ? error.message : String(error));\n\t\t\tprocess.exitCode = 1;\n\t\t}\n\t\treturn true;\n\t}\n\n\tconst socketIndex = args.indexOf(\"--socket\");\n\tconst { defaultSocketPath } = await import(\"../server/serve.ts\");\n\tconst socketPath = socketIndex >= 0 && args[socketIndex + 1] ? args[socketIndex + 1] : defaultSocketPath(agentDir);\n\n\tif (args[0] === \"sessions\") {\n\t\tconst { SessionManager } = await import(\"../core/session-manager.ts\");\n\t\tconst sessions = await SessionManager.list(process.cwd());\n\t\tif (sessions.length === 0) {\n\t\t\tconsole.log(\"No hay sesiones en este proyecto.\");\n\t\t\treturn true;\n\t\t}\n\t\tfor (const session of sessions) {\n\t\t\tconst name = session.name ? ` — ${session.name}` : \"\";\n\t\t\tconsole.log(\n\t\t\t\t`${session.id.slice(0, 8)} ${session.modified.toISOString()} ${session.messageCount} msgs${name}`,\n\t\t\t);\n\t\t}\n\t\treturn true;\n\t}\n\n\tif (args[0] === \"session\") {\n\t\t// `ada-cli session <id> <op> [args]` — compact/rename/fork/kill sobre una\n\t\t// sesión del servidor. Van por el comando genérico `extension`, así que\n\t\t// añadir una op nueva no toca este fichero ni el protocolo.\n\t\tconst { sessionId, op, rest } = parseSessionOpArgs(args);\n\t\tif (!sessionId || !op) {\n\t\t\tconsole.error(\"Uso: ada-cli session <id> <compact|rename|fork|kill|ops> [args]\");\n\t\t\tprocess.exitCode = 1;\n\t\t\treturn true;\n\t\t}\n\t\tconst { existsSync } = await import(\"node:fs\");\n\t\tif (!existsSync(socketPath)) {\n\t\t\tconsole.error(`No hay ningún servidor de Ada en ${socketPath}. Arráncalo con 'ada-cli serve'.`);\n\t\t\tprocess.exitCode = 1;\n\t\t\treturn true;\n\t\t}\n\t\tconst payload =\n\t\t\top === \"rename\"\n\t\t\t\t? { name: rest.join(\" \") }\n\t\t\t\t: op === \"compact\" && rest.length > 0\n\t\t\t\t\t? { customInstructions: rest.join(\" \") }\n\t\t\t\t\t: {};\n\t\tconst { runExtensionOp } = await import(\"../server/extension-ops.ts\");\n\t\tconst result = await runExtensionOp({ socketPath, op, sessionId, payload });\n\t\tif (!result.ok) {\n\t\t\tconsole.error(result.error ?? \"la operación falló\");\n\t\t\tprocess.exitCode = 1;\n\t\t\treturn true;\n\t\t}\n\t\tconsole.log(JSON.stringify(result.data, null, 2));\n\t\treturn true;\n\t}\n\n\tif (args[0] === \"attach\") {\n\t\tconst sessionId = args[1];\n\t\tif (!sessionId) {\n\t\t\tconsole.error(\"Falta el id de sesión. Usa 'ada-cli sessions' para verlos.\");\n\t\t\tprocess.exitCode = 1;\n\t\t\treturn true;\n\t\t}\n\t\tconst { existsSync } = await import(\"node:fs\");\n\t\tif (!existsSync(socketPath)) {\n\t\t\tconsole.error(`No hay ningún servidor de Ada en ${socketPath}. Arráncalo con 'ada-cli serve'.`);\n\t\t\tprocess.exitCode = 1;\n\t\t\treturn true;\n\t\t}\n\t\tconst { attach } = await import(\"../server/attach.ts\");\n\t\ttry {\n\t\t\t// --watch: solo mirar, sin abrir entrada. Útil para vigilar un goal\n\t\t\t// largo sin riesgo de escribir en él por accidente.\n\t\t\tawait attach({ socketPath, sessionId, readOnly: args.includes(\"--watch\") });\n\t\t} catch (error) {\n\t\t\tconsole.error(error instanceof Error ? error.message : String(error));\n\t\t\tprocess.exitCode = 1;\n\t\t}\n\t\treturn true;\n\t}\n\n\t// serve\n\tconst { AdaServerService } = await import(\"../server/pi-server-service.ts\");\n\tconst { serve } = await import(\"../server/serve.ts\");\n\tconst { createAgentSession } = await import(\"../core/sdk.ts\");\n\n\tconst service = new AdaServerService({\n\t\tagentDir,\n\t\tdefaultCwd: process.cwd(),\n\t\tcreateSession: async (options) => {\n\t\t\tconst { session } = await createAgentSession({\n\t\t\t\tcwd: options.cwd,\n\t\t\t\tagentDir,\n\t\t\t\tsessionManager: options.sessionManager as never,\n\t\t\t});\n\t\t\treturn session;\n\t\t},\n\t});\n\n\ttry {\n\t\tconst handle = await serve({\n\t\t\tservice,\n\t\t\tsocketPath,\n\t\t\tonError: (error) => console.error(`[serve] ${error.message}`),\n\t\t});\n\t\t// Reloj del scheduler: los trabajos recurrentes solo existen mientras haya\n\t\t// un proceso vivo que los dispare, y ese proceso es este.\n\t\tconst { Scheduler } = await import(\"../core/scheduler/scheduler.ts\");\n\t\tconst { startSchedulerTick } = await import(\"../server/scheduler-tick.ts\");\n\t\tconst scheduler = new Scheduler(agentDir);\n\t\tstartSchedulerTick({\n\t\t\tscheduler,\n\t\t\tonError: (error) => console.error(`[schedule] ${error.message}`),\n\t\t\tdispatch: async (job) => {\n\t\t\t\t// Sesión propia por job: dos trabajos recurrentes compartiendo\n\t\t\t\t// historial se contaminarían el contexto mutuamente.\n\t\t\t\tconst runtime = await service.createSession({ id: `schedule-${job.id}-${Date.now()}`, cwd: process.cwd() });\n\t\t\t\tawait runtime.prompt({ text: job.prompt });\n\t\t\t\treturn true;\n\t\t\t},\n\t\t});\n\n\t\tconsole.log(`Ada escuchando en ${handle.socketPath}`);\n\t\tconsole.log(\"El trabajo continúa aunque cierres este terminal. Ctrl-C para parar el servidor.\");\n\t\t// Mantener vivo el proceso: el servidor es el dueño de la ejecución.\n\t\tawait new Promise<void>(() => {});\n\t} catch (error) {\n\t\tconsole.error(error instanceof Error ? error.message : String(error));\n\t\tprocess.exitCode = 1;\n\t}\n\treturn true;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"startup-ui.d.ts","sourceRoot":"","sources":["../../src/cli/startup-ui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmC,KAAK,GAAG,EAAiB,MAAM,wBAAwB,CAAC;AAMlG,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAO9D,OAAO,EASN,KAAK,KAAK,EACV,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"startup-ui.d.ts","sourceRoot":"","sources":["../../src/cli/startup-ui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmC,KAAK,GAAG,EAAiB,MAAM,wBAAwB,CAAC;AAMlG,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAO9D,OAAO,EASN,KAAK,KAAK,EACV,MAAM,qCAAqC,CAAC;AA+C7C,wBAAsB,iBAAiB,CAAC,eAAe,EAAE,eAAe,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAW1F;AAED,wBAAsB,gBAAgB,CAAC,eAAe,EAAE,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,CAQrF;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,GAAG,EAAE,eAAe,EAAE,eAAe,GAAG,IAAI,CAG/E;AAkBD;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,YAAY,GAAE,MAA0B,GAAG,OAAO,CAiBzF;AAED,wBAAsB,mBAAmB,CAAC,CAAC,EAC1C,eAAe,EAAE,eAAe,EAChC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAAC,GACzC,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAyBxB;AAED,8DAA8D;AAC9D,wBAAsB,kBAAkB,CAAC,eAAe,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAuCxF;AAED,wBAAsB,gBAAgB,CACrC,eAAe,EAAE,eAAe,EAChC,KAAK,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA4B7B","sourcesContent":["import { ProcessTerminal, setKeybindings, type TUI, TuiMainScreen } from \"@earendil-works/pi-tui\";\nimport { existsSync } from \"fs\";\nimport { APP_NAME, CONFIG_DIR_NAME, ENV_AGENT_DIR, getAgentDir, getSettingsPath, PACKAGE_NAME } from \"../config.ts\";\nimport { areExperimentalFeaturesEnabled } from \"../core/experimental.ts\";\nimport { KeybindingsManager } from \"../core/keybindings.ts\";\nimport { DefaultPackageManager, type ResolvedResource } from \"../core/package-manager.ts\";\nimport { SettingsManager } from \"../core/settings-manager.ts\";\nimport { ExtensionInputComponent } from \"../modes/interactive/components/extension-input.ts\";\nimport { ExtensionSelectorComponent } from \"../modes/interactive/components/extension-selector.ts\";\nimport {\n\tFirstTimeSetupComponent,\n\ttype FirstTimeSetupResult,\n} from \"../modes/interactive/components/first-time-setup.ts\";\nimport {\n\tdetectTerminalBackgroundFromEnv,\n\tdetectTerminalThemeForAuto,\n\tinitTheme,\n\tloadThemeFromPath,\n\tparseAutoThemeSetting,\n\tresolveThemeSetting,\n\tsetRegisteredThemes,\n\tsetTheme,\n\ttype Theme,\n} from \"../modes/interactive/theme/theme.ts\";\n\nconst OFFICIAL_PACKAGE_NAME = \"@earendil-works/pi-coding-agent\";\nconst OFFICIAL_APP_NAME = \"pi\";\nconst OFFICIAL_CONFIG_DIR_NAME = \".pi\";\n\n// Ada (HOILAB) es una distribución oficial propia con identidad explícita.\nconst ADA_PACKAGE_NAME = \"@hoilab/ada-cli\";\nconst ADA_APP_NAME = \"ada-cli\";\nconst ADA_CONFIG_DIR_NAME = \".ada\";\n\ninterface DistributionMetadata {\n\tpackageName: string;\n\tappName: string;\n\tconfigDirName: string;\n}\n\nfunction isOfficialDistribution({ packageName, appName, configDirName }: DistributionMetadata): boolean {\n\tconst isAda = packageName === ADA_PACKAGE_NAME && appName === ADA_APP_NAME && configDirName === ADA_CONFIG_DIR_NAME;\n\treturn (\n\t\tisAda ||\n\t\t(packageName === OFFICIAL_PACKAGE_NAME &&\n\t\t\tappName === OFFICIAL_APP_NAME &&\n\t\t\tconfigDirName === OFFICIAL_CONFIG_DIR_NAME)\n\t);\n}\n\nfunction loadThemes(resources: ResolvedResource[]): Theme[] {\n\tconst themes: Theme[] = [];\n\tconst seen = new Set<string>();\n\tfor (const resource of resources) {\n\t\tif (!resource.enabled) continue;\n\t\ttry {\n\t\t\tconst loadedTheme = loadThemeFromPath(resource.path);\n\t\t\tif (loadedTheme.name) {\n\t\t\t\tif (seen.has(loadedTheme.name)) continue;\n\t\t\t\tseen.add(loadedTheme.name);\n\t\t\t}\n\t\t\tthemes.push(loadedTheme);\n\t\t} catch {\n\t\t\t// Startup prompts should not fail because a theme is broken. The normal\n\t\t\t// resource loader reports theme diagnostics later in startup.\n\t\t}\n\t}\n\treturn themes;\n}\n\nexport async function loadStartupThemes(settingsManager: SettingsManager): Promise<Theme[]> {\n\tconst globalSettingsManager = SettingsManager.inMemory(settingsManager.getGlobalSettings(), {\n\t\tprojectTrusted: false,\n\t});\n\tconst packageManager = new DefaultPackageManager({\n\t\tcwd: process.cwd(),\n\t\tagentDir: getAgentDir(),\n\t\tsettingsManager: globalSettingsManager,\n\t});\n\tconst resolvedPaths = await packageManager.resolve(async () => \"skip\");\n\treturn loadThemes(resolvedPaths.themes);\n}\n\nexport async function createStartupTui(settingsManager: SettingsManager): Promise<TUI> {\n\tsetRegisteredThemes(await loadStartupThemes(settingsManager));\n\tconst terminalTheme = detectTerminalBackgroundFromEnv().theme;\n\tinitTheme(resolveThemeSetting(settingsManager.getThemeSetting(), terminalTheme) ?? terminalTheme);\n\tsetKeybindings(KeybindingsManager.create());\n\tconst ui: TUI = new TuiMainScreen(new ProcessTerminal(), settingsManager.getShowHardwareCursor(), getAgentDir());\n\tui.setClearOnShrink(settingsManager.getClearOnShrink());\n\treturn ui;\n}\n\nexport function startStartupTui(ui: TUI, settingsManager: SettingsManager): void {\n\tui.start();\n\tvoid applyDetectedStartupTheme(ui, settingsManager);\n}\n\nasync function applyDetectedStartupTheme(ui: TUI, settingsManager: SettingsManager): Promise<void> {\n\tconst themeSetting = settingsManager.getThemeSetting();\n\tif (themeSetting && !parseAutoThemeSetting(themeSetting)) return;\n\n\tconst terminalTheme = await detectTerminalThemeForAuto({ ui, timeoutMs: 100 });\n\tsetTheme(resolveThemeSetting(themeSetting, terminalTheme) ?? terminalTheme);\n\tui.invalidate();\n\tui.requestRender();\n}\n\nasync function clearStartupTui(ui: TUI): Promise<void> {\n\tui.clear();\n\tui.requestRender();\n\tawait new Promise((resolve) => setTimeout(resolve, 25));\n}\n\n/**\n * First-time setup runs when all of these hold:\n * - this is the official Pi distribution (not a fork/rebrand)\n * - experimental features are enabled (PI_EXPERIMENTAL=1)\n * - the default agent directory is used (no custom agent dir override)\n * - setup was not completed before (settings.json does not exist)\n */\nexport function shouldRunFirstTimeSetup(settingsPath: string = getSettingsPath()): boolean {\n\tif (\n\t\t!isOfficialDistribution({\n\t\t\tpackageName: PACKAGE_NAME,\n\t\t\tappName: APP_NAME,\n\t\t\tconfigDirName: CONFIG_DIR_NAME,\n\t\t})\n\t) {\n\t\treturn false;\n\t}\n\tif (!areExperimentalFeaturesEnabled()) {\n\t\treturn false;\n\t}\n\tif (process.env[ENV_AGENT_DIR]) {\n\t\treturn false;\n\t}\n\treturn !existsSync(settingsPath);\n}\n\nexport async function showStartupSelector<T>(\n\tsettingsManager: SettingsManager,\n\ttitle: string,\n\toptions: Array<{ label: string; value: T }>,\n): Promise<T | undefined> {\n\tconst ui = await createStartupTui(settingsManager);\n\treturn new Promise((resolve) => {\n\t\tlet settled = false;\n\t\tconst finish = async (result: T | undefined) => {\n\t\t\tif (settled) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsettled = true;\n\t\t\tawait clearStartupTui(ui);\n\t\t\tui.stop();\n\t\t\tresolve(result);\n\t\t};\n\n\t\tconst selector = new ExtensionSelectorComponent(\n\t\t\ttitle,\n\t\t\toptions.map((option) => option.label),\n\t\t\t(option) => void finish(options.find((entry) => entry.label === option)?.value),\n\t\t\t() => void finish(undefined),\n\t\t\t{ tui: ui },\n\t\t);\n\t\tui.addChild(selector);\n\t\tui.setFocus(selector);\n\t\tstartStartupTui(ui, settingsManager);\n\t});\n}\n\n/** Show the first-time setup dialog and persist the result */\nexport async function showFirstTimeSetup(settingsManager: SettingsManager): Promise<void> {\n\tconst ui = await createStartupTui(settingsManager);\n\treturn new Promise((resolve) => {\n\t\tlet settled = false;\n\t\tconst finish = async (result: FirstTimeSetupResult | undefined) => {\n\t\t\tif (settled) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsettled = true;\n\t\t\tif (result) {\n\t\t\t\tsettingsManager.setTheme(result.theme);\n\t\t\t\tsettingsManager.setEnableAnalytics(result.shareAnalytics);\n\t\t\t\tawait settingsManager.flush();\n\t\t\t}\n\t\t\tawait clearStartupTui(ui);\n\t\t\tui.stop();\n\t\t\tresolve();\n\t\t};\n\n\t\tconst showSetup = async () => {\n\t\t\tui.start();\n\t\t\tconst detectedTheme = await detectTerminalThemeForAuto({ ui, timeoutMs: 100 });\n\t\t\tsetTheme(detectedTheme);\n\t\t\tconst component = new FirstTimeSetupComponent({\n\t\t\t\tdetectedTheme,\n\t\t\t\tonThemePreview: (themeName) => {\n\t\t\t\t\tsetTheme(themeName);\n\t\t\t\t\tui.requestRender();\n\t\t\t\t},\n\t\t\t\tonSubmit: (result) => void finish(result),\n\t\t\t\tonCancel: () => void finish(undefined),\n\t\t\t});\n\t\t\tui.addChild(component);\n\t\t\tui.setFocus(component);\n\t\t\tui.requestRender();\n\t\t};\n\n\t\tvoid showSetup();\n\t});\n}\n\nexport async function showStartupInput(\n\tsettingsManager: SettingsManager,\n\ttitle: string,\n\tplaceholder?: string,\n): Promise<string | undefined> {\n\tconst ui = await createStartupTui(settingsManager);\n\treturn new Promise((resolve) => {\n\t\tlet settled = false;\n\t\tconst finish = async (result: string | undefined) => {\n\t\t\tif (settled) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsettled = true;\n\t\t\tinput.dispose();\n\t\t\tawait clearStartupTui(ui);\n\t\t\tui.stop();\n\t\t\tresolve(result);\n\t\t};\n\n\t\tconst input = new ExtensionInputComponent(\n\t\t\ttitle,\n\t\t\tplaceholder,\n\t\t\t(value) => void finish(value),\n\t\t\t() => void finish(undefined),\n\t\t\t{\n\t\t\t\ttui: ui,\n\t\t\t},\n\t\t);\n\t\tui.addChild(input);\n\t\tui.setFocus(input);\n\t\tstartStartupTui(ui, settingsManager);\n\t});\n}\n"]}
|
package/dist/cli/startup-ui.js
CHANGED
|
@@ -12,10 +12,16 @@ import { detectTerminalBackgroundFromEnv, detectTerminalThemeForAuto, initTheme,
|
|
|
12
12
|
const OFFICIAL_PACKAGE_NAME = "@earendil-works/pi-coding-agent";
|
|
13
13
|
const OFFICIAL_APP_NAME = "pi";
|
|
14
14
|
const OFFICIAL_CONFIG_DIR_NAME = ".pi";
|
|
15
|
+
// Ada (HOILAB) es una distribución oficial propia con identidad explícita.
|
|
16
|
+
const ADA_PACKAGE_NAME = "@hoilab/ada-cli";
|
|
17
|
+
const ADA_APP_NAME = "ada-cli";
|
|
18
|
+
const ADA_CONFIG_DIR_NAME = ".ada";
|
|
15
19
|
function isOfficialDistribution({ packageName, appName, configDirName }) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
20
|
+
const isAda = packageName === ADA_PACKAGE_NAME && appName === ADA_APP_NAME && configDirName === ADA_CONFIG_DIR_NAME;
|
|
21
|
+
return (isAda ||
|
|
22
|
+
(packageName === OFFICIAL_PACKAGE_NAME &&
|
|
23
|
+
appName === OFFICIAL_APP_NAME &&
|
|
24
|
+
configDirName === OFFICIAL_CONFIG_DIR_NAME));
|
|
19
25
|
}
|
|
20
26
|
function loadThemes(resources) {
|
|
21
27
|
const themes = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"startup-ui.js","sourceRoot":"","sources":["../../src/cli/startup-ui.ts"],"names":[],"mappings":"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","sourcesContent":["import { ProcessTerminal, setKeybindings, type TUI, TuiMainScreen } from \"@earendil-works/pi-tui\";\nimport { existsSync } from \"fs\";\nimport { APP_NAME, CONFIG_DIR_NAME, ENV_AGENT_DIR, getAgentDir, getSettingsPath, PACKAGE_NAME } from \"../config.ts\";\nimport { areExperimentalFeaturesEnabled } from \"../core/experimental.ts\";\nimport { KeybindingsManager } from \"../core/keybindings.ts\";\nimport { DefaultPackageManager, type ResolvedResource } from \"../core/package-manager.ts\";\nimport { SettingsManager } from \"../core/settings-manager.ts\";\nimport { ExtensionInputComponent } from \"../modes/interactive/components/extension-input.ts\";\nimport { ExtensionSelectorComponent } from \"../modes/interactive/components/extension-selector.ts\";\nimport {\n\tFirstTimeSetupComponent,\n\ttype FirstTimeSetupResult,\n} from \"../modes/interactive/components/first-time-setup.ts\";\nimport {\n\tdetectTerminalBackgroundFromEnv,\n\tdetectTerminalThemeForAuto,\n\tinitTheme,\n\tloadThemeFromPath,\n\tparseAutoThemeSetting,\n\tresolveThemeSetting,\n\tsetRegisteredThemes,\n\tsetTheme,\n\ttype Theme,\n} from \"../modes/interactive/theme/theme.ts\";\n\nconst OFFICIAL_PACKAGE_NAME = \"@earendil-works/pi-coding-agent\";\nconst OFFICIAL_APP_NAME = \"pi\";\nconst OFFICIAL_CONFIG_DIR_NAME = \".pi\";\n\ninterface DistributionMetadata {\n\tpackageName: string;\n\tappName: string;\n\tconfigDirName: string;\n}\n\nfunction isOfficialDistribution({ packageName, appName, configDirName }: DistributionMetadata): boolean {\n\treturn (\n\t\tpackageName === OFFICIAL_PACKAGE_NAME &&\n\t\tappName === OFFICIAL_APP_NAME &&\n\t\tconfigDirName === OFFICIAL_CONFIG_DIR_NAME\n\t);\n}\n\nfunction loadThemes(resources: ResolvedResource[]): Theme[] {\n\tconst themes: Theme[] = [];\n\tconst seen = new Set<string>();\n\tfor (const resource of resources) {\n\t\tif (!resource.enabled) continue;\n\t\ttry {\n\t\t\tconst loadedTheme = loadThemeFromPath(resource.path);\n\t\t\tif (loadedTheme.name) {\n\t\t\t\tif (seen.has(loadedTheme.name)) continue;\n\t\t\t\tseen.add(loadedTheme.name);\n\t\t\t}\n\t\t\tthemes.push(loadedTheme);\n\t\t} catch {\n\t\t\t// Startup prompts should not fail because a theme is broken. The normal\n\t\t\t// resource loader reports theme diagnostics later in startup.\n\t\t}\n\t}\n\treturn themes;\n}\n\nexport async function loadStartupThemes(settingsManager: SettingsManager): Promise<Theme[]> {\n\tconst globalSettingsManager = SettingsManager.inMemory(settingsManager.getGlobalSettings(), {\n\t\tprojectTrusted: false,\n\t});\n\tconst packageManager = new DefaultPackageManager({\n\t\tcwd: process.cwd(),\n\t\tagentDir: getAgentDir(),\n\t\tsettingsManager: globalSettingsManager,\n\t});\n\tconst resolvedPaths = await packageManager.resolve(async () => \"skip\");\n\treturn loadThemes(resolvedPaths.themes);\n}\n\nexport async function createStartupTui(settingsManager: SettingsManager): Promise<TUI> {\n\tsetRegisteredThemes(await loadStartupThemes(settingsManager));\n\tconst terminalTheme = detectTerminalBackgroundFromEnv().theme;\n\tinitTheme(resolveThemeSetting(settingsManager.getThemeSetting(), terminalTheme) ?? terminalTheme);\n\tsetKeybindings(KeybindingsManager.create());\n\tconst ui: TUI = new TuiMainScreen(new ProcessTerminal(), settingsManager.getShowHardwareCursor(), getAgentDir());\n\tui.setClearOnShrink(settingsManager.getClearOnShrink());\n\treturn ui;\n}\n\nexport function startStartupTui(ui: TUI, settingsManager: SettingsManager): void {\n\tui.start();\n\tvoid applyDetectedStartupTheme(ui, settingsManager);\n}\n\nasync function applyDetectedStartupTheme(ui: TUI, settingsManager: SettingsManager): Promise<void> {\n\tconst themeSetting = settingsManager.getThemeSetting();\n\tif (themeSetting && !parseAutoThemeSetting(themeSetting)) return;\n\n\tconst terminalTheme = await detectTerminalThemeForAuto({ ui, timeoutMs: 100 });\n\tsetTheme(resolveThemeSetting(themeSetting, terminalTheme) ?? terminalTheme);\n\tui.invalidate();\n\tui.requestRender();\n}\n\nasync function clearStartupTui(ui: TUI): Promise<void> {\n\tui.clear();\n\tui.requestRender();\n\tawait new Promise((resolve) => setTimeout(resolve, 25));\n}\n\n/**\n * First-time setup runs when all of these hold:\n * - this is the official Pi distribution (not a fork/rebrand)\n * - experimental features are enabled (PI_EXPERIMENTAL=1)\n * - the default agent directory is used (no custom agent dir override)\n * - setup was not completed before (settings.json does not exist)\n */\nexport function shouldRunFirstTimeSetup(settingsPath: string = getSettingsPath()): boolean {\n\tif (\n\t\t!isOfficialDistribution({\n\t\t\tpackageName: PACKAGE_NAME,\n\t\t\tappName: APP_NAME,\n\t\t\tconfigDirName: CONFIG_DIR_NAME,\n\t\t})\n\t) {\n\t\treturn false;\n\t}\n\tif (!areExperimentalFeaturesEnabled()) {\n\t\treturn false;\n\t}\n\tif (process.env[ENV_AGENT_DIR]) {\n\t\treturn false;\n\t}\n\treturn !existsSync(settingsPath);\n}\n\nexport async function showStartupSelector<T>(\n\tsettingsManager: SettingsManager,\n\ttitle: string,\n\toptions: Array<{ label: string; value: T }>,\n): Promise<T | undefined> {\n\tconst ui = await createStartupTui(settingsManager);\n\treturn new Promise((resolve) => {\n\t\tlet settled = false;\n\t\tconst finish = async (result: T | undefined) => {\n\t\t\tif (settled) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsettled = true;\n\t\t\tawait clearStartupTui(ui);\n\t\t\tui.stop();\n\t\t\tresolve(result);\n\t\t};\n\n\t\tconst selector = new ExtensionSelectorComponent(\n\t\t\ttitle,\n\t\t\toptions.map((option) => option.label),\n\t\t\t(option) => void finish(options.find((entry) => entry.label === option)?.value),\n\t\t\t() => void finish(undefined),\n\t\t\t{ tui: ui },\n\t\t);\n\t\tui.addChild(selector);\n\t\tui.setFocus(selector);\n\t\tstartStartupTui(ui, settingsManager);\n\t});\n}\n\n/** Show the first-time setup dialog and persist the result */\nexport async function showFirstTimeSetup(settingsManager: SettingsManager): Promise<void> {\n\tconst ui = await createStartupTui(settingsManager);\n\treturn new Promise((resolve) => {\n\t\tlet settled = false;\n\t\tconst finish = async (result: FirstTimeSetupResult | undefined) => {\n\t\t\tif (settled) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsettled = true;\n\t\t\tif (result) {\n\t\t\t\tsettingsManager.setTheme(result.theme);\n\t\t\t\tsettingsManager.setEnableAnalytics(result.shareAnalytics);\n\t\t\t\tawait settingsManager.flush();\n\t\t\t}\n\t\t\tawait clearStartupTui(ui);\n\t\t\tui.stop();\n\t\t\tresolve();\n\t\t};\n\n\t\tconst showSetup = async () => {\n\t\t\tui.start();\n\t\t\tconst detectedTheme = await detectTerminalThemeForAuto({ ui, timeoutMs: 100 });\n\t\t\tsetTheme(detectedTheme);\n\t\t\tconst component = new FirstTimeSetupComponent({\n\t\t\t\tdetectedTheme,\n\t\t\t\tonThemePreview: (themeName) => {\n\t\t\t\t\tsetTheme(themeName);\n\t\t\t\t\tui.requestRender();\n\t\t\t\t},\n\t\t\t\tonSubmit: (result) => void finish(result),\n\t\t\t\tonCancel: () => void finish(undefined),\n\t\t\t});\n\t\t\tui.addChild(component);\n\t\t\tui.setFocus(component);\n\t\t\tui.requestRender();\n\t\t};\n\n\t\tvoid showSetup();\n\t});\n}\n\nexport async function showStartupInput(\n\tsettingsManager: SettingsManager,\n\ttitle: string,\n\tplaceholder?: string,\n): Promise<string | undefined> {\n\tconst ui = await createStartupTui(settingsManager);\n\treturn new Promise((resolve) => {\n\t\tlet settled = false;\n\t\tconst finish = async (result: string | undefined) => {\n\t\t\tif (settled) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsettled = true;\n\t\t\tinput.dispose();\n\t\t\tawait clearStartupTui(ui);\n\t\t\tui.stop();\n\t\t\tresolve(result);\n\t\t};\n\n\t\tconst input = new ExtensionInputComponent(\n\t\t\ttitle,\n\t\t\tplaceholder,\n\t\t\t(value) => void finish(value),\n\t\t\t() => void finish(undefined),\n\t\t\t{\n\t\t\t\ttui: ui,\n\t\t\t},\n\t\t);\n\t\tui.addChild(input);\n\t\tui.setFocus(input);\n\t\tstartStartupTui(ui, settingsManager);\n\t});\n}\n"]}
|
|
1
|
+
{"version":3,"file":"startup-ui.js","sourceRoot":"","sources":["../../src/cli/startup-ui.ts"],"names":[],"mappings":"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","sourcesContent":["import { ProcessTerminal, setKeybindings, type TUI, TuiMainScreen } from \"@earendil-works/pi-tui\";\nimport { existsSync } from \"fs\";\nimport { APP_NAME, CONFIG_DIR_NAME, ENV_AGENT_DIR, getAgentDir, getSettingsPath, PACKAGE_NAME } from \"../config.ts\";\nimport { areExperimentalFeaturesEnabled } from \"../core/experimental.ts\";\nimport { KeybindingsManager } from \"../core/keybindings.ts\";\nimport { DefaultPackageManager, type ResolvedResource } from \"../core/package-manager.ts\";\nimport { SettingsManager } from \"../core/settings-manager.ts\";\nimport { ExtensionInputComponent } from \"../modes/interactive/components/extension-input.ts\";\nimport { ExtensionSelectorComponent } from \"../modes/interactive/components/extension-selector.ts\";\nimport {\n\tFirstTimeSetupComponent,\n\ttype FirstTimeSetupResult,\n} from \"../modes/interactive/components/first-time-setup.ts\";\nimport {\n\tdetectTerminalBackgroundFromEnv,\n\tdetectTerminalThemeForAuto,\n\tinitTheme,\n\tloadThemeFromPath,\n\tparseAutoThemeSetting,\n\tresolveThemeSetting,\n\tsetRegisteredThemes,\n\tsetTheme,\n\ttype Theme,\n} from \"../modes/interactive/theme/theme.ts\";\n\nconst OFFICIAL_PACKAGE_NAME = \"@earendil-works/pi-coding-agent\";\nconst OFFICIAL_APP_NAME = \"pi\";\nconst OFFICIAL_CONFIG_DIR_NAME = \".pi\";\n\n// Ada (HOILAB) es una distribución oficial propia con identidad explícita.\nconst ADA_PACKAGE_NAME = \"@hoilab/ada-cli\";\nconst ADA_APP_NAME = \"ada-cli\";\nconst ADA_CONFIG_DIR_NAME = \".ada\";\n\ninterface DistributionMetadata {\n\tpackageName: string;\n\tappName: string;\n\tconfigDirName: string;\n}\n\nfunction isOfficialDistribution({ packageName, appName, configDirName }: DistributionMetadata): boolean {\n\tconst isAda = packageName === ADA_PACKAGE_NAME && appName === ADA_APP_NAME && configDirName === ADA_CONFIG_DIR_NAME;\n\treturn (\n\t\tisAda ||\n\t\t(packageName === OFFICIAL_PACKAGE_NAME &&\n\t\t\tappName === OFFICIAL_APP_NAME &&\n\t\t\tconfigDirName === OFFICIAL_CONFIG_DIR_NAME)\n\t);\n}\n\nfunction loadThemes(resources: ResolvedResource[]): Theme[] {\n\tconst themes: Theme[] = [];\n\tconst seen = new Set<string>();\n\tfor (const resource of resources) {\n\t\tif (!resource.enabled) continue;\n\t\ttry {\n\t\t\tconst loadedTheme = loadThemeFromPath(resource.path);\n\t\t\tif (loadedTheme.name) {\n\t\t\t\tif (seen.has(loadedTheme.name)) continue;\n\t\t\t\tseen.add(loadedTheme.name);\n\t\t\t}\n\t\t\tthemes.push(loadedTheme);\n\t\t} catch {\n\t\t\t// Startup prompts should not fail because a theme is broken. The normal\n\t\t\t// resource loader reports theme diagnostics later in startup.\n\t\t}\n\t}\n\treturn themes;\n}\n\nexport async function loadStartupThemes(settingsManager: SettingsManager): Promise<Theme[]> {\n\tconst globalSettingsManager = SettingsManager.inMemory(settingsManager.getGlobalSettings(), {\n\t\tprojectTrusted: false,\n\t});\n\tconst packageManager = new DefaultPackageManager({\n\t\tcwd: process.cwd(),\n\t\tagentDir: getAgentDir(),\n\t\tsettingsManager: globalSettingsManager,\n\t});\n\tconst resolvedPaths = await packageManager.resolve(async () => \"skip\");\n\treturn loadThemes(resolvedPaths.themes);\n}\n\nexport async function createStartupTui(settingsManager: SettingsManager): Promise<TUI> {\n\tsetRegisteredThemes(await loadStartupThemes(settingsManager));\n\tconst terminalTheme = detectTerminalBackgroundFromEnv().theme;\n\tinitTheme(resolveThemeSetting(settingsManager.getThemeSetting(), terminalTheme) ?? terminalTheme);\n\tsetKeybindings(KeybindingsManager.create());\n\tconst ui: TUI = new TuiMainScreen(new ProcessTerminal(), settingsManager.getShowHardwareCursor(), getAgentDir());\n\tui.setClearOnShrink(settingsManager.getClearOnShrink());\n\treturn ui;\n}\n\nexport function startStartupTui(ui: TUI, settingsManager: SettingsManager): void {\n\tui.start();\n\tvoid applyDetectedStartupTheme(ui, settingsManager);\n}\n\nasync function applyDetectedStartupTheme(ui: TUI, settingsManager: SettingsManager): Promise<void> {\n\tconst themeSetting = settingsManager.getThemeSetting();\n\tif (themeSetting && !parseAutoThemeSetting(themeSetting)) return;\n\n\tconst terminalTheme = await detectTerminalThemeForAuto({ ui, timeoutMs: 100 });\n\tsetTheme(resolveThemeSetting(themeSetting, terminalTheme) ?? terminalTheme);\n\tui.invalidate();\n\tui.requestRender();\n}\n\nasync function clearStartupTui(ui: TUI): Promise<void> {\n\tui.clear();\n\tui.requestRender();\n\tawait new Promise((resolve) => setTimeout(resolve, 25));\n}\n\n/**\n * First-time setup runs when all of these hold:\n * - this is the official Pi distribution (not a fork/rebrand)\n * - experimental features are enabled (PI_EXPERIMENTAL=1)\n * - the default agent directory is used (no custom agent dir override)\n * - setup was not completed before (settings.json does not exist)\n */\nexport function shouldRunFirstTimeSetup(settingsPath: string = getSettingsPath()): boolean {\n\tif (\n\t\t!isOfficialDistribution({\n\t\t\tpackageName: PACKAGE_NAME,\n\t\t\tappName: APP_NAME,\n\t\t\tconfigDirName: CONFIG_DIR_NAME,\n\t\t})\n\t) {\n\t\treturn false;\n\t}\n\tif (!areExperimentalFeaturesEnabled()) {\n\t\treturn false;\n\t}\n\tif (process.env[ENV_AGENT_DIR]) {\n\t\treturn false;\n\t}\n\treturn !existsSync(settingsPath);\n}\n\nexport async function showStartupSelector<T>(\n\tsettingsManager: SettingsManager,\n\ttitle: string,\n\toptions: Array<{ label: string; value: T }>,\n): Promise<T | undefined> {\n\tconst ui = await createStartupTui(settingsManager);\n\treturn new Promise((resolve) => {\n\t\tlet settled = false;\n\t\tconst finish = async (result: T | undefined) => {\n\t\t\tif (settled) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsettled = true;\n\t\t\tawait clearStartupTui(ui);\n\t\t\tui.stop();\n\t\t\tresolve(result);\n\t\t};\n\n\t\tconst selector = new ExtensionSelectorComponent(\n\t\t\ttitle,\n\t\t\toptions.map((option) => option.label),\n\t\t\t(option) => void finish(options.find((entry) => entry.label === option)?.value),\n\t\t\t() => void finish(undefined),\n\t\t\t{ tui: ui },\n\t\t);\n\t\tui.addChild(selector);\n\t\tui.setFocus(selector);\n\t\tstartStartupTui(ui, settingsManager);\n\t});\n}\n\n/** Show the first-time setup dialog and persist the result */\nexport async function showFirstTimeSetup(settingsManager: SettingsManager): Promise<void> {\n\tconst ui = await createStartupTui(settingsManager);\n\treturn new Promise((resolve) => {\n\t\tlet settled = false;\n\t\tconst finish = async (result: FirstTimeSetupResult | undefined) => {\n\t\t\tif (settled) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsettled = true;\n\t\t\tif (result) {\n\t\t\t\tsettingsManager.setTheme(result.theme);\n\t\t\t\tsettingsManager.setEnableAnalytics(result.shareAnalytics);\n\t\t\t\tawait settingsManager.flush();\n\t\t\t}\n\t\t\tawait clearStartupTui(ui);\n\t\t\tui.stop();\n\t\t\tresolve();\n\t\t};\n\n\t\tconst showSetup = async () => {\n\t\t\tui.start();\n\t\t\tconst detectedTheme = await detectTerminalThemeForAuto({ ui, timeoutMs: 100 });\n\t\t\tsetTheme(detectedTheme);\n\t\t\tconst component = new FirstTimeSetupComponent({\n\t\t\t\tdetectedTheme,\n\t\t\t\tonThemePreview: (themeName) => {\n\t\t\t\t\tsetTheme(themeName);\n\t\t\t\t\tui.requestRender();\n\t\t\t\t},\n\t\t\t\tonSubmit: (result) => void finish(result),\n\t\t\t\tonCancel: () => void finish(undefined),\n\t\t\t});\n\t\t\tui.addChild(component);\n\t\t\tui.setFocus(component);\n\t\t\tui.requestRender();\n\t\t};\n\n\t\tvoid showSetup();\n\t});\n}\n\nexport async function showStartupInput(\n\tsettingsManager: SettingsManager,\n\ttitle: string,\n\tplaceholder?: string,\n): Promise<string | undefined> {\n\tconst ui = await createStartupTui(settingsManager);\n\treturn new Promise((resolve) => {\n\t\tlet settled = false;\n\t\tconst finish = async (result: string | undefined) => {\n\t\t\tif (settled) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsettled = true;\n\t\t\tinput.dispose();\n\t\t\tawait clearStartupTui(ui);\n\t\t\tui.stop();\n\t\t\tresolve(result);\n\t\t};\n\n\t\tconst input = new ExtensionInputComponent(\n\t\t\ttitle,\n\t\t\tplaceholder,\n\t\t\t(value) => void finish(value),\n\t\t\t() => void finish(undefined),\n\t\t\t{\n\t\t\t\ttui: ui,\n\t\t\t},\n\t\t);\n\t\tui.addChild(input);\n\t\tui.setFocus(input);\n\t\tstartStartupTui(ui, settingsManager);\n\t});\n}\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ada-cli telegram` — puente de Telegram sobre las sesiones residentes.
|
|
3
|
+
*
|
|
4
|
+
* El token NUNCA se pasa por argumento ni se escribe en un fichero de config:
|
|
5
|
+
* sale del Vault cifrado (`/vault add telegram-bot`) o de la variable de
|
|
6
|
+
* entorno. Un token de bot da control total sobre la máquina a través del
|
|
7
|
+
* puente, así que merece el mismo trato que cualquier otra credencial.
|
|
8
|
+
*
|
|
9
|
+
* Requiere `ada-cli serve` levantado. No arranca un servidor propio a propósito:
|
|
10
|
+
* dos dueños del mismo socket es exactamente el problema que el paquete de
|
|
11
|
+
* referencia resuelve con un bus leader/follower entero, y que aquí no existe
|
|
12
|
+
* porque el servidor es el único dueño por construcción.
|
|
13
|
+
*/
|
|
14
|
+
export declare function isTelegramCommand(args: string[]): boolean;
|
|
15
|
+
export declare function runTelegramCommand(args: string[]): Promise<boolean>;
|
|
16
|
+
/** Ruta del estado, expuesta para diagnóstico. */
|
|
17
|
+
export declare function telegramStatePath(agentDir: string): string;
|
|
18
|
+
//# sourceMappingURL=telegram-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telegram-command.d.ts","sourceRoot":"","sources":["../../src/cli/telegram-command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAEzD;AAkBD,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CA2GzE;AAED,mDAAkD;AAClD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE1D","sourcesContent":["/**\n * `ada-cli telegram` — puente de Telegram sobre las sesiones residentes.\n *\n * El token NUNCA se pasa por argumento ni se escribe en un fichero de config:\n * sale del Vault cifrado (`/vault add telegram-bot`) o de la variable de\n * entorno. Un token de bot da control total sobre la máquina a través del\n * puente, así que merece el mismo trato que cualquier otra credencial.\n *\n * Requiere `ada-cli serve` levantado. No arranca un servidor propio a propósito:\n * dos dueños del mismo socket es exactamente el problema que el paquete de\n * referencia resuelve con un bus leader/follower entero, y que aquí no existe\n * porque el servidor es el único dueño por construcción.\n */\n\nimport { join } from \"node:path\";\nimport { getAgentDir } from \"../config.ts\";\n\nexport function isTelegramCommand(args: string[]): boolean {\n\treturn args[0] === \"telegram\";\n}\n\nfunction ayuda(): void {\n\tconsole.log(`Uso:\n ada-cli telegram Conecta el bot y enruta a las sesiones del servidor\n ada-cli telegram --status Muestra a quién está vinculado\n ada-cli telegram --unpair Olvida el emparejamiento\n\nEl token sale del vault (\\`/vault add telegram-bot\\`) o de TELEGRAM_BOT_TOKEN.\nNunca se pasa por argumento: quedaría en el historial del shell.\n\nNecesita 'ada-cli serve' corriendo. El primero que escriba al bot queda vinculado\ny nadie más puede usarlo.\n\nLas aprobaciones de permisos NO se conceden desde el chat: se piden donde puedas\nver qué apruebas.`);\n}\n\nexport async function runTelegramCommand(args: string[]): Promise<boolean> {\n\tif (!isTelegramCommand(args)) return false;\n\tif (args.includes(\"--help\") || args.includes(\"-h\")) {\n\t\tayuda();\n\t\treturn true;\n\t}\n\n\tconst agentDir = getAgentDir();\n\tconst { TelegramStore } = await import(\"../telegram/journal.ts\");\n\tconst store = new TelegramStore(agentDir);\n\n\tif (args.includes(\"--status\")) {\n\t\tconst s = store.snapshot();\n\t\tconsole.log(\n\t\t\ts.allowedUserId === undefined\n\t\t\t\t? \"Sin vincular. Arranca 'ada-cli telegram' y escribe al bot.\"\n\t\t\t\t: `Vinculado al usuario ${s.allowedUserId} desde ${s.pairedAt}.\\nSesión activa: ${s.sessionId?.slice(0, 8) ?? \"ninguna\"}`,\n\t\t);\n\t\treturn true;\n\t}\n\n\tif (args.includes(\"--unpair\")) {\n\t\tstore.desemparejar();\n\t\tconsole.log(\"Emparejamiento olvidado.\");\n\t\treturn true;\n\t}\n\n\t// Token: vault primero, entorno como alternativa para CI.\n\tconst { DefaultResourceLoader } = await import(\"../core/resource-loader.ts\");\n\tconst { SettingsManager } = await import(\"../core/settings-manager.ts\");\n\tconst cwd = process.cwd();\n\tconst loader = new DefaultResourceLoader({ cwd, agentDir, settingsManager: SettingsManager.create(cwd, agentDir) });\n\tlet token: string | undefined;\n\ttry {\n\t\ttoken = loader.getVaultManager()?.getSecret(\"telegram-bot\") ?? undefined;\n\t} catch {\n\t\t// Vault bloqueado: se cae al entorno, nunca a texto plano en disco.\n\t}\n\ttoken ??= process.env.TELEGRAM_BOT_TOKEN;\n\tif (!token) {\n\t\tconsole.error(\"Sin token. Guárdalo en el vault con `/vault add telegram-bot` o define TELEGRAM_BOT_TOKEN.\");\n\t\tprocess.exitCode = 1;\n\t\treturn true;\n\t}\n\n\tconst socketIndex = args.indexOf(\"--socket\");\n\tconst { defaultSocketPath } = await import(\"../server/serve.ts\");\n\tconst socketPath = socketIndex >= 0 && args[socketIndex + 1] ? args[socketIndex + 1] : defaultSocketPath(agentDir);\n\tconst { existsSync } = await import(\"node:fs\");\n\tif (!existsSync(socketPath)) {\n\t\tconsole.error(`No hay servidor de Ada en ${socketPath}. Arráncalo con 'ada-cli serve'.`);\n\t\tprocess.exitCode = 1;\n\t\treturn true;\n\t}\n\n\tconst { TelegramApi } = await import(\"../telegram/api.ts\");\n\tconst { TelegramBridge } = await import(\"../telegram/bridge.ts\");\n\tconst { crearServidorPuente } = await import(\"../telegram/servidor.ts\");\n\n\tconst api = new TelegramApi({ token });\n\tlet identidad: string;\n\ttry {\n\t\tconst yo = await api.getMe();\n\t\tidentidad = yo.username ? `@${yo.username}` : String(yo.id);\n\t} catch (error) {\n\t\t// Fallar aquí y no dentro del bucle: un token inválido debe decirse al\n\t\t// arrancar, no descubrirse tras el primer mensaje perdido.\n\t\tconsole.error(`El token no es válido: ${error instanceof Error ? error.message : String(error)}`);\n\t\tprocess.exitCode = 1;\n\t\treturn true;\n\t}\n\n\tconst bridge = new TelegramBridge({\n\t\tapi,\n\t\tstore,\n\t\tservidor: await crearServidorPuente(socketPath),\n\t\tonError: (error) => console.error(`[telegram] ${error.message}`),\n\t});\n\n\tconst estado = store.snapshot();\n\tconsole.log(`Bot ${identidad} escuchando.`);\n\tconsole.log(\n\t\testado.allowedUserId === undefined\n\t\t\t? \"Sin vincular: el PRIMERO que escriba al bot quedará vinculado.\"\n\t\t\t: `Vinculado al usuario ${estado.allowedUserId}.`,\n\t);\n\tconsole.log(\"Ctrl-C para parar.\");\n\n\tconst controller = new AbortController();\n\tfor (const señal of [\"SIGINT\", \"SIGTERM\"] as const) {\n\t\tprocess.once(señal, () => {\n\t\t\tcontroller.abort();\n\t\t\tprocess.exit(0);\n\t\t});\n\t}\n\twhile (!controller.signal.aborted) {\n\t\ttry {\n\t\t\tawait bridge.tick(controller.signal);\n\t\t} catch (error) {\n\t\t\tif (controller.signal.aborted) break;\n\t\t\t// Un fallo de red no debe tumbar el puente: se espera y se reintenta.\n\t\t\t// Sin esta espera, un corte de red sería un bucle de peticiones.\n\t\t\tconsole.error(`[telegram] ${error instanceof Error ? error.message : String(error)}`);\n\t\t\tawait new Promise((r) => setTimeout(r, 3000));\n\t\t}\n\t}\n\treturn true;\n}\n\n/** Ruta del estado, expuesta para diagnóstico. */\nexport function telegramStatePath(agentDir: string): string {\n\treturn join(agentDir, \"telegram\", \"state.json\");\n}\n"]}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ada-cli telegram` — puente de Telegram sobre las sesiones residentes.
|
|
3
|
+
*
|
|
4
|
+
* El token NUNCA se pasa por argumento ni se escribe en un fichero de config:
|
|
5
|
+
* sale del Vault cifrado (`/vault add telegram-bot`) o de la variable de
|
|
6
|
+
* entorno. Un token de bot da control total sobre la máquina a través del
|
|
7
|
+
* puente, así que merece el mismo trato que cualquier otra credencial.
|
|
8
|
+
*
|
|
9
|
+
* Requiere `ada-cli serve` levantado. No arranca un servidor propio a propósito:
|
|
10
|
+
* dos dueños del mismo socket es exactamente el problema que el paquete de
|
|
11
|
+
* referencia resuelve con un bus leader/follower entero, y que aquí no existe
|
|
12
|
+
* porque el servidor es el único dueño por construcción.
|
|
13
|
+
*/
|
|
14
|
+
import { join } from "node:path";
|
|
15
|
+
import { getAgentDir } from "../config.js";
|
|
16
|
+
export function isTelegramCommand(args) {
|
|
17
|
+
return args[0] === "telegram";
|
|
18
|
+
}
|
|
19
|
+
function ayuda() {
|
|
20
|
+
console.log(`Uso:
|
|
21
|
+
ada-cli telegram Conecta el bot y enruta a las sesiones del servidor
|
|
22
|
+
ada-cli telegram --status Muestra a quién está vinculado
|
|
23
|
+
ada-cli telegram --unpair Olvida el emparejamiento
|
|
24
|
+
|
|
25
|
+
El token sale del vault (\`/vault add telegram-bot\`) o de TELEGRAM_BOT_TOKEN.
|
|
26
|
+
Nunca se pasa por argumento: quedaría en el historial del shell.
|
|
27
|
+
|
|
28
|
+
Necesita 'ada-cli serve' corriendo. El primero que escriba al bot queda vinculado
|
|
29
|
+
y nadie más puede usarlo.
|
|
30
|
+
|
|
31
|
+
Las aprobaciones de permisos NO se conceden desde el chat: se piden donde puedas
|
|
32
|
+
ver qué apruebas.`);
|
|
33
|
+
}
|
|
34
|
+
export async function runTelegramCommand(args) {
|
|
35
|
+
if (!isTelegramCommand(args))
|
|
36
|
+
return false;
|
|
37
|
+
if (args.includes("--help") || args.includes("-h")) {
|
|
38
|
+
ayuda();
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
const agentDir = getAgentDir();
|
|
42
|
+
const { TelegramStore } = await import("../telegram/journal.js");
|
|
43
|
+
const store = new TelegramStore(agentDir);
|
|
44
|
+
if (args.includes("--status")) {
|
|
45
|
+
const s = store.snapshot();
|
|
46
|
+
console.log(s.allowedUserId === undefined
|
|
47
|
+
? "Sin vincular. Arranca 'ada-cli telegram' y escribe al bot."
|
|
48
|
+
: `Vinculado al usuario ${s.allowedUserId} desde ${s.pairedAt}.\nSesión activa: ${s.sessionId?.slice(0, 8) ?? "ninguna"}`);
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
if (args.includes("--unpair")) {
|
|
52
|
+
store.desemparejar();
|
|
53
|
+
console.log("Emparejamiento olvidado.");
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
// Token: vault primero, entorno como alternativa para CI.
|
|
57
|
+
const { DefaultResourceLoader } = await import("../core/resource-loader.js");
|
|
58
|
+
const { SettingsManager } = await import("../core/settings-manager.js");
|
|
59
|
+
const cwd = process.cwd();
|
|
60
|
+
const loader = new DefaultResourceLoader({ cwd, agentDir, settingsManager: SettingsManager.create(cwd, agentDir) });
|
|
61
|
+
let token;
|
|
62
|
+
try {
|
|
63
|
+
token = loader.getVaultManager()?.getSecret("telegram-bot") ?? undefined;
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
// Vault bloqueado: se cae al entorno, nunca a texto plano en disco.
|
|
67
|
+
}
|
|
68
|
+
token ??= process.env.TELEGRAM_BOT_TOKEN;
|
|
69
|
+
if (!token) {
|
|
70
|
+
console.error("Sin token. Guárdalo en el vault con `/vault add telegram-bot` o define TELEGRAM_BOT_TOKEN.");
|
|
71
|
+
process.exitCode = 1;
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
const socketIndex = args.indexOf("--socket");
|
|
75
|
+
const { defaultSocketPath } = await import("../server/serve.js");
|
|
76
|
+
const socketPath = socketIndex >= 0 && args[socketIndex + 1] ? args[socketIndex + 1] : defaultSocketPath(agentDir);
|
|
77
|
+
const { existsSync } = await import("node:fs");
|
|
78
|
+
if (!existsSync(socketPath)) {
|
|
79
|
+
console.error(`No hay servidor de Ada en ${socketPath}. Arráncalo con 'ada-cli serve'.`);
|
|
80
|
+
process.exitCode = 1;
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
const { TelegramApi } = await import("../telegram/api.js");
|
|
84
|
+
const { TelegramBridge } = await import("../telegram/bridge.js");
|
|
85
|
+
const { crearServidorPuente } = await import("../telegram/servidor.js");
|
|
86
|
+
const api = new TelegramApi({ token });
|
|
87
|
+
let identidad;
|
|
88
|
+
try {
|
|
89
|
+
const yo = await api.getMe();
|
|
90
|
+
identidad = yo.username ? `@${yo.username}` : String(yo.id);
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
// Fallar aquí y no dentro del bucle: un token inválido debe decirse al
|
|
94
|
+
// arrancar, no descubrirse tras el primer mensaje perdido.
|
|
95
|
+
console.error(`El token no es válido: ${error instanceof Error ? error.message : String(error)}`);
|
|
96
|
+
process.exitCode = 1;
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
const bridge = new TelegramBridge({
|
|
100
|
+
api,
|
|
101
|
+
store,
|
|
102
|
+
servidor: await crearServidorPuente(socketPath),
|
|
103
|
+
onError: (error) => console.error(`[telegram] ${error.message}`),
|
|
104
|
+
});
|
|
105
|
+
const estado = store.snapshot();
|
|
106
|
+
console.log(`Bot ${identidad} escuchando.`);
|
|
107
|
+
console.log(estado.allowedUserId === undefined
|
|
108
|
+
? "Sin vincular: el PRIMERO que escriba al bot quedará vinculado."
|
|
109
|
+
: `Vinculado al usuario ${estado.allowedUserId}.`);
|
|
110
|
+
console.log("Ctrl-C para parar.");
|
|
111
|
+
const controller = new AbortController();
|
|
112
|
+
for (const señal of ["SIGINT", "SIGTERM"]) {
|
|
113
|
+
process.once(señal, () => {
|
|
114
|
+
controller.abort();
|
|
115
|
+
process.exit(0);
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
while (!controller.signal.aborted) {
|
|
119
|
+
try {
|
|
120
|
+
await bridge.tick(controller.signal);
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
if (controller.signal.aborted)
|
|
124
|
+
break;
|
|
125
|
+
// Un fallo de red no debe tumbar el puente: se espera y se reintenta.
|
|
126
|
+
// Sin esta espera, un corte de red sería un bucle de peticiones.
|
|
127
|
+
console.error(`[telegram] ${error instanceof Error ? error.message : String(error)}`);
|
|
128
|
+
await new Promise((r) => setTimeout(r, 3000));
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return true;
|
|
132
|
+
}
|
|
133
|
+
/** Ruta del estado, expuesta para diagnóstico. */
|
|
134
|
+
export function telegramStatePath(agentDir) {
|
|
135
|
+
return join(agentDir, "telegram", "state.json");
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=telegram-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telegram-command.js","sourceRoot":"","sources":["../../src/cli/telegram-command.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `ada-cli telegram` — puente de Telegram sobre las sesiones residentes.\n *\n * El token NUNCA se pasa por argumento ni se escribe en un fichero de config:\n * sale del Vault cifrado (`/vault add telegram-bot`) o de la variable de\n * entorno. Un token de bot da control total sobre la máquina a través del\n * puente, así que merece el mismo trato que cualquier otra credencial.\n *\n * Requiere `ada-cli serve` levantado. No arranca un servidor propio a propósito:\n * dos dueños del mismo socket es exactamente el problema que el paquete de\n * referencia resuelve con un bus leader/follower entero, y que aquí no existe\n * porque el servidor es el único dueño por construcción.\n */\n\nimport { join } from \"node:path\";\nimport { getAgentDir } from \"../config.ts\";\n\nexport function isTelegramCommand(args: string[]): boolean {\n\treturn args[0] === \"telegram\";\n}\n\nfunction ayuda(): void {\n\tconsole.log(`Uso:\n ada-cli telegram Conecta el bot y enruta a las sesiones del servidor\n ada-cli telegram --status Muestra a quién está vinculado\n ada-cli telegram --unpair Olvida el emparejamiento\n\nEl token sale del vault (\\`/vault add telegram-bot\\`) o de TELEGRAM_BOT_TOKEN.\nNunca se pasa por argumento: quedaría en el historial del shell.\n\nNecesita 'ada-cli serve' corriendo. El primero que escriba al bot queda vinculado\ny nadie más puede usarlo.\n\nLas aprobaciones de permisos NO se conceden desde el chat: se piden donde puedas\nver qué apruebas.`);\n}\n\nexport async function runTelegramCommand(args: string[]): Promise<boolean> {\n\tif (!isTelegramCommand(args)) return false;\n\tif (args.includes(\"--help\") || args.includes(\"-h\")) {\n\t\tayuda();\n\t\treturn true;\n\t}\n\n\tconst agentDir = getAgentDir();\n\tconst { TelegramStore } = await import(\"../telegram/journal.ts\");\n\tconst store = new TelegramStore(agentDir);\n\n\tif (args.includes(\"--status\")) {\n\t\tconst s = store.snapshot();\n\t\tconsole.log(\n\t\t\ts.allowedUserId === undefined\n\t\t\t\t? \"Sin vincular. Arranca 'ada-cli telegram' y escribe al bot.\"\n\t\t\t\t: `Vinculado al usuario ${s.allowedUserId} desde ${s.pairedAt}.\\nSesión activa: ${s.sessionId?.slice(0, 8) ?? \"ninguna\"}`,\n\t\t);\n\t\treturn true;\n\t}\n\n\tif (args.includes(\"--unpair\")) {\n\t\tstore.desemparejar();\n\t\tconsole.log(\"Emparejamiento olvidado.\");\n\t\treturn true;\n\t}\n\n\t// Token: vault primero, entorno como alternativa para CI.\n\tconst { DefaultResourceLoader } = await import(\"../core/resource-loader.ts\");\n\tconst { SettingsManager } = await import(\"../core/settings-manager.ts\");\n\tconst cwd = process.cwd();\n\tconst loader = new DefaultResourceLoader({ cwd, agentDir, settingsManager: SettingsManager.create(cwd, agentDir) });\n\tlet token: string | undefined;\n\ttry {\n\t\ttoken = loader.getVaultManager()?.getSecret(\"telegram-bot\") ?? undefined;\n\t} catch {\n\t\t// Vault bloqueado: se cae al entorno, nunca a texto plano en disco.\n\t}\n\ttoken ??= process.env.TELEGRAM_BOT_TOKEN;\n\tif (!token) {\n\t\tconsole.error(\"Sin token. Guárdalo en el vault con `/vault add telegram-bot` o define TELEGRAM_BOT_TOKEN.\");\n\t\tprocess.exitCode = 1;\n\t\treturn true;\n\t}\n\n\tconst socketIndex = args.indexOf(\"--socket\");\n\tconst { defaultSocketPath } = await import(\"../server/serve.ts\");\n\tconst socketPath = socketIndex >= 0 && args[socketIndex + 1] ? args[socketIndex + 1] : defaultSocketPath(agentDir);\n\tconst { existsSync } = await import(\"node:fs\");\n\tif (!existsSync(socketPath)) {\n\t\tconsole.error(`No hay servidor de Ada en ${socketPath}. Arráncalo con 'ada-cli serve'.`);\n\t\tprocess.exitCode = 1;\n\t\treturn true;\n\t}\n\n\tconst { TelegramApi } = await import(\"../telegram/api.ts\");\n\tconst { TelegramBridge } = await import(\"../telegram/bridge.ts\");\n\tconst { crearServidorPuente } = await import(\"../telegram/servidor.ts\");\n\n\tconst api = new TelegramApi({ token });\n\tlet identidad: string;\n\ttry {\n\t\tconst yo = await api.getMe();\n\t\tidentidad = yo.username ? `@${yo.username}` : String(yo.id);\n\t} catch (error) {\n\t\t// Fallar aquí y no dentro del bucle: un token inválido debe decirse al\n\t\t// arrancar, no descubrirse tras el primer mensaje perdido.\n\t\tconsole.error(`El token no es válido: ${error instanceof Error ? error.message : String(error)}`);\n\t\tprocess.exitCode = 1;\n\t\treturn true;\n\t}\n\n\tconst bridge = new TelegramBridge({\n\t\tapi,\n\t\tstore,\n\t\tservidor: await crearServidorPuente(socketPath),\n\t\tonError: (error) => console.error(`[telegram] ${error.message}`),\n\t});\n\n\tconst estado = store.snapshot();\n\tconsole.log(`Bot ${identidad} escuchando.`);\n\tconsole.log(\n\t\testado.allowedUserId === undefined\n\t\t\t? \"Sin vincular: el PRIMERO que escriba al bot quedará vinculado.\"\n\t\t\t: `Vinculado al usuario ${estado.allowedUserId}.`,\n\t);\n\tconsole.log(\"Ctrl-C para parar.\");\n\n\tconst controller = new AbortController();\n\tfor (const señal of [\"SIGINT\", \"SIGTERM\"] as const) {\n\t\tprocess.once(señal, () => {\n\t\t\tcontroller.abort();\n\t\t\tprocess.exit(0);\n\t\t});\n\t}\n\twhile (!controller.signal.aborted) {\n\t\ttry {\n\t\t\tawait bridge.tick(controller.signal);\n\t\t} catch (error) {\n\t\t\tif (controller.signal.aborted) break;\n\t\t\t// Un fallo de red no debe tumbar el puente: se espera y se reintenta.\n\t\t\t// Sin esta espera, un corte de red sería un bucle de peticiones.\n\t\t\tconsole.error(`[telegram] ${error instanceof Error ? error.message : String(error)}`);\n\t\t\tawait new Promise((r) => setTimeout(r, 3000));\n\t\t}\n\t}\n\treturn true;\n}\n\n/** Ruta del estado, expuesta para diagnóstico. */\nexport function telegramStatePath(agentDir: string): string {\n\treturn join(agentDir, \"telegram\", \"state.json\");\n}\n"]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ada-cli telemetria` — enseñar y ejercitar la exportación OTLP.
|
|
3
|
+
*
|
|
4
|
+
* Existe porque un exportador que nadie puede mirar es un exportador en el que
|
|
5
|
+
* nadie confía. Un equipo de plataforma que apunta Ada a su colector necesita
|
|
6
|
+
* contestar tres cosas sin leer código:
|
|
7
|
+
*
|
|
8
|
+
* · ¿está configurada, y a dónde va cada señal?
|
|
9
|
+
* · ¿qué sale exactamente de esta máquina? ← la que de verdad importa
|
|
10
|
+
* · ¿llega al colector?
|
|
11
|
+
*
|
|
12
|
+
* La segunda es la que justifica el subcomando. La propiedad que vendemos —que
|
|
13
|
+
* exportamos FORMA y nunca CONTENIDO— no se demuestra con una frase en el
|
|
14
|
+
* README: se demuestra enseñando el cuerpo JSON que se enviaría, tomado del
|
|
15
|
+
* libro real de esta instalación, para que quien audite lo lea entero.
|
|
16
|
+
*
|
|
17
|
+
* El competidor exporta OTLP con una variable para capturar el contenido de los
|
|
18
|
+
* mensajes. Nosotros no tenemos esa variable, y aquí se puede comprobar.
|
|
19
|
+
*/
|
|
20
|
+
export declare function esComandoTelemetria(args: string[]): boolean;
|
|
21
|
+
export declare function runTelemetriaCommand(args: string[], agentDir: string): Promise<boolean>;
|
|
22
|
+
//# sourceMappingURL=telemetria-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetria-command.d.ts","sourceRoot":"","sources":["../../src/cli/telemetria-command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAyBH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAE3D;AAQD,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAkF7F","sourcesContent":["/**\n * `ada-cli telemetria` — enseñar y ejercitar la exportación OTLP.\n *\n * Existe porque un exportador que nadie puede mirar es un exportador en el que\n * nadie confía. Un equipo de plataforma que apunta Ada a su colector necesita\n * contestar tres cosas sin leer código:\n *\n * · ¿está configurada, y a dónde va cada señal?\n * · ¿qué sale exactamente de esta máquina? ← la que de verdad importa\n * · ¿llega al colector?\n *\n * La segunda es la que justifica el subcomando. La propiedad que vendemos —que\n * exportamos FORMA y nunca CONTENIDO— no se demuestra con una frase en el\n * README: se demuestra enseñando el cuerpo JSON que se enviaría, tomado del\n * libro real de esta instalación, para que quien audite lo lea entero.\n *\n * El competidor exporta OTLP con una variable para capturar el contenido de los\n * mensajes. Nosotros no tenemos esa variable, y aquí se puede comprobar.\n */\n\nimport { LibroDeSesion } from \"../core/audit/libro.ts\";\nimport { CLAVE_DESCARTADOS, configuracionOtlp, cuerpoOtlp } from \"../core/telemetria/otlp.ts\";\n\nconst AYUDA = `Uso:\n ada-cli telemetria Estado de la exportación OTLP\n ada-cli telemetria --cuerpo [--limite N]\n Enseña el JSON que se enviaría (por defecto 20 entradas)\n ada-cli telemetria --enviar [--limite N]\n Envía de verdad al colector configurado\n\nVariables (contrato estándar de OpenTelemetry):\n OTEL_EXPORTER_OTLP_ENDPOINT Base para todas las señales\n OTEL_EXPORTER_OTLP_PROTOCOL http/json | http/protobuf\n OTEL_EXPORTER_OTLP_TRACES_ENDPOINT y _LOGS_ / _METRICS_, con sus _PROTOCOL\n\nLo que sale son ATRIBUTOS DE FORMA de una lista blanca explícita: tipo de\nsuceso, herramienta, código de salida, duración, bytes, hashes, dominio de\ndestino, proveedor, modelo y número de tokens.\n\nNunca sale contenido: ni el texto de un comando, ni un fichero, ni un prompt,\nni una respuesta del modelo. No hay variable de entorno que lo active, a\npropósito. \\`--cuerpo\\` está para que puedas comprobarlo tú.`;\n\nexport function esComandoTelemetria(args: string[]): boolean {\n\treturn args[0] === \"telemetria\" || args[0] === \"telemetry\";\n}\n\nfunction limiteDe(args: string[]): number {\n\tconst i = args.indexOf(\"--limite\");\n\tconst n = i >= 0 ? Number(args[i + 1]) : 20;\n\treturn Number.isFinite(n) && n > 0 ? n : 20;\n}\n\nexport async function runTelemetriaCommand(args: string[], agentDir: string): Promise<boolean> {\n\tif (!esComandoTelemetria(args)) return false;\n\tif (args.includes(\"--help\") || args.includes(\"-h\")) {\n\t\tconsole.log(AYUDA);\n\t\treturn true;\n\t}\n\n\tconst config = configuracionOtlp();\n\tconst libro = new LibroDeSesion(agentDir, \"cli\");\n\n\tif (args.includes(\"--cuerpo\") || args.includes(\"--enviar\")) {\n\t\tconst entradas = [...(await libro.leer(limiteDe(args)))].reverse();\n\t\tif (entradas.length === 0) {\n\t\t\t// Ni bien ni mal: no hay nada que exportar. Decirlo así evita que un\n\t\t\t// cuerpo vacío se lea como «no sale nada de aquí».\n\t\t\tconsole.log(\"El libro está vacío: no hay nada que exportar todavía.\");\n\t\t\treturn true;\n\t\t}\n\t\tconst cuerpo = cuerpoOtlp(entradas);\n\n\t\tif (args.includes(\"--cuerpo\")) {\n\t\t\tconsole.log(JSON.stringify(cuerpo, null, 2));\n\t\t\t// El recuento va a stderr para que `--cuerpo` siga siendo JSON puro y se\n\t\t\t// pueda encauzar a `jq` sin filtrar la nota.\n\t\t\tconst descartados = JSON.stringify(cuerpo).split(`\"${CLAVE_DESCARTADOS}\"`).length - 1;\n\t\t\tconsole.error(\n\t\t\t\t`\\n${entradas.length} entrada(s). Cada span lleva \"${CLAVE_DESCARTADOS}\" (${descartados} spans) ` +\n\t\t\t\t\t\"con cuántos atributos se dejaron fuera por no estar en la lista blanca.\",\n\t\t\t);\n\t\t\treturn true;\n\t\t}\n\n\t\tif (config.estado !== \"configurada\") {\n\t\t\tconsole.error(`No se puede enviar: ${config.motivo}.`);\n\t\t\tconsole.error(\"Ejecuta `ada-cli telemetria` para ver qué falta.\");\n\t\t\tprocess.exitCode = 1;\n\t\t\treturn true;\n\t\t}\n\t\tconst destino = config.porSenal.trazas;\n\t\tif (!destino) {\n\t\t\tconsole.error(\"No hay endpoint de trazas configurado (OTEL_EXPORTER_OTLP_TRACES_ENDPOINT).\");\n\t\t\tprocess.exitCode = 1;\n\t\t\treturn true;\n\t\t}\n\t\ttry {\n\t\t\tconst r = await fetch(`${destino.endpoint.replace(/\\/$/, \"\")}/v1/traces`, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: { \"content-type\": \"application/json\" },\n\t\t\t\tbody: JSON.stringify(cuerpo),\n\t\t\t\tsignal: AbortSignal.timeout(15_000),\n\t\t\t});\n\t\t\t// Un 2xx del colector es lo único que cuenta como enviado. Un 4xx con\n\t\t\t// cuerpo de error se ha leído más de una vez como éxito por mirar solo\n\t\t\t// si `fetch` lanzó.\n\t\t\tif (!r.ok) {\n\t\t\t\tconsole.error(`El colector contestó ${r.status} ${r.statusText}.`);\n\t\t\t\tprocess.exitCode = 1;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tconsole.log(`Enviadas ${entradas.length} entrada(s) a ${destino.endpoint} (${destino.protocolo}).`);\n\t\t} catch (error) {\n\t\t\tconsole.error(`No se ha podido enviar a ${destino.endpoint}: ${(error as Error).message}`);\n\t\t\tprocess.exitCode = 1;\n\t\t}\n\t\treturn true;\n\t}\n\n\tconsole.log(`Estado: ${config.estado}`);\n\tif (config.motivo) console.log(` ${config.motivo}`);\n\tfor (const [senal, destino] of Object.entries(config.porSenal)) {\n\t\tconsole.log(` ${senal.padEnd(9)} -> ${destino.endpoint} (${destino.protocolo})`);\n\t}\n\tif (config.estado === \"invalida\") process.exitCode = 1;\n\n\tconsole.log(\"\\nQué sale: atributos de FORMA de una lista blanca explícita.\");\n\tconsole.log(\"Qué NO sale: comandos, ficheros, prompts ni respuestas del modelo.\");\n\tconsole.log(\"Compruébalo tú: ada-cli telemetria --cuerpo\");\n\n\t// Se dice de dónde salen los datos: un exportador que no nombra su fuente\n\t// obliga a leer código para saber qué está mandando.\n\tconsole.log(`\\nFuente: el libro de sesión de ${agentDir} (el mismo que audita \\`ada-cli audit\\`).`);\n\treturn true;\n}\n"]}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ada-cli telemetria` — enseñar y ejercitar la exportación OTLP.
|
|
3
|
+
*
|
|
4
|
+
* Existe porque un exportador que nadie puede mirar es un exportador en el que
|
|
5
|
+
* nadie confía. Un equipo de plataforma que apunta Ada a su colector necesita
|
|
6
|
+
* contestar tres cosas sin leer código:
|
|
7
|
+
*
|
|
8
|
+
* · ¿está configurada, y a dónde va cada señal?
|
|
9
|
+
* · ¿qué sale exactamente de esta máquina? ← la que de verdad importa
|
|
10
|
+
* · ¿llega al colector?
|
|
11
|
+
*
|
|
12
|
+
* La segunda es la que justifica el subcomando. La propiedad que vendemos —que
|
|
13
|
+
* exportamos FORMA y nunca CONTENIDO— no se demuestra con una frase en el
|
|
14
|
+
* README: se demuestra enseñando el cuerpo JSON que se enviaría, tomado del
|
|
15
|
+
* libro real de esta instalación, para que quien audite lo lea entero.
|
|
16
|
+
*
|
|
17
|
+
* El competidor exporta OTLP con una variable para capturar el contenido de los
|
|
18
|
+
* mensajes. Nosotros no tenemos esa variable, y aquí se puede comprobar.
|
|
19
|
+
*/
|
|
20
|
+
import { LibroDeSesion } from "../core/audit/libro.js";
|
|
21
|
+
import { CLAVE_DESCARTADOS, configuracionOtlp, cuerpoOtlp } from "../core/telemetria/otlp.js";
|
|
22
|
+
const AYUDA = `Uso:
|
|
23
|
+
ada-cli telemetria Estado de la exportación OTLP
|
|
24
|
+
ada-cli telemetria --cuerpo [--limite N]
|
|
25
|
+
Enseña el JSON que se enviaría (por defecto 20 entradas)
|
|
26
|
+
ada-cli telemetria --enviar [--limite N]
|
|
27
|
+
Envía de verdad al colector configurado
|
|
28
|
+
|
|
29
|
+
Variables (contrato estándar de OpenTelemetry):
|
|
30
|
+
OTEL_EXPORTER_OTLP_ENDPOINT Base para todas las señales
|
|
31
|
+
OTEL_EXPORTER_OTLP_PROTOCOL http/json | http/protobuf
|
|
32
|
+
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT y _LOGS_ / _METRICS_, con sus _PROTOCOL
|
|
33
|
+
|
|
34
|
+
Lo que sale son ATRIBUTOS DE FORMA de una lista blanca explícita: tipo de
|
|
35
|
+
suceso, herramienta, código de salida, duración, bytes, hashes, dominio de
|
|
36
|
+
destino, proveedor, modelo y número de tokens.
|
|
37
|
+
|
|
38
|
+
Nunca sale contenido: ni el texto de un comando, ni un fichero, ni un prompt,
|
|
39
|
+
ni una respuesta del modelo. No hay variable de entorno que lo active, a
|
|
40
|
+
propósito. \`--cuerpo\` está para que puedas comprobarlo tú.`;
|
|
41
|
+
export function esComandoTelemetria(args) {
|
|
42
|
+
return args[0] === "telemetria" || args[0] === "telemetry";
|
|
43
|
+
}
|
|
44
|
+
function limiteDe(args) {
|
|
45
|
+
const i = args.indexOf("--limite");
|
|
46
|
+
const n = i >= 0 ? Number(args[i + 1]) : 20;
|
|
47
|
+
return Number.isFinite(n) && n > 0 ? n : 20;
|
|
48
|
+
}
|
|
49
|
+
export async function runTelemetriaCommand(args, agentDir) {
|
|
50
|
+
if (!esComandoTelemetria(args))
|
|
51
|
+
return false;
|
|
52
|
+
if (args.includes("--help") || args.includes("-h")) {
|
|
53
|
+
console.log(AYUDA);
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
const config = configuracionOtlp();
|
|
57
|
+
const libro = new LibroDeSesion(agentDir, "cli");
|
|
58
|
+
if (args.includes("--cuerpo") || args.includes("--enviar")) {
|
|
59
|
+
const entradas = [...(await libro.leer(limiteDe(args)))].reverse();
|
|
60
|
+
if (entradas.length === 0) {
|
|
61
|
+
// Ni bien ni mal: no hay nada que exportar. Decirlo así evita que un
|
|
62
|
+
// cuerpo vacío se lea como «no sale nada de aquí».
|
|
63
|
+
console.log("El libro está vacío: no hay nada que exportar todavía.");
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
const cuerpo = cuerpoOtlp(entradas);
|
|
67
|
+
if (args.includes("--cuerpo")) {
|
|
68
|
+
console.log(JSON.stringify(cuerpo, null, 2));
|
|
69
|
+
// El recuento va a stderr para que `--cuerpo` siga siendo JSON puro y se
|
|
70
|
+
// pueda encauzar a `jq` sin filtrar la nota.
|
|
71
|
+
const descartados = JSON.stringify(cuerpo).split(`"${CLAVE_DESCARTADOS}"`).length - 1;
|
|
72
|
+
console.error(`\n${entradas.length} entrada(s). Cada span lleva "${CLAVE_DESCARTADOS}" (${descartados} spans) ` +
|
|
73
|
+
"con cuántos atributos se dejaron fuera por no estar en la lista blanca.");
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
if (config.estado !== "configurada") {
|
|
77
|
+
console.error(`No se puede enviar: ${config.motivo}.`);
|
|
78
|
+
console.error("Ejecuta `ada-cli telemetria` para ver qué falta.");
|
|
79
|
+
process.exitCode = 1;
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
const destino = config.porSenal.trazas;
|
|
83
|
+
if (!destino) {
|
|
84
|
+
console.error("No hay endpoint de trazas configurado (OTEL_EXPORTER_OTLP_TRACES_ENDPOINT).");
|
|
85
|
+
process.exitCode = 1;
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
try {
|
|
89
|
+
const r = await fetch(`${destino.endpoint.replace(/\/$/, "")}/v1/traces`, {
|
|
90
|
+
method: "POST",
|
|
91
|
+
headers: { "content-type": "application/json" },
|
|
92
|
+
body: JSON.stringify(cuerpo),
|
|
93
|
+
signal: AbortSignal.timeout(15_000),
|
|
94
|
+
});
|
|
95
|
+
// Un 2xx del colector es lo único que cuenta como enviado. Un 4xx con
|
|
96
|
+
// cuerpo de error se ha leído más de una vez como éxito por mirar solo
|
|
97
|
+
// si `fetch` lanzó.
|
|
98
|
+
if (!r.ok) {
|
|
99
|
+
console.error(`El colector contestó ${r.status} ${r.statusText}.`);
|
|
100
|
+
process.exitCode = 1;
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
console.log(`Enviadas ${entradas.length} entrada(s) a ${destino.endpoint} (${destino.protocolo}).`);
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
console.error(`No se ha podido enviar a ${destino.endpoint}: ${error.message}`);
|
|
107
|
+
process.exitCode = 1;
|
|
108
|
+
}
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
console.log(`Estado: ${config.estado}`);
|
|
112
|
+
if (config.motivo)
|
|
113
|
+
console.log(` ${config.motivo}`);
|
|
114
|
+
for (const [senal, destino] of Object.entries(config.porSenal)) {
|
|
115
|
+
console.log(` ${senal.padEnd(9)} -> ${destino.endpoint} (${destino.protocolo})`);
|
|
116
|
+
}
|
|
117
|
+
if (config.estado === "invalida")
|
|
118
|
+
process.exitCode = 1;
|
|
119
|
+
console.log("\nQué sale: atributos de FORMA de una lista blanca explícita.");
|
|
120
|
+
console.log("Qué NO sale: comandos, ficheros, prompts ni respuestas del modelo.");
|
|
121
|
+
console.log("Compruébalo tú: ada-cli telemetria --cuerpo");
|
|
122
|
+
// Se dice de dónde salen los datos: un exportador que no nombra su fuente
|
|
123
|
+
// obliga a leer código para saber qué está mandando.
|
|
124
|
+
console.log(`\nFuente: el libro de sesión de ${agentDir} (el mismo que audita \`ada-cli audit\`).`);
|
|
125
|
+
return true;
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=telemetria-command.js.map
|