# EQUIPITELLO — Guía lab, IA y despliegue

Documento maestro para los tres proyectos integrados con el **servidor IA** (`192.168.1.16`, Tailscale `100.69.11.89`) y el PC **EQUIPITELLO** (XAMPP, Tailscale `100.78.198.98`).

> **Secretos:** no copies tokens ni contraseñas en este archivo. Usa `CREDENCIALES-LAB.example` → copia local `CREDENCIALES-LAB.local.md` (gitignored) o los `.env` de cada proyecto.

---

## 1. Arquitectura

```
┌─────────────────────────────────────────────────────────────────┐
│  Servidor IA 192.168.1.16 (Tailscale 100.69.11.89)              │
│  · Ollama :11434                                                │
│  · multiagent-supervisor :8787                                  │
│  · Qdrant (RAG)                                                 │
└───────────────────────────┬─────────────────────────────────────┘
                            │ HTTP + X-Supervisor-Token
┌───────────────────────────▼─────────────────────────────────────┐
│  EQUIPITELLO 100.78.198.98 (XAMPP C:\xampp\htdocs)              │
│  · cursor-mobile-bridge :8095  (Mission Control + propose=1)    │
│  · ALimpiezas :80/ALimpiezas + ai-service :8090                 │
│  · captajaus :3000                                              │
│  · xzonas lab Apache :9080                                      │
└───────────────────────────┬─────────────────────────────────────┘
                            │ SSH / SCP (solo sync prod→lab)
┌───────────────────────────▼─────────────────────────────────────┐
│  SiteGround — xzonasvalencia.com (PRODUCCIÓN)                   │
└─────────────────────────────────────────────────────────────────┘
```

**Principio:** los agentes **proponen** cambios (`propose=1` en Bridge). Tú confirmas siempre en producción. Lab xzonas se alimenta solo con sync prod→lab, nunca al revés automáticamente.

---

## 2. URLs y puertos

| Servicio | URL local | URL Tailscale / remota |
|----------|-----------|-------------------------|
| xzonas **lab** | http://127.0.0.1:9080 | — |
| xzonas **prod** | — | https://xzonasvalencia.com |
| Portal IA xzonas (lab) | http://127.0.0.1:9080/ops/lab-ia-portal/xz-lab-console-9k2m/ | **No en prod** (404) |
| ALimpiezas FS | http://127.0.0.1/ALimpiezas | http://100.78.198.98/ALimpiezas |
| ALimpiezas OCR | http://127.0.0.1:8090/docs | — |
| ALimpiezas Agente IA | MobileAiAgent en menú móvil | — |
| Captajaus | http://127.0.0.1:3000/dashboard | — |
| Captajaus IA admin | http://127.0.0.1:3000/dashboard/ai-admin | usuario `admin` |
| Cursor Bridge | http://127.0.0.1:8095 | http://100.78.198.98:8095 |
| Mission Control | http://127.0.0.1:8095/mock/ | — |

**Chat móvil + troubleshooting:** ver [CHAT-MOVIL-BRIDGE.md](./CHAT-MOVIL-BRIDGE.md) (historial IDE, Detener agente, polling móvil).

| Supervisor IA | http://192.168.1.16:8787 | http://100.69.11.89:8787 |
| Ollama | http://192.168.1.16:11434 | http://100.69.11.89:11434 |

---

## 3. Usuarios (referencia — claves en `.env` o script)

| Sistema | Usuario | Dónde se define |
|---------|---------|------------------|
| captajaus operador | `George` | `authController` / BD users |
| captajaus IA admin | `admin` | `ADMIN_USER` / `ADMIN_PASS` en `.env` |
| xzonas portal IA | `admin@xzonasvalencia.com` | BD `anunciantes` + `ops/ia-portal/ensure-ia-admin-anunciante.php` |
| SiteGround SSH | ver `.env.sync` | `xzonassite/ops/db/.env.sync` |
| FacturaScripts | tu usuario FS habitual | XAMPP |

Plantilla de secretos: `cursor-mobile-bridge/docs/CREDENCIALES-LAB.example`

---

## 4. Sync prod → lab (xzonas)

### ¿Qué hace `install-lab-sync-task.ps1 -EveryHours 6`?

**Sí.** Crea la tarea Windows `XZonas-Lab-Sync-Prod` que ejecuta `sync-prod-to-lab.ps1` **sin flags** cada 6 horas:

1. **BD** — dump tier A (17 tablas) vía SSH SiteGround → import MariaDB local `db4wt7omlyltro`
2. **Media** — carpetas `archivos/anuncios/a_{id}` desde prod a lab

