## Backend Changes (`src-tauri/`)

-   [x] **Create `load_plugin_data` Command:**
    -   Implement a command `load_plugin_data(app_handle: AppHandle, server_path: String) -> Result<Vec<Plugin>, String>`.
    -   Use `get_plugin_data_path` from `scanner.rs` to find the correct `plugins.json`.
    -   Read and deserialize `plugins.json`.
    -   Return `Ok(plugins)` or an appropriate `Err(String)`.
    -   Register the command in `lib.rs`.
-   [x] **Create `save_plugin_data` Command:**
    -   Implement a command `save_plugin_data(app_handle: AppHandle, plugins: Vec<Plugin>, server_path: String) -> Result<(), String>`.
    -   Use `get_plugin_data_path` from `scanner.rs`.
    -   Serialize the `plugins` vector to JSON.
    -   Write the JSON to `plugins.json`, creating the directory if needed.
    -   Return `Ok(())` or an appropriate `Err(String)`.
    -   Register the command in `lib.rs`.
-   [x] **Align Bulk Update Events/Logic:**
    -   In `update_checker.rs` (`check_for_plugin_updates`), rename the emitted event from `"update_check_started"` to `"bulk_update_start"`.
    -   In `update_checker.rs` (`check_for_plugin_updates`), remove the `app_handle.emit("update_check_completed", ())` call. The result should be handled via the command's return value.

## Frontend Changes (`src/App.tsx`)

-   [x] **Align `Plugin` Interface Nullability:**
    -   Ensure `depend`, `soft_depend`, and `load_before` fields consistently use `string[] | null`.
-   [x] **Rename Command Invokes:**
    -   Change `invoke("check_single_plugin_update", ...)` to `invoke("check_single_plugin_update_command", ...)`.
    -   Change `invoke("set_plugin_repository_source", ...)` to `invoke("set_plugin_repository", ...)`.
-   [x] **Refactor `checkForUpdates` Result Handling:**
    -   Modify the `checkForUpdates` async function to `await` the `invoke("check_plugin_updates", ...)` call.
    -   Use a `try...catch` block or `.then().catch()` to handle the `Result<Vec<Plugin>, String>`.
    -   On success (`Ok(updatedPlugins)`), call `setPlugins(updatedPlugins)` and clear errors/loading states.
    -   On error (`Err(error)`), call `setUpdateError(error)` and clear loading states.
-   [x] **Adjust/Remove Event Listeners:**
    -   In `useEffect`, rename the listener for `"update_check_started"` to `"bulk_update_start"`.
    -   In `useEffect`, remove the listeners for `"bulk_update_complete"` and `"bulk_update_error"`.