# Auditoría de arranque Windows — EQUIPITELLO

Fecha: 2026-08-16 · PC: EQUIPITELLO · Usuario: Paterna

## Resumen

| Problema | Estado |
|----------|--------|
| CaptaJaus / RoyalBroker deshabilitados en «Aplicaciones de inicio» | **Reparado** (StartupApproved → ENABLED) |
| Flash de terminal al login (`RoyalBrokerStartup.cmd` + `powershell.exe` en Run) | **Reparado** (todo vía `wscript //B` + `.vbs`) |
| Tarea `JobsWorldSilent` sin ejecución útil | **Re-registrada** |
| Arranque trays JW/CJ/RB/AL | **HKCU\Run → VBS silencioso** |

Script de reparación: `JobsWorld/scripts/tray/repair-ecosystem-autostart.ps1 -Apply`

---

## 1. Qué debe arrancar con Windows (ecosistema propio)

### 1.1 Registro `HKCU\...\Run` (bandejas)

| Nombre | Comando (actual) | Qué hace |
|--------|------------------|----------|
| **JobsWorldTray** | `wscript //B …\jobsworld_silent.vbs` | Tray JW + API `:8010` |
| **CaptaJausTray** | `wscript //B …\captajaus_silent.vbs` | Tray CJ (PM2 `lliria-properties` `:3000`) |
| **RoyalBrokerTray** | `wscript //B …\royalbroker_silent.vbs` | Tray RB |
| **ALimpiezasTray** | `wscript //B …\alimpiezas_silent.vbs` | Tray AL + OCR `:8090` |

Todos usan **VBS + ventana 0** (sin consola negra).

### 1.2 Carpeta Inicio (`%APPDATA%\…\Startup`)

| Archivo | Rol |
|---------|-----|
| `RoyalBrokerStartup_silent.vbs` | Tras ~20 s: `pm2 resurrect` + asegura proceso `royalbroker` |
| `RoyalBrokerStartup.cmd.bak` | Antiguo `.cmd` (flasheaba consola) — **desactivado** |

### 1.3 Tareas programadas (logon / watchdog)

| Tarea | Disparo | Acción |
|-------|---------|--------|
| **JobsWorldSilent** | Al iniciar sesión | VBS JW (respaldo del Run) |
| **ALimpiezasAtLogon** | Al iniciar sesión | Stack XAMPP + OCR + tray (VBS) |
| **ALimpiezasTrayWatchdog** | Periódico | Releeve tray AL si murió |
| **CursorBridgeAtLogon** | Al iniciar sesión | Bridge `:8095` (VBS) |
| **CursorBridgeTray** | Al iniciar sesión | Icono Bridge |
| **CursorBridgeWatchdog** | Periódico | Salud Bridge |
| **XZonasSupervisorTunnelAtLogon** | Logon | Túnel supervisor lab |
| **XZonasSupervisorTunnelWatchdog** | Periódico | Watchdog túnel |
| **Equipitello-Health-Daily** | Diario | Health check |
| **XZonas SEO Daily/Hourly** | Cron | Mantenimiento SEO |
| **XZonas-Lab-Sync-Prod** | Programada | Sync DB lab |
| **F6-MirrorHtdocsToServer** | Manual/on-demand | Mirror htdocs |
| **PM2Tray** | **Disabled** | Legacy CaptaJaus |

### 1.4 Servicios Windows (automáticos relevantes)

| Servicio | Uso |
|----------|-----|
| Apache2.4 / mysql | XAMPP (ALimpiezas / FacturaScripts) |
| Tailscale | Red mesh lab / remoto |
| AnyDesk | Acceso remoto |

---

## 2. Por qué aparecía una ventana de terminal y desaparecía

Causas típicas en este PC (orden de probabilidad):

1. **`RoyalBrokerStartup.cmd` en Startup** — `cmd.exe` abre un flash negro aunque luego lance PowerShell Hidden. **Sustituido por `.vbs`.**
2. **Entradas Run con `powershell.exe` directo** (CJ/RB/AL) — en muchos logins Windows muestra un destello de consola antes de aplicar `-WindowStyle Hidden`. **Pasado a `wscript`.**
3. **Otros arranques de terceros** (pueden seguir flasheando):
   - Docker Desktop
   - Visual Studio Code Tunnel
   - OpenVPN-GUI / No-IP / Opera Assistant / Teams / Edge Update
   - Entrada **PM2** en StartupApproved (resurrect)
