Commit graph

925 commits

Author SHA1 Message Date
rcourtman
2a99e03831 Add Ollama basic auth support 2026-04-01 12:00:38 +01:00
rcourtman
31753e5536 Stabilize guest threshold overrides across node moves (#1334)
Some checks are pending
Build and Test / Secret Scan (push) Waiting to run
Build and Test / Frontend & Backend (push) Waiting to run
Core E2E Tests / Playwright Core E2E (push) Waiting to run
2026-03-31 23:18:19 +01:00
rcourtman
a8ee51fb99 Fix code scanning findings 2026-03-28 10:58:57 +00:00
rcourtman
5b1f1e6cff Preserve drawer history range across reactive key changes (#1319) 2026-03-27 16:55:01 +00:00
rcourtman
d4242d9a13 Fix ZFS pool attachment in storage frontend (discussion #1351) 2026-03-27 14:59:52 +00:00
rcourtman
17bfec6d1d Gate discovery tab on AI discovery setting 2026-03-27 14:15:22 +00:00
rcourtman
39f04b324a Preserve guest drawer chart range across ID changes (#1319) 2026-03-27 13:59:11 +00:00
rcourtman
fe5f660524 Clarify dedicated agent token guidance (#1353) 2026-03-27 10:59:32 +00:00
rcourtman
640c414c0c Upgrade frontend ESLint security dependencies 2026-03-26 20:54:42 +00:00
rcourtman
14a149c369 Upgrade frontend lint and test dependencies 2026-03-26 20:33:59 +00:00
rcourtman
cb011f7f14 Fix dependency security vulnerabilities
Some checks are pending
Build and Test / Secret Scan (push) Waiting to run
Build and Test / Frontend & Backend (push) Waiting to run
Core E2E Tests / Playwright Core E2E (push) Waiting to run
2026-03-26 11:57:26 +00:00
rcourtman
71351de987 Refresh Docker custom URLs after container updates (#1054) 2026-03-26 11:51:19 +00:00
rcourtman
818541c37e Fix Docker search action overlap (#1361) 2026-03-26 09:26:13 +00:00
rcourtman
ca66581b6e Match Proxmox tag color generation (#1348) 2026-03-26 00:27:07 +00:00
rcourtman
1de1392c9b Preserve provider metadata in AI model lists (#1320) 2026-03-25 13:08:15 +00:00
rcourtman
69f44d3829 Handle empty chat session payloads in AI settings (#1149) 2026-03-25 12:12:49 +00:00
rcourtman
73bebf2f4f Respect docker filters for batch update targets (#1361) 2026-03-25 11:57:38 +00:00
rcourtman
6c3a2cd701 Always apply saved full-width mode after auth (#1130) 2026-03-25 11:40:34 +00:00
rcourtman
c8690a9a55 Persist Docker custom URLs across container updates (#1054) 2026-03-25 11:37:22 +00:00
rcourtman
9f93193d2e Fix settings node table full-width layout (#1304) 2026-03-25 10:52:33 +00:00
rcourtman
1885bd02c0 Fix Proxmox tag color parsing (#1348) 2026-03-25 10:40:31 +00:00
rcourtman
b9c6f504d8 Fix shared storage override matching (#1341) 2026-03-25 10:25:01 +00:00
rcourtman
7422de8505 Respect configured usage thresholds in metric coloring (#1358) 2026-03-25 09:55:27 +00:00
rcourtman
5ea27a9e87 Fix ThresholdsTable test fixture props 2026-03-25 09:55:12 +00:00
rcourtman
62ad7b72d7 fix(alerts): allow tab navigation when alerts are disabled
Some checks failed
Core E2E Tests / Playwright Core E2E (push) Has been cancelled
Build and Test / Secret Scan (push) Has been cancelled
Build and Test / Frontend & Backend (push) Has been cancelled
Alerts being toggled off should only suppress notifications, not lock
users out of the Thresholds, Destinations and Schedule config tabs.
Removes the redirect-to-overview effect and disabled state from all
sidebar and mobile tab buttons when alerts are inactive.
2026-03-15 21:49:03 +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
da928cd9d3 feat(alerts): add UI toggle to disable container update alerts
Some checks failed
Build and Test / Secret Scan (push) Waiting to run
Build and Test / Frontend & Backend (push) Waiting to run
Core E2E Tests / Playwright Core E2E (push) Waiting to run
Helm CI / Lint and Render Chart (push) Has been cancelled
Backend already supported updateAlertDelayHours: -1 to suppress update
alerts but there was no way to configure it from the UI. Adds a toggle
in Settings → Alerts → Docker tab that maps to that backend field.
2026-03-15 13:28:48 +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
6b317f08d2 fix(agent): add --hostname support to Windows PowerShell install script
Adds $Hostname / $env:PULSE_HOSTNAME parameter so users can set a
custom display name at install time, matching the Linux install.sh
behaviour. Persists to config.json and passes --hostname to the agent
binary args.

Closes discussion #818
2026-03-13 11:54:12 +00:00
rcourtman
fde4d9124e fix(frontend): defer discovery tab initialization until opened
Some checks failed
Build and Test / Secret Scan (push) Has been cancelled
Build and Test / Frontend & Backend (push) Has been cancelled
Core E2E Tests / Playwright Core E2E (push) Has been cancelled
2026-03-10 23:14:30 +00:00
rcourtman
40a85175be fix(frontend): preserve drawer chart range across live updates 2026-03-10 22:56:30 +00:00
rcourtman
92b6da83ea Refine tooltip labels: Reclaimable cache, Shown in Proxmox
Some checks failed
Build and Test / Secret Scan (push) Waiting to run
Build and Test / Frontend & Backend (push) Waiting to run
Core E2E Tests / Playwright Core E2E (push) Waiting to run
Helm CI / Lint and Render Chart (push) Has been cancelled
2026-03-10 10:35:19 +00:00
rcourtman
9601afb44c Rename Cache to Reclaimable and add Proxmox reconciliation in tooltip
Rename the amber segment label from "Cache" to "Reclaimable" to avoid
jargon confusion. Add a "Proxmox view: X%" line in the tooltip so
users immediately see why the percentage differs from Proxmox (which
includes reclaimable cache as used memory).
2026-03-10 10:26:50 +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
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
0dd3fc779b Fix alert disable notification suppression
Some checks failed
Build and Test / Secret Scan (push) Has been cancelled
Build and Test / Frontend & Backend (push) Has been cancelled
Core E2E Tests / Playwright Core E2E (push) Has been cancelled
2026-03-07 18:40:08 +00:00
rcourtman
64f3bfa922 Bump dompurify to 3.3.2 to fix XSS vulnerability (Dependabot #64)
DOMPurify 3.1.3–3.3.1 has an XSS vulnerability via missing rawtext
element sanitization. Bump to 3.3.2 which includes the fix.
2026-03-07 10:46:12 +00:00
rcourtman
ba8490c252 fix(ui): use SolidJS class prop instead of deprecated className 2026-03-05 10:17:51 +00:00
rcourtman
1491e0ee6e fix(alerts): add stable sort tiebreaker to prevent hostname scrambling (#1218)
When multiple alerts fire in the same polling cycle they share identical
startTime values. Without a tiebreaker, JS sort returns them in arbitrary
order on each reactive recomputation, causing hostnames to visually
shuffle. Use alert.id as a deterministic lexicographic tiebreaker in both
the Overview and History tab sort comparators.
2026-03-05 10:01:43 +00:00
rcourtman
3a263bc4f0 fix(ai): pass correct identifiers to Docker container discovery (#1315)
Use host.agentId and container.name for DiscoveryTab props to match
backend storage keys. Previously host.id (derived ID) and container.id
(Docker hash) were used, causing discovery lookups to always miss.
2026-03-05 10:01:43 +00:00
rcourtman
a8e562034e fix(ai): restore dismissed patrol findings and add regression tests 2026-03-03 19:53:55 +00:00
rcourtman
a4571f580b fix(monitoring): harden VM memory selection and flag repeated VM usage 2026-03-03 16:19:17 +00:00
rcourtman
768b6d8b7a fix(frontend): resolve npm audit advisories in lockfile 2026-03-02 23:59:34 +00:00
rcourtman
d43dfbc490 feat(ui): add host removal action to hosts table
Add an actions menu to the hosts overview with a "Remove host from
Pulse" button. Includes permission checks (requires settings:write
scope), confirmation handling, and a security regression test for
the delete endpoint scope enforcement.
2026-03-01 23:28:33 +00:00
rcourtman
b1ff7e006f fix(ui): show PULSE_PUBLIC_URL value in settings and expand node tables to full width (#1305, #1304)
Expose PublicURL from runtime config in the system settings API response
so the frontend displays the actual value instead of the placeholder when
the env var is set.

Add w-full to PVE, PBS, and PMG node tables so they expand to fill the
container in full-width mode.
2026-03-01 14:42:30 +00:00
rcourtman
9aee8fa293 fix(ui): add Pro badge to Reporting tab and reduce patrol trigger log noise (#1285, #1258)
Show "Pro" badge on the Reporting settings tab so users know upfront
that advanced reporting requires a Pro license, rather than discovering
it after filling out the form.

Downgrade patrol trigger queue-full and rejection messages from Warn to
Debug — these are normal rate-limiting behavior, not actionable warnings.
2026-02-26 21:09:13 +00:00
rcourtman
af712006c9 fix(ai): allow Gemini and other models via OpenRouter without false provider warning (#1296)
Model name detection used substring matching (.includes('gemini')) which
falsely required Gemini provider config for OpenRouter model IDs like
"google/gemini-2.5-flash". Now only known provider prefixes are treated
as explicit delimiters, slash-containing names route to OpenAI (OpenRouter
convention), and colons in model names (e.g. "llama3.2:latest") are no
longer misinterpreted as provider prefixes.
2026-02-26 20:49:10 +00:00
rcourtman
6221be7311 fix(docker): serialize batch container updates per host (#1289)
The backend only allows one command per host at a time. The "Update All"
button was firing requests in parallel chunks, causing the second
container per host to fail with 400. Group targets by host and process
them sequentially within each host while still updating different hosts
in parallel.
2026-02-24 23:16:22 +00:00
rcourtman
ffc14c7507 fix(docker): stop CPU bars flickering for idle containers (#1288)
The isRunning prop used a `cpuPercent > 0` gate that treated idle
containers (0% CPU) as not-running, causing the bar to flip between
a percentage and an em-dash on every poll cycle. Remove the value
guard so visibility depends only on container running state, matching
how memory, disk, and restart columns already behave.
2026-02-23 22:05:18 +00:00
rcourtman
cac5be2ca1 chore(frontend-modern): remove stale pnpm lockfile 2026-02-23 11:15:37 +00:00