git log --author=686f6c61 --external
Contribuciones Open Source
- ossOrca
Problema: `orchestration check` devolvía éxito vacío mientras el inbox seguía con correo de un Run anterior. El mapa de supervisión #15190 cita el trabajo.
Solucion: En un host con varios Runs, el comando que el producto pide ejecutar (`orca orchestration check`) respondía `ok: true` y `count: 0` en el Run ligado al panel, mientras `inbox` seguía mostrando no leídos de un Run previo y `check --run <otro>` devolvía `consumer_fenced`. La PR #14751 añade el campo opcional `crossRunUnread` en el resultado de `check`, resuelto por `run_coordinator_handles` (la columna viva se limpia al reasignar el panel). El issue de seguimiento #15190, que cartografía el bucle de supervisión de orquestación, nombra a @686f6c61 entre los intentos abiertos de ese mapa.
TypeScript · Orchestration · RPC · SQLite
- ossHermes Agent
Problema: En la app de escritorio, al reanudar una sesión a mitad de turno el dump inflight se pintaba como texto plano y duplicaba las filas estructuradas (reasoning y tool-call).
Solucion: Corregido el bug por el que el gateway proyectaba inflight.assistant como texto plano junto a las partes estructuradas del turno, duplicándolo al cambiar de sesión. El fix deja de proyectar el dump plano cuando el tail del turno ya tiene estructura, acota la supresión al live-tail tras el último mensaje del usuario y exige una fila con estructura para el carry same-turn, con tests de regresión. La PR original (#76744) se cerró sin fusionar y el mismo trabajo aterrizó en main vía #77713 (salvage con autoría en los tres commits del fix). Publicado en «The Herald Release» (Hermes Agent v0.20.0 / v2026.8.3), en cuyos créditos de contribuidores figuro.
TypeScript · Desktop · LLM
- ossHermes Agent
Problema: El ajuste prompt_caching.cache_ttl=off se ignoraba en las rutas de Mixture of Agents (MoA) y en los stubs de fallback, que seguían aplicando caché de prompts.
Solucion: Corregido el bug por el que la desactivación de la caché de prompts (prompt_caching.cache_ttl=off) no se respetaba en las rutas de Mixture of Agents ni en los stubs de fallback. El fix propaga la desactivación a esas rutas. La PR original (#76113) se cerró y el mismo trabajo aterrizó en main vía #76622 (salvage con la autoría), dentro del ciclo de la v0.20.0.
Python · LLM · Prompt Caching
- ossHermes Agent
Problema: Chore de atribución: añade el mapeo de email del contributor (github@00b.tech → 686f6c61) para que la auditoría de atribución pase cuando los commits cherry-picked de los salvages llegan a main.
Solucion: Chore de infraestructura de atribución en el repo de Hermes Agent: se añade el archivo contributors/emails/github@00b.tech con el mapeo a 686f6c61, preparándolo antes del salvage de la PR #76113 (cache_ttl=off / stubs de MoA) para que la auditoría de atribución de contribuidores pase cuando los commits cherry-picked aterrizan en main. Sin ese mapeo, los audits que comprueban que los commits del salvage pertenecen a un contributor registrado podrían no reconocer la autoría de los fix.
Infra · GitHub · Attribution · OSS
- ossHermes Agent
Problema: Bug de entrega fragmentada en el gateway: en respuestas largas sin payload, el envío final se duplicaba o se tragaba. Diagnóstico independiente acreditado en la corrección que entró en main.
Solucion: En el gateway, la entrega fragmentada de respuestas largas sin payload duplicaba o se tragaba el envío final. Abrí la PR #78556 corrigiendo el mismo problema de forma independiente. La corrección que entró en main (#79669, mergeada) cierra mi PR y me acredita de forma explícita por el diagnóstico independiente del bug; el código fusionado fue el de otro contribuidor, con mi diagnóstico reconocido en los créditos.
Python · Gateway · LLM
- ossHermes Agent
Problema: La rotación por rate-limit ponía en cuarentena la clave equivocada: baneaba durante días una credencial de fallback sana en vez de la realmente agotada, porque el pool entry id del agente quedaba obsoleto tras refrescar credenciales del entorno.
Solucion: Corregido el bug por el que, al adoptar una credencial del entorno a mitad de ejecución, `_try_refresh_env_client_credentials` no llamaba a `sync_credential_pool_entry_id()` y el agente seguía apuntando al pool entry anterior; ante un 429, `mark_exhausted_and_rotate` resolvía por `credential_id` (ignorando el `api_key_hint` discrepante) y ponía en cuarentena la clave sana durante días mientras la agotada seguía viva. El fix actúa en tres capas: rebind del pool entry id justo tras adoptar la credencial del entorno (run_agent.py), preferir el `api_key_hint` cuando discrepa del `credential_id` (agent/credential_pool.py) y tests de regresión en ambas capas (79/79 en verde). La PR original (#79180) se cerró sin fusionar y el mismo trabajo aterrizó en main vía #82149 (salvage cherry-picked con la autoría preservada). Fixes #79156.
Python · Credential Pool · Rate Limiting · LLM
- ossHermes Agent
Problema: El rewrite automático de endpoint en las llamadas auxiliares reescribía /anthropic → /v1 también para pasarelas solo-Anthropic (Bailian) y para rutas con api.minimax, rompiendo compresión y visión con 404. Salvage de mi PR #83782 sobre main, con la autoría preservada.
Solucion: El rewrite automático del endpoint en `_to_openai_base_url` reescribía `/anthropic` → `/v1` para cualquier host, lo que rompía las pasarelas Anthropic-only como Bailian (`/apps/anthropic` pasaba a `/apps/v1` → 404) y producía falsos positivos cuando `api.minimax` aparecía en la ruta. La política se invierte a una allowlist de hosts dual-surface (familia MiniMax; se conserva el mapeo ZAI `/paas/v4`): las pasarelas Anthropic-only mantienen su ruta. El fixup de esta PR ancla el marcador al host vía urlparse (coincidencia exacta o sufijo de subdominio). Es la completación a nivel de clase del fix puntual #85466: alcanza los call sites de iteración auxiliar y la rama de API-key donde no hay `api_mode` en scope, algo que los guards por sitio no podían. La PR original (#83782) se cerró sin fusionar y el mismo trabajo aterrizó en main vía #85532 (salvage con la autoría preservada en el commit del fix). Fixes #83642. Tests: 20/20, 3 verificados contra sabotaje.
Python · Gateway · Endpoint Rewrite · LLM
- ossHermes Agent
Problema: Diagnóstico de los dos defectos del spool de transcript en la recuperación tras reinicio (orden de reproducción y fidelidad de campos), acreditado en la PR que los corrige: la reproducción en orden de nombre de archivo rompía la adyacencia tool-call/respuesta y se perdían campos estructurados.
Solucion: Mi PR #78323 (fix(state): verify FTS rebuild write path; spool pending-cap overflow) detectó y diagnosticó correctamente los dos defectos del spool de transcript: el bug de orden (la recuperación recorre sorted(glob("*.json")) y los nombres uuid4 se reinsertan fuera de orden tras una ráfaga de spools por pending-cap) y el bug de fidelidad (su bucle append_kwargs es el intento directo del bug de fidelidad). La PR #84785, abierta por otro contribuidor como supersede de #78323, acredita explícitamente ese diagnóstico ("found both of these defects first, and diagnosed both correctly") y explica que no es un rebase mecánico sino trabajo sobre el código actual: el commit de0f20ff05b aterrizó el spool runtime de forma independiente y reescribió las regiones que tocaba mi PR, dejando ambos defectos aún vivos en main. La corrección ordena por (ts, seq, filename) espejando drain_transcript_spool, preserva los campos estructurados y para la reproducción de la sesión tras el primer fallo (10 tests nuevos). No es un merge propio: es crédito de issue/diagnóstico.
Python · Gateway · Spool · Diagnóstico
- ossHermes Agent
Problema: En Desktop, el panel de archivos de un remoto con contraseña listaba con el bearer nativo pero Download devolvía 401: saveGatewayFile iba siempre por la partición de cookies OAuth.
Solucion: El listado del panel de archivos en un remoto con contraseña usa `hermes:api` (bearer nativo, luego cookies de la partición OAuth), pero la descarga pasaba por `saveGatewayFile`, que siempre montaba esa partición de cookies. Una sesión nativa sin cookies podía listar y aun así recibir 401 al descargar. La PR #90546 (mergeada el 20 de agosto de 2026) unifica save/read con la misma decisión bearer-luego-cookie que el REST, nombra `resolveGatedDownloadAuth` y añade tests que fijan bearer primero, luego cookie, y session-token para token/local. Sustituye a #89013. Crédito primario a @686f6c61 en el cuerpo de la PR y coautoría en los dos commits del fix. Fixes #88987.
TypeScript · Desktop · Auth · Electron
- ossHermes Agent
Problema: En Windows, hermes update podía arrancar un gateway independiente junto a Desktop cuando quedaba una entrada de autoinicio antigua, acumulando procesos que competían por puertos y estado. El fix respeta que Desktop sea el propietario del ciclo de vida.
Solucion: Corregido el bug por el que el cold-start posterior a `hermes update` se basaba en «existe un artefacto de autoinicio y no se detecta un PID de gateway», sin saber que Desktop ya controlaba el ciclo de vida mediante su proceso `serve`. `_desktop_owns_gateway_lifecycle()` comprueba primero el spawn ledger y usa como fallback los procesos Python de la instalación, descartando planos de control huérfanos; la condición protege tanto la planificación previa como la comprobación inmediatamente anterior al spawn. Mi PR original #76745 se cerró al aterrizar el trabajo en la PR de rescate #92698, que acredita expresamente a @686f6c61 y conserva mi autoría en el commit `4ccc4b6` de main. La versión fusionada endurece además la clasificación por subcomando y se validó con 9 tests focalizados, 4 pruebas live en Linux y 10 en Windows. Fixes #76129.
Python · Windows · Desktop · Process Lifecycle
- ossHermes Agent
Problema: Una sesión WebSocket desconectada durante un turno podía quedar inmortal en memoria: el reaper consumía su único temporizador mientras seguía activa y nunca volvía a comprobarla. El fix reprograma la comprobación hasta que el turno termina.
Solucion: Corregido el leak por el que una sesión separada de su WebSocket durante un turno podía permanecer indefinidamente en `_sessions`, con `ended_at` a NULL y el agente en memoria. `_schedule_ws_orphan_reap` armaba un único temporizador; si este vencía mientras `running` seguía activo, `_ws_session_is_orphaned()` devolvía false y el reaper terminaba sin programar otra comprobación, mientras las rutas de TTL y capacidad también excluían sesiones en ejecución. El fix de mi PR original #85598 rearma el mismo periodo de gracia para sesiones desconectadas que continúan trabajando y permite que una ejecución posterior las libere cuando el turno ya ha terminado, con una prueba de regresión mediante temporizador simulado. El trabajo aterrizó en main dentro de la PR consolidada #93361, que acredita expresamente a @686f6c61 y conserva mi autoría en el commit `66420e0`. Fixes #85578.
Python · Gateway · WebSocket · Sessions
- ossHermes Agent
Problema: El panel Routines se caía al recibir rechazos JSON-RPC con un name numérico: React 19 intentaba ejecutar trim() sobre ese valor y ocultaba el error original. El fix normaliza esos rechazos como Error sin mutar el objeto recibido.
Solucion: Corregido el fallo por el que una petición gateway/IPC rechazada con un objeto plano —por ejemplo, `{ name: -32000 }`— hacía que el formateador de errores de React 19 lanzase `(e.name || "").trim is not a function` y derribase el panel Routines en vez de mostrar su estado «Could not load cronjobs». `requestForBot()` encauza ahora las dos rutas de despacho (`host.requestProfile` y `host.request`) a través de `asRpcError()`, que admite valores de otros realms, crea un Error nuevo para rechazos inseguros, conserva el original en `cause` y funciona también con objetos frozen o sealed. La PR original #94621 se cerró al consolidarse el trabajo en la PR de rescate #95016, que acredita expresamente a @686f6c61 y conserva la autoría en los dos commits que aterrizaron en main (`a837c7a` y `961635c`). En #94621, teknium confirmó: «Thanks @686f6c61! The frozen-rejection copy in your second commit was exactly right.» La regresión cubre nombres numéricos, strings, null, objetos congelados y el pass-through de Errors seguros; 561 tests pasan. El issue #94471 quedó cerrado y el tracker de Bot Mode #94726 marca la corrección como FIXED.
JavaScript · Desktop · React · JSON-RPC
- ossHermes Agent
Problema: Al cerrar Desktop después de una sesión SSH, el backend remoto hermes serve --isolated podía quedar vivo, conservando su lockfile y state.db. El teardown termina ahora únicamente el proceso remoto cuya propiedad puede demostrar.
Solucion: Corregida la mitad de fuga de procesos de #91668: el backend SSH se desacopla con setsid/nohup para poder reutilizarse, por lo que cerrar el transporte no lo limpiaba y los procesos `hermes serve --isolated` se acumulaban en el remoto. `teardownSshConnection` lee `backend.lock.json`, reutiliza `cleanupStale` para matar solo un PID verificablemente propio y ejecuta la limpieza remota antes de cancelar el forward y cerrar SSH; el coordinador incorpora además un `shutdown()` terminal para impedir que callbacks de reconexión creen otro backend durante la salida. Mi PR original #94628 se cerró al incluirse el trabajo en el salvage multi-gateway #95085, mergeado el 26 de agosto de 2026, que conserva mi autoría en los commits `28a73f8` y `3c1a170` de main. El salvage excluye correctamente el arreglo no relacionado del composer/timeout-bag y conserva únicamente los dos commits de teardown SSH. Los tests originales pasaron 91/91; la validación conjunta del salvage pasó 247/247 en 12 suites y la auditoría de atribución quedó verde. No se ejecutó una reproducción live contra un host SSH real.
TypeScript · Electron · SSH · Process Lifecycle
- ossHermes Studio
Problema: El estimador de tokens del dashboard no contaba reasoning_content al comprobar el umbral de compresión de contexto, infravalorando el uso por cientos de miles de tokens con payloads thinking de DeepSeek/Kimi.
Solucion: Hermes Studio (el dashboard web de Hermes Agent) infravaloraba el uso de contexto porque su estimador de tokens solo contaba content y tool_calls, ignorando reasoning_content y reasoning. Con payloads de modo thinking (DeepSeek/Kimi), que se devuelven en turnos posteriores, el contexto real se subestimaba por cientos de miles de tokens y la compresión no se disparaba hasta que el upstream fallaba con un HTTP 400. El fix incluye ese contenido en la estimación y añade un test unitario. Mergeado directamente en main.
TypeScript · LLM · Context
- ossllama.cpp
Problema: Anthropic API no soportaba thinking blocks ni signatures para modelos de razonamiento.
Solucion: Añadido soporte para thinking content blocks en la API de Anthropic Messages. Corregidos campos de signature faltantes y eventos duplicados de content_block_start en streaming. Probado con DeepSeek-R1 y Qwen3-Thinking.
C++ · Anthropic API · Streaming
- ossLangChain
Problema: Tool call chunks sin índice no se fusionaban correctamente en streaming, causando errores 422.
Solucion: Corregido bug donde tool_call_chunks sin índice válido no se fusionaban correctamente en streaming con stream_mode="messages". Modificada función merge_lists() para fusionar chunks por id compartido o secuencialmente. Añadidos tests unitarios.
Python · LLM · Streaming
- ossllama.cpp
Problema: Chat templates crasheaban al aplicar filtro |length sobre tipo Undefined en el motor minja.
Solucion: Trazado completo del flujo en el motor minja: claves inexistentes devuelven Undefined (no None), por lo que `is not none` evalúa True y `|length` falla sobre Undefined. Auditados todos los templates en models/templates/, identificados 4 vulnerables (Apriel, DeepSeek-R1-Distill-Qwen-32B, DeepSeek-R1-Distill-Llama-8B, llama-cpp-deepseek-r1) y 8 frágiles. Propuesta corrección en templates (guardia `is defined`) y en engine (registrar length en value_undefined_t).
C++ · Jinja · Minja
- ossMicrosoft Calculator
Problema: Funciones hiperbólicas inversas (sinh^-1, cosh^-1) daban error con valores > 10^100 por validación incorrecta.
Solucion: Análisis del bug donde IsCurrentTooBigForTrig() aplicaba el límite 10^100 indiscriminadamente a todas las funciones trigonométricas e hiperbólicas. Las hiperbólicas inversas son logaritmos disfrazados (sinh^-1(x) = ln(x + sqrt(x^2 + 1))), sin problemas de periodicidad. Propuesta corrección: verificar el flag m_bInv antes de rechazar valores grandes para eximir las inversas hiperbólicas.
C++ · Windows · Math
- ossnuclei-templates
Problema: CVE-2026-26335: RCE en Calero VeraSMART por claves ASP.NET machine keys hardcodeadas.
Solucion: Solicitud de template para detectar CVE-2026-26335 (CVSS 9.8) en Calero VeraSMART (pre-2022 R1). Claves criptograficas ASP.NET compartidas entre instalaciones permiten forjar ViewState malicioso y ejecutar codigo remoto sin autenticacion via deserializacion.
YAML · Security · CVE
- ossOpenRouter SDK
Problema: Sourcemaps faltantes causaban errores en herramientas de build como SWC.
Solucion: Identificado que .npmignore excluía archivos .map a pesar de que tsconfig.json los generaba. OpenAI incluye 844 y Anthropic 296 sourcemaps en sus SDKs. Propuesta solución para incluir los 652 archivos .map.
TypeScript · npm · Build Tools
- ossnuclei-templates
Problema: Plantilla xinclude-injection generaba falsos positivos por regex demasiado permisiva.
Solucion: La regex `root:.*?:[0-9]*:[0-9]*:` matcheaba contenido JavaScript minificado como `PEAM_root:config:123:456:`. Corregida a `root:[^:]*:\d+:\d+:` para restringir a caracteres no-colon y exigir al menos un dígito en UID/GID.
YAML · Regex · Security
- ossLlamaIndex
Problema: DocumentBlock convertía incorrectamente strings vacíos a None en campos opcionales.
Solucion: Corregido bug donde la clase DocumentBlock convertía strings vacíos a None usando evaluación de veracidad de Python. Cambiada lógica `or` por verificaciones explícitas `is None` en campos document_mimetype y title. Añadidos tests unitarios.
Python · LLM · Pydantic
- ossllama.cpp
Problema: Docker Vulkan no detectaba GPUs por falta de librerías libglvnd.
Solucion: Mesa Vulkan ICD no podía inicializar correctamente y vkEnumeratePhysicalDevices() devolvía lista vacía. Añadidas librerías libglvnd0, libgl1, libglx0, libegl1 y libgles2 al Dockerfile.
Docker · Vulkan · Mesa
- osstheHarvester
Problema: Faltaba integración con THC (ip.thc.org) para enumeración de subdominios.
Solucion: Nuevo módulo que integra THC para enumeración de subdominios. API gratuita sin límites de tasa ni clave API. Incluye 24 tests y documentación completa.
Python · OSINT · Security
- ossnuclei-templates
Problema: CVE-2025-34291: Vulnerabilidad CORS en Langflow AI que permite robo de tokens.
Solucion: Template para detectar CVE-2025-34291 en Langflow AI (≤1.6.9). CORS mal configurado refleja cualquier origen con credentials permitidos, encadenado con RCE via /api/v1/validate/code.
YAML · Security · CVE