Commit Graph

1708 Commits

Author SHA1 Message Date
rcourtman 771f2a3e41 Add recent changes to intelligence summary 2026-03-19 00:18:28 +00:00
rcourtman 12e705df1e Expose recent changes in resource intelligence 2026-03-19 00:16:14 +00:00
rcourtman eaf702c358 Surface canonical recent changes in intelligence context 2026-03-19 00:04:32 +00:00
rcourtman 2121e57d74 Use canonical resource timeline in intelligence summary 2026-03-19 00:00:26 +00:00
rcourtman 942dd4ed40 Use canonical resource timeline in patrol intelligence 2026-03-18 23:56:59 +00:00
rcourtman 27dc24b6fd Use canonical resource timelines in incident context 2026-03-18 23:51:22 +00:00
rcourtman 749b0c46e5 Use canonical resource timelines in AI context 2026-03-18 23:49:48 +00:00
rcourtman 261d4e8586 Expose adapter provenance counts in facet summaries 2026-03-18 23:40:59 +00:00
rcourtman 74e5301688 Expose provenance counts in facet summaries 2026-03-18 23:34:04 +00:00
rcourtman e1071d2ae0 Preserve related resources in all timeline changes 2026-03-18 23:21:48 +00:00
rcourtman 72fcfd01be Expose grouped timeline kind counts 2026-03-18 23:16:35 +00:00
rcourtman 6d45ce222a Classify incident anomalies 2026-03-18 23:08:04 +00:00
rcourtman 9e99193efd Classify canonical restart changes 2026-03-18 22:49:18 +00:00
rcourtman bb89be0b70 Summarize relationship edges in timelines 2026-03-18 22:16:13 +00:00
rcourtman 7e6a85548f Preserve relationship endpoints in change timelines 2026-03-18 22:11:22 +00:00
rcourtman ac4d566d69 Cap unified audit list limits 2026-03-18 21:02:52 +00:00
rcourtman 14623183ba Cover audit store bootstrap 2026-03-18 20:59:44 +00:00
rcourtman 99f8c17123 Cover fresh resource_changes bootstrap 2026-03-18 20:58:43 +00:00
rcourtman d51a5b346e Fix legacy resource_changes migration 2026-03-18 20:53:35 +00:00
rcourtman d07c567b46 Wire tenant resource provider at startup 2026-03-18 20:43:38 +00:00
rcourtman d6ad348dfa Validate source-adapter filters 2026-03-18 20:39:00 +00:00
rcourtman fc3cf0624b Index resource source-adapter filters 2026-03-18 20:36:32 +00:00
rcourtman 2bf4c81450 Index unified resource timeline filters 2026-03-18 20:31:09 +00:00
rcourtman 9c43a48ff0 Harden unified resource timeline filters 2026-03-18 20:29:30 +00:00
rcourtman 33b169334c Pin graph provenance in API proofs 2026-03-18 20:19:04 +00:00
rcourtman 181dba0548 Propagate unified facet counts 2026-03-18 18:36:49 +00:00
rcourtman 21cf8250a5 Cover unified facet bundle route in proofs 2026-03-18 18:30:05 +00:00
rcourtman dc63f86648 Add unified resource facet bundle endpoint 2026-03-18 18:28:57 +00:00
rcourtman 19a5aace70 Expose resource facets and timeline 2026-03-18 17:48:36 +00:00
rcourtman fae55976a5 Expose unified audit history 2026-03-18 17:44:21 +00:00
rcourtman 3c62e8e5f5 Persist action audits through tool executor 2026-03-18 17:35:45 +00:00
rcourtman e864682e33 Audit unified AI exports 2026-03-18 17:22:24 +00:00
rcourtman 4917cd95d9 Persist action and export audits 2026-03-18 17:13:43 +00:00
rcourtman f0520bc5e3 Persist unified resource timeline changes 2026-03-18 17:09:30 +00:00
rcourtman 778a2577b6 feat: Pulse v6 release 2026-03-18 16:06:30 +00:00
rcourtman 2fe22c3308 fix(backups): prevent template backups from being flagged as orphaned
Proxmox VM/LXC templates are intentionally excluded from the monitored
guest list, but their backup files exist on storage. The orphan-detection
logic was firing for every template backup because the VMID was never
in the guest lookup maps.

Fix: track template VMID→node pairs in State.templateVMIDs (unexported,
not serialised to API/frontend) during the resources poll loop, expose
via StateSnapshot.TemplateVMIDs, and use in both buildGuestLookups() and
the storage backup node-resolution map so orphan detection treats template
backups as valid. Also preserves the template map through the cluster
health grace-period path (zero-resource preservation), the partial-node
grace-period path, and clears it on instance removal.

Closes #1352
2026-03-17 09:04:22 +00:00
rcourtman caff845c1a fix(ui): use Proxmox tag colours from datacenter config
Pulse was generating tag colours from a hash of the tag name instead
of using the colours configured in Proxmox. Now polls /cluster/options
once per PVE instance and merges the tag-style colour map into state,
which the frontend uses as the first-priority colour source for tag
badges. Falls back to the existing special-tag and hash-based colours
when Proxmox hasn't set a custom colour for a tag.
2026-03-15 19:49:46 +00:00
rcourtman da982d0fca Prepare v5.1.24 release 2026-03-14 16:43:26 +00:00
rcourtman 8a43a964b6 fix(ai): wire patrol circuit breaker on first-time configure 2026-03-13 12:10:14 +00:00
rcourtman ae2edbde20 fix(ai): complete wiring on first-time configure; guard Ollama fallback
Three follow-up fixes:

