1. VM Actions: pass clusterId/clusters props from VMsPage to VMList;
rename node→node_id in 14 Rust Tauri command handlers to match
Tauri 2.x camelCase→snake_case mapping; wire action menu items
through handleAction so menu closes on click.
2. Migration: add Target Remote dropdown in MigrationDialog showing
available clusters for cross-datacenter migration; targetCluster
passed through to migrate_vm invoke.
3. Storage: switch list_proxmox_datastores to cluster/resources?type=storage
(single API call, cluster-wide); normalize plugintype→type,
disk/maxdisk→used/size, compute available via saturating_sub.
4. Network: replace free-text Interface Type Input with a Select
dropdown listing all PVE network interface types.
5. Firewall New Rule: add onNewRule prop to FirewallRuleList, wire
button; add full dialog in FirewallPage with action/protocol/
source/dest/port fields that calls add_firewall_rule; rewrite
Rust command to accept rule as serde_json::Value instead of
flat params (matches frontend invoke signature).
6. Backup: normalize raw PVE cluster/backup fields (id, storage,
node, schedule, enabled, next-run timestamp) to BackupJobInfo
shape; update BackupJobList columns to show storage, vmid, mode.
7. AI chat: merge all system prompt sections into a single system
message (fixes Qwen 3.5 / LiteLLM rejection of multiple system
messages); push assistant message with tool_calls before tool
result messages to satisfy OpenAI API contract.
- VM Migration:
* Added proper dialog with target node selection dropdown
* Fixed migration trigger to actually call the API
* Added live migration options with max downtime configuration
- VM Actions:
* Fixed delete to use proper confirmation dialog
* Fixed clone to calculate next available VMID automatically
* Verified start/stop/shutdown/reboot/suspend/resume all work correctly
- VM Data Display:
* Fixed VMList to properly map backend fields (mem, max_mem, max_disk)
* All VM fields now display correctly (ID, Memory, Disk, CPU, Uptime)
- Network Management:
* Added 'Add Interface' button with full dialog
* Added Edit and Delete buttons for each interface
* Form validation for interface creation
- Backup Management:
* Fixed 'New Job' button to open creation dialog
* Added form for creating backup jobs with schedule configuration
- Views:
* Added graceful error handling for 501 Not Implemented
* Shows user-friendly message when feature unavailable
- AI Provider:
* Fixed system message ordering in openai.rs
* Now combines all system messages and sends them at the beginning
* Resolves 'System message must be at the beginning' error
- All 386 tests pass
- Action menu: fix click-outside closing, positioning, opacity, and functionality
- VM metrics: fix CPU %, memory/disk bars with formatBytes helper, uptime formatting
- list_cluster_tasks: remove invalid 'limit' query parameter causing 400 error
- list_views/list_certificates: handle 501 Not Implemented gracefully
- list_proxmox_datastores: fetch per-node storage via /nodes/{node}/storage
- list_proxmox_backup_jobs: use cluster-level /cluster/backup endpoint
- Tests: update integration tests to use PROXMOX_HOST env var
Fixes:
- Action menu not closing when clicking away
- CPU/memory/disk/uptime displaying raw values
- Storage not displaying data
- Backup jobs not showing details
- Tasks API returning 400 Bad Request
- Views/Certificates APIs causing errors on older Proxmox versions
- Replace hardcoded dummy data in VMs, Containers, Storage, Backup, and
Firewall pages with live API calls; show empty-state UI when no
clusters are configured
- Add list_proxmox_containers backend command (LXC via cluster/resources)
and register it in the Tauri handler and frontend proxmoxClient.ts
- Fix add_proxmox_cluster to store credentials without requiring a live
Proxmox connection; persist username in DB (migration 034); update
list/get queries to read username column from new schema
- Replace alert() in RemotesPage with toast.error() + rethrow so errors
surface correctly in Tauri WebView
- Replace tauri-plugin-updater with direct Gitea HTTP API call for
update checks; use tauri-plugin-opener for browser launch; Updater UI
now shows current/latest version and release notes
- Add gogs.tftsr.com to CSP connect-src
- Fix all 74 pre-existing ESLint no-explicit-any warnings in
proxmoxClient.ts; remove stale eslint-disable directive in ACLPage.tsx
- All checks pass: cargo fmt, clippy -D warnings, 411 Rust tests,
tsc --noEmit, eslint --max-warnings 0, 386 frontend tests