fix(gui): Skip empty strings in selectable to prevent ImGui ID assertion

Empty strings in bias_profiles.keys() and personas.keys() caused
imgui.selectable() to fail with 'Cannot have an empty ID at root of
window' assertion error. Added guards to skip empty names.
This commit is contained in:
2026-03-22 11:16:52 -04:00
parent 133fd60613
commit f6fe3baaf4
10 changed files with 48 additions and 43 deletions

View File

@@ -1,7 +1,7 @@
---
---
description: Fast, read-only agent for exploring the codebase structure
mode: subagent
model: MiniMax-M2.5
model: minimax-coding-plan/MiniMax-M2.7
temperature: 0.2
permission:
edit: deny

View File

@@ -1,7 +1,7 @@
---
---
description: General-purpose agent for researching complex questions and executing multi-step tasks
mode: subagent
model: MiniMax-M2.5
model: minimax-coding-plan/MiniMax-M2.7
temperature: 0.3
---

View File

@@ -1,7 +1,7 @@
---
---
description: Tier 1 Orchestrator for product alignment, high-level planning, and track initialization
mode: primary
model: MiniMax-M2.5
model: minimax-coding-plan/MiniMax-M2.7
temperature: 0.5
permission:
edit: ask
@@ -18,7 +18,7 @@ ONLY output the requested text. No pleasantries.
## Context Management
**MANUAL COMPACTION ONLY** Never rely on automatic context summarization.
**MANUAL COMPACTION ONLY** <EFBFBD> Never rely on automatic context summarization.
Use `/compact` command explicitly when context needs reduction.
Preserve full context during track planning and spec creation.
@@ -105,7 +105,7 @@ Use `manual-slop_py_get_code_outline`, `manual-slop_py_get_definition`,
Document existing implementations with file:line references in a
"Current State Audit" section in the spec.
**FAILURE TO AUDIT = TRACK FAILURE** Previous tracks failed because specs
**FAILURE TO AUDIT = TRACK FAILURE** <EFBFBD> Previous tracks failed because specs
asked to implement features that already existed.
### 2. Identify Gaps, Not Features

View File

@@ -1,7 +1,7 @@
---
---
description: Tier 2 Tech Lead for architectural design and track execution with persistent memory
mode: primary
model: MiniMax-M2.5
model: minimax-coding-plan/MiniMax-M2.7
temperature: 0.4
permission:
edit: ask
@@ -14,9 +14,9 @@ ONLY output the requested text. No pleasantries.
## Context Management
**MANUAL COMPACTION ONLY** Never rely on automatic context summarization.
**MANUAL COMPACTION ONLY** <EFBFBD> Never rely on automatic context summarization.
Use `/compact` command explicitly when context needs reduction.
You maintain PERSISTENT MEMORY throughout track execution do NOT apply Context Amnesia to your own session.
You maintain PERSISTENT MEMORY throughout track execution <EFBFBD> do NOT apply Context Amnesia to your own session.
## CRITICAL: MCP Tools Only (Native Tools Banned)
@@ -134,14 +134,14 @@ Before implementing:
- Zero-assertion ban: Tests MUST have meaningful assertions
- Delegate test creation to Tier 3 Worker via Task tool
- Run tests and confirm they FAIL as expected
- **CONFIRM FAILURE** this is the Red phase
- **CONFIRM FAILURE** <EFBFBD> this is the Red phase
### 3. Green Phase: Implement to Pass
- **Pre-delegation checkpoint**: Stage current progress (`git add .`)
- Delegate implementation to Tier 3 Worker via Task tool
- Run tests and confirm they PASS
- **CONFIRM PASS** this is the Green phase
- **CONFIRM PASS** <EFBFBD> this is the Green phase
### 4. Refactor Phase (Optional)

View File

@@ -1,7 +1,7 @@
---
---
description: Stateless Tier 3 Worker for surgical code implementation and TDD
mode: subagent
model: MiniMax-M2.5
model: minimax-coding-plan/minimax-m2.7
temperature: 0.3
permission:
edit: allow

View File

@@ -1,7 +1,7 @@
---
---
description: Stateless Tier 4 QA Agent for error analysis and diagnostics
mode: subagent
model: MiniMax-M2.5
model: minimax-coding-plan/MiniMax-M2.7
temperature: 0.2
permission:
edit: deny

View File

@@ -1,6 +1,6 @@
[ai]
provider = "gemini_cli"
model = "gemini-2.5-flash-lite"
provider = "minimax"
model = "MiniMax-M2.5"
temperature = 0.0
top_p = 1.0
max_tokens = 32000
@@ -61,7 +61,7 @@ Diagnostics = false
"Session Hub" = false
[theme]
palette = "10x Dark"
palette = "Nord Dark"
font_path = "fonts/Inter-Regular.ttf"
font_size = 16.0
scale = 1.0

View File

@@ -74,8 +74,8 @@ Collapsed=0
DockId=0xAFC85805,2
[Window][Theme]
Pos=0,249
Size=32,951
Pos=0,976
Size=635,951
Collapsed=0
DockId=0x00000002,2
@@ -91,8 +91,8 @@ Collapsed=0
DockId=0x00000010,0
[Window][Context Hub]
Pos=0,249
Size=32,951
Pos=0,976
Size=635,951
Collapsed=0
DockId=0x00000002,1
@@ -103,26 +103,26 @@ Collapsed=0
DockId=0x0000000D,0
[Window][Discussion Hub]
Pos=807,26
Size=873,1174
Pos=1936,24
Size=1468,1903
Collapsed=0
DockId=0x00000013,0
[Window][Operations Hub]
Pos=34,26
Size=771,1174
Pos=637,24
Size=1297,1903
Collapsed=0
DockId=0x00000005,0
[Window][Files & Media]
Pos=0,249
Size=32,951
Pos=0,976
Size=635,951
Collapsed=0
DockId=0x00000002,0
[Window][AI Settings]
Pos=0,26
Size=32,221
Pos=0,24
Size=635,950
Collapsed=0
DockId=0x00000001,0
@@ -513,12 +513,12 @@ 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,26 Size=1680,1174 Split=X
DockSpace ID=0xAFC85805 Window=0x079D3A04 Pos=0,24 Size=3404,1903 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,1037 CentralNode=1 Selected=0x7BD57D6A
DockNode ID=0x00000002 Parent=0x00000007 SizeRef=824,951 Selected=0x1DCB2623
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

View File

@@ -71,5 +71,6 @@
"logs/**",
"*.log"
]
}
},
"plugin": ["superpowers@git+https://github.com/obra/superpowers.git"]
}

View File

@@ -2652,6 +2652,8 @@ def hello():
if imgui.selectable("None", not self.ui_active_persona)[0]:
self.ui_active_persona = ""
for pname in sorted(personas.keys()):
if not pname:
continue
if imgui.selectable(pname, pname == self.ui_active_persona)[0]:
self.ui_active_persona = pname
if pname in personas:
@@ -4219,6 +4221,8 @@ def hello():
from src import ai_client
ai_client.set_bias_profile(None)
for bname in sorted(self.controller.bias_profiles.keys()):
if not bname:
continue
if imgui.selectable(bname, bname == getattr(self, 'ui_active_bias_profile', ""))[0]:
self.ui_active_bias_profile = bname
from src import ai_client