Browse Source

Merge pull request #2 from RooVetGit/hotfix/vsCodeCompatabilityIssue

Fix vscode compatibility issue
John Stearns 1 year ago
parent
commit
1d418ab136
1 changed files with 17 additions and 14 deletions
  1. 17 14
      src/integrations/terminal/TerminalManager.ts

+ 17 - 14
src/integrations/terminal/TerminalManager.ts

@@ -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
 			}