From 93ac6b52c9e5067c9703d096104c99f4f29e8eb5 Mon Sep 17 00:00:00 2001 From: Nate Sesti Date: Wed, 12 Jul 2023 13:22:40 -0700 Subject: purging unecessary files --- extension/src/bridge.ts | 215 +----------------------------------------------- 1 file changed, 4 insertions(+), 211 deletions(-) (limited to 'extension/src/bridge.ts') diff --git a/extension/src/bridge.ts b/extension/src/bridge.ts index 92ba4044..55c4cc3b 100644 --- a/extension/src/bridge.ts +++ b/extension/src/bridge.ts @@ -4,14 +4,11 @@ import * as vscode from "vscode"; import { Configuration, DebugApi, - RangeInFile, - SerializedDebugContext, UnittestApi, } from "./client"; import { convertSingleToDoubleQuoteJSON } from "./util/util"; import { getExtensionUri } from "./util/vscode"; import { extensionContext } from "./activation/activate"; -const axios = require("axios").default; const util = require("util"); const exec = util.promisify(require("child_process").exec); @@ -36,21 +33,16 @@ const configuration = new Configuration({ export const debugApi = new DebugApi(configuration); export const unittestApi = new UnittestApi(configuration); -function get_python_path() { - return path.join(getExtensionUri().fsPath, ".."); -} - export function get_api_url() { - let extensionUri = getExtensionUri(); - let configFile = path.join(extensionUri.fsPath, "config/config.json"); - let config = require(configFile); + const extensionUri = getExtensionUri(); + const configFile = path.join(extensionUri.fsPath, "config/config.json"); + const config = require(configFile); if (config.API_URL) { return config.API_URL; } return "http://localhost:65432"; } -const API_URL = get_api_url(); export function getContinueServerUrl() { // If in debug mode, always use 8001 @@ -58,7 +50,7 @@ export function getContinueServerUrl() { extensionContext && extensionContext.extensionMode === vscode.ExtensionMode.Development ) { - return "http://localhost:8001"; + // return "http://localhost:8001"; } return ( vscode.workspace.getConfiguration("continue").get("serverUrl") || @@ -66,10 +58,6 @@ export function getContinueServerUrl() { ); } -function build_python_command(cmd: string): string { - return `cd ${get_python_path()} && source env/bin/activate && ${cmd}`; -} - function listToCmdLineArgs(list: string[]): string { return list.map((el) => `"$(echo "${el}")"`).join(" "); } @@ -103,198 +91,3 @@ export async function runPythonScript( } } } - -function parseStdout( - stdout: string, - key: string, - until_end: boolean = false -): string { - const prompt = `${key}=`; - let lines = stdout.split("\n"); - - let value: string = ""; - for (let i = 0; i < lines.length; i++) { - if (lines[i].startsWith(prompt)) { - if (until_end) { - return lines.slice(i).join("\n").substring(prompt.length); - } else { - return lines[i].substring(prompt.length); - } - } - } - return ""; -} - -export async function askQuestion( - question: string, - workspacePath: string -): Promise<{ answer: string; range: vscode.Range; filename: string }> { - const command = build_python_command( - `python3 ${path.join( - get_python_path(), - "ask.py" - )} ask ${workspacePath} "${question}"` - ); - - const { stdout, stderr } = await exec(command); - if (stderr) { - throw new Error(stderr); - } - // Use the output - const answer = parseStdout(stdout, "Answer"); - const filename = parseStdout(stdout, "Filename"); - const startLineno = parseInt(parseStdout(stdout, "Start lineno")); - const endLineno = parseInt(parseStdout(stdout, "End lineno")); - const range = new vscode.Range( - new vscode.Position(startLineno, 0), - new vscode.Position(endLineno, 0) - ); - if (answer && filename && startLineno && endLineno) { - return { answer, filename, range }; - } else { - throw new Error("Error: No answer found"); - } -} - -export async function apiRequest( - endpoint: string, - options: { - method?: string; - query?: { [key: string]: any }; - body?: { [key: string]: any }; - } -): Promise { - let defaults = { - method: "GET", - query: {}, - body: {}, - }; - options = Object.assign(defaults, options); // Second takes over first - if (endpoint.startsWith("/")) endpoint = endpoint.substring(1); - console.log("API request: ", options.body); - - let resp; - try { - resp = await axios({ - method: options.method, - url: `${API_URL}/${endpoint}`, - data: options.body, - params: options.query, - headers: { - "x-vsc-machine-id": vscode.env.machineId, - }, - }); - } catch (err) { - console.log("Error: ", err); - throw err; - } - - return resp.data; -} - -// Write a docstring for the most specific function or class at the current line in the given file -export async function writeDocstringForFunction( - filename: string, - position: vscode.Position -): Promise<{ lineno: number; docstring: string }> { - let resp = await apiRequest("docstring/forline", { - query: { - filecontents: ( - await vscode.workspace.fs.readFile(vscode.Uri.file(filename)) - ).toString(), - lineno: position.line.toString(), - }, - }); - - const lineno = resp.lineno; - const docstring = resp.completion; - if (lineno && docstring) { - return { lineno, docstring }; - } else { - throw new Error("Error: No docstring returned"); - } -} - -export async function findSuspiciousCode( - ctx: SerializedDebugContext -): Promise { - if (!ctx.traceback) return []; - let files = await getFileContents( - getFilenamesFromPythonStacktrace(ctx.traceback) - ); - let resp = await debugApi.findSusCodeEndpointDebugFindPost({ - findBody: { - traceback: ctx.traceback, - description: ctx.description, - filesystem: files, - }, - }); - let ranges = resp.response; - if ( - ranges.length <= 1 && - ctx.traceback && - ctx.traceback.includes("AssertionError") - ) { - let parsed_traceback = - await debugApi.parseTracebackEndpointDebugParseTracebackGet({ - traceback: ctx.traceback, - }); - let last_frame = parsed_traceback.frames[0]; - if (!last_frame) return []; - ranges = ( - await runPythonScript("build_call_graph.py", [ - last_frame.filepath, - last_frame.lineno.toString(), - last_frame._function, - ]) - ).value; - } - - return ranges; -} - -export async function writeUnitTestForFunction( - filename: string, - position: vscode.Position -): Promise { - let resp = await apiRequest("unittest/forline", { - method: "POST", - body: { - filecontents: ( - await vscode.workspace.fs.readFile(vscode.Uri.file(filename)) - ).toString(), - lineno: position.line, - userid: vscode.env.machineId, - }, - }); - - return resp.completion; -} - -async function getFileContents( - files: string[] -): Promise<{ [key: string]: string }> { - let contents = await Promise.all( - files.map(async (file: string) => { - return ( - await vscode.workspace.fs.readFile(vscode.Uri.file(file)) - ).toString(); - }) - ); - let fileContents: { [key: string]: string } = {}; - for (let i = 0; i < files.length; i++) { - fileContents[files[i]] = contents[i]; - } - return fileContents; -} - -function getFilenamesFromPythonStacktrace(traceback: string): string[] { - let filenames: string[] = []; - for (let line of traceback.split("\n")) { - let match = line.match(/File "(.*)", line/); - if (match) { - filenames.push(match[1]); - } - } - return filenames; -} -- cgit v1.2.3-70-g09d2 From b3ab5bda368fcae690837f9ce8062dc7f17c6472 Mon Sep 17 00:00:00 2001 From: Nate Sesti Date: Wed, 12 Jul 2023 16:41:58 -0700 Subject: getVisibleFiles --- continuedev/src/continuedev/core/autopilot.py | 2 ++ continuedev/src/continuedev/core/sdk.py | 10 +++++----- .../src/continuedev/recipes/TemplateRecipe/main.py | 4 ++-- .../src/continuedev/recipes/WritePytestsRecipe/main.py | 2 +- continuedev/src/continuedev/server/ide.py | 8 +++++++- continuedev/src/continuedev/server/ide_protocol.py | 4 ++++ continuedev/src/continuedev/steps/main.py | 18 ++++-------------- continuedev/src/continuedev/steps/welcome.py | 2 +- extension/react-app/src/components/StepContainer.tsx | 4 ++-- extension/src/bridge.ts | 2 +- extension/src/continueIdeClient.ts | 11 +++++++++++ 11 files changed, 40 insertions(+), 27 deletions(-) (limited to 'extension/src/bridge.ts') diff --git a/continuedev/src/continuedev/core/autopilot.py b/continuedev/src/continuedev/core/autopilot.py index ac00e4f0..1b074435 100644 --- a/continuedev/src/continuedev/core/autopilot.py +++ b/continuedev/src/continuedev/core/autopilot.py @@ -208,6 +208,8 @@ class Autopilot(ContinueBaseModel): async def delete_at_index(self, index: int): self.history.timeline[index].step.hide = True self.history.timeline[index].deleted = True + self.history.timeline[index].active = False + await self.update_subscribers() async def delete_context_at_indices(self, indices: List[int]): diff --git a/continuedev/src/continuedev/core/sdk.py b/continuedev/src/continuedev/core/sdk.py index a3441ad9..aa2d8892 100644 --- a/continuedev/src/continuedev/core/sdk.py +++ b/continuedev/src/continuedev/core/sdk.py @@ -204,14 +204,14 @@ class ContinueSDK(AbstractContinueSDK): preface = "The following code is highlighted" + # If no higlighted ranges, use first file as context if len(highlighted_code) == 0: preface = "The following file is open" - # Get the full contents of all open files - files = await self.ide.getOpenFiles() - if len(files) > 0: - content = await self.ide.readFile(files[0]) + visible_files = await self.ide.getVisibleFiles() + if len(visible_files) > 0: + content = await self.ide.readFile(visible_files[0]) highlighted_code = [ - RangeInFileWithContents.from_entire_file(files[0], content)] + RangeInFileWithContents.from_entire_file(visible_files[0], content)] for rif in highlighted_code: msg = ChatMessage(content=f"{preface} ({rif.filepath}):\n```\n{rif.contents}\n```", diff --git a/continuedev/src/continuedev/recipes/TemplateRecipe/main.py b/continuedev/src/continuedev/recipes/TemplateRecipe/main.py index 94675725..16132cfd 100644 --- a/continuedev/src/continuedev/recipes/TemplateRecipe/main.py +++ b/continuedev/src/continuedev/recipes/TemplateRecipe/main.py @@ -20,8 +20,8 @@ class TemplateRecipe(Step): # The code executed when the recipe is run async def run(self, sdk: ContinueSDK) -> Coroutine[Observation, None, None]: - open_files = await sdk.ide.getOpenFiles() + visible_files = await sdk.ide.getVisibleFiles() await sdk.edit_file( - filename=open_files[0], + filename=visible_files[0], prompt=f"Append a statement to print `Hello, {self.name}!` at the end of the file." ) diff --git a/continuedev/src/continuedev/recipes/WritePytestsRecipe/main.py b/continuedev/src/continuedev/recipes/WritePytestsRecipe/main.py index 6e1244b3..c7a65fa6 100644 --- a/continuedev/src/continuedev/recipes/WritePytestsRecipe/main.py +++ b/continuedev/src/continuedev/recipes/WritePytestsRecipe/main.py @@ -14,7 +14,7 @@ class WritePytestsRecipe(Step): async def run(self, sdk: ContinueSDK): if self.for_filepath is None: - self.for_filepath = (await sdk.ide.getOpenFiles())[0] + self.for_filepath = (await sdk.ide.getVisibleFiles())[0] filename = os.path.basename(self.for_filepath) dirname = os.path.dirname(self.for_filepath) diff --git a/continuedev/src/continuedev/server/ide.py b/continuedev/src/continuedev/server/ide.py index 400ad740..4645b49e 100644 --- a/continuedev/src/continuedev/server/ide.py +++ b/continuedev/src/continuedev/server/ide.py @@ -52,6 +52,8 @@ class FileEditsUpdate(BaseModel): class OpenFilesResponse(BaseModel): openFiles: List[str] +class VisibleFilesResponse(BaseModel): + visibleFiles: List[str] class HighlightedCodeResponse(BaseModel): highlightedCode: List[RangeInFile] @@ -180,7 +182,7 @@ class IdeProtocolServer(AbstractIdeProtocolServer): self.onMainUserInput(data["input"]) elif message_type == "deleteAtIndex": self.onDeleteAtIndex(data["index"]) - elif message_type in ["highlightedCode", "openFiles", "readFile", "editFile", "getUserSecret", "runCommand", "uniqueId"]: + elif message_type in ["highlightedCode", "openFiles", "visibleFiles", "readFile", "editFile", "getUserSecret", "runCommand", "uniqueId"]: self.sub_queue.post(message_type, data) elif message_type == "workspaceDirectory": self.workspace_directory = data["workspaceDirectory"] @@ -302,6 +304,10 @@ class IdeProtocolServer(AbstractIdeProtocolServer): async def getOpenFiles(self) -> List[str]: resp = await self._send_and_receive_json({}, OpenFilesResponse, "openFiles") return resp.openFiles + + async def getVisibleFiles(self) -> List[str]: + resp = await self._send_and_receive_json({}, VisibleFilesResponse, "visibleFiles") + return resp.visibleFiles async def get_unique_id(self) -> str: resp = await self._send_and_receive_json({}, UniqueIdResponse, "uniqueId") diff --git a/continuedev/src/continuedev/server/ide_protocol.py b/continuedev/src/continuedev/server/ide_protocol.py index 69cb6c10..2783dc61 100644 --- a/continuedev/src/continuedev/server/ide_protocol.py +++ b/continuedev/src/continuedev/server/ide_protocol.py @@ -51,6 +51,10 @@ class AbstractIdeProtocolServer(ABC): async def getOpenFiles(self) -> List[str]: """Get a list of open files""" + @abstractmethod + async def getVisibleFiles(self) -> List[str]: + """Get a list of visible files""" + @abstractmethod async def getHighlightedCode(self) -> List[RangeInFile]: """Get a list of highlighted code""" diff --git a/continuedev/src/continuedev/steps/main.py b/continuedev/src/continuedev/steps/main.py index e6ef9281..ce7cbc60 100644 --- a/continuedev/src/continuedev/steps/main.py +++ b/continuedev/src/continuedev/steps/main.py @@ -99,8 +99,8 @@ class FasterEditHighlightedCodeStep(Step): async def run(self, sdk: ContinueSDK) -> Coroutine[Observation, None, None]: range_in_files = await sdk.get_code_context(only_editing=True) if len(range_in_files) == 0: - # Get the full contents of all open files - files = await sdk.ide.getOpenFiles() + # Get the full contents of all visible files + files = await sdk.ide.getVisibleFiles() contents = {} for file in files: contents[file] = await sdk.ide.readFile(file) @@ -191,8 +191,8 @@ class StarCoderEditHighlightedCodeStep(Step): range_in_files = await sdk.get_code_context(only_editing=True) found_highlighted_code = len(range_in_files) > 0 if not found_highlighted_code: - # Get the full contents of all open files - files = await sdk.ide.getOpenFiles() + # Get the full contents of all visible files + files = await sdk.ide.getVisibleFiles() contents = {} for file in files: contents[file] = await sdk.ide.readFile(file) @@ -275,16 +275,6 @@ class EditHighlightedCodeStep(Step): await sdk.run_step(DefaultModelEditCodeStep(user_input=self.user_input, range_in_files=range_in_files)) -class FindCodeStep(Step): - prompt: str - - async def describe(self, models: Models) -> Coroutine[str, None, None]: - return "Finding code" - - async def run(self, sdk: ContinueSDK) -> Coroutine[Observation, None, None]: - return await sdk.ide.getOpenFiles() - - class UserInputStep(Step): user_input: str diff --git a/continuedev/src/continuedev/steps/welcome.py b/continuedev/src/continuedev/steps/welcome.py index 32ebc3ba..2dece649 100644 --- a/continuedev/src/continuedev/steps/welcome.py +++ b/continuedev/src/continuedev/steps/welcome.py @@ -29,4 +29,4 @@ class WelcomeStep(Step): - Ask about how the class works, how to write it in another language, etc. \"\"\""""))) - await sdk.ide.setFileOpen(filepath=filepath) + # await sdk.ide.setFileOpen(filepath=filepath) diff --git a/extension/react-app/src/components/StepContainer.tsx b/extension/react-app/src/components/StepContainer.tsx index d480c565..d1a8a46a 100644 --- a/extension/react-app/src/components/StepContainer.tsx +++ b/extension/react-app/src/components/StepContainer.tsx @@ -158,7 +158,7 @@ function StepContainer(props: StepContainerProps) { >
diff --git a/extension/src/bridge.ts b/extension/src/bridge.ts index 55c4cc3b..7e6398be 100644 --- a/extension/src/bridge.ts +++ b/extension/src/bridge.ts @@ -50,7 +50,7 @@ export function getContinueServerUrl() { extensionContext && extensionContext.extensionMode === vscode.ExtensionMode.Development ) { - // return "http://localhost:8001"; + return "http://localhost:8001"; } return ( vscode.workspace.getConfiguration("continue").get("serverUrl") || diff --git a/extension/src/continueIdeClient.ts b/extension/src/continueIdeClient.ts index 304c592b..b728833f 100644 --- a/extension/src/continueIdeClient.ts +++ b/extension/src/continueIdeClient.ts @@ -131,6 +131,11 @@ class IdeProtocolClient { openFiles: this.getOpenFiles(), }); break; + case "visibleFiles": + messenger.send("visibleFiles", { + visibleFiles: this.getVisibleFiles(), + }); + break; case "readFile": messenger.send("readFile", { contents: this.readFile(data.filepath), @@ -330,6 +335,12 @@ class IdeProtocolClient { }); } + getVisibleFiles(): string[] { + return vscode.window.visibleTextEditors.map((editor) => { + return editor.document.uri.fsPath; + }); + } + saveFile(filepath: string) { vscode.window.visibleTextEditors.forEach((editor) => { if (editor.document.uri.fsPath === filepath) { -- cgit v1.2.3-70-g09d2