Files
voice-to-notes/src-tauri/icons/32x32.png

3 lines
974 B
Plaintext
Raw Normal View History

Phase 1 foundation: Tauri shell, Python sidecar, SQLite database Tauri v2 + Svelte + TypeScript frontend: - App shell with workspace layout (waveform, transcript, speakers, AI chat) - Placeholder components for all major UI areas - Typed stores (project, transcript, playback, AI) - TypeScript interfaces matching the database schema - Tauri bridge service with typed invoke wrappers - svelte-check passes with 0 errors Rust backend: - Tauri v2 app entry point with command registration - SQLite database layer (rusqlite with bundled SQLite) - Full schema: projects, media_files, speakers, segments, words, ai_outputs, annotations (with indexes) - Model structs with serde serialization - CRUD queries for projects, speakers, segments, words - Segment text editing preserves original text - Schema versioning for future migrations - 6 tests passing - Command stubs for project, transcribe, export, AI, settings, system - App state management Python sidecar: - JSON-line IPC protocol (stdin/stdout) - Message types: IPCMessage, progress, error, ready - Handler registry with routing and error handling - Ping/pong handler for connectivity testing - Service stubs: transcribe, diarize, pipeline, AI, export - Provider stubs: local (llama-server), OpenAI, Anthropic, LiteLLM - Hardware detection stubs - 14 tests passing, ruff clean Also adds: - Testing strategy document (docs/TESTING.md) - Validation script (scripts/validate.sh) - Updated .gitignore for Svelte, Rust, Python artifacts Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 15:16:06 -08:00
<EFBFBD>PNG

IHDR szz<7A> pHYs  <00><>sRGB<00><><1C>gAMA<00><> <0B>acIDATx<01>VAn<41>P<10>1Q<31>E<EFBFBD><45><05>tȢIT)<29>4=A<> <09><>s<02> BN<42><4E><04>.B<><10><> D<>"<22><><EFBFBD><EFBFBD><EFBFBD><01><><EFBFBD><06><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>y<EFBFBD>ϟ<EFBFBD>o<EFBFBD>+<2B><><EFBFBD>4_&?<13><><EFBFBD>E<EFBFBD>/%<25>&U<14><>N<EFBFBD>Q<EFBFBD>^<5E><>h<EFBFBD>ت<EFBFBD>3<><33><EFBFBD><02><>n<19>j<EFBFBD><6A>8<EFBFBD>}<15>w<EFBFBD>\ X<><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?H&<26><1B> <20>W<EFBFBD><57>3`<0F>8<>eP<65><50>Cl𳎇<6C><F0B38E87>d<EFBFBD>"<22><><EFBFBD>eMd$ <09><><>~<7E><><EFBFBD>n5f<35><66>sj<73><01><>8' <0C>N<EFBFBD>$H)"<22>i^u<>]<5D><><EFBFBD><05><>ζ<EFBFBD><CEB6><0F><><EFBFBD>A<02><08><>h<EFBFBD>A.A<>Zp<00><><EFBFBD>hC<68>IA<>y<EFBFBD><><DEBC><07>Eb*<2A> ~\!5i<1E><><EFBFBD><EFBFBD>HAQ<41>+ <20><><EFBFBD>r7<72>]"<22><>#o<>K<EFBFBD><4B> Ҩ<>?<3F>9<EFBFBD><39><EFBFBD><EFBFBD>}<7D>g<EFBFBD><17><>:oR<6F>\b4%5d<35><fz<66>Ӊd<>{<7B>]N3<18><>:<3A>̮<11>Î<>i<EFBFBD>H<EFBFBD>v{ ʌ<1C><><EFBFBD><EFBFBD><1D><>o<EFBFBD><6F><EFBFBD>{l<>G}<7D>iH<69><48>a<EFBFBD><61>_<EFBFBD>2kL<6B>]<08> <01><>9<EFBFBD><39>,<2C><>ڸ<EFBFBD><DAB8>:<3A>%<25><><EFBFBD><EFBFBD><EFBFBD>8<EFBFBD>bgC<67> D@<40> <0C>rf<1F>i[<5B><>p<EFBFBD><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD>L<EFBFBD>ϣ<>$.<2E>te<74><65>5<EFBFBD><35>En<45>B<EFBFBD>a<>B<EFBFBD><42>{oBsy֙<79><D699>><3E><><EFBFBD>j"<1C>"<1B>@<40>s<EFBFBD> <0B>IHB!<21><><EFBFBD>K<EFBFBD><4B><EFBFBD>0 <0B>ir٥i<D9A5>`<60>Jܺ#<1A><>2Dş<44><C59F>vd<76>ԟ<EFBFBD><1F>v<>z<EFBFBD>5n<35><10><><02>P<EFBFBD> <09><><EFBFBD>l<EFBFBD>h<1F>a<EFBFBD>(1<><19>A@<40><><04><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: '(<28><><EFBFBD>w<EFBFBD><77><EFBFBD><EFBFBD><EFBFBD>w2<77>Q<1D>@<19>*X<>=z<><7A><EFBFBD>^>e<>{<7B><>t<EFBFBD><74>&<26><>|p2<70>r<06> <01><>N W<1E>yU <09><14>a<EFBFBD><61><EFBFBD><EFBFBD>r<EFBFBD><72>w<EFBFBD><77><<1E>ɜ<00>9<EFBFBD>/-{<7B>C<EFBFBD><18>s<EFBFBD><73><EFBFBD>b:&<26><>#kt <10>=<3D><><EFBFBD>UX<55><>1<EFBFBD><31><EFBFBD><41>K<EFBFBD><4B>Q<EFBFBD><51><EFBFBD><EFBFBD><EFBFBD><EFBFBD>^v5<01><>3<>W<EFBFBD><57><EFBFBD>;<3B>"<22>e<EFBFBD><65><EFBFBD><EFBFBD>G<EFBFBD><47><EFBFBD>K<EFBFBD>=c<><63><EFBFBD>HD<48><13><14>4<EFBFBD>3.-@`<60><>]c<>s`<60>"a<11>ы<EFBFBD><D18B><EFBFBD><EFBFBD>XY<58><17><04><><EFBFBD><EFBFBD>=<3D><><EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD>_d<5F>u<EFBFBD><75>/<1A>IEND<4E>B`<60>