mirror of
https://github.com/pacnpal/Roo-Code.git
synced 2025-12-20 04:11:10 -05:00
Get rid of type change, improve detection of webview initialization
This commit is contained in:
@@ -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 || []
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user