mirror of
https://github.com/pacnpal/Roo-Code.git
synced 2025-12-20 04:11:10 -05:00
Fix vscode compatibility issue
This commit is contained in:
@@ -70,15 +70,6 @@ Interestingly, some environments like Cursor enable these APIs even without the
|
||||
This approach allows us to leverage advanced features when available while ensuring broad compatibility.
|
||||
*/
|
||||
declare module "vscode" {
|
||||
// https://github.com/microsoft/vscode/blob/f0417069c62e20f3667506f4b7e53ca0004b4e3e/src/vscode-dts/vscode.d.ts#L7442
|
||||
interface Terminal {
|
||||
shellIntegration?: {
|
||||
cwd?: vscode.Uri
|
||||
executeCommand?: (command: string) => {
|
||||
read: () => AsyncIterable<string>
|
||||
}
|
||||
}
|
||||
}
|
||||
// https://github.com/microsoft/vscode/blob/f0417069c62e20f3667506f4b7e53ca0004b4e3e/src/vscode-dts/vscode.d.ts#L10794
|
||||
interface Window {
|
||||
onDidStartTerminalShellExecution?: (
|
||||
@@ -89,6 +80,16 @@ declare module "vscode" {
|
||||
}
|
||||
}
|
||||
|
||||
// Extend the Terminal type to include our custom properties
|
||||
type ExtendedTerminal = vscode.Terminal & {
|
||||
shellIntegration?: {
|
||||
cwd?: vscode.Uri
|
||||
executeCommand?: (command: string) => {
|
||||
read: () => AsyncIterable<string>
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export class TerminalManager {
|
||||
private terminalIds: Set<number> = new Set()
|
||||
private processes: Map<number, TerminalProcess> = new Map()
|
||||
@@ -139,16 +140,17 @@ export class TerminalManager {
|
||||
})
|
||||
|
||||
// if shell integration is already active, run the command immediately
|
||||
if (terminalInfo.terminal.shellIntegration) {
|
||||
const terminal = terminalInfo.terminal as ExtendedTerminal
|
||||
if (terminal.shellIntegration) {
|
||||
process.waitForShellIntegration = false
|
||||
process.run(terminalInfo.terminal, command)
|
||||
process.run(terminal, command)
|
||||
} else {
|
||||
// docs recommend waiting 3s for shell integration to activate
|
||||
pWaitFor(() => terminalInfo.terminal.shellIntegration !== undefined, { timeout: 4000 }).finally(() => {
|
||||
pWaitFor(() => (terminalInfo.terminal as ExtendedTerminal).shellIntegration !== undefined, { timeout: 4000 }).finally(() => {
|
||||
const existingProcess = this.processes.get(terminalInfo.id)
|
||||
if (existingProcess && existingProcess.waitForShellIntegration) {
|
||||
existingProcess.waitForShellIntegration = false
|
||||
existingProcess.run(terminalInfo.terminal, command)
|
||||
existingProcess.run(terminal, command)
|
||||
}
|
||||
})
|
||||
}
|
||||
@@ -162,7 +164,8 @@ export class TerminalManager {
|
||||
if (t.busy) {
|
||||
return false
|
||||
}
|
||||
const terminalCwd = t.terminal.shellIntegration?.cwd // one of cline's commands could have changed the cwd of the terminal
|
||||
const terminal = t.terminal as ExtendedTerminal
|
||||
const terminalCwd = terminal.shellIntegration?.cwd // one of cline's commands could have changed the cwd of the terminal
|
||||
if (!terminalCwd) {
|
||||
return false
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user