diff --git a/README.md b/README.md index 22d8a55..a3678a6 100644 --- a/README.md +++ b/README.md @@ -62,106 +62,106 @@ Manual test (çalıştığını doğruladık) ## 🔎 Preparation
For Nerds -1. Chat management -Create new chats (chat_1.json, chat_2.json, …) -Switch between chats -Delete chat (with confirmation) -Rename chat (popover) -Pin/unpin chats (📌) -Sorting: pinned first, then most recently modified +1. Chat management +Create new chats (chat_1.json, chat_2.json, …) +Switch between chats +Delete chat (with confirmation) +Rename chat (popover) +Pin/unpin chats (📌) +Sorting: pinned first, then most recently modified -2. Persistent settings (config.json) -Remember last opened chat (last_chat) -Dark/light theme (dark_mode) -Pinned chats (pinned_chats) -Model list (ai_models) -Per-chat model mapping (chat_models) -Store OpenRouter key (open_router_key) -Mic mode online/offline (is_mic_online) -Online STT model (stt_model_online) -Offline whisper.cpp paths (whisper_cpp_bin, whisper_cpp_model) +2. Persistent settings (config.json) +Remember last opened chat (last_chat) +Dark/light theme (dark_mode) +Pinned chats (pinned_chats) +Model list (ai_models) +Per-chat model mapping (chat_models) +Store OpenRouter key (open_router_key) +Mic mode online/offline (is_mic_online) +Online STT model (stt_model_online) +Offline whisper.cpp paths (whisper_cpp_bin, whisper_cpp_model) -3. Sidebar UI -Collapse/expand sidebar (☰) -Toggle Chats list -Toggle AI Models list +3. Sidebar UI +Collapse/expand sidebar (☰) +Toggle Chats list +Toggle AI Models list -4. Model management (per chat) -Separate active model per chat -Selecting a model assigns it to the current chat -LRU behavior: recently chosen model moves to top -Delete models (cannot delete the last remaining model) -If a model is deleted, affected chats fall back to default (self-heal) -“AI Models +” to add a model (dialog + OpenRouter models link) +4. Model management (per chat) +Separate active model per chat +Selecting a model assigns it to the current chat +LRU behavior: recently chosen model moves to top +Delete models (cannot delete the last remaining model) +If a model is deleted, affected chats fall back to default (self-heal) +“AI Models +” to add a model (dialog + OpenRouter models link) -5. Message selection mode -Click to select one or multiple messages -Selection counter bar -Clear selection (✕) -Selected bubbles get an outline +5. Message selection mode +Click to select one or multiple messages +Selection counter bar +Clear selection (✕) +Selected bubbles get an outline -6. Reference trees (reference chain expansion) -Expands used_refs recursively (references of references) -Ensures context (including images/refs) isn’t lost -Stores: -used_refs (indices sent to AI) -refs_groups (UI reference preview groups) +6. Reference trees (reference chain expansion) +Expands used_refs recursively (references of references) +Ensures context (including images/refs) isn’t lost +Stores: +used_refs (indices sent to AI) +refs_groups (UI reference preview groups) -7. Reference trees (reference chain expansion) -Expands used_refs recursively (references of references) -Ensures context (including images/refs) isn’t lost -Stores: -used_refs (indices sent to AI) -refs_groups (UI reference preview groups) +7. Reference trees (reference chain expansion) +Expands used_refs recursively (references of references) +Ensures context (including images/refs) isn’t lost +Stores: +used_refs (indices sent to AI) +refs_groups (UI reference preview groups) -8. Regenerate (♻) -Appears only when exactly one bubble is selected -If user bubble: re-asks the same prompt -If bot bubble: finds preceding user prompt + rewrites a similar answer -Regenerated prompts are marked (regen) with a distinct style -Keeps reference trees during regeneration +8. Regenerate (♻) +Appears only when exactly one bubble is selected +If user bubble: re-asks the same prompt +If bot bubble: finds preceding user prompt + rewrites a similar answer +Regenerated prompts are marked (regen) with a distinct style +Keeps reference trees during regeneration -9. Copy (📋) -Appears only on the single selected bubble -If message contains copy ... copy, copies only the inner block -Otherwise copies full message +9. Copy (📋) +Appears only on the single selected bubble +If message contains copy ... copy, copies only the inner block +Otherwise copies full message -10. Code block detection -Messages wrapped by copy markers render as a code-style block -Code block includes a “Copy” button overlay +10. Code block detection +Messages wrapped by copy markers render as a code-style block +Code block includes a “Copy” button overlay -11. Image sending / preview -Supports a pending image preview before sending -Saves image path into chat history -Shows a small image preview in message bubbles -Clears preview after sending +11. Image sending / preview +Supports a pending image preview before sending +Saves image path into chat history +Shows a small image preview in message bubbles +Clears preview after sending -12. Typing indicator -Animated “Thinking…” while AI is running -Removed when response arrives +12. Typing indicator +Animated “Thinking…” while AI is running +Removed when response arrives -13. Scroll behavior -Floating scroll-to-bottom button (↓) appears when not at bottom -Clicking scrolls to bottom and re-enables auto-scroll -Button visibility updates based on scroll position -(You also tuned behavior to scroll only on regenerate) +13. Scroll behavior +Floating scroll-to-bottom button (↓) appears when not at bottom +Clicking scrolls to bottom and re-enables auto-scroll +Button visibility updates based on scroll position +(You also tuned behavior to scroll only on regenerate) -14. Input shortcuts -Enter to send -Shift+Enter for newline -Added: Ctrl+C / Ctrl+V / Ctrl+X / Ctrl+A +14. Input shortcuts +Enter to send +Shift+Enter for newline +Added: Ctrl+C / Ctrl+V / Ctrl+X / Ctrl+A -15. Voice-to-text input -🎤 to start recording, ⏹ to stop -Uses pw-record if available, otherwise arecord (Linux) -After stop, transcribes (offline/online) and appends text into input +15. Voice-to-text input +🎤 to start recording, ⏹ to stop +Uses pw-record if available, otherwise arecord (Linux) +After stop, transcribes (offline/online) and appends text into input -16. Offline STT (whisper.cpp) -Uses whisper-cli + ggml-tiny.bin for low CPU transcription -Reads .txt output (stdout fallback) +16. Offline STT (whisper.cpp) +Uses whisper-cli + ggml-tiny.bin for low CPU transcription +Reads .txt output (stdout fallback) -17. Online STT (OpenRouter) -If is_mic_online: true, transcribes via OpenRouter -Sends base64 WAV as input_audio -Model selected via stt_model_online +17. Online STT (OpenRouter) +If is_mic_online: true, transcribes via OpenRouter +Sends base64 WAV as input_audio +Model selected via stt_model_online