Releases: froggychips/tweai
v1.9.0 — code-review series (security, i18n, architecture, tooling)
Полная серия правок по итогам кодревью (PR #4, #5, #6, #7, #8, #9, #10). Без новых пользовательских функций — все настройки и сохранённые ключи совместимы с v1.8.x.
Что нового
Security & CWS hygiene (PR-1 + PR-2)
- Gemini API-ключ передаётся заголовком
x-goog-api-keyвместо?key=в URL. chrome.runtime.onMessageвалидируетsender: разрешены только страницы расширения и фреймы*.x.com/*.twitter.com.http://localhost/*иhttp://127.0.0.1/*→optional_host_permissions. CWS-листинг чище, MCP-разрешение запрашивается runtime'ом.execCommand('insertText')свёрнут вttaInsertText()с цепью InputEvent → execCommand → direct.- Persona hint рендерится через DOM API, а не
innerHTML. dev-logger.js: убраны URL/localStorage флаги (оба контролируются страницей x.com).boot()запускается только в top-frame.- Полная i18n инфраструктура:
_locales/en/messages.jsonи_locales/ru/messages.json(~110 ключей),default_locale: "en",data-i18nатрибуты в options.html.
Architecture (PR-3 + PR-5 + PR-7)
- Provider abstraction:
callOpenAI/callGrok/callGeminiсвёрнуты в registryPROVIDERS+ общийaiFetch()с AbortController-таймаутом 30с и retry на 429/5xx с экспоненциальным backoff (~400ms → 1.6s). - Bonus: Gemini теперь проходит через
checkBudget()— раньше дневной токен-лимит к нему не применялся. selectors.js:window.TTASelectorsс multi-strategy DOM lookups (testid → семантика → структура) и ring-buffer health-счётчиком вchrome.storage.local.tta_selector_health.- SW keep-alive:
chrome.alarmsкаждые 25с пока есть активные AI-запросы — service worker не выселяется в середине долгого fetch'а. - MCP cache: 5-минутный in-memory TTL для ответов gateway'я.
Tooling & docs (PR-6 + PR-8)
package.json+eslint.config.js(flat config) +.prettierrc.json+tools/build.mjs.- GitHub Actions:
checks.yml(lint + format + build на каждый PR),release.yml(на push тегаv*создаёт release с zip). - Документация:
CHANGELOG.md,CONTRIBUTING.md,docs/ARCHITECTURE.md,docs/TROUBLESHOOTING.md,docs/CWS_REVIEW.md— внутренний чеклист CWS submission с permission justifications.
Установка
- Скачать
tweai-v1.9.0.zip, распаковать. chrome://extensions→ Developer mode → Load unpacked → выбрать папку.- Из v1.8.x — переустановить из распакованной папки (или Update в Developer mode).
Совместимость
chrome.storage.syncсовместима с v1.8.x — пересохранения ключей не требуется.- Новый permission
alarmsзапросится при обновлении. - При первом включении MCP gateway Chrome спросит permission на
localhost(теперь optional).
Что не в этом релизе
- Split
options.{html,js}на ESM-модули — отменено осознанно: без юнит-тестов и реальной пользы для CWS-submission это рефакторинг ради рефакторинга. - Screenshot 1280×800 для CWS listing — требует живого расширения на x.com, генерировать при подаче.
🤖 Generated with Claude Code
v1.8.1 — security & CWS hygiene patch
Patch-release с правками безопасности и подготовкой к Chrome Web Store submission. Без новых функций — все существующие настройки и сохранённые ключи продолжают работать.
Что починили
- Gemini API key больше не утекает в URL. Раньше передавался как
?key=…, теперь — через заголовокx-goog-api-key. URL мог попадать в performance-логи браузера и логи промежуточных прокси. - Жёстче валидация sender'а в
chrome.runtime.onMessage. КомандыTTA_*принимаются только от собственных страниц расширения и фреймовx.com/twitter.com. До этого формально любой iframe вall_frames=trueмог их вызвать и тратить чужой токен-бюджет. http://localhost/*иhttp://127.0.0.1/*сталиoptional_host_permissions. Дефолтный CWS-листинг не показывает их, разрешение запрашивается runtime'ом только если включить локальный MCP-сервер в настройках.document.execCommand('insertText')свёрнут в один helper. Цепь: InputEvent → execCommand → прямое присваивание. Меньше дубля, готовность к будущему отключению execCommand в Chrome.- Persona hint в настройках рендерится без
innerHTML. ЧерезreplaceChildren+textContent. - dev-logger.js: убраны
?tta_debug=1иlocalStorage 'tta_debug'триггеры. Оба контролировались страницей x.com и могли быть взведены вредоносной ссылкой. Остался только canonical toggle черезchrome.storage. boot()в content-скрипте запускается только в top-frame.all_frames: trueпо-прежнему стоит в манифесте, но MutationObserver и подписки больше не дублируются в nested iframes.
Установка
- Скачать
tweai-v1.8.1.zip, распаковать. chrome://extensions→ Developer mode → Load unpacked → выбрать папку.- Если ранее стоял v1.8 — переустановить из распакованной папки (или Update в Developer mode).
Совместимость
- Все настройки (
chrome.storage.sync) совместимы с v1.8 — пересохранения ключей не требуется. - Если вы использовали
?tta_debug=1для включения dev-логгера, теперь включайте его через настройки расширения. - Если использовали
http://localhost/…MCP-сервер — после обновления Chrome спросит подтверждение на разрешение хоста.
Следующие шаги
Это первый из серии security/architecture PR'ов. По плану дальше: i18n + _locales/, абстракция провайдеров, расщепление options.{html,js} на модули, fallback-стратегии для DOM-селекторов, build-pipeline (esbuild/eslint), release workflow и расширенная документация.
🤖 Generated with Claude Code
v1.8 — open-source launch
First public release of TweAI — AI reply assistant for X (Twitter).
Open-source Chrome extension, BYOK, no subscription, no middleman.
Highlights
- Redesigned in-tweet UI — single accent (froggy-green), glass card with
brand chip, grouped reply controls, custom selects and checkboxes - Redrawn extension icon — frog eyes on a dark rounded square (16/48/128)
- 8 personas — five built-in tech-creator personas plus your own custom
ones; per-account default persona based on the active X handle - Smart thread context — optionally include the author's last 5 tweets so
the reply matches their thread - Tweet translator — auto-detect with 12 target languages, lazy via
IntersectionObserver, cached locally so the same tweet isn't re-translated - DM composer — same prompt + Tweet flow for direct messages
- Token budget — daily soft-limit on input/output tokens; blocks calls
when exceeded - Diagnostics — one-click health check (key, provider connectivity, X DOM
selectors) - Companion
tweai-mcp-serverfor Claude Code integration
Providers
OpenAI · Grok (xAI) · Google Gemini · Google Translate
Install
Until the Chrome Web Store listing is live, install unpacked:
git clone https://github.com/froggychips/tweai.git
# In Chrome: chrome://extensions → enable Developer mode → Load unpackedSee README for full setup,
SECURITY.md
for the threat model, and PRIVACY.md
for what the extension does and doesn't see.
Your keys, your model, your replies.