Imported from miguelgarglez/miguelgarglez.github.io (
chat-worker/AGENTS.md). Install upstream withnpx skills add miguelgarglez/miguelgarglez.github.io --skill chat-worker. Copyright stays with the author.
AGENTS.md
Contexto: Worker de Cloudflare que hace streaming SSE hacia un proveedor LLM OpenAI-compatible para responder preguntas sobre el perfil profesional. Se consume desde el sitio Astro en GitHub Pages.
Estructura
src/index.ts: handler principal, CORS, validacion de origen, streaming.src/agent/: runtime determinista del agente de perfil.src/knowledge/profile-facts.ts: facts criticos que no deberian fallar (puesto actual, contacto, stack, ubicacion).src/knowledge/profile-data.ts: bloques largos de perfil y CV.src/knowledge/projects.ts: proyectos estructurados.src/knowledge/memories.ts: memorias publicas curadas.test/profile-agent.test.ts: regresiones de retrieval del agente.wrangler.toml: config del worker.
Reglas de CORS
- Produccion: se permite
https://miguelgarglez.comyhttps://miguelgarglez.github.io. - Desarrollo local: habilitar
DEV=trueen el entorno para permitirlocalhost. - Requests sin
Originse bloquean en prod; siDEV=true, se permiten para facilitarcurlen dev.
Rate limiting
- Limite en memoria: 20 requests por minuto por IP.
- Usa
CF-Connecting-IP(fallback aX-Forwarded-For). - Responde
429con headersRetry-AfteryX-RateLimit-*. - Es best-effort: no se comparte entre instancias y se resetea al reciclar el worker.
Proveedor LLM OpenAI-compatible
- Secret obligatorio:
LLM_API_KEY. - Variables requeridas:
LLM_PROVIDERLLM_BASE_URLLLM_MODEL
- Proveedor actual: opencode Zen.
- Base URL actual:
https://opencode.ai/zen/v1. - Modelo actual: configurado por
LLM_MODEL(mantener gpt-5.4-nano/opencode Zen si sigue siendo el modelo productivo elegido). - Mantener
stream: truepara UX de chat. DEV=truepermite CORS local y respuestas con detalle de errores upstream.- No usar variables
OPENROUTER_*en este Worker. - No incluir payload propietario de OpenRouter (
provider,models,allow_fallbacks, etc.).
Runtime agentic
- El Worker usa
runProfileAgent()para clasificar audiencia/intencion y seleccionar contexto. - Mantener una sola llamada LLM por mensaje.
- No introducir tool loops, KV, D1, Vectorize o MCP runtime sin una razon clara.
- El contexto se compone de facts criticos, bloques de perfil, proyectos y memorias.
- Si cambia contenido del sitio o posicionamiento profesional, actualizar
src/knowledge/*. - Para mantener alineados prompts visibles, knowledge y tests, seguir
../docs/cv-chat-agent-maintenance.md. - La experiencia RAG debe describirse como exposicion ligera y practica del Google GenAI Intensive de 5 dias con capstone, no como experiencia RAG productiva profunda.
Tests
- Ejecutar desde la raiz:
npm run test:profile-agent. - Estos tests no llaman al LLM; validan que
runProfileAgent()entrega el contexto correcto. - Anadir regresiones cuando se detecte una pregunta importante que seleccione mal el contexto.
Notas
- Evitar dependencias extra; mantener el worker simple.
- No exponer claves en frontend.