Fügt einen neuen Tauri-Command hinzu mit Einträgen in commands/, lib.rs und tauri-api.ts. Stellt konsistente Benennung, Parameter-Escaping und Fehlerbehandlung sicher. Nutze diesen Skill wenn eine neue Backend-Funktion vom Frontend aus aufgerufen werden soll. Aufruf mit /add-tauri-command [command-name] [beschreibung].
Du fügst einen neuen Tauri-Command zur Speicher Analyse App hinzu.
$ARGUMENTS[0] = Command-Name in snake_case (z.B. get_disk_health)$ARGUMENTS[1] = Beschreibung (optional)src-tauri/src/commands/ — das passende Modul (cmd_scan, cmd_files, cmd_network, cmd_privacy, cmd_system, cmd_terminal, cmd_misc) identifizierensrc-tauri/src/commands/mod.rs um die Re-Export-Struktur zu verstehensrc-tauri/src/lib.rs um die Command-Registrierung im generate_handler![] zu sehensrc/api/tauri-api.ts um die typisierte API-Bridge zu verstehensrc-tauri/src/commands/cmd_*.rs — Command-FunktionIm passenden Modul hinzufügen:
#[tauri::command]
pub async fn command_name(param: String) -> Result<serde_json::Value, String> {
// SECURITY: Parameter für PowerShell escapen
let safe_param = param.replace("'", "''");
let script = format!("Get-Something '{}'", safe_param);
let output = crate::ps::run_ps(&script).await?;
let json: serde_json::Value = serde_json::from_str(&output)
.map_err(|e| format!("JSON-Parse-Fehler: {}", e))?;
Ok(json)
}
Security-Regeln (PFLICHT bei JEDEM Command):
format!() für PowerShell verwendet werden MÜSSEN mit .replace("'", "''") escaped werdenmatch auf erlaubte Werte prüfenKonventionen:
snake_case für Funktionsnamen#[tauri::command] AttributResult<serde_json::Value, String> Rückgabetypcrate::ps::run_ps() oder crate::ps::run_ps_json()src-tauri/src/lib.rs — Command registrieren.invoke_handler(tauri::generate_handler![
// ... bestehende Commands ...
commands::command_name, // NEU
])
src/api/tauri-api.ts — Typisierte Export-Funktionexport const commandName = (param: string) =>
invoke<ReturnType>('command_name', { param });
Benennungs-Konvention:
snake_case (z.B. get_disk_health)camelCase (z.B. getDiskHealth)import { getDiskHealth } from '../api/tauri-api'// In src/views/SomeView.tsx
import { commandName } from '../api/tauri-api';
import { useAppContext } from '../context/AppContext';
const { showToast } = useAppContext();
try {
const result = await commandName(arg);
} catch (err: any) {
showToast('Fehler: ' + err.message, 'error');
}
.replace("'", "''") escaped?format!() mit unescaptem User-Input?cmd_*.rs definiert aber NICHT in mod.rs re-exportiert → Compile-Fehlerlib.rs registriert → "unknown command"camelCase in Rust → muss snake_case seinformat!() ohne Escaping → Command Injectioncommands::command_name (in welchem cmd_*.rs Modul)commandName() in src/api/tauri-api.tslib.rs + mod.rs eingetragen