From 97a965417ec80793883f2696fcff129dae2589c9 Mon Sep 17 00:00:00 2001 From: "Mauro Rosero P." Date: Mon, 7 Apr 2025 20:32:27 -0500 Subject: [PATCH] =?UTF-8?q?[ADDED]=20Implementado=20script=20sora.sh=20par?= =?UTF-8?q?a=20integraci=C3=B3n=20con=20aider?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Creado script para ejecutar aider con configuraci贸n de OpenRouter o Ollama - Agregada evaluaci贸n de hardware para ejecuci贸n local - Implementada selecci贸n de modelo con GUI usando gum - Reemplazo completo del sistema de alias por ejecutable integrado 馃 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- README.md | 80 ++++----- bin/config/ai_tokens.path | 1 + bin/config/ollama.local | 1 + bin/config/sora_api_base.cfg | 1 + bin/config/sora_model.cfg | 1 + bin/sora.sh | 197 ++++++++++++++++++++++ bin/sora_alias.sh | 10 -- bin/sora_disable.sh | 120 ------------- bin/sora_enable.sh | 139 --------------- bin/{aider_install.sh => sora_install.sh} | 0 bin/sora_unalias.sh | 3 - docs/cortana.md | 40 ++--- sops/browseai.sops.yaml | 21 --- sops/digital.sops.yaml | 21 --- sops/groq.sops.yaml | 21 --- sops/jarvis.sops.yaml | 21 --- 16 files changed, 261 insertions(+), 416 deletions(-) create mode 100644 bin/config/ai_tokens.path create mode 100644 bin/config/ollama.local create mode 100644 bin/config/sora_api_base.cfg create mode 100644 bin/config/sora_model.cfg create mode 100755 bin/sora.sh delete mode 100755 bin/sora_alias.sh delete mode 100755 bin/sora_disable.sh delete mode 100755 bin/sora_enable.sh rename bin/{aider_install.sh => sora_install.sh} (100%) delete mode 100755 bin/sora_unalias.sh delete mode 100644 sops/browseai.sops.yaml delete mode 100644 sops/digital.sops.yaml delete mode 100644 sops/groq.sops.yaml delete mode 100644 sops/jarvis.sops.yaml diff --git a/README.md b/README.md index 976fa40..7380f0b 100644 --- a/README.md +++ b/README.md @@ -12,10 +12,47 @@ -## 馃搵 Descripci贸n +## 馃搵 Descripci贸n General **MRDevs Tools** es un conjunto de herramientas dise帽ado principalmente para el desarrollo en consola, aunque tambi茅n se adapta a otros entornos. Est谩 fuertemente orientado a **c贸digo como servicio**, potenciando el uso de herramientas y metodolog铆as 谩giles de **CI/CD** para optimizar el flujo de trabajo de desarrollo. Facilita la creaci贸n y gesti贸n de **grupos de trabajo y proyectos**, permitiendo a los desarrolladores organizar su trabajo de manera eficiente y colaborativa en equipos multifuncionales. Utiliza agentes de inteligencia artificial para asistir en la escritura, correcci贸n y refactorizaci贸n de c贸digo, lo que aumenta la productividad y mejora la calidad del software. Adem谩s, pone un fuerte 茅nfasis en la **seguridad**, incorporando **firmas GPG** para asegurar la autenticidad e integridad del c贸digo y procesos. A trav茅s de **SOPS**, facilita la gesti贸n segura de secretos, permitiendo la encriptaci贸n y desencriptaci贸n de datos sensibles. Tambi茅n habilita conexiones **VPN**, garantizando un acceso seguro a infraestructuras remotas de desarrollo. +## 馃 Asistentes de IA para el Desarrollo + +MRDevs Tools integra potentes asistentes de IA que transforman el proceso de desarrollo: + +### Cortana y Sora: Desarrollo Potenciado por IA + +Nuestros asistentes de IA est谩n dise帽ados para acelerar y mejorar el ciclo de desarrollo: + +- **[Cortana](docs/cortana.md)** - Asistente general basado en Claude: + - **Generaci贸n de C贸digo**: Crea funciones, clases y m贸dulos completos con instrucciones en lenguaje natural + - **Documentaci贸n Autom谩tica**: Genera documentaci贸n t茅cnica, comentarios de c贸digo y README + - **Resoluci贸n de Problemas**: Analiza errores y propone soluciones precisas + - **Refactorizaci贸n Inteligente**: Mejora c贸digo existente manteniendo su funcionalidad + - **Control por Voz**: Interact煤a mediante comandos hablados con reconocimiento local + +- **[Sora](docs/sora.md)** - Asistente colaborativo para programaci贸n basado en Aider: + - **Pair Programming**: Trabaja directamente con tus repositorios Git + - **Edici贸n Colaborativa**: Modifica archivos existentes aplicando cambios autom谩ticamente + - **Integraci贸n con Git**: Crea commits, ramas y gestiona cambios con instrucciones naturales + - **Desarrollo Multidocumento**: Comprende y modifica sistemas completos de m煤ltiples archivos + - **Seguimiento de Contexto**: Mantiene el estado de la conversaci贸n para desarrollos complejos + +### Casos de Uso Principales + +```bash +# Cortana: Generaci贸n de c贸digo basada en especificaciones +cortana "Crea una API REST en Express.js para gestionar una biblioteca con pr茅stamos" + +# Sora: Modificaci贸n de c贸digo existente en repositorio +sora src/*.js +> A帽ade validaci贸n de datos a todos los formularios y manejo de errores +``` + +Para una documentaci贸n completa de ambos asistentes, consulta: +- [Manual completo de Cortana](docs/cortana.md) +- [Manual completo de Sora](docs/sora.md) + ## 馃殌 Inicio R谩pido Para comenzar a utilizar MRDevs Tools, consulte la [Gu铆a de Uso Completa](docs/uso.md) que incluye instrucciones detalladas de instalaci贸n, comandos disponibles y ejemplos de uso. @@ -23,7 +60,7 @@ Para comenzar a utilizar MRDevs Tools, consulte la [Gu铆a de Uso Completa](docs/ ### Requisitos Previos - Git instalado en su sistema -- Permisos de administrador (para algunas operaciones) +- Permisos de administrador para el Sistema Operativo (para algunas operaciones) - Conexi贸n a Internet ### Instalaci贸n B谩sica @@ -66,43 +103,6 @@ MRDevs Tools est谩 dise帽ado con la seguridad y privacidad en mente: - **Podman como predeterminado**: Se usa Podman (sin privilegios) para mayor seguridad en contenedores - **Ejecuci贸n local**: Las funcionalidades como reconocimiento de voz funcionan localmente sin enviar datos -## 馃 Asistentes de IA para el Desarrollo - -MRDevs Tools integra potentes asistentes de IA que transforman el proceso de desarrollo: - -### Cortana y Sora: Desarrollo Potenciado por IA - -Nuestros asistentes de IA est谩n dise帽ados para acelerar y mejorar el ciclo de desarrollo: - -- **[Cortana](docs/cortana.md)** - Asistente general basado en Claude: - - **Generaci贸n de C贸digo**: Crea funciones, clases y m贸dulos completos con instrucciones en lenguaje natural - - **Documentaci贸n Autom谩tica**: Genera documentaci贸n t茅cnica, comentarios de c贸digo y README - - **Resoluci贸n de Problemas**: Analiza errores y propone soluciones precisas - - **Refactorizaci贸n Inteligente**: Mejora c贸digo existente manteniendo su funcionalidad - - **Control por Voz**: Interact煤a mediante comandos hablados con reconocimiento local - -- **[Sora](docs/sora.md)** - Asistente colaborativo para programaci贸n: - - **Pair Programming**: Trabaja directamente con tus repositorios Git - - **Edici贸n Colaborativa**: Modifica archivos existentes aplicando cambios autom谩ticamente - - **Integraci贸n con Git**: Crea commits, ramas y gestiona cambios con instrucciones naturales - - **Desarrollo Multidocumento**: Comprende y modifica sistemas completos de m煤ltiples archivos - - **Seguimiento de Contexto**: Mantiene el estado de la conversaci贸n para desarrollos complejos - -### Casos de Uso Principales - -```bash -# Cortana: Generaci贸n de c贸digo basada en especificaciones -cortana "Crea una API REST en Express.js para gestionar una biblioteca con pr茅stamos" - -# Sora: Modificaci贸n de c贸digo existente en repositorio -sora src/*.js -> A帽ade validaci贸n de datos a todos los formularios y manejo de errores -``` - -Para una documentaci贸n completa de ambos asistentes, consulta: -- [Manual completo de Cortana](docs/cortana.md) -- [Manual completo de Sora](docs/sora.md) - ## 馃攲 Arquitectura del Sistema ### Estructura de Directorios @@ -215,7 +215,7 @@ El texto completo de la licencia est谩 disponible en el archivo [LICENSE.md](LIC Para dudas o problemas, contacte con: - Email: mauro@rosero.one -- Web: https://mauro.rosero.one +- Web: https://mrdevs.rosero.one --- diff --git a/bin/config/ai_tokens.path b/bin/config/ai_tokens.path new file mode 100644 index 0000000..cde5e65 --- /dev/null +++ b/bin/config/ai_tokens.path @@ -0,0 +1 @@ +~/.developer diff --git a/bin/config/ollama.local b/bin/config/ollama.local new file mode 100644 index 0000000..d473955 --- /dev/null +++ b/bin/config/ollama.local @@ -0,0 +1 @@ +http://127.0.0.1:11434 diff --git a/bin/config/sora_api_base.cfg b/bin/config/sora_api_base.cfg new file mode 100644 index 0000000..2ec7bce --- /dev/null +++ b/bin/config/sora_api_base.cfg @@ -0,0 +1 @@ +https://openrouter.ai/api/v1 diff --git a/bin/config/sora_model.cfg b/bin/config/sora_model.cfg new file mode 100644 index 0000000..9f84b33 --- /dev/null +++ b/bin/config/sora_model.cfg @@ -0,0 +1 @@ +openrouter/deepseek/deepseek-r1-distill-llama-70b:free diff --git a/bin/sora.sh b/bin/sora.sh new file mode 100755 index 0000000..d8046ce --- /dev/null +++ b/bin/sora.sh @@ -0,0 +1,197 @@ +#!/bin/bash +# [Author] Cortana Rosero One +# [Generated] Created by Claude Code (claude-3-7-sonnet-20250219) +# Modified Date: 2025-04-07 +# Version $(cat "$(dirname "$0")/config/version" 2>/dev/null || echo "1.0.0") +# +# Description: Script para ejecutar aider con la configuraci贸n adecuada de OpenRouter +# Usage: ./sora.sh [par谩metros para aider] + +# Verifica si aider est谩 instalado +if ! command -v aider &> /dev/null; then + echo "Error: aider no est谩 instalado." + echo "Inst谩lelo ejecutando: bin/sora_install.sh" + exit 1 +fi + +# Obtiene la ruta base de tokens desde el archivo de configuraci贸n +TOKENS_BASE_PATH=$(cat "$(dirname "$0")/config/ai_tokens.path" 2>/dev/null) +if [ -z "$TOKENS_BASE_PATH" ]; then + echo "Error: No se pudo obtener la ruta base de tokens." + exit 1 +fi + +# Expande la ruta si comienza con ~ +if [[ "$TOKENS_BASE_PATH" == "~"* ]]; then + TOKENS_BASE_PATH="${TOKENS_BASE_PATH/#\~/$HOME}" +fi + +# Define el archivo de tokens de OpenRouter +OPENROUTER_TOKEN_FILE="${TOKENS_BASE_PATH}/router.sops.yaml" + +# Verifica si el archivo de token existe +if [ ! -f "$OPENROUTER_TOKEN_FILE" ]; then + echo "Error: Archivo de token no encontrado: $OPENROUTER_TOKEN_FILE" + echo "Registre su token usando ai_token.sh o solicite el token al administrador del proyecto." + exit 1 +fi + +# Desencripta y obtiene el token de OpenRouter (decodificando base64) +OPENROUTER_API_KEY=$(sops -d "$OPENROUTER_TOKEN_FILE" | cut -d\| -f2 | tr -d '[:space:]' | base64 -d) +if [ -z "$OPENROUTER_API_KEY" ]; then + echo "Error: No se pudo desencriptar el token de OpenRouter." + exit 1 +fi + +# Lee o crea el archivo de configuraci贸n de la API base +API_BASE_CONFIG_FILE="$(dirname "$0")/config/sora_api_base.cfg" +if [ ! -f "$API_BASE_CONFIG_FILE" ]; then + echo "https://openrouter.ai/api/v1" > "$API_BASE_CONFIG_FILE" +fi +OPENAI_API_BASE=$(cat "$API_BASE_CONFIG_FILE" 2>/dev/null || echo "https://openrouter.ai/api/v1") + +# Lee o crea el archivo de configuraci贸n del modelo +MODEL_CONFIG_FILE="$(dirname "$0")/config/sora_model.cfg" +if [ ! -f "$MODEL_CONFIG_FILE" ]; then + echo "deepseek/deepseek-r1-distill-llama-70b:free" > "$MODEL_CONFIG_FILE" +fi +AIDER_MODEL=$(cat "$MODEL_CONFIG_FILE" 2>/dev/null || echo "deepseek/deepseek-r1-distill-llama-70b:free") + +# Pregunta al usuario si desea usar modelo remoto o local (ollama) +MODE=$(gum choose "Remoto (OpenRouter)" "Local (Ollama)") + +if [[ "$MODE" == "Local (Ollama)" ]]; then + # Muestra advertencia sobre rendimiento + echo "鈿狅笍 ADVERTENCIA: El uso de modelos locales requiere hardware adecuado." + echo " Si su hardware no es suficiente, las respuestas pueden ser extremadamente lentas." + + # Eval煤a el hardware de la m谩quina + CPU_CORES=$(nproc) + RAM_TOTAL_GB=$(free -g | awk '/^Mem:/{print $2}') + RAM_AVAILABLE_GB=$(free -g | awk '/^Mem:/{print $7}') + HAS_GPU=$(lspci | grep -i nvidia | grep -v "Audio\|USB" || echo "") + + # Determina nivel de rendimiento + PERFORMANCE_LEVEL="Muy Malo" + if [ -n "$HAS_GPU" ] && [ $CPU_CORES -ge 8 ] && [ $RAM_AVAILABLE_GB -ge 16 ]; then + PERFORMANCE_LEVEL="Excelente" + elif [ -n "$HAS_GPU" ] && [ $CPU_CORES -ge 6 ] && [ $RAM_AVAILABLE_GB -ge 12 ]; then + PERFORMANCE_LEVEL="Muy Bueno" + elif [ $CPU_CORES -ge 8 ] && [ $RAM_AVAILABLE_GB -ge 12 ]; then + PERFORMANCE_LEVEL="Bueno" + elif [ $CPU_CORES -ge 6 ] && [ $RAM_AVAILABLE_GB -ge 8 ]; then + PERFORMANCE_LEVEL="Intermedio" + elif [ $CPU_CORES -ge 4 ] && [ $RAM_AVAILABLE_GB -ge 6 ]; then + PERFORMANCE_LEVEL="Pobre" + elif [ $CPU_CORES -ge 2 ] && [ $RAM_AVAILABLE_GB -ge 4 ]; then + PERFORMANCE_LEVEL="Malo" + fi + + # Muestra estado del hardware + echo "" + echo "Evaluaci贸n de hardware:" + echo "- CPU Cores: $CPU_CORES" + echo "- RAM Total: $RAM_TOTAL_GB GB" + echo "- RAM Disponible: $RAM_AVAILABLE_GB GB" + echo "- GPU NVIDIA: $([ -n "$HAS_GPU" ] && echo "Detectada" || echo "No detectada")" + + # Muestra barra de rendimiento con gum + echo "" + echo -n "Rendimiento esperado: " + case "$PERFORMANCE_LEVEL" in + "Muy Malo") + gum style --foreground 255 --background 1 " Muy Malo " + ;; + "Malo") + gum style --foreground 255 --background 1 " Malo " + ;; + "Pobre") + gum style --foreground 255 --background 202 " Pobre " + ;; + "Intermedio") + gum style --foreground 255 --background 3 " Intermedio " + ;; + "Bueno") + gum style --foreground 255 --background 35 " Bueno " + ;; + "Muy Bueno") + gum style --foreground 255 --background 2 " Muy Bueno " + ;; + "Excelente") + gum style --foreground 255 --background 5 " Excelente " + ;; + esac + echo "" + + # Pregunta si desea continuar + if ! gum confirm "驴Desea continuar con el modo local?"; then + echo "Operaci贸n cancelada por el usuario." + exit 0 + fi + + # Verifica si ollama est谩 activo + if ! curl -s http://127.0.0.1:11434/api/tags >/dev/null 2>&1; then + echo "Ollama no est谩 activo. Iniciando..." + "$(dirname "$0")/ollama_up.sh" + + # Espera hasta 30 segundos para que Ollama se inicie completamente + WAIT_TIME=0 + MAX_WAIT=30 + while ! curl -s http://127.0.0.1:11434/api/tags >/dev/null 2>&1; do + if [ $WAIT_TIME -ge $MAX_WAIT ]; then + echo "Error: No se pudo iniciar Ollama despu茅s de $MAX_WAIT segundos." + exit 1 + fi + echo "Esperando que Ollama responda... ($WAIT_TIME/$MAX_WAIT)" + sleep 1 + WAIT_TIME=$((WAIT_TIME + 1)) + done + OLLAMA_STARTED=true + fi + + # Verifica que Ollama funcione correctamente haciendo una solicitud simple + echo "Verificando que Ollama responda correctamente..." + if ! curl -s http://127.0.0.1:11434/api/tags | jq -e '.models' >/dev/null 2>&1; then + echo "Error: Ollama est谩 iniciado pero no responde correctamente." + exit 1 + fi + + # Configura para usar Ollama + OLLAMA_API_BASE=$(cat "$(dirname "$0")/config/ollama.local" 2>/dev/null) + echo "Usando Ollama con API base: $OLLAMA_API_BASE" + + # Lista y permite seleccionar modelos disponibles en Ollama + echo "Consultando modelos disponibles en Ollama..." + OLLAMA_MODELS=$(curl -s http://127.0.0.1:11434/api/tags | jq -r '.models[].name') + if [ -z "$OLLAMA_MODELS" ]; then + echo "Error: No se encontraron modelos en Ollama." + exit 1 + fi + + # Permite seleccionar un modelo utilizando gum + echo "Seleccione un modelo:" + SELECTED_MODEL=$(echo "$OLLAMA_MODELS" | gum filter --placeholder="Buscar modelo...") + + if [ -z "$SELECTED_MODEL" ]; then + echo "No se seleccion贸 ning煤n modelo. Saliendo." + exit 1 + fi + + echo "Modelo seleccionado: $SELECTED_MODEL" + + # A帽ade el prefijo al modelo de Ollama + OLLAMA_FULL_MODEL="ollama_chat/$SELECTED_MODEL" + echo "Modelo con prefijo: $OLLAMA_FULL_MODEL" + + # Ejecuta aider con la configuraci贸n de Ollama + OLLAMA_API_BASE="$OLLAMA_API_BASE" AIDER_MODEL="$OLLAMA_FULL_MODEL" aider --no-git --no-show-model-warnings "$@" + + # Si iniciamos Ollama, lo detenemos al finalizar + if [ "$OLLAMA_STARTED" = true ]; then + echo "Deteniendo Ollama..." + "$(dirname "$0")/ollama_down.sh" + fi +else + # Ejecuta aider con la configuraci贸n de OpenRouter + OPENAI_API_BASE="$OPENAI_API_BASE" OPENROUTER_API_KEY="$OPENROUTER_API_KEY" AIDER_MODEL="$AIDER_MODEL" aider --no-git --no-show-model-warnings "$@" +fi diff --git a/bin/sora_alias.sh b/bin/sora_alias.sh deleted file mode 100755 index 5bff1b4..0000000 --- a/bin/sora_alias.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash -# Verificar si ~/.local/bin est谩 en el PATH -if [[ ":$PATH:" != *":$HOME/.local/bin:"* ]]; then - # Si no est谩 en el PATH, usamos la ruta completa en el alias - alias sora="$HOME/.local/bin/aider" -else - # Si est谩 en el PATH, podemos usar el nombre directamente - alias sora="aider" -fi -echo "Alias sora habilitado" diff --git a/bin/sora_disable.sh b/bin/sora_disable.sh deleted file mode 100755 index 400a2d4..0000000 --- a/bin/sora_disable.sh +++ /dev/null @@ -1,120 +0,0 @@ -#!/bin/bash -#Script : sora_disable.sh -#Apps : MRDEVS TOOLS -#Description : Deshabilita el alias 'sora' para Aider -#Author : Sora Rosero One -#Generated by : Claude Code (claude-3-7-sonnet-20250219) -#Created : 2025/03/20 12:30:00 -#Modified : 2025/03/20 12:48:05 -#Version : 1.0.0 -#Use Notes : -# ./sora_disable.sh -> Deshabilitar -# No usa console.lib, ni console.es -#============================================================================== -# Derechos de Autor [2025] [Mauro Rosero P. ] -#============================================================================== -# Este programa es software libre: usted puede redistribuirlo y/o modificarlo -# bajo los t茅rminos de la Licencia P煤blica Affero General de GNU tal como -# lo publica la Free Software Foundation, ya sea la versi贸n 3 de la licencia, -# o (a su elecci贸n) cualquier versi贸n posterior. -# -# Este programa se distribuye con la esperanza de que sea 煤til, -# pero SIN NINGUNA GARANT脥A; sin siquiera la garant铆a impl铆cita de -# COMERCIABILIDAD o IDONEIDAD PARA UN PROP脫SITO PARTICULAR. Consulte la -# Licencia P煤blica Affero General de GNU para obtener m谩s detalles. -# -# Deber铆a haber recibido una copia de la Licencia P煤blica Affero General -# junto con este programa. Si no la recibi贸, consulte . - -# Configuraci贸n inicial -# Usar DEVELOPER_DIR de base.lib -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -BIN_BASE="bin" -BIN_LIBS="lib" -BIN_MESG="msg" -BIN_CFGS="config" - -# Leer DEVSPATH desde el archivo de configuraci贸n o usar "devs" por defecto -if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then - DEVSPATH=$(cat "$SCRIPT_DIR/$BIN_CFGS/devspath.dat") -else - DEVSPATH="devs" -fi - -BIN_HOME="$HOME/$DEVSPATH" -VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version") - -# CHECK SHELL LANGUAGE -BIN_LANG=${LANG:0:2} - -# Importar bibliotecas necesarias -source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib" - -# Cargar mensajes en el idioma del sistema o espa帽ol por defecto -load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head" -load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "developers" -title="${head_000} ${srmsg_000}" - -# Verificar que 'dialog' est茅 instalado -if ! command -v dialog &>/dev/null; then - echo "${npm_001}" - exit 1 -fi - -# Funci贸n para eliminar alias de Sora -remove_sora_alias() { - local alias_nombre="sora" - local shell_config="" - - # Detectar el shell actual y seleccionar el archivo de configuraci贸n adecuado - case "$SHELL" in - */bash) - shell_config="$HOME/.bashrc" - ;; - */zsh) - shell_config="$HOME/.zshrc" - ;; - *) - dialog --backtitle "${title}" --title "${head_error}" --msgbox "${srmsg_021}" 7 50 - return 1 - ;; - esac - - # Verificar si el alias existe en el archivo de configuraci贸n - if grep -q "alias $alias_nombre=" "$shell_config"; then - # Eliminar el alias del archivo de configuraci贸n - sed -i "/alias $alias_nombre=/d" "$shell_config" - if [[ $? -eq 0 ]]; then - dialog --backtitle "${title}" --title "${srmsg_012}" --msgbox "${srmsg_013} $shell_config" 7 60 - else - dialog --backtitle "${title}" --title "${head_error}" --msgbox "${srmsg_020}" 7 50 - return 1 - fi - else - dialog --backtitle "${title}" --title "${srmsg_010}" --msgbox "${srmsg_011}" 7 50 - return 2 - fi -} - -# Confirmar desactivaci贸n -dialog --backtitle "${title}" --title "${npm_031}" --yesno "${srmsg_003}" 7 50 -if [[ $? -eq 0 ]]; then - # Crear un archivo fuente para la desactivaci贸n del alias - UNALIAS_FILE="$BIN_HOME/bin/sora_unalias.sh" - echo '#!/bin/bash' > "$UNALIAS_FILE" - echo 'unalias sora 2>/dev/null' >> "$UNALIAS_FILE" - echo "echo \"${srmsg_018}\"" >> "$UNALIAS_FILE" - chmod +x "$UNALIAS_FILE" - - # Ejecutar la funci贸n remove_sora_alias para el archivo de configuraci贸n permanente - remove_sora_alias - - # Crear un mensaje con instrucciones para desactivar el alias en la sesi贸n actual - dialog --backtitle "${title}" --title "${srmsg_016}" --msgbox "${srmsg_014}\n\n${srmsg_015}\n\nsource $UNALIAS_FILE\n\n" 10 70 -else - dialog --backtitle "${title}" --title "${head_canceled}" --msgbox "${npm_008}" 6 40 - exit 1 -fi - -# Limpiar consola -clear diff --git a/bin/sora_enable.sh b/bin/sora_enable.sh deleted file mode 100755 index 7382bbe..0000000 --- a/bin/sora_enable.sh +++ /dev/null @@ -1,139 +0,0 @@ -#!/bin/bash -#Script : sora_enable.sh -#Apps : MRDEVS TOOLS -#Description : Habilitar el alias 'sora' para Aider -#Author : Sora Rosero One -#Generated by : Claude Code (claude-3-7-sonnet-20250219) -#Created : 2025/03/20 12:30:00 -#Modified : 2025/03/20 12:48:05 -#Version : 1.0.0 -#Use Notes : -# ./sora_enable.sh -> Habilitar -# No usa console.lib, ni console.es -#============================================================================== -# Derechos de Autor [2025] [Mauro Rosero P. ] -#============================================================================== -# Este programa es software libre: usted puede redistribuirlo y/o modificarlo -# bajo los t茅rminos de la Licencia P煤blica Affero General de GNU tal como -# lo publica la Free Software Foundation, ya sea la versi贸n 3 de la licencia, -# o (a su elecci贸n) cualquier versi贸n posterior. -# -# Este programa se distribuye con la esperanza de que sea 煤til, -# pero SIN NINGUNA GARANT脥A; sin siquiera la garant铆a impl铆cita de -# COMERCIABILIDAD o IDONEIDAD PARA UN PROP脫SITO PARTICULAR. Consulte la -# Licencia P煤blica Affero General de GNU para obtener m谩s detalles. -# -# Deber铆a haber recibido una copia de la Licencia P煤blica Affero General -# junto con este programa. Si no la recibi贸, consulte . - -# Configuraci贸n inicial -# Usar DEVELOPER_DIR de base.lib -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -BIN_BASE="bin" -BIN_LIBS="lib" -BIN_MESG="msg" -BIN_CFGS="config" - -# Leer DEVSPATH desde el archivo de configuraci贸n o usar "devs" por defecto -if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then - DEVSPATH=$(cat "$SCRIPT_DIR/$BIN_CFGS/devspath.dat") -else - DEVSPATH="devs" -fi - -BIN_HOME="$HOME/$DEVSPATH" -VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version") - -# CHECK SHELL LANGUAGE -BIN_LANG=${LANG:0:2} - -# Importar bibliotecas necesarias -source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib" - -# Cargar mensajes en el idioma del sistema o espa帽ol por defecto -load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head" -load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "developers" -title="${head_000} ${srmsg_000}" - -# Verificar que 'dialog' est茅 instalado -if ! command -v dialog &>/dev/null; then - echo "${npm_001}" - clear - exit 1 -fi - -# Funci贸n para agregar alias de Sora para Aider -sora_alias() { - local alias_nombre="sora" - local alias_comando="" - local shell_config="" - - # Determinar la ruta del comando aider - if [[ -x "$HOME/.local/bin/aider" ]]; then - alias_comando="$HOME/.local/bin/aider" - else - alias_comando="aider" # Fallback al comando en el PATH - fi - - # Detectar el shell actual y seleccionar el archivo de configuraci贸n adecuado - case "$SHELL" in - */bash) - shell_config="$HOME/.bashrc" - ;; - */zsh) - shell_config="$HOME/.zshrc" - ;; - *) - dialog --backtitle "${title}" --title "${head_error}" --msgbox "${srmsg_021}" 7 50 - return 1 - ;; - esac - - # Verificar si el alias ya existe en el archivo de configuraci贸n - if grep -q "alias $alias_nombre=" "$shell_config"; then - dialog --backtitle "${title}" --title "${srmsg_008}" --msgbox "${srmsg_004} $shell_config" 7 60 - return 2 - else - # Agregar el alias al final del archivo de configuraci贸n - echo "alias $alias_nombre='$alias_comando'" >> "$shell_config" - if [[ $? -eq 0 ]]; then - # Recargar el archivo de configuraci贸n - source "$shell_config" 2>/dev/null || true - dialog --backtitle "${title}" --title "${srmsg_009}" --msgbox "${srmsg_005} $shell_config\n\nRecuerde ejecutar: source $shell_config" 9 60 - else - dialog --backtitle "${title}" --title "${head_error}" --msgbox "${srmsg_019}" 7 50 - return 1 - fi - fi -} - -# Confirmar activaci贸n -dialog --backtitle "${title}" --title "${npm_031}" --yesno "${srmsg_002}" 7 50 -if [[ $? -eq 0 ]]; then - # Crear un archivo fuente para la activaci贸n del alias - ALIAS_FILE="$BIN_HOME/bin/sora_alias.sh" - echo '#!/bin/bash' > "$ALIAS_FILE" - echo '# Verificar si ~/.local/bin est谩 en el PATH' >> "$ALIAS_FILE" - echo 'if [[ ":$PATH:" != *":$HOME/.local/bin:"* ]]; then' >> "$ALIAS_FILE" - echo ' # Si no est谩 en el PATH, usamos la ruta completa en el alias' >> "$ALIAS_FILE" - echo ' alias sora="$HOME/.local/bin/aider"' >> "$ALIAS_FILE" - echo 'else' >> "$ALIAS_FILE" - echo ' # Si est谩 en el PATH, podemos usar el nombre directamente' >> "$ALIAS_FILE" - echo ' alias sora="aider"' >> "$ALIAS_FILE" - echo 'fi' >> "$ALIAS_FILE" - echo "echo \"${srmsg_017}\"" >> "$ALIAS_FILE" - chmod +x "$ALIAS_FILE" - - # Ejecutar la funci贸n sora_alias para el archivo de configuraci贸n permanente - sora_alias - - # Crear un mensaje con instrucciones para activar el alias en la sesi贸n actual - dialog --backtitle "${title}" --title "${srmsg_008}" --msgbox "${srmsg_006}\n\n${srmsg_007}\n\nsource $ALIAS_FILE\n\n" 10 70 -else - dialog --backtitle "${title}" --title "${head_canceled}" --msgbox "${npm_008}" 6 40 - clear - exit 1 -fi - -# Limpiar consola -clear diff --git a/bin/aider_install.sh b/bin/sora_install.sh similarity index 100% rename from bin/aider_install.sh rename to bin/sora_install.sh diff --git a/bin/sora_unalias.sh b/bin/sora_unalias.sh deleted file mode 100755 index 156d7b8..0000000 --- a/bin/sora_unalias.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -unalias sora 2>/dev/null -echo "Alias sora deshabilitado" diff --git a/docs/cortana.md b/docs/cortana.md index 15e4b49..f73b7d3 100644 --- a/docs/cortana.md +++ b/docs/cortana.md @@ -357,26 +357,6 @@ cortana "Dise帽a una API RESTful completa para gestionar una biblioteca con usua cortana --file legacy-app.php "Este c贸digo PHP usa una versi贸n antigua (5.6). Actual铆zalo a PHP 8.0, utilizando caracter铆sticas modernas como tipos estrictos, propiedades tipadas, y construcciones match. Mant茅n la funcionalidad original." ``` -## Consideraciones 脡ticas y Limitaciones - -### Limitaciones Actuales - -- Cortana puede proporcionar informaci贸n imprecisa o desactualizada -- El conocimiento est谩 limitado a la fecha de corte del modelo -- No puede ejecutar c贸digo directamente ni acceder a recursos online -- Podr铆a generar soluciones que no se adaptan perfectamente a tu caso espec铆fico - -### Uso 脡tico - -- No uses Cortana para generar c贸digo malicioso o enga帽oso -- Verifica y comprende el c贸digo generado antes de implementarlo -- Cita apropiadamente cuando uses asistencia de IA en trabajos acad茅micos o profesionales -- Respeta los t茅rminos de servicio de Anthropic - -## Cr茅ditos y Reconocimientos - -Cortana est谩 basada en Claude de Anthropic, un asistente de IA de 煤ltima generaci贸n. Todas las capacidades de procesamiento de lenguaje natural son proporcionadas por Claude, mientras que la interfaz CLI y las integraciones espec铆ficas para desarrollo han sido implementadas por el equipo de MRDevs Tools. - ## Archivo CLAUDE.md de Configuraci贸n El archivo `CLAUDE.md` es una poderosa herramienta para personalizar y controlar el comportamiento de Cortana en proyectos espec铆ficos. Este archivo de configuraci贸n, cuando se coloca en la ra铆z de un proyecto, permite establecer par谩metros, directrices y comportamientos personalizados que Cortana seguir谩 autom谩ticamente al trabajar en ese proyecto. @@ -619,6 +599,26 @@ cp template-CLAUDE.md ~/nuevo-proyecto/CLAUDE.md 4. **Incluye ejemplos**: Proporciona ejemplos espec铆ficos de lo que consideras c贸digo "bueno" y "malo". 5. **Versionamiento**: Mant茅n el archivo CLAUDE.md en control de versiones junto con el c贸digo. +## Consideraciones 脡ticas y Limitaciones + +### Limitaciones Actuales + +- Cortana puede proporcionar informaci贸n imprecisa o desactualizada +- El conocimiento est谩 limitado a la fecha de corte del modelo +- No puede ejecutar c贸digo directamente ni acceder a recursos online +- Podr铆a generar soluciones que no se adaptan perfectamente a tu caso espec铆fico + +### Uso 脡tico + +- No uses Cortana para generar c贸digo malicioso o enga帽oso +- Verifica y comprende el c贸digo generado antes de implementarlo +- Cita apropiadamente cuando uses asistencia de IA en trabajos acad茅micos o profesionales +- Respeta los t茅rminos de servicio de Anthropic + +## Cr茅ditos y Reconocimientos + +Cortana est谩 basada en Claude de Anthropic, un asistente de IA de 煤ltima generaci贸n. Todas las capacidades de procesamiento de lenguaje natural son proporcionadas por Claude, mientras que la interfaz CLI y las integraciones espec铆ficas para desarrollo han sido implementadas por el equipo de MRDevs Tools. + ## Recursos Adicionales - [Documentaci贸n Oficial de Claude](https://docs.anthropic.com/) diff --git a/sops/browseai.sops.yaml b/sops/browseai.sops.yaml deleted file mode 100644 index 022c0c5..0000000 --- a/sops/browseai.sops.yaml +++ /dev/null @@ -1,21 +0,0 @@ -{ - "data": "ENC[AES256_GCM,data:xZ84DDD9N8+It9MgjWpCkMRwWQCXv/+QrsAs7ZEof50WmsLIhWp0ZMEZKzr35vZmboLHeRd0iCZ6QWElwfEWTnOqPTrt1RHfZ3sw3JhWmWXmyTO/pY9xS21WLTLkFWnZPj6lrqRd,iv:FRzRXlxS6IGZL6FT/1CbwgAXkIlMxPyuW6gxPe5Np9s=,tag:kcvzc+KkH7AaE0HEBmhlzw==,type:str]", - "sops": { - "kms": null, - "gcp_kms": null, - "azure_kv": null, - "hc_vault": null, - "age": null, - "lastmodified": "2025-03-27T05:20:30Z", - "mac": "ENC[AES256_GCM,data:6DoGPsyt5nMjQSadGebJ7g+Lg0DO+gjdoriK4i+/xkoTeYHDThrTeujuGR7RR8pKvHhUCqhAaniu/VY1g4UHKkhwMbBL/gaTPY8816KzPDIoaSDYwThxJLpq0V2+FVAQ106+Ey8gGtzP1B17VSFQEsRBorb91B1wvpAfpB+eOnc=,iv:cRSNvc2QegVSw2M7PKnPWSeHD719atrpTR/uf1DHMTU=,tag:221g5vI3e6FK/JqaxfOPSA==,type:str]", - "pgp": [ - { - "created_at": "2025-03-27T05:20:30Z", - "enc": "-----BEGIN PGP MESSAGE-----\n\nhQIMAx5Q8cfEImn/AQ/8DEkDwYJw+hl/xJHlH1Wl6dC2GGZtvbgGrJV83T9V+0a9\nh+rLqYe3aW6EBlpJTiSkdC0t0ZNNrvSFKl96SyLlc7PMVOZIr9pLYVwhGJwOEK8c\nJ+wzN19dGPY0TvAmv/2lUZyIDS1lvNTofJQRe4LuakRjBOOOqmtpI2FS1WGyWo6A\nYNqqMcYBjLVQVtvt74LgY3PPolGBvf/j4lK7PWzd7FiN3fGzN5dGJZDr35swI+sN\nsHPbrkVKZovHojkno46uAYy9AG+r/MvvhEc2nVuSXUHbzlzzuSsDSfMwMo+MBPMv\ndPWL6+qYruMM7xmem9l6k7Z32p3QPudb/JVtCqolqyY0ReT9oOAKSIuFVrxdKoN2\nVgdwWXvSK2/f5+kTaNv0zU8E+Zh5I6jt2BybdF6eABzlggYYo89yasgw7pLgwmND\nxdFKzXvOdPUpkWsuMzHTLRJ3H3TBc1QImj/yuilOoqrcUB+Dp2S1B0/u6GFpmPXU\nbgXKoTqnlAmBNFJsEFJDZCwxZg1ONrw2qzfpFc1lff0d5qidZgWPm89K64oxT/22\nQ397fe7EuNWddLSEjg9jiV31Ur5ZJXtLvHnaZpOvlpDyS52nTJIlYrLwLK0/k1yN\n1Jaxz2OhcfCbzWMl6Qp72kpMOCjszeC1aY1wxTZK0E44ZYG8o+EZyeoUD7QNkb/S\nXgGdOUnOC6RD/VtXSkzjhjEPnV641G/XwlfbNzsLQAZMxrXH2yto7WCYR8opRNPa\n1hhmaMtNec64eVnkCiJvfnzlGY7h3WBxCL9v3DkEta1bOmn4Ay4OOYT9Mh29ais=\n=1NAN\n-----END PGP MESSAGE-----", - "fp": "ACB17A9DB7A680D0FED714E2A17ADF8EA1E9DB07" - } - ], - "unencrypted_suffix": "_unencrypted", - "version": "3.9.2" - } -} \ No newline at end of file diff --git a/sops/digital.sops.yaml b/sops/digital.sops.yaml deleted file mode 100644 index 10d381f..0000000 --- a/sops/digital.sops.yaml +++ /dev/null @@ -1,21 +0,0 @@ -{ - "data": "ENC[AES256_GCM,data:wzUuXCw/03iQx/uBbYZaH2RUUOS9kRNsOxeYnf9gxg9EtTnHcAKCdgsi57MjCAOoJNFModUP1oiI,iv:0OxbnDf+YpAUxPKD4pwWr1m2SKigjltl2Tia9Ebvha0=,tag:IfBggkQeIxnNIa1L6WOp8Q==,type:str]", - "sops": { - "kms": null, - "gcp_kms": null, - "azure_kv": null, - "hc_vault": null, - "age": null, - "lastmodified": "2025-03-22T19:17:45Z", - "mac": "ENC[AES256_GCM,data:3DYGOmI8egY+KHpzhF8grzCs1cJ0nMc0YeQlDV7X0B4+vEK/Ja7YR7bUG4zIR38OhpENZbHMDK2ciyoifJdO4hPZKQk/+MsmdmfxV9WF+lJ0AXe3U/mGmpDv5W9KHmR13zgaN0On2cQT9cLziA7KpaSGw4CfLNgxKU/OSJC7iW0=,iv:J34Sj4LMzGCD6TOB6IU71kT8Sxj7orUb0A0yRfyB8kI=,tag:quu2v+T8lTyqRKGtE7vs8Q==,type:str]", - "pgp": [ - { - "created_at": "2025-03-22T19:17:45Z", - "enc": "-----BEGIN PGP MESSAGE-----\n\nhQIMAx5Q8cfEImn/AQ//TNSynZiJbXr16tKHNusO/8UHpS1bWIuSjJG0lcdc7c/7\nGbmDzl5mRxi38FhP/evzNiArB8uL81P0hfKogdNIFe+19yVXzuCBxd9FMLLKnFkX\nvm+0O7fkQsAU266w0snbDZdZuM6gDqiERdgeUrUh4rSdgjeHMoa2MvfpL62ncjF3\nhZL8RMGSF6Q2mjYWkjgJqVbPzKeB4x7adm3HD7YTTzSBoAChVXXSUhXl4ZMfglWb\nlF9bXrOXFwzZtiWDsLfciJdlM6hy7sDsMUIXcMXTEPNv4cMkftKzKSbD9iN1MYP0\nZC7r/yhQtZqbN1IKjtqmSBPgvhS6CbCGt7GG5iH5ohqt1L/+bJYiEkuves1DRkBq\nREDiVhHL0Dn4qTafBuE2zDB8T1MzKagUS62qJM5ODyHaC8UXz7C2OSsFIxwccZI6\njkCCW5Kx9inxNvvtwkQo8f1RH1ui+CE1f18quxCR9cTqM4Z1hADZSRQCc9DFOBC/\nVVMcdlXRluD2cwtqUyzjIAMzmDske4GRVgJsEib8b8m1Y6P783kfHJI6qjFCzLmE\npnTwOYs946K8NmVawcl6FgdDxuIZltQgMuD7xCaVR+p3IDFUNH1EYPEO8lhtTGAS\n7ScRrZYmOM+T+sHk3U+3T4OtDUjWrWMPXVC4+FrFaBUhZQ4jsjNnBkuQeqPshy3S\nXAHS4cfo9VIixvbwVibiAVkGCc4eUFiIQO/7FArmQ66Cp1YxtmbD2jCyoHAl+bMl\nlfOnww8y4AwB3+cnj2PkxnEPr2D5bvC4XPWSqhcPziUY/y7m9GUkYadKSIRq\n=wLIg\n-----END PGP MESSAGE-----", - "fp": "ACB17A9DB7A680D0FED714E2A17ADF8EA1E9DB07" - } - ], - "unencrypted_suffix": "_unencrypted", - "version": "3.9.2" - } -} \ No newline at end of file diff --git a/sops/groq.sops.yaml b/sops/groq.sops.yaml deleted file mode 100644 index 74b60e8..0000000 --- a/sops/groq.sops.yaml +++ /dev/null @@ -1,21 +0,0 @@ -{ - "data": "ENC[AES256_GCM,data:G4t/rJUQ+D5kXKpa9Z6ho0j63PjcqAJszUHfTaj6mY99HO5Oq44cmoNTJF3B8T+jLe6L+tCmGjCprtxf9gn6rJH2J7yZNg+rM34AZnE=,iv:mUjUwD+JxfGdWQCU3EpkSEdAtJfeagK2qgWRe50aQb0=,tag:IfMBpStbF1WN8QED8ce4iA==,type:str]", - "sops": { - "kms": null, - "gcp_kms": null, - "azure_kv": null, - "hc_vault": null, - "age": null, - "lastmodified": "2025-03-21T22:05:23Z", - "mac": "ENC[AES256_GCM,data:bJhHUYvPCnW70WDrmMQlXYVl+YlUXISaq3Jl0+yUn0f58UTAw+tV/VRAhwQ4Idem2qh/O9O/z6agoRfAmcBsM33nFqltS19jDkfH8p69wSAqkpgFG+5/1uQuQuFdZPsDuBHWWVQPifk8B7ou9K+aZoBMtDN3+1KXKOfzy5ZE/6A=,iv:K1IDjtKZZbrkJ/d/KHLqv27fE8C+PkCWAO2UF5kvUKo=,tag:k4jvC0x0Aptr4iHrJNhB6A==,type:str]", - "pgp": [ - { - "created_at": "2025-03-21T22:05:23Z", - "enc": "-----BEGIN PGP MESSAGE-----\n\nhQIMAx5Q8cfEImn/ARAAlnbMPu1hX3CoWRbVBL4WoLM/4YkI63hMyezqVVGX9H0i\nFt+nts0Y+quG9NcS0VBdEhR/fsCoJMIsDRf4KG6Hx0iW7KizOpOMhekhjoDKDms/\n4qAy5y5JxSLJCi2Q/6ATOsBMceK+tZyvsMEEcptsp+rd1i6Ij19+mWY3S6HCtIjT\nRbK54vMgOOmmoja6RZpYS+1jwEm3Elk6MfnKRBuZf1DYbcp3VL9jQdsViG9rB5gf\nJvvo8/nACa1Du4plgrwLEL70OFU0ZYq5Ag1J3e5G3wSD4Wfvynn/vw7Cc4mixmlj\nuZyPgsoLFxEYMGDoIupi/ztdWGTH7rFJxc0wFgVIj1bLKXJ0MRarR0tNkuTN2tFV\n7oZoRzEjU7yKP+OEXBn4EKNrAXzgDQK4x/Vrp111ucsZd6hlz0EhbUHSuXZDzkVX\nm7uKa/1/drjYNuOoaFOEAjAC8C0lYbatncihOjqsv/4QNCL0xW5Lhm7kn0CeUxnk\nSt5KNIejL8aTgtWTGuHmgDMIjVwcifIMi4TY11z9s1Qm8qWraTr83dufuMRfJ/S2\nn4WA0sRNLhPjaLrNX6TqhsBbbdDa7qZugVWiy1vFfO3s25WWMGjuee7PC3ROziTF\n0Z8PNYUliMCpkwnzrIXZLJGiSDa2pYgjdj7Oq8FFXKqWhlAROvMprdX5lBPX7h7S\nXgGfnc1LlfxuK1fZ5jIUgq5g089+gUaRh7w04a2hEfAdLjMwuy3Pp5M+q4dBDwj/\nrtMNLfsLx7KZvY5RH5t/kp9EO652ckxRp+6q+XFUf0vc/Be/H2FhioCIAakq3MI=\n=KHeg\n-----END PGP MESSAGE-----", - "fp": "ACB17A9DB7A680D0FED714E2A17ADF8EA1E9DB07" - } - ], - "unencrypted_suffix": "_unencrypted", - "version": "3.9.2" - } -} \ No newline at end of file diff --git a/sops/jarvis.sops.yaml b/sops/jarvis.sops.yaml deleted file mode 100644 index 0ebdc44..0000000 --- a/sops/jarvis.sops.yaml +++ /dev/null @@ -1,21 +0,0 @@ -{ - "data": "ENC[AES256_GCM,data:dbwrHE/0qqxyl1IJ6zd8hR3PmAYPF4lDDnWSDTKhW9kBNEf5WHRjgCK55bNBWVw7F9zcQa4vTuuyMzxXfy3iSJNeXDKDdKEZetf/x4KIl/RCsDwvN6fbxfBBeIL9O/xKzJiH5QXFMJIlWXUfAI/BUpndamKp/8zIqGjSI/rUnEIFB/JdU7puBxw6/3npct9oNVY=,iv:k4Da7Vfhnusbq5eLaF4TEFTyF2tswhKEWPuA9h6I2EU=,tag:geUtJ1HP2+q9cKRuEWHPgA==,type:str]", - "sops": { - "kms": null, - "gcp_kms": null, - "azure_kv": null, - "hc_vault": null, - "age": null, - "lastmodified": "2025-03-21T22:27:06Z", - "mac": "ENC[AES256_GCM,data:DEEEq9qvSGhsgWb6k5br0mxB85LAgA7XWxuFyi3TF+kIe/f2/Du/RNnvU9/jDU5eN6w6K+ERQQNwG9YcL8VlWK07xrQYxL40SEuPB0vhWFCA+yXXrNGLalv+vWHDK2S9wnv1p//fk9IwrDLDfk6ki+/P/hxne7IV31lYoF+EOLc=,iv:QOcBMPiSrKDzWflQ1loDb1+E29GooZwGYXkbsWOJvyg=,tag:cSy6ImCXKKZSitQWuB6s4Q==,type:str]", - "pgp": [ - { - "created_at": "2025-03-21T22:27:06Z", - "enc": "-----BEGIN PGP MESSAGE-----\n\nhQIMAx5Q8cfEImn/AQ/9FbFO7illKRiQoiRWszamHYbEGLDNCnOwzdqvMCC1k3EK\nsqtp6MzNbO3LvR6BOHNPuybvSQUdf4xKMAKOsWHk3i61nJhzc0q6Q7SWYmDli4xi\nD2YF3NQEYcyCS/rf45jKtm5eJuvQGZT+y9+hVWXV+NRCoG86eiQabY+MoCJ1y0k7\nKq+/uza6Tvpnaxqeyf9a0kwUnskjmcRt2r72+BfMVpDlHSQ079zhpRo4VdGoDizW\nFJ3XrFiLqP8LAEFZaBpJzXBphXp0uvSHq9Fq+ELTHWArcoT/48Gqm8ZPuuU+J8TV\nA4E4TwfWjxJojcrPHCisXapW/5WiYssR+QZxmeoTgoCJXHpFkWFiHiGWWOYslQdb\noBlvr0+qnPlaFdx11hqvJ2Yoo4pWWsdDi/MYQEP5+ExVpfbCH+V6OeQ+YsmSdHhF\nHZXH8eqRFI7QY46Wyn3NiOnhVt+iRNrd9mWDanzkCPEE3BgounwA4nmvvfOie8qU\nkbcsAdfnd4VJK4G5qe1bz3BfsQmJf5xtVCV9XFDT47uyIJub2fc4Z0DQCherfhvc\n07RSYGU6/r2niIt9p79xoUNn6gcl40vFUTObR1BGoUcuulNMr9mf57N3OHwEp+le\ni3eFZA8yw5PVzTuAhqkhRlNP5vtP9MVongIbhD0MGgfJ11RHzwekccsILZyelWPS\nXAEHpLpxLyD8FQBtL7C7tC/kwi8Pr1wtSpgWH0aI2oEgtZR39uKxVp0x6vn9c4ZV\npVxnQQb6IhsgGn2ZUjzkkegaXIASqi4kXKV4FIhOtU9EVMDkiCSwnKgPYJtH\n=+1pw\n-----END PGP MESSAGE-----", - "fp": "ACB17A9DB7A680D0FED714E2A17ADF8EA1E9DB07" - } - ], - "unencrypted_suffix": "_unencrypted", - "version": "3.9.2" - } -} \ No newline at end of file