# CaptaJaus — BrandPack + Agente Propose→Accept→Bridge

Contrato alineado con [JobsWorld](../../JobsWorld/docs/) v2.6: presets JSON, cola de propuestas y ejecución vía Cursor Bridge (`project=captajaus`).

## BrandPack

Presets en `data/brand/presets/`:

| id | name | Uso |
|----|------|-----|
| `captajaus` | CaptaJaus | Marca principal (default) |
| `lliriaprops` | LlíriaProps | Enfoque comarca Llíria |
| `captia` | Captia | SaaS agencias Valencia |
| `partner` | Partner Agency | White-label |

Marca activa: `data/brand/active.json` (se crea al primer acceso).

Variables CSS inyectadas en layout: `--brand-primary`, `--brand-accent`, `--brand-bg`, `--brand-fg`, etc.

### API

| Método | Ruta | Auth |
|--------|------|------|
| GET | `/api/brand/active` | Público |
| GET | `/api/brand/presets` | Sesión |
| POST | `/api/brand/activate` `{ "preset_id": "lliriaprops" }` | Admin IA |

## Agente — Propose → Accept → Bridge

Cola JSON: `data/proposals.json`.

Flujo:

1. **Generate** — seeds scraper/marketing/brand (+ LLM supervisor si responde).
2. **Accept** — admin acepta → POST Bridge `/api/chat` con prompt enriquecido.
3. **Reject** — marca como rechazada.

### API (admin IA)

| Método | Ruta |
|--------|------|
| GET | `/api/agent/bridge/status` |
| GET | `/api/agent/proposals` |
| POST | `/api/agent/proposals/generate` |
| POST | `/api/agent/proposals/:id/accept` `{ "wait": false }` |
| POST | `/api/agent/proposals/:id/reject` `{ "reason": "..." }` |

## Variables de entorno

```env
SUPERVISOR_BASE_URL=http://192.168.1.16:8787
SUPERVISOR_DASHBOARD_TOKEN=...
CURSOR_BRIDGE_URL=http://100.78.198.98:8095
CURSOR_BRIDGE_TOKEN=...          # opcional; fallback SUPERVISOR_DASHBOARD_TOKEN
CURSOR_BRIDGE_PROJECT=captajaus  # default captajaus
CURSOR_API_ENABLED=true          # false desactiva ejecución Bridge
```

No commitear secretos. Usar `.env` local.

## UI

`/dashboard/ai-admin` (usuario `admin` / rol `ia_admin`):

- **BrandPack** — selector de preset + activar.
- **Cursor Bridge** — estado online/config.
- **Propuestas** — inbox Accept/Reject/Generate.

## Cómo probar

```bash
cd c:\xampp\htdocs\captajaus\lliria-properties-scraper
npm run build
npm run dev
```

1. Login como admin → `/dashboard/ai-admin`.
2. `GET http://localhost:3000/api/brand/active` — debe devolver preset `captajaus`.
3. Activar otro preset desde UI o:
   ```bash
   curl -X POST http://localhost:3000/api/brand/activate \
     -H "Content-Type: application/json" \
     -H "Cookie: captajaus.sid=..." \
     -d '{"preset_id":"lliriaprops"}'
   ```
4. `GET /api/agent/proposals` (con sesión admin) — seeds si vacío.
5. `POST /api/agent/proposals/generate` — nuevas propuestas.
6. `POST /api/agent/proposals/{id}/accept` — requiere Bridge URL + token en `.env`.
7. `GET /api/agent/bridge/status` — health del Bridge.

## Archivos principales

- `data/brand/presets/*.json`
- `src/services/brandService.ts`
- `src/services/proposalsService.ts`
- `src/services/bridgeExecService.ts`
- `src/routes/brandRoutes.ts`
- `src/routes/agentOpsRoutes.ts`
- `public/js/ai-admin-panel.js` (UI extendida)
