feat(hooks): emit session:end lifecycle event

Adds session:end hook emitted before session:reset, giving hook authors
a clean teardown signal to persist data or clean up resources before the
session is destroyed.

Based on PR #1564 by bayrakdarerdem (session:start portion was already
on main).
This commit is contained in:
bayrakdarerdem 2026-03-17 04:17:00 -07:00 • committed by teknium1
parent 4433b83378
commit d947a52f54
2 changed files with 11 additions and 3 deletions

View file

@ -8,8 +8,9 @@ Hooks are discovered from ~/.hermes/hooks/ directories, each containing:
Events:
- gateway:startup -- Gateway process starts
- session:start -- New session created
- session:reset -- User ran /new or /reset
- session:start -- New session created (first message of a new session)
- session:end -- Session ends (user ran /new or /reset)
- session:reset -- Session reset completed (new session entry created)
- agent:start -- Agent begins processing a message
- agent:step -- Each turn in the tool-calling loop
- agent:end -- Agent finishes processing

View file

@ -2178,7 +2178,14 @@ class GatewayRunner:
# Reset the session
new_entry = self.session_store.reset_session(session_key)
# Emit session:end hook (session is ending)
await self.hooks.emit("session:end", {
"platform": source.platform.value if source.platform else "",
"user_id": source.user_id,
"session_key": session_key,
})
# Emit session:reset hook
await self.hooks.emit("session:reset", {
"platform": source.platform.value if source.platform else "",