Compare commits
13 commits
03848f76fd
...
5c5e31401f
Author | SHA1 | Date | |
---|---|---|---|
5c5e31401f | |||
08f449ab31 | |||
9ef1dd4c25 | |||
97a965417e | |||
6da8b9e0f6 | |||
387aa01122 | |||
27566241a9 | |||
140185521d | |||
e41bacc7b0 | |||
0732e95082 | |||
ff8873432e | |||
988ab571cc | |||
d0d758f552 |
22 changed files with 2389 additions and 927 deletions
614
README.md
614
README.md
|
@ -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
|
||||
|
||||
---
|
||||
|
||||
|
|
|
@ -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}"
|
||||
|
|
1
bin/config/ai_tokens.path
Normal file
1
bin/config/ai_tokens.path
Normal file
|
@ -0,0 +1 @@
|
|||
~/.developer
|
1
bin/config/ollama.local
Normal file
1
bin/config/ollama.local
Normal file
|
@ -0,0 +1 @@
|
|||
http://127.0.0.1:11434
|
1
bin/config/sora_api_base.cfg
Normal file
1
bin/config/sora_api_base.cfg
Normal file
|
@ -0,0 +1 @@
|
|||
https://openrouter.ai/api/v1
|
1
bin/config/sora_model.cfg
Normal file
1
bin/config/sora_model.cfg
Normal file
|
@ -0,0 +1 @@
|
|||
openrouter/deepseek/deepseek-r1-distill-llama-70b:free
|
343
bin/sora.sh
Executable file
343
bin/sora.sh
Executable 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
|
|
@ -1,10 +0,0 @@
|
|||
#!/bin/bash
|
||||
# Verificar si ~/.local/bin está en el PATH
|
||||
if [[ ":$PATH:" != *":$HOME/.local/bin:"* ]]; then
|
||||
# Si no está en el PATH, usamos la ruta completa en el alias
|
||||
alias sora="$HOME/.local/bin/aider"
|
||||
else
|
||||
# Si está en el PATH, podemos usar el nombre directamente
|
||||
alias sora="aider"
|
||||
fi
|
||||
echo "Alias sora habilitado"
|
|
@ -1,120 +0,0 @@
|
|||
#!/bin/bash
|
||||
#Script : sora_disable.sh
|
||||
#Apps : MRDEVS TOOLS
|
||||
#Description : Deshabilita el alias 'sora' para Aider
|
||||
#Author : Sora Rosero One <sora@rosero.one>
|
||||
#Generated by : Claude Code (claude-3-7-sonnet-20250219)
|
||||
#Created : 2025/03/20 12:30:00
|
||||
#Modified : 2025/03/20 12:48:05
|
||||
#Version : 1.0.0
|
||||
#Use Notes :
|
||||
# ./sora_disable.sh -> Deshabilitar
|
||||
# No usa console.lib, ni console.es
|
||||
#==============================================================================
|
||||
# Derechos de Autor [2025] [Mauro Rosero P. <mauro@rosero.one>]
|
||||
#==============================================================================
|
||||
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo
|
||||
# bajo los términos de la Licencia Pública Affero General de GNU tal como
|
||||
# lo publica la Free Software Foundation, ya sea la versión 3 de la licencia,
|
||||
# o (a su elección) cualquier versión posterior.
|
||||
#
|
||||
# Este programa se distribuye con la esperanza de que sea útil,
|
||||
# pero SIN NINGUNA GARANTÍA; sin siquiera la garantía implícita de
|
||||
# COMERCIABILIDAD o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulte la
|
||||
# Licencia Pública Affero General de GNU para obtener más detalles.
|
||||
#
|
||||
# Debería haber recibido una copia de la Licencia Pública Affero General
|
||||
# junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
|
||||
|
||||
# Configuración inicial
|
||||
# Usar DEVELOPER_DIR de base.lib
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
BIN_BASE="bin"
|
||||
BIN_LIBS="lib"
|
||||
BIN_MESG="msg"
|
||||
BIN_CFGS="config"
|
||||
|
||||
# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto
|
||||
if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then
|
||||
DEVSPATH=$(cat "$SCRIPT_DIR/$BIN_CFGS/devspath.dat")
|
||||
else
|
||||
DEVSPATH="devs"
|
||||
fi
|
||||
|
||||
BIN_HOME="$HOME/$DEVSPATH"
|
||||
VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version")
|
||||
|
||||
# CHECK SHELL LANGUAGE
|
||||
BIN_LANG=${LANG:0:2}
|
||||
|
||||
# Importar bibliotecas necesarias
|
||||
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
|
||||
|
||||
# Cargar mensajes en el idioma del sistema o español por defecto
|
||||
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head"
|
||||
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "developers"
|
||||
title="${head_000} ${srmsg_000}"
|
||||
|
||||
# Verificar que 'dialog' esté instalado
|
||||
if ! command -v dialog &>/dev/null; then
|
||||
echo "${npm_001}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Función para eliminar alias de Sora
|
||||
remove_sora_alias() {
|
||||
local alias_nombre="sora"
|
||||
local shell_config=""
|
||||
|
||||
# Detectar el shell actual y seleccionar el archivo de configuración adecuado
|
||||
case "$SHELL" in
|
||||
*/bash)
|
||||
shell_config="$HOME/.bashrc"
|
||||
;;
|
||||
*/zsh)
|
||||
shell_config="$HOME/.zshrc"
|
||||
;;
|
||||
*)
|
||||
dialog --backtitle "${title}" --title "${head_error}" --msgbox "${srmsg_021}" 7 50
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# Verificar si el alias existe en el archivo de configuración
|
||||
if grep -q "alias $alias_nombre=" "$shell_config"; then
|
||||
# Eliminar el alias del archivo de configuración
|
||||
sed -i "/alias $alias_nombre=/d" "$shell_config"
|
||||
if [[ $? -eq 0 ]]; then
|
||||
dialog --backtitle "${title}" --title "${srmsg_012}" --msgbox "${srmsg_013} $shell_config" 7 60
|
||||
else
|
||||
dialog --backtitle "${title}" --title "${head_error}" --msgbox "${srmsg_020}" 7 50
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
dialog --backtitle "${title}" --title "${srmsg_010}" --msgbox "${srmsg_011}" 7 50
|
||||
return 2
|
||||
fi
|
||||
}
|
||||
|
||||
# Confirmar desactivación
|
||||
dialog --backtitle "${title}" --title "${npm_031}" --yesno "${srmsg_003}" 7 50
|
||||
if [[ $? -eq 0 ]]; then
|
||||
# Crear un archivo fuente para la desactivación del alias
|
||||
UNALIAS_FILE="$BIN_HOME/bin/sora_unalias.sh"
|
||||
echo '#!/bin/bash' > "$UNALIAS_FILE"
|
||||
echo 'unalias sora 2>/dev/null' >> "$UNALIAS_FILE"
|
||||
echo "echo \"${srmsg_018}\"" >> "$UNALIAS_FILE"
|
||||
chmod +x "$UNALIAS_FILE"
|
||||
|
||||
# Ejecutar la función remove_sora_alias para el archivo de configuración permanente
|
||||
remove_sora_alias
|
||||
|
||||
# Crear un mensaje con instrucciones para desactivar el alias en la sesión actual
|
||||
dialog --backtitle "${title}" --title "${srmsg_016}" --msgbox "${srmsg_014}\n\n${srmsg_015}\n\nsource $UNALIAS_FILE\n\n" 10 70
|
||||
else
|
||||
dialog --backtitle "${title}" --title "${head_canceled}" --msgbox "${npm_008}" 6 40
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Limpiar consola
|
||||
clear
|
|
@ -1,139 +0,0 @@
|
|||
#!/bin/bash
|
||||
#Script : sora_enable.sh
|
||||
#Apps : MRDEVS TOOLS
|
||||
#Description : Habilitar el alias 'sora' para Aider
|
||||
#Author : Sora Rosero One <sora@rosero.one>
|
||||
#Generated by : Claude Code (claude-3-7-sonnet-20250219)
|
||||
#Created : 2025/03/20 12:30:00
|
||||
#Modified : 2025/03/20 12:48:05
|
||||
#Version : 1.0.0
|
||||
#Use Notes :
|
||||
# ./sora_enable.sh -> Habilitar
|
||||
# No usa console.lib, ni console.es
|
||||
#==============================================================================
|
||||
# Derechos de Autor [2025] [Mauro Rosero P. <mauro@rosero.one>]
|
||||
#==============================================================================
|
||||
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo
|
||||
# bajo los términos de la Licencia Pública Affero General de GNU tal como
|
||||
# lo publica la Free Software Foundation, ya sea la versión 3 de la licencia,
|
||||
# o (a su elección) cualquier versión posterior.
|
||||
#
|
||||
# Este programa se distribuye con la esperanza de que sea útil,
|
||||
# pero SIN NINGUNA GARANTÍA; sin siquiera la garantía implícita de
|
||||
# COMERCIABILIDAD o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulte la
|
||||
# Licencia Pública Affero General de GNU para obtener más detalles.
|
||||
#
|
||||
# Debería haber recibido una copia de la Licencia Pública Affero General
|
||||
# junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
|
||||
|
||||
# Configuración inicial
|
||||
# Usar DEVELOPER_DIR de base.lib
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
BIN_BASE="bin"
|
||||
BIN_LIBS="lib"
|
||||
BIN_MESG="msg"
|
||||
BIN_CFGS="config"
|
||||
|
||||
# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto
|
||||
if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then
|
||||
DEVSPATH=$(cat "$SCRIPT_DIR/$BIN_CFGS/devspath.dat")
|
||||
else
|
||||
DEVSPATH="devs"
|
||||
fi
|
||||
|
||||
BIN_HOME="$HOME/$DEVSPATH"
|
||||
VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version")
|
||||
|
||||
# CHECK SHELL LANGUAGE
|
||||
BIN_LANG=${LANG:0:2}
|
||||
|
||||
# Importar bibliotecas necesarias
|
||||
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
|
||||
|
||||
# Cargar mensajes en el idioma del sistema o español por defecto
|
||||
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head"
|
||||
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "developers"
|
||||
title="${head_000} ${srmsg_000}"
|
||||
|
||||
# Verificar que 'dialog' esté instalado
|
||||
if ! command -v dialog &>/dev/null; then
|
||||
echo "${npm_001}"
|
||||
clear
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Función para agregar alias de Sora para Aider
|
||||
sora_alias() {
|
||||
local alias_nombre="sora"
|
||||
local alias_comando=""
|
||||
local shell_config=""
|
||||
|
||||
# Determinar la ruta del comando aider
|
||||
if [[ -x "$HOME/.local/bin/aider" ]]; then
|
||||
alias_comando="$HOME/.local/bin/aider"
|
||||
else
|
||||
alias_comando="aider" # Fallback al comando en el PATH
|
||||
fi
|
||||
|
||||
# Detectar el shell actual y seleccionar el archivo de configuración adecuado
|
||||
case "$SHELL" in
|
||||
*/bash)
|
||||
shell_config="$HOME/.bashrc"
|
||||
;;
|
||||
*/zsh)
|
||||
shell_config="$HOME/.zshrc"
|
||||
;;
|
||||
*)
|
||||
dialog --backtitle "${title}" --title "${head_error}" --msgbox "${srmsg_021}" 7 50
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# Verificar si el alias ya existe en el archivo de configuración
|
||||
if grep -q "alias $alias_nombre=" "$shell_config"; then
|
||||
dialog --backtitle "${title}" --title "${srmsg_008}" --msgbox "${srmsg_004} $shell_config" 7 60
|
||||
return 2
|
||||
else
|
||||
# Agregar el alias al final del archivo de configuración
|
||||
echo "alias $alias_nombre='$alias_comando'" >> "$shell_config"
|
||||
if [[ $? -eq 0 ]]; then
|
||||
# Recargar el archivo de configuración
|
||||
source "$shell_config" 2>/dev/null || true
|
||||
dialog --backtitle "${title}" --title "${srmsg_009}" --msgbox "${srmsg_005} $shell_config\n\nRecuerde ejecutar: source $shell_config" 9 60
|
||||
else
|
||||
dialog --backtitle "${title}" --title "${head_error}" --msgbox "${srmsg_019}" 7 50
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Confirmar activación
|
||||
dialog --backtitle "${title}" --title "${npm_031}" --yesno "${srmsg_002}" 7 50
|
||||
if [[ $? -eq 0 ]]; then
|
||||
# Crear un archivo fuente para la activación del alias
|
||||
ALIAS_FILE="$BIN_HOME/bin/sora_alias.sh"
|
||||
echo '#!/bin/bash' > "$ALIAS_FILE"
|
||||
echo '# Verificar si ~/.local/bin está en el PATH' >> "$ALIAS_FILE"
|
||||
echo 'if [[ ":$PATH:" != *":$HOME/.local/bin:"* ]]; then' >> "$ALIAS_FILE"
|
||||
echo ' # Si no está en el PATH, usamos la ruta completa en el alias' >> "$ALIAS_FILE"
|
||||
echo ' alias sora="$HOME/.local/bin/aider"' >> "$ALIAS_FILE"
|
||||
echo 'else' >> "$ALIAS_FILE"
|
||||
echo ' # Si está en el PATH, podemos usar el nombre directamente' >> "$ALIAS_FILE"
|
||||
echo ' alias sora="aider"' >> "$ALIAS_FILE"
|
||||
echo 'fi' >> "$ALIAS_FILE"
|
||||
echo "echo \"${srmsg_017}\"" >> "$ALIAS_FILE"
|
||||
chmod +x "$ALIAS_FILE"
|
||||
|
||||
# Ejecutar la función sora_alias para el archivo de configuración permanente
|
||||
sora_alias
|
||||
|
||||
# Crear un mensaje con instrucciones para activar el alias en la sesión actual
|
||||
dialog --backtitle "${title}" --title "${srmsg_008}" --msgbox "${srmsg_006}\n\n${srmsg_007}\n\nsource $ALIAS_FILE\n\n" 10 70
|
||||
else
|
||||
dialog --backtitle "${title}" --title "${head_canceled}" --msgbox "${npm_008}" 6 40
|
||||
clear
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Limpiar consola
|
||||
clear
|
|
@ -1,3 +0,0 @@
|
|||
#!/bin/bash
|
||||
unalias sora 2>/dev/null
|
||||
echo "Alias sora deshabilitado"
|
631
docs/cortana.md
Normal file
631
docs/cortana.md
Normal 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
187
docs/glow.md
Normal 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
|
|
@ -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.
|
||||
|
||||