4. **Watchdogs** (`CursorBridgeWatchdog`, `ALimpiezasTrayWatchdog`, túnel XZonas) — si el script no usa Hidden/VBS de forma estricta, pueden parpadear al ejecutarse.

Si tras el próximo reinicio **sigue** habiendo un flash:

1. Administrador de tareas → **Aplicaciones de inicio** → anotar qué se ejecuta en ese segundo.
2. Revisar carpeta Startup y tareas con `powershell`/`cmd` (sección 1.3).
3. Inventario automatizado:  
   `c:\xampp\htdocs\cursor-mobile-bridge\tools\windows-startup-inventory.ps1`

---

## 3. CaptaJaus / RoyalBroker “no arrancaban bien”

Windows guarda un flag en:

`HKCU\…\Explorer\StartupApproved\Run`

| Entrada | Antes | Ahora |
|---------|-------|-------|
| CaptaJausTray | **DISABLED** (byte `02`) | ENABLED (`03`) |
| RoyalBrokerTray | **DISABLED** | ENABLED |
| ALimpiezasTray | ENABLED | ENABLED |
| JobsWorldTray | (sin flag / implícito) | ENABLED |

Aunque estuvieran en `Run`, el Administrador de tareas → Inicio las tenía **deshabilitadas**. Eso explica trays ausentes tras reboot.

---

## 4. Otros procesos de inicio (terceros / lab)

Habilitados en StartupApproved (no del ecosistema JW):

- Microsoft Edge AutoLaunch / Edge Update  
- OneDrive, Teams, Opera Browser Assistant  
- Docker Desktop, Visual Studio Code Tunnel  
- OpenVPN-GUI, NoIPDUCv4  
- PM2, Wargaming.net Game Center  

Servicios/procesos remotos habituales: **AnyDesk**, **Tailscale**.

---

## 5. Revisión de seguridad (hallazgos)

### Riesgo alto / medio

| Hallazgo | Detalle | Recomendación |
|----------|---------|---------------|
| **Puertos en `0.0.0.0`** | JW `:8010`, CJ `:3000`, RB `:8086`, Bridge `:8095`, Apache `:80/:443` escuchan en todas las interfaces | En LAN no fiable: firewall Windows → permitir solo Tailscale/subnet de confianza; o bindear a `127.0.0.1` + túnel |
| **Secretos en `.env`** | JW (`SECRET_KEY`, `ADMIN_PASSWORD`), Bridge (`BRIDGE_TOKEN`, `CURSOR_API_KEY`), RB (BingX, DB, Telegram), CJ (email, bridge) | No compartir carpeta htdocs; ACL solo usuario; no subir a git |
| **ACL CodexSandboxUsers** | Algunos `.env` permiten Modify/Read a grupo sandbox | Revisar si ese grupo debe existir en producción local |
| **AnyDesk automático** | Acceso remoto permanente | 2FA / lista blanca / desactivar si no se usa |
| **VS Code Tunnel / OpenVPN / No-IP** | Superficie remota adicional | Auditar qué túneles están activos |
| **`ExecutionPolicy Bypass` en tareas** | Necesario para scripts locales; cualquier malware con la misma técnica también puede | Mantener scripts solo en rutas conocidas; firmar o restringir |

### Riesgo bajo / controlado

| Hallazgo | Nota |
|----------|------|
| OCR ALimpiezas `:8090` en `127.0.0.1` | Bien (solo local) |
| MySQL `:3306` en `127.0.0.1` | Bien |
| Trays con `wscript //B` | No elevan privilegios (`RunLevel Limited`) |
| Credenciales admin JW por defecto en docs antiguas | Cambiar si el puerto es alcanzable desde LAN |

### Checklist rápido

- [ ] Firewall: bloquear 8010/3000/8086/8095 desde IPs externas  
- [ ] Rotar `BRIDGE_TOKEN` / `ADMIN_PASSWORD` si se expusieron  
- [ ] Confirmar AnyDesk y Code Tunnel solo cuando hagan falta  
- [ ] Tras reboot: Task Manager → Inicio → JW/CJ/RB/AL = **Habilitado**  
- [ ] Sin ventanas negras al login  

---

## 6. Cómo verificar tras reiniciar

