# PACKAGES — Gestor de paquetes de SiPi

SiPi ya tiene un gestor de paquetes real, apoyado en GitHub en vez de un índice propio (no requiere infraestructura propia para funcionar). Este documento explica las cuatro formas de instalar código de terceros y el formato del manifiesto de dependencias.

## 1. Instalar un archivo `.sipi` suelto

```sipi
instalar_modulo "https://raw.githubusercontent.com/usuario/repo/main/util.sipi"
```

Descarga ese archivo y lo guarda en `modulos_instalados/util.sipi`. También podés instalarlo directamente con un alias de importación:

```sipi
instalar_modulo "https://.../util.sipi" como util
// ya queda importado, listo para usar
```

Si en vez de una URL pasás solo un nombre:

```sipi
instalar_modulo "telegram"
```

SiPi busca `telegram.sipi` en el registro configurado por la variable de entorno `SIPI_REGISTRO_MODULOS` (vos elegís qué URL base usar — no hay un registro central impuesto).

## 2. Instalar un repositorio completo de GitHub

Cuando un paquete tiene varios archivos `.sipi` (no uno solo), se instala el repo entero:

```sipi
instalar_repositorio "usuario/repo"
instalar_repositorio "usuario/repo" rama desarrollo
instalar_repositorio "https://github.com/usuario/repo"
```

Se descarga en `paquetes/<repo>/`. Para ver qué está instalado así:

```sipi
listar_repositorios
```

## 3. Buscar paquetes sin saber el nombre exacto

```sipi
buscar_paquete "juegos"
```

Usa la API pública de GitHub para encontrar repositorios reales relacionados con el tema — no hay un catálogo curado propio de SiPi, así que los resultados son cualquier repo público de GitHub que matchee la búsqueda. El comando imprime, para cada resultado, la línea exacta de `instalar_repositorio` para instalarlo.

## 4. Instalar todas las dependencias de un proyecto a la vez

Creá un archivo `sipi_paquetes.json` en la carpeta del proyecto (el equivalente de un `package.json` de Node o `requirements.txt` de Python):

```json
{
  "modulos": {
    "telegram": "https://raw.githubusercontent.com/usuario/repo/main/telegram.sipi",
    "reconocimiento_facial": "reconocimiento_facial"
  }
}
```

Cada valor puede ser una URL directa, o solo un nombre (se busca en `SIPI_REGISTRO_MODULOS`). Después, en tu programa o desde la CLI:

```sipi
instalar_dependencias
```

Instala todas las dependencias declaradas de una sola vez, y avisa cuáles fallaron sin frenar el resto.

## Gestionar módulos ya instalados

```sipi
listar_modulos
desinstalar_modulo "telegram"
```

## Publicar tu propio paquete

No hace falta pedir permiso ni subir nada a un índice central: alcanza con tener tu(s) archivo(s) `.sipi` en un repositorio público de GitHub (o cualquier URL accesible — un gist, tu propia web). Cualquiera puede instalarlo con `instalar_modulo`/`instalar_repositorio` apuntando a esa URL o repo. Esto es intencional: SiPi no controla ni modera lo que se publica, así que revisá el código de un paquete de terceros antes de instalarlo, como harías con cualquier paquete de npm o PyPI de un autor que no conocés.

## 5. Registro central real: publicar e instalar desde SiPi Dev

Además del descubrimiento vía búsqueda de GitHub (punto 3), `src/sipi_registro.py` implementa un cliente completo de registro tipo npm/PyPI, con `index.json` + paquetes versionados (`sipi.json` por paquete, rangos semver `^`/`~`/`*`, resolución de dependencias a un nivel, verificación de `sha256`). Esto ya no es solo el cliente: **el Editor para Desarrolladores (`editor_sipi_dev.py`, "SiPi Dev") tiene una interfaz gráfica real sobre esto**, en dos pestañas:

- **🌐 Explorar librerías**: apunta a la URL de un `index.json` (variable de entorno `SIPI_REGISTRO_URL`, o la que pongas a mano en esa pestaña), buscá por nombre/descripción, y tocá "Instalar seleccionado" — se descarga, se verifica el hash y se extrae en `paquetes_instalados/`, igual que haría `pip install` o `npm install`.
- **⚙️ Crear comando / paquete → 🚀 Publicar en el registro**: arma automáticamente el `sipi.json` (nombre, versión, descripción, punto de entrada) a partir de lo que escribiste en esa pestaña, lo empaqueta en un `.zip`, y:
  - si le das la ruta de un **clon local con permisos de escritura** del repo que hostea el `index.json`, hace `git add` + `commit` + `push` solo (el flujo real de punta a punta para quien administra ese registro, o tiene acceso de colaborador);
  - si no tenés ese clon, te arma igual el `.zip` + el fragmento exacto de JSON para pegar a mano, así nadie se queda sin poder publicar solo por no tener permisos de escritura sobre el registro central.

Importante para que "todo el mundo" vea lo mismo: el registro sigue siendo un `index.json` hosteado por vos (ver `herramientas/plantilla_registro/` para tener uno andando en 5 minutos con solo una cuenta de GitHub) — no hay un servidor propio de Anthropic/SiPi corriendo en algún lado. Lo que cambió acá es que publicar y explorar ese registro ya no son pasos manuales: son un botón dentro de SiPi Dev.

## Limitación actual (honesta)

La búsqueda de descubrimiento amplio (`buscar_paquete`, punto 3) sigue dependiendo pura y exclusivamente de la API pública de GitHub, sin ranking de calidad ni verificación — sirve para encontrar repos sueltos, no reemplaza a un índice curado. El índice curado real (punto 5) sí existe como pieza de software, pero necesita que alguien con autoridad sobre el proyecto lo publique y lo mantenga poblado; SiPi no impone ni aloja uno por default.
