feat: wire remote-desktop plugin into core and rename i18n keys

Repoints core consumers (dispatcher, collab, session-sharing, tab
utils) at the plugin, adds isTabTypeAvailable gating for rdp/vnc/
telnet, widens hostCapability to accept an array, and renames the
guacamole i18n namespace to remoteDesktop.
This commit is contained in:
LukeGus committed 2026-09-21 20:26:09 -05:00
1 parent c6bcfdb80d
commit 76b2e5739a
41 files changed
+361 -686

No files matched your search

+5 -26
View File
@@ -299,11 +299,11 @@ async function provisionLocalDesktopUserIfNeeded(): Promise<void> {
// ssh-terminal, docker and host-metrics plugins start their own servers,
// so disabling any of them stops its WS/HTTP server. See
// plugins/ssh-terminal, plugins/docker and plugins/host-metrics.
// AI and Proxmox are also absent for the same reason: each plugin
// registers its router with its own dispatcher in database.ts on
// activate (/ai, /proxmox), so disabling either makes its routes 404
// instead of leaving a dead import here. See plugins/ai and
// plugins/proxmox.
// AI, Proxmox and Remote Desktop are also absent for the same reason:
// each plugin registers its router with its own dispatcher in
// database.ts on activate (/ai, /proxmox, /guacamole), so disabling any
// of them makes its routes 404 instead of leaving a dead import here.
// See plugins/ai, plugins/proxmox and plugins/remote-desktop.
await import("./hosts/tunnel/index.js");
await import("./hosts/file-manager/index.js");
await import("./hosts/tmux/index.js");
@@ -322,27 +322,6 @@ async function provisionLocalDesktopUserIfNeeded(): Promise<void> {
});
}
// Initialize Guacamole server for RDP/VNC/Telnet support
const guacEnabled = getCurrentSettingValue("guac_enabled") !== "false";
if (process.env.ENABLE_GUACAMOLE !== "false" && guacEnabled) {
import("./hosts/guacamole/guacamole-server.js")
.then(() => {
systemLogger.info("Guacamole server initialized", {
operation: "guac_init",
});
})
.catch((error) => {
systemLogger.warn(
"Failed to initialize Guacamole server (guacd may not be available)",
{
operation: "guac_init_skip",
error: getErrorMessage(error),
},
);
});
}
// After metrics, which the automation triggers and headless polling hook into.
const { startAutomationScheduler } =
await import("./automations/scheduler.js");