Commands Overview
Wprowadzenie
Dział zatytułowany „Wprowadzenie”Ten dokument zbiera wszystkie produkcyjne wywołania komend Tauri z poziomu frontendu oraz miejsce, z którego wychodzą. Lista do inkrementalnego rozszerzania.
Unified AI Commands
Dział zatytułowany „Unified AI Commands”Główne wejście: src/features/ai-suite/state/services/client.ts
| Komenda Tauri | Wejście w FE | Uwagi |
|---|---|---|
unified_ai_chat / unified_ai_chat_background | client.ts (chat, chatBackground, consultationChat, emergencyChat, analyzeDocument) | payload przez buildChatPayload; zawsze withSessionPayload |
unified_ai_chat_stream | client.ts (chatStream) + event bridge listenToTauriEvent | tokeny ai-stream-*; request_id generowany w FE |
unified_ai_cancel_stream | client.ts (cancelStream) | wymaga request_id |
unified_ai_poll_response / unified_ai_list_response_events | client.ts (pollResponse, listResponseEvents) | response_id normalizowany do ResponseId |
unified_ai_health_check / unified_ai_test_providers / unified_ai_get_model_mapping | client.ts (healthCheck, testProviders, getModelMapping) | healthCheck opcjonalnie z canonicalModel |
unified_ai_generate_soap | client.ts (generateSOAP) | bez standardowego envelopa, FE pilnuje user_id |
unified_ai_generate_suggestions | src/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_suggestions | src/services/aiTaskSuggestionsService.ts | wszystkie przez withSessionPayload |
unified_ai_connectivity_probe / unified_ai_mark_full_success | src/services/ai/aiDiagnosticsService.ts | mark_full_success = best-effort |
unified_ai_embed | src/types/api.ts → useContextVault | embedding dla Context Vault |
unified_ai_transcribe | client.ts (transcribe) | bytes array; minimalny rozmiar >0.1s |
unified_ai_transcribe_file | src/types/api.ts → transcriptionHelpers.ts | ścieżka pliku + session |
unified_ai_synthesize | client.ts (synthesize) | zwraca Uint8Array → Blob |
unified_ai_analyze_document | client.ts (analyzeDocument, analyzeImage, analyzePDF) | canonical model vision |
Audio/Recording Commands
Dział zatytułowany „Audio/Recording Commands”Pipeline recording → transcription zgodny z architekturą Backend 2.0.
Recordings (api/audio/recordings.rs)
Dział zatytułowany „Recordings (api/audio/recordings.rs)”| Komenda Tauri | Wejście w FE | Uwagi |
|---|---|---|
save_audio_file | src/types/api/audio.ts (audioApi.saveFile) → voiceService.ts | Zapisuje WAV; wymaga write:visits; FE dodaje nagłówek WAV |
cleanup_old_recordings | audioApi.cleanupOldRecordings | Domyślnie 30 dni |
process_uploaded_audio_file | audioApi.processUploadedFile | Przetwarzanie uploaded audio |
link_recording_to_visit | audioApi.linkRecordingToVisit | Linkowanie do wizyty |
serve_audio_file | audioApi.serveAudioFile | Serwowanie pliku |
Transcription (api/audio/transcription.rs)
Dział zatytułowany „Transcription (api/audio/transcription.rs)”| Komenda Tauri | Wejście w FE | Uwagi |
|---|---|---|
transcribe_audio_file | audioApi.transcribe, audioApi.transcribeFile | Transkrypcja po ścieżce |
transcribe_recording_now | audioApi.transcribeRecording → voiceService.ts | Synchroniczna transkrypcja |
transcribe_and_save_to_visit | audioApi.transcribeAndSaveToVisit | Transkrypcja + zapis do wizyty |
list_pending_audio_captures | audioApi.listPendingCaptures | Lista oczekujących nagrań |
attach_capture_to_visit | audioApi.attachCaptureToVisit | Dołączanie do wizyty |
discard_pending_capture | audioApi.discardPendingCapture | Odrzucenie nagrania |
merge_pending_transcript | audioApi | Łączenie transkrypcji |
dismiss_pending_transcript | audioApi | Odrzucenie transkrypcji |
Jobs (api/audio/jobs.rs)
Dział zatytułowany „Jobs (api/audio/jobs.rs)”| Komenda Tauri | Wejście w FE | Uwagi |
|---|---|---|
queue_transcription_job | audioApi.queueTranscription | Kolejkowanie zadania |
get_transcription_job_status | audioApi.getTranscriptionStatus | Status zadania |
cleanup_old_transcription_jobs | audioApi.cleanupOldJobs | Czyszczenie starych |
Media (api/audio/media.rs)
Dział zatytułowany „Media (api/audio/media.rs)”| Komenda Tauri | Wejście w FE | Uwagi |
|---|---|---|
create_media_file | audioApi | CRUD media files |
update_media_file | audioApi | CRUD media files |
get_files_by_patient | audioApi | Pliki po pacjencie |
get_files_by_visit | audioApi | Pliki po wizycie |
delete_media_file | audioApi | Usuwanie pliku |
delete_all_media_files | audioApi | Usuwanie wszystkich |
Platform/System Commands
Dział zatytułowany „Platform/System Commands”| Komenda Tauri | Wejście w FE | Uwagi |
|---|---|---|
set_dock_badge | src/services/systemBadgeService.ts | Wymaga sesji; brak callsite UI |
show_native_notification | tauriWrapper.ts | Session-optional; brak callsite |
get_system_appearance | tauriWrapper.ts | Session-optional |
trigger_haptic_feedback | tauriWrapper.ts | Tylko macOS |
vista_apply_glass | useAssistantDetachedWindow.ts | Glass/blur na oknie asystenta |
Strażnicy argumentów (FE)
Dział zatytułowany „Strażnicy argumentów (FE)”src/utils/tauriWrapper.ts ma jawne walidacje dla:
| Komenda | Walidacja |
|---|---|
unified_ai_cancel_stream | wymaga request_id |
unified_ai_generate_soap | wymaga visit_context, user_id |
unified_ai_get_model_mapping | wymaga canonical_model |
Wszystkie inne komendy przechodzą przez safeInvoke/invokeSnake z withSessionPayload.
VoiceService Tryby Pracy
Dział zatytułowany „VoiceService Tryby Pracy”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| Tryb | Opis | Kiedy |
|---|---|---|
| Engine mode | Streaming przez backend | Pełny backend dostępny |
| Local mode | Fallback gdy streaming commands niedostępne | Buforuje lokalnie, łączy w WAV |
Backend 2.0 Architektura Audio
Dział zatytułowany „Backend 2.0 Architektura Audio”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 implementationsUsunięte / Wygaszone
Dział zatytułowany „Usunięte / Wygaszone”Komendy wycięte jako nieużywane:
unified_ai_masterunified_ai_transcribe_streamunified_ai_transcribe_async_*unified_ai_embed(stara wersja)
W razie potrzeby należy odtworzyć wraz z pokryciem FE.
Jak aktualizować
Dział zatytułowany „Jak aktualizować”Przy każdej nowej komendzie unified_ai:
- Dodaj ją do tej tabeli z plikiem/klasą FE wołającą Tauri
- Dodaj krótki komentarz, czy wymaga sesji, request_id, itp.
- Jeśli komenda odpada – przenieś do sekcji “Usunięte / wygaszone” z krótkim powodem
Tauri Events Flow
Dział zatytułowany „Tauri Events Flow”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 stateEvent Categories
Dział zatytułowany „Event Categories”| Category | Events | Subscriber |
|---|---|---|
| AI Streaming | ai-stream-token, ai-stream-complete, ai-stream-error | useStreamingManager |
| Audio | audio-level, recording-status, transcription-progress | useAudioRecording |
| Visits | visit-updated, visit-processing | useVisitEditor |
| Notifications | vista-notification, appointment-reminder | useNotifications |
| System | backend-ready, session-expired | AuthContext |
Event Listening Pattern
Dział zatytułowany „Event Listening Pattern”// Frontend event listenerimport { 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]);Backend Event Emission
Dział zatytułowany „Backend Event Emission”// Rust event emissionuse tauri::Emitter;
app.emit("ai-stream-token", StreamTokenPayload { request_id: request_id.clone(), token: token_text,})?;Powiązane dokumenty
Dział zatytułowany „Powiązane dokumenty”- AI Commands - Unified AI API
- Audio Commands - Audio pipeline
- Auth Commands - Authentication
- Data Flow - Przepływ danych