git log --author=686f6c61 -- hermes-agent
Contribuciones a Hermes Agent
- ossHermes Agent
Teknium recupera mi PR #97466 en #108695 y reconoce expresamente su procedencia. El commit `2bc9ed9f239a7600120840b1ec47a469b3912a03` conserva mi autoría Git y un trailer `Co-authored-by` a mi nombre: representa una sola contribución. El cambio redacta credenciales en errores de las pruebas MCP y en la visualización de cabeceras, con cobertura de CLI y dashboard. El carrier adapta el parche a la organización actual de los módulos. La PR #108695 fue mergeada el 13 de septiembre de 2026 a las 03:49 UTC y este commit está en main. La propuesta original #97466 quedó cerrada al ser sustituida por el salvage, no mergeada por separado; el issue #97460 también quedó cerrado. Propuesta original: https://github.com/NousResearch/hermes-agent/pull/97466.
- ossHermes Agent
En la revisión de aislamiento entre perfiles, Teknium menciona expresamente mi PR #102343 y la considera una mejora razonable de higiene del bloque de variables de entorno en Windows. También precisa que no corrige el enlace de state.db en main y la deja para una línea de trabajo de Desktop. #108074 fue mergeada el 11 de septiembre de 2026, pero no incorpora mi propuesta ni contiene commits con mi autoría o coautoría. El crédito de esta ficha es exclusivamente la mención y valoración técnica de la propuesta. Propuesta original: https://github.com/NousResearch/hermes-agent/pull/102343.
- ossHermes Agent
El commit `53398ff` impide que `inflight.assistant` envuelva las filas estructuradas de un turno reanudado, eliminando la presentación duplicada de reasoning y tool calls. Es uno de los commits de mi PR #76744 que aterrizaron mediante el salvage #77713, con mi autoría Git preservada. Esta ficha acredita exclusivamente la corrección “no sandwich”; los otros commits del carrier tienen artículos propios.
- ossHermes Agent
El commit `dbefd27` endurece el carry del mismo turno: exige una fila con estructura real antes de conservar el estado inflight, evitando falsos positivos sobre transcripciones planas. Aterrizó en main mediante #77713 con mi autoría Git preservada, como parte del salvage de #76744. Se documenta por separado porque introduce una frontera de validez propia en la reconciliación.
- ossHermes Agent
El commit `2ecc1db` acota la eliminación del dump plano al live-tail del turno activo, después del último mensaje del usuario. Así evita que la deduplicación de una reanudación modifique partes históricas ajenas al turno en curso. Aterrizó en main mediante #77713 con mi autoría Git preservada, procedente de #76744.
- ossHermes Agent
El commit `7a4d047`, de @OutThisLife, refactoriza los helpers de reconciliación para compartir una sola terminología y frontera de live-tail. El commit incluye `Co-authored-by: 686f6c61 <github@00b.tech>` y aterrizó mediante #77713. Esta ficha reconoce esa coautoría concreta, separada de los tres commits del mismo carrier en los que conservo la autoría Git principal.
- ossHermes Agent
El commit `8a29703` propaga `prompt_caching.cache_ttl=off` a las rutas de política basadas en stubs, cerrando el último camino que seguía activando caché pese al opt-out. Procede de mi PR #76113 y aterrizó en main mediante el salvage #76622 con mi autoría Git preservada. Los otros tres commits del carrier se documentan como artículos independientes.
- ossHermes Agent
El commit `8ee5174` consolida los stubs usados para desactivar caché alrededor de `blank_cache_policy_stub`, eliminando variantes que podían divergir entre rutas del agente. Aterrizó en main mediante #76622 con mi autoría Git preservada y coautoría de @JoaoMarcos44. Es una contribución separada del wiring posterior de `cache_ttl=off`.
- ossHermes Agent
El commit `8e1a351` preserva explícitamente `None` para `cache_disabled` cuando MoA no dispone de agente, manteniendo la semántica de “sin decisión local” frente a un falso booleano. Aterrizó mediante #76622 con mi autoría Git preservada y cuenta como corrección independiente dentro del mismo carrier.
- ossHermes Agent
El commit `67db870` elimina el import de `pytest` que quedó sin uso tras reorganizar las pruebas de cache-disable. Es un cambio pequeño pero verificable, aterrizado mediante #76622 con mi autoría Git preservada; se presenta como artículo propio conforme al criterio de una contribución por commit.
- ossHermes Agent
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.
- ossHermes Agent
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.
- ossHermes Agent
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, con mi autoría preservada en `bf7c716`. Fixes #79156.
- ossHermes Agent
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, con mi autoría preservada en `0d24c4f`. Fixes #83642. Tests: 20/20, 3 verificados contra sabotaje.
- ossHermes Agent
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.
- ossHermes Agent
El listado del panel de archivos en un remoto con contraseña usaba bearer nativo, pero `saveGatewayFile` montaba siempre la partición de cookies OAuth: una sesión sin cookies podía listar y recibir 401 al descargar. El commit `cce0427`, escrito por @OutThisLife con mi coautoría, alinea la descarga con la autenticación REST y añade regresiones de bearer, cookie y session-token. Aterrizó mediante #90546 y sustituye a #89013. Fixes #88987.
- ossHermes Agent
El commit `b7b6ee0`, de @OutThisLife con `Co-authored-by: 686f6c61`, extrae y nombra `resolveGatedDownloadAuth`. La función hace explícita la precedencia bearer-luego-cookie y el fallback a session-token para gateways token/local, permitiendo probar la decisión sin ejecutar toda la descarga. Aterrizó mediante #90546 como contribución separada del fix funcional `cce0427`.
- ossHermes Agent
El commit `4ccc4b6` evita que el cold-start posterior a `hermes update` lance un gateway independiente cuando Desktop ya controla el ciclo de vida mediante `serve`. `_desktop_owns_gateway_lifecycle()` consulta el spawn ledger y los procesos Python de la instalación, y protege tanto la planificación como el spawn final. Procede de mi PR #76745 y aterrizó mediante #92698 con mi autoría Git preservada. Fixes #76129.
- ossHermes Agent
El commit `f406777`, de Teknium con mi coautoría, añade una clasificación por tokens/subcomando para los procesos del plano de control y una E2E live del skip de cold-start. Endurece la corrección #76129 frente a falsos positivos y valida el comportamiento real en Windows. Aterrizó mediante #92698 como follow-up separado del commit `4ccc4b6` que conservo como autor.
- ossHermes Agent
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 vencía mientras `running` seguía activo, el reaper terminaba sin reprogramarse. Mi fix rearma el periodo de gracia hasta poder liberar la sesión y añade una regresión con temporizador simulado. Aterrizó mediante #93361 con mi autoría preservada en el commit de main `30a3766`. Fixes #85578.
- ossHermes Agent
El commit `a837c7a` introduce `asRpcError()` y encauza `host.requestProfile` y `host.request` por una normalización común, de modo que un rechazo plano con `name` numérico ya no derriba React 19 al intentar ejecutar `trim()`. Procede de mi PR #94621 y aterrizó mediante #95016 con mi autoría Git preservada. La protección adicional para objetos frozen/sealed corresponde a otro commit y tiene artículo propio. Fixes #94471.
- ossHermes Agent
El commit `961635c` completa la normalización de errores copiando los rechazos inseguros en un `Error` nuevo en vez de mutar `name`. Conserva el valor original en `cause` y cubre objetos frozen/sealed y valores cross-realm. Aterrizó mediante #95016 con mi autoría Git preservada. Teknium confirmó en #94621 que esta copia de frozen rejections era exactamente la solución correcta.
- ossHermes Agent
El commit `0c69cac` termina en el quit únicamente el `hermes serve --isolated` remoto cuya propiedad puede demostrar mediante `backend.lock.json` y `cleanupStale`, antes de cancelar el forward y cerrar SSH. También impide que callbacks de reconexión levanten otro backend durante la salida. Procede de mi PR #94628 y aterrizó mediante #95085 con mi autoría Git preservada. La instrumentación específica del skip en Windows corresponde a otro commit y tiene artículo propio. Fixes #91668.
- ossHermes Agent
El commit `8085614` añade el log específico que explica cuándo y por qué Desktop en Windows omite el teardown de una conexión SSH remota. La señal permite distinguir un skip deliberado de una limpieza perdida al investigar procesos supervivientes. Aterrizó mediante #95085 con mi autoría Git preservada, separado del commit `0c69cac` que implementa la terminación del backend poseído.
- ossHermes Agent
El commit `f1755cc` hace que «Cerrar todo» elimine también los tiles del bucket compartido `__bots_workspace__` en `hermes.desktop.sessionTiles.v2`, impidiendo que `$sessionTiles` los rehidrate al cambiar de perfil o reiniciar Desktop. Procede de mi PR #94213 y aterrizó mediante #95648 con mi autoría Git preservada. La protección frente a mutaciones durante el recorrido pertenece al commit `0ecbf1c`, documentado aparte. Fixes #94137.
- ossHermes Agent
El commit `0ecbf1c` hace que `closeAllOpenSessionTiles()` copie los ids del grupo antes de comenzar a cerrar paneles. Evita que las mutaciones del layout tree durante el recorrido omitan pestañas y deja intactos los tiles de otras zonas. Procede de #94213 y aterrizó mediante #95648 con mi autoría Git preservada, como contribución separada de la persistencia base de Close All.
- ossHermes Agent
El commit `bdbb41b` adapta los tests rescatados del staleness probe a la firma actual de `kickoff`, basada en un objeto de opciones. No introduce otra función de producto, pero sí es un commit de integración verificable con mi autoría Git preservada en #95648. Se presenta como artículo propio por el criterio de una contribución por commit, sin confundirlo con una tercera corrección funcional de Close All.
- ossHermes Agent
Corregido el duplicado de presentación que aparecía cuando un grupo conservaba una identidad cualificada por una fuente loopback antigua (`127.0.0.1:port`) y Desktop mostraba a la vez el mismo perfil desde «This device». `preferReachableSameNameRows()` descarta únicamente del sidebar la copia inaccesible cuando existe otra alcanzable con el mismo nombre; `$lastRoster`, los asientos del grupo y las menciones mantienen todas las identidades `(connectionId, profile)`. Los ghosts, las filas únicas inaccesibles, dos fuentes vivas con el mismo nombre y las fuentes connect-on-demand conservan su semántica. Mi PR #95371 aterrizó mediante el salvage #95979, mergeado el 27 de agosto de 2026, que revalidó que el bug seguía presente tras las correcciones de cuarentena/no-loopback, acredita expresamente a @686f6c61 y conserva la autoría en el commit `21054b7` de main. La suite original pasó 576 tests y la verificación focalizada del salvage, 45/45. Fixes #92286.
- ossHermes Agent
Corregido el bug por el que reabrir un Bot Chat ya montado mostraba una instantánea obsoleta: las entregas `deliver="bot-chat:<profile>"` escribían en la sesión canónica mientras su WebSocket estaba cerrado, pero `forceResume` enviaba la reanudación por la ruta principal y `resumeTile` devolvía el runtime caliente sin consultar REST. La reapertura explícita llama ahora a `resumeTile({ refreshTranscript: true })`, obtiene los mensajes más recientes y los reconcilia con la caché del tile, publicando solo si cambia; los remontajes ordinarios conservan la ruta rápida. Mi PR #96215 aterrizó mediante el salvage #96650, mergeado el 28 de agosto de 2026 con crédito explícito y autoría conservada en el commit `6ac193e` de main. La PR original pasó 59 tests focalizados y el salvage, 113/113 más TypeScript limpio. Fixes #96183.
- ossHermes Agent
Corregido el falso disparo de compresión automática en sesiones Codex Responses con compactación nativa y un checkpoint válido. El preflight aplicaba `estimate_request_tokens_rough` al historial durable completo —se observaron unos 1,16 millones de tokens frente a un umbral de 765k— aunque la petición efectiva, podada alrededor del checkpoint, contenía solo unos 110–152k. `estimate_native_responses_preflight_tokens()` reutiliza ahora la misma comprobación de elegibilidad del transporte, convierte el payload, aplica `prune_pre_checkpoint_items()` y estima ese wire; si no puede demostrar la elegibilidad o falla la conversión, mantiene la estimación genérica conservadora. La compresión auxiliar no cambia. Mi PR #96217 aterrizó mediante el salvage #96644, mergeado el 28 de agosto de 2026 con autoría conservada en el commit `e6b4f37` de main. Esta ficha acredita solo ese fix; el refactor posterior de predicados de rutas incluido en #96644 es trabajo de @teknium1. La validación focalizada pasó 97 tests. Fixes #96155.
- ossHermes Agent
Corregido el falso negativo de liveness en perfiles satélite con `gateway.multiplex_profiles` activo. Como esos perfiles no tienen `gateway.pid`, runtime lock ni unidad de servicio propios, `_builtin_gateway_liveness()` devolvía `false` aunque el multiplexor predeterminado estuviera procesando su almacén de cron; seguir el aviso instalaba un gateway de perfil que el guard rechazaba con exit 78 y KeepAlive relanzaba en bucle. El fix extrae `named_profile_served_by_running_multiplexer()` del guard de arranque para compartir exactamente la misma comprobación de PID, configuración, precedencia del entorno y allowlist, y la usa como fallback solo cuando no hay PIDs locales. Mi PR #97558 aterrizó íntegramente mediante el salvage #99441, mergeado el 31 de agosto de 2026 con crédito explícito y autoría conservada en el commit `e703717` de main. El parche mantiene los cuatro archivos y el alcance originales, y la validación focalizada pasó 26 tests. Fixes #97120.
- ossHermes Agent
Cerrada la carrera de reentrada que quedaba en el apagado SSH de Desktop tras #95085. `teardownSshConnection` elimina primero la entrada de `sshConnections` y después espera el kill remoto; entretanto, `backendShutdown.finally()` vuelve a llamar a `app.quit()`, y el segundo `before-quit` interpretaba el mapa vacío como teardown terminado y permitía cerrar Electron antes de completar la limpieza. El fix registra de forma síncrona una única `sshQuitTeardownPromise`, bloquea también cuando esa promesa sigue en vuelo y conserva el límite de seis segundos antes de reintentar el cierre. La matriz de regresión cubre conexiones activas, bootstrap pendiente, mapa vacío con kill en curso, teardown terminado y estado vacío. La PR #95636 fue validada en vivo con Windows Desktop contra un gateway SSH Linux (97 tests pasados, 1 omitido) y mergeada en `main` el 31 de agosto de 2026 como `37fc92a`, con mi autoría preservada. La PR #108186, mergeada el 11 de septiembre de 2026, reconoce expresamente que preserva mi garantía de teardown SSH. Es una referencia adicional a este trabajo previo; los nuevos commits de #108186 no llevan mi autoría ni coautoría. Referencia: https://github.com/NousResearch/hermes-agent/pull/108186.
- ossHermes Agent
Contribución de diseño, diagnóstico y reconciliación técnica para #97963. Mi PR #99657 identificó que `HygieneTurnHoldExceeded` revocaba la admisión del worker separado y armaba un cooldown de 60 segundos: con modelos de resumen que consumen los primeros 10 segundos en reasoning, el sistema quemaba el prefijo en cada turno y la compresión no llegaba a publicarse. Propuse mantener la admisión sin ampliar el límite visible del turno y también detecté que esa frontera de disponibilidad caía en el warning genérico. La PR #99742 de Teknium acredita expresamente ambas aportaciones; el commit mergeado `9de9d76` conserva en `gateway/run.py` el comentario `surfaced by @686f6c61 in PR #99657`. Al revisar el carrier señalé y acepté su mejora decisiva frente a mi parche: conservar la admisión solo tras capturar un watermark seguro y restaurar el retry-after si el worker termina sin commit. Cerré #99657 como superseded. No es un cherry-pick ni un commit mío: la implementación segura de `commit_watermark_fenced` y su callback pertenece a #99742.
- ossHermes Agent
Corregido el título provisional de pestañas restauradas cuyo panel aún no se ha montado y cuya sesión ya no aparece en recientes ni en el árbol de proyecto. Mi PR #94212 aportó dos vías: persistir el título en el tile y consultar por id las pestañas antiguas sin título. La PR mergeada #101260 conserva solo la segunda: `startUnrestoredTileTitleBackfill()` espera a que el gateway esté abierto, busca una vez cada tile sin `runtimeId`, `workspaceTabTitle` ni fila cargada mediante `resolveStoredSession(id, tile.ownerRoute)`, y deja que `$sessions` actualice la etiqueta. Teknium descartó expresamente la persistencia porque `workspaceTabTitle` también identifica el Bot Chat canónico. El commit `8d6a286` de main incluye mi coautoría y la PR acredita el salvage de #94212; esta ficha no atribuye la parte descartada.
- ossHermes Agent
Contribución de diagnóstico, triaje y reconciliación para #100523. Mi PR #100542 fue la primera reclamación: demostró que `message_agent` confirmaba el envío antes de que el subproceso chocara con el bloqueo de propietario único y perdiera el payload, y propuso conservarlo hasta que Desktop liberase la sesión. Al aparecer #100544 señalé públicamente que enrutar el DM por el propietario vivo era mejor producto que esperar al detach. La PR #101293 de Teknium adopta esa dirección: localiza el Bot Chat vivo del perfil y pasa el mensaje por `prompt.submit`; si no puede entregarlo, expone `target_busy` en vez de ocultar el fallo. El commit `d29a793` de main me incluye como coautor y la PR me acredita como “first claimant”. La arquitectura de entrega en proceso procede de #100544 y la implementación final de #101293; esta ficha no presenta como mergeado el polling de mi PR cerrada.
- ossHermes Agent
El commit `0e5ff99` corrige el bucle permanente de «Waiting for gateway connection» provocado cuando `json.dumps(..., ensure_ascii=False)` dejaba un surrogate huérfano en un frame y Starlette lanzaba `UnicodeEncodeError` al codificarlo como UTF-8. `_sanitize_ws_text()` convierte cada payload en texto codificable; si `send_text()` todavía rechaza un frame por ese error, `_safe_send_many()` omite solo ese envío, continúa con los siguientes y no marca el transporte como cerrado. Los demás fallos del socket conservan el cierre defensivo. El cambio añade regresiones para texto limpio, saneamiento, continuidad tras el frame inválido y errores no relacionados. Procede de mi PR #97622 y aterrizó mediante el salvage #101666 con mi autoría Git preservada; esta ficha acredita únicamente mi commit, no el refactor posterior del mantenedor que conecta el transporte al sanitizer compartido.
- ossHermes Agent
El commit de main `c0aaa238f6` sustituye la identidad en memoria del último mensaje contabilizado por una huella de contenido estable y guarda el ancla de consumo en `model_config._usage_anchor`. Así, las recargas del historial desde la base de datos y las sesiones reanudadas en un proceso nuevo pueden recuperar los tokens reportados por el proveedor y estimar solo los mensajes añadidos después. `agent/usage_anchor.py` centraliza la captura, persistencia, restauración y validación; la compresión, la reescritura nativa de Codex y el reinicio de sesión invalidan el ancla, y una restauración con historial incompatible descarta el dato persistido. Procede de mi PR #99585, adaptada a la nueva organización del agente e integrada mediante #104555 con mi autoría Git preservada. `ea731d2f3a` es el SHA del mismo parche en la PR y se contabiliza aquí una sola vez. Esta ficha acredita la persistencia y restauración del ancla; el resto de cambios de #104555 tiene sus propios autores.
- ossHermes Agent
El commit de main `db96c8ced7da`, de FalconOrtiz con `Co-authored-by: 686f6c61`, integra un buzón persistente entre procesos para que el propietario activo del Bot Chat consuma las entregas por su flujo normal de turnos. Conserva identificadores estables, rechaza reutilizarlos con otro contenido, ordena la admisión y guarda recibos terminales inmutables. La entrega queda ligada al perfil, al propietario y al linaje de compresión; espera al turno en curso y a los mensajes humanos en cola, y evita repetir automáticamente operaciones iniciadas o ambiguas tras un reinicio. Aterrizó mediante #105442, que acredita mi trabajo de admisión persistente de #100319 y adapta la propuesta de FalconOrtiz en #101564 sobre el encaminamiento previo de #100544. Esta ficha reconoce mi coautoría en ese commit. #100319 sigue abierto para la cola general de propietarios CLI o no compatibles y sus reintentos posteriores, comportamiento que este merge no incorpora.
- ossHermes Agent
El commit de main `f44b0fd34295a730e217251c0861a601259208b3` trata cada selección como un par (proveedor, modelo). La reconciliación tras Refresh Models comprueba el catálogo del proveedor elegido; conserva la selección si ese proveedor está ausente o sin configurar y solo busca una alternativa cuando su catálogo poblado deja de ofrecer el modelo. La marca de selección actual y la navegación por teclado usan la misma identidad, incluidos nombres y alias personalizados. Incluye regresiones para identificadores compartidos entre proveedores y actualizaciones que no deben llamar a onSelectModel. Procede de mi PR #99575 y aterrizó mediante el salvage #107283, fusionado el 10 de septiembre de 2026, con 686f6c61 como autor Git. El SHA del salvage `550158f35038` corresponde al mismo parche y se contabiliza una sola vez. El mantenedor confirmó la autoría preservada; la PR original y el issue #99389 quedaron cerrados.
- ossHermes Agent
Mi PR #97645 aborda los resúmenes de sesión de Honcho que conservan preámbulos de planificación o bloques de razonamiento y se reinyectan bajo «Session Summary» como memoria fiable. La corrección conserva el cuerpo útil tras el cierre de un bloque think y omite los resúmenes que solo contienen planificación o siguen contaminados. Aplica el saneamiento en la obtención, el formato, honcho_context y la lectura de la caché para impedir que reaparezca contenido antiguo contaminado. Incluye pruebas de regresión del resumen y de la conservación de la ficha del interlocutor en caché. Erosika incorporó este trabajo en #103889 mediante el commit `2b538090bf859a93ab7136edec791d036acbb597`, con mi autoría Git preservada y agradecimiento explícito a @686f6c61 (#97645). El nuevo salvage #109327 de kshitijk4poor recupera #103889 y conserva mi autoría en el cherry-pick `f1f220021c73196ae46987340401e739376a2159`; su descripción reconoce explícitamente a los cinco contribuidores adoptados. A 13 de septiembre de 2026, #109327 sigue abierta: este trabajo continúa pendiente de merge en main. Es la misma contribución de saneamiento, contabilizada una sola vez; los demás cambios de ambos carriers pertenecen a sus respectivos autores. Propuesta original: https://github.com/NousResearch/hermes-agent/pull/97645. Primer carrier: https://github.com/NousResearch/hermes-agent/pull/103889.
- ossHermes Agent
Commit `4346cdcdc21b` (16 de septiembre 2026 20:11 UTC). El enumerador `list_profile_names()` — usado por cron Bot Chat delivery targets y kanban hints — listaba todos los directorios bajo profiles/, así que un proceso stale recreando un directorio borrado (`profiles/<name>/logs`, `state.db`) hacía reaparecer `bot-chat:<name>` como objetivo de entrega. Los otros enumeradores (`list_profiles`, `profiles_to_serve`, `HostedRoomService.local_profiles`) ya respetaban el tombstone; éste ahora usa el mismo walk live-only. Verifica con probe real (fresh HERMES_HOME, create/delete real, cron_delivery_targets real): base lista `bot-chat:worker` tras el re-mkdir stale; head lista solo default/ops. Co-autoría confirmada con ryrenz.
- ossHermes Agent
Commit `8717a0bd3975` (16 de septiembre 2026 20:06 UTC). Las filas de trabajos en pane Scheduled jobs (Routines) son grid items con `min-width: auto` por defecto, así que un título largo nowrap hacía la fila ~530px dentro del pane 250px. El overflow del pane clippaba el Switch y el control de borrado fuera del borde derecho y el título se cortaba sin ellipsis (#91623); la etiqueta next-run en la línea de metadata se perdía igual (#89534). `min-w-0` en la card y en ambas líneas deja la fila encogerse al pane, el título hace ellipsis, y el schedule pill / next-run label wrapean en dos líneas. Cierre de pane con ✕ recordaba dismissal en `hermes.desktop.dismissedPanes.v1` y nunca mostraba el pane de nuevo — solo existe por estar registrado mientras Bot Mode está on screen, así que el pane se iba hasta reset layout completo (#102224). El plugin ahora dropea ese Close recordado cada vez que registra el pane (nuevo door `host.undismissPane` — un-dismiss + adopt solo), así reentrar en tab Bots trae el pane de vuelta como collapsed right-edge tab. Verificado con e2e/bot-routines-pane-narrow.spec.ts (falla en origin/main, pasa aquí); el Switch del row togglea el job en lugar (#95031 ya fixed por 253b9d78c). Co-autoría confirmada con MicroWearld y worlldz.
- ossHermes Agent
Commit `43ab8c91a0f3` (17 de septiembre 2026 17:49 UTC, author directo). Salvage de #114317, issue #114290, mergeado en main como PR #114960 (18 sep 17:45 UTC). El commit anterior `444c75c10a` movía titleBar.center al header del workspace en full pages, pero los componentes se remontaban en cada navegación chat→página→chat. El fix: titlebar-controls.tsx renderiza el slot incondicionalmente en cada ruta no-overlay, y page-owned controls (kanban board switcher) obtienen su propia WORKSPACE_PAGE_HEADER_AREA. Mantiene la intención original sin remontajes. Tests: titleBar.center component effect setup runs once, cleanup never across `/` → `/skills` → `/`, permanece visible en page route. Salvage aprovecha la propuesta original de #114317 sin descartar la mejora de layout de `444c75c10a`. Co-salvage con teknium bajo #114960.
- ossHermes Agent
Commit d32dacf85564 (28 ago 21:42 UTC, author directo 686f6c61). Mergeado en PR #114968 (19 sep 03:37). La proyección ui_meta cortaba mensajes en 1200 chars sin señal de que continuaba. Fix: marca los payload truncados manteniéndose dentro del presupuesto de mensaje existente. Permite al cliente UI saber que el mensaje está incompleto sin causar desbordamiento de layout.
- ossHermes Agent
PR #117106 (abierta, 1 commit, author directo 686f6c61). Salvage de #97467 (#97316 original). Cuando una consolidación batch falla, la respuesta no devuelve todo el store — solo el estado consolidado. Reduce overhead y latencia. Crítico en sesiones con gran cantidad de memoria histórica que requiere consolidación frecuente.
- ossHermes Agent
PR #126357 (merged 1 oct 06:57, author 686f6c61). fix(desktop): Linux tray survives minimization. En entornos Wayland/X11 Linux, minimizar la ventana principal podía destruir la bandeja de notificación (system tray), cortando el acceso rápido a controles de sesión. El fix preserva la bandeja durante minimización y restauración. Crítico para workflows de background/session-keep-alive en desktop Linux.
- ossHermes Agent
PR #121507 (merged 1 oct 07:57, 2 commits author 686f6c61: 0a7a0f8d4e84, 645bb146c681). fix(desktop): tray flag for dbus-native 0.15 compatibility. El manejo del system tray en Linux pasó a usar dbus-native 0.15, que requiere un flag específico en la configuración del tray. Sin el fix, el sistema tray no se inicializa correctamente en nuevos entornos. Los 2 commits: primero el flag, segundo la prueba de cobertura con mock de dbus.
- ossHermes Agent
PR #128419 (merged 30 sep 02:14, co-authored 686f6c61, SHA b5a5ef7c1683). fix(desktop): local paths survive session restart. Los paths locales de caché, temporal, etc. configurados en desktop se perdían al reiniciar. El fix preserva estos paths en la configuración persistente, evitando que el sistema intente usar paths por defecto que podrían estar en áreas protegidas o ser inaccesibles.
- ossHermes Agent
PR #127248 (merged 30 sep 02:45, co-authored 686f6c61, SHA 7327624d3500). fix(tags): add final punctuation to MEDIA tag display. Las etiquetas de categoría MEDIA se mostraban sin puntuación final, causando inconsistencia visual con otras etiquetas. El fix añade puntuación uniforme. Contribución menor de formato pero mejora coherencia de UI.
- ossHermes Agent
PR #101076 (merged 30 sep 03:56, author 686f6c61, SHA 7ceda46ba43a). fix(git): clean dead markers from remote-tracking branch updates. Cuando git actualiza ramas remotas (fetch/pull), puede dejar marcadores muertos en las refs si una rama fue eliminada. El fix limpia estas refs huérfanas, evitando que se acumulen. Crítico para repositorios de larga vida con muchas ramas efímeras.
- ossHermes Agent
PR #128394 (merged 1 oct 06:05, co-authored 686f6c61, SHA 55102bbcbfc2). fix(ui): show first message when tapping "show earlier" button. Al cargar mensajes anteriores, el sistema scrolleaba pero no mostraba claramente el primer mensaje. El fix asegura que el primer mensaje del historial queda visible después de presionar «mostrar anteriores».
- ossHermes Agent
PR #130048 (merged 1 oct 08:01, author 686f6c61, SHA 9a9680218c58). fix(shortcuts): selection shortcut only works on active tab. El atajo de teclado para seleccionar todo (Ctrl+A) respondía en todas las pestañas simultáneamente. El fix limita el shortcut solo a la pestaña active, evitando selecciones accidentales en background tabs.
- ossHermes Agent
PR #130015 (merged 1 oct 09:06, 3 commits author 686f6c61: 743d3a4119e3, d753222ee793, c356d1df829d). feat(themes): Classic palette support and Thought rendering. Se añadió soporte para la paleta de colores Classic, con renderizado especial para bloques de reasoning (Thought). Los 3 commits: primero definición de paleta, segundo integración en tema, tercero renderizado de Thought blocks.
- ossHermes Agent
PR #129955 (merged 1 oct 09:34, 2 commits author 686f6c61: 348cf3336086, 7d997e8fc08b). feat(ui): response cards for single and multiple answer modes. Introducción de componentes de tarjeta específicos para respuestas único o múltiple. Las tarjetas se adaptan al modo de respuesta: presentación compacta para respuesta única, layout de grid para múltiples respuestas. Los 2 commits: primero componente de tarjeta, segundo integración en flujo de respuesta.
- ossHermes Agent
Commit 0aed3e9a (27 sep, author 686f6c61). fix(worktree): fetch origin bases with a tracking refspec. En PR #126191 (merged 28 sep). Cuando se recuperan bases origin para worktrees, el fetch no usaba un tracking refspec, causando que las ramas remotas no se rastrearan correctamente. El fix añade tracking refspec en el fetch para que origin/* branches se registren y persistan. Crítico para clonas estrechas (narrow clones) con checkouts anclados en tag donde el remote branch tracking es fundamental para el resolución de branches.
- ossHermes Agent
Commit 4296bc6e (25 sep, author 686f6c61). fix(desktop): skip the managed CLI in the Linux launcher. En PR #126650 (merged 28 sep, OutThisLife integrador). El launcher de Linux en desktop intenta usar el CLI gestionado (managed CLI) de Hermes, pero en algunos entornos esto causa conflictos de versión o de instalación. El fix detecta y salta el CLI gestionado, usando en su lugar el CLI del sistema disponible. Permite que el launcher de desktop funcione en distribuciones Linux con instalaciones alternativas o sin el managed CLI.
- ossHermes Agent
Commit 36bab6f98d (24 sep, co-authored 686f6c61). test(state): drive the Restart Manager scan through an injected rstrtmgr. El test de cobertura del Restart Manager (gestor de reinicio de procesos) inyecta un objeto rstrtmgr mockeado para probar toda la lógica de escaneo de reinicio sin depender de comportamiento real del sistema. Aumenta cobertura de código y determinismo de tests en CI. Crítico para auditar que restarts se detectan y se manejan correctamente en estado.
- ossHermes Agent
Commit 4033c97d35 (24 sep, author 686f6c61). fix(xai): honor model.base_url when the pool row is still the registry host. Cuando xAI configura un model.base_url customizado pero la fila del pool aún apunta al registry host, el cliente debe honrar el base_url personalizado, no usar el del registry. Fix asegura que se respeta la configuración del usuario incluso cuando hay inconsistencia entre pool row y base_url. Crítico para deployments que usan registros remotos con endpoints customizados.
- ossHermes Agent
Commit 67900a0b30 (21 sep, author 686f6c61). fix(sessions): spare pinned rows in the startup orphan sweep. El barrido de sesiones huérfanas en el arranque (cleanup de sesiones sin propietario o tareas) incorrectamente cerraba también sesiones fijadas (pinned), que están deliberadamente persistidas. El fix excluye las sesiones fijadas del barrido, permitiendo que se restauren en el siguiente arranque. Fundamental para sesiones de larga duración que necesitan persistencia garantizada.
- ossHermes Agent
PR #120312 (merged Sep 23, 2026, co-authored 686f6c61, SHA 5fb9ec7). fix(cron): a pinned job never falls back to the global fallback chain. Cierra #111805 y #105183. Cuando un trabajo cron tiene proveedor, modelo o URL propios (pinned), no debería caer en la cadena de fallback global de otro proveedor. El fix más estricto: un cron pinned no camina ninguna cadena de respaldo global si su proveedor/modelo/URL es distinto. Antes aceptaba un fallback si el modelo era el mismo. Incluye test de control portado en el commit.
- ossHermes Agent
PR #120750 (merged Sep 23, 2026, co-authored 686f6c61, SHA d7e4b9d1). fix(desktop): keep the boot probe waiting while a cold-starting backend is alive. Cierra #96213. La sonda de boot (diagnostic que arranca al iniciar desktop) no esperaba correctamente a que un backend en arranque en frío terminara de iniciar. El fix mantiene la sonda esperando mientras el backend frío está vivo, evitando desconexiones prematuras y fallos de probe durante cold-start. Incluye limpieza de test al desmontar proveedor de idioma (sin afectar presupuesto global de 30s de la sonda).
- ossHermes Agent
PR #114232 (merged Sep 21, 2026). fix(gateway): retain partial answers after returned errors. Co-authored-by: 686f6c61 + Jeffgithub0029 + brooklyn. SHA cf2ab2a2. El gateway descartaba respuestas parciales cuando ocurría un error de completación, perdiendo datos válidos ya transmitidos. El fix preserva el flag de respuesta parcial en completion frames fallidos y mantiene un replay body cuando no llegan text deltas. Cubre reproducciones de OpenCode terminal-stream (#85724) sin alterar guardas de routing existentes. Adaptado desde #76112.
- ossHermes Agent
PR #117490 (author 686f6c61, SHA db87dbc9). fix(cli): treat credential-resolution 429 as quota, not auth. Fixes #117482. El CLI trataba errores 429 (rate limit/quota) como fallos de autenticación, causando mensajes de error confusos. El fix reclasifica 429 como quota exhaustion, permitiendo que el CLI reintente apropiadamente y devuelva mensajes de error correctos. Crítico para APIs que usan rate limiting estricto.
- ossHermes Agent
Commit reciente (10h ago, author 686f6c61). Cuando una consolidación de memoria falla, no devuelve current_entries en la respuesta — reduce overhead y latencia. Crítico en sesiones con gran histórico que requieren consolidación frecuente.
- ossHermes Agent
Commit Sep 13 (author 686f6c61). fix(honcho): omit reasoning-contaminated session summaries. Cuando los resúmenes de sesión se generan desde sesiones con reasoning mode, puede contaminarse con información que no debería estar en el resumen. El fix omite resúmenes contaminados. Preserva integridad del histórico de sesiones.
- ossHermes Agent
Commit Sep 10 (author 686f6c61). fix(desktop): keep model picker on the selected provider. Cuando el usuario selecciona un proveedor en el model picker, la selección no se retenía después de navegación o refresco. El fix preserva la selección de provider a través de sesiones. Mejora UX evitando reseteos involuntarios.
- ossHermes Agent
Commit Sep 6 (author 686f6c61), salvage #99585. feat(compression): usage anchor survives DB reloads and process restarts. El anchor de compresión (punto de referencia para saber cuánto se comprimió) no sobrevivía a reloads de base de datos o restarts del proceso. El fix garantiza que el anchor persiste, permitiendo que el sistema de compresión de contexto siga funcionando correctamente sin pérdida de estado. Crítico para sesiones largas donde el contexto se comprime iterativamente.
- ossHermes Agent
PR #117496 (abierta, salvage de #117353). 2 commits author directo 686f6c61: a1d2c9a746a3 + 70440f08862d. Fix(backup): detiene el archivado del directorio de credenciales browser_profiles del Browser Use CLI. Problema: cuando se archivan respaldos, los perfiles del navegador (con credenciales almacenadas) se incluían, exponiendo datos sensibles. Solución: excluye browser_profiles de los archives. El segundo commit scopa la exclusión solo a raíces de profile-home para evitar conflictos. Resuelve #117346 con enfoque salvage de #117353.
- ossHermes Agent
Commit c89be4c52d (4 sep 15:15 UTC, author directo 686f6c61). Salvage de #102967. El child de cron bot-chat heredaba el cwd del scheduler; cuando ese directorio se removía (kanban worker cuyo workspace scratch fue limpiado por completion cleanup), el child moría en ensure_project_root_on_path con FileNotFoundError. El fix: _run_bot_chat_turn pinea el cwd del child al home del target (HERMES_HOME), que la lane ya verificó existe. ensure_project_root_on_path ahora resuelve entradas tolerando un cwd ausente, así cualquier invocación hermes desde un directorio muerto aún inicia (segunda mitad de #102941). Tests conducen el entry point CLI y el delivery spawn seam desde un cwd eliminado.
- ossHermes Agent
PR #116916 (abierta, 2 commits, author directo 686f6c61). Salvage de #102967 (#102941 original). Cuando el directorio de trabajo del scheduler se borra, la entrega de bot-chat no falla — el CLI puede iniciar desde un directorio que ya no existe sin error. Maneja gracefully el caso de stale cwd references y permite recuperación automática. Resiliencia crítica en deployments donde directorios de trabajo se reciclan o se limpian.
- ossHermes Agent
Teknium mergeó mi propuesta de cola residual (PR #100319) en el commit `5d8390d1a4b33d65beff6afbafeb6ffc9424060c` (PR #111273, 15 de septiembre de 2026 00:29 UTC). El mensaje del commit contiene "Credits 686f6c61's residual queue proposal in #100319" y el body del PR menciona "Credits @686f6c61 for #100319". El cambio implementa gestión de turnos never-started con claim persistencia y drenaje ordenado por admisión después de release, manteniendo la autoridad de receipts de supported-owner existentes. Soporte para cron fallback a custom-root y live-owner delivery en ciclos posteriores. El fix no agrega retry general de subprocess fallidos (deliberadamente: un child fallido/timeout puede haber ejecutado ya). No hay trailer Co-authored-by; el crédito es exclusivamente en texto del commit y body del PR.