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. |
||
|---|---|---|
| .. | ||
| ai_handlers.go | ||
| alerts.go | ||
| alerts_test.go | ||
| auth.go | ||
| auth_helpers_test.go | ||
| auth_scope_test.go | ||
| bootstrap_token.go | ||
| bootstrap_token_test.go | ||
| charts_test.go | ||
| config_handlers.go | ||
| config_handlers_auto_reg_test.go | ||
| config_handlers_auto_register_test.go | ||
| config_handlers_cluster_test.go | ||
| config_handlers_host_test.go | ||
| config_handlers_pve_user_test.go | ||
| config_handlers_sanitize_test.go | ||
| config_handlers_setup_script_test.go | ||
| config_handlers_temperature_test.go | ||
| config_handlers_transport_guard_test.go | ||
| csrf_store.go | ||
| csrf_store_test.go | ||
| demo_middleware.go | ||
| demo_middleware_test.go | ||
| diagnostics.go | ||
| diagnostics_test.go | ||
| DO_NOT_EDIT_FRONTEND_HERE.md | ||
| docker_agents.go | ||
| docker_agents_test.go | ||
| docker_metadata.go | ||
| export_test.go | ||
| frontend_embed.go | ||
| guest_metadata.go | ||
| host_agents.go | ||
| host_agents_test.go | ||
| host_metadata.go | ||
| http_metrics.go | ||
| http_metrics_test.go | ||
| metadata_provider.go | ||
| middleware.go | ||
| middleware_test.go | ||
| notification_queue.go | ||
| notifications.go | ||
| notifications_test.go | ||
| oidc_handlers.go | ||
| oidc_handlers_test.go | ||
| oidc_service.go | ||
| oidc_service_test.go | ||
| rate_limit_config.go | ||
| rate_limit_config_test.go | ||
| ratelimit.go | ||
| ratelimit_test.go | ||
| README.md | ||
| recovery_tokens.go | ||
| recovery_tokens_test.go | ||
| resource_handlers.go | ||
| router.go | ||
| router_arch_test.go | ||
| router_download_test.go | ||
| router_integration_test.go | ||
| router_test.go | ||
| security.go | ||
| security_oidc.go | ||
| security_setup_fix.go | ||
| security_setup_fix_test.go | ||
| security_test.go | ||
| security_tokens.go | ||
| security_tokens_test.go | ||
| session_store.go | ||
| session_store_test.go | ||
| system_settings.go | ||
| system_settings_temperature_test.go | ||
| system_settings_utils_test.go | ||
| system_settings_validate_test.go | ||
| temperature_proxy.go | ||
| temperature_proxy_command_test.go | ||
| temperature_proxy_test.go | ||
| types.go | ||
| unified_agent.go | ||
| unified_agent_test.go | ||
| updates.go | ||
| updates_test.go | ||
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.