Compare commits

..

No commits in common. "9e8420c2872041b2e82e17bfb9bfa0f8ad0ff8ba" and "3eb5cfc7c5797b14e417e64c35beebe78c22695a" have entirely different histories.

3 changed files with 38 additions and 67 deletions

View file

@ -41,21 +41,14 @@ bin/update.sh
### Estructura de Directorios ### Estructura de Directorios
MRDevs Tools utiliza una estructura organizada que separa el código (en ~/devs) y la configuración (en directorios ocultos): Durante la instalación y uso, MRDevs Tools crea varios directorios importantes:
#### Código y scripts - `~/devs/bin/`: Scripts y herramientas ejecutables
- `~/devs/bin/`: Scripts ejecutables y herramientas principales - `~/devs/ollama/`: Configuración y datos para Ollama AI
- `lib/`: Bibliotecas compartidas de funciones - `~/devs/sounds/`: Archivos de sonido para notificaciones
- `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 - `~/.vosk/`: Modelos para reconocimiento de voz local
- `~/.cortana/`: Configuración y tokens para Claude Code - `~/.cortana/`: Configuración y tokens para Claude Code
- `~/.developer/`: Tokens y configuraciones para herramientas de desarrollo - `~/.developer/`: Tokens y configuraciones para herramientas de desarrollo
- `~/.cache/devs/`: Caché de descargas y datos temporales
## 🔧 Funcionalidades Principales ## 🔧 Funcionalidades Principales
@ -85,7 +78,7 @@ MRDevs Tools utiliza una estructura organizada que separa el código (en ~/devs)
| `bin/sora_enable.sh` | Activa el alias 'sora' para Aider permanentemente | | `bin/sora_enable.sh` | Activa el alias 'sora' para Aider permanentemente |
| `bin/sora_disable.sh` | Desactiva el alias 'sora' para Aider | | `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/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_up.sh` | Inicia el servicio Ollama (IA local) con podman-compose. Crea y configura `~/devs/ollama/` |
| `bin/ollama_down.sh` | Detiene el servicio Ollama (IA local) | | `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/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 | | `bin/nodered.sh` | Administra Node-RED con soporte para ejecución, monitoreo y gestión completa del servicio |
@ -208,7 +201,7 @@ bin/claude_voice.py --timeout 30
bin/claude_voice.py --text "Cómo puedo crear un archivo en Python" 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/`. > **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 `~/devs/sounds/`.
#### Aider CLI #### Aider CLI
@ -447,48 +440,20 @@ bin/cocomo.py --project /ruta/al/proyecto --ignore "*.generated.js" --ignore "ve
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. 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.
## 🔐 Seguridad y Privacidad
MRDevs Tools está diseñado con la seguridad y privacidad en mente:
- **Almacenamiento seguro**: Todos los tokens y credenciales se almacenan encriptados usando SOPS
- **Directorios ocultos**: La configuración sensible se almacena en directorios ocultos (con prefijo `.`)
- **Sin telemetría**: Las herramientas no recopilan ni envían datos de uso
- **Podman como predeterminado**: Se usa Podman (sin privilegios) para mayor seguridad en contenedores
- **Ejecución local**: Las funcionalidades como reconocimiento de voz funcionan localmente sin enviar datos
## 🔌 Arquitectura del Sistema ## 🔌 Arquitectura del Sistema
### Estructura de Directorios ### Estructura de Directorios
``` ```
$HOME/ devs/
├── devs/ # Directorio principal del proyecto ├── bin/ # Scripts ejecutables y herramientas
│ └── bin/ # Scripts ejecutables y herramientas
│ ├── lib/ # Bibliotecas compartidas │ ├── lib/ # Bibliotecas compartidas
│ ├── msg/ # Archivos de mensajes multilingües │ ├── msg/ # Archivos de mensajes multilingües
│ ├── config/ # Configuraciones y parámetros │ └── config/ # Configuraciones y parámetros
│ │ └── *.gitignore # Plantillas para proyectos │ └── *.gitignore # Plantillas de .gitignore específicas por tipo de proyecto
│ ├── bootstrap.sh # Instalador básico ├── ollama/ # Configuración y datos de Ollama (IA local)
│ ├── update.sh # Actualizador de entorno │ └── data/ # Almacenamiento persistente para modelos de Ollama
│ ├── ollama*.sh # Scripts de Ollama └── sounds/ # Archivos de audio para notificaciones
│ ├── claude_voice.py # Asistente de voz para Claude Code
│ └── ... # Otros scripts
├── .sounds/ # Archivos de audio para notificaciones
├── .ollama/ # Configuración y datos de Ollama (IA)
│ ├── models/ # Modelos descargados
│ └── podman-compose.yml # Configuración del contenedor
├── .vosk/ # Modelos para reconocimiento de voz
│ └── models/ # Modelos de voz por idioma
├── .cortana/ # Configuración de Claude Code
│ └── cortana.sops.yaml # Token encriptado
└── .developer/ # Tokens y configuraciones de desarrollo
├── github.sops.yaml # Token de GitHub encriptado
└── forgejo.sops.yaml # Token de Forgejo encriptado
``` ```
### Componentes Principales ### Componentes Principales

View file

@ -42,8 +42,13 @@ class Colors:
def play_sound(sound_type): def play_sound(sound_type):
"""Reproduce un sonido para indicar estados""" """Reproduce un sonido para indicar estados"""
# Usar ~/.sounds como directorio estándar para archivos de sonido # Obtener el directorio del script y del proyecto
sounds_dir = os.path.join(os.path.expanduser("~"), ".sounds") script_dir = os.path.dirname(os.path.abspath(__file__))
bin_dir = os.path.dirname(script_dir) if script_dir.endswith("/bin") else script_dir
project_dir = os.path.dirname(bin_dir) if bin_dir.endswith("/bin") else os.path.dirname(os.path.abspath(__file__))
# Usar sounds en el directorio del proyecto, no en /bin
sounds_dir = os.path.join(project_dir, "sounds")
if not os.path.exists(sounds_dir): if not os.path.exists(sounds_dir):
os.makedirs(sounds_dir, exist_ok=True) os.makedirs(sounds_dir, exist_ok=True)

View file

@ -55,8 +55,8 @@ source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head" load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head"
title="${head_000} ${head_002}" title="${head_000} ${head_002}"
# Create the directory for Ollama in the user's home directory # Create the directory for Ollama in the development directory
mkdir -p "${HOME}/.ollama" mkdir -p "${BIN_HOME}/ollama"
# Check if we should use podman or docker (prefer podman) # Check if we should use podman or docker (prefer podman)
if command -v podman >/dev/null 2>&1; then if command -v podman >/dev/null 2>&1; then
@ -83,26 +83,27 @@ fi
echo "Using ${COMPOSE_CMD} to start Ollama service..." echo "Using ${COMPOSE_CMD} to start Ollama service..."
# Copy compose file if it doesn't exist in the new location # Copy compose file if it doesn't exist in the new location
if [ ! -f "${HOME}/.ollama/podman-compose.yml" ] && [ -f "${BIN_HOME}/${BIN_BASE}/ollama/podman-compose.yml" ]; then if [ ! -f "${BIN_HOME}/ollama/podman-compose.yml" ] && [ -f "${BIN_HOME}/${BIN_BASE}/ollama/podman-compose.yml" ]; then
cp "${BIN_HOME}/${BIN_BASE}/ollama/podman-compose.yml" "${HOME}/.ollama/" cp "${BIN_HOME}/${BIN_BASE}/ollama/podman-compose.yml" "${BIN_HOME}/ollama/"
fi fi
# Change to the directory containing the compose file # Change to the directory containing the compose file
cd "${HOME}/.ollama" cd "${BIN_HOME}/ollama"
# Update the compose file to use the default Ollama directory # Create a subdirectory for Ollama data
if [ -f "${HOME}/.ollama/podman-compose.yml" ]; then mkdir -p "${BIN_HOME}/ollama/data"
# Update any old volume paths to use the standard location
sed -i 's|../../data:/root/.ollama|.:/root/.ollama|g' "${HOME}/.ollama/podman-compose.yml" # Update the compose file to use ollama/data directory
sed -i 's|${BIN_HOME}/data:/root/.ollama|${HOME}/.ollama:/root/.ollama|g' "${HOME}/.ollama/podman-compose.yml" if [ -f "${BIN_HOME}/ollama/podman-compose.yml" ]; then
sed -i 's|./data:/root/.ollama|.:/root/.ollama|g' "${HOME}/.ollama/podman-compose.yml" # Update the volume mount to use ollama/data instead of data
sed -i 's|../ollama/data:/root/.ollama|.:/root/.ollama|g' "${HOME}/.ollama/podman-compose.yml" sed -i 's|../../data:/root/.ollama|../ollama/data:/root/.ollama|g' "${BIN_HOME}/ollama/podman-compose.yml"
sed -i 's|${BIN_HOME}/data:/root/.ollama|${BIN_HOME}/ollama/data:/root/.ollama|g' "${BIN_HOME}/ollama/podman-compose.yml"
# Start Ollama service with compose # Start Ollama service with compose
${COMPOSE_CMD} -f podman-compose.yml up -d ${COMPOSE_CMD} -f podman-compose.yml up -d
else else
# Create a basic compose file if none exists # Create a basic compose file if none exists
cat > "${HOME}/.ollama/podman-compose.yml" <<EOF cat > "${BIN_HOME}/ollama/podman-compose.yml" <<EOF
version: '3' version: '3'
services: services:
ollama: ollama:
@ -111,7 +112,7 @@ services:
ports: ports:
- "11434:11434" - "11434:11434"
volumes: volumes:
- .:/root/.ollama - ./data:/root/.ollama
restart: unless-stopped restart: unless-stopped
privileged: true privileged: true
EOF EOF
@ -131,7 +132,7 @@ if ! ${CONTAINER_CMD} container exists ollama 2>/dev/null || ! ${CONTAINER_CMD}
${CONTAINER_CMD} run -d --name ollama \ ${CONTAINER_CMD} run -d --name ollama \
--privileged \ --privileged \
-p 11434:11434 \ -p 11434:11434 \
-v "${HOME}/.ollama:/root/.ollama" \ -v "${BIN_HOME}/ollama/data:/root/.ollama" \
--restart unless-stopped \ --restart unless-stopped \
docker.io/ollama/ollama:latest docker.io/ollama/ollama:latest
fi fi