feat: convert proactive triggers to docket perpetual function and remove LoopService
- Convert ProactiveTriggers LoopService to evaluate_proactive_triggers_periodic perpetual function
- Remove LoopService class and run_multiple_services from base.py entirely
- Update test_service_subsets.py to remove ProactiveTriggers from Service class tests
- Delete test_loop_service.py (no longer needed)
- Update CLI and perpetual_services.py docstrings to remove LoopService mentions
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
feat: add generic typing support for Variable.get method
This adds optional explicit typing for the Variable.get and Variable.aget methods,
allowing users to declare the expected type when retrieving a variable:
var = Variable[str].get('my_variable')
The implementation:
- Makes Variable class generic with TypeVar T bounded to StrictVariableValue
- Uses TypeVar default for backward compatibility (unparameterized Variable still works)
- Adds overloads for get/aget to properly type the return value based on whether
a default is provided
- Both sync (get) and async (aget) methods support the same typing behavior
Closes #19752
Co-Authored-By: Nate Nowack <nate@prefect.io>
feat: convert proactive triggers to docket perpetual function and remove LoopService
- Convert ProactiveTriggers LoopService to evaluate_proactive_triggers_periodic perpetual function
- Remove LoopService class and run_multiple_services from base.py entirely
- Update test_service_subsets.py to remove ProactiveTriggers from Service class tests
- Delete test_loop_service.py (no longer needed)
- Update CLI and perpetual_services.py docstrings to remove LoopService mentions
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
feat: convert telemetry service to docket perpetual function
- Replace Telemetry LoopService class with send_telemetry_heartbeat perpetual function
- Use @perpetual_service decorator with run_in_ephemeral=True and run_in_webserver=True
- Extract _fetch_or_set_telemetry_session as standalone function
- On error, log but don't crash (perpetual functions don't have stop())
- Update tests to call functions directly instead of instantiating class
- Update CLI test to expect TaskRunRecorder instead of Telemetry
- Remove Telemetry from Service registry in base.py
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>