Requisitos: `.env.sync` configurado, MariaDB local, Apache lab `:9080`, permisos para tareas programadas.

### Comandos

```powershell
cd C:\xampp\htdocs\xzonassite\ops\db

# Manual completo (BD + media)
.\sync-prod-to-lab.ps1

# Solo BD
.\sync-prod-to-lab.ps1 -DbOnly

# Solo media
.\sync-prod-to-lab.ps1 -MediaOnly

# Verificar BD lab
.\verify-lab-db.ps1

# Automatizar cada 6 h
.\install-lab-sync-task.ps1 -EveryHours 6

# Quitar tarea
.\install-lab-sync-task.ps1 -Uninstall
```

Config: `ops/db/.env.sync` (copiar de `.env.sync.example`). Tablas: `ops/db/tables-tier.json`.

---

## 5. Agentes IA por proyecto

### Conexión al servidor 192.168.1.16

| Proyecto | Cliente | `project_id` RAG |
|----------|---------|------------------|
| captajaus | `supervisorAiService.ts` + `agentMissionService.ts` | `captajaus` |
| ALimpiezas | `SupervisorAiBridge.php` + `MobileAiAgent` | `alimpiezas` |
| xzonas | `ops/lab-ia-portal/` + API missions/deploy | `xzonassite` |

Token supervisor: header `X-Supervisor-Token` — ver `ops/multiagent-supervisor/.env` (`SUPERVISOR_DASHBOARD_TOKEN`) y replicar en cada app.

### Modo semi-autónomo

1. Portal / panel lanza tarea → `recommend` en supervisor
2. Se abre **Cursor Bridge** con `propose=1` (solo propuesta, no apply directo)
3. Revisas diff en Cursor / Mission Control
4. **Lab:** aplicas en `:9080` o local
5. **Prod:** solo tras tu confirmación explícita

### captajaus

```powershell
cd C:\xampp\htdocs\captajaus\lliria-properties-scraper
npm run build
# Reiniciar proceso :3000
```

- Panel: `/dashboard/ai-admin`
- API: `/api/ai-admin/*` (missions, learn, evolve, ingest)
- Historial misiones: `data/agent-missions/missions.jsonl`

### ALimpiezas

```powershell
cd C:\xampp\htdocs\ALimpiezas\tools
.\ai-service-manager.ps1 -Restart
php .\bootstrap-plugin.php
```

- Menú móvil → **Agente IA** (`MobileAiAgent`)
- Ajustes FS `alimpiezas.supervisor_token` = mismo token que supervisor (opcional para RAG ingest)
- OCR aprendizaje: botón «Subir aprendizaje OCR → supervisor»

### xzonas

```powershell
cd C:\xampp\htdocs\xzonassite\ops\ia-portal
php .\ensure-ia-admin-anunciante.php
```

- URL: `http://127.0.0.1:9080/ops/lab-ia-portal/xz-lab-console-9k2m/login.php`
- Login propio (`XZ_LAB_IA_USER` / `XZ_LAB_IA_PASS` en `.env.local`)
- Manifiesto deploy + misiones agente
- Ver `xzonassite/ops/ia-portal/README.md`

---

## 6. Infra compartida (supervisor + bridge)

```powershell
# Supervisor — sync config al servidor remoto
cd C:\xampp\htdocs\xzonassite\ops\multiagent-supervisor\deploy\scripts
.\sync-config-remote.ps1
.\verify-remote-ai.ps1

# Bridge
cd C:\xampp\htdocs\cursor-mobile-bridge
.\cursor-bridge-manager.ps1 -Restart

# Mirror EQUIPITELLO → servidor IA (htdocs)
cd C:\xampp\htdocs\xzonassite\ops\multiagent-supervisor\deploy\scripts
.\setup-f6-mirror-push-equipitello.ps1 -RunNow -IncrementalAll
.\setup-f6-mirror-push-equipitello.ps1 -InstallTask -RunNow -IncrementalAll   # tarea cada 30 min
```

Ingest RAG proyecto (desde Mission Control o API):

```http
POST http://100.69.11.89:8787/api/rag/ingest
X-Supervisor-Token: <token>
{"project":"xzonassite","include_source":true}
```

Proyectos con plantilla: `captajaus`, `xzonassite`, `alimpiezas`, `cursor-mobile-bridge`, etc. (`ops/multiagent-supervisor/config/agent_content_templates/`).

### Mirror htdocs EQUIPITELLO → servidor IA (F6)

Tarea programada actual: `F6-MirrorHtdocsToServer` (cada ~30 min, por defecto solo 3–4 proyectos foco).

