# Añadir y retirar microapps

Scaffold incremental, actualización del proyecto y retirada manual sin comandos inventados.

<span class="section-anchor" id="section-1"></span>

## Añadir una aplicación

```bash
wu add vue explorador --no-install
wu add react busqueda --no-install
wu install
```

Ejecuta `add` desde la raíz del proyecto. Los dos argumentos posicionales son **framework y nombre**, en ese orden. La única opción reconocida es `--no-install`, que permite generar varias apps y realizar una instalación al terminar.

Sin `--no-install`, `add` utiliza el mismo agregador y escritor que `wu install`, conserva los campos raíz y propaga errores de npm. Si el manifiesto raíz no tiene `_wu`, se detiene antes de generar; puedes usar `--no-install` para declarar dependencias manualmente o adoptar el manifiesto con `wu install --force`.

<span class="section-anchor" id="section-2"></span>

## Qué escribe

1. Valida framework y nombre, y comprueba que el directorio no exista.
2. Busca un puerto libre después del mayor usado por las apps; si no queda espacio, busca desde 5001. Evita puertos del shell y del proxy.
3. Genera `mf-<name>/` con `package.json`, entrypoint, componente y configuración del framework. No escribe un `wu.json` fuente.
4. Si la configuración provino de `wu.config.json`, incorpora la nueva app y reescribe el archivo.
5. Agrega las declaraciones de shell y apps al manifiesto raíz gestionado.
6. Instala con npm, salvo que se haya pasado `--no-install`.

Declara las dependencias particulares en la app o shell que las consume. `add` conserva la configuración personalizada y amplía `shared` desde el catálogo. Los errores JSON incluyen línea y columna; no sustituyen una configuración rota por una nueva.

<span class="section-anchor" id="section-3"></span>

## Nombres y TypeScript

`wu add react mf-checkout` retira el prefijo recibido y genera `mf-checkout/`; no duplica `mf-`. Lo mismo aplica al prefijo `mf_`. Un nombre vacío o formado solo por ese prefijo es rechazado. Un directorio existente también falla.

El comando activa TypeScript cuando `supportsTs` lo admite, para coincidir con el modo rápido de `create`. HTMX, Alpine y Stimulus permanecen en JavaScript. No hay una opción de `add` para seleccionar JavaScript en las otras plantillas.

<span class="section-anchor" id="section-4"></span>

## Integrar una aplicación existente

`add` genera una aplicación nueva. Para incorporar una ya existente, declara una entrada en `apps` con su `name`, `dir`, `framework`, puerto y comandos; adapta su entrada al registro WU y comprueba `wu.json`. Después ejecuta `wu install`, `wu info`, `wu build` y valida su montaje en el navegador.

El nombre identifica la app en el catálogo del runtime. El directorio localiza archivos y resuelve overrides de dependencias. Si cambias uno, revisa los consumidores de ese campo en lugar de asumir que son intercambiables.

<span class="section-anchor" id="section-5"></span>

## Retirar o renombrar

Esta versión no implementa `wu remove` ni un comando de renombrado. La retirada requiere eliminar la entrada de `apps`, actualizar navegación y referencias de montaje, y ejecutar `wu install` para recalcular dependencias y overrides. El directorio se puede archivar o retirar una vez revisadas esas referencias.

Renombrar requiere mantener coherentes el directorio, `wu.config.json`, el nombre registrado por el adaptador, `wu.json` y los identificadores utilizados por el shell. Ejecuta `wu doctor` para encontrar referencias de directorio obsoletas y reconstruye antes de publicar.

<span class="section-anchor" id="section-6"></span>

## Limitaciones observadas

Sin `wu.config.json`, `add` usa el descubrimiento para calcular dependencias y puertos, pero no escribe una configuración nueva. Prefiere un proyecto creado explícitamente para conservar una topología estable. La escritura fallida del scaffold retira el directorio nuevo; un fallo posterior de instalación se comunica con salida `1`.

<span class="section-anchor" id="section-7"></span>

## Referencia de implementación

- `wu-cli/src/commands/add.zig`
- `wu-cli/src/commands/install.zig`
- `wu-cli/src/config/names.zig`
- `wu-cli/tests/scaffold-writers.test.cjs`
- `wu-cli/tests/scaffold-security.test.cjs`