diff --git a/src/core/webview/ClineProvider.ts b/src/core/webview/ClineProvider.ts index 671ecd8..3daf0d3 100644 --- a/src/core/webview/ClineProvider.ts +++ b/src/core/webview/ClineProvider.ts @@ -132,6 +132,7 @@ export class ClineProvider implements vscode.WebviewViewProvider { private static activeInstances: Set = 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 || [] } diff --git a/src/test/task.test.ts b/src/test/task.test.ts index 976e3bb..cda766c 100644 --- a/src/test/task.test.ts +++ b/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 }