995 Commits

Author SHA1 Message Date
courtmanr@gmail.com 01278509c5 chore: bump version to 3.16.1
- Fix installer and dependency issues
- Prepare for patch release
v3.16.1
2025-05-31 15:36:05 +01:00
courtmanr@gmail.com 640f31ae4b fix: handle Express version mismatch in tarballs
- Check for Express version mismatch after extracting tarball
- Reinstall dependencies if Express version is wrong
- Fixes service startup failure due to path-to-regexp error
- Works around issue where GitHub releases have wrong Express version

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 15:34:49 +01:00
courtmanr@gmail.com 098b579592 feat: restore installer self-update check
- Added back the self-update check for the installer script
- Installer now checks for updates to itself before running
- Skips update check when running from pipe (curl | bash)
- User is prompted before updating the installer

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 15:31:19 +01:00
courtmanr@gmail.com f2994141b6 refactor: clean up installer for pre-built tarball releases
- Removed npm dependency installation from installer (tarballs include deps)
- Cleaned up output with better icons and formatting
- Simplified installation flow since tarballs are pre-built
- Reduced installer from 590 to 522 lines
- Fixed messaging to be cleaner and more professional

The installer now expects properly built tarballs from create-release.sh
that include all dependencies and pre-built CSS.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 15:29:05 +01:00
courtmanr@gmail.com 227de6a65e fix: install dev dependencies temporarily for CSS build
- Install all dependencies (including dev) initially
- Build CSS with tailwindcss available
- Remove dev dependencies after CSS is built
- Fixes installation failure due to missing tailwindcss
2025-05-31 15:22:25 +01:00
courtmanr@gmail.com 081f1703d3 fix: handle CSS build gracefully in tarball installations
- Check if CSS is already built before attempting to rebuild
- Skip CSS build if tailwindcss is not available (dev dependency)
- Continue installation even if CSS build fails (tarball should have pre-built CSS)
- Fix issue where installation would fail due to missing tailwindcss

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 15:18:12 +01:00
courtmanr@gmail.com e0e0781819 refactor: simplify install script and remove automatic updates
- Reduced script size from 2290 to 590 lines (74% reduction)
- Switched from git cloning to tarball installation
- Removed all automatic update functionality (cron jobs, self-update)
- Removed unnecessary dependencies (git, diffutils, jq)
- Simplified installation flow with cleaner code structure
- Preserved core functionality: install, update, remove, migrate
- All updates now require manual execution

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 15:15:47 +01:00
courtmanr@gmail.com 56a7cfce8a fix: ensure npm install runs when Express version mismatch is detected
- Set should_update_deps=true when Express version mismatch is found
- Previously, the installer would detect the mismatch but still skip npm install
- This was causing the path-to-regexp error to persist even after detection

The installer will now properly update dependencies when it detects
that Express version is not 4.19.2.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 15:03:20 +01:00
courtmanr@gmail.com 03d51263e1 fix: remove bash syntax errors in installer script
- Remove 'local' keyword usage outside of functions
- Variables should_update_deps, current_express_ver, and express_version are now global
- Fixes "./install-pulse.sh: line 2204: local: can only be used in a function" error

This was preventing the dependency update logic from running properly.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 14:56:18 +01:00
courtmanr@gmail.com 24e8636c36 fix: ensure installer always updates dependencies on updates
- Changed installer to always run npm install on updates, not just fresh installs
- Added Express version check even for tarball installations
- Forces dependency update if Express version doesn't match expected 4.19.2
- Removed manual fix script as it's no longer needed

The issue was that tarball installations include pre-built node_modules,
which prevented dependency updates when package.json changed.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 14:53:31 +01:00
courtmanr@gmail.com af9f3ed0a1 feat: add emergency fix script for Express version issue
- Add fix-express-version.sh script to manually resolve path-to-regexp errors
- Script performs complete node_modules cleanup and reinstall
- Verifies correct Express 4.19.2 version is installed
- Provides immediate solution while installer is being debugged

Run this script on affected servers:
sudo /opt/pulse/scripts/fix-express-version.sh

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 14:50:50 +01:00
courtmanr@gmail.com ae4ba7e4da fix: force clean dependency install to resolve path-to-regexp error
- Stop the service before updating dependencies
- Remove node_modules directory to force clean install
- Add Express version verification after install
- This ensures old Express 4.21.x dependencies are completely removed

The service recovery was masking the real issue - old node_modules
were not being updated properly, keeping the problematic Express version.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 14:48:53 +01:00
courtmanr@gmail.com d7601a48a9 fix: improve npm dependency installation in installer
- Switch from npm install to npm ci for clean installs based on package-lock.json
- Add fallback to npm install if npm ci fails
- Remove --unsafe-perm flag and use --omit=dev for production installs
- Show dependency installation output (filtering npm WARN messages)

