Browse Source

Get rid of type change, improve detection of webview initialization

cte 11 months ago
parent
commit
79c248be2a
2 changed files with 12 additions and 81 deletions
  1. 7 1
      src/core/webview/ClineProvider.ts
  2. 5 80
      src/test/task.test.ts

+ 7 - 1
src/core/webview/ClineProvider.ts

@@ -132,6 +132,7 @@ export class ClineProvider implements vscode.WebviewViewProvider {
 	private static activeInstances: Set<ClineProvider> = new Set()
 	private disposables: vscode.Disposable[] = []
 	private view?: vscode.WebviewView | vscode.WebviewPanel
+	private isViewLaunched = false
 	private cline?: Cline
 	private workspaceTracker?: WorkspaceTracker
 	mcpHub?: McpHub
@@ -396,7 +397,7 @@ export class ClineProvider implements vscode.WebviewViewProvider {
 		)
 	}
 
-	public async postMessageToWebview(message: ExtensionMessage | WebviewMessage) {
+	public async postMessageToWebview(message: ExtensionMessage) {
 		await this.view?.webview.postMessage(message)
 	}
 
@@ -644,6 +645,7 @@ export class ClineProvider implements vscode.WebviewViewProvider {
 								),
 							)
 
+						this.isViewLaunched = true
 						break
 					case "newTask":
 						// Code that should run in response to the hello message command
@@ -2471,6 +2473,10 @@ export class ClineProvider implements vscode.WebviewViewProvider {
 
 	// integration tests
 
+	get viewLaunched() {
+		return this.isViewLaunched
+	}
+
 	get messages() {
 		return this.cline?.clineMessages || []
 	}

+ 5 - 80
src/test/task.test.ts

@@ -16,109 +16,35 @@ suite("Roo Code Task", () => {
 		}
 
 		const api: ClineAPI = await extension.activate()
-
-		if (!api) {
-			assert.fail("Extension API not found")
-		}
-
 		const provider = api.sidebarProvider as ClineProvider
-
-		if (!provider) {
-			assert.fail("Provider not found")
-		}
-
 		await provider.updateGlobalState("apiProvider", "openrouter")
 		await provider.updateGlobalState("openRouterModelId", "anthropic/claude-3.5-sonnet")
-		const apiKey = process.env.OPENROUTER_API_KEY
-
-		if (!apiKey) {
-			assert.fail("OPENROUTER_API_KEY environment variable is not set")
-		}
-
-		await provider.storeSecret("openRouterApiKey", apiKey)
+		await provider.storeSecret("openRouterApiKey", process.env.OPENROUTER_API_KEY || "sk-or-v1-fake-api-key")
 
 		// Create webview panel with development options.
-		const extensionUri = extension.extensionUri
-
 		const panel = vscode.window.createWebviewPanel("roo-cline.SidebarProvider", "Roo Code", vscode.ViewColumn.One, {
 			enableScripts: true,
 			enableCommandUris: true,
 			retainContextWhenHidden: true,
-			localResourceRoots: [extensionUri],
+			localResourceRoots: [extension.extensionUri],
 		})
 
 		try {
-			// Initialize webview with development context.
-			panel.webview.options = {
-				enableScripts: true,
-				enableCommandUris: true,
-				localResourceRoots: [extensionUri],
-			}
-
 			// Initialize provider with panel.
 			provider.resolveWebviewView(panel)
 
-			// Set up message tracking.
-			let webviewReady = false
-			const originalPostMessage = provider.postMessageToWebview.bind(provider)
-
-			provider.postMessageToWebview = async (message: any) => {
-				if (message.type === "state") {
-					webviewReady = true
-				}
-
-				await originalPostMessage(message)
-			}
-
-			// Wait for webview to launch and receive initial state.
+			// Wait for webview to launch.
 			let startTime = Date.now()
 
 			while (Date.now() - startTime < timeout) {
-				if (webviewReady) {
-					// Wait an additional second for webview to fully initialize.
-					await new Promise((resolve) => setTimeout(resolve, 1000))
+				if (provider.viewLaunched) {
 					break
 				}
 
 				await new Promise((resolve) => setTimeout(resolve, interval))
 			}
 
-			if (!webviewReady) {
-				assert.fail("Webview never became ready")
-			}
-
-			// Send webviewDidLaunch to initialize chat.
-			await provider.postMessageToWebview({ type: "webviewDidLaunch" })
-
-			// Wait for webview to fully initialize.
-			await new Promise((resolve) => setTimeout(resolve, 2000))
-
-			// Restore original postMessage.
-			provider.postMessageToWebview = originalPostMessage
-
-			// Wait for OpenRouter models to be fully loaded.
-			startTime = Date.now()
-
-			while (Date.now() - startTime < timeout) {
-				const models = await provider.readOpenRouterModels()
-
-				if (models && Object.keys(models).length > 0) {
-					break
-				}
-
-				await new Promise((resolve) => setTimeout(resolve, interval))
-			}
-
-			// Send prompt.
-			const prompt = "Hello world, what is your name? Respond with 'My name is ...'"
-
-			// Start task.
-			try {
-				await api.startNewTask(prompt)
-			} catch (error) {
-				console.error(error)
-				assert.fail("Error starting task")
-			}
+			await api.startNewTask("Hello world, what is your name? Respond with 'My name is ...'")
 
 			// Wait for task to appear in history with tokens.
 			startTime = Date.now()
@@ -128,7 +54,6 @@ suite("Roo Code Task", () => {
 				const task = state.taskHistory?.[0]
 
 				if (task && task.tokensOut > 0) {
-					// console.log("Task completed with tokens:", task)
 					break
 				}