From 5bc80e2e6d3141922c966c404a6d32a496097960 Mon Sep 17 00:00:00 2001 From: Nate Sesti Date: Fri, 28 Jul 2023 10:23:12 -0700 Subject: refactor: :loud_sound: improve logs on startup of server --- extension/src/activation/environmentSetup.ts | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'extension/src/activation') diff --git a/extension/src/activation/environmentSetup.ts b/extension/src/activation/environmentSetup.ts index 44fb3b60..146a6e37 100644 --- a/extension/src/activation/environmentSetup.ts +++ b/extension/src/activation/environmentSetup.ts @@ -487,6 +487,14 @@ export async function startContinuePythonServer() { console.log(`error: ${error.message}`); }); + child.on("close", (code: any) => { + console.log(`child process exited with code ${code}`); + }); + + child.stdout.on("data", (data: any) => { + console.log(`stdout: ${data}`); + }); + // Write the current version of vscode to a file called server_version.txt fs.writeFileSync(serverVersionPath(), getExtensionVersion()); } catch (e) { -- cgit v1.2.3-70-g09d2 From 8b95ef7de258de8498b328d9e6107a95f57f8d2c Mon Sep 17 00:00:00 2001 From: Nate Sesti Date: Fri, 28 Jul 2023 12:13:07 -0700 Subject: fix: :ambulance: logging to file causing problems with starting server --- continuedev/src/continuedev/server/main.py | 78 +++++++++++++++++++--------- extension/package-lock.json | 4 +- extension/package.json | 2 +- extension/src/activation/environmentSetup.ts | 3 +- extension/src/continueIdeClient.ts | 2 + 5 files changed, 59 insertions(+), 30 deletions(-) (limited to 'extension/src/activation') diff --git a/continuedev/src/continuedev/server/main.py b/continuedev/src/continuedev/server/main.py index d78eaecf..1c7a135c 100644 --- a/continuedev/src/continuedev/server/main.py +++ b/continuedev/src/continuedev/server/main.py @@ -33,37 +33,63 @@ app.add_middleware( @app.get("/health") def health(): - print("Testing") + print("Health check") return {"status": "ok"} -# add cli arg for server port -parser = argparse.ArgumentParser() -parser.add_argument("-p", "--port", help="server port", - type=int, default=65432) -args = parser.parse_args() - -log_path = getLogFilePath() -LOG_CONFIG = { - 'version': 1, - 'disable_existing_loggers': False, - 'handlers': { - 'file': { - 'level': 'DEBUG', - 'class': 'logging.FileHandler', - 'filename': log_path, +class Logger(object): + def __init__(self, log_file: str): + self.terminal = sys.stdout + self.log = open(log_file, "a") + + def write(self, message): + self.terminal.write(message) + self.log.write(message) + + def flush(self): + # this flush method is needed for python 3 compatibility. + # this handles the flush command by doing nothing. + # you might want to specify some extra behavior here. + pass + + def isatty(self): + return False + + +def setup_logging(): + log_path = getLogFilePath() + LOG_CONFIG = { + 'version': 1, + 'disable_existing_loggers': False, + 'handlers': { + 'file': { + 'level': 'DEBUG', + 'class': 'logging.FileHandler', + 'filename': log_path, + }, }, - }, - 'root': { - 'level': 'DEBUG', - 'handlers': ['file'] + 'root': { + 'level': 'DEBUG', + 'handlers': ['file'] + } } -} -print(f"Log path: {log_path}") -sys.stdout = open(log_path, "a") -sys.stderr = open(log_path, "a") -print("Testing logs") + logger = Logger(log_path) + print(f"Log path: {log_path}") + # sys.stdout = logger + # sys.stderr = logger + print("Testing logs") + + +try: + # add cli arg for server port + parser = argparse.ArgumentParser() + parser.add_argument("-p", "--port", help="server port", + type=int, default=65432) + args = parser.parse_args() +except Exception as e: + print("Error parsing command line arguments: ", e) + raise e def run_server(): @@ -102,6 +128,7 @@ atexit.register(cleanup) if __name__ == "__main__": try: + # Uncomment to get CPU usage reports # import threading # def cpu_usage_loop(): @@ -112,6 +139,7 @@ if __name__ == "__main__": # cpu_thread = threading.Thread(target=cpu_usage_loop) # cpu_thread.start() + setup_logging() run_server() except Exception as e: print("Error starting Continue server: ", e) diff --git a/extension/package-lock.json b/extension/package-lock.json index 78409984..791bbef9 100644 --- a/extension/package-lock.json +++ b/extension/package-lock.json @@ -1,12 +1,12 @@ { "name": "continue", - "version": "0.0.215", + "version": "0.0.216", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "continue", - "version": "0.0.215", + "version": "0.0.216", "license": "Apache-2.0", "dependencies": { "@electron/rebuild": "^3.2.10", diff --git a/extension/package.json b/extension/package.json index 5df08aee..d71744d0 100644 --- a/extension/package.json +++ b/extension/package.json @@ -14,7 +14,7 @@ "displayName": "Continue", "pricing": "Free", "description": "The open-source coding autopilot", - "version": "0.0.215", + "version": "0.0.216", "publisher": "Continue", "engines": { "vscode": "^1.67.0" diff --git a/extension/src/activation/environmentSetup.ts b/extension/src/activation/environmentSetup.ts index 146a6e37..04bcd0b6 100644 --- a/extension/src/activation/environmentSetup.ts +++ b/extension/src/activation/environmentSetup.ts @@ -463,9 +463,8 @@ export async function startContinuePythonServer() { const command = `cd "${serverPath()}" && ${activateCmd} && cd .. && ${pythonCmd} -m server.run_continue_server`; - console.log("Starting Continue python server..."); - return new Promise(async (resolve, reject) => { + console.log("Starting Continue python server..."); try { const child = spawn(command, { shell: true, diff --git a/extension/src/continueIdeClient.ts b/extension/src/continueIdeClient.ts index 157b59cb..0b528054 100644 --- a/extension/src/continueIdeClient.ts +++ b/extension/src/continueIdeClient.ts @@ -62,9 +62,11 @@ class IdeProtocolClient { this._lastReloadTime = Math.min(2 * this._lastReloadTime, 5000); }; messenger.onOpen(() => { + console.log("IDE protocol websocket opened"); this._reconnectionTimeouts.forEach((to) => clearTimeout(to)); }); messenger.onClose(() => { + console.log("IDE protocol websocket closed"); reconnect(); }); messenger.onError(() => { -- cgit v1.2.3-70-g09d2 From f7a3659381f839b890f2c53086f7fedecf23d9ab Mon Sep 17 00:00:00 2001 From: Nate Sesti Date: Fri, 28 Jul 2023 17:55:45 -0700 Subject: fix: :zap: register vscode commands prior to server loading --- extension/package-lock.json | 4 ++-- extension/package.json | 2 +- extension/src/activation/activate.ts | 8 ++++++++ extension/src/continueIdeClient.ts | 5 ----- 4 files changed, 11 insertions(+), 8 deletions(-) (limited to 'extension/src/activation') diff --git a/extension/package-lock.json b/extension/package-lock.json index 5bef9f73..5d0b0c56 100644 --- a/extension/package-lock.json +++ b/extension/package-lock.json @@ -1,12 +1,12 @@ { "name": "continue", - "version": "0.0.221", + "version": "0.0.222", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "continue", - "version": "0.0.221", + "version": "0.0.222", "license": "Apache-2.0", "dependencies": { "@electron/rebuild": "^3.2.10", diff --git a/extension/package.json b/extension/package.json index 124402b5..942c844c 100644 --- a/extension/package.json +++ b/extension/package.json @@ -14,7 +14,7 @@ "displayName": "Continue", "pricing": "Free", "description": "The open-source coding autopilot", - "version": "0.0.221", + "version": "0.0.222", "publisher": "Continue", "engines": { "vscode": "^1.67.0" diff --git a/extension/src/activation/activate.ts b/extension/src/activation/activate.ts index 8bdc7e21..cbb840c0 100644 --- a/extension/src/activation/activate.ts +++ b/extension/src/activation/activate.ts @@ -7,6 +7,9 @@ import { startContinuePythonServer, } from "./environmentSetup"; import fetch from "node-fetch"; +import { registerAllCodeLensProviders } from "../lang-server/codeLens"; +import { registerAllCommands } from "../commands"; +import registerQuickFixProvider from "../lang-server/codeActions"; const PACKAGE_JSON_RAW_GITHUB_URL = "https://raw.githubusercontent.com/continuedev/continue/HEAD/extension/package.json"; @@ -46,6 +49,11 @@ export async function activateExtension(context: vscode.ExtensionContext) { }) .catch((e) => console.log("Error checking for extension updates: ", e)); + // Register commands and providers + registerAllCodeLensProviders(context); + registerAllCommands(context); + registerQuickFixProvider(); + // Start the server and display loader if taking > 2 seconds const sessionIdPromise = (async () => { await new Promise((resolve) => { diff --git a/extension/src/continueIdeClient.ts b/extension/src/continueIdeClient.ts index 0b528054..498cf9de 100644 --- a/extension/src/continueIdeClient.ts +++ b/extension/src/continueIdeClient.ts @@ -93,11 +93,6 @@ class IdeProtocolClient { this._serverUrl = serverUrl; this._newWebsocketMessenger(); - // Register commands and providers - registerAllCodeLensProviders(context); - registerAllCommands(context); - registerQuickFixProvider(); - // Setup listeners for any file changes in open editors // vscode.workspace.onDidChangeTextDocument((event) => { // if (this._makingEdit === 0) { -- cgit v1.2.3-70-g09d2 From 9a9b7aae313c8ca3e69acc6b49327fef47a2644d Mon Sep 17 00:00:00 2001 From: Nate Sesti Date: Fri, 28 Jul 2023 18:12:47 -0700 Subject: show "View Logs" popup during server loading --- extension/src/activation/activate.ts | 11 +++++++++++ extension/src/debugPanel.ts | 11 +---------- 2 files changed, 12 insertions(+), 10 deletions(-) (limited to 'extension/src/activation') diff --git a/extension/src/activation/activate.ts b/extension/src/activation/activate.ts index cbb840c0..a47d5e97 100644 --- a/extension/src/activation/activate.ts +++ b/extension/src/activation/activate.ts @@ -86,6 +86,17 @@ export async function activateExtension(context: vscode.ExtensionContext) { return Promise.resolve(); } ); + + vscode.window + .showInformationMessage( + "Click here to view the server logs, or use the 'continue.viewLogs' VS Code command.", + "View Logs" + ) + .then((selection) => { + if (selection === "View Logs") { + vscode.commands.executeCommand("continue.viewLogs"); + } + }); } }, 2000); }); diff --git a/extension/src/debugPanel.ts b/extension/src/debugPanel.ts index d3972189..643563a2 100644 --- a/extension/src/debugPanel.ts +++ b/extension/src/debugPanel.ts @@ -272,16 +272,7 @@ export function setupDebugPanel( }); } ); - vscode.window - .showInformationMessage( - "Click here to view the server logs, or use the 'continue.viewLogs' VS Code command.", - "View Logs" - ) - .then((selection) => { - if (selection === "View Logs") { - vscode.commands.executeCommand("continue.viewLogs"); - } - }); + break; } } -- cgit v1.2.3-70-g09d2 From 1e81182e7a0402f01ac2475b66fa1ccb1aa51353 Mon Sep 17 00:00:00 2001 From: Nate Sesti Date: Fri, 28 Jul 2023 19:32:45 -0700 Subject: refactor: :label: make HighlightedCodeContextProvider a subclass of ContextProvider --- .../plugins/context_providers/highlighted_code.py | 13 +++++++++++-- extension/src/activation/environmentSetup.ts | 3 ++- 2 files changed, 13 insertions(+), 3 deletions(-) (limited to 'extension/src/activation') diff --git a/continuedev/src/continuedev/plugins/context_providers/highlighted_code.py b/continuedev/src/continuedev/plugins/context_providers/highlighted_code.py index 1d040101..664e705e 100644 --- a/continuedev/src/continuedev/plugins/context_providers/highlighted_code.py +++ b/continuedev/src/continuedev/plugins/context_providers/highlighted_code.py @@ -3,7 +3,7 @@ from typing import Any, Dict, List from ...core.main import ChatMessage from ...models.filesystem import RangeInFile, RangeInFileWithContents -from ...core.context import ContextItem, ContextItemDescription, ContextItemId +from ...core.context import ContextItem, ContextItemDescription, ContextItemId, ContextProvider from pydantic import BaseModel @@ -12,7 +12,7 @@ class HighlightedRangeContextItem(BaseModel): item: ContextItem -class HighlightedCodeContextProvider(BaseModel): +class HighlightedCodeContextProvider(ContextProvider): """ The ContextProvider class is a plugin that lets you provide new information to the LLM by typing '@'. When you type '@', the context provider will be asked to populate a list of options. @@ -99,6 +99,15 @@ class HighlightedCodeContextProvider(BaseModel): async def provide_context_items(self) -> List[ContextItem]: return [] + async def get_item(self, id: ContextItemId, query: str) -> ContextItem: + raise NotImplementedError() + + async def clear_context(self): + self.highlighted_ranges = [] + self.adding_highlighted_code = False + self.should_get_fallback_context_item = True + self.last_added_fallback = False + async def delete_context_with_ids(self, ids: List[ContextItemId]) -> List[ContextItem]: indices_to_delete = [ int(id.item_id) for id in ids diff --git a/extension/src/activation/environmentSetup.ts b/extension/src/activation/environmentSetup.ts index 04bcd0b6..50a2783a 100644 --- a/extension/src/activation/environmentSetup.ts +++ b/extension/src/activation/environmentSetup.ts @@ -470,7 +470,6 @@ export async function startContinuePythonServer() { shell: true, }); child.stderr.on("data", (data: any) => { - console.log(`stdout: ${data}`); if ( data.includes("Uvicorn running on") || // Successfully started the server data.includes("only one usage of each socket address") || // [windows] The server is already running (probably a simultaneously opened VS Code window) @@ -480,6 +479,8 @@ export async function startContinuePythonServer() { resolve(null); } else if (data.includes("ERROR") || data.includes("Traceback")) { console.log("Error starting Continue python server: ", data); + } else { + console.log(`stdout: ${data}`); } }); child.on("error", (error: any) => { -- cgit v1.2.3-70-g09d2