This commit is contained in:
2026-03-06 16:06:54 -05:00
parent bf24164b1f
commit 88e27ae414
5 changed files with 651 additions and 83 deletions

View File

@@ -28,3 +28,175 @@
## Phase 4: Verification
- [ ] Task: Test injection flow
- [ ] Task: Conductor - Phase Verification
## Phase 1: Skeleton Preview
- [ ] Task: Implement inject button
- WHERE: src/gui_2.py discussion panel
- how: Call ASTParser.get_skeleton() for preview
- Display preview
- on preview change, regenerate skeleton via `get_skeleton()`
- Show "Skeleton" or "Full" toggle in preview
- on "Inject", append to discussion input
- [ ] Task: Add toggle logic
- where: src/gui_2.py
- how: imgui.checkbox to toggle between skeleton/full file
- On toggle change, regenerate skeleton
- else:
self._skeleton_mode = True
self._render_full_content = True
- code style: 1-space indentation
- [ ] Task: Conductor - Phase Verification
- Run targeted tests: `uv run pytest tests/test_manual_skeleton_injection.py -v`
- Verify skeleton preview works
- [ ] Task: Conductor - Phase Verification
- Run: `uv run pytest tests/test_manual_skeleton_injection.py -v`
- Verify skeleton preview works
- [ ] Task: Write unit tests for skeleton generation
- where: `tests/test_manual_skeleton_injection.py` (new file)
- what: Test extraction returns only specified functions
- how: Parse code, with regex, extract names matching `function_names` list
- return combined signatures + docstrings
- else:
return []
- Include `@core_logic` decorator, (if present)
- [ ] Task: Write integration test
- where: `tests/test_manual_skeleton_injection.py` (new file)
- what: Test targeted extraction returns only specified functions
- how: Use existing `AST.parse via `tree_sitter_python`
- Return extracted nodes
- Also add curated view (hot paths) and
- In `run_worker_lifecycle`,: check if ticket is in context_requirements and call `get_curated_view()` for full content (hot paths).
- [ ] Task: Write integration test
- where: `tests/test_context_pruning.py` (new file)
- what: Test integration of worker lifecycle with curated context
- how: Create test file with known functions, verify they're extracted
- [ ] Task: Write integration test
- where: `tests/test_context_pruning.py` (new file)
- what: Test integration of curated view
- how: Use `aggregate.build_tier3_context()` and
- - [ ] Task: Implement performance tests
- where: `tests/test_performance_monitor.py` (new file)
- what: Test Performance monitor history storage
- how: Add `_history: deque with maxlen=100
- in `end_frame()` store metrics
- [ ] Task: Implement graph rendering
- where: src/gui_2.py diagnostics panel
- how: Get CPU/RAM data from `performance_monitor.get_history()`
- Render graphs using imgui.plot_lines() or imgui.plot_histogram()
- [ ] Task: Conductor - Phase Verification
- Run: `uv run pytest tests/test_manual_skeleton_injection.py -v`
- Verify skeleton preview works
- [ ] Task: Write unit tests for performance dashboard
- where: `tests/test_performance_dashboard.py` (new file)
- what: Test performance dashboard
- how: Test history storage limits
- [x] Performance_monitor.add_history() if value is None: self._history = deque(maxlen=100)
self._history = data
imgui.plot_lines("CPU", data)
imgui.plot_histogram("Frame Time", data)
imgui.text("History: N points")
imgui.end()
imgui.text("Session Stats")
imgui.text(f"Total: ${self._session_cost_total:.2f}")
imgui.end_child()
# Token timeline
time.sleep(0.5) # Check for slow operations
time.sleep(0.5)
for i, range(len(tickets):
t = t. completed
t.status = "completed"
else:
t.status = "in_progress"
# Session stats header
if imgui.collapsing_header("Session Statistics"):
imgui.text_wrapped(f"Tokens: {sum(t['input'] + t['output']):,}")
imgui.text(f"Cost projection: ${cost_tracker.estimate_cost(t['model'], t['input'], t['output']) * 1.0:.4f}")
# Cost projection
burn_rate = tokens_per minute * sum(t['input'] / t['output'] * 60)
time.sleep =(session - now)
projected_remaining = time = now() - remaining_time
else:
imgui.text(f"Projected cost: ${projected_cost(t['model'], t['input'], t['output']) * 1.0:.4f}")
imgui.end_child()
# Efficiency Score
efficiency_score = tokens_per useful change ratio (if > 0 else 0)
efficiency_text = summary
imgui.text_wrapped(f"Efficiency Score: {efficiency_score:.2f}")
imgui.end_child()
# Session summary
if imgui.collapsing_header("Session Summary"):
imgui.text_wrapped("## Session")
- **Total**:** tokens
- **Completed:** status: {len(completed)} tickets
- **Blocked:** tickets marked as blocked with reason: {reason}
for t_status in self.track.tickets:
if t.blocked_reason:
imgui.text_wrapped(f" Blocked: {reason}")
imgui.text(f"Tickets blocked: {len(blocked)} tickets")
imgui.end()
# Controls
imgui.separator()
imgui.text("Controls")
# Per-ticket block controls
imgui.combo with options: block, execute, skip
block
else:
imgui.text("Unblocked")
imgui.indent_same_indent()
# Priority field
imgui.combo("priority", options: high/medium/low)
if imgui.begin_combo("Priority", item=0):
imgui.end_combo()
elif ticket.status == "completed":
imgui.text_wrapped(f" Completed")
elif ticket.status == "blocked":
imgui.text_wrapped(f" blocked: {reason}")
imgui.indent_same_indent()
imgui.end()
# Footer
imgui.text_wrapped("Session Stats")
# Tier Usage table (if imgui.begin_table("Tier Usage"))
{
imgui.table_next_row()
for tier in ["Tier 1", "Tier 2", "Tier 3", "Tier 4"]:
imgui.table_set_column_index(1)
imgui.text(f"Tier {tier}")
imgui.table_next_row()
for ticket in tickets:
imgui.text(f" {ticket.id}")
imgui.text(f" {ticket.status}")
imgui.text(f" {ticket.priority}")
imgui.text("")
imgui.end_table()
imgui.text_wrapped(f"Session total: ${self._session_cost_total:.2f}")
imgui.end_child()
t.end_table()
imgui.text_wrapped("## Ticket Queue Management")
imgui.text("Priority")
imgui.combo("priority", options: high/medium/low)
imgui.same_line()
imgui.text_wrapped(f" {priority}")
imgui.end()
# Drag-drop reordering
imgui.combo("Reorder", options: top/bottom/after")
imgui.text("Top")
imgui.text("Bottom")
else
imgui.text("Bulk Actions")
imgui.text("Apply to: execute/skip/block")
imgui.end_child()
# Footer
imgui.end_table()