| Modo | Comando | Comportamiento |
|------|---------|----------------|
| Foco RAG | `-RunNow` | Solo carpetas en `$FocusProjects` |
| **Incremental todo htdocs** | `-RunNow -IncrementalAll` | Todo `C:\xampp\htdocs`, solo archivos nuevos/modificados |
| Espejo completo | `-RunNow -Full` | `/MIR` — lento, borra en remoto lo que no está local |

**¿Tiene que leer todos los archivos?** Robocopy **enumera** el árbol local para comparar fecha/tamaño, pero **solo transfiere** lo que cambió (`/E` sin `/MIR`). La primera vez puede tardar más; las siguientes son ligeras si hay pocos cambios. Excluye `node_modules`, `.git`, `vendor`, `archivos` pesados, etc.

Reinstalar tarea con todo htdocs incremental:

```powershell
.\setup-f6-mirror-push-equipitello.ps1 -InstallTask -RunNow -IncrementalAll
```

---

## 7. Flujo dev → prod **sin GitHub** (documentado)

### xzonas (único con prod remoto)

| Entorno | Qué contiene | Cómo actualizar |
|---------|--------------|-----------------|
| **Lab** `:9080` | Código local + BD/media clonadas | `sync-prod-to-lab.ps1` |
| **Prod** SiteGround | Código + BD live | Deploy manual |

**Deploy código a prod (manual):**

1. Probar en lab `:9080`
2. Backup: copia carpeta en SiteGround (`public_html` snapshot) o `tar` vía SSH
3. Subir solo archivos cambiados (`scp` / FileZilla / SiteGround git si lo usas aparte)
4. Si falla: restaurar backup de archivos

**Rollback BD prod:** no tocar desde lab. Restaurar dump SiteGround desde panel o backup programado.

**Nunca:** ejecutar sync lab→prod ni importar dump lab en prod.

### captajaus y ALimpiezas (100 % local en EQUIPITELLO)

- Desarrollo = mismo XAMPP / Node
- «Prod» = reinicio de servicios tras `npm run build` o `bootstrap-plugin.php`
- Rollback: copia de carpeta del proyecto (`Copy-Item -Recurse`) antes de cambios grandes

### GitHub (futuro, no activo ahora)

Cuando quieras: repo por proyecto, ramas `main`/`lab`, PR obligatorio para prod. Mientras tanto: snapshots locales con fecha:

```powershell
$dst = "D:\backups\equipitello\xzonassite-$(Get-Date -Format yyyyMMdd-HHmm)"
Copy-Item -Recurse C:\xampp\htdocs\xzonassite $dst
```

---

## 8. Brainstorming — próximos pasos

| Prioridad | Idea | Beneficio |
|-----------|------|-----------|
| Alta | Cola de misiones unificada en Mission Control | Ver captajaus + xzonas + ALimpiezas en un sitio |
| Alta | Webhook «misión completada» Bridge → supervisor | Trazabilidad automática |
| Media | Ingest RAG automático post-sync lab | Agentes con datos frescos |
| Media | Panel FS escritorio para `supervisor_token` | Sin tocar BD a mano |
| Media | Script deploy xzonas prod con lista de archivos + rollback | Menos error humano |
| Baja | Git local bare en EQUIPITELLO | Historial sin GitHub |
| Baja | Eval RAG periódico por proyecto | Medir calidad respuestas agente |

**Regla de oro:** prod xzonas = confirmación humana; lab = campo de pruebas con datos reales clonados.

---

## 11. Plataforma IA multi-proyecto (visión 2026)

### ¿Estamos en el camino?

**Sí**, con fases claras:

| Fase | Estado | Qué hay |
|------|--------|---------|
| 1 — Infra | Hecho | Servidor IA `:8787`, Ollama, Qdrant RAG, Bridge `:8095`, Tailscale |
| 2 — Proyectos piloto | En curso | xzonassite, captajaus, ALimpiezas (tier A) |
| 3 — Mirror código | Parcial | F6 por defecto **solo 4 carpetas**; ver abajo |
| 4 — Chat visitantes WA/TG | Pendiente | `chatbot-unified` + RAG del sitio |
| 5 — Captación scrape | Pendiente | Tras estabilizar lab + políticas |
| 6 — Cambios código auto | Parcial | Misiones + revisión humana (como Cursor) |

### ¿Solo 3–4 proyectos en el servidor?

La tarea programada `F6-MirrorHtdocsToServer` corre **sin** `-IncrementalAll` → solo copia:

`ALimpiezas`, `cursor-mobile-bridge`, `xzonassite`, `captajaus`

El resto de `C:\xampp\htdocs` **no se espeja** hasta que ejecutes:

