import type { DesktopAppActivationFailure, DesktopAppActivationRequest, DesktopAppActivationResponse, EnvironmentId, ExecutionEnvironmentPlatformOs, ProjectId, ScopedProjectRef, ThreadId, } from "@t3tools/contracts"; export interface DesktopAppActivationProject { readonly id: ProjectId; readonly environmentId: EnvironmentId; readonly workspaceRoot: string; } export interface DesktopAppActivationTarget { readonly environmentId: EnvironmentId; readonly platform: ExecutionEnvironmentPlatformOs; } export interface DesktopAppActivationDependencies { readonly getTarget: () => DesktopAppActivationTarget | null; readonly findProject: ( environmentId: EnvironmentId, workspaceRoot: string, ) => DesktopAppActivationProject | null; readonly createProject: ( environmentId: EnvironmentId, workspaceRoot: string, ) => Promise; readonly waitForProject: (projectRef: ScopedProjectRef) => Promise; readonly openThread: ( projectRef: ScopedProjectRef, ) => Promise<{ readonly threadId: ThreadId } | null>; } function failure( requestId: string, code: DesktopAppActivationFailure["code"], message: string, ): DesktopAppActivationFailure { return { version: 1, requestId, ok: false, code, message }; } function desktopPlatformToEnvironmentOs( platform: DesktopAppActivationRequest["platform"], ): ExecutionEnvironmentPlatformOs { return platform === "win32" ? "windows" : platform; } function errorMessage(error: unknown, fallback: string): string { return error instanceof Error && error.message.trim().length > 0 ? error.message : fallback; } export async function handleDesktopAppActivationRequest( request: DesktopAppActivationRequest, dependencies: DesktopAppActivationDependencies, ): Promise { const target = dependencies.getTarget(); if (target === null) { return failure( request.requestId, "environment-unavailable", "The desktop app's primary local environment is not connected.", ); } const requestPlatform = desktopPlatformToEnvironmentOs(request.platform); if (requestPlatform !== target.platform) { return failure( request.requestId, "platform-mismatch", `The command path is for ${requestPlatform}, but the desktop app's primary environment uses ${target.platform}. Cross-platform path mapping is not supported.`, ); } let projectId = dependencies.findProject(target.environmentId, request.workspaceRoot)?.id ?? null; if (projectId === null) { try { projectId = await dependencies.createProject(target.environmentId, request.workspaceRoot); await dependencies.waitForProject({ environmentId: target.environmentId, projectId }); } catch (error) { return failure( request.requestId, "project-create-failed", errorMessage(error, "T3 Code could not add the project."), ); } } try { const opened = await dependencies.openThread({ environmentId: target.environmentId, projectId, }); if (opened === null) { return failure( request.requestId, "thread-open-failed", "T3 Code could not open a new thread for the project.", ); } return { version: 1, requestId: request.requestId, ok: true, projectId, threadId: opened.threadId, }; } catch (error) { return failure( request.requestId, "thread-open-failed", errorMessage(error, "T3 Code could not open a new thread for the project."), ); } }