theus-cli-linux-x64 0.2.84
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/LICENSE +42 -0
- package/README.md +295 -0
- package/RELEASE.json +18 -0
- package/assets/brand-official/v1.0/logo/theus-lockup-negative-official.png +0 -0
- package/assets/brand-official/v1.0/logo/theus-lockup-primary-dark-official.png +0 -0
- package/assets/fonts/satoshi/satoshi-300.woff2 +0 -0
- package/assets/fonts/satoshi/satoshi-400.woff2 +0 -0
- package/assets/fonts/satoshi/satoshi-500.woff2 +0 -0
- package/assets/fonts/satoshi/satoshi-700.woff2 +0 -0
- package/assets/fonts/satoshi/satoshi-900.woff2 +0 -0
- package/assets/windows-store/Square150x150Logo.png +0 -0
- package/assets/windows-store/Square44x44Logo.png +0 -0
- package/assets/windows-store/StoreLogo.png +0 -0
- package/assets/windows-store/theus-store-icon-master.png +0 -0
- package/bin/theus +0 -0
- package/package.json +18 -0
- package/vendor/theus-arsenal/.arsenal-nombres-ola2.json +6 -0
- package/vendor/theus-arsenal/.arsenal-nombres-ola3.json +72 -0
- package/vendor/theus-arsenal/.mailmap +2 -0
- package/vendor/theus-arsenal/.theus-plugin/marketplace.json +25 -0
- package/vendor/theus-arsenal/.theus-plugin/plugin.json +20 -0
- package/vendor/theus-arsenal/AUTHORS.md +8 -0
- package/vendor/theus-arsenal/CLEANROOM_REPLACEMENT_PLAN.md +11 -0
- package/vendor/theus-arsenal/LICENSE +26 -0
- package/vendor/theus-arsenal/PROVENANCE.md +9 -0
- package/vendor/theus-arsenal/README.md +41 -0
- package/vendor/theus-arsenal/THIRD_PARTY.md +80 -0
- package/vendor/theus-arsenal/agents/actualizador-docs.md +123 -0
- package/vendor/theus-arsenal/agents/analista-comentarios.md +53 -0
- package/vendor/theus-arsenal/agents/analista-conversaciones.md +60 -0
- package/vendor/theus-arsenal/agents/analista-tests-pr.md +53 -0
- package/vendor/theus-arsenal/agents/analista-tipos.md +49 -0
- package/vendor/theus-arsenal/agents/arquitecto-accesibilidad.md +148 -0
- package/vendor/theus-arsenal/agents/arquitecto-codigo.md +79 -0
- package/vendor/theus-arsenal/agents/arquitecto-homelab.md +90 -0
- package/vendor/theus-arsenal/agents/arquitecto-redes.md +116 -0
- package/vendor/theus-arsenal/agents/arquitecto-sistemas.md +219 -0
- package/vendor/theus-arsenal/agents/bifurcador-opensource.md +206 -0
- package/vendor/theus-arsenal/agents/cazador-fallos-silenciosos.md +58 -0
- package/vendor/theus-arsenal/agents/consultor-documentacion.md +76 -0
- package/vendor/theus-arsenal/agents/diagnosticador-redes.md +135 -0
- package/vendor/theus-arsenal/agents/ejecutor-e2e.md +96 -0
- package/vendor/theus-arsenal/agents/empaquetador-opensource.md +257 -0
- package/vendor/theus-arsenal/agents/escaner-secretos.md +196 -0
- package/vendor/theus-arsenal/agents/especialista-seo.md +70 -0
- package/vendor/theus-arsenal/agents/estratega-marketing.md +158 -0
- package/vendor/theus-arsenal/agents/evaluador-agentes.md +214 -0
- package/vendor/theus-arsenal/agents/evaluador-harness.md +217 -0
- package/vendor/theus-arsenal/agents/explorador-codigo.md +79 -0
- package/vendor/theus-arsenal/agents/extractor-specs.md +214 -0
- package/vendor/theus-arsenal/agents/generador-harness.md +139 -0
- package/vendor/theus-arsenal/agents/guia-tdd.md +99 -0
- package/vendor/theus-arsenal/agents/jefe-de-gabinete.md +162 -0
- package/vendor/theus-arsenal/agents/limpiador-refactors.md +93 -0
- package/vendor/theus-arsenal/agents/optimizador-rendimiento.md +454 -0
- package/vendor/theus-arsenal/agents/planificador-harness.md +107 -0
- package/vendor/theus-arsenal/agents/planificador.md +221 -0
- package/vendor/theus-arsenal/agents/resolutor-apps-harmonyos.md +181 -0
- package/vendor/theus-arsenal/agents/resolutor-builds-cpp.md +98 -0
- package/vendor/theus-arsenal/agents/resolutor-builds-dart.md +209 -0
- package/vendor/theus-arsenal/agents/resolutor-builds-django.md +253 -0
- package/vendor/theus-arsenal/agents/resolutor-builds-go.md +102 -0
- package/vendor/theus-arsenal/agents/resolutor-builds-java.md +274 -0
- package/vendor/theus-arsenal/agents/resolutor-builds-kotlin.md +128 -0
- package/vendor/theus-arsenal/agents/resolutor-builds-pytorch.md +128 -0
- package/vendor/theus-arsenal/agents/resolutor-builds-react.md +214 -0
- package/vendor/theus-arsenal/agents/resolutor-builds-rust.md +156 -0
- package/vendor/theus-arsenal/agents/resolutor-builds-swift.md +169 -0
- package/vendor/theus-arsenal/agents/resolutor-builds.md +122 -0
- package/vendor/theus-arsenal/agents/revisor-bd.md +97 -0
- package/vendor/theus-arsenal/agents/revisor-codigo.md +291 -0
- package/vendor/theus-arsenal/agents/revisor-config-red.md +116 -0
- package/vendor/theus-arsenal/agents/revisor-cpp.md +80 -0
- package/vendor/theus-arsenal/agents/revisor-csharp.md +109 -0
- package/vendor/theus-arsenal/agents/revisor-django.md +168 -0
- package/vendor/theus-arsenal/agents/revisor-fastapi.md +82 -0
- package/vendor/theus-arsenal/agents/revisor-flutter.md +251 -0
- package/vendor/theus-arsenal/agents/revisor-go.md +84 -0
- package/vendor/theus-arsenal/agents/revisor-java.md +192 -0
- package/vendor/theus-arsenal/agents/revisor-kotlin.md +171 -0
- package/vendor/theus-arsenal/agents/revisor-ml.md +159 -0
- package/vendor/theus-arsenal/agents/revisor-php.md +108 -0
- package/vendor/theus-arsenal/agents/revisor-python.md +106 -0
- package/vendor/theus-arsenal/agents/revisor-react.md +166 -0
- package/vendor/theus-arsenal/agents/revisor-rust.md +102 -0
- package/vendor/theus-arsenal/agents/revisor-seguridad.md +116 -0
- package/vendor/theus-arsenal/agents/revisor-software-clinico.md +95 -0
- package/vendor/theus-arsenal/agents/revisor-swift.md +115 -0
- package/vendor/theus-arsenal/agents/revisor-typescript.md +123 -0
- package/vendor/theus-arsenal/agents/revisor-vue.md +205 -0
- package/vendor/theus-arsenal/agents/simplificador-codigo.md +55 -0
- package/vendor/theus-arsenal/commands/actualizar-docs.md +88 -0
- package/vendor/theus-arsenal/commands/actualizar-mapas-codigo.md +78 -0
- package/vendor/theus-arsenal/commands/aprender-evaluar.md +109 -0
- package/vendor/theus-arsenal/commands/aprender.md +74 -0
- package/vendor/theus-arsenal/commands/arreglar-build.md +66 -0
- package/vendor/theus-arsenal/commands/bucle-multiperspectiva.md +153 -0
- package/vendor/theus-arsenal/commands/build-cpp.md +173 -0
- package/vendor/theus-arsenal/commands/build-flutter.md +164 -0
- package/vendor/theus-arsenal/commands/build-go.md +183 -0
- package/vendor/theus-arsenal/commands/build-gradle.md +75 -0
- package/vendor/theus-arsenal/commands/build-kotlin.md +176 -0
- package/vendor/theus-arsenal/commands/build-react.md +187 -0
- package/vendor/theus-arsenal/commands/build-rust.md +187 -0
- package/vendor/theus-arsenal/commands/campana-marketing.md +125 -0
- package/vendor/theus-arsenal/commands/checkpoint.md +78 -0
- package/vendor/theus-arsenal/commands/cobertura-tests.md +73 -0
- package/vendor/theus-arsenal/commands/configurar-gestor-paquetes.md +86 -0
- package/vendor/theus-arsenal/commands/consulta.md +164 -0
- package/vendor/theus-arsenal/commands/control-calidad.md +50 -0
- package/vendor/theus-arsenal/commands/crear-skill.md +77 -0
- package/vendor/theus-arsenal/commands/enrutar-modelo.md +30 -0
- package/vendor/theus-arsenal/commands/epica-desbloquear.md +17 -0
- package/vendor/theus-arsenal/commands/epica-descomponer.md +22 -0
- package/vendor/theus-arsenal/commands/epica-publicar.md +21 -0
- package/vendor/theus-arsenal/commands/epica-reclamar.md +25 -0
- package/vendor/theus-arsenal/commands/epica-revisar.md +22 -0
- package/vendor/theus-arsenal/commands/epica-sincronizar.md +21 -0
- package/vendor/theus-arsenal/commands/epica-validar.md +21 -0
- package/vendor/theus-arsenal/commands/evolucionar.md +176 -0
- package/vendor/theus-arsenal/commands/funcionalidad.md +49 -0
- package/vendor/theus-arsenal/commands/guardar-sesion.md +278 -0
- package/vendor/theus-arsenal/commands/harness-build.md +111 -0
- package/vendor/theus-arsenal/commands/harness-diseno.md +46 -0
- package/vendor/theus-arsenal/commands/informe-costos.md +90 -0
- package/vendor/theus-arsenal/commands/iniciar-bucle.md +36 -0
- package/vendor/theus-arsenal/commands/instintos-estado.md +53 -0
- package/vendor/theus-arsenal/commands/instintos-exportar.md +69 -0
- package/vendor/theus-arsenal/commands/instintos-importar.md +120 -0
- package/vendor/theus-arsenal/commands/lienzo-planes.md +48 -0
- package/vendor/theus-arsenal/commands/limpiar-refactor.md +84 -0
- package/vendor/theus-arsenal/commands/modo-seguro.md +96 -0
- package/vendor/theus-arsenal/commands/orq-agregar-funcionalidad.md +36 -0
- package/vendor/theus-arsenal/commands/orq-cambiar-funcionalidad.md +38 -0
- package/vendor/theus-arsenal/commands/orq-construir-mvp.md +36 -0
- package/vendor/theus-arsenal/commands/orq-corregir-defecto.md +40 -0
- package/vendor/theus-arsenal/commands/orq-refinar-codigo.md +44 -0
- package/vendor/theus-arsenal/commands/orq-revisar.md +135 -0
- package/vendor/theus-arsenal/commands/plan-prd.md +160 -0
- package/vendor/theus-arsenal/commands/plan.md +198 -0
- package/vendor/theus-arsenal/commands/podar.md +31 -0
- package/vendor/theus-arsenal/commands/pr.md +181 -0
- package/vendor/theus-arsenal/commands/promover.md +41 -0
- package/vendor/theus-arsenal/commands/proyectos.md +33 -0
- package/vendor/theus-arsenal/commands/prp-commit.md +112 -0
- package/vendor/theus-arsenal/commands/prp-implementar.md +385 -0
- package/vendor/theus-arsenal/commands/prp-planificar.md +501 -0
- package/vendor/theus-arsenal/commands/reanudar-sesion.md +160 -0
- package/vendor/theus-arsenal/commands/revisar-codigo.md +289 -0
- package/vendor/theus-arsenal/commands/revisar-cpp.md +132 -0
- package/vendor/theus-arsenal/commands/revisar-fastapi.md +39 -0
- package/vendor/theus-arsenal/commands/revisar-flutter.md +115 -0
- package/vendor/theus-arsenal/commands/revisar-go.md +148 -0
- package/vendor/theus-arsenal/commands/revisar-kotlin.md +140 -0
- package/vendor/theus-arsenal/commands/revisar-pr.md +37 -0
- package/vendor/theus-arsenal/commands/revisar-python.md +297 -0
- package/vendor/theus-arsenal/commands/revisar-react.md +170 -0
- package/vendor/theus-arsenal/commands/revisar-rust.md +142 -0
- package/vendor/theus-arsenal/commands/revisar-vue.md +174 -0
- package/vendor/theus-arsenal/commands/salud-skills.md +52 -0
- package/vendor/theus-arsenal/commands/sesiones.md +345 -0
- package/vendor/theus-arsenal/commands/test-cpp.md +252 -0
- package/vendor/theus-arsenal/commands/test-flutter.md +143 -0
- package/vendor/theus-arsenal/commands/test-go.md +268 -0
- package/vendor/theus-arsenal/commands/test-kotlin.md +312 -0
- package/vendor/theus-arsenal/commands/test-react.md +265 -0
- package/vendor/theus-arsenal/commands/test-rust.md +309 -0
- package/vendor/theus-arsenal/commands/vigilancia-canary.md +43 -0
- package/vendor/theus-arsenal/hooks/hooks.json +274 -0
- package/vendor/theus-arsenal/package.json +6 -0
- package/vendor/theus-arsenal/rules/angular/coding-style.md +182 -0
- package/vendor/theus-arsenal/rules/angular/hooks.md +25 -0
- package/vendor/theus-arsenal/rules/angular/patterns.md +249 -0
- package/vendor/theus-arsenal/rules/angular/security.md +87 -0
- package/vendor/theus-arsenal/rules/angular/testing.md +164 -0
- package/vendor/theus-arsenal/rules/arkts/coding-style.md +153 -0
- package/vendor/theus-arsenal/rules/arkts/hooks.md +80 -0
- package/vendor/theus-arsenal/rules/arkts/patterns.md +236 -0
- package/vendor/theus-arsenal/rules/arkts/security.md +141 -0
- package/vendor/theus-arsenal/rules/arkts/testing.md +126 -0
- package/vendor/theus-arsenal/rules/common/agents.md +49 -0
- package/vendor/theus-arsenal/rules/common/code-review.md +123 -0
- package/vendor/theus-arsenal/rules/common/coding-style.md +90 -0
- package/vendor/theus-arsenal/rules/common/development-workflow.md +44 -0
- package/vendor/theus-arsenal/rules/common/git-workflow.md +24 -0
- package/vendor/theus-arsenal/rules/common/hooks.md +32 -0
- package/vendor/theus-arsenal/rules/common/patterns.md +31 -0
- package/vendor/theus-arsenal/rules/common/performance.md +53 -0
- package/vendor/theus-arsenal/rules/common/security.md +29 -0
- package/vendor/theus-arsenal/rules/common/testing.md +57 -0
- package/vendor/theus-arsenal/rules/cpp/coding-style.md +44 -0
- package/vendor/theus-arsenal/rules/cpp/hooks.md +39 -0
- package/vendor/theus-arsenal/rules/cpp/patterns.md +51 -0
- package/vendor/theus-arsenal/rules/cpp/security.md +51 -0
- package/vendor/theus-arsenal/rules/cpp/testing.md +44 -0
- package/vendor/theus-arsenal/rules/csharp/coding-style.md +72 -0
- package/vendor/theus-arsenal/rules/csharp/hooks.md +25 -0
- package/vendor/theus-arsenal/rules/csharp/patterns.md +50 -0
- package/vendor/theus-arsenal/rules/csharp/security.md +58 -0
- package/vendor/theus-arsenal/rules/csharp/testing.md +50 -0
- package/vendor/theus-arsenal/rules/dart/coding-style.md +159 -0
- package/vendor/theus-arsenal/rules/dart/hooks.md +68 -0
- package/vendor/theus-arsenal/rules/dart/patterns.md +261 -0
- package/vendor/theus-arsenal/rules/dart/security.md +135 -0
- package/vendor/theus-arsenal/rules/dart/testing.md +215 -0
- package/vendor/theus-arsenal/rules/fsharp/coding-style.md +112 -0
- package/vendor/theus-arsenal/rules/fsharp/hooks.md +26 -0
- package/vendor/theus-arsenal/rules/fsharp/patterns.md +111 -0
- package/vendor/theus-arsenal/rules/fsharp/security.md +76 -0
- package/vendor/theus-arsenal/rules/fsharp/testing.md +62 -0
- package/vendor/theus-arsenal/rules/golang/coding-style.md +32 -0
- package/vendor/theus-arsenal/rules/golang/hooks.md +17 -0
- package/vendor/theus-arsenal/rules/golang/patterns.md +45 -0
- package/vendor/theus-arsenal/rules/golang/security.md +34 -0
- package/vendor/theus-arsenal/rules/golang/testing.md +31 -0
- package/vendor/theus-arsenal/rules/java/coding-style.md +114 -0
- package/vendor/theus-arsenal/rules/java/hooks.md +18 -0
- package/vendor/theus-arsenal/rules/java/patterns.md +147 -0
- package/vendor/theus-arsenal/rules/java/security.md +101 -0
- package/vendor/theus-arsenal/rules/java/testing.md +133 -0
- package/vendor/theus-arsenal/rules/kotlin/coding-style.md +86 -0
- package/vendor/theus-arsenal/rules/kotlin/hooks.md +17 -0
- package/vendor/theus-arsenal/rules/kotlin/patterns.md +146 -0
- package/vendor/theus-arsenal/rules/kotlin/security.md +82 -0
- package/vendor/theus-arsenal/rules/kotlin/testing.md +128 -0
- package/vendor/theus-arsenal/rules/nuxt/coding-style.md +47 -0
- package/vendor/theus-arsenal/rules/nuxt/hooks.md +39 -0
- package/vendor/theus-arsenal/rules/nuxt/patterns.md +54 -0
- package/vendor/theus-arsenal/rules/nuxt/security.md +48 -0
- package/vendor/theus-arsenal/rules/nuxt/testing.md +49 -0
- package/vendor/theus-arsenal/rules/php/coding-style.md +40 -0
- package/vendor/theus-arsenal/rules/php/hooks.md +24 -0
- package/vendor/theus-arsenal/rules/php/patterns.md +33 -0
- package/vendor/theus-arsenal/rules/php/security.md +37 -0
- package/vendor/theus-arsenal/rules/php/testing.md +38 -0
- package/vendor/theus-arsenal/rules/python/coding-style.md +42 -0
- package/vendor/theus-arsenal/rules/python/fastapi.md +58 -0
- package/vendor/theus-arsenal/rules/python/hooks.md +19 -0
- package/vendor/theus-arsenal/rules/python/patterns.md +39 -0
- package/vendor/theus-arsenal/rules/python/security.md +30 -0
- package/vendor/theus-arsenal/rules/python/testing.md +38 -0
- package/vendor/theus-arsenal/rules/react/coding-style.md +109 -0
- package/vendor/theus-arsenal/rules/react/hooks.md +187 -0
- package/vendor/theus-arsenal/rules/react/patterns.md +194 -0
- package/vendor/theus-arsenal/rules/react/security.md +180 -0
- package/vendor/theus-arsenal/rules/react/testing.md +208 -0
- package/vendor/theus-arsenal/rules/react-native/accessibility.md +55 -0
- package/vendor/theus-arsenal/rules/react-native/coding-style.md +71 -0
- package/vendor/theus-arsenal/rules/react-native/hooks.md +28 -0
- package/vendor/theus-arsenal/rules/react-native/patterns.md +88 -0
- package/vendor/theus-arsenal/rules/react-native/performance.md +45 -0
- package/vendor/theus-arsenal/rules/react-native/production-readiness.md +51 -0
- package/vendor/theus-arsenal/rules/react-native/security.md +43 -0
- package/vendor/theus-arsenal/rules/react-native/testing.md +52 -0
- package/vendor/theus-arsenal/rules/ruby/coding-style.md +46 -0
- package/vendor/theus-arsenal/rules/ruby/hooks.md +37 -0
- package/vendor/theus-arsenal/rules/ruby/patterns.md +44 -0
- package/vendor/theus-arsenal/rules/ruby/security.md +51 -0
- package/vendor/theus-arsenal/rules/ruby/testing.md +51 -0
- package/vendor/theus-arsenal/rules/rust/coding-style.md +151 -0
- package/vendor/theus-arsenal/rules/rust/hooks.md +16 -0
- package/vendor/theus-arsenal/rules/rust/patterns.md +168 -0
- package/vendor/theus-arsenal/rules/rust/security.md +141 -0
- package/vendor/theus-arsenal/rules/rust/testing.md +154 -0
- package/vendor/theus-arsenal/rules/swift/coding-style.md +47 -0
- package/vendor/theus-arsenal/rules/swift/hooks.md +20 -0
- package/vendor/theus-arsenal/rules/swift/patterns.md +66 -0
- package/vendor/theus-arsenal/rules/swift/security.md +33 -0
- package/vendor/theus-arsenal/rules/swift/testing.md +45 -0
- package/vendor/theus-arsenal/rules/typescript/coding-style.md +199 -0
- package/vendor/theus-arsenal/rules/typescript/hooks.md +22 -0
- package/vendor/theus-arsenal/rules/typescript/patterns.md +52 -0
- package/vendor/theus-arsenal/rules/typescript/security.md +28 -0
- package/vendor/theus-arsenal/rules/typescript/testing.md +18 -0
- package/vendor/theus-arsenal/rules/vue/coding-style.md +54 -0
- package/vendor/theus-arsenal/rules/vue/hooks.md +45 -0
- package/vendor/theus-arsenal/rules/vue/patterns.md +56 -0
- package/vendor/theus-arsenal/rules/vue/security.md +46 -0
- package/vendor/theus-arsenal/rules/vue/testing.md +53 -0
- package/vendor/theus-arsenal/rules/web/coding-style.md +108 -0
- package/vendor/theus-arsenal/rules/web/design-quality.md +75 -0
- package/vendor/theus-arsenal/rules/web/hooks.md +141 -0
- package/vendor/theus-arsenal/rules/web/patterns.md +91 -0
- package/vendor/theus-arsenal/rules/web/performance.md +76 -0
- package/vendor/theus-arsenal/rules/web/security.md +69 -0
- package/vendor/theus-arsenal/rules/web/testing.md +67 -0
- package/vendor/theus-arsenal/scripts/hooks/bash-hook-dispatcher.js +192 -0
- package/vendor/theus-arsenal/scripts/hooks/block-no-verify.js +556 -0
- package/vendor/theus-arsenal/scripts/hooks/check-console-log.js +92 -0
- package/vendor/theus-arsenal/scripts/hooks/check-hook-enabled.js +16 -0
- package/vendor/theus-arsenal/scripts/hooks/config-protection.js +171 -0
- package/vendor/theus-arsenal/scripts/hooks/design-quality-check.js +132 -0
- package/vendor/theus-arsenal/scripts/hooks/doc-file-warning.js +110 -0
- package/vendor/theus-arsenal/scripts/hooks/modo-seguro.js +158 -0
- package/vendor/theus-arsenal/scripts/hooks/notificacion-escritorio.js +208 -0
- package/vendor/theus-arsenal/scripts/hooks/plugin-hook-bootstrap.js +280 -0
- package/vendor/theus-arsenal/scripts/hooks/post-bash-command-log.js +87 -0
- package/vendor/theus-arsenal/scripts/hooks/post-bash-dispatcher.js +24 -0
- package/vendor/theus-arsenal/scripts/hooks/post-bash-pr-created.js +60 -0
- package/vendor/theus-arsenal/scripts/hooks/post-edit-accumulator.js +94 -0
- package/vendor/theus-arsenal/scripts/hooks/post-edit-console-warn.js +54 -0
- package/vendor/theus-arsenal/scripts/hooks/post-edit-format.js +110 -0
- package/vendor/theus-arsenal/scripts/hooks/post-edit-typecheck.js +98 -0
- package/vendor/theus-arsenal/scripts/hooks/pre-bash-commit-quality.js +447 -0
- package/vendor/theus-arsenal/scripts/hooks/pre-bash-dev-server-block.js +232 -0
- package/vendor/theus-arsenal/scripts/hooks/pre-bash-dispatcher.js +27 -0
- package/vendor/theus-arsenal/scripts/hooks/pre-compact.js +101 -0
- package/vendor/theus-arsenal/scripts/hooks/pretooluse-visible-output.js +49 -0
- package/vendor/theus-arsenal/scripts/hooks/quality-gate.js +168 -0
- package/vendor/theus-arsenal/scripts/hooks/run-with-flags.js +271 -0
- package/vendor/theus-arsenal/scripts/hooks/salud-mcp.js +749 -0
- package/vendor/theus-arsenal/scripts/hooks/seguimiento-costos.js +161 -0
- package/vendor/theus-arsenal/scripts/hooks/session-end.js +340 -0
- package/vendor/theus-arsenal/scripts/hooks/session-start.js +906 -0
- package/vendor/theus-arsenal/scripts/hooks/stop-format-typecheck.js +263 -0
- package/vendor/theus-arsenal/scripts/hooks/suggest-compact.js +286 -0
- package/vendor/theus-arsenal/scripts/hooks/theus-context-monitor.js +289 -0
- package/vendor/theus-arsenal/scripts/hooks/verificacion-factual.js +1278 -0
- package/vendor/theus-arsenal/scripts/lib/agent-data-home.js +96 -0
- package/vendor/theus-arsenal/scripts/lib/cost-estimate.js +66 -0
- package/vendor/theus-arsenal/scripts/lib/hook-flags.js +79 -0
- package/vendor/theus-arsenal/scripts/lib/llm-summary.js +185 -0
- package/vendor/theus-arsenal/scripts/lib/loopback-guard.js +54 -0
- package/vendor/theus-arsenal/scripts/lib/observer-sessions.js +237 -0
- package/vendor/theus-arsenal/scripts/lib/package-manager.d.ts +120 -0
- package/vendor/theus-arsenal/scripts/lib/package-manager.js +434 -0
- package/vendor/theus-arsenal/scripts/lib/path-safety.js +86 -0
- package/vendor/theus-arsenal/scripts/lib/plan-canvas/markdown.js +285 -0
- package/vendor/theus-arsenal/scripts/lib/plan-canvas/sdk.js +238 -0
- package/vendor/theus-arsenal/scripts/lib/plan-canvas/server.js +534 -0
- package/vendor/theus-arsenal/scripts/lib/plan-canvas/sessions.js +274 -0
- package/vendor/theus-arsenal/scripts/lib/plan-canvas/ui.js +546 -0
- package/vendor/theus-arsenal/scripts/lib/project-detect.js +451 -0
- package/vendor/theus-arsenal/scripts/lib/resolve-formatter.js +193 -0
- package/vendor/theus-arsenal/scripts/lib/resolve-theus-root.js +101 -0
- package/vendor/theus-arsenal/scripts/lib/session-aliases.d.ts +138 -0
- package/vendor/theus-arsenal/scripts/lib/session-aliases.js +483 -0
- package/vendor/theus-arsenal/scripts/lib/session-bridge.js +155 -0
- package/vendor/theus-arsenal/scripts/lib/session-manager.d.ts +137 -0
- package/vendor/theus-arsenal/scripts/lib/session-manager.js +555 -0
- package/vendor/theus-arsenal/scripts/lib/shell-split.js +86 -0
- package/vendor/theus-arsenal/scripts/lib/shell-substitution.js +501 -0
- package/vendor/theus-arsenal/scripts/lib/skill-evolution/dashboard.js +414 -0
- package/vendor/theus-arsenal/scripts/lib/skill-evolution/health.js +285 -0
- package/vendor/theus-arsenal/scripts/lib/skill-evolution/index.js +22 -0
- package/vendor/theus-arsenal/scripts/lib/skill-evolution/provenance.js +200 -0
- package/vendor/theus-arsenal/scripts/lib/skill-evolution/tracker.js +157 -0
- package/vendor/theus-arsenal/scripts/lib/skill-evolution/versioning.js +246 -0
- package/vendor/theus-arsenal/scripts/lib/transcript-context.js +232 -0
- package/vendor/theus-arsenal/scripts/lib/utils.d.ts +205 -0
- package/vendor/theus-arsenal/scripts/lib/utils.js +658 -0
- package/vendor/theus-arsenal/scripts/plan-canvas.js +341 -0
- package/vendor/theus-arsenal/scripts/setup-package-manager.js +46 -0
- package/vendor/theus-arsenal/scripts/skills-health.js +143 -0
- package/vendor/theus-arsenal/skills/a11y-frontend/SKILL.md +444 -0
- package/vendor/theus-arsenal/skills/accesibilidad/SKILL.md +144 -0
- package/vendor/theus-arsenal/skills/acelerador-throughput-datos/SKILL.md +72 -0
- package/vendor/theus-arsenal/skills/agente-scraper-datos/SKILL.md +771 -0
- package/vendor/theus-arsenal/skills/analisis-plataformas-competencia/SKILL.md +137 -0
- package/vendor/theus-arsenal/skills/api-x/SKILL.md +233 -0
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/SKILL.md +335 -0
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/agents/observer-loop.sh +374 -0
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/agents/observer.md +188 -0
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/agents/session-guardian.sh +153 -0
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/agents/start-observer.sh +253 -0
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/config.json +8 -0
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/hooks/observe.sh +594 -0
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/scripts/detect-project.sh +325 -0
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/scripts/instinct-cli.py +1918 -0
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/scripts/lib/arsenal-dir.sh +23 -0
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/scripts/test_parse_instinct.py +1420 -0
- package/vendor/theus-arsenal/skills/arquitectura-hexagonal/SKILL.md +275 -0
- package/vendor/theus-arsenal/skills/arquitectura-limpia-android/SKILL.md +340 -0
- package/vendor/theus-arsenal/skills/arquitectura-pipelines-recomendacion/SKILL.md +112 -0
- package/vendor/theus-arsenal/skills/atlas-datos-prediccion/SKILL.md +53 -0
- package/vendor/theus-arsenal/skills/auditoria-arquitectura-agentes/SKILL.md +257 -0
- package/vendor/theus-arsenal/skills/auditoria-produccion/SKILL.md +180 -0
- package/vendor/theus-arsenal/skills/auditoria-rutas-clic/SKILL.md +243 -0
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/SKILL.md +180 -0
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/examples/high-score-example.md +89 -0
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/examples/low-score-example.md +87 -0
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/references/evaluation-criteria.md +71 -0
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/references/hook-integration.md +90 -0
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/scripts/evaluate.py +409 -0
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/templates/evaluation-report.md +86 -0
- package/vendor/theus-arsenal/skills/automatizacion-ssh-netmiko/SKILL.md +176 -0
- package/vendor/theus-arsenal/skills/base-datos-pubmed/SKILL.md +174 -0
- package/vendor/theus-arsenal/skills/base-datos-uspto/SKILL.md +173 -0
- package/vendor/theus-arsenal/skills/benchmark/SKILL.md +92 -0
- package/vendor/theus-arsenal/skills/bitacora-crecimiento/SKILL.md +120 -0
- package/vendor/theus-arsenal/skills/bucle-verificacion/SKILL.md +125 -0
- package/vendor/theus-arsenal/skills/buscar-primero/SKILL.md +184 -0
- package/vendor/theus-arsenal/skills/busqueda-exa/SKILL.md +111 -0
- package/vendor/theus-arsenal/skills/cache-por-hash/SKILL.md +160 -0
- package/vendor/theus-arsenal/skills/campana-marketing/SKILL.md +118 -0
- package/vendor/theus-arsenal/skills/capacidad-producto/SKILL.md +138 -0
- package/vendor/theus-arsenal/skills/cazador-vulnerabilidades/SKILL.md +104 -0
- package/vendor/theus-arsenal/skills/compactacion-estrategica/SKILL.md +115 -0
- package/vendor/theus-arsenal/skills/comparador-baskets-prediccion/SKILL.md +69 -0
- package/vendor/theus-arsenal/skills/compras-energia/SKILL.md +206 -0
- package/vendor/theus-arsenal/skills/concurrencia-swift-6-2/SKILL.md +224 -0
- package/vendor/theus-arsenal/skills/consejo/SKILL.md +201 -0
- package/vendor/theus-arsenal/skills/construccion-harness-agentes/SKILL.md +78 -0
- package/vendor/theus-arsenal/skills/constructor-conectores/SKILL.md +119 -0
- package/vendor/theus-arsenal/skills/constructor-equipos/SKILL.md +169 -0
- package/vendor/theus-arsenal/skills/consulta-documentacion/SKILL.md +92 -0
- package/vendor/theus-arsenal/skills/consultas-genomicas-gget/SKILL.md +170 -0
- package/vendor/theus-arsenal/skills/contacto-inversores/SKILL.md +95 -0
- package/vendor/theus-arsenal/skills/corrutinas-flows-kotlin/SKILL.md +284 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/SKILL.md +46 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/3d.md +86 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/animations.md +29 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/assets/charts-bar-chart.tsx +173 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/assets/text-animations-typewriter.tsx +100 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/assets/text-animations-word-highlight.tsx +108 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/assets.md +78 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/audio.md +172 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/calculate-metadata.md +104 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/can-decode.md +75 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/charts.md +58 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/compositions.md +146 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/display-captions.md +126 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/extract-frames.md +229 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/fonts.md +152 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/get-audio-duration.md +58 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/get-video-dimensions.md +68 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/get-video-duration.md +58 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/gifs.md +138 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/images.md +130 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/import-srt-captions.md +67 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/lottie.md +67 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/measuring-dom-nodes.md +34 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/measuring-text.md +143 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/sequencing.md +106 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/tailwind.md +11 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/text-animations.md +20 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/timing.md +179 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/transcribe-captions.md +19 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/transitions.md +122 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/trimming.md +52 -0
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/videos.md +171 -0
- package/vendor/theus-arsenal/skills/cumplimiento-aduanero/SKILL.md +270 -0
- package/vendor/theus-arsenal/skills/cumplimiento-hipaa/SKILL.md +78 -0
- package/vendor/theus-arsenal/skills/datos-sensibles-salud/SKILL.md +149 -0
- package/vendor/theus-arsenal/skills/decimales-tokens-evm/SKILL.md +128 -0
- package/vendor/theus-arsenal/skills/decisiones-arquitectura/SKILL.md +206 -0
- package/vendor/theus-arsenal/skills/demos-ui/SKILL.md +469 -0
- package/vendor/theus-arsenal/skills/desarrollo-por-intencion/SKILL.md +369 -0
- package/vendor/theus-arsenal/skills/descubrimiento-marca/SKILL.md +149 -0
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/10_proposito-porque.md +42 -0
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/20_posicionamiento.md +47 -0
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/30_audiencia-nicho.md +53 -0
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/40_personalidad-arquetipo.md +61 -0
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/50_voz-tono.md +62 -0
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/60_narrativa-historia.md +54 -0
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/70_tension-fundador.md +50 -0
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/90_SINTESIS.md +133 -0
- package/vendor/theus-arsenal/skills/descubrimiento-plugins-laravel/SKILL.md +230 -0
- package/vendor/theus-arsenal/skills/destilado-reglas/SKILL.md +263 -0
- package/vendor/theus-arsenal/skills/destilado-reglas/scripts/scan-rules.sh +58 -0
- package/vendor/theus-arsenal/skills/destilado-reglas/scripts/scan-skills.sh +129 -0
- package/vendor/theus-arsenal/skills/diagnostico-bgp/SKILL.md +170 -0
- package/vendor/theus-arsenal/skills/direccion-estetica/SKILL.md +220 -0
- package/vendor/theus-arsenal/skills/direccion-estetica/references/taxonomia-generos.md +89 -0
- package/vendor/theus-arsenal/skills/diseno-api/SKILL.md +522 -0
- package/vendor/theus-arsenal/skills/diseno-liquid-glass/SKILL.md +282 -0
- package/vendor/theus-arsenal/skills/e2e-escritorio-windows/SKILL.md +879 -0
- package/vendor/theus-arsenal/skills/edicion-video/SKILL.md +289 -0
- package/vendor/theus-arsenal/skills/enfoque-producto/SKILL.md +91 -0
- package/vendor/theus-arsenal/skills/entornos-flox/SKILL.md +493 -0
- package/vendor/theus-arsenal/skills/estandares-codigo/SKILL.md +548 -0
- package/vendor/theus-arsenal/skills/estandares-cpp/SKILL.md +727 -0
- package/vendor/theus-arsenal/skills/estandares-java/SKILL.md +389 -0
- package/vendor/theus-arsenal/skills/estilo-legado/SKILL.md +149 -0
- package/vendor/theus-arsenal/skills/estructura-informes-competencia/SKILL.md +95 -0
- package/vendor/theus-arsenal/skills/evaluacion-academica/SKILL.md +165 -0
- package/vendor/theus-arsenal/skills/explorador-skills/SKILL.md +129 -0
- package/vendor/theus-arsenal/skills/flujo-git/SKILL.md +714 -0
- package/vendor/theus-arsenal/skills/flujo-ingenieria-ml/SKILL.md +343 -0
- package/vendor/theus-arsenal/skills/flujo-tdd/SKILL.md +584 -0
- package/vendor/theus-arsenal/skills/forja-personas/SKILL.md +298 -0
- package/vendor/theus-arsenal/skills/forja-personas/gacha.py +224 -0
- package/vendor/theus-arsenal/skills/forja-personas/gacha.sh +5 -0
- package/vendor/theus-arsenal/skills/forja-personas/references/avatar-style.md +123 -0
- package/vendor/theus-arsenal/skills/forja-personas/references/boundary-rules.md +53 -0
- package/vendor/theus-arsenal/skills/forja-personas/references/error-handling.md +53 -0
- package/vendor/theus-arsenal/skills/forja-personas/references/identity-tension.md +48 -0
- package/vendor/theus-arsenal/skills/forja-personas/references/naming-system.md +39 -0
- package/vendor/theus-arsenal/skills/forja-personas/references/output-template.md +166 -0
- package/vendor/theus-arsenal/skills/fundamentos-animacion/SKILL.md +296 -0
- package/vendor/theus-arsenal/skills/generacion-iconos-ios/SKILL.md +156 -0
- package/vendor/theus-arsenal/skills/generacion-iconos-ios/scripts/generate_icons.swift +258 -0
- package/vendor/theus-arsenal/skills/generacion-iconos-ios/scripts/iconify_gen.sh +235 -0
- package/vendor/theus-arsenal/skills/gestion-excepciones-logisticas/SKILL.md +208 -0
- package/vendor/theus-arsenal/skills/gestion-transportistas/SKILL.md +204 -0
- package/vendor/theus-arsenal/skills/guia-adopcion-ml/SKILL.md +64 -0
- package/vendor/theus-arsenal/skills/harness-agente-autonomo/SKILL.md +252 -0
- package/vendor/theus-arsenal/skills/harness-eval-clinico/SKILL.md +212 -0
- package/vendor/theus-arsenal/skills/harness-evaluacion/SKILL.md +296 -0
- package/vendor/theus-arsenal/skills/harness-generador-evaluador/SKILL.md +254 -0
- package/vendor/theus-arsenal/skills/homelab-diseno-red/SKILL.md +120 -0
- package/vendor/theus-arsenal/skills/homelab-dns-pihole/SKILL.md +264 -0
- package/vendor/theus-arsenal/skills/homelab-preparacion-red/SKILL.md +144 -0
- package/vendor/theus-arsenal/skills/homelab-segmentacion-vlan/SKILL.md +307 -0
- package/vendor/theus-arsenal/skills/homelab-vpn-wireguard/SKILL.md +299 -0
- package/vendor/theus-arsenal/skills/ingenieria-agentica/SKILL.md +96 -0
- package/vendor/theus-arsenal/skills/inspeccion-animaciones-blender/SKILL.md +164 -0
- package/vendor/theus-arsenal/skills/instaladores-python/SKILL.md +820 -0
- package/vendor/theus-arsenal/skills/integracion-jira/SKILL.md +307 -0
- package/vendor/theus-arsenal/skills/inteligencia-leads/SKILL.md +312 -0
- package/vendor/theus-arsenal/skills/inteligencia-leads/agents/agente-enriquecimiento.md +87 -0
- package/vendor/theus-arsenal/skills/inteligencia-leads/agents/mapeador-mutuos.md +76 -0
- package/vendor/theus-arsenal/skills/inteligencia-leads/agents/puntuador-senales.md +60 -0
- package/vendor/theus-arsenal/skills/inteligencia-leads/agents/redactor-outreach.md +102 -0
- package/vendor/theus-arsenal/skills/inteligencia-mercados-prediccion/SKILL.md +53 -0
- package/vendor/theus-arsenal/skills/introspeccion-agente/SKILL.md +150 -0
- package/vendor/theus-arsenal/skills/inventario-skills/SKILL.md +194 -0
- package/vendor/theus-arsenal/skills/inventario-skills/scripts/quick-diff.sh +87 -0
- package/vendor/theus-arsenal/skills/inventario-skills/scripts/save-results.sh +57 -0
- package/vendor/theus-arsenal/skills/inventario-skills/scripts/scan.sh +170 -0
- package/vendor/theus-arsenal/skills/investigacion-mercado/SKILL.md +87 -0
- package/vendor/theus-arsenal/skills/investigacion-oraculos-prediccion/SKILL.md +59 -0
- package/vendor/theus-arsenal/skills/investigacion-profunda/SKILL.md +161 -0
- package/vendor/theus-arsenal/skills/keccak256-nodejs/SKILL.md +100 -0
- package/vendor/theus-arsenal/skills/libro-decisiones-recursivo/SKILL.md +82 -0
- package/vendor/theus-arsenal/skills/lienzo-planes/SKILL.md +111 -0
- package/vendor/theus-arsenal/skills/limpieza-configuracion/SKILL.md +116 -0
- package/vendor/theus-arsenal/skills/logistica-inversa-devoluciones/SKILL.md +241 -0
- package/vendor/theus-arsenal/skills/manejo-errores/SKILL.md +375 -0
- package/vendor/theus-arsenal/skills/materiales-inversores/SKILL.md +101 -0
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/SKILL.md +170 -0
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/forget.mjs +44 -0
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/info.mjs +24 -0
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/init.mjs +152 -0
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/list.mjs +40 -0
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/migrate.mjs +214 -0
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/resume.mjs +36 -0
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/save.mjs +210 -0
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/shared.mjs +402 -0
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/hooks/session-start.mjs +238 -0
- package/vendor/theus-arsenal/skills/metodologia-benchmarks/SKILL.md +131 -0
- package/vendor/theus-arsenal/skills/migraciones-bd/SKILL.md +430 -0
- package/vendor/theus-arsenal/skills/modelos-fundacionales-en-dispositivo/SKILL.md +244 -0
- package/vendor/theus-arsenal/skills/modo-seguro/SKILL.md +86 -0
- package/vendor/theus-arsenal/skills/motion-avanzado/SKILL.md +592 -0
- package/vendor/theus-arsenal/skills/motor-de-contenido/SKILL.md +136 -0
- package/vendor/theus-arsenal/skills/no-conformidades-calidad/SKILL.md +249 -0
- package/vendor/theus-arsenal/skills/onboarding-codigo/SKILL.md +244 -0
- package/vendor/theus-arsenal/skills/operaciones-agentes-empresariales/SKILL.md +51 -0
- package/vendor/theus-arsenal/skills/operaciones-conocimiento/SKILL.md +159 -0
- package/vendor/theus-arsenal/skills/operaciones-correo/SKILL.md +123 -0
- package/vendor/theus-arsenal/skills/operaciones-facturacion/SKILL.md +142 -0
- package/vendor/theus-arsenal/skills/operaciones-flujo-proyectos/SKILL.md +110 -0
- package/vendor/theus-arsenal/skills/operaciones-github/SKILL.md +143 -0
- package/vendor/theus-arsenal/skills/operaciones-google-workspace/SKILL.md +100 -0
- package/vendor/theus-arsenal/skills/operaciones-investigacion/SKILL.md +124 -0
- package/vendor/theus-arsenal/skills/operaciones-mensajes/SKILL.md +103 -0
- package/vendor/theus-arsenal/skills/operaciones-terminal/SKILL.md +110 -0
- package/vendor/theus-arsenal/skills/optimizacion-benchmark/SKILL.md +70 -0
- package/vendor/theus-arsenal/skills/optimizacion-costos-llm/SKILL.md +182 -0
- package/vendor/theus-arsenal/skills/optimizador-conexiones/SKILL.md +191 -0
- package/vendor/theus-arsenal/skills/optimizador-paralelismo/SKILL.md +75 -0
- package/vendor/theus-arsenal/skills/optimizador-prompts/SKILL.md +374 -0
- package/vendor/theus-arsenal/skills/orq-agregar-funcionalidad/SKILL.md +37 -0
- package/vendor/theus-arsenal/skills/orq-cambiar-funcionalidad/SKILL.md +36 -0
- package/vendor/theus-arsenal/skills/orq-construir-mvp/SKILL.md +38 -0
- package/vendor/theus-arsenal/skills/orq-corregir-defecto/SKILL.md +36 -0
- package/vendor/theus-arsenal/skills/orq-pipeline/SKILL.md +134 -0
- package/vendor/theus-arsenal/skills/orq-refinar-codigo/SKILL.md +49 -0
- package/vendor/theus-arsenal/skills/orquestacion-equipos-agentes/SKILL.md +117 -0
- package/vendor/theus-arsenal/skills/pagos-agentes-x402/SKILL.md +237 -0
- package/vendor/theus-arsenal/skills/patrones-angular/SKILL.md +153 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/angular-animations.md +160 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/angular-aria.md +410 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/cli.md +86 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/component-harnesses.md +59 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/component-styling.md +91 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/components.md +117 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/creating-services.md +97 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/data-resolvers.md +69 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/define-routes.md +67 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/defining-providers.md +72 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/di-fundamentals.md +120 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/e2e-testing.md +56 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/effects.md +83 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/hierarchical-injectors.md +43 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/host-elements.md +80 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/injection-context.md +63 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/inputs.md +101 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/linked-signal.md +59 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/loading-strategies.md +61 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/mcp.md +67 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/navigate-to-routes.md +69 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/outputs.md +86 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/reactive-forms.md +122 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/rendering-strategies.md +44 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/resource.md +77 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/route-animations.md +56 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/route-guards.md +52 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/router-lifecycle.md +45 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/router-testing.md +87 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/show-routes-with-outlets.md +68 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/signal-forms.md +795 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/signals-overview.md +94 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/tailwind-css.md +69 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/template-driven-forms.md +114 -0
- package/vendor/theus-arsenal/skills/patrones-angular/references/testing-fundamentals.md +65 -0
- package/vendor/theus-arsenal/skills/patrones-animacion/SKILL.md +432 -0
- package/vendor/theus-arsenal/skills/patrones-backend/SKILL.md +560 -0
- package/vendor/theus-arsenal/skills/patrones-cdss-clinico/SKILL.md +249 -0
- package/vendor/theus-arsenal/skills/patrones-cisco-ios/SKILL.md +148 -0
- package/vendor/theus-arsenal/skills/patrones-clickhouse/SKILL.md +443 -0
- package/vendor/theus-arsenal/skills/patrones-compose-multiplatform/SKILL.md +298 -0
- package/vendor/theus-arsenal/skills/patrones-dart-flutter/SKILL.md +566 -0
- package/vendor/theus-arsenal/skills/patrones-despliegue/SKILL.md +426 -0
- package/vendor/theus-arsenal/skills/patrones-django/SKILL.md +739 -0
- package/vendor/theus-arsenal/skills/patrones-django-celery/SKILL.md +456 -0
- package/vendor/theus-arsenal/skills/patrones-docker/SKILL.md +363 -0
- package/vendor/theus-arsenal/skills/patrones-dotnet/SKILL.md +321 -0
- package/vendor/theus-arsenal/skills/patrones-emr-clinico/SKILL.md +168 -0
- package/vendor/theus-arsenal/skills/patrones-fastapi/SKILL.md +513 -0
- package/vendor/theus-arsenal/skills/patrones-frontend/SKILL.md +655 -0
- package/vendor/theus-arsenal/skills/patrones-go/SKILL.md +674 -0
- package/vendor/theus-arsenal/skills/patrones-jpa/SKILL.md +156 -0
- package/vendor/theus-arsenal/skills/patrones-kotlin/SKILL.md +717 -0
- package/vendor/theus-arsenal/skills/patrones-kotlin-exposed/SKILL.md +724 -0
- package/vendor/theus-arsenal/skills/patrones-kotlin-ktor/SKILL.md +694 -0
- package/vendor/theus-arsenal/skills/patrones-kubernetes/SKILL.md +754 -0
- package/vendor/theus-arsenal/skills/patrones-laravel/SKILL.md +414 -0
- package/vendor/theus-arsenal/skills/patrones-mcp/SKILL.md +66 -0
- package/vendor/theus-arsenal/skills/patrones-mysql/SKILL.md +420 -0
- package/vendor/theus-arsenal/skills/patrones-nestjs/SKILL.md +229 -0
- package/vendor/theus-arsenal/skills/patrones-nextjs/SKILL.md +56 -0
- package/vendor/theus-arsenal/skills/patrones-nuxt4/SKILL.md +99 -0
- package/vendor/theus-arsenal/skills/patrones-perl/SKILL.md +508 -0
- package/vendor/theus-arsenal/skills/patrones-postgres/SKILL.md +141 -0
- package/vendor/theus-arsenal/skills/patrones-prisma/SKILL.md +399 -0
- package/vendor/theus-arsenal/skills/patrones-python/SKILL.md +750 -0
- package/vendor/theus-arsenal/skills/patrones-pytorch/SKILL.md +400 -0
- package/vendor/theus-arsenal/skills/patrones-quarkus/SKILL.md +729 -0
- package/vendor/theus-arsenal/skills/patrones-react/SKILL.md +339 -0
- package/vendor/theus-arsenal/skills/patrones-react-native/SKILL.md +325 -0
- package/vendor/theus-arsenal/skills/patrones-redis/SKILL.md +401 -0
- package/vendor/theus-arsenal/skills/patrones-rust/SKILL.md +504 -0
- package/vendor/theus-arsenal/skills/patrones-springboot/SKILL.md +314 -0
- package/vendor/theus-arsenal/skills/patrones-swiftui/SKILL.md +261 -0
- package/vendor/theus-arsenal/skills/patrones-tinystruct/SKILL.md +281 -0
- package/vendor/theus-arsenal/skills/patrones-tinystruct/references/architecture.md +90 -0
- package/vendor/theus-arsenal/skills/patrones-tinystruct/references/data-handling.md +60 -0
- package/vendor/theus-arsenal/skills/patrones-tinystruct/references/database.md +99 -0
- package/vendor/theus-arsenal/skills/patrones-tinystruct/references/routing.md +64 -0
- package/vendor/theus-arsenal/skills/patrones-tinystruct/references/system-usage.md +97 -0
- package/vendor/theus-arsenal/skills/patrones-tinystruct/references/testing.md +72 -0
- package/vendor/theus-arsenal/skills/patrones-vite/SKILL.md +449 -0
- package/vendor/theus-arsenal/skills/patrones-vue/SKILL.md +469 -0
- package/vendor/theus-arsenal/skills/persistencia-actores-swift/SKILL.md +148 -0
- package/vendor/theus-arsenal/skills/pipeline-opensource/SKILL.md +254 -0
- package/vendor/theus-arsenal/skills/planificacion-demanda-inventario/SKILL.md +236 -0
- package/vendor/theus-arsenal/skills/planificador-trades-prediccion/SKILL.md +60 -0
- package/vendor/theus-arsenal/skills/plano-tecnico/SKILL.md +102 -0
- package/vendor/theus-arsenal/skills/presentaciones-html/SKILL.md +189 -0
- package/vendor/theus-arsenal/skills/presentaciones-html/STYLE_PRESETS.md +330 -0
- package/vendor/theus-arsenal/skills/presentaciones-html/animation-patterns.md +122 -0
- package/vendor/theus-arsenal/skills/presentaciones-html/html-template.md +419 -0
- package/vendor/theus-arsenal/skills/presentaciones-html/scripts/export-pdf.sh +418 -0
- package/vendor/theus-arsenal/skills/presentaciones-html/scripts/extract-pptx.py +96 -0
- package/vendor/theus-arsenal/skills/presentaciones-html/viewport-base.css +153 -0
- package/vendor/theus-arsenal/skills/presupuesto-contexto/SKILL.md +263 -0
- package/vendor/theus-arsenal/skills/procesamiento-documentos-nutrient/SKILL.md +168 -0
- package/vendor/theus-arsenal/skills/programacion-produccion/SKILL.md +220 -0
- package/vendor/theus-arsenal/skills/publicacion-cruzada/SKILL.md +117 -0
- package/vendor/theus-arsenal/skills/publicador-social/SKILL.md +121 -0
- package/vendor/theus-arsenal/skills/puerta-de-entrega/SKILL.md +164 -0
- package/vendor/theus-arsenal/skills/puerta-de-entrega/hooks/puerta-entrega.py +242 -0
- package/vendor/theus-arsenal/skills/pulir-interfaces/SKILL.md +126 -0
- package/vendor/theus-arsenal/skills/qa-navegador/SKILL.md +103 -0
- package/vendor/theus-arsenal/skills/ranking-grafo-social/SKILL.md +153 -0
- package/vendor/theus-arsenal/skills/recuperacion-iterativa/SKILL.md +236 -0
- package/vendor/theus-arsenal/skills/redaccion-articulos/SKILL.md +81 -0
- package/vendor/theus-arsenal/skills/regex-vs-llm/SKILL.md +221 -0
- package/vendor/theus-arsenal/skills/regresion-codigo-ia/SKILL.md +388 -0
- package/vendor/theus-arsenal/skills/rendimiento-react/SKILL.md +567 -0
- package/vendor/theus-arsenal/skills/revision-codigo-flutter-dart/SKILL.md +442 -0
- package/vendor/theus-arsenal/skills/revision-literatura-cientifica/SKILL.md +191 -0
- package/vendor/theus-arsenal/skills/revision-multiperspectiva/SKILL.md +302 -0
- package/vendor/theus-arsenal/skills/revision-riesgo-prediccion/SKILL.md +56 -0
- package/vendor/theus-arsenal/skills/revision-seguridad/SKILL.md +505 -0
- package/vendor/theus-arsenal/skills/revision-seguridad/cloud-infrastructure-security.md +361 -0
- package/vendor/theus-arsenal/skills/runtime-bun/SKILL.md +83 -0
- package/vendor/theus-arsenal/skills/salud-codigo-codescene/SKILL.md +163 -0
- package/vendor/theus-arsenal/skills/salud-interfaces-red/SKILL.md +143 -0
- package/vendor/theus-arsenal/skills/seguimiento-costos/SKILL.md +122 -0
- package/vendor/theus-arsenal/skills/seguridad-agentes-trading/SKILL.md +145 -0
- package/vendor/theus-arsenal/skills/seguridad-amm-defi/SKILL.md +166 -0
- package/vendor/theus-arsenal/skills/seguridad-django/SKILL.md +648 -0
- package/vendor/theus-arsenal/skills/seguridad-laravel/SKILL.md +945 -0
- package/vendor/theus-arsenal/skills/seguridad-perl/SKILL.md +507 -0
- package/vendor/theus-arsenal/skills/seguridad-quarkus/SKILL.md +474 -0
- package/vendor/theus-arsenal/skills/seguridad-springboot/SKILL.md +279 -0
- package/vendor/theus-arsenal/skills/seo/SKILL.md +166 -0
- package/vendor/theus-arsenal/skills/sistema-diseno/SKILL.md +81 -0
- package/vendor/theus-arsenal/skills/sistema-operativo-agentico/SKILL.md +375 -0
- package/vendor/theus-arsenal/skills/sistemas-latencia-critica/SKILL.md +65 -0
- package/vendor/theus-arsenal/skills/tdd-django/SKILL.md +735 -0
- package/vendor/theus-arsenal/skills/tdd-laravel/SKILL.md +673 -0
- package/vendor/theus-arsenal/skills/tdd-quarkus/SKILL.md +817 -0
- package/vendor/theus-arsenal/skills/tdd-springboot/SKILL.md +165 -0
- package/vendor/theus-arsenal/skills/testing-cpp/SKILL.md +328 -0
- package/vendor/theus-arsenal/skills/testing-csharp/SKILL.md +321 -0
- package/vendor/theus-arsenal/skills/testing-e2e/SKILL.md +325 -0
- package/vendor/theus-arsenal/skills/testing-go/SKILL.md +719 -0
- package/vendor/theus-arsenal/skills/testing-kotlin/SKILL.md +829 -0
- package/vendor/theus-arsenal/skills/testing-perl/SKILL.md +479 -0
- package/vendor/theus-arsenal/skills/testing-protocolos-di-swift/SKILL.md +196 -0
- package/vendor/theus-arsenal/skills/testing-python/SKILL.md +815 -0
- package/vendor/theus-arsenal/skills/testing-react/SKILL.md +421 -0
- package/vendor/theus-arsenal/skills/testing-rust/SKILL.md +506 -0
- package/vendor/theus-arsenal/skills/tours-de-codigo/SKILL.md +252 -0
- package/vendor/theus-arsenal/skills/traduccion-documentos-visado/SKILL.md +121 -0
- package/vendor/theus-arsenal/skills/ui-a-vue/SKILL.md +141 -0
- package/vendor/theus-arsenal/skills/validacion-config-red/SKILL.md +211 -0
- package/vendor/theus-arsenal/skills/verificacion-django/SKILL.md +470 -0
- package/vendor/theus-arsenal/skills/verificacion-factual/SKILL.md +142 -0
- package/vendor/theus-arsenal/skills/verificacion-laravel/SKILL.md +184 -0
- package/vendor/theus-arsenal/skills/verificacion-quarkus/SKILL.md +485 -0
- package/vendor/theus-arsenal/skills/verificacion-springboot/SKILL.md +237 -0
- package/vendor/theus-arsenal/skills/videodb/SKILL.md +374 -0
- package/vendor/theus-arsenal/skills/videodb/reference/api-reference.md +550 -0
- package/vendor/theus-arsenal/skills/videodb/reference/capture-reference.md +407 -0
- package/vendor/theus-arsenal/skills/videodb/reference/capture.md +101 -0
- package/vendor/theus-arsenal/skills/videodb/reference/editor.md +443 -0
- package/vendor/theus-arsenal/skills/videodb/reference/generative.md +331 -0
- package/vendor/theus-arsenal/skills/videodb/reference/rtstream-reference.md +564 -0
- package/vendor/theus-arsenal/skills/videodb/reference/rtstream.md +65 -0
- package/vendor/theus-arsenal/skills/videodb/reference/search.md +230 -0
- package/vendor/theus-arsenal/skills/videodb/reference/streaming.md +406 -0
- package/vendor/theus-arsenal/skills/videodb/reference/use-cases.md +118 -0
- package/vendor/theus-arsenal/skills/videodb/scripts/ws_listener.py +279 -0
- package/vendor/theus-arsenal/skills/videos-manim/SKILL.md +91 -0
- package/vendor/theus-arsenal/skills/videos-manim/assets/network_graph_scene.py +52 -0
- package/vendor/theus-arsenal/skills/vigilancia-canary/SKILL.md +108 -0
- package/vendor/theus-arsenal/skills/voz-de-marca/SKILL.md +106 -0
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Biblioteca de gestión de sesiones para Theus.
|
|
3
|
+
* Provee operaciones CRUD para archivos de sesión guardados como markdown en
|
|
4
|
+
* `<data home>/session-data/` (por defecto ~/.theus/arsenal/session-data/) con
|
|
5
|
+
* compatibilidad de lectura para el directorio heredado `<data home>/sessions/`.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/** Metadatos parseados del nombre de archivo de una sesión */
|
|
9
|
+
export interface SessionFilenameMeta {
|
|
10
|
+
/** Nombre de archivo original */
|
|
11
|
+
filename: string;
|
|
12
|
+
/** ID corto extraído del nombre de archivo, o "no-id" para el formato antiguo */
|
|
13
|
+
shortId: string;
|
|
14
|
+
/** Cadena de fecha en formato YYYY-MM-DD */
|
|
15
|
+
date: string;
|
|
16
|
+
/** Objeto Date parseado a partir de la cadena de fecha */
|
|
17
|
+
datetime: Date;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/** Metadatos parseados del contenido markdown de la sesión */
|
|
21
|
+
export interface SessionMetadata {
|
|
22
|
+
title: string | null;
|
|
23
|
+
date: string | null;
|
|
24
|
+
started: string | null;
|
|
25
|
+
lastUpdated: string | null;
|
|
26
|
+
project: string | null;
|
|
27
|
+
branch: string | null;
|
|
28
|
+
worktree: string | null;
|
|
29
|
+
completed: string[];
|
|
30
|
+
inProgress: string[];
|
|
31
|
+
notes: string;
|
|
32
|
+
context: string;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** Estadísticas calculadas a partir del contenido de la sesión */
|
|
36
|
+
export interface SessionStats {
|
|
37
|
+
totalItems: number;
|
|
38
|
+
completedItems: number;
|
|
39
|
+
inProgressItems: number;
|
|
40
|
+
lineCount: number;
|
|
41
|
+
hasNotes: boolean;
|
|
42
|
+
hasContext: boolean;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/** Objeto de sesión devuelto por getAllSessions y getSessionById */
|
|
46
|
+
export interface Session extends SessionFilenameMeta {
|
|
47
|
+
/** Ruta completa en el sistema de archivos del archivo de sesión */
|
|
48
|
+
sessionPath: string;
|
|
49
|
+
/** Si el archivo tiene algún contenido */
|
|
50
|
+
hasContent?: boolean;
|
|
51
|
+
/** Tamaño del archivo en bytes */
|
|
52
|
+
size: number;
|
|
53
|
+
/** Fecha de última modificación */
|
|
54
|
+
modifiedTime: Date;
|
|
55
|
+
/** Fecha de creación del archivo (cae a ctime en Linux) */
|
|
56
|
+
createdTime: Date;
|
|
57
|
+
/** Contenido markdown de la sesión (solo cuando includeContent=true) */
|
|
58
|
+
content?: string | null;
|
|
59
|
+
/** Metadatos parseados (solo cuando includeContent=true) */
|
|
60
|
+
metadata?: SessionMetadata;
|
|
61
|
+
/** Estadísticas de la sesión (solo cuando includeContent=true) */
|
|
62
|
+
stats?: SessionStats;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/** Resultado paginado de getAllSessions */
|
|
66
|
+
export interface SessionListResult {
|
|
67
|
+
sessions: Session[];
|
|
68
|
+
total: number;
|
|
69
|
+
offset: number;
|
|
70
|
+
limit: number;
|
|
71
|
+
hasMore: boolean;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export interface GetAllSessionsOptions {
|
|
75
|
+
/** Número máximo de sesiones a devolver (por defecto: 50) */
|
|
76
|
+
limit?: number;
|
|
77
|
+
/** Número de sesiones a saltar (por defecto: 0) */
|
|
78
|
+
offset?: number;
|
|
79
|
+
/** Filtrar por fecha en formato YYYY-MM-DD */
|
|
80
|
+
date?: string | null;
|
|
81
|
+
/** Buscar en el ID corto */
|
|
82
|
+
search?: string | null;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Parsea el nombre de archivo de una sesión para extraer la fecha y el ID corto.
|
|
87
|
+
* @returns Metadatos parseados, o null si el nombre no coincide con el patrón esperado
|
|
88
|
+
*/
|
|
89
|
+
export function parseSessionFilename(filename: string): SessionFilenameMeta | null;
|
|
90
|
+
|
|
91
|
+
/** Obtiene la ruta completa en el sistema de archivos para un nombre de archivo de sesión */
|
|
92
|
+
export function getSessionPath(filename: string): string;
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Lee el contenido markdown de la sesión desde disco.
|
|
96
|
+
* @returns Cadena de contenido, o null si el archivo no existe
|
|
97
|
+
*/
|
|
98
|
+
export function getSessionContent(sessionPath: string): string | null;
|
|
99
|
+
|
|
100
|
+
/** Parsea los metadatos de la sesión a partir del contenido markdown */
|
|
101
|
+
export function parseSessionMetadata(content: string | null): SessionMetadata;
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Calcula estadísticas de una sesión.
|
|
105
|
+
* Acepta una ruta de archivo (absoluta, terminada en .tmp) o una cadena de
|
|
106
|
+
* contenido pre-leída. Admite rutas Unix (/ruta/a/session.tmp) y Windows
|
|
107
|
+
* (C:\ruta\a\session.tmp).
|
|
108
|
+
*/
|
|
109
|
+
export function getSessionStats(sessionPathOrContent: string): SessionStats;
|
|
110
|
+
|
|
111
|
+
/** Obtiene el título de un archivo de sesión, o "Sesión sin título" si no tiene */
|
|
112
|
+
export function getSessionTitle(sessionPath: string): string;
|
|
113
|
+
|
|
114
|
+
/** Obtiene el tamaño del archivo en formato legible (p. ej. "1.2 KB") */
|
|
115
|
+
export function getSessionSize(sessionPath: string): string;
|
|
116
|
+
|
|
117
|
+
/** Obtiene todas las sesiones con filtrado y paginación opcionales */
|
|
118
|
+
export function getAllSessions(options?: GetAllSessionsOptions): SessionListResult;
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Busca una sesión por ID corto o nombre de archivo.
|
|
122
|
+
* @param sessionId - Prefijo del ID corto, nombre de archivo completo o nombre sin .tmp
|
|
123
|
+
* @param includeContent - Si se debe leer y parsear el contenido de la sesión
|
|
124
|
+
*/
|
|
125
|
+
export function getSessionById(sessionId: string, includeContent?: boolean): Session | null;
|
|
126
|
+
|
|
127
|
+
/** Escribe contenido markdown en un archivo de sesión */
|
|
128
|
+
export function writeSessionContent(sessionPath: string, content: string): boolean;
|
|
129
|
+
|
|
130
|
+
/** Anexa contenido a un archivo de sesión existente */
|
|
131
|
+
export function appendSessionContent(sessionPath: string, content: string): boolean;
|
|
132
|
+
|
|
133
|
+
/** Elimina un archivo de sesión */
|
|
134
|
+
export function deleteSession(sessionPath: string): boolean;
|
|
135
|
+
|
|
136
|
+
/** Verifica si un archivo de sesión existe y es un archivo regular */
|
|
137
|
+
export function sessionExists(sessionPath: string): boolean;
|
|
@@ -0,0 +1,555 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Biblioteca de gestión de sesiones para Theus
|
|
3
|
+
* Provee las operaciones CRUD centrales para listar, cargar y administrar sesiones.
|
|
4
|
+
*
|
|
5
|
+
* Las sesiones se guardan como archivos markdown en `<data home>/session-data/`
|
|
6
|
+
* (por defecto `~/.theus/arsenal/session-data/`; THEUS_AGENT_DATA_HOME la
|
|
7
|
+
* el motor lo define), con compatibilidad de lectura para el directorio
|
|
8
|
+
* heredado `<data home>/sessions/`:
|
|
9
|
+
* - YYYY-MM-DD-session.tmp (formato antiguo)
|
|
10
|
+
* - YYYY-MM-DD-<id-corto>-session.tmp (formato nuevo)
|
|
11
|
+
*
|
|
12
|
+
* Nota: estas sesiones son los resúmenes markdown del arsenal (guardar/reanudar
|
|
13
|
+
* sesión), no las transcripciones nativas de Theus, que viven en
|
|
14
|
+
* `~/.theus/projects/<dir-escapado>/<session_id>.jsonl`.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
const fs = require('fs');
|
|
18
|
+
const path = require('path');
|
|
19
|
+
|
|
20
|
+
const {
|
|
21
|
+
getSessionsDir,
|
|
22
|
+
getSessionSearchDirs,
|
|
23
|
+
readFile,
|
|
24
|
+
log
|
|
25
|
+
} = require('./utils');
|
|
26
|
+
|
|
27
|
+
// Patrón del nombre de archivo de sesión: YYYY-MM-DD-[id-de-sesion]-session.tmp
|
|
28
|
+
// El id de sesión es opcional (formato antiguo) y puede incluir letras, dígitos,
|
|
29
|
+
// guiones bajos y guiones, pero no puede empezar con guion.
|
|
30
|
+
// Coincide con: "2026-02-01-session.tmp", "2026-02-01-a1b2c3d4-session.tmp",
|
|
31
|
+
// "2026-02-01-frontend-worktree-1-session.tmp" y
|
|
32
|
+
// "2026-02-01-ChezMoi_2-session.tmp"
|
|
33
|
+
const SESSION_FILENAME_REGEX = /^(\d{4}-\d{2}-\d{2})(?:-([a-zA-Z0-9_][a-zA-Z0-9_-]*))?-session\.tmp$/;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Resuelve la fecha de creación de un archivo, prefiriendo birthtime pero
|
|
37
|
+
* cayendo a ctime cuando birthtime no está disponible. Algunos sistemas de
|
|
38
|
+
* archivos (p. ej. overlayfs en contenedores) reportan birthtime como epoch 0;
|
|
39
|
+
* un objeto Date siempre es truthy, así que `birthtime || ctime` nunca haría
|
|
40
|
+
* el fallback. Se compara en milisegundos en su lugar.
|
|
41
|
+
* @param {import('fs').Stats} stats
|
|
42
|
+
* @returns {Date}
|
|
43
|
+
*/
|
|
44
|
+
function resolveCreatedTime(stats) {
|
|
45
|
+
return stats.birthtimeMs > 0 ? stats.birthtime : stats.ctime;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Parsea el nombre de archivo de una sesión para extraer sus metadatos
|
|
50
|
+
* @param {string} filename - Nombre de archivo de sesión (p. ej. "2026-01-17-abc123-session.tmp" o "2026-01-17-session.tmp")
|
|
51
|
+
* @returns {object|null} Metadatos parseados o null si es inválido
|
|
52
|
+
*/
|
|
53
|
+
function parseSessionFilename(filename) {
|
|
54
|
+
if (!filename || typeof filename !== 'string') return null;
|
|
55
|
+
const match = filename.match(SESSION_FILENAME_REGEX);
|
|
56
|
+
if (!match) return null;
|
|
57
|
+
|
|
58
|
+
const dateStr = match[1];
|
|
59
|
+
|
|
60
|
+
// Validar que los componentes de la fecha sean válidos en el calendario (no solo el formato)
|
|
61
|
+
const [year, month, day] = dateStr.split('-').map(Number);
|
|
62
|
+
if (month < 1 || month > 12 || day < 1 || day > 31) return null;
|
|
63
|
+
// Rechazar fechas imposibles como 31 de febrero o 31 de abril — el constructor
|
|
64
|
+
// de Date desborda los días inválidos (p. ej. 31 feb → 3 mar), así que se
|
|
65
|
+
// verifica que el mes haga el viaje de ida y vuelta
|
|
66
|
+
const d = new Date(year, month - 1, day);
|
|
67
|
+
if (d.getMonth() !== month - 1 || d.getDate() !== day) return null;
|
|
68
|
+
|
|
69
|
+
// match[2] es undefined para el formato antiguo (sin ID)
|
|
70
|
+
const shortId = match[2] || 'no-id';
|
|
71
|
+
|
|
72
|
+
return {
|
|
73
|
+
filename,
|
|
74
|
+
shortId,
|
|
75
|
+
date: dateStr,
|
|
76
|
+
// Usar el constructor en hora local (consistente con la validación anterior)
|
|
77
|
+
// new Date(dateStr) interpreta YYYY-MM-DD como medianoche UTC, que se
|
|
78
|
+
// muestra como el día anterior en zonas horarias con desfase UTC negativo
|
|
79
|
+
datetime: new Date(year, month - 1, day)
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Obtiene la ruta completa a un archivo de sesión
|
|
85
|
+
* @param {string} filename - Nombre de archivo de sesión
|
|
86
|
+
* @returns {string} Ruta completa al archivo de sesión
|
|
87
|
+
*/
|
|
88
|
+
function getSessionPath(filename) {
|
|
89
|
+
return path.join(getSessionsDir(), filename);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function getSessionCandidates(options = {}) {
|
|
93
|
+
const {
|
|
94
|
+
date = null,
|
|
95
|
+
search = null
|
|
96
|
+
} = options;
|
|
97
|
+
|
|
98
|
+
const candidates = [];
|
|
99
|
+
|
|
100
|
+
for (const sessionsDir of getSessionSearchDirs()) {
|
|
101
|
+
if (!fs.existsSync(sessionsDir)) {
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
let entries;
|
|
106
|
+
try {
|
|
107
|
+
entries = fs.readdirSync(sessionsDir, { withFileTypes: true });
|
|
108
|
+
} catch (error) {
|
|
109
|
+
log(`[SessionManager] Error al leer el directorio de sesiones ${sessionsDir}: ${error.message}`);
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
for (const entry of entries) {
|
|
114
|
+
if (!entry.isFile() || !entry.name.endsWith('.tmp')) continue;
|
|
115
|
+
|
|
116
|
+
const filename = entry.name;
|
|
117
|
+
const metadata = parseSessionFilename(filename);
|
|
118
|
+
|
|
119
|
+
if (!metadata) continue;
|
|
120
|
+
if (date && metadata.date !== date) continue;
|
|
121
|
+
if (search && !metadata.shortId.includes(search)) continue;
|
|
122
|
+
|
|
123
|
+
const sessionPath = path.join(sessionsDir, filename);
|
|
124
|
+
|
|
125
|
+
let stats;
|
|
126
|
+
try {
|
|
127
|
+
stats = fs.statSync(sessionPath);
|
|
128
|
+
} catch (error) {
|
|
129
|
+
log(`[SessionManager] Error al consultar la sesión ${sessionPath}: ${error.message}`);
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
candidates.push({
|
|
134
|
+
...metadata,
|
|
135
|
+
sessionPath,
|
|
136
|
+
hasContent: stats.size > 0,
|
|
137
|
+
size: stats.size,
|
|
138
|
+
modifiedTime: stats.mtime,
|
|
139
|
+
createdTime: resolveCreatedTime(stats)
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
const deduped = [];
|
|
145
|
+
const seenFilenames = new Set();
|
|
146
|
+
|
|
147
|
+
for (const session of candidates) {
|
|
148
|
+
if (seenFilenames.has(session.filename)) {
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
seenFilenames.add(session.filename);
|
|
152
|
+
deduped.push(session);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
deduped.sort((a, b) => b.modifiedTime - a.modifiedTime);
|
|
156
|
+
return deduped;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
function buildSessionRecord(sessionPath, metadata) {
|
|
160
|
+
let stats;
|
|
161
|
+
try {
|
|
162
|
+
stats = fs.statSync(sessionPath);
|
|
163
|
+
} catch (error) {
|
|
164
|
+
log(`[SessionManager] Error al consultar la sesión ${sessionPath}: ${error.message}`);
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
return {
|
|
169
|
+
...metadata,
|
|
170
|
+
sessionPath,
|
|
171
|
+
hasContent: stats.size > 0,
|
|
172
|
+
size: stats.size,
|
|
173
|
+
modifiedTime: stats.mtime,
|
|
174
|
+
createdTime: resolveCreatedTime(stats)
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
function sessionMatchesId(metadata, normalizedSessionId) {
|
|
179
|
+
const filename = metadata.filename;
|
|
180
|
+
const shortIdMatch = metadata.shortId !== 'no-id' && metadata.shortId.startsWith(normalizedSessionId);
|
|
181
|
+
const filenameMatch = filename === normalizedSessionId || filename === `${normalizedSessionId}.tmp`;
|
|
182
|
+
const noIdMatch = metadata.shortId === 'no-id' && filename === `${normalizedSessionId}-session.tmp`;
|
|
183
|
+
|
|
184
|
+
return shortIdMatch || filenameMatch || noIdMatch;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
function getMatchingSessionCandidates(normalizedSessionId) {
|
|
188
|
+
const matches = [];
|
|
189
|
+
const seenFilenames = new Set();
|
|
190
|
+
|
|
191
|
+
for (const sessionsDir of getSessionSearchDirs()) {
|
|
192
|
+
if (!fs.existsSync(sessionsDir)) {
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
let entries;
|
|
197
|
+
try {
|
|
198
|
+
entries = fs.readdirSync(sessionsDir, { withFileTypes: true });
|
|
199
|
+
} catch (error) {
|
|
200
|
+
log(`[SessionManager] Error al leer el directorio de sesiones ${sessionsDir}: ${error.message}`);
|
|
201
|
+
continue;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
for (const entry of entries) {
|
|
205
|
+
if (!entry.isFile() || !entry.name.endsWith('.tmp')) continue;
|
|
206
|
+
|
|
207
|
+
const metadata = parseSessionFilename(entry.name);
|
|
208
|
+
if (!metadata || !sessionMatchesId(metadata, normalizedSessionId)) {
|
|
209
|
+
continue;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
if (seenFilenames.has(metadata.filename)) {
|
|
213
|
+
continue;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
const sessionPath = path.join(sessionsDir, metadata.filename);
|
|
217
|
+
const sessionRecord = buildSessionRecord(sessionPath, metadata);
|
|
218
|
+
if (!sessionRecord) {
|
|
219
|
+
continue;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
seenFilenames.add(metadata.filename);
|
|
223
|
+
matches.push(sessionRecord);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
matches.sort((a, b) => b.modifiedTime - a.modifiedTime);
|
|
228
|
+
return matches;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* Lee y parsea el contenido markdown de una sesión
|
|
233
|
+
* @param {string} sessionPath - Ruta completa al archivo de sesión
|
|
234
|
+
* @returns {string|null} Contenido de la sesión o null si no se encuentra
|
|
235
|
+
*/
|
|
236
|
+
function getSessionContent(sessionPath) {
|
|
237
|
+
return readFile(sessionPath);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* Parsea los metadatos de una sesión a partir de su contenido markdown.
|
|
242
|
+
* Los marcadores se aceptan tanto en español como en inglés para mantener
|
|
243
|
+
* compatibilidad con sesiones guardadas en cualquiera de los dos idiomas.
|
|
244
|
+
* @param {string} content - Contenido markdown de la sesión
|
|
245
|
+
* @returns {object} Metadatos parseados
|
|
246
|
+
*/
|
|
247
|
+
function parseSessionMetadata(content) {
|
|
248
|
+
const metadata = {
|
|
249
|
+
title: null,
|
|
250
|
+
date: null,
|
|
251
|
+
started: null,
|
|
252
|
+
lastUpdated: null,
|
|
253
|
+
project: null,
|
|
254
|
+
branch: null,
|
|
255
|
+
worktree: null,
|
|
256
|
+
completed: [],
|
|
257
|
+
inProgress: [],
|
|
258
|
+
notes: '',
|
|
259
|
+
context: ''
|
|
260
|
+
};
|
|
261
|
+
|
|
262
|
+
if (!content) return metadata;
|
|
263
|
+
|
|
264
|
+
// Extraer el título del primer encabezado
|
|
265
|
+
const titleMatch = content.match(/^#\s+(.+)$/m);
|
|
266
|
+
if (titleMatch) {
|
|
267
|
+
metadata.title = titleMatch[1].trim();
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
// Extraer la fecha
|
|
271
|
+
const dateMatch = content.match(/\*\*(?:Fecha|Date):\*\*\s*(\d{4}-\d{2}-\d{2})/);
|
|
272
|
+
if (dateMatch) {
|
|
273
|
+
metadata.date = dateMatch[1];
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
// Extraer la hora de inicio
|
|
277
|
+
const startedMatch = content.match(/\*\*(?:Inicio|Started):\*\*\s*([\d:]+)/);
|
|
278
|
+
if (startedMatch) {
|
|
279
|
+
metadata.started = startedMatch[1];
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
// Extraer la última actualización
|
|
283
|
+
const updatedMatch = content.match(/\*\*(?:Última actualización|Last Updated):\*\*\s*([\d:]+)/);
|
|
284
|
+
if (updatedMatch) {
|
|
285
|
+
metadata.lastUpdated = updatedMatch[1];
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
// Extraer metadatos del panel de control
|
|
289
|
+
const projectMatch = content.match(/\*\*(?:Proyecto|Project):\*\*\s*(.+)$/m);
|
|
290
|
+
if (projectMatch) {
|
|
291
|
+
metadata.project = projectMatch[1].trim();
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
const branchMatch = content.match(/\*\*(?:Rama|Branch):\*\*\s*(.+)$/m);
|
|
295
|
+
if (branchMatch) {
|
|
296
|
+
metadata.branch = branchMatch[1].trim();
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
const worktreeMatch = content.match(/\*\*Worktree:\*\*\s*(.+)$/m);
|
|
300
|
+
if (worktreeMatch) {
|
|
301
|
+
metadata.worktree = worktreeMatch[1].trim();
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
// Extraer los ítems completados
|
|
305
|
+
const completedSection = content.match(/### (?:Completado|Completed)\s*\n([\s\S]*?)(?=###|\n\n|$)/);
|
|
306
|
+
if (completedSection) {
|
|
307
|
+
const items = completedSection[1].match(/- \[x\]\s*(.+)/g);
|
|
308
|
+
if (items) {
|
|
309
|
+
metadata.completed = items.map(item => item.replace(/- \[x\]\s*/, '').trim());
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
// Extraer los ítems en progreso
|
|
314
|
+
const progressSection = content.match(/### (?:En progreso|In Progress)\s*\n([\s\S]*?)(?=###|\n\n|$)/);
|
|
315
|
+
if (progressSection) {
|
|
316
|
+
const items = progressSection[1].match(/- \[ \]\s*(.+)/g);
|
|
317
|
+
if (items) {
|
|
318
|
+
metadata.inProgress = items.map(item => item.replace(/- \[ \]\s*/, '').trim());
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
// Extraer las notas
|
|
323
|
+
const notesSection = content.match(/### (?:Notas para la próxima sesión|Notes for Next Session)\s*\n([\s\S]*?)(?=###|\n\n|$)/);
|
|
324
|
+
if (notesSection) {
|
|
325
|
+
metadata.notes = notesSection[1].trim();
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
// Extraer el contexto a cargar
|
|
329
|
+
const contextSection = content.match(/### (?:Contexto a cargar|Context to Load)\s*\n```\n([\s\S]*?)```/);
|
|
330
|
+
if (contextSection) {
|
|
331
|
+
metadata.context = contextSection[1].trim();
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
return metadata;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
/**
|
|
338
|
+
* Calcula estadísticas de una sesión
|
|
339
|
+
* @param {string} sessionPathOrContent - Ruta completa al archivo de sesión, O
|
|
340
|
+
* la cadena de contenido ya leída (para evitar lecturas de disco redundantes
|
|
341
|
+
* cuando el llamador ya tiene el contenido cargado).
|
|
342
|
+
* @returns {object} Objeto de estadísticas
|
|
343
|
+
*/
|
|
344
|
+
function getSessionStats(sessionPathOrContent) {
|
|
345
|
+
// Acepta una cadena de contenido pre-leída para evitar lecturas redundantes.
|
|
346
|
+
// Si el argumento parece una ruta de archivo (sin saltos de línea, termina
|
|
347
|
+
// en .tmp, empieza con / en Unix o con letra de unidad en Windows), se lee
|
|
348
|
+
// del disco. En caso contrario se trata como contenido.
|
|
349
|
+
const looksLikePath = typeof sessionPathOrContent === 'string' &&
|
|
350
|
+
!sessionPathOrContent.includes('\n') &&
|
|
351
|
+
sessionPathOrContent.endsWith('.tmp') &&
|
|
352
|
+
(sessionPathOrContent.startsWith('/') || /^[A-Za-z]:[/\\]/.test(sessionPathOrContent));
|
|
353
|
+
const content = looksLikePath
|
|
354
|
+
? getSessionContent(sessionPathOrContent)
|
|
355
|
+
: sessionPathOrContent;
|
|
356
|
+
|
|
357
|
+
const metadata = parseSessionMetadata(content);
|
|
358
|
+
|
|
359
|
+
return {
|
|
360
|
+
totalItems: metadata.completed.length + metadata.inProgress.length,
|
|
361
|
+
completedItems: metadata.completed.length,
|
|
362
|
+
inProgressItems: metadata.inProgress.length,
|
|
363
|
+
lineCount: content ? content.split('\n').length : 0,
|
|
364
|
+
hasNotes: !!metadata.notes,
|
|
365
|
+
hasContext: !!metadata.context
|
|
366
|
+
};
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
/**
|
|
370
|
+
* Obtiene todas las sesiones con filtrado y paginación opcionales
|
|
371
|
+
* @param {object} options - Objeto de opciones
|
|
372
|
+
* @param {number} options.limit - Número máximo de sesiones a devolver
|
|
373
|
+
* @param {number} options.offset - Número de sesiones a saltar
|
|
374
|
+
* @param {string} options.date - Filtrar por fecha (formato YYYY-MM-DD)
|
|
375
|
+
* @param {string} options.search - Buscar en el ID corto
|
|
376
|
+
* @returns {object} Objeto con el arreglo de sesiones e información de paginación
|
|
377
|
+
*/
|
|
378
|
+
function getAllSessions(options = {}) {
|
|
379
|
+
const {
|
|
380
|
+
limit: rawLimit = 50,
|
|
381
|
+
offset: rawOffset = 0,
|
|
382
|
+
date = null,
|
|
383
|
+
search = null
|
|
384
|
+
} = options;
|
|
385
|
+
|
|
386
|
+
// Acotar offset y limit a enteros no negativos seguros.
|
|
387
|
+
// Sin esto, un offset negativo hace que slice() cuente desde el final,
|
|
388
|
+
// y los valores NaN hacen que slice() devuelva vacío o resultados inesperados.
|
|
389
|
+
// Nota: no se puede usar `|| valorPorDefecto` porque 0 es falsy — usar isNaN.
|
|
390
|
+
const offsetNum = Number(rawOffset);
|
|
391
|
+
const offset = Number.isNaN(offsetNum) ? 0 : Math.max(0, Math.floor(offsetNum));
|
|
392
|
+
const limitNum = Number(rawLimit);
|
|
393
|
+
const limit = Number.isNaN(limitNum) ? 50 : Math.max(1, Math.floor(limitNum));
|
|
394
|
+
|
|
395
|
+
const sessions = getSessionCandidates({ date, search });
|
|
396
|
+
|
|
397
|
+
if (sessions.length === 0) {
|
|
398
|
+
return { sessions: [], total: 0, offset, limit, hasMore: false };
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
// Aplicar paginación
|
|
402
|
+
const paginatedSessions = sessions.slice(offset, offset + limit);
|
|
403
|
+
|
|
404
|
+
return {
|
|
405
|
+
sessions: paginatedSessions,
|
|
406
|
+
total: sessions.length,
|
|
407
|
+
offset,
|
|
408
|
+
limit,
|
|
409
|
+
hasMore: offset + limit < sessions.length
|
|
410
|
+
};
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
/**
|
|
414
|
+
* Obtiene una sesión individual por ID (ID corto o ruta completa)
|
|
415
|
+
* @param {string} sessionId - ID corto o nombre de archivo de la sesión
|
|
416
|
+
* @param {boolean} includeContent - Incluir el contenido de la sesión
|
|
417
|
+
* @returns {object|null} Objeto de sesión o null si no se encuentra
|
|
418
|
+
*/
|
|
419
|
+
function getSessionById(sessionId, includeContent = false) {
|
|
420
|
+
if (typeof sessionId !== 'string') {
|
|
421
|
+
return null;
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
const normalizedSessionId = sessionId.trim();
|
|
425
|
+
if (!normalizedSessionId) {
|
|
426
|
+
return null;
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
const sessions = getMatchingSessionCandidates(normalizedSessionId);
|
|
430
|
+
|
|
431
|
+
for (const session of sessions) {
|
|
432
|
+
const sessionRecord = { ...session };
|
|
433
|
+
|
|
434
|
+
if (includeContent) {
|
|
435
|
+
sessionRecord.content = getSessionContent(sessionRecord.sessionPath);
|
|
436
|
+
sessionRecord.metadata = parseSessionMetadata(sessionRecord.content);
|
|
437
|
+
// Pasar el contenido pre-leído para evitar una lectura de disco redundante
|
|
438
|
+
sessionRecord.stats = getSessionStats(sessionRecord.content || '');
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
return sessionRecord;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
return null;
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
/**
|
|
448
|
+
* Obtiene el título de la sesión a partir de su contenido
|
|
449
|
+
* @param {string} sessionPath - Ruta completa al archivo de sesión
|
|
450
|
+
* @returns {string} Título o texto por defecto
|
|
451
|
+
*/
|
|
452
|
+
function getSessionTitle(sessionPath) {
|
|
453
|
+
const content = getSessionContent(sessionPath);
|
|
454
|
+
const metadata = parseSessionMetadata(content);
|
|
455
|
+
|
|
456
|
+
return metadata.title || 'Sesión sin título';
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
/**
|
|
460
|
+
* Formatea el tamaño de la sesión en un formato legible
|
|
461
|
+
* @param {string} sessionPath - Ruta completa al archivo de sesión
|
|
462
|
+
* @returns {string} Tamaño formateado (p. ej. "1.2 KB")
|
|
463
|
+
*/
|
|
464
|
+
function getSessionSize(sessionPath) {
|
|
465
|
+
let stats;
|
|
466
|
+
try {
|
|
467
|
+
stats = fs.statSync(sessionPath);
|
|
468
|
+
} catch {
|
|
469
|
+
return '0 B';
|
|
470
|
+
}
|
|
471
|
+
const size = stats.size;
|
|
472
|
+
|
|
473
|
+
if (size < 1024) return `${size} B`;
|
|
474
|
+
if (size < 1024 * 1024) return `${(size / 1024).toFixed(1)} KB`;
|
|
475
|
+
return `${(size / (1024 * 1024)).toFixed(1)} MB`;
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
/**
|
|
479
|
+
* Escribe el contenido de una sesión en un archivo
|
|
480
|
+
* @param {string} sessionPath - Ruta completa al archivo de sesión
|
|
481
|
+
* @param {string} content - Contenido markdown a escribir
|
|
482
|
+
* @returns {boolean} Estado de éxito
|
|
483
|
+
*/
|
|
484
|
+
function writeSessionContent(sessionPath, content) {
|
|
485
|
+
try {
|
|
486
|
+
fs.writeFileSync(sessionPath, content, 'utf8');
|
|
487
|
+
return true;
|
|
488
|
+
} catch (err) {
|
|
489
|
+
log(`[SessionManager] Error al escribir la sesión: ${err.message}`);
|
|
490
|
+
return false;
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
/**
|
|
495
|
+
* Anexa contenido a una sesión
|
|
496
|
+
* @param {string} sessionPath - Ruta completa al archivo de sesión
|
|
497
|
+
* @param {string} content - Contenido a anexar
|
|
498
|
+
* @returns {boolean} Estado de éxito
|
|
499
|
+
*/
|
|
500
|
+
function appendSessionContent(sessionPath, content) {
|
|
501
|
+
try {
|
|
502
|
+
fs.appendFileSync(sessionPath, content, 'utf8');
|
|
503
|
+
return true;
|
|
504
|
+
} catch (err) {
|
|
505
|
+
log(`[SessionManager] Error al anexar a la sesión: ${err.message}`);
|
|
506
|
+
return false;
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
/**
|
|
511
|
+
* Elimina un archivo de sesión
|
|
512
|
+
* @param {string} sessionPath - Ruta completa al archivo de sesión
|
|
513
|
+
* @returns {boolean} Estado de éxito
|
|
514
|
+
*/
|
|
515
|
+
function deleteSession(sessionPath) {
|
|
516
|
+
try {
|
|
517
|
+
if (fs.existsSync(sessionPath)) {
|
|
518
|
+
fs.unlinkSync(sessionPath);
|
|
519
|
+
return true;
|
|
520
|
+
}
|
|
521
|
+
return false;
|
|
522
|
+
} catch (err) {
|
|
523
|
+
log(`[SessionManager] Error al eliminar la sesión: ${err.message}`);
|
|
524
|
+
return false;
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
/**
|
|
529
|
+
* Verifica si una sesión existe
|
|
530
|
+
* @param {string} sessionPath - Ruta completa al archivo de sesión
|
|
531
|
+
* @returns {boolean} true si la sesión existe
|
|
532
|
+
*/
|
|
533
|
+
function sessionExists(sessionPath) {
|
|
534
|
+
try {
|
|
535
|
+
return fs.statSync(sessionPath).isFile();
|
|
536
|
+
} catch {
|
|
537
|
+
return false;
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
module.exports = {
|
|
542
|
+
parseSessionFilename,
|
|
543
|
+
getSessionPath,
|
|
544
|
+
getSessionContent,
|
|
545
|
+
parseSessionMetadata,
|
|
546
|
+
getSessionStats,
|
|
547
|
+
getSessionTitle,
|
|
548
|
+
getSessionSize,
|
|
549
|
+
getAllSessions,
|
|
550
|
+
getSessionById,
|
|
551
|
+
writeSessionContent,
|
|
552
|
+
appendSessionContent,
|
|
553
|
+
deleteSession,
|
|
554
|
+
sessionExists
|
|
555
|
+
};
|