{"record":{"id":"660a376f371c6583","repo":"tonhowtf/omniget","slug":"voicestudio-nao-encontrado","errorCode":null,"errorMessage":"VoiceStudio nao encontrado","messagePattern":"VoiceStudio nao encontrado","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src-tauri/omniget-core/src/core/tools/voicestudio.rs","lineNumber":178,"sourceCode":"                    .to_string(),\n                language: p\n                    .get(\"language\")\n                    .and_then(|v| v.as_str())\n                    .unwrap_or(\"\")\n                    .to_string(),\n                instruct: p\n                    .get(\"instruct\")\n                    .and_then(|v| v.as_str())\n                    .unwrap_or(\"\")\n                    .to_string(),\n            })\n        })\n        .collect())\n}\n\n/// Abre o app do VoiceStudio (que sobe o backend).\npub async fn launch() -> anyhow::Result<()> {\n    let app = find_app().ok_or_else(|| anyhow!(\"VoiceStudio nao encontrado\"))?;\n    if cfg!(target_os = \"macos\") {\n        crate::core::process::command(\"open\")\n            .arg(&app)\n            .output()\n            .await?;\n    } else {\n        crate::core::process::command(&app).spawn()?;\n    }\n    Ok(())\n}\n\nasync fn wav_from(resp: reqwest::Response, output: &Path) -> anyhow::Result<PathBuf> {\n    let status = resp.status();\n    if !status.is_success() {\n        let text = resp.text().await.unwrap_or_default();\n        return Err(anyhow!(\n            \"VoiceStudio HTTP {}: {}\",\n            status.as_u16(),","sourceCodeStart":160,"sourceCodeEnd":196,"githubUrl":"https://github.com/tonhowtf/omniget/blob/8600b91f4246848bac346874daa9e61c1fc5677a/src-tauri/omniget-core/src/core/tools/voicestudio.rs#L160-L196","documentation":"Raised by voicestudio::launch() when `find_app()` returns None — the VoiceStudio application binary/bundle could not be located on the system. launch() opens the app (which starts the backend), so without a locatable install there is nothing to launch.","triggerScenarios":"Calling `launch()` on a machine where VoiceStudio is not installed, is installed in a non-standard location find_app() does not scan, or the installation is broken/renamed so detection fails.","commonSituations":"Fresh machine where the companion app was never installed; macOS app moved out of /Applications; Linux/Windows install in a custom prefix not on the search paths; app renamed by the user.","solutions":["Install (or reinstall) the VoiceStudio application so find_app() can detect it in a standard location.","On macOS, ensure the app bundle is in /Applications (or wherever find_app() searches).","If installed in a custom location, restore it to the standard path or extend find_app()'s search paths.","Check the installed binary/bundle name has not been renamed from what find_app() matches."],"exampleFix":"// before\nawait voiceStudioLaunch(); // panics with 'VoiceStudio nao encontrado' if not installed\n// after\nif (!(await voiceStudioIsInstalled())) {\n  await promptUserToInstallVoiceStudio();\n} else {\n  await voiceStudioLaunch();\n}","handlingStrategy":"fallback","validationCode":"let installed = false;\ntry { installed = (await voiceStudioDetect()) !== null; } catch { installed = false; }\nif (!installed) throw new Error(\"VoiceStudio app is not installed; install it before launching\");","typeGuard":null,"tryCatchPattern":"try {\n  await voiceStudioLaunch();\n} catch (e) {\n  if (String(e).includes(\"VoiceStudio nao encontrado\")) {\n    showInstallVoiceStudioDialog(); // offer download + install, then retry launch\n  } else throw e;\n}","preventionTips":["Run an install/detection check at app startup, not at launch time","Provide an in-app download link for the missing VoiceStudio app","Install to the standard location (/Applications on macOS, default paths elsewhere)","Do not rename the app bundle or binary after installation"],"tags":["dependency","missing-app","voicestudio","launch"],"backgroundTag":"missing-dependency","analyzedSha":"8600b91f4246848bac346874daa9e61c1fc5677a","analyzedAt":"2026-09-12T14:29:19.317Z","contentChangedAt":"2026-09-12T14:29:19.317Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}