feat(gui): Remove ui_summary_only global toggle

The ui_summary_only global aggregation toggle was redundant with per-file flags
(auto_aggregate, force_full). Removed:
- Checkbox from Projects panel (gui_2.py)
- State variable and project load/save (app_controller.py)

Per-file flags remain the intended mechanism for controlling aggregation.

Tests added to verify removal and per-file flag functionality.
This commit is contained in:
2026-03-22 12:54:32 -04:00
parent abe1c660ea
commit f5d4913da2
6 changed files with 134 additions and 68 deletions

View File

@@ -3,8 +3,8 @@
## Phase 1: Cleanup & Project Settings Rename
Focus: Remove redundant ui_summary_only, rename Context Hub, establish project-level vs discussion-level separation
- [ ] Task: Audit current ui_summary_only usages and document behavior to deprecate
- [ ] Task: Remove ui_summary_only checkbox from _render_projects_panel (gui_2.py)
- [x] Task: Audit current ui_summary_only usages and document behavior to deprecate [f6fe3ba] (embedded audit)
- [~] Task: Remove ui_summary_only checkbox from _render_projects_panel (gui_2.py)
- [ ] Task: Rename Context Hub to "Project Settings" in _gui_func tab bar
- [ ] Task: Remove Context Presets tab from Project Settings (Context Hub)
- [ ] Task: Update references in show_windows dict and any help text

View File

@@ -10,14 +10,9 @@ system_prompt = "Overridden Prompt"
[projects]
paths = [
"C:/projects/gencpp/gencpp_sloppy.toml",
"C:\\projects\\manual_slop\\tests\\artifacts\\temp_livecontextsim.toml",
"C:\\projects\\manual_slop\\tests\\artifacts\\temp_liveaisettingssim.toml",
"C:\\projects\\manual_slop\\tests\\artifacts\\temp_livetoolssim.toml",
"C:\\projects\\manual_slop\\tests\\artifacts\\temp_liveexecutionsim.toml",
"C:\\projects\\manual_slop\\tests\\artifacts\\temp_project.toml",
"C:/projects/gencpp/.ai/gencpp_sloppy.toml",
]
active = "C:/projects/gencpp/gencpp_sloppy.toml"
active = "C:/projects/gencpp/.ai/gencpp_sloppy.toml"
[gui]
separate_message_panel = false
@@ -34,9 +29,9 @@ separate_tier4 = false
separate_external_tools = false
[gui.show_windows]
"Context Hub" = true
"Files & Media" = true
"AI Settings" = true
"Context Hub" = false
"Files & Media" = false
"AI Settings" = false
"MMA Dashboard" = false
"Task DAG" = true
"Usage Analytics" = true
@@ -53,12 +48,12 @@ separate_external_tools = false
Message = false
Response = false
"Tool Calls" = false
Theme = true
Theme = false
"Log Management" = false
Diagnostics = false
"External Tools" = false
"Shader Editor" = false
"Session Hub" = false
"Session Hub" = true
[theme]
palette = "Nord Dark"

View File

