Commit graph

171 commits

Author SHA1 Message Date
David Perov
d3c50ed6d9 Release v0.3.8
Some checks failed
CI / cargo check (linux) (push) Has been cancelled
CI / cargo check (macos) (push) Has been cancelled
CI / cargo check (windows) (push) Has been cancelled
CI / tsc + hotkey smoke (push) Has been cancelled
2026-07-07 17:25:39 +03:00
David Perov
918c414525 Add local other models translation slot
Some checks failed
CI / cargo check (linux) (push) Has been cancelled
CI / cargo check (macos) (push) Has been cancelled
CI / cargo check (windows) (push) Has been cancelled
CI / tsc + hotkey smoke (push) Has been cancelled
2026-07-06 10:08:32 +03:00
David Perov
741b7488b6 Integrate local LLM and selection translation updates
Some checks are pending
CI / cargo check (linux) (push) Waiting to run
CI / cargo check (macos) (push) Waiting to run
CI / cargo check (windows) (push) Waiting to run
CI / tsc + hotkey smoke (push) Waiting to run
2026-07-06 00:36:22 +03:00
David Perov
7f7d85f3f3 Release v0.3.7
Some checks failed
CI / cargo check (linux) (push) Has been cancelled
CI / cargo check (macos) (push) Has been cancelled
CI / cargo check (windows) (push) Has been cancelled
CI / tsc + hotkey smoke (push) Has been cancelled
2026-07-03 17:36:34 +03:00
David Perov
2f0bc345c5 Release v0.3.6
Some checks are pending
CI / cargo check (linux) (push) Waiting to run
CI / cargo check (macos) (push) Waiting to run
CI / cargo check (windows) (push) Waiting to run
CI / tsc + hotkey smoke (push) Waiting to run
2026-07-02 18:14:59 +03:00
David Perov
b83ea7254f Release v0.3.5
Some checks are pending
CI / cargo check (linux) (push) Waiting to run
CI / cargo check (macos) (push) Waiting to run
CI / cargo check (windows) (push) Waiting to run
CI / tsc + hotkey smoke (push) Waiting to run
2026-07-02 14:09:53 +03:00
David Perov
62352d8cb9 Prepare release v0.3.4
Some checks are pending
CI / cargo check (linux) (push) Waiting to run
CI / cargo check (macos) (push) Waiting to run
CI / cargo check (windows) (push) Waiting to run
CI / tsc + hotkey smoke (push) Waiting to run
2026-07-01 19:27:16 +03:00
David Perov
af379bb8b9 Show daily word stats in transcription panel
Some checks are pending
CI / cargo check (linux) (push) Waiting to run
CI / cargo check (macos) (push) Waiting to run
CI / cargo check (windows) (push) Waiting to run
CI / tsc + hotkey smoke (push) Waiting to run
2026-07-01 11:00:07 +03:00
David Perov
b6f58adc74 Fix repeated permission prompts after restart 2026-07-01 09:14:24 +03:00
David Perov
8884fd9102 Release v0.3.3
Some checks are pending
CI / cargo check (linux) (push) Waiting to run
CI / cargo check (macos) (push) Waiting to run
CI / cargo check (windows) (push) Waiting to run
CI / tsc + hotkey smoke (push) Waiting to run
2026-06-30 20:44:04 +03:00
David Perov
acf85932a5 Update v0.3.2 release review
Some checks are pending
CI / cargo check (linux) (push) Waiting to run
CI / cargo check (macos) (push) Waiting to run
CI / cargo check (windows) (push) Waiting to run
CI / tsc + hotkey smoke (push) Waiting to run
2026-06-30 11:37:38 +03:00
David Perov
70ec6f4d13 Release v0.3.2 2026-06-30 09:40:53 +03:00
David Perov
775d343e39 chore(release): v0.3.1
Some checks failed
CI / cargo check (linux) (push) Has been cancelled
CI / cargo check (macos) (push) Has been cancelled
CI / cargo check (windows) (push) Has been cancelled
CI / tsc + hotkey smoke (push) Has been cancelled
2026-06-26 19:10:20 +03:00
David Perov
bd82bd12e0 refactor(local-llm): выбранность модели из настроек (не из рантайма); back-fill llmLocalModelId для старых настроек (порт 8011/18200); token_to_piece_bytes вместо устаревшего API; +юнит-тесты 2026-06-26 19:08:02 +03:00
David Perov
ef43b484e9 feat(prompt-gen): инструкция требует детальный многоблочный промпт (роль, что извлечь, структура, детализация, что игнорировать) 2026-06-26 18:07:14 +03:00
David Perov
0feb99aab8 i18n(ru): summary → саммари во всех русских строках 2026-06-26 18:05:11 +03:00
David Perov
e28f4eaa2f fix(models): скрывать карточку «Облако» целиком, если пользователь не авторизован 2026-06-26 17:57:17 +03:00
David Perov
c07d2c82d7 fix(summary): локальный рантайм без выбранной модели = backend недоступен; вместо сырой ошибки 18200 показываем уведомление выбрать модель (генерация промпта + саммари) 2026-06-26 17:28:53 +03:00
David Perov
61a9434b5d fix(models): «Подписка Talkis 7 дней бесплатно» в одну строку; скрывать статус «Облако» без подписки 2026-06-26 17:21:54 +03:00
David Perov
b61b80c15b fix(models): «7 дней бесплатно» в карточке подписки под заголовком; вернул «Режим распознавания» вверху страницы 2026-06-26 17:18:48 +03:00
David Perov
46f181fa01 fix(models): «Подписка Talkis / 7 дней бесплатно» — page-level heading, always visible 2026-06-26 08:47:03 +03:00
David Perov
55d2cad934 fix(userPanel): «7 дней бесплатно» bullet without bold/accent 2026-06-26 08:42:58 +03:00
David Perov
d52245bdc9 fix(subscription): no new menu tab; heading = «Подписка Talkis / 7 дней бесплатно»; UserPanel +4th bullet 2026-06-26 08:36:34 +03:00
David Perov
601d15e750 feat(subscription): «Подписка Talkis» header on Models + dedicated menu tab
Add a «Подписка Talkis» heading above the cloud-section subscription block on
the Models page, and a dedicated «Подписка Talkis» item in the settings menu
that opens the same three-state subscription block (active / account / guest).
Extract the shared SubscriptionCards component and lift the activate/logout
handlers to component scope so both surfaces drive one flow.
2026-06-26 08:22:29 +03:00
Tim
8adfc741aa feat(prompt+local): «Сгенерировать промпт» on the action row using the title; fix garbled Cyrillic in local LLM
- Prompt editor: «Улучшить промпт» → «Сгенерировать промпт»; icon removed; moved onto the action row next to Отменить/Сохранить with matching style. Generation now feeds the prompt TITLE + draft (works from the name alone).
- talkis-llm sidecar: accumulate raw token bytes and emit only complete UTF-8 sequences — token_to_str decoded partial multibyte chars, producing garbled «иероглифы» on Cyrillic. Rebuilt the macOS sidecar binary.
2026-06-26 00:09:46 +03:00
Tim
3b65520d7a feat(models): 7-day free-trial promo text + move subscription/cloud blocks into the Cloud section
- Promo banners (guest + account card) now show «7 дней бесплатно» above the Перейти на PRO button; cloud-section status text says «7 дней бесплатно — перейдите на PRO».
- Reorder the Models tab: recognition-mode selector moves to the top; the subscription-active card / go-Pro promo now lives inside the Cloud section, above the cloud card.
2026-06-25 23:37:00 +03:00
Tim
b3d353d7e1 feat(summary): improve-prompt button, fix local summary after restart, live prompt dropdown, collapsible prompt cards + accordion model cards
- Fix local summary hitting a dead port after app restart: the talkis-llm sidecar dies while llmEndpoint stays persisted. Lazily (re)start the bundled runtime before a local summary (new llmLocalModelId marker) and use the live port.
- Add Улучшить промпт button (shown when a text backend is configured); rewrites the draft via the model.
- SummaryModal listens to SETTINGS_UPDATED_EVENT so a freshly created prompt shows in the dropdown immediately.
- Long prompt text in cards collapses with Раскрыть/Скрыть like the history table.
- Prompt textarea auto-grows to content up to a cap, then scrolls.
- TextModelCard (API) and local LLM cards become collapsed-by-default accordions matching the recognition cards.
2026-06-25 22:32:11 +03:00
David Perov
2296e9bda8 feat: English UI/i18n, summary slide-over, model-mode UX (v0.3.0)
- i18n: lightweight RU/EN system + interface-language picker; full UI translated, OS-detected default
- summary: right slide-over modal with per-record summary history table (generate/regenerate/edit/copy/delete); replaces inline SummaryPanel; triggers disabled with hint when no text model configured
- models: API & Local split into Recognition/Text sub-tabs; explicit select-mode commit row; TextModelCard restyled to match adapter cards; honest Configured badge
- widget: click-to-expand notice bubble
- bump version to 0.3.0
2026-06-25 13:17:48 +03:00
David Perov
fe81d2e7e8 fix(local): use bartowski single-file Qwen GGUF URLs (7B was 404)
The official Qwen2.5-7B-Instruct-GGUF q4_k_m is split into 2 parts (404 for
the single-file name we used). Switch both 3B and 7B to bartowski's
single-file Q4_K_M GGUFs, both verified to return 200.
2026-06-24 15:11:47 +03:00
David Perov
a69b993694 feat(local): bundled talkis-llm runtime (llama.cpp) for local summary
- talkis-llm.rs: a raw-HTTP sidecar like talkis-stt, backed by llama.cpp
  via llama-cpp-2, serving /health, /v1/models and an OpenAI-compatible
  /v1/chat/completions (Qwen2.5 ChatML). Args: -m/--host/--port/-c.
