whisper-windows-mcp 2.2.2 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/.github/workflows/ci.yml +24 -0
  2. package/.github/workflows/publish.yml +24 -0
  3. package/{LICENSE-COMMERCIAL.md → COMMERCIAL-LICENSE.md} +58 -58
  4. package/LICENSE +40 -40
  5. package/PRIVACY.es.md +194 -135
  6. package/PRIVACY.id.md +194 -135
  7. package/PRIVACY.ja.md +194 -135
  8. package/PRIVACY.ko.md +194 -135
  9. package/PRIVACY.md +194 -135
  10. package/PRIVACY.pl.md +194 -135
  11. package/PRIVACY.pt-BR.md +194 -135
  12. package/PRIVACY.ro.md +194 -135
  13. package/PRIVACY.uk.md +194 -135
  14. package/PRIVACY.vi.md +194 -135
  15. package/README.es.md +80 -48
  16. package/README.id.md +83 -40
  17. package/README.ja.md +106 -72
  18. package/README.ko.md +69 -37
  19. package/README.md +82 -39
  20. package/README.pl.md +83 -40
  21. package/README.pt-BR.md +77 -45
  22. package/README.ro.md +84 -41
  23. package/README.uk.md +83 -40
  24. package/README.vi.md +73 -41
  25. package/ROADMAP.es.md +131 -45
  26. package/ROADMAP.id.md +86 -89
  27. package/ROADMAP.ja.md +93 -108
  28. package/ROADMAP.ko.md +82 -82
  29. package/ROADMAP.pl.md +125 -41
  30. package/ROADMAP.pt-BR.md +87 -87
  31. package/ROADMAP.ro.md +123 -41
  32. package/ROADMAP.uk.md +82 -90
  33. package/ROADMAP.vi.md +87 -87
  34. package/SECURITY.es.md +76 -47
  35. package/SECURITY.id.md +76 -47
  36. package/SECURITY.ja.md +76 -47
  37. package/SECURITY.ko.md +76 -47
  38. package/SECURITY.md +33 -4
  39. package/SECURITY.pl.md +76 -47
  40. package/SECURITY.pt-BR.md +76 -47
  41. package/SECURITY.ro.md +76 -47
  42. package/SECURITY.uk.md +76 -47
  43. package/SECURITY.vi.md +76 -47
  44. package/TROUBLESHOOTING.es.md +325 -323
  45. package/TROUBLESHOOTING.id.md +349 -323
  46. package/TROUBLESHOOTING.ja.md +415 -286
  47. package/TROUBLESHOOTING.ko.md +325 -323
  48. package/TROUBLESHOOTING.pl.md +371 -323
  49. package/TROUBLESHOOTING.pt-BR.md +325 -323
  50. package/TROUBLESHOOTING.ro.md +371 -323
  51. package/TROUBLESHOOTING.uk.md +385 -323
  52. package/TROUBLESHOOTING.vi.md +325 -323
  53. package/dist/index.js +743 -289
  54. package/dist/lib.d.ts +37 -0
  55. package/dist/lib.js +123 -0
  56. package/package.json +46 -45
  57. package/patch_roadmaps.py +0 -72
package/ROADMAP.uk.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # whisper-windows-mcp — Дорожня карта
2
2
 
3
- Поточна версія: **v2.2.0**
3
+ Поточна версія: **v2.4.0**
4
4
 
5
5
  ---
6
6
 
@@ -54,104 +54,95 @@
54
54
  ### ✅ v2.0.0 — Unicode-безпечні шляхи + Фоновий SRT
55
55
  **Імена файлів Unicode:** Файли з не-ASCII символами в іменах спричиняли тихе невдале виконання фонової транскрипції. Виправлено шляхом спрямування всього виводу через санований тимчасовий шлях на основі ID завдання, а потім переміщення результату до правильного призначення після завершення.
56
56
 
57
- **SRT у фоновому режимі:** `spawnDetached` раніше жорстко кодував `-otxt` незалежно від запитаного формату, а `generate_subtitles` синхронно блокував і досягав 4-хвилинного тайм-ауту MCP на довших файлах. Виправлено додаванням параметра `outputFormat` до `spawnDetached`, що підтримує вивід `text` і `srt` у фоновому режимі.
57
+ **SRT у фоновому режимі:** `spawnDetached` раніше жорстко кодував `-otxt` незалежно від запитаного формату. Виправлено додаванням параметра `outputFormat` до `spawnDetached`, що підтримує вивід `text` і `srt` у фоновому режимі.
58
58
 
59
59
  ### ✅ v2.0.1 — Виправлення помилок (включено у v2.2.0)
60
- - `--max-context 0` жорстко закодовано в `buildArgs` і `spawnDetached` — запобігає циклам галюцинацій на довгих аудіозаписах. `--condition-on-previous-text` і `--no-context` — недійсні прапорці в поточному бінарнику (покоління v1.8.3) — `--max-context N` є правильним прапорцем.
60
+ - `--max-context 0` жорстко закодовано в `buildArgs` і `spawnDetached` — запобігає циклам галюцинацій на довгих аудіозаписах.
61
61
  - `--no-speech-thold 0.6` жорстко закодовано в обох функціях — сегменти нижче порогу впевненості обробляються як тиша, а не як галюцинований вміст.
62
62
  - Перевірка шляху (`validateInputPath`) — відхиляє UNC-шляхи і обходи `..`.
63
63
  - Захист розміру файлу `MAX_FILE_SIZE_MB = 10240`.
64
64
  - Коментар безпеки ін'єкції транскрипції у `transcribeSingle`.
65
- - Виправлено зламану команду CLI-пакету у TROUBLESHOOTING.md — задокументовано правильний підхід до попереднього конвертування FFmpeg і метод `Start-Process -RedirectStandardOutput`.
65
+ - Виправлено зламану команду CLI-пакету у TROUBLESHOOTING.md.
66
66
 
67
67
  ### ✅ v2.1.0 — Набір інструментів управління моделями (включено у v2.2.0)
68
68
  - `WHISPER_MODEL` змінено з `const` на `let` (змінюється в межах сеансу).
69
69
  - `MODEL_REGISTRY` — 16 моделей, варіанти повної точності та квантизовані, URL завантаження Hugging Face.
70
70
  - `ALLOWED_HF_PREFIXES` — список дозволених URL, що обмежує завантаження просторами імен `ggerganov/whisper.cpp` і `ggml-org`.
71
71
  - Інструмент `list_models` — сканує теку моделей, показує активну модель, розміри, випадки використання, доступні завантаження.
72
- - Інструмент `download_model` — завантажує з Hugging Face через вбудований `https` Node.js, атомарне перейменування (виправлення стану гонки звільнення файлового дескриптора Windows).
72
+ - Інструмент `download_model` — завантажує з Hugging Face через вбудований `https` Node.js, атомарне перейменування.
73
73
  - Інструмент `switch_model` — перевіряє розширення `.bin`, обмеження теки, перевірку блокування процесу.
74
74
  - `recommendedModel()` оновлено для рекомендації `large-v3-turbo` при VRAM 6 ГБ+.
75
75
 
76
- ### ✅ v2.2.0 — Розширення якості, параметрів і апаратного забезпечення (поточна)
76
+ ### ✅ v2.2.0 — Розширення якості, параметрів і апаратного забезпечення
77
77
  - Інтерфейс `WhisperOptions` замінює позиційні аргументи в `buildArgs`.
78
78
  - Нові параметри у `transcribe_audio`: `temperature`, `prompt`, `condition_on_prev_text`, `no_speech_thold`, `beam_size`, `best_of`, `gpu_device`, `processors`, `word_timestamps`, `max_segment_length`, `split_on_word`, `diarize`, `vad_model`, `offset_t`, `duration`.
79
79
  - Нові параметри у `generate_subtitles`: `temperature`, `prompt`, `beam_size`, `best_of`, `diarize`, `vad_model`.
80
80
  - Рефакторинг `spawnDetached` — усі прапорці якості тепер застосовуються у фоновому/пакетному режимі.
81
- - `runSrtPass` оновлено для прийняття `extraOpts`.
82
- - Виправлення виводу пакету — `readBatchProgress` тепер переміщає тимчасовий вивід до кінцевого призначення перед перевіркою (це була корінна причина всіх результатів "помилка" у пакеті).
81
+ - Виправлення виводу пакету — `readBatchProgress` тепер переміщає тимчасовий вивід до кінцевого призначення перед перевіркою.
83
82
 
84
- **Примітка щодо сумісності прапорців:** `gpu_device` / `-g` додано у whisper.cpp v1.8.4. Готовий Vulkan-бінарник у релізах є покоління v1.8.3 — цей параметр приймається інструментом, але не матиме ефекту, доки користувачі не оновляться до бінарника v1.8.4+.
83
+ **Примітка щодо сумісності прапорців:** `gpu_device` / `--device` додано у whisper.cpp v1.8.4. Готовий Vulkan-бінарник у релізах є покоління v1.8.3 — цей параметр приймається інструментом, але не матиме ефекту, доки користувачі не оновляться до бінарника v1.8.4+.
85
84
 
86
- **Підтверджені дійсні прапорці у поточному бінарнику (покоління v1.8.3):**
87
- `--max-context`, `--no-speech-thold`, `--processors`, `--offset-t`, `--duration`, `--best-of`, `--beam-size`, `--diarize`, `--tinydiarize`, `--temperature`, `--prompt`, VAD-прапорці.
85
+ ### ✅ v2.2.2 — Патч
86
+ - Виправлення подвійної ліцензії — LICENSE і LICENSE-COMMERCIAL.md виправлено.
87
+ - Незначні виправлення документації.
88
88
 
89
- **Відсутні у поточному бінарнику:** `--no-context` (використовуйте `--max-context 0`), `--condition-on-previous-text` (лише назва Python API), `--gpu-device` / `-g` (v1.8.4+).
89
+ ### ✅ v2.3.0 — Автопросування пакету, архітектура конфіденційності, розширення форматів виводу
90
90
 
91
- ---
92
-
93
- ## Критична помилка — Автоматичне просування пакету (підтверджено, очікує виправлення)
94
-
95
- ### Пакет не просувається без активного опитування
96
-
97
- `start_batch` не просуває чергу автономно між файлами. Пакет просувається лише при виклику `check_batch_progress`. Без опитування пакет зависає на невизначений час після кожного файлу — whisper-cli.exe завершується, новий процес не запускається, черга не просувається.
91
+ **Автопросування пакету (критичне виправлення помилки):** `start_batch` раніше вимагав активного опитування для просування черги. Тепер до кожного породженого дочірнього процесу whisper-cli прикріплено обробник `on('exit')`. Коли процес завершується, пакет самостійно просувається через зворотній виклик виходу з нульовими витратами на опитування і нульовим споживанням API. М'ютекс запобігає подвійному запуску між паралельним обробником виходу і викликами `check_batch_progress`.
98
92
 
