add root readme

This commit is contained in:
2026-05-07 13:04:40 -03:00
parent 946234eb9e
commit feb5ecd463
10 changed files with 919 additions and 6 deletions

View File

@@ -18,6 +18,7 @@ from cht.ui.monitor import MonitorWidget
from cht.ui.waveform import WaveformWidget
from cht.ui.frames_panel import FramesPanel
from cht.ui.transcript_panel import TranscriptPanel
from cht.ui.summary_panel import SummaryPanel
from cht.ui.keyboard import KeyboardManager, KEY_LEFT, KEY_RIGHT, KEY_UP, KEY_DOWN, KEY_RETURN, KEY_KP_ENTER, KEY_ESCAPE, KEY_DELETE
from cht.ui.agent_output import AgentOutputPanel
from cht.ui.agent_input import AgentInputPanel
@@ -261,6 +262,9 @@ class ChtWindow(Adw.ApplicationWindow):
self._update_scrub_bar_manifest()
self._populate_model_dropdown()
self._summary_panel.bind_session(mgr.session_dir)
self._summary_panel.set_streaming(False)
# Show "Continue" since there's an active session to resume
self._connect_btn.set_label("Continue")
@@ -328,6 +332,11 @@ class ChtWindow(Adw.ApplicationWindow):
self._agent_output.load_thread(self._agent.thread)
self.set_title(f"{APP_NAME}{mgr.session_id}")
self._summary_panel.bind_session(None)
self._summary_panel.set_streaming(True)
self._right_stack.set_visible_child_name("live")
log.info("Waiting for sender...")
def _on_live_toggle(self):
@@ -513,6 +522,7 @@ class ChtWindow(Adw.ApplicationWindow):
# Stop live player before transitioning to review mode
self._monitor.reset()
self._load_session(last_session_id)
self._right_stack.set_visible_child_name("summary")
return
# Full reset — only when not reloading
@@ -527,6 +537,8 @@ class ChtWindow(Adw.ApplicationWindow):
self._known_frames = set()
self._frames_panel.clear()
self._transcript_panel.clear()
self._summary_panel.bind_session(None)
self._right_stack.set_visible_child_name("live")
self.set_title(APP_NAME)
def _on_close(self, *args):
@@ -568,17 +580,21 @@ class ChtWindow(Adw.ApplicationWindow):
self._timeline_controls.scrub_bar.connect("scrub-position", self._on_scrub_position)
right_box.append(self._timeline_controls)
# Frames
# ViewStack: Live (frames/transcript/agent) ↔ Summary (post-session export)
self._right_stack = Adw.ViewStack()
self._right_stack.set_vexpand(True)
live_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=2)
live_box.set_vexpand(True)
frames_frame = Gtk.Frame()
frames_frame.set_child(self._frames_panel)
right_box.append(frames_frame)
live_box.append(frames_frame)
# Transcript
transcript_frame = Gtk.Frame()
transcript_frame.set_child(self._transcript_panel)
right_box.append(transcript_frame)
live_box.append(transcript_frame)
# Agent input
self._agent_input = AgentInputPanel()
self._agent_input.connect("send-requested", lambda p, text: self._send_message(text or None))
self._agent_input.connect("action-requested", lambda p, verb: self._send_action(verb))
@@ -586,7 +602,20 @@ class ChtWindow(Adw.ApplicationWindow):
self._agent_input.connect("lang-changed", self._on_lang_changed)
self._agent_input.connect("history-toggled", lambda p, v: setattr(self._agent, "include_history", v))
self._agent_input.connect("permission-changed", self._on_permission_changed)
right_box.append(self._agent_input)
live_box.append(self._agent_input)
live_page = self._right_stack.add_titled(live_box, "live", "Live")
live_page.set_icon_name("video-display-symbolic")
self._summary_panel = SummaryPanel()
summary_page = self._right_stack.add_titled(self._summary_panel, "summary", "Summary")
summary_page.set_icon_name("text-x-generic-symbolic")
switcher = Adw.ViewSwitcher()
switcher.set_stack(self._right_stack)
switcher.set_policy(Adw.ViewSwitcherPolicy.WIDE)
right_box.append(switcher)
right_box.append(self._right_stack)
return right_box