mirror of
https://github.com/QwenLM/qwen-code.git
synced 2025-12-19 09:33:53 +00:00
feat: Multi-Directory Workspace Support (part2: add "directory" command) (#5241)
This commit is contained in:
@@ -197,7 +197,7 @@ export class Config {
|
||||
private readonly embeddingModel: string;
|
||||
private readonly sandbox: SandboxConfig | undefined;
|
||||
private readonly targetDir: string;
|
||||
private readonly workspaceContext: WorkspaceContext;
|
||||
private workspaceContext: WorkspaceContext;
|
||||
private readonly debugMode: boolean;
|
||||
private readonly question: string | undefined;
|
||||
private readonly fullContext: boolean;
|
||||
@@ -394,6 +394,17 @@ export class Config {
|
||||
return this.sandbox;
|
||||
}
|
||||
|
||||
isRestrictiveSandbox(): boolean {
|
||||
const sandboxConfig = this.getSandbox();
|
||||
const seatbeltProfile = process.env.SEATBELT_PROFILE;
|
||||
return (
|
||||
!!sandboxConfig &&
|
||||
sandboxConfig.command === 'sandbox-exec' &&
|
||||
!!seatbeltProfile &&
|
||||
seatbeltProfile.startsWith('restrictive-')
|
||||
);
|
||||
}
|
||||
|
||||
getTargetDir(): string {
|
||||
return this.targetDir;
|
||||
}
|
||||
|
||||
@@ -171,6 +171,35 @@ export class GeminiClient {
|
||||
this.chat = await this.startChat();
|
||||
}
|
||||
|
||||
async addDirectoryContext(): Promise<void> {
|
||||
if (!this.chat) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.getChat().addHistory({
|
||||
role: 'user',
|
||||
parts: [{ text: await this.getDirectoryContext() }],
|
||||
});
|
||||
}
|
||||
|
||||
private async getDirectoryContext(): Promise<string> {
|
||||
const workspaceContext = this.config.getWorkspaceContext();
|
||||
const workspaceDirectories = workspaceContext.getDirectories();
|
||||
|
||||
const folderStructures = await Promise.all(
|
||||
workspaceDirectories.map((dir) =>
|
||||
getFolderStructure(dir, {
|
||||
fileService: this.config.getFileService(),
|
||||
}),
|
||||
),
|
||||
);
|
||||
|
||||
const folderStructure = folderStructures.join('\n');
|
||||
const dirList = workspaceDirectories.map((dir) => ` - ${dir}`).join('\n');
|
||||
const workingDirPreamble = `I'm currently working in the following directories:\n${dirList}\n Folder structures are as follows:\n${folderStructure}`;
|
||||
return workingDirPreamble;
|
||||
}
|
||||
|
||||
private async getEnvironment(): Promise<Part[]> {
|
||||
const today = new Date().toLocaleDateString(undefined, {
|
||||
weekday: 'long',
|
||||
@@ -208,6 +237,7 @@ export class GeminiClient {
|
||||
Today's date is ${today}.
|
||||
My operating system is: ${platform}
|
||||
${workingDirPreamble}
|
||||
Here is the folder structure of the current working directories:\n
|
||||
${folderStructure}
|
||||
`.trim();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user