From 1db7080bd66407fabab154f3d5bcd31949a12fb4 Mon Sep 17 00:00:00 2001 From: Edward Misback Date: Tue, 24 Mar 2026 07:28:23 -0400 Subject: [PATCH 01/22] Image resize, separate experimental tools from standard. --- .../webview-ui/src/additionalTools.tsx | 2307 ++++++++++++++ vscode-extension/webview-ui/src/tools.tsx | 2697 ++--------------- 2 files changed, 2562 insertions(+), 2442 deletions(-) create mode 100644 vscode-extension/webview-ui/src/additionalTools.tsx diff --git a/vscode-extension/webview-ui/src/additionalTools.tsx b/vscode-extension/webview-ui/src/additionalTools.tsx new file mode 100644 index 0000000..893798e --- /dev/null +++ b/vscode-extension/webview-ui/src/additionalTools.tsx @@ -0,0 +1,2307 @@ +import { AnnotationEditorProps } from "./App"; +import React, { useEffect, useState, useRef } from "react"; +import { ObjectInspector } from "react-inspector"; +import { ChatMessage, lmApi, mockLmApi } from "./lm-api-client"; +import { vscode } from "./utilities/vscode"; + +const commonTextStyle: React.CSSProperties = { + fontFamily: "Poppins, sans-serif", + fontSize: "14px", + color: "black", +}; + +// dead code +const RunCodeSegment: React.FC = (props) => { + const [apiResName, setApiResName] = useState(props.value.metadata.apiResName || ""); + const [apiRes, setApiRes] = useState(props.value.metadata.apiRes || ""); + const [code, setCode] = useState(props.value.metadata.code || ["", "", ""]); + const [pinBody, setPinBody] = useState(props.value.metadata.pinBody || false); + const [showHead, setShowHead] = useState(props.value.metadata.showHead || false); + const [showTail, setShowTail] = useState(props.value.metadata.showTail || false); + + function addReturn(code: string): string { + const lines = code.trim().split("\n"); + if (lines.length === 0) { + return ""; + } + const lastLine = lines[lines.length - 1]; + lines[lines.length - 1] = `return ${lastLine.trim()}`; + return lines.join("\n"); + } + + async function runAndUpdateCode(): Promise { + try { + let empty = true; + for (let i = 0; i < code.length; i++) { + if (String(code[i]).trim() !== "") { + empty = false; + break; + } + } + if (apiRes !== "" && apiResName === "") { + empty = false; + } + if (empty) { + props.utils.setMetadata({ + error: "No code to run", + response: undefined, + code: code, + }); + return; + } + + let joinedCode = code.join("\n"); + if (apiRes !== "" && apiResName !== "") { + joinedCode = `const ${apiResName} = Promise.resolve(${apiRes});\n${joinedCode}`; + } + + const asyncFunction = new Function(`return (async () => { ${joinedCode} })();`); + let result = await asyncFunction(); + + if (result === undefined) { + const newCode = addReturn(joinedCode); + try { + const asyncReturnFunction = new Function(`return (async () => { ${newCode} })();`); + result = await asyncReturnFunction(); + } catch {} + } + + props.utils.setMetadata({ + response: result || "Undefined", + error: undefined, + code, + apiRes, + apiResName, + }); + } catch (e) { + props.utils.setMetadata({ + response: undefined, + error: e instanceof Error ? e.message : String(e), + code, + apiRes, + apiResName, + }); + } + } + + return ( +
+
+ +
+ +

+