|
||||
|
||||
## 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.
|
||||
|
||||

|
||||
|
||||
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
578
docs/sora.md
Normal 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
559
docs/uso.md
Normal 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.
|
|
@ -1,21 +0,0 @@
|
|||
{
|
||||
"data": "ENC[AES256_GCM,data:xZ84DDD9N8+It9MgjWpCkMRwWQCXv/+QrsAs7ZEof50WmsLIhWp0ZMEZKzr35vZmboLHeRd0iCZ6QWElwfEWTnOqPTrt1RHfZ3sw3JhWmWXmyTO/pY9xS21WLTLkFWnZPj6lrqRd,iv:FRzRXlxS6IGZL6FT/1CbwgAXkIlMxPyuW6gxPe5Np9s=,tag:kcvzc+KkH7AaE0HEBmhlzw==,type:str]",
|
||||
"sops": {
|
||||
"kms": null,
|
||||
"gcp_kms": null,
|
||||
"azure_kv": null,
|
||||
"hc_vault": null,
|
||||
"age": null,
|
||||
"lastmodified": "2025-03-27T05:20:30Z",
|
||||
"mac": "ENC[AES256_GCM,data:6DoGPsyt5nMjQSadGebJ7g+Lg0DO+gjdoriK4i+/xkoTeYHDThrTeujuGR7RR8pKvHhUCqhAaniu/VY1g4UHKkhwMbBL/gaTPY8816KzPDIoaSDYwThxJLpq0V2+FVAQ106+Ey8gGtzP1B17VSFQEsRBorb91B1wvpAfpB+eOnc=,iv:cRSNvc2QegVSw2M7PKnPWSeHD719atrpTR/uf1DHMTU=,tag:221g5vI3e6FK/JqaxfOPSA==,type:str]",
|
||||
"pgp": [
|
||||
{
|
||||
"created_at": "2025-03-27T05:20:30Z",
|
||||
"enc": "-----BEGIN PGP MESSAGE-----\n\nhQIMAx5Q8cfEImn/AQ/8DEkDwYJw+hl/xJHlH1Wl6dC2GGZtvbgGrJV83T9V+0a9\nh+rLqYe3aW6EBlpJTiSkdC0t0ZNNrvSFKl96SyLlc7PMVOZIr9pLYVwhGJwOEK8c\nJ+wzN19dGPY0TvAmv/2lUZyIDS1lvNTofJQRe4LuakRjBOOOqmtpI2FS1WGyWo6A\nYNqqMcYBjLVQVtvt74LgY3PPolGBvf/j4lK7PWzd7FiN3fGzN5dGJZDr35swI+sN\nsHPbrkVKZovHojkno46uAYy9AG+r/MvvhEc2nVuSXUHbzlzzuSsDSfMwMo+MBPMv\ndPWL6+qYruMM7xmem9l6k7Z32p3QPudb/JVtCqolqyY0ReT9oOAKSIuFVrxdKoN2\nVgdwWXvSK2/f5+kTaNv0zU8E+Zh5I6jt2BybdF6eABzlggYYo89yasgw7pLgwmND\nxdFKzXvOdPUpkWsuMzHTLRJ3H3TBc1QImj/yuilOoqrcUB+Dp2S1B0/u6GFpmPXU\nbgXKoTqnlAmBNFJsEFJDZCwxZg1ONrw2qzfpFc1lff0d5qidZgWPm89K64oxT/22\nQ397fe7EuNWddLSEjg9jiV31Ur5ZJXtLvHnaZpOvlpDyS52nTJIlYrLwLK0/k1yN\n1Jaxz2OhcfCbzWMl6Qp72kpMOCjszeC1aY1wxTZK0E44ZYG8o+EZyeoUD7QNkb/S\nXgGdOUnOC6RD/VtXSkzjhjEPnV641G/XwlfbNzsLQAZMxrXH2yto7WCYR8opRNPa\n1hhmaMtNec64eVnkCiJvfnzlGY7h3WBxCL9v3DkEta1bOmn4Ay4OOYT9Mh29ais=\n=1NAN\n-----END PGP MESSAGE-----",
|
||||
"fp": "ACB17A9DB7A680D0FED714E2A17ADF8EA1E9DB07"
|
||||
}
|
||||
],
|
||||
"unencrypted_suffix": "_unencrypted",
|
||||
"version": "3.9.2"
|
||||
}
|
||||
}
|
|
@ -1,21 +0,0 @@
|
|||
{
|
||||
"data": "ENC[AES256_GCM,data:wzUuXCw/03iQx/uBbYZaH2RUUOS9kRNsOxeYnf9gxg9EtTnHcAKCdgsi57MjCAOoJNFModUP1oiI,iv:0OxbnDf+YpAUxPKD4pwWr1m2SKigjltl2Tia9Ebvha0=,tag:IfBggkQeIxnNIa1L6WOp8Q==,type:str]",
|
||||
"sops": {
|
||||
"kms": null,
|
||||
"gcp_kms": null,
|
||||
"azure_kv": null,
|
||||
"hc_vault": null,
|
||||
"age": null,
|
||||
"lastmodified": "2025-03-22T19:17:45Z",
|
||||
"mac": "ENC[AES256_GCM,data:3DYGOmI8egY+KHpzhF8grzCs1cJ0nMc0YeQlDV7X0B4+vEK/Ja7YR7bUG4zIR38OhpENZbHMDK2ciyoifJdO4hPZKQk/+MsmdmfxV9WF+lJ0AXe3U/mGmpDv5W9KHmR13zgaN0On2cQT9cLziA7KpaSGw4CfLNgxKU/OSJC7iW0=,iv:J34Sj4LMzGCD6TOB6IU71kT8Sxj7orUb0A0yRfyB8kI=,tag:quu2v+T8lTyqRKGtE7vs8Q==,type:str]",
|
||||
"pgp": [
|
||||
{
|
||||
"created_at": "2025-03-22T19:17:45Z",
|
||||
"enc": "-----BEGIN PGP MESSAGE-----\n\nhQIMAx5Q8cfEImn/AQ//TNSynZiJbXr16tKHNusO/8UHpS1bWIuSjJG0lcdc7c/7\nGbmDzl5mRxi38FhP/evzNiArB8uL81P0hfKogdNIFe+19yVXzuCBxd9FMLLKnFkX\nvm+0O7fkQsAU266w0snbDZdZuM6gDqiERdgeUrUh4rSdgjeHMoa2MvfpL62ncjF3\nhZL8RMGSF6Q2mjYWkjgJqVbPzKeB4x7adm3HD7YTTzSBoAChVXXSUhXl4ZMfglWb\nlF9bXrOXFwzZtiWDsLfciJdlM6hy7sDsMUIXcMXTEPNv4cMkftKzKSbD9iN1MYP0\nZC7r/yhQtZqbN1IKjtqmSBPgvhS6CbCGt7GG5iH5ohqt1L/+bJYiEkuves1DRkBq\nREDiVhHL0Dn4qTafBuE2zDB8T1MzKagUS62qJM5ODyHaC8UXz7C2OSsFIxwccZI6\njkCCW5Kx9inxNvvtwkQo8f1RH1ui+CE1f18quxCR9cTqM4Z1hADZSRQCc9DFOBC/\nVVMcdlXRluD2cwtqUyzjIAMzmDske4GRVgJsEib8b8m1Y6P783kfHJI6qjFCzLmE\npnTwOYs946K8NmVawcl6FgdDxuIZltQgMuD7xCaVR+p3IDFUNH1EYPEO8lhtTGAS\n7ScRrZYmOM+T+sHk3U+3T4OtDUjWrWMPXVC4+FrFaBUhZQ4jsjNnBkuQeqPshy3S\nXAHS4cfo9VIixvbwVibiAVkGCc4eUFiIQO/7FArmQ66Cp1YxtmbD2jCyoHAl+bMl\nlfOnww8y4AwB3+cnj2PkxnEPr2D5bvC4XPWSqhcPziUY/y7m9GUkYadKSIRq\n=wLIg\n-----END PGP MESSAGE-----",
|
||||
"fp": "ACB17A9DB7A680D0FED714E2A17ADF8EA1E9DB07"
|
||||
}
|
||||
],
|
||||
"unencrypted_suffix": "_unencrypted",
|
||||
"version": "3.9.2"
|
||||
}
|
||||
}
|
|
@ -1,21 +0,0 @@
|
|||
{
|
||||
"data": "ENC[AES256_GCM,data:G4t/rJUQ+D5kXKpa9Z6ho0j63PjcqAJszUHfTaj6mY99HO5Oq44cmoNTJF3B8T+jLe6L+tCmGjCprtxf9gn6rJH2J7yZNg+rM34AZnE=,iv:mUjUwD+JxfGdWQCU3EpkSEdAtJfeagK2qgWRe50aQb0=,tag:IfMBpStbF1WN8QED8ce4iA==,type:str]",
|
||||
"sops": {
|
||||
"kms": null,
|
||||
"gcp_kms": null,
|
||||
"azure_kv": null,
|
||||
"hc_vault": null,
|
||||
"age": null,
|
||||
"lastmodified": "2025-03-21T22:05:23Z",
|
||||
"mac": "ENC[AES256_GCM,data:bJhHUYvPCnW70WDrmMQlXYVl+YlUXISaq3Jl0+yUn0f58UTAw+tV/VRAhwQ4Idem2qh/O9O/z6agoRfAmcBsM33nFqltS19jDkfH8p69wSAqkpgFG+5/1uQuQuFdZPsDuBHWWVQPifk8B7ou9K+aZoBMtDN3+1KXKOfzy5ZE/6A=,iv:K1IDjtKZZbrkJ/d/KHLqv27fE8C+PkCWAO2UF5kvUKo=,tag:k4jvC0x0Aptr4iHrJNhB6A==,type:str]",
|
||||
"pgp": [
|
||||
{
|
||||
"created_at": "2025-03-21T22:05:23Z",
|
||||
"enc": "-----BEGIN PGP MESSAGE-----\n\nhQIMAx5Q8cfEImn/ARAAlnbMPu1hX3CoWRbVBL4WoLM/4YkI63hMyezqVVGX9H0i\nFt+nts0Y+quG9NcS0VBdEhR/fsCoJMIsDRf4KG6Hx0iW7KizOpOMhekhjoDKDms/\n4qAy5y5JxSLJCi2Q/6ATOsBMceK+tZyvsMEEcptsp+rd1i6Ij19+mWY3S6HCtIjT\nRbK54vMgOOmmoja6RZpYS+1jwEm3Elk6MfnKRBuZf1DYbcp3VL9jQdsViG9rB5gf\nJvvo8/nACa1Du4plgrwLEL70OFU0ZYq5Ag1J3e5G3wSD4Wfvynn/vw7Cc4mixmlj\nuZyPgsoLFxEYMGDoIupi/ztdWGTH7rFJxc0wFgVIj1bLKXJ0MRarR0tNkuTN2tFV\n7oZoRzEjU7yKP+OEXBn4EKNrAXzgDQK4x/Vrp111ucsZd6hlz0EhbUHSuXZDzkVX\nm7uKa/1/drjYNuOoaFOEAjAC8C0lYbatncihOjqsv/4QNCL0xW5Lhm7kn0CeUxnk\nSt5KNIejL8aTgtWTGuHmgDMIjVwcifIMi4TY11z9s1Qm8qWraTr83dufuMRfJ/S2\nn4WA0sRNLhPjaLrNX6TqhsBbbdDa7qZugVWiy1vFfO3s25WWMGjuee7PC3ROziTF\n0Z8PNYUliMCpkwnzrIXZLJGiSDa2pYgjdj7Oq8FFXKqWhlAROvMprdX5lBPX7h7S\nXgGfnc1LlfxuK1fZ5jIUgq5g089+gUaRh7w04a2hEfAdLjMwuy3Pp5M+q4dBDwj/\nrtMNLfsLx7KZvY5RH5t/kp9EO652ckxRp+6q+XFUf0vc/Be/H2FhioCIAakq3MI=\n=KHeg\n-----END PGP MESSAGE-----",
|
||||
"fp": "ACB17A9DB7A680D0FED714E2A17ADF8EA1E9DB07"
|
||||
}
|
||||
],
|
||||
"unencrypted_suffix": "_unencrypted",
|
||||
"version": "3.9.2"
|
||||
}
|
||||
}
|
|
@ -1,21 +0,0 @@
|
|||
{
|
||||
"data": "ENC[AES256_GCM,data:dbwrHE/0qqxyl1IJ6zd8hR3PmAYPF4lDDnWSDTKhW9kBNEf5WHRjgCK55bNBWVw7F9zcQa4vTuuyMzxXfy3iSJNeXDKDdKEZetf/x4KIl/RCsDwvN6fbxfBBeIL9O/xKzJiH5QXFMJIlWXUfAI/BUpndamKp/8zIqGjSI/rUnEIFB/JdU7puBxw6/3npct9oNVY=,iv:k4Da7Vfhnusbq5eLaF4TEFTyF2tswhKEWPuA9h6I2EU=,tag:geUtJ1HP2+q9cKRuEWHPgA==,type:str]",
|
||||
"sops": {
|
||||
"kms": null,
|
||||
"gcp_kms": null,
|
||||
"azure_kv": null,
|
||||
"hc_vault": null,
|
||||
"age": null,
|
||||
"lastmodified": "2025-03-21T22:27:06Z",
|
||||
"mac": "ENC[AES256_GCM,data:DEEEq9qvSGhsgWb6k5br0mxB85LAgA7XWxuFyi3TF+kIe/f2/Du/RNnvU9/jDU5eN6w6K+ERQQNwG9YcL8VlWK07xrQYxL40SEuPB0vhWFCA+yXXrNGLalv+vWHDK2S9wnv1p//fk9IwrDLDfk6ki+/P/hxne7IV31lYoF+EOLc=,iv:QOcBMPiSrKDzWflQ1loDb1+E29GooZwGYXkbsWOJvyg=,tag:cSy6ImCXKKZSitQWuB6s4Q==,type:str]",
|
||||
"pgp": [
|
||||
{
|
||||
"created_at": "2025-03-21T22:27:06Z",
|
||||
"enc": "-----BEGIN PGP MESSAGE-----\n\nhQIMAx5Q8cfEImn/AQ/9FbFO7illKRiQoiRWszamHYbEGLDNCnOwzdqvMCC1k3EK\nsqtp6MzNbO3LvR6BOHNPuybvSQUdf4xKMAKOsWHk3i61nJhzc0q6Q7SWYmDli4xi\nD2YF3NQEYcyCS/rf45jKtm5eJuvQGZT+y9+hVWXV+NRCoG86eiQabY+MoCJ1y0k7\nKq+/uza6Tvpnaxqeyf9a0kwUnskjmcRt2r72+BfMVpDlHSQ079zhpRo4VdGoDizW\nFJ3XrFiLqP8LAEFZaBpJzXBphXp0uvSHq9Fq+ELTHWArcoT/48Gqm8ZPuuU+J8TV\nA4E4TwfWjxJojcrPHCisXapW/5WiYssR+QZxmeoTgoCJXHpFkWFiHiGWWOYslQdb\noBlvr0+qnPlaFdx11hqvJ2Yoo4pWWsdDi/MYQEP5+ExVpfbCH+V6OeQ+YsmSdHhF\nHZXH8eqRFI7QY46Wyn3NiOnhVt+iRNrd9mWDanzkCPEE3BgounwA4nmvvfOie8qU\nkbcsAdfnd4VJK4G5qe1bz3BfsQmJf5xtVCV9XFDT47uyIJub2fc4Z0DQCherfhvc\n07RSYGU6/r2niIt9p79xoUNn6gcl40vFUTObR1BGoUcuulNMr9mf57N3OHwEp+le\ni3eFZA8yw5PVzTuAhqkhRlNP5vtP9MVongIbhD0MGgfJ11RHzwekccsILZyelWPS\nXAEHpLpxLyD8FQBtL7C7tC/kwi8Pr1wtSpgWH0aI2oEgtZR39uKxVp0x6vn9c4ZV\npVxnQQb6IhsgGn2ZUjzkkegaXIASqi4kXKV4FIhOtU9EVMDkiCSwnKgPYJtH\n=+1pw\n-----END PGP MESSAGE-----",
|
||||
"fp": "ACB17A9DB7A680D0FED714E2A17ADF8EA1E9DB07"
|
||||
}
|
||||
],
|
||||
"unencrypted_suffix": "_unencrypted",
|
||||
"version": "3.9.2"
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue