Community Edition
Added
- AI Server / MCP — refactored MCP infrastructure with ToolHelper, McpBridge, ApiAccess/Bridge tabs
- AI Server / MCP — upgrade McpBridge to official MCP SDK 1.0.0; log MCP requests to audit log
- Automatic API token wizard — guided creation of API tokens during cluster registration
- PvePermissions model — cluster permission caching
- Health Score — for nodes, VMs, and storages; added to Resources column picker and widget icons
- Sparklines — CPU/RAM history sparklines in VM and Node summary components
- Cluster name in URL — multi-tab isolation and shareable deep links (
/module/{cluster}/{slug}) - Query param deep-linking — URL navigation in Resources, VM/Node managers, and search system
- Localization system — JSON-based localization with culture support
- Culture preference — language/culture selection in user profile
- CopyValueDialog / CredentialDialog — shared copy and credential display components
- OpenCopyValueAsync — dialog helper for token/value display
- Resizable side dialog — drag-to-resize side panel; EnumDropDown component
- SshRequiredGate — gate component in NodeProtect/Updater for SSH requirement enforcement
- Disable console/SSH for non-PAM or API Token users
- Default password notification — alert when default admin password is still in use
- Icons — added to Diagnostic IssuesDialog fields and HealthScore widget
- Dynamic Documentation link — help menu link adapts to current module
- "Who is using" — HelpMenu entry with cluster info pre-fill
Changed
- Move ClusterSelector to Layout namespace; add UrlHelper
- Move SettingSection/SettingsAccordion from Module.System to Core
- Standardize audit logging format
- Unify Job/ActionHelper scan signature across analytics modules
- Core misc improvements — BuildInfo.IsInContainer, SyncRolesAsync, EditDialog cleanup
- Extract default admin credentials into ApplicationHelper constants
- Update default dashboard configuration
- Simplify AI Server VmTools; add tags to minimal VM output
- Remove redundant title/aria-label from buttons with visible Text
- Upgrade Radzen to 9.0.8
Fixed
- Prevent concurrent RefreshDataAsync calls with SemaphoreSlim
- Expand resource rows after data load instead of OnAfterRenderAsync
- PasswordField Start/End slots reorder; use Variant.Text for toggle
- Various minor UI and logic fixes
Enterprise Edition
Added
- DRS — unified Dashboard with Resource Distribution (CPU/RAM barchart + RRD sparklines), HA Groups support, full run history with migrations detail
- AI Server — new MCP tools:
ListBackups,ListStorageContent,ListTasks; PSI Pressure metrics in RRD data - AppTokens — authentication with bulk permission operations; AppTokenPermissionsGrid, PermissionsSummaryDialog
- PermissionsEditor — AppTokens UI, built-in role protection, PermissionsSummaryDialog service
- AIServer EE permissions — extended MCP tool permissions model
Changed
- Audit log — copy button in audit log details
- Adapt EE to URL-based cluster routing (cluster name in URL)
Website | Docker Hub CE | Docker Hub EE
What's Changed
- feat: add "Who is using" to HelpMenu with cluster info pre-fill by @franklupo in #183
- docs: update README screenshots to match user guide index by @franklupo in #184
- docs: add Connecting AI Clients and MCP Bridge section to ai-server by @franklupo in #185
- feat: dynamic Documentation link in help menu based on current module by @franklupo in #186
- fix: prevent concurrent RefreshDataAsync calls with SemaphoreSlim by @franklupo in #187
- feat: add AppTokens authentication and bulk permission operations by @franklupo in #188
- feat: add AppTokenPermissionsGrid, PermissionsSummaryDialog, and IPermissionsSummaryDialogService by @franklupo in #190
- feat: refactor AIServer MCP infrastructure — ToolHelper, McpBridge, ApiAccess/Bridge tabs by @franklupo in #191
- chore: Core misc improvements — BuildInfo.IsInContainer, SyncRolesAsync, EditDialog cleanup by @franklupo in #192
- chore: unify Job/ActionHelper scan signature across analytics modules by @franklupo in #193
- chore: add McpBridge build support, update docs — PVEAdmin role and AI Server output formats by @franklupo in #194
- chore: extract default admin credentials into ApplicationHelper constants by @franklupo in #195
- chore: update default dashboard configuration by @franklupo in #196
- feat: add sparklines to VM and Node summary components by @franklupo in #197
- chore: update package versions by @franklupo in #198
- feat: add OpenCopyValueAsync dialog helper and refactor token display by @franklupo in #199
- fix: reorder Start/End slots and use Variant.Text for toggle in PasswordField by @franklupo in #200
- feat: improve NodesSettings UX — focus, keyboard shortcuts, cleanup by @franklupo in #201
- feat: add automatic API token creation wizard for cluster registration by @franklupo in #202
- feat: add Health Score for nodes, VMs, and storages by @franklupo in #203
- feat: upgrade McpBridge to use official MCP SDK 1.0.0 by @franklupo in #204
- feat: log MCP requests to audit log by @franklupo in #205
- docs: document automatic API token creation wizard by @franklupo in #206
- chore: add TODO to change default AccessType to ApiToken by @franklupo in #207
- refactor: move WebContent RenderSettings code-behind to .razor.cs by @franklupo in #208
- feat: add icons to Diagnostic IssuesDialog fields by @franklupo in #209
- feat: add HealthScore to Resources column picker and widget icons by @franklupo in #210
- feat: add CopyValueDialog and CredentialDialog shared components by @franklupo in #211
- feat: notify user when default admin password is still in use by @franklupo in #212
- refactor: WebApiCredential, SshCredential, C#14 extension members, SSH docs by @franklupo in #213
- refactor: C#14 field keyword in AdminComponentBase + security warning UI by @franklupo in #214
- feat: SshRequiredGate in NodeProtect/Updater + remove obsolete classes by @franklupo in #215
- refactor: VmDiskSnapshotInfo rename, GetDiskSnapshotInfosAsync, FullDisplayName/TypeIcon by @franklupo in #216
- feat: resizable side dialog + EnumDropDown component by @franklupo in #217
- refactor: SSH layer + [Display] attrs + misc cleanup by @franklupo in #218
- refactor: extract GetResourceUsage extensions, GetFrom helper and ClusterDetailDialog by @franklupo in #219
- feat: disable console/SSH for non-PAM or API Token users; add user guide and docs by @franklupo in #220
- docs: add PVE permissions reference page by @franklupo in #221
- feat: introduce PvePermissions model and cluster permission caching by @franklupo in #222
- refactor: move ClusterSelector to Layout namespace; add UrlHelper by @franklupo in #223
- refactor: enhance search system with URL navigation and Data payload by @franklupo in #224
- refactor: simplify VM/Node managers; add query param navigation by @franklupo in #225
- feat: add query param deep-linking to Resources; add ClusterDetailDialog by @franklupo in #226
- chore: standardize audit logging format; remove unused imports by @franklupo in #227
- feat: add JSON-based localization system with culture support by @franklupo in #228
- feat: add culture/language preference in user profile by @franklupo in #234
- refactor: move SettingSection/SettingsAccordion from Module.System to Core by @franklupo in #230
- fix: expand resource rows after data load instead of OnAfterRenderAsync by @franklupo in #231
- fix: various minor UI and logic fixes by @franklupo in #232
- chore: update NuGet packages by @franklupo in #233
- feat: encode cluster name in URL for multi-tab and shareable links by @franklupo in #238
- chore: remove redundant title/aria-label from buttons with visible Text by @franklupo in #239
- refactor(ai-server): simplify VmTools; add tags to minimal VM output by @franklupo in #240
- chore: upgrade Radzen to 9.0.8; misc fixes and improvements by @franklupo in #241
- feat: bump to 2.0.0-rc6; add Automation category; expand docs by @franklupo in #242
Full Changelog: v2.0.0-rc5...v2.0.0-rc6