Przejdź do głównej zawartości

Commands Overview

Ten dokument zbiera wszystkie produkcyjne wywołania komend Tauri z poziomu frontendu oraz miejsce, z którego wychodzą. Lista do inkrementalnego rozszerzania.


Główne wejście: src/features/ai-suite/state/services/client.ts

Komenda TauriWejście w FEUwagi
unified_ai_chat / unified_ai_chat_backgroundclient.ts (chat, chatBackground, consultationChat, emergencyChat, analyzeDocument)payload przez buildChatPayload; zawsze withSessionPayload
unified_ai_chat_streamclient.ts (chatStream) + event bridge listenToTauriEventtokeny ai-stream-*; request_id generowany w FE
unified_ai_cancel_streamclient.ts (cancelStream)wymaga request_id
unified_ai_poll_response / unified_ai_list_response_eventsclient.ts (pollResponse, listResponseEvents)response_id normalizowany do ResponseId
unified_ai_health_check / unified_ai_test_providers / unified_ai_get_model_mappingclient.ts (healthCheck, testProviders, getModelMapping)healthCheck opcjonalnie z canonicalModel
unified_ai_generate_soapclient.ts (generateSOAP)bez standardowego envelopa, FE pilnuje user_id
unified_ai_generate_suggestionssrc/services/backgroundJobs.ts (generateAiSuggestions)payload request + session
unified_ai_generate_tasks / unified_ai_list_task_suggestions / unified_ai_accept_task_suggestions / unified_ai_dismiss_task_suggestionssrc/services/aiTaskSuggestionsService.tswszystkie przez withSessionPayload
unified_ai_connectivity_probe / unified_ai_mark_full_successsrc/services/ai/aiDiagnosticsService.tsmark_full_success = best-effort
unified_ai_embedsrc/types/api.tsuseContextVaultembedding dla Context Vault
unified_ai_transcribeclient.ts (transcribe)bytes array; minimalny rozmiar >0.1s
unified_ai_transcribe_filesrc/types/api.tstranscriptionHelpers.tsścieżka pliku + session
unified_ai_synthesizeclient.ts (synthesize)zwraca Uint8ArrayBlob
unified_ai_analyze_documentclient.ts (analyzeDocument, analyzeImage, analyzePDF)canonical model vision

Pipeline recording → transcription zgodny z architekturą Backend 2.0.

Komenda TauriWejście w FEUwagi
save_audio_filesrc/types/api/audio.ts (audioApi.saveFile) → voiceService.tsZapisuje WAV; wymaga write:visits; FE dodaje nagłówek WAV
cleanup_old_recordingsaudioApi.cleanupOldRecordingsDomyślnie 30 dni
process_uploaded_audio_fileaudioApi.processUploadedFilePrzetwarzanie uploaded audio
link_recording_to_visitaudioApi.linkRecordingToVisitLinkowanie do wizyty
serve_audio_fileaudioApi.serveAudioFileSerwowanie pliku
Komenda TauriWejście w FEUwagi
transcribe_audio_fileaudioApi.transcribe, audioApi.transcribeFileTranskrypcja po ścieżce
transcribe_recording_nowaudioApi.transcribeRecordingvoiceService.tsSynchroniczna transkrypcja
transcribe_and_save_to_visitaudioApi.transcribeAndSaveToVisitTranskrypcja + zapis do wizyty
list_pending_audio_capturesaudioApi.listPendingCapturesLista oczekujących nagrań
attach_capture_to_visitaudioApi.attachCaptureToVisitDołączanie do wizyty
discard_pending_captureaudioApi.discardPendingCaptureOdrzucenie nagrania
merge_pending_transcriptaudioApiŁączenie transkrypcji
dismiss_pending_transcriptaudioApiOdrzucenie transkrypcji
Komenda TauriWejście w FEUwagi
queue_transcription_jobaudioApi.queueTranscriptionKolejkowanie zadania
get_transcription_job_statusaudioApi.getTranscriptionStatusStatus zadania
cleanup_old_transcription_jobsaudioApi.cleanupOldJobsCzyszczenie starych
Komenda TauriWejście w FEUwagi
create_media_fileaudioApiCRUD media files
update_media_fileaudioApiCRUD media files
get_files_by_patientaudioApiPliki po pacjencie
get_files_by_visitaudioApiPliki po wizycie
delete_media_fileaudioApiUsuwanie pliku
delete_all_media_filesaudioApiUsuwanie wszystkich

