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.

  1. AI Provider Adapters (из промпта Claude)
    Единый интерфейс AIProvider с методами sendMessage (streaming), countTokens, validateKey, getModels.

Реализовать адаптеры для:

Gemini (REST + SSE)

Claude (Anthropic API)

DeepSeek (OpenAI-совместимый)

Конфигурация моделей, температуры, maxTokens через config/default.json.

  1. Оркестратор AI с контекстом пространства
    При получении сообщения от пользователя:

Определить текущее пространство.

TranslationEngine переводит (если включено).

Выбранный адаптер отправляет запрос с учётом истории чата пространства.

Ответ стримится в UI.

Сохраняется в БД (таблица messages с полем space_id).

  1. Хранилище (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 с миграциями.

  1. Шифрование ключей (из Claude)
    Использовать keytar для хранения API-ключей в системном хранилище.

Fallback: AES-256-GCM с мастер-паролем (файл ~/.ai-browser-shell/keys.enc).

Интерфейс ввода ключей при первом запуске (UI-мастер).

  1. Token Dashboard (новая вкладка)
    Отображать статистику использования по пространствам и провайдерам.

Графики (Chart.js) и список последних сессий.

Возможность фильтрации по пространству.

  1. Удалённый доступ (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 из отдельного процесса). Обоснуй выбор, напиши необходимые скрипты сборки и запуска, и подготовь структуру проекта.

После каждого шага будем проверять результат и переходить к следующему.

Edit

Pub: 20 Feb 2026 15:40 UTC

Views: 19