mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-09-21 02:33:32 +00:00
a3d953172c
Implements a comprehensive feedback system that allows the LLM to 'remember' user decisions about findings, preventing repetitive/annoying alerts. Backend changes: - Extended Finding struct with dismissed_reason, user_note, times_raised, suppressed - Added Dismiss(), Suppress(), SetUserNote(), IsSuppressed() methods to FindingsStore - Added GetDismissedForContext() to format dismissed findings for LLM context - Enhanced buildPatrolPrompt() to inject user feedback context - Added POST /api/ai/patrol/dismiss and /api/ai/patrol/suppress endpoints - Updated IsActive() to exclude suppressed findings Frontend changes: - Added Dismiss dropdown with options: Not an Issue, Expected Behavior, Will Fix Later - Added Never Alert Again option for permanent suppression - Expected Behavior prompts for optional note to help LLM understand context - Added visual badges: recurrence count (×N), dismissed status, suppressed indicator - Display user notes in expanded finding view Also fixes: - Fixed 403 error on Run Patrol (compilation errors from partial refactoring) - Removed non-LLM patrol checks - patrol now uses LLM analysis only - Fixed function signature mismatches in alert_triggered.go The LLM now receives context about previously dismissed findings and is instructed not to re-raise them unless severity has significantly worsened.
Internal API Package
This directory contains the API server implementation for Pulse.
Important Note About frontend-modern/
The frontend-modern/ subdirectory that appears here is:
- AUTO-GENERATED during builds
- NOT the source code - just a build artifact
- IN .gitignore - never committed
- REQUIRED BY GO - The embed directive needs it here
Frontend Development Location
👉 Edit frontend files at: /opt/pulse/frontend-modern/src/
Why This Structure?
Go's //go:embed directive has limitations:
- Cannot use
../paths to access parent directories - Cannot follow symbolic links
- Must embed files within the Go module
This is a known Go limitation and our structure works around it.