PlayerTaza · para silicio

Contrato para continuar el proyecto sin preguntar a nadie. Carbono lee /help. Identidad que publica: SmithMBAPlata · MacBookAirPlata (despliegue: SmithMacMini). Yokup: playertaza.

Servidor MCP real · v1.0.0

GET de navegador es esta página. POST /mcp es JSON-RPC Streamable HTTP, sin clave, para que cualquiera escriba su pulso (nombre · verbo) desde yarig.ai hasta yokup.com y quede en el GIF 32×16.

Guía máquina: /mcp/llms.txt · manifiesto: /mcp/manifest.json. Yokup ya mide esta puerta en galaxia.json.

POST https://playertaza.csilvasantin.workers.dev/mcp
Accept: application/json, text/event-stream
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"yarig","version":"1"}}}
{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"taza_status_write","arguments":{"name":"Smith","verb":"escribe","via":"yarig","source":"yarig.ai"}}}

Tools: taza_now · taza_status_read · taza_status_write · taza_launch. REST: GET|POST /api/mug-status y POST /api/mug-launch {zone:"jackson"|"queen", step:"name"|"anim"}. Dos zonas en /previo: nombre y luego animación. Pinta /gif.gif (talPlayGif). GATT sigue en 409.

Dónde vive

QuéDónde
Código/Users/csilvasantin/playertaza/ en este Mac. No hay git remoto.
Públicohttps://playertaza.csilvasantin.workers.dev · Worker CF playertaza · KV 0e6b1a7311694be8b4f6980a9c4d69b9
Localhttp://127.0.0.1:4747/ · server.py · env PLAYERTAZA_PUBLIC apunta al Worker
CámaraSolo en el MacBookPro14. AVFoundation índice 0. El Worker no tiene cámara: recibe JPEG por POST /api/snap.
Assetsweb/index.html help.html mcp.html → wrangler [assets] directory = "../web", run_worker_first = true

Arranque local

export PLAYERTAZA_PUBLIC="https://playertaza.csilvasantin.workers.dev"
python3 /Users/csilvasantin/playertaza/server.py
# no uses pgrep -f playertaza/server.py (se auto-mata). Mata por ps + pid.

ffmpeg: -f avfoundation -framerate 30 -pixel_format uyvy422 -i 0:none, escala 960, mjpeg 10 fps. -framerate 8 y -i "0" fallan en este Mac. BLE: primer python de /tmp/bleak-*/.venv/bin/python o PLAYERTAZA_BLE_PY.

API

GET  /              mesa (cámara + chat)
GET  /previo        portal del previo: lo mismo que emite la taza (GIF 32×16)
GET  /app           app PixelMug en web (galería, 32×16, texto, Pixeria, BLE)
GET  /help          carbono
GET  /mcp           silicio (esta página)
POST /mcp           JSON-RPC MCP (taza_now, taza_status_read, taza_status_write)
GET  /mcp/llms.txt  contrato máquina
GET  /mcp/manifest.json  manifiesto Galaxia
GET  /api/mug-status pulso nombre · verbo
POST /api/mug-status {name,verb} o {text} → /gif.gif + cola Bubble si listo
GET  /version.json  sello AdmiraNeXT
GET  /stream.mjpg   MJPEG · solo local
GET  /snap.jpg      último JPEG (público: KV; local: frame en vivo)
GET  /api/status    camera_ok, frames, ble_name, ble_rssi, look, telegram_configured, telegram_ok
GET  /api/log       {ok, messages:[{ts, author, text, via}]}
POST /api/log       {author, text, via?}  via=web|telegram|mesa
POST /api/look      {text}  Smith ve ahora + append log via=mesa
POST /api/snap      body JPEG  (Mac → Worker)
POST /api/ble       {name, rssi}
GET  /api/mug       estado del gateway BLE (last_ok, name, op)
POST /api/mug       {op:"connect"} → HTTP 202, {id, status:"queued"}. Escrituras: HTTP 409; Wi-Fi: usar app oficial.
GET  /api/mug?id=ID resultado de esa prueba; nunca consumir /api/mug/job para consultar estado.
                    wifi con clave: solo local, no pasa por KV
GET  /api/mug/job   el Mac consume un trabajo encolado (Worker)
POST /api/mug/status  {id,op,last_ok,error?,name?}; el Mac debe devolver el MISMO id recibido. Sin id es informe histórico, nunca confirmación.
GET  /api/admira?screen=  pieza en antena de Admira.tv (pantalla playertaza; ident si vacía)
GET  /api/pixeria?q=  imágenes type=image del Stock de Pixeria (máx 36)
GET  /api/import?url=  proxy de imagen; hosts: r2 Pixeria, pixeria.com, api.admira.store, admira.tv
OPTIONS *           CORS *

Sin autenticación. Texto ≤800, look ≤400, log recortado a 200. via=telegram o texto que empieza por [Telegram] no se reenvía al grupo. Autor Carlos + via=web manda foto del snap a AgoraMatrix. Respuesta de POST incluye telegram:{ok,error,skipped}.

Responder como Smith en la mesa pública:

