diff --git a/AGENTS.md b/AGENTS.md index 9f9eea6..149a9eb 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -13,32 +13,51 @@ python -m app.komAI ## Architecture - `app/` - application entry point (komAI.py expected) -- `src/` - source code, `src/__init__.py` exposes centralized API +- `src/` - source code +- `src/utils/` - utilities (config_manager, log_manager) - `config/` - YAML configuration; `config/global.yaml` is the main config -- `modules/` - pluggable modules, configured via `global.modules` +- `modules/` - pluggable modules +- `tests/` - standalone unit tests - `log/` - runtime logs -- `tests/` - standalone unit tests (executable from CLI) ## Config System -Modules register parameters at initialization via `config.register()`. - -Access global config: +Access via: ```python -import src.utils.config_manager -config = src.utils.config_manager.config +import src.utils.config_manager as config +config = config.config ``` -Save config: `config.save()` +Key APIs: +- `config.register(name, val, default, desc, cat, env, validator)` +- `config.get(name, cat)` / `config.getraw(key)` +- `config.set(name, value, cat)` / `config.setraw(key, value)` +- `config.getall(name, cat)` / `config.getrawall(cat)` +- `config.load()` / `config.save()` / `config.reset()` + +Constants: `ROOT_KEY = "$root$"`, `DEFAULT_CATEGORY = "global"` ## Logging -All console output is duplicated to log files. Configure in `config/global.yaml`. +Access via: +```python +import src.utils.log_manager as log +``` + +Key APIs: +- `log.register_global_params()` - register global logging params +- `log.register(module, log_console, log_stderr, log_file, log_level)` - register module +- `log.setup()` - initialize logging +- `log.get_logger(module)` - get logger instance +- `logger.print(msg, level)` - print to console (use instead of print()) + +**Rule: Never use `print()` - always use `logger.print()`** + +Constants: `LOG_CATEGORY`, `LOG_CONSOLE`, `LOG_STDERR`, `LOG_FILE`, `LOG_LEVEL`, etc. ## Env Vars (see `.env.example`) -- `KOMAI_CONFIG` - path to config file (optional) -- `LOGGING_LOG_PATH`, `LOGGING_LOG_FILE`, `LOGGING_LEVEL` +- `KOMAI_CONFIG_FILE` - path to config file (optional) ## Requirements @@ -47,7 +66,26 @@ All console output is duplicated to log files. Configure in `config/global.yaml` ## Module Development When creating new modules: -- Register parameters with `config.register(name=..., val=..., cat="module_name", ...)` -- Use categories to organize params -- All param changes trigger validators if set -- Use `getall()` / `getrawall()` for nested param groups \ No newline at end of file + +1. Register parameters: +```python +import src.utils.config_manager as config +config.register(name="param", val="value", cat="module_name", ...) +``` + +2. Use logging: +```python +import src.utils.log_manager as log +log.register(module="module_name", log_console=True, ...) +logger = log.get_logger("module_name") +logger.print("message") # never print() +``` + +3. Never use `print()` directly - use `logger.print()` instead + +## Testing + +```bash +python -m tests.test_config_manager +python -m tests.test_log_manager +``` \ No newline at end of file diff --git a/README.md b/README.md index e89094e..649af17 100644 --- a/README.md +++ b/README.md @@ -35,16 +35,11 @@ python -m app.komAI Модуль `config_manager` управляет конфигурацией с регистрацией параметров. ```python -import src.utils.config_manager -config = src.utils.config_manager.config +import src.utils.config_manager as config +config = config.config -# Регистрация параметра config.register(name="app_name", val="komAI", desc="Наименование проекта", cat="app") - -# Получение значения config.get("app_name", cat="app") - -# Сохранение в файл config.save() ``` @@ -52,10 +47,24 @@ config.save() ## Логирование -Все консольные выводы дублируются в логах. Настройка логирования в `config/global.yaml`. +Модуль `log_manager` обеспечивает логирование с выводом в консоль и файл. + +```python +import src.utils.log_manager as log + +log.register_global_params() +log.register(module="app", log_console=True, log_file="app.log") +log.setup() + +logger = log.get_logger("app") +logger.print("Сообщение") # вместо print() +``` + +См. [doc/src.utils.log_manager.md](doc/src.utils.log_manager.md) для подробной документации. ## Тесты ```bash python -m tests.test_config_manager +python -m tests.test_log_manager ``` \ No newline at end of file diff --git a/config/README.md b/config/README.md index f26c41d..789ed44 100644 --- a/config/README.md +++ b/config/README.md @@ -1,3 +1,5 @@ -# Каталог хранения конфигурационных файлов проекта. - -Глобальный конфигурационный файл: `global.yaml` +# config - YAML конфигурация + +Основной файл: `global.yaml` + +Загружается через `config.load()`. \ No newline at end of file diff --git a/log/README.md b/log/README.md index 6026a3e..2ad27ec 100644 --- a/log/README.md +++ b/log/README.md @@ -1,5 +1,5 @@ -# Каталог для хранения логов. - -Параметр конфига: `global.log_path` - -`(gitignored)` +# log - файлы логов + +Путь настраивается через `logger.log_path` в конфиге. + +gitignored \ No newline at end of file diff --git a/modules/README.md b/modules/README.md index 468c34e..c23f6e8 100644 --- a/modules/README.md +++ b/modules/README.md @@ -1,3 +1,5 @@ -# Каталог модулей проекта - -Параметр конфига: `global.modules` +# modules - подключаемые модули + +Модули регистрируют свои параметры в `config_manager` и настраивают логирование через `log_manager`. + +См. `src/utils/log_manager/README.md` для правил написания модулей. \ No newline at end of file diff --git a/src/README.md b/src/README.md index 1da9003..c90ec52 100644 --- a/src/README.md +++ b/src/README.md @@ -1,7 +1,11 @@ # src - основные исходники -## Централизованный API - ## Утилиты - `config_manager/` - управление конфигурацией + - `config.config` - глобальный экземпляр ConfigManager + - API: `register()`, `get()`, `set()`, `getall()`, `getrawall()`, `load()`, `save()`, `reset()` +- `log_manager/` - логирование + - `log` - глобальные функции + - API: `register()`, `register_global_params()`, `setup()`, `get_logger()` + - `LoggerPrint.print()` - для вывода вместо print() \ No newline at end of file diff --git a/src/utils/README.md b/src/utils/README.md index 7515815..d723c3a 100644 --- a/src/utils/README.md +++ b/src/utils/README.md @@ -1,3 +1,4 @@ # src/utils - утилиты -- `config_manager/` - ConfigManager +- `config_manager/` - управление конфигурацией +- `log_manager/` - логирование \ No newline at end of file