Enhanced code review and frontend validation with intelligent triggers: Code Review Agent Enhancement: - Added Sequential Thinking MCP integration for complex issues - Triggers on 2+ rejections or 3+ critical issues - New escalation format with root cause analysis - Comprehensive solution strategies with trade-off evaluation - Educational feedback to break rejection cycles - Files: .claude/agents/code-review.md (+308 lines) - Docs: CODE_REVIEW_ST_ENHANCEMENT.md, CODE_REVIEW_ST_TESTING.md Frontend Design Skill Enhancement: - Automatic invocation for ANY UI change - Comprehensive validation checklist (200+ checkpoints) - 8 validation categories (visual, interactive, responsive, a11y, etc.) - 3 validation levels (quick, standard, comprehensive) - Integration with code review workflow - Files: .claude/skills/frontend-design/SKILL.md (+120 lines) - Docs: UI_VALIDATION_CHECKLIST.md (462 lines), AUTOMATIC_VALIDATION_ENHANCEMENT.md (587 lines) Settings Optimization: - Repaired .claude/settings.local.json (fixed m365 pattern) - Reduced permissions from 49 to 33 (33% reduction) - Removed duplicates, sorted alphabetically - Created SETTINGS_PERMISSIONS.md documentation Checkpoint Command Enhancement: - Dual checkpoint system (git + database) - Saves session context to API for cross-machine recall - Includes git metadata in database context - Files: .claude/commands/checkpoint.md (+139 lines) Decision Rationale: - Sequential Thinking MCP breaks rejection cycles by identifying root causes - Automatic frontend validation catches UI issues before code review - Dual checkpoints enable complete project memory across machines - Settings optimization improves maintainability Total: 1,200+ lines of documentation and enhancements Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
44 lines
2.5 KiB
Plaintext
44 lines
2.5 KiB
Plaintext
The file C:\Users\MikeSwanson\Claude\guru-connect\server\src\session\mod.rs has been updated. Here's the result of running `cat -n` on a snippet of the edited file:
|
|
286→ let _ = session_data.input_tx.send(buf).await;
|
|
287→ }
|
|
288→ }
|
|
289→
|
|
290→ /// Mark agent as disconnected
|
|
291→ /// For persistent agents: keep session but mark as offline
|
|
292→ /// For support sessions: remove session entirely
|
|
293→ pub async fn mark_agent_disconnected(&self, session_id: SessionId) {
|
|
294→ let mut sessions = self.sessions.write().await;
|
|
295→ if let Some(session_data) = sessions.get_mut(&session_id) {
|
|
296→ if session_data.info.is_persistent {
|
|
297→ // Persistent agent - keep session but mark as offline
|
|
298→ tracing::info!("Persistent agent {} marked offline (session {} preserved)",
|
|
299→ session_data.info.agent_id, session_id);
|
|
300→ session_data.info.is_online = false;
|
|
301→ session_data.info.is_streaming = false;
|
|
302→ session_data.info.viewer_count = 0;
|
|
303→ session_data.viewers.clear();
|
|
304→ } else {
|
|
305→ // Support session - remove entirely
|
|
306→ let agent_id = session_data.info.agent_id.clone();
|
|
307→ sessions.remove(&session_id);
|
|
308→ drop(sessions); // Release sessions lock before acquiring agents lock
|
|
309→ let mut agents = self.agents.write().await;
|
|
310→ agents.remove(&agent_id);
|
|
311→ tracing::info!("Support session {} removed", session_id);
|
|
312→ }
|
|
313→ }
|
|
314→ }
|
|
315→
|
|
316→ /// Remove a session entirely (for cleanup)
|
|
317→ pub async fn remove_session(&self, session_id: SessionId) {
|
|
318→ let mut sessions = self.sessions.write().await;
|
|
319→ if let Some(session_data) = sessions.remove(&session_id) {
|
|
320→ drop(sessions);
|
|
321→ let mut agents = self.agents.write().await;
|
|
322→ agents.remove(&session_data.info.agent_id);
|
|
323→ }
|
|
324→ }
|
|
325→
|
|
326→ /// Disconnect a session by sending a disconnect message to the agent
|
|
327→ /// Returns true if the message was sent successfully
|
|
328→ pub async fn disconnect_session(&self, session_id: SessionId, reason: &str) -> bool { |