Skip to content

Commit e7c136d

Browse files
michael-borckclaude
andcommitted
Implement smart validation configuration system with user experience levels (sub-task 6.6)
- Created SmartConfigManager with intelligent defaults for different user experience levels - Added UserExperienceLevel enum (Beginner, Intermediate, Advanced, Expert, Custom) - Implemented adaptive settings that learn from user behavior and validation decisions - Created content-type specific configuration adaptation for optimal validation - Added comprehensive Tauri commands for frontend integration with smart config service - Implemented user profiles with usage statistics and preference learning - Created validation presets with appropriate UI settings and feature enablement - Added configuration export/import functionality for backup and sharing - Integrated smart recommendations based on user patterns and content types - Separated RemediationPreferences from general UserPreferences for better modularity 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent fed6352 commit e7c136d

File tree

5 files changed

+1181
-29
lines changed

5 files changed

+1181
-29
lines changed

src-tauri/src/validation/mod.rs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ pub mod factory;
55
pub mod commands;
66
pub mod remediation;
77
pub mod remediation_commands;
8+
pub mod smart_config;
9+
pub mod smart_config_commands;
810

911
pub use validators::{
1012
Validator, ExportValidator, ValidationResult, ValidationConfig, ValidationIssue,
@@ -26,10 +28,20 @@ pub use commands::{
2628
pub use remediation::{
2729
RemediationManager, RemediationConfig, RemediationSession, RemediationSuggestion,
2830
SessionStatus, DecisionType, RemediationFixType, ConfidenceLevel, RiskLevel,
29-
RemediationPreview, UserDecision, AppliedFix, UserPreferences, ImpactAssessment,
30-
AlternativeFix, DiffHighlight, ChangeType
31+
RemediationPreview, UserDecision, AppliedFix, ImpactAssessment,
32+
AlternativeFix, DiffHighlight, ChangeType, RemediationPreferences
3133
};
3234
pub use remediation_commands::{
3335
RemediationService, GenerateRemediationRequest, RemediationResponse,
3436
ApplyFixRequest, UserDecisionRequest, SessionStatusResponse, RemediationStatistics
37+
};
38+
pub use smart_config::{
39+
SmartConfigManager, UserExperienceLevel, UserPreferences, ValidationFocus,
40+
ValidationFeature, NotificationLevel, UserAction, SmartRecommendations,
41+
ConfigCustomizations, AdaptiveSettings, ValidationPreset
42+
};
43+
pub use smart_config_commands::{
44+
SmartConfigService, UserProfile, UsageStatistics, GetSmartConfigRequest,
45+
SmartConfigResponse, UpdateExperienceLevelRequest, RecordDecisionRequest,
46+
CreateCustomConfigRequest, ExperienceLevelsResponse, ExperienceLevelInfo
3547
};

src-tauri/src/validation/remediation.rs

Lines changed: 32 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,34 @@ use serde::{Deserialize, Serialize};
55
use std::collections::HashMap;
66
use uuid::Uuid;
77

8+
/// Remediation-specific user preferences
9+
#[derive(Debug, Clone, Serialize, Deserialize)]
10+
pub struct RemediationPreferences {
11+
pub preferred_fix_types: Vec<RemediationFixType>,
12+
pub rejected_fix_types: Vec<RemediationFixType>,
13+
pub confidence_threshold: ConfidenceLevel,
14+
pub risk_tolerance: RiskLevel,
15+
pub auto_apply_preferences: HashMap<RemediationFixType, bool>,
16+
pub content_type_preferences: HashMap<ContentType, Vec<RemediationFixType>>,
17+
}
18+
19+
impl Default for RemediationPreferences {
20+
fn default() -> Self {
21+
Self {
22+
preferred_fix_types: vec![
23+
RemediationFixType::FixTypos,
24+
RemediationFixType::CorrectCapitalization,
25+
RemediationFixType::RemoveDuplicates,
26+
],
27+
rejected_fix_types: vec![],
28+
confidence_threshold: ConfidenceLevel::Medium,
29+
risk_tolerance: RiskLevel::Low,
30+
auto_apply_preferences: HashMap::new(),
31+
content_type_preferences: HashMap::new(),
32+
}
33+
}
34+
}
35+
836
/// Auto-remediation system with user approval workflow
937
#[derive(Debug, Clone)]
1038
pub struct RemediationManager {
@@ -202,17 +230,6 @@ pub enum DecisionType {
202230
SkipForNow,
203231
}
204232

205-
/// User preferences learned from decisions
206-
#[derive(Debug, Clone, Serialize, Deserialize)]
207-
pub struct UserPreferences {
208-
pub user_id: String,
209-
pub preferred_fix_types: Vec<RemediationFixType>,
210-
pub rejected_fix_types: Vec<RemediationFixType>,
211-
pub confidence_threshold: ConfidenceLevel,
212-
pub risk_tolerance: RiskLevel,
213-
pub auto_apply_preferences: HashMap<RemediationFixType, bool>,
214-
pub content_type_preferences: HashMap<ContentType, Vec<RemediationFixType>>,
215-
}
216233

217234
impl Default for RemediationConfig {
218235
fn default() -> Self {
@@ -250,7 +267,7 @@ impl RemediationManager {
250267
&mut self,
251268
content: &GeneratedContent,
252269
issues: &[ValidationIssue],
253-
user_preferences: Option<&UserPreferences>,
270+
user_preferences: Option<&RemediationPreferences>,
254271
) -> Result<RemediationSession> {
255272
let session_id = Uuid::new_v4();
256273
let mut suggested_fixes = Vec::new();
@@ -295,7 +312,7 @@ impl RemediationManager {
295312
&self,
296313
content: &GeneratedContent,
297314
issue: &ValidationIssue,
298-
user_preferences: Option<&UserPreferences>,
315+
user_preferences: Option<&RemediationPreferences>,
299316
) -> Result<Option<Vec<RemediationSuggestion>>> {
300317
let mut suggestions = Vec::new();
301318

@@ -1132,16 +1149,8 @@ impl RemediationManager {
11321149
}
11331150

11341151
/// Learn from user preferences
1135-
pub fn update_user_preferences(&mut self, user_id: &str, session: &RemediationSession) -> UserPreferences {
1136-
let mut preferences = UserPreferences {
1137-
user_id: user_id.to_string(),
1138-
preferred_fix_types: Vec::new(),
1139-
rejected_fix_types: Vec::new(),
1140-
confidence_threshold: ConfidenceLevel::Medium,
1141-
risk_tolerance: RiskLevel::Low,
1142-
auto_apply_preferences: HashMap::new(),
1143-
content_type_preferences: HashMap::new(),
1144-
};
1152+
pub fn update_user_preferences(&mut self, _user_id: &str, session: &RemediationSession) -> RemediationPreferences {
1153+
let mut preferences = RemediationPreferences::default();
11451154

11461155
// Analyze user decisions to learn preferences
11471156
for decision in &session.user_decisions {

src-tauri/src/validation/remediation_commands.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ use anyhow::Result;
55
use serde::{Deserialize, Serialize};
66
use std::collections::HashMap;
77
use std::sync::Mutex;
8-
use tauri::{State, ipc::Invoke};
8+
use tauri::State;
99
use uuid::Uuid;
1010

1111
/// Global remediation service state
1212
pub struct RemediationService {
1313
manager: Mutex<RemediationManager>,
14-
user_preferences: Mutex<HashMap<String, UserPreferences>>,
14+
user_preferences: Mutex<HashMap<String, RemediationPreferences>>,
1515
}
1616

1717
impl RemediationService {
@@ -246,7 +246,7 @@ pub fn get_pending_remediation_sessions(
246246
pub fn get_user_remediation_preferences(
247247
user_id: String,
248248
service: State<'_, RemediationService>,
249-
) -> Result<Option<UserPreferences>, String> {
249+
) -> Result<Option<RemediationPreferences>, String> {
250250
let preferences = service.user_preferences.lock().unwrap();
251251
Ok(preferences.get(&user_id).cloned())
252252
}
@@ -255,7 +255,7 @@ pub fn get_user_remediation_preferences(
255255
#[tauri::command]
256256
pub fn update_user_remediation_preferences(
257257
user_id: String,
258-
preferences: UserPreferences,
258+
preferences: RemediationPreferences,
259259
service: State<'_, RemediationService>,
260260
) -> Result<(), String> {
261261
service

0 commit comments

Comments
 (0)