1. RestartAIChat() now performs the full post-start wiring (MCP providers,
   patrol adapter, investigation orchestrator) when the service starts for
   the first time via Restart(). Previously these were only wired via
   StartAIChat(), leaving first-time configure with a partially wired service.

2. The Ollama→OpenAI-compatible fallback in createProviderForModel is now
   guarded by !strings.HasPrefix(modelStr, "ollama:") so explicit
   "ollama:llama3" models are never silently rerouted to a different provider.

3. Windows install script registration check now uses the $Hostname override
   (if set) instead of always looking up $env:COMPUTERNAME, so post-install
   verification works correctly when a custom hostname is specified.
2026-03-13 12:06:08 +00:00
rcourtman e137f3fbf7 fix(ai): start chat service on first-time configure without restart
When Pulse starts before AI is configured, legacyService is nil.
Saving AI settings called Restart() which bailed immediately on the
nil check, leaving the service unstarted (503 on /api/ai/sessions)
until a full process restart.

Merged the nil and !IsRunning checks so first-time configure now
starts the service inline, same as the already-handled stopped case.

Also: bare model names that ParseModelString routes to Ollama (e.g.
"qwen3-omni") now fall back to a configured custom OpenAI base URL
when Ollama is not explicitly configured — handles manually-typed
model names on self-hosted OpenAI-compatible endpoints.

Fixes #1339, #1296
2026-03-13 11:13:27 +00:00
rcourtman d05a00b931 fix(monitoring): smooth transient VM memory fallback spikes 2026-03-10 23:06:17 +00:00
rcourtman afcfb23a30 fix(monitoring): retain intermittent FreeBSD SMART data 2026-03-10 22:52:25 +00:00
rcourtman 1a582ccc35 fix(diagnostics): honor PVE fingerprint in diagnostics probe 2026-03-10 22:46:12 +00:00
rcourtman 7dab977d91 Add split memory bar showing Used | Cache | Free segments (#1302)
Show reclaimable buff/cache as a distinct amber segment between used
(green) and free (gray) in the memory bar. This explains why Pulse's
memory percentage differs from Proxmox: Pulse reports cache-aware
usage (MemAvailable) while Proxmox includes cache as used (Total-Free).

Backend: add Cache field to Memory model, derived from MemInfo
(Available - Free). Only uses MemInfo.Free (not FreeMem fallback) to
avoid inflating cache by the balloon gap on ballooned VMs.

Frontend: StackedMemoryBar renders three segments with tooltip
breakdown. Tooltip Free accounts for balloon limit when active.
Percentage label and alerts remain cache-aware (unchanged).
2026-03-10 10:16:14 +00:00
rcourtman 7a394ed724 Use explicit success flag for disk carry-forward guard (#1319)
Replace the diskUsage <= 0 heuristic with a diskFromAgent bool that is
only set when the guest agent actually returns valid filesystem data.
Prevents carry-forward from firing on a genuine 0% disk reading.
2026-03-09 18:54:27 +00:00
rcourtman 9c279732f7 Skip disk carry-forward when guest agent is explicitly disabled (#1319)
Prevents stale disk data from persisting indefinitely in the efficient
poller when a user disables the guest agent after it had been providing
data.  Matches the fallback poller's agent-disabled exclusion.
2026-03-09 18:37:38 +00:00
rcourtman abbd0df609 Fix disk metric spikes when guest agent intermittently fails (#1319)
Carry forward previous cycle's disk data when the QEMU guest agent
times out or errors, instead of falling back to Proxmox cluster/resources
which always reports 0 for VM disk usage.  Applied to both polling paths
(pollVMsAndContainersEfficient and pollVMsWithNodes) with safety guards
against uint64 underflow and permanent-failure exclusions.
2026-03-09 18:23:15 +00:00
rcourtman a4b0771974 Prevent removed host agents from resurrecting via in-flight reports (#1331)
Host agents removed from the UI would reappear on the next report cycle
because there was no rejection mechanism — unlike Docker agents which
already had resurrection prevention. Mirror the Docker agent pattern:

- Track removed host IDs in a `removedHosts` map with 24hr TTL
- Persist removal records in `State.RemovedHosts` for frontend display
- Reject reports from removed hosts in `ApplyHostReport()`
- Add `AllowHostReenroll()` + API route to clear the block
- Show removed host agents in the Settings UI with "Allow re-enroll"
- Sync removed-agent maps from state on startup for all agent types
- Fix mock integration snapshot missing `RemovedDockerHosts` field
2026-03-09 17:52:34 +00:00
rcourtman 9b531c547d Fix recovery notifications silently disabled by config PUT (#1332)
Two fixes for missing recovery/resolved notifications:

1. API config PUT handler now preserves notifyOnResolve when the client
   omits it from the request body. Go decodes a missing bool as false,
   which silently disabled recovery notifications on older clients.

2. CancelAlert now always cleans up the cooldown record even when the
   alert has already left the pending buffer, preventing stale cooldown
   entries from suppressing future alert cycles.
2026-03-09 11:28:28 +00:00