```powershell
cd C:\xampp\htdocs\xzonassite\ops\multiagent-supervisor\deploy\scripts
.\setup-f6-mirror-push-equipitello.ps1 -InstallTask -RunNow -IncrementalAll
```

`rag_projects.json` ya define **10 proyectos** (incl. chatbot, crm, royalbroker…); el mirror debe alcanzarlos para que el RAG los vea en el servidor.

### Procedimiento estándar por proyecto (tier A / B / C)

1. Entrada en `ops/multiagent-supervisor/config/rag_projects.json`
2. Mirror F6 (`IncrementalAll` o carpeta foco)
3. `remote-ingest-missing.ps1` o ingest desde supervisor
4. Bridge + panel misiones (captajaus `/dashboard/ai-admin`, xzonas portal lab)
5. QA del stack (composer / npm)
6. Documentar en esta guía

**Tier A** (máxima potencia): xzonassite, captajaus, ALimpiezas — agents growth/compliance/ops activos.  
**Tier B**: chatbot, crm, royalbroker — RAG + ops.  
**Tier C**: resto htdocs — solo mirror + ingest bajo demanda.

### Media lab xzonas — fotos 404 con carpetas “OK”

Si `sync -MediaOnly` dice *Faltan: 0* pero hay 404: la carpeta `a_{id}` existe con **fotos viejas** y la BD (sync reciente) apunta a otros nombres.

```powershell
cd C:\xampp\htdocs\xzonassite\ops\db
.\sync-prod-to-lab.ps1 -MediaOnly -MediaRepair
```

Repite hasta vaciar la cola (máx. 80 carpetas por ejecución).

### Docker — liberar espacio (leer antes de tocar nada)

**No purgues Docker en ambos equipos a la vez.** Son situaciones distintas:

| Máquina | Docker | Qué hacer |
|---------|--------|-----------|
| **Servidor IA `192.168.1.16`** | **Crítico** (supervisor, Qdrant) | Solo auditoría `docker system df`. Prune muy controlado. **Backup Qdrant** antes de volúmenes. |
| **EQUIPITELLO** | Opcional (XAMPP es lo principal) | Si tienes Docker Desktop y no lo usas, ahí puede haber GB reclaimables. Si no hay Docker, este paso no aplica. |

Script (preparado, **no ejecutado**): `deploy/scripts/docker-purge-safe.ps1 -WhatIf` en **cada** máquina por separado.

Detalle: `ops/multiagent-supervisor/docs/ESTADO-ACTUAL-2026-06.md` §11.

### Agents, WhatsApp y entrenamiento (expectativas realistas)

- **Este chat Cursor no entrena** al agent del supervisor; son sistemas distintos.
- El agent en WhatsApp/Telegram **podrá** responder con RAG del proyecto cuando conectes `chatbot-unified` al supervisor (`:8787`) con contexto del visitante.
- **No sustituye** a un SEO humano ni garantiza posición #1; sí puede auditar, proponer cambios y ejecutarlos **tras tu OK** (portal lab / PR / deploy manual).
- **Comercializable** como “plataforma de agents por proyecto” cuando F6 + RAG + chat + procedimiento deploy estén cerrados en los 3 pilotos.

---

## 9. Checklist tras cambios

- [ ] `npm run build` (captajaus) y reinicio `:3000`
- [ ] `php bootstrap-plugin.php` (ALimpiezas)
- [ ] `verify-lab-db.ps1` tras sync
- [ ] `verify-remote-ai.ps1` si tocaste supervisor
- [ ] Probar `/health` supervisor y Bridge desde Tailscale móvil

---

## 10. Rutas de archivos clave

| Área | Ruta |
|------|------|
| Esta guía | `cursor-mobile-bridge/docs/EQUIPITELLO-LAB-IA.md` |
| **Inventario completo (jun 2026)** | `xzonassite/ops/multiagent-supervisor/docs/ESTADO-ACTUAL-2026-06.md` |
| **Roadmap plataforma agents** | `xzonassite/ops/multiagent-supervisor/docs/ROADMAP-PLATAFORMA-AGENTS-AI.md` |
| Sync xzonas | `xzonassite/ops/db/` |
| Portal IA xzonas | `xzonassite/ops/lab-ia-portal/`, `ops/ia-portal/README.md` |
| captajaus IA | `captajaus/.../src/routes/aiAdminRoutes.ts` |
| ALimpiezas agente | `ALimpiezas/Plugins/ALimpiezasMobile/Controller/MobileAiAgent.php` |
| Supervisor | `xzonassite/ops/multiagent-supervisor/` |
| Bridge | `cursor-mobile-bridge/` |
