Архитектура
Ogma — локальное десктопное приложение с сервером Rust, интерфейсом Vue, оболочкой Electron, локальным хранением проектов, средой плагинов и необязательной интеграцией MCP.
Основные компоненты
| Компонент | Расположение | Ответственность |
|---|---|---|
| Сервер прокси/API Rust | crates/proxy | MITM-прокси, REST API, хранение, сканеры, повторная отправка, автоматизация, плагины, MCP, OAST, конечные точки управления браузером. |
| Интерфейс Vue | frontend/src | Интерфейс пространства, хранилища, маршруты, редакторы, сканеры, iframe плагинов, ИИ-пространство, утилиты. |
| Десктопная оболочка Electron | desktop | Упакованное приложение, интеграция окон браузера, мост настроек, жизненный цикл. |
| Документация | docs | Сайт документации VitePress. |
| Каталог данных | ogma-data или системные данные приложения | База SQLite, материалы CA, плагины, экспорт, резервные копии, файлы. |
Сервер
Сервер предоставляет REST API и слушатель прокси. Основные модули:
proxy_server.rs: перехват и передача HTTP.intercept.rsиintercept_rules.rs: очередь и условия перехвата.store.rsиstore_actor.rs: доступ к базе проекта и асинхронный дескриптор хранилища.api.rs: маршрутизация и обработчики API.replay.rs,automate.rsиworkflows.rs: повторяемое выполнение запросов.passive_scanner.rsиactive_scanner.rs: движки сканеров.plugins.rsиplugin_runtime.rs: метаданные, изолированная среда, разрешения и события плагинов.mcp.rs: ресурсы и инструменты MCP.ca.rs,tls_cert.rs,client_cert.rs: сертификаты и TLS.ws_history.rs,ws_replay.rsиsse.rs: потоковый трафик.oast.rs: сервисы внеполосных обращений.
Интерфейс
Интерфейс — приложение Vue с ленивой загрузкой большинства разделов пространства на уровне маршрутов.
Основные области:
router/index.ts: маршруты пространства и настроек.components/NavSidebar.vue: основная навигация продукта.stores/*: хранилища Pinia для истории, Replay, Automate, результатов, рабочих процессов, плагинов, области, оболочки, ИИ и другого состояния.api/client.tsиapi/types.ts: типизированный интерфейс клиента API.views/*: страницы функций пространства.components/WorkspacePanel.vue: панель ИИ и обратной оболочки.views/PluginsView.vueиviews/PluginPageView.vue: установка и управление плагинами, размещение iframe интерфейса.
Десктопная оболочка
Electron предоставляет упакованное десктопное приложение и функции нативного моста:
- Запуск и управление окном приложения.
- Сохранение десктопных настроек в локальном хранилище интерфейса.
- Открытие окон и встроенных представлений браузера Ogma.
- Упаковка ресурсов и бинарных файлов для распространения.
Модель хранения
Ogma хранит данные исследования локально. Миграции сервера задают таблицы проектов для:
- Истории и тел HTTP.
- Трафика WebSocket и SSE.
- Сессий и попыток Replay.
- Сессий, запусков и результатов Automate.
- Результатов и ссылок на доказательства.
- Рабочих процессов и их запусков.
- Наборов области.
- Плагинов и разрешений.
- Файлов, экспорта, резервных копий и настроек.
Среда плагинов
Плагины могут включать серверные компоненты, интерфейсные или оба типа.
Серверные плагины работают в изолированной среде JavaScript и получают объект sdk. Интерфейсные — в изолированных iframe и общаются через контролируемый Ogma мост.
Основные границы:
- Интерфейсные плагины не имеют доступа к родительскому DOM.
- Команды моста проверяются на сервере.
- Защищённые серверные действия требуют объявленных и выданных разрешений.
- Пакеты копируются в управляемый каталог Ogma для стабильной работы.
См. Система плагинов.
Интеграция MCP
MCP-сервер предоставляет контекст проекта внешним помощникам. По умолчанию он запускается только для чтения. Запись, экспорт, отправка запросов, запуск рабочих процессов и управление перехватом требуют явных разрешений.
См. Настройка MCP.
Принципы проектирования
- Локальная работа по умолчанию.
- Результаты с привязанными доказательствами.
- Область перед автоматизацией.
- Явные разрешения для ИИ, плагинов, отправки запросов и экспорта.
- Быстрая навигация для повторяемых задач тестировщика.
- Совместимость с привычными сценариями прокси при сохранении расширяемости Ogma.