Compare commits

...

819 Commits

Author SHA1 Message Date
Ed_
eac4f4ee38 conductor(plan): Mark phase 'Phase 3' as complete 2026-03-02 18:48:28 -05:00
Ed_
80d79fe395 conductor(checkpoint): Checkpoint end of Phase 3 — DAG Engine Cascading Blocks 2026-03-02 18:48:13 -05:00
Ed_
5b8a0739f7 feat(dag_engine): implement cascade_blocks and call in ExecutionEngine.tick 2026-03-02 18:47:47 -05:00
Ed_
dd882b928d conductor(plan): Mark phase 'Phase 2' as complete 2026-03-02 16:51:37 -05:00
Ed_
1a65b11ec8 conductor(checkpoint): Checkpoint end of Phase 2 — MCP tool integration + HITL enforcement 2026-03-02 16:51:19 -05:00
Ed_
d3f42ed895 conductor(plan): Mark task 'Task 2.4' as complete 2026-03-02 16:51:07 -05:00
Ed_
e5e35f78dd feat(ai_client): gate mutating MCP tools through pre_tool_callback in all 4 providers 2026-03-02 16:50:47 -05:00
Ed_
8e6462d10b conductor(plan): Mark task 'Task 2.3' as complete 2026-03-02 16:48:13 -05:00
Ed_
1f92629a55 feat(mcp_client): add MUTATING_TOOLS frozenset sentinel for HITL enforcement 2026-03-02 16:47:51 -05:00
Ed_
2d8f9f4d7a conductor(plan): Mark task 'Task 2.2' as complete 2026-03-02 16:47:15 -05:00
Ed_
4b7338a076 feat(gui): expand AGENT_TOOL_NAMES to all 26 MCP tools with mutating tools grouped 2026-03-02 16:46:56 -05:00
Ed_
9e86eaf12b conductor(plan): Mark task 'Task 2.1' as complete 2026-03-02 16:45:57 -05:00
Ed_
e4ccb065d4 feat(config): expose all 26 MCP tools in toml + default_project; mutating tools off by default 2026-03-02 16:45:34 -05:00
Ed_
ac4be7eca4 conductor(plan): Mark phase 'Phase 1' as complete 2026-03-02 16:43:17 -05:00
Ed_
15536d77fc conductor(checkpoint): Checkpoint end of Phase 1 — meta-tooling token fix + portability 2026-03-02 16:42:56 -05:00
Ed_
29260ae374 conductor(plan): Mark task 'Task 1.2' as complete 2026-03-02 16:42:28 -05:00
Ed_
b30f040c7b fix(mma_exec): remove hardcoded C:\projects\misc\setup_*.ps1 paths — rely on PATH 2026-03-02 16:42:11 -05:00
Ed_
3322b630c2 conductor(plan): Mark task 'Task 1.1' as complete 2026-03-02 16:38:51 -05:00
Ed_
687545932a refactor(mma_exec): remove UNFETTERED_MODULES — all deps use generate_skeleton() 2026-03-02 16:38:28 -05:00
Ed_
40b50953a1 docs: close mma_agent_focus_ux track; log concurrent-tier + hook-verification backlog items 2026-03-02 16:31:32 -05:00
Ed_
22b08ef91e conductor(plan): Mark Phase 3 complete [checkpoint: b30e563] 2026-03-02 16:30:35 -05:00
Ed_
b30e563fc1 feat(mma): Phase 3 — Focus Agent UI + filter logic
- gui_2.__init__: add ui_focus_agent: str | None = None
- _gui_func: Focus Agent combo (All/Tier2/3/4) + clear button above OperationsTabs
- _render_comms_history_panel: filter by ui_focus_agent; show [source_tier] label per entry
- _render_tool_calls_panel: pre-filter with tool_log_filtered; fix missing i=i_minus_one+1; remove stale tuple destructure
- tests: 6 new Phase 3 tests, 18/18 total
2026-03-02 16:26:41 -05:00
Ed_
4f77d8fdd9 conductor(plan): Mark Phase 2 complete [checkpoint: 865d8dd] 2026-03-02 16:23:21 -05:00
Ed_
865d8dd13b feat(mma): Phase 2 — migrate _render_tool_calls_panel to dict access
Replace tuple destructure 'script, result, _ = self._tool_log[i]'
with dict access 'entry = self._tool_log[i]; script = entry[script]; result = entry[result]'
Prerequisite for Phase 3 filter logic.
2026-03-02 16:21:27 -05:00
Ed_
fb0d6be2e6 conductor(plan): Record Phase 1 checkpoint bc1a570; mark Task 2.1 in progress 2026-03-02 16:20:52 -05:00
Ed_
bc1a5707a0 conductor(checkpoint): Checkpoint end of Phase 1 — mma_agent_focus_ux 2026-03-02 16:20:25 -05:00
Ed_
00a196cf13 conductor(plan): Mark Phase 1 tasks 1.1-1.6 complete (8d9f25d) 2026-03-02 16:19:01 -05:00
Ed_
8d9f25d0ce feat(mma): Phase 1 — source_tier tagging at emission
- ai_client: add current_tier module var; stamp source_tier on every _append_comms entry
- multi_agent_conductor: set current_tier='Tier 3' around send(), clear in finally
- conductor_tech_lead: set current_tier='Tier 2' around send(), clear in finally
- gui_2: _on_tool_log captures current_tier; _append_tool_log stores dict with source_tier
- tests: 8 new tests covering current_tier, source_tier in comms, tool log dict format
2026-03-02 16:18:00 -05:00
Ed_
264b04f060 chore: close feature_bleed_cleanup_20260302 — update TASKS.md and JOURNAL.md
All 3 phases complete and verified. 62 lines of dead code removed from gui_2.py.
Meta-Level Sanity Check: 0 new ruff violations introduced.
Next track: mma_agent_focus_ux_20260302 (dependency on Phase 1 now satisfied)
2026-03-02 15:57:16 -05:00
Ed_
8ea636147e conductor(plan): Mark phase 'Phase 3 - Token Budget Layout Fix' as complete [0d081a2] 2026-03-02 15:55:53 -05:00
Ed_
0d081a28c5 conductor(checkpoint): Checkpoint end of Phase 3 — feature_bleed_cleanup_20260302
Phase 3: Token Budget Layout Fix
- Removed 4 redundant lines from _render_provider_panel (double labels + embedded call)
- Added collapsing_header('Token Budget') to AI Settings after 'System Prompts'
- 32 tests passed, import clean
- Token Budget header verified by user
2026-03-02 15:55:34 -05:00
Ed_
35abc265e9 conductor(plan): Mark task 3.4 complete — Token Budget collapsing header verified 2026-03-02 15:55:28 -05:00
Ed_
5180038090 conductor(plan): Mark task 3.3 complete — 32 passed 2026-03-02 15:51:10 -05:00
Ed_
bd3d0e77db conductor(plan): Mark tasks 3.1-3.2 complete, begin 3.3 — 6097368 2026-03-02 15:50:27 -05:00
Ed_
60973680a8 fix(bleed): fix token budget layout — own collapsing header in AI Settings
Phase 3 changes:
- _render_provider_panel: removed 4 redundant lines (2x 'Token Budget' labels,
  separator, embedded _render_token_budget_panel call)
- _gui_func AI Settings: added collapsing_header('Token Budget') section after
  'System Prompts', calling _render_token_budget_panel cleanly
AI Settings now has three independent collapsing sections.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-02 15:49:51 -05:00
Ed_
97792e7fff conductor(plan): Mark phase 'Phase 2 - Menu Bar Consolidation' as complete [15fd786] 2026-03-02 15:44:11 -05:00
Ed_
15fd7862b1 conductor(checkpoint): Checkpoint end of Phase 2 — feature_bleed_cleanup_20260302
Phase 2: Menu Bar Consolidation
- Deleted dead begin_main_menu_bar() block (24 lines, always-False in HelloImGui)
- Added 'manual slop' > Quit menu to live _show_menus using runner_params.app_shall_exit
- 32 tests passed, import clean
- Quit menu verified by user
2026-03-02 15:43:55 -05:00
Ed_
b96405aaa3 conductor(plan): Mark task 2.4 complete — Quit menu verified by user 2026-03-02 15:43:47 -05:00
Ed_
e6e8298025 conductor(plan): Mark task 2.3 complete — 32 passed 2026-03-02 15:42:13 -05:00
Ed_
acd7c05977 conductor(plan): Mark task 2.2 complete, begin 2.3 — 340f44e 2026-03-02 15:41:34 -05:00
Ed_
340f44e4bf feat(bleed): add working Quit to _show_menus via runner_params.app_shall_exit
Adds 'manual slop' menu before 'Windows' in the live HelloImGui menubar callback.
Quit sets self.runner_params.app_shall_exit = True — the correct HelloImGui API.
Previously the only quit path was the window close button.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-02 15:41:12 -05:00
Ed_
cb5f328da3 conductor(plan): Mark task 2.1 complete, begin 2.2 — b0f5a5c 2026-03-02 15:39:41 -05:00
Ed_
b0f5a5c8d3 fix(bleed): remove dead begin_main_menu_bar() block from _gui_func (lines 1674-1697)
HelloImGui commits the menubar before invoking _gui_func, so begin_main_menu_bar()
always returned False. The 24-line block (Quit, View, Project menus) never executed.
Also removes the misaligned '# ---- Menubar' comment and dead '# --- Hubs ---' comment.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-02 15:39:19 -05:00
Ed_
129cc33d01 conductor(plan): Mark phase 'Phase 1 - Dead Code Removal' as complete [be7174c] 2026-03-02 15:35:26 -05:00
Ed_
be7174ca53 conductor(checkpoint): Checkpoint end of Phase 1 — feature_bleed_cleanup_20260302
Phase 1: Dead Code Removal
- Deleted dead _render_comms_history_panel duplicate (33 lines, stale 'type' key)
- Deleted 4 duplicate __init__ state assignments
- 32 tests passed, gui_2.py import clean
- Comms History panel visually verified by user
2026-03-02 15:34:48 -05:00
Ed_
763bc2e734 conductor(plan): Mark task 1.4 complete — Comms History panel verified visually 2026-03-02 14:32:25 -05:00
Ed_
10724f86a5 conductor(plan): Mark task 1.3 complete — 32 passed, import ok, 2 pre-existing failures unrelated 2026-03-02 14:29:57 -05:00
Ed_
535667b51f conductor(plan): Mark task 1.2 complete — e28f89f 2026-03-02 14:25:15 -05:00
Ed_
e28f89f313 fix(bleed): remove duplicate __init__ state assignments (lines 308-311)
ui_conductor_setup_summary, ui_new_track_name, ui_new_track_desc, ui_new_track_type
were each assigned twice in __init__. Second assignments (308-311) were identical
to the correct first assignments (218-221). Duplicate removed, first assignments kept.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-02 14:24:57 -05:00
Ed_
21c74772f6 conductor(plan): Mark task 1.1 complete — 2e9c995 2026-03-02 14:23:47 -05:00
Ed_
2e9c995bbe fix(bleed): remove dead duplicate _render_comms_history_panel (lines 3040-3073)
Dead version used stale 'type' key (current model uses 'kind'), called nonexistent
_cb_load_prior_log (correct name: cb_load_prior_log), and had begin_child('scroll_area')
ID collision. Python silently discarded it at import time. Live version at line 3400.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-02 14:23:26 -05:00
Ed_
e72d512372 docs: sync Claude Tier 2 skill with Gemini — add atomic commits and sanity check rules
Port two responsibilities from Gemini's mma-tier2-tech-lead SKILL.md (b4de62f, 7afa3f3)
to Claude's equivalent command file:
- ATOMIC PER-TASK COMMITS: enforce per-task commit discipline
- Meta-Level Sanity Check: ruff + mypy post-track verification

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 14:18:31 -05:00
Ed_
b9686392d7 chore: apply ruff auto-fixes and remove dead AST scripts 2026-03-02 13:26:20 -05:00
Ed_
54635d8d1c docs: append test performance track to backlog based on timeout evaluation 2026-03-02 13:22:45 -05:00
Ed_
7afa3f3090 docs: Add Meta-Level Sanity Check responsibility to Tier 2 skill 2026-03-02 13:09:36 -05:00
Ed_
792c96f14f docs: add strict static analysis and typing track to backlog 2026-03-02 13:08:19 -05:00
Ed_
f84edf10c7 fix: resolve unterminated string literal in ping_pong simulation 2026-03-02 13:06:40 -05:00
Ed_
85456d2a61 chore: update JOURNAL.md with heuristics and backlog 2026-03-02 13:03:19 -05:00
Ed_
13926bce2f docs: Add DOD/Immediate Mode heuristics and backlog future tracks 2026-03-02 13:02:59 -05:00
Ed_
72f54f9aa2 docs: Add Inter-Domain Bridge section to Meta-Boundary guide 2026-03-02 12:53:34 -05:00
Ed_
b4de62f2e7 docs: Enforce strict atomic per-task commits for Tier 2 agents 2026-03-02 12:52:04 -05:00
Ed_
ff7f18b2ef conductor(track): Add task to remove hardcoded machine paths from mma_exec scripts 2026-03-02 12:47:35 -05:00
Ed_
dbe1647228 chore: update JOURNAL.md with Meta-Boundary documentation addition 2026-03-02 12:44:49 -05:00
Ed_
5b3c0d2296 docs: Add Meta-Boundary guide to clarify Application vs Tooling domains 2026-03-02 12:44:34 -05:00
Ed_
9eabebf9f4 conductor(track): Expand scope of architecture track to fully integrate MCP tools 2026-03-02 12:39:41 -05:00
Ed_
6837a28b61 chore: update JOURNAL.md for testing consolidation and dependency order 2026-03-02 12:29:55 -05:00
Ed_
bf10231ad5 conductor(track): Initialize testing consolidation track and add execution order 2026-03-02 12:29:41 -05:00
Ed_
f088bab7e0 chore: update JOURNAL.md for architecture track 2026-03-02 12:26:21 -05:00
Ed_
1eeed31040 conductor(track): Initialize 'architecture_boundary_hardening' track 2026-03-02 12:26:07 -05:00
Ed_
e88336e97d chore: update JOURNAL.md for new tracks 2026-03-02 12:15:26 -05:00
Ed_
95bf42aa37 conductor(track): Initialize 'tech_debt_and_test_cleanup' and 'conductor_workflow_improvements' tracks 2026-03-02 12:14:57 -05:00
Ed_
821983065c chore: update JOURNAL.md — session 2 track initializations 2026-03-02 12:03:30 -05:00
Ed_
bdf02de8a6 chore: remove empty test_20260302 track artifact 2026-03-02 12:02:54 -05:00
Ed_
c1a86e2f36 conductor(track): Initialize track 'mma_agent_focus_ux_20260302' 2026-03-02 11:57:39 -05:00
Ed_
4f11d1e01d conductor(track): Initialize track 'feature_bleed_cleanup_20260302' 2026-03-02 11:50:46 -05:00
Ed_
0ad47afb21 chore: add TASKS.md and JOURNAL.md entry — capture mma_agent_focus_ux next track 2026-03-02 11:42:01 -05:00
Ed_
d577457330 conductor(plan): Close track context_token_viz_20260301 — all phases verified 2026-03-02 11:39:10 -05:00
Ed_
2929a64b34 conductor(plan): Mark Phase 3 tasks 3.1-3.2 complete [context_token_viz_20260301] 6f18102 2026-03-02 11:27:16 -05:00
Ed_
6f18102863 feat(token-viz): Phase 3 — auto-refresh triggers and /api/gui/token_stats endpoint 2026-03-02 11:27:00 -05:00
Ed_
7b5d9b1212 feat(token-viz): Phase 2 — trim warning, Gemini/Anthropic cache status display 2026-03-02 11:23:57 -05:00
Ed_
1c8b094a77 fix(gui): restore missing _render_message_panel method def after set_file_slice edit 2026-03-02 11:22:03 -05:00
Ed_
9ae6f9da05 conductor(plan): Mark Phase 1 tasks complete [context_token_viz_20260301] 5bfb20f 2026-03-02 11:16:54 -05:00
Ed_
5bfb20f06f feat(token-viz): Phase 1 — token budget panel with color bar and breakdown table 2026-03-02 11:16:32 -05:00
Ed_
80ebc9c4b1 chore: restore .gemini conductor agent files 2026-03-02 11:00:25 -05:00
Ed_
008cfc355a wtf 2026-03-02 10:58:25 -05:00
Ed_
1329f859f7 wtf 2026-03-02 10:58:20 -05:00
Ed_
970b4466d4 conductor(tracks): remove deleted ux_sim_test artifact from tracks.md 2026-03-02 10:47:24 -05:00
Ed_
776d709246 chore: delete ux_sim_test_20260301 — test artifact from New Track form exercise 2026-03-02 10:47:14 -05:00
Ed_
c35f372f52 conductor(tracks): archive 3 completed tracks, update tracks.md with active/archived sections 2026-03-02 10:46:08 -05:00
Ed_
e7879f45a6 fix(test): replace fixed sleeps with polling in context_bleed test to fix ordering flake 2026-03-02 10:45:30 -05:00
Ed_
57efca4f9b fix(thread-safety): lock disc_entries reads/writes in HookServer, remove debug logs 2026-03-02 10:37:33 -05:00
Ed_
eb293f3c96 chore: config, layout, project history, simulation framework updates 2026-03-02 10:15:44 -05:00
Ed_
0b5552fa01 test(suite): update all tests for streaming/locking architecture and mock parity 2026-03-02 10:15:41 -05:00
Ed_
5de253b15b test(mock): major mock_gemini_cli rewrite — robust is_resume detection, tool triggers 2026-03-02 10:15:36 -05:00
Ed_
1df088845d fix(mcp): mcp_client refactor, claude_mma_exec update 2026-03-02 10:15:32 -05:00
Ed_
89e82f1134 fix(infra): api_hook_client debug logging, gemini_cli_adapter streaming fixes, ai_client minor 2026-03-02 10:15:28 -05:00
Ed_
fc9634fd73 fix(gui): move lock init before use, protect disc_entries with threading lock 2026-03-02 10:15:20 -05:00
Ed_
c14150fa81 oops 2026-03-01 23:47:06 -05:00
Ed_
fd37cbf87b pic 2026-03-01 23:46:45 -05:00
Ed_
9fb01ce5d1 feat(mma): complete Phase 6 and finalize Comprehensive GUI UX track
- Implement Live Worker Streaming: wire ai_client.comms_log_callback to Tier 3 streams
- Add Parallel DAG Execution using asyncio.gather for non-dependent tickets
- Implement Automatic Retry with Model Escalation (Flash-Lite -> Flash -> Pro)
- Add Tier Model Configuration UI to MMA Dashboard with project TOML persistence
- Fix FPS reporting in PerformanceMonitor to prevent transient 0.0 values
- Update Ticket model with retry_count and dictionary-like access
- Stabilize Gemini CLI integration tests and handle script approval events in simulations
- Finalize and verify all 6 phases of the implementation plan
2026-03-01 22:38:43 -05:00
Ed_
d1ce0eaaeb feat(gui): implement Phases 2-5 of Comprehensive GUI UX track
- Add cost tracking with new cost_tracker.py module
- Enhance Track Proposal modal with editable titles and goals
- Add Conductor Setup summary and New Track creation form to MMA Dashboard
- Implement Task DAG editing (add/delete tickets) and track-scoped discussion
- Add visual polish: color-coded statuses, tinted progress bars, and node indicators
- Support live worker streaming from AI providers to GUI panels
- Fix numerous integration test regressions and stabilize headless service
2026-03-01 20:17:31 -05:00
Ed_
2ce7a87069 feat(gui): Tier stream panels as separate dockable windows (Tier 1-4) 2026-03-01 15:57:46 -05:00
Ed_
a7903d3a4b conductor(plan): Mark tasks 1.2 and 1.3 complete — 8e57ae1 2026-03-01 15:49:32 -05:00
Ed_
8e57ae1247 feat(gui): Add blinking APPROVAL PENDING badge to MMA dashboard 2026-03-01 15:49:18 -05:00
Ed_
6999aac197 add readme splash 2026-03-01 15:44:40 -05:00
Ed_
05cd321aa9 conductor(plan): Mark task 'Task 1.1' as complete 3a68243 2026-03-01 15:28:51 -05:00
Ed_
3a68243d88 feat(gui): Replace single strategy box with 4-tier collapsible stream panels 2026-03-01 15:28:35 -05:00
Ed_
a7c8183364 conductor(plan): Mark simulation_hardening_20260301 all tasks complete
All 9 tasks done across 3 phases. Key fixes beyond spec:
- btn_approve_script wired (was implemented but not registered)
- pending_script_approval exposed in hook API
- mma_tier_usage exposed in hook API
- pytest-timeout installed
- Tier 3 subscription auth fixed (ANTHROPIC_API_KEY stripping)
- --dangerously-skip-permissions for headless workers

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 14:32:25 -05:00
Ed_
90fc38f671 fix(sim): wire btn_approve_script and expose pending_script_approval in hook API
_handle_approve_script existed but was not registered in the click handler dict.
_pending_dialog (PowerShell confirmation) was invisible to the hook API —
only _pending_ask_dialog (MCP tool ask) was exposed.

- gui_2.py: register btn_approve_script -> _handle_approve_script
- api_hooks.py: add pending_script_approval field to mma_status response
- visual_sim_mma_v2.py: _drain_approvals handles pending_script_approval

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 14:31:32 -05:00
Ed_
5f661f76b4 fix(hooks): expose mma_tier_usage in /api/gui/mma_status; install pytest-timeout
- api_hooks.py: add mma_tier_usage to get_mma_status() response
- pytest-timeout 2.4.0 installed so mark.timeout(300) is enforced in CI

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 14:26:03 -05:00
Ed_
63fa181192 feat(sim): add pytest timeout(300) and tier_usage Stage 9 check
Task 2.3: prevent infinite CI hangs with 300s hard timeout
Task 3.2: non-blocking Stage 9 logs mma_tier_usage after Tier 3 completes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 14:24:05 -05:00
Ed_
08734532ce test(mock): add standalone test for mock_gemini_cli routing
4 tests verify: epic prompt -> Track JSON, sprint prompt -> Ticket JSON
with correct field names, worker prompt -> plain text, tool-result -> plain text.
All pass in 0.57s.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 14:22:53 -05:00
Ed_
0593b289e5 fix(mock): correct sprint ticket format and add keyword detection
- description/status/assigned_to fields now match parse_json_tickets expectations
- Sprint planning branch also detects 'generate the implementation tickets'

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 14:21:21 -05:00
Ed_
f7e417b3df fix(mma-exec): add --dangerously-skip-permissions for headless file writes
Tier 3 workers need to read/write files in headless mode. Without this
flag, all file tool calls are blocked waiting for interactive permission.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 14:20:38 -05:00
Ed_
36d464f82f fix(mma-exec): strip ANTHROPIC_API_KEY from subprocess env to use subscription login
When ANTHROPIC_API_KEY is set in the shell environment, claude --print
routes through the API key instead of subscription auth. Stripping it
forces the CLI to use subscription login for all Tier 3/4 delegation.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 14:18:57 -05:00
Ed_
3f8ae2ec3b fix(conductor): load Tier 2 role doc in startup, add Tier 3 failure protocol
- Add step 1: read mma-tier2-tech-lead.md before any track work
- Add explicit stop rule when Tier 3 delegation fails (credit/API error)
  Tier 2 must NOT silently absorb Tier 3 work as a fallback

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 14:09:23 -05:00
Ed_
5cacbb1151 conductor(plan): Mark task 3.2 complete — sim test PASSED
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 14:04:57 -05:00
Ed_
ce5b6d202b fix(tier1): disable tools in generate_tracks, add enable_tools param to ai_client.send
Tier 1 planning calls are strategic — the model should never use file tools
during epic initialization. This caused JSON parse failures when the model
tried to verify file references in the epic prompt.

- ai_client.py: add enable_tools param to send() and _send_gemini()
- orchestrator_pm.py: pass enable_tools=False in generate_tracks()
- tests/visual_sim_mma_v2.py: remove file reference from test epic

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 14:04:44 -05:00
Ed_
c023ae14dc conductor(plan): Update task 3.1 complete, 3.2 awaiting verification 2026-03-01 13:42:52 -05:00
Ed_
89a8d9bcc2 test(sim): Rewrite visual_sim_mma_v2 for real Gemini API with frame-sync fixes
Uses gemini-2.5-flash-lite (real API, CLI quota exhausted). Adds _poll/_drain_approvals helpers, frame-sync sleeps after all state-changing clicks, proper stage transitions, and 120s timeouts for real API latency. Addresses simulation_hardening Issues 2 & 3.
2026-03-01 13:42:34 -05:00
Ed_
24ed309ac1 conductor(plan): Mark task 3.1 complete — Stage 8 assertions already correct 2026-03-01 13:26:15 -05:00
Ed_
0fe74660e1 conductor(plan): Mark Phase 2 complete, begin Phase 3 2026-03-01 13:25:24 -05:00
Ed_
a2097f14b3 fix(mma): Add Tier 1 and Tier 2 token tracking from comms log
Task 2.2 of mma_pipeline_fix_20260301: _cb_plan_epic captures comms baseline before generate_tracks() and pushes mma_tier_usage['Tier 1'] update via custom_callback. _start_track_logic does same for generate_tickets() -> mma_tier_usage['Tier 2'].
2026-03-01 13:25:07 -05:00
Ed_
2f9f71d2dc conductor(plan): Mark task 2.1 complete, begin 2.2 2026-03-01 13:22:34 -05:00
Ed_
3eefdfd29d fix(mma): Replace token stats stub with real comms log extraction in run_worker_lifecycle
Task 2.1 of mma_pipeline_fix_20260301: capture comms baseline before send(), then sum input_tokens/output_tokens from IN/response entries to populate engine.tier_usage['Tier 3'].
2026-03-01 13:22:15 -05:00
Ed_
d5eb3f472e conductor(plan): Mark task 1.4 as complete, begin Phase 2 2026-03-01 13:20:10 -05:00
Ed_
c5695c6dac test(mma): Add test verifying run_worker_lifecycle pushes response via _queue_put
Task 1.4 of mma_pipeline_fix_20260301: asserts stream_id='Tier 3 (Worker): T1', event_name='response', text and status fields correct.
2026-03-01 13:19:50 -05:00
Ed_
130a36d7b2 conductor(plan): Mark tasks 1.1, 1.2, 1.3 as complete 2026-03-01 13:18:09 -05:00
Ed_
b7c283972c fix(mma): Add diagnostic logging and remove unsafe asyncio.Queue else branches
Tasks 1.1, 1.2, 1.3 of mma_pipeline_fix_20260301:
- Task 1.1: Add [MMA] diagnostic print before _queue_put in run_worker_lifecycle; enhance except to include traceback
- Task 1.2: Replace unsafe event_queue._queue.put_nowait() else branches with RuntimeError in run_worker_lifecycle, confirm_execution, confirm_spawn
- Task 1.3: Verified run_in_executor positional arg order is correct (no change needed)
2026-03-01 13:17:37 -05:00
Ed_
cf7938a843 wrong archive location 2026-03-01 13:17:34 -05:00
Ed_
3d398f1905 remove main context 2026-03-01 10:26:01 -05:00
Ed_
52f3820199 conductor(gui_ux): Add Phase 6 — live streaming, per-tier model config, parallel DAG, auto-retry
Addresses three gaps where Claude Code and Gemini CLI outperform Manual Slop's
MMA during actual execution:

1. Live worker streaming: Wire comms_log_callback to per-ticket streams so
   users see real-time output instead of waiting for worker completion.
2. Per-tier model config: Replace hardcoded get_model_for_role with GUI
   dropdowns persisted to project TOML.
3. Parallel DAG execution: asyncio.gather for independent tickets (exploratory
   — _send_lock may block, needs investigation).
4. Auto-retry with escalation: flash-lite -> flash -> pro on BLOCKED, up to
   2 retries (wires existing --failure-count mechanism into ConductorEngine).

7 new tasks across Phase 6, bringing total to 30 tasks across 6 phases.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-01 10:24:29 -05:00
Ed_
0b03b612b9 chore: Wire architecture docs into mma_exec.py and workflow delegation prompts
mma_exec.py changes:
- get_role_documents: Tier 1 now gets docs/guide_architecture.md + guide_mma.md
  (was: only product.md). Tier 2 gets same (was: only tech-stack + workflow).
  Tier 3 gets guide_architecture.md (was: only workflow.md — workers modifying
  gui_2.py had zero knowledge of threading model). Tier 4 gets guide_architecture.md
  (was: nothing).
- Tier 3 system directive: Added ARCHITECTURE REFERENCE callout, CRITICAL
  THREADING RULE (never write GUI state from background thread), TASK FORMAT
  instruction (follow WHERE/WHAT/HOW/SAFETY from surgical tasks), and
  py_get_definition to tool list.
- Tier 4 system directive: Added ARCHITECTURE REFERENCE callout and instruction
  to trace errors through thread domains documented in guide_architecture.md.

conductor/workflow.md changes:
- Red Phase delegation prompt: Replaced 'with a prompt to create tests' with
  surgical prompt format example showing WHERE/WHAT/HOW/SAFETY.
- Green Phase delegation prompt: Replaced 'with a highly specific prompt' with
  surgical prompt format example with exact line refs and API calls.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-01 10:16:38 -05:00
Ed_
4e2003c191 chore(gemini): Encode surgical methodology into all Gemini MMA skills
Updates three Gemini skill files to match the Claude command methodology:

mma-orchestrator/SKILL.md:
- New Section 0: Architecture Fallback with links to all 4 docs/guide_*.md
- New Surgical Spec Protocol (6-point mandatory checklist)
- New Section 5: Cross-Skill Activation for tier transitions
- Example 2 rewritten with surgical prompt (exact line refs + API calls)
- New Example 3: Track creation with audit-first workflow
- Added py_get_definition to tool usage guidance

mma-tier1-orchestrator/SKILL.md:
- Added Architecture Fallback and Surgical Spec Protocol summary
- References activate_skill mma-orchestrator for full protocol

mma-tier2-tech-lead/SKILL.md:
- Added Architecture Fallback section
- Added Surgical Delegation Protocol with WHERE/WHAT/HOW/SAFETY example

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-01 10:13:29 -05:00
Ed_
52a463d13f conductor: Encode surgical spec methodology into Tier 1 skills for Claude and Gemini
Distills what made this session's track specs high-quality into reusable
methodology for both Claude and Gemini Tier 1 orchestrators:

Key additions to conductor-new-track.md:
- MANDATORY Step 2: Deep Codebase Audit before writing any spec
- 'Current State Audit' section template (Already Implemented + Gaps)
- 6 rules for writing worker-ready tasks (WHERE/WHAT/HOW/SAFETY)
- Anti-patterns section (vague specs, no line refs, no audit, etc.)
- Architecture doc fallback references

Key additions to mma-tier1-orchestrator.md (Claude + Gemini):
- 'The Surgical Methodology' section with 6 protocols
- Spec template with REQUIRED sections (Current State Audit is mandatory)
- Plan template with REQUIRED task format (file:line refs + API calls)
- Root cause analysis requirement for fix tracks
- Cross-track dependency mapping requirement
- Added py_get_definition to Gemini's tool list (was missing)

The core insight: the quality gap between this session's output and previous
track specs came from (1) reading actual code before writing specs, (2) listing
what EXISTS before what's MISSING, and (3) specifying exact locations and APIs
in tasks so lesser models don't have to search or guess.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-01 10:08:25 -05:00
Ed_
458529fb13 chore(conductor): Add index.md to new tracks, archive completed/superseded tracks
- Add index.md to mma_pipeline_fix, simulation_hardening, context_token_viz
- Archive documentation_refresh_20260224 (superseded by 08e003a rewrite)
- Archive robust_live_simulation_verification (context distilled into
  simulation_hardening_20260301 spec)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-01 10:00:49 -05:00
Ed_
0d2b6049d1 conductor: Create 3 MVP tracks with surgical specs from full codebase analysis
Three new tracks identified by analyzing product.md requirements against
actual codebase state using 1M-context Opus with all architecture docs loaded:

1. mma_pipeline_fix_20260301 (P0, blocker):
   - Diagnoses why Tier 3 worker output never reaches mma_streams in GUI
   - Identifies 4 root cause candidates: positional arg ordering, asyncio.Queue
     thread-safety violation, ai_client.reset_session() side effects, token
     stats stub returning empty dict
   - 2 phases, 6 tasks with exact line references

2. simulation_hardening_20260301 (P1, depends on pipeline fix):
   - Addresses 3 documented issues from robust_live_simulation session compression
   - Mock triggers wrong approval popup, popup state desync, approval ambiguity
   - 3 phases, 9 tasks including standalone mock test suite

3. context_token_viz_20260301 (P2):
   - Builds UI for product.md primary use case #2 'Context & Memory Management'
   - Backend already complete (get_history_bleed_stats, 140 lines)
   - Token budget bar, proportion breakdown, trimming preview, cache status
   - 3 phases, 10 tasks

Execution order: pipeline_fix -> simulation_hardening -> gui_ux (parallel w/ token_viz)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-01 09:58:34 -05:00
Ed_
d93f650c3a conductor: Refine GUI UX track with full codebase knowledge, add doc references
Rewrites comprehensive_gui_ux_20260228 spec and plan using deep analysis of
the actual gui_2.py implementation (3078 lines). The previous spec asked to
implement features that already exist (Track Browser, DAG tree, epic planning,
approval dialogs, token table, performance monitor). The new spec:

- Documents 15 already-implemented features with exact line references
- Identifies 8 actual gaps (tier stream panels, DAG editing, cost tracking,
  conductor lifecycle forms, track-scoped discussions, approval indicators,
  track proposal editing, stream scrollability)
- Rewrites all 5 phases with surgical task descriptions referencing exact
  gui_2.py line ranges, function names, and data structures
- Each task specifies the precise imgui API calls to use
- References docs/guide_architecture.md for threading constraints
- References docs/guide_mma.md for Ticket/Track data structures

Also adds architecture documentation fallback references to:
- conductor/workflow.md (new principle #9)
- conductor/product.md (new Architecture Reference section)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-01 09:51:37 -05:00
Ed_
08e003a137 docs: Complete documentation rewrite at gencpp/VEFontCache reference quality
Rewrites all docs from Gemini's 330-line executive summaries to 1874 lines
of expert-level architectural reference matching the pedagogical depth of
gencpp (Parser_Algo.md, AST_Types.md) and VEFontCache-Odin (guide_architecture.md).

Changes:
- guide_architecture.md: 73 -> 542 lines. Adds inline data structures for all
  dialog classes, cross-thread communication patterns, complete action type
  catalog, provider comparison table, 4-breakpoint Anthropic cache strategy,
  Gemini server-side cache lifecycle, context refresh algorithm.
- guide_tools.md: 66 -> 385 lines. Full 26-tool inventory with parameters,
  3-layer MCP security model walkthrough, all Hook API GET/POST endpoints
  with request/response formats, ApiHookClient method reference, /api/ask
  synchronous HITL protocol, shell runner with env config.
- guide_mma.md: NEW (368 lines). Fills major documentation gap — complete
  Ticket/Track/WorkerContext data structures, DAG engine algorithms (cycle
  detection, topological sort), ConductorEngine execution loop, Tier 2 ticket
  generation, Tier 3 worker lifecycle with context amnesia, token firewalling.
- guide_simulations.md: 64 -> 377 lines. 8-stage Puppeteer simulation
  lifecycle, mock_gemini_cli.py JSON-L protocol, approval automation pattern,
  ASTParser tree-sitter vs stdlib ast comparison, VerificationLogger.
- Readme.md: Rewritten with module map, architecture summary, config examples.
- docs/Readme.md: Proper index with guide contents table and GUI panel docs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-01 09:44:50 -05:00
Ed_
bf4468f125 docs(conductor): Expert-level architectural documentation refresh 2026-03-01 09:19:48 -05:00
Ed_
7384df1e29 remove track fro tracks 2026-03-01 09:09:04 -05:00
Ed_
e19b78e090 chore(conductor): Archive track 'Consolidate Temp/Test Cruft & Log Taxonomy' 2026-03-01 09:08:15 -05:00
Ed_
cfcfd33453 docs(conductor): Synchronize docs for track 'Consolidate Temp/Test Cruft & Log Taxonomy' 2026-03-01 09:07:39 -05:00
Ed_
bcbccf3cc4 dont use flash-lite for tier 3 2026-03-01 09:07:17 -05:00
Ed_
cb129d06cd chore(conductor): Mark track 'Consolidate Temp/Test Cruft & Log Taxonomy' as complete 2026-03-01 09:07:04 -05:00
Ed_
68b9f9baee conductor(plan): Mark Phase 4 and Track as complete 2026-03-01 09:06:55 -05:00
Ed_
7f95ebd85e conductor(plan): Mark Phase 3 as complete [checkpoint: 61d513a] 2026-03-01 09:06:19 -05:00
Ed_
61d513ad08 feat(migration): Add script to consolidate legacy logs and artifacts 2026-03-01 09:06:07 -05:00
Ed_
32f7a13fa8 conductor(plan): Mark Phase 2 as complete [checkpoint: 6326546] 2026-03-01 09:03:15 -05:00
Ed_
6326546005 feat(taxonomy): Redirect logs and artifacts to dedicated sub-folders 2026-03-01 09:03:02 -05:00
Ed_
09bedbf4f0 conductor(plan): Mark Phase 1 as complete [checkpoint: 590293e] 2026-03-01 08:59:15 -05:00
Ed_
590293e3d8 conductor(plan): Mark Phase 1 as complete 2026-03-01 08:59:07 -05:00
Ed_
fab109e31b chore(conductor): Fix .gitignore corruption and add artifact/log dirs 2026-03-01 08:58:45 -05:00
Ed_
27e67df4e3 prep doc track. 2026-03-01 08:57:01 -05:00
Ed_
efaf4e98c4 chore(conductor): Add new track 'Consolidate Temp/Test Cruft & Log Taxonomy' 2026-03-01 08:49:19 -05:00
Ed_
26287215c5 get rid of cruft 2026-03-01 08:44:30 -05:00
Ed_
472966cb61 chore(conductor): Add new track 'Comprehensive Conductor & MMA GUI UX' 2026-03-01 08:43:15 -05:00
Ed_
332cc9da84 chore(conductor): Mark track 'Robust Live Simulation Verification' as complete 2026-03-01 08:37:23 -05:00
Ed_
da21ed543d fix(mma): Unblock visual simulation - event routing, loop passing, adapter preservation
Three independent root causes fixed:
- gui_2.py: Route mma_spawn_approval/mma_step_approval events in _process_event_queue
- multi_agent_conductor.py: Pass asyncio loop from ConductorEngine.run() through to
  thread-pool workers for thread-safe event queue access; add _queue_put helper
- ai_client.py: Preserve GeminiCliAdapter in reset_session() instead of nulling it

Test: visual_sim_mma_v2::test_mma_complete_lifecycle passes in ~8s

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 08:32:31 -05:00
Ed_
db32a874fd ignore temp workspace 2026-02-28 23:02:22 -05:00
Ed_
6b0823ad6c checkpoint: this is a mess... need to define stricter DSL or system for how the AI devices sims and hookup api for tests. 2026-02-28 22:50:14 -05:00
Ed_
2a69244f36 remove slop tracks 2026-02-28 22:40:40 -05:00
Ed_
397b4e6001 chore(mma): Clean up mma_exec.py and robustify visual simulation mocking 2026-02-28 22:27:17 -05:00
Ed_
42c42985ee chore(mma): Verify track loading in visual simulation and fix deterministic ID logic 2026-02-28 22:12:57 -05:00
Ed_
37df4c8003 chore(mma): Deterministic track IDs, worker spawn hooks, and improved simulation reliability 2026-02-28 22:09:18 -05:00
Ed_
cb0e14e1c0 Fixes to mma and conductor. 2026-02-28 21:59:28 -05:00
Ed_
ed56e56a2c chore(mma): Checkpoint progress on visual simulation and UI refresh before sub-agent delegation 2026-02-28 21:41:46 -05:00
Ed_
d65fa79e26 chore(mma): Implement visual simulation for Epic planning and fix UI refresh 2026-02-28 21:07:46 -05:00
Ed_
3d861ecf08 chore(mma): Update Tier 2 model to gemini-3-flash 2026-02-28 20:54:04 -05:00
Ed_
5792fb3bb1 checkpoint 2026-02-28 20:53:46 -05:00
Ed_
53752dfc55 chore(conductor): Archive track 'python_style_refactor_20260227' 2026-02-28 20:53:35 -05:00
Ed_
aea782bda2 conductor(plan): Mark task 'Apply review suggestions' as complete 2026-02-28 20:53:11 -05:00
Ed_
da7a2e35c0 fix(conductor): Apply review suggestions for track 'python_style_refactor_20260227' 2026-02-28 20:53:03 -05:00
Ed_
998c4ff35c chore(conductor): Mark track 'AI-Optimized Python Style Refactor' as complete 2026-02-28 20:43:14 -05:00
Ed_
7b31ac7f81 conductor(plan): Mark Phase 6 and Track as complete 2026-02-28 20:43:06 -05:00
Ed_
3b96b67d69 chore(checkpoint): Phase 6 Test Suite Stabilization complete. 257/261 tests PASS. Resolved run_linear drift, formatter expectations, and Hook Server startup. 2026-02-28 20:42:54 -05:00
Ed_
21496ee58f test(stabilization): Implement high-signal live_gui telemetry and update plan 2026-02-28 20:36:31 -05:00
Ed_
5e320b2bbf test(stabilization): Align tier4_interceptor tests with Popen and integrate vlogger 2026-02-28 20:20:17 -05:00
Ed_
dfb4fa1b26 test(stabilization): Fix ai_style_formatter test expectations and integrate vlogger 2026-02-28 20:18:54 -05:00
Ed_
c746276090 conductor(plan): Mark Phase 6 Task 1 as complete 2026-02-28 20:18:16 -05:00
Ed_
ece46f922c test(stabilization): Resolve run_linear API drift and implement vlogger high-signal reporting 2026-02-28 20:18:05 -05:00
Ed_
2a2675e386 conductor(plan): Add high-signal reporting requirements to Phase 6 2026-02-28 19:42:56 -05:00
Ed_
0454b94bfb conductor(plan): Add Phase 6 for Test Suite Stabilization 2026-02-28 19:40:07 -05:00
Ed_
a339fae467 docs(conductor): Synchronize docs for track 'AI-Optimized Python Style Refactor' 2026-02-28 19:37:05 -05:00
Ed_
e60325d819 chore(conductor): Mark track 'AI-Optimized Python Style Refactor' as complete 2026-02-28 19:36:53 -05:00
Ed_
8b19deeeff conductor(plan): Mark Phase 5 and Track as complete 2026-02-28 19:36:47 -05:00
Ed_
173ea96fb4 refactor(indentation): Apply codebase-wide 1-space ultra-compact refactor. Formatted 21 core modules and tests. 2026-02-28 19:36:38 -05:00
Ed_
8bfc41ddba conductor(plan): Mark formatter script task as complete 2026-02-28 19:36:21 -05:00
Ed_
39bbc3f31b conductor(plan): Mark Phase 4 as complete and add Phase 5 2026-02-28 19:36:01 -05:00
Ed_
2907eb9f93 chore(checkpoint): Phase 4 Codebase-Wide Type Hint Sweep complete. Total fixes: ~400+. Verification status: 230 pass, 16 fail (pre-existing API drift), 29 error (live_gui env). 2026-02-28 19:35:46 -05:00
Ed_
7a0e8e6366 refactor(tests): Add strict type hints to final batch of test files 2026-02-28 19:31:19 -05:00
Ed_
f5e43c7987 refactor(tests): Add strict type hints to sixth batch of test files 2026-02-28 19:25:54 -05:00
Ed_
cc806d2cc6 refactor(tests): Add strict type hints to fifth batch of test files 2026-02-28 19:24:02 -05:00
Ed_
ee2d6f4234 refactor(tests): Add strict type hints to fourth batch of test files 2026-02-28 19:20:41 -05:00
Ed_
e8513d563b refactor(tests): Add strict type hints to third batch of test files 2026-02-28 19:16:19 -05:00
Ed_
579ee8394f refactor(tests): Add strict type hints to second batch of test files 2026-02-28 19:11:23 -05:00
Ed_
f0415a40aa refactor(tests): Add strict type hints to first batch of test files 2026-02-28 19:06:50 -05:00
Ed_
e8833b6656 conductor(plan): Mark script and simulation tasks as complete 2026-02-28 19:00:55 -05:00
Ed_
ec91c90c15 refactor(simulation): Add strict type hints to simulation modules 2026-02-28 19:00:36 -05:00
Ed_
53c2bbfa81 refactor(scripts): Add strict type hints to utility scripts 2026-02-28 18:58:53 -05:00
Ed_
c368caf43a fk policy engine 2026-02-28 18:56:35 -05:00
Ed_
b801e1668d conductor(plan): Mark variable-only files task as complete 2026-02-28 18:36:03 -05:00
Ed_
8c5a560787 refactor(ai_client): Add strict type hints to global variables 2026-02-28 18:35:54 -05:00
Ed_
42af2e1fa4 conductor(plan): Mark task 'Phase 4 core module type hint sweep' as complete 2026-02-28 15:14:13 -05:00
Ed_
46c2f9a0ca refactor(types): Phase 4 type hint sweep — core modules 2026-02-28 15:13:55 -05:00
Ed_
ca04026db5 claude fixes 2026-02-28 15:10:13 -05:00
Ed_
c428e4331a fix(mcp): wire run_powershell and MCP server for Windows/Scoop environment
- Add .mcp.json at project root (correct location for claude mcp add)
- Add mcp_env.toml: project-scoped PATH/env config for subprocess execution
- shell_runner.py: load mcp_env.toml, add stdin=DEVNULL to fix git hang
- mcp_server.py: call mcp_client.configure() at startup (fix ACCESS DENIED)
- conductor skill files: enforce run_powershell over Bash, tool use hierarchy
- CLAUDE.md: document Bash unreliability on Windows, run_powershell preference
2026-02-28 15:00:05 -05:00
Ed_
60396f03f8 refactor(types): auto -> None sweep across entire codebase
Applied 236 return type annotations to functions with no return values
across 100+ files (core modules, tests, scripts, simulations).
Added Phase 4 to python_style_refactor track for remaining 597 items
(untyped params, vars, and functions with return values).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 11:16:56 -05:00
Ed_
07f4e36016 conductor(plan): Mark Python Style Refactor track as COMPLETE
All 3 phases done:
- Phase 1: Pilot tooling [c75b926]
- Phase 2: Core refactor [db65162]
- Phase 3: Type hints + styleguide [3216e87]

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 11:09:15 -05:00
Ed_
3216e877b3 conductor(checkpoint): Complete Phase 3 - AI-Optimized Metadata and Final Cleanup
Phase 3 verification:
- All 13 core modules pass syntax check
- 217 type annotations applied across gui_2.py and gui_legacy.py (zero remaining)
- python.md styleguide updated to AI-optimized standard
- BOM markers on 3 files are pre-existing (Phase 2), not regressions

Track: python_style_refactor_20260227 — ALL PHASES COMPLETE

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 11:08:36 -05:00
Ed_
602cea6c13 docs(style): update python styleguide to AI-optimized standard
Replaces Google Python Style Guide with project-specific conventions:
1-space indentation, strict type hints on all signatures/vars,
minimal blank lines, 120-char soft limit, AI-agent conventions.

Also marks type hinting task complete in plan.md.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 11:04:27 -05:00
Ed_
c816f65665 refactor(types): add strict type hints to gui_2.py and gui_legacy.py
Automated pipeline applied 217 type annotations across both UI modules:
- 158 auto -> None return types via AST single-pass
- 25 manual signatures (callbacks, factory methods, complex returns)
- 34 variable type annotations (constants, color tuples, config)

Zero untyped functions/variables remain in either file.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 11:01:01 -05:00
Ed_
a2a1447f58 checkpoint: Claude Code integration + implement missing MCP var tools
Add Claude Code conductor commands, MCP server, MMA exec scripts,
and implement py_get_var_declaration / py_set_var_declaration which
were registered in dispatch and tool specs but had no function bodies.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 10:47:42 -05:00
Ed_
d36632c21a checkpoint: massive refactor 2026-02-28 09:06:45 -05:00
Ed_
f2512c30e9 I hate gemini cli policy setup 2026-02-28 08:32:14 -05:00
Ed_
db118f0a5c updates to tools and mma skills 2026-02-28 07:51:02 -05:00
Ed_
db069abe83 meh 2026-02-28 00:25:00 -05:00
Ed_
196d9f12f3 hinters 2026-02-28 00:23:47 -05:00
Ed_
866b3f0fe7 type hint scanner 2026-02-28 00:23:35 -05:00
Ed_
87df32c32c getting rid of junk 2026-02-28 00:14:12 -05:00
Ed_
c062361ef9 back to usual agents 2026-02-28 00:07:57 -05:00
Ed_
bc261c6cbe teststests in wrong spot. 2026-02-28 00:07:45 -05:00
Ed_
db65162bbf chore(conductor): Complete Phase 1 of AI style refactor 2026-02-27 23:52:06 -05:00
Ed_
c75b926c45 chore(conductor): Add new track 'AI-Optimized Python Style Refactor' 2026-02-27 23:37:03 -05:00
Ed_
7a1fe1723b conductor(plan): Mark phase 'Phase 1: Framework Foundation' as complete 2026-02-27 23:26:55 -05:00
Ed_
e93e2eaa40 conductor(checkpoint): Checkpoint end of Phase 1 2026-02-27 23:26:33 -05:00
Ed_
2a30e62621 test(sim): Setup framework for robust live sim verification 2026-02-27 23:20:42 -05:00
Ed_
173ffc31de fxies 2026-02-27 23:14:23 -05:00
Ed_
858c4c27a4 oops 2026-02-27 23:13:19 -05:00
Ed_
2ccb4e9813 remove track 2026-02-27 23:10:40 -05:00
Ed_
57d187b8bd chore(conductor): Archive track 'robust_live_simulation_verification' 2026-02-27 23:10:28 -05:00
Ed_
c3b108e77c conductor(plan): Mark task 'Apply review suggestions' as complete 2026-02-27 23:09:55 -05:00
Ed_
605dfc3149 fix(conductor): Apply review suggestions for track 'robust_live_simulation_verification' 2026-02-27 23:09:37 -05:00
Ed_
51ab417bbe remove complete track 2026-02-27 23:05:21 -05:00
Ed_
b1fdcf72c5 chore(conductor): Archive track 'tiered_context_scoping_hitl_approval' 2026-02-27 23:05:06 -05:00
Ed_
24c46b8934 conductor(plan): Mark task 'Apply review suggestions' as complete 2026-02-27 23:04:16 -05:00
Ed_
82f73e7267 fix(conductor): Apply review suggestions for track 'tiered_context_scoping_hitl_approval' 2026-02-27 23:04:01 -05:00
Ed_
4b450e01b8 docs(conductor): Synchronize docs for track 'MMA Dashboard Visualization Overhaul' 2026-02-27 22:57:45 -05:00
Ed_
a67c318238 chore(conductor): Mark track 'MMA Dashboard Visualization Overhaul' as complete 2026-02-27 22:57:12 -05:00
Ed_
75569039e3 conductor(plan): Mark Phase 3 as complete 2026-02-27 22:57:02 -05:00
Ed_
25b72fba7e feat(ui): Support multiple concurrent AI response streams and strategy visualization 2026-02-27 22:56:40 -05:00
Ed_
e367f52d90 conductor(plan): Mark Phase 2 as complete 2026-02-27 22:52:11 -05:00
Ed_
7252d759ef feat(ui): Implement Task DAG Visualizer using ImGui tree nodes 2026-02-27 22:51:55 -05:00
Ed_
6f61496a44 conductor(plan): Mark Phase 1 as complete 2026-02-27 22:49:26 -05:00
Ed_
2b1cfbb34d feat(ui): Implement Track Browser and progress visualization in MMA Dashboard 2026-02-27 22:49:03 -05:00
Ed_
a97eb2a222 chore(conductor): Mark track 'Tiered Context Scoping & HITL Approval' as complete 2026-02-27 22:32:07 -05:00
Ed_
913cfee2dd docs(conductor): Synchronize docs for track 'Tiered Context Scoping & HITL Approval' 2026-02-27 22:31:58 -05:00
Ed_
3c7d4cd841 conductor(plan): Finalize plan for track 'Tiered Context Scoping & HITL Approval' 2026-02-27 22:31:39 -05:00
Ed_
a6c627a6b5 conductor(plan): Mark phase 'Phase 3: Approval UX Modal' as complete 2026-02-27 22:31:11 -05:00
Ed_
21157f92c3 feat(mma): Finalize Approval UX Modal in GUI 2026-02-27 22:30:55 -05:00
Ed_
bee75e7b4d conductor(plan): Mark task 'Interception logic' as complete 2026-02-27 22:30:13 -05:00
Ed_
4c53ca11da feat(mma): Implement interception logic in GUI and Conductor 2026-02-27 22:29:55 -05:00
Ed_
1017a4d807 conductor(plan): Mark task 'Signaling mechanism' as complete 2026-02-27 22:27:19 -05:00
Ed_
e293c5e302 feat(mma): Implement spawn interception in multi_agent_conductor.py 2026-02-27 22:27:05 -05:00
Ed_
c2c8732100 conductor(plan): Mark phase 'Phase 1: Context Subsetting' as complete 2026-02-27 22:24:11 -05:00
Ed_
d7a24d66ae conductor(checkpoint): Checkpoint end of Phase 1 (Context Subsetting) 2026-02-27 22:23:57 -05:00
Ed_
528aaf1957 feat(mma): Finalize Phase 1 with AST-based outline and improved tiered selection 2026-02-27 22:23:50 -05:00
Ed_
f59ef247cf conductor(plan): Mark task 'Update project state' as complete 2026-02-27 22:23:31 -05:00
Ed_
2ece9e1141 feat(aggregate): support dictionary-based file entries with optional tiers 2026-02-27 22:21:18 -05:00
Ed_
4c744f2c8e conductor(plan): Mark task 'Integrate AST skeleton' as complete 2026-02-27 22:18:39 -05:00
Ed_
0ed01aa1c9 feat(mma): Integrate AST skeleton extraction into Tier 3 context build 2026-02-27 22:18:26 -05:00
Ed_
34bd61aa6c conductor(plan): Mark task 'Refactor aggregate.py' as complete 2026-02-27 22:16:55 -05:00
Ed_
6aa642bc42 feat(mma): Implement tiered context scoping and add get_definition tool 2026-02-27 22:16:43 -05:00
Ed_
a84ea40d16 TOOLS 2026-02-27 22:10:46 -05:00
Ed_
fcd60c908b idk 2026-02-27 21:25:39 -05:00
Ed_
5608d8d6cd checkpoint 2026-02-27 21:15:56 -05:00
Ed_
7adacd06b7 checkpoint 2026-02-27 20:48:38 -05:00
Ed_
a6e264bb4e feat(mma): Optimize sub-agent research with get_code_outline and get_git_diff 2026-02-27 20:43:44 -05:00
Ed_
138e31374b checkpoint 2026-02-27 20:41:30 -05:00
Ed_
6c887e498d checkpoint 2026-02-27 20:24:16 -05:00
Ed_
bf1faac4ea checkpoint! 2026-02-27 20:21:52 -05:00
Ed_
a744b39e4f chore(conductor): Archive track 'MMA Data Architecture & DAG Engine' 2026-02-27 20:21:21 -05:00
Ed_
c2c0b41571 chore(conductor): Mark 'Tiered Context Scoping & HITL Approval' as in-progress 2026-02-27 20:20:41 -05:00
Ed_
5f748c4de3 conductor(plan): Mark task 'Apply review suggestions' as complete 2026-02-27 20:20:09 -05:00
Ed_
6548ce6496 fix(conductor): Apply review suggestions for track 'mma_data_architecture_dag_engine' 2026-02-27 20:20:01 -05:00
Ed_
c15e8b8d1f docs(conductor): Synchronize docs for track 'MMA Data Architecture & DAG Engine' 2026-02-27 20:13:25 -05:00
Ed_
2d355d4461 chore(conductor): Mark track 'MMA Data Architecture & DAG Engine' as complete 2026-02-27 20:12:50 -05:00
Ed_
a9436cbdad conductor(plan): Mark Phase 3 'Execution State Machine' as complete 2026-02-27 20:12:42 -05:00
Ed_
2429b7c1b4 feat(mma): Connect ExecutionEngine to ConductorEngine and Tech Lead 2026-02-27 20:12:23 -05:00
Ed_
154957fe57 feat(mma): Implement ExecutionEngine with auto-queue and step-mode support 2026-02-27 20:11:11 -05:00
Ed_
f85ec9d06f feat(mma): Add topological sorting to TrackDAG with cycle detection 2026-02-27 20:04:04 -05:00
Ed_
a3cfeff9d8 feat(mma): Implement TrackDAG for dependency resolution and cycle detection 2026-02-27 19:58:10 -05:00
Ed_
3c0d412219 checkpoint 2026-02-27 19:54:12 -05:00
Ed_
46e11bccdc conductor(plan): Mark task 'Ensure Tier 2 history is scoped' as complete 2026-02-27 19:51:28 -05:00
Ed_
b845b89543 feat(mma): Implement track-scoped history and optimized sub-agent toolsets 2026-02-27 19:51:13 -05:00
Ed_
134a11cdc2 conductor(plan): Mark task 'Update project_manager.py' as complete 2026-02-27 19:45:36 -05:00
Ed_
e1a3712d9a feat(mma): Implement track-scoped state persistence and configure sub-agents 2026-02-27 19:45:21 -05:00
Ed_
a5684bf773 checkpoint! 2026-02-27 19:33:18 -05:00
Ed_
66b63ed010 conductor(plan): Mark task 'Define the data schema for a Track' as complete 2026-02-27 19:30:48 -05:00
Ed_
2efe80e617 feat(mma): Define TrackState and Metadata schema for track-scoped state 2026-02-27 19:30:33 -05:00
Ed_
ef7040c3fd docs(conductor): Enforce execution order dependencies in phase 2 specs 2026-02-27 19:23:38 -05:00
Ed_
0dedcc1773 docs(conductor): Add context and origins block to new phase 2 specs 2026-02-27 19:22:24 -05:00
Ed_
b5b89f2f1b chore(conductor): Add missing index.md and metadata.json to new tracks 2026-02-27 19:20:19 -05:00
Ed_
6e0948467f chore(conductor): Archive old track and initialize 4 new Phase 2 MMA tracks 2026-02-27 19:19:11 -05:00
Ed_
41ae3df75d chore(tests): Move meta-infrastructure tests to conductor/tests/ for permanent isolation 2026-02-27 19:01:12 -05:00
Ed_
cca9ef9307 checkpoint 2026-02-27 18:48:21 -05:00
Ed_
f0f285bc26 chore(tests): Refine test separation, keep feature tests in main tests folder 2026-02-27 18:47:14 -05:00
Ed_
d10a663111 chore(tests): Reorganize tests to separate project features from meta-infrastructure 2026-02-27 18:46:11 -05:00
Ed_
b3d972d19d chore(config): Restore tool bridge hook for discretion in main app 2026-02-27 18:39:21 -05:00
Ed_
7a614cbe8c checkpoint 2026-02-27 18:35:11 -05:00
Ed_
3b2d82ed0d feat(mma): Finalize Orchestrator Integration and fix all regressions 2026-02-27 18:31:14 -05:00
Ed_
8438f69197 docs(conductor): Synchronize docs for track 'MMA Orchestrator Integration' 2026-02-27 11:24:03 -05:00
Ed_
d087a20f7b checkpoint: mma_orchestrator track 2026-02-26 22:59:26 -05:00
Ed_
f05fa3d340 checkpoint 2026-02-26 22:06:18 -05:00
Ed_
987634be53 chore(conductor): Setup file structure for MMA Orchestrator Integration track 2026-02-26 22:06:04 -05:00
Ed_
254bcdf2b3 remove mma_core_engine from tracks 2026-02-26 22:02:45 -05:00
Ed_
716d8b4e13 chore(conductor): Archive completed track 'MMA Core Engine Implementation' 2026-02-26 22:02:33 -05:00
Ed_
332fc4d774 feat(mma): Complete Phase 7 implementation: MMA Dashboard, HITL Step Modal, and Memory Mutator 2026-02-26 21:48:41 -05:00
Ed_
63a82e0d15 feat(mma): Implement MMA Dashboard, Event Handling, and Step Approval Modal in gui_2.py 2026-02-26 21:46:05 -05:00
Ed_
51918d9bc3 chore: Checkpoint commit of unstaged changes, including new tests and debug scripts 2026-02-26 21:39:03 -05:00
Ed_
94a1c320a5 docs(mma): Add Phase 7 UX specification and update track plan 2026-02-26 21:37:45 -05:00
Ed_
8bb72e351d chore(conductor): Mark track 'MMA Core Engine Implementation' as complete and verify with Phase 6 tests 2026-02-26 21:34:28 -05:00
Ed_
971202e21b docs(conductor): Synchronize docs for track 'MMA Core Engine Implementation' 2026-02-26 20:47:58 -05:00
Ed_
1294091692 chore(conductor): Mark track 'MMA Core Engine Implementation' as complete 2026-02-26 20:47:04 -05:00
Ed_
d4574dba41 conductor(plan): Mark Phase 5 as complete 2026-02-26 20:46:51 -05:00
Ed_
3982fda5f5 conductor(checkpoint): Checkpoint end of Phase 5 - Multi-Agent Dispatcher & Parallelization 2026-02-26 20:46:13 -05:00
Ed_
dce1679a1f conductor(plan): Mark task 'UI Component Update' as complete 2026-02-26 20:45:45 -05:00
Ed_
68861c0744 feat(mma): Decouple UI from API calls using UserRequestEvent and AsyncEventQueue 2026-02-26 20:45:23 -05:00
Ed_
5206c7c569 conductor(plan): Mark task 'The Dispatcher Loop' as complete 2026-02-26 20:40:45 -05:00
Ed_
1dacd3613e feat(mma): Implement dynamic ticket parsing and dispatcher loop in ConductorEngine 2026-02-26 20:40:16 -05:00
Ed_
0acd1ea442 conductor(plan): Mark task 'Tier 1 & 2 System Prompts' as complete 2026-02-26 20:36:33 -05:00
Ed_
a28d71b064 feat(mma): Implement structured system prompts for Tier 1 and Tier 2 2026-02-26 20:36:09 -05:00
Ed_
6be093cfc1 conductor(plan): Mark task 'The Event Bus' as complete 2026-02-26 20:34:15 -05:00
Ed_
695cb4a82e feat(mma): Implement AsyncEventQueue in events.py 2026-02-26 20:33:51 -05:00
Ed_
47d750ea9d conductor(plan): Mark Phase 4 as complete 2026-02-26 20:30:51 -05:00
Ed_
61d17ade0f conductor(checkpoint): Checkpoint end of Phase 4 - Tier 4 QA Interception 2026-02-26 20:30:29 -05:00
Ed_
a5854b1488 conductor(plan): Mark task 'Payload Formatting' as complete 2026-02-26 20:30:04 -05:00
Ed_
fb3da4de36 feat(mma): Integrate Tier 4 QA analysis across all providers and conductor 2026-02-26 20:29:34 -05:00
Ed_
80a10f4d12 conductor(plan): Mark task 'Tier 4 Instantiation' as complete 2026-02-26 20:22:29 -05:00
Ed_
8e4e32690c feat(mma): Implement run_tier4_analysis in ai_client.py 2026-02-26 20:22:04 -05:00
Ed_
bb2f7a16d4 conductor(plan): Mark task 'The Interceptor Loop' as complete 2026-02-26 20:19:59 -05:00
Ed_
bc654c2f57 feat(mma): Implement Tier 4 QA interceptor in shell_runner.py 2026-02-26 20:19:34 -05:00
Ed_
a978562f55 conductor(plan): Mark Phase 3 as complete 2026-02-26 20:15:51 -05:00
Ed_
e6c8d734cc conductor(checkpoint): Checkpoint end of Phase 3 - Linear Orchestrator & Execution Clutch 2026-02-26 20:15:17 -05:00
Ed_
bc0cba4d3c conductor(plan): Mark task 'The HITL Execution Clutch' as complete 2026-02-26 20:14:52 -05:00
Ed_
1afd9c8c2a feat(mma): Implement HITL execution clutch and step-mode 2026-02-26 20:14:27 -05:00
Ed_
cfd20c027d conductor(plan): Mark task 'Context Injection' as complete 2026-02-26 20:10:39 -05:00
Ed_
9d6d1746c6 feat(mma): Implement context injection using ASTParser in run_worker_lifecycle 2026-02-26 20:10:15 -05:00
Ed_
559355ce47 conductor(plan): Mark task 'The Engine Core' as complete 2026-02-26 20:08:15 -05:00
Ed_
7a301685c3 feat(mma): Implement ConductorEngine and run_worker_lifecycle 2026-02-26 20:07:51 -05:00
Ed_
4346eda88d conductor(plan): Mark Phase 2 as complete 2026-02-26 20:03:15 -05:00
Ed_
a518a307f3 conductor(checkpoint): Checkpoint end of Phase 2 - State Machine & Data Structures 2026-02-26 20:02:56 -05:00
Ed_
eac01c2975 conductor(plan): Mark task 'State Mutator Methods' as complete 2026-02-26 20:02:33 -05:00
Ed_
e925b219cb feat(mma): Implement state mutator methods for Ticket and Track 2026-02-26 20:02:09 -05:00
Ed_
d198a790c8 conductor(plan): Mark task 'Worker Context Definition' as complete 2026-02-26 20:00:15 -05:00
Ed_
ee719296c4 feat(mma): Implement WorkerContext model 2026-02-26 19:59:51 -05:00
Ed_
ccd286132f conductor(plan): Mark task 'The Dataclasses' as complete 2026-02-26 19:55:27 -05:00
Ed_
f9b5a504e5 feat(mma): Implement Ticket and Track models 2026-02-26 19:55:03 -05:00
Ed_
0b2c0dd8d7 conductor(plan): Mark Phase 1 as complete 2026-02-26 19:53:03 -05:00
Ed_
ac31e4112f conductor(checkpoint): Checkpoint end of Phase 1 - Memory Foundations 2026-02-26 19:48:59 -05:00
Ed_
449335df04 conductor(plan): Mark AST view extraction tasks as complete 2026-02-26 19:48:20 -05:00
Ed_
b73a83e612 conductor(plan): Mark task 'Core Parser Class' as complete 2026-02-26 19:47:56 -05:00
Ed_
7a609cae69 feat(mma): Implement ASTParser in file_cache.py and refactor mcp_client.py 2026-02-26 19:47:33 -05:00
Ed_
4849ee2b8c conductor(plan): Mark task 'Dependency Setup' as complete 2026-02-26 19:29:46 -05:00
Ed_
8fb75cc7e2 feat(deps): Update requirements.txt with tree-sitter dependencies 2026-02-26 19:29:22 -05:00
Ed_
659f0c91f3 move to proper location 2026-02-26 18:28:52 -05:00
Ed_
9e56245091 feat(conductor): Restore mma_implementation track 2026-02-26 13:13:29 -05:00
Ed_
ff1b2cbce0 feat(conductor): Archive gemini_cli_parity track 2026-02-26 13:11:45 -05:00
Ed_
d31685cd7d feat(gemini_cli_parity): Complete Phase 5 and all edge case tests 2026-02-26 13:09:58 -05:00
Ed_
507154f88d chore(conductor): Archive completed track 'Review logging' 2026-02-26 09:32:19 -05:00
Ed_
074b276293 docs(conductor): Synchronize docs for track 'Review logging' 2026-02-26 09:26:25 -05:00
Ed_
add0137f72 chore(conductor): Mark track 'Review logging' as complete 2026-02-26 09:24:57 -05:00
Ed_
04a991ef7e docs(logging): Update documentation for session-based logging and management 2026-02-26 09:19:56 -05:00
Ed_
23c0f0a15a test(logging): Add end-to-end integration test for logging lifecycle 2026-02-26 09:18:24 -05:00
Ed_
948efbb376 remove mma test from toplvl dir 2026-02-26 09:17:54 -05:00
Ed_
be249fbcb4 get mma tests into conductor dir 2026-02-26 09:16:56 -05:00
Ed_
7d521239ac feat(gui): Add Log Management panel with manual whitelisting 2026-02-26 09:12:58 -05:00
Ed_
8b7588323e feat(logging): Integrate log pruning and auto-whitelisting into app lifecycle 2026-02-26 09:08:31 -05:00
Ed_
4e9c47f081 feat(logging): Implement auto-whitelisting heuristics for log sessions 2026-02-26 09:05:15 -05:00
Ed_
ff98a63450 flash-lite is too dumb 2026-02-26 09:03:58 -05:00
Ed_
bd2a79c090 feat(logging): Implement LogPruner for cleaning up old insignificant logs 2026-02-26 08:59:39 -05:00
Ed_
3f4dc1ae03 feat(logging): Implement session-based log organization 2026-02-26 08:55:16 -05:00
Ed_
10fbfd0f54 feat(logging): Implement LogRegistry for managing session metadata 2026-02-26 08:52:51 -05:00
Ed_
9a66b7697e chore(conductor): Add new track 'Review logging used throughout the project' 2026-02-26 08:46:25 -05:00
Ed_
b9b90ba9e7 remove mma_utilization_refinement_20260226 from tracks 2026-02-26 08:38:55 -05:00
Ed_
4374b91fd1 chore(conductor): Archive track 'MMA Utilization Refinement' 2026-02-26 08:38:42 -05:00
Ed_
a664dfbbec fix(mma): Final refinement of delegation command and log tracking 2026-02-26 08:38:10 -05:00
Ed_
1933fcfb40 conductor(plan): Mark task 'Apply review suggestions' as complete 2026-02-26 08:36:05 -05:00
Ed_
d343066435 fix(conductor): Apply review suggestions for track 'mma_utilization_refinement_20260226' 2026-02-26 08:35:50 -05:00
Ed_
91693a5168 feat(mma): Refine tier roles, tool access, and observability 2026-02-26 08:31:19 -05:00
Ed_
732f3d4e13 chore(conductor): Mark track 'MMA Utilization Refinement' as complete 2026-02-26 08:30:52 -05:00
Ed_
e950601e28 chore(conductor): Add new track 'MMA Utilization Refinement' 2026-02-26 08:24:13 -05:00
Ed_
18e6fab307 checkpoint: gemini_cli_parity track 2026-02-26 00:32:21 -05:00
Ed_
a70680b2a2 checkpoint: Working on getting gemini cli to actually have parity with gemini api. 2026-02-26 00:31:33 -05:00
Ed_
cbe359b1a5 archive deepseek support (remove in tracks) 2026-02-25 23:35:03 -05:00
Ed_
d030897520 chore(conductor): Archive track 'Add support for the deepseek api as a provider.' 2026-02-25 23:34:46 -05:00
Ed_
f2b29a06d5 chore(conductor): Mark track 'Add support for the deepseek api as a provider.' as complete 2026-02-25 23:34:06 -05:00
Ed_
95cac4e831 feat(ai): implement DeepSeek provider with streaming and reasoning support 2026-02-25 23:32:08 -05:00
Ed_
3a2856b27d pain 2026-02-25 23:11:42 -05:00
Ed_
7bbc484053 docs(conductor): Synchronize docs for track 'deepseek_support_20260225' (Phase 1) 2026-02-25 22:37:56 -05:00
Ed_
45b88728f3 conductor(plan): Mark Phase 1 of DeepSeek track as complete [checkpoint: 0ec3720] 2026-02-25 22:37:14 -05:00
Ed_
0ec372051a conductor(checkpoint): Checkpoint end of Phase 1 (Infrastructure & Common Logic) 2026-02-25 22:37:01 -05:00
Ed_
75bf912f60 conductor(plan): Mark Phase 1 of DeepSeek track as verified 2026-02-25 22:36:57 -05:00
Ed_
1b3ff232c4 feat(deepseek): Implement Phase 1 infrastructure and provider interface 2026-02-25 22:33:20 -05:00
Ed_
f0c1af986d mma docs support 2026-02-25 22:29:20 -05:00
Ed_
74dcd89ec5 mma execution fix 2026-02-25 22:26:59 -05:00
Ed_
d82c7686f7 skill fixes 2026-02-25 22:14:13 -05:00
Ed_
8abf5e07b9 chore(conductor): Archive track 'test_curation_20260225' 2026-02-25 22:06:20 -05:00
Ed_
e596a1407f conductor(plan): Mark task 'Apply review suggestions' as complete 2026-02-25 22:05:52 -05:00
Ed_
c23966061c fix(conductor): Apply review suggestions for track 'test_curation_20260225' 2026-02-25 22:05:28 -05:00
Ed_
56025a84e9 checkpoint: finished test curation 2026-02-25 21:58:18 -05:00
Ed_
e0b9ab997a chore(conductor): Mark track 'Test Suite Curation and Organization' as complete 2026-02-25 21:56:03 -05:00
Ed_
aea42e82ab fixes to mma skills 2026-02-25 21:12:10 -05:00
Ed_
6152b63578 chore(conductor): Checkpoint Phase 2: Manifest and Tooling for test curation track 2026-02-25 21:05:00 -05:00
Ed_
26502df891 conductor(plan): Mark phase 'Research and Inventory' as complete 2026-02-25 20:52:53 -05:00
Ed_
be689ad1e9 chore(conductor): Checkpoint Phase 1: Research and Inventory for test curation track 2026-02-25 20:52:45 -05:00
Ed_
edae93498d chore(conductor): Add new track 'Test Suite Curation and Organization' 2026-02-25 20:42:43 -05:00
Ed_
3a6a53d046 chore(conductor): Archive track 'mma_formalization_20260225' 2026-02-25 20:37:04 -05:00
Ed_
c2ab18164e checkpoint on mma overhaul 2026-02-25 20:30:34 -05:00
Ed_
df74d37fd0 docs(conductor): Synchronize docs for track 'mma_formalization_20260225' 2026-02-25 20:28:43 -05:00
Ed_
2f2f73cbb3 chore(conductor): Mark track 'mma_formalization_20260225' as complete 2026-02-25 20:26:26 -05:00
Ed_
88712ed328 conductor(plan): Mark track 'mma_formalization_20260225' as complete 2026-02-25 20:26:15 -05:00
Ed_
0d533ec11e conductor(checkpoint): Checkpoint end of Phase 4 2026-02-25 20:26:03 -05:00
Ed_
95955a2792 conductor(plan): Mark Phase 4 final verification as complete 2026-02-25 20:25:57 -05:00
Ed_
eea3da805e conductor(plan): Mark helper task as complete 2026-02-25 20:24:36 -05:00
Ed_
df1c429631 feat(mma): Add mma.ps1 helper script for manual triggering 2026-02-25 20:24:26 -05:00
Ed_
55b8288b98 conductor(plan): Mark workflow update as complete 2026-02-25 20:23:34 -05:00
Ed_
5e256d1c12 docs(conductor): Update workflow with mma-exec and 4-tier model definitions 2026-02-25 20:23:25 -05:00
Ed_
6710b58d25 conductor(plan): Mark Phase 3 as complete 2026-02-25 20:21:54 -05:00
Ed_
eb64e52134 conductor(checkpoint): Checkpoint end of Phase 3 2026-02-25 20:21:29 -05:00
Ed_
221374eed6 feat(mma): Complete Phase 3 context features (injection, dependency mapping, logging) 2026-02-25 20:21:12 -05:00
Ed_
9c229e14fd conductor(plan): Mark task 'Implement logging' as complete 2026-02-25 20:17:24 -05:00
Ed_
678fa89747 feat(mma): Implement logging/auditing for role hand-offs 2026-02-25 20:16:56 -05:00
Ed_
25b904b404 conductor(plan): Mark task 'dependency mapping' as complete 2026-02-25 20:12:46 -05:00
Ed_
32ec14f5c3 feat(mma): Add dependency mapping to mma-exec 2026-02-25 20:12:14 -05:00
Ed_
4e564aad79 feat(mma): Implement AST Skeleton View generator using tree-sitter 2026-02-25 20:08:43 -05:00
Ed_
da689da4d9 conductor(plan): Update Phase 2 checkpoint with model fixes 2026-02-25 19:58:13 -05:00
Ed_
dd7e591cb8 conductor(checkpoint): Checkpoint end of Phase 2 (Amended) 2026-02-25 19:57:56 -05:00
Ed_
794cc2a7f2 fix(mma): Fix tier 2 model name to valid preview model and adjust tests 2026-02-25 19:57:42 -05:00
Ed_
9da08e9c42 fix(mma): Adjust skill trigger format to avoid policy blocks 2026-02-25 19:54:45 -05:00
Ed_
be2a77cc79 fix(mma): Assign dedicated models per tier in execute_agent 2026-02-25 19:51:00 -05:00
Ed_
00fbf5c44e conductor(plan): Mark phase 'Phase 2: mma-exec CLI - Core Scoping' as complete 2026-02-25 19:46:47 -05:00
Ed_
01953294cd conductor(checkpoint): Checkpoint end of Phase 2 2026-02-25 19:46:31 -05:00
Ed_
8e7bbe51c8 conductor(plan): Update context amnesia task commit hash 2026-02-25 19:46:24 -05:00
Ed_
f6e6d418f6 fix(mma): Use headless execution flag for context amnesia and parse json output 2026-02-25 19:45:59 -05:00
Ed_
7273e3f718 conductor(plan): Skip ai_client integration for mma-exec 2026-02-25 19:25:25 -05:00
Ed_
bbcbaecd22 conductor(plan): Mark task 'Context Amnesia bridge' as complete 2026-02-25 19:17:04 -05:00
Ed_
9a27a80d65 feat(mma): Implement Context Amnesia bridge via subprocess 2026-02-25 19:16:41 -05:00
Ed_
facfa070bb conductor(plan): Mark task 'Implement Role-Scoped Document selection logic' as complete 2026-02-25 19:12:20 -05:00
Ed_
55c0fd1c52 feat(mma): Implement Role-Scoped Document selection logic 2026-02-25 19:12:02 -05:00
Ed_
067cfba7f3 conductor(plan): Mark task 'Scaffold mma_exec.py' as complete 2026-02-25 19:09:33 -05:00
Ed_
0b2cd324e5 feat(mma): Scaffold mma_exec.py with basic CLI structure 2026-02-25 19:09:14 -05:00
Ed_
0d7530e33c conductor(plan): Mark phase 'Phase 1: Tiered Skills Implementation' as complete 2026-02-25 19:07:09 -05:00
Ed_
6ce3ea784d conductor(checkpoint): Checkpoint end of Phase 1 2026-02-25 19:06:50 -05:00
Ed_
c6a04d8833 conductor(plan): Mark skills creation tasks as complete 2026-02-25 19:05:38 -05:00
Ed_
fe1862af85 feat(mma): Add 4-tier skill templates 2026-02-25 19:05:14 -05:00
Ed_
f728274764 checkpoint: fix regression when using gemini cli outside of manual slop. 2026-02-25 19:01:42 -05:00
Ed_
fcb83e620c chore(conductor): Add new track '4-Tier MMA Architecture Formalization' 2026-02-25 18:49:58 -05:00
Ed_
d030bb6268 chore(conductor): Add new track 'DeepSeek API Support' 2026-02-25 18:44:38 -05:00
Ed_
b6496ac169 chore(conductor): Add new track 'Gemini CLI Parity' 2026-02-25 18:42:40 -05:00
Ed_
94e41d20ff chore(conductor): Archive gemini_cli_headless_20260224 track and update tests 2026-02-25 18:39:36 -05:00
Ed_
1c78febd16 chore(conductor): Mark track 'Support gemini cli headless' as complete 2026-02-25 14:30:43 -05:00
Ed_
f4dd7af283 chore(conductor): final update to Gemini CLI implementation plan 2026-02-25 14:30:37 -05:00
Ed_
1e5b43ebcd feat(ai): finalize Gemini CLI integration with telemetry polish and cleanup 2026-02-25 14:30:21 -05:00
Ed_
d187a6c8d9 feat(ai): support stdin for Gemini CLI and verify with integration test 2026-02-25 14:23:20 -05:00
Ed_
3ce4fa0c07 feat(gui): support Gemini CLI provider and settings persistence 2026-02-25 14:06:14 -05:00
Ed_
b762a80482 feat(ai): integrate GeminiCliAdapter into ai_client 2026-02-25 14:02:06 -05:00
Ed_
211000c926 feat(ipc): implement cli_tool_bridge as BeforeTool hook 2026-02-25 13:53:57 -05:00
Ed_
217b0e6d00 conductor(plan): mark Phase 1 of Gemini CLI headless integration as complete 2026-02-25 13:45:44 -05:00
Ed_
c0bccce539 conductor(checkpoint): Checkpoint end of Phase 1 2026-02-25 13:45:22 -05:00
Ed_
93f640dc79 feat(ipc): add request_confirmation to ApiHookClient 2026-02-25 13:44:44 -05:00
Ed_
1792107412 feat(ipc): support synchronous 'ask' requests in api_hooks 2026-02-25 13:41:25 -05:00
Ed_
147c10d4bb chore(conductor): Archive track 'manual_slop_headless_20260225' 2026-02-25 13:34:32 -05:00
Ed_
05a8d9d6d6 conductor(plan): Mark task 'Apply review suggestions' as complete 2026-02-25 13:34:05 -05:00
Ed_
9b50bfa75e fix(headless): Apply review suggestions for track 'manual_slop_headless_20260225' 2026-02-25 13:33:59 -05:00
Ed_
63fd391dff chore(conductor): Integrate strict MMA token firewalling and tiered delegation into core workflow 2026-02-25 13:29:16 -05:00
Ed_
6eb88a4041 docs(conductor): Synchronize docs for track 'Support headless manual_slop' 2026-02-25 13:24:09 -05:00
Ed_
28fcaa7eae chore(conductor): Mark track 'Support headless manual_slop' as complete 2026-02-25 13:23:11 -05:00
Ed_
386e36a92b feat(headless): Implement Phase 5 - Dockerization 2026-02-25 13:23:04 -05:00
Ed_
1491619310 feat(headless): Implement Phase 4 - Session & Context Management via API 2026-02-25 13:18:41 -05:00
Ed_
4e0bcd5188 feat(headless): Implement Phase 2 - Core API Routes & Authentication 2026-02-25 13:09:22 -05:00
Ed_
d5f056c3d1 feat(headless): Implement Phase 1 - Project Setup & Headless Scaffold 2026-02-25 13:03:11 -05:00
Ed_
33a603c0c5 pain 2026-02-25 12:53:04 -05:00
Ed_
0b4e197d48 checkpoint, mma condcutor pain 2026-02-25 12:47:21 -05:00
Ed_
89636eee92 conductor(plan): mark task 'Update dependencies' as complete 2026-02-25 12:41:12 -05:00
Ed_
02fc847166 feat(headless): add fastapi and uvicorn dependencies 2026-02-25 12:41:01 -05:00
Ed_
b66da31dd0 chore(conductor): Add new track 'manual_slop_headless_20260225' 2026-02-25 12:36:42 -05:00
Ed_
f775659cc5 checkpoint rem mma_verification from tracks 2026-02-25 09:26:44 -05:00
Ed_
96e40f056e chore(conductor): Archive verified MMA tracks 2026-02-25 09:26:27 -05:00
Ed_
3f9c6fc6aa chore(conductor): Fix SKILL.md and documentation typos to correctly use the new Role-Based sub-agent protocol 2026-02-25 09:15:25 -05:00
Ed_
e60eef5df8 docs(conductor): Synchronize docs for track 'MMA Tiered Architecture Verification' 2026-02-25 09:02:40 -05:00
Ed_
fd1e5019ea chore(conductor): Mark track 'MMA Tiered Architecture Verification' as complete 2026-02-25 09:00:58 -05:00
Ed_
551e41c27f conductor(checkpoint): Phase 4: Final Validation and Reporting complete 2026-02-25 08:59:20 -05:00
Ed_
3378fc51b3 conductor(plan): Mark phase 'Test Track Implementation' as complete 2026-02-25 08:55:45 -05:00
Ed_
4eb4e8667c conductor(checkpoint): Phase 3: Test Track Implementation complete 2026-02-25 08:55:32 -05:00
Ed_
743a0e380c conductor(plan): Mark phase 'Infrastructure Verification' as complete 2026-02-25 08:51:17 -05:00
Ed_
1edf3a4b00 conductor(checkpoint): Phase 2: Infrastructure Verification complete 2026-02-25 08:51:05 -05:00
Ed_
a3cb12b1eb conductor(plan): Mark phase 'Research and Investigation' as complete 2026-02-25 08:45:53 -05:00
Ed_
cf3de845fb conductor(checkpoint): Phase 1: Research and Investigation complete 2026-02-25 08:45:41 -05:00
Ed_
4a74487e06 chore(conductor): Add new track 'MMA Tiered Architecture Verification' 2026-02-25 08:38:52 -05:00
Ed_
05ad580bc1 chore(conductor): Archive track 'gui_sim_extension_20260224' 2026-02-25 01:45:27 -05:00
Ed_
c952d2f67b feat(testing): stabilize simulation suite and fix gemini caching 2026-02-25 01:44:46 -05:00
Ed_
fb80ce8c5a feat(gui): Add auto-scroll, blinking history, and reactive API events 2026-02-25 00:41:45 -05:00
Ed_
3113e3c103 docs(conductor): Synchronize docs for track 'extend test simulation' 2026-02-25 00:01:07 -05:00
Ed_
602f52055c chore(conductor): Mark track 'extend test simulation' as complete 2026-02-25 00:00:45 -05:00
Ed_
84bbbf2c89 conductor(plan): Mark phase 'Phase 4: Execution and Modals Simulation' as complete 2026-02-25 00:00:37 -05:00
Ed_
e8959bf032 conductor(checkpoint): Phase 4: Execution and Modals Simulation complete 2026-02-25 00:00:28 -05:00
Ed_
536f8b4f32 conductor(plan): Mark phase 'Phase 3: AI Settings and Tools Simulation' as complete 2026-02-24 23:59:11 -05:00
Ed_
760eec208e conductor(checkpoint): Phase 3: AI Settings and Tools Simulation complete 2026-02-24 23:59:01 -05:00
Ed_
88edb80f2c conductor(plan): Mark phase 'Phase 2: Context and Chat Simulation' as complete 2026-02-24 23:57:40 -05:00
Ed_
a77d0e70f2 conductor(checkpoint): Phase 2: Context and Chat Simulation complete 2026-02-24 23:57:31 -05:00
Ed_
f7cfd6c11b conductor(plan): Mark phase 'Phase 1: Setup and Architecture' as complete 2026-02-24 23:54:24 -05:00
Ed_
b255d4b935 conductor(checkpoint): Phase 1: Setup and Architecture complete 2026-02-24 23:54:15 -05:00
Ed_
5dc286ffd3 chore(conductor): Add new track 'Gemini CLI Headless Integration' 2026-02-24 23:46:56 -05:00
Ed_
bab468fc82 fix(conductor): Enforce strict statelessness and robust JSON parsing for subagents 2026-02-24 23:36:41 -05:00
Ed_
462ed2266a feat(conductor): Add run_subagent script for stable headless skill invocation 2026-02-24 23:17:45 -05:00
Ed_
0080ceb397 docs(conductor): Add MMA_Support as the fallback source of truth to the core engine track 2026-02-24 23:03:14 -05:00
Ed_
45abcbb1b9 feat(conductor): Consolidate MMA implementation into single multi-phase track and draft Agent Skill 2026-02-24 22:57:28 -05:00
Ed_
10c5705748 docs(conductor): Add Token Firewalling and Model Switching Strategy 2026-02-24 22:45:17 -05:00
Ed_
f76054b1df feat(conductor): Scaffold MMA Migration Tracks from Epics 2026-02-24 22:44:36 -05:00
Ed_
982fbfa1cf docs(conductor): Synchronize docs for track '4-Tier Architecture Implementation & Conductor Self-Improvement' 2026-02-24 22:39:20 -05:00
Ed_
25f9edbed1 chore(conductor): Mark track '4-Tier Architecture Implementation & Conductor Self-Improvement' as complete 2026-02-24 22:38:13 -05:00
Ed_
5c4a195505 conductor(plan): Mark phase 'Phase 2: Conductor Self-Reflection' as complete 2026-02-24 22:37:49 -05:00
Ed_
40339a1667 conductor(checkpoint): Checkpoint end of Phase 2: Conductor Self-Reflection & Upgrade Strategy 2026-02-24 22:37:26 -05:00
Ed_
8dbd6eaade conductor(plan): Mark tasks 'Multi-Model' and 'Review' as complete 2026-02-24 22:35:31 -05:00
Ed_
f62bf3113f docs(mma): Draft Multi-Model Delegation and finish Proposal 2026-02-24 22:35:02 -05:00
Ed_
baff5c18d3 docs(mma): Draft Execution Clutch & Linear Debug Mode section 2026-02-24 22:34:19 -05:00
Ed_
2647586286 conductor(plan): Mark task 'Execution Clutch' as in progress 2026-02-24 22:34:16 -05:00
Ed_
30574aefd1 conductor(plan): Mark task 'Draft Proposal - Memory Siloing' as complete 2026-02-24 22:33:58 -05:00
Ed_
ae67c93015 docs(mma): Draft Memory Siloing & Token Firewalling section 2026-02-24 22:33:44 -05:00
Ed_
c409a6d2a3 conductor(plan): Mark task 'Research Optimal Proposal Format' as complete 2026-02-24 22:33:32 -05:00
Ed_
0c5f8b9bfe docs(mma): Draft outline for Conductor Self-Reflection Proposal 2026-02-24 22:33:07 -05:00
Ed_
4a66f994ee conductor(plan): Mark task 'Research Optimal Proposal Format' as in progress 2026-02-24 22:31:57 -05:00
Ed_
5ea8059812 conductor(plan): Mark phase 'Phase 1: manual_slop Migration Planning' as complete 2026-02-24 22:31:41 -05:00
Ed_
e07e8e5127 conductor(checkpoint): Checkpoint end of Phase 1: manual_slop Migration Planning 2026-02-24 22:31:19 -05:00
Ed_
5278c05cec conductor(plan): Mark task 'Draft Track 5' as complete 2026-02-24 22:28:41 -05:00
Ed_
67734c92a1 docs(mma): Draft Track 5 - UI Decoupling & Tier 1/2 Routing 2026-02-24 22:27:22 -05:00
Ed_
a9786d4737 conductor(plan): Mark task 'Draft Track 4' as complete 2026-02-24 22:27:02 -05:00
Ed_
584bff9c06 docs(mma): Draft Track 4 - Tier 4 QA Interception 2026-02-24 22:26:27 -05:00
Ed_
ac55b553b3 conductor(plan): Mark task 'Draft Track 3' as complete 2026-02-24 22:25:21 -05:00
Ed_
aaeed92e3a docs(mma): Draft Track 3 - The Linear Orchestrator & Execution Clutch 2026-02-24 22:24:28 -05:00
Ed_
447a701dc4 conductor(plan): Mark task 'Draft Track 2' as complete 2026-02-24 22:18:37 -05:00
Ed_
1198aee36e docs(mma): Draft Track 2 - State Machine & Data Structures 2026-02-24 22:18:14 -05:00
Ed_
95c6f1f4b2 conductor(plan): Mark task 'Draft Track 1' as complete 2026-02-24 22:17:46 -05:00
Ed_
bdd935ddfd docs(mma): Draft Track 1 - The Memory Foundations 2026-02-24 22:17:34 -05:00
Ed_
4dd4be4afb conductor(plan): Mark task 'Synthesize MMA Documentation' as complete 2026-02-24 22:17:09 -05:00
Ed_
46b351e945 docs(mma): Synthesize MMA Documentation constraints and takeaways 2026-02-24 22:16:44 -05:00
Ed_
4933a007c3 checkpoint history segregation 2026-02-24 22:14:33 -05:00
Ed_
b2e900e77d chore(conductor): Archive track 'history_segregation' 2026-02-24 22:14:10 -05:00
Ed_
7c44948f33 conductor(plan): Mark task 'Apply review suggestions' as complete 2026-02-24 22:12:06 -05:00
Ed_
09df57df2b fix(conductor): Apply review suggestions for track 'history_segregation' 2026-02-24 22:11:50 -05:00
Ed_
a6c9093961 chore(conductor): Mark track 'history_segregation' as complete and migrate local config 2026-02-24 22:09:21 -05:00
Ed_
754fbe5c30 test(integration): Verify history persistence and AI context inclusion 2026-02-24 22:06:33 -05:00
Ed_
7bed5efe61 feat(security): Enforce blacklist for discussion history files 2026-02-24 22:05:44 -05:00
Ed_
ba02c8ed12 feat(project): Segregate discussion history into sibling TOML file 2026-02-24 22:04:14 -05:00
Ed_
ea84168ada checkpoint post gui2_parity 2026-02-24 22:02:06 -05:00
Ed_
828f728d67 chore(conductor): Archive track 'gui2_parity_20260224' 2026-02-24 22:01:30 -05:00
Ed_
48b2993089 conductor(plan): Mark task 'Apply review suggestions' as complete 2026-02-24 22:01:14 -05:00
Ed_
6f1e00b647 fix(conductor): Apply review suggestions for track 'gui2_parity_20260224' 2026-02-24 22:01:07 -05:00
Ed_
95bf1cac7b chore(conductor): Mark track 'gui2_parity_20260224' as complete 2026-02-24 21:56:57 -05:00
Ed_
f718c2288b conductor(plan): Mark track 'gui2_parity_20260224' as complete 2026-02-24 21:56:46 -05:00
Ed_
14984c5233 fix(gui2): Correct Response panel rendering and fix automation crashes 2026-02-24 21:56:26 -05:00
Ed_
fb9ee27b38 conductor(plan): Mark task 'Final project-wide link validation and documentation update' as complete 2026-02-24 20:53:34 -05:00
Ed_
2f5cfb2fca conductor(plan): Mark task 'Final project-wide link validation and documentation update' as in-progress 2026-02-24 20:51:48 -05:00
Ed_
d4d6e5b9ff conductor(plan): Mark task 'Update project entry point to gui_2.py' as complete 2026-02-24 20:37:37 -05:00
Ed_
b92fa9013b docs: Update entry point to gui_2.py 2026-02-24 20:37:20 -05:00
Ed_
188725c412 conductor(plan): Mark task 'Rename gui.py to gui_legacy.py' as complete 2026-02-24 20:36:26 -05:00
Ed_
c4c47b8df9 feat(gui): Rename gui.py to gui_legacy.py and update references 2026-02-24 20:36:04 -05:00
Ed_
76ee25b299 conductor(plan): Mark phase 'Performance Optimization and Final Validation' as complete 2026-02-24 20:25:20 -05:00
Ed_
611c89783f conductor(checkpoint): Checkpoint end of Phase 3 2026-02-24 20:25:02 -05:00
Ed_
17f179513f conductor(plan): Mark Phase 3: Performance Optimization and Final Validation as complete 2026-02-24 20:24:57 -05:00
Ed_
d6472510ea perf(gui2): Full performance parity with gui.py (+/- 5% FPS/CPU) 2026-02-24 20:23:43 -05:00
Ed_
d704816c4d conductor(plan): Mark task 'Optimize rendering and docking logic in gui_2.py if performance targets are not met' as in progress 2026-02-24 20:02:26 -05:00
Ed_
312b0ef48c conductor(plan): Mark task 'Conduct performance benchmarking (FPS, CPU, Frame Time) for both gui.py and gui_2.py' as in progress 2026-02-24 20:00:44 -05:00
Ed_
ae9c5fa0e9 conductor(plan): Mark phase 'Visual and Functional Parity Implementation' as complete 2026-02-24 20:00:16 -05:00
Ed_
ad84843d9e conductor(checkpoint): Checkpoint end of Phase 2 2026-02-24 19:59:54 -05:00
Ed_
a9344adb64 conductor(plan): Mark task 'Address regressions' as complete 2026-02-24 19:45:23 -05:00
Ed_
2d8ee64314 chore(conductor): Mark 'Address regressions' task as complete 2026-02-24 19:43:51 -05:00
Ed_
28155bcee6 conductor(plan): Mark task 'Verify functional parity' as complete 2026-02-24 19:43:01 -05:00
Ed_
450820e8f9 chore(conductor): Mark 'Verify functional parity' task as complete 2026-02-24 19:42:09 -05:00
Ed_
79d462736c conductor(plan): Mark task 'Complete EventEmitter integration' as complete 2026-02-24 19:41:16 -05:00
Ed_
9d59a454e0 feat(gui2): Complete EventEmitter integration 2026-02-24 19:40:18 -05:00
Ed_
23db500688 conductor(plan): Mark task 'Implement missing panels' as complete 2026-02-24 19:38:41 -05:00
Ed_
a85293ff99 feat(gui2): Implement missing GUI hook handlers 2026-02-24 19:37:58 -05:00
Ed_
ccf07a762b fix(conductor): Revert track status to 'In Progress' 2026-02-24 19:32:02 -05:00
Ed_
211d03a93f chore(conductor): Mark track 'Investigate differences left between gui.py and gui_2.py. Needs to reach full parity, so we can sunset guy.py' as complete 2026-02-24 19:27:04 -05:00
Ed_
ff3245eb2b conductor(plan): Mark task 'Conductor - User Manual Verification Phase 1' as complete 2026-02-24 19:26:37 -05:00
Ed_
9f99b77849 chore(conductor): Mark 'Conductor - User Manual Verification Phase 1' task as complete 2026-02-24 19:26:22 -05:00
Ed_
3797624cae conductor(plan): Mark phase 'Phase 1: Research and Gap Analysis' as complete 2026-02-24 19:26:06 -05:00
Ed_
36988cbea1 conductor(checkpoint): Checkpoint end of Phase 1: Research and Gap Analysis 2026-02-24 19:25:10 -05:00
Ed_
0fc8769e17 conductor(plan): Mark task 'Verify failing parity tests' as complete 2026-02-24 19:24:28 -05:00
Ed_
0006f727d5 chore(conductor): Mark 'Verify failing parity tests' task as complete 2026-02-24 19:24:08 -05:00
Ed_
3c7e2c0f1d conductor(plan): Mark task 'Write failing tests' as complete 2026-02-24 19:23:37 -05:00
Ed_
7c5167478b test(gui2): Add failing parity tests for GUI hooks 2026-02-24 19:23:22 -05:00
Ed_
fb4b529fa2 conductor(plan): Mark task 'Map EventEmitter and ApiHookClient' as complete 2026-02-24 19:21:36 -05:00
Ed_
579b0041fc chore(conductor): Mark 'Map EventEmitter and ApiHookClient' task as complete 2026-02-24 19:21:15 -05:00
Ed_
ede3960afb conductor(plan): Mark task 'Audit gui.py and gui_2.py' as complete 2026-02-24 19:20:56 -05:00
Ed_
fe338228d2 chore(conductor): Mark 'Audit gui.py and gui_2.py' task as complete 2026-02-24 19:20:41 -05:00
Ed_
449c4daee1 chore(conductor): Add new track 'extend test simulation to have further in breadth test (not remove the original though as its a useful small test) to extensively test all facets of possible gui interaction.' 2026-02-24 19:18:12 -05:00
Ed_
4b342265c1 chore(conductor): Add new track '4-Tier Architecture Implementation & Conductor Self-Improvement' 2026-02-24 19:11:28 -05:00
Ed_
22607b4ed2 MMA_Support draft 2026-02-24 19:11:15 -05:00
Ed_
f68a07e30e check point support MMA 2026-02-24 19:03:22 -05:00
Ed_
2bf55a89c2 chore(conductor): Add new track 'GUI 2.0 Feature Parity and Migration' 2026-02-24 18:39:21 -05:00
Ed_
9ba8ac2187 chore(conductor): Add new track 'Update documentation and cleanup MainContext.md' 2026-02-24 18:36:03 -05:00
Ed_
5515a72cf3 update conductor files 2026-02-24 18:32:38 -05:00
Ed_
ef3d8b0ec1 chore(conductor): Add new track 'Move discussion histories to their own toml to prevent the ai agent from reading it (will be on a blacklist).' 2026-02-24 18:32:09 -05:00
Ed_
874422ecfd comitting 2026-02-23 23:28:49 -05:00
Ed_
57cb63b9c9 conductor(track): Complete gui2_feature_parity track
Close gui2_feature_parity track after implementing all features
and conducting manual and automated verification.

Key Achievements:
- Integrated event-driven architecture and MCP client.
- Ported API hooks and performance diagnostics.
- Implemented Prior Session Viewer.
- Refactored UI to a Hub-based layout.
- Added agent capability toggles.
- Achieved full theme integration.
- Developed comprehensive test suite.

Note: Remaining UI display issues for text panels in the comms and
tool call history will be addressed in a subsequent track.
2026-02-23 23:27:43 -05:00
Ed_
dbf2962c54 fix(gui): Restore 'Load Log' button and fix docking crash
fix(mcp): Improve path resolution and error messages
2026-02-23 23:00:17 -05:00
Ed_
f5ef2d850f refactor(gui): Implement user feedback for UI layout 2026-02-23 22:36:45 -05:00
Ed_
366cd8ebdd conductor(plan): Mark phase 'UI/UX Refinement' as complete 2026-02-23 22:18:11 -05:00
Ed_
cc5074e682 conductor(checkpoint): Checkpoint end of Phase 3 2026-02-23 22:17:37 -05:00
Ed_
1b49e20c2e conductor(plan): Mark Hub refactoring as complete 2026-02-23 22:16:30 -05:00
Ed_
ddb53b250f refactor(gui2): Restructure layout into discrete Hubs
Automates the refactoring of the monolithic _gui_func in gui_2.py into separate rendering methods, nested within 'Context Hub', 'AI Settings Hub', 'Discussion Hub', and 'Operations Hub', utilizing tab bars. Adds tests to ensure the new default windows correctly represent this Hub structure.
2026-02-23 22:15:13 -05:00
Ed_
c6a756e754 conductor(plan): Mark phase 'Core Architectural Integration' as complete 2026-02-23 22:11:17 -05:00
Ed_
712d5a856f conductor(checkpoint): Checkpoint end of Phase 1 2026-02-23 22:10:05 -05:00
Ed_
ece84d4c4f feat(gui2): Integrate mcp_client.py for native file tools
Wires up the mcp_client.perf_monitor_callback to the gui_2.py App class and verifies the dispatch loop through a newly created test.
2026-02-23 22:06:55 -05:00
Ed_
2ab3f101d6 Merge origin/cache 2026-02-23 22:03:06 -05:00
Ed_
1d8626bc6b chore: Update config and manual_slop.toml 2026-02-23 21:55:00 -05:00
bd8551d282 Harden reliability, security, and UX across core modules
- Add thread safety: _anthropic_history_lock and _send_lock in ai_client to prevent concurrent corruption
  - Add _send_thread_lock in gui_2 for atomic check-and-start of send thread
  - Add atexit fallback in session_logger to flush log files on abnormal exit
  - Fix file descriptor leaks: use context managers for urlopen in mcp_client
  - Cap unbounded tool output growth at 500KB per send() call (both Gemini and Anthropic)
  - Harden path traversal: resolve(strict=True) with fallback in mcp_client allowlist checks
  - Add SLOP_CREDENTIALS env var override for credentials.toml with helpful error message
  - Fix Gemini token heuristic: use _CHARS_PER_TOKEN (3.5) instead of hardcoded // 4
  - Add keyboard shortcuts: Ctrl+Enter to send, Ctrl+L to clear message input
  - Add auto-save: flush project and config to disk every 60 seconds
2026-02-23 21:29:30 -05:00
Ed_
6d825e6585 wip: gemini doing gui_2.py catchup track 2026-02-23 21:07:06 -05:00
Ed_
3db6a32e7c conductor(plan): Update plan after merge from cache branch 2026-02-23 20:34:14 -05:00
Ed_
c19b13e4ac Merge branch 'origin/cache' 2026-02-23 20:32:49 -05:00
Ed_
1b9a2ab640 chore: Update discussion timestamp 2026-02-23 20:24:51 -05:00
Ed_
4300a8a963 conductor(plan): Mark task 'Integrate events.py into gui_2.py' as complete 2026-02-23 20:23:26 -05:00
Ed_
24b831c712 feat(gui2): Integrate core event system
Integrates the ai_client.events emitter into the gui_2.py App class. Adds a new test file to verify that the App subscribes to API lifecycle events upon initialization. This is the first step in aligning gui_2.py with the project's event-driven architecture.
2026-02-23 20:22:36 -05:00
Ed_
bf873dc110 for some reason didn't add? 2026-02-23 20:17:55 -05:00
Ed_
f65542add8 chore(conductor): Add new track 'get gui_2 working with latest changes to the project.' 2026-02-23 20:16:53 -05:00
Ed_
229ebaf238 Merge branch 'sim' 2026-02-23 20:11:01 -05:00
Ed_
e51194a9be remove live_ux_test from active tracks 2026-02-23 20:10:47 -05:00
Ed_
85f8f08f42 chore(conductor): Archive track 'live_ux_test_20260223' 2026-02-23 20:10:22 -05:00
Ed_
70358f8151 conductor(plan): Mark task 'Apply review suggestions' as complete 2026-02-23 20:09:54 -05:00
Ed_
064d7ba235 fix(conductor): Apply review suggestions for track 'live_ux_test_20260223' 2026-02-23 20:09:41 -05:00
69401365be Port missing features to gui_2 and optimize caching
- Port 10 missing features from gui.py to gui_2.py: performance
    diagnostics, prior session log viewing, token budget visualization,
    agent tools config, API hooks server, GUI task queue, discussion
    truncation, THINKING/LIVE indicators, event subscriptions, and
    session usage tracking
  - Persist window visibility state in config.toml
  - Fix Gemini cache invalidation by separating discussion history
    from cached context (use MD5 hash instead of built-in hash)
  - Add cost optimizations: tool output truncation at source, proactive
    history trimming at 40%, summary_only support in aggregate.run()
  - Add cleanup() for destroying API caches on exit
2026-02-23 20:06:13 -05:00
Ed_
fb1117becc Merge branch 'master' into sim 2026-02-23 20:03:45 -05:00
Ed_
df90bad4a1 Merge branch 'master' of https://git.cozyair.dev/ed/manual_slop
# Conflicts:
#	manual_slop.toml
2026-02-23 20:03:21 -05:00
Ed_
9f2ed38845 Merge branch 'master' of https://git.cozyair.dev/ed/manual_slop into sim
# Conflicts:
#	manual_slop.toml
2026-02-23 20:02:58 -05:00
Ed_
59f4df4475 docs(conductor): Synchronize docs for track 'Human-Like UX Interaction Test' 2026-02-23 19:55:25 -05:00
Ed_
c4da60d1c5 chore(conductor): Mark track 'Human-Like UX Interaction Test' as complete 2026-02-23 19:54:47 -05:00
Ed_
47c4117763 conductor(plan): Mark track 'Human-Like UX Interaction Test' as complete 2026-02-23 19:54:36 -05:00
Ed_
8e63b31508 conductor(checkpoint): Phase 4: Final Integration & Regression complete 2026-02-23 19:54:24 -05:00
Ed_
8bd280efc1 feat(simulation): stabilize IPC layer and verify full workflow 2026-02-23 19:53:32 -05:00
75e1cf84fe fixed up gui_2.py
multi viewport works and no crashes thus far
2026-02-23 19:33:09 -05:00
Ed_
ba97ccda3c conductor(plan): Mark Phase 3 as complete 2026-02-23 19:28:31 -05:00
Ed_
0f04e066ef conductor(checkpoint): Phase 3: History & Session Verification complete 2026-02-23 19:28:23 -05:00
Ed_
5e1b965311 feat(simulation): add discussion switching and truncation simulation logic 2026-02-23 19:26:51 -05:00
Ed_
fdb9b59d36 conductor(plan): Mark Phase 2 as complete 2026-02-23 19:25:39 -05:00
Ed_
9c4a72c734 conductor(checkpoint): Phase 2: Workflow Simulation complete 2026-02-23 19:25:31 -05:00
Ed_
6d16438477 feat(hooks): add get_indicator_state and verify thinking/live markers 2026-02-23 19:25:08 -05:00
Ed_
bd5dc16715 feat(simulation): implement project scaffolding and discussion loop logic 2026-02-23 19:24:26 -05:00
Ed_
895004ddc5 conductor(plan): Mark Phase 1 as complete 2026-02-23 19:23:40 -05:00
Ed_
76265319a7 conductor(checkpoint): Phase 1: Infrastructure & Automation Core complete 2026-02-23 19:23:31 -05:00
Ed_
bfe9ef014d feat(simulation): add ping-pong interaction script 2026-02-23 19:20:29 -05:00
Ed_
d326242667 feat(simulation): implement UserSimAgent for human-like interaction 2026-02-23 19:20:24 -05:00
Ed_
f36d539c36 feat(hooks): extend ApiHookClient and GUI for tab/listbox control 2026-02-23 19:20:20 -05:00
Ed_
1d674c3a1e chore(conductor): Add new track 'Human-Like UX Interaction Test' 2026-02-23 19:14:35 -05:00
Ed_
1db5ac57ec remove gui layout refinement track 2026-02-23 19:02:57 -05:00
Ed_
d8e42a697b chore(conductor): Archive track 'gui_layout_refinement_20260223' 2026-02-23 19:02:34 -05:00
Ed_
050d995660 conductor(plan): Mark task 'Apply review suggestions' as complete 2026-02-23 19:02:10 -05:00
Ed_
0c5ac55053 fix(conductor): Apply review suggestions for track 'gui_layout_refinement_20260223' 2026-02-23 19:02:02 -05:00
Ed_
450c17b96e docs(conductor): Synchronize docs for track 'Review GUI design' 2026-02-23 18:59:32 -05:00
Ed_
36ab691fbf chore(conductor): Mark track 'Review GUI design' as complete 2026-02-23 18:59:05 -05:00
Ed_
8cca046d96 conductor(plan): Mark track 'GUI Layout Audit and UX Refinement' as complete 2026-02-23 18:58:56 -05:00
Ed_
22f8943619 conductor(checkpoint): Checkpoint end of Phase 4: Iterative Refinement and Final Audit 2026-02-23 18:58:38 -05:00
Ed_
5257db5aca conductor(plan): Mark Phase 4 refinement tasks as complete 2026-02-23 18:57:10 -05:00
Ed_
ebd81586bb feat(ui): Implement walkthrough refinements (Diagnostics, Tabs, Selectable text, Session Loading) 2026-02-23 18:57:02 -05:00
Ed_
ae5dd328e1 conductor(plan): Add refinement tasks from user feedback 2026-02-23 18:54:43 -05:00
Ed_
b3cf58adb4 conductor(plan): Mark phase 'Phase 3: Visual and Tactile Enhancements' as complete 2026-02-23 18:48:11 -05:00
Ed_
4a4cf8c14b conductor(checkpoint): Checkpoint end of Phase 3: Visual and Tactile Enhancements 2026-02-23 18:47:57 -05:00
Ed_
e3767d2994 conductor(plan): Mark Phase 3 tasks as complete 2026-02-23 18:47:22 -05:00
Ed_
c5d54cfae2 feat(ui): Add blinking indicators and increase diagnostic density 2026-02-23 18:47:14 -05:00
Ed_
975fcde9bd conductor(plan): Mark phase 'Phase 2: Layout Reorganization' as complete 2026-02-23 18:45:46 -05:00
Ed_
97367fe537 conductor(checkpoint): Checkpoint end of Phase 2: Layout Reorganization 2026-02-23 18:45:25 -05:00
Ed_
72c898e8c2 conductor(plan): Mark Phase 2 tasks as complete 2026-02-23 18:44:26 -05:00
Ed_
f8fb58db1f style(ui): Add no_collapse=True to main Hub windows 2026-02-23 18:44:13 -05:00
Ed_
c341de5515 feat(ui): Consolidate GUI into Hub-based layout 2026-02-23 18:43:35 -05:00
Ed_
b1687f4a6b conductor(plan): Mark phase 'Phase 1: Audit and Structural Design' as complete 2026-02-23 18:40:00 -05:00
Ed_
6a35da1eb2 conductor(checkpoint): Checkpoint end of Phase 1: Audit and Structural Design 2026-02-23 18:39:48 -05:00
Ed_
0e06956d63 conductor(plan): Mark review task as complete 2026-02-23 18:39:13 -05:00
Ed_
8448c71287 docs(gui): Add GUI Reorganization Proposal 2026-02-23 18:38:55 -05:00
Ed_
d177c0bf3c docs(gui): Add GUI Layout Audit Report 2026-02-23 18:38:22 -05:00
Ed_
040fec3613 remove vendor alignment track 2026-02-23 17:12:17 -05:00
Ed_
e757922c72 chore(conductor): Archive track 'api_vendor_alignment_20260223' 2026-02-23 17:11:57 -05:00
Ed_
05cd1b6596 conductor(plan): Finalize checkpoint for track 'api_vendor_alignment_20260223' 2026-02-23 17:09:53 -05:00
Ed_
e9126b47db chore(conductor): Mark track 'api_vendor_alignment_20260223' as complete 2026-02-23 17:09:41 -05:00
Ed_
0f9f235438 feat(tokens): Implement accurate token counting for Gemini history 2026-02-23 17:08:08 -05:00
Ed_
f0eb5382fe feat(anthropic): Align Anthropic integration with latest SDK and enable prompt caching beta 2026-02-23 17:07:22 -05:00
Ed_
842bfc407c feat(gemini): Align Gemini integration with latest google-genai SDK 2026-02-23 17:05:40 -05:00
Ed_
5ec4283f41 chore(conductor): Mark Phase 1 of track 'api_vendor_alignment_20260223' as complete 2026-02-23 17:02:40 -05:00
Ed_
a359f19cdc chore(conductor): Add new track 'Review GUI design and UX refinement' 2026-02-23 16:59:59 -05:00
Ed_
6287f24e51 chore(conductor): Add new track 'Review project codebase for API vendor alignment' 2026-02-23 16:56:46 -05:00
Ed_
faa37928cd remove api_metrics from tracks 2026-02-23 16:53:36 -05:00
Ed_
094e729e89 chore(conductor): Archive track 'api_metrics_20260223' 2026-02-23 16:53:25 -05:00
Ed_
ad8c0e208b fix: Add sys.path to tests/test_gui_updates.py to resolve aggregate import 2026-02-23 16:53:08 -05:00
Ed_
ffeb6f50f5 close live_gui_testing 2026-02-23 16:50:37 -05:00
Ed_
58594e03df chore(conductor): Archive track 'live_gui_testing_20260223' 2026-02-23 16:50:18 -05:00
Ed_
da28d839f6 conductor(plan): Mark task 'Apply review suggestions' as complete 2026-02-23 16:49:55 -05:00
Ed_
075d760721 fix(conductor): Apply review suggestions for track 'live_gui_testing_20260223' 2026-02-23 16:49:36 -05:00
Ed_
2da1ef38af remove event driven metrics frorm tracks 2026-02-23 16:47:15 -05:00
Ed_
40fc35f176 chore(conductor): Archive track 'event_driven_metrics_20260223' 2026-02-23 16:46:20 -05:00
Ed_
1a428e3c6a conductor(plan): Mark task 'Apply review suggestions' as complete 2026-02-23 16:45:42 -05:00
Ed_
66f728e7a3 fix(conductor): Apply review suggestions for track 'event_driven_metrics_20260223' 2026-02-23 16:45:34 -05:00
Ed_
eaaf09dc3c docs(conductor): Synchronize docs for track 'Event-Driven API Metrics Updates' 2026-02-23 16:39:46 -05:00
Ed_
abc0639602 chore(conductor): Mark track 'Event-Driven API Metrics Updates' as complete 2026-02-23 16:39:02 -05:00
Ed_
b792e34a64 conductor(plan): Mark Phase 3 as complete 2026-02-23 16:38:54 -05:00
Ed_
8caebbd226 conductor(checkpoint): Checkpoint end of Phase 3 2026-02-23 16:38:27 -05:00
Ed_
2dd6145bd8 feat(gui): Implement event-driven API metrics updates and decouple from render loop 2026-02-23 16:38:23 -05:00
Ed_
0c27aa6c6b conductor(plan): Mark Phase 2 as complete 2026-02-23 16:32:10 -05:00
Ed_
e24664c7b2 conductor(checkpoint): Checkpoint end of Phase 2 2026-02-23 16:31:56 -05:00
Ed_
20ebab55a0 feat(ai_client): Emit API lifecycle and tool execution events 2026-02-23 16:31:48 -05:00
Ed_
c44026c06c conductor(plan): Mark Phase 1 as complete 2026-02-23 16:25:48 -05:00
Ed_
776f4e4370 conductor(checkpoint): Checkpoint end of Phase 1 2026-02-23 16:25:38 -05:00
Ed_
cd3f3c89ed feat(events): Add EventEmitter and instrument ai_client.py 2026-02-23 16:23:55 -05:00
Ed_
93e72b5530 chore(conductor): Mark track 'Live GUI Testing Infrastructure' as complete 2026-02-23 16:01:22 -05:00
Ed_
637946b8c6 conductor(checkpoint): Checkpoint end of Phase 3 and final track completion 2026-02-23 16:01:09 -05:00
Ed_
6677a6e55b conductor(checkpoint): Checkpoint end of Phase 2: Test Suite Migration 2026-02-23 15:56:46 -05:00
Ed_
be20d80453 conductor(plan): Mark phase 'Phase 1: Infrastructure & Core Utilities' as complete 2026-02-23 15:53:32 -05:00
Ed_
db251a1038 conductor(checkpoint): Checkpoint end of Phase 1: Infrastructure & Core Utilities 2026-02-23 15:53:16 -05:00
Ed_
28ab543d4a chore(conductor): Add new track 'Event-Driven API Metrics Updates' 2026-02-23 15:46:43 -05:00
Ed_
8ba5ed4d90 chore(conductor): Add new track 'Live GUI Testing Infrastructure' 2026-02-23 15:43:32 -05:00
Ed_
79ebc210bf chore(conductor): Archive track 'gui_performance_20260223' 2026-02-23 15:37:21 -05:00
Ed_
edc09895b3 conductor(plan): Mark task 'Apply review suggestions' as complete 2026-02-23 15:36:16 -05:00
Ed_
4628813363 fix(conductor): Apply review suggestions for track 'gui_performance_20260223' 2026-02-23 15:36:03 -05:00
Ed_
d535fc7f38 chore(conductor): Mark track 'gui_performance_20260223' as complete 2026-02-23 15:28:59 -05:00
Ed_
b415e4ec19 perf(gui): Resolve massive frametime bloat by throttling telemetry and optimizing UI updates 2026-02-23 15:28:51 -05:00
Ed_
0535e436d5 chore(conductor): Add new track 'investigate and fix heavy frametime performance issues' 2026-02-23 15:20:32 -05:00
Ed_
f1f3ed9925 delete ui perf track 2026-02-23 15:15:42 -05:00
Ed_
d804a32c0e chore(conductor): Archive track 'Add new metrics to track ui performance' 2026-02-23 15:15:04 -05:00
Ed_
8a056468de conductor(plan): Mark phase 'Diagnostics UI and Optimization' as final complete (Blink Fix) 2026-02-23 15:12:38 -05:00
Ed_
7aa9fe6099 conductor(checkpoint): Final performance optimizations for Phase 3: Throttled UI updates and optimized retro blinking 2026-02-23 15:12:20 -05:00
Ed_
b91e72b749 feat(perf): Add high-resolution component profiling to main loop 2026-02-23 15:09:58 -05:00
Ed_
8ccc3d60b5 conductor(plan): Mark phase 'Diagnostics UI and Optimization' as final complete 2026-02-23 15:08:03 -05:00
Ed_
9fdece9404 conductor(checkpoint): Final optimizations for Phase 3: Throttled updates and incremental rendering 2026-02-23 15:07:48 -05:00
Ed_
85fad6bb04 chore(conductor): Update workflow with API hook verification guidelines 2026-02-23 15:06:17 -05:00
Ed_
182a19716e conductor(plan): Mark phase 'Diagnostics UI and Optimization' as complete 2026-02-23 15:01:39 -05:00
Ed_
161a4d062a conductor(checkpoint): Checkpoint end of Phase 3: Diagnostics UI and Optimization 2026-02-23 15:01:23 -05:00
Ed_
e783a03f74 conductor(plan): Mark task 'Identify and fix bottlenecks' as complete 2026-02-23 15:01:11 -05:00
Ed_
c2f4b161b4 fix(ui): Correct DPG plot syntax and axis limit handling 2026-02-23 15:00:59 -05:00
Ed_
2a35df9cbe docs(conductor): Synchronize docs for track 'Add new metrics to track ui performance' 2026-02-23 14:54:20 -05:00
Ed_
cc6a35ea05 chore(conductor): Mark track 'Add new metrics to track ui performance' as complete 2026-02-23 14:52:50 -05:00
Ed_
7c45d26bea conductor(plan): Mark phase 'Diagnostics UI and Optimization' as complete 2026-02-23 14:52:41 -05:00
Ed_
555cf29890 conductor(checkpoint): Checkpoint end of Phase 3: Diagnostics UI and Optimization 2026-02-23 14:52:26 -05:00
Ed_
0625fe10c8 conductor(plan): Mark task 'Build Diagnostics Panel' as complete 2026-02-23 14:50:55 -05:00
Ed_
30d838c3a0 feat(ui): Build Diagnostics Panel with real-time plots 2026-02-23 14:50:44 -05:00
Ed_
0b148325d0 conductor(plan): Mark phase 'AI Tooling and Alert System' as complete 2026-02-23 14:48:35 -05:00
Ed_
b92f2f32c8 conductor(checkpoint): Checkpoint end of Phase 2: AI Tooling and Alert System 2026-02-23 14:48:21 -05:00
Ed_
3e9d362be3 feat(perf): Implement performance threshold alert system 2026-02-23 14:47:49 -05:00
Ed_
4105f6154a conductor(plan): Mark task 'Create get_ui_performance tool' as complete 2026-02-23 14:47:02 -05:00
Ed_
9ec5ff309a feat(perf): Add get_ui_performance AI tool 2026-02-23 14:46:52 -05:00
Ed_
932194d6fa conductor(plan): Mark phase 'High-Resolution Telemetry Engine' as complete 2026-02-23 14:44:05 -05:00
Ed_
f5c9596b05 conductor(checkpoint): Checkpoint end of Phase 1: High-Resolution Telemetry Engine 2026-02-23 14:43:52 -05:00
Ed_
6917f708b3 conductor(plan): Mark task 'Implement Input Lag' as complete 2026-02-23 14:43:16 -05:00
Ed_
cdd06d4339 feat(perf): Implement Input Lag estimation logic 2026-02-23 14:43:07 -05:00
Ed_
e19e9130e4 conductor(plan): Mark task 'Integrate collector' as complete 2026-02-23 14:42:30 -05:00
Ed_
5c7fd39249 feat(perf): Integrate PerformanceMonitor with DPG main loop 2026-02-23 14:42:21 -05:00
Ed_
f9df7d4479 conductor(plan): Mark task 'Implement core performance collector' as complete 2026-02-23 14:41:23 -05:00
Ed_
7fe117d357 feat(perf): Implement core PerformanceMonitor for telemetry collection 2026-02-23 14:41:11 -05:00
Ed_
3487c79cba chore(conductor): Add new track 'Add new metrics to track ui performance' 2026-02-23 14:39:30 -05:00
Ed_
e3b483d983 chore(conductor): Mark track 'api_metrics_20260223' as complete 2026-02-23 13:46:59 -05:00
Ed_
2d22bd7b9c conductor(plan): Mark phase 'Phase 2: GUI Telemetry and Plotting' as complete 2026-02-23 13:46:28 -05:00
Ed_
76582c821e conductor(checkpoint): Checkpoint end of Phase 2 2026-02-23 13:45:32 -05:00
Ed_
e47ee14c7b docs(conductor): Update plan for api_metrics_20260223 2026-02-23 13:43:31 -05:00
Ed_
e747a783a5 feat(gui): Display active Gemini caches
This change adds a label to the Provider panel to show the count and total size of active Gemini caches when the Gemini provider is selected. This information is hidden for other providers.
2026-02-23 13:42:57 -05:00
Ed_
84f05079e3 docs(conductor): Update plan for api_metrics_20260223 2026-02-23 13:40:42 -05:00
Ed_
c35170786b feat(gui): Implement token budget visualizer
This change adds a progress bar and label to the Provider panel to display the current history token usage against the provider's limit. The UI is updated in real-time.
2026-02-23 13:40:04 -05:00
Ed_
a52f3a2ef8 conductor(plan): Mark phase 'Phase 1: Metric Extraction and Logic Review' as complete 2026-02-23 13:35:15 -05:00
Ed_
2668f88e8a conductor(checkpoint): Checkpoint end of Phase 1 2026-02-23 13:34:18 -05:00
Ed_
ac51ded52b docs(conductor): Update plan for api_metrics_20260223 2026-02-23 13:29:22 -05:00
Ed_
f10a2f2ffa feat(conductor): Expose history bleed flags
This change introduces a new function, get_history_bleed_stats, to calculate and expose how close the current conversation history is to the provider's token limit. The initial implementation supports Anthropic, with a placeholder for Gemini.
2026-02-23 13:29:06 -05:00
Ed_
c61fcc6333 docs(conductor): Update plan for api_metrics_20260223 2026-02-23 13:28:20 -05:00
Ed_
8aa70e287f fix(conductor): Implement Gemini cache metrics
This change corrects the implementation of get_gemini_cache_stats to use the Gemini client instance and updates the corresponding test to use proper mocking.
2026-02-23 13:27:49 -05:00
Ed_
27eb9bef95 archive context managment 2026-02-23 13:10:47 -05:00
Ed_
56e275245f chore(conductor): Archive track 'api_hooks_verification_20260223' 2026-02-23 13:07:29 -05:00
Ed_
eb9705bd93 chore(conductor): Mark track 'Update conductor to properly utilize the new api hooks for automated testing & verification of track implementation features withou the need of user intervention.' as complete 2026-02-23 13:04:01 -05:00
Ed_
10ca40dd35 conductor(plan): Mark phase 'Phase 2: Implement Automated Verification Logic' as complete 2026-02-23 13:02:28 -05:00
Ed_
b575dcd1eb conductor(checkpoint): Checkpoint end of Phase 2: Implement Automated Verification Logic 2026-02-23 13:01:00 -05:00
Ed_
f7d3e97f18 conductor(plan): Mark task 'Implement result handling' as complete 2026-02-23 13:00:20 -05:00
Ed_
94b4f38c8c test(conductor): Enhance integration tests for API hook result handling 2026-02-23 12:58:50 -05:00
Ed_
9c60936a0c conductor(plan): Mark task 'Integrate ApiHookClient' as complete 2026-02-23 12:58:15 -05:00
Ed_
c7c8b89b4e test(conductor): Add integration test for ApiHookClient usage in phase completion 2026-02-23 12:56:57 -05:00
Ed_
cf19530792 conductor(plan): Mark task 'Develop ApiHookClient' as complete 2026-02-23 12:54:46 -05:00
Ed_
f4a9ff82fa feat(api-hooks): Implement ApiHookClient with comprehensive tests 2026-02-23 12:54:16 -05:00
Ed_
926cebe40a conductor(plan): Mark phase 'Phase 1: Update Workflow Definition' as complete 2026-02-23 12:49:41 -05:00
Ed_
f17c9e31b4 conductor(checkpoint): Checkpoint end of Phase 1: Update Workflow Definition 2026-02-23 12:49:14 -05:00
Ed_
1b8b236433 conductor(plan): Mark task 'Modify workflow.md' as complete 2026-02-23 12:48:45 -05:00
Ed_
2ec1ecfd50 docs(workflow): Automate phase verification protocol with API hooks 2026-02-23 12:48:09 -05:00
Ed_
a70e4e2b21 add new track 2026-02-23 12:47:22 -05:00
Ed_
ce75f0e5a1 remove active track 2026-02-23 12:40:43 -05:00
Ed_
76e263c0c9 chore(conductor): Archive track 'Add full api/hooks so that gemini cli can test, interact, and manipulate the state of the gui & program backend for automated testing.' 2026-02-23 12:40:10 -05:00
Ed_
bb4776e99c conductor(plan): Mark task 'Apply review suggestions' as complete 2026-02-23 12:38:40 -05:00
Ed_
dc64493f42 fix(conductor): Apply review suggestions for track 'Add full api/hooks so that gemini cli can test, interact, and manipulate the state of the gui & program backend for automated testing.' 2026-02-23 12:38:29 -05:00
Ed_
0070f61a40 chore(conductor): Mark track 'Add full api/hooks so that gemini cli can test, interact, and manipulate the state of the gui & program backend for automated testing.' as complete 2026-02-23 12:29:11 -05:00
Ed_
d3ca0fee98 conductor(plan): Mark phase 'Phase 2: Hook Implementations and Logging' as complete 2026-02-23 12:28:43 -05:00
Ed_
eaf229e144 conductor(checkpoint): Checkpoint end of Phase 2 2026-02-23 12:27:02 -05:00
Ed_
d7281dc16e conductor(plan): Mark task 'Integrate aggressive logging for all hook invocations' as complete 2026-02-23 12:23:53 -05:00
Ed_
ef29902963 feat(api): Integrate aggressive logging for all hook invocations 2026-02-23 12:23:23 -05:00
Ed_
0d09007dc1 conductor(plan): Mark task 'Implement GUI state manipulation hooks with thread-safe queueing' as complete 2026-02-23 12:22:27 -05:00
Ed_
5f9bc193cb feat(api): Add GUI state manipulation hooks with thread-safe queueing 2026-02-23 12:21:18 -05:00
Ed_
03db4190d7 conductor(plan): Mark task 'Implement project and AI session state manipulation hooks' as complete 2026-02-23 12:18:18 -05:00
Ed_
d9d056c80d feat(api): Add project and session state manipulation hooks 2026-02-23 12:17:32 -05:00
Ed_
a65990f72b conductor(plan): Mark phase 'Phase 1: Foundation and Opt-in Mechanisms' as complete 2026-02-23 12:15:13 -05:00
Ed_
2bc7a3f0a5 conductor(checkpoint): Checkpoint end of Phase 1 2026-02-23 12:14:26 -05:00
Ed_
bf76a763c3 conductor(plan): Mark task 'Set up lightweight local IPC server...' as complete 2026-02-23 12:11:27 -05:00
Ed_
44c2585f95 feat(api): Add lightweight HTTP server for API hooks 2026-02-23 12:11:01 -05:00
Ed_
bd7ccf3a07 conductor(plan): Mark task 'Implement CLI flag/env-var to enable the hook system' as complete 2026-02-23 12:07:21 -05:00
Ed_
1306163446 feat(api): Add CLI flag and env var to enable test hooks 2026-02-23 12:06:53 -05:00
Ed_
ddf6f0e1bc chore(conductor): Add new track 'Add full api/hooks so that gemini cli can test, interact, and manipulate the state of the gui & program backend for automated testing.' 2026-02-23 11:53:12 -05:00
Ed_
d53f0e44ee chore(conductor): Add new track 'Review vendor api usage in regards to conservative context handling' 2026-02-23 11:45:26 -05:00
Ed_
fb018e1291 chore(conductor): Mark track 'Implement context visualization and memory management improvements' as complete 2026-02-23 11:38:02 -05:00
Ed_
a7639fe24e conductor(plan): Mark phase 'Phase 2: Agent Capability Configuration' as complete 2026-02-23 11:37:55 -05:00
Ed_
1ac6eb9b7f conductor(checkpoint): Checkpoint end of Phase 2 2026-02-23 11:37:12 -05:00
Ed_
d042fa95e2 conductor(plan): Mark task 'Wire tool toggles to AI provider tool declaration payload' as complete 2026-02-23 11:32:18 -05:00
Ed_
92aa33c6d3 feat(core): Wire tool toggles to AI provider tool declaration payload 2026-02-23 11:30:36 -05:00
Ed_
1677d25298 feat(ui): Add UI toggles for available tools per-project 2026-02-23 11:24:44 -05:00
Ed_
9c5fcab9e8 conductor(plan): Mark phase 'Phase 1: Context Memory and Token Visualization' as complete 2026-02-23 11:19:17 -05:00
Ed_
a88311b9fe conductor(checkpoint): Checkpoint end of Phase 1 2026-02-23 11:17:25 -05:00
Ed_
ccdba69214 conductor(plan): Mark task 'Expose history truncation controls in the Discussion panel' as complete 2026-02-23 11:04:46 -05:00
Ed_
94fe904d3f feat(ui): Expose history truncation controls in the Discussion panel 2026-02-23 11:03:00 -05:00
Ed_
9e6b740950 conductor(plan): Mark task 'Implement token usage summary widget' as complete 2026-02-23 11:00:20 -05:00
Ed_
e34ff7ef79 feat(ui): Implement token usage summary widget 2026-02-23 10:59:29 -05:00
Ed_
4479c38395 conductor(setup): Add conductor setup files 2026-02-23 10:53:20 -05:00
Ed_
243a0cc5ca trying out conductor 2026-02-23 10:51:24 -05:00
Ed_
68e895cb8a update docs 2026-02-22 17:28:07 -05:00
Ed_
b4734f4bba fix for gui 2026-02-22 17:28:00 -05:00
Ed_
8a3c2d8e21 fix to ai_client.py 2026-02-22 17:19:15 -05:00
Ed_
73fad80257 carlos patches 2026-02-22 17:03:38 -05:00
Ed_
17eebff5f8 Revert "final updates"
This reverts commit 1581380a43.
2026-02-22 12:15:49 -05:00
Ed_
1581380a43 final updates 2026-02-22 11:57:23 -05:00
Ed_
8bf95866dc fix for gemini. 2026-02-22 11:41:11 -05:00
457 changed files with 38443 additions and 6107 deletions

View File

@@ -0,0 +1,108 @@
---
description: Execute a conductor track — follow TDD workflow, delegate to Tier 3/4 workers
---
# /conductor-implement
Execute a track's implementation plan. This is a Tier 2 (Tech Lead) operation.
You maintain PERSISTENT context throughout the track — do NOT lose state.
## Startup
1. Read `.claude/commands/mma-tier2-tech-lead.md` — load your role definition and hard rules FIRST
2. Read `conductor/workflow.md` for the full task lifecycle protocol
3. Read `conductor/tech-stack.md` for technology constraints
4. Read the target track's `spec.md` and `plan.md`
5. Identify the current task: first `[ ]` or `[~]` in `plan.md`
If no track name is provided, run `/conductor-status` first and ask which track to implement.
## Task Lifecycle (per task)
Follow this EXACTLY per `conductor/workflow.md`:
### 1. Mark In Progress
Edit `plan.md`: change `[ ]``[~]` for the current task.
### 2. Research Phase (High-Signal)
Before touching code, use context-efficient tools IN THIS ORDER:
1. `py_get_code_outline` — FIRST call on any Python file. Maps functions/classes with line ranges.
2. `py_get_skeleton` — signatures + docstrings only, no bodies
3. `get_git_diff` — understand recent changes before modifying touched files
4. `Grep`/`Glob` — cross-file symbol search
5. `Read` (targeted, offset+limit only) — ONLY after outline identifies specific ranges
**NEVER** call `Read` on a full Python file >50 lines without a prior `py_get_code_outline` call.
### 3. Write Failing Tests (Red Phase — TDD)
**DELEGATE to Tier 3 Worker** — do NOT write tests yourself:
```powershell
uv run python scripts\claude_mma_exec.py --role tier3-worker "Write failing tests for: {TASK_DESCRIPTION}. Focus files: {FILE_LIST}. Spec: {RELEVANT_SPEC_EXCERPT}"
```
Run the tests. Confirm they FAIL. This is the Red phase.
### 4. Implement to Pass (Green Phase)
**DELEGATE to Tier 3 Worker**:
```powershell
uv run python scripts\claude_mma_exec.py --role tier3-worker "Implement minimum code to pass these tests: {TEST_FILE}. Focus files: {FILE_LIST}"
```
Run tests. Confirm they PASS. This is the Green phase.
### 5. Refactor (Optional)
With passing tests as safety net, refactor if needed. Rerun tests.
### 6. Verify Coverage
Use `run_powershell` MCP tool (not Bash — Bash is a mingw sandbox on Windows):
```powershell
uv run pytest --cov=. --cov-report=term-missing {TEST_FILE}
```
Target: >80% for new code.
### 7. Commit
Stage changes. Message format:
```
feat({scope}): {description}
```
### 8. Attach Git Notes
```powershell
$sha = git log -1 --format="%H"
git notes add -m "Task: {TASK_NAME}`nSummary: {CHANGES}`nFiles: {FILE_LIST}" $sha
```
### 9. Update plan.md
Change `[~]``[x]` and append first 7 chars of commit SHA:
```
[x] Task description. abc1234
```
Commit: `conductor(plan): Mark task '{TASK_NAME}' as complete`
### 10. Next Task or Phase Completion
- If more tasks in current phase: loop to step 1 with next task
- If phase complete: run `/conductor-verify`
## Error Handling
### Tier 3 delegation fails (credit limit, API error, timeout)
**STOP** — do NOT implement inline as a fallback. Ask the user:
> "Tier 3 Worker is unavailable ({reason}). Should I continue with a different provider, or wait?"
Never silently absorb Tier 3 work into Tier 2 context.
### Tests fail with large output — delegate to Tier 4 QA:
```powershell
uv run python scripts\claude_mma_exec.py --role tier4-qa "Analyze this test failure: {ERROR_SUMMARY}. Test file: {TEST_FILE}"
```
Maximum 2 fix attempts. If still failing: STOP and ask the user.
## Deviations from Tech Stack
If implementation requires something not in `tech-stack.md`:
1. **STOP** implementation
2. Update `tech-stack.md` with justification
3. Add dated note
4. Resume
## Important
- You are Tier 2 — delegate heavy implementation to Tier 3
- Maintain persistent context across the entire track
- Use Research-First Protocol before reading large files
- The plan.md is the SOURCE OF TRUTH for task state

View File

@@ -0,0 +1,174 @@
---
description: Initialize a new conductor track with spec, plan, and metadata
---
# /conductor-new-track
Create a new track in the conductor system. This is a Tier 1 (Orchestrator) operation.
The quality of the spec and plan directly determines whether Tier 3 workers can execute
without confusion. Vague specs produce vague implementations.
## Prerequisites
- Read `conductor/product.md` and `conductor/product-guidelines.md` for product alignment
- Read `conductor/tech-stack.md` for technology constraints
- Consult architecture docs in `docs/` when the track touches core systems:
- `docs/guide_architecture.md`: Threading, events, AI client, HITL mechanism
- `docs/guide_tools.md`: MCP tools, Hook API, ApiHookClient
- `docs/guide_mma.md`: Tickets, tracks, DAG engine, worker lifecycle
- `docs/guide_simulations.md`: Test framework, mock provider, verification patterns
## Steps
### 1. Gather Information
Ask the user for:
- **Track name**: descriptive, snake_case (e.g., `add_auth_system`)
- **Track type**: `feat`, `fix`, `refactor`, `chore`
- **Description**: one-line summary
- **Requirements**: functional requirements for the spec
### 2. MANDATORY: Deep Codebase Audit
**This step is what separates useful specs from useless ones.**
Before writing a single line of spec, you MUST audit the actual codebase to understand
what already exists. Use the Research-First Protocol:
1. **Map the target area**: Use `py_get_code_outline` on every file the track will touch.
Identify existing functions, classes, and their line ranges.
2. **Read key implementations**: Use `py_get_definition` on functions that are relevant
to the track's goals. Understand their signatures, data structures, and control flow.
3. **Search for existing work**: Use `Grep` to find symbols, patterns, or partial
implementations that may already address some requirements.
4. **Check recent changes**: Use `get_git_diff` on target files to understand what's
been modified recently and by which tracks.
**Output of this step**: A "Current State Audit" section listing:
- What already exists (with file:line references)
- What's missing (the actual gaps this track fills)
- What's partially implemented and needs enhancement
### 3. Create Track Directory
```
conductor/tracks/{track_name}_{YYYYMMDD}/
```
Use today's date in YYYYMMDD format.
### 4. Create metadata.json
```json
{
"track_id": "{track_name}_{YYYYMMDD}",
"type": "{feat|fix|refactor|chore}",
"status": "new",
"created_at": "{ISO8601}",
"updated_at": "{ISO8601}",
"description": "{description}"
}
```
### 5. Create index.md
```markdown
# Track {track_name}_{YYYYMMDD} Context
- [Specification](./spec.md)
- [Implementation Plan](./plan.md)
- [Metadata](./metadata.json)
```
### 6. Create spec.md — The Surgical Specification
The spec MUST include these sections:
```markdown
# Track Specification: {Title}
## Overview
{What this track delivers and WHY — 2-3 sentences max}
## Current State Audit (as of {latest_commit_sha})
### Already Implemented (DO NOT re-implement)
- **{Feature}** (`{function_name}`, {file}:{lines}): {what it does}
- ...
### Gaps to Fill (This Track's Scope)
1. **{Gap}**: {What's missing, with reference to where it should go}
2. ...
## Goals
{Numbered list — crisp, no fluff}
## Functional Requirements
### {Requirement Group}
- {Specific requirement referencing actual data structures, function names, dict keys}
- ...
## Non-Functional Requirements
- Thread safety constraints (reference guide_architecture.md if applicable)
- Performance targets
- No new dependencies unless justified
## Architecture Reference
- {Link to relevant docs/guide_*.md section}
## Out of Scope
- {Explicit exclusions}
```
**Critical rules for specs:**
- NEVER describe a feature to implement without first checking if it exists
- ALWAYS include the "Current State Audit" section with line references
- ALWAYS link to relevant architecture docs
- Reference actual variable names, dict keys, and class names from the codebase
### 7. Create plan.md — The Surgical Plan
Each task must be specific enough that a Tier 3 worker on a lightweight model
can execute it without needing to understand the overall architecture.
```markdown
# Implementation Plan: {Title}
Architecture reference: [docs/guide_architecture.md](../../docs/guide_architecture.md)
## Phase 1: {Phase Name}
Focus: {One-sentence scope}
- [ ] Task 1.1: {SURGICAL description — see rules below}
- [ ] Task 1.2: ...
- [ ] Task 1.N: Write tests for {what Phase 1 changed}
- [ ] Task 1.X: Conductor - User Manual Verification (Protocol in workflow.md)
```
**Rules for writing tasks:**
1. **Reference exact locations**: "In `_render_mma_dashboard` (gui_2.py:2700-2701)"
not "in the dashboard."
2. **Specify the API**: "Use `imgui.progress_bar(value, ImVec2(-1, 0), label)`"
not "add a progress bar."
3. **Name the data**: "Read from `self.mma_streams` dict, keys prefixed with `'Tier 3'`"
not "display the streams."
4. **Describe the change shape**: "Replace the single text box with four collapsible sections"
not "improve the display."
5. **State thread safety**: "Push via `_pending_gui_tasks` with lock" when the task
involves cross-thread data.
6. **For bug fixes**: List specific root cause candidates with code-level reasoning,
not "investigate and fix."
7. **Each phase ends with**: A test task and a verification task.
### 8. Commit
```
conductor(track): Initialize track '{track_name}'
```
## Anti-Patterns (DO NOT do these)
- **Spec that describes features without checking if they exist** → produces duplicate work
- **Task that says "implement X" without saying WHERE or HOW** → worker guesses wrong
- **Plan with no line references** → worker wastes tokens searching
- **Spec with no architecture doc links** → worker misunderstands threading/data model
- **Tasks scoped too broadly** → worker tries to do too much, fails
- **No "Current State Audit"** → entire track may be re-implementing existing code
## Important
- Do NOT start implementing — track initialization only
- Implementation is done via `/conductor-implement`
- Each task should be scoped for a single Tier 3 Worker delegation

View File

@@ -0,0 +1,46 @@
---
description: Initialize conductor context — read product docs, verify structure, report readiness
---
# /conductor-setup
Bootstrap a Claude Code session with full conductor context. Run this at session start.
## Steps
1. **Read Core Documents:**
- `conductor/index.md` — navigation hub
- `conductor/product.md` — product vision
- `conductor/product-guidelines.md` — UX/code standards
- `conductor/tech-stack.md` — technology constraints
- `conductor/workflow.md` — task lifecycle (skim; reference during implementation)
2. **Check Active Tracks:**
- List all directories in `conductor/tracks/`
- Read each `metadata.json` for status
- Read each `plan.md` for current task state
- Identify the track with `[~]` in-progress tasks
3. **Check Session Context:**
- Read `TASKS.md` if it exists — check for IN_PROGRESS or BLOCKED tasks
- Read last 3 entries in `JOURNAL.md` for recent activity
- Run `git log --oneline -10` for recent commits
4. **Report Readiness:**
Present a session startup summary:
```
## Session Ready
**Active Track:** {track name} — Phase {N}, Task: {current task description}
**Recent Activity:** {last journal entry title}
**Last Commit:** {git log -1 oneline}
Ready to:
- `/conductor-implement` — resume active track
- `/conductor-status` — full status overview
- `/conductor-new-track` — start new work
```
## Important
- This is READ-ONLY — do not modify files
- This replaces Gemini's `activate_skill mma-orchestrator` + `/conductor:setup`

View File

@@ -0,0 +1,32 @@
---
description: Show current conductor track status — active tracks, phases, pending tasks
---
# /conductor-status
Read the conductor track registry and all active tracks, then report current project state.
## Steps
1. Read `conductor/tracks.md` for the track registry
2. For each track directory in `conductor/tracks/`:
- Read `metadata.json` for status
- Read `plan.md` and count: total tasks, completed `[x]`, in-progress `[~]`, pending `[ ]`
- Identify the current phase (first phase with `[~]` or `[ ]` tasks)
3. Read `JOURNAL.md` last 3 entries for recent activity context
## Output Format
Present a summary table:
```
| Track | Status | Phase | Progress | Last SHA |
|-------|--------|-------|----------|----------|
```
Then for each in-progress track, list the specific next pending task.
## Important
- This is READ-ONLY — do not modify any files
- Report exactly what the plan.md files say
- Flag any discrepancies (e.g., metadata says "new" but plan.md has [x] tasks)

View File

@@ -0,0 +1,85 @@
---
description: Run phase completion verification — tests, coverage, checkpoint commit
---
# /conductor-verify
Execute the Phase Completion Verification and Checkpointing Protocol.
Run this when all tasks in a phase are marked `[x]`.
## Protocol
### 1. Announce
Tell the user: "Phase complete. Running verification and checkpointing protocol."
### 2. Verify Test Coverage for Phase
Find the phase scope:
- Read `plan.md` to find the previous phase's checkpoint SHA
- If no previous checkpoint: scope is all changes since first commit
- Run: `git diff --name-only {previous_checkpoint_sha} HEAD`
- For each changed code file (exclude `.json`, `.md`, `.yaml`, `.toml`):
- Check if a corresponding test file exists
- If missing: create one (analyze existing test style first)
### 3. Run Automated Tests
**ANNOUNCE the exact command before running:**
> "I will now run the automated test suite. Command: `uv run pytest --cov=. --cov-report=term-missing -x`"
Execute the command.
**If tests fail with large output:**
- Pipe output to `logs/phase_verify.log`
- Spawn Tier 4 QA for analysis:
```powershell
uv run python scripts\claude_mma_exec.py --role tier4-qa "Analyze test failures from logs/phase_verify.log"
```
- Maximum 2 fix attempts
- If still failing: **STOP**, report to user, await guidance
### 4. API Hook Verification (if applicable)
If the track involves UI changes:
- Check if GUI test hooks are available on port 8999
- Run relevant simulation tests from `tests/visual_sim_*.py`
- Log results
### 5. Present Results and WAIT
Display:
- Test results (pass/fail count)
- Coverage report
- Any verification logs
**PAUSE HERE.** Do NOT proceed without explicit user confirmation.
### 6. Create Checkpoint Commit
After user confirms:
```powershell
git add -A
git commit -m "conductor(checkpoint): Checkpoint end of Phase {N} - {Phase Name}"
```
### 7. Attach Verification Report via Git Notes
```powershell
$sha = git log -1 --format="%H"
git notes add -m "Phase Verification Report`nCommand: {test_command}`nResult: {pass/fail}`nCoverage: {percentage}`nConfirmed by: user" $sha
```
### 8. Update plan.md
Update the phase heading to include checkpoint SHA:
```markdown
## Phase N: {Name} [checkpoint: {sha_7}]
```
Commit: `conductor(plan): Mark phase '{Phase Name}' as complete`
### 9. Announce Completion
Tell the user the phase is complete with a summary of the verification report.
## Context Reset
After phase checkpointing, treat the checkpoint as ground truth.
Prior conversational context about implementation details can be dropped.
The checkpoint commit and git notes preserve the audit trail.

View File

@@ -0,0 +1,72 @@
---
description: Tier 1 Orchestrator — product alignment, high-level planning, track initialization
---
STRICT SYSTEM DIRECTIVE: You are a Tier 1 Orchestrator. Focused on product alignment, high-level planning, and track initialization. ONLY output the requested text. No pleasantries.
# MMA Tier 1: Orchestrator
## Primary Context Documents
Read at session start: `conductor/product.md`, `conductor/product-guidelines.md`
## Architecture Fallback
When planning tracks that touch core systems, consult the deep-dive docs:
- `docs/guide_architecture.md`: Thread domains, event system, AI client, HITL mechanism, frame-sync action catalog
- `docs/guide_tools.md`: MCP Bridge security, 26-tool inventory, Hook API endpoints, ApiHookClient
- `docs/guide_mma.md`: Ticket/Track data structures, DAG engine, ConductorEngine, worker lifecycle
- `docs/guide_simulations.md`: live_gui fixture, Puppeteer pattern, mock provider, verification patterns
## Responsibilities
- Maintain alignment with the product guidelines and definition
- Define track boundaries and initialize new tracks (`/conductor-new-track`)
- Set up the project environment (`/conductor-setup`)
- Delegate track execution to the Tier 2 Tech Lead
## The Surgical Methodology
When creating or refining tracks, follow this protocol to produce specs that
lesser-reasoning models can execute without confusion:
### 1. Audit Before Specifying
NEVER write a spec without first reading the actual code. Use `py_get_code_outline`,
`py_get_definition`, `Grep`, and `get_git_diff` to build a map of what exists.
Document existing implementations with file:line references in a "Current State Audit"
section. This prevents specs that ask to re-implement existing features.
### 2. Identify Gaps, Not Features
The spec should focus on what's MISSING, not what the track "will build."
Frame requirements as: "The existing `_render_mma_dashboard` (gui_2.py:2633-2724)
has a token usage table but no cost estimation column. Add cost tracking."
Not: "Build a metrics dashboard with token and cost tracking."
### 3. Write Worker-Ready Tasks
Each task in the plan must be executable by a Tier 3 worker on a lightweight model
(gemini-2.5-flash-lite) without needing to understand the overall architecture.
This means every task must specify:
- **WHERE**: Exact file and line range to modify
- **WHAT**: The specific change (add function, modify dict, extend table)
- **HOW**: Which API calls, data structures, or patterns to use
- **SAFETY**: Thread-safety constraints if cross-thread data is involved
### 4. Reference Architecture Docs
Every spec should link to the relevant `docs/guide_*.md` section so implementing
agents have a fallback when confused about threading, data flow, or module interactions.
### 5. Map Dependencies
Explicitly state which tracks must complete before this one, and which tracks
this one blocks. Include execution order in the spec.
### 6. Root Cause Analysis (for fix tracks)
Don't write "investigate and fix X." Instead, read the code, trace the data flow,
and list specific root cause candidates with code-level reasoning:
"Candidate 1: `_queue_put` (line 138) uses `asyncio.run_coroutine_threadsafe` but
the `else` branch uses `put_nowait` which is NOT thread-safe from a thread-pool thread."
## Limitations
- Read-only tools only: Read, Glob, Grep, WebFetch, WebSearch, Bash (read-only ops)
- Do NOT execute tracks or implement features
- Do NOT write code or edit files (except track spec/plan/metadata)
- Do NOT perform low-level bug fixing
- Keep context strictly focused on product definitions and high-level strategy
- To delegate track execution: instruct the human operator to run:
`uv run python scripts\claude_mma_exec.py --role tier2-tech-lead "[PROMPT]"`

View File

@@ -0,0 +1,74 @@
---
description: Tier 2 Tech Lead — track execution, architectural oversight, delegation to Tier 3/4
---
STRICT SYSTEM DIRECTIVE: You are a Tier 2 Tech Lead. Focused on architectural design and track execution. ONLY output the requested text. No pleasantries.
# MMA Tier 2: Tech Lead
## Primary Context Documents
Read at session start: `conductor/tech-stack.md`, `conductor/workflow.md`
## Responsibilities
- Manage the execution of implementation tracks (`/conductor-implement`)
- Ensure alignment with `tech-stack.md` and project architecture
- Break down tasks into specific technical steps for Tier 3 Workers
- Maintain PERSISTENT context throughout a track's implementation phase (NO Context Amnesia)
- Review implementations and coordinate bug fixes via Tier 4 QA
- **CRITICAL: ATOMIC PER-TASK COMMITS**: You MUST commit your progress on a per-task basis. Immediately after a task is verified successfully, you must stage the changes, commit them, attach the git note summary, and update `plan.md` before moving to the next task. Do NOT batch multiple tasks into a single commit.
- **Meta-Level Sanity Check**: After completing a track (or upon explicit request), perform a codebase sanity check. Run `uv run ruff check .` and `uv run mypy --explicit-package-bases .` to ensure Tier 3 Workers haven't degraded static analysis constraints. Identify broken simulation tests and append them to a tech debt track or fix them immediately.
## Delegation Commands (PowerShell)
```powershell
# Spawn Tier 3 Worker for implementation tasks
uv run python scripts\claude_mma_exec.py --role tier3-worker "[PROMPT]"
# Spawn Tier 4 QA Agent for error analysis
uv run python scripts\claude_mma_exec.py --role tier4-qa "[PROMPT]"
```
### @file Syntax for Tier 3 Context Injection
`@filepath` anywhere in the prompt string is detected by `claude_mma_exec.py` and the file is automatically inlined into the Tier 3 context. Use this so Tier 3 has what it needs WITHOUT Tier 2 reading those files first.
```powershell
# Example: Tier 3 gets api_hook_client.py and the styleguide injected automatically
uv run python scripts\claude_mma_exec.py --role tier3-worker "Apply type hints to @api_hook_client.py following @conductor/code_styleguides/python.md. ..."
```
## Tool Use Hierarchy (MANDATORY — enforced order)
Claude has access to all tools and will default to familiar ones. This hierarchy OVERRIDES that default.
**For any Python file investigation, use in this order:**
1. `py_get_code_outline` — structure map (functions, classes, line ranges). Use this FIRST.
2. `py_get_skeleton` — signatures + docstrings, no bodies
3. `get_file_summary` — high-level prose summary
4. `py_get_definition` / `py_get_signature` — targeted symbol lookup
5. `Grep` / `Glob` — cross-file symbol search and pattern matching
6. `Read` (targeted, with offset/limit) — ONLY after outline identifies specific line ranges
**`run_powershell` (MCP tool)** — PRIMARY shell execution on Windows. Use for: git, tests, scan scripts, any shell command. This is native PowerShell, not bash/mingw.
**Bash** — LAST RESORT only when MCP server is not running. Bash runs in a mingw sandbox on Windows and may produce no output. Prefer `run_powershell` for everything.
## Hard Rules (Non-Negotiable)
- **NEVER** call `Read` on a file >50 lines without calling `py_get_code_outline` or `py_get_skeleton` first.
- **NEVER** write implementation code, refactor code, type hint code, or test code inline in this context. If it goes into the codebase, Tier 3 writes it.
- **NEVER** write or run inline Python scripts via Bash. If a script is needed, it already exists or Tier 3 creates it.
- **NEVER** process raw bash output for large outputs inline — write to a file and Read, or delegate to Tier 4 QA.
- **ALWAYS** use `@file` injection in Tier 3 prompts rather than reading and summarizing files yourself.
## Refactor-Heavy Tracks (Type Hints, Style Sweeps)
For tracks with no new logic — only mechanical code changes (type hints, style fixes, renames):
- **No TDD cycle required.** Skip Red/Green phases. The verification is: scan report shows 0 remaining items.
- Tier 2 role: scope the batch, write a precise Tier 3 prompt, delegate, verify with scan script.
- Batch by file group. One Tier 3 call per group (e.g., all scripts/, all simulation/).
- Verification command: `uv run python scripts\scan_all_hints.py` then read `scan_report.txt`
## Limitations
- Do NOT perform heavy implementation work directly — delegate to Tier 3
- Do NOT write test or implementation code directly
- For large error logs, always spawn Tier 4 QA rather than reading raw stderr

View File

@@ -0,0 +1,22 @@
---
description: Tier 3 Worker — stateless TDD implementation, surgical code changes
---
STRICT SYSTEM DIRECTIVE: You are a stateless Tier 3 Worker (Contributor). Your goal is to implement specific code changes or tests based on the provided task. You have access to tools for reading and writing files (Read, Write, Edit), codebase investigation (Glob, Grep), version control (Bash git commands), and web tools (WebFetch, WebSearch). You CAN execute PowerShell scripts via Bash for verification and testing. Follow TDD and return success status or code changes. No pleasantries, no conversational filler.
# MMA Tier 3: Worker
## Context Model: Context Amnesia
Treat each invocation as starting from zero. Use ONLY what is provided in this prompt plus files you explicitly read during this session. Do not reference prior conversation history.
## Responsibilities
- Implement code strictly according to the provided prompt and specifications
- Write failing tests FIRST (Red phase), then implement code to pass them (Green phase)
- Ensure all changes are minimal, surgical, and conform to the requested standards
- Utilize tool access (Read, Write, Edit, Glob, Grep, Bash) to implement and verify
## Limitations
- No architectural decisions — if ambiguous, pick the minimal correct approach and note the assumption
- No modifications to unrelated files beyond the immediate task scope
- Stateless — always assume a fresh context per invocation
- Rely on dependency skeletons provided in the prompt for understanding module interfaces

View File

@@ -0,0 +1,30 @@
---
description: Tier 4 QA Agent — stateless error analysis, log summarization, no fixes
---
STRICT SYSTEM DIRECTIVE: You are a stateless Tier 4 QA Agent. Your goal is to analyze errors, summarize logs, or verify tests. Read-only access only. Do NOT implement fixes. Do NOT modify any files. ONLY output the requested analysis. No pleasantries.
# MMA Tier 4: QA Agent
## Context Model: Context Amnesia
Stateless — treat each invocation as a fresh context. Use only what is provided in this prompt and files you explicitly read.
## Responsibilities
- Compress large stack traces or log files into concise, actionable summaries
- Identify the root cause of test failures or runtime errors
- Provide a brief, technical description of the required fix (description only — NOT the implementation)
- Utilize diagnostic tools (Read, Glob, Grep, Bash read-only) to verify failures
## Output Format
```
ROOT CAUSE: [one sentence]
AFFECTED FILE: [path:line if identifiable]
RECOMMENDED FIX: [one sentence description for Tier 2 to action]
```
## Limitations
- Do NOT implement the fix directly
- Do NOT write or modify any files
- Ensure output is extremely brief and focused
- Always operate statelessly — assume fresh context each invocation

3
.claude/settings.json Normal file
View File

@@ -0,0 +1,3 @@
{
"outputStyle": "default"
}

View File

@@ -0,0 +1,21 @@
{
"permissions": {
"allow": [
"mcp__manual-slop__run_powershell",
"mcp__manual-slop__py_get_definition",
"mcp__manual-slop__read_file",
"mcp__manual-slop__py_get_code_outline",
"mcp__manual-slop__get_file_slice",
"mcp__manual-slop__py_find_usages",
"mcp__manual-slop__set_file_slice",
"mcp__manual-slop__py_check_syntax",
"mcp__manual-slop__get_file_summary",
"mcp__manual-slop__get_tree",
"mcp__manual-slop__list_directory"
]
},
"enableAllProjectMcpServers": true,
"enabledMcpjsonServers": [
"manual-slop"
]
}

BIN
.coverage Normal file

Binary file not shown.

21
.dockerignore Normal file
View File

@@ -0,0 +1,21 @@
.venv
__pycache__
*.pyc
*.pyo
*.pyd
.git
.gitignore
logs
gallery
md_gen
credentials.toml
manual_slop.toml
manual_slop_history.toml
manualslop_layout.ini
dpg_layout.ini
.pytest_cache
scripts/generated
.gemini
conductor/archive
.editorconfig
*.log

View File

@@ -2,7 +2,7 @@ root = true
[*.py]
indent_style = space
indent_size = 2
indent_size = 1
[*.s]
indent_style = tab

View File

@@ -0,0 +1,100 @@
---
name: tier1-orchestrator
description: Tier 1 Orchestrator for product alignment and high-level planning.
model: gemini-3.1-pro-preview
tools:
- read_file
- list_directory
- discovered_tool_search_files
- grep_search
- discovered_tool_get_file_summary
- discovered_tool_get_python_skeleton
- discovered_tool_get_code_outline
- discovered_tool_get_git_diff
- discovered_tool_web_search
- discovered_tool_fetch_url
- activate_skill
- discovered_tool_run_powershell
- discovered_tool_py_find_usages
- discovered_tool_py_get_imports
- discovered_tool_py_check_syntax
- discovered_tool_py_get_hierarchy
- discovered_tool_py_get_docstring
- discovered_tool_get_tree
- discovered_tool_py_get_definition
---
STRICT SYSTEM DIRECTIVE: You are a Tier 1 Orchestrator.
Focused on product alignment, high-level planning, and track initialization.
ONLY output the requested text. No pleasantries.
## Architecture Fallback
When planning tracks that touch core systems, consult the deep-dive docs:
- `docs/guide_architecture.md`: Thread domains, event system, AI client, HITL mechanism, frame-sync action catalog
- `docs/guide_tools.md`: MCP Bridge security, 26-tool inventory, Hook API endpoints, ApiHookClient
- `docs/guide_mma.md`: Ticket/Track data structures, DAG engine, ConductorEngine, worker lifecycle
- `docs/guide_simulations.md`: live_gui fixture, Puppeteer pattern, mock provider, verification patterns
## The Surgical Methodology
When creating or refining tracks, you MUST follow this protocol:
### 1. MANDATORY: Audit Before Specifying
NEVER write a spec without first reading the actual code using your tools.
Use `get_code_outline`, `py_get_definition`, `grep_search`, and `get_git_diff`
to build a map of what exists. Document existing implementations with file:line
references in a "Current State Audit" section in the spec.
**WHY**: Previous track specs asked to implement features that already existed
(Track Browser, DAG tree, approval dialogs) because no code audit was done first.
This wastes entire implementation phases.
### 2. Identify Gaps, Not Features
Frame requirements around what's MISSING relative to what exists:
GOOD: "The existing `_render_mma_dashboard` (gui_2.py:2633-2724) has a token
usage table but no cost estimation column."
BAD: "Build a metrics dashboard with token and cost tracking."
### 3. Write Worker-Ready Tasks
Each plan task must be executable by a Tier 3 worker on gemini-2.5-flash-lite
without understanding the overall architecture. Every task specifies:
- **WHERE**: Exact file and line range (`gui_2.py:2700-2701`)
- **WHAT**: The specific change (add function, modify dict, extend table)
- **HOW**: Which API calls or patterns (`imgui.progress_bar(...)`, `imgui.collapsing_header(...)`)
- **SAFETY**: Thread-safety constraints if cross-thread data is involved
### 4. For Bug Fix Tracks: Root Cause Analysis
Don't write "investigate and fix." Read the code, trace the data flow, list
specific root cause candidates with code-level reasoning.
### 5. Reference Architecture Docs
Link to relevant `docs/guide_*.md` sections in every spec so implementing
agents have a fallback for threading, data flow, or module interactions.
### 6. Map Dependencies Between Tracks
State execution order and blockers explicitly in metadata.json and spec.
## Spec Template (REQUIRED sections)
```
# Track Specification: {Title}
## Overview
## Current State Audit (as of {commit_sha})
### Already Implemented (DO NOT re-implement)
### Gaps to Fill (This Track's Scope)
## Goals
## Functional Requirements
## Non-Functional Requirements
## Architecture Reference
## Out of Scope
```
## Plan Template (REQUIRED format)
```
## Phase N: {Name}
Focus: {One-sentence scope}
- [ ] Task N.1: {Surgical description with file:line refs and API calls}
- [ ] Task N.2: ...
- [ ] Task N.N: Write tests for Phase N changes
- [ ] Task N.X: Conductor - User Manual Verification (Protocol in workflow.md)
```

View File

@@ -0,0 +1,29 @@
---
name: tier2-tech-lead
description: Tier 2 Tech Lead for architectural design and execution.
model: gemini-3-flash-preview
tools:
- read_file
- write_file
- replace
- list_directory
- discovered_tool_search_files
- grep_search
- discovered_tool_get_file_summary
- discovered_tool_get_python_skeleton
- discovered_tool_get_code_outline
- discovered_tool_get_git_diff
- discovered_tool_web_search
- discovered_tool_fetch_url
- activate_skill
- discovered_tool_run_powershell
- discovered_tool_py_find_usages
- discovered_tool_py_get_imports
- discovered_tool_py_check_syntax
- discovered_tool_py_get_hierarchy
- discovered_tool_py_get_docstring
- discovered_tool_get_tree
---
STRICT SYSTEM DIRECTIVE: You are a Tier 2 Tech Lead.
Focused on architectural design and track execution.
ONLY output the requested text. No pleasantries.

View File

@@ -0,0 +1,31 @@
---
name: tier3-worker
description: Stateless Tier 3 Worker for code implementation and TDD.
model: gemini-3-flash-preview
tools:
- read_file
- write_file
- replace
- list_directory
- discovered_tool_search_files
- grep_search
- discovered_tool_get_file_summary
- discovered_tool_get_python_skeleton
- discovered_tool_get_code_outline
- discovered_tool_get_git_diff
- discovered_tool_web_search
- discovered_tool_fetch_url
- activate_skill
- discovered_tool_run_powershell
- discovered_tool_py_find_usages
- discovered_tool_py_get_imports
- discovered_tool_py_check_syntax
- discovered_tool_py_get_hierarchy
- discovered_tool_py_get_docstring
- discovered_tool_get_tree
---
STRICT SYSTEM DIRECTIVE: You are a stateless Tier 3 Worker (Contributor).
Your goal is to implement specific code changes or tests based on the provided task.
You have access to tools for reading and writing files, codebase investigation, and web tools.
You CAN execute PowerShell scripts or run shell commands via discovered_tool_run_powershell for verification and testing.
Follow TDD and return success status or code changes. No pleasantries, no conversational filler.

View File

@@ -0,0 +1,29 @@
---
name: tier4-qa
description: Stateless Tier 4 QA Agent for log analysis and diagnostics.
model: gemini-2.5-flash-lite
tools:
- read_file
- list_directory
- discovered_tool_search_files
- grep_search
- discovered_tool_get_file_summary
- discovered_tool_get_python_skeleton
- discovered_tool_get_code_outline
- discovered_tool_get_git_diff
- discovered_tool_web_search
- discovered_tool_fetch_url
- activate_skill
- discovered_tool_run_powershell
- discovered_tool_py_find_usages
- discovered_tool_py_get_imports
- discovered_tool_py_check_syntax
- discovered_tool_py_get_hierarchy
- discovered_tool_py_get_docstring
- discovered_tool_get_tree
---
STRICT SYSTEM DIRECTIVE: You are a stateless Tier 4 QA Agent.
Your goal is to analyze errors, summarize logs, or verify tests.
You have access to tools for reading files, exploring the codebase, and web tools.
You CAN execute PowerShell scripts or run shell commands via discovered_tool_run_powershell for diagnostics.
ONLY output the requested analysis. No pleasantries.

View File

@@ -0,0 +1,269 @@
[[rule]]
toolName = "discovered_tool_fetch_url"
decision = "allow"
priority = 100
description = "Allow discovered fetch_url tool."
[[rule]]
toolName = "discovered_tool_get_file_slice"
decision = "allow"
priority = 100
description = "Allow discovered get_file_slice tool."
[[rule]]
toolName = "discovered_tool_get_file_summary"
decision = "allow"
priority = 100
description = "Allow discovered get_file_summary tool."
[[rule]]
toolName = "discovered_tool_get_git_diff"
decision = "allow"
priority = 100
description = "Allow discovered get_git_diff tool."
[[rule]]
toolName = "discovered_tool_get_tree"
decision = "allow"
priority = 100
description = "Allow discovered get_tree tool."
[[rule]]
toolName = "discovered_tool_get_ui_performance"
decision = "allow"
priority = 100
description = "Allow discovered get_ui_performance tool."
[[rule]]
toolName = "discovered_tool_list_directory"
decision = "allow"
priority = 100
description = "Allow discovered list_directory tool."
[[rule]]
toolName = "discovered_tool_py_check_syntax"
decision = "allow"
priority = 100
description = "Allow discovered py_check_syntax tool."
[[rule]]
toolName = "discovered_tool_py_find_usages"
decision = "allow"
priority = 100
description = "Allow discovered py_find_usages tool."
[[rule]]
toolName = "discovered_tool_py_get_class_summary"
decision = "allow"
priority = 100
description = "Allow discovered py_get_class_summary tool."
[[rule]]
toolName = "discovered_tool_py_get_code_outline"
decision = "allow"
priority = 100
description = "Allow discovered py_get_code_outline tool."
[[rule]]
toolName = "discovered_tool_py_get_definition"
decision = "allow"
priority = 100
description = "Allow discovered py_get_definition tool."
[[rule]]
toolName = "discovered_tool_py_get_docstring"
decision = "allow"
priority = 100
description = "Allow discovered py_get_docstring tool."
[[rule]]
toolName = "discovered_tool_py_get_hierarchy"
decision = "allow"
priority = 100
description = "Allow discovered py_get_hierarchy tool."
[[rule]]
toolName = "discovered_tool_py_get_imports"
decision = "allow"
priority = 100
description = "Allow discovered py_get_imports tool."
[[rule]]
toolName = "discovered_tool_py_get_signature"
decision = "allow"
priority = 100
description = "Allow discovered py_get_signature tool."
[[rule]]
toolName = "discovered_tool_py_get_skeleton"
decision = "allow"
priority = 100
description = "Allow discovered py_get_skeleton tool."
[[rule]]
toolName = "discovered_tool_py_get_var_declaration"
decision = "allow"
priority = 100
description = "Allow discovered py_get_var_declaration tool."
[[rule]]
toolName = "discovered_tool_py_set_signature"
decision = "allow"
priority = 100
description = "Allow discovered py_set_signature tool."
[[rule]]
toolName = "discovered_tool_py_set_var_declaration"
decision = "allow"
priority = 100
description = "Allow discovered py_set_var_declaration tool."
[[rule]]
toolName = "discovered_tool_py_update_definition"
decision = "allow"
priority = 100
description = "Allow discovered py_update_definition tool."
[[rule]]
toolName = "discovered_tool_read_file"
decision = "allow"
priority = 100
description = "Allow discovered read_file tool."
[[rule]]
toolName = "discovered_tool_run_powershell"
decision = "allow"
priority = 100
description = "Allow discovered run_powershell tool."
[[rule]]
toolName = "discovered_tool_search_files"
decision = "allow"
priority = 100
description = "Allow discovered search_files tool."
[[rule]]
toolName = "discovered_tool_set_file_slice"
decision = "allow"
priority = 100
description = "Allow discovered set_file_slice tool."
[[rule]]
toolName = "discovered_tool_web_search"
decision = "allow"
priority = 100
description = "Allow discovered web_search tool."
[[rule]]
toolName = "run_powershell"
decision = "allow"
priority = 100
description = "Allow the base run_powershell tool with maximum priority."
[[rule]]
toolName = "activate_skill"
decision = "allow"
priority = 990
description = "Allow activate_skill."
[[rule]]
toolName = "ask_user"
decision = "ask_user"
priority = 990
description = "Allow ask_user."
[[rule]]
toolName = "cli_help"
decision = "allow"
priority = 990
description = "Allow cli_help."
[[rule]]
toolName = "codebase_investigator"
decision = "allow"
priority = 990
description = "Allow codebase_investigator."
[[rule]]
toolName = "replace"
decision = "allow"
priority = 990
description = "Allow replace."
[[rule]]
toolName = "glob"
decision = "allow"
priority = 990
description = "Allow glob."
[[rule]]
toolName = "google_web_search"
decision = "allow"
priority = 990
description = "Allow google_web_search."
[[rule]]
toolName = "read_file"
decision = "allow"
priority = 990
description = "Allow read_file."
[[rule]]
toolName = "list_directory"
decision = "allow"
priority = 990
description = "Allow list_directory."
[[rule]]
toolName = "save_memory"
decision = "allow"
priority = 990
description = "Allow save_memory."
[[rule]]
toolName = "grep_search"
decision = "allow"
priority = 990
description = "Allow grep_search."
[[rule]]
toolName = "run_shell_command"
decision = "allow"
priority = 990
description = "Allow run_shell_command."
[[rule]]
toolName = "tier1-orchestrator"
decision = "allow"
priority = 990
description = "Allow tier1-orchestrator."
[[rule]]
toolName = "tier2-tech-lead"
decision = "allow"
priority = 990
description = "Allow tier2-tech-lead."
[[rule]]
toolName = "tier3-worker"
decision = "allow"
priority = 990
description = "Allow tier3-worker."
[[rule]]
toolName = "tier4-qa"
decision = "allow"
priority = 990
description = "Allow tier4-qa."
[[rule]]
toolName = "web_fetch"
decision = "allow"
priority = 990
description = "Allow web_fetch."
[[rule]]
toolName = "write_file"
decision = "allow"
priority = 990
description = "Allow write_file."

34
.gemini/settings.json Normal file
View File

@@ -0,0 +1,34 @@
{
"workspace_folders": [
"C:/projects/manual_slop",
"C:/projects/gencpp",
"C:/projects/VEFontCache-Odin"
],
"experimental": {
"enableAgents": true
},
"tools": {
"whitelist": [
"*"
],
"discoveryCommand": "powershell.exe -NoProfile -Command \"Get-Content .gemini/tools.json -Raw\"",
"callCommand": "scripts\\tool_call.exe"
},
"hooks": {
"BeforeTool": [
{
"matcher": "*",
"hooks": [
{
"name": "manual-slop-bridge",
"type": "command",
"command": "python C:/projects/manual_slop/scripts/cli_tool_bridge.py"
}
]
}
]
},
"hooksConfig": {
"enabled": true
}
}

View File

@@ -0,0 +1 @@
C:/projects/manual_slop/mma-orchestrator

View File

@@ -0,0 +1,40 @@
---
name: mma-tier1-orchestrator
description: Focused on product alignment, high-level planning, and track initialization.
---
# MMA Tier 1: Orchestrator
You are the Tier 1 Orchestrator. Your role is to oversee the product direction and manage project/track initialization within the Conductor framework.
## Primary Context Documents
Read at session start: `conductor/product.md`, `conductor/product-guidelines.md`
## Architecture Fallback
When planning tracks that touch core systems, consult:
- `docs/guide_architecture.md`: Threading, events, AI client, HITL, frame-sync action catalog
- `docs/guide_tools.md`: MCP Bridge, Hook API endpoints, ApiHookClient methods
- `docs/guide_mma.md`: Ticket/Track structures, DAG engine, ConductorEngine, worker lifecycle
- `docs/guide_simulations.md`: live_gui fixture, Puppeteer pattern, mock provider
## Responsibilities
- Maintain alignment with the product guidelines and definition.
- Define track boundaries and initialize new tracks (`/conductor:newTrack`).
- Set up the project environment (`/conductor:setup`).
- Delegate track execution to the Tier 2 Tech Lead.
## Surgical Spec Protocol (MANDATORY)
When creating or refining tracks, you MUST:
1. **Audit** the codebase with `get_code_outline`, `py_get_definition`, `grep_search` before writing any spec. Document what exists with file:line refs.
2. **Spec gaps, not features** — frame requirements relative to what already exists.
3. **Write worker-ready tasks** — each specifies WHERE (file:line), WHAT (change), HOW (API call), SAFETY (thread constraints).
4. **For fix tracks** — list root cause candidates with code-level reasoning.
5. **Reference architecture docs** — link to relevant `docs/guide_*.md` sections.
6. **Map dependencies** — state execution order and blockers between tracks.
See `activate_skill mma-orchestrator` for the full protocol and examples.
## Limitations
- Do not execute tracks or implement features.
- Do not write code or perform low-level bug fixing.
- Keep context strictly focused on product definitions and high-level strategy.

View File

@@ -0,0 +1,39 @@
---
name: mma-tier2-tech-lead
description: Focused on track execution, architectural design, and implementation oversight.
---
# MMA Tier 2: Tech Lead
You are the Tier 2 Tech Lead. Your role is to manage the implementation of tracks (`/conductor:implement`), ensure architectural integrity, and oversee the work of Tier 3 and 4 sub-agents.
## Architecture Fallback
When implementing tracks, consult these docs for threading, data flow, and module interactions:
- `docs/guide_architecture.md`: Thread domains, `_process_pending_gui_tasks` action catalog, AI client architecture, HITL blocking flow
- `docs/guide_tools.md`: MCP tools, Hook API endpoints, session logging
- `docs/guide_mma.md`: Ticket/Track structures, DAG engine, worker lifecycle
- `docs/guide_simulations.md`: Testing patterns, mock provider
## Responsibilities
- Manage the execution of implementation tracks.
- Ensure alignment with `tech-stack.md` and project architecture.
- Break down tasks into specific technical steps for Tier 3 Workers.
- Maintain persistent context throughout a track's implementation phase (No Context Amnesia).
- Review implementations and coordinate bug fixes via Tier 4 QA.
- **CRITICAL: ATOMIC PER-TASK COMMITS**: You MUST commit your progress on a per-task basis. Immediately after a task is verified successfully, you must stage the changes, commit them, attach the git note summary, and update `plan.md` before moving to the next task. Do NOT batch multiple tasks into a single commit.
- **Meta-Level Sanity Check**: After completing a track (or upon explicit request), perform a codebase sanity check. Run `uv run ruff check .` and `uv run mypy --explicit-package-bases .` to ensure Tier 3 Workers haven't degraded static analysis constraints. Identify broken simulation tests and append them to a tech debt track or fix them immediately.
## Surgical Delegation Protocol
When delegating to Tier 3 workers, construct prompts that specify:
- **WHERE**: Exact file and line range to modify
- **WHAT**: The specific change (add function, modify dict, extend table)
- **HOW**: Which API calls, data structures, or patterns to use
- **SAFETY**: Thread-safety constraints (e.g., "push via `_pending_gui_tasks` with lock")
Example prompt: `"In gui_2.py, modify _render_mma_dashboard (lines 2685-2699). Extend the token usage table from 3 to 5 columns by adding 'Model' and 'Est. Cost'. Use imgui.table_setup_column(). Import cost_tracker. Use 1-space indentation."`
## Limitations
- Do not perform heavy implementation work directly; delegate to Tier 3.
- Delegate implementation tasks to Tier 3 Workers using `uv run python scripts/mma_exec.py --role tier3-worker "[PROMPT]"`.
- For error analysis of large logs, use `uv run python scripts/mma_exec.py --role tier4-qa "[PROMPT]"`.
- Minimize full file reads for large modules; rely on "Skeleton Views" and git diffs.

View File

@@ -0,0 +1,20 @@
---
name: mma-tier3-worker
description: Focused on TDD implementation, surgical code changes, and following specific specs.
---
# MMA Tier 3: Worker
You are the Tier 3 Worker. Your role is to implement specific, scoped technical requirements, follow Test-Driven Development (TDD), and make surgical code modifications. You operate in a stateless manner (Context Amnesia).
## Responsibilities
- Implement code strictly according to the provided prompt and specifications.
- Write failing tests first, then implement the code to pass them.
- Ensure all changes are minimal, functional, and conform to the requested standards.
- Utilize provided tool access (read_file, write_file, etc.) to perform implementation and verification.
## Limitations
- Do not make architectural decisions.
- Do not modify unrelated files beyond the immediate task scope.
- Always operate statelessly; assume each task starts with a clean context.
- Rely on "Skeleton Views" provided by Tier 2/Orchestrator for understanding dependencies.

View File

@@ -0,0 +1,19 @@
---
name: mma-tier4-qa
description: Focused on test analysis, error summarization, and bug reproduction.
---
# MMA Tier 4: QA Agent
You are the Tier 4 QA Agent. Your role is to analyze error logs, summarize tracebacks, and help diagnose issues efficiently. You operate in a stateless manner (Context Amnesia).
## Responsibilities
- Compress large stack traces or log files into concise, actionable summaries.
- Identify the root cause of test failures or runtime errors.
- Provide a brief, technical description of the required fix.
- Utilize provided diagnostic and exploration tools to verify failures.
## Limitations
- Do not implement the fix directly.
- Ensure your output is extremely brief and focused.
- Always operate statelessly; assume each analysis starts with a clean context.

BIN
.gemini/tools.json Normal file

Binary file not shown.

View File

@@ -0,0 +1,17 @@
{
"name": "fetch_url",
"description": "Fetch the full text content of a URL (stripped of HTML tags).",
"parameters": {
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "The full URL to fetch."
}
},
"required": [
"url"
]
},
"command": "python scripts/tool_call.py fetch_url"
}

View File

@@ -0,0 +1,17 @@
{
"name": "get_file_summary",
"description": "Get a compact heuristic summary of a file without reading its full content. For Python: imports, classes, methods, functions, constants. For TOML: table keys. For Markdown: headings. Others: line count + preview. Use this before read_file to decide if you need the full content.",
"parameters": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Absolute or relative path to the file to summarise."
}
},
"required": [
"path"
]
},
"command": "python scripts/tool_call.py get_file_summary"
}

View File

@@ -0,0 +1,25 @@
{
"name": "get_git_diff",
"description": "Returns the git diff for a file or directory. Use this to review changes efficiently without reading entire files.",
"parameters": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Path to the file or directory."
},
"base_rev": {
"type": "string",
"description": "Base revision (e.g. 'HEAD', 'HEAD~1', or a commit hash). Defaults to 'HEAD'."
},
"head_rev": {
"type": "string",
"description": "Head revision (optional)."
}
},
"required": [
"path"
]
},
"command": "python scripts/tool_call.py get_git_diff"
}

View File

@@ -0,0 +1,17 @@
{
"name": "py_get_code_outline",
"description": "Get a hierarchical outline of a code file. This returns classes, functions, and methods with their line ranges and brief docstrings. Use this to quickly map out a file's structure before reading specific sections.",
"parameters": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Path to the code file (currently supports .py)."
}
},
"required": [
"path"
]
},
"command": "python scripts/tool_call.py py_get_code_outline"
}

View File

@@ -0,0 +1,17 @@
{
"name": "py_get_skeleton",
"description": "Get a skeleton view of a Python file. This returns all classes and function signatures with their docstrings, but replaces function bodies with '...'. Use this to understand module interfaces without reading the full implementation.",
"parameters": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Path to the .py file."
}
},
"required": [
"path"
]
},
"command": "python scripts/tool_call.py py_get_skeleton"
}

View File

@@ -0,0 +1,17 @@
{
"name": "run_powershell",
"description": "Run a PowerShell script within the project base_dir. Use this to create, edit, rename, or delete files and directories. stdout and stderr are returned to you as the result.",
"parameters": {
"type": "object",
"properties": {
"script": {
"type": "string",
"description": "The PowerShell script to execute."
}
},
"required": [
"script"
]
},
"command": "python scripts/tool_call.py run_powershell"
}

View File

@@ -0,0 +1,22 @@
{
"name": "search_files",
"description": "Search for files matching a glob pattern within an allowed directory. Supports recursive patterns like '**/*.py'. Use this to find files by extension or name pattern.",
"parameters": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Absolute path to the directory to search within."
},
"pattern": {
"type": "string",
"description": "Glob pattern, e.g. '*.py', '**/*.toml', 'src/**/*.rs'."
}
},
"required": [
"path",
"pattern"
]
},
"command": "python scripts/tool_call.py search_files"
}

View File

@@ -0,0 +1,17 @@
{
"name": "web_search",
"description": "Search the web using DuckDuckGo. Returns the top 5 search results with titles, URLs, and snippets.",
"parameters": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "The search query."
}
},
"required": [
"query"
]
},
"command": "python scripts/tool_call.py web_search"
}

10
.gitignore vendored
View File

@@ -1,8 +1,16 @@
credentials.toml
credentials.toml
__pycache__
uv.lock
colorforth_bootslop_002.md
md_gen
scripts/generated
logs
logs/sessions/
logs/agents/
logs/errors/
tests/artifacts/
dpg_layout.ini
.env
.coverage
tests/temp_workspace
.mypy_cache

14
.mcp.json Normal file
View File

@@ -0,0 +1,14 @@
{
"mcpServers": {
"manual-slop": {
"type": "stdio",
"command": "C:\\Users\\Ed\\scoop\\apps\\uv\\current\\uv.exe",
"args": [
"run",
"python",
"C:\\projects\\manual_slop\\scripts\\mcp_server.py"
],
"env": {}
}
}
}

58
ARCHITECTURE.md Normal file
View File

@@ -0,0 +1,58 @@
# ARCHITECTURE.md
## Tech Stack
- **Framework**: [Primary framework/language]
- **Database**: [Database system]
- **Frontend**: [Frontend technology]
- **Backend**: [Backend technology]
- **Infrastructure**: [Hosting/deployment]
- **Build Tools**: [Build system]
## Directory Structure
```
project/
├── src/ # Source code
├── tests/ # Test files
├── docs/ # Documentation
├── config/ # Configuration files
└── scripts/ # Build/deployment scripts
```
## Key Architectural Decisions
### [Decision 1]
**Context**: [Why this decision was needed]
**Decision**: [What was decided]
**Rationale**: [Why this approach was chosen]
**Consequences**: [Trade-offs and implications]
## Component Architecture
### [ComponentName] Structure <!-- #component-anchor -->
```typescript
// Major classes with exact line numbers
class MainClass { /* lines 100-500 */ } // <!-- #main-class -->
class Helper { /* lines 501-600 */ } // <!-- #helper-class -->
```
## System Flow Diagram
```
[User] -> [Frontend] -> [API] -> [Database]
| |
v v
[Cache] [External Service]
```
## Common Patterns
### [Pattern Name]
**When to use**: [Circumstances]
**Implementation**: [How to implement]
**Example**: [Code example with line numbers]
## Keywords <!-- #keywords -->
- architecture
- system design
- tech stack
- components
- patterns

103
BUILD.md Normal file
View File

@@ -0,0 +1,103 @@
# BUILD.md
## Prerequisites
- [Runtime requirements]
- [Development tools needed]
- [Environment setup]
## Build Commands
### Development
```bash
# Start development server
npm run dev
# Run in watch mode
npm run watch
```
### Production
```bash
# Build for production
npm run build
# Start production server
npm start
```
### Testing
```bash
# Run all tests
npm test
# Run tests in watch mode
npm run test:watch
# Run specific test file
npm test -- filename
```
### Linting & Formatting
```bash
# Lint code
npm run lint
# Fix linting issues
npm run lint:fix
# Format code
npm run format
```
## CI/CD Pipeline
### GitHub Actions
```yaml
# .github/workflows/main.yml
name: CI/CD
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- run: npm ci
- run: npm test
- run: npm run build
```
## Deployment
### Staging
1. [Deployment steps]
2. [Verification steps]
### Production
1. [Pre-deployment checklist]
2. [Deployment steps]
3. [Post-deployment verification]
## Rollback Procedures
1. [Emergency rollback steps]
2. [Database rollback if needed]
3. [Verification steps]
## Troubleshooting
### Common Issues
**Issue**: [Problem description]
**Solution**: [How to fix]
### Build Failures
- [Common build errors and solutions]
## Keywords <!-- #keywords -->
- build
- deployment
- ci/cd
- testing
- production

118
CLAUDE.md Normal file
View File

@@ -0,0 +1,118 @@
# CLAUDE.md
<!-- Generated by Claude Conductor v2.0.0 -->
This file provides guidance to Claude Code when working with this repository.
## Critical Context (Read First)
- **Tech Stack**: Python 3.11+, Dear PyGui / ImGui, FastAPI, Uvicorn
- **Main File**: `gui_2.py` (primary GUI), `ai_client.py` (multi-provider LLM abstraction)
- **Core Mechanic**: GUI orchestrator for LLM-driven coding with 4-tier MMA architecture
- **Key Integration**: Gemini API, Anthropic API, DeepSeek, Gemini CLI (headless), MCP tools
- **Platform Support**: Windows (PowerShell) — single developer, local use
- **DO NOT**: Read full files >50 lines without using `py_get_skeleton` or `get_file_summary` first. Do NOT perform heavy implementation directly — delegate to Tier 3 Workers.
## Environment
- Shell: PowerShell (pwsh) on Windows
- Do NOT use bash-specific syntax (use PowerShell equivalents)
- Use `uv run` for all Python execution
- Path separators: forward slashes work in PowerShell
- **Shell execution in Claude Code**: The `Bash` tool runs in a mingw sandbox on Windows and produces unreliable/empty output. Use `run_powershell` MCP tool for ALL shell commands (git, tests, scans). Bash is last-resort only when MCP server is not running.
## Session Startup Checklist
**IMPORTANT**: At the start of each session:
1. **Check TASKS.md** — look for IN_PROGRESS or BLOCKED tracks
2. **Review recent JOURNAL.md entries** — scan last 2-3 entries for context
3. **If resuming work**: run `/conductor-setup` to load full context
4. **If starting fresh**: run `/conductor-status` for overview
## Quick Reference
**GUI Entry**: `gui_2.py` — Primary ImGui interface
**AI Client**: `ai_client.py` — Multi-provider abstraction (Gemini, Anthropic, DeepSeek)
**MCP Client**: `mcp_client.py:773-831` — Tool dispatch (26 tools)
**Project Manager**: `project_manager.py` — Context & file management
**MMA Engine**: `multi_agent_conductor.py:15-100` — ConductorEngine orchestration
**Tech Lead**: `conductor_tech_lead.py` — Tier 2 ticket generation
**DAG Engine**: `dag_engine.py` — Task dependency resolution
**Session Logger**: `session_logger.py` — Audit trails (JSON-L + markdown)
**Shell Runner**: `shell_runner.py` — PowerShell execution (60s timeout)
**Models**: `models.py:6-84` — Ticket and Track data structures
**File Cache**: `file_cache.py` — ASTParser with tree-sitter skeletons
**Summarizer**: `summarize.py` — Heuristic file summaries
**Outliner**: `outline_tool.py` — Code outline with line ranges
## Conductor System
The project uses a spec-driven track system in `conductor/`:
- **Tracks**: `conductor/tracks/{name}_{YYYYMMDD}/` — spec.md, plan.md, metadata.json
- **Workflow**: `conductor/workflow.md` — full task lifecycle and TDD protocol
- **Tech Stack**: `conductor/tech-stack.md` — technology constraints
- **Product**: `conductor/product.md` — product vision and guidelines
### Conductor Commands (Claude Code slash commands)
- `/conductor-setup` — bootstrap session with conductor context
- `/conductor-status` — show all track status
- `/conductor-new-track` — create a new track (Tier 1)
- `/conductor-implement` — execute a track (Tier 2 — delegates to Tier 3/4)
- `/conductor-verify` — phase completion verification and checkpointing
### MMA Tier Commands
- `/mma-tier1-orchestrator` — product alignment, planning
- `/mma-tier2-tech-lead` — track execution, architectural oversight
- `/mma-tier3-worker` — stateless TDD implementation
- `/mma-tier4-qa` — stateless error analysis
### Delegation (Tier 2 spawns Tier 3/4)
```powershell
uv run python scripts\claude_mma_exec.py --role tier3-worker "Task prompt here"
uv run python scripts\claude_mma_exec.py --role tier4-qa "Error analysis prompt"
```
## Current State
- [x] Multi-provider AI client (Gemini, Anthropic, DeepSeek)
- [x] Dear PyGui / ImGui GUI with multi-panel interface
- [x] MMA 4-tier orchestration engine
- [x] Custom MCP tools (26 tools via mcp_client.py)
- [x] Session logging and audit trails
- [x] Gemini CLI headless adapter
- [x] Claude Code conductor integration
- [~] AI-Optimized Python Style Refactor (Phase 3 — type hints for UI modules)
- [~] Robust Live Simulation Verification (Phase 2 — Epic/Track verification)
- [ ] Documentation Refresh and Context Cleanup
## Development Workflow
1. Run `/conductor-setup` to load session context
2. Pick active track from `TASKS.md` or `/conductor-status`
3. Run `/conductor-implement` to resume track execution
4. Follow TDD: Red (failing tests) → Green (pass) → Refactor
5. Delegate implementation to Tier 3 Workers, errors to Tier 4 QA
6. On phase completion: run `/conductor-verify` for checkpoint
## Anti-Patterns (Avoid These)
- **Don't read full large files** — use `py_get_skeleton`, `get_file_summary`, `py_get_code_outline` first (Research-First Protocol)
- **Don't implement directly as Tier 2** — delegate to Tier 3 Workers via `claude_mma_exec.py`
- **Don't skip TDD** — write failing tests before implementation
- **Don't modify tech stack silently** — update `conductor/tech-stack.md` BEFORE implementing
- **Don't skip phase verification** — run `/conductor-verify` when all tasks in a phase are `[x]`
- **Don't mix track work** — stay focused on one track at a time
## MCP Tools (available via manual-slop MCP server)
When the MCP server is running, these tools are available natively:
`py_get_skeleton`, `py_get_code_outline`, `py_get_definition`, `py_update_definition`,
`py_get_signature`, `py_set_signature`, `py_get_class_summary`, `py_find_usages`,
`py_get_imports`, `py_check_syntax`, `py_get_hierarchy`, `py_get_docstring`,
`get_file_summary`, `get_file_slice`, `set_file_slice`, `get_git_diff`, `get_tree`,
`search_files`, `read_file`, `list_directory`, `web_search`, `fetch_url`,
`run_powershell`, `get_ui_performance`, `py_get_var_declaration`, `py_set_var_declaration`
## Journal Update Requirements
Update JOURNAL.md after:
- Completing any significant feature or fix
- Encountering and resolving errors
- End of each work session
- Making architectural decisions
Format: What/Why/How/Issues/Result structure
## Task Management Integration
- **TASKS.md**: Quick-read pointer to active conductor tracks
- **conductor/tracks/*/plan.md**: Detailed task state (source of truth)
- **JOURNAL.md**: Completed work history with `|TASK:ID|` tags
- **ERRORS.md**: P0/P1 error tracking

511
CONDUCTOR.md Normal file
View File

@@ -0,0 +1,511 @@
# CONDUCTOR.md
<!-- Generated by Claude Conductor v2.0.0 -->
> _Read me first. Every other doc is linked below._
## Critical Context (Read First)
- **Tech Stack**: [List core technologies]
- **Main File**: [Primary code file and line count]
- **Core Mechanic**: [One-line description]
- **Key Integration**: [Important external services]
- **Platform Support**: [Deployment targets]
- **DO NOT**: [Critical things to avoid]
## Table of Contents
1. [Architecture](ARCHITECTURE.md) - Tech stack, folder structure, infrastructure
2. [Design Tokens](DESIGN.md) - Colors, typography, visual system
3. [UI/UX Patterns](UIUX.md) - Components, interactions, accessibility
4. [Runtime Config](CONFIG.md) - Environment variables, feature flags
5. [Data Model](DATA_MODEL.md) - Database schema, entities, relationships
6. [API Contracts](API.md) - Endpoints, request/response formats, auth
7. [Build & Release](BUILD.md) - Build process, deployment, CI/CD
8. [Testing Guide](TEST.md) - Test strategies, E2E scenarios, coverage
9. [Operational Playbooks](PLAYBOOKS/DEPLOY.md) - Deployment, rollback, monitoring
10. [Contributing](CONTRIBUTING.md) - Code style, PR process, conventions
11. [Error Ledger](ERRORS.md) - Critical P0/P1 error tracking
12. [Task Management](TASKS.md) - Active tasks, phase tracking, context preservation
## Quick Reference
**Main Constants**: `[file:lines]` - Description
**Core Class**: `[file:lines]` - Description
**Key Function**: `[file:lines]` - Description
[Include 10-15 most accessed code locations]
## Current State
- [x] Feature complete
- [ ] Feature in progress
- [ ] Feature planned
[Track active work]
## Development Workflow
[5-6 steps for common workflow]
## Task Templates
### 1. [Common Task Name]
1. Step with file:line reference
2. Step with specific action
3. Test step
4. Documentation update
[Include 3-5 templates]
## Anti-Patterns (Avoid These)
**Don't [action]** - [Reason]
[List 5-6 critical mistakes]
## Version History
- **v1.0.0** - Initial release
- **v1.1.0** - Feature added (see JOURNAL.md YYYY-MM-DD)
[Link major versions to journal entries]
## Continuous Engineering Journal <!-- do not remove -->
Claude, keep an ever-growing changelog in [`JOURNAL.md`](JOURNAL.md).
### What to Journal
- **Major changes**: New features, significant refactors, API changes
- **Bug fixes**: What broke, why, and how it was fixed
- **Frustration points**: Problems that took multiple attempts to solve
- **Design decisions**: Why we chose one approach over another
- **Performance improvements**: Before/after metrics
- **User feedback**: Notable issues or requests
- **Learning moments**: New techniques or patterns discovered
### Journal Format
\```
## YYYY-MM-DD HH:MM
### [Short Title]
- **What**: Brief description of the change
- **Why**: Reason for the change
- **How**: Technical approach taken
- **Issues**: Any problems encountered
- **Result**: Outcome and any metrics
### [Short Title] |ERROR:ERR-YYYY-MM-DD-001|
- **What**: Critical P0/P1 error description
- **Why**: Root cause analysis
- **How**: Fix implementation
- **Issues**: Debugging challenges
- **Result**: Resolution and prevention measures
### [Task Title] |TASK:TASK-YYYY-MM-DD-001|
- **What**: Task implementation summary
- **Why**: Part of [Phase Name] phase
- **How**: Technical approach and key decisions
- **Issues**: Blockers encountered and resolved
- **Result**: Task completed, findings documented in ARCHITECTURE.md
\```
### Compaction Rule
When `JOURNAL.md` exceeds **500 lines**:
1. Claude summarizes the oldest half into `JOURNAL_ARCHIVE/<year>-<month>.md`
2. Remaining entries stay in `JOURNAL.md` so the file never grows unbounded
> ⚠️ Claude must NEVER delete raw history—only move & summarize.
### 2. ARCHITECTURE.md
**Purpose**: System design, tech stack decisions, and code structure with line numbers.
**Required Elements**:
- Technology stack listing
- Directory structure diagram
- Key architectural decisions with rationale
- Component architecture with exact line numbers
- System flow diagram (ASCII art)
- Common patterns section
- Keywords for search optimization
**Line Number Format**:
\```
#### ComponentName Structure <!-- #component-anchor -->
\```typescript
// Major classes with exact line numbers
class MainClass { /* lines 100-500 */ } // <!-- #main-class -->
class Helper { /* lines 501-600 */ } // <!-- #helper-class -->
\```
\```
### 3. DESIGN.md
**Purpose**: Visual design system, styling, and theming documentation.
**Required Sections**:
- Typography system
- Color palette (with hex values)
- Visual effects specifications
- Character/entity design
- UI/UX component styling
- Animation system
- Mobile design considerations
- Accessibility guidelines
- Keywords section
### 4. DATA_MODEL.md
**Purpose**: Database schema, application models, and data structures.
**Required Elements**:
- Database schema (SQL)
- Application data models (TypeScript/language interfaces)
- Validation rules
- Common queries
- Data migration history
- Keywords for entities
### 5. API.md
**Purpose**: Complete API documentation with examples.
**Structure for Each Endpoint**:
\```
### Endpoint Name
\```http
METHOD /api/endpoint
\```
#### Request
\```json
{
"field": "type"
}
\```
#### Response
\```json
{
"field": "value"
}
\```
#### Details
- **Rate limit**: X requests per Y seconds
- **Auth**: Required/Optional
- **Notes**: Special considerations
\```
### 6. CONFIG.md
**Purpose**: Runtime configuration, environment variables, and settings.
**Required Sections**:
- Environment variables (required and optional)
- Application configuration constants
- Feature flags
- Performance tuning settings
- Security configuration
- Common patterns for configuration changes
### 7. BUILD.md
**Purpose**: Build process, deployment, and CI/CD documentation.
**Include**:
- Prerequisites
- Build commands
- CI/CD pipeline configuration
- Deployment steps
- Rollback procedures
- Troubleshooting guide
### 8. TEST.md
**Purpose**: Testing strategies, patterns, and examples.
**Sections**:
- Test stack and tools
- Running tests commands
- Test structure
- Coverage goals
- Common test patterns
- Debugging tests
### 9. UIUX.md
**Purpose**: Interaction patterns, user flows, and behavior specifications.
**Cover**:
- Input methods
- State transitions
- Component behaviors
- User flows
- Accessibility patterns
- Performance considerations
### 10. CONTRIBUTING.md
**Purpose**: Guidelines for contributors.
**Include**:
- Code of conduct
- Development setup
- Code style guide
- Commit message format
- PR process
- Common patterns
### 11. PLAYBOOKS/DEPLOY.md
**Purpose**: Step-by-step operational procedures.
**Format**:
- Pre-deployment checklist
- Deployment steps (multiple options)
- Post-deployment verification
- Rollback procedures
- Troubleshooting
### 12. ERRORS.md (Critical Error Ledger)
**Purpose**: Track and resolve P0/P1 critical errors with full traceability.
**Required Structure**:
\```
# Critical Error Ledger <!-- auto-maintained -->
## Schema
| ID | First seen | Status | Severity | Affected area | Link to fix |
|----|------------|--------|----------|---------------|-------------|
## Active Errors
[New errors added here, newest first]
## Resolved Errors
[Moved here when fixed, with links to fixes]
\```
**Error ID Format**: `ERR-YYYY-MM-DD-001` (increment for multiple per day)
**Severity Definitions**:
- **P0**: Complete outage, data loss, security breach
- **P1**: Major functionality broken, significant performance degradation
- **P2**: Minor functionality (not tracked in ERRORS.md)
- **P3**: Cosmetic issues (not tracked in ERRORS.md)
**Claude's Error Logging Process**:
1. When P0/P1 error occurs, immediately add to Active Errors
2. Create corresponding JOURNAL.md entry with details
3. When resolved:
- Move to Resolved Errors section
- Update status to "resolved"
- Add commit hash and PR link
- Add `|ERROR:<ID>|` tag to JOURNAL.md entry
- Link back to JOURNAL entry from ERRORS.md
### 13. TASKS.md (Active Task Management)
**Purpose**: Track ongoing work with phase awareness and context preservation between sessions.
**IMPORTANT**: TASKS.md complements Claude's built-in todo system - it does NOT replace it:
- Claude's todos: For immediate task tracking within a session
- TASKS.md: For preserving context and state between sessions
**Required Structure**:
```
# Task Management
## Active Phase
**Phase**: [High-level project phase name]
**Started**: YYYY-MM-DD
**Target**: YYYY-MM-DD
**Progress**: X/Y tasks completed
## Current Task
**Task ID**: TASK-YYYY-MM-DD-NNN
**Title**: [Descriptive task name]
**Status**: PLANNING | IN_PROGRESS | BLOCKED | TESTING | COMPLETE
**Started**: YYYY-MM-DD HH:MM
**Dependencies**: [List task IDs this depends on]
### Task Context
<!-- Critical information needed to resume this task -->
- **Previous Work**: [Link to related tasks/PRs]
- **Key Files**: [Primary files being modified with line ranges]
- **Environment**: [Specific config/versions if relevant]
- **Next Steps**: [Immediate actions when resuming]
### Findings & Decisions
- **FINDING-001**: [Discovery that affects approach]
- **DECISION-001**: [Technical choice made] → Link to ARCHITECTURE.md
- **BLOCKER-001**: [Issue preventing progress] → Link to resolution
### Task Chain
1. ✅ [Completed prerequisite task] (TASK-YYYY-MM-DD-001)
2. 🔄 [Current task] (CURRENT)
3. ⏳ [Next planned task]
4. ⏳ [Future task in phase]
```
**Task Management Rules**:
1. **One Active Task**: Only one task should be IN_PROGRESS at a time
2. **Context Capture**: Before switching tasks, capture all context needed to resume
3. **Findings Documentation**: Record unexpected discoveries that impact the approach
4. **Decision Linking**: Link architectural decisions to ARCHITECTURE.md
5. **Completion Trigger**: When task completes:
- Generate JOURNAL.md entry with task summary
- Archive task details to TASKS_ARCHIVE/YYYY-MM/TASK-ID.md
- Load next task from chain or prompt for new phase
**Task States**:
- **PLANNING**: Defining approach and breaking down work
- **IN_PROGRESS**: Actively working on implementation
- **BLOCKED**: Waiting on external dependency or decision
- **TESTING**: Implementation complete, validating functionality
- **COMPLETE**: Task finished and documented
**Integration with Journal**:
- Each completed task auto-generates a journal entry
- Journal references task ID for full context
- Critical findings promoted to relevant documentation
## Documentation Optimization Rules
### 1. Line Number Anchors
- Add exact line numbers for every class, function, and major code section
- Format: `**Class Name (Lines 100-200)**`
- Add HTML anchors: `<!-- #class-name -->`
- Update when code structure changes significantly
### 2. Quick Reference Card
- Place in CLAUDE.md after Table of Contents
- Include 10-15 most common code locations
- Format: `**Feature**: `file:lines` - Description`
### 3. Current State Tracking
- Use checkbox format in CLAUDE.md
- `- [x] Completed feature`
- `- [ ] In-progress feature`
- Update after each work session
### 4. Task Templates
- Provide 3-5 step-by-step workflows
- Include specific line numbers
- Reference files that need updating
- Add test/verification steps
### 5. Keywords Sections
- Add to each major .md file
- List alternative search terms
- Format: `## Keywords <!-- #keywords -->`
- Include synonyms and related terms
### 6. Anti-Patterns
- Use ❌ emoji for clarity
- Explain why each is problematic
- Include 5-6 critical mistakes
- Place prominently in CLAUDE.md
### 7. System Flow Diagrams
- Use ASCII art for simplicity
- Show data/control flow
- Keep visual and readable
- Place in ARCHITECTURE.md
### 8. Common Patterns
- Add to relevant docs (CONFIG.md, ARCHITECTURE.md)
- Show exact code changes needed
- Include before/after examples
- Reference specific functions
### 9. Version History
- Link to JOURNAL.md entries
- Format: `v1.0.0 - Feature (see JOURNAL.md YYYY-MM-DD)`
- Track major changes only
### 10. Cross-Linking
- Link between related sections
- Use relative paths: `[Link](./FILE.md#section)`
- Ensure bidirectional linking where appropriate
## Journal System Setup
### JOURNAL.md Structure
\```
# Engineering Journal
## YYYY-MM-DD HH:MM
### [Descriptive Title]
- **What**: Brief description of the change
- **Why**: Reason for the change
- **How**: Technical approach taken
- **Issues**: Any problems encountered
- **Result**: Outcome and any metrics
---
[Entries continue chronologically]
\```
### Journal Best Practices
1. **Entry Timing**: Add entry immediately after significant work
2. **Detail Level**: Include enough detail to understand the change months later
3. **Problem Documentation**: Especially document multi-attempt solutions
4. **Learning Moments**: Capture new techniques discovered
5. **Metrics**: Include performance improvements, time saved, etc.
### Archive Process
When JOURNAL.md exceeds 500 lines:
1. Create `JOURNAL_ARCHIVE/` directory
2. Move oldest 250 lines to `JOURNAL_ARCHIVE/YYYY-MM.md`
3. Add summary header to archive file
4. Keep recent entries in main JOURNAL.md
## Implementation Steps
### Phase 1: Initial Setup (30-60 minutes)
1. **Create CLAUDE.md** with all required sections
2. **Fill Critical Context** with 6 essential facts
3. **Create Table of Contents** with placeholder links
4. **Add Quick Reference** with top 10-15 code locations
5. **Set up Journal section** with formatting rules
### Phase 2: Core Documentation (2-4 hours)
1. **Create each .md file** from the list above
2. **Add Keywords section** to each file
3. **Cross-link between files** where relevant
4. **Add line numbers** to code references
5. **Create PLAYBOOKS/ directory** with DEPLOY.md
6. **Create ERRORS.md** with schema table
### Phase 3: Optimization (1-2 hours)
1. **Add Task Templates** to CLAUDE.md
2. **Create ASCII system flow** in ARCHITECTURE.md
3. **Add Common Patterns** sections
4. **Document Anti-Patterns**
5. **Set up Version History**
### Phase 4: First Journal Entry
Create initial JOURNAL.md entry documenting the setup:
\```
## YYYY-MM-DD HH:MM
### Documentation Framework Implementation
- **What**: Implemented CLAUDE.md modular documentation system
- **Why**: Improve AI navigation and code maintainability
- **How**: Split monolithic docs into focused modules with cross-linking
- **Issues**: None - clean implementation
- **Result**: [Number] documentation files created with full cross-referencing
\```
## Maintenance Guidelines
### Daily
- Update JOURNAL.md with significant changes
- Mark completed items in Current State
- Update line numbers if major refactoring
### Weekly
- Review and update Quick Reference section
- Check for broken cross-links
- Update Task Templates if workflows change
### Monthly
- Review Keywords sections for completeness
- Update Version History
- Check if JOURNAL.md needs archiving
### Per Release
- Update Version History in CLAUDE.md
- Create comprehensive JOURNAL.md entry
- Review all documentation for accuracy
- Update Current State checklist
## Benefits of This System
1. **AI Efficiency**: Claude can quickly navigate to exact code locations
2. **Modularity**: Easy to update specific documentation without affecting others
3. **Discoverability**: New developers/AI can quickly understand the project
4. **History Tracking**: Complete record of changes and decisions
5. **Task Automation**: Templates reduce repetitive instructions
6. **Error Prevention**: Anti-patterns prevent common mistakes

34
Dockerfile Normal file
View File

@@ -0,0 +1,34 @@
# Use python:3.11-slim as a base
FROM python:3.11-slim
# Set environment variables
# UV_SYSTEM_PYTHON=1 allows uv to install into the system site-packages
ENV PYTHONDONTWRITEBYTECODE=1
PYTHONUNBUFFERED=1
UV_SYSTEM_PYTHON=1
# Install system dependencies and uv
RUN apt-get update && apt-get install -y --no-install-recommends
curl
ca-certificates
&& rm -rf /var/lib/apt/lists/*
&& curl -LsSf https://astral.sh/uv/install.sh | sh
&& mv /root/.local/bin/uv /usr/local/bin/uv
# Set the working directory in the container
WORKDIR /app
# Copy dependency files first to leverage Docker layer caching
COPY pyproject.toml requirements.txt* ./
# Install dependencies via uv
RUN if [ -f requirements.txt ]; then uv pip install --no-cache -r requirements.txt; fi
# Copy the rest of the application code
COPY . .
# Expose port 8000 for the headless API/service
EXPOSE 8000
# Set the entrypoint to run the app in headless mode
ENTRYPOINT ["python", "gui_2.py", "--headless"]

47
GEMINI.md Normal file
View File

@@ -0,0 +1,47 @@
# Project Overview
**Manual Slop** is a local GUI application designed as an experimental, "manual" AI coding assistant. It allows users to curate and send context (files, screenshots, and discussion history) to AI APIs (Gemini and Anthropic). The AI can then execute PowerShell scripts within the project directory to modify files, requiring explicit user confirmation before execution.
**Main Technologies:**
* **Language:** Python 3.11+
* **Package Management:** `uv`
* **GUI Framework:** Dear PyGui (`dearpygui`), ImGui Bundle (`imgui-bundle`)
* **AI SDKs:** `google-genai` (Gemini), `anthropic`
* **Configuration:** TOML (`tomli-w`)
**Architecture:**
* **`gui_legacy.py`:** The main entry point and Dear PyGui application logic. Handles all panels, layouts, user input, and confirmation dialogs.
* **`ai_client.py`:** A unified wrapper for both Gemini and Anthropic APIs. Manages sessions, tool/function-call loops, token estimation, and context history management.
* **`aggregate.py`:** Responsible for building the `file_items` context. It reads project configurations, collects files and screenshots, and builds the context into markdown format to send to the AI.
* **`mcp_client.py`:** Implements MCP-like tools (e.g., `read_file`, `list_directory`, `search_files`, `web_search`) as native functions that the AI can call. Enforces a strict allowlist for file access.
* **`shell_runner.py`:** A sandboxed subprocess wrapper that executes PowerShell scripts (`powershell -NoProfile -NonInteractive -Command`) provided by the AI.
* **`project_manager.py`:** Manages per-project TOML configurations (`manual_slop.toml`), serializes discussion entries, and integrates with git (e.g., fetching current commit).
* **`session_logger.py`:** Handles timestamped logging of communication history (JSON-L) and tool calls (saving generated `.ps1` files).
# Building and Running
* **Setup:** The application uses `uv` for dependency management. Ensure `uv` is installed.
* **Credentials:** You must create a `credentials.toml` file in the root directory to store your API keys:
```toml
[gemini]
api_key = "****"
[anthropic]
api_key = "****"
```
* **Run the Application:**
```powershell
uv run .\gui_2.py
```
# Development Conventions
* **Configuration Management:** The application uses two tiers of configuration:
* `config.toml`: Global settings (UI theme, active provider, list of project paths).
* `manual_slop.toml`: Per-project settings (files to track, discussion history, specific system prompts).
* **Tool Execution:** The AI acts primarily by generating PowerShell scripts. These scripts MUST be confirmed by the user via a GUI modal before execution. The AI also has access to read-only MCP-style file exploration tools and web search capabilities.
* **Context Refresh:** After every tool call that modifies the file system, the application automatically refreshes the file contents in the context using the files' `mtime` to optimize reads.
* **UI State Persistence:** Window layouts and docking arrangements are automatically saved to and loaded from `dpg_layout.ini`.
* **Code Style:**
* Use type hints where appropriate.
* Internal methods and variables are generally prefixed with an underscore (e.g., `_flush_to_project`, `_do_generate`).
* **Logging:** All API communications are logged to `logs/comms_<ts>.log`. All executed scripts are saved to `scripts/generated/`.

85
JOURNAL.md Normal file
View File

@@ -0,0 +1,85 @@
# Engineering Journal
## 2026-02-28 14:43
### Documentation Framework Implementation
- **What**: Implemented Claude Conductor modular documentation system
- **Why**: Improve AI navigation and code maintainability
- **How**: Used `npx claude-conductor` to initialize framework
- **Issues**: None - clean implementation
- **Result**: Documentation framework successfully initialized
---
---
## 2026-03-02
### Track: context_token_viz_20260301 — Completed |TASK:context_token_viz_20260301|
- **What**: Token budget visualization panel (all 3 phases)
- **Why**: Zero visibility into context window usage; `get_history_bleed_stats` existed but had no UI
- **How**: Extended `get_history_bleed_stats` with `_add_bleed_derived` helper (adds 8 derived fields); added `_render_token_budget_panel` with color-coded progress bar, breakdown table, trim warning, Gemini/Anthropic cache status; 3 auto-refresh triggers (`_token_stats_dirty` flag); `/api/gui/token_stats` endpoint; `--timeout` flag on `claude_mma_exec.py`
- **Issues**: `set_file_slice` dropped `def _render_message_panel` line — caught by outline check, fixed with 1-line insert. Tier 3 delegation via `run_powershell` hard-capped at 60s — implemented changes directly per user approval; added `--timeout` flag for future use.
- **Result**: 17 passing tests, all phases verified by user. Token panel visible in AI Settings under "Token Budget". Commits: 5bfb20f → d577457.
### Next: mma_agent_focus_ux (planned, not yet tracked)
- **What**: Per-agent filtering for MMA observability panels (comms, tool calls, discussion, token budget)
- **Why**: All panels are global/session-scoped; in MMA mode with 4 tiers, data from all agents mixes. No way to isolate what a specific tier is doing.
- **Gap**: `_comms_log` and `_tool_log` have no tier/agent tag. `mma_streams` stream_id is the only per-agent key that exists.
- **See**: TASKS.md for full audit and implementation intent.
---
## 2026-03-02 (Session 2)
### Tracks Initialized: feature_bleed_cleanup + mma_agent_focus_ux |TASK:feature_bleed_cleanup_20260302| |TASK:mma_agent_focus_ux_20260302|
- **What**: Audited codebase for feature bleed; initialized 2 new conductor tracks
- **Why**: Entropy from Tier 2 track implementations — redundant code, dead methods, layout regressions, no tier context in observability
- **Bleed findings** (gui_2.py): Dead duplicate `_render_comms_history_panel` (3041-3073, stale `type` key, wrong method ref); dead `begin_main_menu_bar()` block (1680-1705, Quit has never worked); 4 duplicate `__init__` assignments; double "Token Budget" label with no collapsing header
- **Agent focus findings** (ai_client.py + conductors): No `current_tier` var; Tier 3 swaps callback but never stamps tier; Tier 2 doesn't swap at all; `_tool_log` is untagged tuple list
- **Result**: 2 tracks committed (4f11d1e, c1a86e2). Bleed cleanup is active; agent focus depends on it.
- **More Tracks**: Initialized 'tech_debt_and_test_cleanup_20260302' and 'conductor_workflow_improvements_20260302' to harden TDD discipline, resolve test tech debt (false-positives, dupes), and mandate AST-based codebase auditing.
- **Final Track**: Initialized 'architecture_boundary_hardening_20260302' to fix the GUI HITL bypass allowing direct AST mutations, patch token bloat in `mma_exec.py`, and implement cascading blockers in `dag_engine.py`.
- **Testing Consolidation**: Initialized 'testing_consolidation_20260302' track to standardize simulation testing workflows around the pytest `live_gui` fixture and eliminate redundant `subprocess.Popen` wrappers.
- **Dependency Order**: Added an explicit 'Track Dependency Order' execution guide to `TASKS.md` to ensure safe progression through the accumulated tech debt.
- **Documentation**: Added guide_meta_boundary.md to explicitly clarify the difference between the Application's strict-HITL environment and the autonomous Meta-Tooling environment, helping future Tiers avoid feature bleed.
- **Heuristics & Backlog**: Added Data-Oriented Design and Immediate Mode architectural heuristics (inspired by Muratori/Acton) to product-guidelines.md. Logged future decoupling and robust parsing tracks to a 'Future Backlog' in TASKS.md.
---
## 2026-03-02 (Session 4)
### Track: mma_agent_focus_ux_20260302 — Completed |TASK:mma_agent_focus_ux_20260302|
- **What**: Per-tier agent focus UX — source_tier tagging + Focus Agent filter UI (all 3 phases)
- **Why**: All MMA observability panels were global/session-scoped; traffic from Tier 2/3/4 was indistinguishable
- **How**:
- Phase 1: Added `current_tier: str | None` module var to `ai_client.py`; `_append_comms` stamps `source_tier: current_tier` on every comms entry; `run_worker_lifecycle` sets `"Tier 3"` / `generate_tickets` sets `"Tier 2"` around `send()` calls, clears in `finally`; `_on_tool_log` captures `current_tier` at call time; `_append_tool_log` migrated from tuple to dict with `source_tier` field; `_pending_tool_calls` likewise. Checkpoint: bc1a570
- Phase 2: `_render_tool_calls_panel` migrated from tuple destructure to dict access. Checkpoint: 865d8dd
- Phase 3: `ui_focus_agent: str | None` state var added; Focus Agent combo (All/Tier2/3/4) + clear button above OperationsTabs; filter logic in `_render_comms_history_panel` and `_render_tool_calls_panel`; `[source_tier]` label per comms entry header. Checkpoint: b30e563
- **Issues**:
- `claude_mma_exec.py` fails with nested session block — user authorized inline implementation for this track
- Task 2.1 set_file_slice applied at shifted line, leaving stale tuple destructure + missing `i = i_minus_one + 1`; caught and fixed in Phase 3 Task 3.4
- **Known limitation**: `current_tier` is a module-level `str | None` — safe only because MMA engine serializes `send()` calls. Concurrent Tier 3/4 agents (future) will require `threading.local()` or per-ticket context passing. Logged to backlog.
- **Verification gap noted**: No API hook endpoints expose `ui_focus_agent` state for automated testing. Future tracks should wire widget state to `_settable_fields` for `live_gui` fixture verification. Logged to backlog.
- **Result**: 18 tests passing. Focus Agent combo visible in Operations Hub. Comms entries show `[main]`/`[Tier N]` labels. Meta-Level Sanity Check: 53 ruff errors in gui_2.py before and after — zero new violations.
---
## 2026-03-02 (Session 3)
### Track: feature_bleed_cleanup_20260302 — Completed |TASK:feature_bleed_cleanup_20260302|
- **What**: Removed all confirmed dead code and layout regressions from gui_2.py (3 phases)
- **Why**: Tier 3 workers had left behind dead duplicate methods, dead menu block, duplicate state vars, and a broken Token Budget layout that embedded the panel inside Provider & Model with double labels
- **How**:
- Phase 1: Deleted dead `_render_comms_history_panel` duplicate (stale `type` key, nonexistent `_cb_load_prior_log`, `scroll_area` ID collision). Deleted 4 duplicate `__init__` assignments (ui_new_track_name etc.)
- Phase 2: Deleted dead `begin_main_menu_bar()` block (24 lines, always-False in HelloImGui). Added working `Quit` to `_show_menus` via `runner_params.app_shall_exit = True`
- Phase 3: Removed 4 redundant Token Budget labels/call from `_render_provider_panel`. Added `collapsing_header("Token Budget")` to AI Settings with proper `_render_token_budget_panel()` call
- **Issues**: Full test suite hangs (pre-existing — `test_suite_performance_and_flakiness` backlog). Ran targeted GUI/MMA subset (32 passed) as regression proxy. Meta-Level Sanity Check: 52 ruff errors in gui_2.py before and after — zero new violations introduced
- **Result**: All 3 phases verified by user. Checkpoints: be7174c (Phase 1), 15fd786 (Phase 2), 0d081a2 (Phase 3)
---

View File

@@ -0,0 +1,45 @@
# MMA Hierarchical Delegation: Recommended Architecture
## 1. Overview
The Multi-Model Architecture (MMA) utilizes a 4-Tier hierarchy to ensure token efficiency and structural integrity. The primary agent (Conductor) acts as the Tier 2 Tech Lead, delegating specific, stateless tasks to Tier 3 (Workers) and Tier 4 (Utility) agents.
## 2. Agent Roles & Responsibilities
### Tier 2: The Conductor (Tech Lead)
- **Role:** Orchestrator of the project lifecycle via the Conductor framework.
- **Context:** High-reasoning, long-term memory of project goals and specifications.
- **Key Tool:** `mma-orchestrator` skill (Strategy).
- **Delegation Logic:** Identifies tasks that would bloat the primary context (large code blocks, massive error traces) and spawns sub-agents.
### Tier 3: The Worker (Contributor)
- **Role:** Stateless code generator.
- **Context:** Isolated. Sees only the target file and the specific ticket.
- **Protocol:** Receives a "Worker" system prompt. Outputs clean code or diffs.
- **Invocation:** `.\scripts\run_subagent.ps1 -Role Worker -Prompt "..."`
### Tier 4: The Utility (QA/Compressor)
- **Role:** Stateless translator and summarizer.
- **Context:** Minimal. Sees only the error trace or snippet.
- **Protocol:** Receives a "QA" system prompt. Outputs compressed findings (max 50 tokens).
- **Invocation:** `.\scripts\run_subagent.ps1 -Role QA -Prompt "..."`
## 3. Invocation Protocol
### Step 1: Detection
Tier 2 detects a delegation trigger:
- Coding task > 50 lines.
- Error trace > 100 lines.
### Step 2: Spawning
Tier 2 calls the delegation script:
```powershell
.\scripts\run_subagent.ps1 -Role <Worker|QA> -Prompt "Specific instructions..."
```
### Step 3: Integration
Tier 2 receives the sub-agent's response.
- **If Worker:** Tier 2 applies the code changes (using `replace` or `write_file`) and verifies.
- **If QA:** Tier 2 uses the compressed error to inform the next fix attempt or passes it to a Worker.
## 4. System Prompt Management
The `run_subagent.ps1` script should be updated to maintain a library of role-specific system prompts, ensuring that Tier 3/4 agents remain focused and tool-free (to prevent nested complexity).

View File

@@ -0,0 +1,32 @@
# Data Pipelines, Memory Views & Configuration
The 4-Tier Architecture relies on strictly managed data pipelines and configuration files to prevent token bloat and maintain a deterministically safe execution environment.
## 1. AST Extraction Pipelines (Memory Views)
To prevent LLMs from hallucinating or consuming massive context windows, raw file text is heavily restricted. The `file_cache.py` uses Tree-sitter for deterministic Abstract Syntax Tree (AST) parsing to generate specific views:
1. **The Directory Map (Tier 1):** Just filenames and nested paths (e.g., output of `tree /F`). No source code.
2. **The Skeleton View (Tier 2 & 3 Dependencies):** Extracts only `class` and `def` signatures, parameters, and type hints. Strips all docstrings and function bodies, replacing them with `pass`. Used for foreign modules a worker must call but not modify.
3. **The Curated Implementation View (Tier 2 Target Modules):**
* Keeps class/struct definitions.
* Keeps module-level docstrings and block comments (heuristics).
* Keeps full bodies of functions marked with `@core_logic` or `# [HOT]`.
* Replaces standard function bodies with `... # Hidden`.
4. **The Raw View (Tier 3 Target File):** Unredacted, line-by-line source code of the *single* file a Tier 3 worker is assigned to modify.
## 2. Configuration Schema
The architecture separates sensitive billing logic from AI behavior routing.
* **`credentials.toml` (Security Prerequisite):** Holds the bare metal authentication (`gemini_api_key`, `anthropic_api_key`, `deepseek_api_key`). **This file must be in `.gitignore`.** Loaded strictly for instantiating HTTP clients.
* **`project.toml` (Repo Rules):** Holds repository-specific bounds (e.g., "This project uses Python 3.12 and strictly follows PEP8").
* **`agents.toml` (AI Routing):** Defines the hardcoded hierarchy's operational behaviors. Includes fallback models (`default_expensive`, `default_cheap`), Tier 1/2 overarching parameters (temperature, base system prompts), and Tier 3 worker archetypes (`refactor`, `codegen`, `contract_stubber`) mapped to specific models (DeepSeek V3, Gemini Flash) and `trust_level` tags (`step` vs. `auto`).
## 3. LLM Output Formats
To ensure robust parser execution and avoid JSON string-escaping nightmares, the architecture uses a hybrid approach for LLM outputs depending on the Tier:
* **Native Structured Outputs (JSON Schema forced by API):** Used for Tier 1 and Tier 2 routing and orchestration. The model provider mathematically guarantees the syntax, allowing clean parsing of `Track` and `Ticket` metadata by `pydantic`.
* **XML Tags (`<file_path>`, `<file_content>`):** Used for Tier 3 Code Generation & Tools. It natively isolates syntax and requires zero string escaping. The UI/Orchestrator parses these via regex to safely extract raw Python code without bracket-matching failures.
* **Godot ECS Flat List (Linearized Entities with ID Pointers):** Instead of deeply nested JSON (which models hallucinate across 500 tokens), Tier 1/2 Orchestrators define complex dependency DAGs as a flat list of items (e.g., `[Ticket id="tkt_impl" depends_on="tkt_stub"]`). The Python state machine reconstructs the DAG locally.

View File

@@ -0,0 +1,30 @@
# MMA Tiered Architecture: Final Analysis Report
## 1. Executive Summary
The implementation and verification of the 4-Tier Hierarchical Multi-Model Architecture (MMA) within the Conductor framework have been successfully completed. The architecture provides a robust "Token Firewall" that prevents the primary context from being bloated by repetitive coding tasks and massive error traces.
## 2. Architectural Findings
### Centralized Strategy vs. Role-Based Sub-Agents
- **Decision:** A Hybrid Approach was implemented.
- **Rationale:** The Tier 2 Orchestrator (Conductor) maintains the high-level strategy via a centralized skill, while Tier 3 (Worker) and Tier 4 (QA) agents are governed by surgical, role-specific system prompts. This ensures that sub-agents remain focused and stateless without the overhead of complex, nested tool-usage logic.
### Delegation Efficacy
- **Tier 3 (Worker):** Successfully isolated code generation from the main conversation. The worker generates clean code/diffs that are then integrated by the Orchestrator.
- **Tier 4 (QA):** Demonstrated superior token efficiency by compressing multi-hundred-line stack traces into ~20-word actionable fixes.
- **Traceability:** The `-ShowContext` flag in `scripts/run_subagent.ps1` provides immediate visibility into the "Connective Tissue" of the hierarchy, allowing human supervisors to monitor the hand-offs.
## 3. Recommended Protocol (Final)
1. **Identification:** Tier 2 identifies a "Bloat Trigger" (Coding > 50 lines, Errors > 100 lines).
2. **Delegation:** Tier 2 spawns a sub-agent via `.\scripts
un_subagent.ps1 -Role [Worker|QA] -Prompt "..."`.
3. **Integration:** Tier 2 receives the stateless response and applies it to the project state.
4. **Checkpointing:** Tier 2 performs Phase-level checkpoints to "Wipe" trial-and-error memory and solidify the new state.
## 4. Verification Results
- **Automated Tests:** 100% Pass (4/4 tests in `tests/conductor/test_infrastructure.py`).
- **Isolation:** Confirmed via `test_subagent_isolation_live`.
- **Live Trace:** Manually verified and approved by the user (Tier 2 -> 3 -> 4 flow).
## 5. Conclusion

View File

@@ -0,0 +1,46 @@
# Iteration Plan (Implementation Tracks)
To safely refactor a linear, single-agent codebase into the 4-Tier Multi-Model Architecture without breaking the working prototype, the implementation should be sequenced into these five isolated Epics (Tracks):
## Track 1: The Memory Foundations (AST Parser)
**Goal:** Build the engine that prevents token-bloat by turning massive source files into curated memory views.
**Implementation Details:**
1. Integrate `tree-sitter` and language bindings into `file_cache.py`.
2. Build `ASTParser` extraction rules:
* *Skeleton View:* Strip function/class bodies, preserving only signatures, parameters, and type hints.
* *Curated View:* Preserve class structures, module docstrings, and bodies of functions marked `# [HOT]` or `@core_logic`. Replace standard bodies with `... # Hidden`.
3. **Acceptance:** `file_cache.get_curated_view('script.py')` returns a perfectly formatted summary string in the terminal.
## Track 2: State Machine & Data Structures
**Goal:** Define the rigid Python objects the AI agents will pass to each other to rely on structured data, not loose chat strings.
**Implementation Details:**
1. Create `models.py` with `pydantic` or `dataclasses` for `Track` (Epic) and `Ticket` (Task).
2. Define `WorkerContext` holding the Ticket ID, assigned model (from `agents.toml`), isolated `credentials.toml` injection, and a `messages` payload array.
3. Add helper methods for state mutators (e.g., `ticket.mark_blocked()`, `ticket.mark_complete()`).
4. **Acceptance:** Instantiate a `Track` with 3 `Tickets` and successfully enforce state changes in Python without AI involvement.
## Track 3: The Linear Orchestrator & Execution Clutch
**Goal:** Build the synchronous, debuggable core loop that runs a single Tier 3 Worker and pauses for human approval.
**Implementation Details:**
1. Create `multi_agent_conductor.py` with a `run_worker_lifecycle(ticket: Ticket)` function.
2. Inject context (Raw View from `file_cache.py`) and format the `messages` array for the API.
3. Implement the Clutch (HITL): `input()` pause for CLI or wait state for GUI before executing the returned tool (e.g., `write_file`). Allow manual memory mutation of the JSON payload.
4. **Acceptance:** The script sends a hardcoded Ticket to DeepSeek, pauses in the terminal showing a diff, waits for user approval, applies the diff via `mcp_client.py`, and wipes the worker's history.
## Track 4: Tier 4 QA Interception
**Goal:** Stop error traces from destroying the Worker's token window by routing crashes through a stateless translator.
**Implementation Details:**
1. In `shell_runner.py`, intercept `stderr` (e.g., `returncode != 0`).
2. Do *not* append `stderr` to the main Worker's history. Instead, instantiate a synchronous API call to the `default_cheap` model.
3. Prompt: *"You are an error parser. Output only a 1-2 sentence instruction on how to fix this syntax error."* Send the raw `stderr` and target file snippet.
4. Append the translated 20-word fix to the main Worker's history as a "System Hint".
5. **Acceptance:** A deliberate syntax error triggers the execution engine to silently ping the cheap API, returning a 20-word correction to the Worker instead of a 200-line stack trace.
## Track 5: UI Decoupling & Tier 1/2 Routing (The Final Boss)
**Goal:** Bring the system online by letting Tier 1 and Tier 2 dynamically generate Tickets managed by the async Event Bus.
**Implementation Details:**
1. Implement an `asyncio.Queue` in `multi_agent_conductor.py`.
2. Write Tier 1 & 2 system prompts forcing output as strict JSON arrays (Tracks and Tickets).
3. Write the Dispatcher async loop to convert JSON into `Ticket` objects and push to the queue.
4. Enforce the Stub Resolver: If a Ticket archetype is `contract_stubber`, pause dependent Tickets, run the stubber, trigger `file_cache.py` to rebuild the Skeleton View, then resume.
5. **Acceptance:** Vague prompt ("Refactor config system") results in Tier 1 Track, Tier 2 Tickets (Interface stub + Implementation). System executes stub, updates AST, and finishes implementation automatically (or steps through if Linear toggle is on).

View File

@@ -0,0 +1,37 @@
# The Orchestrator Engine & UI
To transition from a linear, single-agent chat box to a multi-agent control center, the GUI must be decoupled from the LLM execution loops. A single-agent UI assumes a linear flow (*User types -> UI waits -> LLM responds -> UI updates*), which freezes the application if a Tier 1 PM waits for human approval while Tier 3 Workers run local tests in the background.
## 1. The Async Event Bus (Decoupling UI from Agents)
The GUI acts as a "dumb" renderer. It only renders state; it never manages state.
* **The Agent Bus (Message Queue):** A thread-safe signaling system (e.g., `asyncio.Queue`, `pyqtSignal`) passes messages between agents, UI, and the filesystem.
* **Background Workers:** When Tier 1 spawns a Tier 2 Tech Lead, the GUI does not wait. It pushes a `UserRequestEvent` to the Conductor's queue. The Conductor runs the LLM call asynchronously and fires `StateUpdateEvents` back for the GUI to redraw.
## 2. The Execution Clutch (HITL)
Every spawned worker panel implements an execution state toggle based on the `trust_level` defined in `agents.toml`.
* **Step Mode (Lock-step):** The worker pauses **twice** per cycle:
1. *After* generating a response/tool-call, but *before* executing the tool. The GUI renders a preview (e.g., diff of lines 40-50) and offers `[Approve]`, `[Edit Payload]`, or `[Abort]`.
2. *After* executing the tool, but *before* sending output back to the LLM (allows verification of the system output).
* **Auto Mode (Fire-and-forget):** The worker loops continuously until it outputs a "Task Complete" status to the Router.
## 3. Memory Mutation (The "Debug" Superpower)
If a worker generates a flawed plan in Step Mode, the "Memory Mutator" allows the user to click the last message and edit the raw JSON/text directly before hitting "Approve." By rewriting the AI's brain mid-task, the model proceeds as if it generated the correct idea, saving the context window from restarting due to a minor hallucination.
## 4. The Global Execution Toggle
A Global Execution Toggle overrides all individual agent trust levels for debugging race conditions or context leaks.
* **Mode = "async" (Production):** The Dispatcher throws Tickets into an `asyncio.TaskGroup`. They spawn instantly, fight for API rate limits, read the skeleton, and run in parallel.
* **Mode = "linear" (Debug):** The Dispatcher iterates through the array sequentially using a strict `for` loop. It `awaits` absolute completion of Ticket 1 (including QA loops and code review) before instantiating the `WorkerAgent` for Ticket 2. This enforces a deterministic state machine and outputs state snapshots (`debug_state.json`) for manual verification.
## 5. State Machine (Dataclasses)
The Conductor relies on strict definitions for `Track` and `Ticket` to enforce state and UI rendering (e.g., using `dataclasses` or `pydantic`).
* **`Ticket`:** Contains `id`, `target_file`, `prompt`, `worker_archetype`, `status` (pending, running, blocked, step_paused, completed), and a `dependencies` list of Ticket IDs that must finish first.
* **`Track`:** Contains `id`, `title`, `description`, `status`, and a list of `Tickets`.

File diff suppressed because it is too large Load Diff

18
MMA_Support/Overview.md Normal file
View File

@@ -0,0 +1,18 @@
# System Specification: 4-Tier Hierarchical Multi-Model Architecture
**Project:** `manual_slop` (or equivalent Agentic Co-Dev Prototype)
**Core Philosophy:** Token Economy, Strict Memory Siloing, and Human-In-The-Loop (HITL) Execution.
## 1. Architectural Overview
This system rejects the "monolithic black-box" approach to agentic coding. Instead of passing an entire codebase into a single expensive context window, the architecture mimics a senior engineering department. It uses a 4-Tier hierarchy where cognitive load and context are aggressively filtered from top to bottom.
Expensive, high-reasoning models manage metadata and architecture (Tier 1 & 2), while cheap, fast models handle repetitive syntax and error parsing (Tier 3 & 4).
### 1.1 Core Paradigms
* **Token Firewalling:** Error logs and deep history are never allowed to bubble up to high-tier models. The system relies heavily on abstracted AST views (Skeleton, Curated) rather than raw code when context allows.
* **Context Amnesia:** Worker agents (Tier 3) have their trial-and-error histories wiped upon task completion to prevent context ballooning and hallucination.
* **The Execution Clutch (HITL):** Agents operate based on Archetype Trust Scores defined in configuration. Trusted patterns run in `Auto` mode; untrusted or complex refactors run in `Step` mode, pausing before tool execution for human review and JSON history mutation.
* **Interface-Driven Development (IDD):** The architecture inherently prioritizes the creation of contracts (stubs, schemas) before implementation, allowing workers to proceed in parallel without breaking cross-module boundaries.

View File

@@ -0,0 +1,38 @@
# Tier 1: The Top-Level Orchestrator (Product Manager)
**Designated Models:** Gemini 3.1 Pro, Claude 3.5 Sonnet.
**Execution Frequency:** Low (Start of feature, Macro-merge resolution).
**Core Role:** Epic planning, architecture enforcement, and cross-module task delegation.
The Tier 1 Orchestrator is the most capable and expensive model in the hierarchy. It operates strictly on metadata, summaries, and executive-level directives. It **never** sees raw implementation code.
## Memory Context & Paths
### Path A: Epic Initialization (Project Planning)
* **Trigger:** User drops a massive new feature request or architectural shift into the main UI.
* **What it Sees (Context):**
* **The User Prompt:** The raw feature request.
* **Project Meta-State:** `project.toml` (rules, allowed languages, dependencies).
* **Repository Map:** A strict, file-tree outline (names and paths only).
* **Global Architecture Docs:** High-level markdown files (e.g., `docs/guide_architecture.md`).
* **What it Ignores:** All source code, all AST skeletons, and all previous micro-task histories.
* **Output Format:** A JSON array (Godot ECS Flat List format) of `Tracks` (Jira Epics), identifying which modules will be affected, the required Tech Lead persona, and the severity level.
### Path B: Track Delegation (Sprint Kickoff)
* **Trigger:** The PM is handing a defined Track down to a Tier 2 Tech Lead.
* **What it Sees (Context):**
* **The Target Track:** The specific goal and Acceptance Criteria generated in Path A.
* **Module Interfaces (Skeleton View):** Strict AST skeleton (just class/function definitions) *only* for the modules this specific Track is allowed to touch.
* **Track Roster:** A list of currently active or completed Tracks to prevent duplicate work.
* **What it Ignores:** Unrelated module docs, original massive user prompt, implementation details.
* **Output Format:** A compiled "Track Brief" (system prompt + curated file list) passed to instantiate the Tier 2 Tech Lead panel.
### Path C: Macro-Merge & Acceptance Review (Severity Resolution)
* **Trigger:** A Tier 2 Tech Lead reports "Track Complete" and submits a pull request/diff for a "High Severity" task.
* **What it Sees (Context):**
* **Original Acceptance Criteria:** The Track's goals.
* **Tech Lead's Executive Summary:** A ~200-word explanation of the chosen implementation algorithm.
* **The Macro-Diff:** Actual changes made to the codebase.
* **Curated Implementation View:** For boundary files, ensuring the merge doesn't break foreign modules.
* **What it Ignores:** Tier 3 Worker trial-and-error histories, Tier 4 error logs, raw bodies of unchanged functions.
* **Output Format:** "Approved" (commits to memory) OR "Rejected" with specific architectural feedback for Tier 2.

View File

@@ -0,0 +1,46 @@
# Tier 2: The Track Conductor (Tech Lead)
**Designated Models:** Gemini 3.0 Flash, Gemini 2.5 Pro.
**Execution Frequency:** Medium.
**Core Role:** Module-specific planning, code review, spawning Worker agents, and Topological Dependency Graph management.
The Tech Lead bridges the gap between high-level architecture and actual code syntax. It operates in a "need-to-know" state, utilizing AST parsing (`file_cache.py`) to keep token counts low while maintaining structural awareness of its assigned modules.
## Memory Context & Paths
### Path A: Sprint Planning (Task Delegation)
* **Trigger:** Tier 1 (PM) assigns a Track (Epic) and wakes up the Tech Lead.
* **What it Sees (Context):**
* **The Track Brief:** Acceptance Criteria from Tier 1.
* **Curated Implementation View (Target Modules):** AST-extracted class structures, docstrings, and `# [HOT]` function bodies for the 1-3 files this Track explicitly modifies.
* **Skeleton View (Foreign Modules):** Only function signatures and return types for external dependencies.
* **What it Ignores:** The rest of the repository, the PM's overarching project-planning logic, raw line-by-line code of non-hot functions.
* **Output Format:** A JSON array (Godot ECS Flat List format) of discrete Tier 3 `Tickets` (e.g., Ticket 1: *Write DB migration script*, Ticket 2: *Update core API endpoints*), including `depends_on` pointers to construct an execution DAG.
### Path B: Code Review (Local Integration)
* **Trigger:** A Tier 3 Contributor completes a Ticket and submits a diff, OR Tier 4 (QA) flags a persistent failure.
* **What it Sees (Context):**
* **Specific Ticket Goal:** What the Contributor was instructed to do.
* **Proposed Diff:** The exact line changes submitted by Tier 3.
* **Test/QA Output:** Relevant logs from Tier 4 compiler checks.
* **Curated Implementation View:** To cross-reference the proposed diff against the existing architecture.
* **What it Ignores:** The Contributor's internal trial-and-error chat history. It only sees the final submission.
* **Output Format:** *Approve* (merges diff into working branch and updates Curated View) or *Reject* (sends technical critique back to Tier 3).
### Path C: Track Finalization (Upward Reporting)
* **Trigger:** All Tier 3 Tickets assigned to this Track are marked "Approved."
* **What it Sees (Context):**
* **Original Track Brief:** To verify requirements were met.
* **Aggregated Track Diff:** The sum total of all changes made across all Tier 3 Tickets.
* **Dependency Delta:** A list of any new foreign modules or libraries imported.
* **What it Ignores:** The back-and-forth review cycles, original AST Curated View.
* **Output Format:** An Executive Summary and the final Macro-Diff, sent back to Tier 1.
### Path D: Contract-First Delegation (Stub-and-Resolve)
* **Trigger:** Tier 2 evaluates a Track and detects a cross-module dependency (or a single massive refactor) requiring an undefined signature.
* **Role:** Force Interface-Driven Development (IDD) to prevent hallucination.
* **Execution Flow:**
1. **Contract Definition:** Splits requirement into a `Stub Ticket`, `Consumer Ticket`, and `Implementation Ticket`.
2. **Stub Generation:** Spawns a cheap Tier 3 worker (e.g., DeepSeek V3 `contract_stubber` archetype) to generate the empty function signature, type hints, and docstrings.
3. **Skeleton Broadcast:** The stub merges, and the system instantly re-runs Tree-sitter to update the global Skeleton View.
4. **Parallel Implementation:** Tier 2 simultaneously spawns the `Consumer` (codes against the skeleton) and the `Implementer` (fills the stub logic) in isolated contexts.

View File

@@ -0,0 +1,35 @@
# Tier 3: The Worker Agents (Contributors)
**Designated Models:** DeepSeek V3/R1, Gemini 2.5 Flash.
**Execution Frequency:** High (The core loop).
**Core Role:** Generating syntax, writing localized files, running unit tests.
The engine room of the system. Contributors execute the highest volume of API calls. Their memory context is ruthlessly pruned. By leveraging cheap, fast models, they operate with zero architectural anxiety—they just write the code they are assigned. They are "Amnesiac Workers," having their history wiped between tasks to prevent context ballooning.
## Memory Context & Paths
### Path A: Heads Down Execution (Task Execution)
* **Trigger:** Tier 2 (Tech Lead) hands down a hyper-specific Ticket.
* **What it Sees (Context):**
* **The Ticket Prompt:** The exact, isolated instructions from Tier 2.
* **The Target File (Raw View):** The raw, unredacted, line-by-line source code of *only* the specific file (or class/function) it was assigned to modify.
* **Foreign Interfaces (Skeleton View):** Strict AST skeleton (signatures only) of external dependencies required by the ticket.
* **What it Ignores:** Epic/Track goals, Tech Lead's Curated View, other files in the same directory, parallel Tickets.
* **Output Format:** XML Tags (`<file_path>`, `<file_content>`) defining direct file modifications or `mcp_client.py` tool payloads.
### Path B: Trial and Error (Local Iteration & Tool Execution)
* **Trigger:** The Contributor runs a local linter/test, encounters a syntax error, or the human pauses execution using "Step" mode.
* **What it Sees (Context):**
* **Ephemeral Working History:** A short, rolling window of its last 23 attempts (e.g., "Attempt 1: Wrote code -> Tool Output: SyntaxError").
* **Tier 4 (QA) Injections:** Compressed (20-50 token) fix recommendations from Tier 4 agents (e.g., "Add a closing bracket on line 42").
* **Human Mutations:** Any direct edits made to its JSON history payload before proceeding.
* **What it Ignores:** Tech Lead code reviews, attempts older than the rolling window (wiped to save tokens).
* **Output Format:** Revised tool payloads until tests pass or the human approves.
### Path C: Task Submission (Micro-Pull Request)
* **Trigger:** The code executes cleanly, and "Step" mode is finalized into "Task Complete."
* **What it Sees (Context):**
* **The Original Ticket:** To confirm instructions were met.
* **The Final State:** The cleanly modified file or exact diff.
* **What it Ignores:** **All of Path B.** Before submission to Tier 2, the orchestrator wipes the messy trial-and-error history from the payload.
* **Output Format:** A concise completion message and the clean diff, sent up to Tier 2.

View File

@@ -0,0 +1,33 @@
# Tier 4: The Utility Agents (Compiler / QA)
**Designated Models:** DeepSeek V3 (Lowest cost possible).
**Execution Frequency:** On-demand (Intercepts local failures).
**Core Role:** Single-shot, stateless translation of machine garbage into human English.
Tier 4 acts as the financial firewall. It solves the expensive problem of feeding massive (e.g., 3,000-token) stack traces back into a mid-tier LLM's context window. Tier 4 agents wake up, translate errors, and immediately die.
## Memory Context & Paths
### Path A: The Stack Trace Interceptor (Translator)
* **Trigger:** A Tier 3 Contributor executes a script, resulting in a non-zero exit code with a massive `stderr` payload.
* **What it Sees (Context):**
* **Raw Error Output:** The exact traceback from the runtime/compiler.
* **Offending Snippet:** *Only* the specific function or 20-line block of code where the error originated.
* **What it Ignores:** Everything else. It is blind to the "Why" and focuses only on "What broke."
* **Output Format:** A surgical, highly compressed string (20-50 tokens) passed back into the Tier 3 Contributor's working memory (e.g., "Syntax Error on line 42: You missed a closing parenthesis. Add `]`").
### Path B: The Linter / Formatter (Pedant)
* **Trigger:** Tier 3 believes it finished a Ticket, but pre-commit hooks (e.g., `ruff`, `eslint`) fail.
* **What it Sees (Context):**
* **Linter Warning:** Specific error (e.g., "Line too long", "Missing type hint").
* **Target File:** Code written by Tier 3.
* **What it Ignores:** Business logic. It only cares about styling rules.
* **Output Format:** A direct `sed` command or silent diff overwrite via tools to fix the formatting without bothering Tier 2 or consuming Tier 3 loops.
### Path C: The Flaky Test Debugger (Isolator)
* **Trigger:** A localized unit test fails due to logic (e.g., `assert 5 == 4`), not a syntax crash.
* **What it Sees (Context):**
* **Failing Test Function:** The exact `pytest` or `go test` block.
* **Target Function:** The specific function being tested.
* **What it Ignores:** The rest of the test suite and module.
* **Output Format:** A quick diagnosis sent to Tier 3 (e.g., "The test expects an integer, but your function is currently returning a stringified float. Cast to `int`").

View File

@@ -0,0 +1,66 @@
# Skill: MMA Tiered Orchestrator
## Description
This skill enforces the 4-Tier Hierarchical Multi-Model Architecture (MMA) directly within the Gemini CLI using Token Firewalling and sub-agent task delegation. It teaches the CLI how to act as a Tier 1/2 Orchestrator, dispatching stateless tasks to cheaper models using shell commands, thereby preventing massive error traces or heavy coding contexts from polluting the primary prompt context.
<instructions>
# MMA Token Firewall & Tiered Delegation Protocol
You are operating as a Tier 1 Product Manager or Tier 2 Tech Lead within the MMA Framework. Your context window is extremely valuable and must be protected from token bloat (such as raw, repetitive code edits, trial-and-error histories, or massive stack traces).
To accomplish this, you MUST delegate token-heavy or stateless tasks to "Tier 3 Contributors" or "Tier 4 QA Agents" by spawning secondary Gemini CLI instances via `run_shell_command`.
**CRITICAL Prerequisite:**
To avoid hanging the CLI and ensure proper environment authentication, you MUST NOT call the `gemini` command directly. Instead, you MUST use the wrapper script:
`.\scripts\run_subagent.ps1 -Prompt "..."`
## 1. The Tier 3 Worker (Heads-Down Coding)
When you need to perform a significant code modification (e.g., refactoring a 500-line script, writing a massive class, or implementing a predefined spec):
1. **DO NOT** attempt to write or use `replace`/`write_file` yourself. Your history will bloat.
2. **DO** construct a single, highly specific prompt.
3. **DO** spawn a sub-agent using `run_shell_command` pointing to the target file.
*Command:* `.\scripts\run_subagent.ps1 -Prompt "Modify [FILE_PATH] to implement [SPECIFIC_INSTRUCTION]. Only write the code, no pleasantries."`
4. If you need the sub-agent to automatically apply changes instead of just returning the text, use `gemini run` or pipe the output appropriately. However, the best method is to let the sub-agent modify the code and return "Done."
## 2. The Tier 4 QA Agent (Error Translation)
If you run a local test (e.g., `npm test`, `pytest`, `go run`) via `run_shell_command` and it fails with a massive traceback (e.g., 200+ lines of `stderr`):
1. **DO NOT** analyze the raw `stderr` in your own context window.
2. **DO** immediately spawn a stateless Tier 4 agent to compress the error.
3. *Command:* `.\scripts\run_subagent.ps1 -Prompt "Summarize this stack trace into a 20-word fix: [PASTE_SNIPPET_OF_STDERR_HERE]"`
4. Use the 20-word fix returned by the Tier 4 agent to inform your next architectural decision or pass it to the Tier 3 worker.
## 3. Context Amnesia (Phase Checkpoints)
When you complete a major Phase or Track within the `conductor` workflow:
1. Stage your changes and commit them.
2. Draft a comprehensive summary of the state changes in a Git Note attached to the commit.
3. Treat the checkpoint as a "Memory Wipe." Actively disregard previous conversational turns and trial-and-error histories. Rely exclusively on the newly generated Git Note and the physical state of the files on disk for your next Phase.
</instructions>
<examples>
### Example 1: Spawning a Tier 4 QA Agent
**User / System:** `pytest tests/test_gui.py` failed with 400 lines of output.
**Agent (You):**
```json
{
"command": ".\\scripts\\run_subagent.ps1 -Prompt \"Summarize this stack trace into a 20-word fix: [snip first 30 lines...]\"",
"description": "Spawning Tier 4 QA to compress error trace statelessly."
}
```
### Example 2: Spawning a Tier 3 Worker
**User:** Please implement the `ASTParser` class in `file_cache.py` as defined in Track 1.
**Agent (You):**
```json
{
"command": ".\\scripts\\run_subagent.ps1 -Prompt \"Read file_cache.py and implement the ASTParser class using tree-sitter. Ensure you preserve docstrings but strip function bodies. Output the updated code or edit the file directly.\"",
"description": "Delegating implementation to a Tier 3 Worker."
}
```
</examples>
<triggers>
- When asked to write large amounts of boilerplate or repetitive code.
- When encountering a large error trace from a shell execution.
- When explicitly instructed to act as a "Tech Lead" or "Orchestrator".
- When managing complex, multi-file Track implementations.
</triggers>

36
MMA_UX_SPEC.md Normal file
View File

@@ -0,0 +1,36 @@
# MMA Observability & UX Specification
## 1. Goal
Implement the visible surface area of the 4-Tier Hierarchical Multi-Model Architecture within `gui_2.py`. This ensures the user can monitor, control, and debug the multi-agent execution flow.
## 2. Core Components
### 2.1 MMA Dashboard Panel
- **Visibility:** A new dockable panel named "MMA Dashboard".
- **Track Status:** Display the current active `Track` ID and overall progress (e.g., "3/10 Tickets Complete").
- **Ticket DAG Visualization:** A list or simple graph representing the `Ticket` queue.
- Each ticket shows: `ID`, `Target`, `Status` (Pending, Running, Paused, Complete, Blocked).
- Visual indicators for dependencies (e.g., indented or linked).
### 2.2 The Execution Clutch (HITL)
- **Step Mode Toggle:** A global or per-track checkbox to enable "Step Mode".
- **Pause Points:**
- **Pre-Execution:** When a Tier 3 worker generates a tool call (e.g., `write_file`), the engine pauses.
- **UI Interaction:** The GUI displays the proposed script/change and provides:
- `[Approve]`: Proceed with execution.
- `[Edit Payload]`: Open the Memory Mutator.
- `[Abort]`: Mark the ticket as Blocked/Cancelled.
- **Visual Feedback:** Tactile/Arcade-style blinking or color changes when the engine is "Paused for HITL".
### 2.3 Memory Mutator (The "Debug" Superpower)
- **Functionality:** A modal or dedicated text area that allows the user to edit the raw JSON conversation history of a paused worker.
- **Use Case:** Fixing AI hallucinations or providing specific guidance mid-turn without restarting the context window.
- **Integration:** After editing, the "Approve" button sends the *modified* history back to the engine.
### 2.4 Tiered Metrics & Logs
- **Observability:** Show which model (Tier 1, 2, 3, or 4) is currently active.
- **Sub-Agent Logs:** Provide quick links to open the timestamped log files generated by `mma_exec.py`.
## 3. Technical Integration
- **Event Bus:** Use the existing `AsyncEventQueue` to push `StateUpdateEvents` from the `ConductorEngine` to the GUI.
- **Non-Blocking:** Ensure the UI remains responsive (FPS > 60) even when multiple tickets are processing or the engine is waiting for user input.

View File

@@ -1,246 +0,0 @@
# Manual Slop
## Summary
Is a local GUI tool for manually curating and sending context to AI APIs. It aggregates files, screenshots, and discussion history into a structured markdown file and sends it to a chosen AI provider with a user-written message. The AI can also execute PowerShell scripts within the project directory, with user confirmation required before each execution.
**Stack:**
- `dearpygui` - GUI with docking/floating/resizable panels
- `google-genai` - Gemini API
- `anthropic` - Anthropic API
- `tomli-w` - TOML writing
- `uv` - package/env management
**Files:**
- `gui.py` - main GUI, `App` class, all panels, all callbacks, confirmation dialog, layout persistence, rich comms rendering
- `ai_client.py` - unified provider wrapper, model listing, session management, send, tool/function-call loop, comms log, provider error classification
- `aggregate.py` - reads config, collects files/screenshots/discussion, writes numbered `.md` files to `output_dir`
- `shell_runner.py` - subprocess wrapper that runs PowerShell scripts sandboxed to `base_dir`, returns stdout/stderr/exit code as a string
- `session_logger.py` - opens timestamped log files at session start; writes comms entries as JSON-L and tool calls as markdown; saves each AI-generated script as a `.ps1` file
- `project_manager.py` - per-project .toml load/save, entry serialisation (entry_to_str/str_to_entry with @timestamp support), default_project/default_discussion factories, migrate_from_legacy_config, flat_config for aggregate.run(), git helpers (get_git_commit, get_git_log)
- `theme.py` - palette definitions, font loading, scale, load_from_config/save_to_config
- `gemini.py` - legacy standalone Gemini wrapper (not used by the main GUI; superseded by `ai_client.py`)
- `file_cache.py` - stub; Anthropic Files API path removed; kept so stale imports don't break
- `mcp_client.py` - MCP-style read-only file tools (read_file, list_directory, search_files, get_file_summary); allowlist enforced against project file_items + base_dirs; dispatched by ai_client tool-use loop for both Anthropic and Gemini
- `summarize.py` - local heuristic summariser (no AI); .py via AST, .toml via regex, .md headings, generic preview; used by mcp_client.get_file_summary and aggregate.build_summary_section
- `config.toml` - global-only settings: [ai] provider+model+system_prompt, [theme] palette+font+scale, [projects] paths array + active path
- `manual_slop.toml` - per-project file: [project] name+git_dir+system_prompt+main_context, [output] namespace+output_dir, [files] base_dir+paths, [screenshots] base_dir+paths, [discussion] roles+active+[discussion.discussions.<name>] git_commit+last_updated+history
- `credentials.toml` - gemini api_key, anthropic api_key
- `dpg_layout.ini` - Dear PyGui window layout file (auto-saved on exit, auto-loaded on startup); gitignore this per-user
**GUI Panels:**
- **Projects** - active project name display (green), git directory input + Browse button, scrollable list of loaded project paths (click name to switch, x to remove), Add Project / New Project / Save All buttons
- **Config** - namespace, output dir, save (these are project-level fields from the active .toml)
- **Files** - base_dir, scrollable path list with remove, add file(s), add wildcard
- **Screenshots** - base_dir, scrollable path list with remove, add screenshot(s)
- **Discussion History** - discussion selector (collapsible header): listbox of named discussions, git commit + last_updated display, Update Commit button, Create/Rename/Delete buttons with name input; structured entry editor: each entry has collapse toggle (-/+), role combo, timestamp display, multiline content field; per-entry Ins/Del buttons when collapsed; global toolbar: + Entry, -All, +All, Clear All, Save; collapsible **Roles** sub-section; -> History buttons on Message and Response panels append current message/response as new entry with timestamp
- **Provider** - provider combo (gemini/anthropic), model listbox populated from API, fetch models button
- **Message** - multiline input, Gen+Send button, MD Only button, Reset session button, -> History button
- **Response** - readonly multiline displaying last AI response, -> History button
- **Tool Calls** - scrollable log of every PowerShell tool call the AI made; Clear button
- **System Prompts** - global (all projects) and project-specific multiline text areas for injecting custom system instructions. Combined with the built-in tool prompt.
- **Comms History** - rich structured live log of every API interaction; status line at top; colour legend; Clear button
**Layout persistence:**
- `dpg.configure_app(..., init_file="dpg_layout.ini")` loads the ini at startup if it exists; DPG silently ignores a missing file
- `dpg.save_init_file("dpg_layout.ini")` is called immediately before `dpg.destroy_context()` on clean exit
- The ini records window positions, sizes, and dock node assignments in DPG's native format
- First run (no ini) uses the hardcoded `pos=` defaults in `_build_ui()`; after that the ini takes over
- Delete `dpg_layout.ini` to reset to defaults
**Project management:**
- `config.toml` is global-only: `[ai]`, `[theme]`, `[projects]` (paths list + active path). No project data lives here.
- Each project has its own `.toml` file (e.g. `manual_slop.toml`). Multiple project tomls can be registered by path.
- `App.__init__` loads global config, then loads the active project `.toml` via `project_manager.load_project()`. Falls back to `migrate_from_legacy_config()` if no valid project file exists, creating a new `.toml` automatically.
- `_flush_to_project()` pulls widget values into `self.project` (the per-project dict) and serialises disc_entries into the active discussion's history list
- `_flush_to_config()` writes global settings ([ai], [theme], [projects]) into `self.config`
- `_save_active_project()` writes `self.project` to the active `.toml` path via `project_manager.save_project()`
- `_do_generate()` calls both flush methods, saves both files, then uses `project_manager.flat_config()` to produce the dict that `aggregate.run()` expects — so `aggregate.py` needs zero changes
- Switching projects: saves current project, loads new one, refreshes all GUI state, resets AI session
- New project: file dialog for save path, creates default project structure, saves it, switches to it
**Discussion management (per-project):**
- Each project `.toml` stores one or more named discussions under `[discussion.discussions.<name>]`
- Each discussion has: `git_commit` (str), `last_updated` (ISO timestamp), `history` (list of serialised entry strings)
- `active` key in `[discussion]` tracks which discussion is currently selected
- Creating a discussion: adds a new empty discussion dict via `default_discussion()`, switches to it
- Renaming: moves the dict to a new key, updates `active` if it was the current one
- Deleting: removes the dict; cannot delete the last discussion; switches to first remaining if active was deleted
- Switching: flushes current entries to project, loads new discussion's history, rebuilds disc list
- Update Commit button: runs `git rev-parse HEAD` in the project's `git_dir` and stores result + timestamp in the active discussion
- Timestamps: each disc entry carries a `ts` field (ISO datetime); shown next to the role combo; new entries from `-> History` or `+ Entry` get `now_ts()`
**Entry serialisation (project_manager):**
- `entry_to_str(entry)` → `"@<ts>\n<role>:\n<content>"` (or `"<role>:\n<content>"` if no ts)
- `str_to_entry(raw, roles)` → parses optional `@<ts>` prefix, then role line, then content; returns `{role, content, collapsed, ts}`
- Round-trips correctly through TOML string arrays; handles legacy entries without timestamps
**AI Tool Use (PowerShell):**
- Both Gemini and Anthropic are configured with a `run_powershell` tool/function declaration
- When the AI wants to edit or create files it emits a tool call with a `script` string
- `ai_client` runs a loop (max `MAX_TOOL_ROUNDS = 10`) feeding tool results back until the AI stops calling tools
- Before any script runs, `gui.py` shows a modal `ConfirmDialog` on the main thread; the background send thread blocks on a `threading.Event` until the user clicks Approve or Reject
- The dialog displays `base_dir`, shows the script in an editable text box (allowing last-second tweaks), and has Approve & Run / Reject buttons
- On approval the (possibly edited) script is passed to `shell_runner.run_powershell()` which prepends `Set-Location -LiteralPath '<base_dir>'` and runs it via `powershell -NoProfile -NonInteractive -Command`
- stdout, stderr, and exit code are returned to the AI as the tool result
- Rejections return `"USER REJECTED: command was not executed"` to the AI
- All tool calls (script + result/rejection) are appended to `_tool_log` and displayed in the Tool Calls panel
**Dynamic file context refresh (ai_client.py):**
- After the last tool call in each round, all project files from `file_items` are re-read from disk via `_reread_file_items()`. The `file_items` variable is reassigned so subsequent rounds see fresh content.
- For Anthropic: the refreshed file contents are injected as a `text` block appended to the `tool_results` user message, prefixed with `[FILES UPDATED]` and an instruction not to re-read them.
- For Gemini: refreshed file contents are appended to the last function response's `output` string as a `[SYSTEM: FILES UPDATED]` block. On the next tool round, stale `[FILES UPDATED]` blocks are stripped from history and old tool outputs are truncated to `_history_trunc_limit` characters to control token growth.
- `_build_file_context_text(file_items)` formats the refreshed files as markdown code blocks (same format as the original context)
- The `tool_result_send` comms log entry filters out the injected text block (only logs actual `tool_result` entries) to keep the comms panel clean
- `file_items` flows from `aggregate.build_file_items()` → `gui.py` `self.last_file_items` → `ai_client.send(file_items=...)` → `_send_anthropic(file_items=...)` / `_send_gemini(file_items=...)`
- System prompt updated to tell the AI: "the user's context files are automatically refreshed after every tool call, so you do NOT need to re-read files that are already provided in the <context> block"
**Anthropic bug fixes applied (session history):**
- Bug 1: SDK ContentBlock objects now converted to plain dicts via `_content_block_to_dict()` before storing in `_anthropic_history`; prevents re-serialisation failures on subsequent tool-use rounds
- Bug 2: `_repair_anthropic_history` simplified to dict-only path since history always contains dicts
- Bug 3: Gemini part.function_call access now guarded with `hasattr` check
- Bug 4: Anthropic `b.type == "tool_use"` changed to `getattr(b, "type", None) == "tool_use"` for safe access during response processing
**Comms Log (ai_client.py):**
- `_comms_log: list[dict]` accumulates every API interaction during a session
- `_append_comms(direction, kind, payload)` called at each boundary: OUT/request before sending, IN/response after each model reply, OUT/tool_call before executing, IN/tool_result after executing, OUT/tool_result_send when returning results to the model
- Entry fields: `ts` (HH:MM:SS), `direction` (OUT/IN), `kind`, `provider`, `model`, `payload` (dict)
- Anthropic responses also include `usage` (input_tokens, output_tokens, cache_creation_input_tokens, cache_read_input_tokens) and `stop_reason` in payload
- `get_comms_log()` returns a snapshot; `clear_comms_log()` empties it
- `comms_log_callback` (injected by gui.py) is called from the background thread with each new entry; gui queues entries in `_pending_comms` (lock-protected) and flushes them to the DPG panel each render frame
- `COMMS_CLAMP_CHARS = 300` in gui.py governs the display cutoff for heavy text fields
**Comms History panel — rich structured rendering (gui.py):**
Rather than showing raw JSON, each comms entry is rendered using a kind-specific renderer function. Unknown kinds fall back to a generic key/value layout.
Colour maps:
- Direction: OUT = blue-ish `(100,200,255)`, IN = green-ish `(140,255,160)`
- Kind: request=gold, response=light-green, tool_call=orange, tool_result=light-blue, tool_result_send=lavender
- Labels: grey `(180,180,180)`; values: near-white `(220,220,220)`; dict keys/indices: `(140,200,255)`; numbers/token counts: `(180,255,180)`; sub-headers: `(220,200,120)`
Helper functions:
- `_add_text_field(parent, label, value)` — labelled text; strings longer than `COMMS_CLAMP_CHARS` render as an 80px readonly scrollable `input_text`; shorter strings render as `add_text`
- `_add_kv_row(parent, key, val)` — single horizontal key: value row
- `_render_usage(parent, usage)` — renders Anthropic token usage dict in a fixed display order (input → cache_read → cache_creation → output)
- `_render_tool_calls_list(parent, tool_calls)` — iterates tool call list, showing name, id, and all args via `_add_text_field`
Kind-specific renderers (in `_KIND_RENDERERS` dict, dispatched by `_render_comms_entry`):
- `_render_payload_request` — shows `message` field via `_add_text_field`
- `_render_payload_response` — shows round, stop_reason (orange), text, tool_calls list, usage block
- `_render_payload_tool_call` — shows name, optional id, script via `_add_text_field`
- `_render_payload_tool_result` — shows name, optional id, output via `_add_text_field`
- `_render_payload_tool_result_send` — iterates results list, shows tool_use_id and content per result
- `_render_payload_generic` — fallback for unknown kinds; renders all keys, using `_add_text_field` for keys in `_HEAVY_KEYS`, `_add_kv_row` for others; dicts/lists are JSON-serialised
Entry layout: index + timestamp + direction + kind + provider/model header row, then payload rendered by the appropriate function, then a separator line.
**Session Logger (session_logger.py):**
- `open_session()` called once at GUI startup; creates `logs/` and `scripts/generated/` directories; opens `logs/comms_<ts>.log` and `logs/toolcalls_<ts>.log` (line-buffered)
- `log_comms(entry)` appends each comms entry as a JSON-L line to the comms log; called from `App._on_comms_entry` (background thread); thread-safe via GIL + line buffering
- `log_tool_call(script, result, script_path)` writes the script to `scripts/generated/<ts>_<seq:04d>.ps1` and appends a markdown record to the toolcalls log without the script body (just the file path + result); uses a `threading.Lock` for the sequence counter
- `close_session()` flushes and closes both file handles; called just before `dpg.destroy_context()`
**Anthropic prompt caching:**
- System prompt + context are combined into one string, chunked into <=120k char blocks, and sent as the `system=` parameter array. Only the LAST chunk gets `cache_control: ephemeral`, so the entire system prefix is cached as one unit.
- Last tool in `_ANTHROPIC_TOOLS` (`run_powershell`) has `cache_control: ephemeral`; this means the tools prefix is cached together with the system prefix after the first request.
- The user message is sent as a plain `[{"type": "text", "text": user_message}]` block with NO cache_control. The context lives in `system=`, not in the first user message.
- The tools list is built once per session via `_get_anthropic_tools()` and reused across all API calls within the tool loop, avoiding redundant Python-side reconstruction.
- `_strip_cache_controls()` removes stale `cache_control` markers from all history entries before each API call, ensuring only the stable system/tools prefix consumes cache breakpoint slots.
- Cache stats (creation tokens, read tokens) are surfaced in the comms log usage dict and displayed in the Comms History panel
**Data flow:**
1. GUI edits are held in `App` state (`self.files`, `self.screenshots`, `self.disc_entries`, `self.project`) and dpg widget values
2. `_flush_to_project()` pulls all widget values into `self.project` dict (per-project data)
3. `_flush_to_config()` pulls global settings into `self.config` dict
4. `_do_generate()` calls both flush methods, saves both files, calls `project_manager.flat_config(self.project, disc_name)` to produce a dict for `aggregate.run()`, which writes the md and returns `(markdown_str, path, file_items)`
5. `cb_generate_send()` calls `_do_generate()` then threads a call to `ai_client.send(md, message, base_dir)`
6. `ai_client.send()` prepends the md as a `<context>` block to the user message and sends via the active provider chat session
7. If the AI responds with tool calls, the loop handles them (with GUI confirmation) before returning the final text response
8. Sessions are stateful within a run (chat history maintained), `Reset` clears them, the tool log, and the comms log
**Config persistence:**
- `config.toml` — global only: `[ai]` provider+model, `[theme]` palette+font+scale, `[projects]` paths array + active path
- `<project>.toml` — per-project: output, files, screenshots, discussion (roles, active discussion name, all named discussions with their history+metadata)
- On every send and save, both files are written
- On clean exit, `run()` calls `_flush_to_project()`, `_save_active_project()`, `_flush_to_config()`, `save_config()` before destroying context
**Threading model:**
- DPG render loop runs on the main thread
- AI sends and model fetches run on daemon background threads
- `_pending_dialog` (guarded by a `threading.Lock`) is set by the background thread and consumed by the render loop each frame, calling `dialog.show()` on the main thread
- `dialog.wait()` blocks the background thread on a `threading.Event` until the user acts
- `_pending_comms` (guarded by a separate `threading.Lock`) is populated by `_on_comms_entry` (background thread) and drained by `_flush_pending_comms()` each render frame (main thread)
**Provider error handling:**
- `ProviderError(kind, provider, original)` wraps upstream API exceptions with a classified `kind`: quota, rate_limit, auth, balance, network, unknown
- `_classify_anthropic_error` and `_classify_gemini_error` inspect exception types and status codes/message bodies to assign the kind
- `ui_message()` returns a human-readable label for display in the Response panel
**MCP file tools (mcp_client.py + ai_client.py):**
- Four read-only tools exposed to the AI as native function/tool declarations: `read_file`, `list_directory`, `search_files`, `get_file_summary`
- Access control: `mcp_client.configure(file_items, extra_base_dirs)` is called before each send; builds an allowlist of resolved absolute paths from the project's `file_items` plus the `base_dir`; any path that is not explicitly in the list or not under one of the allowed directories returns `ACCESS DENIED`
- `mcp_client.dispatch(tool_name, tool_input)` is the single dispatch entry point used by both Anthropic and Gemini tool-use loops
- Anthropic: MCP tools appear before `run_powershell` in the tools list (no `cache_control` on them; only `run_powershell` carries `cache_control: ephemeral`)
- Gemini: MCP tools are included in the `FunctionDeclaration` list alongside `run_powershell`
- `get_file_summary` uses `summarize.summarise_file()` — same heuristic used for the initial `<context>` block, so the AI gets the same compact structural view it already knows
- `list_directory` sorts dirs before files; shows name, type, and size
- `search_files` uses `Path.glob()` with the caller-supplied pattern (supports `**/*.py` style)
- `read_file` returns raw UTF-8 text; errors (not found, access denied, decode error) are returned as error strings rather than exceptions, so the AI sees them as tool results
- `summarize.py` heuristics: `.py` → AST imports + ALL_CAPS constants + classes+methods + top-level functions; `.toml` → table headers + top-level keys; `.md` → h1–h3 headings with indentation; all others → line count + first 8 lines preview
- Comms log: MCP tool calls log `OUT/tool_call` with `{"name": ..., "args": {...}}` and `IN/tool_result` with `{"name": ..., "output": ...}`; rendered in the Comms History panel via `_render_payload_tool_call` (shows each arg key/value) and `_render_payload_tool_result` (shows output)
**Known extension points:**
- Add more providers by adding a section to `credentials.toml`, a `_list_*` and `_send_*` function in `ai_client.py`, and the provider name to the `PROVIDERS` list in `gui.py`
- Discussion history excerpts could be individually toggleable for inclusion in the generated md
- `MAX_TOOL_ROUNDS` in `ai_client.py` caps agentic loops at 10 rounds; adjustable
- `COMMS_CLAMP_CHARS` in `gui.py` controls the character threshold for clamping heavy payload fields in the Comms History panel
- Additional project metadata (description, tags, created date) could be added to `[project]` in the per-project toml
### Gemini Context Management
- Gemini uses explicit caching via `client.caches.create()` to store the `system_instruction` + tools as an immutable cached prefix with a 1-hour TTL. The cache is created once per chat session.
- When context changes (detected via `md_content` hash), the old cache is deleted, a new cache is created, and chat history is migrated to a fresh chat session pointing at the new cache.
- If cache creation fails (e.g., content is under the minimum token threshold — 1024 for Flash, 4096 for Pro), the system falls back to inline `system_instruction` in the chat config. Implicit caching may still provide cost savings in this case.
- The `<context>` block lives inside `system_instruction`, NOT in user messages, preventing history bloat across turns.
- On cleanup/exit, active caches are deleted via `ai_client.cleanup()` to prevent orphaned billing.
### Latest Changes
- Removed `Config` panel from the GUI to streamline per-project configuration.
- `output_dir` was moved into the Projects panel.
- `auto_add_history` was moved to the Discussion History panel.
- `namespace` is no longer a configurable field; `aggregate.py` automatically uses the active project's `name` property.
### UI / Visual Updates
- The success blink notification on the response text box is now dimmer and more transparent to be less visually jarring.
- Added a new floating **Last Script Output** popup window. This window automatically displays and blinks blue whenever the AI executes a PowerShell tool, showing both the executed script and its result in real-time.
## Recent Changes (Text Viewer Maximization)
- **Global Text Viewer (gui.py)**: Added a dedicated, large popup window (win_text_viewer) to allow reading and scrolling through large, dense text blocks without feeling cramped.
- **Comms History**: Every multi-line text field in the comms log now has a [+] button next to its label that opens the text in the Global Text Viewer.
- **Tool Log History**: Added [+ Script] and [+ Output] buttons next to each logged tool call to easily maximize and read the full executed scripts and raw tool outputs.
- **Last Script Output Popup**: Expanded the default size of the popup (now 800x600) and gave the input script panel more vertical space to prevent it from feeling 'scrunched'. Added [+ Maximize] buttons for both the script and the output sections to inspect them in full detail.
- **Confirm Dialog**: The script confirmation modal now has a [+ Maximize] button so you can read large generated scripts in full-screen before approving them.
## UI Enhancements (2026-02-21)
### Global Word-Wrap
A new **Word-Wrap** checkbox has been added to the **Projects** panel. This setting is saved per-project in its .toml file.
- When **enabled** (default), long text in read-only panels (like the main Response window, Tool Call outputs, and Comms History) will wrap to fit the panel width.
- When **disabled**, text will not wrap, and a horizontal scrollbar will appear for oversized content.
This allows you to choose the best viewing mode for either prose or wide code blocks.
### Maximizable Discussion Entries
Each entry in the **Discussion History** now features a [+ Max] button. Clicking this button opens the full text of that entry in the large **Text Viewer** popup, making it easy to read or copy large blocks of text from the conversation history without being constrained by the small input box.
\n\n## Multi-Viewport & Docking\nThe application now supports Dear PyGui Viewport Docking. Windows can be dragged outside the main application area or docked together. A global 'Windows' menu in the viewport menu bar allows you to reopen any closed panels.
## Extensive Documentation (2026-02-22)
Documentation has been completely rewritten matching the strict, structural format of `VEFontCache-Odin`.
- `docs/guide_architecture.md`: Details the Python implementation algorithms, queue management for UI rendering, the specific AST heuristics used for context aggregation, and the distinct algorithms for trimming Anthropic history vs Gemini state caching.
- `docs/Readme.md`: The core interface manual.
- `docs/guide_tools.md`: Security architecture for `_is_allowed` paths and definitions of the read-only vs destructive tool pipeline.

141
Readme.md
View File

@@ -1,45 +1,132 @@
# Manual Slop
# Sloppy
Vibe coding.. but more manual
![img](./gallery/splash.png)
![img](./gallery/python_2026-02-21_23-37-29.png)
A GUI orchestrator for local LLM-driven coding sessions. Manual Slop bridges high-latency AI reasoning with a low-latency ImGui render loop via a thread-safe asynchronous pipeline, ensuring every AI-generated payload passes through a human-auditable gate before execution.
This tool is designed to work as an auxiliary assistant that natively interacts with your codebase via PowerShell and MCP-like file tools, supporting both Anthropic and Gemini APIs.
**Tech Stack**: Python 3.11+, Dear PyGui / ImGui, FastAPI, Uvicorn
**Providers**: Gemini API, Anthropic API, DeepSeek, Gemini CLI (headless)
**Platform**: Windows (PowerShell) — single developer, local use
Features:
![img](./gallery/python_2026-03-01_23-45-34.png)
* Multi-provider support (Anthropic & Gemini).
* Multi-project workspace management via TOML configuration.
* Rich discussion history with branching and timestamps.
* Real-time file context aggregation and summarization.
* Integrated tool execution:
* PowerShell scripting for file modifications.
* MCP-like filesystem tools (read, list, search, summarize).
* Web search and URL fetching.
* Extensive UI features:
* Word-wrap toggles.
* Popup text viewers for large script/output inspection.
* Color theming and UI scaling.
---
## Architecture at a Glance
Four thread domains operate concurrently: the ImGui main loop, an asyncio worker for AI calls, a `HookServer` (HTTP on `:8999`) for external automation, and transient threads for model fetching. Background threads never write GUI state directly — they serialize task dicts into lock-guarded lists that the main thread drains once per frame ([details](./docs/guide_architecture.md#the-task-pipeline-producer-consumer-synchronization)).
The **Execution Clutch** suspends the AI execution thread on a `threading.Condition` when a destructive action (PowerShell script, sub-agent spawn) is requested. The GUI renders a modal where the user can read, edit, or reject the payload. On approval, the condition is signaled and execution resumes ([details](./docs/guide_architecture.md#the-execution-clutch-human-in-the-loop)).
The **MMA (Multi-Model Agent)** system decomposes epics into tracks, tracks into DAG-ordered tickets, and executes each ticket with a stateless Tier 3 worker that starts from `ai_client.reset_session()` — no conversational bleed between tickets ([details](./docs/guide_mma.md)).
---
## Documentation
* [docs/Readme.md](docs/Readme.md) for the interface and usage guide
* [docs/guide_tools.md](docs/guide_tools.md) for information on the AI tooling capabilities
* [docs/guide_architecture.md](docs/guide_architecture.md) for an in-depth breakdown of the codebase architecture
| Guide | Scope |
|---|---|
| [Architecture](./docs/guide_architecture.md) | Threading model, event system, AI client multi-provider architecture, HITL mechanism, comms logging |
| [Tools & IPC](./docs/guide_tools.md) | MCP Bridge security model, all 26 native tools, Hook API endpoints, ApiHookClient reference, shell runner |
| [MMA Orchestration](./docs/guide_mma.md) | 4-tier hierarchy, Ticket/Track data structures, DAG engine, ConductorEngine execution loop, worker lifecycle |
| [Simulations](./docs/guide_simulations.md) | `live_gui` fixture, Puppeteer pattern, mock provider, visual verification patterns, ASTParser / summarizer |
## Instructions
---
1. Make a credentials.toml in the immediate directory of your clone:
## Module Map
| File | Lines | Role |
|---|---|---|
| `gui_2.py` | ~3080 | Primary ImGui interface — App class, frame-sync, HITL dialogs |
| `ai_client.py` | ~1800 | Multi-provider LLM abstraction (Gemini, Anthropic, DeepSeek, Gemini CLI) |
| `mcp_client.py` | ~870 | 26 MCP tools with filesystem sandboxing and tool dispatch |
| `api_hooks.py` | ~330 | HookServer — REST API for external automation on `:8999` |
| `api_hook_client.py` | ~245 | Python client for the Hook API (used by tests and external tooling) |
| `multi_agent_conductor.py` | ~250 | ConductorEngine — Tier 2 orchestration loop with DAG execution |
| `conductor_tech_lead.py` | ~100 | Tier 2 ticket generation from track briefs |
| `dag_engine.py` | ~100 | TrackDAG (dependency graph) + ExecutionEngine (tick-based state machine) |
| `models.py` | ~100 | Ticket, Track, WorkerContext dataclasses |
| `events.py` | ~89 | EventEmitter, AsyncEventQueue, UserRequestEvent |
| `project_manager.py` | ~300 | TOML config persistence, discussion management, track state |
| `session_logger.py` | ~200 | JSON-L + markdown audit trails (comms, tools, CLI, hooks) |
| `shell_runner.py` | ~100 | PowerShell execution with timeout, env config, QA callback |
| `file_cache.py` | ~150 | ASTParser (tree-sitter) — skeleton and curated views |
| `summarize.py` | ~120 | Heuristic file summaries (imports, classes, functions) |
| `outline_tool.py` | ~80 | Hierarchical code outline via stdlib `ast` |
---
## Setup
### Prerequisites
- Python 3.11+
- [`uv`](https://github.com/astral-sh/uv) for package management
### Installation
```powershell
git clone <repo>
cd manual_slop
uv sync
```
### Credentials
Configure in `credentials.toml`:
```toml
[gemini]
api_key = "****"
api_key = "YOUR_KEY"
[anthropic]
api_key = "****"
api_key = "YOUR_KEY"
[deepseek]
api_key = "YOUR_KEY"
```
2. Have fun. This is experiemntal slop.
### Running
```ps1
uv run .\gui.py
```powershell
uv run gui_2.py # Normal mode
uv run gui_2.py --enable-test-hooks # With Hook API on :8999
```
### Running Tests
```powershell
uv run pytest tests/ -v
```
---
## Project Configuration
Projects are stored as `<name>.toml` files. The discussion history is split into a sibling `<name>_history.toml` to keep the main config lean.
```toml
[project]
name = "my_project"
git_dir = "./my_repo"
system_prompt = ""
[files]
base_dir = "./my_repo"
paths = ["src/**/*.py", "README.md"]
[screenshots]
base_dir = "./my_repo"
paths = []
[output]
output_dir = "./md_gen"
[gemini_cli]
binary_path = "gemini"
[agent.tools]
run_powershell = true
read_file = true
# ... 26 tool flags
```

122
TASKS.md Normal file
View File

@@ -0,0 +1,122 @@
# TASKS.md
<!-- Quick-read pointer to active and planned conductor tracks -->
<!-- Source of truth for task state is conductor/tracks/*/plan.md -->
## Active Tracks
*(none — all planned tracks queued below)*
## Completed This Session
- `mma_agent_focus_ux_20260302` — Per-tier source_tier tagging on comms+tool entries; Focus Agent combo UI; filter logic in comms+tool panels; [tier] label per comms entry. 18 tests. Checkpoint: b30e563.
- `feature_bleed_cleanup_20260302` — Removed dead comms panel dup, dead menubar block, duplicate __init__ vars; added working Quit; fixed Token Budget layout. All phases verified. Checkpoint: 0d081a2.
- `context_token_viz_20260301` — Token budget panel (color bar, breakdown table, trim warning, cache status, auto-refresh). All phases verified. Commit: d577457.
## Planned: Next Track
### `mma_agent_focus_ux_20260302` — COMPLETED (b30e563)
~~(initialized — run after bleed cleanup)~~
**Priority:** High
**Depends on:** `feature_bleed_cleanup_20260302` Phase 1 (dead comms panel removed)
**Track dir:** `conductor/tracks/mma_agent_focus_ux_20260302/`
**Audit-confirmed gaps:**
- `ai_client._append_comms` emits entries with no `source_tier` key
- `ai_client` has no `current_tier` module variable — no way for tiers to self-identify
- `_tool_log` is `list[tuple[str,str,float]]` — no tier field, tuple must migrate to dict
- `run_worker_lifecycle` replaces `comms_log_callback` but never stamps `source_tier`
- `generate_tickets` (Tier 2) does NOT replace callback at all
- No Focus Agent selector widget in Operations Hub
**Scope:** Phase 1 (tier tagging) → Phase 2 (tool log dict migration) → Phase 3 (Focus Agent UI + filter). Per-tier token stats deferred to sub-track.
### `tech_debt_and_test_cleanup_20260302` (initialized)
**Priority:** High
**Depends on:** `feature_bleed_cleanup_20260302`
**Track dir:** `conductor/tracks/tech_debt_and_test_cleanup_20260302/`
**Audit-confirmed gaps:**
- 13 test files duplicate `app_instance` fixture instead of using `conftest.py`.
- Duplicate test files (`test_ast_parser_curated.py`).
- Multiple simulation tests silently pass with no assertions.
- `gui_2.py` initializes 9 state variables in `__init__` that are never read.
- `gui_2.py` has over 15 uncalled HTTP/background methods.
**Scope:** Phase 1 (Fixture deduplication) → Phase 2 (False-positive test fixing) → Phase 3 (Dead code excision in `gui_2.py`).
### `conductor_workflow_improvements_20260302` (initialized)
**Priority:** High
**Depends on:** None
**Track dir:** `conductor/tracks/conductor_workflow_improvements_20260302/`
**Audit-confirmed gaps:**
- Tier 2 skill lacks enforcement of AST pre-implementation scans to prevent duplicate state variables.
- Tier 2 skill lacks explicit rejection of non-TDD execution.
- Tier 3 skill does not strictly forbid implementing code without failing tests.
- `workflow.md` lacks explicit warnings against zero-assertion tests and redundant `__init__` state.
**Scope:** Phase 1 (Update MMA Skill prompts) → Phase 2 (Update `workflow.md`).
### `architecture_boundary_hardening_20260302` (initialized)
**Priority:** High
**Depends on:** None
**Track dir:** `conductor/tracks/architecture_boundary_hardening_20260302/`
**Audit-confirmed gaps:**
- `ai_client.py` loops execute `set_file_slice` and `py_update_definition` instantly without checking `pre_tool_callback`, bypassing GUI approval.
- New `mcp_client.py` tools are not exposed in the GUI or `manual_slop.toml` config for user control.
- `mma_exec.py` bypasses skeletonization for `mcp_client`, causing token bloat.
- `dag_engine.py` does not cascade `blocked` states, causing orchestrator infinite loops.
**Scope:** Phase 1 (Meta-tooling token fix) → Phase 2 (Complete MCP Tool Integration & Seal GUI HITL bypass) → Phase 3 (Fix DAG Engine cascading blocks).
### `testing_consolidation_20260302` (initialized)
**Priority:** Medium
**Depends on:** `tech_debt_and_test_cleanup_20260302`
**Track dir:** `conductor/tracks/testing_consolidation_20260302/`
**Audit-confirmed gaps:**
- `visual_mma_verification.py` manually runs `subprocess.Popen` instead of using the robust `live_gui` fixture.
- Duplicate architectural logic between tests and `simulation/` directories causing fragmentation.
**Scope:** Phase 1 (Migrate manual launchers to fixtures) → Phase 2 (Consolidate simulation scripts).
---
## Track Dependency Order (Execution Guide)
To ensure smooth execution, execute the tracks in the following order:
1. `feature_bleed_cleanup_20260302` (Base cleanup of GUI structure)
2. `mma_agent_focus_ux_20260302` (Depends on feature bleed cleanup Phase 1)
3. `architecture_boundary_hardening_20260302` (Fixes critical HITL & Token leaks; independent but foundational)
4. `tech_debt_and_test_cleanup_20260302` (Re-establishes testing foundation; run after feature tracks)
5. `testing_consolidation_20260302` (Refactors testing methodology; depends on tech debt cleanup)
6. `conductor_workflow_improvements_20260302` (Meta-level updates to skills/workflow docs; can be run anytime)
---
## Future Backlog (Post-Cleanup)
*To be evaluated in a future Tier 1 session after the immediate tech debt queue is cleared.*
### `gui_decoupling_controller`
**Context:** `gui_2.py` is over 3,500 lines and operates as a Monolithic God Object. It violates the "Data-Oriented & Immediate Mode" heuristics by owning complex business logic, orchestrator hooks (`_bg_create_track`), and markdown file building instead of acting as a pure view.
**Goal:** Create a headless `orchestrator_pm.py` or `app_controller.py` that handles the core lifecycle, allowing `gui_2.py` to be a lagless, immediate-mode projection of the state.
### `robust_json_parsing_tech_lead`
**Context:** In `conductor_tech_lead.py`, the `generate_tickets` function relies on a generic `try...except` block to parse the LLM's JSON ticket array. If the model hallucinates or outputs invalid JSON, it silently returns an empty array `[]`, causing the GUI to fail the track creation process without giving the model a chance to self-correct.
**Goal:** Implement a programmatic retry loop that catches `JSONDecodeError` and feeds the error back to the Tier 2 model for self-correction before failing the UI operation.
### `strict_static_analysis_and_typing`
**Context:** Running `uv run ruff check .` and `uv run mypy --explicit-package-bases .` revealed massive technical debt in type safety (512+ Mypy errors across 64 files, 200+ remaining Ruff violations). The `gui_2.py` and `api_hook_client.py` files specifically have severe "Any" bleeding and incorrect unions.
**Goal:** Resolve all static analysis errors. Enforce strict `mypy` compliance, remove implicit `Optional` types, and fix ambiguous variables (`l`). Integrate `ruff` and `mypy` into a CI pre-commit hook so Tier 3 workers are forced to write type-safe code going forward.
### `hook_api_ui_state_verification`
**Context:** Manual verification of UI widget state is difficult and unreliable. `live_gui` fixture + `ApiHookClient` exist but new widget state vars (e.g. `ui_focus_agent`) are not wired to `_settable_fields` or GET endpoints. Future tracks must add state to `_settable_fields` and write `live_gui`-based tests instead of relying on user confirmation.
**Goal:** Add `ui_focus_agent` (and a standard pattern for future widgets) to `_settable_fields`; add a `/api/gui/state` GET endpoint returning key UI vars; write `live_gui` integration test for Focus Agent filter.
### `concurrent_tier_source_tier`
**Context:** `ai_client.current_tier` is a module-level `str | None`. Safe today because the MMA engine serializes `send()` calls. When concurrent Tier 3/4 agents run in parallel (multiple tickets processed simultaneously), this will produce incorrect tier tags.
**Goal:** Replace with `threading.local()` storage or pass `source_tier` explicitly through the `send()` call signature so each concurrent agent self-identifies without sharing module state.
### `test_suite_performance_and_flakiness`
**Context:** Running `uv run pytest` takes over 5.0 minutes to execute and frequently hangs on integration tests (e.g. `test_spawn_interception.py`). Several simulation tests (`test_sim_ai_settings.py`, `test_extended_sims.py`) are also currently failing or timing out.
**Goal:** Audit the test suite for `time.sleep()` abuse. Replace hardcoded sleeps with `threading.Event()` hooks or robust polling. Isolate slow integration tests with `@pytest.mark.slow` and ensure the core unit test suite runs in under 10 seconds to maintain high-velocity TDD.

View File

@@ -1,4 +1,5 @@
# aggregate.py
from __future__ import annotations
"""
Note(Gemini):
This module orchestrates the construction of the final Markdown context string.
@@ -15,7 +16,10 @@ import tomllib
import re
import glob
from pathlib import Path, PureWindowsPath
from typing import Any
import summarize
import project_manager
from file_cache import ASTParser
def find_next_increment(output_dir: Path, namespace: str) -> int:
pattern = re.compile(rf"^{re.escape(namespace)}_(\d+)\.md$")
@@ -37,14 +41,21 @@ def is_absolute_with_drive(entry: str) -> bool:
def resolve_paths(base_dir: Path, entry: str) -> list[Path]:
has_drive = is_absolute_with_drive(entry)
is_wildcard = "*" in entry
matches = []
if is_wildcard:
root = Path(entry) if has_drive else base_dir / entry
matches = [Path(p) for p in glob.glob(str(root), recursive=True) if Path(p).is_file()]
return sorted(matches)
else:
if has_drive:
return [Path(entry)]
return [(base_dir / entry).resolve()]
p = Path(entry) if has_drive else (base_dir / entry).resolve()
matches = [p]
# Blacklist filter
filtered = []
for p in matches:
name = p.name.lower()
if name == "history.toml" or name.endswith("_history.toml"):
continue
filtered.append(p)
return sorted(filtered)
def build_discussion_section(history: list[str]) -> str:
sections = []
@@ -52,9 +63,13 @@ def build_discussion_section(history: list[str]) -> str:
sections.append(f"### Discussion Excerpt {i}\n\n{paste.strip()}")
return "\n\n---\n\n".join(sections)
def build_files_section(base_dir: Path, files: list[str]) -> str:
def build_files_section(base_dir: Path, files: list[str | dict[str, Any]]) -> str:
sections = []
for entry in files:
for entry_raw in files:
if isinstance(entry_raw, dict):
entry = entry_raw.get("path")
else:
entry = entry_raw
paths = resolve_paths(base_dir, entry)
if not paths:
sections.append(f"### `{entry}`\n\n```text\nERROR: no files matched: {entry}\n```")
@@ -87,8 +102,7 @@ def build_screenshots_section(base_dir: Path, screenshots: list[str]) -> str:
sections.append(f"### `{original}`\n\n![{path.name}]({path.as_posix()})")
return "\n\n---\n\n".join(sections)
def build_file_items(base_dir: Path, files: list[str]) -> list[dict]:
def build_file_items(base_dir: Path, files: list[str | dict[str, Any]]) -> list[dict[str, Any]]:
"""
Return a list of dicts describing each file, for use by ai_client when it
wants to upload individual files rather than inline everything as markdown.
@@ -98,27 +112,38 @@ def build_file_items(base_dir: Path, files: list[str]) -> list[dict]:
entry : str (original config entry string)
content : str (file text, or error string)
error : bool
mtime : float (last modification time, for skip-if-unchanged optimization)
tier : int | None (optional tier for context management)
"""
items = []
for entry in files:
for entry_raw in files:
if isinstance(entry_raw, dict):
entry = entry_raw.get("path")
tier = entry_raw.get("tier")
else:
entry = entry_raw
tier = None
paths = resolve_paths(base_dir, entry)
if not paths:
items.append({"path": None, "entry": entry, "content": f"ERROR: no files matched: {entry}", "error": True})
items.append({"path": None, "entry": entry, "content": f"ERROR: no files matched: {entry}", "error": True, "mtime": 0.0, "tier": tier})
continue
for path in paths:
try:
content = path.read_text(encoding="utf-8")
mtime = path.stat().st_mtime
error = False
except FileNotFoundError:
content = f"ERROR: file not found: {path}"
mtime = 0.0
error = True
except Exception as e:
content = f"ERROR: {e}"
mtime = 0.0
error = True
items.append({"path": path, "entry": entry, "content": content, "error": error})
items.append({"path": path, "entry": entry, "content": content, "error": error, "mtime": mtime, "tier": tier})
return items
def build_summary_section(base_dir: Path, files: list[str]) -> str:
def build_summary_section(base_dir: Path, files: list[str | dict[str, Any]]) -> str:
"""
Build a compact summary section using summarize.py — one short block per file.
Used as the initial <context> block instead of full file contents.
@@ -126,7 +151,124 @@ def build_summary_section(base_dir: Path, files: list[str]) -> str:
items = build_file_items(base_dir, files)
return summarize.build_summary_markdown(items)
def build_markdown(base_dir: Path, files: list[str], screenshot_base_dir: Path, screenshots: list[str], history: list[str], summary_only: bool = False) -> str:
def _build_files_section_from_items(file_items: list[dict[str, Any]]) -> str:
"""Build the files markdown section from pre-read file items (avoids double I/O)."""
sections = []
for item in file_items:
path = item.get("path")
entry = item.get("entry", "unknown")
content = item.get("content", "")
if path is None:
sections.append(f"### `{entry}`\n\n```text\n{content}\n```")
continue
suffix = path.suffix.lstrip(".") if hasattr(path, "suffix") else "text"
lang = suffix if suffix else "text"
original = entry if "*" not in entry else str(path)
sections.append(f"### `{original}`\n\n```{lang}\n{content}\n```")
return "\n\n---\n\n".join(sections)
def build_markdown_from_items(file_items: list[dict[str, Any]], screenshot_base_dir: Path, screenshots: list[str], history: list[str], summary_only: bool = False) -> str:
"""Build markdown from pre-read file items instead of re-reading from disk."""
parts = []
# STATIC PREFIX: Files and Screenshots must go first to maximize Cache Hits
if file_items:
if summary_only:
parts.append("## Files (Summary)\n\n" + summarize.build_summary_markdown(file_items))
else:
parts.append("## Files\n\n" + _build_files_section_from_items(file_items))
if screenshots:
parts.append("## Screenshots\n\n" + build_screenshots_section(screenshot_base_dir, screenshots))
# DYNAMIC SUFFIX: History changes every turn, must go last
if history:
parts.append("## Discussion History\n\n" + build_discussion_section(history))
return "\n\n---\n\n".join(parts)
def build_markdown_no_history(file_items: list[dict[str, Any]], screenshot_base_dir: Path, screenshots: list[str], summary_only: bool = False) -> str:
"""Build markdown with only files + screenshots (no history). Used for stable caching."""
return build_markdown_from_items(file_items, screenshot_base_dir, screenshots, history=[], summary_only=summary_only)
def build_discussion_text(history: list[str]) -> str:
"""Build just the discussion history section text. Returns empty string if no history."""
if not history:
return ""
return "## Discussion History\n\n" + build_discussion_section(history)
def build_tier1_context(file_items: list[dict[str, Any]], screenshot_base_dir: Path, screenshots: list[str], history: list[str]) -> str:
"""
Tier 1 Context: Strategic/Orchestration.
Full content for core conductor files and files with tier=1, summaries for others.
"""
core_files = {"product.md", "tech-stack.md", "workflow.md", "tracks.md"}
parts = []
# Files section
if file_items:
sections = []
for item in file_items:
path = item.get("path")
name = path.name if path else ""
if name in core_files or item.get("tier") == 1:
# Include in full
sections.append("### `" + (item.get("entry") or str(path)) + "`\n\n" +
f"```{path.suffix.lstrip('.') if path.suffix else 'text'}\n{item.get('content', '')}\n```")
else:
# Summarize
sections.append("### `" + (item.get("entry") or str(path)) + "`\n\n" +
summarize.summarise_file(path, item.get("content", "")))
parts.append("## Files (Tier 1 - Mixed)\n\n" + "\n\n---\n\n".join(sections))
if screenshots:
parts.append("## Screenshots\n\n" + build_screenshots_section(screenshot_base_dir, screenshots))
if history:
parts.append("## Discussion History\n\n" + build_discussion_section(history))
return "\n\n---\n\n".join(parts)
def build_tier2_context(file_items: list[dict[str, Any]], screenshot_base_dir: Path, screenshots: list[str], history: list[str]) -> str:
"""
Tier 2 Context: Architectural/Tech Lead.
Full content for all files (standard behavior).
"""
return build_markdown_from_items(file_items, screenshot_base_dir, screenshots, history, summary_only=False)
def build_tier3_context(file_items: list[dict[str, Any]], screenshot_base_dir: Path, screenshots: list[str], history: list[str], focus_files: list[str]) -> str:
"""
Tier 3 Context: Execution/Worker.
Full content for focus_files and files with tier=3, summaries/skeletons for others.
"""
parts = []
if file_items:
sections = []
for item in file_items:
path = item.get("path")
entry = item.get("entry", "")
path_str = str(path) if path else ""
# Check if this file is in focus_files (by name or path)
is_focus = False
for focus in focus_files:
if focus == entry or (path and focus == path.name) or focus in path_str:
is_focus = True
break
if is_focus or item.get("tier") == 3:
sections.append("### `" + (entry or path_str) + "`\n\n" +
f"```{path.suffix.lstrip('.') if path and path.suffix else 'text'}\n{item.get('content', '')}\n```")
else:
content = item.get("content", "")
if path and path.suffix == ".py" and not item.get("error"):
try:
parser = ASTParser("python")
skeleton = parser.get_skeleton(content)
sections.append(f"### `{entry or path_str}` (AST Skeleton)\n\n```python\n{skeleton}\n```")
except Exception:
# Fallback to summary if AST parsing fails
sections.append(f"### `{entry or path_str}`\n\n" + summarize.summarise_file(path, content))
else:
sections.append(f"### `{entry or path_str}`\n\n" + summarize.summarise_file(path, content))
parts.append("## Files (Tier 3 - Focused)\n\n" + "\n\n---\n\n".join(sections))
if screenshots:
parts.append("## Screenshots\n\n" + build_screenshots_section(screenshot_base_dir, screenshots))
if history:
parts.append("## Discussion History\n\n" + build_discussion_section(history))
return "\n\n---\n\n".join(parts)
def build_markdown(base_dir: Path, files: list[str | dict[str, Any]], screenshot_base_dir: Path, screenshots: list[str], history: list[str], summary_only: bool = False) -> str:
parts = []
# STATIC PREFIX: Files and Screenshots must go first to maximize Cache Hits
if files:
@@ -141,7 +283,7 @@ def build_markdown(base_dir: Path, files: list[str], screenshot_base_dir: Path,
parts.append("## Discussion History\n\n" + build_discussion_section(history))
return "\n\n---\n\n".join(parts)
def run(config: dict) -> tuple[str, Path]:
def run(config: dict[str, Any]) -> tuple[str, Path, list[dict[str, Any]]]:
namespace = config.get("project", {}).get("name")
if not namespace:
namespace = config.get("output", {}).get("namespace", "project")
@@ -151,21 +293,33 @@ def run(config: dict) -> tuple[str, Path]:
screenshot_base_dir = Path(config.get("screenshots", {}).get("base_dir", "."))
screenshots = config.get("screenshots", {}).get("paths", [])
history = config.get("discussion", {}).get("history", [])
output_dir.mkdir(parents=True, exist_ok=True)
increment = find_next_increment(output_dir, namespace)
output_file = output_dir / f"{namespace}_{increment:03d}.md"
# Provide full files to trigger Gemini's 32k cache threshold and give the AI immediate context
markdown = build_markdown(base_dir, files, screenshot_base_dir, screenshots, history,
summary_only=False)
output_file.write_text(markdown, encoding="utf-8")
# Build file items once, then construct markdown from them (avoids double I/O)
file_items = build_file_items(base_dir, files)
summary_only = config.get("project", {}).get("summary_only", False)
markdown = build_markdown_from_items(file_items, screenshot_base_dir, screenshots, history,
summary_only=summary_only)
output_file.write_text(markdown, encoding="utf-8")
return markdown, output_file, file_items
def main():
with open("config.toml", "rb") as f:
import tomllib
config = tomllib.load(f)
def main() -> None:
# Load global config to find active project
config_path = Path("config.toml")
if not config_path.exists():
print("config.toml not found.")
return
with open(config_path, "rb") as f:
global_cfg = tomllib.load(f)
active_path = global_cfg.get("projects", {}).get("active")
if not active_path:
print("No active project found in config.toml.")
return
# Use project_manager to load project (handles history segregation)
proj = project_manager.load_project(active_path)
# Use flat_config to make it compatible with aggregate.run()
config = project_manager.flat_config(proj)
markdown, output_file, _ = run(config)
print(f"Written: {output_file}")

File diff suppressed because it is too large Load Diff

245
api_hook_client.py Normal file
View File

@@ -0,0 +1,245 @@
from __future__ import annotations
import requests
import json
import time
from typing import Any
class ApiHookClient:
def __init__(self, base_url: str = "http://127.0.0.1:8999", max_retries: int = 5, retry_delay: float = 0.2) -> None:
self.base_url = base_url
self.max_retries = max_retries
self.retry_delay = retry_delay
def wait_for_server(self, timeout: float = 3) -> bool:
"""
Polls the /status endpoint until the server is ready or timeout is reached.
"""
start_time = time.time()
while time.time() - start_time < timeout:
try:
if self.get_status().get('status') == 'ok':
return True
except (requests.exceptions.ConnectionError, requests.exceptions.Timeout):
time.sleep(0.1)
return False
def _make_request(self, method: str, endpoint: str, data: dict | None = None, timeout: float | None = None) -> dict | None:
url = f"{self.base_url}{endpoint}"
headers = {'Content-Type': 'application/json'}
last_exception = None
# Increase default request timeout for local server
req_timeout = timeout if timeout is not None else 10.0
for attempt in range(self.max_retries + 1):
try:
if method == 'GET':
response = requests.get(url, timeout=req_timeout)
elif method == 'POST':
response = requests.post(url, json=data, headers=headers, timeout=req_timeout)
else:
raise ValueError(f"Unsupported HTTP method: {method}")
response.raise_for_status() # Raise HTTPError for bad responses (4xx or 5xx)
return response.json()
except (requests.exceptions.Timeout, requests.exceptions.ConnectionError) as e:
last_exception = e
if attempt < self.max_retries:
time.sleep(self.retry_delay)
continue
else:
if isinstance(e, requests.exceptions.Timeout):
raise requests.exceptions.Timeout(f"Request to {endpoint} timed out after {self.max_retries} retries.") from e
else:
raise requests.exceptions.ConnectionError(f"Could not connect to API hook server at {self.base_url} after {self.max_retries} retries.") from e
except requests.exceptions.HTTPError as e:
raise requests.exceptions.HTTPError(f"HTTP error {e.response.status_code} for {endpoint}: {e.response.text}") from e
except json.JSONDecodeError as e:
raise ValueError(f"Failed to decode JSON from response for {endpoint}: {response.text}") from e
if last_exception:
raise last_exception
def get_status(self) -> dict:
"""Checks the health of the hook server."""
url = f"{self.base_url}/status"
try:
response = requests.get(url, timeout=5.0)
response.raise_for_status()
return response.json()
except Exception:
raise requests.exceptions.ConnectionError(f"Could not reach /status at {self.base_url}")
def get_project(self) -> dict | None:
return self._make_request('GET', '/api/project')
def post_project(self, project_data: dict) -> dict | None:
return self._make_request('POST', '/api/project', data={'project': project_data})
def get_session(self) -> dict | None:
res = self._make_request('GET', '/api/session')
return res
def get_mma_status(self) -> dict | None:
"""Retrieves current MMA status (track, tickets, tier, etc.)"""
return self._make_request('GET', '/api/gui/mma_status')
def push_event(self, event_type: str, payload: dict) -> dict | None:
"""Pushes an event to the GUI's AsyncEventQueue via the /api/gui endpoint."""
return self.post_gui({
"action": event_type,
"payload": payload
})
def get_performance(self) -> dict | None:
"""Retrieves UI performance metrics."""
return self._make_request('GET', '/api/performance')
def post_session(self, session_entries: list) -> dict | None:
return self._make_request('POST', '/api/session', data={'session': {'entries': session_entries}})
def post_gui(self, gui_data: dict) -> dict | None:
return self._make_request('POST', '/api/gui', data=gui_data)
def select_tab(self, tab_bar: str, tab: str) -> dict | None:
"""Tells the GUI to switch to a specific tab in a tab bar."""
return self.post_gui({
"action": "select_tab",
"tab_bar": tab_bar,
"tab": tab
})
def select_list_item(self, listbox: str, item_value: str) -> dict | None:
"""Tells the GUI to select an item in a listbox by its value."""
return self.post_gui({
"action": "select_list_item",
"listbox": listbox,
"item_value": item_value
})
def set_value(self, item: str, value: Any) -> dict | None:
"""Sets the value of a GUI item."""
return self.post_gui({
"action": "set_value",
"item": item,
"value": value
})
def get_value(self, item: str) -> Any:
"""Gets the value of a GUI item via its mapped field."""
try:
# First try direct field querying via POST
res = self._make_request('POST', '/api/gui/value', data={"field": item})
if res and "value" in res:
v = res.get("value")
if v is not None:
return v
except Exception:
pass
try:
# Try GET fallback
res = self._make_request('GET', f'/api/gui/value/{item}')
if res and "value" in res:
v = res.get("value")
if v is not None:
return v
except Exception:
pass
try:
# Fallback for thinking/live/prior which are in diagnostics
diag = self._make_request('GET', '/api/gui/diagnostics')
if item in diag:
return diag[item]
# Map common indicator tags to diagnostics keys
mapping = {
"thinking_indicator": "thinking",
"operations_live_indicator": "live",
"prior_session_indicator": "prior"
}
key = mapping.get(item)
if key and key in diag:
return diag[key]
except Exception:
pass
return None
def get_text_value(self, item_tag: str) -> str | None:
"""Wraps get_value and returns its string representation, or None."""
val = self.get_value(item_tag)
return str(val) if val is not None else None
def get_node_status(self, node_tag: str) -> Any:
"""Wraps get_value for a DAG node or queries the diagnostic endpoint for its status."""
val = self.get_value(node_tag)
if val is not None:
return val
try:
diag = self._make_request('GET', '/api/gui/diagnostics')
if 'nodes' in diag and node_tag in diag['nodes']:
return diag['nodes'][node_tag]
if node_tag in diag:
return diag[node_tag]
except Exception:
pass
return None
def click(self, item: str, *args: Any, **kwargs: Any) -> dict | None:
"""Simulates a click on a GUI button or item."""
user_data = kwargs.pop('user_data', None)
return self.post_gui({
"action": "click",
"item": item,
"args": args,
"kwargs": kwargs,
"user_data": user_data
})
def get_indicator_state(self, tag: str) -> dict:
"""Checks if an indicator is shown using the diagnostics endpoint."""
# Mapping tag to the keys used in diagnostics endpoint
mapping = {
"thinking_indicator": "thinking",
"operations_live_indicator": "live",
"prior_session_indicator": "prior"
}
key = mapping.get(tag, tag)
try:
diag = self._make_request('GET', '/api/gui/diagnostics')
return {"tag": tag, "shown": diag.get(key, False)}
except Exception as e:
return {"tag": tag, "shown": False, "error": str(e)}
def get_events(self) -> list:
"""Fetches and clears the event queue from the server."""
try:
return self._make_request('GET', '/api/events').get("events", [])
except Exception:
return []
def wait_for_event(self, event_type: str, timeout: float = 5) -> dict | None:
"""Polls for a specific event type."""
start = time.time()
while time.time() - start < timeout:
events = self.get_events()
for ev in events:
if ev.get("type") == event_type:
return ev
time.sleep(0.1) # Fast poll
return None
def wait_for_value(self, item: str, expected: Any, timeout: float = 5) -> bool:
"""Polls until get_value(item) == expected."""
start = time.time()
while time.time() - start < timeout:
if self.get_value(item) == expected:
return True
time.sleep(0.1) # Fast poll
return False
def reset_session(self) -> dict | None:
"""Simulates clicking the 'Reset Session' button in the GUI."""
return self.click("btn_reset")
def request_confirmation(self, tool_name: str, args: dict) -> Any:
"""Asks the user for confirmation via the GUI (blocking call)."""
# Using a long timeout as this waits for human input (60 seconds)
res = self._make_request('POST', '/api/ask',
data={'type': 'tool_approval', 'tool': tool_name, 'args': args},
timeout=60.0)
return res.get('response')

310
api_hooks.py Normal file
View File

@@ -0,0 +1,310 @@
from __future__ import annotations
import json
import threading
import uuid
from http.server import ThreadingHTTPServer, BaseHTTPRequestHandler
from typing import Any
import logging
import session_logger
class HookServerInstance(ThreadingHTTPServer):
"""Custom HTTPServer that carries a reference to the main App instance."""
def __init__(self, server_address: tuple[str, int], RequestHandlerClass: type, app: Any) -> None:
super().__init__(server_address, RequestHandlerClass)
self.app = app
class HookHandler(BaseHTTPRequestHandler):
"""Handles incoming HTTP requests for the API hooks."""
def do_GET(self) -> None:
app = self.server.app
session_logger.log_api_hook("GET", self.path, "")
if self.path == '/status':
self.send_response(200)
self.send_header('Content-Type', 'application/json')
self.end_headers()
self.wfile.write(json.dumps({'status': 'ok'}).encode('utf-8'))
elif self.path == '/api/project':
import project_manager
self.send_response(200)
self.send_header('Content-Type', 'application/json')
self.end_headers()
flat = project_manager.flat_config(app.project)
self.wfile.write(json.dumps({'project': flat}).encode('utf-8'))
elif self.path == '/api/session':
self.send_response(200)
self.send_header('Content-Type', 'application/json')
self.end_headers()
with app._disc_entries_lock:
entries_snapshot = list(app.disc_entries)
self.wfile.write(
json.dumps({'session': {'entries': entries_snapshot}}).
encode('utf-8'))
elif self.path == '/api/performance':
self.send_response(200)
self.send_header('Content-Type', 'application/json')
self.end_headers()
metrics = {}
if hasattr(app, 'perf_monitor'):
metrics = app.perf_monitor.get_metrics()
self.wfile.write(json.dumps({'performance': metrics}).encode('utf-8'))
elif self.path == '/api/events':
# Long-poll or return current event queue
self.send_response(200)
self.send_header('Content-Type', 'application/json')
self.end_headers()
events = []
if hasattr(app, '_api_event_queue'):
with app._api_event_queue_lock:
events = list(app._api_event_queue)
app._api_event_queue.clear()
self.wfile.write(json.dumps({'events': events}).encode('utf-8'))
elif self.path == '/api/gui/value':
# POST with {"field": "field_tag"} to get value
content_length = int(self.headers.get('Content-Length', 0))
body = self.rfile.read(content_length)
data = json.loads(body.decode('utf-8'))
field_tag = data.get("field")
event = threading.Event()
result = {"value": None}
def get_val():
try:
if field_tag in app._settable_fields:
attr = app._settable_fields[field_tag]
val = getattr(app, attr, None)
result["value"] = val
finally:
event.set()
with app._pending_gui_tasks_lock:
app._pending_gui_tasks.append({
"action": "custom_callback",
"callback": get_val
})
if event.wait(timeout=60):
self.send_response(200)
self.send_header('Content-Type', 'application/json')
self.end_headers()
self.wfile.write(json.dumps(result).encode('utf-8'))
else:
self.send_response(504)
self.end_headers()
elif self.path.startswith('/api/gui/value/'):
# Generic endpoint to get the value of any settable field
field_tag = self.path.split('/')[-1]
event = threading.Event()
result = {"value": None}
def get_val():
try:
if field_tag in app._settable_fields:
attr = app._settable_fields[field_tag]
result["value"] = getattr(app, attr, None)
finally:
event.set()
with app._pending_gui_tasks_lock:
app._pending_gui_tasks.append({
"action": "custom_callback",
"callback": get_val
})
if event.wait(timeout=60):
self.send_response(200)
self.send_header('Content-Type', 'application/json')
self.end_headers()
self.wfile.write(json.dumps(result).encode('utf-8'))
else:
self.send_response(504)
self.end_headers()
elif self.path == '/api/gui/mma_status':
event = threading.Event()
result = {}
def get_mma():
try:
result["mma_status"] = getattr(app, "mma_status", "idle")
result["ai_status"] = getattr(app, "ai_status", "idle")
result["active_tier"] = getattr(app, "active_tier", None)
at = getattr(app, "active_track", None)
result["active_track"] = at.id if hasattr(at, "id") else at
result["active_tickets"] = getattr(app, "active_tickets", [])
result["mma_step_mode"] = getattr(app, "mma_step_mode", False)
result["pending_tool_approval"] = getattr(app, "_pending_ask_dialog", False)
result["pending_script_approval"] = getattr(app, "_pending_dialog", None) is not None
result["pending_mma_step_approval"] = getattr(app, "_pending_mma_approval", None) is not None
result["pending_mma_spawn_approval"] = getattr(app, "_pending_mma_spawn", None) is not None
result["pending_approval"] = result["pending_mma_step_approval"] or result["pending_tool_approval"]
result["pending_spawn"] = result["pending_mma_spawn_approval"]
result["tracks"] = getattr(app, "tracks", [])
result["proposed_tracks"] = getattr(app, "proposed_tracks", [])
result["mma_streams"] = getattr(app, "mma_streams", {})
result["mma_tier_usage"] = getattr(app, "mma_tier_usage", {})
finally:
event.set()
with app._pending_gui_tasks_lock:
app._pending_gui_tasks.append({
"action": "custom_callback",
"callback": get_mma
})
if event.wait(timeout=60):
self.send_response(200)
self.send_header('Content-Type', 'application/json')
self.end_headers()
self.wfile.write(json.dumps(result).encode('utf-8'))
else:
self.send_response(504)
self.end_headers()
elif self.path == '/api/gui/diagnostics':
event = threading.Event()
result = {}
def check_all():
try:
status = getattr(app, "ai_status", "idle")
result["thinking"] = status in ["sending...", "running powershell..."]
result["live"] = status in ["running powershell...", "fetching url...", "searching web...", "powershell done, awaiting AI..."]
result["prior"] = getattr(app, "is_viewing_prior_session", False)
finally:
event.set()
with app._pending_gui_tasks_lock:
app._pending_gui_tasks.append({
"action": "custom_callback",
"callback": check_all
})
if event.wait(timeout=60):
self.send_response(200)
self.send_header('Content-Type', 'application/json')
self.end_headers()
self.wfile.write(json.dumps(result).encode('utf-8'))
else:
self.send_response(504)
self.end_headers()
self.wfile.write(json.dumps({'error': 'timeout'}).encode('utf-8'))
else:
self.send_response(404)
self.end_headers()
def do_POST(self) -> None:
app = self.server.app
content_length = int(self.headers.get('Content-Length', 0))
body = self.rfile.read(content_length)
body_str = body.decode('utf-8') if body else ""
session_logger.log_api_hook("POST", self.path, body_str)
try:
data = json.loads(body_str) if body_str else {}
if self.path == '/api/project':
app.project = data.get('project', app.project)
self.send_response(200)
self.send_header('Content-Type', 'application/json')
self.end_headers()
self.wfile.write(json.dumps({'status': 'updated'}).encode('utf-8'))
elif self.path.startswith('/api/confirm/'):
action_id = self.path.split('/')[-1]
approved = data.get('approved', False)
if hasattr(app, 'resolve_pending_action'):
success = app.resolve_pending_action(action_id, approved)
if success:
self.send_response(200)
self.send_header('Content-Type', 'application/json')
self.end_headers()
self.wfile.write(json.dumps({'status': 'ok'}).encode('utf-8'))
else:
self.send_response(404)
self.end_headers()
else:
self.send_response(500)
self.end_headers()
elif self.path == '/api/session':
with app._disc_entries_lock:
app.disc_entries = data.get('session', {}).get('entries', app.disc_entries)
self.send_response(200)
self.send_header('Content-Type', 'application/json')
self.end_headers()
self.wfile.write(json.dumps({'status': 'updated'}).encode('utf-8'))
elif self.path == '/api/gui':
with app._pending_gui_tasks_lock:
app._pending_gui_tasks.append(data)
self.send_response(200)
self.send_header('Content-Type', 'application/json')
self.end_headers()
self.wfile.write(json.dumps({'status': 'queued'}).encode('utf-8'))
elif self.path == '/api/ask':
request_id = str(uuid.uuid4())
event = threading.Event()
if not hasattr(app, '_pending_asks'): app._pending_asks = {}
if not hasattr(app, '_ask_responses'): app._ask_responses = {}
app._pending_asks[request_id] = event
with app._api_event_queue_lock:
app._api_event_queue.append({"type": "ask_received", "request_id": request_id, "data": data})
with app._pending_gui_tasks_lock:
app._pending_gui_tasks.append({"type": "ask", "request_id": request_id, "data": data})
if event.wait(timeout=60.0):
response_data = app._ask_responses.get(request_id)
if request_id in app._ask_responses: del app._ask_responses[request_id]
self.send_response(200)
self.send_header('Content-Type', 'application/json')
self.end_headers()
self.wfile.write(json.dumps({'status': 'ok', 'response': response_data}).encode('utf-8'))
else:
if request_id in app._pending_asks: del app._pending_asks[request_id]
self.send_response(504)
self.end_headers()
self.wfile.write(json.dumps({'error': 'timeout'}).encode('utf-8'))
elif self.path == '/api/ask/respond':
request_id = data.get('request_id')
response_data = data.get('response')
if request_id and hasattr(app, '_pending_asks') and request_id in app._pending_asks:
app._ask_responses[request_id] = response_data
event = app._pending_asks[request_id]
event.set()
del app._pending_asks[request_id]
with app._pending_gui_tasks_lock:
app._pending_gui_tasks.append({"action": "clear_ask", "request_id": request_id})
self.send_response(200)
self.send_header('Content-Type', 'application/json')
self.end_headers()
self.wfile.write(json.dumps({'status': 'ok'}).encode('utf-8'))
else:
self.send_response(404)
self.end_headers()
else:
self.send_response(404)
self.end_headers()
except Exception as e:
self.send_response(500)
self.send_header('Content-Type', 'application/json')
self.end_headers()
self.wfile.write(json.dumps({'error': str(e)}).encode('utf-8'))
def log_message(self, format: str, *args: Any) -> None:
logging.info("Hook API: " + format % args)
class HookServer:
def __init__(self, app: Any, port: int = 8999) -> None:
self.app = app
self.port = port
self.server = None
self.thread = None
def start(self) -> None:
if self.thread and self.thread.is_alive():
return
is_gemini_cli = getattr(self.app, 'current_provider', '') == 'gemini_cli'
if not getattr(self.app, 'test_hooks_enabled', False) and not is_gemini_cli:
return
if not hasattr(self.app, '_pending_gui_tasks'): self.app._pending_gui_tasks = []
if not hasattr(self.app, '_pending_gui_tasks_lock'): self.app._pending_gui_tasks_lock = threading.Lock()
if not hasattr(self.app, '_pending_asks'): self.app._pending_asks = {}
if not hasattr(self.app, '_ask_responses'): self.app._ask_responses = {}
if not hasattr(self.app, '_api_event_queue'): self.app._api_event_queue = []
if not hasattr(self.app, '_api_event_queue_lock'): self.app._api_event_queue_lock = threading.Lock()
self.server = HookServerInstance(('127.0.0.1', self.port), HookHandler, self.app)
self.thread = threading.Thread(target=self.server.serve_forever, daemon=True)
self.thread.start()
logging.info(f"Hook server started on port {self.port}")
def stop(self) -> None:
if self.server:
self.server.shutdown()
self.server.server_close()
if self.thread:
self.thread.join()
logging.info("Hook server stopped")

View File

@@ -0,0 +1,5 @@
# Track api_hooks_verification_20260223 Context
- [Specification](./spec.md)
- [Implementation Plan](./plan.md)
- [Metadata](./metadata.json)

View File

@@ -0,0 +1,8 @@
{
"track_id": "api_hooks_verification_20260223",
"type": "feature",
"status": "new",
"created_at": "2026-02-23T17:46:51Z",
"updated_at": "2026-02-23T17:46:51Z",
"description": "Update conductor to properly utilize the new api hooks for automated testing & verification of track implementation features without the need of user intervention."
}

View File

@@ -0,0 +1,19 @@
# Implementation Plan: Integrate API Hooks for Automated Track Verification
## Phase 1: Update Workflow Definition [checkpoint: f17c9e3]
- [x] Task: Modify `conductor/workflow.md` to reflect the new automated verification process. [2ec1ecf]
- [ ] Sub-task: Update the "Phase Completion Verification and Checkpointing Protocol" section to replace manual verification steps with a description of the automated API hook process.
- [ ] Sub-task: Ensure the updated workflow clearly states that the agent will announce the automated test, execute it, and then present the results (success or failure) to the user.
- [ ] Task: Conductor - User Manual Verification 'Phase 1: Update Workflow Definition' (Protocol in workflow.md)
## Phase 2: Implement Automated Verification Logic [checkpoint: b575dcd]
- [x] Task: Develop the client-side logic for communicating with the API hook server. [f4a9ff8]
- [ ] Sub-task: Write failing unit tests for a new `ApiHookClient` that can send requests to the IPC server.
- [ ] Sub-task: Implement the `ApiHookClient` to make the tests pass.
- [x] Task: Integrate the `ApiHookClient` into the Conductor agent's workflow. [c7c8b89]
- [ ] Sub-task: Write failing integration tests to ensure the Conductor's phase completion logic calls the `ApiHookClient`.
- [ ] Sub-task: Modify the workflow implementation to use the `ApiHookClient` for verification.
- [x] Task: Implement result handling and user feedback. [94b4f38]
- [ ] Sub-task: Write failing tests for handling success, failure, and server-unavailable scenarios.
- [ ] Sub-task: Implement the logic to log results, present them to the user, and halt the workflow on failure.
- [ ] Task: Conductor - User Manual Verification 'Phase 2: Implement Automated Verification Logic' (Protocol in workflow.md)

View File

@@ -0,0 +1,21 @@
# Specification: Integrate API Hooks for Automated Track Verification
## Overview
This track focuses on integrating the existing, previously implemented API hooks (from track `test_hooks_20260223`) into the Conductor workflow. The primary goal is to automate the verification steps within the "Phase Completion Verification and Checkpointing Protocol", reducing the need for manual user intervention and enabling a more streamlined, automated development process.
## Functional Requirements
- **Workflow Integration:** The `workflow.md` document, specifically the "Phase Completion Verification and Checkpointing Protocol," must be updated to replace manual verification steps with automated checks using the API hooks.
- **IPC Communication:** The updated workflow will communicate with the application's backend via the established IPC server to trigger verification tasks.
- **Result Handling:**
- All results from the API hook verifications must be logged for auditing and debugging purposes.
- Upon successful verification, the Conductor agent will proceed with the workflow as it currently does after a successful manual check.
- Upon failure, the agent will halt, present the failure logs to the user, and await further instructions.
- **User Interaction Model:** The system will transition from asking the user to perform a manual test to informing the user that an automated test is running, and then presenting the results.
## Non-Functional Requirements
- **Resilience:** The Conductor agent must handle cases where the API hook server is unavailable or a hook call fails unexpectedly, without crashing or entering an unrecoverable state.
- **Transparency:** All interactions with the API hooks must be clearly logged, making the automated process easy to monitor and debug.
## Out of Scope
- **Modifying API Hooks:** This track will not alter the existing API hooks, the IPC server, or the backend implementation. The focus is solely on the client-side integration within the Conductor agent's workflow.
- **Changes to Manual Overrides:** Users will retain the ability to manually intervene or bypass automated checks if necessary.

View File

@@ -0,0 +1,5 @@
# Track api_metrics_20260223 Context
- [Specification](./spec.md)
- [Implementation Plan](./plan.md)
- [Metadata](./metadata.json)

View File

@@ -0,0 +1,8 @@
{
"track_id": "api_metrics_20260223",
"type": "feature",
"status": "new",
"created_at": "2026-02-23T10:00:00Z",
"updated_at": "2026-02-23T10:00:00Z",
"description": "Review vendor api usage in regards to conservative context handling"
}

View File

@@ -0,0 +1,19 @@
# Implementation Plan
## Phase 1: Metric Extraction and Logic Review [checkpoint: 2668f88]
- [x] Task: Extract explicit cache counts and lifecycle states from Gemini SDK
- [x] Sub-task: Write Tests
- [x] Sub-task: Implement Feature
- [x] Task: Review and expose 'history bleed' (token limit proximity) flags
- [x] Sub-task: Write Tests
- [x] Sub-task: Implement Feature
- [x] Task: Conductor - User Manual Verification 'Phase 1: Metric Extraction and Logic Review' (Protocol in workflow.md)
## Phase 2: GUI Telemetry and Plotting [checkpoint: 76582c8]
- [x] Task: Implement token budget visualizer (e.g., Progress bars for limits) in Dear PyGui
- [x] Sub-task: Write Tests
- [x] Sub-task: Implement Feature
- [x] Task: Implement active caches data display in Provider/Comms panel
- [x] Sub-task: Write Tests
- [x] Sub-task: Implement Feature
- [x] Task: Conductor - User Manual Verification 'Phase 2: GUI Telemetry and Plotting' (Protocol in workflow.md)

View File

@@ -0,0 +1,22 @@
# Specification: Review vendor api usage in regards to conservative context handling
## Overview
This track aims to optimize token efficiency and transparency by reviewing and improving how vendor APIs (Gemini and Anthropic) handle conservative context pruning. The primary focus is on extracting, plotting, and exposing deep metrics to the GUI so developers can intuit how close they are to API limits (e.g., token caps, cache counts, history bleed).
## Scope
- **Gemini Hooks:** Review explicit context caching, cache invalidation, and tools declaration.
- **Global Orchestration:** Review global context boundaries within the main prompt lifecycle.
- **GUI Metrics:** Expose as much metric data as possible to the user interface (e.g., plotting token usage, visual indicators for when "history bleed" occurs, displaying the number of active caches).
## Functional Requirements
- Implement extensive token and cache metric extraction from both Gemini and Anthropic API responses.
- Expose these metrics to the Dear PyGui frontend, potentially utilizing visual plots or progress bars to indicate token budget consumption.
- Implement tests to explicitly verify context rules, ensuring history pruning acts conservatively and predictable without data loss.
## Non-Functional Requirements
- Ensure GUI rendering of new plots or dense metrics does not block the main thread.
- Adhere to the "Strict State Management" product guideline.
## Out of Scope
- Major feature additions unrelated to context token management or telemetry.
- Expanding the AI's agentic capabilities (e.g., new tools).

View File

@@ -0,0 +1,5 @@
# Track api_vendor_alignment_20260223 Context
- [Specification](./spec.md)
- [Implementation Plan](./plan.md)
- [Metadata](./metadata.json)

View File

@@ -0,0 +1,8 @@
{
"track_id": "api_vendor_alignment_20260223",
"type": "chore",
"status": "new",
"created_at": "2026-02-23T12:00:00Z",
"updated_at": "2026-02-23T12:00:00Z",
"description": "Review project codebase, documentation related to project, and make sure agenti vendor apis are being used as properly stated by offical documentation from google for gemini and anthropic for claude."
}

View File

@@ -0,0 +1,56 @@
# Implementation Plan: API Usage Audit and Alignment
## Phase 1: Research and Comprehensive Audit [checkpoint: 5ec4283]
Identify all points of interaction with AI SDKs and compare them with latest official documentation.
- [x] Task: List and categorize all AI SDK usage in the project.
- [x] Search for all imports of `google.genai` and `anthropic`.
- [x] Document specific functions and methods being called.
- [x] Task: Research latest official documentation for `google-genai` and `anthropic` Python SDKs.
- [x] Verify latest patterns for Client initialization.
- [x] Verify latest patterns for Context/Prompt caching.
- [x] Verify latest patterns for Tool/Function calling.
- [x] Task: Conductor - User Manual Verification 'Phase 1: Research and Comprehensive Audit' (Protocol in workflow.md)
## Phase 2: Gemini (google-genai) Alignment [checkpoint: 842bfc4]
Align Gemini integration with documented best practices.
- [x] Task: Refactor Gemini Client and Chat initialization if needed.
- [x] Write Tests
- [x] Implement Feature
- [x] Task: Optimize Gemini Context Caching.
- [x] Write Tests
- [x] Implement Feature
- [x] Task: Align Gemini Tool Declaration and handling.
- [x] Write Tests
- [x] Implement Feature
- [x] Task: Conductor - User Manual Verification 'Phase 2: Gemini (google-genai) Alignment' (Protocol in workflow.md)
## Phase 3: Anthropic Alignment [checkpoint: f0eb538]
Align Anthropic integration with documented best practices.
- [x] Task: Refactor Anthropic Client and Message creation if needed.
- [x] Write Tests
- [x] Implement Feature
- [x] Task: Optimize Anthropic Prompt Caching (`cache_control`).
- [x] Write Tests
- [x] Implement Feature
- [x] Task: Align Anthropic Tool Declaration and handling.
- [x] Write Tests
- [x] Implement Feature
- [x] Task: Conductor - User Manual Verification 'Phase 3: Anthropic Alignment' (Protocol in workflow.md)
## Phase 4: History and Token Management [checkpoint: 0f9f235]
Ensure accurate token estimation and robust history handling.
- [x] Task: Review and align token estimation logic for both providers.
- [x] Write Tests
- [x] Implement Feature
- [x] Task: Audit message history truncation and context window management.
- [x] Write Tests
- [x] Implement Feature
- [x] Task: Conductor - User Manual Verification 'Phase 4: History and Token Management' (Protocol in workflow.md)
## Phase 5: Final Validation and Cleanup [checkpoint: e9126b4]
- [x] Task: Perform a full test run using `run_tests.py` to ensure 100% pass rate.
- [x] Task: Conductor - User Manual Verification 'Phase 5: Final Validation and Cleanup' (Protocol in workflow.md)

View File

@@ -0,0 +1,29 @@
# Specification: API Usage Audit and Alignment
## Overview
This track involves a comprehensive audit of the "Manual Slop" codebase to ensure that the integration with Google Gemini (`google-genai`) and Anthropic Claude (`anthropic`) SDKs aligns perfectly with their latest official documentation and best practices. The goal is to identify discrepancies, performance bottlenecks, or deprecated patterns and implement the necessary fixes.
## Scope
- **Target:** Full codebase audit, with primary focus on `ai_client.py`, `mcp_client.py`, and any other modules interacting with AI SDKs.
- **Key Areas:**
- **Caching Mechanisms:** Verify Gemini context caching and Anthropic prompt caching implementation.
- **Tool Calling:** Audit function declarations, parameter schemas, and result handling.
- **History & Tokens:** Review message history management, token estimation accuracy, and context window handling.
## Functional Requirements
1. **SDK Audit:** Compare existing code patterns against the latest official Python SDK documentation for Gemini and Anthropic.
2. **Feature Validation:**
- Ensure `google-genai` usage follows the latest `Client` and `types` patterns.
- Ensure `anthropic` usage utilizes `cache_control` correctly for optimal performance.
3. **Discrepancy Remediation:** Implement code changes to align the implementation with documented standards.
4. **Validation:** Execute tests to ensure that API interactions remain functional and improved.
## Acceptance Criteria
- Full audit completed for all AI SDK interactions.
- Identified discrepancies are documented and fixed.
- Caching, tool calling, and history management logic are verified against latest SDK standards.
- All existing and new tests pass successfully.
## Out of Scope
- Adding support for new AI providers not already in the project.
- Major UI refactoring unless directly required by API changes.

View File

@@ -0,0 +1,5 @@
# Track comprehensive_gui_ux_20260228 Context
- [Specification](./spec.md)
- [Implementation Plan](./plan.md)
- [Metadata](./metadata.json)

View File

@@ -0,0 +1,10 @@
{
"description": "Enhance existing MMA orchestration GUI: tier stream panels, DAG editing, cost tracking, conductor lifecycle forms, track-scoped discussions, approval indicators, visual polish.",
"track_id": "comprehensive_gui_ux_20260228",
"type": "feature",
"created_at": "2026-03-01T08:42:57Z",
"status": "completed",
"updated_at": "2026-03-01T20:15:00Z",
"refined_by": "claude-opus-4-6 (1M context)",
"refined_from_commit": "08e003a"
}

View File

@@ -0,0 +1,58 @@
# Implementation Plan: Comprehensive Conductor & MMA GUI UX
Architecture reference: [docs/guide_architecture.md](../../docs/guide_architecture.md), [docs/guide_mma.md](../../docs/guide_mma.md)
## Phase 1: Tier Stream Panels & Approval Indicators
Focus: Make all 4 tier output streams visible and indicate pending approvals.
- [x] Task 1.1: Replace the single Tier 1 strategy text box in `_render_mma_dashboard` (gui_2.py:2700-2701) with four collapsible sections — one per tier. Each section uses `imgui.collapsing_header(f"Tier {N}: {label}")` wrapping a `begin_child` scrollable region (200px height). Tier 1 = "Strategy", Tier 2 = "Tech Lead", Tier 3 = "Workers", Tier 4 = "QA". Tier 3 should aggregate all `mma_streams` keys containing "Tier 3" with ticket ID sub-headers. Each section auto-scrolls to bottom when new content arrives (track previous scroll position, scroll only if user was at bottom).
- [x] Task 1.2: Add approval state indicators to the MMA dashboard. After the "Status:" line in `_render_mma_dashboard` (gui_2.py:2672-2676), check `self._pending_mma_spawn`, `self._pending_mma_approval`, and `self._pending_ask_dialog`. When any is active, render a colored blinking badge: `imgui.text_colored(ImVec4(1,0.3,0.3,1), "APPROVAL PENDING")` using `sin(time.time()*5)` for alpha pulse. Also add a `imgui.same_line()` button "Go to Approval" that scrolls/focuses the relevant dialog.
- [x] Task 1.3: Write unit tests verifying: (a) `mma_streams` with keys "Tier 1", "Tier 2 (Tech Lead)", "Tier 3: T-001", "Tier 4 (QA)" are all rendered (check by mocking `imgui.collapsing_header` calls); (b) approval indicators appear when `_pending_mma_spawn is not None`.
- [x] Task 1.4: Conductor - User Manual Verification 'Phase 1: Tier Stream Panels & Approval Indicators' (Protocol in workflow.md)
## Phase 2: Cost Tracking & Enhanced Token Table
Focus: Add cost estimation to the existing token usage display.
- [x] Task 2.1: Create a new module `cost_tracker.py` with a `MODEL_PRICING` dict mapping model name patterns to `{"input_per_mtok": float, "output_per_mtok": float}`. Include entries for: `gemini-2.5-flash-lite` ($0.075/$0.30), `gemini-2.5-flash` ($0.15/$0.60), `gemini-3-flash-preview` ($0.15/$0.60), `gemini-3.1-pro-preview` ($3.50/$10.50), `claude-*-sonnet` ($3/$15), `claude-*-opus` ($15/$75), `deepseek-v3` ($0.27/$1.10). Function: `estimate_cost(model: str, input_tokens: int, output_tokens: int) -> float` that does pattern matching on model name and returns dollar cost.
- [x] Task 2.2: Extend the token usage table in `_render_mma_dashboard` (gui_2.py:2685-2699) from 3 columns to 5: add "Est. Cost" and "Model". Populate using `cost_tracker.estimate_cost()` with the model name from `self.mma_tier_usage` (need to extend `tier_usage` dict in `ConductorEngine._push_state` to include model name per tier, or use a default mapping: Tier 1 → `gemini-3.1-pro-preview`, Tier 2 → `gemini-3-flash-preview`, Tier 3 → `gemini-2.5-flash-lite`, Tier 4 → `gemini-2.5-flash-lite`). Show total cost row at bottom.
- [x] Task 2.3: Write tests for `cost_tracker.estimate_cost()` covering all model patterns and edge cases (unknown model returns 0).
- [x] Task 2.4: Conductor - User Manual Verification 'Phase 2: Cost Tracking & Enhanced Token Table' (Protocol in workflow.md)
## Phase 3: Track Proposal Editing & Conductor Lifecycle Forms
Focus: Make track proposals editable and add conductor setup/newTrack GUI forms.
- [x] Task 3.1: Enhance `_render_track_proposal_modal` (gui_2.py:2146-2173) to make track titles and goals editable. Replace `imgui.text_colored` for title with `imgui.input_text(f"##track_title_{idx}", track['title'])`. Replace `imgui.text_wrapped` for goal with `imgui.input_text_multiline(f"##track_goal_{idx}", track['goal'], ImVec2(-1, 60))`. Add a "Remove" button per track (`imgui.button(f"Remove##{idx}")`) that pops from `self.proposed_tracks`. Edited values must be written back to `self.proposed_tracks[idx]`.
- [x] Task 3.2: Add a "Conductor Setup" collapsible section at the top of the MMA dashboard (before the Track Browser). Contains a "Run Setup" button. On click, reads `conductor/workflow.md`, `conductor/tech-stack.md`, `conductor/product.md` using `Path.read_text()`, computes a readiness summary (files found, line counts, track count via `project_manager.get_all_tracks()`), and displays it in a read-only text region. This is informational only — no backend changes.
- [x] Task 3.3: Add a "New Track" form below the Track Browser. Fields: track name (input_text), description (input_text_multiline), type dropdown (feature/chore/fix via `imgui.combo`). "Create" button calls a new helper `_cb_create_track(name, desc, type)` that: creates `conductor/tracks/{name}_{date}/` directory, writes a minimal `spec.md` from the description, writes an empty `plan.md` template, writes `metadata.json` with the track ID/type/status="new", then refreshes `self.tracks` via `project_manager.get_all_tracks()`.
- [x] Task 3.4: Write tests for track creation helper: verify directory structure, file contents, and metadata.json format. Test proposal modal editing by verifying `proposed_tracks` list is mutated correctly.
- [x] Task 3.5: Conductor - User Manual Verification 'Phase 3: Track Proposal Editing & Conductor Lifecycle Forms' (Protocol in workflow.md)
## Phase 4: DAG Editing & Track-Scoped Discussion
Focus: Allow GUI-based ticket manipulation and track-specific discussion history.
- [x] Task 4.1: Add an "Add Ticket" button below the Task DAG section in `_render_mma_dashboard`. On click, show an inline form: ticket ID (input_text, default auto-increment like "T-NNN"), description (input_text_multiline), target_file (input_text), depends_on (multi-select or comma-separated input of existing ticket IDs). "Create" button appends a new `Ticket` dict to `self.active_tickets` with `status="todo"` and triggers `_push_mma_state_update()` to synchronize the ConductorEngine. Cancel hides the form. Store the form visibility in `self._show_add_ticket_form: bool`.
- [x] Task 4.2: Add a "Delete" button to each DAG node in `_render_ticket_dag_node` (gui_2.py:2770-2773, after the Skip button). On click, show a confirmation popup. On confirm, remove the ticket from `self.active_tickets`, remove it from all other tickets' `depends_on` lists, and push state update. Only allow deletion of `todo` or `blocked` tickets (not `in_progress` or `completed`).
- [x] Task 4.3: Add track-scoped discussion support. In `_render_discussion_panel` (gui_2.py:2295-2483), add a toggle checkbox "Track Discussion" (visible only when `self.active_track` is set). When toggled ON: load history via `project_manager.load_track_history(self.active_track.id, base_dir)` into `self.disc_entries`, set a flag `self._track_discussion_active = True`. When toggled OFF or track changes: restore project discussion. On save/flush, if `_track_discussion_active`, write to track history file instead of project history.
- [x] Task 4.4: Write tests for: (a) adding a ticket updates `active_tickets` and has correct default fields; (b) deleting a ticket removes it from all `depends_on` references; (c) track discussion toggle switches `disc_entries` source.
- [x] Task 4.5: Conductor - User Manual Verification 'Phase 4: DAG Editing & Track-Scoped Discussion' (Protocol in workflow.md)
## Phase 5: Visual Polish & Integration Testing
Focus: Dense, responsive dashboard with arcade aesthetics and end-to-end verification.
- [x] Task 5.1: Add color-coded styling to the Track Browser table. Status column uses colored text: "new" = gray, "active" = yellow, "done" = green, "blocked" = red. Progress bar uses `imgui.push_style_color` to tint: <33% red, 33-66% yellow, >66% green.
- [x] Task 5.2: Improve the DAG tree nodes with status-colored left borders. Use `imgui.get_cursor_screen_pos()` and `imgui.get_window_draw_list().add_rect_filled()` to draw a 4px colored strip to the left of each tree node matching its status color.
- [x] Task 5.3: Add a "Dashboard Summary" header line at the top of `_render_mma_dashboard` showing: `Track: {name} | Tickets: {done}/{total} | Cost: ${total_cost:.4f} | Status: {mma_status}` in a single dense line with colored segments.
- [x] Task 5.4: Write an end-to-end integration test (extending `tests/visual_sim_mma_v2.py` or creating `tests/visual_sim_gui_ux.py`) that verifies via `ApiHookClient`: (a) track creation form produces correct directory structure; (b) tier streams are populated during MMA execution; (c) approval indicators appear when expected; (d) cost tracking shows non-zero values after execution.
- [x] Task 5.5: Verify all new UI elements maintain >30 FPS via `get_ui_performance` during a full MMA simulation run.
- [x] Task 5.6: Conductor - User Manual Verification 'Phase 5: Visual Polish & Integration Testing' (Protocol in workflow.md)
## Phase 6: Live Worker Streaming & Engine Enhancements
Focus: Make MMA execution observable in real-time and configurable from the GUI. Currently workers are black boxes until completion.
- [x] Task 6.1: Wire `ai_client.comms_log_callback` to per-ticket streams during `run_worker_lifecycle` (multi_agent_conductor.py:207-300). Before calling `ai_client.send()`, set `ai_client.comms_log_callback` to a closure that pushes intermediate text chunks to the GUI via `_queue_put(event_queue, loop, "response", {"text": chunk, "stream_id": f"Tier 3 (Worker): {ticket.id}", "status": "streaming..."})`. After `send()` returns, restore the original callback. This gives real-time output streaming to the Tier 3 stream panels from Phase 1.
- [x] Task 6.2: Add per-tier model configuration to the MMA dashboard. Below the token usage table in `_render_mma_dashboard`, add a collapsible "Tier Model Config" section with 4 rows (Tier 1-4). Each row: tier label + `imgui.combo` dropdown populated from `ai_client.list_models()` (cached). Store selections in `self.mma_tier_models: dict[str, str]` with defaults from `mma_exec.get_model_for_role()`. On change, write to `self.project["mma"]["tier_models"]` for persistence.
- [x] Task 6.3: Wire per-tier model config into the execution pipeline. In `ConductorEngine.run` (multi_agent_conductor.py:105-135), when creating `WorkerContext`, read the model name from the GUI's `mma_tier_models` dict (passed via the event queue or stored on the engine). Pass it through to `run_worker_lifecycle` which should use it in `ai_client.set_provider`/`ai_client.set_model_params` before calling `send()`. Also update `mma_exec.py:get_model_for_role` to accept an override parameter.
- [x] Task 6.4: Add parallel DAG execution. In `ConductorEngine.run` (multi_agent_conductor.py:100-135), replace the sequential `for ticket in ready_tasks` loop with `asyncio.gather(*[loop.run_in_executor(None, run_worker_lifecycle, ...) for ticket in ready_tasks])`. Each worker already gets its own `ai_client.reset_session()` so they're isolated. Guard with `ai_client._send_lock` awareness — if the lock serializes all sends, parallel execution won't help. In that case, create per-worker provider instances or use separate session IDs. Mark this task as exploratory — if `_send_lock` blocks parallelism, document the constraint and defer.
- [x] Task 6.5: Add automatic retry with model escalation. In `ConductorEngine.run`, after `run_worker_lifecycle` returns, check if `ticket.status == "blocked"`. If so, and `retry_count < max_retries` (default 2), increment retry count, escalate the model (e.g., flash-lite → flash → pro), and re-execute. Store `retry_count` as a field on the ticket dict. After max retries, leave as blocked.
- [x] Task 6.6: Write tests for: (a) streaming callback pushes intermediate content to event queue; (b) per-tier model config persists to project TOML; (c) retry escalation increments model tier.
- [x] Task 6.7: Conductor - User Manual Verification 'Phase 6: Live Worker Streaming & Engine Enhancements' (Protocol in workflow.md)

View File

@@ -0,0 +1,112 @@
# Track Specification: Comprehensive Conductor & MMA GUI UX
## Overview
This track enhances the existing MMA orchestration GUI from its current functional-but-minimal state to a production-quality control surface. The existing implementation already has a working Track Browser, DAG tree visualizer, epic planning flow, approval dialogs, and token usage table. This track focuses on the **gaps**: dedicated tier stream panels, DAG editing, track-scoped discussions, conductor lifecycle GUI forms, cost tracking, and visual polish.
## Current State Audit (as of 08e003a)
### Already Implemented (DO NOT re-implement)
- **Track Browser table** (`_render_mma_dashboard`, lines 2633-2660): Title, status, progress bar, Load button per track.
- **Epic Planning** (`_render_projects_panel`, lines 1968-1983 + `_cb_plan_epic`): Input field + "Plan Epic (Tier 1)" button, background thread orchestration.
- **Track Proposal Modal** (`_render_track_proposal_modal`, lines 2146-2173): Shows proposed tracks, Start/Accept/Cancel.
- **Step Mode toggle**: Checkbox for "Step Mode (HITL)" with `self.mma_step_mode`.
- **Active Track Info**: Description + ticket progress bar.
- **Token Usage Table**: Per-tier input/output display in a 3-column ImGui table.
- **Tier 1 Strategy Stream**: `mma_streams.get("Tier 1")` rendered as read-only multiline (150px).
- **Task DAG Tree** (`_render_ticket_dag_node`, lines 2726-2785): Recursive tree with color-coded status (gray/yellow/green/red/orange), tooltips showing ID/target/description/dependencies/worker-stream, Retry/Skip buttons.
- **Spawn Interceptor** (`MMASpawnApprovalDialog`): Editable prompt, context_md, abort capability.
- **MMA Step Approval** (`MMAApprovalDialog`): Editable payload, approve/reject.
- **Script Confirmation** (`ConfirmDialog`): Editable script, approve/reject.
- **Comms History Panel** (`_render_comms_history_panel`, lines 2859-2984).
- **Tool Calls Panel** (`_render_tool_calls_panel`, lines 2787-2857).
- **Performance Monitor**: FPS, Frame Time, CPU, Input Lag via `perf_monitor`.
### Gaps to Fill (This Track's Scope)
1. **Tier Stream Panels**: Only Tier 1 gets a dedicated text box. Tier 2/3/4 streams exist in `mma_streams` dict but have no dedicated UI. Tier 3 output is tooltip-only on DAG nodes. No Tier 2 (Tech Lead) or Tier 4 (QA) visibility at all.
2. **DAG Editing**: Can Retry/Skip tickets but cannot reorder, insert, or delete tasks from the GUI.
3. **Conductor Lifecycle Forms**: `/conductor:setup` and `/conductor:newTrack` have no GUI equivalents — they're CLI-only. Users must use slash commands or the epic planning flow.
4. **Track-Scoped Discussion**: Discussions are global. When a track is active, the discussion panel should optionally isolate to that track's context. `project_manager.load_track_history()` exists but isn't wired to the GUI.
5. **Cost Estimation**: Token counts are displayed but not converted to estimated cost per tier or per track.
6. **Approval State Indicators**: The dashboard doesn't visually indicate when a spawn/step/tool approval is pending. `pending_mma_spawn_approval`, `pending_mma_step_approval`, `pending_tool_approval` are tracked but not rendered.
7. **Track Proposal Editing**: The modal shows proposed tracks read-only. No ability to edit track titles, goals, or remove unwanted tracks before accepting.
8. **Stream Scrollability**: Tier 1 stream is a 150px non-scrolling text box. Needs proper scrollable, resizable panels for all tier streams.
## Goals
1. **Tier Stream Visibility**: Dedicated, scrollable panels for all 4 tier output streams (Tier 1 Strategy, Tier 2 Tech Lead, Tier 3 Worker, Tier 4 QA) with auto-scroll and copy support.
2. **DAG Manipulation**: Add/remove tickets from the active track's DAG via the GUI, with dependency validation.
3. **Conductor GUI Forms**: Setup and track creation forms that invoke the same logic as the CLI slash commands.
4. **Track-Scoped Discussions**: Switch the discussion panel to track-specific history when a track is active.
5. **Cost Tracking**: Per-tier and per-track cost estimation based on model pricing.
6. **Approval Indicators**: Clear visual cues (blinking, color changes) when any approval gate is pending.
7. **Track Proposal Editing**: Allow editing/removing proposed tracks before acceptance.
8. **Polish & Density**: Make the dashboard information-dense and responsive to the MMA engine's state.
## Functional Requirements
### Tier Stream Panels
- Four collapsible/expandable text regions in the MMA dashboard, one per tier.
- Auto-scroll to bottom on new content. Toggle for manual scroll lock.
- Each stream populated from `self.mma_streams` keyed by tier prefix.
- Tier 3 streams: aggregate all `"Tier 3: T-xxx"` keyed entries, render with ticket ID headers.
### DAG Editing
- "Add Ticket" button: opens an inline form (ID, description, target_file, depends_on dropdown).
- "Remove Ticket" button on each DAG node (with confirmation).
- Changes must update `self.active_tickets`, rebuild the ConductorEngine's `TrackDAG`, and push state via `_push_state`.
### Conductor Lifecycle Forms
- "Setup Conductor" button that reads `conductor/workflow.md`, `conductor/tech-stack.md`, `conductor/product.md` and displays a readiness summary.
- "New Track" form: name, description, type dropdown. Creates the track directory structure under `conductor/tracks/`.
### Track-Scoped Discussion
- When `self.active_track` is set, add a toggle "Track Discussion" that switches to `project_manager.load_track_history(track_id)`.
- Saving flushes to the track's history file instead of the project's.
### Cost Tracking
- Model pricing table (configurable or hardcoded initial version).
- Compute `cost = (input_tokens / 1M) * input_price + (output_tokens / 1M) * output_price` per tier.
- Display as additional column in the existing token usage table.
### Approval Indicators
- When `_pending_mma_spawn` is not None: flash the "MMA Dashboard" tab header or show a blinking indicator.
- When `_pending_mma_approval` is not None: similar.
- When `_pending_ask_dialog` is True: similar.
- Use `imgui.push_style_color` to tint the relevant UI region.
### Track Proposal Editing
- Make track titles and goals editable in the proposal modal.
- Add a "Remove" button per proposed track.
- Edited data flows back to `self.proposed_tracks` before acceptance.
## Non-Functional Requirements
- **Thread Safety**: All new data mutations from background threads must go through `_pending_gui_tasks`. No direct GUI state writes from non-main threads.
- **No New Dependencies**: Use only existing Dear PyGui / imgui-bundle APIs.
- **Performance**: New panels must not degrade FPS below 30 under normal operation. Verify via `get_ui_performance`.
## Architecture Reference
- Threading model and `_process_pending_gui_tasks` action catalog: [docs/guide_architecture.md](../../docs/guide_architecture.md)
- MMA data structures (Ticket, Track, WorkerContext): [docs/guide_mma.md](../../docs/guide_mma.md)
- Hook API for testing: [docs/guide_tools.md](../../docs/guide_tools.md)
- Simulation patterns: [docs/guide_simulations.md](../../docs/guide_simulations.md)
## Functional Requirements (Engine Enhancements)
### Live Worker Streaming
- During `run_worker_lifecycle`, set `ai_client.comms_log_callback` to push intermediate text chunks to the per-ticket stream via the event queue. Currently workers are black boxes until completion — both Claude Code and Gemini CLI stream in real-time. The callback should push `{"text": chunk, "stream_id": "Tier 3 (Worker): {ticket.id}", "status": "streaming..."}` events.
### Per-Tier Model Configuration
- `mma_exec.py:get_model_for_role` is hardcoded. Add a GUI section with `imgui.combo` dropdowns for each tier's model. Persist to `project["mma"]["tier_models"]`. Wire into `ConductorEngine` and `run_worker_lifecycle`.
### Parallel DAG Execution
- `ConductorEngine.run()` executes ready tickets sequentially. DAG-independent tickets should run in parallel via `asyncio.gather`. Constraint: `ai_client._send_lock` serializes all API calls — parallel workers may need separate provider instances or the lock needs to be per-session rather than global. Mark as exploratory.
### Automatic Retry with Model Escalation
- `mma_exec.py` has `--failure-count` for escalation but `ConductorEngine` doesn't use it. When a worker produces BLOCKED, auto-retry with a more capable model (up to 2 retries).
## Out of Scope
- Remote management via web browser.
- Visual diagram generation (Dear PyGui node editor for DAG — future track).
- Docking/floating multi-viewport layout (requires imgui docking branch investigation — future track).

View File

@@ -0,0 +1,5 @@
# Track consolidate_cruft_and_log_taxonomy_20260228 Context
- [Specification](./spec.md)
- [Implementation Plan](./plan.md)
- [Metadata](./metadata.json)

View File

@@ -0,0 +1,8 @@
{
"description": "Consolidate temp/test file cruft into a specific directory we can add to gitignore that shouldn\u0027t be tracked. Migrate existing session logs into a ./logs/sessions category. Make sure future logs get dumped into there.",
"track_id": "consolidate_cruft_and_log_taxonomy_20260228",
"type": "chore",
"created_at": "2026-03-01T08:49:02Z",
"status": "new",
"updated_at": "2026-03-01T08:49:02Z"
}

View File

@@ -0,0 +1,24 @@
# Implementation Plan: Consolidate Temp/Test Cruft & Log Taxonomy
## Phase 1: Directory Structure & Gitignore [checkpoint: 590293e]
- [x] Task: Create `tests/artifacts/`, `logs/sessions/`, `logs/agents/`, and `logs/errors/`. (fab109e)
- [x] Task: Update `.gitignore` to exclude `tests/artifacts/` and all `logs/` sub-folders. (fab109e)
- [x] Task: Conductor - User Manual Verification 'Phase 1: Directory Structure & Gitignore' (Protocol in workflow.md) (fab109e)
## Phase 2: App Logic Redirection [checkpoint: 6326546]
- [x] Task: Update `session_logger.py` to use `logs/sessions/`, `logs/agents/`, and `logs/errors/` for its outputs. (6326546)
- [x] Task: Modify `project_manager.py` to store temporary project TOMLs in `tests/artifacts/`. (6326546)
- [x] Task: Update `shell_runner.py` or `scripts/mma_exec.py` to use `tests/artifacts/` for its temporary scripts and outputs. (6326546)
- [x] Task: Add foundational support (e.g., in `metadata.json` for sessions) to store "annotated names" for logs. (6326546)
- [x] Task: Conductor - User Manual Verification 'Phase 2: App Logic Redirection' (Protocol in workflow.md) (6326546)
## Phase 3: Migration Script [checkpoint: 61d513a]
- [x] Task: Create `scripts/migrate_cruft.ps1` to identify and move existing files (e.g., `temp_*.toml`, `*.log`) from the root to their new locations. (61d513a)
- [x] Task: Test the migration script on a few dummy files. (61d513a)
- [x] Task: Execute the migration script and verify the project root is clean. (61d513a)
- [x] Task: Conductor - User Manual Verification 'Phase 3: Migration Script' (Protocol in workflow.md) (61d513a)
## Phase 4: Regression Testing & Final Verification [checkpoint: 6326546]
- [x] Task: Run a full session through the GUI and verify that all logs and temp files are created in the new sub-directories. (6326546)
- [x] Task: Verify that `tests/artifacts/` is correctly ignored by git. (6326546)
- [x] Task: Conductor - User Manual Verification 'Phase 4: Regression Testing & Final Verification' (Protocol in workflow.md) (6326546)

View File

@@ -0,0 +1,32 @@
# Track Specification: Consolidate Temp/Test Cruft & Log Taxonomy
## Overview
This track focuses on cleaning up the project root by consolidating temporary and test-related files into a dedicated directory and establishing a structured taxonomy for session logs. This will improve project organization and make manual file exploration easier before a dedicated GUI log viewer is implemented.
## Goals
1. **Establish Artifacts Directory:** Create `tests/artifacts/` as the primary location for temporary test data and non-persistent cruft.
2. **Gitignore Updates:** Update `.gitignore` to ensure this new directory and its contents are not tracked.
3. **Log Taxonomy Setup:** Organize `./logs/` into clear sub-categories: `sessions/`, `agents/`, and `errors/`.
4. **Migration Script:** Provide a PowerShell script to move existing files and logs into the new structure.
5. **Future-Proofing:** Update the application logic (e.g., `session_logger.py`, `project_manager.py`) to ensure all future logs and temp files are created in the correct sub-directories.
6. **Annotated Names Capability:** Add foundational support for attaching human-readable "annotated names" to log sessions for easier GUI lookup later.
## Functional Requirements
- **Structure:** Create `tests/artifacts/`, `logs/sessions/`, `logs/agents/`, and `logs/errors/`.
- **Configuration:** Update the app's default paths for temporary files (e.g., `temp_project.toml`) to use `tests/artifacts/`.
- **Logging Logic:** Modify `SessionLogger` to use the new taxonomy based on the type of log (e.g., `agents/` for sub-agent runs).
- **Migration Tool:** A script (`scripts/migrate_cruft.ps1`) that identifies and moves existing root-level `temp_*.toml`, `*.log`, and other cruft.
## Non-Functional Requirements
- **Non-Destructive:** The migration script should use `Move-Item -Force` but ideally verify file presence before moving.
- **Cleanliness:** No new temporary files should appear in the project root after this track is implemented.
## Acceptance Criteria
- `tests/artifacts/` exists and contains redirected temp files.
- `.gitignore` excludes `tests/artifacts/` and all `logs/` sub-folders.
- Existing logs are successfully moved into `logs/sessions/`, `logs/agents/`, or `logs/errors/`.
- A new session correctly places its logs into the categorized sub-folders.
## Out of Scope
- The full GUI implementation of the log viewer (this is just the filesystem foundation).
- Consolidation of `.git` or `.venv` directories.

View File

@@ -0,0 +1,5 @@
# Track context_management_20260223 Context
- [Specification](./spec.md)
- [Implementation Plan](./plan.md)
- [Metadata](./metadata.json)

View File

@@ -0,0 +1,8 @@
{
"track_id": "context_management_20260223",
"type": "feature",
"status": "new",
"created_at": "2026-02-23T10:00:00Z",
"updated_at": "2026-02-23T10:00:00Z",
"description": "Implement context visualization and memory management improvements"
}

View File

@@ -0,0 +1,19 @@
# Implementation Plan
## Phase 1: Context Memory and Token Visualization [checkpoint: a88311b]
- [x] Task: Implement token usage summary widget e34ff7e
- [ ] Sub-task: Write Tests
- [ ] Sub-task: Implement Feature
- [x] Task: Expose history truncation controls in the Discussion panel 94fe904
- [ ] Sub-task: Write Tests
- [ ] Sub-task: Implement Feature
- [x] Task: Conductor - User Manual Verification 'Phase 1: Context Memory and Token Visualization' (Protocol in workflow.md) a88311b
## Phase 2: Agent Capability Configuration [checkpoint: 1ac6eb9]
- [x] Task: Add UI toggles for available tools per-project 1677d25
- [x] Sub-task: Write Tests
- [x] Sub-task: Implement Feature
- [x] Task: Wire tool toggles to AI provider tool declaration payload 92aa33c
- [ ] Sub-task: Write Tests
- [ ] Sub-task: Implement Feature
- [x] Task: Conductor - User Manual Verification 'Phase 2: Agent Capability Configuration' (Protocol in workflow.md) 1ac6eb9

View File

@@ -0,0 +1,9 @@
# Specification: Context Visualization and Memory Management
## Overview
This track implements UI improvements and structural changes to Manual Slop to provide explicit visualization of context memory usage and token consumption, fulfilling the "Expert systems level utility" and "Full control" product goals.
## Core Objectives
1. **Token Visualization:** Expose token usage metrics in real-time within the GUI (e.g., in a dedicated metrics panel or augmented Comms panel).
2. **Context Memory Management:** Provide tools to manually flush, persist, or truncate history to manage token budgets per-discussion.
3. **Agent Capability Toggles:** Expose explicit configuration options for agent capabilities (e.g., toggle MCP tools on/off) from the UI.

View File

@@ -0,0 +1,5 @@
# Track deepseek_support_20260225 Context
- [Specification](./spec.md)
- [Implementation Plan](./plan.md)
- [Metadata](./metadata.json)

View File

@@ -0,0 +1,8 @@
{
"track_id": "deepseek_support_20260225",
"type": "feature",
"status": "new",
"created_at": "2026-02-25T00:00:00Z",
"updated_at": "2026-02-25T00:00:00Z",
"description": "Add support for the deepseek api as a provider."
}

View File

@@ -0,0 +1,27 @@
# Implementation Plan: DeepSeek API Provider Support
## Phase 1: Infrastructure & Common Logic [checkpoint: 0ec3720]
- [x] Task: Initialize MMA Environment `activate_skill mma-orchestrator` 1b3ff23
- [x] Task: Update `credentials.toml` schema and configuration logic in `project_manager.py` to support `deepseek` 1b3ff23
- [x] Task: Define the `DeepSeekProvider` interface in `ai_client.py` and align with existing provider patterns 1b3ff23
- [x] Task: Conductor - User Manual Verification 'Infrastructure & Common Logic' (Protocol in workflow.md) 1b3ff23
## Phase 2: DeepSeek API Client Implementation
- [x] Task: Write failing tests for `DeepSeekProvider` model selection and basic completion
- [x] Task: Implement `DeepSeekProvider` using the dedicated SDK
- [x] Task: Write failing tests for streaming and tool calling parity in `DeepSeekProvider`
- [x] Task: Implement streaming and tool calling logic for DeepSeek models
- [x] Task: Conductor - User Manual Verification 'DeepSeek API Client Implementation' (Protocol in workflow.md)
## Phase 3: Reasoning Traces & Advanced Capabilities
- [x] Task: Write failing tests for reasoning trace capture in `DeepSeekProvider` (DeepSeek-R1)
- [x] Task: Implement reasoning trace processing and integration with discussion history
- [x] Task: Write failing tests for token estimation and cost tracking for DeepSeek models
- [x] Task: Implement token usage tracking according to DeepSeek pricing
- [x] Task: Conductor - User Manual Verification 'Reasoning Traces & Advanced Capabilities' (Protocol in workflow.md)
## Phase 4: GUI Integration & Final Verification
- [x] Task: Update `gui_2.py` and `theme_2.py` (if necessary) to include DeepSeek in the provider selection UI
- [x] Task: Implement automated regression tests for the full DeepSeek lifecycle (prompt, streaming, tool call, reasoning)
- [x] Task: Verify overall performance and UI responsiveness with the new provider
- [x] Task: Conductor - User Manual Verification 'GUI Integration & Final Verification' (Protocol in workflow.md)

View File

@@ -0,0 +1,31 @@
# Specification: DeepSeek API Provider Support
## Overview
Implement a new AI provider module to support the DeepSeek API within the Manual Slop application. This integration will leverage a dedicated SDK to provide access to high-performance models (DeepSeek-V3 and DeepSeek-R1) with support for streaming, tool calling, and detailed reasoning traces.
## Functional Requirements
- **Dedicated SDK Integration:** Utilize a DeepSeek-specific Python client for API interactions.
- **Model Support:** Initial support for `deepseek-v3` (general performance) and `deepseek-r1` (reasoning).
- **Core Features:**
- **Streaming:** Support real-time response generation for a better user experience.
- **Tool Calling:** Integrate with Manual Slop's existing tool/function execution framework.
- **Reasoning Traces:** Capture and display reasoning paths if provided by the model (e.g., DeepSeek-R1).
- **Configuration Management:**
- Add `[deepseek]` section to `credentials.toml` for `api_key`.
- Update `config.toml` to allow selecting DeepSeek as the active provider.
## Non-Functional Requirements
- **Parity:** Maintain consistency with existing Gemini and Anthropic provider implementations in `ai_client.py`.
- **Error Handling:** Robust handling of API rate limits and connection issues specific to DeepSeek.
- **Observability:** Track token usage and costs according to DeepSeek's pricing model.
## Acceptance Criteria
- [ ] User can select "DeepSeek" as a provider in the GUI.
- [ ] Successful completion of prompts using both DeepSeek-V3 and DeepSeek-R1 models.
- [ ] Tool calling works correctly for standard operations (e.g., `read_file`).
- [ ] Reasoning traces from R1 are captured and visible in the discussion history.
- [ ] Streaming responses function correctly without blocking the GUI.
## Out of Scope
- Support for OpenAI-compatible proxies for DeepSeek in this initial track.
- Automated fine-tuning or custom model endpoints.

View File

@@ -0,0 +1,5 @@
# Track documentation_refresh_20260224 Context
- [Specification](./spec.md)
- [Implementation Plan](./plan.md)
- [Metadata](./metadata.json)

View File

@@ -0,0 +1,8 @@
{
"track_id": "documentation_refresh_20260224",
"type": "chore",
"status": "new",
"created_at": "2026-02-24T18:35:00Z",
"updated_at": "2026-02-24T18:35:00Z",
"description": "Update ./docs/* & ./Readme.md, review ./MainContext.md significance (should we keep it..)."
}

View File

@@ -0,0 +1,38 @@
# Implementation Plan: Deep Architectural Documentation Refresh
## Phase 1: Context Cleanup & Research
- [x] Task: Audit references to `MainContext.md` across the project.
- [x] Task: Delete `MainContext.md` and update any identified references.
- [x] Task: Execute `py_get_skeleton` and `py_get_code_outline` for `events.py`, `api_hooks.py`, `api_hook_client.py`, and `gui_2.py` to create a technical map for the guides.
- [x] Task: Analyze the `live_gui` fixture in `tests/conftest.py` and the simulation loop in `tests/visual_sim_mma_v2.py`.
## Phase 2: Core Architecture Deep Dive
Update `docs/guide_architecture.md` with expert-level detail.
- [x] Task: Document the Dual-Threaded App Lifetime: Main GUI loop vs. Daemon execution threads.
- [x] Task: Detail the `AsyncEventQueue` and `EventEmitter` roles in the decoupling strategy.
- [x] Task: Explain the `_pending_gui_tasks` synchronization mechanism for bridging the Hook Server and GUI.
- [x] Task: Document the "Linear Execution Clutch" and its deterministic state machine.
- [x] Task: Verify the architectural descriptions against the actual implementation.
- [x] Task: Conductor - User Manual Verification 'Phase 2: Core Architecture Deep Dive' (Protocol in workflow.md)
## Phase 3: Hook System & Tooling Technical Reference
Update `docs/guide_tools.md` to include low-level API details.
- [x] Task: Create a comprehensive API reference for all `HookServer` endpoints.
- [x] Task: Document the `ApiHookClient` implementation, including retries and polling strategies.
- [x] Task: Update the MCP toolset guide with current native tool implementations.
- [x] Task: Document the `ask/respond` IPC flow for "Human-in-the-Loop" confirmations.
- [x] Task: Conductor - User Manual Verification 'Phase 3: Hook System & Tooling Technical Reference' (Protocol in workflow.md)
## Phase 4: Verification & Simulation Framework
Create the new `docs/guide_simulations.md` guide.
- [x] Task: Detail the Live GUI testing infrastructure: `--enable-test-hooks` and the `live_gui` fixture.
- [x] Task: Breakdown the Simulation Lifecycle: Startup, Polling, Interaction, and Assertion.
- [x] Task: Document the mock provider strategy using `tests/mock_gemini_cli.py`.
- [x] Task: Provide examples of visual verification tests (e.g., MMA lifecycle).
- [x] Task: Conductor - User Manual Verification 'Phase 4: Verification & Simulation Framework' (Protocol in workflow.md)
## Phase 5: README & Roadmap Update
- [x] Task: Update `Readme.md` with current setup (`uv`, `credentials.toml`) and vision.
- [x] Task: Perform a project-wide link validation of all Markdown files.
- [x] Task: Verify the high-density information style across all documentation.
- [x] Task: Conductor - User Manual Verification 'Phase 5: README & Roadmap Update' (Protocol in workflow.md)

View File

@@ -0,0 +1,45 @@
# Track Specification: Deep Architectural Documentation Refresh
## Overview
This track implements a high-density, expert-level documentation suite for the Manual Slop project. The documentation style is strictly modeled after the **pedagogical and narrative standards** of `gencpp` and `VEFontCache-Odin`. It moves beyond simple "User Guides" to provide a **"USA Graphics Company"** architectural reference: high information density, tactical technical transparency, and a narrative intent that guides a developer from high-level philosophy to low-level implementation.
## Pedagogical Goals
1. **Narrative Intent:** Documentation must transition the reader through a logical learning journey: **Philosophy/Mental Model -> Architectural Boundaries -> Implementation Logic -> Verification/Simulation.**
2. **High Information Density:** Eliminate conversational filler and "fluff." Every sentence must provide architectural signal (state transitions, data flows, constraints).
3. **Technical Transparency:** Document the "How" and "Why" behind design decisions (e.g., *Why* the dual-threaded `Asyncio` loop? *How* does the "Execution Clutch" bridge the thread gap?).
4. **Architectural Mapping:** Use precise symbol names (`AsyncEventQueue`, `_pending_gui_tasks`, `HookServer`) to map the documentation directly to the source code.
5. **Multi-Layered Depth:** Each major component (Architecture, Tools, Simulations) must have its own dedicated, expert-level guide. No consolidation into single, shallow files.
## Functional Requirements (Documentation Areas)
### 1. Core Architecture (`docs/guide_architecture.md`)
- **System Philosophy:** The "Decoupled State Machine" mental model.
- **Application Lifetime:** The multi-threaded boot sequence and the "Dual-Flush" persistence model.
- **The Task Pipeline:** Detailed producer-consumer synchronization between the GUI (Main) and AI (Daemon) threads.
- **The Execution Clutch (HITL):** Detailed state machine for human-in-the-loop interception and payload mutation.
### 2. Tooling & IPC Reference (`docs/guide_tools.md`)
- **MCP Bridge:** Low-level security constraints and filesystem sandboxing.
- **Hook API:** A full technical reference for the REST/IPC interface (endpoints, payloads, diagnostics).
- **IPC Flow:** The `ask/respond` sequence for synchronous human-in-the-loop requests.
### 3. Verification & Simulation Framework (`docs/guide_simulations.md`)
- **Infrastructure:** The `--enable-test-hooks` flag and the `live_gui` pytest fixture.
- **Lifecycle:** The "Puppeteer" pattern for driving the GUI via automated clients.
- **Mocking Strategy:** Script-based AI provider mocking via `mock_gemini_cli.py`.
- **Visual Assertion:** Examples of verifying the rendered state (DAG, Terminal streams) rather than just API returns.
### 4. Product Vision & Roadmap (`Readme.md`)
- **Technological Identity:** High-density experimental tool for local AI orchestration.
- **Pedagogical Landing:** Direct links to the deep-dive guides to establish the project's expert-level tone immediately.
## Acceptance Criteria for Expert Review (Claude Opus)
- [ ] **Zero Filler:** No introductory "In this section..." or "Now we will..." conversational markers.
- [ ] **Structural Parity:** Documentation follows the `gencpp` pattern (Philosophy -> Code Paths -> Interface).
- [ ] **Expert-Level Detail:** Includes data structures, locking mechanisms, and thread-safety constraints.
- [ ] **Narrative Cohesion:** The documents feel like a single, expert-authored manual for a complex graphics or systems engine.
- [ ] **Tactile Interaction:** Explains the "Linear Execution Clutch" as a physical shift in the application's processing gears.
## Out of Scope
- Documenting legacy `gui_legacy.py` code beyond its role as a fallback.
- Visual diagram generation (focusing on high-signal text-based architectural mapping).

View File

@@ -0,0 +1,5 @@
# Track event_driven_metrics_20260223 Context
- [Specification](./spec.md)
- [Implementation Plan](./plan.md)
- [Metadata](./metadata.json)

View File

@@ -0,0 +1,8 @@
{
"track_id": "event_driven_metrics_20260223",
"type": "refactor",
"status": "new",
"created_at": "2026-02-23T15:46:00Z",
"updated_at": "2026-02-23T15:46:00Z",
"description": "Fix client api metrics to use event driven updates, they shouldn't happen based on ui main thread graphical updates. Only when the program actually does significant client api calls or responses."
}

View File

@@ -0,0 +1,28 @@
# Implementation Plan: Event-Driven API Metrics Updates
## Phase 1: Event Infrastructure & Test Setup [checkpoint: 776f4e4]
Define the event mechanism and create baseline tests to ensure we don't break data accuracy.
- [x] Task: Create `tests/test_api_events.py` to verify the new event emission logic in isolation. cd3f3c8
- [x] Task: Implement a simple `EventEmitter` or `Signal` class (if not already present) to handle decoupled communication. cd3f3c8
- [x] Task: Instrument `ai_client.py` with the event system, adding placeholders for the key lifecycle events. cd3f3c8
- [ ] Task: Conductor - User Manual Verification 'Phase 1: Event Infrastructure & Test Setup' (Protocol in workflow.md)
## Phase 2: Client Instrumentation (API Lifecycle) [checkpoint: e24664c]
Update the AI client to emit events during actual API interactions.
- [x] Task: Implement event emission for Gemini and Anthropic request/response cycles in `ai_client.py`. 20ebab5
- [x] Task: Implement event emission for tool/function calls and stream processing. 20ebab5
- [x] Task: Verify via tests that events carry the correct payload (token counts, session metadata). 20ebab5
- [x] Task: Conductor - User Manual Verification 'Phase 2: Client Instrumentation (API Lifecycle)' (Protocol in workflow.md) e24664c
## Phase 3: GUI Integration & Decoupling [checkpoint: 8caebbd]
Connect the UI to the event system and remove polling logic.
- [x] Task: Update `gui.py` to subscribe to API events and trigger metrics UI refreshes only upon event receipt. 2dd6145
- [x] Task: Audit the `gui.py` render loop and remove all per-frame metrics calculations or display updates. 2dd6145
- [x] Task: Verify that UI performance improves (reduced CPU/frame time) while metrics remain accurate. 2dd6145
- [x] Task: Conductor - User Manual Verification 'Phase 3: GUI Integration & Decoupling' (Protocol in workflow.md) 8caebbd
## Phase: Review Fixes
- [x] Task: Apply review suggestions 66f728e

View File

@@ -0,0 +1,29 @@
# Specification: Event-Driven API Metrics Updates
## Overview
Refactor the API metrics update mechanism to be event-driven. Currently, the UI likely polls or recalculates metrics on every frame. This track will implement a signal/event system where `ai_client.py` broadcasts updates only when significant API activities (requests, responses, tool calls, or stream chunks) occur.
## Functional Requirements
- **Event System:** Implement a robust event/signal mechanism (e.g., using a queue or a simple observer pattern) to communicate API lifecycle events.
- **Client Instrumentation:** Update `ai_client.py` to emit events at key points:
- **Request Start:** When a call is sent to the provider.
- **Response Received:** When a full or final response is received.
- **Tool Execution:** When a tool call is processed or a result is returned.
- **Stream Update:** When a chunk of a streaming response is processed.
- **UI Listener:** Update the GUI components (in `gui.py` or associated panels) to subscribe to these events and update metrics displays only when notified.
- **Decoupling:** Remove any metrics calculation or display logic that is triggered by the UI's main graphical update loop (per-frame).
## Non-Functional Requirements
- **Efficiency:** Significant reduction in UI main thread CPU usage related to metrics.
- **Integrity:** Maintain 100% accuracy of token counts and usage data.
- **Responsiveness:** Metrics should update immediately following the corresponding API event.
## Acceptance Criteria
- [ ] UI metrics for token usage, costs, and session state do NOT recalculate on every frame (can be verified by adding logging to the recalculation logic).
- [ ] Metrics update precisely when API calls are made or responses are received.
- [ ] Automated tests confirm that events are emitted correctly by the `ai_client`.
- [ ] The application remains stable and metrics accuracy is verified against the existing polling implementation.
## Out of Scope
- Adding new metrics or visual components.
- Refactoring the core AI logic beyond the event/metrics hook.

View File

@@ -0,0 +1,5 @@
# Track gemini_cli_headless_20260224 Context
- [Specification](./spec.md)
- [Implementation Plan](./plan.md)
- [Metadata](./metadata.json)

Some files were not shown because too many files have changed in this diff Show More