Конфигурация движка
Параметры инициализации, каталоги данных, хранилище секретов и политика permissions.
03 Конфигурация движка
Все параметры задаются через EngineOptions при инициализации. Движок создаёт и управляет каталогами самостоятельно.
3.1EngineOptions
| Поле | Тип | Описание |
|---|---|---|
| data_dir | PathBuf | Корневой каталог данных: пакеты, состояние, permissions, секреты |
| secrets | Option<Secrets> | Хранилище секретов. Если None — используется файловый backend в data_dir/secrets.json |
use axion_engine::EngineOptions;
use axion_secrets::Secrets;
use std::path::Path;
let data_dir = Path::new("/home/user/.axion");
let options = EngineOptions {
data_dir: data_dir.to_path_buf(),
secrets: Some(my_secrets),
};
3.2Каталоги данных
Внутри data_dir Engine создаёт следующую структуру:
data_dir/ ├── apps/ # распакованные .axn-пакеты ├── index.json # индекс установленных приложений (metadata + state) ├── data/ │ └── {app_id}/ │ └── storage.json # персистентное хранилище приложения ├── icons/ # сгенерированные .ico из icon.png ├── permissions.json # политика permissions (default deny) └── secrets.json # защищённое хранилище (dev-режим)
При первом запуске создаётся data_dir и файл permissions.json (пустая политика).
3.3Секреты
Хранилище секретов предназначено для токенов, API-ключей и учётных данных. В dev-режиме используется файловый backend:
// Чтение и запись секретов
engine.secrets().set("github_token", "ghp_...")?;
let token = engine.secrets().get("github_token")?;
engine.secrets().remove("github_token")?;
В production-среде системное хранилище подключается через поле secrets в EngineOptions и может опираться на системные механизмы ОС (Keychain Windows/macOS, Secret Service Linux).
window.axion.secrets с проверкой capabilities secrets.read / secrets.write.3.4Политика permissions
Политика хранится в permissions.json и определяет, какие capabilities разрешены/запрещены/ожидают подтверждения:
{
"my_app": {
"filesystem.read": "granted",
"filesystem.write": "denied",
"network.connect": "pending"
}
}
Движок загружает политику при AxionEngine::init() и сохраняет при каждом grant() или revoke().
// Ручное управление (CLI или оболочка)
engine.grant("my_app", "filesystem.read", Some("workspace".into()));
engine.revoke("my_app", "network.connect");