Private
Public Access
0
0
Commit Graph

237 Commits

Author SHA1 Message Date
ed b92daef34f fix(project): Reload personas and validate active AI settings on project switch
When switching projects, the previous project's project-specific persona and
presets remained selected in the AI Settings panel because:
1. self.personas was not reloaded after switching project root
2. self.ui_active_persona / tool_preset / bias_profile / project_preset_name
   were not validated against the newly-loaded personas/presets

Fix:
- Reload self.personas from self.persona_manager in _refresh_from_project
- Validate each active selection and reset to None/empty if it does not
  exist in the newly-loaded manager dictionaries
- Push the active tool preset and bias profile to ai_client after the swap
- Initialize self.ui_active_bias_profile in class attribute block (was only
  set later in __init__, causing AttributeError on direct attribute access)

Tests: 4 new tests in tests/test_project_switch_persona_preset.py verify
the reset behavior for persona, preset, tool preset, and global preset
preservation.
2026-06-04 20:36:59 -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 7aeed5e01f feat(vendor-state): add vendor_quota/last_error/token_tracker to AppController
- AppController.__init__: public vendor_quota: Dict[str,Any], last_error: Optional[Dict[str,str]], token_tracker: Dict[str,Any]
- set_vendor_quota(provider, remaining_pct, reset_at): public API for ai_client quota paths
- clear_last_error(): reset hook
- _refresh_api_metrics: read vendor_quota and error from payload, populate state

ai_client per-provider quota wire-up deferred to a future track (per-provider
signals differ; this commit establishes the state shape and read path).
2026-06-03 11:53:56 -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 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 7de5625b71 chore(conductor): Mark track 'Fix GUI Crashes in Tool Preset Manager and Discussion Hub' as complete after Phase 4 2026-06-01 17:03:29 -04:00
ed e2305ff49a Antigravity is dog shit. 2026-05-20 07:51:58 -04:00
ed a5c0569417 progress on context composition 2026-05-17 07:27:55 -04:00
ed c1487d32bb progress on context composition 2026-05-17 06:55:00 -04:00
ed 22f3b9f33a Progress on context composition 2026-05-17 06:43:19 -04:00
ed e3d84bc4da feat(presets): Implement ContextPresetManager and integrate with AppController 2026-05-16 11:04:38 -04:00
ed 20054b0476 fix(test): Final synchronization and stability fixes for RAG stress test
- Improved AppController.ai_status to prevent overwriting 'sending...' with 'models loaded'.
- Enhanced 	est_rag_phase4_stress.py with robust polling and increased timeout.
- Synchronized App and AppController history objects to ensure consistent view.
2026-05-16 01:21:27 -04:00
ed 7f2f9c1989 fix: Robustness improvements for RAG tests and GUI stability
- Added import sys to src/api_hook_client.py.
- Fixed App.__getattr__ to use direct attribute access on controller to avoid recursion.
- Simplified _get_app_attr and _has_app_attr in src/api_hooks.py.
- Centralized RAG and symbol enrichment in AppController._handle_request_event.
- Updated 	ests/test_symbol_parsing.py to match the new enrichment flow.
- Removed redundant task appending from i_status and mma_status setters.
- Improved _sync_rag_engine to only set 'ready' status after indexing is confirmed.
- Updated 	est_status_encapsulation.py to reflect setter changes.
2026-05-15 17:17:05 -04:00
ed 45104af1ee fix(rag): Final RAG stability and status fixes
- Corrected GeminiEmbeddingProvider model name to gemini-embedding-001.
- Prevented _fetch_models from overwriting active i_status (sending/done/error).
- Updated 	est_rag_engine.py to correctly patch the lazy-loaded chromadb getter.
- Adjusted RAG simulation tests to account for the new initializing... status and automatic initial indexing.
- Fixed typo in 	est_z_negative_flows.py.
2026-05-14 23:38:23 -04:00
ed 2d76381796 fix(rag): Resolve RAG test failures and race conditions
- Fixed circular import in chromadb by using lazy imports in 
ag_engine.py.
- Moved RAG engine initialization to background threads in AppController to avoid blocking UI.
- Added _rag_engine_lock to prevent race conditions during engine re-initialization.
- Updated Gemini embedding model to gemini-embedding-001 (available) from 	ext-embedding-004 (not found).
- Fixed _rebuild_rag_index to use fresh 
ag_engine instance from self in every iteration.
- Optimized 	est_rag_phase4_final_verify.py and 	est_rag_phase4_stress.py to wait for RAG sync before continuing.
- Added dummy embedding fallback in LocalEmbeddingProvider if sentence-transformers fails to load.
2026-05-14 22:23:48 -04:00
ed 940ab2ea2c add chroma db to app controller 2026-05-14 21:21:28 -04:00
ed b5e512f483 feat(sdm): inject structural dependency mapping tags across codebase
Adds [C: caller] tags to functions/methods and [M: mutation] / [U: usage] tags to class variables based on cross-module call analysis.
2026-05-13 22:35:52 -04:00
ed 242ea051ad pushing latest gui_2.py, adjustment to regions in app controller. 2026-05-13 21:29:04 -04:00
ed fa4388bbe0 feat(app-controller): modularize handlers and enforce 1-space indentation 2026-05-13 21:26:29 -04:00
ed b2fdca0c3d remove(ai_client): delete unused stub and proxy files
Deleted:
- src/ai_client_stub.py
- src/ai_client_proxy.py

