Private
Public Access
0
0
Commit Graph

418 Commits

Author SHA1 Message Date
ed f09cd4a733 conductor: doc final sync for sub-tracks 2 (partial), 3, 4 + conftest fix 2026-06-06 21:45:27 -04:00
ed 530a29f0d2 conductor(tracks): fix sub-track count in startup_speedup row (4 → 3; sub-track 1 is done) 2026-06-06 20:51:25 -04:00
ed bb2ac6c9c0 conductor: finalize startup_speedup_20260606 docs (sub-track 1 + 3 post-shipping fixes) 2026-06-06 20:45:58 -04:00
ed dd137df750 conductor(tracks): backfill mcp_architecture_refactor SHA in registry 2026-06-06 20:34:35 -04:00
ed 2720a8940c conductor(track): Initialize mcp_architecture_refactor_20260606
Track + metadata + state + tracks.md registration for the 2,205-line
mcp_client.py split into a slim controller + 6 native sub-MCPs + 1
external sub-MCP.

Key design decisions (per user feedback):
- Naming convention: mcp_<type>.py for native MCPs (mcp_file_io.py,
  mcp_python.py, mcp_c.py, mcp_cpp.py, mcp_web.py, mcp_analysis.py).
- ExternalMCPManager class name preserved (moves to mcp_external.py).
- Sub-MCP shape: class with name / description / tools / invoke().
- MCPController: holds ALL_SUB_MCPS list, inverted-dict tool lookup,
  3-layer security (extracted to mcp_client_security.py), schema
  aggregation.
- Each invoke() returns Result[str, ErrorInfo] (from
  data_oriented_error_handling_20260606).
- Backward compat: mcp_client_legacy.py re-exports all 45+ old
  symbols; the 4 existing test files + src/app_controller.py:61
  direct call continue to work.

DSL future (per user notes on APL/K/Cosy): NOT in this track.
Documented in spec §12.1 as the mcp_dsl_20260606 follow-up.
Sub-MCP architecture is the natural unit to pair with a DSL emitter.

7 phases. ~22 task slots. New tests: 9 (one per sub-MCP + controller +
security + legacy). Modified tests: 4 (existing mcp_* tests must
pass unchanged).

Blocked by: data_oriented_error_handling_20260606, data_structure_strengthening_20260606.
Blocks: mcp_dsl_20260606 (future DSL track).
2026-06-06 20:34:00 -04:00
ed 95d1b08142 conductor(plan): Final track summary - 9 phases, 50 tests, 3066ms saved 2026-06-06 18:08:59 -04:00
ed 4e6a86a84c conductor(tracks): backfill data_structure_strengthening_20260606 SHA in registry 2026-06-06 17:51:33 -04:00
ed ed42a97a9b conductor(track): Initialize data_structure_strengthening_20260606
Track + metadata + state + tracks.md registration for the type-aliases
refactor that follows the audit_weak_types.py findings (430 weak sites
across 29 of 61 files; 86% concentrated in 6 high-traffic files).

Key design decisions (per user approval):
- 10 TypeAlias definitions in src/type_aliases.py (Metadata, CommsLogEntry,
  CommsLog, HistoryMessage, History, FileItem, FileItems, ToolDefinition,
  ToolCall, CommsLogCallback).
- 1 NamedTuple (FileItemsDiff) for the _reread_file_items return.
- Mechanical replacement of 345 weak sites across 6 files (NOT 430; the
  remaining 85 are in 23 lower-impact files deferred to future tracks).
- scripts/audit_weak_types.py gains a --strict mode and a baseline file
  (scripts/audit_weak_types.baseline.json) so the count is enforced.
- 2 phases: aliases + 6-file replacement + audit baseline; NamedTuples
  + docs + archive.
- Honest about what's missing: TypedDict / @dataclass migration is a
  follow-up track (typed_dict_migration_20260606), not this one.
