Compare commits
	
		
			3 commits
		
	
	
		
			3eb5cfc7c5
			...
			9e8420c287
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 9e8420c287 | |||
| a556225146 | |||
| 0b68ca3e18 | 
					 3 changed files with 67 additions and 38 deletions
				
			
		
							
								
								
									
										65
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										65
									
								
								README.md
									
									
									
									
									
								
							|  | @ -41,14 +41,21 @@ bin/update.sh | |||
| 
 | ||||
| ### Estructura de Directorios | ||||
| 
 | ||||
| Durante la instalación y uso, MRDevs Tools crea varios directorios importantes: | ||||
| MRDevs Tools utiliza una estructura organizada que separa el código (en ~/devs) y la configuración (en directorios ocultos): | ||||
| 
 | ||||
| - `~/devs/bin/`: Scripts y herramientas ejecutables | ||||
| - `~/devs/ollama/`: Configuración y datos para Ollama AI | ||||
| - `~/devs/sounds/`: Archivos de sonido para notificaciones | ||||
| #### 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 | ||||
| 
 | ||||
|  | @ -78,7 +85,7 @@ Durante la instalación y uso, MRDevs Tools crea varios directorios importantes: | |||
| | `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 `~/devs/ollama/` | | ||||
| | `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 | | ||||
|  | @ -201,7 +208,7 @@ bin/claude_voice.py --timeout 30 | |||
| 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 `~/devs/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 `~/.sounds/`. | ||||
| 
 | ||||
| #### Aider CLI | ||||
| 
 | ||||
|  | @ -440,20 +447,48 @@ 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. | ||||
| 
 | ||||
| ## 🔐 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 | ||||
| 
 | ||||
| ### Estructura de Directorios | ||||
| 
 | ||||
| ``` | ||||
| devs/ | ||||
| ├── bin/           # Scripts ejecutables y herramientas | ||||
| │   ├── lib/       # Bibliotecas compartidas | ||||
| │   ├── msg/       # Archivos de mensajes multilingües | ||||
| │   └── config/    # Configuraciones y parámetros | ||||
| │       └── *.gitignore # Plantillas de .gitignore específicas por tipo de proyecto | ||||
| ├── ollama/        # Configuración y datos de Ollama (IA local) | ||||
| │   └── data/      # Almacenamiento persistente para modelos de Ollama | ||||
| └── sounds/        # Archivos de audio para notificaciones | ||||
| $HOME/ | ||||
| ├── devs/                      # Directorio principal del proyecto | ||||
| │   └── bin/                   # Scripts ejecutables y herramientas  | ||||
| │       ├── lib/               # Bibliotecas compartidas | ||||
| │       ├── msg/               # Archivos de mensajes multilingües | ||||
| │       ├── config/            # Configuraciones y parámetros | ||||
| │       │   └── *.gitignore    # Plantillas para proyectos | ||||
| │       ├── bootstrap.sh       # Instalador básico | ||||
| │       ├── update.sh          # Actualizador de entorno | ||||
| │       ├── ollama*.sh         # Scripts de Ollama | ||||
| │       ├── 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 | ||||
|  |  | |||
|  | @ -42,13 +42,8 @@ class Colors: | |||
| 
 | ||||
| def play_sound(sound_type): | ||||
|     """Reproduce un sonido para indicar estados""" | ||||
|     # Obtener el directorio del script y del proyecto | ||||
|     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") | ||||
|     # Usar ~/.sounds como directorio estándar para archivos de sonido | ||||
|     sounds_dir = os.path.join(os.path.expanduser("~"), ".sounds") | ||||
|     if not os.path.exists(sounds_dir): | ||||
|         os.makedirs(sounds_dir, exist_ok=True) | ||||
|      | ||||
|  |  | |||
|  | @ -55,8 +55,8 @@ source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib" | |||
| load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head" | ||||
| title="${head_000} ${head_002}" | ||||
| 
 | ||||
| # Create the directory for Ollama in the development directory | ||||
| mkdir -p "${BIN_HOME}/ollama" | ||||
| # Create the directory for Ollama in the user's home directory | ||||
| mkdir -p "${HOME}/.ollama" | ||||
| 
 | ||||
| # Check if we should use podman or docker (prefer podman) | ||||
| if command -v podman >/dev/null 2>&1; then | ||||
|  | @ -83,27 +83,26 @@ fi | |||
| echo "Using ${COMPOSE_CMD} to start Ollama service..." | ||||
| 
 | ||||
| # Copy compose file if it doesn't exist in the new location | ||||
| 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" "${BIN_HOME}/ollama/" | ||||
| if [ ! -f "${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/" | ||||
| fi | ||||
| 
 | ||||
| # Change to the directory containing the compose file | ||||
| cd "${BIN_HOME}/ollama" | ||||
| cd "${HOME}/.ollama" | ||||
| 
 | ||||
| # Create a subdirectory for Ollama data | ||||
| mkdir -p "${BIN_HOME}/ollama/data" | ||||
| 
 | ||||
| # Update the compose file to use ollama/data directory | ||||
| if [ -f "${BIN_HOME}/ollama/podman-compose.yml" ]; then | ||||
|   # Update the volume mount to use ollama/data instead of data | ||||
|   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" | ||||
| # Update the compose file to use the default Ollama directory | ||||
| if [ -f "${HOME}/.ollama/podman-compose.yml" ]; then | ||||
|   # Update any old volume paths to use the standard location | ||||
|   sed -i 's|../../data:/root/.ollama|.:/root/.ollama|g' "${HOME}/.ollama/podman-compose.yml" | ||||
|   sed -i 's|${BIN_HOME}/data:/root/.ollama|${HOME}/.ollama:/root/.ollama|g' "${HOME}/.ollama/podman-compose.yml" | ||||
|   sed -i 's|./data:/root/.ollama|.:/root/.ollama|g' "${HOME}/.ollama/podman-compose.yml" | ||||
|   sed -i 's|../ollama/data:/root/.ollama|.:/root/.ollama|g' "${HOME}/.ollama/podman-compose.yml" | ||||
|    | ||||
|   # Start Ollama service with compose | ||||
|   ${COMPOSE_CMD} -f podman-compose.yml up -d | ||||
| else | ||||
|   # Create a basic compose file if none exists | ||||
|   cat > "${BIN_HOME}/ollama/podman-compose.yml" <<EOF | ||||
|   cat > "${HOME}/.ollama/podman-compose.yml" <<EOF | ||||
| version: '3' | ||||
| services: | ||||
|   ollama: | ||||
|  | @ -112,7 +111,7 @@ services: | |||
|     ports: | ||||
|       - "11434:11434" | ||||
|     volumes: | ||||
|       - ./data:/root/.ollama | ||||
|       - .:/root/.ollama | ||||
|     restart: unless-stopped | ||||
|     privileged: true | ||||
| EOF | ||||
|  | @ -132,7 +131,7 @@ if ! ${CONTAINER_CMD} container exists ollama 2>/dev/null || ! ${CONTAINER_CMD} | |||
|     ${CONTAINER_CMD} run -d --name ollama \ | ||||
|       --privileged \ | ||||
|       -p 11434:11434 \ | ||||
|       -v "${BIN_HOME}/ollama/data:/root/.ollama" \ | ||||
|       -v "${HOME}/.ollama:/root/.ollama" \ | ||||
|       --restart unless-stopped \ | ||||
|       docker.io/ollama/ollama:latest | ||||
|   fi | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue