diff --git a/src/main.py b/src/main.py
index 6a94b3e..b8d2484 100644
--- a/src/main.py
+++ b/src/main.py
@@ -20,6 +20,87 @@ st.set_page_config(
layout="wide"
)
+st.markdown(""" """, unsafe_allow_html=True)
+
+# ---------------- CHAT PANEL INJECTION ----------------
+def inject_chat_panel(is_open: bool):
+ st.iframe(f"""
+
+ """, height=1)
+
# ---------------- MAIN ----------------
def main():
file_manager = FileManager()
@@ -41,12 +122,17 @@ def main():
st.session_state.last_applied_content = ""
if "run_result" not in st.session_state:
st.session_state.run_result = None
+ if "chat_open" not in st.session_state:
+ st.session_state.chat_open = False
- # ---------------- FILE SELECT ----------------
+ # ---------------- SIDEBAR ----------------
selected_file = navigation.render_sidebar()
if selected_file:
st.session_state.selected_file = selected_file
+ st.sidebar.markdown("---")
+ st.sidebar.caption("AI Code Editor")
+
current_file = st.session_state.selected_file
# ---------------- FILE SWITCH ----------------
@@ -60,46 +146,39 @@ def main():
else:
st.session_state.editor_content = ""
- st.sidebar.markdown("---")
- st.sidebar.caption("AI Code Editor")
+ inject_chat_panel(st.session_state.chat_open)
# ---------------- MAIN UI ----------------
if st.session_state.active_file:
- col1, col2 = st.columns([3, 2])
+ title_col, btn_col = st.columns([5, 1])
+ with title_col:
+ st.subheader(f"✏️ {Path(st.session_state.active_file).name}")
+ with btn_col:
+ run_clicked = st.button("▶ Run", type="primary", use_container_width=True)
- with col1:
- title_col, btn_col = st.columns([5, 1])
- with title_col:
- st.subheader(f"✏️ {Path(st.session_state.active_file).name}")
- with btn_col:
- run_clicked = st.button("▶ Run", type="primary", use_container_width=True)
+ editor = CodeEditor()
+ new_value = editor.display_code(
+ st.session_state.editor_content,
+ filename=st.session_state.active_file
+ )
+ if new_value is not None:
+ if new_value != st.session_state.last_applied_content:
+ st.session_state.editor_content = new_value
+ st.session_state.last_applied_content = new_value
+ file_manager.save_file(st.session_state.active_file, new_value)
+ st.success("Saved ✔")
- editor = CodeEditor()
- new_value = editor.display_code(
- st.session_state.editor_content,
- filename=st.session_state.active_file
- )
- if new_value is not None:
- if new_value != st.session_state.last_applied_content:
- st.session_state.editor_content = new_value
- st.session_state.last_applied_content = new_value
- file_manager.save_file(st.session_state.active_file, new_value)
- st.success("Saved ✔")
+ if run_clicked:
+ with st.spinner("Running…"):
+ st.session_state.run_result = execution_engine.run_file(
+ st.session_state.active_file
+ )
- if run_clicked:
- with st.spinner("Running…"):
- st.session_state.run_result = execution_engine.run_file(
- st.session_state.active_file
- )
+ if st.session_state.run_result is not None:
+ st.markdown("---")
+ st.caption("Output")
+ output_display.render_output(st.session_state.run_result)
- with col2:
- chat = ChatInterface()
- chat.display_chat(chat_manager)
-
- if st.session_state.run_result is not None:
- st.markdown("---")
- st.caption("Output")
- output_display.render_output(st.session_state.run_result)
else:
st.info("Select a file from the explorer")
diff --git a/src/ui/navigation.py b/src/ui/navigation.py
index 5722b65..0ef19dd 100644
--- a/src/ui/navigation.py
+++ b/src/ui/navigation.py
@@ -57,17 +57,23 @@ class FileNavigation:
# ---------------- SIDEBAR RENDERER ----------------
def render_sidebar(self) -> str | None:
"""
- Renders the full sidebar: folder button, folder caption, divider, and tree.
+ Renders the full sidebar: folder button, caption, divider, and tree.
Returns the selected file path or None.
"""
st.sidebar.title("File Explorer")
root_folder = st.session_state.get("root_folder")
with st.sidebar:
- if st.button("📂 Choose Folder", key="pick_folder"):
- picked = self.pick_folder()
- if picked:
- st.session_state.root_folder = picked
+ btn_left, btn_right = st.columns(2)
+ with btn_left:
+ if st.button("📂 Folder", key="pick_folder", use_container_width=True):
+ picked = self.pick_folder()
+ if picked:
+ st.session_state.root_folder = picked
+ st.rerun()
+ with btn_right:
+ if st.button("💬 Ask AI", key="toggle_chat", use_container_width=True):
+ st.session_state.chat_open = not st.session_state.get("chat_open", False)
st.rerun()
if root_folder: