From b139ff7f1c5aa2eb8a54eac2acba31d437b1e5a6 Mon Sep 17 00:00:00 2001 From: David Perov Date: Fri, 31 Jul 2026 23:20:54 +0300 Subject: [PATCH] release: prepare v0.4.4 --- README.md | 8 ++ README.ru.md | 8 ++ docs/release/review-v0.4.4.md | 75 ++++++++++++++++++ package.json | 2 +- src-tauri/Cargo.lock | 4 +- src-tauri/Cargo.toml | 4 +- .../binaries/talkis-llm-aarch64-apple-darwin | Bin 4875616 -> 4875616 bytes src-tauri/src/tray.rs | 7 ++ src-tauri/tauri.conf.json | 2 +- src/lib/hotkeyEvents.ts | 2 +- src/windows/settings/SettingsApp.tsx | 69 ++++++---------- .../settings/settingsNavigation.test.ts | 18 +++++ src/windows/settings/settingsNavigation.ts | 27 +++++++ 13 files changed, 174 insertions(+), 52 deletions(-) create mode 100644 docs/release/review-v0.4.4.md create mode 100644 src/windows/settings/settingsNavigation.test.ts create mode 100644 src/windows/settings/settingsNavigation.ts diff --git a/README.md b/README.md index 20b0a69..9d0b7e2 100644 --- a/README.md +++ b/README.md @@ -37,11 +37,19 @@ It is designed for practical daily work: IDEs, chats, notes, CRM fields, email, - Transcribe audio and video files from the Files tab or by dropping files onto the widget. - Record calls with separate microphone and system-audio tracks on macOS, Windows, and Linux. - Keep local history for voice recordings, file transcriptions, calls, and live translations. +- Chat with the configured text model to search and analyze Talkis records, summarize calls, find tasks, and translate text. - Run managed local STT through one native `transcribe.cpp` runtime for Whisper, GigaAM, Qwen ASR, NVIDIA Parakeet, plus local text summaries through a managed GGUF LLM runtime. - Build native bundles for macOS, Windows, and Linux. ## Latest Changes +### v0.4.4 + +- Promoted the existing model chat from development mode to the product navigation on macOS, Windows, and Linux. +- Added direct Chat access from the desktop tray and production-safe `?tab=chat` navigation. +- The chat can search local Talkis records with cited sources, summarize recent calls and transcripts, extract tasks, translate text, and use the configured Cloud, API, or local text model. +- Chat messages remain stored locally, and existing development chat history is preserved during the product upgrade. + ### v0.4.3 - Restored the standard compact hotkey field in Settings, matching the selected-text translator control, while keeping the large live keycap visualization exclusive to onboarding. diff --git a/README.ru.md b/README.ru.md index 6a2cdd3..5ecd058 100644 --- a/README.ru.md +++ b/README.ru.md @@ -37,11 +37,19 @@ Talkis сделан для повседневной работы: IDE, чаты, - Транскрибация аудио и видео из вкладки `Файлы` или через перетаскивание файла на виджет. - Запись созвонов на macOS, Windows и Linux с отдельными дорожками микрофона и системного аудио. - Локальная история голосовых записей, файловых транскрибаций, созвонов и синхронных переводов. +- Чат с настроенной текстовой моделью для поиска и анализа записей Talkis, саммари созвонов, поиска задач и перевода текста. - Единый управляемый локальный STT runtime `transcribe.cpp` для Whisper, GigaAM, Qwen ASR, NVIDIA Parakeet и локальные summary через управляемый GGUF LLM runtime. - Нативные сборки для macOS, Windows и Linux. ## Последние изменения +### v0.4.4 + +- Существующий чат с моделью переведён из режима разработки в продуктовую навигацию на macOS, Windows и Linux. +- В системный трей добавлен прямой переход в «Чат», а маршрут `?tab=chat` теперь доступен в production-сборке. +- Чат умеет искать локальные записи Talkis со ссылками на источники, делать саммари последних созвонов и транскриптов, находить задачи, переводить текст и работать через настроенную облачную, API- или локальную текстовую модель. +- Сообщения чата остаются на устройстве, а существующая история dev-чата сохраняется после продуктового обновления. + ### v0.4.3 - В настройках восстановлено стандартное компактное поле горячей клавиши по образцу переводчика выделенного текста, а крупная живая визуализация клавиш оставлена только в онбординге. diff --git a/docs/release/review-v0.4.4.md b/docs/release/review-v0.4.4.md new file mode 100644 index 0000000..64b1e56 --- /dev/null +++ b/docs/release/review-v0.4.4.md @@ -0,0 +1,75 @@ +# Release Review v0.4.4 + +## Release + +- Version: 0.4.4 +- Release branch: `release/v0.4.4` +- Target tag: `v0.4.4` +- Reviewer: Codex +- Date: 2026-07-31 + +## Scope + +- Key changes included in this release: + - Opens the existing model chat in production builds instead of gating it behind `import.meta.env.DEV`. + - Treats `chat` as a normal settings destination for URL and application-event navigation. + - Adds a Chat item to the desktop tray on all supported desktop platforms. + - Preserves the existing local IndexedDB namespace so development chat history survives the product upgrade. + - Rebuilds the tracked macOS `talkis-llm` sidecar for the synchronized `0.4.4` workspace version, matching the established release process. +- User-facing changes: + - Chat is available from the settings sidebar and system tray on macOS, Windows, and Linux. + - Users can search and cite Talkis records, summarize transcripts and calls, find tasks, translate text, and use the configured Cloud, API, or local text model. +- Risky areas: + - Production navigation and deep-link handling for the newly visible tab. + - Text-model availability and existing local-history search behavior in a wider product audience. + - Cross-platform tray routing to the settings window. + +## Checks run + +- Focused Chat tests for product navigation, scope enforcement, and local-history search: passed, `29/29`. +- `bunx tsc --noEmit`: passed. +- `cargo fmt --manifest-path src-tauri/Cargo.toml -- --check`: passed. +- `CARGO_INCREMENTAL=0 cargo check --manifest-path src-tauri/Cargo.toml`: passed. +- `CARGO_INCREMENTAL=0 cargo test --manifest-path src-tauri/Cargo.toml --lib tray::tests::maps_supported_tray_menu_actions`: passed, `1/1`. +- `bash scripts/check-version-sync.sh`: passed at `0.4.4`. +- `CARGO_INCREMENTAL=0 bun run check:release`: passed, including version sync, TypeScript/Rust checks, sidecar preparation, hotkey smoke `6/6`, and production frontend build. +- `CARGO_INCREMENTAL=0 bun run build:release:macos`: passed; produced the signed application bundle, DMG, updater archive, and updater signature. +- Built `Talkis.app` version: verified as `0.4.4` from `CFBundleShortVersionString`. +- `codesign --verify --deep --strict`: passed for the built and installed application bundles, including all four sidecars. +- `hdiutil verify`: passed for `Talkis_0.4.4_aarch64.dmg`. +- Release artifact SHA-256: + - `Talkis_0.4.4_aarch64.dmg`: `4f469f911859a850b62dc7f13f026764177894ab014ad4724b794b5478c10d7a` + - `Talkis.app.tar.gz`: `5ac3f74718e55f67258dfcc4c5af7ad255a2af54a8c1772b4060635640523a3c` + - `Talkis.app.tar.gz.sig`: `16e6fd78272c20e8d382a0a6e201362ec48288323cd3113b4281efb403133bdf` +- GitHub Release Preflight: pending. +- Native/GitHub Windows build: pending Release Preflight. +- Native/GitHub Linux build: pending Release Preflight. +- Additional manual checks: + - Installed `/Applications/Talkis.app` reports version `0.4.4`, passes strict code-signature verification, and launches successfully. + - The previous installed `0.4.3` bundle was moved to the macOS Trash as `Talkis-0.4.3-before-v0.4.4.app` before replacement. + - Static inspection of the compiled production asset confirms `chat` is in the normal settings tab set and `DevChatTab` is rendered without a development-mode gate. + - A direct visual click-through to Chat was not performed because the freshly signed local bundle opened the macOS permissions onboarding; system privacy settings were intentionally not changed during release verification. + +## Manual review + +- Hotkey flow: unchanged; mandatory release smoke test passed, `6/6`. +- Onboarding permissions: unchanged. +- Widget position and notice behavior: unchanged. +- Transcription quality and short-utterance handling: unchanged. +- README refreshed: yes, `README.md` and `README.ru.md` document the product Chat. + +## Findings + +- Blockers: + - Exact-commit three-platform preflight is still pending. +- Non-blocking issues: + - Bun 1.2.13 initially returned the known intermittent false `Cannot find module` error on the external-volume workspace; the immediate focused retry passed `2/2`. + - The first Rust test/check attempts stalled in the external-volume incremental directory after an interrupted compile. Repeating them with `CARGO_INCREMENTAL=0` passed; CI uses a fresh runner. +- Follow-ups after release: + - None identified yet. + +## Decision + +- Ready for `main` merge: no; exact-commit three-platform preflight is pending. +- Release preflight green on exact tag commit: no; pending. +- Ready for tag publish: no; pending. diff --git a/package.json b/package.json index 9922b66..b2c8beb 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "talkis", "private": true, - "version": "0.4.3", + "version": "0.4.4", "license": "AGPL-3.0-or-later", "type": "module", "packageManager": "bun@1.2.13", diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 9af0171..6771f6d 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -5725,7 +5725,7 @@ dependencies = [ [[package]] name = "talkis" -version = "0.4.3" +version = "0.4.4" dependencies = [ "base64 0.22.1", "block2 0.6.2", @@ -5774,7 +5774,7 @@ dependencies = [ [[package]] name = "talkis-llm" -version = "0.4.3" +version = "0.4.4" dependencies = [ "llama-cpp-2", "serde_json", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index e22f62a..0bf8e39 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "talkis" -version = "0.4.3" +version = "0.4.4" description = "Talkis - Voice to Text Desktop Widget" authors = ["trixter"] license = "AGPL-3.0-or-later" @@ -13,7 +13,7 @@ default-members = ["."] resolver = "2" [workspace.package] -version = "0.4.3" +version = "0.4.4" edition = "2021" license = "AGPL-3.0-or-later" diff --git a/src-tauri/binaries/talkis-llm-aarch64-apple-darwin b/src-tauri/binaries/talkis-llm-aarch64-apple-darwin index 9295c45b3bf54e145eb4a8bbd2f63e9f458cba13..45bacc5fc6f37957e947f61d8f8435fde75353db 100755 GIT binary patch delta 42582 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 delta 42757 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 Option { TRAY_OPEN_ID => Some(TrayAction::Open), TRAY_HISTORY_ID => Some(TrayAction::History), TRAY_FILE_ID => Some(TrayAction::FileTranscription), + TRAY_CHAT_ID => Some(TrayAction::Chat), TRAY_MODELS_ID => Some(TrayAction::Models), TRAY_TRANSLATOR_ID => Some(TrayAction::Translator), TRAY_PROMPTS_ID => Some(TrayAction::Prompts), @@ -116,6 +119,7 @@ pub fn setup(app: &App) -> tauri::Result<()> { let history_item = MenuItem::with_id(app, TRAY_HISTORY_ID, "История", true, None::<&str>)?; let file_item = MenuItem::with_id(app, TRAY_FILE_ID, "Транскрибация файла", true, None::<&str>)?; + let chat_item = MenuItem::with_id(app, TRAY_CHAT_ID, "Чат", true, None::<&str>)?; let models_item = MenuItem::with_id(app, TRAY_MODELS_ID, "Диктовка и модели", true, None::<&str>)?; let translator_item = @@ -177,6 +181,7 @@ pub fn setup(app: &App) -> tauri::Result<()> { &navigation_separator, &history_item, &file_item, + &chat_item, &models_item, &translator_item, &prompts_item, @@ -202,6 +207,7 @@ pub fn setup(app: &App) -> tauri::Result<()> { Some(TrayAction::Open) => open_settings(app), Some(TrayAction::History) => open_settings_tab(app, "main"), Some(TrayAction::FileTranscription) => open_settings_tab(app, "file"), + Some(TrayAction::Chat) => open_settings_tab(app, "chat"), Some(TrayAction::Models) => open_settings_tab(app, "model"), Some(TrayAction::Translator) => open_settings_tab(app, "interpreter"), Some(TrayAction::Prompts) => open_settings_tab(app, "style"), @@ -241,6 +247,7 @@ mod tests { tray_action(TRAY_FILE_ID), Some(TrayAction::FileTranscription) ); + assert_eq!(tray_action(TRAY_CHAT_ID), Some(TrayAction::Chat)); assert_eq!(tray_action(TRAY_MODELS_ID), Some(TrayAction::Models)); assert_eq!( tray_action(TRAY_TRANSLATOR_ID), diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 4b33a3b..84c98ce 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -2,7 +2,7 @@ "$schema": "https://schema.tauri.app/config/2", "productName": "Talkis", "mainBinaryName": "Talkis", - "version": "0.4.3", + "version": "0.4.4", "identifier": "com.trixter.talkis", "build": { "beforeDevCommand": "bun scripts/run-vite.mjs --talkis-check-dev-port && bun run dev", diff --git a/src/lib/hotkeyEvents.ts b/src/lib/hotkeyEvents.ts index dfe685c..720bc48 100644 --- a/src/lib/hotkeyEvents.ts +++ b/src/lib/hotkeyEvents.ts @@ -54,7 +54,7 @@ export interface HandyHotkeyEventPayload { } export interface SettingsNavigatePayload { - tab: "main" | "file" | "interpreter" | "settings" | "model" | "style"; + tab: "main" | "file" | "interpreter" | "chat" | "settings" | "model" | "style"; resultId?: string | null; } diff --git a/src/windows/settings/SettingsApp.tsx b/src/windows/settings/SettingsApp.tsx index 0907849..d773205 100644 --- a/src/windows/settings/SettingsApp.tsx +++ b/src/windows/settings/SettingsApp.tsx @@ -46,6 +46,11 @@ import { checkAllPermissions } from "../../lib/permissions"; import { logError } from "../../lib/logger"; import { UserPanel } from "../../components/UserPanel"; import { watchThemePreference } from "../../lib/theme"; +import { + isSettingsTab, + resolveInitialSettingsTab, + type SettingsTab as Tab, +} from "./settingsNavigation"; import { checkForAppUpdateNow, installAvailableAppUpdate, @@ -54,34 +59,8 @@ import { } from "../../lib/updater"; import { useI18n, type MsgKey } from "../../lib/i18n"; -type Tab = - "main" | "file" | "interpreter" | "chat" | "settings" | "model" | "style"; - -const SHOW_INTERPRETER_TAB = true; -const SHOW_DEV_CHAT_TAB = import.meta.env.DEV; - -function isVisibleTab(tab: Tab): boolean { - if (tab === "interpreter") return SHOW_INTERPRETER_TAB; - if (tab === "chat") return SHOW_DEV_CHAT_TAB; - return true; -} - function resolveInitialTab(): Tab { - const requestedTab = new URLSearchParams(window.location.search).get("tab"); - - if ( - requestedTab === "file" || - requestedTab === "chat" || - requestedTab === "settings" || - requestedTab === "model" || - requestedTab === "style" - ) { - return isVisibleTab(requestedTab) ? requestedTab : "main"; - } - - if (requestedTab === "interpreter") return "interpreter"; - - return "main"; + return resolveInitialSettingsTab(window.location.search); } const TABS: { id: Tab; labelKey: MsgKey; icon: Icon; note: string }[] = [ @@ -101,7 +80,7 @@ const TABS: { id: Tab; labelKey: MsgKey; icon: Icon; note: string }[] = [ id: "chat", labelKey: "settingsApp.tab.chat", icon: IconMessage, - note: "Dev chat", + note: "Чат с записями и текстом", }, { id: "model", @@ -143,8 +122,10 @@ function TabButton({ return (