- Coexistence with the data_oriented_error_handling_20260606 track's
  Result[T] / ErrorInfo: the aliases are value-level (data types), Result
  is control-level (wrapper). They compose (Result[FileItems] is valid).
  No conflict.

Audit baseline:
- Pre-track: 430 weak sites, 0 strong patterns
- Target after Phase 1: ~60 weak sites (only the 23 lower-impact files)
- Top 4 unique type strings account for 86% of findings (4-6 aliases
  eliminate the bulk of the noise).

Not blocked by anything; can be executed independently of the other
pending tracks. Blocks typed_dict_migration_20260606 (the future Phase 2).
2026-06-06 17:49:22 -04:00
ed b91962e458 conductor(plan): Mark Phase 5D complete - gui_2 lazy proxy + dead import removal 2026-06-06 17:19:14 -04:00
ed 32edad0a4b conductor(plan): Mark Phase 5A-5C complete (commands, theme_2, markdown_helper lazy imports) 2026-06-06 17:01:05 -04:00
ed cbc3b075a0 conductor(track): Initialize data_oriented_error_handling_20260606
Track + metadata + state + tracks.md registration for the Fleury-pattern
error handling refactor.

Key design decisions (per user approval):
- Option A for _send_<vendor>() handling: rename to _send_<vendor>_result()
  and change return type to Result[str] (contained to internal callers).
- send() is marked @typing_extensions.deprecated; send_result() is the new
  public API.
- ProviderError exception is FULLY REPLACED by ErrorInfo dataclass
  (a value, not an exception).
- 5 phases: foundation, mcp_client, ai_client, rag_engine, deprecation+archive.
- Post-tracks baseline check (Phase 1 Task 1.1) verifies the 3 pending
  tracks have merged before proceeding.
- 9 Open Questions, 7 Risks, 5 verification criteria, follow-up track
  public_api_migration_20260606 planned in spec §12.1.

Blocked by: startup_speedup_20260606, test_batching_refactor_20260606,
qwen_llama_grok_integration_20260606. Blocks: public_api_migration_20260606.
2026-06-06 16:58:22 -04:00
ed a0ff1bde91 conductor(plan): Mark Phase 4 complete - app_controller fastapi import removal + _require_warmed lift 2026-06-06 16:36:20 -04:00
ed 8905c26bff conductor(plan): Mark Phase 3 complete - ai_client SDK import removal done 2026-06-06 16:11:14 -04:00
ed 055430a75a conductor(tracks): Register qwen_llama_grok_integration_20260606 in registry (item 0d) 2026-06-06 14:56:55 -04:00
ed cbfd78c51d conductor(tracks): Register test_batching_refactor_20260606 in registry 2026-06-06 14:14:11 -04:00
ed 32e633b3ec conductor(plan): mark startup_speedup_20260606 track creation committed (cd4fb045) 2026-06-06 13:01:32 -04:00
ed cd4fb04541 conductor(track): create startup_speedup_20260606 track for sloppy.py startup latency
Fulfills the existing backlog entry at conductor/tracks.md:152
(2026-06-05 root-cause analysis of live_gui wait_for_server timeouts).

Main Thread Purity Invariant: the main thread (entering immapp.run())
must never import a module heavier than imgui_bundle and the lean
gui_2 skeleton. Enforced by:
  - static gate: scripts/audit_main_thread_imports.py (CI)
  - runtime hook: tests/test_main_thread_purity.py (sys.addaudithook)

Threading constraint: no new threading.Thread(...) calls in src/.
All background work goes through AppController._io_pool
(ThreadPoolExecutor, max_workers=4, thread_name_prefix='controller-io').

9 phases, 57 tasks: audit+baseline, job pool, lazy-load SDKs, lazy-load
FastAPI, lazy-load feature-gated GUI, migrate ad-hoc threads, runtime
enforcement, hook API + diagnostics, verify+checkpoint.