- Cargo: add llama-cpp-2 (Metal acceleration on macOS)
- prepare-stt-sidecar.mjs + tauri.conf externalBin + check.yml placeholders:
  build and bundle talkis-llm alongside the STT sidecars
- commit the macOS arm64 binary (built locally), like the other sidecars

The engine for the local "Текстовая" model: the GGUF model already
downloads; the runtime is now bundled and signed with the app, so no
talkis.ru hosting and no Gatekeeper issue.
2026-06-24 15:09:51 +03:00
David Perov
6292d5c88e fix(local): match STT selection UI on text-model cards
The "Выбрать" button and the active "Выбрана" label now mirror the STT
model cards exactly (control-muted select button with a check on the
right, success-colored "Выбрана" label on the left when active) instead
of the custom "Для summary" / "Используется" button.
2026-06-24 14:19:25 +03:00
David Perov
1ce322762b fix(local): persist LLM download progress across UI remounts; drop "~"
- Track in-flight download progress in a backend registry (llm_runtime),
  query it on mount via get_llm_download_progress, and drive the bar from
  the registry + events instead of component-local state. Progress now
  survives switching the Транскрибация/Текстовая toggle, changing tabs, or
  minimizing the app. A Drop guard clears the entry on any download exit.
- Remove the "~" from the model size labels (2.0 ГБ / 4.7 ГБ)
2026-06-24 14:04:24 +03:00
David Perov
de9af858c1 fix(local): Qwen avatar + icon metrics on text-model cards (match STT)
- Use the existing Qwen avatar (qwen.png) on local text-model cards instead
  of a letter initial, exactly like the STT Qwen model
