mirror of
https://github.com/pacnpal/Roo-Code.git
synced 2025-12-20 12:21:13 -05:00
Only initialize puppeteer if user mentions url
This commit is contained in:
@@ -40,11 +40,6 @@ export function activate(context: vscode.ExtensionContext) {
|
|||||||
|
|
||||||
const sidebarProvider = new ClaudeDevProvider(context, outputChannel)
|
const sidebarProvider = new ClaudeDevProvider(context, outputChannel)
|
||||||
|
|
||||||
// Installs chromium for puppeteer url scraping
|
|
||||||
UrlScraper.ensureChromiumExists(context).catch((error) => {
|
|
||||||
outputChannel.appendLine(`Error installing Chromium: ${JSON.stringify(error)}`)
|
|
||||||
})
|
|
||||||
|
|
||||||
context.subscriptions.push(
|
context.subscriptions.push(
|
||||||
vscode.window.registerWebviewViewProvider(ClaudeDevProvider.sideBarId, sidebarProvider, {
|
vscode.window.registerWebviewViewProvider(ClaudeDevProvider.sideBarId, sidebarProvider, {
|
||||||
webviewOptions: { retainContextWhenHidden: true },
|
webviewOptions: { retainContextWhenHidden: true },
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import { getTheme } from "../utils/getTheme"
|
|||||||
import { openFile, openImage } from "../utils/open-file"
|
import { openFile, openImage } from "../utils/open-file"
|
||||||
import WorkspaceTracker from "../integrations/WorkspaceTracker"
|
import WorkspaceTracker from "../integrations/WorkspaceTracker"
|
||||||
import { openMention } from "../utils/context-mentions"
|
import { openMention } from "../utils/context-mentions"
|
||||||
|
import { UrlScraper } from "../utils/UrlScraper"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
https://github.com/microsoft/vscode-webview-ui-toolkit-samples/blob/main/default/weather-webview/src/providers/WeatherViewProvider.ts
|
https://github.com/microsoft/vscode-webview-ui-toolkit-samples/blob/main/default/weather-webview/src/providers/WeatherViewProvider.ts
|
||||||
@@ -53,12 +54,14 @@ export class ClaudeDevProvider implements vscode.WebviewViewProvider {
|
|||||||
private view?: vscode.WebviewView | vscode.WebviewPanel
|
private view?: vscode.WebviewView | vscode.WebviewPanel
|
||||||
private claudeDev?: ClaudeDev
|
private claudeDev?: ClaudeDev
|
||||||
private workspaceTracker?: WorkspaceTracker
|
private workspaceTracker?: WorkspaceTracker
|
||||||
|
private urlScraper?: UrlScraper
|
||||||
private latestAnnouncementId = "sep-14-2024" // update to some unique identifier when we add a new announcement
|
private latestAnnouncementId = "sep-14-2024" // update to some unique identifier when we add a new announcement
|
||||||
|
|
||||||
constructor(readonly context: vscode.ExtensionContext, private readonly outputChannel: vscode.OutputChannel) {
|
constructor(readonly context: vscode.ExtensionContext, private readonly outputChannel: vscode.OutputChannel) {
|
||||||
this.outputChannel.appendLine("ClaudeDevProvider instantiated")
|
this.outputChannel.appendLine("ClaudeDevProvider instantiated")
|
||||||
ClaudeDevProvider.activeInstances.add(this)
|
ClaudeDevProvider.activeInstances.add(this)
|
||||||
this.workspaceTracker = new WorkspaceTracker(this)
|
this.workspaceTracker = new WorkspaceTracker(this)
|
||||||
|
this.urlScraper = new UrlScraper(this.context)
|
||||||
this.revertKodu()
|
this.revertKodu()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -104,6 +107,7 @@ export class ClaudeDevProvider implements vscode.WebviewViewProvider {
|
|||||||
}
|
}
|
||||||
this.workspaceTracker?.dispose()
|
this.workspaceTracker?.dispose()
|
||||||
this.workspaceTracker = undefined
|
this.workspaceTracker = undefined
|
||||||
|
this.urlScraper = undefined
|
||||||
this.outputChannel.appendLine("Disposed all disposables")
|
this.outputChannel.appendLine("Disposed all disposables")
|
||||||
ClaudeDevProvider.activeInstances.delete(this)
|
ClaudeDevProvider.activeInstances.delete(this)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,11 +11,14 @@ import PCR from "puppeteer-chromium-resolver"
|
|||||||
const PUPPETEER_DIR = "puppeteer"
|
const PUPPETEER_DIR = "puppeteer"
|
||||||
|
|
||||||
export class UrlScraper {
|
export class UrlScraper {
|
||||||
private static context?: vscode.ExtensionContext
|
private context: vscode.ExtensionContext
|
||||||
|
|
||||||
static async ensureChromiumExists(context?: vscode.ExtensionContext): Promise<void> {
|
constructor(context: vscode.ExtensionContext) {
|
||||||
this.context = context
|
this.context = context
|
||||||
const globalStoragePath = context?.globalStorageUri?.fsPath
|
}
|
||||||
|
|
||||||
|
private async ensureChromiumExists(): Promise<void> {
|
||||||
|
const globalStoragePath = this.context?.globalStorageUri?.fsPath
|
||||||
if (!globalStoragePath) {
|
if (!globalStoragePath) {
|
||||||
throw new Error("Global storage uri is invalid")
|
throw new Error("Global storage uri is invalid")
|
||||||
}
|
}
|
||||||
@@ -36,8 +39,8 @@ export class UrlScraper {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static async urlToMarkdown(url: string): Promise<string> {
|
async urlToMarkdown(url: string): Promise<string> {
|
||||||
await this.ensureChromiumExists(this.context)
|
await this.ensureChromiumExists()
|
||||||
|
|
||||||
const globalStoragePath = this.context?.globalStorageUri?.fsPath
|
const globalStoragePath = this.context?.globalStorageUri?.fsPath
|
||||||
if (!globalStoragePath) {
|
if (!globalStoragePath) {
|
||||||
@@ -77,8 +80,8 @@ export class UrlScraper {
|
|||||||
|
|
||||||
// page.goto { waitUntil: "networkidle0" } may not ever resolve, and not waiting could return page content too early before js has loaded
|
// page.goto { waitUntil: "networkidle0" } may not ever resolve, and not waiting could return page content too early before js has loaded
|
||||||
// https://stackoverflow.com/questions/52497252/puppeteer-wait-until-page-is-completely-loaded/61304202#61304202
|
// https://stackoverflow.com/questions/52497252/puppeteer-wait-until-page-is-completely-loaded/61304202#61304202
|
||||||
private static async waitTillHTMLRendered(page: Page, timeout = 10_000) {
|
private async waitTillHTMLRendered(page: Page, timeout = 10_000) {
|
||||||
const checkDurationMsecs = 1000
|
const checkDurationMsecs = 500
|
||||||
const maxChecks = timeout / checkDurationMsecs
|
const maxChecks = timeout / checkDurationMsecs
|
||||||
let lastHTMLSize = 0
|
let lastHTMLSize = 0
|
||||||
let checkCounts = 1
|
let checkCounts = 1
|
||||||
|
|||||||
Reference in New Issue
Block a user