opencode-voice-dictation/docs/project-map/src.md
Sergey af5bc63bcc
fix(ui): support OpenCode 1.18.x composer selectors (#29)
## Что сделано
- Обновлён массив COMPOSER_SELECTORS в src/ui.ts: добавлены новые
селекторы [data-component="prompt-input-v2"] и
[data-component="session-prompt-dock"] как primary для OpenCode v1.18.x
- Старые селекторы session-new-composer/session-composer сохранены как
fallback для обратной совместимости
- README обновлён с указанием совместимой версии OpenCode v1.18.x
(русский и английский блоки)
- Добавлен handoff-документ и ADR 0001 с обоснованием порядка
fallback-селекторов

## Почему
В OpenCode v1.18.x селекторы session-composer/session-new-composer
удалены из исходников, из-за чего findComposer() возвращал null и кнопка
🎤 не появлялась в чате. Порядок массива обновлён как primary (v1.18.x) →
fallback (pre-1.18), чтобы сохранить совместимость с OpenCode <1.18 до
oldInterfaceSunset (2026-09-14).

Closes #28

---------

Co-authored-by: opencode-agent <agent@opencode.local>
2026-07-25 01:29:00 +03:00

1.6 KiB

module purpose key_files dependencies last_updated
src Исходники userscript — UI, аудио-захват, транскрипция, вставка текста
src/index.ts — entry point userscript
src/ui.ts — позиционирование кнопки 🎤, COMPOSER_SELECTORS, findComposer()
src/audio.ts — захват микрофона (MediaRecorder)
src/transcribe.ts — отправка в Groq Whisper API
src/insert.ts — вставка транскрипта в prompt-input
src/config.ts — настройки (API key, hotkey, language)
src/keyboard.ts — глобальный hotkey
src/types.ts — shared типы
2026-07-24

src/

Structure

  • index.ts — entry point userscript
  • ui.ts — позиционирование кнопки 🎤, COMPOSER_SELECTORS, findComposer(), MutationObserver
  • audio.ts — захват микрофона (MediaRecorder)
  • transcribe.ts — отправка в Groq Whisper API
  • insert.ts — вставка транскрипта в prompt-input (gate [data-component="prompt-input"])
  • config.ts — настройки (API key, hotkey, language)
  • keyboard.ts — глобальный hotkey
  • types.ts — shared типы

Patterns

  • Селекторы OpenCode UI собраны в массив COMPOSER_SELECTORS (primary → fallback), findComposer() перебирает сверху вниз.
  • UI-элементы появляются асинхронно — отслеживаются через MutationObserver в setupUI.