From 3503eff4bb1b4c1501c14789f9afb5cbc5fb61a4 Mon Sep 17 00:00:00 2001 From: Bohdan Triapitsyn Date: Sun, 7 Dec 2025 22:08:50 +0200 Subject: [PATCH] fix: add devtools support and enhance development experience --- packages/desktop/package.json | 2 ++ packages/desktop/scripts/desktop-dev.mjs | 2 +- packages/desktop/src-tauri/Cargo.toml | 6 +++++- packages/desktop/src-tauri/src/main.rs | 6 +++++- packages/desktop/src/main.tsx | 15 +++++++++++++++ 5 files changed, 28 insertions(+), 3 deletions(-) diff --git a/packages/desktop/package.json b/packages/desktop/package.json index 22130fc2..7038c898 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -10,6 +10,8 @@ ], "scripts": { "tauri": "tauri", + "tauri:dev": "tauri dev --features devtools", + "tauri:build": "tauri build", "dev": "vite dev --host 127.0.0.1 --port 1421", "build": "vite build", "preview": "vite preview --host 127.0.0.1 --port 5051", diff --git a/packages/desktop/scripts/desktop-dev.mjs b/packages/desktop/scripts/desktop-dev.mjs index b5848cf7..9311144a 100644 --- a/packages/desktop/scripts/desktop-dev.mjs +++ b/packages/desktop/scripts/desktop-dev.mjs @@ -21,7 +21,7 @@ function spawnProcess(command, args, opts = {}) { async function main() { await startCli(); - const tauriProcess = spawnProcess('pnpm', ['-C', desktopDir, 'tauri', 'dev']); + const tauriProcess = spawnProcess('pnpm', ['-C', desktopDir, 'tauri', 'dev', '--features', 'devtools']); let cleaning = false; diff --git a/packages/desktop/src-tauri/Cargo.toml b/packages/desktop/src-tauri/Cargo.toml index 0145f564..57a533a9 100644 --- a/packages/desktop/src-tauri/Cargo.toml +++ b/packages/desktop/src-tauri/Cargo.toml @@ -12,6 +12,10 @@ path = "src/lib.rs" name = "openchamber-desktop" path = "src/main.rs" +[features] +default = [] +devtools = ["tauri/devtools"] + [dependencies] anyhow = "1.0.86" axum = { version = "0.8.4", features = ["macros"] } @@ -33,7 +37,7 @@ reqwest = { version = "0.12.4", default-features = false, features = ["json", "s serde = { version = "1.0.210", features = ["derive"] } serde_json = "1.0.143" serde_yaml = "0.9" -tauri = { version = "2.9.4", features = ["macos-private-api", "devtools" ] } +tauri = { version = "2.9.4", features = ["macos-private-api"] } tauri-plugin-dialog = "2.4.2" tauri-plugin-fs = "2.4.4" tauri-plugin-log = "2.7.1" diff --git a/packages/desktop/src-tauri/src/main.rs b/packages/desktop/src-tauri/src/main.rs index 651e5aa0..9c81d40d 100644 --- a/packages/desktop/src-tauri/src/main.rs +++ b/packages/desktop/src-tauri/src/main.rs @@ -47,7 +47,9 @@ use portpicker::pick_unused_port; use reqwest::{header, Body as ReqwestBody, Client}; use serde::{Deserialize, Serialize}; use serde_json::Value; -use tauri::{Emitter, Manager, WebviewWindow}; +use tauri::{Emitter, Manager}; +#[cfg(feature = "devtools")] +use tauri::WebviewWindow; use tauri_plugin_dialog::init as dialog_plugin; use tauri_plugin_fs::init as fs_plugin; use tauri_plugin_log::{Target, TargetKind}; @@ -212,6 +214,7 @@ async fn desktop_restart_opencode(state: tauri::State<'_, DesktopRuntime>) -> Re .map_err(|err| err.to_string()) } +#[cfg(feature = "devtools")] #[tauri::command] async fn desktop_open_devtools(window: WebviewWindow) -> Result<(), String> { window.open_devtools(); @@ -309,6 +312,7 @@ fn main() { .invoke_handler(tauri::generate_handler![ desktop_server_info, desktop_restart_opencode, + #[cfg(feature = "devtools")] desktop_open_devtools, load_settings, save_settings, diff --git a/packages/desktop/src/main.tsx b/packages/desktop/src/main.tsx index 5ee7b46e..35f5e9a5 100644 --- a/packages/desktop/src/main.tsx +++ b/packages/desktop/src/main.tsx @@ -22,6 +22,21 @@ if (!(window as typeof globalThis & { process?: unknown }).process) { }; } +if (import.meta.env.PROD) { + document.addEventListener('keydown', (e) => { + if ((e.metaKey || e.ctrlKey) && e.key === 'r') { + e.preventDefault(); + } + if ((e.metaKey || e.ctrlKey) && e.shiftKey && e.key === 'r') { + e.preventDefault(); + } + }); + + document.addEventListener('contextmenu', (e) => { + e.preventDefault(); + }); +} + declare global { interface Window { __OPENCHAMBER_RUNTIME_APIS__?: RuntimeAPIs;