diff options
author | Nate Sesti <sestinj@gmail.com> | 2023-08-06 15:24:13 -0700 |
---|---|---|
committer | Nate Sesti <sestinj@gmail.com> | 2023-08-06 15:24:13 -0700 |
commit | c25527926ad1d1f861dbed01df577e962e08d746 (patch) | |
tree | a8542dd40879257ba544842d7ece2ebf01afb383 /continuedev/src/continuedev/server | |
parent | 31e7c9828f985eceb16b4c9c749cc5d4d9fd5beb (diff) | |
download | sncontinue-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.py | 11 | ||||
-rw-r--r-- | continuedev/src/continuedev/server/session_manager.py | 27 |
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) |