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

86 lines
5.0 KiB
Markdown

# 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|name]]` |
| `preserve-link-aliases` | Обработка rename: сохраняет алиасы `[[path|oldname]]` при переименовании |
## 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).