Commit Graph

2026 Commits

Author SHA1 Message Date
rcourtman 708dc964df feat: Add configurable AI request timeout for slow hardware. Related to #880
Adds RequestTimeoutSeconds to AI config (default 300s / 5 min).
Users with low-power hardware running Ollama can increase this
value in Settings to prevent timeouts on slower inference.
2025-12-24 10:52:11 +00:00
rcourtman 2798877aa7 fix: license persistence survives Docker container recreation
Docker users were losing their license activation on every update because
/etc/machine-id changes when the container is recreated.

Changes:
- Store persistent encryption key in /data/.license-key (survives container updates)
- Fall back to machine-id for backwards compatibility with existing installations
- Existing users only need to re-enter their key once, then it persists forever

Fixes issue reported by customer upgrading from RC to v5.0.0.
2025-12-24 10:32:26 +00:00
rcourtman 948989cb08 fix: Per-node TLS fingerprints for cluster peers (TOFU)
When a PVE cluster has unique self-signed certificates on each node, Pulse
would mark secondary nodes as unhealthy because only the primary node's
fingerprint was used for all connections.

Now, during cluster discovery, Pulse captures each node's TLS fingerprint
and uses it when connecting to that specific node. This enables
"Trust On First Use" (TOFU) for clusters with unique per-node certs.

Changes:
- Add Fingerprint field to ClusterEndpoint config
- Add FetchFingerprint() to tlsutil for capturing node certs
- validateNodeAPI() now captures and returns fingerprints during discovery
- NewClusterClient() accepts endpointFingerprints map for per-node certs
- All client creation paths use per-endpoint fingerprints when available

Related to #879
2025-12-24 10:05:03 +00:00
rcourtman 216b1d3e97 fix(ci): add run-name to workflows for reliable tag extraction 2025-12-24 09:41:26 +00:00
rcourtman 105766f66d Auto-update Helm chart version to 5.0.0 2025-12-24 09:38:53 +00:00
rcourtman f1e1a2278d Auto-update Helm chart documentation 2025-12-24 09:29:49 +00:00
rcourtman 16823750aa docs: expand AI Patrol documentation with full context explanation
- Add comprehensive explanation of what data Patrol receives
- Document the enriched context (trends, baselines, predictions)
- Explain operational memory (notes, dismissed alerts, incidents)
- Clarify why Patrol catches issues that static alerts miss
- Mark Patrol as Pro feature with link to pulserelay.pro
2025-12-23 23:21:36 +00:00
rcourtman f3c95e9189 feat: add AI Patrol upgrade prompt in AI Chat
Show a non-intrusive upgrade prompt after users send their first message
in AI Chat, encouraging them to try AI Patrol with Pulse Pro.

- Only shows if user doesn't have a Pro license
- Dismissible with X button
- Links to pulserelay.pro landing page
- Subtle purple gradient styling matching the AI theme
2025-12-23 22:49:10 +00:00
rcourtman e1f94283d2 fix(ai): prevent false-positive backup findings from alert-triggered analysis
Alert-triggered AI analysis was passing nil for lastBackup when analyzing
guests, causing 'Never backed up' findings even when backup data existed.

- Pass actual LastBackup timestamp from VM/Container state in analyzeGuestFromAlert
- Add regression test to verify backup data is correctly passed through

