Pass raw health metrics to AI instead of hardcoded correlations
- Replace HealthService.analyzeCorrelations() with computeHealthAverages() - Remove hardcoded threshold-based correlation analysis (8k steps, 7hrs sleep, etc.) - Pass raw averages (steps, exercise, sleep, HRV, HR, mindfulness, calories) to AI - Let Apple Intelligence find nuanced multi-variable patterns naturally - Update MoodDataSummarizer to format raw health data for AI prompts - Simplifies code by ~200 lines while improving insight quality 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -30,11 +30,26 @@ class HealthKitManager: ObservableObject {
|
||||
}
|
||||
|
||||
// Health data types for insights (read-only)
|
||||
// Core activity metrics
|
||||
private let stepCountType = HKQuantityType.quantityType(forIdentifier: .stepCount)!
|
||||
private let exerciseTimeType = HKQuantityType.quantityType(forIdentifier: .appleExerciseTime)!
|
||||
private let activeEnergyType = HKQuantityType.quantityType(forIdentifier: .activeEnergyBurned)!
|
||||
private let distanceType = HKQuantityType.quantityType(forIdentifier: .distanceWalkingRunning)!
|
||||
|
||||
// Heart & stress indicators
|
||||
private let heartRateType = HKQuantityType.quantityType(forIdentifier: .heartRate)!
|
||||
private let restingHeartRateType = HKQuantityType.quantityType(forIdentifier: .restingHeartRate)!
|
||||
private let hrvType = HKQuantityType.quantityType(forIdentifier: .heartRateVariabilitySDNN)!
|
||||
|
||||
// Sleep & recovery
|
||||
private let sleepAnalysisType = HKCategoryType.categoryType(forIdentifier: .sleepAnalysis)!
|
||||
|
||||
// Mindfulness
|
||||
private let mindfulSessionType = HKCategoryType.categoryType(forIdentifier: .mindfulSession)!
|
||||
|
||||
// Workouts
|
||||
private let workoutType = HKWorkoutType.workoutType()
|
||||
|
||||
// MARK: - Authorization
|
||||
|
||||
var isHealthKitAvailable: Bool {
|
||||
@@ -55,16 +70,32 @@ class HealthKitManager: ObservableObject {
|
||||
// Write permission for State of Mind
|
||||
let typesToShare: Set<HKSampleType> = [stateOfMindType]
|
||||
|
||||
// Read permissions for insights + State of Mind
|
||||
// Read permissions for mood-health correlation insights
|
||||
// These help Apple's AI provide personalized health insights
|
||||
let typesToRead: Set<HKObjectType> = [
|
||||
// State of Mind (read back our own data)
|
||||
stateOfMindType,
|
||||
|
||||
// Activity - correlates with mood and energy levels
|
||||
stepCountType,
|
||||
exerciseTimeType,
|
||||
activeEnergyType,
|
||||
distanceType,
|
||||
workoutType,
|
||||
|
||||
// Heart metrics - stress and recovery indicators
|
||||
heartRateType,
|
||||
sleepAnalysisType
|
||||
restingHeartRateType,
|
||||
hrvType,
|
||||
|
||||
// Sleep - strong correlation with mood
|
||||
sleepAnalysisType,
|
||||
|
||||
// Mindfulness - meditation impact on mood
|
||||
mindfulSessionType
|
||||
]
|
||||
|
||||
logger.info("Requesting HealthKit permissions: share=1, read=5")
|
||||
logger.info("Requesting HealthKit permissions: share=1, read=\(typesToRead.count)")
|
||||
|
||||
try await healthStore.requestAuthorization(toShare: typesToShare, read: typesToRead)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user