ok
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user