# Argos
**Sistema de ejecución de comandos y orquestación de tareas** - Nivel 1B de Proyecto Ypsilon
[](https://hex.pm/packages/argos) [](https://github.com/usuario/argos/blob/main/LICENSE)
Argos es una librería base sin dependencias para ejecución de comandos del sistema y gestión de tareas asíncronas.
## Arquitectura
Argos forma parte de **Proyecto Ypsilon**:
```
┌─────────────────┐
│ NIVEL 3: ARK │
│ Microframework │
│ Global │
└────────┬────────┘
│
┌────────▼─────────┐
│ NIVEL 2: AEGIS │
│ CLI/TUI │
│ Framework │
└────┬─────┬───────┘
│ │
┌─────────────┘ └─────────────┐
│ │
┌──────▼────────┐ ┌─────────▼──────┐
│ NIVEL 1A: │ │ NIVEL 1B: │
│ AURORA │ │ ARGOS │
│ Formatting & │ │ Execution & │
│ Rendering │ │ Orchestration │
└───────────────┘ └────────────────┘
BASE BASE
(sin deps) (sin deps) ← ESTÁS AQUÍ
```
## Características
- 🚀 **Ejecución de comandos** del sistema con resultados estructurados
- ⚡ **Tareas asíncronas** con control de concurrencia
- 📝 **Logging estructurado** sin dependencias de UI
- 🛠️ **Sin dependencias externas** - completamente autónomo
- 🎯 **Devuelve structs en lugar de IO** para fácil procesamiento
## Instalación
Agrega a tu `mix.exs`:
```elixir
def deps do
[
{:argos, "~> 1.0.0"}
]
end
```
## Uso Rápido
### Ejecución de comandos
```elixir
# Ejecución simple
result = Argos.exec_command("ls", ["-la"])
if result.success? do
IO.puts("Output: #{result.output}")
end
# Ejecución con sudo
result = Argos.exec_sudo("systemctl restart nginx")
# Ejecución interactiva
result = Argos.exec_interactive("vim", ["config.txt"])
# Ejecución básica sin logging
result = Argos.exec_raw("pwd")
```
### Tareas en paralelo
```elixir
tasks = [
{"compile", "mix compile"},
{"test", {:function, &run_tests/0}},
{"lint", "mix credo --strict"}
]
result = Argos.run_parallel(tasks, max_concurrency: 2)
IO.inspect(result.results)
```
### Logging estructurado
```elixir
# Logging simple
Argos.log(:info, "Operation completed")
# Logging con metadata
Argos.log(:info, "Task completed", task_id: 123, duration: 1500)
# Logging de comandos
Argos.log_command("ls -la", 0, 250, "total 8...")
```
## API Principal
### Ejecución de Comandos
- `Argos.exec_command/3` - Ejecuta un comando del sistema
- `Argos.exec_raw/2` - Ejecución básica sin logging adicional
- `Argos.exec_sudo/2` - Ejecuta un comando con privilegios sudo
- `Argos.exec_interactive/2` - Ejecuta un comando de forma interactiva
### Tareas Asíncronas
- `Argos.run_parallel/2` - Ejecuta múltiples tareas en paralelo
- `Argos.start_async_task/3` - Inicia una tarea asíncrona
- `Argos.stop_async_task/1` - Detiene una tarea asíncrona
- `Argos.get_async_task/1` - Obtiene el estado de una tarea
### Logging
- `Argos.log/3` - Registra un mensaje con metadata estructurada
- `Argos.log_command/4` - Registra la ejecución de un comando
- `Argos.log_task/4` - Registra la ejecución de una tarea
### Gestión de Procesos
- `Argos.kill_process/1` - Mata un proceso por nombre
- `Argos.kill_processes/1` - Mata múltiples procesos
- `Argos.halt/0` - Detiene la ejecución del sistema
## Módulos Principales
- `Argos.Command` - Ejecución de comandos del sistema
- `Argos.AsyncTask` - Gestión de tareas asíncronas
- `Argos.Log` - Logging estructurado
- `Argos.Structs.CommandResult` - Resultado de comandos
- `Argos.Structs.TaskResult` - Resultado de tareas
## Estructuras de Datos
### CommandResult
```elixir
%Argos.Structs.CommandResult{
command: "ls -la",
args: [],
output: "total 8\n-rw-r--r--...",
exit_code: 0,
duration: 150,
success?: true,
error: nil
}
```
### TaskResult
```elixir
%Argos.Structs.TaskResult{
task_name: "compile",
result: %CommandResult{},
duration: 2500,
success?: true,
error: nil
}
```
## Uso como CLI
Argos también puede usarse como una herramienta de línea de comandos independiente:
```bash
# Ejecutar un comando
argos exec ls -la
# Ejecutar con sudo
argos sudo "systemctl restart nginx"
# Ejecutar comando sin logging adicional
argos raw "pwd"
# Ejecutar tareas en paralelo
argos parallel --task "compile:mix compile" --task "test:mix test"
# Matar un proceso
argos kill "process_name"
# Listar procesos
argos ps
```
## Licencia
Apache 2.0 - Consulta el archivo [LICENSE](LICENSE) para más detalles.