Expected savings: ~2000-2400ms off main-thread import cost.
Target: import src.ai_client < 50ms (from ~1800ms), live_gui fixtures
no longer time out at wait_for_server(timeout=15).
2026-06-06 12:57:20 -04:00
ed 9d72d98b50 conductor(tracks): mark rag_phase4_stress_test_flake resolved (commit 16412ad5) 2026-06-06 11:29:03 -04:00
ed 5e0b6bbfd3 conductor(tracks): queue RAG test flake as new backlog item; mark prior_session complete 2026-06-06 01:35:21 -04:00
ed 9a3831897b conductor(tracks): mark live_gui_test_hardening_v2 complete (root cause was indent, not state sync) 2026-06-06 01:28:02 -04:00
ed 5c23ad190d conductor(tracks): link v2 to 4 sub-track specs and plans 2026-06-05 22:56:55 -04:00
ed 70c18f92c3 conductor(tracks): mark v1 fragility_fixes complete, queue v2 (state sync + undo_redo + prior_session) 2026-06-05 22:09:30 -04:00
ed 0e299140ca conductor(tracks): register live_gui_fragility_fixes + queue prior_session_test_harden follow-up 2026-06-05 20:17:11 -04:00
ed 449a827a82 conductor(tracks): queue sloppy.py startup speedup as new backlog item 2026-06-05 18:53:01 -04:00
ed 8663498725 conductor(tracks): register multi_themes ship and regression_fixes checkpoint 2026-06-05 18:12:03 -04:00
ed 0d4fade5ed fix(context): Only send context on first message in discussion
Previously, context (files, screenshots) was always sent with every message,
even on subsequent messages where the AI provider already had the context
from the first message via its history mechanism.

This change:
- Detects if the discussion has any AI responses already
- Only sends md_content (stable_md) on the first message
- Subsequent messages pass empty string for md_content to avoid redundant sending
- Context now properly goes in md_content parameter, not crammed into user_message