- Show disk size and required RAM as HardDrive / MemoryStick icons (same as
  the STT model stats row) instead of plain text
2026-06-24 13:57:06 +03:00
David Perov
1875936544 feat(local): text-model toggle + STT-style cards in Local mode
- Add a [Транскрибация | Текстовая] segmented toggle in Local mode, same as
  the cloud/api/local switch: transcription shows the STT models, text shows
  the local LLM models
- Rebuild LocalLlmModels in the exact STT card style (.card chrome, avatar
  circle, status badge, progress bar with --progress-track/--accent, and the
  same action buttons) instead of the previous custom layout
2026-06-24 13:51:50 +03:00
David Perov
9f646c956f fix(prompts): redesign Style & Prompts in the app's native style
- Add a [Стиль | Промпты] segmented toggle, same as the model-mode switch
- Prompt cards now use OptionCard (click to select, checkmark + highlight)
  exactly like the style cards: no star, no "Встроенный" badge, no extra
  icons, and the full prompt text is shown
- Manage custom prompts contextually (Создать / Изменить / Удалить the
  selected one) instead of cluttering each card
- Capitalize "Промпты"; remove dashes from built-in prompt texts
2026-06-24 12:49:58 +03:00
David Perov
af4dcb1176 revert: restore original widget side padding (drop +5px width)
The +5px width safety margin (06aafaf) changed the widget's visible
composition — the left/right padding looked tighter. Revert to the original
IDLE_HOVER_WIDGET_WIDTH (+12) and Rust WIDGET_WIDTH (109). If the Windows
right-edge clipping recurs, it will be handled with a window-only (invisible)
buffer that does not touch the layout.
2026-06-24 12:31:37 +03:00
David Perov
a03df5fc14 feat: native rectangular window on Windows/Linux (system title bar)
Replace the transparent rounded shell (which showed lit square corners on
Windows/Linux) with a standard decorated window there: native title bar
with system minimize / maximize / close, opaque rectangular window, and a
squared .app-root. macOS keeps the custom rounded, decoration-less shell
with the in-app traffic-light title bar; the custom TitleBar is hidden on
non-macOS.
2026-06-24 11:34:09 +03:00
David Perov
818da38031 fix: remove square window shadow on Windows/Linux (rounded-corner halo)
The settings window is transparent and undecorated with CSS-rounded
content, but Windows/Linux draw a square drop-shadow around the square
window, visible as lit corners behind the rounded content. Disable the
window shadow on non-macOS (the floating widget already does); macOS clips
the shadow to the content alpha, so keep it there.
2026-06-24 11:27:31 +03:00
David Perov
06aafaf910 fix: 5px horizontal safety margin on the widget (no right-edge clipping)
Windows DPI rounding could shave a couple of pixels off the right edge of
the floating widget; macOS was fine. Add WIDGET_WIDTH_SAFETY_PX = 5 to the
idle/recording/call-stack widget width and bump the Rust WIDGET_WIDTH to
match (114). The widget window is transparent, so the extra width is
invisible padding and the centered pill keeps its position.
2026-06-24 11:15:57 +03:00
David Perov
321f40b7f5 fix: clearer first-run message when no transcription model is set up
Replace the confusing "Добавьте API ключ" error (shown when a first-time
user records with no cloud session, no API key and no local model) with a
clear instruction to set up a model in Settings → Models, listing the
three options (cloud, local model, own API key).
2026-06-24 11:08:02 +03:00
David Perov
bbfe9982d1 fix: prevent duplicate widget windows on Windows/Linux (single instance)
Add tauri-plugin-single-instance (Windows/Linux only) registered as the
first plugin. A second launch — autostart, deep link, or re-open — now
focuses the running app instead of spawning another process with its own
floating widget. macOS enforces a single instance natively, which is why
the bug never appeared there. The deep-link feature forwards auth URLs
from a blocked second instance to the running app.
2026-06-24 11:03:55 +03:00
David Perov
9eeb48a2c0 feat: cancel local model downloads (STT + LLM)
- download_cancel.rs: shared cancel registry + cancel_local_model_download
  command, CANCELLED_MESSAGE marker
- local_stt / llm_runtime: streaming download loops poll the cancel flag
  each chunk, delete the partial file, return cancelled
- UI: cancel (X) button while a local STT or local LLM model is
  downloading; cancel resets the card silently instead of erroring

User feedback: no way to cancel a local model download (missing on
Windows / everywhere). cargo + tsc + vite green.
2026-06-24 10:57:33 +03:00
David Perov
581f9d21e4 feat: local LLM model slot in Local mode UI (Phase 3)
- LocalLlmModels: list/download/delete bundled GGUF models with progress
  bar, start the managed runtime and point summary at it (sets llmEndpoint
  to the local OpenAI-compatible base URL)
- SettingsTabs: render the slot at the top of the Local model section

bd: talkis-pc-623.9
2026-06-23 21:31:37 +03:00
David Perov
be18237af3 feat: managed local LLM runtime (llama.cpp) + GGUF catalog (Phase 3)
- llm_runtime.rs: bundled talkis-llm (llama-server) runtime management —
  GGUF catalog (Qwen2.5 3B/7B Instruct), streaming download with progress
  events, port allocation, sidecar spawn + /health wait, OpenAI-compatible
  base URL, and Tauri commands (list/download/delete/start/stop/status)
- lib.rs: register module + commands

The actual llama-server binary bundling (prepare-llm-sidecar.mjs +
externalBin) is the remaining sub-step; start_local_llm errors gracefully
until then so dev/build stays green. cargo check passes.