This ensures that package-lock.json changes are properly applied during updates,
fixing issues where old dependencies remain after updates.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 14:46:39 +01:00
courtmanr@gmail.com 88c5146bee fix: resolve path-to-regexp error by pinning Express to 4.19.2
- Downgrade Express from ^4.21.2 to 4.19.2 to avoid path-to-regexp compatibility issues
- Express 4.21.x includes a newer version of path-to-regexp with breaking changes
- Routes with multiple parameters (e.g., /api/thresholds/:endpointId/:nodeId/:vmid) were causing startup failures
- This resolves the "pulse-monitor.service: Failed with result 'exit-code'" error

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 14:42:50 +01:00
courtmanr@gmail.com ae5a861fa8 fix: improve service error detection in installer script
- Replace overly broad npm notice detection with specific checks
- Add detection for actual npm start misconfiguration in ExecStart
- Separate npm errors/warnings from service configuration issues
- Provide clearer troubleshooting guidance for each error type

This prevents false positives when npm notices appear in logs
during normal operation with direct node execution.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 14:34:56 +01:00
courtmanr@gmail.com aa138e1164 fix: resolve service startup failures by using direct node execution
Replace npm execution with direct node server/index.js in systemd service to eliminate npm-related startup failures and update notices. Add improved diagnostics to detect and explain npm execution issues.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 14:26:50 +01:00
courtmanr@gmail.com 592556ccb8 enhance: improve service recovery feedback in installation script
Add clearer messaging when service recovery succeeds to provide better user feedback during installation process.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 14:22:56 +01:00
courtmanr@gmail.com 93c14b6ecb fix: resolve Express v5 compatibility issues and improve server startup
- Downgrade Express from ^5.1.0 to ^4.21.2 to resolve path-to-regexp v8 compatibility issues
- Fix "Missing parameter name" server startup error caused by Express v5/path-to-regexp v8 breaking changes
- Move initial discovery cycle to background execution to allow immediate HTTP server startup
- Remove conflicting server/node_modules directory that contained outdated path-to-regexp

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 14:17:11 +01:00
courtmanr@gmail.com 1590d7a385 chore: release v3.16.0 v3.16.0 2025-05-31 11:51:08 +01:00
courtmanr@gmail.com 1a804c19fc chore: update acknowledgements.json formatting 2025-05-31 11:50:38 +01:00
courtmanr@gmail.com 67bc56cdbd chore: add acknowledgements.json to gitignore
Runtime alert acknowledgment data should not be tracked in version control.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 11:49:18 +01:00
courtmanr@gmail.com 407e1a4f2d fix: resolve custom threshold configuration errors
- Add validation to prevent API calls with missing nodeId/vmid parameters
- Implement proper guest selector initialization for edit modal
- Add server-side error handlers to return JSON instead of HTML for API routes
- Include debug logging for threshold configuration troubleshooting
- Ensure dropdown selection properly populates all required hidden fields

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 11:48:39 +01:00
courtmanr@gmail.com bdf7bc926f feat: consolidate alert functionality into unified Alert Configuration tab
• Merge separate "Alerts" and "Custom Thresholds" tabs into single "Alert Configuration" tab
• Improve UX by organizing all alert settings in one logical location
• Add comprehensive custom per-VM/LXC threshold management system with migration support
• Include blue "T" badges for VMs with custom thresholds in dashboard
• Implement full CRUD operations for threshold configurations via REST API
• Support migration-aware threshold keys (endpointId:vmid) for cluster environments

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 11:32:16 +01:00
courtmanr@gmail.com 864d7e180e enhance: improve migration from /opt/pulse-proxmox to /opt/pulse
- Add comprehensive user notification with migration details
- Implement pre-migration validation (disk space, permissions, valid installation)
- Add migration status tracking to prevent duplicate attempts
- Enhance error messages with detailed troubleshooting steps
- Provide interactive confirmation before proceeding

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 10:56:03 +01:00
courtmanr@gmail.com d883d85b7b fix: implement persistent Docker volume configuration to prevent data loss
Previously, configuration created via the web UI was lost when containers were
recreated or updated, requiring users to reconfigure each time. This was due to
the .env file being stored inside the container filesystem.

Changes:
- Add persistent volume mount for configuration directory in docker-compose.yml
- Update ConfigApi to auto-detect Docker vs development environment
- Configure dotenv loading to use persistent config path when available
- Update file watcher to monitor correct .env file location
- Remove conflicting host .env file mount
- Update README with new volume configuration instructions

