Files
zeroq-qol-modules/.agent/analysis-report.md
T
2026-07-22 01:38:31 +03:00

5.0 KiB

Analysis Report

Session

  • Session ID: a1b2c3d4-e5f6-7890-abcd-ef1234567890
  • Target repo: S:\Git\zeroq-qol-modules
  • Date: 2026-07-22
  • Project type: existing

1. Общая информация

  • README: Obsidian-плагин с модульной архитектурой. Каждая QoL-функция — отдельный модуль, включаемый/отключаемый в настройках. Сборка: npm run build.
  • Лицензия: MIT
  • CI/CD: GitHub Actions — release.yml (сборка и релиз при пуше тега v*)
  • Точка входа: src/main.ts → компилируется в main.js через esbuild
  • Система сборки: npm + esbuild (0.17.x), TypeScript 5.x

2. Стек технологий

Компонент Значение
Язык TypeScript (5.x)
Фреймворк Obsidian API (plugin)
База данных
Тестовый раннер нет
Пакетный менеджер npm
Линтер/форматтер нет (не настроен)

3. Архитектура

src/
├── main.ts                          # Plugin class onload/onunload
├── settings.ts                      # ZeroQSettingTab — единая панель настроек
├── types.ts                         # QoLModule, ZeroQSettings, ModuleSettings
├── locales/
│   ├── en.ts                        # Locale interface + English
│   ├── ru.ts                        # Russian translation
│   └── index.ts                     # Language auto-detect + export locale
└── modules/
    ├── index.ts                     # MODULES registry (static array)
    ├── base-module.ts               # BaseModule abstract class
    ├── attachment-clean-paste/
    │   └── index.ts                 # Paste/drop handler — ![[embed]] → [[path|name]]
    └── preserve-link-aliases/
        └── index.ts                 # Rename handler — preserves aliases in links

Паттерн: Модульный монолит (Plugin → Module Registry → Modules)

Ключевые модули:

Модуль Описание
main.ts Жизненный цикл плагина: загрузка настроек, bootstrap модулей
settings.ts Единая панель настроек: рендерит toggle + inline-настройки для каждого модуля
types.ts Интерфейсы: QoLModule, ZeroQSettings, ModuleSettings
locales/ Локализация: автоопределение языка из <html lang>, fallback на en
base-module.ts Абстрактный класс с registerCleanup() для автоматической очистки
attachment-clean-paste Обработка paste/drop: копирует файл в attachments, вставляет `[[path
preserve-link-aliases Обработка rename: сохраняет алиасы `[[path

4. Конвенции

  • Стиль: tabs для отступов, kebab-case для файлов, PascalCase для классов
  • Импорты: import type для type-only импортов; абсолютные пути из Obsidian, относительные внутри проекта
  • Типизация: строгая — noImplicitAny: true, strictNullChecks: true; интерфейсы для настроек модулей
  • Обработка ошибок: try/catch в асинхронных операциях, new Notice() для user-facing ошибок, console.error для логирования
  • Логирование: console.error в исключениях, без отдельного логгера

5. Тесты

  • Команда запуска: нет
  • Всего тестов: 0
  • Тесты отсутствуют в проекте.

6. Базовая проверка

  • Сборка: успешно (npm run build — main.js 17.1kb)
  • Запуск: невозможно (Obsidian-плагин, требуется среда Obsidian)
  • Git status: чисто (ветка dev, untracked только .agent/)

8. Примечания

Существующий проект с 2 модулями. Все модули следуют единому паттерну: BaseModule → onload/onunload/renderInlineSettings. Архитектура спроектирована для лёгкого добавления новых модулей через регистрацию в MODULES и добавление переводов. Есть подробная документация по добавлению модуля в review.md (197 строк). Проект не имеет тестов, линтера, CI (кроме релизного workflow).