Fixes false positive 'Never backed up' alerts appearing when CPU/memory alerts fire.
2025-12-23 21:11:35 +00:00
rcourtman 3933032c90 chore: bump VERSION to 5.0.0 2025-12-23 20:18:49 +00:00
rcourtman 8079508c49 fix(agentexec): eliminate race conditions in WebSocket message sending
- Move deadline/pong handler setup BEFORE registering agent in map
- Use writeMu mutex consistently for all WebSocket writes
- Prevents race between registration response and ExecuteCommand calls
- Fixes flaky TestExecuteCommand_RoundTripViaWebSocket in CI
2025-12-23 20:05:46 +00:00
rcourtman 37be81d9aa docs: add Pulse Pro section to README 2025-12-23 19:56:18 +00:00
rcourtman 02c10a4c62 ci: disable cancel-in-progress to stop cancellation spam 2025-12-23 18:57:51 +00:00
rcourtman a18bd57cde fix(demo): allow AI chat in read-only mode
Whitelists /api/ai/execute in the DemoModeMiddleware so users can
interact with the mock AI assistant while keeping the rest of the
system read-only and hardened.
2025-12-23 18:52:13 +00:00
rcourtman 72211078cc fix(demo): support patrol analysis mock
Adds structured XML finding responses to the demo mock AI service.
This prevents the background patrol service from failing with 'Analysis failed'
when running in demo mode without a real LLM provider.
2025-12-23 18:48:50 +00:00
rcourtman 381ba740a4 fix(demo): generate realistic spaced patrol history
Updates the demo data generator to create patrol runs spaced 6 hours apart
over the last 3 days, rather than clustering them all in the last hour.
This provides a more authentic viewing experience on the demo dashboard.
2025-12-23 18:42:49 +00:00
rcourtman 10047b2192 fix(ai): force enabled state in demo mode
Ensures the AI settings endpoint reports enabled=true and configured=true
when running in demo mode (PULSE_MOCK_MODE=true), even if no provider is
configured. This unlocks the frontend UI to allow interaction with the
mock AI assistant.
2025-12-23 18:39:34 +00:00
rcourtman 8666961201 feat(ai): add mock chat response for demo mode
Allows the AI Assistant to provide realistic canned responses on the
live demo server without needing a real API key. Handled automatically
when PULSE_MOCK_MODE=true and no provider is configured.
2025-12-23 18:34:38 +00:00
rcourtman bfe03ae522 feat(license): grant Pro features in demo/mock mode
When PULSE_MOCK_MODE=true, automatically grant all Pro features
so the demo server can showcase AI Patrol findings without needing
a license. This is specifically for public demo instances.
2025-12-23 18:18:22 +00:00
rcourtman 79d185989d feat(login): add demo credentials banner on demo.pulserelay.pro
Shows a prominent green banner with demo/demo credentials when
accessing the login page from the demo server hostname.
2025-12-23 17:54:58 +00:00
rcourtman 08bbeb1d71 chore: ignore deployment folder 2025-12-23 17:20:40 +00:00
rcourtman 333a33b2cd fix(test): add missing SecurityAPI.getStatus mock to UnifiedAgents test 2025-12-23 12:50:11 +00:00
rcourtman ec85dc6cbd Polish: Remove dead code from AIOverviewTable 2025-12-23 12:43:04 +00:00
rcourtman c5ada77f46 Polish: Fix Login tests and remove dead code in AIOverviewTable 2025-12-23 12:42:06 +00:00
rcourtman 6d0051d261 Polish: Fix Login tests and standardise DiagnosticsPanel types 2025-12-23 12:41:29 +00:00
rcourtman 478da2933b Polish: Fix App.tsx imports 2025-12-23 12:40:37 +00:00
rcourtman 50441e0cc5 Polish: Use strong types in CompleteStep 2025-12-23 12:39:58 +00:00
rcourtman 514ed4fe88 Polish: Use strong types in App and CompleteStep 2025-12-23 12:39:24 +00:00
rcourtman 57b629e5b0 Polish: Standardize remaining fetch calls in Login and FirstRunSetup 2025-12-23 12:39:02 +00:00
rcourtman 9e6e62f289 Polish: Remove duplicate NodeConfigWithStatus definitions 2025-12-23 12:37:56 +00:00
rcourtman 3dafb8f7c5 Polish: Standardize NodeConfigWithStatus type 2025-12-23 12:37:31 +00:00
rcourtman 84d87c7b4f Polish: Fix type errors in App and Node Tables 2025-12-23 12:36:04 +00:00
rcourtman 3ffe9d6a9f Polish: Fix syntax errors in ProxmoxAgentNodesPanel 2025-12-23 12:34:54 +00:00
rcourtman 79030c0873 Polish: Use strong types in ProxmoxAgentNodesPanel 2025-12-23 12:34:12 +00:00
rcourtman cba1e403eb Polish: Fix type error in Login fallback state 2025-12-23 12:33:22 +00:00
rcourtman cd8b1bf0ff Polish: Use SecurityStatus type in Login.tsx 2025-12-23 12:32:48 +00:00
rcourtman 4223bb4bda Polish: Use SecurityStatus type in App.tsx 2025-12-23 12:32:37 +00:00
rcourtman 3ca3359d08 Polish: Fix duplicate import in FirstRunSetup 2025-12-23 12:32:13 +00:00
rcourtman b4a94c48d8 Polish: Use strong types in FirstRunSetup 2025-12-23 12:31:59 +00:00
rcourtman b790e13970 Polish: Use strong types in SecurityWarning 2025-12-23 12:31:39 +00:00
rcourtman 9c2d9b2649 Polish: Update SecurityStatus type definition 2025-12-23 12:31:08 +00:00
rcourtman 690048d1ac Polish: Standardize API calls in api/patrol.ts 2025-12-23 12:26:56 +00:00
rcourtman 95dd6d55c4 Polish: Standardize API calls in Login and Settings 2025-12-23 12:26:20 +00:00
rcourtman 89ef09d8d5 Polish: Fix missing apiFetchJSON import in Settings 2025-12-23 12:25:57 +00:00
rcourtman 9e4dc02614 Polish: Fix handleImport error handling in Settings 2025-12-23 12:25:44 +00:00
rcourtman 0d7ef72e95 Polish: Standardize API calls in Settings (Import/Export) 2025-12-23 12:24:43 +00:00
rcourtman 388e01a9a9 Polish: Fix syntax and API usage in SecurityWarning 2025-12-23 12:24:12 +00:00
rcourtman 3f8e4a5968 Polish: Standardize API calls in FirstRunSetup and SecurityWarning 2025-12-23 12:23:28 +00:00
rcourtman d9c20a2458 Polish: Fix ConnectStep leftover response check 2025-12-23 12:21:26 +00:00
rcourtman 0fca3f4536 Polish: Consistent API usage in SetupWizard 2025-12-23 12:21:14 +00:00