Translation Engine с детекцией языка, пропуском кода, кэшированием, несколькими бэкендами.
AI Provider Adapters (Gemini, Claude, DeepSeek) с единым интерфейсом и поддержкой streaming.
SQLite схема для хранения сессий, сообщений, статистики токенов и кэша переводов.
Шифрование ключей через keytar + AES fallback.
Token Dashboard в новой вкладке.
Скрипты деплоя на Debian (установка минимального GUI, Guacamole, Nginx, systemd).
Подход к качеству кода (TypeScript strict, обработка ошибок, логирование, конфигурация).
Всё это ложится в концепцию нашего AI-браузера с пространствами. Мы адаптируем эти компоненты, добавив к ним:
Пространства (Spaces) — изолированные BrowserContext’ы с собственным набором вкладок, историей и AI-контекстом.
Расширенные закладки с тегами — на основе Faved или My-Hub, привязанные к пространствам.
Ниже представлен обновлённый детальный промпт, объединяющий лучшее из обоих миров.
text
Роль: Senior AI Architect / Full-Stack Developer
Задача: Создать локальный AI-браузер с пространствами и тегированными закладками на базе BrowserOS
Контекст инфраструктуры
- ОС сервера: Debian 12 Minimal (без GUI)
- ОС клиента: Любая (доступ через браузер)
- Цель: Развернуть кастомизированную версию BrowserOS (форк Chromium) с функциями пространств (как в Perplexity Comet) и расширенных закладок с тегами, а также с удалённым доступом через HTML5 (Apache Guacamole).
Базовые готовые решения
- BrowserOS (https://github.com/browseros-ai/BrowserOS) — форк Chromium с встроенной поддержкой AI-агентов, MCP, локальных моделей. Будет основой.
- Faved (https://github.com/denho/faved) — self-hosted менеджер закладок с цветными тегами, локальное хранение (SQLite). Будет использован как микросервис для тегов.
- My-Hub (альтернатива для глубокой интеграции) — расширение с тегами в IndexedDB и AI-автосортировкой.
Архитектура системы
┌─────────────────────────────────────────────────────────────────┐
│ ПОЛЬЗОВАТЕЛЬ (браузер) │
└───────────────────────────────┬─────────────────────────────────┘
│ HTTPS / WebSocket
▼
┌─────────────────────────────────────────────────────────────────┐
│ Debian-сервер (reverse proxy) │
│ ┌─────────────┐ ┌──────────────┐ ┌────────────────────────┐ │
│ │ Nginx │ │ Guacamole │ │ AI Browser Shell API │ │
│ │ (SSL, WSS) │◀─│ (HTML5 RDP) │ │ (FastAPI) │ │
│ └─────────────┘ └──────────────┘ └───────────┬────────────┘ │
│ │ │
│ ┌──────────────────────────────────────────────▼──────────────┐ │
│ │ BrowserOS (кастомизированный форк) │ │
│ │ ┌──────────────────────────────────────────────────────┐ │ │
│ │ │ Spaces Manager (изолированные BrowserContexts) │ │ │
│ │ ├──────────────────────────────────────────────────────┤ │ │
│ │ │ AI Orchestrator (Gemini/Claude/DeepSeek + перевод) │ │ │
│ │ ├──────────────────────────────────────────────────────┤ │ │
│ │ │ Bookmark Service (Faved API / My-Hub) │ │ │
│ │ └──────────────────────────────────────────────────────┘ │ │
│ └────────────────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ SQLite (сессии, сообщения, токены, кэш переводов) │ │
│ └──────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
text
Основные компоненты (с привязкой к готовым решениям)
1. BrowserOS (ядро)
- Скачать исходники BrowserOS, собрать под Debian.
- Настроить флаги сборки: отключить ненужное (PDF viewer, медиакодеки, Google Sync, Crash Reporter, WebStore).
- Добавить поддержку удалённой отладки (
--remote-debugging-port=9222) для управления через CDP.
2. Менеджер пространств (Spaces)
- Каждое пространство = отдельный BrowserContext (изоляция cookies, истории, вкладок).
- Интерфейс: левая боковая панель со списком пространств, создание/удаление/переименование.
- При переключении пространства:
- Загружается соответствующий BrowserContext.
- Восстанавливаются ранее открытые вкладки (если пространство не закрыто).
- AI получает контекст (история чата в этом пространстве).
- Хранение в SQLite: таблица
spaces(id, name, created_at, context_id, settings).
3. Расширенные закладки с тегами
- Вариант A (быстрый) : развернуть Faved в Docker, интегрировать его API.
- При сохранении закладки отправлять POST в Faved с URL, title, тегами.
- В UI добавить кнопку "Добавить в закладки с тегами".
- Отображать закладки текущего пространства (фильтр по тегам).
- Вариант B (глубокая интеграция) : встроить логику My-Hub в BrowserOS.
- Использовать IndexedDB в браузере для хранения тегов.
- Добавить AI-автотегирование (Gemini Nano или через API).
4. Translation Engine (из промпта Claude)
- Модуль на FastAPI/Node.js (TypeScript), реализующий интерфейс:
```typescript
interface TranslationEngine {
translate(text: string, from: string, to: string): Promise<string>;
detectLanguage(text: string): Promise<string>;
isEnabled(): boolean;
getStats(): { cached: number; translated: number; saved_tokens: number };
}
Логика:
Определить язык (если EN → пропуск).
Пропускать блоки кода (...), инлайн-код (...), URL.
Проверить LRU-кэш (SQLite).
Приоритет бэкендов: LibreTranslate (self-hosted) → Google Translate free → Google Cloud API.
Интеграция: AI Orchestrator вызывает TranslationEngine перед отправкой запроса в AI.
- AI Provider Adapters (из промпта Claude)
Единый интерфейс AIProvider с методами sendMessage (streaming), countTokens, validateKey, getModels.
Реализовать адаптеры для:
Gemini (REST + SSE)
Claude (Anthropic API)
DeepSeek (OpenAI-совместимый)
Конфигурация моделей, температуры, maxTokens через config/default.json.
- Оркестратор AI с контекстом пространства
При получении сообщения от пользователя:
Определить текущее пространство.
TranslationEngine переводит (если включено).
Выбранный адаптер отправляет запрос с учётом истории чата пространства.
Ответ стримится в UI.
Сохраняется в БД (таблица messages с полем space_id).
- Хранилище (SQLite) — адаптировать схему из Claude
Таблицы:
spaces (id, name, created_at, settings)
sessions (id, space_id, provider, model, title, created_at, updated_at)
messages (id, session_id, space_id, role, content, original_text, tokens_in, tokens_out, created_at)
token_stats (id, provider, model, tokens_in, tokens_out, estimated_cost_usd, date)
translation_cache (hash, source_text, translated, source_lang, target_lang, used_at)
Использовать better-sqlite3 или sqlite3 с миграциями.
- Шифрование ключей (из Claude)
Использовать keytar для хранения API-ключей в системном хранилище.
Fallback: AES-256-GCM с мастер-паролем (файл ~/.ai-browser-shell/keys.enc).
Интерфейс ввода ключей при первом запуске (UI-мастер).
- Token Dashboard (новая вкладка)
Отображать статистику использования по пространствам и провайдерам.
Графики (Chart.js) и список последних сессий.
Возможность фильтрации по пространству.
- Удалённый доступ (Guacamole + Nginx)
Guacamole в Docker (guacd, веб-приложение, PostgreSQL) для HTML5-доступа к X-сессии BrowserOS.
Nginx как reverse proxy с SSL (Let's Encrypt), проксирует /guacamole/ и /api/ (для бэкенда).
Systemd-сервис для автозапуска BrowserOS и API.
Поэтапный план реализации (с учётом готовых компонентов)
Фаза 1: Фундамент — BrowserOS + базовая оболочка
Выбор и сборка BrowserOS
Клонировать репозиторий, настроить GN-флаги (отключить ненужное).
Собрать под Debian, получить исполняемый файл.
Написать скрипт запуска с параметрами удалённой отладки.
Интеграция базового UI (боковая панель пространств)
Модифицировать BrowserOS, добавив левую панель (C++/Views) или использовать встроенные возможности расширений.
Альтернатива: использовать Electron-обёртку для управления BrowserOS через CDP (как в Claude-промпте, но с сохранением BrowserOS как ядра). Этот подход может быть проще для быстрого UI.
Создание API-сервера на FastAPI (TypeScript через Node.js)
Эндпоинты:
/api/spaces — CRUD пространств.
/api/chat — приём сообщения, вызов оркестратора.
/api/bookmarks — работа с закладками (прокси к Faved).
Подключение к SQLite.
Настройка конфигурации (config/default.json) по образцу Claude.
Фаза 2: Пространства и управление контекстом
Реализация менеджера пространств
Использовать Chrome DevTools Protocol для создания изолированных контекстов: Target.createBrowserContext.
Хранить соответствие space_id → browserContextId.
При переключении пространства: активировать соответствующий контекст через Target.setAutoAttach.
Интеграция с UI
При клике на пространство в боковой панели отправлять команду в API для переключения.
Отображать вкладки, принадлежащие текущему пространству.
Сохранение состояния пространства
При закрытии вкладки/браузера сохранять список открытых URL в БД (таблица space_tabs).
Фаза 3: Перевод и AI-адаптеры (используя наработки Claude)
Translation Engine
Реализовать модуль на Node.js (TypeScript) с тремя бэкендами и кэшем в SQLite.
Интегрировать в API-сервер: при получении сообщения вызывать перевод перед отправкой в AI.
AI Provider Adapters
Реализовать классы для Gemini, Claude, DeepSeek с поддержкой streaming.
Добавить подсчёт токенов (использовать библиотеки tiktoken или аналоги).
Интегрировать в оркестратор.
Полный пайплайн
UI отправляет сообщение → API → перевод → вызов AI → стриминг ответа → сохранение в БД.
Фаза 4: Расширенные закладки с тегами
Выбор и развёртывание Faved
Настроить Docker-контейнер с Faved (PHP+SQLite).
Создать в API прокси-эндпоинты: /api/bookmarks/add, /api/bookmarks/search?tags=....
Интеграция в UI
В боковой панели добавить вкладку "Закладки" с полем ввода тегов и списком.
Кнопка "Добавить текущую страницу в закладки" — вызывает API Faved с текущим URL и тегами из диалога.
Привязка к пространствам
В Faved добавить поле space_id (или использовать отдельную таблицу связи).
При переключении пространства фильтровать закладки по space_id.
AI-автотегирование (опционально)
При сохранении закладки отправлять URL в локальную модель (через Ollama) для генерации тегов.
Фаза 5: Хранилище, безопасность, статистика
SQLite миграции — создать таблицы по схеме из Claude, добавив поля space_id.
Шифрование ключей — реализовать через keytar, fallback AES.
Token Dashboard — новая вкладка с отчётами (данные из token_stats и messages).
Фаза 6: Удалённый доступ и деплой на Debian
Скрипт setup-debian-server.sh (адаптировать из Claude):
Установка зависимостей (Docker, Node.js, nginx).
Развёртывание Guacamole через docker-compose.
Настройка nginx (SSL, прокси).
Создание systemd-сервиса для API и BrowserOS.
Настройка firewall (ufw), fail2ban.
Тестирование удалённого доступа:
Зайти через браузер на https://server/guacamole, подключиться к X-сессии.
Убедиться, что BrowserOS работает и UI загружается.
Требования к качеству кода (из Claude)
TypeScript strict mode, никаких any.
Обработка ошибок с информативными сообщениями.
Логирование (winston/pino).
Unit-тесты для ключевых модулей (translation, adapters).
Вся конфигурация через config/.
Graceful degradation: при сбое перевода — отправлять оригинал; при недоступности AI — показывать ошибку.
Безопасность: ключи не хранятся в plaintext, нет телеметрии.
Структура репозитория (объединённая)
text
ai-browser-shell/
├── browseros/ # форк BrowserOS (субмодуль или клон)
├── backend/ # FastAPI (Python) или Node.js API
│ ├── src/
│ │ ├── spaces/ # менеджер пространств
│ │ ├── translation/ # Translation Engine
│ │ ├── providers/ # AI-адаптеры
│ │ ├── bookmarks/ # интеграция с Faved
│ │ ├── storage/ # SQLite + keytar
│ │ ├── routes/ # API эндпоинты
│ │ └── main.ts
│ ├── config/
│ ├── scripts/
│ └── package.json
├── frontend/ # React/TypeScript UI (можно взять из Faved)
│ ├── components/
│ ├── pages/
│ └── ...
├── deploy/ # скрипты деплоя
│ ├── docker-compose.guacamole.yml
│ ├── nginx.conf
│ ├── ai-browser-shell.service
│ └── setup-debian-server.sh
└── README.md
Начало работы
Начни с Фазы 1, шаг 1: выбери подход к интеграции BrowserOS (полная модификация C++ или управление через CDP из отдельного процесса). Обоснуй выбор, напиши необходимые скрипты сборки и запуска, и подготовь структуру проекта.
После каждого шага будем проверять результат и переходить к следующему.