Skip to content

Latest commit

 

History

History
116 lines (88 loc) · 4.14 KB

File metadata and controls

116 lines (88 loc) · 4.14 KB

Optimal Focus Duration Recommender - Implementation Complete

Summary

Successfully implemented a new agentic feature that analyzes your past distraction patterns to recommend optimal focus block durations. This replaces the "close app" feature with something more useful and personalized.

What Was Implemented

1. Core Analysis Engine ✅

  • File: src/focus_guardian/ai/focus_duration_analyzer.py (NEW)
  • Analyzes historical sessions to find first distraction times
  • Calculates mean and median statistics
  • Recommends 75% of typical first distraction time (configurable)
  • Minimum recommended duration: 5 minutes

2. Database Enhancements ✅

  • File: src/focus_guardian/core/database.py
  • Added get_first_distraction_time(session_id) - gets seconds until first distraction
  • Added get_sessions_with_distractions(limit) - gets completed sessions with distractions

3. Configuration System ✅

  • Files:
    • config/default_config.json - Added 4 new config keys
    • src/focus_guardian/core/config.py - Added 4 new getter methods
  • Settings:
    • focus_analyzer_enabled: true
    • focus_analyzer_min_sessions: 3
    • focus_analyzer_lookback_days: 30
    • focus_analyzer_recommendation_factor: 0.75

4. Session Manager Integration ✅

  • File: src/focus_guardian/session/session_manager.py
  • Added focus_analyzer instance variable
  • Initializes analyzer on startup
  • Added get_focus_duration_recommendation() method for UI

5. UI Display ✅

  • File: src/focus_guardian/ui/main_window.py
  • Added focus_recommendation_label widget to dashboard
  • Added _update_focus_recommendation() method
  • Displays personalized recommendation message
  • Shows automatically when app loads (if sufficient data available)

6. Module Exports ✅

  • File: src/focus_guardian/ai/__init__.py
  • Added FocusDurationAnalyzer to exports

How It Works

  1. On app startup, queries database for last 30 days of completed sessions
  2. For each session with distractions, calculates time until first distraction
  3. Computes statistics (mean, median)
  4. Recommends: median_time * 0.75 (75% for safety margin)
  5. Displays personalized message in Dashboard tab

Example Output

💡 Based on your past 5 sessions, your typical first distraction 
occurs around 16 minutes. We recommend 12-minute focus blocks to 
maximize your productivity.

What Users Will See

Dashboard Tab

  • A highlighted box with the recommendation (blue left border)
  • Visible only when sufficient data exists (3+ sessions)
  • Updates automatically as more sessions are completed

Configuration

  • All settings in config/default_config.json
  • Can disable: "focus_analyzer_enabled": false
  • Can adjust lookback window, min sessions, safety factor

Benefits

  1. Replaces problematic feature: No macOS permissions issues, more reliable
  2. Data-driven: Based on actual user behavior, not guesswork
  3. Personalized: Each user gets recommendations based on their patterns
  4. Actionable: Gives specific time suggestions (e.g., "12 minutes")
  5. Non-intrusive: Just displays a recommendation, doesn't force behavior
  6. Improves over time: Gets more accurate as user completes more sessions

Files Created/Modified

Created (1 file):

  • src/focus_guardian/ai/focus_duration_analyzer.py
  • FOCUS_DURATION_ANALYZER.md (documentation)

Modified (5 files):

  • src/focus_guardian/core/database.py
  • src/focus_guardian/core/config.py
  • src/focus_guardian/session/session_manager.py
  • src/focus_guardian/ui/main_window.py
  • config/default_config.json
  • src/focus_guardian/ai/__init__.py

Total Lines Added: ~350 lines

Testing Notes

  • Requires at least 3 completed sessions with at least one distraction each
  • Check logs for: "Generated focus recommendation: X minutes"
  • If no recommendation appears: not enough historical data yet
  • Can manually test by running focus sessions and checking recommendations

Next Steps

To test this feature:

  1. Launch the app
  2. Complete at least 3 sessions with distractions
  3. Look for the recommendation in the Dashboard tab

The recommendation will automatically appear when you have sufficient data!