MCPcopy
hub / github.com/coder/mux / DesktopSessionManager

Class DesktopSessionManager

src/node/services/desktop/DesktopSessionManager.ts:22–249  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

20} from "./PortableDesktopSession";
21
22export class DesktopSessionManager {
23 private readonly sessions = new Map<string, PortableDesktopSession>();
24 private readonly startupPromises = new Map<string, Promise<PortableDesktopSession>>();
25
26 constructor(
27 private readonly deps: {
28 config: Config;
29 experimentsService: ExperimentsService;
30 workspaceService: WorkspaceService;
31 }
32 ) {}
33
34 private parseWorkspaceRuntime(metadata: FrontendWorkspaceMetadata) {
35 const runtimeConfig = metadata.runtimeConfig;
36
37 switch (runtimeConfig.type) {
38 case "local":
39 return parseRuntimeModeAndHost("srcBaseDir" in runtimeConfig ? "worktree" : "local");
40 case "worktree":
41 return parseRuntimeModeAndHost("worktree");
42 case "ssh":
43 return parseRuntimeModeAndHost(`ssh ${runtimeConfig.host}`);
44 case "docker":
45 return parseRuntimeModeAndHost(`docker ${runtimeConfig.image}`);
46 case "devcontainer":
47 return parseRuntimeModeAndHost(
48 runtimeConfig.configPath.length > 0
49 ? `devcontainer ${runtimeConfig.configPath}`
50 : "devcontainer"
51 );
52 }
53 }
54
55 getPrereqStatus(): DesktopPrereqStatus {
56 assert(
57 this.deps.config.rootDir.length > 0,
58 "DesktopSessionManager requires a non-empty rootDir"
59 );
60
61 if (!["linux", "darwin", "win32"].includes(process.platform)) {
62 return { available: false, reason: "unsupported_platform" };
63 }
64
65 try {
66 if (!PortableDesktopSession.checkAvailability(this.deps.config.rootDir)) {
67 return { available: false, reason: "binary_not_found" };
68 }
69
70 return { available: true };
71 } catch (error) {
72 log.error("PortableDesktop prerequisite check failed during availability check", {
73 error,
74 });
75 if (error instanceof PortableDesktopBinaryNotFoundError) {
76 return { available: false, reason: "binary_not_found" };
77 }
78 return { available: false, reason: "startup_failed" };
79 }

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected