Private
Public Access
0
0
Commit Graph

31 Commits

Author SHA1 Message Date
ed abb3856525 feat(api_hooks): add /api/project_switch_status endpoint for deterministic test signaling
Adds a new endpoint that exposes the project-switch state machine so tests
can poll for completion instead of guessing with timeouts.

- AppController: track _project_switch_error on failure paths
- src/api_hooks.py: GET /api/project_switch_status returns
  {in_progress, pending_path, active_path, error}
- src/api_hook_client.py: get_project_switch_status() helper
- tests/test_api_hooks_project_switch.py: 3 unit tests for client + endpoint
  shape, 1 live_gui test for the default-idle case
2026-06-08 09:55:36 -04:00
ed 91b34ae81e fix(hooks): handle dict-key bracket notation in set_value / get_value
The Hook API previously rejected key strings like
'show_windows["Project Settings"]' (and silently returned None on
get). The test_live_gui_filedialog_regression test exercises exactly
this pattern to open the Project Settings window via the Hook API;
it was previously marked skip with "hook server doesn't handle the
dict-key bracket-notation syntax".

Fix in three small places:

1. src/app_controller.py:_handle_set_value
   If `item` is not in _settable_fields, try parsing it as
   `dict_name[<key>]` notation. If dict_name IS in _settable_fields
   and the current attr is a dict, set the inner key.

2. src/api_hooks.py:/api/gui/value (POST get_val)
   Mirror the parsing for the field-based get endpoint.

3. src/api_hook_client.py:ApiHookClient.get_value
   Mirror the parsing in the client so the dict-key syntax works
   through the state endpoint as well (which is what get_value
   actually calls by default).

Test fix:
- tests/test_live_gui_filedialog_regression.py: removed the
  @pytest.mark.skip marker; the underlying issue is now fixed.

Verified: 1/1 test passes (previously skipped).
2026-06-07 16:49:51 -04:00
ed 229559caaa feat(startup): first-frame detection + startup_timeline API
Adds per-AppController startup timing instrumentation to answer
'did the warmup block the first frame?'

AppController.__init__ records _init_start_ts at entry (cold-start anchor).
WarmupManager.on_complete callback stamps _warmup_done_ts.
App.render_main_interface (gui_2.py) calls mark_first_frame_rendered()
on its first call, which stamps _first_frame_ts and logs the timeline.

New public API on AppController:
- init_start_ts (property): float
- warmup_done_ts (property): Optional[float]
- first_frame_ts (property): Optional[float]
- mark_first_frame_rendered(ts=None): idempotent; logs to stderr
- startup_timeline() -> dict with all timestamps + precomputed deltas:
  warmup_ms, first_frame_after_init_ms, first_frame_after_warmup_ms

Stderr log on warmup done:
  [startup] warmup done in 1186.2ms (first frame rendered Nms BEFORE/AFTER)

Stderr log on first frame:
  [startup] first frame at Xms after init (warmup took Yms) (rendered Zms BEFORE/AFTER warmup done)

Hook API:
- GET /api/startup_timeline
- ApiHookClient.get_startup_timeline() -> dict

5 new tests in test_warmup_canaries.py covering all the new methods.
All 18 canary tests + 10 api_hooks tests + 6 gui_indicator tests pass.

Script scripts/apply_startup_timeline.py is included as a reference
for the multi-edit pattern (the proper MCP-equivalent tools will be
added later per the edit_workflow doc).
2026-06-06 22:48:50 -04:00
ed 208aa664db feat(warmup): per-module canary records (thread + timing observability)
Adds a canary record for each module submitted to the warmup, tracking:
canary_id, module, thread_name, thread_id, submit_ts, start_ts,
end_ts, elapsed_ms, status, error.

Surface:
- WarmupManager.canaries() returns list[dict] (defensive copy)
- AppController.warmup_canaries() returns list[dict] (delegation)
- GET /api/warmup_canaries Hook API endpoint
- ApiHookClient.get_warmup_canaries() returns list[dict]

Example: the warmup of google.genai records a 1187ms canary on
thread controller-io_0 with thread_id 50420, canary_id 1.

