О проекте
Команда: Сэндвич
Кейс HackAlem.ai: Инновации — Самрук-Казына
Стадия: Рабочий MVP
Задача кейса: «Хаттама»: протокол и поручения по аудиозаписи совещания (каз./рус./смешанная речь)
Суть
Локальная система «аудио совещания → расшифровка → протокол и поручения» для русской, казахской и смешанной речи. Секретарь проверяет каждое поручение по исходной реплике и аудио и выгружает протокол в PDF/DOCX/JSON/CSV/ICS.
Как устроено
Запись с микрофона комнатной станции (Radxa Cubie A7A) или загруженный файл передаётся по взаимному TLS на локальный вычислитель (MacBook Air M5). Там FFmpeg готовит аудио, Whisper распознаёт речь, Sherpa размечает говорящих, Qwen3.5 4B через Ollama извлекает решения, поручения, ответственных и сроки с учётом поздних уточнений и сверяет факты с цитатами. Результат возвращается на станцию, где секретарь правит поручения, а правки сохраняются версиями. Архив шифруется gocryptfs, HTTPS обеспечивает Caddy. Проект построен на основе Scriberr (Go).
Ключевые решения
- Whisper
- Sherpa speaker diarization
- Qwen3.5 4B via Ollama
- mutual TLS
- gocryptfs
- human-in-the-loop review
- source-linked action items
Особенности
Полностью локальная обработка без облачного ИИ с архитектурой «аппаратная станция + вычислитель»: очередь переживает недоступность Mac, между устройствами mTLS, архив зашифрован. Поручения привязаны к исходной реплике и моменту в аудио, поздняя передача задачи другому человеку учитывается. Основа — форк open-source Scriberr.
Стек
Go · Python · TypeScript · React · Swift · Docker · Caddy · FFmpeg · Ollama
Модели
Whisper · Qwen3.5 4B · Ollama · Sherpa
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-207ff40c-team.
README
README.md
Как это работает · Безопасность · Установка · Результаты проверок · Требования кейса
Meeting Station
Из записи совещания — в протокол, который можно проверить. Meeting Station готовит расшифровку, краткое содержание и таблицу поручений. Секретарь открывает исходную реплику, прослушивает аудио, уточняет ответственного и срок, затем сохраняет проверенную версию для выгрузки.

