Данный документ является обязательным регламентом для всех AI-агентов и разработчиков, вносящих изменения в кодовую базу расширения
discord-gemini-translator.
Любые модификации кода должны строго соответствовать правилам, ограничениям и стандартам, описанным ниже.
Проект представляет собой браузерное расширение для Google Chrome и Chromium-браузеров (Manifest V3), обеспечивающее двусторонний мгновенный перевод чата и синхронные субтитры голосовых каналов в веб-версии Discord (https://discord.com/*).
node:test + node:assert/strict). Запуск через npm test.manifest.json: Описание расширения MV3, права (storage), host_permissions для Discord и Google Generative Language API.background/background.js (Service Worker):
/v1beta/models/...:generateContent).wss://generativelanguage.googleapis.com/...).chrome.storage.local.filterValidModels) и голосовых (filterLiveModels) моделей.content/content.js (ISOLATED World):
MutationObserver.replaceSlateText).CONTENT_I18N).content/inject.js (MAIN World):
RTCPeerConnection.prototype.addTrack, ontrack, AudioContext).content.js через window.postMessage.popup/ (Popup Window):
popup.html, popup.css, popup.js).data-i18n.popup/popup.html любые видимые текстовые элементы без атрибута data-i18n или data-i18n-title.textContent, title, placeholder, innerHTML, alert) в обход словарей (CONTENT_I18N и translations).translations.en и CONTENT_I18N.en).Авто (ВКЛ) или Voice\n(ON)). Активный статус отображается строго через CSS-класс .active, цвет, иконку и подсказку title.package.json, требующие этапа build для запуска расширения. Расширение должно загружаться напрямую из папки в chrome://extensions..value ИЛИ .innerText:
replaceSlateText с эмуляцией событий beforeinput, выделением Range и document.execCommand('insertText').dgt- (Discord Gemini Translator), например: .dgt-btn, .dgt-overlay, .dgt-badge.button, div, .channelTextArea, .slateTextArea и т.д.) без контекста родительских элементов расширения.thinkingConfig: { thinkingBudget: 0 }, чтобы перевод происходил за 200–400 мс без лагов.thought: true — технические мысли не должны попадать в субтитры пользователю.chrome.storage.local.generativelanguage.googleapis.com.dgt-translated, dgt-auto-translated, dgt-reverse-box).npm test возвращает хотя бы 1 ошибку. Тесты не «отключаются» и не «комментируются» — код обязан им соответствовать.popup/popup.js (translations.ru и translations.en).content/content.js (CONTENT_I18N.ru и CONTENT_I18N.en).popup/popup.html используйте:
data-i18n="ключ" для содержимого тега.data-i18n-title="ключ" для атрибута всплывающей подсказки.dict.translateTitle.replace("{lang}", outgoingLang).tests/i18n-no-hardcode.test.js, проверяющий паритет ключей, отсутствие кириллицы в английской локали и отсутствие хардкода в DOM.e.preventDefault() на событии mousedown, иначе Slate потеряет фокус и выделение.dgt-lang-menu или контекстных плашек) всегда регистрируйте функцию cleanupListeners, удаляющую слушатели клика по документу, клавиши Escape, resize и scroll.<@id>, ролей <@&id>, каналов <#id>.<:name:id> и <a:name:id>.**bold**, *italic*, ~~strike~~, ||spoiler||, code blocks).filterValidModels() (исключаются специализированные аудио/TTS/робототехнические модели).filterLiveModels() (поддерживающие Bidirectional Live или Live Transcribe).outputTranscription.inputTranscription.turnComplete: true сигнализирует об окончании реплики и фиксации фразы в истории субтитров.#313338, #2b2d31, #1e1f22, #5865F2).backdrop-filter: blur(12px), тонкие границы rgba(255, 255, 255, 0.08).transition: all 0.15s ease, явные состояния :hover, :active, .active.Авто, Live, RU, EN), никаких громоздких текстов и автопереносов строк.node:test + node:assert/strict).tests/*.test.js.tests/i18n-no-hardcode.test.js — аудит локализации, предотвращение хардкода, проверка DOM-присвоений.tests/background.test.js — логика Service Worker, REST-запросы, кэширование, обработка ошибок.tests/content.test.js — интеграция с чатом, селекторы, замена текста Slate.tests/inject-audio.test.js — аудиоконвертер, VAD, PCM 16kHz, Base64.tests/live-captions.test.js — парсинг событий WebSocket Live API, отсечение размышлений, сборка предложений.tests/popup.test.js — фильтрация моделей, валидация настроек.npm test
и убедиться, что результат равен 100% pass (0 fail).
SUPPORTED_LANGUAGES и словари CONTENT_I18N / translations.Прежде чем вернуть ответ пользователю, агент обязан проверить:
ru и en.dgt-.alert().npm test выполнена успешно, все тесты пройдены без ошибок.README.md, README.ru.md) обновлена, если изменились функции или горячие клавиши.