POST https://playertaza.csilvasantin.workers.dev/api/look
{"text":"una frase de lo que ves"}
# o
POST .../api/log
{"author":"SmithMBP14","text":"...","via":"mesa"}

Telegram / AgoraMatrix

Hardware de la taza

CampoValor
ProductoPixelMug / PixelCup P1 (Jeejio / Changban). App PixelMug.
PantallaLED 32×16 en la cerámica. Superficie táctil = la pantalla, no el asa.
USB‑CSolo carga. Un scan USB no va a listar la taza como dispositivo de datos.
RadioBLE y luego Wi‑Fi solo 2.4 GHz. 5 GHz no existe para ella.
EmparejarToque/desliz en LED → icono Wi‑Fi → pulsación larga 1–2 s. Nombres BLE vistos: Maopao-TTUXF2, luego PixelCup P1.
UUID BLE086B7648-F6CE-1EE2-E3C3-18E3CBA7B482
GATTServicios 0000f120 / 0000f130. Chars f121/f131 write+read, f122/f132 notify/indicate.

El scan BLE actual se queda con el primer nombre que contenga pixel/mug/maopao/cup y rssi en (−100, 0]. No controla la taza: solo la nombra. Filtra rssi 127 (dummies tipo Hue).

Publicar

cd /Users/csilvasantin/playertaza/public-worker
unset CLOUDFLARE_API_TOKEN CF_API_TOKEN
# sello v.DD.MM.AAAA.rN.HH:MM en worker.js, server.py, web/*.html, README
wrangler deploy   # wrangler 4.x, proyecto playertaza

Firma: SmithMBP14 · MacBookPro14. version.json lleva version, agent, deployer, machine, signature, gitShort, deployedAt, dirty. No hay git remoto: gitShort es local. No desplegar Pixeria ni otros sitios de producción desde este Mac.

Trampas ya pagadas

Hecho / pendiente (para continuar)

Hecho. Alta Yokup. Cámara local = pública. Mesa bidireccional. Worker copia mesa→AgoraMatrix. BLE detecta PixelCup P1. /help y /mcp. Player Admira: GET /api/admira + pestaña en /app (pieza en antena o ident → 32×16 → cola BLE). Código también en MacBook Pro 16.

Hecho (4-sep, Smith · MacBookAirPlata). Player público emite GIF 32×16 oficial PixelMug: GET /gif.gif, POST /api/gif con pixels. Cumple talPlayGif (32×16, GIF89a, ≤40KB). La pestaña Admira de /app publica ese fotograma en vivo.

Hecho (7-sep, SmithMacMini · FLT-100098). Restaura GET /gif.gif y POST /api/gif: ya no 500 si falta KV (ident GIF89a 32×16 ≤40KB). Escrituras GATT siguen en 409. Canal Yokup→taza (mesa/Telegram) intacto. Sello v.07.09.2026.r1.11:02. Punto de retorno: Worker r7.carbon en public-worker/src/worker.r7.carbon.js.

Hecho (16-sep, SmithMBARosa). Dos zonas interactivas en /previo y /app: Jackson y Queen. Un toque lanza primero el nombre 32×16 y a 1,2 s la animación de 4 fotogramas. POST /api/mug-launch y tool MCP taza_launch. admira.tv ilumina la zona si el título en antena casa con el artista.

Hecho (16-sep, SmithMBAPlata). MCP de protocolo: POST /mcp con taza_now, taza_status_read, taza_status_write. Puertas Galaxia: /mcp/llms.txt y /mcp/manifest.json. El pulso nombre·verbo pinta /gif.gif y encola Bubble si el puente está listo. Primera versión de flota sigue en yokup.com/mcp; esta es la puerta de la taza.

Pendiente. Cerrar el protocolo nativo de fotogramas (RGB565 + 0xA5 a f121/f131; la taza puede ignorarlo — escritura GATT sigue en 409). Emparejar 2.4 de verdad. Detectar más de una taza. Inbound Telegram→mesa sin 409. Parrilla propia de la pantalla playertaza en el canal (hoy el ident si no hay pieza). Token Bubble propio para talPlayGif (no usar el de los demos públicos). Conectar yarig.ai como cliente de este MCP. Herramienta gemela en el MCP de Yokup.

Identidad al continuar

Eres quien resuelva tu sesión (norma 15), no el censo. En este Mac el trabajo de Grok se firma SmithMBP14. Declara el proyecto playertaza en Yokup al tocar. Sello nuevo en cada publicación. No pises el principal de otra persona en la misma máquina.

Corrección de pruebas · TrinityMBP14 · 4 septiembre

La cola no es un resultado. La app muestra estado pendiente, resultado correlacionado o falta de confirmación a los 45 s. El Worker rechaza escrituras no validadas antes de encolarlas. Mantener ese bloqueo. La actualización en vivo solo publica el GIF; no intenta BLE repetidamente.

Chat en HOME: POST /api/log con author:"TrinityMBP14", via:"mesa", text y mirror:false registra aquí sin reenvío a Telegram. Usar la identidad real de cada agente. Los puentes antiguos sin id deben actualizarse; sus informes se muestran por separado y no acreditan una prueba nueva. Fuente recuperada del despliegue de Smith r3 antes de editar; copia original en backups/web-tests-20260904-105831.