Get rid of type change, improve detection of webview initialization

This commit is contained in:
cte
2025-01-31 16:37:23 -08:00
parent 5fd8d8911a
commit 79c248be2a
2 changed files with 12 additions and 81 deletions

View File

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

View File

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