Skip to content

feat(gateway): notify users when session auto-resets#2519

Merged
teknium1 merged 1 commit intomainfrom
hermes/hermes-5e6ebebb
Mar 22, 2026
Merged

feat(gateway): notify users when session auto-resets#2519
teknium1 merged 1 commit intomainfrom
hermes/hermes-5e6ebebb

Conversation

@teknium1
Copy link
Copy Markdown
Contributor

Summary

When a session expires (daily schedule or idle timeout) and is automatically reset, the user now receives a notification explaining what happened:

◐ Session automatically reset (daily schedule at 4:00). Conversation history cleared.
◐ Session automatically reset (inactive for 24h). Conversation history cleared.

How it works

  1. _should_reset() now returns a reason string ("idle" or "daily") instead of bool
  2. The reason is stored on SessionEntry.auto_reset_reason
  3. When _handle_message_with_agent() detects was_auto_reset, it sends the notification via adapter.send() before processing the user's message
  4. Excluded platforms (default: api_server, webhook) don't get notifications

Config

session_reset:
  mode: both
  at_hour: 4
  idle_minutes: 1440
  notify: true                              # default: true
  notify_exclude_platforms: [api_server, webhook]  # default

Set notify: false to disable globally. Add platform names to notify_exclude_platforms to suppress for specific platforms (ACP isn't a gateway Platform enum member so it's already excluded).

Changes

  • gateway/session.py: _should_reset() returns reason; SessionEntry.auto_reset_reason field
  • gateway/config.py: SessionResetPolicy.notify + notify_exclude_platforms with from_dict/to_dict support
  • gateway/run.py: notification sent before processing user message, with platform exclusion check
  • 11 new tests

Verification

  • 5913 passed, no regressions
When a session expires (daily schedule or idle timeout) and is
automatically reset, send a notification to the user explaining
what happened:

  ◐ Session automatically reset (inactive for 24h).
    Conversation history cleared.
  Use /resume to browse and restore a previous session.
  Adjust reset timing in config.yaml under session_reset.

Notifications are suppressed when:
- The expired session had no activity (no tokens used)
- The platform is excluded (api_server, webhook by default)
- notify: false in config

Changes:
- session.py: _should_reset() returns reason string ('idle'/'daily')
  instead of bool; SessionEntry gains auto_reset_reason and
  reset_had_activity fields; old entry's total_tokens checked
- config.py: SessionResetPolicy gains notify (bool, default: true)
  and notify_exclude_platforms (default: api_server, webhook)
- run.py: sends notification via adapter.send() before processing
  the user's message, with activity + platform checks
- 13 new tests

Config (config.yaml):

  session_reset:
    notify: true
    notify_exclude_platforms: [api_server, webhook]
@teknium1 teknium1 force-pushed the hermes/hermes-5e6ebebb branch from 5ccf190 to dd82165 Compare March 22, 2026 16:29
@teknium1 teknium1 merged commit cd2280d into main Mar 22, 2026
1 check passed
outsourc-e pushed a commit to outsourc-e/hermes-agent that referenced this pull request Mar 26, 2026
When a session expires (daily schedule or idle timeout) and is
automatically reset, send a notification to the user explaining
what happened:

  ◐ Session automatically reset (inactive for 24h).
    Conversation history cleared.
  Use /resume to browse and restore a previous session.
  Adjust reset timing in config.yaml under session_reset.

Notifications are suppressed when:
- The expired session had no activity (no tokens used)
- The platform is excluded (api_server, webhook by default)
- notify: false in config

Changes:
- session.py: _should_reset() returns reason string ('idle'/'daily')
  instead of bool; SessionEntry gains auto_reset_reason and
  reset_had_activity fields; old entry's total_tokens checked
- config.py: SessionResetPolicy gains notify (bool, default: true)
  and notify_exclude_platforms (default: api_server, webhook)
- run.py: sends notification via adapter.send() before processing
  the user's message, with activity + platform checks
- 13 new tests

Config (config.yaml):

  session_reset:
    notify: true
    notify_exclude_platforms: [api_server, webhook]
aashizpoudel pushed a commit to aashizpoudel/hermes-agent that referenced this pull request Mar 30, 2026
When a session expires (daily schedule or idle timeout) and is
automatically reset, send a notification to the user explaining
what happened:

  ◐ Session automatically reset (inactive for 24h).
    Conversation history cleared.
  Use /resume to browse and restore a previous session.
  Adjust reset timing in config.yaml under session_reset.

Notifications are suppressed when:
- The expired session had no activity (no tokens used)
- The platform is excluded (api_server, webhook by default)
- notify: false in config

Changes:
- session.py: _should_reset() returns reason string ('idle'/'daily')
  instead of bool; SessionEntry gains auto_reset_reason and
  reset_had_activity fields; old entry's total_tokens checked
- config.py: SessionResetPolicy gains notify (bool, default: true)
  and notify_exclude_platforms (default: api_server, webhook)
- run.py: sends notification via adapter.send() before processing
  the user's message, with activity + platform checks
- 13 new tests

Config (config.yaml):

  session_reset:
    notify: true
    notify_exclude_platforms: [api_server, webhook]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

1 participant