99
- Це підриває мету дизайну автономної нічної пакетної обробки і безпосередньо порушує принцип мінімізації викликів Claude API. Пакет з 95 коротких кліпів вимагав близько 200 викликів опитування протягом 100 хвилин для завершення.
93
+ **Архітектура конфіденційності:**
94
+ - Змінна середовища `WHISPER_PRIVACY_MODE` — при значенні `true` всі відповіді інструментів повертають лише метадані (ім'я файлу, кількість слів, шлях збереження). Жоден текст транскрипції не передається API Claude за жодних обставин. Транскрипції існують лише як локальні файли.
95
+ - Змінна середовища `WHISPER_CONSENT_ACKNOWLEDGED` — при значенні `true` пригнічує одноразові ворота згоди сеансу для нечутливого контенту.
96
+ - Параметр `privacy_mode` для окремого виклику у `transcribe_audio`, `transcribe_batch`, `start_batch` і `check_progress`. Перевизначає глобальну змінну середовища в обох напрямках. Перезапуск не потрібен для перемикання для окремого виклику.
97
+ - Ворота режиму конфіденційності (`checkPrivacyGate()`) — спрацьовують перед кожною операцією, коли ефективний режим конфіденційності активний.
98
+ - Ворота згоди сеансу (`transcriptPolicy()`) — спрацьовують один раз за сеанс перед першим викликом, що повертає транскрипцію, у стандартному режимі.
99
+ - `PRIVACY.md` — повна документація відповідності, що охоплює HIPAA, GDPR, адвокатську таємницю, FERPA, SOX, PCI-DSS і NDA/комерційну таємницю.
100
100
 
101
- **Корінна причина:** `readBatchProgress` містить всю логіку просування черги. Він виконується лише при явному виклику `check_batch_progress`. Немає фонового таймера, спостерігача файлів або автономного циклу.
101
+ **Розширення форматів виводу:**
102
+ - `vtt` — вивід WebVTT через `-ovtt`. Доступний у `transcribe_audio`, `generate_subtitles`, `start_batch` і фоновому режимі.
103
+ - `lrc` — формат LRC текстів/караоке через `-olrc`. Доступний у `transcribe_audio` і фоновому режимі.
104
+ - `csv` — CSV з мітками часу через `-ocsv`. Доступний у `transcribe_audio` і фоновому режимі.
105
+ - Типовий `output_format` змінено з `"text"` на `"timestamps"` у всіх інструментах і шляхах коду.
102
106
 
103
- **Заплановане виправлення — Варіант Б (зворотній виклик виходу, наполегливо рекомендовано):** Прикріпити обробник `on('exit')` до породженого дочірнього процесу whisper-cli. Коли процес завершується, негайно викликати логіку просування для перевірки виводу і запуску наступного завдання. Подієво-орієнтований, спрацьовує рівно один раз при завершенні кожного файлу, нульові витрати на опитування, нуль спожитих викликів API.
107
+ **Виправлення помилок:**
108
+ - Помилка 1: `output_format` не передавався фоновим завданням — використовувався типовий `"text"` незалежно від запитаного формату. Виправлено зміною типового значення на `"timestamps"` і правильним пересиланням.
109
+ - Помилка 2: Тихий `catch {}` у операції переміщення виводу фонового завдання приховував збої. Додано явну перевірку `existsSync` з детальним повідомленням про збій після переміщення.
110
+ - Помилка 3: Додано коментар про дизайн у точці фонового запуску, що документує, чому ворота згоди навмисно відкладаються до `check_progress` для не-конфіденційних фонових завдань.
104
111
 
105
- **Варіант А (лише резервний):** Фоновий `setInterval` з інтервалом опитування на основі тривалості, виведеним з даних тривалості FFprobe, вже наявних у JSON стану пакету. Розмір файлу не є надійним замінником тривалості.
106
-
107
- **Додаткове обмеження:** Виправлення не повинно породжувати другий whisper-cli.exe, поки один вже виконується — блокування процесу має дотримуватися в шляху автопросування.
108
-
109
- **Обхідне рішення (поточне):** Повторно викликайте `check_batch_progress` до завершення пакету. Приблизно один виклик опитування на файл.
110
-
111
- ---
112
+ **Додатково:**
113
+ - Автоматичне очищення тимчасової теки — `cleanupOldJobFiles()` запускається при старті, видаляє файли `.json` і `.log` старші 7 днів з `%TEMP%\whisper-mcp-jobs\`.
114
+ - `check_config` тепер повідомляє статус режиму конфіденційності.
115
+ - Журнал запуску повідомляє про увімкнення/вимкнення режиму конфіденційності.
112
116
 
113
- ## Заплановано — Архітектура конфіденційності (до міграції на Bun)
117
+ ### ✅ v2.4.0 — Посилення, захист тайм-ауту переднього плану, набір тестів і CI
114
118
 
115
- Ці зміни мають бути випущені до міграції на Bun і до будь-яких змін ліцензії, що сприяють комерційному або корпоративному прийняттю. Випуск інструментів корпоративного рівня без вирішених засобів захисту відповідності створює відповідальність для користувачів у регульованих галузях.
119
+ Прохід із безпеки/надійності; заплановану міграцію на Bun перенесено на v2.5.0.
116
120
 
117
- ### Змінна середовища `WHISPER_PRIVACY_MODE`
118
- Інструмент наразі гарантує, що жодне **аудіо** не покидає комп'ютер. Ця гарантія не поширюється на **текст транскрипції** — коли вміст транскрипції повертається в рядку у відповіді інструменту, цей текст опрацьовується API Claude і покидає локальне середовище.
121
+ **Безпека та коректність:**
122
+ - Виправлення утримання шляхів у `switch_model` — каталог із братнім префіксом (напр. `…\models-evil`) раніше міг задовольнити перевірку «всередині каталогу моделей» через наївний `startsWith`; замінено на нормалізоване утримання на основі `relative()`. Закриває витік, який описує SECURITY.md.
123
+ - Бар'єр конфіденційності/згоди ключований **за операцією** (інструмент + аргументи) — підтвердження однієї транскрипції більше не може задовольнити бар'єр іншої операції.
124
+ - `download_model` відхиляє обрізані завантаження (перевірка Content-Length) перед підвищенням файлу `.part`. (Повну перевірку дайджесту SHA256 заплановано на пізніший прохід.)
125
+ - Приведення вводу — числові параметри інструментів, які не є справжніми числами, відкидаються замість передавання до whisper-cli як `NaN`.
119
126
 
120
- Цей розрив невидимий для користувачів, які розумно тлумачать "дані не покидають ваш комп'ютер" як таке, що охоплює весь контент, отриманий з їхнього аудіо.
127
+ **Надійність:**
128
+ - **Захист тайм-ауту переднього плану** — файл, достатньо довгий, щоб перевищити ~4-хвилинний тайм-аут MCP-інструмента Claude Desktop у блокувальному режимі, виявляється заздалегідь і спрямовується у фоновий режим замість мовчазного завершення за тайм-аутом. Поріг налаштовується через `WHISPER_FOREGROUND_MAX_SEC`. Оцінки часу виправлено (стара оцінка GPU сильно занижувала; домінувальну вартість перезавантаження моделі тепер змодельовано — виміряно, а не вгадано).
129
+ - Атомарні записи стану завдань/пакетів (тимчасовий файл + перейменування), щоб паралельний читач не міг побачити розірваний файл JSON.
130
+ - Стійкі до колізій ідентифікатори завдань/пакетів/тимчасові (із суфіксом UUID).
131
+ - Коректне завершення за SIGINT/SIGTERM, яке очищає тимчасові файли блокувального режиму.
121
132
 
122
- Додати `WHISPER_PRIVACY_MODE` як змінну середовища у `claude_desktop_config.json`. При увімкненні:
123
- - Усі відповіді інструментів повертають лише метадані: ім'я файлу, тривалість, кількість слів, статус завершення
124
- - Жоден текст транскрипції не включається до жодної відповіді інструменту
125
- - Claude не може читати, аналізувати або передавати вміст транскрипції в жодній формі
126
- - Транскрипція існує лише як локальний `.txt`-файл
133
+ **Вибір пристрою GPU:**
134
+ - Змінна середовища `WHISPER_GPU_DEVICE`, а `gpu_device` тепер пробрасується через `generate_subtitles` і прохід визначення мови (раніше лише `transcribe_audio`). `check_config` повідомляє активний пристрій. `check_system` більше не повідомляє помилково про проблему драйвера, коли `wmic` (застарілий у Windows 11 24H2+) нічого не повертає.
127
135
 
128
- Це правильне рішення для медичних, юридичних, фінансових і корпоративних розгортань. Нуль викликів API, нуль передачі даних, нуль ризику відповідності.
136
+ **Якість:**
137
+ - Набір модульних тестів `node:test` над чистою логікою (утримання шляхів, ключування бар'єра, атомарні записи, приведення вводу, оцінка тайм-ауту), нуль доданих залежностей, плюс робочий процес CI GitHub Actions, що запускає його на кожному push/PR.
129
138
 
130
- ### Ворота згоди для вмісту транскрипції
131
- Коли `WHISPER_PRIVACY_MODE` не увімкнено (типово), будь-яка відповідь інструменту, що містить текст транскрипції, має передуватися повідомленням про розкриття інформації при першому використанні за сеанс. Це повідомлення має чітко передати, що текст транскрипції передається до API Anthropic, що це виходить за межі гарантії "дані не покидають ваш комп'ютер", і що користувачі, які працюють з регульованим контентом, мають перевірити зобов'язання відповідності перед продовженням.
132
-
133
- Реалізація: змінна середовища `WHISPER_CONSENT_ACKNOWLEDGED` за замовчуванням `false`. При першому поверненні транскрипції за сеанс, якщо не підтверджено, Claude представляє повідомлення про розкриття і просить явного підтвердження. Після підтвердження для сеансу наступні транскрипції повертаються без повторного запиту.
134
-
135
- ### Документація `PRIVACY.md`
136
- Створити `PRIVACY.md` у кореневій теці репозиторію:
137
- - Які дані завжди залишаються локально: аудіо, відео, файли моделей
138
- - Які дані можуть покидати локальне середовище (за замовчуванням): текст транскрипції у відповідях інструментів
139
- - Які дані ніколи не покидають локальне середовище (з режимом конфіденційності): все
140
- - Настанови щодо відповідності за галуззю (HIPAA, GDPR, адвокатська таємниця, FERPA, SOX, PCI-DSS, NDA/комерційна таємниця)
141
- - Як налаштувати режим конфіденційності
142
- - Відмова від відповідальності: автори інструменту не є юридичними радниками
143
-
144
- ### Попередження конфіденційності у схемі інструментів
145
- Оновити описи інструментів `ListToolsRequestSchema`, включивши примітку про конфіденційність для будь-якого інструменту, що повертає текст транскрипції. Це відображається в описах інструментів Claude Desktop і підвищує обізнаність у точці використання.
146
-
147
- ### Автоматичне очищення тимчасової теки
148
- `%TEMP%\whisper-mcp-jobs\` накопичує файли стану завдань і журнали з часом. Додати автоматичне очищення завершених файлів завдань після налаштованого вікна збереження (типово: 7 днів). Наразі вимагає ручного `Remove-Item` від користувача.
139
+ **Визначено для майбутнього випуску:** шлях постійної моделі (напр. `whisper-server` від whisper.cpp), щоб усунути вартість перезавантаження моделі, яка сплачується при кожній транскрипції — велике підвищення пропускної здатності для пакетної/архівної роботи.
149
140
 
150
141
  ---
151
142
 
152
- ## Заплановано — Міграція на Bun
143
+ ## Заплановано — v2.5.0: Міграція на Bun
153
144
 
154
- Перенести середовище виконання з Node.js на [Bun](https://bun.sh) після завершення архітектури конфіденційності і до додавання функцій v2.3.0.
145
+ Перенести середовище виконання з Node.js на [Bun](https://bun.sh).
155
146
 
156
147
  Оскільки Claude Desktop запускає MCP-сервер заново при кожному запуску сеансу, час запуску знаходиться на критичному шляху. Bun виконує TypeScript нативно без кроку компіляції, запускається значно швидше за Node і має швидший введення-виведення.
157
148
 
@@ -167,30 +158,25 @@
167
158
  - Уся поведінка інструментів і формати виводу
168
159
  - Конфігурація Claude Desktop для кінцевих користувачів
169
160
 
170
- **Чому після конфіденційності, до v2.3.0:** Кодова база найлегше піддається міграції зараз. Міграція після додавання більшої кількості інструментів лише збільшує поверхню без вигоди. Архітектура конфіденційності має бути реалізована першою, як зазначено вище.
171
-
172
161
  ---
173
162
 
174
- ## Ліцензування
163
+ ## Заплановано — v2.6.0: Розширені формати виводу для інтеграції зовнішніх інструментів
175
164
 
176
- whisper-windows-mcp використовує подвійну ліцензію.
165
+ Розширена підтримка форматів виводу, орієнтована на робочі процеси аналізу нижнього рівня та інтеграції. Точний обсяг буде визначено на основі відгуків користувачів після v2.3.0.
177
166
 
178
- **Некомерційне використання:** MIT — безкоштовно для особистого, освітнього та некомерційного використання. Дивіться [LICENSE](LICENSE).
179
-
180
- **Комерційне використання:** Необхідна окрема комерційна ліцензійна угода. Дивіться [LICENSE-COMMERCIAL.md](LICENSE-COMMERCIAL.md).
181
-
182
- `WHISPER_PRIVACY_MODE` для регульованих галузей розробляється і планується у майбутньому релізі. Дивіться [PRIVACY.md](PRIVACY.md) для поточних рекомендацій.
167
+ ---
183
168
 
184
- ## Заплановано — v2.3.0: Розширення форматів виводу
169
+ ## Заплановано — v2.7.0: Режим живого транскрибування з мікрофона
185
170
 
186
- ### Формат субтитрів VTT
187
- Вивід WebVTT (`.vtt`) разом з SRT. VTT — веб-стандарт, що використовується YouTube, HTML5 `<video>` і більшістю сучасних програвачів. whisper-cli підтримує його нативно. Додати `vtt` як дійсний формат виводу у `transcribe_audio`, `generate_subtitles` і `spawnDetached`. Оновити `buildArgs` і всі відповідні схеми інструментів, README і багатомовну документацію.
171
+ Транскрибування в реальному часі з живого мікрофонного входу. Потокова передача аудіо з вибраного пристрою запису до whisper частинами із поверненням поточних сегментів транскрипції по мірі їх завершення.
188
172
 
189
- ### Формат LRC
190
- Вивід у форматі LRC (`.lrc`) текстів пісень/караоке через `-olrc`. Використовується медіапрогравачами для синхронізованого відображення текстів. Нульові витрати на реалізацію — рідний прапорець CLI.
173
+ **Обмеження проєктування:**
174
+ - Вибір пристрою має бути явним — без тихого захоплення пристрою за замовчуванням
175
+ - Користувач має мати можливість зупинити потік через взаємодію з Claude Desktop
176
+ - Не повинно конфліктувати з обмеженням одного екземпляра whisper одночасно
177
+ - Компроміс між затримкою і точністю має бути налаштовуваним користувачем
191
178
 
192
- ### Формат CSV
193
- Вивід CSV (`.csv`) через `-ocsv`. Структуровані табличні дані з часовою розміткою сегментів — корисні для аналізу нижнього рівня, робочих процесів вирівнювання кліпів та імпорту в табличні інструменти. Нульові витрати на реалізацію — рідний прапорець CLI.
179
+ **Статус:** Фаза проєктування. Залежить від стабільного потокового API у whisper.cpp.
194
180
 
195
181
  ---
196
182
 
@@ -225,7 +211,7 @@ whisper-windows-mcp використовує подвійну ліцензію.
225
211
  ### Розрізнення доповідачів (pyannote-audio)
226
212
  Повне розрізнення доповідачів у моно з мітками ID доповідача — позначає переходи між доповідачами по всьому запису незалежно від конфігурації каналів. Відрізняється від вбудованого стерео-прапорця `--diarize` (v2.2.0) і TinyDiarize.
227
213
 
228
- **Реалізація:** Потребує [pyannote-audio](https://github.com/pyannote/pyannote-audio) — бібліотеки на основі Python з вимогою токена доступу до моделей Hugging Face. Повністю окремий стек залежностей від конвеєра whisper.cpp.
214
+ **Реалізація:** Потребує [pyannote-audio](https://github.com/pyannote/pyannote-audio) — бібліотеки на основі Python з вимогою токена доступу до моделей Hugging Face. Повністю окремий стек залежностей.
229
215
 
230
216
  **Статус:** Необов'язкова розширена функція з власною документацією з налаштування. Не входить до основного пакету.
231
217
 
@@ -247,27 +233,33 @@ whisper-windows-mcp використовує подвійну ліцензію.
247
233
 
248
234
  ---
249
235
 
236
+ ## Ліцензування
237
+
238
+ whisper-windows-mcp використовує подвійну ліцензію.
239
+
240
+ **Некомерційне використання:** MIT — безкоштовно для особистого, освітнього та некомерційного використання. Дивіться [LICENSE](LICENSE).
241
+
242
+ **Комерційне використання:** Необхідна окрема комерційна ліцензійна угода для будь-якого бізнес-, професійного або комерційного використання. Дивіться [COMMERCIAL-LICENSE.md](COMMERCIAL-LICENSE.md) для умов та контактної інформації.
243
+
244
+ ---
245
+
250
246
  ## Поширення
251
247
 
252
- Доступно на [npm](https://www.npmjs.com/package/whisper-windows-mcp), [mcpservers.org](https://mcpservers.org) і [Glama](https://glama.ai).
248
+ Доступно на [npm](https://www.npmjs.com/package/whisper-windows-mcp), [mcpservers.org](https://mcpservers.org), [Glama](https://glama.ai) і [awesome-mcp-servers](https://github.com/punkpeye/awesome-mcp-servers).
253
249
 
254
250
  ---
255
251
 
256
252
  ## Багатомовна документація
257
253
 
258
- Документація японською, корейською, в'єтнамською, індонезійською та українською мовами підтримується паралельно з англійською. Після кожного релізу необхідно оновлювати такі файли відповідно до англійської документації:
254
+ Після кожного релізу необхідно оновлювати такі файли відповідно до англійської документації:
259
255
 
260
- **Японська (`*.ja.md`)**
261
- - `README.ja.md` / `TROUBLESHOOTING.ja.md` / `ROADMAP.ja.md` / `PRIVACY.ja.md` / `SECURITY.ja.md`
256
+ **Японська (`*.ja.md`)** — `README.ja.md` / `TROUBLESHOOTING.ja.md` / `ROADMAP.ja.md` / `PRIVACY.ja.md` / `SECURITY.ja.md`
262
257
 
263
- **Корейська (`*.ko.md`)**
264
- - `README.ko.md` / `TROUBLESHOOTING.ko.md` / `ROADMAP.ko.md` / `PRIVACY.ko.md` / `SECURITY.ko.md`
258
+ **Корейська (`*.ko.md`)** — `README.ko.md` / `TROUBLESHOOTING.ko.md` / `ROADMAP.ko.md` / `PRIVACY.ko.md` / `SECURITY.ko.md`
265
259
 
266
- **В'єтнамська (`*.vi.md`)**
267
- - `README.vi.md` / `TROUBLESHOOTING.vi.md` / `ROADMAP.vi.md` / `PRIVACY.vi.md` / `SECURITY.vi.md`
260
+ **В'єтнамська (`*.vi.md`)** — `README.vi.md` / `TROUBLESHOOTING.vi.md` / `ROADMAP.vi.md` / `PRIVACY.vi.md` / `SECURITY.vi.md`
268
261
 
269
- **Індонезійська (`*.id.md`)**
270
- - `README.id.md` / `TROUBLESHOOTING.id.md` / `ROADMAP.id.md` / `PRIVACY.id.md` / `SECURITY.id.md`
262
+ **Індонезійська (`*.id.md`)** — `README.id.md` / `TROUBLESHOOTING.id.md` / `ROADMAP.id.md` / `PRIVACY.id.md` / `SECURITY.id.md`
271
263
 
272
264
  **Українська (`*.uk.md`)** — `README.uk.md` / `TROUBLESHOOTING.uk.md` / `ROADMAP.uk.md` / `PRIVACY.uk.md` / `SECURITY.uk.md`
273
265
 
@@ -275,9 +267,9 @@ whisper-windows-mcp використовує подвійну ліцензію.
275
267
 
276
268
  **Іспанська (`*.es.md`)** — `README.es.md` / `TROUBLESHOOTING.es.md` / `ROADMAP.es.md` / `PRIVACY.es.md` / `SECURITY.es.md`
277
269
 
278
- **Polish (`*.pl.md`)** — `README.pl.md` / `TROUBLESHOOTING.pl.md` / `ROADMAP.pl.md` / `PRIVACY.pl.md` / `SECURITY.pl.md`
270
+ **Польська (`*.pl.md`)** — `README.pl.md` / `TROUBLESHOOTING.pl.md` / `ROADMAP.pl.md` / `PRIVACY.pl.md` / `SECURITY.pl.md`
279
271
 
280
- **Romanian (`*.ro.md`)** — `README.ro.md` / `TROUBLESHOOTING.ro.md` / `ROADMAP.ro.md` / `PRIVACY.ro.md` / `SECURITY.ro.md`
272
+ **Румунська (`*.ro.md`)** — `README.ro.md` / `TROUBLESHOOTING.ro.md` / `ROADMAP.ro.md` / `PRIVACY.ro.md` / `SECURITY.ro.md`
281
273
 
282
274
  Внески спільноти для інших мов вітаються.
283
275
 
package/ROADMAP.vi.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # whisper-windows-mcp — Lộ trình phát triển
2
2
 
3
- Phiên bản hiện tại: **v2.2.0**
3
+ Phiên bản hiện tại: **v2.4.0**
4
4
 
5
5
  ---
6
6
 
@@ -54,143 +54,133 @@ Kiến trúc tiến trình tách rời: `transcribe_audio` với `background=tru
54
54
  ### ✅ v2.0.0 — Đường dẫn an toàn Unicode + SRT nền
55
55
  **Tên tệp Unicode:** Tệp có ký tự không phải ASCII trong tên tệp gây ra phiên âm nền thất bại lặng lẽ. Đã sửa bằng cách định tuyến tất cả đầu ra qua đường dẫn tạm thời đã làm sạch dựa trên ID tác vụ, sau đó di chuyển kết quả đến đích chính xác sau khi hoàn thành.
56
56
 
57
- **SRT trong chế độ nền:** `spawnDetached` trước đây mã cứng `-otxt` bất kể định dạng được yêu cầu, và `generate_subtitles` chặn đồng bộ và bị timeout MCP 4 phút với tệp dài hơn. Đã sửa bằng cách thêm tham số `outputFormat` vào `spawnDetached`, hỗ trợ đầu ra `text` và `srt` trong chế độ nền.
57
+ **SRT trong chế độ nền:** `spawnDetached` trước đây mã cứng `-otxt` bất kể định dạng được yêu cầu. Đã sửa bằng cách thêm tham số `outputFormat` vào `spawnDetached`, hỗ trợ đầu ra `text` và `srt` trong chế độ nền.
58
58
 
59
59
  ### ✅ v2.0.1 — Sửa lỗi (đã gộp vào v2.2.0)
60
- - Mã cứng `--max-context 0` trong cả `buildArgs` và `spawnDetached` — ngăn vòng lặp ảo giác trên âm thanh dài. `--condition-on-previous-text` và `--no-context` không phải flag hợp lệ trong tệp nhị phân hiện tại (thế hệ v1.8.3) — `--max-context N` là flag đúng.
60
+ - Mã cứng `--max-context 0` trong cả `buildArgs` và `spawnDetached` — ngăn vòng lặp ảo giác trên âm thanh dài.
61
61
  - Mã cứng `--no-speech-thold 0.6` trong cả hai hàm — xử lý các đoạn dưới ngưỡng tin cậy là im lặng thay vì nội dung ảo giác.
62
62
  - Xác thực đường dẫn (`validateInputPath`) — từ chối đường dẫn UNC và duyệt `..`.
63
63
  - Bảo vệ kích thước tệp `MAX_FILE_SIZE_MB = 10240`.
64
64
  - Chú thích bảo mật tiêm nhiễm phiên âm trong `transcribeSingle`.
65
- - Sửa lệnh CLI batch bị hỏng trong TROUBLESHOOTING.md — ghi lại phương pháp chuyển đổi FFmpeg đúng và cách dùng `Start-Process -RedirectStandardOutput`.
65
+ - Sửa lệnh CLI batch bị hỏng trong TROUBLESHOOTING.md.
66
66
 
67
67
  ### ✅ v2.1.0 — Bộ quản lý mô hình (đã gộp vào v2.2.0)
68
68
  - Thay đổi `WHISPER_MODEL` từ `const` sang `let` (có thể thay đổi trong phiên).
69
69
  - `MODEL_REGISTRY` — 16 mô hình, biến thể độ chính xác đầy đủ và lượng tử hóa, URL tải xuống Hugging Face.
70
70
  - `ALLOWED_HF_PREFIXES` — danh sách URL cho phép giới hạn tải xuống vào namespace `ggerganov/whisper.cpp` và `ggml-org`.
71
71
  - Công cụ `list_models` — quét thư mục mô hình, hiển thị mô hình đang hoạt động, kích thước, trường hợp sử dụng, các tải xuống có sẵn.
72
- - Công cụ `download_model` — tải xuống từ Hugging Face qua `https` tích hợp sẵn của Node.js, đổi tên nguyên tử (sửa race condition giải phóng file handle Windows).
72
+ - Công cụ `download_model` — tải xuống từ Hugging Face qua `https` tích hợp sẵn của Node.js, đổi tên nguyên tử.
73
73
  - Công cụ `switch_model` — xác thực phần mở rộng `.bin`, ràng buộc thư mục, kiểm tra khóa tiến trình.
74
74
  - Cập nhật `recommendedModel()` để đề xuất `large-v3-turbo` cho VRAM 6GB+.
75
75
 
76
- ### ✅ v2.2.0 — Mở rộng chất lượng, tham số và phần cứng (hiện tại)
76
+ ### ✅ v2.2.0 — Mở rộng chất lượng, tham số và phần cứng
77
77
  - Interface `WhisperOptions` thay thế đối số vị trí trong `buildArgs`.
78
78
  - Tham số mới trong `transcribe_audio`: `temperature`, `prompt`, `condition_on_prev_text`, `no_speech_thold`, `beam_size`, `best_of`, `gpu_device`, `processors`, `word_timestamps`, `max_segment_length`, `split_on_word`, `diarize`, `vad_model`, `offset_t`, `duration`.
79
79
  - Tham số mới trong `generate_subtitles`: `temperature`, `prompt`, `beam_size`, `best_of`, `diarize`, `vad_model`.
80
80
  - Tái cấu trúc `spawnDetached` — tất cả flag chất lượng giờ được áp dụng trong chế độ nền/đợt.
81
- - Cập nhật `runSrtPass` để chấp nhận `extraOpts`.
82
- - Sửa đầu ra đợt — `readBatchProgress` giờ di chuyển đầu ra tạm thời đến đích cuối cùng trước khi xác nhận (nguyên nhân gốc của tất cả kết quả "thất bại" trong đợt).
81
+ - Sửa đầu ra đợt — `readBatchProgress` giờ di chuyển đầu ra tạm thời đến đích cuối cùng trước khi xác nhận.
83
82
 
84
- **Lưu ý tương thích flag:** `gpu_device` / `-g` được thêm trong whisper.cpp v1.8.4. Tệp nhị phân Vulkan đã biên dịch sẵn trong các bản phát hành là thế hệ v1.8.3 — tham số này được công cụ chấp nhận nhưng sẽ không có hiệu lực cho đến khi người dùng cập nhật lên tệp nhị phân v1.8.4+.
83
+ **Lưu ý tương thích flag:** `gpu_device` / `--device` được thêm trong whisper.cpp v1.8.4. Tệp nhị phân Vulkan đã biên dịch sẵn trong các bản phát hành là thế hệ v1.8.3 — tham số này được công cụ chấp nhận nhưng sẽ không có hiệu lực cho đến khi người dùng cập nhật lên tệp nhị phân v1.8.4+.
85
84
 
86
- **Flag hợp lệ đã xác nhận trong tệp nhị phân hiện tại (thế hệ v1.8.3):**
87
- `--max-context`, `--no-speech-thold`, `--processors`, `--offset-t`, `--duration`, `--best-of`, `--beam-size`, `--diarize`, `--tinydiarize`, `--temperature`, `--prompt`, flag VAD.
85
+ ### ✅ v2.2.2 — Bản vá
86
+ - Sửa cấp phép kép — chỉnh sửa LICENSE và LICENSE-COMMERCIAL.md.
87
+ - Sửa lỗi tài liệu nhỏ.
88
88
 
89
- **Không có trong tệp nhị phân hiện tại:** `--no-context` (dùng `--max-context 0`), `--condition-on-previous-text` (chỉ là tên Python API), `--gpu-device` / `-g` (v1.8.4+).
89
+ ### ✅ v2.3.0 — Tự động tiến đợt, kiến trúc quyền riêng tư, mở rộng định dạng đầu ra
90
90
 
91
- ---
92
-
93
- ## Lỗi nghiêm trọng — Tự động tiến đợt (đã xác nhận, chờ sửa)
94
-
95
- ### Đợt không tự động tiến khi không có polling tích cực
96
-
97
- `start_batch` không tự chủ tiến queue giữa các tệp. Đợt chỉ tiến khi `check_batch_progress` được gọi. Không có polling, đợt dừng vô thời hạn sau mỗi tệp — whisper-cli.exe thoát, không có tiến trình mới được tạo, queue không tiến.
91
+ **Tự động tiến đợt (sửa lỗi nghiêm trọng):** `start_batch` trước đây yêu cầu polling tích cực để tiến queue. Giờ mỗi tiến trình con whisper-cli được tạo ra đều có handler `on('exit')` được gắn vào. Khi tiến trình thoát, đợt ngay lập tức tự động tiến qua exit callback — không tốn chi phí polling và API. Mutex ngăn tạo kép giữa exit handler + lệnh gọi `check_batch_progress` đồng thời.
98
92
 
99
- Điều này phá vỡ mục tiêu thiết kế cốt lõi là xử lý hàng loạt qua đêm không giám sát, và trực tiếp vi phạm nguyên tắc thiết kế giảm thiểu lệnh gọi Claude API. Một đợt 95 tệp clip ngắn yêu cầu khoảng 200 lệnh gọi polling trong 100 phút để hoàn thành.
93
+ **Kiến trúc quyền riêng tư:**
94
+ - Biến môi trường `WHISPER_PRIVACY_MODE` — khi đặt thành `true`, tất cả phản hồi công cụ chỉ trả về siêu dữ liệu (tên tệp, số từ, đường dẫn lưu). Không có văn bản phiên âm nào được gửi đến API của Claude. Bản phiên âm chỉ tồn tại dưới dạng tệp cục bộ.
95
+ - Biến môi trường `WHISPER_CONSENT_ACKNOWLEDGED` — khi đặt thành `true`, bỏ qua cổng đồng ý phiên một lần cho nội dung không nhạy cảm.
96
+ - Tham số `privacy_mode` theo từng lệnh gọi trong `transcribe_audio`, `transcribe_batch`, `start_batch`, `check_progress`. Ghi đè biến môi trường toàn cục theo cả hai hướng. Không cần khởi động lại để bật/tắt.
97
+ - Cổng chế độ quyền riêng tư (`checkPrivacyGate()`) — chạy trước mỗi thao tác khi chế độ quyền riêng tư hiệu quả đang hoạt động. Kích hoạt lần đầu gọi (hiển thị công khai), giải phóng lần gọi thứ hai (cho phép). Đặt lại sau mỗi thao tác. Hoàn toàn độc lập với cổng đồng ý phiên.
98
+ - Cổng đồng ý phiên (`transcriptPolicy()`) — chạy một lần mỗi phiên trước lệnh gọi trả về phiên âm đầu tiên ở chế độ tiêu chuẩn. Tiêu thụ bằng flag `sessionConsentGiven`.
99
+ - `PRIVACY.md` — tài liệu tuân thủ đầy đủ bao gồm HIPAA, GDPR, đặc quyền luật sư-khách hàng, FERPA, SOX, PCI-DSS, NDA/bí mật thương mại.
100
+ - Cảnh báo quyền riêng tư trong mô tả công cụ của tất cả công cụ trả về văn bản phiên âm.
100
101
 
101
- **Nguyên nhân gốc:** `readBatchProgress` chứa tất cả logic tiến queue. Nó chỉ thực thi khi `check_batch_progress` được gọi rõ ràng. Không có bộ đếm thời gian nền, trình theo dõi tệp hay vòng lặp tự chủ.
102
+ **Mở rộng định dạng đầu ra:**
103
+ - `vtt` — đầu ra phụ đề WebVTT qua `-ovtt`. Có sẵn trong `transcribe_audio`, `generate_subtitles`, `start_batch` và chế độ nền.
104
+ - `lrc` — định dạng lời bài hát/karaoke LRC qua `-olrc`. Có sẵn trong `transcribe_audio` và chế độ nền.
105
+ - `csv` — CSV có dấu thời gian qua `-ocsv`. Có sẵn trong `transcribe_audio` và chế độ nền.
106
+ - Giá trị mặc định `output_format` thay đổi từ `"text"` sang `"timestamps"` trên tất cả công cụ và đường dẫn mã. Văn bản thuần túy giờ là tùy chọn.
102
107
 
103
- **Sửa đã lên kế hoạch — Tùy chọn B (exit callback, mạnh mẽ khuyến nghị):** Gắn handler `on('exit')` vào tiến trình con whisper-cli đã tạo. Khi tiến trình thoát, ngay lập tức gọi logic tiến để xác nhận đầu ra và tạo tác vụ tiếp theo. Dựa trên sự kiện, kích hoạt chính xác một lần mỗi lần hoàn thành tệp, không tốn chi phí polling và API.
108
+ **Sửa lỗi:**
109
+ - Lỗi 1: `output_format` không được truyền đến tác vụ nền — mặc định `"text"` được dùng bất kể định dạng được yêu cầu. Đã sửa bằng cách thay đổi mặc định thành `"timestamps"` và truyền đúng cách.
110
+ - Lỗi 2: `catch {}` im lặng trên thao tác di chuyển đầu ra tác vụ nền nuốt lỗi thất bại. Thêm kiểm tra `existsSync` rõ ràng sau khi di chuyển với thông báo thất bại chi tiết.
111
+ - Lỗi 3: Thêm chú thích thiết kế tại điểm tạo nền giải thích tại sao cổng đồng ý được trì hoãn có chủ ý đến `check_progress` cho tác vụ nền không riêng tư.
104
112
 
105
- **Tùy chọn A (chỉ dự phòng):** `setInterval` nền với khoảng polling dựa trên thời lượng được suy ra từ dữ liệu thời lượng FFprobe đã có trong JSON trạng thái đợt. Kích thước tệp không phải là đại diện đáng tin cậy cho thời lượng.
106
-
107
- **Ràng buộc bổ sung:** Bản sửa không được tạo whisper-cli.exe thứ hai khi đã có một tiến trình đang chạy — khóa tiến trình phải được tôn trọng trong đường dẫn tự động tiến.
108
-
109
- **Giải pháp tạm thời (hiện tại):** Gọi `check_batch_progress` lặp lại cho đến khi đợt hoàn thành. Cần khoảng một lần polling mỗi tệp.
110
-
111
- ---
113
+ **Bổ sung:**
114
+ - Tự động dọn dẹp thư mục tạm thời — `cleanupOldJobFiles()` chạy khi khởi động xóa tệp `.json` và `.log` cũ hơn 7 ngày trong `%TEMP%\whisper-mcp-jobs\`.
115
+ - `check_config` giờ báo cáo trạng thái chế độ quyền riêng tư.
116
+ - Báo cáo bật/tắt chế độ quyền riêng tư trong nhật ký khởi động.
117
+ - Trường `privacyMode: boolean` được thêm vào interface `Job`.
118
+ - Trường `privacyMode: boolean` được thêm vào interface `BatchState`.
119
+ - Kiểu `BackgroundFormat` loại trừ `json` (json trong chế độ nền không được hỗ trợ — dự phòng về `text`).
112
120
 
113
- ## Đã lên kế hoạch — Kiến trúc quyền riêng tư (trước khi chuyển đổi Bun)
121
+ ### ✅ v2.4.0 — Tăng cường, bộ bảo vệ thời gian chờ tiền cảnh, bộ kiểm thử & CI
114
122
 
115
- Những thay đổi này phải được phát hành trước khi chuyển đổi Bun và trước bất kỳ thay đổi giấy phép nào tạo điều kiện cho việc áp dụng thương mại hoặc doanh nghiệp. Phát hành công cụ cấp doanh nghiệp mà không có các biện pháp bảo vệ tuân thủ đã được giải quyết tạo ra trách nhiệm pháp lý cho người dùng trong các ngành được quản lý.
123
+ Một lượt rà soát bảo mật/độ bền; việc chuyển đổi Bun đã lên kế hoạch được dời sang v2.5.0.
116
124
 
117
- ### Biến môi trường `WHISPER_PRIVACY_MODE`
118
- Công cụ hiện đảm bảo không có **âm thanh** nào rời khỏi máy. Nó không mở rộng đảm bảo này cho **văn bản phiên âm** — khi nội dung phiên âm được trả về trong phản hồi công cụ, văn bản đó được xử lý bởi API của Claude và rời khỏi môi trường cục bộ.
125
+ **Bảo mật & tính đúng đắn:**
126
+ - Sửa lỗi giới hạn đường dẫn của `switch_model` — một thư mục có tiền tố-anh em (ví dụ `…\models-evil`) trước đây có thể thỏa mãn kiểm tra "bên trong thư mục mô hình" thông qua `startsWith` ngây thơ; được thay bằng giới hạn chuẩn hóa dựa trên `relative()`. Đóng lỗ hổng thoát mà SECURITY.md mô tả.
127
+ - Cổng quyền riêng tư/đồng ý được khóa **theo từng thao tác** (công cụ + đối số) — việc xác nhận một phiên âm không còn có thể thỏa mãn cổng của một thao tác khác.
128
+ - `download_model` từ chối các lượt tải bị cắt cụt (kiểm tra Content-Length) trước khi thăng cấp tệp `.part`. (Việc xác minh đầy đủ digest SHA256 được theo dõi cho một lượt sau.)
129
+ - Ép kiểu đầu vào — các tham số công cụ dạng số nhưng không phải số thực sự sẽ bị loại bỏ thay vì được chuyển cho whisper-cli dưới dạng `NaN`.
119
130
 
120
- Khoảng cách này vô hình với người dùng hợp lý hiểu "không có dữ liệu nào rời khỏi máy" bao gồm tất cả nội dung được tạo ra từ âm thanh của họ.
131
+ **Độ bền:**
132
+ - **Bộ bảo vệ thời gian chờ tiền cảnh** — một tệp đủ dài để vượt quá thời gian chờ công cụ MCP ~4 phút của Claude Desktop ở chế độ chặn được phát hiện trước và được định tuyến sang nền thay vì âm thầm hết thời gian chờ. Ngưỡng có thể cấu hình qua `WHISPER_FOREGROUND_MAX_SEC`. Ước tính thời gian đã được sửa (ước tính GPU cũ dự đoán thiếu nghiêm trọng; chi phí tải lại mô hình chiếm ưu thế nay đã được mô hình hóa — đo lường, không phải phỏng đoán).
133
+ - Ghi trạng thái công việc/đợt theo kiểu nguyên tử (tệp tạm + đổi tên) để một trình đọc đồng thời không thể quan sát thấy tệp JSON bị rách.
134
+ - ID công việc/đợt/tạm chống xung đột (có hậu tố UUID).
135
+ - Tắt nhẹ nhàng khi nhận SIGINT/SIGTERM, dọn dẹp các tệp tạm của chế độ chặn.
121
136
 
122
- Thêm `WHISPER_PRIVACY_MODE` như biến môi trường trong `claude_desktop_config.json`. Khi được bật:
123
- - Tất cả phản hồi công cụ chỉ trả về siêu dữ liệu: tên tệp, thời lượng, số từ, trạng thái hoàn thành
124
- - Không có văn bản phiên âm nào được bao gồm trong bất kỳ phản hồi công cụ nào
125
- - Claude không thể đọc, phân tích hoặc chuyển tiếp nội dung phiên âm dưới bất kỳ hình thức nào
126
- - Bản phiên âm chỉ tồn tại dưới dạng tệp `.txt` cục bộ
137
+ **Lựa chọn thiết bị GPU:**
138
+ - Biến môi trường `WHISPER_GPU_DEVICE`, và `gpu_device` nay được truyền qua `generate_subtitles` và lượt phát hiện ngôn ngữ (trước đây chỉ `transcribe_audio`). `check_config` báo cáo thiết bị đang hoạt động. `check_system` không còn báo cáo sai sự cố trình điều khiển khi `wmic` (đã ngừng dùng trên Windows 11 24H2+) không trả về gì.
127
139
 
128
- Đây là giải pháp đúng cho triển khai y tế, pháp lý, tài chính và doanh nghiệp. Không lệnh gọi API, không truyền dữ liệu, không rủi ro tuân thủ.
140
+ **Chất lượng:**
141
+ - Một bộ kiểm thử đơn vị `node:test` trên phần logic thuần túy (giới hạn đường dẫn, khóa cổng, ghi nguyên tử, ép kiểu đầu vào, ước tính thời gian chờ), không thêm phụ thuộc, cùng với quy trình CI GitHub Actions chạy nó trên mỗi push/PR.
129
142
 
130
- ### Cổng đồng ý cho nội dung phiên âm
131
- Khi `WHISPER_PRIVACY_MODE` không được bật (mặc định), bất kỳ phản hồi công cụ nào bao gồm văn bản phiên âm phải có thông báo tiết lộ ở lần sử dụng đầu tiên trong mỗi phiên. Thông báo tiết lộ phải truyền đạt rõ ràng rằng văn bản phiên âm được truyền đến API của Anthropic, rằng điều này nằm ngoài đảm bảo "không có dữ liệu nào rời khỏi máy", và rằng người dùng xử lý nội dung được quản lý phải xác nhận nghĩa vụ tuân thủ trước khi tiếp tục.
132
-
133
- Triển khai: biến môi trường `WHISPER_CONSENT_ACKNOWLEDGED` mặc định là `false`. Ở lần trả về phiên âm đầu tiên trong phiên, nếu chưa được xác nhận, Claude trình bày thông báo tiết lộ và yêu cầu xác nhận rõ ràng. Sau khi được xác nhận trong phiên, các bản phiên âm tiếp theo được trả về mà không cần nhắc lại.
134
-
135
- ### Tài liệu `PRIVACY.md`
136
- Tạo `PRIVACY.md` trong thư mục gốc repo bao gồm:
137
- - Dữ liệu luôn ở cục bộ: tệp âm thanh, video, mô hình
138
- - Dữ liệu có thể rời khỏi cục bộ (mặc định): văn bản phiên âm trong phản hồi công cụ
139
- - Dữ liệu không bao giờ rời khỏi cục bộ (với chế độ riêng tư): tất cả
140
- - Hướng dẫn khung tuân thủ theo ngành (HIPAA, GDPR, đặc quyền luật sư-khách hàng, FERPA, SOX, PCI-DSS, NDA/bí mật thương mại)
141
- - Cách cấu hình chế độ riêng tư
142
- - Tuyên bố miễn trách nhiệm rằng tác giả công cụ không phải là cố vấn pháp lý
143
-
144
- ### Cảnh báo riêng tư trong schema công cụ
145
- Cập nhật mô tả công cụ `ListToolsRequestSchema` để bao gồm ghi chú riêng tư trên bất kỳ công cụ nào trả về văn bản phiên âm. Điều này hiển thị trong mô tả công cụ của Claude Desktop và tạo nhận thức tại điểm sử dụng.
146
-
147
- ### Tự động dọn dẹp thư mục tạm thời
148
- `%TEMP%\whisper-mcp-jobs\` tích lũy tệp trạng thái tác vụ và nhật ký theo thời gian. Thêm tự động dọn dẹp tệp tác vụ hoàn thành sau khoảng thời gian lưu giữ có thể cấu hình (mặc định: 7 ngày). Hiện tại yêu cầu người dùng chạy `Remove-Item` thủ công.
143
+ **Đã xác định cho bản phát hành tương lai:** một đường dẫn mô hình bền vững (ví dụ `whisper-server` của whisper.cpp) để loại bỏ chi phí tải lại mô hình phải trả ở mỗi lần phiên âm — một mức tăng thông lượng lớn cho công việc theo đợt/lưu trữ.
149
144
 
150
145
  ---
151
146
 
152
- ## Đã lên kế hoạch — Chuyển đổi Bun
147
+ ## Đã lên kế hoạch — v2.5.0: Chuyển đổi Bun
153
148
 
154
- Chuyển đổi runtime từ Node.js sang [Bun](https://bun.sh) sau khi kiến trúc quyền riêng tư hoàn thành và trước khi thêm tính năng v2.3.0.
149
+ Chuyển đổi runtime từ Node.js sang [Bun](https://bun.sh).
155
150
 
156
- Vì Claude Desktop tạo máy chủ MCP mới khi khởi động mỗi phiên, thời gian khởi động nằm trên đường dẫn quan trọng. Bun chạy TypeScript gốc không cần bước biên dịch, khởi động nhanh hơn đáng kể so với Node và có I/O nhanh hơn.
151
+ Claude Desktop tạo máy chủ MCP mới vào mỗi lần khởi động phiên, vì vậy thời gian khởi động nằm trên đường dẫn quan trọng. Bun chạy TypeScript gốc mà không cần bước biên dịch, khởi động nhanh hơn đáng kể so với Node và I/O cũng nhanh hơn.
157
152
 
158
153
  **Những gì thay đổi:**
159
- - Loại bỏ bước build `tsc` và thư mục `dist/`
160
- - Người dùng chạy trực tiếp source TypeScript
154
+ - Bước biên dịch `tsc` và thư mục `dist/` bị xóa
155
+ - Người dùng chạy mã nguồn TypeScript trực tiếp
161
156
  - `tsconfig.json` trở thành tùy chọn
162
157
  - Cập nhật script `package.json`
163
- - Cập nhật quy trình publish npm
158
+ - Cập nhật quy trình phát hành npm
164
159
 
165
160
  **Những gì không thay đổi:**
166
- - Source code `src/index.ts` — Bun tương thích với TypeScript hiện có và API tích hợp sẵn của Node.js
161
+ - Mã nguồn `src/index.ts` — Bun tương thích với TypeScript hiện tại và các API tích hợp sẵn của Node.js
167
162
  - Tất cả hành vi công cụ và định dạng đầu ra
168
163
  - Cấu hình Claude Desktop cho người dùng cuối
169
164
 
170
- **Tại sao sau riêng tư, trước v2.3.0:** Codebase ở trạng thái dễ chuyển đổi nhất ngay bây giờ. Chuyển đổi sau khi thêm công cụ chỉ tăng khối lượng công việc mà không có lợi ích. Kiến trúc quyền riêng tư phải ra mắt trước như đã lưu ý ở trên.
171
-
172
165
  ---
173
166
 
174
- ## Giấy phép
167
+ ## Đã lên kế hoạch — v2.6.0: Định dạng đầu ra nâng cao cho tích hợp công cụ bên ngoài
175
168
 
176
- whisper-windows-mcp được cấp phép kép.
169
+ Hỗ trợ định dạng đầu ra mở rộng nhắm đến quy trình phân tích và tích hợp downstream. Phạm vi chính xác sẽ được xác định dựa trên phản hồi của người dùng sau v2.3.0.
177
170
 
178
- **Sử dụng phi thương mại:** MIT — miễn phí cho mục đích cá nhân, giáo dục và phi thương mại. Xem [LICENSE](LICENSE).
179
-
180
- **Sử dụng thương mại:** Cần có thỏa thuận giấy phép thương mại riêng. Xem [LICENSE-COMMERCIAL.md](LICENSE-COMMERCIAL.md).
181
-
182
- `WHISPER_PRIVACY_MODE` cho triển khai trong ngành được quản lý đang được phát triển và dự kiến trong phiên bản tương lai. Xem [PRIVACY.md](PRIVACY.md) để biết hướng dẫn hiện tại.
171
+ ---
183
172
 
184
- ## Đã lên kế hoạch — v2.3.0: Mở rộng định dạng đầu ra
173
+ ## Đã lên kế hoạch — v2.7.0: Chế độ phiên âm microphone trực tiếp
185
174
 
186
- ### Định dạng phụ đề VTT
187
- Đầu ra WebVTT (`.vtt`) cùng với SRT. VTT là tiêu chuẩn web được YouTube, HTML5 `<video>` và hầu hết các trình phát hiện đại sử dụng. whisper-cli hỗ trợ gốc. Thêm `vtt` như định dạng đầu ra hợp lệ trong `transcribe_audio`, `generate_subtitles` và `spawnDetached`. Cập nhật `buildArgs` và tất cả schema công cụ liên quan, README và tài liệu đa ngôn ngữ.
175
+ Phiên âm theo thời gian thực từ đầu vào microphone trực tiếp. Phát trực tuyến âm thanh theo từng đoạn từ thiết bị ghi âm được chọn đến whisper, trả về các đoạn phiên âm đã hoàn thành theo cách cuộn.
188
176
 
189
- ### Định dạng LRC
190
- Đầu ra định dạng LRC (`.lrc`) lời bài hát/karaoke qua `-olrc`. Được dùng bởi các trình phát phương tiện để hiển thị lời bài hát đồng bộ. Chi phí triển khai bằng không — flag CLI gốc.
177
+ **Ràng buộc thiết kế:**
178
+ - Lựa chọn thiết bị phải rõ ràng — không tự động thu microphone mặc định im lặng
179
+ - Người dùng phải có thể dừng luồng qua tương tác Claude Desktop
180
+ - Không được vi phạm ràng buộc một phiên bản whisper tại một thời điểm
181
+ - Đánh đổi giữa độ trễ và độ chính xác phải có thể cấu hình bởi người dùng
191
182
 
192
- ### Định dạng CSV
193
- Đầu ra CSV (`.csv`) qua `-ocsv`. Dữ liệu bảng có cấu trúc với thời gian đoạn — hữu ích cho phân tích downstream, quy trình căn chỉnh clip và nhập vào công cụ bảng tính. Chi phí triển khai bằng không — flag CLI gốc.
183
+ **Trạng thái:** Giai đoạn thiết kế. Phụ thuộc vào API phát trực tuyến ổn định của whisper.cpp.
194
184
 
195
185
  ---
196
186
 
@@ -225,7 +215,7 @@ Cho người dùng quản lý các dự án chỉnh sửa video lớn với thư
225
215
  ### Phân tách người nói (pyannote-audio)
226
216
  Phân tách người nói mono đầy đủ với nhãn ID người nói — đánh dấu chuyển đổi người nói trong toàn bộ bản ghi bất kể cấu hình kênh. Khác với flag `--diarize` stereo tích hợp (v2.2.0) và TinyDiarize.
227
217
 
228
- **Triển khai:** Cần [pyannote-audio](https://github.com/pyannote/pyannote-audio) — thư viện dựa trên Python với yêu cầu token truy cập mô hình Hugging Face. Stack phụ thuộc hoàn toàn riêng biệt so với pipeline whisper.cpp.
218
+ **Triển khai:** Cần [pyannote-audio](https://github.com/pyannote/pyannote-audio) — thư viện dựa trên Python với yêu cầu token truy cập mô hình Hugging Face. Stack phụ thuộc hoàn toàn riêng biệt.
229
219
 
230
220
  **Trạng thái:** Tính năng nâng cao tùy chọn với tài liệu cài đặt riêng. Không bao gồm trong gói chính.
231
221
 
@@ -247,15 +237,25 @@ Pipeline hậu xử lý:
247
237
 
248
238
  ---
249
239
 
240
+ ## Giấy phép
241
+
242
+ whisper-windows-mcp được cấp phép kép.
243
+
244
+ **Sử dụng phi thương mại:** MIT — miễn phí cho mục đích cá nhân, giáo dục và phi thương mại. Xem [LICENSE](LICENSE).
245
+
246
+ **Sử dụng thương mại:** Cần có thỏa thuận giấy phép thương mại riêng cho bất kỳ mục đích kinh doanh, chuyên nghiệp hoặc tạo doanh thu nào. Xem [COMMERCIAL-LICENSE.md](COMMERCIAL-LICENSE.md).
247
+
248
+ ---
249
+
250
250
  ## Phân phối
251
251
 
252
- Có sẵn trên [npm](https://www.npmjs.com/package/whisper-windows-mcp), [mcpservers.org](https://mcpservers.org) và [Glama](https://glama.ai).
252
+ Có sẵn trên [npm](https://www.npmjs.com/package/whisper-windows-mcp), [mcpservers.org](https://mcpservers.org), [Glama](https://glama.ai) và [awesome-mcp-servers](https://github.com/punkpeye/awesome-mcp-servers) (PR đã gửi).
253
253
 
254
254
  ---
255
255
 
256
256
  ## Tài liệu đa ngôn ngữ
257
257
 
258
- Tài liệu tiếng Nhật, tiếng Hàn và tiếng Việt được duy trì song song với tiếng Anh. Các tệp sau phải được cập nhật để khớp với tài liệu tiếng Anh sau mỗi bản phát hành:
258
+ Sau mỗi bản phát hành, các tệp sau phải được cập nhật để khớp với tài liệu tiếng Anh:
259
259
 
260
260
  **Tiếng Nhật (`*.ja.md`)** — `README.ja.md` / `TROUBLESHOOTING.ja.md` / `ROADMAP.ja.md` / `PRIVACY.ja.md` / `SECURITY.ja.md`
261
261
 
@@ -271,9 +271,9 @@ Tài liệu tiếng Nhật, tiếng Hàn và tiếng Việt được duy trì so
271
271
 
272
272
  **Tiếng Tây Ban Nha (`*.es.md`)** — `README.es.md` / `TROUBLESHOOTING.es.md` / `ROADMAP.es.md` / `PRIVACY.es.md` / `SECURITY.es.md`
273
273
 
274
- **Polish (`*.pl.md`)** — `README.pl.md` / `TROUBLESHOOTING.pl.md` / `ROADMAP.pl.md` / `PRIVACY.pl.md` / `SECURITY.pl.md`
274
+ **Tiếng Ba Lan (`*.pl.md`)** — `README.pl.md` / `TROUBLESHOOTING.pl.md` / `ROADMAP.pl.md` / `PRIVACY.pl.md` / `SECURITY.pl.md`
275
275
 
276
- **Romanian (`*.ro.md`)** — `README.ro.md` / `TROUBLESHOOTING.ro.md` / `ROADMAP.ro.md` / `PRIVACY.ro.md` / `SECURITY.ro.md`
276
+ **Tiếng Romania (`*.ro.md`)** — `README.ro.md` / `TROUBLESHOOTING.ro.md` / `ROADMAP.ro.md` / `PRIVACY.ro.md` / `SECURITY.ro.md`
277
277
 
278
278
  Chào mừng đóng góp cộng đồng cho các ngôn ngữ khác.
279
279