git log --author=686f6c61 -- hermes-agent
Contributions to Hermes Agent
- ossHermes Agent
Fixed the bug where the gateway projected inflight.assistant as plain text next to the turn's structured parts, duplicating it when switching sessions. The fix stops projecting the plain dump when the turn tail already has structure, scopes the suppression to the live tail after the last user message and requires a structure-bearing row for same-turn carry, with regression tests. The original PR (#76744) was closed without merging and the same work landed on main via #77713 (a salvage keeping authorship on the three fix commits). Shipped in "The Herald Release" (Hermes Agent v0.20.0 / v2026.8.3), whose contributor credits list me.
- ossHermes Agent
Fixed the bug where disabling prompt caching (prompt_caching.cache_ttl=off) was not honored on the Mixture of Agents paths nor the fallback stubs. The fix propagates the opt-out to those paths. The original PR (#76113) was closed and the same work landed on main via #76622 (a salvage keeping authorship), within the v0.20.0 cycle.
- ossHermes Agent
An attribution infrastructure chore in the Hermes Agent repo: it adds the contributors/emails/github@00b.tech file mapping to 686f6c61, prepared ahead of the PR #76113 salvage (cache_ttl=off / MoA stubs) so the contributor attribution audit passes when the cherry-picked commits land on main. Without that mapping, the audits that verify the salvage commits belong to a registered contributor could fail to recognize the authorship of the fixes.
- ossHermes Agent
In the gateway, split delivery of long payload-less replies duplicated or swallowed the final send. I opened PR #78556 fixing the same issue independently. The fix that landed on main (#79669, merged) closes my PR and explicitly credits me for the independent diagnosis of the bug; the merged code was another contributor's, with my diagnosis acknowledged in the credits.
- ossHermes Agent
Fixed the bug where, on adopting an env credential mid-run, `_try_refresh_env_client_credentials` did not call `sync_credential_pool_entry_id()` and the agent kept pointing at the old pool entry; on a 429, `mark_exhausted_and_rotate` resolved by `credential_id` (ignoring the disagreeing `api_key_hint`) and quarantined the healthy key for days while the exhausted one stayed live. The fix works across three layers: rebind the pool entry id right after adopting the env credential (run_agent.py), trust the `api_key_hint` when it disagrees with `credential_id` (agent/credential_pool.py) and regression tests at both layers (79/79 passing). The original PR (#79180) was closed without merging and the same work landed on main via #82149 (a cherry-picked salvage keeping authorship). Fixes #79156.
- ossHermes Agent
The automatic endpoint rewrite in `_to_openai_base_url` rewrote `/anthropic` → `/v1` for any host, breaking Anthropic-only gateways like Bailian (`/apps/anthropic` became `/apps/v1` → 404) and producing false positives when `api.minimax` appeared in the path. The policy is inverted to a dual-surface host allowlist (MiniMax family; the ZAI `/paas/v4` mapping is kept): Anthropic-only gateways keep their path. This PR's fixup anchors the marker to the host via urlparse (exact or subdomain suffix match). It is the class-wide completion of the point fix #85466: it reaches the aux-iteration call sites and the API-key branch where no `api_mode` is in scope, which per-site guards could not. The original PR (#83782) was closed without merging and the same work landed on main via #85532 (a salvage keeping authorship on the fix commit). Fixes #83642. Tests: 20/20, 3 sabotage-verified.
- ossHermes Agent
My PR #78323 (fix(state): verify FTS rebuild write path; spool pending-cap overflow) found and correctly diagnosed both transcript-spool defects: the ordering bug (recovery walks sorted(glob("*.json")) and uuid4 names re-insert out of order after a burst of pending-cap spools) and the fidelity bug (its append_kwargs loop is the direct attempt at the fidelity bug). PR #84785, opened by another contributor as a supersede of #78323, explicitly credits that diagnosis ("found both of these defects first, and diagnosed both correctly") and explains it is not a mechanical rebase but work on the current code: commit de0f20ff05b landed the runtime spool independently and rewrote the regions my PR touched, leaving both defects still live on main. The fix orders by (ts, seq, filename) mirroring drain_transcript_spool, preserves the structured fields and stops the session replay after the first failure (10 new tests). Not a merge of my own: it is issue/diagnosis credit.