Configuration now persists across container updates, eliminating the need for
users to reconfigure after updates.

Fixes #94

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 10:30:51 +01:00
courtmanr@gmail.com 7249a2dd13 fix: preserve existing credentials when adding additional PVE/PBS endpoints
Previously, adding additional PVE credentials would remove all existing PBS
credentials from the .env file, and vice versa. This was caused by the credential
removal logic not checking if the new configuration actually contained endpoints
of the same type before removing existing ones.

The fix ensures that:
- PBS credentials are preserved when adding additional PVE endpoints
- PVE credentials are preserved when adding additional PBS endpoints
- Existing endpoints are only removed when explicitly managing that endpoint type

Fixes #91

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 10:01:15 +01:00
courtmanr@gmail.com b097d87465 refactor: improve type safety in guest ID comparisons
Replace loose equality/inequality operators with strict comparisons and proper type conversion for guest vmid matching:

- Use parseInt() with strict equality for all guest ID comparisons
- Prevents type coercion bugs between string and number vmids
- Ensures consistent behavior across different data sources
- Improves reliability in multi-cluster environments

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 09:35:12 +01:00
courtmanr@gmail.com 3de417926e fix: resolve guest identification issues in backups tab
Fixed guest lookup logic to properly handle guests with the same vmid on different nodes by implementing unique guest identification throughout the backup data pipeline:

- Updated guest filtering to use vmid-node combinations instead of simple vmid matching
- Enhanced PBS vs PVE backup system awareness for node-specific vs centralized filtering
- Fixed calendar heatmap data structures to prevent guest data mixing
- Improved calendar date filtering to use unique guest identifiers
- Added node-aware filtering for backup tasks and snapshot detection

This resolves issues where the filtered summary and calendar would incorrectly display or mix data from guests sharing the same vmid across different nodes.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 09:29:47 +01:00
courtmanr@gmail.com 70dc35aa21 fix: resolve sticky column header issue in storage tab
Apply the same sticky header pattern used in dashboard to fix column header
positioning in storage table. Individual header cells are now sticky instead
of relying on row-level sticky positioning.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 00:33:34 +01:00
courtmanr@gmail.com ac5b90755a chore: release v3.15.1 v3.15.1 2025-05-31 00:14:32 +01:00
courtmanr@gmail.com 142cdf6216 fix: make EnvironmentFile optional in systemd service to prevent startup failures
Changes EnvironmentFile to EnvironmentFile=- in systemd service template, allowing service to start even when .env file doesn't exist during fresh installations.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 00:11:59 +01:00
courtmanr@gmail.com 1004d30ae7 fix: add git repository validation before attempting git operations in installer
Prevents "fatal: not a git repository" error when install script falls back to git update on non-git directories.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 00:08:58 +01:00
courtmanr@gmail.com b804acfe2d chore: release v3.15.0 v3.15.0 2025-05-30 23:50:41 +01:00
courtmanr@gmail.com c345014057 fix: update backup filter color scheme for better visual distinction
- Changed PBS filter from green to purple
- Changed PVE filter from yellow to orange
- Changed Snapshots filter from blue to yellow
- Improves accessibility and visual clarity between backup types

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 23:47:56 +01:00
courtmanr@gmail.com 4f678c600e fix: resolve PVE backup visibility issue with hybrid node discovery and filtering fixes
Implements comprehensive solution for GitHub issue #80 where PVE backups stored on local node storage weren't appearing in the backup tab. Adds intelligent node discovery system that creates direct connections to access node-local storage while maintaining backward compatibility with shared storage setups.

