mirror of
https://github.com/QwenLM/qwen-code.git
synced 2025-12-20 16:57:46 +00:00
70 lines
1.9 KiB
TypeScript
70 lines
1.9 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright 2025 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
import fs from 'fs/promises';
|
|
import * as os from 'os';
|
|
import path from 'path';
|
|
|
|
type WarningCheck = {
|
|
id: string;
|
|
check: (workspaceRoot: string) => Promise<string | null>;
|
|
};
|
|
|
|
// Individual warning checks
|
|
const homeDirectoryCheck: WarningCheck = {
|
|
id: 'home-directory',
|
|
check: async (workspaceRoot: string) => {
|
|
try {
|
|
const [workspaceRealPath, homeRealPath] = await Promise.all([
|
|
fs.realpath(workspaceRoot),
|
|
fs.realpath(os.homedir()),
|
|
]);
|
|
|
|
if (workspaceRealPath === homeRealPath) {
|
|
return 'You are running Qwen Code in your home directory. It is recommended to run in a project-specific directory.';
|
|
}
|
|
return null;
|
|
} catch (_err: unknown) {
|
|
return 'Could not verify the current directory due to a file system error.';
|
|
}
|
|
},
|
|
};
|
|
|
|
const rootDirectoryCheck: WarningCheck = {
|
|
id: 'root-directory',
|
|
check: async (workspaceRoot: string) => {
|
|
try {
|
|
const workspaceRealPath = await fs.realpath(workspaceRoot);
|
|
const errorMessage =
|
|
'Warning: You are running Qwen Code in the root directory. Your entire folder structure will be used for context. It is strongly recommended to run in a project-specific directory.';
|
|
|
|
// Check for Unix root directory
|
|
if (path.dirname(workspaceRealPath) === workspaceRealPath) {
|
|
return errorMessage;
|
|
}
|
|
|
|
return null;
|
|
} catch (_err: unknown) {
|
|
return 'Could not verify the current directory due to a file system error.';
|
|
}
|
|
},
|
|
};
|
|
|
|
// All warning checks
|
|
const WARNING_CHECKS: readonly WarningCheck[] = [
|
|
homeDirectoryCheck,
|
|
rootDirectoryCheck,
|
|
];
|
|
|
|
export async function getUserStartupWarnings(
|
|
workspaceRoot: string,
|
|
): Promise<string[]> {
|
|
const results = await Promise.all(
|
|
WARNING_CHECKS.map((check) => check.check(workspaceRoot)),
|
|
);
|
|
return results.filter((msg) => msg !== null);
|
|
}
|