架构
Ogma 是一款本地桌面应用,由 Rust 后端、Vue 前端、Electron 外壳、本地项目存储、插件运行时及可选的 MCP 集成组成。
高层组件
| 组件 | 位置 | 职责 |
|---|---|---|
| Rust 代理/API 后端 | crates/proxy | MITM 代理、REST API、存储、扫描器、重放、自动化、插件、MCP、OAST、浏览器控制端点。 |
| Vue 前端 | frontend/src | 工作区 UI、状态存储、路由、编辑器、扫描器、插件 iframe、AI 工作区、实用工具。 |
| 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/*:用于历史、重放、自动化、安全发现、工作流、插件、测试范围、Shell、AI 及其他状态的 Pinia 存储。api/client.ts和api/types.ts:类型化的 API 客户端接口。views/*:工作区功能页面。components/WorkspacePanel.vue:AI 和反向 Shell 工作区面板。views/PluginsView.vue和views/PluginPageView.vue:插件安装、管理及前端 iframe 托管。
桌面外壳
Electron 外壳提供打包后的桌面体验和原生桥接功能:
- 启动和控制应用窗口。
- 将桌面设置持久保存到前端本地存储。
- 打开 Ogma 浏览器窗口和嵌入式浏览器视图。
- 为桌面分发打包资源和二进制文件。
存储模型
Ogma 将评估数据保存在本地。后端迁移定义了以下按项目划分的表:
- HTTP 历史记录和消息体。
- WebSocket 和 SSE 流量。
- 重放会话和尝试记录。
- 自动化会话、运行记录和结果。
- 安全发现和证据链接。
- 工作流和工作流运行记录。
- 测试范围预设。
- 插件和插件权限。
- 文件、导出、备份和设置。
插件运行时
插件可包含后端组件、前端组件,或同时包含二者。
后端插件在 JavaScript 沙箱中运行并接收 sdk 对象。前端插件在沙箱 iframe 中运行,通过 Ogma 控制的桥接通信。
重要边界:
- 前端插件无法访问父级 DOM。
- 桥接命令在服务器端验证。
- 受保护的后端操作需要已声明且已授予的权限。
- 已安装插件包会复制到 Ogma 管理的插件目录,以确保稳定的运行时行为。
参阅插件系统。
MCP 集成
MCP 服务器向外部助手提供 Ogma 项目上下文。默认以只读模式启动。写入、导出、发送请求、运行工作流和控制拦截的能力都需要明确授权。
参阅MCP 设置。
设计原则
- 默认本地优先。
- 安全发现与证据关联。
- 自动化前先确定测试范围。
- 对 AI、插件、请求发送和导出设置明确的权限门槛。
- 为测试人员的重复工作流提供快速导航。
- 兼容成熟的代理工作流,同时保持 Ogma 的可扩展性。