The fix is in _api_generate() in src/app_controller.py
2026-06-04 18:43:39 -04:00
ed 11253e8d60 conductor(plan): UI Polish track - 5 phases, design spec + impl plan 2026-06-03 10:29:25 -04:00
ed 6ce119dffe conductor(checkpoint): Fix markdown_helper.py for imgui-bundle >=1.92.801 complete 2026-06-03 00:54:07 -04:00
ed 79a12d2c3e conductor(tracks): register Clean Install Test track with checkpoint d14ae3b 2026-06-03 00:33:13 -04:00
ed b87742ecba conductor(tracks): fix 25 broken links in Phase 5/6/Hot Reload sections after archival 2026-06-03 00:17:38 -04:00
ed 56ea316afa conductor(tracks): consolidate 'Earlier Archives' into 'Recent Completed Tracks (2026-05+)' with archive/ links 2026-06-03 00:14:45 -04:00
ed 0ffeccc7d3 conductor(tracks): register 4 completed 2026-06-02 tracks with checkpoint SHAs 2026-06-03 00:02:15 -04:00
ed 7f8a9c4496 conductor(tracks): mark command_palette done, add documentation_refresh track entry 2026-06-02 23:50:34 -04:00
ed 7eb8f9eed4 chore(conductor): Add new track 'command_palette_and_performance_20260602' 2026-06-02 17:51:34 -04:00
ed 8f6f47d46b fix(gui): Final monolithic stabilization pass
- Restore monolithic architecture in gui_2.py to fix test breakages and circular imports.
- Update Text Viewer stable ID to '###Text_Viewer_Unified' to definitively fix docking conflicts.
- Refactor discussion entry renderer to force full-width horizontal expansion for Markdown.
- Fully restore theme_2.py definitions (palettes, fonts, scale) while retaining role-tint logic.
- Robustify ImGui ID stack in imgui_scopes.py to prevent access violations.
- Verify all fixes with the comprehensive unit and visual test suite.
2026-06-02 17:30:46 -04:00
ed fee41032b6 chore(conductor): Add new track 'phase7_monolithic_stabilization_20260602' 2026-06-02 15:14:18 -04:00
ed c4811f00c1 fix(gui): Final Phase 7 stabilization and polish
- Resolve ImportError by correctly prefixing 'src' in modular renderers.
- Fix ImGui access violation by ensuring push_id always receives string IDs.
- Restore visible role-based background tints using layered rendering (channels).
- Definitively fix horizontal Markdown table widths by forcing group expansion.
- Centralize color management in theme_2.py and ui_shared.py.
- Standardize Files & Media inventory layout and remove legacy controls.
- Update test mocks to support modular UI and theme-driven styling.
2026-06-02 13:27:38 -04:00
ed e9ff6efe20 UX UX UX UX UX 2026-06-02 02:58:33 -04:00
ed 964b5c5aa4 test: Fix assertions after GUI state unification
- Update test_gui_symbol_navigation.py and test_gui_text_viewer.py to assert against show_windows['Text Viewer'] instead of the deprecated show_text_viewer attribute.
- Increase synchronization wait time in test_visual_sim_gui_ux.py to ensure the GUI loop accurately reflects the mocked MMA status.
2026-06-02 02:20:07 -04:00
ed 5b7b818ed2 feat(gui): Implement per-response token metrics and AI discussion compression
- Display token metrics (input/output/cache) per response in Discussion Hub.
- Add total Discussion Token usage in the panel header.
- Implement 'Compress' feature to intelligently summarize and replace exhausted discussion histories using an AI subagent.
2026-06-02 01:36:57 -04:00
ed 3528d6eb03 fix(gui): Improve Approve PowerShell Command modal UX
- Make the approval modal resizable with a larger default size.
- Render 'Show Full Preview' inline to prevent UI lockup issues.
2026-06-02 00:45:30 -04:00
ed ff849e7990 chore(conductor): Add new track 'approve_modal_ux_20260601' 2026-06-02 00:43:23 -04:00
ed 797f283f44 chore(conductor): Add new tracks for Phase 7
- Add 'structural_file_editor_20260601' track.
- Add 'discussion_metrics_and_compression_20260601' track.
2026-06-02 00:25:10 -04:00
ed 4baaadd88d chore(conductor): Add new track 'context_composition_ux_20260601' 2026-06-02 00:19:59 -04:00
ed 0f859d81d6 feat(gui): Unified window state and fixed context preservation regressions
- Implement unified show_windows['Text Viewer'] state and fix docking conflict loops.
- Fix Tool Call row interactivity using spanned selectables.
- Fix context selection loss when switching/creating discussions.
- Implement 'Empty Context Warning' modal for safer generation.
- Correct IndentationError in app_controller.py.
- Remove legacy show_text_viewer attribute and update API hooks.
2026-06-02 00:18:48 -04:00
ed b33a213697 chore(conductor): Add new track 'text_viewer_and_tool_call_fixes_20260601' 2026-06-01 23:46:05 -04:00
ed 6f733a64fa chore(conductor): Add new track 'context_preservation_and_warnings_20260601' 2026-06-01 22:41:20 -04:00
ed 8cd6e7ed55 fix(minimax): implement history repair and truncation to prevent tool sequence errors
- Add _repair_minimax_history to close dangling tool calls from interrupted sessions.
- Add _trim_minimax_history to manage token limits and intelligently prune history.
- Integrate repair and trimming into _send_minimax loop.
- Resolves MiniMax error 2013 (tool call result does not follow tool call).
2026-06-01 22:20:42 -04:00
ed c1764a644d chore(conductor): Add new track 'minimax_history_fix_20260601' 2026-06-01 22:13:00 -04:00
ed 7a434adb7c fix(gui): Resolve AttributeError in imscope.indent and stabilize render loop
- Add 'indent' context manager to src/imgui_scopes.py.
- Refactor manual imgui.indent/unindent calls in src/gui_2.py to use imscope.indent.
- Fix cascading ImGui assertion failures caused by Open/Close mismatches during exceptions.
- Finalize 'Selectable Thinking Monologs' track.
2026-06-01 19:26:53 -04:00