@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,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolución de scripts de workflow POR NOMBRE (§16.1).
|
|
3
|
+
*
|
|
4
|
+
* Orden de resolución:
|
|
5
|
+
* 1. Builtin versionado con el SDK (deep_research, code_review, …).
|
|
6
|
+
* 2. Script guardado por el usuario: <agentDir>/workflows/<name>.js
|
|
7
|
+
* (cualquier JS con la API del runtime: agent/parallel/pipeline/phase/
|
|
8
|
+
* store/checkpoint/args/cwd/runId/log — scripts DINÁMICOS completos).
|
|
9
|
+
*
|
|
10
|
+
* Un solo punto de verdad para CLI (/workflow), RPC (desktop), la tool
|
|
11
|
+
* `workflow` del agente y el SDK.
|
|
12
|
+
*/
|
|
13
|
+
import { readdirSync, readFileSync } from "node:fs";
|
|
14
|
+
import { join } from "node:path";
|
|
15
|
+
import { generateCodebaseAuditScript, generateCodeReviewScript, generateDeepResearchScript, generateMultiPerspectiveScript, generateProductBuildScript, } from "./builtins.js";
|
|
16
|
+
/** Resuelve un builtin por nombre; null si no lo es. */
|
|
17
|
+
export function resolveBuiltinWorkflowScript(name) {
|
|
18
|
+
switch (name.replace(/-/g, "_").toLowerCase()) {
|
|
19
|
+
case "deep_research":
|
|
20
|
+
return generateDeepResearchScript({});
|
|
21
|
+
case "code_review":
|
|
22
|
+
return generateCodeReviewScript({});
|
|
23
|
+
case "product_build":
|
|
24
|
+
return generateProductBuildScript();
|
|
25
|
+
case "codebase_audit":
|
|
26
|
+
return generateCodebaseAuditScript({});
|
|
27
|
+
case "multi_perspective":
|
|
28
|
+
return generateMultiPerspectiveScript({});
|
|
29
|
+
default:
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Resuelve un workflow por nombre: builtin primero, luego script guardado en
|
|
35
|
+
* <agentDir>/workflows/<name>.js (extensiones .js/.mjs/.cjs aceptadas).
|
|
36
|
+
*/
|
|
37
|
+
export function resolveWorkflowScriptByName(agentDir, name) {
|
|
38
|
+
const builtin = resolveBuiltinWorkflowScript(name);
|
|
39
|
+
if (builtin)
|
|
40
|
+
return { source: "builtin", name: name.replace(/-/g, "_").toLowerCase(), script: builtin };
|
|
41
|
+
const base = name.replace(/\.(js|mjs|cjs)$/i, "");
|
|
42
|
+
for (const ext of ["js", "mjs", "cjs"]) {
|
|
43
|
+
const filePath = join(agentDir, "workflows", `${base}.${ext}`);
|
|
44
|
+
try {
|
|
45
|
+
const script = readFileSync(filePath, "utf-8");
|
|
46
|
+
return { source: "user-script", name: base, script, filePath };
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
// siguiente extensión
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
/** Lista scripts del usuario guardados en <agentDir>/workflows/*.js. */
|
|
55
|
+
export function listUserWorkflowScripts(agentDir) {
|
|
56
|
+
try {
|
|
57
|
+
const dir = join(agentDir, "workflows");
|
|
58
|
+
return readdirSync(dir)
|
|
59
|
+
.filter((f) => /\.(js|mjs|cjs)$/.test(f) && !f.endsWith(".json"))
|
|
60
|
+
.map((f) => ({ name: f.replace(/\.(js|mjs|cjs)$/i, ""), filePath: join(dir, f) }));
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return [];
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=resolve-script.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-script.js","sourceRoot":"","sources":["../../../src/core/workflows/resolve-script.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACN,2BAA2B,EAC3B,wBAAwB,EACxB,0BAA0B,EAC1B,8BAA8B,EAC9B,0BAA0B,GAC1B,MAAM,eAAe,CAAC;AAavB,wDAAwD;AACxD,MAAM,UAAU,4BAA4B,CAAC,IAAY,EAAiB;IACzE,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QAC/C,KAAK,eAAe;YACnB,OAAO,0BAA0B,CAAC,EAAE,CAAC,CAAC;QACvC,KAAK,aAAa;YACjB,OAAO,wBAAwB,CAAC,EAAE,CAAC,CAAC;QACrC,KAAK,eAAe;YACnB,OAAO,0BAA0B,EAAE,CAAC;QACrC,KAAK,gBAAgB;YACpB,OAAO,2BAA2B,CAAC,EAAE,CAAC,CAAC;QACxC,KAAK,mBAAmB;YACvB,OAAO,8BAA8B,CAAC,EAAE,CAAC,CAAC;QAC3C;YACC,OAAO,IAAI,CAAC;IACd,CAAC;AAAA,CACD;AAED;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAAC,QAAgB,EAAE,IAAY,EAAgC;IACzG,MAAM,OAAO,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC;IACnD,IAAI,OAAO;QAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAExG,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;IAClD,KAAK,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC/C,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QAChE,CAAC;QAAC,MAAM,CAAC;YACR,uBAAsB;QACvB,CAAC;IACF,CAAC;IACD,OAAO,IAAI,CAAC;AAAA,CACZ;AAED,wEAAwE;AACxE,MAAM,UAAU,uBAAuB,CAAC,QAAgB,EAA6C;IACpG,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACxC,OAAO,WAAW,CAAC,GAAG,CAAC;aACrB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;aAChE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACrF,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,EAAE,CAAC;IACX,CAAC;AAAA,CACD","sourcesContent":["/**\n * Resolución de scripts de workflow POR NOMBRE (§16.1).\n *\n * Orden de resolución:\n * 1. Builtin versionado con el SDK (deep_research, code_review, …).\n * 2. Script guardado por el usuario: <agentDir>/workflows/<name>.js\n * (cualquier JS con la API del runtime: agent/parallel/pipeline/phase/\n * store/checkpoint/args/cwd/runId/log — scripts DINÁMICOS completos).\n *\n * Un solo punto de verdad para CLI (/workflow), RPC (desktop), la tool\n * `workflow` del agente y el SDK.\n */\n\nimport { readdirSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport {\n\tgenerateCodebaseAuditScript,\n\tgenerateCodeReviewScript,\n\tgenerateDeepResearchScript,\n\tgenerateMultiPerspectiveScript,\n\tgenerateProductBuildScript,\n} from \"./builtins.ts\";\n\nexport interface ResolveWorkflowResult {\n\t/** Fuente del script: \"builtin\" | \"user-script\". */\n\tsource: \"builtin\" | \"user-script\";\n\t/** Nombre canónico (el del archivo o el builtin). */\n\tname: string;\n\t/** Contenido del script listo para runWorkflow. */\n\tscript: string;\n\t/** Ruta del archivo si es user-script. */\n\tfilePath?: string;\n}\n\n/** Resuelve un builtin por nombre; null si no lo es. */\nexport function resolveBuiltinWorkflowScript(name: string): string | null {\n\tswitch (name.replace(/-/g, \"_\").toLowerCase()) {\n\t\tcase \"deep_research\":\n\t\t\treturn generateDeepResearchScript({});\n\t\tcase \"code_review\":\n\t\t\treturn generateCodeReviewScript({});\n\t\tcase \"product_build\":\n\t\t\treturn generateProductBuildScript();\n\t\tcase \"codebase_audit\":\n\t\t\treturn generateCodebaseAuditScript({});\n\t\tcase \"multi_perspective\":\n\t\t\treturn generateMultiPerspectiveScript({});\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\n/**\n * Resuelve un workflow por nombre: builtin primero, luego script guardado en\n * <agentDir>/workflows/<name>.js (extensiones .js/.mjs/.cjs aceptadas).\n */\nexport function resolveWorkflowScriptByName(agentDir: string, name: string): ResolveWorkflowResult | null {\n\tconst builtin = resolveBuiltinWorkflowScript(name);\n\tif (builtin) return { source: \"builtin\", name: name.replace(/-/g, \"_\").toLowerCase(), script: builtin };\n\n\tconst base = name.replace(/\\.(js|mjs|cjs)$/i, \"\");\n\tfor (const ext of [\"js\", \"mjs\", \"cjs\"]) {\n\t\tconst filePath = join(agentDir, \"workflows\", `${base}.${ext}`);\n\t\ttry {\n\t\t\tconst script = readFileSync(filePath, \"utf-8\");\n\t\t\treturn { source: \"user-script\", name: base, script, filePath };\n\t\t} catch {\n\t\t\t// siguiente extensión\n\t\t}\n\t}\n\treturn null;\n}\n\n/** Lista scripts del usuario guardados en <agentDir>/workflows/*.js. */\nexport function listUserWorkflowScripts(agentDir: string): Array<{ name: string; filePath: string }> {\n\ttry {\n\t\tconst dir = join(agentDir, \"workflows\");\n\t\treturn readdirSync(dir)\n\t\t\t.filter((f) => /\\.(js|mjs|cjs)$/.test(f) && !f.endsWith(\".json\"))\n\t\t\t.map((f) => ({ name: f.replace(/\\.(js|mjs|cjs)$/i, \"\"), filePath: join(dir, f) }));\n\t} catch {\n\t\treturn [];\n\t}\n}\n"]}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workflow runtime — ejecuta scripts de workflow en un sandbox vm.
|
|
3
|
+
*
|
|
4
|
+
* El script es un módulo ESM con `export const meta = {...}` y el cuerpo
|
|
5
|
+
* (async). El vm recibe SOLO la API del workflow (agent/parallel/pipeline/
|
|
6
|
+
* store/phase/checkpoint/args/cwd/runId/log) — sin process/require/fs/fetch
|
|
7
|
+
* (sandbox; la red solo via tools de agente). Determinismo: Math.random y
|
|
8
|
+
* Date.now se neutralizan en el realm (resume estable). No se inyectan host
|
|
9
|
+
* built-ins (su .constructor sería el host Function — bypass del guard).
|
|
10
|
+
*/
|
|
11
|
+
import { agentIdentityHash, type CreateSubagentSession } from "./agent-runner.ts";
|
|
12
|
+
import type { HallazgoParcial } from "./contrato/yield.ts";
|
|
13
|
+
import { type WorkflowErrorCode, type WorkflowLimits, type WorkflowMeta, type WorkflowRunResult } from "./types.ts";
|
|
14
|
+
export interface WorkflowRuntimeOptions {
|
|
15
|
+
cwd: string;
|
|
16
|
+
agentDir: string;
|
|
17
|
+
createSession: CreateSubagentSession;
|
|
18
|
+
limits?: Partial<WorkflowLimits>;
|
|
19
|
+
resumeJournal?: Map<string, JournalEntryLike>;
|
|
20
|
+
/**
|
|
21
|
+
* Se llama tras cada agente ejecutado (no tras un hit de caché). Sin esto el
|
|
22
|
+
* journal nunca se rellenaba: la ruta de resume estaba escrita y testeada del
|
|
23
|
+
* lado consumidor, pero nadie producía las entradas.
|
|
24
|
+
*/
|
|
25
|
+
onJournalEntry?: (entry: {
|
|
26
|
+
index: number;
|
|
27
|
+
hash: string;
|
|
28
|
+
result: unknown;
|
|
29
|
+
}) => void;
|
|
30
|
+
onAgentStart?: (index: number, label: string, phase: string | undefined) => void;
|
|
31
|
+
onAgentEnd?: (index: number, label: string, result: unknown, usage: unknown) => void;
|
|
32
|
+
/** Se llama EN CUANTO un subagente entrega un hallazgo con `yield` — antes de que termine (contrato/yield.ts). */
|
|
33
|
+
onAgentYield?: (index: number, label: string, hallazgo: HallazgoParcial) => void;
|
|
34
|
+
onPhase?: (title: string) => void;
|
|
35
|
+
onLog?: (message: string) => void;
|
|
36
|
+
onTokenUsage?: (usage: unknown) => void;
|
|
37
|
+
confirm?: (prompt: string, options: unknown) => Promise<unknown>;
|
|
38
|
+
args?: Record<string, unknown>;
|
|
39
|
+
signal?: AbortSignal;
|
|
40
|
+
/** runId fijo para resume (mismo run). Default: generado. */
|
|
41
|
+
runId?: string;
|
|
42
|
+
}
|
|
43
|
+
export interface JournalEntryLike {
|
|
44
|
+
hash: string;
|
|
45
|
+
result: unknown;
|
|
46
|
+
storeDelta?: Record<string, unknown>;
|
|
47
|
+
}
|
|
48
|
+
/** Limiter de concurrencia (semáforo simple). */
|
|
49
|
+
export declare function createLimiter(maxConcurrent: number): <T>(fn: () => Promise<T>) => Promise<T>;
|
|
50
|
+
/**
|
|
51
|
+
* Extrae `export const meta = {...}` del script: devuelve { meta, body }.
|
|
52
|
+
* Fallo con WORKFLOW_INVALID_SCRIPT si no hay meta o el JS no balancea.
|
|
53
|
+
*/
|
|
54
|
+
export declare function parseWorkflowScript(script: string): {
|
|
55
|
+
meta: WorkflowMeta;
|
|
56
|
+
body: string;
|
|
57
|
+
};
|
|
58
|
+
export declare function runWorkflow<T = unknown>(script: string, options: WorkflowRuntimeOptions): Promise<WorkflowRunResult<T>>;
|
|
59
|
+
/** Re-export del hash para journaling externo. */
|
|
60
|
+
export { agentIdentityHash };
|
|
61
|
+
export type { WorkflowErrorCode };
|
|
62
|
+
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/core/workflows/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,OAAO,EAAe,iBAAiB,EAAE,KAAK,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC/F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,OAAO,EAIN,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,MAAM,YAAY,CAAC;AAUpB,MAAM,WAAW,sBAAsB;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,qBAAqB,CAAC;IACrC,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IACjC,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC9C;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IACnF,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IACjF,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACrF,oHAAkH;IAClH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,KAAK,IAAI,CAAC;IACjF,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACjE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED,kDAAiD;AACjD,wBAAgB,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAe5F;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAuFxF;AAED,wBAAsB,WAAW,CAAC,CAAC,GAAG,OAAO,EAC5C,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,sBAAsB,GAC7B,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CA4R/B;AAED,kDAAkD;AAClD,OAAO,EAAE,iBAAiB,EAAE,CAAC;AAC7B,YAAY,EAAE,iBAAiB,EAAE,CAAC","sourcesContent":["/**\n * Workflow runtime — ejecuta scripts de workflow en un sandbox vm.\n *\n * El script es un módulo ESM con `export const meta = {...}` y el cuerpo\n * (async). El vm recibe SOLO la API del workflow (agent/parallel/pipeline/\n * store/phase/checkpoint/args/cwd/runId/log) — sin process/require/fs/fetch\n * (sandbox; la red solo via tools de agente). Determinismo: Math.random y\n * Date.now se neutralizan en el realm (resume estable). No se inyectan host\n * built-ins (su .constructor sería el host Function — bypass del guard).\n */\n\nimport vm from \"node:vm\";\nimport type { TSchema } from \"typebox\";\nimport { CONFIG_DIR_NAME } from \"../../config.ts\";\nimport { aOpcionesDeAgente, cargarAgentes } from \"../agents/loader.ts\";\nimport { hasTrustRequiringProjectResources, ProjectTrustStore } from \"../trust-manager.ts\";\nimport { AgentRunner, agentIdentityHash, type CreateSubagentSession } from \"./agent-runner.ts\";\nimport type { HallazgoParcial } from \"./contrato/yield.ts\";\nimport { SharedStore } from \"./shared-store.ts\";\nimport {\n\tDEFAULT_WORKFLOW_LIMITS,\n\ttype WorkflowApi,\n\tWorkflowError,\n\ttype WorkflowErrorCode,\n\ttype WorkflowLimits,\n\ttype WorkflowMeta,\n\ttype WorkflowRunResult,\n} from \"./types.ts\";\n\nconst _DETERMINISM_PRELUDE = `\n Math.random = () => { throw new Error(\"Math.random is disabled for workflow determinism\"); };\n Date.now = () => { throw new Error(\"Date.now is disabled for workflow determinism\"); };\n (globalThis as any).__adaWorkflowTime = 0;\n`;\n\nconst HOST_BUILTIN_BLOCKLIST = /require\\s*\\(|process\\s*\\.|global\\s*\\.\\s*process|import\\s*\\(/;\n\nexport interface WorkflowRuntimeOptions {\n\tcwd: string;\n\tagentDir: string;\n\tcreateSession: CreateSubagentSession;\n\tlimits?: Partial<WorkflowLimits>;\n\tresumeJournal?: Map<string, JournalEntryLike>;\n\t/**\n\t * Se llama tras cada agente ejecutado (no tras un hit de caché). Sin esto el\n\t * journal nunca se rellenaba: la ruta de resume estaba escrita y testeada del\n\t * lado consumidor, pero nadie producía las entradas.\n\t */\n\tonJournalEntry?: (entry: { index: number; hash: string; result: unknown }) => void;\n\tonAgentStart?: (index: number, label: string, phase: string | undefined) => void;\n\tonAgentEnd?: (index: number, label: string, result: unknown, usage: unknown) => void;\n\t/** Se llama EN CUANTO un subagente entrega un hallazgo con `yield` — antes de que termine (contrato/yield.ts). */\n\tonAgentYield?: (index: number, label: string, hallazgo: HallazgoParcial) => void;\n\tonPhase?: (title: string) => void;\n\tonLog?: (message: string) => void;\n\tonTokenUsage?: (usage: unknown) => void;\n\tconfirm?: (prompt: string, options: unknown) => Promise<unknown>;\n\targs?: Record<string, unknown>;\n\tsignal?: AbortSignal;\n\t/** runId fijo para resume (mismo run). Default: generado. */\n\trunId?: string;\n}\n\nexport interface JournalEntryLike {\n\thash: string;\n\tresult: unknown;\n\tstoreDelta?: Record<string, unknown>;\n}\n\n/** Limiter de concurrencia (semáforo simple). */\nexport function createLimiter(maxConcurrent: number): <T>(fn: () => Promise<T>) => Promise<T> {\n\tlet active = 0;\n\tconst queue: Array<() => void> = [];\n\treturn async <T>(fn: () => Promise<T>): Promise<T> => {\n\t\tif (active >= maxConcurrent) {\n\t\t\tawait new Promise<void>((resolve) => queue.push(resolve));\n\t\t}\n\t\tactive++;\n\t\ttry {\n\t\t\treturn await fn();\n\t\t} finally {\n\t\t\tactive--;\n\t\t\tqueue.shift()?.();\n\t\t}\n\t};\n}\n\n/**\n * Extrae `export const meta = {...}` del script: devuelve { meta, body }.\n * Fallo con WORKFLOW_INVALID_SCRIPT si no hay meta o el JS no balancea.\n */\nexport function parseWorkflowScript(script: string): { meta: WorkflowMeta; body: string } {\n\t// ESTO NO ES UNA FRONTERA DE SEGURIDAD, y decir lo contrario nos costaría la\n\t// credibilidad delante de un evaluador.\n\t//\n\t// La lista negra es una expresión regular sobre el TEXTO del guion, así que\n\t// solo para al que escribe `process.` o `require(` literalmente. El escape\n\t// clásico de `node:vm` por la cadena de constructores la atraviesa entera.\n\t// Medido ejecutándolo:\n\t//\n\t// const real = this.constructor.constructor(\"return process\")();\n\t// → {\"pid\":80212,\"envs\":67,\"cwd\":\"/Users/…/packages/coding-agent\"}\n\t//\n\t// El propio Node lo dice en su documentación: «The node:vm module is not a\n\t// security mechanism. Do not use it to run untrusted code.»\n\t//\n\t// Lo que SÍ hace esto, y es lo único que se puede prometer: atrapar el acceso\n\t// ingenuo al host —el guion que un modelo escribe sin mala intención porque\n\t// está acostumbrado a Node— y convertirlo en un error legible en vez de en un\n\t// comportamiento raro. Para código de orquestación NO CONFIABLE la respuesta\n\t// es un contenedor, no esto.\n\t//\n\t// La guarda de este límite está en `test/workflows-sandbox-limite.test.ts`: si\n\t// alguien sustituye `node:vm` por un aislador de verdad, esa prueba se pondrá\n\t// roja y habrá que reescribir esta advertencia. Es el orden correcto.\n\tif (HOST_BUILTIN_BLOCKLIST.test(script)) {\n\t\tthrow new WorkflowError(\n\t\t\t\"WORKFLOW_INVALID_SCRIPT\",\n\t\t\t\"El guion usa require/process/import, que no están disponibles en el intérprete de workflows. \" +\n\t\t\t\t\"Usa los enlaces del guion (agent, parallel, pipeline, log). Aviso: este filtro atrapa el acceso \" +\n\t\t\t\t\"ingenuo al host, NO es un aislamiento de seguridad — para código no confiable, contenedor.\",\n\t\t\t{ recoverable: false },\n\t\t);\n\t}\n\tconst match = /export\\s+const\\s+meta\\s*=\\s*({)/m.exec(script);\n\tif (!match) {\n\t\tthrow new WorkflowError(\"WORKFLOW_INVALID_SCRIPT\", \"Script must export `const meta = {...}`\", {\n\t\t\trecoverable: false,\n\t\t});\n\t}\n\t// Extraer el objeto JSON con llaves balanceadas (el regex no-greedy falla con objetos anidados).\n\tconst start = match.index + match[0].length - 1;\n\tlet depth = 0;\n\tlet end = -1;\n\tlet inString = false;\n\tlet escaped = false;\n\tfor (let i = start; i < script.length; i++) {\n\t\tconst ch = script[i];\n\t\tif (inString) {\n\t\t\tif (escaped) escaped = false;\n\t\t\telse if (ch === \"\\\\\") escaped = true;\n\t\t\telse if (ch === '\"') inString = false;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === '\"') inString = true;\n\t\telse if (ch === \"{\") depth++;\n\t\telse if (ch === \"}\") {\n\t\t\tdepth--;\n\t\t\tif (depth === 0) {\n\t\t\t\tend = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tif (end === -1) {\n\t\tthrow new WorkflowError(\"WORKFLOW_INVALID_SCRIPT\", \"meta object is not closed\", { recoverable: false });\n\t}\n\tconst metaSource = script.slice(start, end + 1);\n\tlet meta: WorkflowMeta;\n\ttry {\n\t\tmeta = JSON.parse(metaSource) as WorkflowMeta;\n\t} catch {\n\t\tthrow new WorkflowError(\n\t\t\t\"WORKFLOW_INVALID_SCRIPT\",\n\t\t\t\"meta is not valid JSON — use plain JSON (no functions/comments)\",\n\t\t\t{\n\t\t\t\trecoverable: false,\n\t\t\t},\n\t\t);\n\t}\n\tif (!meta.name || !meta.description) {\n\t\tthrow new WorkflowError(\"WORKFLOW_INVALID_SCRIPT\", \"meta requires name and description\", { recoverable: false });\n\t}\n\tconst body = script.slice(end + 1).trim();\n\tif (!body) {\n\t\tthrow new WorkflowError(\"WORKFLOW_INVALID_SCRIPT\", \"Script has no body\", { recoverable: false });\n\t}\n\treturn { meta, body };\n}\n\nexport async function runWorkflow<T = unknown>(\n\tscript: string,\n\toptions: WorkflowRuntimeOptions,\n): Promise<WorkflowRunResult<T>> {\n\tconst limits: WorkflowLimits = { ...DEFAULT_WORKFLOW_LIMITS, ...options.limits };\n\tconst { meta, body } = parseWorkflowScript(script);\n\n\tconst runId = options.runId ?? `wf-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;\n\tconst store = new SharedStore();\n\tconst agentCounter = { count: 0 };\n\tconst limiter = createLimiter(limits.maxConcurrency);\n\tconst runner = new AgentRunner({\n\t\tagentDir: options.agentDir,\n\t\tcreateSession: options.createSession,\n\t\tlimiter,\n\t\tagentCounter,\n\t\tmaxAgents: limits.maxAgentsPerRun,\n\t\tretries: limits.maxRetries,\n\t\tagentTimeoutMs: limits.agentTimeoutMs,\n\t});\n\n\tconst logs: string[] = [];\n\tconst phases: string[] = [];\n\tlet callIndex = 0;\n\tconst tokenUsage = { input: 0, output: 0, total: 0, cost: 0, cacheRead: 0, cacheWrite: 0 };\n\tconst started = Date.now();\n\n\tconst log = (message: string) => {\n\t\tlogs.push(message);\n\t\toptions.onLog?.(message);\n\t};\n\n\t// Se cargan una vez por run y se memoriza: un workflow con cien agentes no\n\t// puede leer el disco cien veces.\n\tlet agentesDefinidos: ReturnType<typeof cargarAgentes>[\"agentes\"] | null = null;\n\tconst resolverAgentesDefinidos = () => {\n\t\tif (agentesDefinidos) return agentesDefinidos;\n\t\t// Los de proyecto solo cuentan si el proyecto es de confianza: vienen del\n\t\t// repositorio, igual que una extensión.\n\t\tconst requiere = hasTrustRequiringProjectResources(options.cwd);\n\t\tconst carga = cargarAgentes({\n\t\t\tagentDir: options.agentDir,\n\t\t\tcwd: options.cwd,\n\t\t\tproyectoDeConfianza: !requiere || new ProjectTrustStore(options.agentDir).get(options.cwd) === true,\n\t\t\tconfigDirName: CONFIG_DIR_NAME,\n\t\t});\n\t\tfor (const problema of carga.problemas) {\n\t\t\toptions.onLog?.(`[agents] ${problema.ruta}: ${problema.motivo}`);\n\t\t}\n\t\tif (carga.bloqueadosSinConfianza > 0) {\n\t\t\toptions.onLog?.(\n\t\t\t\t`[agents] ${carga.bloqueadosSinConfianza} agente(s) del proyecto ignorados: el proyecto no es de confianza`,\n\t\t\t);\n\t\t}\n\t\tagentesDefinidos = carga.agentes;\n\t\treturn agentesDefinidos;\n\t};\n\n\tconst agent = async <_TSchemaDef extends TSchema | undefined = undefined>(\n\t\tagentOptions: Parameters<WorkflowApi[\"agent\"]>[0],\n\t) => {\n\t\tconst index = callIndex++;\n\t\toptions.onAgentStart?.(index, agentOptions.label ?? `agent-${index}`, agentOptions.phase);\n\n\t\t// Agentes definidos por el usuario en Markdown. Sus ajustes son la BASE:\n\t\t// lo que el script pase explícitamente gana, para que un workflow pueda\n\t\t// ajustar un agente prestado sin tener que copiarlo entero.\n\t\tif (agentOptions.agentType) {\n\t\t\tconst disponibles = resolverAgentesDefinidos();\n\t\t\tconst definido = disponibles.find((a) => a.nombre === agentOptions.agentType);\n\t\t\tif (!definido) {\n\t\t\t\t// Ignorarlo en silencio dejaría al workflow corriendo con un agente\n\t\t\t\t// genérico creyendo que usa el suyo.\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`agentType '${agentOptions.agentType}' no existe. Disponibles: ${disponibles.map((a) => a.nombre).join(\", \") || \"(ninguno)\"}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tagentOptions = { ...aOpcionesDeAgente(definido), ...agentOptions };\n\t\t}\n\n\t\tconst journalKey = `${runId}:${index}`;\n\t\tconst identityHash = agentIdentityHash({\n\t\t\tprompt: agentOptions.prompt,\n\t\t\tmodel: agentOptions.model,\n\t\t\ttier: agentOptions.tier,\n\t\t\tphase: agentOptions.phase,\n\t\t\tstableKey: agentOptions.stableKey,\n\t\t\tschema: agentOptions.schema,\n\t\t});\n\t\tconst cached = options.resumeJournal?.get(journalKey);\n\t\tif (cached && cached.hash === identityHash) {\n\t\t\tif (cached.storeDelta) store.applyDelta(cached.storeDelta);\n\t\t\toptions.onAgentEnd?.(index, agentOptions.label ?? `agent-${index}`, cached.result, { cached: true });\n\t\t\treturn cached.result;\n\t\t}\n\n\t\tconst label = agentOptions.label ?? `agent-${index}`;\n\t\tconst onYieldDelScript = agentOptions.onYield;\n\t\tconst result = await runner.run({\n\t\t\t...agentOptions,\n\t\t\t// Combina el onYield del propio script (si lo puso) con el del host: los\n\t\t\t// dos quieren enterarse del mismo hallazgo, en el mismo instante.\n\t\t\tonYield: (hallazgo) => {\n\t\t\t\toptions.onAgentYield?.(index, label, hallazgo);\n\t\t\t\tonYieldDelScript?.(hallazgo);\n\t\t\t},\n\t\t\t// Determinista: un resume reencuentra el mismo worktree.\n\t\t\tisolationKey: journalKey.replace(\":\", \"-\"),\n\t\t\tcwd: agentOptions.cwd ?? options.cwd,\n\t\t});\n\t\tif (result === null) return null;\n\n\t\ttokenUsage.input += result.usage.input;\n\t\ttokenUsage.output += result.usage.output;\n\t\ttokenUsage.total += result.usage.total;\n\t\ttokenUsage.cost += result.usage.cost;\n\t\ttokenUsage.cacheRead += result.usage.cacheRead ?? 0;\n\t\ttokenUsage.cacheWrite += result.usage.cacheWrite ?? 0;\n\n\t\t// Journal para el resume: identidad + resultado del agente. NO se guarda\n\t\t// storeDelta a propósito — en este DSL el store lo escribe el SCRIPT, no\n\t\t// los agentes, y al reanudar el script se re-ejecuta entero (con\n\t\t// Math.random/Date.now deshabilitados para que sea determinista), así que\n\t\t// el store se reconstruye solo. Guardar deltas sería estado duplicado.\n\t\toptions.onJournalEntry?.({ index, hash: identityHash, result: result.result });\n\t\toptions.onAgentEnd?.(index, agentOptions.label ?? `agent-${index}`, result.result, result.usage);\n\t\treturn result.result;\n\t};\n\n\tconst parallel = async <R>(fns: Array<() => Promise<R>>): Promise<Array<Awaited<R>>> => {\n\t\treturn Promise.all(fns.map((fn) => fn()));\n\t};\n\n\tconst pipeline = async <R>(fns: Array<(prev?: Awaited<R>) => Promise<R>>): Promise<Awaited<R>> => {\n\t\tlet prev: Awaited<R> | undefined;\n\t\tfor (const fn of fns) {\n\t\t\tprev = await fn(prev);\n\t\t}\n\t\treturn prev as Awaited<R>;\n\t};\n\n\tconst phase = (title: string, detail?: string) => {\n\t\tphases.push(title);\n\t\toptions.onPhase?.(title);\n\t\tif (detail) log(`phase ${title}: ${detail}`);\n\t};\n\n\tconst checkpoint = async <T>(\n\t\tpromptText: string,\n\t\tcheckpointOptions?: {\n\t\t\tdefault?: unknown;\n\t\t\theadless?: \"default\" | \"abort\";\n\t\t\tkind?: \"confirm\" | \"input\" | \"select\";\n\t\t\tchoices?: string[];\n\t\t},\n\t) => {\n\t\tif (options.confirm) {\n\t\t\treturn (await options.confirm(promptText, checkpointOptions)) as T;\n\t\t}\n\t\tif (checkpointOptions?.headless === \"abort\") {\n\t\t\tthrow new WorkflowError(\n\t\t\t\t\"WORKFLOW_ABORTED\",\n\t\t\t\t`checkpoint \"${promptText}\" needs human input but none is available`,\n\t\t\t\t{\n\t\t\t\t\trecoverable: false,\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t\treturn (checkpointOptions?.default ?? true) as T;\n\t};\n\n\tconst api: WorkflowApi = {\n\t\tagent,\n\t\tparallel,\n\t\tpipeline,\n\t\tphase,\n\t\tstore: {\n\t\t\tput: (k, v) => store.put(k, v),\n\t\t\tget: <U>(k: string) => store.get<U>(k),\n\t\t\thas: (k) => store.has(k),\n\t\t\tdelete: (k) => store.delete(k),\n\t\t\tentries: () => store.entries(),\n\t\t},\n\t\tcheckpoint,\n\t\targs: options.args ?? {},\n\t\tcwd: options.cwd ?? process.cwd(),\n\t\trunId,\n\t\tlog,\n\t};\n\n\tconst context = vm.createContext({\n\t\t...api,\n\t\tObject,\n\t\tArray,\n\t\tJSON,\n\t\tMath: {\n\t\t\t...Math,\n\t\t\trandom: () => {\n\t\t\t\tthrow new Error(\"Math.random disabled\");\n\t\t\t},\n\t\t},\n\t\tDate: { ...Date, now: () => started },\n\t\tPromise,\n\t\tSet,\n\t\tMap,\n\t\tError,\n\t\tString,\n\t\tNumber,\n\t\tBoolean,\n\t\tconsole: {\n\t\t\tlog,\n\t\t\tinfo: log,\n\t\t\twarn: (m: unknown) => log(`[warn] ${String(m)}`),\n\t\t\terror: (m: unknown) => log(`[error] ${String(m)}`),\n\t\t},\n\t\t// Timers: necesarios para esperas cooperativas en scripts (no son acceso\n\t\t// a host — solo programan la cola del event loop).\n\t\tsetTimeout,\n\t\tclearTimeout,\n\t\tsetInterval,\n\t\tclearInterval,\n\t});\n\n\tconst wrapped = `(async () => {\\n${body}\\n})()`;\n\n\tconst scriptTimeout = new Promise<never>((_resolve, reject) => {\n\t\tsetTimeout(() => {\n\t\t\treject(\n\t\t\t\tnew WorkflowError(\"WORKFLOW_SCRIPT_TIMEOUT\", \"Workflow script exceeded its timeout\", {\n\t\t\t\t\trecoverable: false,\n\t\t\t\t}),\n\t\t\t);\n\t\t}, limits.scriptTimeoutMs);\n\t});\n\n\tlet aborted = false;\n\tif (options.signal?.aborted) {\n\t\taborted = true;\n\t} else if (options.signal) {\n\t\toptions.signal.addEventListener(\n\t\t\t\"abort\",\n\t\t\t() => {\n\t\t\t\taborted = true;\n\t\t\t},\n\t\t\t{ once: true },\n\t\t);\n\t}\n\n\t// Notificador de abort: interrumpe el race (≤25ms). El interval se limpia\n\t// SIEMPRE en el finally, así ninguna promesa queda viva tras el run.\n\t// Abort mediante sentinel (nunca rechazo → nunca unhandled).\n\t// El interval se limpia SIEMPRE en el finally.\n\tconst ABORT_SENTINEL = Symbol(\"abort\");\n\tlet abortTimer: ReturnType<typeof setInterval> | undefined;\n\tconst abortNotifier = new Promise<unknown>((resolve) => {\n\t\tabortTimer = setInterval(() => {\n\t\t\tif (aborted) {\n\t\t\t\tclearInterval(abortTimer);\n\t\t\t\tresolve(ABORT_SENTINEL);\n\t\t\t}\n\t\t}, 25);\n\t});\n\n\ttry {\n\t\tconst result = await Promise.race([\n\t\t\tnew vm.Script(wrapped, { filename: `${meta.name || \"workflow\"}.js` }).runInContext(context),\n\t\t\tscriptTimeout,\n\t\t\tabortNotifier,\n\t\t]);\n\t\tif (result === ABORT_SENTINEL) {\n\t\t\tthrow new WorkflowError(\"WORKFLOW_ABORTED\", \"Workflow aborted\", { recoverable: false });\n\t\t}\n\n\t\toptions.onTokenUsage?.(tokenUsage);\n\t\treturn {\n\t\t\tmeta,\n\t\t\tresult: result as T,\n\t\t\tlogs,\n\t\t\tphases,\n\t\t\tagentCount: agentCounter.count,\n\t\t\tdurationMs: Date.now() - started,\n\t\t\trunId,\n\t\t\ttokenUsage,\n\t\t};\n\t} finally {\n\t\tif (abortTimer) clearInterval(abortTimer);\n\t}\n}\n\n/** Re-export del hash para journaling externo. */\nexport { agentIdentityHash };\nexport type { WorkflowErrorCode };\n"]}
|
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workflow runtime — ejecuta scripts de workflow en un sandbox vm.
|
|
3
|
+
*
|
|
4
|
+
* El script es un módulo ESM con `export const meta = {...}` y el cuerpo
|
|
5
|
+
* (async). El vm recibe SOLO la API del workflow (agent/parallel/pipeline/
|
|
6
|
+
* store/phase/checkpoint/args/cwd/runId/log) — sin process/require/fs/fetch
|
|
7
|
+
* (sandbox; la red solo via tools de agente). Determinismo: Math.random y
|
|
8
|
+
* Date.now se neutralizan en el realm (resume estable). No se inyectan host
|
|
9
|
+
* built-ins (su .constructor sería el host Function — bypass del guard).
|
|
10
|
+
*/
|
|
11
|
+
import vm from "node:vm";
|
|
12
|
+
import { CONFIG_DIR_NAME } from "../../config.js";
|
|
13
|
+
import { aOpcionesDeAgente, cargarAgentes } from "../agents/loader.js";
|
|
14
|
+
import { hasTrustRequiringProjectResources, ProjectTrustStore } from "../trust-manager.js";
|
|
15
|
+
import { AgentRunner, agentIdentityHash } from "./agent-runner.js";
|
|
16
|
+
import { SharedStore } from "./shared-store.js";
|
|
17
|
+
import { DEFAULT_WORKFLOW_LIMITS, WorkflowError, } from "./types.js";
|
|
18
|
+
const _DETERMINISM_PRELUDE = `
|
|
19
|
+
Math.random = () => { throw new Error("Math.random is disabled for workflow determinism"); };
|
|
20
|
+
Date.now = () => { throw new Error("Date.now is disabled for workflow determinism"); };
|
|
21
|
+
(globalThis as any).__adaWorkflowTime = 0;
|
|
22
|
+
`;
|
|
23
|
+
const HOST_BUILTIN_BLOCKLIST = /require\s*\(|process\s*\.|global\s*\.\s*process|import\s*\(/;
|
|
24
|
+
/** Limiter de concurrencia (semáforo simple). */
|
|
25
|
+
export function createLimiter(maxConcurrent) {
|
|
26
|
+
let active = 0;
|
|
27
|
+
const queue = [];
|
|
28
|
+
return async (fn) => {
|
|
29
|
+
if (active >= maxConcurrent) {
|
|
30
|
+
await new Promise((resolve) => queue.push(resolve));
|
|
31
|
+
}
|
|
32
|
+
active++;
|
|
33
|
+
try {
|
|
34
|
+
return await fn();
|
|
35
|
+
}
|
|
36
|
+
finally {
|
|
37
|
+
active--;
|
|
38
|
+
queue.shift()?.();
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Extrae `export const meta = {...}` del script: devuelve { meta, body }.
|
|
44
|
+
* Fallo con WORKFLOW_INVALID_SCRIPT si no hay meta o el JS no balancea.
|
|
45
|
+
*/
|
|
46
|
+
export function parseWorkflowScript(script) {
|
|
47
|
+
// ESTO NO ES UNA FRONTERA DE SEGURIDAD, y decir lo contrario nos costaría la
|
|
48
|
+
// credibilidad delante de un evaluador.
|
|
49
|
+
//
|
|
50
|
+
// La lista negra es una expresión regular sobre el TEXTO del guion, así que
|
|
51
|
+
// solo para al que escribe `process.` o `require(` literalmente. El escape
|
|
52
|
+
// clásico de `node:vm` por la cadena de constructores la atraviesa entera.
|
|
53
|
+
// Medido ejecutándolo:
|
|
54
|
+
//
|
|
55
|
+
// const real = this.constructor.constructor("return process")();
|
|
56
|
+
// → {"pid":80212,"envs":67,"cwd":"/Users/…/packages/coding-agent"}
|
|
57
|
+
//
|
|
58
|
+
// El propio Node lo dice en su documentación: «The node:vm module is not a
|
|
59
|
+
// security mechanism. Do not use it to run untrusted code.»
|
|
60
|
+
//
|
|
61
|
+
// Lo que SÍ hace esto, y es lo único que se puede prometer: atrapar el acceso
|
|
62
|
+
// ingenuo al host —el guion que un modelo escribe sin mala intención porque
|
|
63
|
+
// está acostumbrado a Node— y convertirlo en un error legible en vez de en un
|
|
64
|
+
// comportamiento raro. Para código de orquestación NO CONFIABLE la respuesta
|
|
65
|
+
// es un contenedor, no esto.
|
|
66
|
+
//
|
|
67
|
+
// La guarda de este límite está en `test/workflows-sandbox-limite.test.ts`: si
|
|
68
|
+
// alguien sustituye `node:vm` por un aislador de verdad, esa prueba se pondrá
|
|
69
|
+
// roja y habrá que reescribir esta advertencia. Es el orden correcto.
|
|
70
|
+
if (HOST_BUILTIN_BLOCKLIST.test(script)) {
|
|
71
|
+
throw new WorkflowError("WORKFLOW_INVALID_SCRIPT", "El guion usa require/process/import, que no están disponibles en el intérprete de workflows. " +
|
|
72
|
+
"Usa los enlaces del guion (agent, parallel, pipeline, log). Aviso: este filtro atrapa el acceso " +
|
|
73
|
+
"ingenuo al host, NO es un aislamiento de seguridad — para código no confiable, contenedor.", { recoverable: false });
|
|
74
|
+
}
|
|
75
|
+
const match = /export\s+const\s+meta\s*=\s*({)/m.exec(script);
|
|
76
|
+
if (!match) {
|
|
77
|
+
throw new WorkflowError("WORKFLOW_INVALID_SCRIPT", "Script must export `const meta = {...}`", {
|
|
78
|
+
recoverable: false,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
// Extraer el objeto JSON con llaves balanceadas (el regex no-greedy falla con objetos anidados).
|
|
82
|
+
const start = match.index + match[0].length - 1;
|
|
83
|
+
let depth = 0;
|
|
84
|
+
let end = -1;
|
|
85
|
+
let inString = false;
|
|
86
|
+
let escaped = false;
|
|
87
|
+
for (let i = start; i < script.length; i++) {
|
|
88
|
+
const ch = script[i];
|
|
89
|
+
if (inString) {
|
|
90
|
+
if (escaped)
|
|
91
|
+
escaped = false;
|
|
92
|
+
else if (ch === "\\")
|
|
93
|
+
escaped = true;
|
|
94
|
+
else if (ch === '"')
|
|
95
|
+
inString = false;
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
if (ch === '"')
|
|
99
|
+
inString = true;
|
|
100
|
+
else if (ch === "{")
|
|
101
|
+
depth++;
|
|
102
|
+
else if (ch === "}") {
|
|
103
|
+
depth--;
|
|
104
|
+
if (depth === 0) {
|
|
105
|
+
end = i;
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (end === -1) {
|
|
111
|
+
throw new WorkflowError("WORKFLOW_INVALID_SCRIPT", "meta object is not closed", { recoverable: false });
|
|
112
|
+
}
|
|
113
|
+
const metaSource = script.slice(start, end + 1);
|
|
114
|
+
let meta;
|
|
115
|
+
try {
|
|
116
|
+
meta = JSON.parse(metaSource);
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
throw new WorkflowError("WORKFLOW_INVALID_SCRIPT", "meta is not valid JSON — use plain JSON (no functions/comments)", {
|
|
120
|
+
recoverable: false,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
if (!meta.name || !meta.description) {
|
|
124
|
+
throw new WorkflowError("WORKFLOW_INVALID_SCRIPT", "meta requires name and description", { recoverable: false });
|
|
125
|
+
}
|
|
126
|
+
const body = script.slice(end + 1).trim();
|
|
127
|
+
if (!body) {
|
|
128
|
+
throw new WorkflowError("WORKFLOW_INVALID_SCRIPT", "Script has no body", { recoverable: false });
|
|
129
|
+
}
|
|
130
|
+
return { meta, body };
|
|
131
|
+
}
|
|
132
|
+
export async function runWorkflow(script, options) {
|
|
133
|
+
const limits = { ...DEFAULT_WORKFLOW_LIMITS, ...options.limits };
|
|
134
|
+
const { meta, body } = parseWorkflowScript(script);
|
|
135
|
+
const runId = options.runId ?? `wf-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
|
|
136
|
+
const store = new SharedStore();
|
|
137
|
+
const agentCounter = { count: 0 };
|
|
138
|
+
const limiter = createLimiter(limits.maxConcurrency);
|
|
139
|
+
const runner = new AgentRunner({
|
|
140
|
+
agentDir: options.agentDir,
|
|
141
|
+
createSession: options.createSession,
|
|
142
|
+
limiter,
|
|
143
|
+
agentCounter,
|
|
144
|
+
maxAgents: limits.maxAgentsPerRun,
|
|
145
|
+
retries: limits.maxRetries,
|
|
146
|
+
agentTimeoutMs: limits.agentTimeoutMs,
|
|
147
|
+
});
|
|
148
|
+
const logs = [];
|
|
149
|
+
const phases = [];
|
|
150
|
+
let callIndex = 0;
|
|
151
|
+
const tokenUsage = { input: 0, output: 0, total: 0, cost: 0, cacheRead: 0, cacheWrite: 0 };
|
|
152
|
+
const started = Date.now();
|
|
153
|
+
const log = (message) => {
|
|
154
|
+
logs.push(message);
|
|
155
|
+
options.onLog?.(message);
|
|
156
|
+
};
|
|
157
|
+
// Se cargan una vez por run y se memoriza: un workflow con cien agentes no
|
|
158
|
+
// puede leer el disco cien veces.
|
|
159
|
+
let agentesDefinidos = null;
|
|
160
|
+
const resolverAgentesDefinidos = () => {
|
|
161
|
+
if (agentesDefinidos)
|
|
162
|
+
return agentesDefinidos;
|
|
163
|
+
// Los de proyecto solo cuentan si el proyecto es de confianza: vienen del
|
|
164
|
+
// repositorio, igual que una extensión.
|
|
165
|
+
const requiere = hasTrustRequiringProjectResources(options.cwd);
|
|
166
|
+
const carga = cargarAgentes({
|
|
167
|
+
agentDir: options.agentDir,
|
|
168
|
+
cwd: options.cwd,
|
|
169
|
+
proyectoDeConfianza: !requiere || new ProjectTrustStore(options.agentDir).get(options.cwd) === true,
|
|
170
|
+
configDirName: CONFIG_DIR_NAME,
|
|
171
|
+
});
|
|
172
|
+
for (const problema of carga.problemas) {
|
|
173
|
+
options.onLog?.(`[agents] ${problema.ruta}: ${problema.motivo}`);
|
|
174
|
+
}
|
|
175
|
+
if (carga.bloqueadosSinConfianza > 0) {
|
|
176
|
+
options.onLog?.(`[agents] ${carga.bloqueadosSinConfianza} agente(s) del proyecto ignorados: el proyecto no es de confianza`);
|
|
177
|
+
}
|
|
178
|
+
agentesDefinidos = carga.agentes;
|
|
179
|
+
return agentesDefinidos;
|
|
180
|
+
};
|
|
181
|
+
const agent = async (agentOptions) => {
|
|
182
|
+
const index = callIndex++;
|
|
183
|
+
options.onAgentStart?.(index, agentOptions.label ?? `agent-${index}`, agentOptions.phase);
|
|
184
|
+
// Agentes definidos por el usuario en Markdown. Sus ajustes son la BASE:
|
|
185
|
+
// lo que el script pase explícitamente gana, para que un workflow pueda
|
|
186
|
+
// ajustar un agente prestado sin tener que copiarlo entero.
|
|
187
|
+
if (agentOptions.agentType) {
|
|
188
|
+
const disponibles = resolverAgentesDefinidos();
|
|
189
|
+
const definido = disponibles.find((a) => a.nombre === agentOptions.agentType);
|
|
190
|
+
if (!definido) {
|
|
191
|
+
// Ignorarlo en silencio dejaría al workflow corriendo con un agente
|
|
192
|
+
// genérico creyendo que usa el suyo.
|
|
193
|
+
throw new Error(`agentType '${agentOptions.agentType}' no existe. Disponibles: ${disponibles.map((a) => a.nombre).join(", ") || "(ninguno)"}`);
|
|
194
|
+
}
|
|
195
|
+
agentOptions = { ...aOpcionesDeAgente(definido), ...agentOptions };
|
|
196
|
+
}
|
|
197
|
+
const journalKey = `${runId}:${index}`;
|
|
198
|
+
const identityHash = agentIdentityHash({
|
|
199
|
+
prompt: agentOptions.prompt,
|
|
200
|
+
model: agentOptions.model,
|
|
201
|
+
tier: agentOptions.tier,
|
|
202
|
+
phase: agentOptions.phase,
|
|
203
|
+
stableKey: agentOptions.stableKey,
|
|
204
|
+
schema: agentOptions.schema,
|
|
205
|
+
});
|
|
206
|
+
const cached = options.resumeJournal?.get(journalKey);
|
|
207
|
+
if (cached && cached.hash === identityHash) {
|
|
208
|
+
if (cached.storeDelta)
|
|
209
|
+
store.applyDelta(cached.storeDelta);
|
|
210
|
+
options.onAgentEnd?.(index, agentOptions.label ?? `agent-${index}`, cached.result, { cached: true });
|
|
211
|
+
return cached.result;
|
|
212
|
+
}
|
|
213
|
+
const label = agentOptions.label ?? `agent-${index}`;
|
|
214
|
+
const onYieldDelScript = agentOptions.onYield;
|
|
215
|
+
const result = await runner.run({
|
|
216
|
+
...agentOptions,
|
|
217
|
+
// Combina el onYield del propio script (si lo puso) con el del host: los
|
|
218
|
+
// dos quieren enterarse del mismo hallazgo, en el mismo instante.
|
|
219
|
+
onYield: (hallazgo) => {
|
|
220
|
+
options.onAgentYield?.(index, label, hallazgo);
|
|
221
|
+
onYieldDelScript?.(hallazgo);
|
|
222
|
+
},
|
|
223
|
+
// Determinista: un resume reencuentra el mismo worktree.
|
|
224
|
+
isolationKey: journalKey.replace(":", "-"),
|
|
225
|
+
cwd: agentOptions.cwd ?? options.cwd,
|
|
226
|
+
});
|
|
227
|
+
if (result === null)
|
|
228
|
+
return null;
|
|
229
|
+
tokenUsage.input += result.usage.input;
|
|
230
|
+
tokenUsage.output += result.usage.output;
|
|
231
|
+
tokenUsage.total += result.usage.total;
|
|
232
|
+
tokenUsage.cost += result.usage.cost;
|
|
233
|
+
tokenUsage.cacheRead += result.usage.cacheRead ?? 0;
|
|
234
|
+
tokenUsage.cacheWrite += result.usage.cacheWrite ?? 0;
|
|
235
|
+
// Journal para el resume: identidad + resultado del agente. NO se guarda
|
|
236
|
+
// storeDelta a propósito — en este DSL el store lo escribe el SCRIPT, no
|
|
237
|
+
// los agentes, y al reanudar el script se re-ejecuta entero (con
|
|
238
|
+
// Math.random/Date.now deshabilitados para que sea determinista), así que
|
|
239
|
+
// el store se reconstruye solo. Guardar deltas sería estado duplicado.
|
|
240
|
+
options.onJournalEntry?.({ index, hash: identityHash, result: result.result });
|
|
241
|
+
options.onAgentEnd?.(index, agentOptions.label ?? `agent-${index}`, result.result, result.usage);
|
|
242
|
+
return result.result;
|
|
243
|
+
};
|
|
244
|
+
const parallel = async (fns) => {
|
|
245
|
+
return Promise.all(fns.map((fn) => fn()));
|
|
246
|
+
};
|
|
247
|
+
const pipeline = async (fns) => {
|
|
248
|
+
let prev;
|
|
249
|
+
for (const fn of fns) {
|
|
250
|
+
prev = await fn(prev);
|
|
251
|
+
}
|
|
252
|
+
return prev;
|
|
253
|
+
};
|
|
254
|
+
const phase = (title, detail) => {
|
|
255
|
+
phases.push(title);
|
|
256
|
+
options.onPhase?.(title);
|
|
257
|
+
if (detail)
|
|
258
|
+
log(`phase ${title}: ${detail}`);
|
|
259
|
+
};
|
|
260
|
+
const checkpoint = async (promptText, checkpointOptions) => {
|
|
261
|
+
if (options.confirm) {
|
|
262
|
+
return (await options.confirm(promptText, checkpointOptions));
|
|
263
|
+
}
|
|
264
|
+
if (checkpointOptions?.headless === "abort") {
|
|
265
|
+
throw new WorkflowError("WORKFLOW_ABORTED", `checkpoint "${promptText}" needs human input but none is available`, {
|
|
266
|
+
recoverable: false,
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
return (checkpointOptions?.default ?? true);
|
|
270
|
+
};
|
|
271
|
+
const api = {
|
|
272
|
+
agent,
|
|
273
|
+
parallel,
|
|
274
|
+
pipeline,
|
|
275
|
+
phase,
|
|
276
|
+
store: {
|
|
277
|
+
put: (k, v) => store.put(k, v),
|
|
278
|
+
get: (k) => store.get(k),
|
|
279
|
+
has: (k) => store.has(k),
|
|
280
|
+
delete: (k) => store.delete(k),
|
|
281
|
+
entries: () => store.entries(),
|
|
282
|
+
},
|
|
283
|
+
checkpoint,
|
|
284
|
+
args: options.args ?? {},
|
|
285
|
+
cwd: options.cwd ?? process.cwd(),
|
|
286
|
+
runId,
|
|
287
|
+
log,
|
|
288
|
+
};
|
|
289
|
+
const context = vm.createContext({
|
|
290
|
+
...api,
|
|
291
|
+
Object,
|
|
292
|
+
Array,
|
|
293
|
+
JSON,
|
|
294
|
+
Math: {
|
|
295
|
+
...Math,
|
|
296
|
+
random: () => {
|
|
297
|
+
throw new Error("Math.random disabled");
|
|
298
|
+
},
|
|
299
|
+
},
|
|
300
|
+
Date: { ...Date, now: () => started },
|
|
301
|
+
Promise,
|
|
302
|
+
Set,
|
|
303
|
+
Map,
|
|
304
|
+
Error,
|
|
305
|
+
String,
|
|
306
|
+
Number,
|
|
307
|
+
Boolean,
|
|
308
|
+
console: {
|
|
309
|
+
log,
|
|
310
|
+
info: log,
|
|
311
|
+
warn: (m) => log(`[warn] ${String(m)}`),
|
|
312
|
+
error: (m) => log(`[error] ${String(m)}`),
|
|
313
|
+
},
|
|
314
|
+
// Timers: necesarios para esperas cooperativas en scripts (no son acceso
|
|
315
|
+
// a host — solo programan la cola del event loop).
|
|
316
|
+
setTimeout,
|
|
317
|
+
clearTimeout,
|
|
318
|
+
setInterval,
|
|
319
|
+
clearInterval,
|
|
320
|
+
});
|
|
321
|
+
const wrapped = `(async () => {\n${body}\n})()`;
|
|
322
|
+
const scriptTimeout = new Promise((_resolve, reject) => {
|
|
323
|
+
setTimeout(() => {
|
|
324
|
+
reject(new WorkflowError("WORKFLOW_SCRIPT_TIMEOUT", "Workflow script exceeded its timeout", {
|
|
325
|
+
recoverable: false,
|
|
326
|
+
}));
|
|
327
|
+
}, limits.scriptTimeoutMs);
|
|
328
|
+
});
|
|
329
|
+
let aborted = false;
|
|
330
|
+
if (options.signal?.aborted) {
|
|
331
|
+
aborted = true;
|
|
332
|
+
}
|
|
333
|
+
else if (options.signal) {
|
|
334
|
+
options.signal.addEventListener("abort", () => {
|
|
335
|
+
aborted = true;
|
|
336
|
+
}, { once: true });
|
|
337
|
+
}
|
|
338
|
+
// Notificador de abort: interrumpe el race (≤25ms). El interval se limpia
|
|
339
|
+
// SIEMPRE en el finally, así ninguna promesa queda viva tras el run.
|
|
340
|
+
// Abort mediante sentinel (nunca rechazo → nunca unhandled).
|
|
341
|
+
// El interval se limpia SIEMPRE en el finally.
|
|
342
|
+
const ABORT_SENTINEL = Symbol("abort");
|
|
343
|
+
let abortTimer;
|
|
344
|
+
const abortNotifier = new Promise((resolve) => {
|
|
345
|
+
abortTimer = setInterval(() => {
|
|
346
|
+
if (aborted) {
|
|
347
|
+
clearInterval(abortTimer);
|
|
348
|
+
resolve(ABORT_SENTINEL);
|
|
349
|
+
}
|
|
350
|
+
}, 25);
|
|
351
|
+
});
|
|
352
|
+
try {
|
|
353
|
+
const result = await Promise.race([
|
|
354
|
+
new vm.Script(wrapped, { filename: `${meta.name || "workflow"}.js` }).runInContext(context),
|
|
355
|
+
scriptTimeout,
|
|
356
|
+
abortNotifier,
|
|
357
|
+
]);
|
|
358
|
+
if (result === ABORT_SENTINEL) {
|
|
359
|
+
throw new WorkflowError("WORKFLOW_ABORTED", "Workflow aborted", { recoverable: false });
|
|
360
|
+
}
|
|
361
|
+
options.onTokenUsage?.(tokenUsage);
|
|
362
|
+
return {
|
|
363
|
+
meta,
|
|
364
|
+
result: result,
|
|
365
|
+
logs,
|
|
366
|
+
phases,
|
|
367
|
+
agentCount: agentCounter.count,
|
|
368
|
+
durationMs: Date.now() - started,
|
|
369
|
+
runId,
|
|
370
|
+
tokenUsage,
|
|
371
|
+
};
|
|
372
|
+
}
|
|
373
|
+
finally {
|
|
374
|
+
if (abortTimer)
|
|
375
|
+
clearInterval(abortTimer);
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
/** Re-export del hash para journaling externo. */
|
|
379
|
+
export { agentIdentityHash };
|
|
380
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../src/core/workflows/runtime.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Workflow runtime — ejecuta scripts de workflow en un sandbox vm.\n *\n * El script es un módulo ESM con `export const meta = {...}` y el cuerpo\n * (async). El vm recibe SOLO la API del workflow (agent/parallel/pipeline/\n * store/phase/checkpoint/args/cwd/runId/log) — sin process/require/fs/fetch\n * (sandbox; la red solo via tools de agente). Determinismo: Math.random y\n * Date.now se neutralizan en el realm (resume estable). No se inyectan host\n * built-ins (su .constructor sería el host Function — bypass del guard).\n */\n\nimport vm from \"node:vm\";\nimport type { TSchema } from \"typebox\";\nimport { CONFIG_DIR_NAME } from \"../../config.ts\";\nimport { aOpcionesDeAgente, cargarAgentes } from \"../agents/loader.ts\";\nimport { hasTrustRequiringProjectResources, ProjectTrustStore } from \"../trust-manager.ts\";\nimport { AgentRunner, agentIdentityHash, type CreateSubagentSession } from \"./agent-runner.ts\";\nimport type { HallazgoParcial } from \"./contrato/yield.ts\";\nimport { SharedStore } from \"./shared-store.ts\";\nimport {\n\tDEFAULT_WORKFLOW_LIMITS,\n\ttype WorkflowApi,\n\tWorkflowError,\n\ttype WorkflowErrorCode,\n\ttype WorkflowLimits,\n\ttype WorkflowMeta,\n\ttype WorkflowRunResult,\n} from \"./types.ts\";\n\nconst _DETERMINISM_PRELUDE = `\n Math.random = () => { throw new Error(\"Math.random is disabled for workflow determinism\"); };\n Date.now = () => { throw new Error(\"Date.now is disabled for workflow determinism\"); };\n (globalThis as any).__adaWorkflowTime = 0;\n`;\n\nconst HOST_BUILTIN_BLOCKLIST = /require\\s*\\(|process\\s*\\.|global\\s*\\.\\s*process|import\\s*\\(/;\n\nexport interface WorkflowRuntimeOptions {\n\tcwd: string;\n\tagentDir: string;\n\tcreateSession: CreateSubagentSession;\n\tlimits?: Partial<WorkflowLimits>;\n\tresumeJournal?: Map<string, JournalEntryLike>;\n\t/**\n\t * Se llama tras cada agente ejecutado (no tras un hit de caché). Sin esto el\n\t * journal nunca se rellenaba: la ruta de resume estaba escrita y testeada del\n\t * lado consumidor, pero nadie producía las entradas.\n\t */\n\tonJournalEntry?: (entry: { index: number; hash: string; result: unknown }) => void;\n\tonAgentStart?: (index: number, label: string, phase: string | undefined) => void;\n\tonAgentEnd?: (index: number, label: string, result: unknown, usage: unknown) => void;\n\t/** Se llama EN CUANTO un subagente entrega un hallazgo con `yield` — antes de que termine (contrato/yield.ts). */\n\tonAgentYield?: (index: number, label: string, hallazgo: HallazgoParcial) => void;\n\tonPhase?: (title: string) => void;\n\tonLog?: (message: string) => void;\n\tonTokenUsage?: (usage: unknown) => void;\n\tconfirm?: (prompt: string, options: unknown) => Promise<unknown>;\n\targs?: Record<string, unknown>;\n\tsignal?: AbortSignal;\n\t/** runId fijo para resume (mismo run). Default: generado. */\n\trunId?: string;\n}\n\nexport interface JournalEntryLike {\n\thash: string;\n\tresult: unknown;\n\tstoreDelta?: Record<string, unknown>;\n}\n\n/** Limiter de concurrencia (semáforo simple). */\nexport function createLimiter(maxConcurrent: number): <T>(fn: () => Promise<T>) => Promise<T> {\n\tlet active = 0;\n\tconst queue: Array<() => void> = [];\n\treturn async <T>(fn: () => Promise<T>): Promise<T> => {\n\t\tif (active >= maxConcurrent) {\n\t\t\tawait new Promise<void>((resolve) => queue.push(resolve));\n\t\t}\n\t\tactive++;\n\t\ttry {\n\t\t\treturn await fn();\n\t\t} finally {\n\t\t\tactive--;\n\t\t\tqueue.shift()?.();\n\t\t}\n\t};\n}\n\n/**\n * Extrae `export const meta = {...}` del script: devuelve { meta, body }.\n * Fallo con WORKFLOW_INVALID_SCRIPT si no hay meta o el JS no balancea.\n */\nexport function parseWorkflowScript(script: string): { meta: WorkflowMeta; body: string } {\n\t// ESTO NO ES UNA FRONTERA DE SEGURIDAD, y decir lo contrario nos costaría la\n\t// credibilidad delante de un evaluador.\n\t//\n\t// La lista negra es una expresión regular sobre el TEXTO del guion, así que\n\t// solo para al que escribe `process.` o `require(` literalmente. El escape\n\t// clásico de `node:vm` por la cadena de constructores la atraviesa entera.\n\t// Medido ejecutándolo:\n\t//\n\t// const real = this.constructor.constructor(\"return process\")();\n\t// → {\"pid\":80212,\"envs\":67,\"cwd\":\"/Users/…/packages/coding-agent\"}\n\t//\n\t// El propio Node lo dice en su documentación: «The node:vm module is not a\n\t// security mechanism. Do not use it to run untrusted code.»\n\t//\n\t// Lo que SÍ hace esto, y es lo único que se puede prometer: atrapar el acceso\n\t// ingenuo al host —el guion que un modelo escribe sin mala intención porque\n\t// está acostumbrado a Node— y convertirlo en un error legible en vez de en un\n\t// comportamiento raro. Para código de orquestación NO CONFIABLE la respuesta\n\t// es un contenedor, no esto.\n\t//\n\t// La guarda de este límite está en `test/workflows-sandbox-limite.test.ts`: si\n\t// alguien sustituye `node:vm` por un aislador de verdad, esa prueba se pondrá\n\t// roja y habrá que reescribir esta advertencia. Es el orden correcto.\n\tif (HOST_BUILTIN_BLOCKLIST.test(script)) {\n\t\tthrow new WorkflowError(\n\t\t\t\"WORKFLOW_INVALID_SCRIPT\",\n\t\t\t\"El guion usa require/process/import, que no están disponibles en el intérprete de workflows. \" +\n\t\t\t\t\"Usa los enlaces del guion (agent, parallel, pipeline, log). Aviso: este filtro atrapa el acceso \" +\n\t\t\t\t\"ingenuo al host, NO es un aislamiento de seguridad — para código no confiable, contenedor.\",\n\t\t\t{ recoverable: false },\n\t\t);\n\t}\n\tconst match = /export\\s+const\\s+meta\\s*=\\s*({)/m.exec(script);\n\tif (!match) {\n\t\tthrow new WorkflowError(\"WORKFLOW_INVALID_SCRIPT\", \"Script must export `const meta = {...}`\", {\n\t\t\trecoverable: false,\n\t\t});\n\t}\n\t// Extraer el objeto JSON con llaves balanceadas (el regex no-greedy falla con objetos anidados).\n\tconst start = match.index + match[0].length - 1;\n\tlet depth = 0;\n\tlet end = -1;\n\tlet inString = false;\n\tlet escaped = false;\n\tfor (let i = start; i < script.length; i++) {\n\t\tconst ch = script[i];\n\t\tif (inString) {\n\t\t\tif (escaped) escaped = false;\n\t\t\telse if (ch === \"\\\\\") escaped = true;\n\t\t\telse if (ch === '\"') inString = false;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === '\"') inString = true;\n\t\telse if (ch === \"{\") depth++;\n\t\telse if (ch === \"}\") {\n\t\t\tdepth--;\n\t\t\tif (depth === 0) {\n\t\t\t\tend = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tif (end === -1) {\n\t\tthrow new WorkflowError(\"WORKFLOW_INVALID_SCRIPT\", \"meta object is not closed\", { recoverable: false });\n\t}\n\tconst metaSource = script.slice(start, end + 1);\n\tlet meta: WorkflowMeta;\n\ttry {\n\t\tmeta = JSON.parse(metaSource) as WorkflowMeta;\n\t} catch {\n\t\tthrow new WorkflowError(\n\t\t\t\"WORKFLOW_INVALID_SCRIPT\",\n\t\t\t\"meta is not valid JSON — use plain JSON (no functions/comments)\",\n\t\t\t{\n\t\t\t\trecoverable: false,\n\t\t\t},\n\t\t);\n\t}\n\tif (!meta.name || !meta.description) {\n\t\tthrow new WorkflowError(\"WORKFLOW_INVALID_SCRIPT\", \"meta requires name and description\", { recoverable: false });\n\t}\n\tconst body = script.slice(end + 1).trim();\n\tif (!body) {\n\t\tthrow new WorkflowError(\"WORKFLOW_INVALID_SCRIPT\", \"Script has no body\", { recoverable: false });\n\t}\n\treturn { meta, body };\n}\n\nexport async function runWorkflow<T = unknown>(\n\tscript: string,\n\toptions: WorkflowRuntimeOptions,\n): Promise<WorkflowRunResult<T>> {\n\tconst limits: WorkflowLimits = { ...DEFAULT_WORKFLOW_LIMITS, ...options.limits };\n\tconst { meta, body } = parseWorkflowScript(script);\n\n\tconst runId = options.runId ?? `wf-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;\n\tconst store = new SharedStore();\n\tconst agentCounter = { count: 0 };\n\tconst limiter = createLimiter(limits.maxConcurrency);\n\tconst runner = new AgentRunner({\n\t\tagentDir: options.agentDir,\n\t\tcreateSession: options.createSession,\n\t\tlimiter,\n\t\tagentCounter,\n\t\tmaxAgents: limits.maxAgentsPerRun,\n\t\tretries: limits.maxRetries,\n\t\tagentTimeoutMs: limits.agentTimeoutMs,\n\t});\n\n\tconst logs: string[] = [];\n\tconst phases: string[] = [];\n\tlet callIndex = 0;\n\tconst tokenUsage = { input: 0, output: 0, total: 0, cost: 0, cacheRead: 0, cacheWrite: 0 };\n\tconst started = Date.now();\n\n\tconst log = (message: string) => {\n\t\tlogs.push(message);\n\t\toptions.onLog?.(message);\n\t};\n\n\t// Se cargan una vez por run y se memoriza: un workflow con cien agentes no\n\t// puede leer el disco cien veces.\n\tlet agentesDefinidos: ReturnType<typeof cargarAgentes>[\"agentes\"] | null = null;\n\tconst resolverAgentesDefinidos = () => {\n\t\tif (agentesDefinidos) return agentesDefinidos;\n\t\t// Los de proyecto solo cuentan si el proyecto es de confianza: vienen del\n\t\t// repositorio, igual que una extensión.\n\t\tconst requiere = hasTrustRequiringProjectResources(options.cwd);\n\t\tconst carga = cargarAgentes({\n\t\t\tagentDir: options.agentDir,\n\t\t\tcwd: options.cwd,\n\t\t\tproyectoDeConfianza: !requiere || new ProjectTrustStore(options.agentDir).get(options.cwd) === true,\n\t\t\tconfigDirName: CONFIG_DIR_NAME,\n\t\t});\n\t\tfor (const problema of carga.problemas) {\n\t\t\toptions.onLog?.(`[agents] ${problema.ruta}: ${problema.motivo}`);\n\t\t}\n\t\tif (carga.bloqueadosSinConfianza > 0) {\n\t\t\toptions.onLog?.(\n\t\t\t\t`[agents] ${carga.bloqueadosSinConfianza} agente(s) del proyecto ignorados: el proyecto no es de confianza`,\n\t\t\t);\n\t\t}\n\t\tagentesDefinidos = carga.agentes;\n\t\treturn agentesDefinidos;\n\t};\n\n\tconst agent = async <_TSchemaDef extends TSchema | undefined = undefined>(\n\t\tagentOptions: Parameters<WorkflowApi[\"agent\"]>[0],\n\t) => {\n\t\tconst index = callIndex++;\n\t\toptions.onAgentStart?.(index, agentOptions.label ?? `agent-${index}`, agentOptions.phase);\n\n\t\t// Agentes definidos por el usuario en Markdown. Sus ajustes son la BASE:\n\t\t// lo que el script pase explícitamente gana, para que un workflow pueda\n\t\t// ajustar un agente prestado sin tener que copiarlo entero.\n\t\tif (agentOptions.agentType) {\n\t\t\tconst disponibles = resolverAgentesDefinidos();\n\t\t\tconst definido = disponibles.find((a) => a.nombre === agentOptions.agentType);\n\t\t\tif (!definido) {\n\t\t\t\t// Ignorarlo en silencio dejaría al workflow corriendo con un agente\n\t\t\t\t// genérico creyendo que usa el suyo.\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`agentType '${agentOptions.agentType}' no existe. Disponibles: ${disponibles.map((a) => a.nombre).join(\", \") || \"(ninguno)\"}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tagentOptions = { ...aOpcionesDeAgente(definido), ...agentOptions };\n\t\t}\n\n\t\tconst journalKey = `${runId}:${index}`;\n\t\tconst identityHash = agentIdentityHash({\n\t\t\tprompt: agentOptions.prompt,\n\t\t\tmodel: agentOptions.model,\n\t\t\ttier: agentOptions.tier,\n\t\t\tphase: agentOptions.phase,\n\t\t\tstableKey: agentOptions.stableKey,\n\t\t\tschema: agentOptions.schema,\n\t\t});\n\t\tconst cached = options.resumeJournal?.get(journalKey);\n\t\tif (cached && cached.hash === identityHash) {\n\t\t\tif (cached.storeDelta) store.applyDelta(cached.storeDelta);\n\t\t\toptions.onAgentEnd?.(index, agentOptions.label ?? `agent-${index}`, cached.result, { cached: true });\n\t\t\treturn cached.result;\n\t\t}\n\n\t\tconst label = agentOptions.label ?? `agent-${index}`;\n\t\tconst onYieldDelScript = agentOptions.onYield;\n\t\tconst result = await runner.run({\n\t\t\t...agentOptions,\n\t\t\t// Combina el onYield del propio script (si lo puso) con el del host: los\n\t\t\t// dos quieren enterarse del mismo hallazgo, en el mismo instante.\n\t\t\tonYield: (hallazgo) => {\n\t\t\t\toptions.onAgentYield?.(index, label, hallazgo);\n\t\t\t\tonYieldDelScript?.(hallazgo);\n\t\t\t},\n\t\t\t// Determinista: un resume reencuentra el mismo worktree.\n\t\t\tisolationKey: journalKey.replace(\":\", \"-\"),\n\t\t\tcwd: agentOptions.cwd ?? options.cwd,\n\t\t});\n\t\tif (result === null) return null;\n\n\t\ttokenUsage.input += result.usage.input;\n\t\ttokenUsage.output += result.usage.output;\n\t\ttokenUsage.total += result.usage.total;\n\t\ttokenUsage.cost += result.usage.cost;\n\t\ttokenUsage.cacheRead += result.usage.cacheRead ?? 0;\n\t\ttokenUsage.cacheWrite += result.usage.cacheWrite ?? 0;\n\n\t\t// Journal para el resume: identidad + resultado del agente. NO se guarda\n\t\t// storeDelta a propósito — en este DSL el store lo escribe el SCRIPT, no\n\t\t// los agentes, y al reanudar el script se re-ejecuta entero (con\n\t\t// Math.random/Date.now deshabilitados para que sea determinista), así que\n\t\t// el store se reconstruye solo. Guardar deltas sería estado duplicado.\n\t\toptions.onJournalEntry?.({ index, hash: identityHash, result: result.result });\n\t\toptions.onAgentEnd?.(index, agentOptions.label ?? `agent-${index}`, result.result, result.usage);\n\t\treturn result.result;\n\t};\n\n\tconst parallel = async <R>(fns: Array<() => Promise<R>>): Promise<Array<Awaited<R>>> => {\n\t\treturn Promise.all(fns.map((fn) => fn()));\n\t};\n\n\tconst pipeline = async <R>(fns: Array<(prev?: Awaited<R>) => Promise<R>>): Promise<Awaited<R>> => {\n\t\tlet prev: Awaited<R> | undefined;\n\t\tfor (const fn of fns) {\n\t\t\tprev = await fn(prev);\n\t\t}\n\t\treturn prev as Awaited<R>;\n\t};\n\n\tconst phase = (title: string, detail?: string) => {\n\t\tphases.push(title);\n\t\toptions.onPhase?.(title);\n\t\tif (detail) log(`phase ${title}: ${detail}`);\n\t};\n\n\tconst checkpoint = async <T>(\n\t\tpromptText: string,\n\t\tcheckpointOptions?: {\n\t\t\tdefault?: unknown;\n\t\t\theadless?: \"default\" | \"abort\";\n\t\t\tkind?: \"confirm\" | \"input\" | \"select\";\n\t\t\tchoices?: string[];\n\t\t},\n\t) => {\n\t\tif (options.confirm) {\n\t\t\treturn (await options.confirm(promptText, checkpointOptions)) as T;\n\t\t}\n\t\tif (checkpointOptions?.headless === \"abort\") {\n\t\t\tthrow new WorkflowError(\n\t\t\t\t\"WORKFLOW_ABORTED\",\n\t\t\t\t`checkpoint \"${promptText}\" needs human input but none is available`,\n\t\t\t\t{\n\t\t\t\t\trecoverable: false,\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t\treturn (checkpointOptions?.default ?? true) as T;\n\t};\n\n\tconst api: WorkflowApi = {\n\t\tagent,\n\t\tparallel,\n\t\tpipeline,\n\t\tphase,\n\t\tstore: {\n\t\t\tput: (k, v) => store.put(k, v),\n\t\t\tget: <U>(k: string) => store.get<U>(k),\n\t\t\thas: (k) => store.has(k),\n\t\t\tdelete: (k) => store.delete(k),\n\t\t\tentries: () => store.entries(),\n\t\t},\n\t\tcheckpoint,\n\t\targs: options.args ?? {},\n\t\tcwd: options.cwd ?? process.cwd(),\n\t\trunId,\n\t\tlog,\n\t};\n\n\tconst context = vm.createContext({\n\t\t...api,\n\t\tObject,\n\t\tArray,\n\t\tJSON,\n\t\tMath: {\n\t\t\t...Math,\n\t\t\trandom: () => {\n\t\t\t\tthrow new Error(\"Math.random disabled\");\n\t\t\t},\n\t\t},\n\t\tDate: { ...Date, now: () => started },\n\t\tPromise,\n\t\tSet,\n\t\tMap,\n\t\tError,\n\t\tString,\n\t\tNumber,\n\t\tBoolean,\n\t\tconsole: {\n\t\t\tlog,\n\t\t\tinfo: log,\n\t\t\twarn: (m: unknown) => log(`[warn] ${String(m)}`),\n\t\t\terror: (m: unknown) => log(`[error] ${String(m)}`),\n\t\t},\n\t\t// Timers: necesarios para esperas cooperativas en scripts (no son acceso\n\t\t// a host — solo programan la cola del event loop).\n\t\tsetTimeout,\n\t\tclearTimeout,\n\t\tsetInterval,\n\t\tclearInterval,\n\t});\n\n\tconst wrapped = `(async () => {\\n${body}\\n})()`;\n\n\tconst scriptTimeout = new Promise<never>((_resolve, reject) => {\n\t\tsetTimeout(() => {\n\t\t\treject(\n\t\t\t\tnew WorkflowError(\"WORKFLOW_SCRIPT_TIMEOUT\", \"Workflow script exceeded its timeout\", {\n\t\t\t\t\trecoverable: false,\n\t\t\t\t}),\n\t\t\t);\n\t\t}, limits.scriptTimeoutMs);\n\t});\n\n\tlet aborted = false;\n\tif (options.signal?.aborted) {\n\t\taborted = true;\n\t} else if (options.signal) {\n\t\toptions.signal.addEventListener(\n\t\t\t\"abort\",\n\t\t\t() => {\n\t\t\t\taborted = true;\n\t\t\t},\n\t\t\t{ once: true },\n\t\t);\n\t}\n\n\t// Notificador de abort: interrumpe el race (≤25ms). El interval se limpia\n\t// SIEMPRE en el finally, así ninguna promesa queda viva tras el run.\n\t// Abort mediante sentinel (nunca rechazo → nunca unhandled).\n\t// El interval se limpia SIEMPRE en el finally.\n\tconst ABORT_SENTINEL = Symbol(\"abort\");\n\tlet abortTimer: ReturnType<typeof setInterval> | undefined;\n\tconst abortNotifier = new Promise<unknown>((resolve) => {\n\t\tabortTimer = setInterval(() => {\n\t\t\tif (aborted) {\n\t\t\t\tclearInterval(abortTimer);\n\t\t\t\tresolve(ABORT_SENTINEL);\n\t\t\t}\n\t\t}, 25);\n\t});\n\n\ttry {\n\t\tconst result = await Promise.race([\n\t\t\tnew vm.Script(wrapped, { filename: `${meta.name || \"workflow\"}.js` }).runInContext(context),\n\t\t\tscriptTimeout,\n\t\t\tabortNotifier,\n\t\t]);\n\t\tif (result === ABORT_SENTINEL) {\n\t\t\tthrow new WorkflowError(\"WORKFLOW_ABORTED\", \"Workflow aborted\", { recoverable: false });\n\t\t}\n\n\t\toptions.onTokenUsage?.(tokenUsage);\n\t\treturn {\n\t\t\tmeta,\n\t\t\tresult: result as T,\n\t\t\tlogs,\n\t\t\tphases,\n\t\t\tagentCount: agentCounter.count,\n\t\t\tdurationMs: Date.now() - started,\n\t\t\trunId,\n\t\t\ttokenUsage,\n\t\t};\n\t} finally {\n\t\tif (abortTimer) clearInterval(abortTimer);\n\t}\n}\n\n/** Re-export del hash para journaling externo. */\nexport { agentIdentityHash };\nexport type { WorkflowErrorCode };\n"]}
|