diff --git a/conductor/product.md b/conductor/product.md index f73d4ca..d9f6e93 100644 --- a/conductor/product.md +++ b/conductor/product.md @@ -46,6 +46,7 @@ For deep implementation details when planning or implementing tracks, consult `d - **Parallel Tool Execution:** Executes independent tool calls (e.g., parallel file reads) concurrently within a single agent turn using an asynchronous execution engine, significantly reducing end-to-end latency. - **Automated Tier 4 QA:** Integrates real-time error interception in the shell runner, automatically forwarding technical failures to cheap sub-agents for 20-word diagnostic summaries injected back into the worker history. - **High-Fidelity Selectable UI:** Most read-only labels and logs across the interface (including discussion history, comms payloads, tool outputs, and telemetry metrics) are now implemented as selectable text fields. This enables standard OS-level text selection and copying (Ctrl+C) while maintaining a high-density, non-editable aesthetic. +- **High-Fidelity UI Rendering:** Employs advanced 3x font oversampling and sub-pixel positioning to ensure crisp, high-clarity text rendering across all resolutions, enhancing readability for dense logs and complex code fragments. - **Enhanced MMA Observability:** Worker streams and ticket previews now support direct text selection, allowing for easy extraction of specific logs or reasoning fragments during parallel execution. - **Detailed History Management:** Rich discussion history with branching, timestamping, and specific git commit linkage per conversation. - **Advanced Log Management:** Optimizes log storage by offloading large data (AI-generated scripts and tool outputs) to unique files within the session directory, using compact `[REF:filename]` pointers in JSON-L logs to minimize token overhead during analysis. Features a dedicated **Log Management panel** for monitoring, whitelisting, and pruning session logs. diff --git a/config.toml b/config.toml index cf002cd..92d9bf2 100644 --- a/config.toml +++ b/config.toml @@ -1,6 +1,6 @@ [ai] -provider = "deepseek" -model = "deepseek-chat" +provider = "minimax" +model = "MiniMax-M2.5" temperature = 0.0 max_tokens = 24000 history_trunc_limit = 900000 @@ -42,10 +42,12 @@ Theme = true Diagnostics = false [theme] -palette = "DPG Default" -font_path = "" -font_size = 14.0 -scale = 1.0 +palette = "Nord Dark" +font_path = "C:/projects/manual_slop/assets/fonts/Inter-Regular.ttf" +font_size = 12.0 +scale = 1.25 +transparency = 0.6499999761581421 +child_transparency = 0.7200000286102295 [mma] max_workers = 4 diff --git a/manualslop_layout.ini b/manualslop_layout.ini index ca0a63e..2830f47 100644 --- a/manualslop_layout.ini +++ b/manualslop_layout.ini @@ -49,10 +49,9 @@ Size=1065,548 Collapsed=0 [Window][Response] -Pos=826,1416 -Size=873,721 +Pos=1009,1217 +Size=1036,351 Collapsed=0 -DockId=0x00000014,1 [Window][Tool Calls] Pos=99,730 @@ -74,8 +73,8 @@ Collapsed=0 DockId=0xAFC85805,2 [Window][Theme] -Pos=0,17 -Size=824,961 +Pos=0,26 +Size=848,827 Collapsed=0 DockId=0x00000005,1 @@ -85,14 +84,14 @@ Size=900,700 Collapsed=0 [Window][Diagnostics] -Pos=2813,17 -Size=1027,2120 +Pos=2622,27 +Size=1218,2110 Collapsed=0 -DockId=0x00000004,2 +DockId=0x00000004,1 [Window][Context Hub] -Pos=0,17 -Size=824,961 +Pos=0,26 +Size=848,827 Collapsed=0 DockId=0x00000005,0 @@ -103,26 +102,26 @@ Collapsed=0 DockId=0x0000000D,0 [Window][Discussion Hub] -Pos=1761,17 -Size=1050,1397 +Pos=1736,26 +Size=884,1463 Collapsed=0 DockId=0x00000013,0 [Window][Operations Hub] -Pos=826,17 -Size=933,1397 +Pos=850,26 +Size=884,1463 Collapsed=0 DockId=0x00000012,0 [Window][Files & Media] -Pos=0,1560 -Size=824,577 +Pos=0,1885 +Size=848,252 Collapsed=0 DockId=0x00000002,0 [Window][AI Settings] -Pos=0,980 -Size=824,578 +Pos=0,855 +Size=848,1028 Collapsed=0 DockId=0x00000001,0 @@ -132,43 +131,43 @@ Size=416,325 Collapsed=0 [Window][MMA Dashboard] -Pos=2813,17 -Size=1027,2120 -Collapsed=0 -DockId=0x00000004,0 - -[Window][Log Management] -Pos=2813,17 -Size=1027,2120 +Pos=2622,26 +Size=1218,2111 Collapsed=0 DockId=0x00000004,1 +[Window][Log Management] +Pos=2622,26 +Size=1218,2111 +Collapsed=0 +DockId=0x00000004,0 + [Window][Track Proposal] Pos=709,326 Size=262,209 Collapsed=0 [Window][Tier 1: Strategy] -Pos=826,1416 -Size=873,721 +Pos=850,1491 +Size=306,646 Collapsed=0 DockId=0x00000014,0 [Window][Tier 2: Tech Lead] -Pos=1701,1416 -Size=353,721 +Pos=1158,1491 +Size=550,646 Collapsed=0 DockId=0x00000016,0 [Window][Tier 4: QA] -Pos=2542,1416 -Size=269,721 +Pos=2215,1491 +Size=405,646 Collapsed=0 DockId=0x00000019,0 [Window][Tier 3: Workers] -Pos=2056,1416 -Size=484,721 +Pos=1710,1491 +Size=503,646 Collapsed=0 DockId=0x00000018,0 @@ -307,6 +306,21 @@ Pos=532,397 Size=616,406 Collapsed=0 +[Window][Markdown Test] +Pos=447,895 +Size=1286,827 +Collapsed=0 + +[Window][Dear ImGui Demo] +Pos=650,49 +Size=550,680 +Collapsed=0 + +[Window][Theme Tweaks] +Pos=755,679 +Size=420,966 +Collapsed=0 + [Table][0xFB6E3870,4] RefScale=13 Column 0 Width=80 @@ -338,11 +352,11 @@ Column 3 Width=20 Column 4 Weight=1.0000 [Table][0x2A6000B6,4] -RefScale=13 -Column 0 Width=40 -Column 1 Width=60 +RefScale=14 +Column 0 Width=42 +Column 1 Width=64 Column 2 Weight=1.0000 -Column 3 Width=100 +Column 3 Width=107 [Table][0x8BCC69C7,6] RefScale=13 @@ -354,47 +368,68 @@ Column 4 Weight=1.0000 Column 5 Width=50 [Table][0x3751446B,4] -RefScale=13 -Column 0 Width=40 -Column 1 Width=60 +RefScale=14 +Column 0 Width=42 +Column 1 Width=64 Column 2 Weight=1.0000 -Column 3 Width=100 +Column 3 Width=106 [Table][0x2C515046,4] -RefScale=13 -Column 0 Width=57 +RefScale=14 +Column 0 Width=61 Column 1 Weight=1.0000 -Column 2 Width=150 -Column 3 Width=40 +Column 2 Width=161 +Column 3 Width=42 [Table][0xD99F45C5,4] Column 0 Sort=0v +[Table][0x1829A682,7] +Column 0 Weight=0.5786 +Column 1 Weight=1.4145 +Column 2 Weight=0.9966 +Column 3 Weight=0.7956 +Column 4 Weight=1.2055 +Column 5 Weight=1.0046 +Column 6 Weight=1.0046 + +[Table][0x5386208F,3] +RefScale=13 +Column 0 Width=150 +Column 1 Width=100 +Column 2 Weight=1.0000 + +[Table][0xA02D8C87,3] +RefScale=14 +Column 0 Width=160 +Column 1 Width=106 +Column 2 Weight=1.0000 + [Docking][Data] 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,17 Size=3840,2120 Split=X - DockNode ID=0x00000003 Parent=0xAFC85805 SizeRef=2811,1183 Split=X +DockSpace ID=0xAFC85805 Window=0x079D3A04 Pos=0,26 Size=3840,2111 Split=X + DockNode ID=0x00000003 Parent=0xAFC85805 SizeRef=2620,1183 Split=X DockNode ID=0x0000000B Parent=0x00000003 SizeRef=404,1186 Split=X Selected=0xF4139CA2 - DockNode ID=0x00000007 Parent=0x0000000B SizeRef=824,858 Split=Y Selected=0x8CA2375C - DockNode ID=0x00000005 Parent=0x00000007 SizeRef=295,961 Selected=0xF4139CA2 - DockNode ID=0x00000006 Parent=0x00000007 SizeRef=295,1157 Split=Y Selected=0x7BD57D6A - DockNode ID=0x00000001 Parent=0x00000006 SizeRef=824,578 CentralNode=1 Selected=0x7BD57D6A - DockNode ID=0x00000002 Parent=0x00000006 SizeRef=824,577 Selected=0x1DCB2623 - DockNode ID=0x0000000E Parent=0x0000000B SizeRef=1985,858 Split=Y Selected=0x418C7449 - DockNode ID=0x00000010 Parent=0x0000000E SizeRef=868,1397 Split=X Selected=0x418C7449 - DockNode ID=0x00000012 Parent=0x00000010 SizeRef=933,402 Selected=0x418C7449 - DockNode ID=0x00000013 Parent=0x00000010 SizeRef=1050,402 Selected=0x6F2B5B04 - DockNode ID=0x00000011 Parent=0x0000000E SizeRef=868,721 Split=X Selected=0x5CDB7A4B - DockNode ID=0x00000014 Parent=0x00000011 SizeRef=873,837 Selected=0x0D5A5273 - DockNode ID=0x00000015 Parent=0x00000011 SizeRef=1110,837 Split=X Selected=0x5CDB7A4B - DockNode ID=0x00000016 Parent=0x00000015 SizeRef=353,837 Selected=0x390E7942 - DockNode ID=0x00000017 Parent=0x00000015 SizeRef=755,837 Split=X Selected=0x655BC6E9 - DockNode ID=0x00000018 Parent=0x00000017 SizeRef=484,874 Selected=0x655BC6E9 - DockNode ID=0x00000019 Parent=0x00000017 SizeRef=269,874 Selected=0x5CDB7A4B + DockNode ID=0x00000007 Parent=0x0000000B SizeRef=848,858 Split=Y Selected=0x8CA2375C + DockNode ID=0x00000005 Parent=0x00000007 SizeRef=295,827 Selected=0x8CA2375C + DockNode ID=0x00000006 Parent=0x00000007 SizeRef=295,1286 Split=Y Selected=0x7BD57D6A + DockNode ID=0x00000001 Parent=0x00000006 SizeRef=824,1032 CentralNode=1 Selected=0x7BD57D6A + DockNode ID=0x00000002 Parent=0x00000006 SizeRef=824,252 Selected=0x1DCB2623 + DockNode ID=0x0000000E Parent=0x0000000B SizeRef=1770,858 Split=Y Selected=0x418C7449 + DockNode ID=0x00000010 Parent=0x0000000E SizeRef=868,1466 Split=X Selected=0x418C7449 + DockNode ID=0x00000012 Parent=0x00000010 SizeRef=884,402 Selected=0x418C7449 + DockNode ID=0x00000013 Parent=0x00000010 SizeRef=884,402 Selected=0x6F2B5B04 + DockNode ID=0x00000011 Parent=0x0000000E SizeRef=868,647 Split=X Selected=0x5CDB7A4B + DockNode ID=0x00000014 Parent=0x00000011 SizeRef=306,837 Selected=0xBB346584 + DockNode ID=0x00000015 Parent=0x00000011 SizeRef=1462,837 Split=X Selected=0x5CDB7A4B + DockNode ID=0x00000016 Parent=0x00000015 SizeRef=550,837 Selected=0x390E7942 + DockNode ID=0x00000017 Parent=0x00000015 SizeRef=910,837 Split=X Selected=0x655BC6E9 + DockNode ID=0x00000018 Parent=0x00000017 SizeRef=503,874 Selected=0x655BC6E9 + DockNode ID=0x00000019 Parent=0x00000017 SizeRef=405,874 Selected=0x5CDB7A4B DockNode ID=0x0000000D Parent=0x00000003 SizeRef=435,1186 Selected=0x363E93D6 - DockNode ID=0x00000004 Parent=0xAFC85805 SizeRef=1027,1183 Selected=0x2C0206CE + DockNode ID=0x00000004 Parent=0xAFC85805 SizeRef=1218,1183 Selected=0x2C0206CE ;;;<<>>;;; ;;;<<>>;;; @@ -404,6 +439,6 @@ Name=Default Show=false ShowFps=true [Theme] -Name=SoDark_AccentRed +Name=ImGuiColorsClassic ;;;<<>>;;; {"gImGuiSplitIDs":{"MainDockSpace":2949142533}} diff --git a/project.toml b/project.toml index d1368ff..560eda9 100644 --- a/project.toml +++ b/project.toml @@ -3,10 +3,6 @@ name = "project" git_dir = "" system_prompt = "" main_context = "" -word_wrap = true -summary_only = false -auto_scroll_comms = true -auto_scroll_tool_calls = true [output] output_dir = "./md_gen" @@ -59,19 +55,3 @@ py_set_var_declaration = false epic = "" active_track_id = "" tracks = [] - -[mma.tier_models."Tier 1"] -model = "gemini-3.1-pro-preview" -provider = "gemini" - -[mma.tier_models."Tier 2"] -model = "gemini-3-flash-preview" -provider = "gemini" - -[mma.tier_models."Tier 3"] -model = "gemini-2.5-flash-lite" -provider = "gemini" - -[mma.tier_models."Tier 4"] -model = "gemini-2.5-flash-lite" -provider = "gemini" diff --git a/project_history.toml b/project_history.toml index 1626ade..b204776 100644 --- a/project_history.toml +++ b/project_history.toml @@ -6,9 +6,8 @@ roles = [ "Context", ] active = "main" -auto_add = false [discussions.main] git_commit = "" -last_updated = "2026-03-08T03:12:45" +last_updated = "2026-03-08T22:48:42" history = [] diff --git a/src/app_controller.py b/src/app_controller.py index 1eaae58..abe5a83 100644 --- a/src/app_controller.py +++ b/src/app_controller.py @@ -32,7 +32,7 @@ from src import aggregate from src import orchestrator_pm from src import conductor_tech_lead from src import multi_agent_conductor -from src import theme +from src import theme_2 as theme def hide_tk_root() -> Tk: root = Tk() @@ -744,6 +744,7 @@ class AppController: def init_state(self): """Initializes the application state from configurations.""" self.config = models.load_config() + theme.load_from_config(self.config) ai_cfg = self.config.get("ai", {}) self._current_provider = ai_cfg.get("provider", "gemini") self._current_model = ai_cfg.get("model", "gemini-2.5-flash-lite") @@ -2085,14 +2086,18 @@ class AppController: self.config["ai"]["system_prompt"] = self.ui_global_system_prompt self.config["projects"] = {"paths": self.project_paths, "active": self.active_project_path} from src import bg_shader - self.config["gui"] = { + # Update gui section while preserving other keys like bg_shader_enabled + gui_cfg = self.config.get("gui", {}) + gui_cfg.update({ "show_windows": self.show_windows, "separate_message_panel": getattr(self, "ui_separate_message_panel", False), "separate_response_panel": getattr(self, "ui_separate_response_panel", False), "separate_tool_calls_panel": getattr(self, "ui_separate_tool_calls_panel", False), "bg_shader_enabled": bg_shader.get_bg().enabled - } - # Explicitly call theme save to ensure self.config is updated + }) + self.config["gui"] = gui_cfg + + # Explicitly save theme state into the config dict theme.save_to_config(self.config) def _do_generate(self) -> tuple[str, Path, list[dict[str, Any]], str, str]: diff --git a/src/models.py b/src/models.py index a8ba7a3..daada0c 100644 --- a/src/models.py +++ b/src/models.py @@ -52,6 +52,9 @@ def load_config() -> dict[str, Any]: def save_config(config: dict[str, Any]) -> None: import tomli_w + import sys + sys.stderr.write(f"[DEBUG] Saving config. Theme: {config.get('theme')}\n") + sys.stderr.flush() with open(CONFIG_PATH, "wb") as f: tomli_w.dump(config, f) diff --git a/src/theme_2.py b/src/theme_2.py index 91bc613..8645214 100644 --- a/src/theme_2.py +++ b/src/theme_2.py @@ -334,6 +334,7 @@ def set_scale(factor: float) -> None: def save_to_config(config: dict) -> None: """Persist theme settings into the config dict under [theme].""" + import sys config.setdefault("theme", {}) config["theme"]["palette"] = _current_palette config["theme"]["font_path"] = _current_font_path @@ -341,11 +342,16 @@ def save_to_config(config: dict) -> None: config["theme"]["scale"] = _current_scale config["theme"]["transparency"] = _transparency config["theme"]["child_transparency"] = _child_transparency + sys.stderr.write(f"[DEBUG theme_2] save_to_config: palette={_current_palette}, transparency={_transparency}\n") + sys.stderr.flush() def load_from_config(config: dict) -> None: """Read [theme] from config. Font is handled separately at startup.""" + import sys global _current_font_path, _current_font_size, _current_scale, _current_palette, _transparency, _child_transparency t = config.get("theme", {}) + sys.stderr.write(f"[DEBUG theme_2] load_from_config raw: {t}\n") + sys.stderr.flush() _current_palette = t.get("palette", "10x Dark") if _current_palette in ("", "DPG Default"): _current_palette = "10x Dark" @@ -355,6 +361,8 @@ def load_from_config(config: dict) -> None: _current_scale = float(t.get("scale", 1.0)) _transparency = float(t.get("transparency", 1.0)) _child_transparency = float(t.get("child_transparency", 1.0)) + sys.stderr.write(f"[DEBUG theme_2] load_from_config effective: palette={_current_palette}, transparency={_transparency}\n") + sys.stderr.flush() def apply_current() -> None: """Apply the loaded palette and scale. Call after imgui context exists."""