# gntodo-extension — браузерное расширение быстрого захвата

Расширение для Chrome/Firefox (MV3): клик по иконке в трее → попап с двумя
вкладками. Требования — docs/TZ.md §3.18.

- **«Добавить»** — многострочное поле: первая строка — название задачи,
  остальное — описание. `Ctrl+Enter` или кнопка «Добавить»; опционально —
  проект. Фидбек: анимация-галочка + тост «Задача добавлена (+N XP)».
- **«Активные»** — только просмотр: задачи в статусах «в работе/в стеке/отложено»;
  клик по строке открывает задачу в сервисе (новая вкладка браузера).

## Аутентификация

Сессионная кука сервиса из extension-контекста не уходит (SameSite=Lax режет
cross-site запросы), поэтому расширение ходит на REST `/api/*` с
`Authorization: Bearer <MCP-токен>` (тем же механизмом, что и ИИ-агенты на MCP).

Подключение:

1. Откройте сервис → «Настройки» → «Токены MCP» → создайте токен
   (`gnt_…`, показывается один раз).
2. В попапе расширения вставьте токен → «Подключить».

Отзыв токена в «Настройках» отключает расширение (как и агентов).

Базовый URL настраивается в попапе (шестерёнка): по умолчанию
`http://localhost:15134`; для другого адреса расширение запросит host-разрешение
(`chrome.permissions`).

## Сборка

```sh
cd extension
npm install          # кит — git-зависимость (см. .npmrc)
npm run build        # vue-tsc + vite build → dist/
npm run pack         # ZIP dist → frontend/public/extension/ (для страницы /extension)
```

npm 12 блокирует postinstall-скрипт esbuild — при первом `npm install`
согласуйте его (`npm install-scripts approve esbuild`).

В прод-образе фронта ZIP собирается сам (frontend/Dockerfile): страница
`/extension` в сервисе раздаёт его и показывает инструкцию по установке
(пункт меню — только из веб-версии, не в PWA).

## Загрузка unpacked

- **Chrome/Chromium**: `chrome://extensions` → «Developer mode» → «Load
  unpacked» → каталог `extension/dist`.
- **Firefox**: `about:debugging#/runtime/this-firefox` → «Load Temporary
  Add-on…» → файл `extension/dist/manifest.json` (id дополнения задан в
  `browser_specific_settings.gecko.id`).

## Проверка

E2E-прогон (playwright, persistent context с загрузкой расширения):
`/tmp/gnt-e2e-ext.mjs` — подготовка данных через API, открытие попапа табом из
service worker, проверки вкладок/добавления/фидбека и уборка тестовых объектов.