Compare commits

...

13 commits

Author SHA1 Message Date
5c5e31401f
[DOCS] Actualizada documentación de Sora
- Actualizada documentación para reflejar el cambio de alias a script directo

- Añadida información sobre el modo local con Ollama

- Agregados detalles sobre evaluación de hardware

- Reorganizada sección de modos de ejecución

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-04-07 20:45:47 -05:00
08f449ab31
[FIXED] Corregida versión hardcoded en sora.sh
- Reemplazada expresión de versión dinámica por valor estático

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-04-07 20:37:30 -05:00
9ef1dd4c25
[IMPROVED] Refactorizado sora.sh para seguir estándares del proyecto
- Modificado formato de header según convenciones del proyecto

- Implementada estructura modular con funciones bien definidas

- Mejorado manejo de errores y validaciones

- Añadida documentación interna siguiendo guías de estilo

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-04-07 20:35:31 -05:00
97a965417e
[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>
2025-04-07 20:32:27 -05:00
6da8b9e0f6 [FIXED] Mejorado el manejo de rutas en ai_token.sh
- Corregido el procesamiento de la ruta en get_tokens_path
- Añadido filtro para eliminar espacios en la ruta
- Mejor manejo de la expansión de la tilde en la ruta
- Garantizada compatibilidad con la ruta ~/.developer
- Actualizada fecha de modificación
2025-04-07 06:06:30 -05:00
387aa01122 [IMPROVED] Modificado ai_token.sh para usar la ruta de config/ai_tokens.path
- Añadida función get_tokens_path para leer la ruta personalizada
- Actualizado encrypt_token para usar la ruta configurada
- Modificado main para verificar archivos en la ubicación correcta
- Manejo de expansión de tilde (~) en rutas
- Actualizada fecha de modificación
2025-04-07 06:04:02 -05:00
27566241a9 [DOCS] Agregada sección sobre asistentes de IA en README
- Incorporada nueva sección '🤖 Asistentes de IA para el Desarrollo'
- Destacadas las características principales de Cortana y Sora
- Incluidos ejemplos de uso prácticos para ambos asistentes
- Añadidos enlaces a la documentación completa
2025-04-07 05:29:48 -05:00
140185521d [DOCS] Agregado manual completo de Sora (Aider)
- Creado manual detallado sobre Sora (basado en Aider) en docs/sora.md
- Documentadas funcionalidades básicas y avanzadas
- Incluidas técnicas para optimización y reducción de consumo de tokens
- Detallados casos de uso prácticos y solución de problemas comunes
- Añadida referencia en el README.md
2025-04-07 05:18:29 -05:00
e41bacc7b0 [DOCS] Agregada sección sobre CLAUDE.md y parametrización avanzada
- Se agregó una extensa sección sobre el archivo CLAUDE.md
- Documentadas funcionalidades básicas y avanzadas
- Detallada la parametrización avanzada y control de comportamiento
- Incluidos ejemplos prácticos y casos de uso especializado
- Añadidas mejores prácticas para la creación de archivos CLAUDE.md
2025-04-07 05:03:19 -05:00
0732e95082 [DOCS] Actualizado README con referencia a la documentación de Cortana 2025-04-07 04:55:09 -05:00
ff8873432e [DOCS] Agregado manual completo de Cortana (Claude Code)
- Creado archivo cortana.md con manual detallado de uso
- Incluye buenas prácticas para reducir consumo de tokens
- Contiene ejemplos prácticos e integración con flujo de trabajo
- Documenta casos de uso comunes y solución de problemas
2025-04-07 04:54:45 -05:00
988ab571cc [DOCS] Separada la documentación de Gum y Glow en archivos específicos
- Creado el archivo docs/glow.md con la documentación completa de Glow
- Actualizado uso.md para que dirija a las documentaciones específicas
- Actualizadas las referencias en el README a los nuevos documentos
- Mejorado el formato y organización de la documentación
2025-04-07 04:47:56 -05:00
d0d758f552 [DOCS] Reestructurado README moviendo el manual de uso a docs/uso.md
- Se ha creado un archivo uso.md que contiene toda la información del manual de uso
- Se ha actualizado el README para que sea más conciso y referencie a la documentación
- Se ha renombrado forms-gum.md a gum.md para mayor claridad
2025-04-07 04:39:14 -05:00
22 changed files with 2389 additions and 927 deletions

614
README.md
View file

@ -12,21 +12,59 @@
</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
- **Modos Flexible**: Conecta con servicios en la nube (OpenRouter) o ejecuta modelos localmente (Ollama)
- **Evaluación de Hardware**: Analiza y muestra la capacidad del sistema para ejecutar modelos locales
- **Desarrollo Multidocumento**: Comprende y modifica sistemas completos de múltiples archivos
### 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
bin/sora.sh 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.
### 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
### Instalación Básica
```bash
# Clonar el repositorio
@ -39,569 +77,21 @@ bin/bootstrap.sh
# Configurar SOPS para encriptación GPG (obligatorio)
bin/sops_rules.sh
# Actualizar el entorno (opcional)
bin/update.sh
```
> **IMPORTANTE**: La configuración del arcivo de reglas de sops .sops.yaml es un paso obligatorio antes de poder utilizar la plataforma. bin/sops_rules.sh crea el archivo base de configguración sops para el proyecto. Las claves GPG del desarrollador principal debe existir en el repositorio de claves.
> **IMPORTANTE**: La configuración del archivo de reglas de sops .sops.yaml es un paso obligatorio antes de poder utilizar la plataforma. Para más detalles, consulte la [documentación de SOPS Rules](docs/sops_rules.md).
### Estructura de Directorios
## 📚 Documentación
MRDevs Tools utiliza una estructura organizada que separa el código (en ~/devs) y la configuración (en directorios ocultos):
MRDevs Tools cuenta con documentación detallada para todas sus funcionalidades:
#### Código y scripts
- `~/devs/bin/`: Scripts ejecutables y herramientas principales
- `lib/`: Bibliotecas compartidas de funciones
- `msg/`: Archivos de mensajes multilingües
- `config/`: Configuración del sistema
#### Configuración y datos
- `~/.sounds/`: Archivos de audio para notificaciones y alertas
- `~/.ollama/`: Configuración, modelos y datos para Ollama AI
- `~/.vosk/`: Modelos para reconocimiento de voz local
- `~/.cortana/`: Configuración y tokens para Claude Code
- `~/.developer/`: Tokens y configuraciones para herramientas de desarrollo
- `~/.cache/devs/`: Caché de descargas y datos temporales
## 🔧 Funcionalidades Principales
### Gestión del Entorno de Desarrollo
| Comando | Descripción |
|---------|-------------|
| `bin/bootstrap.sh` | Instala herramientas básicas (incluyendo oathtool, zbar, redis-cli, gum y glow) y configura la gestión de contenedores |
| `bin/sops_rules.sh` | Configura SOPS con clave GPG para encriptación segura de secretos (paso obligatorio tras la instalación) |
| `bin/update.sh` | Actualiza el entorno de desarrollo y herramientas (incluyendo oathtool, zbar, redis-cli, gum y glow) |
| `bin/npm_install.sh` | Instala NodeJS y npm de forma interactiva |
| `bin/project_new.sh` | Crea un nuevo proyecto con estructura estandarizada según el tipo seleccionado |
### Herramientas de CLI Modernas
MRDevs Tools integra herramientas modernas de Charm para mejorar la experiencia en la línea de comandos:
| Herramienta | Descripción |
|---------|-------------|
| [Gum](https://github.com/charmbracelet/gum) | Toolkit para interfaces TUI elegantes y funcionales |
| [Glow](https://github.com/charmbracelet/glow) | Renderizador de Markdown para terminal con soporte para temas y paginación |
#### Interfaces de Usuario con Gum
| Comando/Documento | Descripción |
|---------|-------------|
| `docs/forms-gum.md` | Tutorial completo para crear formularios interactivos con Gum |
| `gum style` | Da formato al texto (color, negrita, etc.) |
| `gum input` | Campo de entrada para texto |
| `gum choose` | Menú de selección de opciones |
| `gum confirm` | Diálogo de confirmación (Sí/No) |
### Herramientas de IA y Productividad
| Comando | Descripción |
|---------|-------------|
| `bin/claude_install.sh` | Instala Claude Code CLI |
| `bin/claude_install.sh -u` | Desinstala Claude Code CLI |
| `bin/cortana_token.sh` | Gestiona la encriptación del token de Claude Code vía SOPS |
| `bin/jarvis_token.sh` | Gestiona la encriptación del token de Jarvis vía SOPS |
| `bin/cortana_alias.sh` | Configura alias 'cortana' para Claude Code |
| `bin/cortana_unalias.sh` | Elimina el alias 'cortana' |
| `bin/cortana_enable.sh` | Activa el alias 'cortana' permanentemente |
| `bin/cortana_disable.sh` | Desactiva temporalmente el alias 'cortana' |
| `bin/aider_install.sh` | Instala Aider CLI (asistente de código IA) |
| `bin/aider_install.sh -u` | Desinstala Aider CLI |
| `bin/sora_enable.sh` | Activa el alias 'sora' para Aider permanentemente |
| `bin/sora_disable.sh` | Desactiva el alias 'sora' para Aider |
| `bin/ai_token.sh` | Gestiona tokens de múltiples proveedores de IA vía SOPS |
| `bin/ollama_up.sh` | Inicia el servicio Ollama (IA local) con podman-compose. Crea y configura `~/.ollama/` |
| `bin/ollama_down.sh` | Detiene el servicio Ollama (IA local) |
| `bin/ollama.sh` | Cliente para interactuar con Ollama (auto-inicia el servicio si es necesario) |
| `bin/nodered.sh` | Administra Node-RED con soporte para ejecución, monitoreo y gestión completa del servicio |
### Herramientas para Editores de Código
| Comando | Descripción |
|---------|-------------|
| `bin/helix_install.sh` | Instala Helix Editor con soporte multiplataforma (apt, snap, pacman, etc.) |
| `bin/helix_install.sh -u` | Desinstala Helix Editor del sistema |
| `bin/vscode_install.sh` | Instala Visual Studio Code con detección automática del SO y sus métodos de instalación |
| `bin/vscode_install.sh -u` | Desinstala Visual Studio Code del sistema |
| `bin/zettlr_install.sh` | Instala Zettlr Markdown Editor con detección automática del SO |
| `bin/zettlr_install.sh -u` | Desinstala Zettlr Markdown Editor del sistema |
### Herramientas para Control de Versiones
| Comando | Descripción |
|---------|-------------|
| `bin/backlog.sh <commit_id>` | Revierte el repositorio o archivos específicos al estado de un commit concreto |
| `bin/ghadmin_install.sh` | Instala GitHub CLI (gh) con soporte multiplataforma |
| `bin/gladmin_install.sh` | Instala GitLab CLI (glab) con múltiples métodos de instalación |
| `bin/fjadmin_install.sh` | Instala Forgejo CLI (berg) para administración de Forgejo/Codeberg |
| `source bin/forgejo_login.sh` | Inicia/cierra sesión en Forgejo usando tokens encriptados con SOPS |
| `source bin/github_login.sh` | Inicia/cierra sesión en GitHub usando tokens encriptados con SOPS |
| `bin/cversion_token.sh` | Gestiona tokens de acceso para plataformas de control de versiones de forma segura |
### Seguridad y Acceso
| Comando | Descripción |
|---------|-------------|
| `bin/sops_rules.sh` | Configura SOPS con clave GPG para encriptación segura de secretos ([documentación](docs/sops_rules.md)) |
| `bin/qr_secret.sh` | Extrae secretos de imágenes QR y los guarda encriptados con [SOPS](docs/sops.md) |
| `bin/vpn_install.sh` | Instala el cliente Pritunl VPN |
| `bin/vpn_install.sh --update` | Actualiza el cliente VPN a la última versión |
| `bin/vpn_users.sh` | Gestiona usuarios de la VPN |
| `bin/vpn_check.sh` | Verifica conexión a VPN y muestra el tipo de VPN activo |
| `bin/gpg_init.sh` | Inicializa configuración GPG para cifrado seguro |
### Gestión de Perfiles
| Comando | Descripción |
|---------|-------------|
| `bin/profile_backup.sh` | Realiza copia de seguridad del perfil del desarrollador (GPG, SSH, Git, y carpeta .developer) |
| `bin/profile_restore.sh <archivo>` | Restaura perfil desde copia de seguridad |
### Desarrollo Especializado
| Comando | Descripción |
|---------|-------------|
| `bin/rate_update.py` | Actualiza tarifas por hora de diferentes tipos de programadores |
| `bin/cocomo.py` | Calcula costos de proyecto usando el modelo COCOMO |
## 📚 Guía de Usuario
> **NOTA**: Consulta nuestra documentación detallada en: [SOPS](docs/sops.md), [SOPS Rules](docs/sops_rules.md) y [Gum Forms](docs/forms-gum.md).
### Herramientas de CLI Modernas
MRDevs Tools incluye soporte completo para herramientas modernas de CLI de [Charm](https://charm.sh/):
#### Gum - Interfaces de Texto Elegantes
[Gum](https://github.com/charmbracelet/gum) permite crear interfaces de texto (TUI) elegantes y funcionales:
```bash
# Abrir el tutorial completo sobre Gum
xdg-open ~/devs/docs/forms-gum.md
# Ejemplos rápidos
gum style --border normal --margin "1" --padding "1 2" "Texto con estilo"
gum input --placeholder "Ingresa tu nombre"
gum confirm "¿Deseas continuar?" && echo "Has confirmado" || echo "Has cancelado"
```
El tutorial incluye:
- Ejemplos prácticos de formularios interactivos
- Guía para crear menús de selección
- Técnicas para estilizar texto y crear layouts complejos
- Referencias visuales de cada componente
#### Glow - Renderizador de Markdown
[Glow](https://github.com/charmbracelet/glow) es un renderizador de Markdown para la terminal:
```bash
# Visualizar un archivo Markdown
glow README.md
# Visualizar con tema oscuro
glow -s dark README.md
# Modo paginado para documentos largos
glow -p LICENSE.md
```
Para más detalles, consulta la [documentación completa de estas herramientas](docs/forms-gum.md).
### Preparación del Entorno
El directorio `$HOME/devs` sirve como área principal de desarrollo donde se gestionan diversos ambientes y proyectos. Por razones de seguridad, se prioriza [podman](https://podman.io/) sobre [docker](https://www.docker.com/) como gestor de contenedores.
Para agregar temporalmente los comandos de la plataforma al PATH:
```bash
source ~/devs/bin/devset.sh
```
Este script detecta automáticamente la ubicación correcta del directorio bin y lo agrega al PATH solo para la sesión actual (no es persistente).
Si desea usar Docker en lugar de Podman, debe instalarlo manualmente antes de ejecutar `bootstrap.sh`.
### Gestión Avanzada de Repositorios Git
```bash
# Revertir todo el repositorio a un commit específico
bin/backlog.sh a1b2c3d
# Recuperar solo un archivo específico desde un commit
bin/backlog.sh a1b2c3d --file src/config.js
# Recuperar múltiples archivos usando un patrón
bin/backlog.sh a1b2c3d --files "*.js"
# Ver solo la lista de archivos modificados en un commit
bin/backlog.sh a1b2c3d --list
# Ver la ayuda completa del comando
bin/backlog.sh --help
```
El script `backlog.sh` permite recuperar estados previos del repositorio con varias opciones de seguridad:
- Crea ramas de respaldo automáticamente antes de realizar cambios
- Ofrece guardar cambios no confirmados en stash
- Proporciona confirmaciones interactivas antes de acciones potencialmente destructivas
- Incluye instrucciones para deshacer los cambios si fuera necesario
### Configuración de Herramientas de IA
MRDevs Tools facilita el trabajo con herramientas de IA:
#### Claude Code CLI
```bash
# Instalación
bin/claude_install.sh
# Gestión del token de forma segura
bin/cortana_token.sh
# Crear alias para facilitar su uso (cortana = claude)
bin/cortana_alias.sh
# Habilitar uso del alias permanentemente
bin/cortana_enable.sh
# Deshabilitar temporalmente el alias
bin/cortana_disable.sh
# Eliminar el alias (si es necesario)
bin/cortana_unalias.sh
```
El token se encripta usando SOPS y se almacena de forma segura en `$HOME/.cortana/cortana.sops.yaml`.
##### Control por voz (Experimental)
MRDevs Tools incluye un script experimental para interactuar con Claude Code mediante comandos de voz:
```bash
# Ver instrucciones para instalar dependencias
bin/claude_voice.py --install-deps
# Para sistemas Ubuntu/Debian
sudo apt install python3-pyaudio python3-pip
pip install --user vosk pydub sounddevice wget
# Modo interactivo básico (español por defecto)
bin/claude_voice.py
# Ver idiomas soportados
bin/claude_voice.py --list-languages
# Usar idioma específico (inglés)
bin/claude_voice.py --language en-us
# Modo continuo (escucha hasta que digas "salir")
bin/claude_voice.py --continuous
# Listar dispositivos de audio disponibles
bin/claude_voice.py --list-devices
# Especificar dispositivo de audio por ID
bin/claude_voice.py --device 1
# Ver la versión de Claude Code instalada
bin/claude_voice.py --version
# Modificar tiempo máximo de espera para respuestas (en segundos)
bin/claude_voice.py --timeout 30
# Enviar texto directamente (sin voz)
bin/claude_voice.py --text "Cómo puedo crear un archivo en Python"
```
> **NOTA**: Esta funcionalidad es experimental y requiere un micrófono configurado correctamente. El reconocimiento de voz utiliza Vosk, una solución local que no requiere conexión a Internet. La primera vez que ejecutes el script con un nuevo idioma, descargará automáticamente el modelo de reconocimiento correspondiente. Los archivos de sonido para notificaciones se almacenan en `~/.sounds/`.
#### Aider CLI
```bash
# Instalación
bin/aider_install.sh
# Habilitar alias para facilitar su uso (sora = aider)
bin/sora_enable.sh
# Deshabilitar el alias
bin/sora_disable.sh
# Desinstalar (si es necesario)
bin/aider_install.sh -u
```
Aider es un asistente de código basado en IA que te permite colaborar con modelos de lenguaje de OpenAI directamente desde la terminal. El script de instalación utiliza el instalador oficial de Aider.
#### Gestor de Tokens de IA
```bash
# Gestionar tokens de diferentes proveedores de IA
bin/ai_token.sh
```
El script `ai_token.sh` proporciona una forma centralizada y segura de gestionar tokens de API para múltiples proveedores de IA:
- Muestra un menú interactivo con los proveedores disponibles definidos en `bin/config/ai.tokens`
- Solicita y valida el token de API de forma segura
- Encripta el token usando SOPS y lo almacena en `$HOME/sops/{provider}.sops.yaml`
- Incluye verificaciones de seguridad (longitud del token, caracteres válidos)
- Soporte completo para internacionalización
Proveedores soportados por defecto: Anthropic Claude, OpenAI ChatGPT, Google Gemini, Groq, DeepSeek, HuggingFace, Replicate, OpenRouter, Brave Search, Serper Search, Voyage RAG, Apify y más.
La configuración de proyectos se almacena en `bin/config/projects.dat`, donde se encuentra el nombre de la carpeta de proyectos utilizada por el sistema.
### Instalación de Editores de Código
#### Helix Editor
Helix es un editor de código moderno similar a Vim/Neovim pero con una curva de aprendizaje más amigable:
```bash
# Instalación automatizada
bin/helix_install.sh
```
El script detecta automáticamente tu sistema operativo y utiliza el método de instalación más adecuado:
- En Ubuntu: Instala mediante snap para obtener la versión más reciente
- En Arch Linux: Utiliza pacman
- En Fedora: Instala a través de dnf
- En otros sistemas: Descarga e instala desde el tarball oficial
#### Visual Studio Code
Visual Studio Code es un editor de código potente y extensible con amplio soporte para múltiples lenguajes:
```bash
# Instalación automatizada
bin/vscode_install.sh
# Desinstalación
bin/vscode_install.sh -u
```
El script ofrece una instalación optimizada para cada plataforma:
- En Ubuntu/Debian: Configura el repositorio oficial de Microsoft y utiliza apt
- En Red Hat/Fedora: Configura el repositorio RPM y utiliza dnf
- En Arch Linux: Instala desde AUR o repositorios oficiales
- En macOS: Utiliza Homebrew para la instalación
- En FreeBSD: Instala mediante el gestor de paquetes pkg
#### Zettlr Markdown Editor
Zettlr es un potente editor Markdown centrado en académicos e investigadores, con funcionalidades avanzadas:
```bash
# Instalación automatizada
bin/zettlr_install.sh
# Desinstalación
bin/zettlr_install.sh -u
```
El script proporciona una instalación especializada para cada plataforma:
- En Ubuntu/Debian: Descarga e instala el paquete .deb oficial
- En Red Hat/Fedora: Descarga e instala el paquete .rpm oficial
- En Arch Linux: Instala desde AUR con ayuda de yay
- En macOS: Utiliza Homebrew para instalación
- En FreeBSD: Configuración manual con AppImage (no hay soporte oficial)
Características del instalador:
- Obtiene automáticamente la última versión disponible desde GitHub
- Solicita permisos de administrador cuando son necesarios
- Utiliza interfaz gráfica para confirmación y línea de comandos para instalación
- Limpia archivos de configuración residuales durante la desinstalación
- Proporciona información detallada sobre las características de Zettlr
### Herramientas para Control de Versiones
MRDevs Tools incluye scripts para simplificar la instalación de CLIs para diferentes plataformas Git:
#### GitHub CLI (gh)
```bash
# Instalación automatizada
bin/ghadmin_install.sh
```
El script detecta tu sistema operativo y utiliza el método de instalación más adecuado:
- En Debian/Ubuntu: Añade el repositorio oficial de GitHub y usa apt
- En Red Hat/Fedora: Configura el repositorio rpm y usa dnf
- En Arch Linux: Instala desde los repositorios oficiales
- En macOS: Instala a través de Homebrew
Para aprender a usar GitHub CLI, consulta la [documentación oficial de GitHub CLI](https://cli.github.com/manual/).
#### GitLab CLI (glab)
```bash
# Instalación automatizada
bin/gladmin_install.sh
```
El script prioriza los métodos de instalación en este orden:
1. Paquetes oficiales del sistema si están disponibles
2. Script oficial de instalación de GitLab
3. Gestores de paquetes como snap o Homebrew
4. Binarios precompilados o instalación vía Go
Para aprender a usar GitLab CLI, consulta la [documentación oficial de GitLab CLI](https://gitlab.com/gitlab-org/cli/-/blob/main/docs/index.md).
#### Forgejo CLI (berg)
```bash
# Instalación automatizada
bin/fjadmin_install.sh
```
Este script instala Forgejo CLI (berg), la herramienta de línea de comandos para administrar instancias de Forgejo/Codeberg:
- Verifica e instala las dependencias necesarias (como Rust y Cargo si no están presentes)
- Instala berg de manera optimizada para tu sistema
- Configura el entorno correctamente para usar berg
- Incluye instrucciones posteriores a la instalación
Para aprender a usar Forgejo CLI, consulta la [documentación oficial de Forgejo/Codeberg CLI](https://codeberg.org/RobWalt/berg).
#### Gestión de tokens para control de versiones
```bash
# Gestión segura de tokens de acceso
bin/cversion_token.sh
```
Este script proporciona una interfaz para gestionar tokens de acceso para diferentes plataformas:
- Permite seleccionar entre Github, Gitlab y Forgejo
- Solicita y valida el token de forma segura
- Encripta el token con SOPS y lo almacena en ~/.developer
- Incluye verificación de formato y seguridad de tokens
- Gestiona automáticamente permisos para archivos de tokens
#### Autenticación con Forgejo y GitHub usando token encriptado
```bash
# Iniciar sesión en Forgejo usando el token encriptado
source bin/forgejo_login.sh
# Cerrar sesión de Forgejo
source bin/forgejo_login.sh --logout
# Iniciar sesión en GitHub usando el token encriptado
source bin/github_login.sh
# Cerrar sesión de GitHub
source bin/github_login.sh --logout
```
El script de Forgejo facilita la autenticación con Forgejo/Codeberg CLI (berg):
- Utiliza el token almacenado y encriptado por cversion_token.sh
- Desencripta automáticamente el token usando SOPS
- Detecta la URL de Forgejo basándose en la configuración de git
- Configura la variable BERG_BASE_URL con la URL detectada
- Proporciona opciones para login (por defecto) y logout
El script de GitHub facilita la autenticación con GitHub CLI (gh):
- Utiliza el token almacenado y encriptado por cversion_token.sh
- Desencripta automáticamente el token usando SOPS
- Proporciona opciones para login (por defecto) y logout
### Copias de Seguridad
Para respaldar configuraciones importantes:
```bash
bin/profile_backup.sh
```
Esto crea un archivo ZIP en `$HOME/secure/backups` que incluye:
- Configuración GPG completa
- Claves SSH y configuración
- Configuración Git
- Carpeta .developer (para configuraciones de servidores Git)
La carpeta puede contener múltiples archivos de respaldo con un archivo `gpg.secret` que contiene la contraseña encriptada. La pérdida de este archivo imposibilitará la restauración.
Para restaurar:
```bash
bin/profile_restore.sh <archivo-zip-backup>
```
### Creación de Proyectos Estandarizados
MRDevs Tools proporciona una forma estandarizada de crear nuevos proyectos con `project_new.sh`:
```bash
# Crear un nuevo proyecto
bin/project_new.sh
```
El script `project_new.sh` crea proyectos con una estructura completa según el tipo seleccionado:
- Solicita nombre, tipo, licencia y descripción del proyecto
- Crea una estructura organizada de carpetas según el tipo de proyecto
- Inicializa un repositorio Git con archivo .gitignore específico
- Configura archivos README.md y documentación básica
- Permite seleccionar el tipo de servidor Git (GitHub, GitLab, Gitea, Forgejo, None)
- Genera un commit inicial automático
Tipos de proyectos soportados:
- Python, Node.js, PHP, Rust, C, C++, C#
- Odoo, Ansible, ESP32/Arduino
- COBOL y otros tipos personalizados
Cada tipo de proyecto incluye:
- Estructura de directorios optimizada
- Archivos de configuración específicos
- Archivos .gitignore personalizados
- Documentación inicial básica
### Gestión de Tarifas y Costos
MRDevs Tools incluye utilidades para la gestión de tarifas y estimación de costos:
#### Actualización de Tarifas
El script `rate_update.py` permite mantener actualizadas las tarifas por hora de diferentes tipos de programadores:
```bash
# Actualizar tarifas faltantes
bin/rate_update.py
# Listar todas las tarifas disponibles
bin/rate_update.py --list
# Actualizar la tarifa de un tipo específico de programador
bin/rate_update.py --type python
# Actualizar todas las tarifas, incluso las existentes
bin/rate_update.py --init
```
Las tarifas se almacenan en archivos individuales dentro de `data/rates/` (directorio sin tracking en git) y pueden ser utilizadas por otras herramientas.
#### Estimación de Costos con COCOMO
El script `cocomo.py` implementa el modelo COCOMO para estimar costos de proyectos de software basados en las líneas de código:
```bash
# Calcular costo de un proyecto
bin/cocomo.py --project /ruta/al/proyecto
# Usar un tipo específico de programador para los costos
bin/cocomo.py --project /ruta/al/proyecto --type devops
# Especificar un modelo COCOMO específico
bin/cocomo.py --project /ruta/al/proyecto --model embedded
# Ignorar patrones adicionales de archivos
bin/cocomo.py --project /ruta/al/proyecto --ignore "*.generated.js" --ignore "vendor/**"
```
El script analizará el código fuente, contará las líneas efectivas, y calculará estimaciones de esfuerzo, tiempo y costos utilizando las tarifas por hora configuradas.
- [Guía de Uso](docs/uso.md): Manual completo de instalación y uso de todas las herramientas
- [SOPS](docs/sops.md): Guía para la gestión segura de secretos
- [SOPS Rules](docs/sops_rules.md): Configuración de reglas para encriptación
- [Gum](docs/gum.md): Tutorial para interfaces TUI interactivas
- [Glow](docs/glow.md): Guía de uso del renderizador de Markdown
- [Cortana](docs/cortana.md): Manual completo del asistente de desarrollo basado en IA
- [Sora](docs/sora.md): Guía del asistente basado en IA colaborativo para programación
## 🔐 Seguridad y Privacidad
@ -726,7 +216,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
---

View file

@ -5,7 +5,7 @@
#Author : Sora Rosero One <sora@rosero.one>
#Generated by : Claude Code (claude-3-7-sonnet-20250219)
#Created : 2025/03/21 16:06:20
#Modified : 2025/03/21 17:14:59
#Modified : 2025/04/07 07:52:14
#Version : 1.0.0
#Use Notes :
# Gestiona múltiples tokens de IA definidos en ai.tokens
@ -99,15 +99,44 @@ load_providers() {
done < <(grep -v "^#" "$config_file")
}
# Función para leer la ruta personalizada para los tokens desde config
get_tokens_path() {
local config_file="$BIN_HOME/$BIN_BASE/$BIN_CFGS/ai_tokens.path"
local default_path="$BIN_HOME/$BIN_SOPS"
if [ -f "$config_file" ]; then
# Leer la ruta del archivo de configuración y eliminar espacios/saltos de línea
local path_from_config=$(cat "$config_file" | tr -d '\r\n' | tr -d ' ')
# Expandir la tilde (~) a la ruta HOME del usuario
path_from_config="${path_from_config/#\~/$HOME}"
# Verificar que la ruta exista o crearla
if [ ! -d "$path_from_config" ]; then
mkdir -p "$path_from_config" 2>/dev/null
# Si no se pudo crear, usar la ruta por defecto
if [ ! -d "$path_from_config" ]; then
echo "$default_path"
return
fi
fi
echo "$path_from_config"
else
echo "$default_path"
fi
}
# Función para encriptar token con SOPS
encrypt_token() {
local provider_code="$1"
local token="$2"
local output_file="$BIN_HOME/$BIN_SOPS/${provider_code}.sops.yaml"
local tokens_dir=$(get_tokens_path)
local output_file="${tokens_dir}/${provider_code}.sops.yaml"
local temp_file="/tmp/ai_token_$$"
# Crear directorio si no existe
mkdir -p "$BIN_HOME/$BIN_SOPS"
mkdir -p "$tokens_dir"
# Codificar el token en base64
local token_base64=$(echo -n "$token" | base64)
@ -218,8 +247,9 @@ main() {
provider_code="$selected_provider_code"
provider_desc="$selected_provider_desc"
# Verificar archivo de token si ya existe
sops_file="$BIN_HOME/$BIN_SOPS/${provider_code}.sops.yaml"
# Obtener la ruta de tokens y verificar si el archivo ya existe
tokens_dir=$(get_tokens_path)
sops_file="${tokens_dir}/${provider_code}.sops.yaml"
if [ -f "$sops_file" ]; then
# Preguntar con dialog_yesno de console.lib
dialog_yesno "${aimsg_107}"

View file

@ -0,0 +1 @@
~/.developer

1
bin/config/ollama.local Normal file
View file

@ -0,0 +1 @@
http://127.0.0.1:11434

View file

@ -0,0 +1 @@
https://openrouter.ai/api/v1

View file

@ -0,0 +1 @@
openrouter/deepseek/deepseek-r1-distill-llama-70b:free

343
bin/sora.sh Executable file
View file

@ -0,0 +1,343 @@
#!/bin/bash
#Script : sora.sh
#Apps : MRDEVS TOOLS
#Description : Ejecuta aider con configuración de OpenRouter/Ollama
#Author : Sora Rosero One <sora@rosero.one>
#Generated by : Claude Code (claude-3-7-sonnet-20250219)
#Created : 2025/04/07 10:23:45
#Modified : 2025/04/07 12:10:30
#Version : 1.3.1
#Use Notes :
# Conecta con modelos de IA remotos (OpenRouter) o locales (Ollama)
# Evalúa el hardware para ejecución local y muestra diagnóstico
# Permite selección interactiva de modelos con gum
#==============================================================================
# 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
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BIN_BASE="bin"
BIN_LIBS="lib"
BIN_MESG="msg"
BIN_CFGS="config"
BIN_SOPS="sops"
# Cargar bibliotecas
if [ -f "$SCRIPT_DIR/../$BIN_LIBS/base.lib" ]; then
source "$SCRIPT_DIR/../$BIN_LIBS/base.lib"
else
echo "Error: No se pudo cargar la biblioteca base."
exit 1
fi
# Mensaje de bienvenida
echo "=== Sora - Asistente de Desarrollo Colaborativo ==="
echo "Versión: $VERSION"
echo ""
# Verificar si aider está instalado
check_aider() {
if ! command -v aider &> /dev/null; then
echo "Error: aider no está instalado."
echo "Instálelo ejecutando: $BIN_BASE/sora_install.sh"
exit 1
fi
}
# Obtener ruta de tokens
get_tokens_path() {
local tokens_path_file="$SCRIPT_DIR/$BIN_CFGS/ai_tokens.path"
local tokens_path
if [ -f "$tokens_path_file" ]; then
tokens_path=$(cat "$tokens_path_file" 2>/dev/null)
if [ -z "$tokens_path" ]; then
echo "Error: Archivo de configuración de ruta de tokens vacío."
exit 1
fi
# Expandir ruta si comienza con ~
if [[ "$tokens_path" == "~"* ]]; then
tokens_path="${tokens_path/#\~/$HOME}"
fi
echo "$tokens_path"
else
echo "Error: No se pudo encontrar el archivo de configuración de ruta de tokens."
exit 1
fi
}
# Ejecutar verificaciones iniciales
check_aider
TOKENS_BASE_PATH=$(get_tokens_path)
# Función para verificar y obtener tokens
check_token() {
local token_file=$1
local provider=$2
if [ ! -f "$token_file" ]; then
echo "Error: Archivo de token no encontrado: $token_file"
echo "Registre su token usando $BIN_BASE/ai_token.sh o solicite el token al administrador del proyecto."
exit 1
fi
local api_key
api_key=$(sops -d "$token_file" | cut -d\| -f2 | tr -d '[:space:]' | base64 -d)
if [ -z "$api_key" ]; then
echo "Error: No se pudo desencriptar el token de $provider."
exit 1
fi
echo "$api_key"
}
# Función para cargar o crear configuración
load_config() {
local config_file=$1
local default_value=$2
local description=$3
if [ ! -f "$config_file" ]; then
echo "Creando archivo de configuración para $description..."
echo "$default_value" > "$config_file"
fi
local config_value
config_value=$(cat "$config_file" 2>/dev/null || echo "$default_value")
echo "$config_value"
}
# Función para evaluar hardware
evaluate_hardware() {
local cpu_cores=$(nproc)
local ram_total_gb=$(free -g | awk '/^Mem:/{print $2}')
local ram_available_gb=$(free -g | awk '/^Mem:/{print $7}')
local has_gpu=$(lspci | grep -i nvidia | grep -v "Audio\|USB" || echo "")
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")"
# Determinar nivel de rendimiento
local 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
echo "$performance_level"
}
# Definir archivos de configuración
OPENROUTER_TOKEN_FILE="${TOKENS_BASE_PATH}/router.sops.yaml"
API_BASE_CONFIG_FILE="$SCRIPT_DIR/$BIN_CFGS/sora_api_base.cfg"
MODEL_CONFIG_FILE="$SCRIPT_DIR/$BIN_CFGS/sora_model.cfg"
# Cargar configuraciones
OPENAI_API_BASE=$(load_config "$API_BASE_CONFIG_FILE" "https://openrouter.ai/api/v1" "API base")
AIDER_MODEL=$(load_config "$MODEL_CONFIG_FILE" "deepseek/deepseek-r1-distill-llama-70b:free" "modelo predeterminado")
# Verificar si gum está instalado
if ! command -v gum &> /dev/null; then
echo "Error: gum no está instalado."
echo "Instálelo ejecutando: $BIN_BASE/bootstrap.sh"
exit 1
fi
# Preguntar al usuario por el modo a usar
MODE=$(gum choose "Remoto (OpenRouter)" "Local (Ollama)")
# Función para iniciar y comprobar Ollama
start_ollama() {
# 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..."
"$SCRIPT_DIR/ollama_up.sh"
# Espera hasta 30 segundos para que Ollama se inicie completamente
local wait_time=0
local 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."
return 1
fi
echo "Esperando que Ollama responda... ($wait_time/$max_wait)"
sleep 1
wait_time=$((wait_time + 1))
done
return 0
fi
return 2 # Ya estaba activo
}
# Función para seleccionar modelo de Ollama
select_ollama_model() {
echo "Consultando modelos disponibles en Ollama..."
local models
models=$(curl -s http://127.0.0.1:11434/api/tags | jq -r '.models[].name')
if [ -z "$models" ]; then
echo "Error: No se encontraron modelos en Ollama."
return 1
fi
echo "Seleccione un modelo:"
local selected
selected=$(echo "$models" | gum filter --placeholder="Buscar modelo...")
if [ -z "$selected" ]; then
echo "No se seleccionó ningún modelo."
return 1
fi
echo "$selected"
}
# Función para mostrar valoración de rendimiento
show_performance_rating() {
local level=$1
echo -n "Rendimiento esperado: "
case "$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 ""
}
# Función para ejecutar aider en modo remoto
run_remote_aider() {
echo "Modo: Remoto (OpenRouter)"
echo "Modelo: $AIDER_MODEL"
echo "API Base: $OPENAI_API_BASE"
# Verificar y obtener token de OpenRouter
OPENROUTER_API_KEY=$(check_token "$OPENROUTER_TOKEN_FILE" "OpenRouter")
# Ejecutar aider
OPENAI_API_BASE="$OPENAI_API_BASE" OPENROUTER_API_KEY="$OPENROUTER_API_KEY" AIDER_MODEL="$AIDER_MODEL" aider --no-git --no-show-model-warnings "$@"
}
# Función para ejecutar aider en modo local
run_local_aider() {
echo "Modo: Local (Ollama)"
# Mostrar 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."
# Evaluar hardware y mostrar información
echo ""
echo "Evaluación de hardware:"
# Obtener datos de rendimiento
HARDWARE_INFO=$(evaluate_hardware)
# Extraer líneas individuales
readarray -t hardware_lines <<< "$HARDWARE_INFO"
# Mostrar información de hardware
for ((i=0; i<${#hardware_lines[@]}-1; i++)); do
echo "- ${hardware_lines[i]}"
done
# Mostrar valoración de rendimiento (última línea)
echo ""
show_performance_rating "${hardware_lines[${#hardware_lines[@]}-1]}"
# Confirmar si desea continuar
if ! gum confirm "¿Desea continuar con el modo local?"; then
echo "Operación cancelada por el usuario."
exit 0
fi
# Iniciar Ollama si es necesario
start_ollama
OLLAMA_STARTED=$?
# Verificar que Ollama funcione correctamente
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
# Cargar API base
OLLAMA_CONFIG_FILE="$SCRIPT_DIR/$BIN_CFGS/ollama.local"
OLLAMA_API_BASE=$(cat "$OLLAMA_CONFIG_FILE" 2>/dev/null)
echo "Usando Ollama con API base: $OLLAMA_API_BASE"
# Seleccionar modelo
SELECTED_MODEL=$(select_ollama_model)
if [ -z "$SELECTED_MODEL" ]; then
exit 1
fi
echo "Modelo seleccionado: $SELECTED_MODEL"
# Añadir prefijo
OLLAMA_FULL_MODEL="ollama_chat/$SELECTED_MODEL"
echo "Modelo con prefijo: $OLLAMA_FULL_MODEL"
# Ejecutar aider
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" -eq 0 ]; then
echo "Deteniendo Ollama..."
"$SCRIPT_DIR/ollama_down.sh"
fi
}
# Ejecución principal según el modo seleccionado
if [[ "$MODE" == "Local (Ollama)" ]]; then
run_local_aider "$@"
else
run_remote_aider "$@"
fi

View file

@ -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"

View file

@ -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

View file

@ -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

View file

@ -1,3 +0,0 @@
#!/bin/bash
unalias sora 2>/dev/null
echo "Alias sora deshabilitado"

631
docs/cortana.md Normal file
View file

@ -0,0 +1,631 @@
# Cortana - Asistente de Desarrollo Basado en IA
## Introducción
Cortana es una potente herramienta de asistencia para desarrollo basada en IA que te permite interactuar con un modelo de lenguaje avanzado directamente desde tu terminal. Funciona como una interfaz de línea de comandos (CLI) para Claude, proporcionando capacidades de comprensión y generación de código, resolución de problemas, revisión de código, documentación y más.
Implementada como parte del ecosistema MRDevs Tools, Cortana aprovecha la tecnología de Claude para ofrecer un asistente programable que se integra perfectamente en tu flujo de trabajo de desarrollo.
## Instalación y Configuración
### Requisitos Previos
- MRDevs Tools instalado (ejecutar `bin/bootstrap.sh` previamente)
- Conexión a Internet
- Token de API de Anthropic válido
### Instalación Básica
```bash
# Instalar Cortana CLI
bin/claude_install.sh
# Configurar el token de API (necesario solo una vez)
bin/cortana_token.sh
```
El proceso de instalación descarga la última versión de Claude Code CLI y configura el entorno necesario. El token se encripta mediante SOPS y se almacena de forma segura en `$HOME/.cortana/cortana.sops.yaml`.
### Configuración de Alias
Para facilitar el uso, puedes configurar un alias permanente:
```bash
# Crear alias 'cortana' para el comando 'claude'
bin/cortana_alias.sh
# Habilitar el alias permanentemente
bin/cortana_enable.sh
```
Esto te permitirá usar el comando `cortana` en lugar de `claude` para todas las operaciones.
### Actualización y Desinstalación
```bash
# Actualizar Cortana a la última versión
bin/claude_install.sh --update
# Desinstalar Cortana
bin/claude_install.sh -u
```
## Uso Básico
### Iniciar una Sesión Interactiva
```bash
cortana
```
Esto inicia una sesión interactiva donde puedes conversar con Cortana directamente en la terminal.
### Realizar una Consulta Puntual
```bash
cortana "¿Cómo implementar autenticación JWT en Node.js?"
```
### Trabajar con Archivos y Proyectos
```bash
# Abrir una sesión con acceso a un archivo específico
cortana --file path/to/file.js
# Abrir una sesión en un directorio específico
cortana --dir path/to/project/
# Abrir múltiples archivos
cortana --file file1.js --file file2.js
```
### Lectura de Datos desde STDIN
```bash
cat file.js | cortana "Explica este código"
```
## Comandos y Opciones Avanzadas
### Opciones de Configuración
```bash
# Establecer un modelo específico
cortana --model claude-3-opus-20240229
# Cambiar la temperatura de generación
cortana --temperature 0.7
# Limitar la longitud máxima de respuesta
cortana --max-tokens 4000
```
### Flags Comunes
| Flag | Descripción |
|------|-------------|
| `--model` | Especifica qué modelo de Claude usar |
| `--temperature` | Controla la aleatoriedad (0.0-1.0) |
| `--file` | Incluye un archivo en el contexto |
| `--dir` | Incluye un directorio en el contexto |
| `--max-tokens` | Limita la longitud de respuesta |
| `--help` | Muestra la ayuda del comando |
| `--version` | Muestra la versión instalada |
## Casos de Uso Comunes
### Generación de Código
```bash
# Generar una función basada en una descripción
cortana "Escribe una función en Python que calcule el factorial de un número de forma recursiva"
# Implementar una característica específica
cortana --file app.js "Agrega manejo de errores a esta función"
```
### Revisión y Mejora de Código
```bash
# Revisar código existente
cortana --file script.js "Revisa este código y sugiere mejoras de rendimiento"
# Refactorizar código
cortana --file legacy.py "Refactoriza este código para hacerlo más modular y mantenible"
```
### Depuración
```bash
# Ayuda con errores
cortana --file buggy.js "Este código da el error 'TypeError: Cannot read property'. ¿Puedes identificar el problema?"
# Optimización de rendimiento
cortana --file slow.js "Este código es lento al procesar grandes conjuntos de datos. ¿Cómo puedo optimizarlo?"
```
### Documentación y Explicación
```bash
# Generar documentación para código existente
cortana --file module.js "Genera documentación JSDoc completa para este módulo"
# Explicar código complejo
cortana --file complex_algorithm.py "Explica cómo funciona este algoritmo paso a paso"
```
### Pruebas Unitarias
```bash
# Generar pruebas unitarias
cortana --file utils.js "Genera pruebas unitarias completas para estas funciones utilizando Jest"
```
## Control por Voz (Experimental)
MRDevs Tools incluye soporte experimental para interacción por voz con Cortana:
```bash
# Iniciar modo interactivo por voz
bin/claude_voice.py
# Seleccionar idioma específico
bin/claude_voice.py --language en-us
# Modo continuo (escucha hasta que digas "salir")
bin/claude_voice.py --continuous
```
## Buenas Prácticas
### Optimización de Consumo de Tokens
Para reducir el consumo de tokens y mejorar la eficiencia:
1. **Sé específico en tus consultas**
```bash
# Ineficiente (consume más tokens)
cortana "Ayúdame con JavaScript"
# Eficiente (consume menos tokens)
cortana "Explica cómo implementar debounce en JavaScript"
```
2. **Delimita el alcance de tu consulta**
```bash
cortana "Crea una función de validación para emails. Solo incluye el código, sin explicaciones."
```
3. **Utiliza flags para limitar respuestas**
```bash
cortana --max-tokens 1000 "Resumen conciso de patrones de diseño en Node.js"
```
4. **Aprovecha el contexto compartido**
- En lugar de hacer múltiples consultas independientes, continúa una conversación para aprovechar el contexto compartido.
5. **Selecciona el modelo adecuado**
```bash
# Para tareas simples y rápidas
cortana --model claude-3-haiku-20240307 "Corrige esta sintaxis de JavaScript: fuction test(a, b { retrun a+b }"
# Para tareas más complejas que requieren mayor profundidad
cortana --model claude-3-opus-20240229 "Diseña una arquitectura de microservicios para una aplicación de e-commerce"
```
6. **Reutiliza resultados anteriores**
```bash
# Guardar una respuesta para uso posterior
cortana "Crea un script de backup con rsync" > backup_script.sh
```
7. **Usa parámetros para consultas especializadas**
```bash
# Ajustar temperatura para respuestas más deterministas
cortana --temperature 0.1 "Genera tests unitarios para esta función"
```
### Mejores Prácticas de Uso
1. **Proporciona Contexto Suficiente**
- Incluye archivos relevantes con `--file` o `--dir`
- Explica el entorno de desarrollo y las dependencias
2. **Formula Consultas Claras**
- Usa verbos de acción: "implementa", "analiza", "optimiza", "refactoriza"
- Especifica el formato de salida deseado
3. **Trabajo con Proyectos**
- Usa `--dir` para incluir todo el contexto del proyecto
- Menciona versiones específicas de frameworks/librerías
4. **Seguridad y Datos Sensibles**
- No compartas credenciales o tokens en las consultas
- Revisa el código generado antes de ejecutarlo
5. **Organización del Trabajo**
- Divide problemas complejos en consultas más pequeñas
- Usa scripts específicos para tareas recurrentes
## Scripts de Utilidad
MRDevs Tools incluye varios scripts para facilitar el uso de Cortana:
```bash
# Activar el alias 'cortana' permanentemente
bin/cortana_enable.sh
# Desactivar temporalmente el alias
bin/cortana_disable.sh
# Gestionar el token de forma segura
bin/cortana_token.sh
# Control por voz
bin/claude_voice.py
```
## Integración con el Flujo de Trabajo
### Integración con Git
```bash
# Revisar cambios antes de commit
git diff | cortana "Revisa estos cambios y sugiere mejoras"
# Analizar un Pull Request
git show | cortana "Analiza este PR y proporciona feedback"
```
### Integración con Editores
**VS Code**
Puedes configurar un atajo de teclado para enviar el texto seleccionado a Cortana:
```json
{
"key": "ctrl+alt+c",
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "cat ${relativeFile} | cortana \"Explica este código\"\n"
}
}
```
### Automatización de Tareas
Puedes crear scripts personalizados que usen Cortana para tareas específicas:
```bash
#!/bin/bash
# Script para generar tests unitarios
if [ -z "$1" ]; then
echo "Uso: $0 <archivo.js>"
exit 1
fi
file=$1
test_file=$(echo $file | sed 's/\.js$/.test.js/')
cortana --file "$file" "Genera tests unitarios exhaustivos para este archivo usando Jest. Incluye mocks necesarios y pruebas para casos de error." > "$test_file"
echo "Tests generados en $test_file"
```
## Solución de Problemas
### Problemas Comunes
| Problema | Solución |
|----------|----------|
| "Error de autenticación" | Ejecuta `bin/cortana_token.sh` para actualizar tu token |
| Respuestas truncadas | Usa `--max-tokens` con un valor más alto |
| Respuestas incorrectas/irrelevantes | Proporciona más contexto y sé más específico en tu consulta |
| "No se pudo conectar al servidor" | Verifica tu conexión a Internet |
### Verificación de Estado
```bash
# Verificar que Cortana está instalada correctamente
which cortana
# Verificar la versión instalada
cortana --version
# Comprobar la configuración del token (requiere SOPS configurado)
sops --decrypt $HOME/.cortana/cortana.sops.yaml
```
## Ejemplos Prácticos
### Análisis de Rendimiento de Aplicación
```bash
cortana --dir ./my-app "Analiza este código React y sugiere optimizaciones de rendimiento. Enfócate en componentes que pueden causar rerenderizados innecesarios y cómo implementar memoización."
```
### Creación de una API RESTful
```bash
cortana "Diseña una API RESTful completa para gestionar una biblioteca con usuarios, libros y préstamos. Incluye endpoints, estructura de datos, manejo de errores y documentación OpenAPI. Organiza la respuesta en archivos separados que pueda implementar directamente."
```
### Migración de Código Legacy
```bash
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."
```
## 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.
### Funcionalidades Básicas
#### Estructura Fundamental
Un archivo `CLAUDE.md` básico tiene la siguiente estructura:
```markdown
# Instrucciones para Cortana
## Contexto del Proyecto
Este es un proyecto de [tipo de proyecto] que utiliza [tecnologías principales].
## Directrices
- Seguir el estilo de código establecido
- Documentar todas las funciones nuevas
- Mantener compatibilidad con [versión específica]
```
#### Información del Proyecto
Puedes incluir información esencial sobre el proyecto que Cortana debe conocer:
```markdown
## Información del Proyecto
- **Nombre**: MyAwesomeProject
- **Tecnologías**: React, TypeScript, Express
- **Versión**: 2.3.4
- **Patrones de Diseño**: MVVM, Factory, Singleton
```
#### Convenciones de Código
Define las convenciones de código específicas del proyecto:
```markdown
## Convenciones de Código
- Usar camelCase para variables y funciones
- Usar PascalCase para clases y componentes
- Incluir tipos explícitos en TypeScript
- Limitar líneas a 80 caracteres
- Usar async/await en lugar de Promises.then()
```
### Funcionalidades Avanzadas
#### Reglas de Generación de Código
Puedes especificar reglas detalladas para la generación de código:
```markdown
## Reglas para Generación de Código
### React Components
- Usar componentes funcionales con hooks
- Implementar prop-types o TypeScript interfaces
- Seguir patrón de presentación/contenedor
### Tests
- Crear tests unitarios con Jest
- Nombrar archivos de test como `*.test.ts`
- Implementar al menos un test por función pública
```
#### Variables y Constantes de Proyecto
Define variables o constantes específicas del proyecto:
```markdown
## Variables de Proyecto
- BASE_API_URL=https://api.example.com/v2
- MAX_RETRIES=3
- LOG_LEVEL=debug
- FEATURE_FLAGS={ "newUI": true, "analytics": false }
```
#### Comandos Personalizados
Configura comandos personalizados para tareas comunes:
```markdown
## Comandos
- build: npm run build
- test: npm test
- lint: eslint src/**/*.js
- deploy: ./scripts/deploy.sh
```
### Parametrización Avanzada
#### Control de Modo de Interacción
Puedes controlar cómo debe comportarse Cortana en diferentes situaciones:
```markdown
## Configuración de Interacción
- mode: expert # Activa el modo experto con respuestas técnicas detalladas
- verbosity: concise # Respuestas concisas (opciones: verbose, concise, minimal)
- think-aloud: true # Muestra el proceso de razonamiento
- code-focus: true # Prioriza la generación de código sobre explicaciones
```
#### Configuración de Modelos y Parámetros
Define configuraciones específicas para los modelos utilizados:
```markdown
## Configuración de Modelo
- default-model: claude-3-opus-20240229
- fallback-model: claude-3-sonnet-20240229
- temperature: 0.3 # Para respuestas más deterministas
- top-p: 0.95 # Control sobre diversidad de tokens
- max-tokens-per-response: 4000
```
#### Plantillas de Respuesta
Configura plantillas para tipos específicos de respuestas:
```markdown
## Plantillas de Respuesta
### Plantilla de Documentación
```js
/**
* @function $NAME
* @description $DESCRIPTION
* @param {$PARAM_TYPE} $PARAM_NAME - $PARAM_DESCRIPTION
* @returns {$RETURN_TYPE} $RETURN_DESCRIPTION
* @example
* $EXAMPLE_CODE
*/
```
### Plantilla de Commit
```
$TYPE($SCOPE): $SHORT_DESCRIPTION
$DETAILED_DESCRIPTION
Issue: #$ISSUE_NUMBER
```
```
#### Integración con Herramientas
Especifica cómo integrar Cortana con otras herramientas del proyecto:
```markdown
## Integraciones
- git: true # Acceso al historial Git
- npm: true # Acceso a comandos npm
- linters: ["eslint", "prettier"]
- ci: ["github-actions"]
- package-manager: "yarn"
```
#### Matriz de Decisiones
Define matrices de decisión para guiar las recomendaciones:
```markdown
## Matrices de Decisión
### Selección de Biblioteca Estado
| Caso de Uso | Recomendación |
|-------------|---------------|
| App pequeña | useState/useReducer |
| App mediana | Context API |
| App compleja | Redux Toolkit |
| App con muchos estados asíncronos | React Query + Context |
### Estrategia de Estilo
| Escenario | Recomendación |
|-----------|---------------|
| Componentes simples | CSS Modules |
| Componentes complejos | Styled Components |
| Design System | Chakra UI o MUI |
```
### Implementación y Casos de Uso
#### Implementación por Proyecto
Puedes tener diferentes archivos `CLAUDE.md` para diferentes proyectos:
```bash
~/
├── proyecto-react/
│ └── CLAUDE.md # Configuración específica para React
├── proyecto-python/
│ └── CLAUDE.md # Configuración específica para Python
```
#### Implementación para Equipos
Para equipos de desarrollo, puedes estandarizar el archivo `CLAUDE.md` para mantener consistencia:
```bash
# Crear un CLAUDE.md estándar para el equipo
cat > template-CLAUDE.md << EOF
# Instrucciones para Cortana
...
EOF
# Instalarlo en un nuevo proyecto
cp template-CLAUDE.md ~/nuevo-proyecto/CLAUDE.md
```
#### Casos de Uso Especializados
**Para Desarrollo de Microservicios:**
```markdown
## Contexto: Microservicios
- Servicio actual: inventory-service
- Protocolos: gRPC interno, REST externo
- Debe mantener API contratos en ./proto/
- Registro de servicios: Consul
- Comunicación asíncrona: Kafka
```
**Para Ciencia de Datos:**
```markdown
## Contexto: Análisis de Datos
- Formato de datos: principalmente DataFrames pandas
- Visualización preferida: Seaborn, Plotly
- Métricas a reportar: precisión, recall, F1
- Conjuntos de datos en: ./data/processed/
- Notebooks en: ./notebooks/
```
### Consejos para un CLAUDE.md Efectivo
1. **Mantén la especificidad**: Cuanto más específicas sean tus instrucciones, mejores serán los resultados.
2. **Estructura con claridad**: Usa encabezados y listas para organizar la información.
3. **Evoluciona gradualmente**: Actualiza el archivo a medida que el proyecto evoluciona.
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/)
- [Guía de Prompt Engineering](https://docs.anthropic.com/claude/docs/introduction-to-prompt-design)
- [Buenas Prácticas de Desarrollo con IA](https://docs.anthropic.com/claude/docs/building-with-claude)
---
Creado por Cortana Rosero One para MRDevs Tools.
Última actualización: 2025/04/07

187
docs/glow.md Normal file
View file

@ -0,0 +1,187 @@
# Glow - Renderizador de Markdown para Terminal
## Introducción
[Glow](https://github.com/charmbracelet/glow) es un potente renderizador de Markdown para terminal desarrollado por [Charm](https://charm.sh/). Esta herramienta permite visualizar y trabajar con documentos Markdown directamente en la línea de comandos, con soporte para temas, paginación y otras características avanzadas.
## Instalación
En MRDevs Tools, Glow se instala automáticamente como parte del proceso de bootstrap:
```bash
# Instalación de todas las herramientas base (incluye Glow)
bin/bootstrap.sh
```
También puedes actualizarlo con:
```bash
# Actualización del entorno (incluye Glow)
bin/update.sh
```
## Características Principales
- **Renderizado de alta calidad**: Visualiza documentos Markdown con estilos y formato consistentes
- **Soporte para temas**: Incluye temas claro, oscuro y personalizados
- **Modo paginado**: Facilita la lectura de documentos extensos
- **Vista local y remota**: Capacidad para mostrar archivos locales o desde repositorios remotos
- **Navegación mejorada**: Controles intuitivos para navegar entre secciones
## Uso Básico
### Visualizar un Archivo Markdown
Para visualizar un archivo Markdown local:
```bash
glow README.md
```
### Modo Paginado para Archivos Largos
```bash
glow -p LICENSE.md
```
### Seleccionar un Tema
```bash
# Tema oscuro
glow -s dark README.md
# Tema claro
glow -s light README.md
```
### Ajustar el Ancho del Contenido
```bash
# Establecer un ancho personalizado (en caracteres)
glow -w 100 README.md
```
## Comandos Avanzados
### Leer un Archivo Markdown Remoto
```bash
# Desde un repositorio GitHub
glow https://github.com/charmbracelet/glow/blob/master/README.md
# Desde una URL directa
glow https://raw.githubusercontent.com/charmbracelet/glow/master/README.md
```
### Usar Glow en Modo Explorador
El modo explorador te permite navegar por todos los archivos Markdown en un directorio:
```bash
glow -l
```
### Personalizar Estilos
```bash
# Ajustar el estilo de los encabezados
glow -s dark --header-fg "#FF5F87" README.md
# Ajustar el color de fondo
glow -s dark --background "#111111" README.md
```
## Integración con MRDevs Tools
MRDevs Tools aprovecha Glow en diversos componentes:
1. **Documentación del Proyecto**: Glow es la herramienta recomendada para consultar la documentación del proyecto
2. **Visualización de README**: Facilita la lectura de archivos README de proyectos creados con `project_new.sh`
3. **Información de Ayuda**: Los scripts internos pueden mostrar información de ayuda en formato Markdown
### Ejemplo de Script que Integra Glow
```bash
#!/bin/bash
# Ejemplo de integración de Glow en un script
# Detectar si Glow está disponible
if command -v glow >/dev/null 2>&1; then
RENDER_CMD="glow -"
else
# Fallback si Glow no está disponible
RENDER_CMD="cat"
fi
# Generar documentación en formato Markdown
cat << EOF | $RENDER_CMD
# Título del Documento
## Secciones
- Sección 1
- Sección 2
## Código de Ejemplo
\`\`\`bash
echo "Hola Mundo"
\`\`\`
EOF
```
## Configuración Personalizada
Puedes configurar Glow mediante un archivo de configuración:
```bash
# Crear una configuración inicial
mkdir -p ~/.config/glow
cat > ~/.config/glow/glow.yml << EOF
# Configuración de Glow
style: dark
pager: true
width: 80
EOF
```
## Consejos y Trucos
1. **Combinar con Gum**: Utiliza Glow junto con [Gum](gum.md) para crear interfaces TUI completas
```bash
glow README.md | gum pager
```
2. **Vista rápida de archivos**: Establece un alias para previsualizar rápidamente archivos Markdown
```bash
alias mdview='glow -p'
```
3. **Exportar a HTML**: Puedes convertir Markdown a HTML para otros usos
```bash
glow -f html README.md > readme.html
```
## Resolución de Problemas
### Problemas con Colores
Si los colores no se muestran correctamente, asegúrate de que tu terminal soporte 256 colores o true color:
```bash
export TERM=xterm-256color
```
### Problemas de Paginación
Si experimentas problemas con el paginador:
```bash
# Usar un paginador alternativo
PAGER=less glow -p README.md
```
## Recursos Adicionales
- [Documentación oficial de Glow](https://github.com/charmbracelet/glow)
- [Charm.sh](https://charm.sh/) - Sitio oficial del desarrollador
- [Markdown Guide](https://www.markdownguide.org/) - Guía completa de Markdown
---
Creado por Cortana Rosero One para MRDevs Tools.
Última actualización: 2025/04/07

View file

@ -6,8 +6,6 @@ El script `sops_rules.sh` es una herramienta fundamental en MRDevs Tools que con
La ejecución de `sops_rules.sh` es un paso **obligatorio** durante la instalación de MRDevs Tools, ya que establece la base para la gestión segura de secretos en todo el sistema.
![Proceso de configuración SOPS Rules](img/sops-rules-flow.png)
## Objetivo y Funcionamiento
El objetivo principal de `sops_rules.sh` es simplificar la configuración de SOPS mediante una interfaz interactiva que:
@ -50,8 +48,6 @@ El script sigue estos pasos:
3. **Selección de clave**: Muestra una lista interactiva de las claves disponibles con sus fingerprints y nombres de usuario.
![Selección de clave GPG](img/sops-rules-selection.png)
4. **Validación**: Verifica que la clave seleccionada es válida (longitud correcta, formato hexadecimal, presente en el keyring).
5. **Confirmación**: Muestra un resumen de la clave seleccionada y solicita confirmación antes de continuar.

578
docs/sora.md Normal file
View file

@ -0,0 +1,578 @@
# Sora - Asistente de Desarrollo Colaborativo
## Introducción
Sora es un potente asistente de desarrollo basado en IA que te permite colaborar con modelos de lenguaje de última generación directamente desde tu terminal. Está diseñado para trabajar con repositorios Git y modificar código en respuesta a tus instrucciones en lenguaje natural, proporcionando una experiencia de pair programming con un asistente de IA.
Implementada como parte del ecosistema MRDevs Tools, Sora facilita la codificación asistida por IA, permitiéndote iniciar, desarrollar y mejorar proyectos de software mediante conversaciones naturales con la IA.
## Instalación y Configuración
### Requisitos Previos
- MRDevs Tools instalado (ejecutar `bin/bootstrap.sh` previamente)
- Git instalado y configurado
- Python 3.8+ instalado
- Token de API válido de un proveedor compatible (OpenAI, Anthropic, etc.)
- Repositorio Git inicializado para tu proyecto
### Instalación Básica
```bash
# Instalar Sora
bin/sora_install.sh
```
El proceso de instalación configura automáticamente todo lo necesario. Si necesitas configurar manualmente un token de API para algún proveedor compatible:
```bash
# Configurar token de API (selecciona el proveedor deseado)
bin/ai_token.sh
```
### Actualización y Desinstalación
```bash
# Actualizar Sora a la última versión
bin/sora_install.sh --update
# Desinstalar Sora completamente
bin/sora_install.sh -u
```
## Uso Básico
### Iniciar una Sesión con tu Repositorio
Para comenzar a trabajar con Sora en un repositorio existente:
```bash
# Navegar al directorio del repositorio
cd /ruta/a/tu/proyecto
# Iniciar Sora
bin/sora.sh
```
También puedes especificar archivos específicos para trabajar:
```bash
# Iniciar Sora con archivos específicos
bin/sora.sh archivo1.py archivo2.js
# Iniciar Sora con un patrón glob
bin/sora.sh "src/*.py"
```
### Interacción Básica
Una vez iniciada la sesión, puedes dar instrucciones en lenguaje natural:
```
> Crea una función que calcule el factorial de un número recursivamente
```
Sora analizará tu solicitud, generará el código correspondiente y realizará los cambios directamente en tus archivos, mostrándote los cambios realizados en la terminal.
### Comandos Dentro de la Sesión
Dentro de una sesión de Sora, puedes usar comandos especiales precedidos por `/`:
```
> /help # Muestra la ayuda con todos los comandos disponibles
> /add archivo.py # Añade un archivo al contexto de la sesión
> /drop archivo.py # Quita un archivo del contexto
> /ls # Lista los archivos en el contexto actual
> /diff # Muestra los cambios realizados por Sora
> /run script.py # Ejecuta un script
> /commit "mensaje" # Crea un commit con los cambios actuales
> /exit # Finaliza la sesión
```
## Funcionalidades Avanzadas
### Modo de Edición de Archivos
Sora puede trabajar con archivos de diferentes formas:
```bash
# Editar archivos existentes
bin/sora.sh --edit archivo.py
# Crear nuevos archivos
bin/sora.sh --new "Crea un archivo HTML con un formulario básico"
# Modo sólo lectura (no modifica archivos automáticamente)
bin/sora.sh --no-auto-commits archivo.py
```
### Selección de Entorno y Modelos
Sora permite escoger entre distintos entornos de ejecución:
```bash
# Al iniciar sora.sh, se te presentará un selector:
bin/sora.sh
# Opciones disponibles:
# 1. Remoto (OpenRouter) - Usa modelos en la nube
# 2. Local (Ollama) - Usa modelos instalados localmente
```
En modo local, Sora evaluará el rendimiento de tu hardware y te mostrará qué tan bien podrá ejecutar los modelos locales.
### Comunicación con LLM por Voz
```bash
# Activar entrada por voz (experimental)
bin/sora.sh --voice
# Especificar idioma para reconocimiento de voz
bin/sora.sh --voice --language es-ES
```
### Personalización del Comportamiento
```bash
# Controlar verbose del LLM
bin/sora.sh --verbose # Muestra proceso de pensamiento detallado
bin/sora.sh --concise # Respuestas breves y directas
# Modificar la creatividad de las respuestas
bin/sora.sh --temperature 0.7 # Más creativo (0.0-1.0)
bin/sora.sh --temperature 0.2 # Más determinista
```
## Flujos de Trabajo Comunes
### Desarrollo de Nuevas Características
```bash
# Iniciar Sora con los archivos relevantes
cd mi-proyecto
sora src/componente.js src/utils.js
# En la sesión de Sora
> Implementa una función de paginación para la tabla de usuarios que muestre 10 elementos por página
```
### Refactorización de Código
```bash
# Iniciar con archivos que necesitan refactorización
sora código_legacy.py
# En la sesión
> Refactoriza este código para usar clases en lugar de funciones. Mantén la misma funcionalidad pero mejora la estructura.
```
### Depuración y Corrección de Errores
```bash
# Iniciar con el archivo que tiene errores
sora archivo_con_bug.js
# En la sesión
> Este código arroja un TypeError cuando intento acceder a user.settings. Identifica y corrige el problema.
```
### Generación de Tests
```bash
# Iniciar con el archivo a testear
sora src/utils.js
# En la sesión
> Genera tests unitarios completos para estas funciones usando Jest.
```
## Técnicas Avanzadas
### Proyectos Multiarchivo
Para trabajar con proyectos complejos que involucran múltiples archivos:
```bash
# Iniciar con múltiples archivos relevantes
sora src/api.js src/models.js src/controllers.js
# En la sesión
> Implementa un endpoint REST para gestionar usuarios que use los modelos y controladores existentes
```
### Integración con Git
Sora se integra perfectamente con Git para gestionar cambios:
```bash
# Dentro de la sesión de Sora
> /diff # Ver cambios actuales
> /commit "Mensaje" # Hacer commit de los cambios
> /git status # Ver estado de Git
> /git checkout -b feature-branch # Crear y cambiar a nueva rama
```
### Manejo de Dependencias y Bibliotecas
```bash
# En la sesión
> Añade la biblioteca axios al proyecto y crea una función para obtener datos de una API REST
```
Sora puede sugerir modificaciones al package.json y crear el código que utiliza la nueva dependencia.
### Generación de Documentación
```bash
# En la sesión
> Genera documentación completa en formato JSDoc para todas las funciones en este archivo
```
## Recomendaciones y Buenas Prácticas
### Optimización de Prompts
Para obtener los mejores resultados con Sora:
1. **Sé específico en tus instrucciones**
```
# Poco específico
> Mejora este código
# Muy específico
> Refactoriza este método para usar async/await en lugar de callbacks y añade manejo de errores
```
2. **Proporciona contexto suficiente**
```
> Este componente es parte de un dashboard que muestra estadísticas en tiempo real. Necesito añadir una funcionalidad de filtrado por fecha.
```
3. **Divide problemas complejos**
```
> Primero, creemos la estructura de datos para almacenar los usuarios.
> Ahora, implementemos las funciones de validación.
> Por último, añadamos la lógica para guardar en la base de datos.
```
### Reducción de Consumo de Tokens
Para optimizar el uso de tokens y reducir costos:
1. **Limita el número de archivos en contexto**
```bash
# Preferible
sora archivo-específico.js
# Evitar si no es necesario
sora *.js
```
2. **Excluye archivos innecesarios**
```bash
sora --exclude node_modules,dist,build
```
3. **Usa el modelo adecuado según la complejidad**
```bash
# Para tareas simples
sora --model gpt-3.5-turbo archivo.js
# Para tareas complejas
sora --model gpt-4 archivo.js
```
4. **Aprovecha el historial de contexto**
Continúa la misma sesión para tareas relacionadas en lugar de iniciar nuevas sesiones.
### Seguridad y Mejores Prácticas
1. **Revisa siempre los cambios propuestos**
Usa `/diff` antes de aceptar cambios para verificar que Sora no haya introducido problemas.
2. **No incluyas secretos o credenciales**
Evita incluir archivos con tokens, claves API o contraseñas en las sesiones.
3. **Usa ramas de Git separadas**
```bash
git checkout -b sora-experiment
sora archivo.js
# Después de revisar los cambios
git checkout main
git merge sora-experiment
```
4. **Mantén respaldos**
Asegúrate de tener commits recientes antes de iniciar sesiones extensas.
## Casos de Uso Prácticos
### Caso 1: Implementación de un Sistema de Autenticación
```bash
# Iniciar Sora con los archivos relevantes
sora server.js auth.js user-model.js
# En la sesión
> Implementa un sistema completo de autenticación con JWT que incluya:
> 1. Registro de usuarios
> 2. Login con validación de credenciales
> 3. Middleware para rutas protegidas
> 4. Gestión de tokens (creación, verificación y renovación)
```
### Caso 2: Migración de Tecnología
```bash
# Iniciar con archivos a migrar
sora componente-clase.jsx
# En la sesión
> Convierte este componente basado en clases de React a un componente funcional con hooks. Mantén exactamente la misma funcionalidad.
```
### Caso 3: Optimización de Rendimiento
```bash
# Iniciar con código a optimizar
sora algoritmo-lento.py
# En la sesión
> Este algoritmo de ordenamiento tiene complejidad O(n²). Optimízalo para mejorar su rendimiento manteniendo la misma funcionalidad.
```
### Caso 4: Desarrollo Guiado por Tests (TDD)
```bash
# Iniciar con archivo de pruebas
sora test-funcionalidad.js
# En la sesión
> Estos son tests para una API de gestión de tareas. Implementa el código que haga pasar estos tests.
```
## Solución de Problemas Comunes
### Problemas de Conexión con la API
**Problema**: Error de autenticación o conexión
**Solución**:
```bash
# Verificar token configurado
bin/ai_token.sh
# Comprobar conexión a internet
ping api.openai.com
```
### Sora No Reconoce Correctamente la Intención
**Problema**: Sora genera código que no corresponde con lo solicitado
**Solución**:
1. Reinicia la instrucción con más detalles
2. Divide la tarea en pasos más pequeños
3. Prueba con otro modelo:
```bash
sora --model gpt-4-turbo archivo.js
```
### Errores al Modificar Archivos
**Problema**: Sora no puede modificar archivos correctamente
**Solución**:
```bash
# Verificar permisos
ls -la archivo.js
# Usar modo sin auto-commits
sora --no-auto-commits archivo.js
# Después, aplicar cambios manualmente
> /diff
# Copiar los cambios y aplicarlos manualmente
```
### Conflictos de Merge en Git
**Problema**: Conflictos al integrar cambios de Sora
**Solución**:
```bash
# En la sesión de Sora
> /git stash
> /git pull
> /git stash pop
# Resolver conflictos manualmente
> /git add .
> /git commit -m "Resueltos conflictos con cambios de Sora"
```
## Personalización Avanzada
### Archivo de Configuración
Puedes crear un archivo `.aiderrc` o `.sorarc` en tu directorio home o proyecto para personalizar el comportamiento:
```ini
# ~/.sorarc
model = gpt-4
auto_commits = False
editor = vim
map_tokens = 4096
temperature = 0.2
```
### Variables de Entorno
Configura el comportamiento mediante variables de entorno:
```bash
# Añadir a tu .bashrc o .zshrc
export SORA_MODEL="gpt-4"
export SORA_VERBOSE=1
export SORA_EDITOR="code -w"
```
### Atajos de Teclado Personalizados
Configura atajos para operaciones comunes:
```bash
# Añadir a tu .bashrc o .zshrc
alias sora-web="sora --model gpt-4 --include '*.html,*.css,*.js'"
alias sora-py="sora --model gpt-4 --include '*.py'"
alias sora-debug="sora --no-auto-commits --verbose"
```
## Integración con el Ecosistema de Desarrollo
### Integración con Editores
**VSCode**:
```bash
# Usar VSCode para editar diff
export SORA_EDITOR="code --wait"
```
**NeoVim/Vim**:
```bash
# Usar Vim para editar diff
export SORA_EDITOR="nvim"
```
### Integración con Herramientas de CI/CD
```bash
# Archivo .github/workflows/sora-lint.yml
name: Sora Code Review
on: [pull_request]
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Install Sora
run: pip install aider-chat
- name: Code Review
run: sora --no-auto-commits --model gpt-4 --prompt "Revisa este PR y proporciona feedback sobre posibles bugs y mejoras" $(git diff --name-only origin/main)
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
```
### Flujos de Trabajo con Otras Herramientas
**Combinación con Cortana**:
```bash
# Generar esquema con Cortana
cortana "Diseña una arquitectura de microservicios para un sistema de reservas" > arquitectura.md
# Implementar con Sora
sora arquitectura.md
> Implementa el servicio de autenticación descrito en este documento
```
## Modos de Ejecución
Sora ofrece dos modos principales de ejecución, cada uno con sus propias ventajas:
### Modo Remoto (OpenRouter)
El modo remoto utiliza OpenRouter para acceder a diversos modelos de IA en la nube:
- **Ventajas**: Acceso a modelos de alta capacidad, no requiere hardware potente local.
- **Desventajas**: Requiere conexión a internet, envía datos a servicios externos.
- **Uso recomendado**: Desarrollo general, tareas complejas, proyectos grandes.
### Modo Local (Ollama)
El modo local ejecuta modelos en tu propia máquina utilizando Ollama:
- **Ventajas**: Privacidad total, funciona sin internet, control completo.
- **Desventajas**: Requiere hardware potente, modelos más limitados.
- **Uso recomendado**: Código sensible, entornos restringidos, trabajo offline.
## Comparación de Modelos de IA
Sora es compatible con diversos modelos de IA, cada uno con sus fortalezas particulares:
| Modelo | Fortalezas | Casos de Uso |
|--------|------------|--------------|
| GPT-3.5 | Rápido, económico | Tareas simples, pruebas rápidas |
| GPT-4 | Comprensión profunda, mejor con código | Desarrollo complejo, debugging |
| Claude 3 | Excelente razonamiento, contexto largo | Proyectos grandes, documentación |
| Llama 2 / 3 | Ejecución local, privacidad | Código sensible, entornos offline |
## Extensiones y Plugins
Sora puede extenderse con plugins personalizados:
```bash
# Plugin para análisis estático
bin/sora.sh --plugin static-analysis
# Plugin para benchmarking
bin/sora.sh --plugin benchmark
```
## Características Adicionales
### Evaluación de Hardware
En modo local, Sora realiza un diagnóstico completo del hardware disponible:
- **Análisis de CPU**: Verifica el número de núcleos disponibles
- **Evaluación de RAM**: Comprueba la memoria total y disponible
- **Detección de GPU**: Identifica tarjetas gráficas NVIDIA compatibles
- **Clasificación de Rendimiento**: Desde "Muy Malo" hasta "Excelente"
### Interacción con Ollama
Sora gestiona automáticamente Ollama:
- **Arranque Automático**: Inicia Ollama cuando es necesario
- **Monitoreo de Estado**: Verifica que Ollama esté respondiendo correctamente
- **Selección Interactiva**: Permite elegir entre los modelos disponibles
- **Apagado Automático**: Detiene Ollama al finalizar si lo inició Sora
## Créditos y Reconocimientos
Sora está basado en Aider, una potente herramienta de pair programming con IA. Todas las capacidades de análisis y generación de código son proporcionadas por Aider, mientras que la integración en el ecosistema MRDevs Tools ha sido implementada por el equipo de MRDevs Tools para proporcionar una experiencia fluida y personalizada.
## Recursos Adicionales
- [Documentación Oficial de Aider](https://aider.chat/docs/)
- [Comunidad y Soporte](https://github.com/paul-gauthier/aider/discussions)
- [Guía de Prompt Engineering para Codificación](https://github.com/paul-gauthier/aider/blob/main/docs/prompting.md)
- [Ejemplos Avanzados de Uso](https://aider.chat/docs/examples.html)
---
Creado por Sora Rosero One para MRDevs Tools.
Última actualización: 2025/04/07

559
docs/uso.md Normal file
View file

@ -0,0 +1,559 @@
# Guía de Uso de MRDevs Tools
## 🚀 Inicio Rápido
### Requisitos Previos
- Git instalado en su sistema
- Permisos de administrador (para algunas operaciones)
- Conexión a Internet
### Instalación
```bash
# Clonar el repositorio
cd $HOME
git clone https://git.rosero.one/mrosero/devs.git
# Instalar herramientas básicas
cd $HOME/devs
bin/bootstrap.sh
# Configurar SOPS para encriptación GPG (obligatorio)
bin/sops_rules.sh
# Actualizar el entorno (opcional)
bin/update.sh
```
> **IMPORTANTE**: La configuración del arcivo de reglas de sops .sops.yaml es un paso obligatorio antes de poder utilizar la plataforma. bin/sops_rules.sh crea el archivo base de configguración sops para el proyecto. Las claves GPG del desarrollador principal debe existir en el repositorio de claves.
### Estructura de Directorios
MRDevs Tools utiliza una estructura organizada que separa el código (en ~/devs) y la configuración (en directorios ocultos):
#### Código y scripts
- `~/devs/bin/`: Scripts ejecutables y herramientas principales
- `lib/`: Bibliotecas compartidas de funciones
- `msg/`: Archivos de mensajes multilingües
- `config/`: Configuración del sistema
#### Configuración y datos
- `~/.sounds/`: Archivos de audio para notificaciones y alertas
- `~/.ollama/`: Configuración, modelos y datos para Ollama AI
- `~/.vosk/`: Modelos para reconocimiento de voz local
- `~/.cortana/`: Configuración y tokens para Claude Code
- `~/.developer/`: Tokens y configuraciones para herramientas de desarrollo
- `~/.cache/devs/`: Caché de descargas y datos temporales
## 🔧 Funcionalidades Principales
### Gestión del Entorno de Desarrollo
| Comando | Descripción |
|---------|-------------|
| `bin/bootstrap.sh` | Instala herramientas básicas (incluyendo oathtool, zbar, redis-cli, gum y glow) y configura la gestión de contenedores |
| `bin/sops_rules.sh` | Configura SOPS con clave GPG para encriptación segura de secretos (paso obligatorio tras la instalación) |
| `bin/update.sh` | Actualiza el entorno de desarrollo y herramientas (incluyendo oathtool, zbar, redis-cli, gum y glow) |
| `bin/npm_install.sh` | Instala NodeJS y npm de forma interactiva |
| `bin/project_new.sh` | Crea un nuevo proyecto con estructura estandarizada según el tipo seleccionado |
### Herramientas de CLI Modernas
MRDevs Tools integra herramientas modernas de Charm para mejorar la experiencia en la línea de comandos:
| Herramienta | Descripción |
|---------|-------------|
| [Gum](https://github.com/charmbracelet/gum) | Toolkit para interfaces TUI elegantes y funcionales |
| [Glow](https://github.com/charmbracelet/glow) | Renderizador de Markdown para terminal con soporte para temas y paginación |
#### Interfaces de Usuario con Gum
| Comando/Documento | Descripción |
|---------|-------------|
| `docs/gum.md` | Tutorial completo para crear formularios interactivos con Gum |
| `gum style` | Da formato al texto (color, negrita, etc.) |
| `gum input` | Campo de entrada para texto |
| `gum choose` | Menú de selección de opciones |
| `gum confirm` | Diálogo de confirmación (Sí/No) |
### Herramientas de IA y Productividad
| Comando | Descripción |
|---------|-------------|
| `bin/claude_install.sh` | Instala Claude Code CLI |
| `bin/claude_install.sh -u` | Desinstala Claude Code CLI |
| `bin/cortana_token.sh` | Gestiona la encriptación del token de Claude Code vía SOPS |
| `bin/jarvis_token.sh` | Gestiona la encriptación del token de Jarvis vía SOPS |
| `bin/cortana_alias.sh` | Configura alias 'cortana' para Claude Code |
| `bin/cortana_unalias.sh` | Elimina el alias 'cortana' |
| `bin/cortana_enable.sh` | Activa el alias 'cortana' permanentemente |
| `bin/cortana_disable.sh` | Desactiva temporalmente el alias 'cortana' |
| `bin/aider_install.sh` | Instala Aider CLI (asistente de código IA) |
| `bin/aider_install.sh -u` | Desinstala Aider CLI |
| `bin/sora_enable.sh` | Activa el alias 'sora' para Aider permanentemente |
| `bin/sora_disable.sh` | Desactiva el alias 'sora' para Aider |
| `bin/ai_token.sh` | Gestiona tokens de múltiples proveedores de IA vía SOPS |
| `bin/ollama_up.sh` | Inicia el servicio Ollama (IA local) con podman-compose. Crea y configura `~/.ollama/` |
| `bin/ollama_down.sh` | Detiene el servicio Ollama (IA local) |
| `bin/ollama.sh` | Cliente para interactuar con Ollama (auto-inicia el servicio si es necesario) |
| `bin/nodered.sh` | Administra Node-RED con soporte para ejecución, monitoreo y gestión completa del servicio |
### Herramientas para Editores de Código
| Comando | Descripción |
|---------|-------------|
| `bin/helix_install.sh` | Instala Helix Editor con soporte multiplataforma (apt, snap, pacman, etc.) |
| `bin/helix_install.sh -u` | Desinstala Helix Editor del sistema |
| `bin/vscode_install.sh` | Instala Visual Studio Code con detección automática del SO y sus métodos de instalación |
| `bin/vscode_install.sh -u` | Desinstala Visual Studio Code del sistema |
| `bin/zettlr_install.sh` | Instala Zettlr Markdown Editor con detección automática del SO |
| `bin/zettlr_install.sh -u` | Desinstala Zettlr Markdown Editor del sistema |
### Herramientas para Control de Versiones
| Comando | Descripción |
|---------|-------------|
| `bin/backlog.sh <commit_id>` | Revierte el repositorio o archivos específicos al estado de un commit concreto |
| `bin/ghadmin_install.sh` | Instala GitHub CLI (gh) con soporte multiplataforma |
| `bin/gladmin_install.sh` | Instala GitLab CLI (glab) con múltiples métodos de instalación |
| `bin/fjadmin_install.sh` | Instala Forgejo CLI (berg) para administración de Forgejo/Codeberg |
| `source bin/forgejo_login.sh` | Inicia/cierra sesión en Forgejo usando tokens encriptados con SOPS |
| `source bin/github_login.sh` | Inicia/cierra sesión en GitHub usando tokens encriptados con SOPS |
| `bin/cversion_token.sh` | Gestiona tokens de acceso para plataformas de control de versiones de forma segura |
### Seguridad y Acceso
| Comando | Descripción |
|---------|-------------|
| `bin/sops_rules.sh` | Configura SOPS con clave GPG para encriptación segura de secretos ([documentación](sops_rules.md)) |
| `bin/qr_secret.sh` | Extrae secretos de imágenes QR y los guarda encriptados con [SOPS](sops.md) |
| `bin/vpn_install.sh` | Instala el cliente Pritunl VPN |
| `bin/vpn_install.sh --update` | Actualiza el cliente VPN a la última versión |
| `bin/vpn_users.sh` | Gestiona usuarios de la VPN |
| `bin/vpn_check.sh` | Verifica conexión a VPN y muestra el tipo de VPN activo |
| `bin/gpg_init.sh` | Inicializa configuración GPG para cifrado seguro |
### Gestión de Perfiles
| Comando | Descripción |
|---------|-------------|
| `bin/profile_backup.sh` | Realiza copia de seguridad del perfil del desarrollador (GPG, SSH, Git, y carpeta .developer) |
| `bin/profile_restore.sh <archivo>` | Restaura perfil desde copia de seguridad |
### Desarrollo Especializado
| Comando | Descripción |
|---------|-------------|
| `bin/rate_update.py` | Actualiza tarifas por hora de diferentes tipos de programadores |
| `bin/cocomo.py` | Calcula costos de proyecto usando el modelo COCOMO |
## 📚 Guía Detallada
### Herramientas de CLI Modernas
MRDevs Tools incluye soporte completo para herramientas modernas de CLI de [Charm](https://charm.sh/):
#### Gum y Glow - Herramientas TUI Modernas
MRDevs Tools incorpora dos potentes utilidades de [Charm](https://charm.sh/) para mejorar la experiencia de línea de comandos:
- **[Gum](gum.md)**: Crea interfaces TUI interactivas y elegantes para scripts de shell
- **[Glow](glow.md)**: Renderiza archivos Markdown directamente en la terminal con estilos
Para obtener información detallada sobre estas herramientas, consulta su documentación específica:
- [Documentación completa de Gum](gum.md)
- [Documentación completa de Glow](glow.md)
### Preparación del Entorno
El directorio `$HOME/devs` sirve como área principal de desarrollo donde se gestionan diversos ambientes y proyectos. Por razones de seguridad, se prioriza [podman](https://podman.io/) sobre [docker](https://www.docker.com/) como gestor de contenedores.
Para agregar temporalmente los comandos de la plataforma al PATH:
```bash
source ~/devs/bin/devset.sh
```
Este script detecta automáticamente la ubicación correcta del directorio bin y lo agrega al PATH solo para la sesión actual (no es persistente).
Si desea usar Docker en lugar de Podman, debe instalarlo manualmente antes de ejecutar `bootstrap.sh`.
### Gestión Avanzada de Repositorios Git
```bash
# Revertir todo el repositorio a un commit específico
bin/backlog.sh a1b2c3d
# Recuperar solo un archivo específico desde un commit
bin/backlog.sh a1b2c3d --file src/config.js
# Recuperar múltiples archivos usando un patrón
bin/backlog.sh a1b2c3d --files "*.js"
# Ver solo la lista de archivos modificados en un commit
bin/backlog.sh a1b2c3d --list
# Ver la ayuda completa del comando
bin/backlog.sh --help
```
El script `backlog.sh` permite recuperar estados previos del repositorio con varias opciones de seguridad:
- Crea ramas de respaldo automáticamente antes de realizar cambios
- Ofrece guardar cambios no confirmados en stash
- Proporciona confirmaciones interactivas antes de acciones potencialmente destructivas
- Incluye instrucciones para deshacer los cambios si fuera necesario
### Configuración de Herramientas de IA
MRDevs Tools facilita el trabajo con herramientas de IA:
#### Claude Code CLI
```bash
# Instalación
bin/claude_install.sh
# Gestión del token de forma segura
bin/cortana_token.sh
# Crear alias para facilitar su uso (cortana = claude)
bin/cortana_alias.sh
# Habilitar uso del alias permanentemente
bin/cortana_enable.sh
# Deshabilitar temporalmente el alias
bin/cortana_disable.sh
# Eliminar el alias (si es necesario)
bin/cortana_unalias.sh
```
El token se encripta usando SOPS y se almacena de forma segura en `$HOME/.cortana/cortana.sops.yaml`.
##### Control por voz (Experimental)
MRDevs Tools incluye un script experimental para interactuar con Claude Code mediante comandos de voz:
```bash
# Ver instrucciones para instalar dependencias
bin/claude_voice.py --install-deps
# Para sistemas Ubuntu/Debian
sudo apt install python3-pyaudio python3-pip
pip install --user vosk pydub sounddevice wget
# Modo interactivo básico (español por defecto)
bin/claude_voice.py
# Ver idiomas soportados
bin/claude_voice.py --list-languages
# Usar idioma específico (inglés)
bin/claude_voice.py --language en-us
# Modo continuo (escucha hasta que digas "salir")
bin/claude_voice.py --continuous
# Listar dispositivos de audio disponibles
bin/claude_voice.py --list-devices
# Especificar dispositivo de audio por ID
bin/claude_voice.py --device 1
# Ver la versión de Claude Code instalada
bin/claude_voice.py --version
# Modificar tiempo máximo de espera para respuestas (en segundos)
bin/claude_voice.py --timeout 30
# Enviar texto directamente (sin voz)
bin/claude_voice.py --text "Cómo puedo crear un archivo en Python"
```
> **NOTA**: Esta funcionalidad es experimental y requiere un micrófono configurado correctamente. El reconocimiento de voz utiliza Vosk, una solución local que no requiere conexión a Internet. La primera vez que ejecutes el script con un nuevo idioma, descargará automáticamente el modelo de reconocimiento correspondiente. Los archivos de sonido para notificaciones se almacenan en `~/.sounds/`.
#### Aider CLI
```bash
# Instalación
bin/aider_install.sh
# Habilitar alias para facilitar su uso (sora = aider)
bin/sora_enable.sh
# Deshabilitar el alias
bin/sora_disable.sh
# Desinstalar (si es necesario)
bin/aider_install.sh -u
```
Aider es un asistente de código basado en IA que te permite colaborar con modelos de lenguaje de OpenAI directamente desde la terminal. El script de instalación utiliza el instalador oficial de Aider.
#### Gestor de Tokens de IA
```bash
# Gestionar tokens de diferentes proveedores de IA
bin/ai_token.sh
```
El script `ai_token.sh` proporciona una forma centralizada y segura de gestionar tokens de API para múltiples proveedores de IA:
- Muestra un menú interactivo con los proveedores disponibles definidos en `bin/config/ai.tokens`
- Solicita y valida el token de API de forma segura
- Encripta el token usando SOPS y lo almacena en `$HOME/sops/{provider}.sops.yaml`
- Incluye verificaciones de seguridad (longitud del token, caracteres válidos)
- Soporte completo para internacionalización
Proveedores soportados por defecto: Anthropic Claude, OpenAI ChatGPT, Google Gemini, Groq, DeepSeek, HuggingFace, Replicate, OpenRouter, Brave Search, Serper Search, Voyage RAG, Apify y más.
La configuración de proyectos se almacena en `bin/config/projects.dat`, donde se encuentra el nombre de la carpeta de proyectos utilizada por el sistema.
### Instalación de Editores de Código
#### Helix Editor
Helix es un editor de código moderno similar a Vim/Neovim pero con una curva de aprendizaje más amigable:
```bash
# Instalación automatizada
bin/helix_install.sh
```
El script detecta automáticamente tu sistema operativo y utiliza el método de instalación más adecuado:
- En Ubuntu: Instala mediante snap para obtener la versión más reciente
- En Arch Linux: Utiliza pacman
- En Fedora: Instala a través de dnf
- En otros sistemas: Descarga e instala desde el tarball oficial
#### Visual Studio Code
Visual Studio Code es un editor de código potente y extensible con amplio soporte para múltiples lenguajes:
```bash
# Instalación automatizada
bin/vscode_install.sh
# Desinstalación
bin/vscode_install.sh -u
```
El script ofrece una instalación optimizada para cada plataforma:
- En Ubuntu/Debian: Configura el repositorio oficial de Microsoft y utiliza apt
- En Red Hat/Fedora: Configura el repositorio RPM y utiliza dnf
- En Arch Linux: Instala desde AUR o repositorios oficiales
- En macOS: Utiliza Homebrew para la instalación
- En FreeBSD: Instala mediante el gestor de paquetes pkg
#### Zettlr Markdown Editor
Zettlr es un potente editor Markdown centrado en académicos e investigadores, con funcionalidades avanzadas:
```bash
# Instalación automatizada
bin/zettlr_install.sh
# Desinstalación
bin/zettlr_install.sh -u
```
El script proporciona una instalación especializada para cada plataforma:
- En Ubuntu/Debian: Descarga e instala el paquete .deb oficial
- En Red Hat/Fedora: Descarga e instala el paquete .rpm oficial
- En Arch Linux: Instala desde AUR con ayuda de yay
- En macOS: Utiliza Homebrew para instalación
- En FreeBSD: Configuración manual con AppImage (no hay soporte oficial)
Características del instalador:
- Obtiene automáticamente la última versión disponible desde GitHub
- Solicita permisos de administrador cuando son necesarios
- Utiliza interfaz gráfica para confirmación y línea de comandos para instalación
- Limpia archivos de configuración residuales durante la desinstalación
- Proporciona información detallada sobre las características de Zettlr
### Herramientas para Control de Versiones
MRDevs Tools incluye scripts para simplificar la instalación de CLIs para diferentes plataformas Git:
#### GitHub CLI (gh)
```bash
# Instalación automatizada
bin/ghadmin_install.sh
```
El script detecta tu sistema operativo y utiliza el método de instalación más adecuado:
- En Debian/Ubuntu: Añade el repositorio oficial de GitHub y usa apt
- En Red Hat/Fedora: Configura el repositorio rpm y usa dnf
- En Arch Linux: Instala desde los repositorios oficiales
- En macOS: Instala a través de Homebrew
Para aprender a usar GitHub CLI, consulta la [documentación oficial de GitHub CLI](https://cli.github.com/manual/).
#### GitLab CLI (glab)
```bash
# Instalación automatizada
bin/gladmin_install.sh
```
El script prioriza los métodos de instalación en este orden:
1. Paquetes oficiales del sistema si están disponibles
2. Script oficial de instalación de GitLab
3. Gestores de paquetes como snap o Homebrew
4. Binarios precompilados o instalación vía Go
Para aprender a usar GitLab CLI, consulta la [documentación oficial de GitLab CLI](https://gitlab.com/gitlab-org/cli/-/blob/main/docs/index.md).
#### Forgejo CLI (berg)
```bash
# Instalación automatizada
bin/fjadmin_install.sh
```
Este script instala Forgejo CLI (berg), la herramienta de línea de comandos para administrar instancias de Forgejo/Codeberg:
- Verifica e instala las dependencias necesarias (como Rust y Cargo si no están presentes)
- Instala berg de manera optimizada para tu sistema
- Configura el entorno correctamente para usar berg
- Incluye instrucciones posteriores a la instalación
Para aprender a usar Forgejo CLI, consulta la [documentación oficial de Forgejo/Codeberg CLI](https://codeberg.org/RobWalt/berg).
#### Gestión de tokens para control de versiones
```bash
# Gestión segura de tokens de acceso
bin/cversion_token.sh
```
Este script proporciona una interfaz para gestionar tokens de acceso para diferentes plataformas:
- Permite seleccionar entre Github, Gitlab y Forgejo
- Solicita y valida el token de forma segura
- Encripta el token con SOPS y lo almacena en ~/.developer
- Incluye verificación de formato y seguridad de tokens
- Gestiona automáticamente permisos para archivos de tokens
#### Autenticación con Forgejo y GitHub usando token encriptado
```bash
# Iniciar sesión en Forgejo usando el token encriptado
source bin/forgejo_login.sh
# Cerrar sesión de Forgejo
source bin/forgejo_login.sh --logout
# Iniciar sesión en GitHub usando el token encriptado
source bin/github_login.sh
# Cerrar sesión de GitHub
source bin/github_login.sh --logout
```
El script de Forgejo facilita la autenticación con Forgejo/Codeberg CLI (berg):
- Utiliza el token almacenado y encriptado por cversion_token.sh
- Desencripta automáticamente el token usando SOPS
- Detecta la URL de Forgejo basándose en la configuración de git
- Configura la variable BERG_BASE_URL con la URL detectada
- Proporciona opciones para login (por defecto) y logout
El script de GitHub facilita la autenticación con GitHub CLI (gh):
- Utiliza el token almacenado y encriptado por cversion_token.sh
- Desencripta automáticamente el token usando SOPS
- Proporciona opciones para login (por defecto) y logout
### Copias de Seguridad
Para respaldar configuraciones importantes:
```bash
bin/profile_backup.sh
```
Esto crea un archivo ZIP en `$HOME/secure/backups` que incluye:
- Configuración GPG completa
- Claves SSH y configuración
- Configuración Git
- Carpeta .developer (para configuraciones de servidores Git)
La carpeta puede contener múltiples archivos de respaldo con un archivo `gpg.secret` que contiene la contraseña encriptada. La pérdida de este archivo imposibilitará la restauración.
Para restaurar:
```bash
bin/profile_restore.sh <archivo-zip-backup>
```
### Creación de Proyectos Estandarizados
MRDevs Tools proporciona una forma estandarizada de crear nuevos proyectos con `project_new.sh`:
```bash
# Crear un nuevo proyecto
bin/project_new.sh
```
El script `project_new.sh` crea proyectos con una estructura completa según el tipo seleccionado:
- Solicita nombre, tipo, licencia y descripción del proyecto
- Crea una estructura organizada de carpetas según el tipo de proyecto
- Inicializa un repositorio Git con archivo .gitignore específico
- Configura archivos README.md y documentación básica
- Permite seleccionar el tipo de servidor Git (GitHub, GitLab, Gitea, Forgejo, None)
- Genera un commit inicial automático
Tipos de proyectos soportados:
- Python, Node.js, PHP, Rust, C, C++, C#
- Odoo, Ansible, ESP32/Arduino
- COBOL y otros tipos personalizados
Cada tipo de proyecto incluye:
- Estructura de directorios optimizada
- Archivos de configuración específicos
- Archivos .gitignore personalizados
- Documentación inicial básica
### Gestión de Tarifas y Costos
MRDevs Tools incluye utilidades para la gestión de tarifas y estimación de costos:
#### Actualización de Tarifas
El script `rate_update.py` permite mantener actualizadas las tarifas por hora de diferentes tipos de programadores:
```bash
# Actualizar tarifas faltantes
bin/rate_update.py
# Listar todas las tarifas disponibles
bin/rate_update.py --list
# Actualizar la tarifa de un tipo específico de programador
bin/rate_update.py --type python
# Actualizar todas las tarifas, incluso las existentes
bin/rate_update.py --init
```
Las tarifas se almacenan en archivos individuales dentro de `data/rates/` (directorio sin tracking en git) y pueden ser utilizadas por otras herramientas.
#### Estimación de Costos con COCOMO
El script `cocomo.py` implementa el modelo COCOMO para estimar costos de proyectos de software basados en las líneas de código:
```bash
# Calcular costo de un proyecto
bin/cocomo.py --project /ruta/al/proyecto
# Usar un tipo específico de programador para los costos
bin/cocomo.py --project /ruta/al/proyecto --type devops
# Especificar un modelo COCOMO específico
bin/cocomo.py --project /ruta/al/proyecto --model embedded
# Ignorar patrones adicionales de archivos
bin/cocomo.py --project /ruta/al/proyecto --ignore "*.generated.js" --ignore "vendor/**"
```
El script analizará el código fuente, contará las líneas efectivas, y calculará estimaciones de esfuerzo, tiempo y costos utilizando las tarifas por hora configuradas.

View file

@ -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"
}
}

View file

@ -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"
}
}

View file

@ -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"
}
}

View file

@ -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"
}
}