```powershell
# Trays vivos
Get-CimInstance Win32_Process -Filter "Name='node.exe'" |
  Where-Object { $_.CommandLine -match 'jobsworld_tray|captajaus_tray|royalbroker_tray|alimpiezas_tray' }

# Salud HTTP
@(8010,3000,8086,8090,8095) | ForEach-Object {
  $p=$_; try {
    $u = if($p -eq 8010){"http://127.0.0.1:8010/api/health"}
         elseif($p -eq 8090){"http://127.0.0.1:8090/health"}
         elseif($p -eq 8086){"http://127.0.0.1:8086/api/bot/status"}
         elseif($p -eq 8095){"http://127.0.0.1:8095/health"}
         else {"http://127.0.0.1:3000/"}
    (Invoke-WebRequest $u -UseBasicParsing -TimeoutSec 3).StatusCode
  } catch { "FAIL $p" }
}
```

Re-aplicar reparación:

```powershell
powershell -ExecutionPolicy Bypass -File "C:\xampp\htdocs\JobsWorld\scripts\tray\repair-ecosystem-autostart.ps1" -Apply
```

---

## 8. Post-reboot 2026-08-17 — estabilización

### Qué falló tras reiniciar
- Solo salían **ALimpiezas** y **CaptaJaus**.
- JW/RB no arrancaban: la cadena `wscript → powershell → Start-Process` fallaba en el login frío.
- Sensación de “reinicios”: menús que se refrescan cada 5 s + `pm2 restart` / OCR `-Start` agresivos + watchdog AL.

### Qué se cambió
- VBS de los 4 trays lanzan **node directo** (sin PowerShell), con delays escalonados.
- CaptaJaus: refresh 15 s; boot solo `pm2 start` si offline (no `restart`); sin globos de caída/recuperación.
- ALimpiezas: boot OCR retardado 12 s y solo si sigue caído.
- Watchdog único `EcosystemTrayWatchdog` (5 min); `ALimpiezasTrayWatchdog` deshabilitado.
- JW API: respeta `API_HOST` del `.env` (por defecto `127.0.0.1`).

### Seguridad aplicada
- Firewall **Public**: bloqueo inbound TCP 8010, 3000, 8086, 8095.
- `BRIDGE_HOST=127.0.0.1`.
- ACL `.env`: se intentó quitar acceso de `CodexSandboxUsers` (grupo de sandboxes de Cursor/Codex).
- **Visual Studio Code Tunnel** deshabilitado en inicio (`StartupApproved` = disabled). Estado actual: `tunnel: null`, sin servicio instalado.

### Code Tunnel — para qué sirve
Permite abrir VS Code / Cursor en este PC **desde otro dispositivo vía internet** (túnel Microsoft).  
En este equipo **no estaba activo** (`service_installed: false`). Solo quedaba la entrada de arranque; se deshabilitó para no gastar recursos ni abrir superficie remota.  
Si algún día lo necesitas: `code tunnel user login` + `code tunnel`. Si no: déjalo desactivado.

### ACL `CodexSandboxUsers` — qué significa
Es un **grupo local de Windows** creado por herramientas Cursor/Codex para que agentes en sandbox puedan leer/escribir archivos del proyecto.  
Si un `.env` da permisos a ese grupo, un proceso sandbox podría leer secretos (tokens, BingX, admin).  
Solución: quitar esas ACE y dejar solo tu usuario + SYSTEM + Administrators (`icacls`).


```
Logon Windows
 ├── HKCU\Run (wscript VBS, sin consola)
 │   ├── JobsWorldTray → node jobsworld_tray.js (+ uvicorn :8010)
 │   ├── CaptaJausTray → node captajaus_tray.js
 │   ├── RoyalBrokerTray → node royalbroker_tray.js
 │   └── ALimpiezasTray → node alimpiezas_tray.js
 ├── Startup\RoyalBrokerStartup_silent.vbs → pm2 resurrect (+ royalbroker)
 ├── Tareas AtLogon
 │   ├── JobsWorldSilent (backup)
 │   ├── ALimpiezasAtLogon (XAMPP + OCR)
 │   ├── CursorBridgeAtLogon (:8095)
 │   └── XZonasSupervisorTunnelAtLogon
 └── Servicios: Apache, MySQL, Tailscale, AnyDesk
```