Решение кейса Самрук-Казына по автоматизации протоколов совещаний · проект MEET-BOX
Пока протокол пишут вручную, поручения легко потерять: срок изменили в конце встречи, ответственного заменили, а в итоговом документе осталось первое решение. Кейс Самрук-Казына добавляет важное условие: распознавать русский, казахский и смешанную речь без передачи аудио и текста во внешние облачные ИИ-сервисы.
Мы оставляем запись, модели и проверку на локальном оборудовании. Секретарь начинает с черновика и его источников, а не восстанавливает всё совещание с нуля.
Как это работает
- Добавьте запись. Загрузите аудио или видео либо запишите встречу через микрофон комнатной станции. До начала записи и ИИ-расшифровки уведомите участников.
- Получите расшифровку. Локальная модель Whisper переводит речь в текст. При включённом разделении говорящих Sherpa добавляет метки голосов; секретарь сопоставляет их с людьми.
- Откройте черновик. Локальная модель Qwen выделяет решения, поручения, названных ответственных и сроки. В отчёте также есть краткое содержание, темы, открытые вопросы и риски.
- Проверьте источник. Ссылка у поручения открывает подтверждающую реплику и переводит аудиоплеер к нужному моменту. Исходная расшифровка остаётся доступной.
- Уточните результат. Исправьте поручение, отклоните его или добавьте пропущенное со ссылкой на реплику. Сохраните новую версию с именем проверяющего, временем и комментарием к правкам.
- Выгрузите протокол. Доступны PDF, DOCX, JSON, CSV и календарный файл задач. Все форматы используют одни и те же проверенные записи.
Обработка начинается после завершения записи. На комнатной станции также предусмотрен браузер для онлайн-совещаний: подключение зависит от допуска организатором и прав учётной записи. При импорте готового текста распознавание речи и разделение говорящих пропускаются.
Если поручение изменилось во время встречи
«Дана отправит отчёт в пятницу».
Позже: «Отчётом займётся Тимур. Срок — понедельник».
Обработка идёт по порядку реплик и учитывает поздние уточнения. Ожидаемый результат — одно поручение Тимуру со сроком «понедельник». Конкретную календарную дату секретарь подтверждает при проверке источника.
Если ответственного или срока не было, поле остаётся пустым. Локальная модель сверяет извлечённые факты с цитатами и отмечает проблемы или недоступность проверки. Она тоже может ошибиться, поэтому аудио и возможность исправления доступны рядом с результатом.
Извлечение и проверки · Правила сохранения правок · Поля отчёта
Интерфейс: импорт → расшифровка → проверка → сохранённый протокол
Снимки настоящего приложения на явно синтетическом примере. При съёмке проверялись локальные запросы, редактирование, сохранение и повторное открытие; речевые и языковые модели не запускались. Нажмите на изображение, чтобы рассмотреть его.
![]() 1. Добавить совещание | ![]() 2. Открыть источник |
![]() 3. Проверить и исправить | ![]() 4. Сохранить и выгрузить |
Происхождение изображений и запись проверки
Два устройства в одной локальной сети
Комнатная станция — небольшой компьютер, постоянно подключённый к микрофону в переговорной. Он записывает встречу, хранит очередь обработки и архив. Для этой роли мы используем Radxa Cubie A7A — одноплатный компьютер.
Локальный вычислитель — компьютер, который запускает ресурсоёмкие ИИ-модели. В описанной установке это Mac в той же частной сети. Браузер обращается к станции, станция передаёт запись на Mac и сохраняет полученный отчёт у себя.
| Устройство в описанной установке | За что отвечает |
|---|---|
| Radxa Cubie A7A · 6 ГБ ОЗУ · Debian 11 | Веб-интерфейс, запись с микрофона, постоянная очередь, архив и браузер для онлайн-совещаний. |
| MacBook Air M5 · 16 ГБ памяти | Подготовка аудио через FFmpeg, распознавание Whisper, разделение говорящих Sherpa, Qwen3.5 4B и формирование документов. |
Зачем разделять эти роли? Запись и доступ к архиву остаются в переговорной, а память и мощность для моделей предоставляет вычислитель. Если Mac временно недоступен, работающая и разблокированная станция сохраняет записи в очереди. После восстановления связи обработка продолжается. Готовые протоколы доступны со станции и без вычислителя.
После перезагрузки станции для автоматического открытия зашифрованного архива нужен включённый Mac с выполненным входом в систему и доступом к локальной сети. Запуск и восстановление описаны в руководстве эксплуатации. Для знакомства с приложением можно запустить обе роли на одном компьютере, без покупки платы.
Комнатная станция: концепт корпуса и вид со всех сторон
![]() | ![]() |
Предоставленные участником концепты дизайна. Это не проверенные CAD-модели и не свидетельство испытаний оборудования. Происхождение иллюстраций.
Архитектура приложения · Аппаратная установка · Сервис станции · Вычислитель
Безопасность
Локальная обработка — только начало. В настроенной аппаратной установке защищены также сетевые соединения и сохранённые данные совещаний.
- Браузер → станция: HTTPS. Собственный центр сертификации подтверждает подлинность станции. Защищённые cookie, ограничения загрузки ресурсов с других источников и запрет кеширования ответов API защищают браузерную сессию.
- Станция ↔ вычислитель: взаимный TLS. Оба устройства предъявляют сертификаты; дополнительно используется отдельный токен вычислителя. Станция проверяет центр сертификации и адрес Mac, а Mac требует доверенный клиентский сертификат. Неверные удостоверения отклоняются, перехода на незашифрованный HTTP нет.
- Архив: шифрование содержимого и имён файлов. Хранилище gocryptfs защищает записи, расшифровки, документы, базы данных, профиль браузера и секреты доступа. Пока оно заблокировано, сервисы не запускаются. Пароль хранилища не остаётся на плате; в описанной установке диск Mac защищён FileVault.
- Модели: только локальные. Ollama принимает запросы на внутреннем адресе Mac. Модели устанавливаются заранее; автоматической отправки во внешний ИИ-сервис нет. Запросы к вычислителю отклоняют публичные адреса, перенаправления и прокси из переменных окружения.
Защита и восстановление доступа · Создание сертификатов · Настройка HTTPS · Защита запуска хранилища
Это меры аппаратного развёртывания: запуск на одном компьютере использует HTTP только на 127.0.0.1 и сам не создаёт зашифрованное хранилище. Загрузка зависимостей и моделей выполняется при установке; онлайн-совещания подключаются к своему провайдеру. Проверку сертификатов нельзя отключать; сертификаты устройств нужно обновлять до истечения 90 дней.
Шифрование защищает передачу и заблокированный архив. Администратор или вредоносная программа на разблокированном устройстве всё ещё могут получить доступ к данным. Общий токен станции пока не заменяет персональные роли, а история правок не является неизменяемым журналом аудита.
Установка
Выберите подходящий вариант. Файлы моделей, сертификаты и приватная конфигурация устройств не входят в репозиторий.
| Вариант | Что потребуется | Инструкция |
|---|---|---|
| Один компьютер | Python 3.11+, Node 22.12+, FFmpeg, локальные модели речи и разделения голосов, Ollama. Для установки моделей описан путь на Python 3.12. | Локальный запуск |
| Комнатная станция + Mac | Те же ресурсы для моделей, подготовленная Radxa, версия Go из go.mod и сертификаты устройств. | Установка станции |
Для первого варианта по инструкции установите зависимости, соберите интерфейс, создайте конфигурацию и подготовьте модели. Затем из корня репозитория:
.venv/bin/python scripts/run-local.py doctor
.venv/bin/python scripts/run-local.py start
Откройте http://127.0.0.1:8766/meeting-intelligence и введите созданный токен станции. Загрузите запись без чувствительных данных, включите разделение говорящих, проверьте исходные реплики и скачанные PDF/DOCX. О недостающих моделях приложение сообщает явно.
Подготовка и лицензии моделей · Диагностика установки
Проверки и результаты
23 сентября 2026 года после исправления технических замечаний получены следующие результаты. Команды, журналы и хеши файлов указывают проверенный код и окружение.
| Проверка | Зафиксированный результат |
|---|---|
| Тесты станции и вычислителя | 237 пройдено |
| Проверки ошибок в браузере | 33 пройдено |
| Полные сценарии проверки и экспорта | 2 пройдено, включая независимую проверку содержимого PDF/DOCX |
| Сохранённые Python-компоненты / приложение macOS / инструменты разработки | 95 / 16 / 34 пройдено |
| Сохранённая реализация на Go | Полный набор тестов с детектором гонок пройден |
| Интерфейс | Сборки обоих вариантов и статическая проверка пройдены |
Для повторения: make verify; для сохранённых компонентов дополнительно — make verify-go и make verify-native на macOS. Зависимости и тестовый Chromium должны быть уже установлены. Проверки используют синтетические данные и имитацию ответов моделей; качество распознавания языков они не измеряют.
Ранее выполненные аппаратные измерения · 11 сентября 2026 года
| Проверенный сценарий | Результат |
|---|---|
| Синтетическая английская запись длительностью 120 секунд → локальная обработка → четыре формата экспорта; HTTPS, взаимный TLS и зашифрованное хранение включены | 62,567 секунды |
| Перезагрузка Radxa → восстановление сайта, архива, связи с Mac и браузера совещаний | 80,745 секунды; сохранённый PDF не изменился |
| Отрицательные проверки TLS | Отклонены подключения без сертификата, с недоверенным центром, неверным именем сервера и неподходящим назначением сертификата |
Это результаты предыдущей установки на указанных устройствах, а не новый замер текущих исправлений. Чистая английская запись и один запуск не доказывают точность на русском/казахском или производительность на длинных встречах.
Журнал аппаратных испытаний · Измерения защиты · Оценка распознавания
Что ещё предстоит проверить
Нужны репрезентативные русские, казахские и смешанные записи, включая одновременную речь, а также запуск моделей с физически отключённым интернетом. Метки голосов различают говорящих; имена подтверждает человек. Работа с Google Meet описана в прежнем аппаратном журнале; подключение к реальным Zoom и Teams ещё не подтверждено.
Редактирование, история версий и экспорт PDF/DOCX реализованы. Формальный выпуск протокола, персональные роли, автоматические напоминания, связи поручений между совещаниями и интеграция с СЭД остаются дальнейшими задачами. Календарный экспорт создаёт файл, но не рассылает уведомления.
Покрытие требований кейса · Реестр исправлений 72 замечаний · Материалы для оценки
Лицензия и авторство
MIT. Meeting Station использует серверную основу Scriberr и сохраняет её уведомления об авторских правах и лицензию. Станция, локальный вычислитель и процесс проверки описаны в реестре вклада и заимствований. У моделей и изображений отдельные условия использования. Символика Самрук-Казына обозначает владельца задачи хакатона.
Для обсуждения установки создайте обращение в репозитории: укажите языки совещаний и доступное оборудование. Не публикуйте записи, расшифровки и секреты доступа.
Авторы коммитов
История коммитов
- 2026-09-23 18:02Merge remote-tracking branch 'origin/main'Agzam
- 2026-09-23 18:00Обновить русский интерфейс станции и снимки READMEAgzam
- 2026-09-23 18:00agasAgzam
- 2026-09-23 17:46Restore local history and preserve current project stateNurkhan
- 2026-09-23 17:43tryyyAgzam
- 2026-09-23 17:40maybe finalAgzam
- 2026-09-23 17:36afasfasAgzam
- 2026-09-23 17:28pelaseeeeeAgzam
Все коммиты (15)
- 2026-09-23 17:23almost finalAgzam
- 2026-09-23 16:16Merge remote main historyNurkhan
- 2026-09-23 16:15stuffNurkhan
- 2026-09-23 16:09overwriteAgzam
- 2026-09-23 15:53readme updatedAgzam
- 2026-09-23 15:08asgasgAgzam
- 2026-09-23 11:21adgagAgzam
Структура репозитория (696 файлов)
.agents/skills/hackathon-build/SKILL.md .agents/skills/hackathon-review/SKILL.md .agents/skills/hackathon-scout/SKILL.md .agents/skills/hackathon-select/SKILL.md .air.toml .dockerignore .env.example .github/FUNDING.yml .github/workflows/submission-checks.yml .gitignore .golangci.yml .goreleaser.yaml .npmrc .prettierignore .prettierrc .python-version AGENTS.md CNAME Dockerfile Dockerfile.cuda Dockerfile.cuda.12.9 LICENSE Makefile README.md START_HERE.md a7a-bottom.webp api-docs/API_DOCS.md api-docs/docs.go api-docs/swagger.json api-docs/swagger.yaml assets/scriberr-logo.svg backend/.env.example backend/README.md backend/meetingbox/__init__.py backend/meetingbox/config.py backend/meetingbox/engine.py backend/meetingbox/inference.py backend/meetingbox/main.py backend/meetingbox/models.py backend/meetingbox/recorder.py backend/meetingbox/store.py backend/meetingbox/worker.py backend/pyproject.toml backend/tests/test_hub.py backend/tests/test_native_contract.py brief.json build.sh checks.json cmd/scriberr-cli/main.go cmd/server/main.go cropped-main-logo.png cropped-thumb.png deploy/mac/com.meeting-intelligence.startup.plist.example deploy/mac/com.meeting-intelligence.worker.plist.example deploy/mac/inference-local.sb deploy/meeting-browser/README.md deploy/meeting-browser/activate.sh deploy/meeting-browser/browser_auth.py deploy/meeting-browser/controller.py deploy/meeting-browser/join.js deploy/meeting-browser/launch.sh deploy/meeting-browser/meeting-browser.service deploy/meeting-browser/provision.sh deploy/meeting-browser/tests/test_capture_recovery.py deploy/meeting-browser/tests/test_join_page.py deploy/radxa/Caddyfile.station.example deploy/radxa/activate-station.sh deploy/radxa/docker-compose.yml deploy/radxa/install-station.sh deploy/radxa/lock-vault.sh deploy/radxa/meeting-station.service deploy/radxa/restore-carelink.sh deploy/radxa/scriberr-station.service deploy/radxa/unlock-vault.sh deploy/radxa/vault-required.conf docker-compose.blackwell.yml docker-compose.build.blackwell.yml docker-compose.build.cuda.yml docker-compose.build.yml docker-compose.cuda.yml docker-compose.yml docker-entrypoint.sh docs/ACCURACY.md docs/APPLIANCE_ARCHITECTURE.md docs/ARCHITECTURE.md docs/ATTRIBUTION.md docs/CHALLENGE.md docs/CNAME docs/DECISION.md docs/DEMO.md docs/DEVELOPMENT.md docs/EXPERIMENT.md docs/FOUNDATION_FIXES.md docs/HANDOFF.md docs/HARNESS_TEST_LOG.txt docs/LOCAL_SETUP.md docs/MEETINGBOX_ARCHITECTURE.md docs/MEETINGBOX_CLIENT.md docs/MODEL_SETUP.md docs/PREVIOUS_README.md docs/README.md docs/REQUIREMENTS.md docs/REVIEW_CASES.md docs/RUNBOOK.md docs/SECURITY.md docs/SPRINT.md docs/STATION_SETUP.md docs/SUBMISSION_NOTES.md docs/TECHNICAL_REVIEW.md docs/VALIDATION.md docs/VERIFICATION.md docs/api.html docs/api/swagger.json docs/api/undocumented.json docs/assets/DocsLayout-GqKUjnoJ.js docs/assets/Window-DF2NPLXn.js docs/assets/api-BI0bFv_E.js docs/assets/changelog-qdngCJYo.js docs/assets/docs/configuration-DfPPue_1.js docs/assets/docs/contributing-CiDZvzN1.js docs/assets/docs/features-CAg870sO.js docs/assets/docs/installation-B28K7cdK.js docs/assets/docs/intro-D21Ml_gl.js docs/assets/docs/usage-D6VpAVAT.js docs/assets/index-Y03hbhXZ.js docs/assets/readme/01-import.png docs/assets/readme/02-transcript.png docs/assets/readme/03-review.png docs/assets/readme/04-reviewed-minutes.png docs/assets/readme/README.md docs/assets/readme/capture-receipt.json docs/assets/readme/hero.svg docs/assets/readme/local-architecture.svg docs/assets/readme/meet-box-wordmark.png docs/assets/readme/samruk-kazyna-logo.jpg docs/assets/readme/security.svg docs/assets/readme/station-enclosure-concept.png docs/assets/readme/station-turntable.gif docs/assets/styles-B3t5QDqx.css docs/assets/styles-CUNhQwI0.js docs/changelog.html docs/docs/configuration.html docs/docs/contributing.html docs/docs/features.html docs/docs/index.html docs/docs/installation.html docs/docs/intro.html docs/docs/usage.html docs/history/Makefile.scriberr docs/history/README.md docs/history/workflows/ci.yaml docs/history/workflows/project-website.yml docs/history/workflows/release.yml docs/index.html docs/screenshots/Screenshot 2025-08-26 at 12.25.27 PM (2).png docs/screenshots/Scriberr-transcription profiles for handling different transcription configurations .png docs/screenshots/scriberr-Ollama openAI llm providers for chat and summarization.png docs/screenshots/scriberr-annotate transcript and take notes.png docs/screenshots/scriberr-api-key-management.png docs/screenshots/scriberr-chat-with-your-recording-transcript.png docs/screenshots/scriberr-diarization-setup.png docs/screenshots/scriberr-download-transcript-in-different-formats.png docs/screenshots/scriberr-fine tune advanced transcription parameters as you see fit to improve transcription quality.png docs/screenshots/scriberr-homepage.png docs/screenshots/scriberr-inbuilt audio recorder for directly recording and transcribing audio within the app.png docs/screenshots/scriberr-manage api keys.png docs/screenshots/scriberr-summarize transcripts.png docs/screenshots/scriberr-transcript page.png docs/screenshots/scriberr-youtube-video.png docs/scriberr-logo.png docs/scriberr-thumb.png docs/tooling.md docs/verification/changed-files.txt docs/verification/foundations-20260923/README.md docs/verification/foundations-20260923/changed-files.txt docs/verification/foundations-20260923/go-initial.txt docs/verification/foundations-20260923/go.txt docs/verification/foundations-20260923/native.txt docs/verification/foundations-20260923/source-manifest.json docs/verification/foundations-20260923/verification.json docs/verification/foundations-20260923/verify-20260923T115136509866Z-4b60bb-00.txt docs/verification/foundations-20260923/verify-20260923T115136509866Z-4b60bb-01.txt docs/verification/foundations-20260923/verify-20260923T115136509866Z-4b60bb-02.txt docs/verification/foundations-20260923/verify-20260923T115136509866Z-4b60bb-03.txt docs/verification/foundations-20260923/verify-20260923T115136509866Z-4b60bb-04.txt docs/verification/foundations-20260923/verify-20260923T115136509866Z-4b60bb-05.txt docs/verification/foundations-20260923/verify-20260923T115136509866Z-4b60bb-06.txt docs/verification/foundations-20260923/verify-20260923T115136509866Z-4b60bb-07.txt docs/verification/review-20260923/verification-20260923T102002343181Z-2628c8.json docs/verification/review-20260923/verify-20260923T102002343181Z-2628c8-00.txt docs/verification/review-20260923/verify-20260923T102002343181Z-2628c8-01.txt docs/verification/review-20260923/verify-20260923T102002343181Z-2628c8-02.txt docs/verification/review-20260923/verify-20260923T102002343181Z-2628c8-03.txt docs/verification/review-20260923/verify-20260923T102002343181Z-2628c8-04.txt docs/verification/review-20260923/verify-20260923T102002343181Z-2628c8-05.txt docs/verification/synthetic-missed-action.docx docs/verification/synthetic-missed-action.pdf docs/verification/synthetic-review-desktop.png docs/verification/synthetic-review.docx docs/verification/synthetic-review.pdf docs/verification/ui-refresh-20260923/verification.json docs/verification/ui-refresh-20260923/verify-20260923T125531833115Z-652916-00.txt docs/verification/ui-refresh-20260923/verify-20260923T125531833115Z-652916-01.txt docs/verification/ui-refresh-20260923/verify-20260923T125531833115Z-652916-02.txt docs/verification/ui-refresh-20260923/verify-20260923T125531833115Z-652916-03.txt docs/verification/ui-refresh-20260923/verify-20260923T125531833115Z-652916-04.txt docs/verification/ui-refresh-20260923/verify-20260923T125531833115Z-652916-05.txt docs/verification/ui-refresh-20260923/verify-20260923T125531833115Z-652916-06.txt docs/verification/ui-refresh-20260923/verify-20260923T125531833115Z-652916-07.txt docs/verification/verification-20260923T093456358250Z-5e27cb.json docs/verification/verification-20260923T095442120502Z-b47d75.json docs/verification/verify-20260923T093456358250Z-5e27cb-00.txt docs/verification/verify-20260923T093456358250Z-5e27cb-01.txt docs/verification/verify-20260923T093456358250Z-5e27cb-02.txt docs/verification/verify-20260923T093456358250Z-5e27cb-03.txt docs/verification/verify-20260923T095442120502Z-b47d75-00.txt docs/verification/verify-20260923T095442120502Z-b47d75-01.txt docs/verification/verify-20260923T095442120502Z-b47d75-02.txt docs/verification/verify-20260923T095442120502Z-b47d75-03.txt docs/verification/verify-20260923T095442120502Z-b47d75-04.txt docs/verification/verify-20260923T095442120502Z-b47d75-05.txt engine/README.md engine/meetingbox_engine/__init__.py engine/meetingbox_engine/audio.py engine/meetingbox_engine/config.py engine/meetingbox_engine/diarize.py engine/meetingbox_engine/main.py engine/meetingbox_engine/pdf.py engine/meetingbox_engine/reasoner.py engine/pyproject.toml engine/tests/test_engine.py evals/README.md evals/cases.jsonl evals/config.json go.mod go.sum internal/api/admission_deletion_regression_test.go internal/api/chat_handlers.go internal/api/cli_auth_handlers.go internal/api/cli_install_handlers.go internal/api/cli_security_test.go internal/api/constants.go internal/api/deletion_ownership_regression_test.go internal/api/handlers.go internal/api/log_handler.go internal/api/notes_handlers.go internal/api/openai_handler.go internal/api/regression_test.go internal/api/router.go internal/api/speaker_mapping_handlers.go internal/api/station_mode.go internal/api/station_mode_test.go internal/api/summarize_handlers.go internal/api/summary_handlers.go internal/api/types.go internal/audio/aup_parser.go internal/audio/merger.go internal/auth/auth.go internal/cli/client.go internal/cli/config.go internal/cli/login.go internal/cli/root.go internal/cli/security_test.go internal/cli/service.go internal/cli/watch.go internal/config/config.go internal/database/database.go internal/dropzone/README.md internal/dropzone/dropzone.go internal/dropzone/dropzone_test.go internal/interfaces/auth.go internal/interfaces/processor.go internal/interfaces/queue.go internal/llm/ollama.go internal/llm/openai.go internal/llm/service.go internal/models/auth.go internal/models/note.go internal/models/summary.go internal/models/transcription.go internal/processing/multitrack_processor.go internal/queue/lifecycle_regression_test.go internal/queue/proc_kill_darwin.go internal/queue/proc_kill_linux.go internal/queue/proc_kill_windows.go internal/queue/queue.go internal/queue/queue_test.go internal/queue/regression_test.go internal/repository/implementations.go internal/repository/job_lookup.go internal/repository/lifecycle.go internal/repository/lifecycle_test.go internal/repository/repository.go internal/service/file_service.go internal/service/user_service.go internal/sse/broadcaster.go internal/sse/broadcaster_test.go internal/transcription/README.md internal/transcription/adapters/base_adapter.go internal/transcription/adapters/canary_adapter.go internal/transcription/adapters/contracts_test.go internal/transcription/adapters/openai_adapter.go internal/transcription/adapters/parakeet_adapter.go internal/transcription/adapters/py/README.md internal/transcription/adapters/py/nvidia/canary_transcribe.py internal/transcription/adapters/py/nvidia/parakeet_transcribe.py internal/transcription/adapters/py/nvidia/parakeet_transcribe_buffered.py internal/transcription/adapters/py/nvidia/pyproject.toml internal/transcription/adapters/py/nvidia/sortformer_diarize.py internal/transcription/adapters/py/nvidia/tests/test_canary_transcribe.py internal/transcription/adapters/py/nvidia/tests/test_parakeet_transcribe.py internal/transcription/adapters/py/nvidia/tests/test_parakeet_transcribe_buffered.py internal/transcription/adapters/py/nvidia/tests/test_sortformer_diarize.py internal/transcription/adapters/py/pyannote/pyannote_diarize.py internal/transcription/adapters/py/pyannote/pyproject.toml internal/transcription/adapters/py/pyannote/tests/test_pyannote_diarize.py internal/transcription/adapters/py/tests/test_adapter_contracts.py internal/transcription/adapters/py/voxtral/pyproject.toml internal/transcription/adapters/py/voxtral/voxtral_transcribe.py internal/transcription/adapters/py/voxtral/voxtral_transcribe_buffered.py internal/transcription/adapters/pyannote_adapter.go internal/transcription/adapters/sortformer_adapter.go internal/transcription/adapters/voxtral_adapter.go internal/transcription/adapters/whisperx_adapter.go internal/transcription/adapters_test.go internal/transcription/interfaces/interfaces.go internal/transcription/multitrack_admission_regression_test.go internal/transcription/multitrack_transcriber.go internal/transcription/pipeline/pipeline.go internal/transcription/pipeline_regression_test.go internal/transcription/queue_integration.go internal/transcription/quick_regression_test.go internal/transcription/quick_transcription.go internal/transcription/registry/registry.go internal/transcription/unified_service.go internal/transcription/webhook_integration_test.go internal/web/frontend/assets/index-Czw5UNl_.css internal/web/frontend/assets/index-Dz2_a66b.js internal/web/frontend/index.html internal/web/frontend/vite.svg internal/web/static.go internal/webhook/service.go internal/webhook/service_test.go lefthook.yml mac-worker/.env.example mac-worker/README.md mac-worker/pyproject.toml mac-worker/src/meeting_worker/__init__.py mac-worker/src/meeting_worker/asr.py mac-worker/src/meeting_worker/bundle.py mac-worker/src/meeting_worker/config.py mac-worker/src/meeting_worker/diarization.py mac-worker/src/meeting_worker/exports.py mac-worker/src/meeting_worker/local_audio.py mac-worker/src/meeting_worker/main.py mac-worker/src/meeting_worker/model_process.py mac-worker/src/meeting_worker/pipeline.py mac-worker/src/meeting_worker/protocol.py mac-worker/src/meeting_worker/report_language.py mac-worker/src/meeting_worker/review.py mac-worker/src/meeting_worker/schemas.py mac-worker/src/meeting_worker/sherpa_process.py mac-worker/src/meeting_worker/store.py mac-worker/tests/fixtures/protocol_verification.json mac-worker/tests/test_accuracy.py mac-worker/tests/test_diarization.py mac-worker/tests/test_exports.py mac-worker/tests/test_foundations.py mac-worker/tests/test_local_pipeline.py mac-worker/tests/test_protocol.py mac-worker/tests/test_review.py mac-worker/tests/test_security.py mac-worker/tests/test_station_contract.py mac-worker/tests/test_worker_api.py macos/Info.plist macos/Package.swift macos/Sources/MeetingBox/AppModel.swift macos/Sources/MeetingBox/Audio/AudioArchive.swift macos/Sources/MeetingBox/Audio/AudioPipeline.swift macos/Sources/MeetingBox/Audio/AudioTypes.swift macos/Sources/MeetingBox/Audio/MeetingAudioCapture.swift macos/Sources/MeetingBox/Audio/WhisperWorker.swift macos/Sources/MeetingBox/HubClient.swift macos/Sources/MeetingBox/MeetingBoxApp.swift macos/Sources/MeetingBox/MeetingRepository.swift macos/Sources/MeetingBox/Models.swift macos/Tests/MeetingBoxTests/AudioTests.swift macos/Tests/MeetingBoxTests/HubConfigurationTests.swift macos/Tests/MeetingBoxTests/RepositoryTests.swift pkg/downloader/downloader.go pkg/logger/logger.go pkg/middleware/auth.go pkg/middleware/compression.go pkg/middleware/compression_test.go requirements/validation.lock research/RIBLT_SPIKE.md research/SHORTLIST.md research/SOURCE_NOTES.md research/catalog.json screenshots/ai-summary.png screenshots/chat.png screenshots/hero.png screenshots/homepage-dark.png screenshots/homepage-light.png screenshots/homepage-mobile-dark.PNG screenshots/homepage-mobile.PNG screenshots/notes.png screenshots/transcript-dark-2.png screenshots/transcript-dark.png screenshots/transcript-light-2.png screenshots/transcript-light.png screenshots/transcript-mobile-dark.PNG screenshots/transcript-mobile.PNG scripts/AudioChecks.swift scripts/HubChecks.swift scripts/RepositoryChecks.swift scripts/backup-carelink.py scripts/build-mac.sh scripts/build-station.sh scripts/check-mac-core.sh scripts/check-regressions.py scripts/check-ui.py scripts/create-worker-pki.py scripts/evaluate.py scripts/harness.py scripts/measure-wer.py scripts/package-submission.py scripts/run-hub.sh scripts/run-local.py scripts/run-provisioned-mac.py scripts/station-vault.py state.json station/.env.example station/README.md station/pyproject.toml station/src/meeting_station/__init__.py station/src/meeting_station/browser.py station/src/meeting_station/config.py station/src/meeting_station/local.py station/src/meeting_station/main.py station/src/meeting_station/models.py station/src/meeting_station/recorder.py station/src/meeting_station/store.py station/src/meeting_station/worker.py station/tests/test_browser.py station/tests/test_capture_audio.py station/tests/test_join_controller.py station/tests/test_local.py station/tests/test_local_http.py station/tests/test_review_sync.py station/tests/test_startup.py station/tests/test_station.py station/tests/test_station_foundations.py tests/adapter_registration_test.go tests/api_chat_test.go tests/api_handlers_test.go tests/api_summary_test.go tests/api_user_test.go tests/auth_service_test.go tests/cli_handlers_test.go tests/database_test.go tests/llm_test.go tests/queue_test.go tests/security_test.go tests/test_evaluate.py tests/test_harness.py tests/test_helpers.go tests/transcription_service_test.go.old web/frontend/.gitignore web/frontend/README.md web/frontend/components.json web/frontend/e2e/playwright.config.ts web/frontend/e2e/regression-fixture.tsx web/frontend/e2e/regression.html web/frontend/e2e/regressions.config.ts web/frontend/e2e/regressions.spec.ts web/frontend/e2e/review.spec.ts web/frontend/eslint.config.js web/frontend/index.html web/frontend/package-lock.json web/frontend/package.json web/frontend/pnpm-lock.yaml web/frontend/pnpm-workspace.yaml web/frontend/public/station-mark.svg web/frontend/public/vite.svg web/frontend/src/App.css web/frontend/src/App.tsx web/frontend/src/assets/react.svg web/frontend/src/components/AudioRecorder.tsx web/frontend/src/components/ChatInterface.tsx web/frontend/src/components/ChatSessionsSidebar.tsx web/frontend/src/components/DebouncedSearchInput.tsx web/frontend/src/components/DragDropOverlay.tsx web/frontend/src/components/Header.tsx web/frontend/src/components/Layout.tsx web/frontend/src/components/MergeStatusBadge.tsx web/frontend/src/components/ProductLogo.tsx web/frontend/src/components/ProtectedRoute.tsx web/frontend/src/components/SystemAudioRecorder.tsx web/frontend/src/components/ThemeSwitcher.tsx web/frontend/src/components/TranscribeDDialog.tsx web/frontend/src/components/TranscriptionConfigDialog.tsx web/frontend/src/components/audio/AudioPlayer.tsx web/frontend/src/components/audio/AudioVisualizer.tsx web/frontend/src/components/audio/EmberPlayer.tsx web/frontend/src/components/icons/WandAdvancedIcon.tsx web/frontend/src/components/layout/MainLayout.tsx web/frontend/src/components/station/StationBrand.tsx web/frontend/src/components/station/station-shell.css web/frontend/src/components/transcript/TranscriptToolbar.tsx web/frontend/src/components/transcript/TranscriptView.tsx web/frontend/src/components/transcription/FormHelpers.tsx web/frontend/src/components/transcription/TranscriptionConfigDialog.tsx web/frontend/src/components/ui/accordion.tsx web/frontend/src/components/ui/alert-dialog.tsx web/frontend/src/components/ui/button.tsx web/frontend/src/components/ui/card.tsx web/frontend/src/components/ui/checkbox.tsx web/frontend/src/components/ui/command.tsx web/frontend/src/components/ui/dialog.tsx web/frontend/src/components/ui/dropdown-menu.tsx web/frontend/src/components/ui/hover-card.tsx web/frontend/src/components/ui/input.tsx web/frontend/src/components/ui/label.tsx web/frontend/src/components/ui/popover.tsx web/frontend/src/components/ui/progress.tsx web/frontend/src/components/ui/select.tsx web/frontend/src/components/ui/separator.tsx web/frontend/src/components/ui/sidebar.tsx web/frontend/src/components/ui/slider.tsx web/frontend/src/components/ui/swipeable-item.tsx web/frontend/src/components/ui/switch.tsx web/frontend/src/components/ui/table.tsx web/frontend/src/components/ui/tabs.tsx web/frontend/src/components/ui/textarea.tsx web/frontend/src/components/ui/toast.tsx web/frontend/src/components/ui/tooltip.tsx web/frontend/src/contexts/ChatEventsContext.tsx web/frontend/src/contexts/GlobalUploadContext.tsx web/frontend/src/contexts/ThemeContext.tsx web/frontend/src/features/auth/components/CLIAuthConfirmation.tsx web/frontend/src/features/auth/components/Login.tsx web/frontend/src/features/auth/components/Register.tsx web/frontend/src/features/auth/components/StationAuth.tsx web/frontend/src/features/auth/hooks/useAuth.ts web/frontend/src/features/auth/store/authStore.ts web/frontend/src/features/meeting-intelligence/MeetingBrowserPanel.tsx web/frontend/src/features/meeting-intelligence/MeetingIntelligencePage.tsx web/frontend/src/features/meeting-intelligence/MeetingReviewPanel.tsx web/frontend/src/features/meeting-intelligence/api.ts web/frontend/src/features/meeting-intelligence/meeting-intelligence.css web/frontend/src/features/settings/components/APIKeyCreateDialog.tsx web/frontend/src/features/settings/components/APIKeyDisplayDialog.tsx web/frontend/src/features/settings/components/APIKeySettings.tsx web/frontend/src/features/settings/components/APIKeyTable.tsx web/frontend/src/features/settings/components/AccountSettings.tsx web/frontend/src/features/settings/components/CLISettingsTab.tsx web/frontend/src/features/settings/components/LLMSettings.tsx web/frontend/src/features/settings/components/ProfileSettings.tsx web/frontend/src/features/settings/components/ProfilesTable.tsx web/frontend/src/features/settings/components/SummaryTemplateDialog.tsx web/frontend/src/features/settings/components/SummaryTemplatesTable.tsx web/frontend/src/features/settings/pages/CLISettingsPage.tsx web/frontend/src/features/settings/pages/SettingsPage.tsx web/frontend/src/features/transcription/components/AudioDetailView.tsx web/frontend/src/features/transcription/components/AudioFilesTable.tsx web/frontend/src/features/transcription/components/ChatSidePanel.tsx web/frontend/src/features/transcription/components/Dashboard.tsx web/frontend/src/features/transcription/components/MultiTrackUploadDialog.tsx web/frontend/src/features/transcription/components/QuickTranscriptionDialog.tsx web/frontend/src/features/transcription/components/YouTubeDownloadDialog.tsx web/frontend/src/features/transcription/components/audio-detail/DownloadDialog.tsx web/frontend/src/features/transcription/components/audio-detail/ExecutionInfoDialog.tsx web/frontend/src/features/transcription/components/audio-detail/LogsDialog.tsx web/frontend/src/features/transcription/components/audio-detail/NoteEditorDialog.tsx web/frontend/src/features/transcription/components/audio-detail/NotesSidebar.tsx web/frontend/src/features/transcription/components/audio-detail/SpeakerRenameDialog.tsx web/frontend/src/features/transcription/components/audio-detail/SummaryDialog.tsx web/frontend/src/features/transcription/components/audio-detail/TranscriptSection.tsx web/frontend/src/features/transcription/components/audio-detail/TranscriptSelectionMenu.tsx web/frontend/src/features/transcription/hooks/useAudioDetail.ts web/frontend/src/features/transcription/hooks/useAudioFiles.ts web/frontend/src/features/transcription/hooks/useKaraokeHighlight.ts web/frontend/src/features/transcription/hooks/useSelectionMenu.ts web/frontend/src/features/transcription/hooks/useTranscriptDownload.ts web/frontend/src/features/transcription/hooks/useTranscriptSelection.ts web/frontend/src/features/transcription/hooks/useTranscriptionEvents.ts web/frontend/src/features/transcription/hooks/useTranscriptionNotes.ts web/frontend/src/features/transcription/hooks/useTranscriptionSpeakers.ts web/frontend/src/features/transcription/hooks/useTranscriptionSummary.ts web/frontend/src/hooks/use-is-desktop.ts web/frontend/src/hooks/use-long-press.ts web/frontend/src/hooks/use-mobile.tsx web/frontend/src/hooks/use-swipe-hint.ts web/frontend/src/hooks/useIsDesktop.ts web/frontend/src/index.css web/frontend/src/lib/authHelpers.ts web/frontend/src/lib/authInterceptor.ts web/frontend/src/lib/authTypes.ts web/frontend/src/lib/browserStorage.ts web/frontend/src/lib/downloadRecording.ts web/frontend/src/lib/markdownPolicy.ts web/frontend/src/lib/stationMode.ts web/frontend/src/lib/utils.ts web/frontend/src/main.tsx web/frontend/src/types/note.ts web/frontend/src/utils/fileProcessor.ts web/frontend/src/vite-env.d.ts web/frontend/tsconfig.app.json web/frontend/tsconfig.json web/frontend/tsconfig.node.json web/frontend/vite.config.ts web/frontend/vite.svg web/project-site/.gitignore web/project-site/Makefile web/project-site/README.md web/project-site/eslint.config.js web/project-site/index.html web/project-site/package-lock.json web/project-site/package.json web/project-site/public/api/swagger.json web/project-site/public/api/undocumented.json web/project-site/public/favicon.svg web/project-site/public/screenshots/ai-summary.png web/project-site/public/screenshots/chat.png web/project-site/public/screenshots/homepage-dark.png web/project-site/public/screenshots/homepage-light.png web/project-site/public/screenshots/mobile-homepage-dark.PNG web/project-site/public/screenshots/mobile-homepage-light.PNG web/project-site/public/screenshots/mobile-transcript-dark.PNG web/project-site/public/screenshots/mobile-transcript-light.PNG web/project-site/public/screenshots/notes.png web/project-site/public/screenshots/transcript-dark-2.png web/project-site/public/screenshots/transcript-dark.png web/project-site/public/screenshots/transcript-light-2.png web/project-site/public/screenshots/transcript-light.png web/project-site/public/screenshots/usage-guide/actions-menu.png web/project-site/public/screenshots/usage-guide/bulk-actions-menu.png web/project-site/public/screenshots/usage-guide/drag-and-drop.png web/project-site/public/screenshots/usage-guide/settings-llm.png web/project-site/public/screenshots/usage-guide/settings-transcription.png web/project-site/public/screenshots/usage-guide/transcript-actions.png web/project-site/public/screenshots/usage-guide/upload-menu.png web/project-site/public/vite.svg web/project-site/screenshots/ai-summary.png web/project-site/screenshots/chat.png web/project-site/screenshots/homepage-dark.png web/project-site/screenshots/homepage-light.png web/project-site/screenshots/mobile-homepage-dark.PNG web/project-site/screenshots/mobile-homepage-light.PNG web/project-site/screenshots/mobile-transcript-dark.PNG web/project-site/screenshots/mobile-transcript-light.PNG web/project-site/screenshots/notes.png web/project-site/screenshots/transcript-dark-2.png web/project-site/screenshots/transcript-dark.png web/project-site/screenshots/transcript-light-2.png web/project-site/screenshots/transcript-light.png web/project-site/screenshots/usage-guide/actions-menu.png web/project-site/screenshots/usage-guide/bulk-actions-menu.png web/project-site/screenshots/usage-guide/drag-and-drop.png web/project-site/screenshots/usage-guide/settings-llm.png web/project-site/screenshots/usage-guide/settings-transcription.png web/project-site/screenshots/usage-guide/transcript-actions.png web/project-site/screenshots/usage-guide/upload-menu.png web/project-site/scripts/gen-endpoints.mjs web/project-site/src/App.tsx web/project-site/src/Layout.tsx web/project-site/src/assets/react.svg web/project-site/src/components/ApiReference.tsx web/project-site/src/components/BrowserFrame.tsx web/project-site/src/components/GithubBadge.tsx web/project-site/src/components/PhoneFrame.tsx web/project-site/src/components/ScriberrLogo.tsx web/project-site/src/components/ScriberrTextLogo.tsx web/project-site/src/components/TableOfContents.tsx web/project-site/src/components/ui/Button.tsx web/project-site/src/components/ui/Card.tsx web/project-site/src/components/ui/Section.tsx web/project-site/src/components/ui/Typography.tsx web/project-site/src/docs/Configuration.mdx web/project-site/src/docs/Diarization.mdx web/project-site/src/docs/Features.mdx web/project-site/src/docs/Installation.mdx web/project-site/src/docs/Introduction.mdx web/project-site/src/docs/Troubleshooting.mdx web/project-site/src/docs/Usage.mdx web/project-site/src/index.css web/project-site/src/layouts/DocsLayout.tsx web/project-site/src/main.tsx web/project-site/src/pages/ApiPage.tsx web/project-site/src/pages/Home.tsx web/project-site/src/vite-env.d.ts web/project-site/tsconfig.app.json web/project-site/tsconfig.json web/project-site/tsconfig.node.json web/project-site/vite.config.ts
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.