Key improvements:
- Hybrid discovery approach with automatic node IP detection and connection caching
- Fixed data structure mismatches and key collision issues for duplicate VMIDs across nodes
- Corrected PVE backup filtering logic in summary cards and calendar views
- Enhanced API token permission documentation for storage content access
- Optimized connection handling with reduced timeouts for faster discovery cycles

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 23:43:56 +01:00
courtmanr@gmail.com ea1842a29e feat: enhance migration logic to automatically fix systemd service paths
- Added fix_service_paths() function to update service files with old paths
- Migration now automatically updates WorkingDirectory and EnvironmentFile in systemd service
- Handles edge cases where migration occurred but service paths weren't updated
- Prevents "Internal Server Error" issues that users might face after migration
- Service is stopped, updated, and restarted during migration for seamless transition

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 22:11:46 +01:00
courtmanr@gmail.com 440744fcb0 fix: update CSS fix script path from /opt/pulse-proxmox to /opt/pulse
- Updated default PULSE_DIR in fix-css.sh to use new installation path
- Ensures CSS fix script works with updated installation location

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 22:08:36 +01:00
courtmanr@gmail.com c40e3d7084 feat: update installation path from /opt/pulse-proxmox to /opt/pulse
- Changed PULSE_DIR from "/opt/pulse-proxmox" to "/opt/pulse" to align with community scripts
- Added automatic migration logic to handle existing installations at old path
- Migration preserves all user configuration and data with backup creation
- Updated remove function to clean up both old and new directories
- Added safety checks and rollback functionality for failed migrations

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 21:51:54 +01:00
courtmanr@gmail.com d48998e611 chore: release v3.14.0 v3.14.0 2025-05-30 18:20:33 +01:00
courtmanr@gmail.com aeed4560cc feat: enhance settings with auto-updates, theme management, and version checking
- Add comprehensive auto-update configuration with scheduling options
- Move theme toggle to settings with Auto/Light/Dark modes and system preference detection
- Implement automatic version checking against GitHub releases with visual status indicators
- Reorganize test connections to be tab-specific (PVE/PBS tabs only)
- Add helpful documentation links for API token creation
- Fix configuration loading by removing incorrect success property check
- Improve settings organization with logical grouping of related features

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 18:14:36 +01:00
courtmanr@gmail.com c1f15baef9 fix: prevent sticky column border transparency during horizontal scroll
🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 18:00:29 +01:00
courtmanr@gmail.com 956f44d13a feat: redesign settings menu with tabbed interface for better organization
- Replace single-page settings form with clean tabbed navigation
- Organize settings into logical sections: Proxmox VE, Backup Server, Alerts, System
- Improve visual hierarchy and reduce cognitive load
- Restore comfortable spacing while maintaining app's condensed philosophy
- Preserve all existing functionality with enhanced user experience

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 17:53:08 +01:00
courtmanr@gmail.com f4ae05c00d fix: resolve sticky column border visual artifacts at different resolutions
- Add bottom border to sticky columns in dashboard, PBS, and storage views
- Ensure sticky cells inherit row background colors (failed/running tasks)
- Fix issue where every other row appeared grouped due to missing borders

Fixes #87

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 17:23:13 +01:00
courtmanr@gmail.com 3381981bb8 fix: make update system Docker-aware and prevent container modifications
- Added Docker environment detection to prevent in-place updates
- Show Docker-specific update instructions in UI instead of update button
- Provide proper docker pull commands for Docker users
- Updated README with web-based update documentation
- Ensure Docker container immutability is maintained
2025-05-30 16:35:24 +01:00
courtmanr@gmail.com afa1aef98f feat: add web-based update management system
- Created UpdateManager class for handling application updates
- Added update check, download, and apply functionality
- Integrated update UI into settings modal with progress tracking
- Added version display and update notifications
- Implemented proper backup and rollback mechanism
- Added Docker-aware restart logic
- Enhanced configuration API to include version information
- Added real-time progress updates via WebSocket
2025-05-30 16:31:14 +01:00
courtmanr@gmail.com 468172c5bf fix: ensure settings modal displays all configured PVE/PBS endpoints
- Modified getConfig() to include all additional endpoints from .env file
- Enhanced configuration save to properly clean up removed endpoints
- Improved .env file organization with grouped additional endpoints
- Updated connection testing to validate all configured endpoints
2025-05-30 16:21:01 +01:00
courtmanr@gmail.com e1bc163886 chore: release v3.13.0 v3.13.0 2025-05-30 15:22:48 +01:00
courtmanr@gmail.com 80bd73d2fd docs: update README to reflect web-based configuration system
- Emphasize web interface configuration as primary method
- Simplify installation instructions by removing manual .env setup
- Update Docker Compose example with volume mounting for persistence
- Modernize all setup flows to use settings modal approach
- Maintain environment variables section for advanced users
- Update troubleshooting to reference settings modal
- Align documentation with streamlined user experience

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 15:19:32 +01:00
courtmanr@gmail.com f624e2e2df feat: update release script to align with web-based configuration
- Remove .env.example from tarball creation (no longer needed)
- Remove .env.example from essential files verification
- Update manual installation instructions to use web interface
- Simplify release process by eliminating manual .env file setup
- Align with new automatic settings modal approach

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 15:16:49 +01:00
courtmanr@gmail.com e1494418b8 feat: update install script for web-based configuration approach
- Remove automatic .env.example copying that's no longer needed
- Preserve existing .env files to avoid overwriting user configuration
- Update messaging to reflect new web-based setup via settings modal
- Provide clear first-time setup instructions for new installations
- Maintain backward compatibility for existing installations

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 15:15:29 +01:00