11 new tests (8 unit in test_warmup_canaries + 3 in test_api_hooks_warmup).
All pass; live_gui smoke test confirms endpoint returns real data.
2026-06-06 22:02:35 -04:00
ed 8fea8fe9a0 feat(api_hooks): add /api/warmup_status and /api/warmup_wait endpoints (sub-track 3)
Sub-track 3 of startup_speedup_20260606. Builds on the Phase 7 minimal
work at b464d1fe which only added warmup_status to /api/gui/diagnostics.

New dedicated endpoints:
- GET /api/warmup_status -> controller.warmup_status() (cheap, lock-guarded)
- GET /api/warmup_wait?timeout=N -> controller.wait_for_warmup(timeout)
  then returns the final status. Default 30s.

Both callable from external clients via ApiHookClient.get_warmup_status()
and ApiHookClient.get_warmup_wait(timeout=30.0).

7 new tests in tests/test_api_hooks_warmup.py (5 unit + 2 live_gui).
All 7 pass.
2026-06-06 21:01:56 -04:00
ed 7785f09fa9 Some organizing of the api_hook_client.py 2026-06-05 23:02:41 -04:00
ed 873edf42cf began to go through the files and organize imports and gui_2.py's new context defs
still a bunch to sift through after the last ai passes
2026-06-05 21:44:41 -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 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 a3b117dabd feat(api): Expand API hooks with drag and right_click actions 2026-05-12 19:06:54 -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 7fdf6c9782 feat(mma): Enable manual ticket approval via Hook API for Step Mode 2026-05-02 13:48:14 -04:00
ed f9b5acd758 refactor(api): Audit and cleanup api_hook_client.py and api_hooks.py 2026-05-02 13:08:47 -04:00
ed 4777dd957a feat(api): implement phase 3 comprehensive control endpoints 2026-03-11 23:14:09 -04:00
ed 1be576a9a0 feat(api): implement phase 2 expanded read endpoints 2026-03-11 23:04:42 -04:00
ed 02e0fce548 feat(api): implement websocket gateway and event streaming for phase 1 2026-03-11 23:01:09 -04:00
ed 94598b605a checkpoint dealing with personal manager/editor 2026-03-10 23:47:53 -04:00
ed 2ffb2b2e1f docs 2026-03-08 03:11:11 -04:00
ed 14dab8e67f feat(tier4): Add patch modal GUI integration and API hooks 2026-03-07 00:37:44 -05:00
ed 1fb6ebc4d0 idk why these weren't committed 2026-03-06 12:48:02 -05:00
ed 4ce6348978 fix: Multiple test fixes and improvements
- Fix mock_gemini_cli.py to use src/aggregate.py (moved to src directory)
- Add wait_for_event method to ApiHookClient for simulation tests
- Fix custom_callback path in app_controller to use absolute path
- Fix test_gui2_parity.py to use correct callback file path
2026-03-05 21:18:25 -05:00
ed d2481b2de7 never ends 2026-03-05 20:39:56 -05:00
ed e02ebf7a65 fix: Fix session API format and missing client methods 2026-03-05 19:55:54 -05:00
ed 184fb39e53 GARBAGE 2026-03-05 15:17:30 -05:00
ed 8784d05db4 WIP: PAIN3 2026-03-05 15:10:53 -05:00
ed fca57841c6 WIP: PAIN2 2026-03-05 14:43:45 -05:00
ed 0e3b479bd6 WIP: PAIN 2026-03-05 14:24:03 -05:00
ed a783ee5165 feat(api): Add /api/gui/state endpoint and live_gui integration tests 2026-03-05 10:06:47 -05:00
ed 35480a26dc test(audit): fix critical test suite deadlocks and write exhaustive architectural report
- Fix 'Triple Bingo' history synchronization explosion during streaming

- Implement stateless event buffering in ApiHookClient to prevent dropped events

- Ensure 'tool_execution' events emit consistently across all LLM providers

- Add hard timeouts to all background thread wait() conditions

- Add thorough teardown cleanup to conftest.py's reset_ai_client fixture

- Write highly detailed report_gemini.md exposing asyncio lifecycle flaws
2026-03-05 01:42:47 -05:00
ed a0276e0894 feat(src): Move core implementation files to src/ directory 2026-03-04 09:55:44 -05:00