diff --git a/src/sdk/cline-session-factory.ts b/src/sdk/cline-session-factory.ts index c50d9d6637..0c7bd2b4f9 100644 --- a/src/sdk/cline-session-factory.ts +++ b/src/sdk/cline-session-factory.ts @@ -8,6 +8,8 @@ // // The factory does NOT handle UI concerns — that's the SdkController's job. +import os from "node:os" +import path from "node:path" import { type ClineCoreStartInput, type CoreSessionConfig, type StartSessionResult } from "@clinebot/core" import { buildClineSystemPrompt } from "@clinebot/shared" import type { ApiConfiguration } from "@shared/api" @@ -99,6 +101,31 @@ function createSdkLogger() { } } +function resolveWorkspaceName(workspacePath: string): string { + const trimmed = workspacePath.trim() + const withoutTrailingSeparators = trimmed.replace(/[\\/]+$/, "") + const name = withoutTrailingSeparators.split(/[\\/]/).filter(Boolean).pop()?.trim() + return name || "workspace" +} + +function isFilesystemRoot(workspacePath: string): boolean { + const trimmed = workspacePath.trim() + return trimmed.length > 0 && path.resolve(trimmed) === path.parse(trimmed).root +} + +function resolveSdkWorkspaceRoot(workspaceRoot: string, cwd: string): string { + const trimmedWorkspaceRoot = workspaceRoot.trim() + if (!trimmedWorkspaceRoot) { + return cwd + } + + if (!isFilesystemRoot(trimmedWorkspaceRoot)) { + return trimmedWorkspaceRoot + } + + return os.homedir() +} + // --------------------------------------------------------------------------- // Provider → API key field mapping // --------------------------------------------------------------------------- @@ -300,7 +327,7 @@ export async function buildSessionConfig(input: SessionConfigInput): Promise