Komenda TauriWejście w FEUwagi
set_dock_badgesrc/services/systemBadgeService.tsWymaga sesji; brak callsite UI
show_native_notificationtauriWrapper.tsSession-optional; brak callsite
get_system_appearancetauriWrapper.tsSession-optional
trigger_haptic_feedbacktauriWrapper.tsTylko macOS
vista_apply_glassuseAssistantDetachedWindow.tsGlass/blur na oknie asystenta

src/utils/tauriWrapper.ts ma jawne walidacje dla:

KomendaWalidacja
unified_ai_cancel_streamwymaga request_id
unified_ai_generate_soapwymaga visit_context, user_id
unified_ai_get_model_mappingwymaga canonical_model

Wszystkie inne komendy przechodzą przez safeInvoke/invokeSnake z withSessionPayload.


flowchart TB
subgraph Modes["Tryby voiceService"]
ENGINE[🔧 Engine Mode<br/>Streaming przez backend]
LOCAL[📁 Local Mode<br/>Fallback lokalny]
end
subgraph Engine["Engine Mode"]
E1[recording_start_session]
E2[recording_push_chunk]
E3[recording_finalize_session]
end
subgraph Local["Local Mode"]
L1[Buforowanie chunków lokalnie]
L2[Łączenie w WAV]
L3[save_audio_file + transcribe_recording_now]
end
ENGINE --> Engine
LOCAL --> Local
TrybOpisKiedy
Engine modeStreaming przez backendPełny backend dostępny
Local modeFallback gdy streaming commands niedostępneBuforuje lokalnie, łączy w WAV

src-tauri/src/
├── api/audio/ # API layer (thin wrappers)
│ ├── mod.rs # Re-exports all commands
│ ├── recordings.rs # save, serve, cleanup, link
│ ├── transcription.rs # transcribe, pending captures
│ ├── jobs.rs # queue management
│ └── media.rs # media file CRUD
└── engines/recordings/ # Infrastructure layer
├── services/
│ ├── storage.rs # RecordingStorageService
│ ├── visit.rs # VisitAudioService
│ └── engine.rs # TranscriptionEngine
├── audio_files.rs # Command implementations
├── visit_audio.rs # Command implementations
├── jobs.rs # Job processing
└── media_files.rs # Media CRUD implementations

Komendy wycięte jako nieużywane:

  • unified_ai_master
  • unified_ai_transcribe_stream
  • unified_ai_transcribe_async_*
  • unified_ai_embed (stara wersja)

W razie potrzeby należy odtworzyć wraz z pokryciem FE.


Przy każdej nowej komendzie unified_ai:

  1. Dodaj ją do tej tabeli z plikiem/klasą FE wołającą Tauri
  2. Dodaj krótki komentarz, czy wymaga sesji, request_id, itp.
  3. Jeśli komenda odpada – przenieś do sekcji “Usunięte / wygaszone” z krótkim powodem


Vista używa Tauri events dla real-time komunikacji backend → frontend:

sequenceDiagram
participant BE as Backend (Rust)
participant Bridge as Tauri Event Bridge
participant FE as Frontend (React)
participant Hook as Event Listener Hook
BE->>Bridge: emit("ai-stream-token", {token, request_id})
Bridge->>FE: window.listen("ai-stream-token")
FE->>Hook: onToken(token)
Hook->>Hook: Update UI state
CategoryEventsSubscriber
AI Streamingai-stream-token, ai-stream-complete, ai-stream-erroruseStreamingManager
Audioaudio-level, recording-status, transcription-progressuseAudioRecording
Visitsvisit-updated, visit-processinguseVisitEditor
Notificationsvista-notification, appointment-reminderuseNotifications
Systembackend-ready, session-expiredAuthContext
// Frontend event listener
import { listen } from '@tauri-apps/api/event';
useEffect(() => {
const unlisten = listen<StreamToken>('ai-stream-token', (event) => {
if (event.payload.request_id === currentRequestId) {
appendToken(event.payload.token);
}
});
return () => {
unlisten.then(fn => fn());
};
}, [currentRequestId]);
// Rust event emission
use tauri::Emitter;
app.emit("ai-stream-token", StreamTokenPayload {
request_id: request_id.clone(),
token: token_text,
})?;