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
PR #114968 (abierta, 4 commits, author directo 686f6c61). Salvage de #114352 y #97468. En el espejo de sala (bot chat con una copia remote), cuando los mensajes se truncan por límite de contexto, el member list y room mirror ahora dicen explícitamente "X earlier messages omitted" como nota de trazabilidad. Permite a usuarios entender qué contenido se perdió sin tener que inspeccionar logs. El mensaje de omisión aparece claramente separado del primer mensaje visible, con contador exacto. Trazabilidad crucial en sesiones largas donde el contexto se comprime.
- 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.