mirror of
https://github.com/pacnpal/Roo-Code.git
synced 2025-12-20 12:21:13 -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 static activeInstances: Set<ClineProvider> = new Set()
|
||||||
private disposables: vscode.Disposable[] = []
|
private disposables: vscode.Disposable[] = []
|
||||||
private view?: vscode.WebviewView | vscode.WebviewPanel
|
private view?: vscode.WebviewView | vscode.WebviewPanel
|
||||||
|
private isViewLaunched = false
|
||||||
private cline?: Cline
|
private cline?: Cline
|
||||||
private workspaceTracker?: WorkspaceTracker
|
private workspaceTracker?: WorkspaceTracker
|
||||||
mcpHub?: McpHub
|
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)
|
await this.view?.webview.postMessage(message)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -644,6 +645,7 @@ export class ClineProvider implements vscode.WebviewViewProvider {
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
this.isViewLaunched = true
|
||||||
break
|
break
|
||||||
case "newTask":
|
case "newTask":
|
||||||
// Code that should run in response to the hello message command
|
// Code that should run in response to the hello message command
|
||||||
@@ -2471,6 +2473,10 @@ export class ClineProvider implements vscode.WebviewViewProvider {
|
|||||||
|
|
||||||
// integration tests
|
// integration tests
|
||||||
|
|
||||||
|
get viewLaunched() {
|
||||||
|
return this.isViewLaunched
|
||||||
|
}
|
||||||
|
|
||||||
get messages() {
|
get messages() {
|
||||||
return this.cline?.clineMessages || []
|
return this.cline?.clineMessages || []
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,109 +16,35 @@ suite("Roo Code Task", () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const api: ClineAPI = await extension.activate()
|
const api: ClineAPI = await extension.activate()
|
||||||
|
|
||||||
if (!api) {
|
|
||||||
assert.fail("Extension API not found")
|
|
||||||
}
|
|
||||||
|
|
||||||
const provider = api.sidebarProvider as ClineProvider
|
const provider = api.sidebarProvider as ClineProvider
|
||||||
|
|
||||||
if (!provider) {
|
|
||||||
assert.fail("Provider not found")
|
|
||||||
}
|
|
||||||
|
|
||||||
await provider.updateGlobalState("apiProvider", "openrouter")
|
await provider.updateGlobalState("apiProvider", "openrouter")
|
||||||
await provider.updateGlobalState("openRouterModelId", "anthropic/claude-3.5-sonnet")
|
await provider.updateGlobalState("openRouterModelId", "anthropic/claude-3.5-sonnet")
|
||||||
const apiKey = process.env.OPENROUTER_API_KEY
|
await provider.storeSecret("openRouterApiKey", process.env.OPENROUTER_API_KEY || "sk-or-v1-fake-api-key")
|
||||||
|
|
||||||
if (!apiKey) {
|
|
||||||
assert.fail("OPENROUTER_API_KEY environment variable is not set")
|
|
||||||
}
|
|
||||||
|
|
||||||
await provider.storeSecret("openRouterApiKey", apiKey)
|
|
||||||
|
|
||||||
// Create webview panel with development options.
|
// Create webview panel with development options.
|
||||||
const extensionUri = extension.extensionUri
|
|
||||||
|
|
||||||
const panel = vscode.window.createWebviewPanel("roo-cline.SidebarProvider", "Roo Code", vscode.ViewColumn.One, {
|
const panel = vscode.window.createWebviewPanel("roo-cline.SidebarProvider", "Roo Code", vscode.ViewColumn.One, {
|
||||||
enableScripts: true,
|
enableScripts: true,
|
||||||
enableCommandUris: true,
|
enableCommandUris: true,
|
||||||
retainContextWhenHidden: true,
|
retainContextWhenHidden: true,
|
||||||
localResourceRoots: [extensionUri],
|
localResourceRoots: [extension.extensionUri],
|
||||||
})
|
})
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Initialize webview with development context.
|
|
||||||
panel.webview.options = {
|
|
||||||
enableScripts: true,
|
|
||||||
enableCommandUris: true,
|
|
||||||
localResourceRoots: [extensionUri],
|
|
||||||
}
|
|
||||||
|
|
||||||
// Initialize provider with panel.
|
// Initialize provider with panel.
|
||||||
provider.resolveWebviewView(panel)
|
provider.resolveWebviewView(panel)
|
||||||
|
|
||||||
// Set up message tracking.
|
// Wait for webview to launch.
|
||||||
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.
|
|
||||||
let startTime = Date.now()
|
let startTime = Date.now()
|
||||||
|
|
||||||
while (Date.now() - startTime < timeout) {
|
while (Date.now() - startTime < timeout) {
|
||||||
if (webviewReady) {
|
if (provider.viewLaunched) {
|
||||||
// Wait an additional second for webview to fully initialize.
|
|
||||||
await new Promise((resolve) => setTimeout(resolve, 1000))
|
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
await new Promise((resolve) => setTimeout(resolve, interval))
|
await new Promise((resolve) => setTimeout(resolve, interval))
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!webviewReady) {
|
await api.startNewTask("Hello world, what is your name? Respond with 'My name is ...'")
|
||||||
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")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wait for task to appear in history with tokens.
|
// Wait for task to appear in history with tokens.
|
||||||
startTime = Date.now()
|
startTime = Date.now()
|
||||||
@@ -128,7 +54,6 @@ suite("Roo Code Task", () => {
|
|||||||
const task = state.taskHistory?.[0]
|
const task = state.taskHistory?.[0]
|
||||||
|
|
||||||
if (task && task.tokensOut > 0) {
|
if (task && task.tokensOut > 0) {
|
||||||
// console.log("Task completed with tokens:", task)
|
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user