Add managed desktop daemon runtime support

This commit is contained in:
Mohamed Boudra
2026-03-08 15:40:02 +07:00
parent faa5aaab6f
commit 2d5d0dcacd
35 changed files with 5377 additions and 421 deletions
+17 -11
View File
@@ -163,7 +163,7 @@ function makeFetchAgentsEntry(input: {
function makeHost(input?: Partial<HostProfile>): HostProfile {
const direct: HostConnection = {
id: "direct:lan:6767",
type: "direct",
type: "directTcp",
endpoint: "lan:6767",
};
const relay: HostConnection = {
@@ -176,6 +176,12 @@ function makeHost(input?: Partial<HostProfile>): HostProfile {
return {
serverId: input?.serverId ?? "srv_test",
label: input?.label ?? "test host",
lifecycle: input?.lifecycle ?? {
managed: false,
managedRuntimeId: null,
managedRuntimeVersion: null,
associatedServerId: null,
},
connections: input?.connections ?? [direct, relay],
preferredConnectionId: input?.preferredConnectionId ?? direct.id,
createdAt: input?.createdAt ?? new Date(0).toISOString(),
@@ -227,7 +233,7 @@ describe("HostRuntimeController", () => {
connections: [
{
id: "direct:lan:6767",
type: "direct",
type: "directTcp",
endpoint: "lan:6767",
},
],
@@ -262,7 +268,7 @@ describe("HostRuntimeController", () => {
connections: [
{
id: "direct:lan:6767",
type: "direct",
type: "directTcp",
endpoint: "lan:6767",
},
],
@@ -438,7 +444,7 @@ describe("HostRuntimeController", () => {
connections: [
{
id: "direct:lan:6767",
type: "direct",
type: "directTcp",
endpoint: "lan:6767",
},
],
@@ -577,7 +583,7 @@ describe("HostRuntimeController", () => {
connections: [
{
id: "direct:lan:6767",
type: "direct",
type: "directTcp",
endpoint: "lan:6767",
},
{
@@ -667,7 +673,7 @@ describe("HostRuntimeController", () => {
connections: [
{
id: "direct:lan:6767",
type: "direct",
type: "directTcp",
endpoint: "lan:6767",
},
],
@@ -723,7 +729,7 @@ describe("HostRuntimeController", () => {
connections: [
{
id: "direct:lan:6767",
type: "direct",
type: "directTcp",
endpoint: "lan:6767",
},
],
@@ -789,7 +795,7 @@ describe("HostRuntimeStore", () => {
connections: [
{
id: "direct:lan:6767",
type: "direct",
type: "directTcp",
endpoint: "lan:6767",
},
],
@@ -837,7 +843,7 @@ describe("HostRuntimeStore", () => {
connections: [
{
id: "direct:lan:6767",
type: "direct",
type: "directTcp",
endpoint: "lan:6767",
},
],
@@ -885,7 +891,7 @@ describe("HostRuntimeStore", () => {
connections: [
{
id: "direct:lan:6767",
type: "direct",
type: "directTcp",
endpoint: "lan:6767",
},
],
@@ -1045,7 +1051,7 @@ describe("HostRuntimeStore", () => {
connections: [
{
id: "direct:lan:6767",
type: "direct",
type: "directTcp",
endpoint: "lan:6767",
},
],
+44 -8
View File
@@ -17,6 +17,10 @@ import {
type ConnectionCandidate,
type ConnectionProbeState,
} from "@/utils/connection-selection";
import {
buildLocalDaemonTransportUrl,
createTauriLocalDaemonTransportFactory,
} from "@/utils/managed-tauri-daemon-transport";
import { createTauriWebSocketTransportFactory } from "@/utils/tauri-daemon-transport";
import { applyFetchedAgentDirectory } from "@/utils/agent-directory-sync";
import { useSessionStore, type Agent } from "@/stores/session-store";
@@ -33,7 +37,9 @@ export type HostRuntimeConnectionStatus =
| "error";
export type ActiveConnection =
| { type: "direct"; endpoint: string; display: string }
| { type: "directTcp"; endpoint: string; display: string }
| { type: "directSocket"; endpoint: string; display: "socket" }
| { type: "directPipe"; endpoint: string; display: "pipe" }
| { type: "relay"; endpoint: string; display: "relay" };
export type HostRuntimeAgentDirectoryStatus =
@@ -179,9 +185,23 @@ function readFetchAgentsNextCursor(
}
function toActiveConnection(connection: HostConnection): ActiveConnection {
if (connection.type === "direct") {
if (connection.type === "directSocket") {
return {
type: "direct",
type: "directSocket",
endpoint: connection.path,
display: "socket",
};
}
if (connection.type === "directPipe") {
return {
type: "directPipe",
endpoint: connection.path,
display: "pipe",
};
}
if (connection.type === "directTcp") {
return {
type: "directTcp",
endpoint: connection.endpoint,
display: connection.endpoint,
};
@@ -421,11 +441,14 @@ function createDefaultDeps(): HostRuntimeControllerDeps {
serverId: host.serverId,
connectionType: connection.type,
endpoint:
connection.type === "direct"
connection.type === "directTcp"
? connection.endpoint
: connection.type === "directSocket" || connection.type === "directPipe"
? connection.path
: connection.relayEndpoint,
});
const tauriTransportFactory = createTauriWebSocketTransportFactory();
const localTransportFactory = createTauriLocalDaemonTransportFactory();
const base = {
suppressSendErrors: true,
clientId,
@@ -433,18 +456,31 @@ function createDefaultDeps(): HostRuntimeControllerDeps {
runtimeGeneration,
onDiagnosticsEvent: (event: DaemonClientDiagnosticsEvent) =>
recordDaemonClientDiagnostics(host.serverId, event),
...(tauriTransportFactory
? { transportFactory: tauriTransportFactory }
: {}),
};
if (connection.type === "direct") {
if (connection.type === "directSocket" || connection.type === "directPipe") {
return new DaemonClient({
...base,
...(localTransportFactory ? { transportFactory: localTransportFactory } : {}),
url: buildLocalDaemonTransportUrl({
transportType: connection.type === "directSocket" ? "socket" : "pipe",
transportPath: connection.path,
}),
});
}
if (connection.type === "directTcp") {
return new DaemonClient({
...base,
...(tauriTransportFactory
? { transportFactory: tauriTransportFactory }
: {}),
url: buildDaemonWebSocketUrl(connection.endpoint),
});
}
return new DaemonClient({
...base,
...(tauriTransportFactory
? { transportFactory: tauriTransportFactory }
: {}),
url: buildRelayWebSocketUrl({
endpoint: connection.relayEndpoint,
serverId: host.serverId,
@@ -24,7 +24,7 @@ function shouldSampleFastTransportEvent(): boolean {
export function recordHostRuntimeCreateClient(params: {
serverId: string;
connectionType: "direct" | "relay";
connectionType: "directTcp" | "directSocket" | "directPipe" | "relay";
endpoint: string;
}): void {
recordPerfDiagnosticMark(