import * as vscode from "vscode";
import type { DevToolsConfigSnapshot } from "./config";
import { runDevToolsScript, makeOpenAnythingHandler, registerDevToolsOpenFolder } from "./devToolsExecutor";
const PANEL_ID = "anythingllmDevTools";
const panelTitle = "AnythingLLM dev tools";
const buildHtml = (
webview: vscode.Webview,
extensionUri: vscode.Uri,
): string => {
const scriptUri = webview.asWebviewUri(
vscode.Uri.joinPath(extensionUri, "media", "devTools.js"),
);
const csp = webview.cspSource;
return `
${panelTitle}
`;
};
export const showDevToolsPanel = (
context: vscode.ExtensionContext,
readConfig: () => DevToolsConfigSnapshot,
): void => {
const column = vscode.ViewColumn.Beside;
const panel = vscode.window.createWebviewPanel(
PANEL_ID,
panelTitle,
column,
{
enableScripts: true,
retainContextWhenHidden: true,
localResourceRoots: [
vscode.Uri.joinPath(context.extensionUri, "media"),
],
},
);
panel.webview.html = buildHtml(panel.webview, context.extensionUri);
const openFolder = registerDevToolsOpenFolder(vscode);
panel.webview.onDidReceiveMessage(
(msg: unknown) => {
void (async () => {
if (typeof msg !== "object" || msg === null) {
return;
}
const rec = msg as Record;
if (rec.type !== "run") {
return;
}
const text = typeof rec.text === "string" ? rec.text : "";
const use = readConfig();
const openBrowser = makeOpenAnythingHandler(vscode, use.anythingBaseUrl);
try {
const result = await runDevToolsScript(text, {
anythingBaseUrl: use.anythingBaseUrl,
anythingApiKey: use.anythingApiKey,
reposApiBaseUrl: use.reposApiBaseUrl,
reposApiToken: use.reposApiToken,
openFolder,
openAnythingWorkspaceInBrowser: openBrowser,
});
panel.webview.postMessage({ type: "result", text: result });
} catch (e) {
const m = e instanceof Error ? e.message : String(e);
panel.webview.postMessage({ type: "result", text: `ERROR: ${m}` });
}
})();
},
undefined,
context.subscriptions,
);
};