Private
Public Access
Add SSDL-style docstrings to Core Interaction Loop panels (comms history, message input, response stream, tool calls, and script approval)
This commit is contained in:
@@ -9,5 +9,5 @@ active = "main"
|
||||
|
||||
[discussions.main]
|
||||
git_commit = ""
|
||||
last_updated = "2026-06-12T22:10:33"
|
||||
last_updated = "2026-06-12T22:15:59"
|
||||
history = []
|
||||
|
||||
+69
-12
@@ -256,7 +256,6 @@ def _apply_runtime_caps_override(app: "App", caps: "VendorCapabilities") -> "Ven
|
||||
return replace(caps, local=True)
|
||||
return caps
|
||||
|
||||
|
||||
def _render_v2_capability_badges(caps: "VendorCapabilities") -> None:
|
||||
"""Render small colored badges for the 11 v2 capability flags.
|
||||
|
||||
@@ -288,14 +287,12 @@ def _render_v2_capability_badges(caps: "VendorCapabilities") -> None:
|
||||
for field_name, label in badged_fields:
|
||||
if getattr(caps, field_name, False):
|
||||
enabled.append((field_name, label))
|
||||
if not enabled:
|
||||
return
|
||||
if not enabled: return
|
||||
imgui.text("Capabilities")
|
||||
for field_name, label in enabled:
|
||||
imgui.same_line()
|
||||
imgui.text_colored(theme.get_color("status_success"), f" [{label}]")
|
||||
if imgui.is_item_hovered():
|
||||
imgui.set_tooltip(f"caps.{field_name}=True")
|
||||
imgui.same_line(); imgui.text_colored(theme.get_color("status_success"), f" [{label}]")
|
||||
if imgui.is_item_hovered(): imgui.set_tooltip(f"caps.{field_name}=True")
|
||||
|
||||
class App:
|
||||
"""The main ImGui interface orchestrator for Manual Slop."""
|
||||
|
||||
@@ -337,10 +334,10 @@ class App:
|
||||
from src.hot_reloader import HotReloader, HotModule
|
||||
if 'src.gui_2' not in HotReloader.HOT_MODULES:
|
||||
HotReloader.register(HotModule(
|
||||
name='src.gui_2',
|
||||
file_path=__file__,
|
||||
state_keys=['active_discussion', 'show_windows', 'ui_file_paths', 'ui_screenshot_paths', 'disc_entries', 'disc_roles'],
|
||||
delegation_targets=['_render_main_interface', '_render_discussion_hub', '_render_files_and_media', '_render_ai_settings_hub', '_render_operations_hub', '_render_mma_dashboard']
|
||||
name = 'src.gui_2',
|
||||
file_path = __file__,
|
||||
state_keys = ['active_discussion', 'show_windows', 'ui_file_paths', 'ui_screenshot_paths', 'disc_entries', 'disc_roles'],
|
||||
delegation_targets = ['_render_main_interface', '_render_discussion_hub', '_render_files_and_media', '_render_ai_settings_hub', '_render_operations_hub', '_render_mma_dashboard']
|
||||
))
|
||||
|
||||
with startup_profiler.phase("app_init_workspace"):
|
||||
@@ -4772,6 +4769,17 @@ def render_synthesis_panel(app: App) -> None:
|
||||
app._handle_generate_send()
|
||||
|
||||
def render_comms_history_panel(app: App) -> None:
|
||||
"""
|
||||
Renders the communications history log panel. Displays outgoing requests, incoming responses,
|
||||
and tool call inputs/outputs in chronological order.
|
||||
|
||||
State Mutations:
|
||||
app._comms_log_dirty (marks log for reload)
|
||||
app._comms_log (clears log on user clear request)
|
||||
|
||||
SSDL Shape:
|
||||
`[I:ai_status] -> [B:clear_exit_buttons] -> [I:direction_colors] -> [I:entries_scroll_list]`
|
||||
"""
|
||||
if app.perf_profiling_enabled: app.perf_monitor.start_component("_render_comms_history_panel")
|
||||
st_col = theme.get_color("text_disabled")
|
||||
if theme.is_nerv_active(): st_col = theme.get_color("status_success") # DATA_GREEN for status in NERV
|
||||
@@ -5203,6 +5211,18 @@ def render_vendor_state(app: App) -> None: # TODO(Ed): Shouldn't this just be a
|
||||
imgui.end_table()
|
||||
|
||||
def render_message_panel(app: App) -> None:
|
||||
"""
|
||||
Renders user message text input area, exposing buttons to generate assistant responses,
|
||||
inject contextual files, or reset active conversation sessions.
|
||||
|
||||
State Mutations:
|
||||
app.ui_ai_input (stores user message content)
|
||||
app.show_inject_modal (triggers inject modal visibility)
|
||||
app.disc_entries (appends user message to history)
|
||||
|
||||
SSDL Shape:
|
||||
`[I:live_indicator] -> [I:input_textbox] -> [B:gen_send_buttons] -> [B:inject_reset]`
|
||||
"""
|
||||
if app.perf_profiling_enabled: app.perf_monitor.start_component("_render_message_panel")
|
||||
# LIVE indicator
|
||||
is_live = app.ai_status in ["running powershell...", "fetching url...", "searching web...", "powershell done, awaiting AI..."]
|
||||
@@ -5241,6 +5261,17 @@ def render_message_panel(app: App) -> None:
|
||||
if app.perf_profiling_enabled: app.perf_monitor.end_component("_render_message_panel")
|
||||
|
||||
def render_response_panel(app: App) -> None:
|
||||
"""
|
||||
Renders assistant stream output panel. Renders thinking traces, markdown segments,
|
||||
and exports active responses to history entries.
|
||||
|
||||
State Mutations:
|
||||
app._trigger_blink, app._is_blinking, app._blink_start_time (visual transition indicators)
|
||||
app.disc_entries (appends generated responses to history)
|
||||
|
||||
SSDL Shape:
|
||||
`[I:response_text] -> [I:thinking_trace] -> [I:markdown_view] => [B:export_to_history]`
|
||||
"""
|
||||
if app.perf_profiling_enabled: app.perf_monitor.start_component("_render_response_panel")
|
||||
if app._trigger_blink:
|
||||
app._trigger_blink = False
|
||||
@@ -5281,6 +5312,20 @@ def render_response_panel(app: App) -> None:
|
||||
if app.perf_profiling_enabled: app.perf_monitor.end_component("_render_response_panel")
|
||||
|
||||
def render_tool_calls_panel(app: App) -> None:
|
||||
"""
|
||||
Renders tool call execution log. Displays script execution details, status codes,
|
||||
and outputs in a table.
|
||||
|
||||
State Mutations:
|
||||
app._tool_log (clears tool log)
|
||||
app._tool_log_dirty (marks tool log for reload)
|
||||
app.text_viewer_title, app.text_viewer_content, app.text_viewer_type (triggers text viewer)
|
||||
app.show_windows["Text Viewer"]
|
||||
app._scroll_tool_calls_to_bottom
|
||||
|
||||
SSDL Shape:
|
||||
`[I:tool_log] -> [B:clear_button] => [I:calls_table]`
|
||||
"""
|
||||
if app.perf_profiling_enabled: app.perf_monitor.start_component("_render_tool_calls_panel")
|
||||
imgui.text("Tool call history")
|
||||
imgui.same_line()
|
||||
@@ -5576,7 +5621,19 @@ def render_external_editor_panel(app: App) -> None:
|
||||
imgui.text_colored(C_TC(), f"Error: {str(e)}")
|
||||
|
||||
def render_approve_script_modal(app: App) -> None:
|
||||
"""Renders the modal dialog for approving AI-generated PowerShell scripts."""
|
||||
"""
|
||||
Renders the modal dialog for approving AI-generated PowerShell scripts.
|
||||
Supports full script editing or markdown code blocks preview.
|
||||
|
||||
State Mutations:
|
||||
app._pending_dialog_open
|
||||
app.ui_approve_modal_preview
|
||||
dlg._script (allows direct script mutation prior to approval)
|
||||
app._pending_dialog (resets active pending dialog lock)
|
||||
|
||||
SSDL Shape:
|
||||
`[I:command_details] -> [B:preview_checkbox] -> [I:preview_box_or_editor] => [B:approve_reject]`
|
||||
"""
|
||||
with app._pending_dialog_lock:
|
||||
dlg = app._pending_dialog
|
||||
if dlg:
|
||||
|
||||
Reference in New Issue
Block a user