@@ -12,7 +12,7 @@ ViewportPos=43,95
ViewportId=0x78C57832
Size=897,649
Collapsed=0
DockId=0x00000001,0
DockId=0x00000005,0
[Window][Files]
ViewportPos=3125,170
@@ -33,7 +33,7 @@ DockId=0x0000000A,0
Pos=0,17
Size=1680,730
Collapsed=0
DockId=0x00000001,0
DockId=0x00000005,0
[Window][Provider]
ViewportPos=43,95
@@ -41,7 +41,7 @@ ViewportId=0x78C57832
Pos=0,651
Size=897,468
Collapsed=0
DockId=0x00000001,0
DockId=0x00000005,0
[Window][Message]
Pos=711,694
@@ -57,7 +57,7 @@ Collapsed=0
Pos=1028,1668
Size=1397,340
Collapsed=0
DockId=0x00000006,0
DockId=0x0000000E,0
[Window][Comms History]
ViewportPos=43,95
@@ -74,10 +74,10 @@ Collapsed=0
DockId=0xAFC85805,2
[Window][Theme]
Pos=0,976
Size=635,951
Pos=0,975
Size=1010,730
Collapsed=0
DockId=0x00000002,2
DockId=0x00000002,0
[Window][Text Viewer - Entry #7]
Pos=379,324
@@ -85,16 +85,15 @@ Size=900,700
Collapsed=0
[Window][Diagnostics]
Pos=2177,26
Size=1162,1777
Pos=1945,734
Size=1211,713
Collapsed=0
DockId=0x00000010,0
[Window][Context Hub]
Pos=0,976
Size=635,951
Pos=0,975
Size=1010,730
Collapsed=0
DockId=0x00000002,1
DockId=0x00000002,0
[Window][AI Settings Hub]
Pos=406,17
@@ -103,28 +102,28 @@ Collapsed=0
DockId=0x0000000D,0
[Window][Discussion Hub]
Pos=1936,24
Size=1468,1903
Pos=1163,24
Size=1234,1542
Collapsed=0
DockId=0x00000013,0
DockId=0x00000006,0
[Window][Operations Hub]
Pos=637,24
Size=1297,1903
Pos=0,24
Size=1161,1542
Collapsed=0
DockId=0x00000005,0
[Window][Files & Media]
Pos=0,976
Size=635,951
Pos=0,975
Size=1010,730
Collapsed=0
DockId=0x00000002,0
[Window][AI Settings]
Pos=0,24
Size=635,950
Size=1010,1681
Collapsed=0
DockId=0x00000001,0
DockId=0x00000005,0
[Window][Approve Tool Execution]
Pos=3,524
@@ -135,13 +134,13 @@ Collapsed=0
Pos=3360,26
Size=480,2134
Collapsed=0
DockId=0x00000010,0
DockId=0x00000004,0
[Window][Log Management]
Pos=3360,26
Size=480,2134
Collapsed=0
DockId=0x00000010,0
DockId=0x00000004,0
[Window][Track Proposal]
Pos=709,326
@@ -400,6 +399,12 @@ Pos=1518,488
Size=900,700
Collapsed=0
[Window][Session Hub]
Pos=1163,24
Size=1234,1542
Collapsed=0
DockId=0x00000006,1
[Table][0xFB6E3870,4]
RefScale=13
Column 0 Width=80
@@ -431,11 +436,11 @@ Column 3 Width=20
Column 4 Weight=1.0000
[Table][0x2A6000B6,4]
RefScale=18
Column 0 Width=54
Column 1 Width=76
RefScale=16
Column 0 Width=48
Column 1 Width=67
Column 2 Weight=1.0000
Column 3 Width=274
Column 3 Width=243
[Table][0x8BCC69C7,6]
RefScale=13
@@ -454,11 +459,11 @@ Column 2 Weight=1.0000
Column 3 Width=135
[Table][0x2C515046,4]
RefScale=18
Column 0 Width=54
RefScale=16
Column 0 Width=48
Column 1 Weight=1.0000
Column 2 Width=132
Column 3 Width=54
Column 2 Width=166
Column 3 Width=48
[Table][0xD99F45C5,4]
Column 0 Sort=0v
@@ -479,9 +484,9 @@ Column 1 Width=100
Column 2 Weight=1.0000
[Table][0xA02D8C87,3]
RefScale=18
Column 0 Width=202
Column 1 Width=135
RefScale=16
Column 0 Width=179
Column 1 Width=120
Column 2 Weight=1.0000
[Table][0xD0277E63,2]
@@ -513,23 +518,19 @@ Column 1 Weight=1.0000
DockNode ID=0x00000008 Pos=3125,170 Size=593,1157 Split=Y
DockNode ID=0x00000009 Parent=0x00000008 SizeRef=1029,147 Selected=0x0469CA7A
DockNode ID=0x0000000A Parent=0x00000008 SizeRef=1029,145 Selected=0xDF822E02
DockSpace ID=0xAFC85805 Window=0x079D3A04 Pos=0,24 Size=3404,1903 Split=X
DockSpace ID=0xAFC85805 Window=0x079D3A04 Pos=0,24 Size=2397,1542 Split=X
DockNode ID=0x00000003 Parent=0xAFC85805 SizeRef=2175,1183 Split=X
DockNode ID=0x0000000B Parent=0x00000003 SizeRef=404,1186 Split=X Selected=0xF4139CA2
DockNode ID=0x00000007 Parent=0x0000000B SizeRef=1071,858 Split=Y Selected=0x8CA2375C
DockNode ID=0x00000001 Parent=0x00000007 SizeRef=824,950 CentralNode=1 Selected=0x7BD57D6A
DockNode ID=0x00000002 Parent=0x00000007 SizeRef=824,951 Selected=0x8CA2375C
DockNode ID=0x0000000E Parent=0x0000000B SizeRef=2767,858 Split=X Selected=0x418C7449
DockNode ID=0x00000012 Parent=0x0000000E SizeRef=1297,402 Split=Y Selected=0x418C7449
DockNode ID=0x00000005 Parent=0x00000012 SizeRef=876,1749 Selected=0x418C7449
DockNode ID=0x00000006 Parent=0x00000012 SizeRef=876,362 Selected=0x1D56B311
DockNode ID=0x00000013 Parent=0x0000000E SizeRef=1468,402 Selected=0x6F2B5B04
DockNode ID=0x00000007 Parent=0x0000000B SizeRef=1512,858 Split=Y Selected=0x8CA2375C
DockNode ID=0x00000001 Parent=0x00000007 SizeRef=824,949 Split=X Selected=0x418C7449
DockNode ID=0x00000005 Parent=0x00000001 SizeRef=1161,1681 CentralNode=1 Selected=0x418C7449
DockNode ID=0x00000006 Parent=0x00000001 SizeRef=1234,1681 Selected=0x6F2B5B04
DockNode ID=0x00000002 Parent=0x00000007 SizeRef=824,730 Selected=0x8CA2375C
DockNode ID=0x0000000E Parent=0x0000000B SizeRef=1777,858 Selected=0x418C7449
DockNode ID=0x0000000D Parent=0x00000003 SizeRef=435,1186 Selected=0x363E93D6
DockNode ID=0x00000004 Parent=0xAFC85805 SizeRef=1162,1183 Split=Y Selected=0x3AEC3498
DockNode ID=0x00000010 Parent=0x00000004 SizeRef=1199,1689 Selected=0xB4CBF21A
DockNode ID=0x00000011 Parent=0x00000004 SizeRef=1199,420 Split=X Selected=0xDEB547B6
DockNode ID=0x0000000C Parent=0x00000011 SizeRef=916,380 Selected=0x655BC6E9
DockNode ID=0x0000000F Parent=0x00000011 SizeRef=281,380 Selected=0xDEB547B6
DockNode ID=0x00000004 Parent=0xAFC85805 SizeRef=1162,1183 Split=X Selected=0x3AEC3498
DockNode ID=0x0000000C Parent=0x00000004 SizeRef=916,380 Selected=0x655BC6E9
DockNode ID=0x0000000F Parent=0x00000004 SizeRef=281,380 Selected=0xDEB547B6
;;;<<<Layout_655921752_Default>>>;;;
;;;<<<HelloImGui_Misc>>>;;;

View File

@@ -230,7 +230,6 @@ class AppController:
self.ui_project_system_prompt: str = ""
self.ui_gemini_cli_path: str = "gemini"
self.ui_word_wrap: bool = True
self.ui_summary_only: bool = False
self.ui_auto_add_history: bool = False
self.ui_active_tool_preset: str | None = None
self.ui_global_system_prompt: str = ""
@@ -912,7 +911,6 @@ class AppController:
self.ui_gemini_cli_path = self.project.get("gemini_cli", {}).get("binary_path", "gemini")
self._update_gcli_adapter(self.ui_gemini_cli_path)
self.ui_word_wrap = proj_meta.get("word_wrap", True)
self.ui_summary_only = proj_meta.get("summary_only", False)
self.ui_auto_add_history = disc_sec.get("auto_add", False)
self.ui_global_system_prompt = self.config.get("ai", {}).get("system_prompt", "")
@@ -2006,7 +2004,6 @@ class AppController:
self.ui_auto_scroll_comms = proj.get("project", {}).get("auto_scroll_comms", True)
self.ui_auto_scroll_tool_calls = proj.get("project", {}).get("auto_scroll_tool_calls", True)
self.ui_word_wrap = proj.get("project", {}).get("word_wrap", True)
self.ui_summary_only = proj.get("project", {}).get("summary_only", False)
agent_tools_cfg = proj.get("agent", {}).get("tools", {})
self.ui_agent_tools = {t: agent_tools_cfg.get(t, True) for t in models.AGENT_TOOL_NAMES}
# MMA Tracks
@@ -2458,7 +2455,6 @@ class AppController:
proj["project"]["main_context"] = self.ui_project_main_context
proj["project"]["active_preset"] = self.ui_project_preset_name
proj["project"]["word_wrap"] = self.ui_word_wrap
proj["project"]["summary_only"] = self.ui_summary_only
proj["project"]["auto_scroll_comms"] = self.ui_auto_scroll_comms
proj["project"]["auto_scroll_tool_calls"] = self.ui_auto_scroll_tool_calls
proj.setdefault("gemini_cli", {})["binary_path"] = self.ui_gemini_cli_path

View File

@@ -1702,7 +1702,6 @@ class App:
models.save_config(self.config)
self.ai_status = "config saved"
ch, self.ui_word_wrap = imgui.checkbox("Word-Wrap (Read-only panels)", self.ui_word_wrap)
ch, self.ui_summary_only = imgui.checkbox("Summary Only (send file structure, not full content)", self.ui_summary_only)
ch, self.ui_auto_scroll_comms = imgui.checkbox("Auto-scroll Comms History", self.ui_auto_scroll_comms)
ch, self.ui_auto_scroll_tool_calls = imgui.checkbox("Auto-scroll Tool History", self.ui_auto_scroll_tool_calls)
if self.perf_profiling_enabled: self.perf_monitor.end_component("_render_projects_panel")

View File

@@ -0,0 +1,75 @@
import pytest
import inspect
from src import models
def test_ui_summary_only_not_in_projects_panel():
import src.gui_2 as gui_2
source = inspect.getsource(gui_2.App._render_projects_panel)
assert "ui_summary_only" not in source, (
"ui_summary_only checkbox should be removed from Projects panel"
)
assert "Summary Only" not in source, (
"Summary Only label should be removed from Projects panel"
)
def test_ui_summary_only_not_in_app_controller_projects():
import src.app_controller as app_controller
source = inspect.getsource(app_controller.AppController)
assert "ui_summary_only" not in source, (
"ui_summary_only should be removed from AppController"
)
def test_file_item_has_per_file_flags():
item = models.FileItem(path="test.py")
assert hasattr(item, "auto_aggregate")
assert hasattr(item, "force_full")
assert item.auto_aggregate is True
assert item.force_full is False
def test_file_item_serialization_with_flags():
item = models.FileItem(path="test.py", auto_aggregate=False, force_full=True)
data = item.to_dict()
assert data["auto_aggregate"] is False
assert data["force_full"] is True
restored = models.FileItem.from_dict(data)
assert restored.auto_aggregate is False
assert restored.force_full is True
def test_project_without_summary_only_loads():
proj = {"project": {"name": "test", "paths": []}}
assert proj.get("project", {}).get("summary_only") is None
def test_aggregate_from_items_respects_auto_aggregate():
from pathlib import Path
from src import aggregate
items = [
{
"path": Path("file1.py"),
"entry": "file1.py",
"content": "print('hello')",
"auto_aggregate": True,
"force_full": False,
},
{
"path": Path("file2.py"),
"entry": "file2.py",
"content": "print('world')",
"auto_aggregate": False,
"force_full": False,
},
]
result = aggregate._build_files_section_from_items(items)
assert "file1.py" in result
assert "file2.py" not in result