feat(hooks): emit session:start and session:end lifecycle events#1432
Open
bayrakdarerdem wants to merge 1 commit intoNousResearch:mainfrom
Open
feat(hooks): emit session:start and session:end lifecycle events#1432bayrakdarerdem wants to merge 1 commit intoNousResearch:mainfrom
bayrakdarerdem wants to merge 1 commit intoNousResearch:mainfrom
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The gateway hook system has had session:start listed in its documentation since day one — but it was never actually emitted. Any plugin author who wrote a hook listening for session:start would get silence. This PR fixes that disconnect and adds a companion session:end event that was also missing.
Changes
gateway/run.py
Emits session:start on the first message of a new session (detected by checking if transcript history is empty)
Emits session:end just before session:reset so hooks can clean up or persist data before the session is destroyed
gateway/hooks.py
Updated docstring to accurately list both new events
Clarified the distinction between session:end (session is closing) and session:reset (new session entry has been created)
Why This Matters
The hook system is designed for extensibility — plugins subscribe to lifecycle events and react accordingly. A session boundary is one of the most fundamental events in any agent system. Without session:start and session:end, plugins have no way to:
Initialize per-session state
Persist session analytics
Send welcome or goodbye messages
Clean up resources when a conversation ends
This is a small but foundational fix for the plugin ecosystem.