summaryrefslogtreecommitdiff
path: root/continuedev/src/continuedev/server
diff options
context:
space:
mode:
authorNate Sesti <sestinj@gmail.com>2023-08-06 15:24:13 -0700
committerNate Sesti <sestinj@gmail.com>2023-08-06 15:24:13 -0700
commitc25527926ad1d1f861dbed01df577e962e08d746 (patch)
treea8542dd40879257ba544842d7ece2ebf01afb383 /continuedev/src/continuedev/server
parent31e7c9828f985eceb16b4c9c749cc5d4d9fd5beb (diff)
downloadsncontinue-c25527926ad1d1f861dbed01df577e962e08d746.tar.gz
sncontinue-c25527926ad1d1f861dbed01df577e962e08d746.tar.bz2
sncontinue-c25527926ad1d1f861dbed01df577e962e08d746.zip
feat: :construction: successfully loading past sessions
Diffstat (limited to 'continuedev/src/continuedev/server')
-rw-r--r--continuedev/src/continuedev/server/gui.py11
-rw-r--r--continuedev/src/continuedev/server/session_manager.py27
2 files changed, 19 insertions, 19 deletions
diff --git a/continuedev/src/continuedev/server/gui.py b/continuedev/src/continuedev/server/gui.py
index b6f7b141..661e1787 100644
--- a/continuedev/src/continuedev/server/gui.py
+++ b/continuedev/src/continuedev/server/gui.py
@@ -99,6 +99,8 @@ class GUIProtocolServer(AbstractGUIProtocolServer):
self.on_show_logs_at_index(data["index"])
elif message_type == "select_context_item":
self.select_context_item(data["id"], data["query"])
+ elif message_type == "load_session":
+ self.load_session(data["session_id"])
def on_main_input(self, input: str):
# Do something with user input
@@ -154,8 +156,13 @@ class GUIProtocolServer(AbstractGUIProtocolServer):
create_async_task(
self.session.autopilot.select_context_item(id, query), self.on_error)
- async def reconnect_at_session(self, session_id: str):
- await self._send_json("reconnect_at_session", {"session_id": session_id})
+ def load_session(self, session_id: str):
+ async def load_and_tell_to_reconnect():
+ await session_manager.load_session(self.session.session_id, session_id)
+ await self._send_json("reconnect_at_session", {"session_id": session_id})
+
+ create_async_task(
+ load_and_tell_to_reconnect(), self.on_error)
@router.websocket("/ws")
diff --git a/continuedev/src/continuedev/server/session_manager.py b/continuedev/src/continuedev/server/session_manager.py
index f876c9a9..062f9527 100644
--- a/continuedev/src/continuedev/server/session_manager.py
+++ b/continuedev/src/continuedev/server/session_manager.py
@@ -78,18 +78,7 @@ class SessionManager:
try:
await autopilot.start(full_state=full_state)
except Exception as e:
- # Have to manually add to history because autopilot isn't started
- formatted_err = '\n'.join(traceback.format_exception(e))
- msg_step = MessageStep(
- name="Error starting Autopilot", message=formatted_err)
- msg_step.description = f"```\n{formatted_err}\n```"
- autopilot.history.add_node(HistoryNode(
- step=msg_step,
- observation=None,
- depth=0,
- active=False
- ))
- logger.warning(f"Error starting Autopilot: {e}")
+ await self.on_error(e)
def on_error(e: Exception) -> Coroutine:
err_msg = '\n'.join(traceback.format_exception(e))
@@ -101,7 +90,7 @@ class SessionManager:
async def remove_session(self, session_id: str):
logger.debug(f"Removing session: {session_id}")
if session_id in self.sessions:
- if session_id in self.registered_ides:
+ if session_id in self.registered_ides and self.registered_ides[session_id] is not None:
ws_to_close = self.registered_ides[session_id].websocket
if ws_to_close is not None and ws_to_close.client_state != WebSocketState.DISCONNECTED:
await self.sessions[session_id].autopilot.ide.websocket.close()
@@ -111,6 +100,9 @@ class SessionManager:
async def persist_session(self, session_id: str):
"""Save the session's FullState as a json file"""
full_state = await self.sessions[session_id].autopilot.get_full_state()
+ if full_state.session_info is None:
+ return
+
with open(getSessionFilePath(session_id), "w") as f:
json.dump(full_state.dict(), f)
@@ -118,9 +110,10 @@ class SessionManager:
with open(getSessionsListFilePath(), "r") as f:
sessions_list = json.load(f)
- sessions_list.append(SessionInfo(
- session_info=full_state.session_info
- ))
+ sessions_list.append(full_state.session_info.dict())
+
+ with open(getSessionsListFilePath(), "w") as f:
+ json.dump(sessions_list, f)
async def load_session(self, old_session_id: str, new_session_id: str):
"""Load the session's FullState from a json file"""
@@ -130,7 +123,7 @@ class SessionManager:
# Delete the old session, but keep the IDE
ide = self.registered_ides[old_session_id]
- self.registered_ides[old_session_id] = None
+ del self.registered_ides[old_session_id]
# Start the new session
await self.new_session(ide, session_id=new_session_id)