Fixed test imports to use ai_client instead of ai_client_stub.
2026-05-13 16:03:54 -04:00
ed 0f15ecbbf3 fix(app_controller): async RAG engine init to avoid blocking startup
RAG engine initialization (including chromadb import and index loading)
now happens in a background thread, allowing the GUI to show immediately.
The app was blocking for 5+ seconds during init_state() because RAG was
enabled in config. Now RAG loads asynchronously.
2026-05-13 15:54:59 -04:00
ed 7ba94d4a42 fix(app_controller): lazy load rag_engine to avoid blocking startup
Before this change, app_controller imported rag_engine at module level which
pulled in chromadb (~0.45s). Now rag_engine is only imported when RAG is
actually enabled and needed. This improves startup time significantly.
2026-05-13 15:28:41 -04:00
ed 169fe52092 fix(ai_client_stub): add module-level import for GeminiCliAdapter
The class was only accessible inside function scopes, causing
AttributeError when app_controller tried to instantiate it
at module level via ai_client.GeminiCliAdapter().
2026-05-13 10:53:23 -04:00
ed 93c5320fa0 organize app controller imports 2026-05-13 08:20:32 -04:00
ed a3b117dabd feat(api): Expand API hooks with drag and right_click actions 2026-05-12 19:06:54 -04:00
ed 26ef81a30e chore(fix): Resolve regressions in history logic, track startup, and GUI performance 2026-05-11 20:03:01 -04:00
ed cb0fa89730 feat(presets): Implement NamedViewPresets for per-file view settings 2026-05-11 18:31:56 -04:00
ed 0416eaeaa8 feat(context): Finalize AppController decoupling and aggregate integration 2026-05-11 16:12:33 -04:00
ed 9b3a4d6ec6 feat(context): Decouple context composition from files and media 2026-05-11 11:00:15 -04:00
ed a1343eebe6 fix(mcp): properly initialize preset_managers before refresh
_load_active_project() now creates preset_manager and tool_preset_manager
before calling _refresh_from_project(), which needs them
2026-05-10 23:38:52 -04:00
ed 8d8c6ab0ac fix(gui): skip _switch_project if already on that project
Prevents reloading and state issues when clicking same project
2026-05-10 23:33:50 -04:00
ed b328cd4e68 fix(gui): prevent dictionary size change during iteration
- Wrap discussions.items() with list() in takes_panel to prevent
  RuntimeError when dictionary changes during iteration
- This was causing crashes when switching discussions
2026-05-10 23:20:02 -04:00
ed 7ab58e4e00 fix(mcp): configure mcp_client after files are loaded
_load_active_project() was calling _configure_mcp_for_project() BEFORE
_refresh_from_project() which populates self.files. Now it calls
_refresh_from_project() first so mcp_client gets configured with the
actual file list that includes gencpp paths.
2026-05-10 23:09:15 -04:00
ed 400a2fcfe4 fix(mcp): configure mcp_client on project load and switch
- Add _configure_mcp_for_project() helper method
- Call it at end of _load_active_project() to configure mcp_client on startup
- _switch_project() calls it after _refresh_from_project()
- This ensures mcp_client._base_dirs is populated before GUI buttons try to read files
2026-05-10 21:15:41 -04:00
ed 4bb94ff909 fix: remove redundant import in _switch_project (mcp_client already imported at top) 2026-05-10 21:11:13 -04:00
ed 6861ce0dca fix(mcp): configure mcp_client allowlist on project switch
Previously mcp_client.configure() was only called during ai_client.send()
which meant GUI buttons (Slices/Inspect) couldn't access files when
project was switched to an external project like gencpp. Now _switch_project
reconfigures mcp_client with the new project's root and file_items.
2026-05-10 20:57:11 -04:00
ed 45a3664f85 refactor: remove dead main_context field from Project Settings
The main_context field in Project Settings was stored but never used.
Nothing reads it to inject into AI context. System Prompt in AI Settings
already serves this purpose.

Removed:
- app_controller.py: ui_project_main_context state variable and all refs
- gui_2.py: Main Context File UI section from Projects panel
- project_manager.py: main_context from default_project()
- project.toml, manual_slop.toml, gencpp_manual_slop_template.toml: main_context entries
2026-05-10 16:23:21 -04:00
ed 7974f661b3 fix(phase6): resolve minimax regression and context snapshotting crash 2026-05-10 14:58:29 -04:00
ed bb00793696 feat(project): project-level logs and scripts path isolation 2026-05-10 14:02:51 -04:00
ed e9eda04a6c feat(history): Context snapshotting per discussion/take 2026-05-10 13:38:59 -04:00
ed 05d0121e71 fixes 2026-05-10 11:33:07 -04:00
ed f89f8d4fd7 fix(gui): repair flaky simulation tests by adding ui_focus_agent to settables and removing invalid assertions 2026-05-10 10:46:54 -04:00
ed b958fa2819 refactor(phase5): Comprehensive stabilisation pass. De-duplicated App/Controller state, hardened session reset, and updated integration tests with deterministic polling. 2026-05-09 16:55:45 -04:00
ed 04ce727718 refactor(controller): Remove Tkinter and hide_tk_root from AppController 2026-05-09 15:13:13 -04:00
ed 8c06c1767b refactor(sdm): Global pass with refined 'External Only' SDM tags. Pruned redundant internal references and fixed indentation logic in injector. Verified full project compilation. 2026-05-09 15:00:35 -04:00
ed 696c08692e refactor(sdm): Refine SDM tags to 'External Only' and update core files. Pruned internal references to conserve tokens. 2026-05-09 14:55:06 -04:00
ed b3065b0b17 refactor(controller): Replace legacy _set_status calls with direct property assignment 2026-05-09 08:36:33 -04:00