summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--continuedev/src/continuedev/server/main.py3
-rw-r--r--continuedev/src/continuedev/server/notebook.py14
-rw-r--r--continuedev/src/continuedev/server/session_manager.py15
-rw-r--r--extension/package-lock.json4
-rw-r--r--extension/package.json4
-rw-r--r--extension/react-app/src/hooks/useContinueNotebookProtocol.ts2
-rw-r--r--extension/react-app/src/hooks/useWebsocket.ts2
-rw-r--r--extension/react-app/src/hooks/vscodeMessenger.ts14
-rw-r--r--extension/scripts/continuedev-0.1.0-py3-none-any.whlbin56070 -> 56086 bytes
-rw-r--r--extension/src/activation/environmentSetup.ts59
-rw-r--r--extension/src/debugPanel.ts5
-rw-r--r--logging.ini27
-rw-r--r--logging.yaml30
13 files changed, 91 insertions, 88 deletions
diff --git a/continuedev/src/continuedev/server/main.py b/continuedev/src/continuedev/server/main.py
index e87d5fa9..1977bfdd 100644
--- a/continuedev/src/continuedev/server/main.py
+++ b/continuedev/src/continuedev/server/main.py
@@ -32,7 +32,8 @@ args = parser.parse_args()
def run_server():
- uvicorn.run(app, host="0.0.0.0", port=args.port)
+ uvicorn.run(app, host="0.0.0.0", port=args.port,
+ log_config="logging.yaml")
if __name__ == "__main__":
diff --git a/continuedev/src/continuedev/server/notebook.py b/continuedev/src/continuedev/server/notebook.py
index edb61a45..ab9211a8 100644
--- a/continuedev/src/continuedev/server/notebook.py
+++ b/continuedev/src/continuedev/server/notebook.py
@@ -51,14 +51,17 @@ class NotebookProtocolServer(AbstractNotebookProtocolServer):
def __init__(self, session: Session):
self.session = session
- async def _send_json(self, data: Any):
- await self.websocket.send_json(data)
+ async def _send_json(self, message_type: str, data: Any):
+ await self.websocket.send_json({
+ "message_type": message_type,
+ "data": data
+ })
async def _receive_json(self, message_type: str) -> Any:
return await self.sub_queue.get(message_type)
async def _send_and_receive_json(self, data: Any, resp_model: Type[T], message_type: str) -> T:
- await self._send_json(data)
+ await self._send_json(message_type, data)
resp = await self._receive_json(message_type)
return resp_model.parse_obj(resp)
@@ -77,8 +80,7 @@ class NotebookProtocolServer(AbstractNotebookProtocolServer):
async def send_state_update(self):
state = self.session.agent.get_full_state().dict()
- await self._send_json({
- "messageType": "state_update",
+ await self._send_json("state_update", {
"state": state
})
@@ -112,7 +114,7 @@ async def websocket_endpoint(websocket: WebSocket, session: Session = Depends(we
await protocol.send_state_update()
while AppStatus.should_exit is False:
- message = await websocket.receive_json()
+ message = await websocket.receive_text()
print("Received message", message)
if type(message) is str:
message = json.loads(message)
diff --git a/continuedev/src/continuedev/server/session_manager.py b/continuedev/src/continuedev/server/session_manager.py
index b48c21b7..c5715034 100644
--- a/continuedev/src/continuedev/server/session_manager.py
+++ b/continuedev/src/continuedev/server/session_manager.py
@@ -77,25 +77,10 @@ class SessionManager:
print(f"Session {session_id} has no websocket")
return
- async def a():
- await self.sessions[session_id].ws.send_json({
- "messageType": message_type,
- "data": data
- })
-
- # Run coroutine in background
await self.sessions[session_id].ws.send_json({
"messageType": message_type,
"data": data
})
- return
- if self._event_loop is None or self._event_loop.is_closed():
- self._event_loop = asyncio.new_event_loop()
- self._event_loop.run_until_complete(a())
- self._event_loop.close()
- else:
- self._event_loop.run_until_complete(a())
- self._event_loop.close()
session_manager = SessionManager()
diff --git a/extension/package-lock.json b/extension/package-lock.json
index 04af09d3..cd956286 100644
--- a/extension/package-lock.json
+++ b/extension/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "continue",
- "version": "0.0.5",
+ "version": "0.0.7",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "continue",
- "version": "0.0.5",
+ "version": "0.0.7",
"license": "Apache-2.0",
"dependencies": {
"@electron/rebuild": "^3.2.10",
diff --git a/extension/package.json b/extension/package.json
index c96655a9..1a8d9004 100644
--- a/extension/package.json
+++ b/extension/package.json
@@ -14,7 +14,7 @@
"displayName": "Continue",
"pricing": "Free",
"description": "Refine code 10x faster",
- "version": "0.0.5",
+ "version": "0.0.7",
"publisher": "Continue",
"engines": {
"vscode": "^1.74.0"
@@ -162,7 +162,7 @@
"test": "node ./out/test/runTest.js",
"package": "cp ./config/prod_config.json ./config/config.json && mkdir -p ./build && vsce package --out ./build && chmod 777 ./build/continue-0.0.5.vsix && cp ./config/dev_config.json ./config/config.json",
"full-package": "cd ../continuedev && poetry build && cp ./dist/continuedev-0.1.0-py3-none-any.whl ../extension/scripts/continuedev-0.1.0-py3-none-any.whl && cd ../extension && npm run typegen && npm run clientgen && cd react-app && npm run build && cd .. && npm run package",
- "install-extension": "code --install-extension ./build/continue-0.0.5.vsix",
+ "install-extension": "code --install-extension ./build/continue-0.0.6.vsix",
"uninstall": "code --uninstall-extension .continue",
"reinstall": "rm -rf ./build && npm run package && npm run uninstall && npm run install-extension"
},
diff --git a/extension/react-app/src/hooks/useContinueNotebookProtocol.ts b/extension/react-app/src/hooks/useContinueNotebookProtocol.ts
index d5ffbf09..b785cc84 100644
--- a/extension/react-app/src/hooks/useContinueNotebookProtocol.ts
+++ b/extension/react-app/src/hooks/useContinueNotebookProtocol.ts
@@ -10,7 +10,7 @@ class ContinueNotebookClientProtocol extends AbstractContinueNotebookClientProto
constructor(
serverUrlWithSessionId: string,
- useVscodeMessagePassing: boolean = false
+ useVscodeMessagePassing: boolean
) {
super();
this.serverUrlWithSessionId = serverUrlWithSessionId;
diff --git a/extension/react-app/src/hooks/useWebsocket.ts b/extension/react-app/src/hooks/useWebsocket.ts
index b98be577..016fa17d 100644
--- a/extension/react-app/src/hooks/useWebsocket.ts
+++ b/extension/react-app/src/hooks/useWebsocket.ts
@@ -4,7 +4,7 @@ import { useSelector } from "react-redux";
import ContinueNotebookClientProtocol from "./useContinueNotebookProtocol";
import { postVscMessage } from "../vscode";
-function useContinueNotebookProtocol(useVscodeMessagePassing: boolean = false) {
+function useContinueNotebookProtocol(useVscodeMessagePassing: boolean = true) {
const sessionId = useSelector((state: RootStore) => state.config.sessionId);
const serverHttpUrl = useSelector((state: RootStore) => state.config.apiUrl);
const [client, setClient] = useState<
diff --git a/extension/react-app/src/hooks/vscodeMessenger.ts b/extension/react-app/src/hooks/vscodeMessenger.ts
index 746c4302..e330db57 100644
--- a/extension/react-app/src/hooks/vscodeMessenger.ts
+++ b/extension/react-app/src/hooks/vscodeMessenger.ts
@@ -21,8 +21,10 @@ export class VscodeMessenger extends Messenger {
onMessageType(messageType: string, callback: (data: object) => void): void {
window.addEventListener("message", (event: any) => {
if (event.data.type === "websocketForwardingMessage") {
- if (event.data.message.messageType === messageType) {
- callback(event.data.message.data);
+ console.log("VS CODE SENT DATA: ", event.data);
+ const data = JSON.parse(event.data.data);
+ if (data.messageType === messageType) {
+ callback(data.data);
}
}
});
@@ -31,7 +33,8 @@ export class VscodeMessenger extends Messenger {
onMessage(callback: (messageType: string, data: any) => void): void {
window.addEventListener("message", (event: any) => {
if (event.data.type === "websocketForwardingMessage") {
- callback(event.data.message.messageType, event.data.message.data);
+ const data = JSON.parse(event.data.data);
+ callback(data.messageType, data.data);
}
});
}
@@ -40,9 +43,10 @@ export class VscodeMessenger extends Messenger {
return new Promise((resolve) => {
const handler = (event: any) => {
if (event.data.type === "websocketForwardingMessage") {
- if (event.data.message.messageType === messageType) {
+ const data = JSON.parse(event.data.data);
+ if (data.messageType === messageType) {
window.removeEventListener("message", handler);
- resolve(event.data.message.data);
+ resolve(data.data);
}
}
};
diff --git a/extension/scripts/continuedev-0.1.0-py3-none-any.whl b/extension/scripts/continuedev-0.1.0-py3-none-any.whl
index 2019c904..8a35e0ec 100644
--- a/extension/scripts/continuedev-0.1.0-py3-none-any.whl
+++ b/extension/scripts/continuedev-0.1.0-py3-none-any.whl
Binary files differ
diff --git a/extension/src/activation/environmentSetup.ts b/extension/src/activation/environmentSetup.ts
index ad6ac71b..db2c5523 100644
--- a/extension/src/activation/environmentSetup.ts
+++ b/extension/src/activation/environmentSetup.ts
@@ -10,6 +10,7 @@ import { getContinueServerUrl } from "../bridge";
import fetch from "node-fetch";
async function runCommand(cmd: string): Promise<[string, string | undefined]> {
+ console.log("Running command: ", cmd);
var stdout: any = "";
var stderr: any = "";
try {
@@ -61,14 +62,16 @@ function getActivateUpgradeCommands(pythonCmd: string, pipCmd: string) {
}
function checkEnvExists() {
- const envBinActivatePath = path.join(
+ const envBinPath = path.join(
getExtensionUri().fsPath,
"scripts",
"env",
- "bin",
- "activate"
+ "bin"
+ );
+ return (
+ fs.existsSync(envBinPath + "/activate") &&
+ fs.existsSync(envBinPath + "/pip")
);
- return fs.existsSync(envBinActivatePath);
}
async function setupPythonEnv() {
@@ -180,34 +183,34 @@ export async function startContinuePythonServer() {
pythonCmd = "python";
}
- // let command = `cd ${path.join(
- // getExtensionUri().fsPath,
- // "scripts"
- // )} && ${activateCmd} && cd env/lib/python3.11/site-packages && ${pythonCmd} -m continuedev.server.main`;
let command = `cd ${path.join(
getExtensionUri().fsPath,
"scripts"
)} && ${activateCmd} && cd .. && ${pythonCmd} -m scripts.run_continue_server`;
- try {
- // exec(command);
- const child = spawn(command, {
- shell: true,
- });
- child.stdout.on("data", (data: any) => {
- console.log(`stdout: ${data}`);
- });
- child.stderr.on("data", (data: any) => {
- console.log(`stderr: ${data}`);
- });
- child.on("error", (error: any) => {
- console.log(`error: ${error.message}`);
- });
- } catch (e) {
- console.log("Failed to start Continue python server", e);
- }
- // Sleep for 3 seconds to give the server time to start
- await new Promise((resolve) => setTimeout(resolve, 3000));
- console.log("Successfully started Continue python server");
+
+ return new Promise((resolve, reject) => {
+ try {
+ const child = spawn(command, {
+ shell: true,
+ });
+ child.stdout.on("data", (data: any) => {
+ console.log(`stdout: ${data}`);
+ });
+ child.stderr.on("data", (data: any) => {
+ console.log(`stderr: ${data}`);
+ if (data.includes("Uvicorn running on")) {
+ console.log("Successfully started Continue python server");
+ resolve(null);
+ }
+ });
+ child.on("error", (error: any) => {
+ console.log(`error: ${error.message}`);
+ });
+ } catch (e) {
+ console.log("Failed to start Continue python server", e);
+ reject();
+ }
+ });
}
async function installNodeModules() {
diff --git a/extension/src/debugPanel.ts b/extension/src/debugPanel.ts
index a295085f..da29a52c 100644
--- a/extension/src/debugPanel.ts
+++ b/extension/src/debugPanel.ts
@@ -16,6 +16,7 @@ import {
import { sendTelemetryEvent, TelemetryEvent } from "./telemetry";
import { RangeInFile, SerializedDebugContext } from "./client";
import { addFileSystemToDebugContext } from "./util/util";
+const WebSocket = require("ws");
class StreamManager {
private _fullText: string = "";
@@ -119,6 +120,9 @@ class WebsocketConnection {
}
public send(message: string) {
+ if (typeof message !== "string") {
+ message = JSON.stringify(message);
+ }
this._ws.send(message);
}
@@ -190,6 +194,7 @@ export function setupDebugPanel(
async function connectWebsocket(url: string) {
return new Promise((resolve, reject) => {
const onMessage = (message: any) => {
+ console.log("websocket message", message);
panel.webview.postMessage({
type: "websocketForwardingMessage",
url,
diff --git a/logging.ini b/logging.ini
deleted file mode 100644
index 5b478619..00000000
--- a/logging.ini
+++ /dev/null
@@ -1,27 +0,0 @@
-[loggers]
-keys=root
-
-[handlers]
-keys=logfile,logconsole
-
-[formatters]
-keys=logformatter
-
-[logger_root]
-level=INFO
-handlers=logfile, logconsole
-
-[formatter_logformatter]
-format=[%(asctime)s.%(msecs)03d] %(levelname)s [%(thread)d] - %(message)s
-
-[handler_logfile]
-class=handlers.RotatingFileHandler
-level=INFO
-args=('logfile.log','a')
-formatter=logformatter
-
-[handler_logconsole]
-class=handlers.logging.StreamHandler
-level=INFO
-args=()
-formatter=logformatter \ No newline at end of file
diff --git a/logging.yaml b/logging.yaml
new file mode 100644
index 00000000..391041ef
--- /dev/null
+++ b/logging.yaml
@@ -0,0 +1,30 @@
+version: 1
+disable_existing_loggers: False
+formatters:
+ default:
+ (): 'uvicorn.logging.DefaultFormatter'
+ fmt: '%(asctime)s %(levelprefix)-9s %(name)s -: %(message)s'
+ access:
+ (): 'uvicorn.logging.AccessFormatter'
+ fmt: '%(asctime)s %(levelprefix)-9s %(name)s -: %(client_addr)s - "%(request_line)s" %(status_code)s'
+handlers:
+ default:
+ class: logging.StreamHandler
+ formatter: default
+ stream: ext://sys.stderr
+ access:
+ class: logging.StreamHandler
+ formatter: access
+ stream: ext://sys.stdout
+loggers:
+ uvicorn:
+ level: INFO
+ handlers:
+ - default
+ uvicorn.error:
+ level: INFO
+ uvicorn.access:
+ level: INFO
+ propagate: False
+ handlers:
+ - access \ No newline at end of file