[ADDED] Implementado script sora.sh para integración con aider
- 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 <noreply@anthropic.com>
This commit is contained in:
parent
6da8b9e0f6
commit
97a965417e
16 changed files with 261 additions and 416 deletions
80
README.md
80
README.md
|
@ -12,10 +12,47 @@
|
|||
|
||||
</center>
|
||||
|
||||
## 📋 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
|
||||
|
||||
---
|
||||
|
||||
|
|
1
bin/config/ai_tokens.path
Normal file
1
bin/config/ai_tokens.path
Normal file
|
@ -0,0 +1 @@
|
|||
~/.developer
|
1
bin/config/ollama.local
Normal file
1
bin/config/ollama.local
Normal file
|
@ -0,0 +1 @@
|
|||
http://127.0.0.1:11434
|
1
bin/config/sora_api_base.cfg
Normal file
1
bin/config/sora_api_base.cfg
Normal file
|
@ -0,0 +1 @@
|
|||
https://openrouter.ai/api/v1
|
1
bin/config/sora_model.cfg
Normal file
1
bin/config/sora_model.cfg
Normal file
|
@ -0,0 +1 @@
|
|||
openrouter/deepseek/deepseek-r1-distill-llama-70b:free
|
197
bin/sora.sh
Executable file
197
bin/sora.sh
Executable file
|
@ -0,0 +1,197 @@
|
|||
#!/bin/bash
|
||||
# [Author] Cortana Rosero One <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
|
|
@ -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"
|
|
@ -1,120 +0,0 @@
|
|||
#!/bin/bash
|
||||
#Script : sora_disable.sh
|
||||
#Apps : MRDEVS TOOLS
|
||||
#Description : Deshabilita el alias 'sora' para Aider
|
||||
#Author : Sora Rosero One <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. <mauro@rosero.one>]
|
||||
#==============================================================================
|
||||
# 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 <https://www.gnu.org/licenses/>.
|
||||
|
||||
# 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
|
|
@ -1,139 +0,0 @@
|
|||
#!/bin/bash
|
||||
#Script : sora_enable.sh
|
||||
#Apps : MRDEVS TOOLS
|
||||
#Description : Habilitar el alias 'sora' para Aider
|
||||
#Author : Sora Rosero One <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. <mauro@rosero.one>]
|
||||
#==============================================================================
|
||||
# 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 <https://www.gnu.org/licenses/>.
|
||||
|
||||
# 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
|
|
@ -1,3 +0,0 @@
|
|||
#!/bin/bash
|
||||
unalias sora 2>/dev/null
|
||||
echo "Alias sora deshabilitado"
|
|
@ -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/)
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue