- Stop live core processes before updates, regardless of port availability
- Wait for process termination before replacing files
- Block new core operations and cancel startup during shutdown
- Attach the Windows Job immediately after spawning
- Abort updates and restarts when stopping the core fails
- Add lifecycle and file-lock regression tests; all 33 related tests pass
- Spawn Linux core processes on a dedicated, persistent thread instead of temporary background workers.
- Preserve parent-death signaling to stop the core when the GUI exits.
- Keep existing process management and Windows/macOS launch behavior unchanged.
- Add regression tests for launcher thread exit, runtime shutdown, spawn failure recovery, and parent-process termination.
- Match core processes by their actual executable paths
- Prevent different EasyCLIProxyAPI installations from interfering
- Adopt orphaned core processes from the current cpa-core directory
- Rescan and terminate owned core processes during shutdown
- Enforce a single app instance per installation directory
- Clean up core processes that fail to enter the Windows job object
- Add multi-directory process isolation and instance lock tests
- Add a dedicated version management page
- Improve app, core, and model catalog status displays
- Preserve the core runtime state during updates
- Automatically restart the core after successful, failed, or cancelled updates
- Add tests for version management and core runtime restoration
- track automatic core startup in shared runtime state
- expose the starting state through CoreStatus
- disable core controls while startup is in progress
- clear the processing state after startup succeeds or fails
- add regression tests for startup state handling
- split Tauri business logic out of main.rs by domain
- separate agent and core configuration submodules
- organize Rust tests by feature with shared test support
- split frontend locale resources