bd: talkis-pc-623.7 / talkis-pc-623.8
2026-06-23 21:27:37 +03:00
David Perov
63b5764c91 feat: text model (LLM endpoint) in API mode for summary (Phase 2)
- SettingsTabs: TextModelCard in API mode — custom OpenAI-compatible
  endpoint, model and key bound to llmEndpoint/llmModel/llmApiKey. Empty
  endpoint falls back to OpenAI with the user's own key. Summary then
  routes through process_text to that endpoint.

bd: talkis-pc-623.6
2026-06-23 20:45:40 +03:00
David Perov
02f3a45cfc feat: unified LLM route (process_text) + summary backend selection (Phase 2)
- ai.rs: process_text Tauri command posting to an OpenAI-compatible
  /v1/chat/completions endpoint — cloud, a local runtime (127.0.0.1) or a
  user-provided endpoint; resolve_chat_completions_url. Explicit
  user-initiated action; automatic cleanup stays disabled by policy.
- lib.rs: register ai::process_text
- summarize.ts: resolveSummaryBackend (cloud | custom | local) and a
  generic map-reduce reused across backends; summarizeTranscript replaces
  the cloud-only summarizeWithCloud
- SummaryPanel: route summary through the resolved backend; show the
  active model and a hint when none is configured

bd: talkis-pc-623.5
2026-06-23 20:42:35 +03:00
David Perov
9cdbfa6335 feat: prompt library + cloud summary of transcripts (Phase 1)
- store: PromptPreset model with built-in cleanup + summary presets,
  prompts[] plus selectedCleanupPromptId/defaultSummaryPromptId,
  migration from the legacy `style` field, and CRUD/resolver helpers
- summarize.ts: cloud summary over processTextWithCloudPrompt with
  map-reduce chunking so long videos/calls don't hit context limits
- Settings: "Стиль" -> "Стиль и промпты" with a prompt constructor
  (create/edit/duplicate/delete + pick the default summary prompt)
- SummaryPanel: pick a prompt and summarize a transcript result via
  Talkis Cloud; wired into the file/call transcription result view

bd: talkis-pc-623.1/.2/.3/.4
2026-06-23 20:13:17 +03:00
David Perov
1f07abb941 fix(call_capture): compile platform-gated Windows/Linux audio capture
Some checks failed
CI / cargo check (linux) (push) Has been cancelled
CI / cargo check (macos) (push) Has been cancelled
CI / cargo check (windows) (push) Has been cancelled
CI / tsc + hotkey smoke (push) Has been cancelled
Windows: cpal::Stream is !Send; wrap it in a SendStream newtype with a
documented unsafe impl Send so the global SESSIONS static is Sync (the WASAPI
stream is a control handle, access serialized via the mutex).

Linux: spa::pod::Pod::from_bytes returns Option, not Result — use ok_or_else
instead of map_err.
2026-06-22 12:16:02 +03:00
David Perov
d4f30e7659 ci: build Linux on ubuntu-24.04 for pipewire 0.10, add sidecar placeholders
libspa 0.10.0 needs pipewire headers newer than ubuntu-22.04 ships (0.3.48),
which broke both the release build and the new CI cargo check on Linux. Build
the Linux leg on ubuntu-24.04 (pipewire 1.x). Also create empty sidecar
placeholders before cargo check so tauri-build path validation passes on
Windows without downloading the real ffmpeg/STT binaries.
2026-06-22 12:06:04 +03:00
David Perov
b5c444eac5 Release v0.2.0 2026-06-22 00:25:07 +03:00