mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-07-23 16:36:23 +00:00
Widening pass over the whole adapter following the cluster-C16 audit (#51019, #51097, #23676, #23375): every in-memory structure that accumulates per-message, per-user, or per-thread state is now bounded, and every eviction is oldest-first — never arbitrary set-iteration order, which is the #51019 failure mode (bot silently going quiet on the most ACTIVE thread because set.pop-order eviction removed it). Newly bounded: - _approval_resolved / _clarify_resolved (caps 1000): unclicked approval/clarify prompts leaked their double-click-guard entries forever; oldest-insertion eviction via _trim_oldest_dict_entries. - _reacting_message_ids (cap 5000): reaction lifecycle entries leaked when an exception fired between add and finalize; oldest-ts eviction. - _active_status_threads (cap 1000): statuses abandoned by error paths accumulated; oldest-thread-ts eviction so the newest live status is never cleared. - _channel_team (cap 10000): grew with every DM channel the bot ever saw (DM channel IDs are per-user). All four write sites now route through _remember_channel_team; eviction is safe because entries are re-learned from the next event and _get_client falls back to the primary client. - _slash_command_contexts (cap 1000): TTL cleanup only ran on lookup, so contexts whose ephemeral replies never happened accumulated; overflow purges expired entries first, then oldest-stash-first. Converted from arbitrary set-order eviction to oldest-first: - _titled_assistant_threads: keys are (team, channel, thread_ts) — now evicts oldest thread first via _discard_oldest_by_thread_ts. - _thread_rehydration_checked: keys are team:channel:thread_ts[:user] — arbitrary eviction here would re-run an ACTIVE thread's restart rehydration check and re-inject the missed-delta context; now evicts oldest thread first. - _reacting_message_ids uses #51097's _discard_oldest_slack_timestamps. Deliberately NOT bounded (naturally tiny, per-workspace): _team_clients, _team_bot_user_ids, _team_bot_names (one entry per installed workspace), _assistant_threads / _agent_view_contexts / _bot_message_ts / _mentioned_threads / _user_name_cache / _thread_context_cache (already bounded), _dedup (MessageDeduplicator has max_size + TTL internally). New helpers: _trim_oldest_dict_entries (dicts preserve insertion order, so oldest-first is exact) and _discard_oldest_by_thread_ts (chronological sort on the embedded Slack ts for keyed sets). Tests: caps hold under churn, eviction removes OLDEST not arbitrary entries, newest/active entries survive eviction pressure (regression shape for #51019), plus end-to-end paths through _resolve_user_name and _handle_slash_command. Part of the C16 cache-bounds consolidation with #51097 (markoub), #23676 and #23375 (EloquentBrush). Fixes #51019. |
||
|---|---|---|
| .. | ||
| dingtalk | ||
| discord | ||
| feishu | ||
| google_chat | ||
| homeassistant | ||
| irc | ||
| line | ||
| matrix | ||
| mattermost | ||
| ntfy | ||
| photon | ||
| raft | ||
| simplex | ||
| slack | ||
| sms | ||
| teams | ||
| telegram | ||
| wecom | ||