fix: decouple system signal events from Telemetry (fixes #4041) #4042
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.
fix: decouple system signal events from Telemetry (fixes #4041)
Summary
This PR fixes issue #4041 where system signal events (
SigTermEvent,SigIntEvent, etc.) were disabled when telemetry was disabled viaCREWAI_DISABLE_TELEMETRY=true.The root cause was that signal registration logic lived entirely inside the
Telemetryclass, which returns early in__init__when telemetry is disabled. This meant@on_signalhandlers would never fire for users who opted out of telemetry.Changes:
SystemSignalManagersingleton class to handle OS signal registration independently of telemetrysystem_events.pymodule import time, ensuring they work regardless of telemetry settingsTelemetrynow subscribes to signal events via the event bus for cleanup, rather than owning the signal handlersReview & Testing Checklist for Human
SigTermEventSigIntEvent) are disabled if Telemetry is disabled, and fragile to signal handler ordering #4041 withCREWAI_DISABLE_TELEMETRY=trueand confirm@on_signalhandlers executeensure_handlers_installedmethod at line 121 insignal_manager.py- it's defined but not implemented (justpass). Decide if this should be implemented or removedRecommended test plan:
Notes