3.1 KiB
3.1 KiB
Obsidian Voice Notes — плагин голосовых заметок
Что это
Плагин Obsidian: запись голоса с телефона или десктопа → отправка файлом во внешний сервис распознавания → текст в заметку. Mobile-first: основной сценарий — iPhone, десктоп получает то же.
Стек и ограничения
- TypeScript, esbuild (стандартный шаблон obsidian-sample-plugin), vitest для тестов.
isDesktopOnly: falseв manifest.json. Никакого Node API (fs,child_process,path), только Web API и API Obsidian (requestUrl,app.vault).- Запись:
MediaRecorder. Форматы на входе различаются: iOS даёт audio/mp4, Android — audio/webm, десктоп — webm/ogg. Провайдер должен принимать все три или конвертировать. - Отправка файлом, без стриминга.
Архитектура
src/core/— чистый TypeScript без импортов изobsidian: машина состояний записи (created → saved → sent → transcribed → inserted, ветки на потерю сети и обрыв записи), очередь отправки, провайдеры распознавания, формирование markdown-заметки. Покрывается vitest полностью.src/obsidian/— тонкая обёртка: команды, настройки, UI, работа с vault. Юнит-тестов нет, проверяется руками в тестовом vault.- Провайдер — интерфейс с реализациями:
openai-compatible(AITUNNEL по умолчанию; Groq, OpenAI, whisper на VPS — тот же код, другой URL) и при необходимостиyandex. Переключение на следующего провайдера по 403/таймауту. - Ключи API — в настройках плагина (
data.json), в git не попадают.
Команды
npm run dev— сборка в watch-режиме в тестовый vault.npm test— vitest, вся папкаtests/. Зелёным считается весь набор.npm run build— продакшн-сборкаmain.js.
Тесты
- Golden-тесты:
tests/fixtures/<name>.m4a+tests/fixtures/<name>.txt(эталонный транскрипт). Провайдер в тестах мокается; golden-файлы проверяют формирование заметки и обработку ответа, а не сам сервис. - Тестовый vault:
<путь укажите>— синхронизируется между Mac и телефоном.
Первая подсистема
Жизненный цикл записи и очередь (core), затем провайдер, затем обёртка. Тестовая инфраструктура — Task 1 первого плана.