Metadata-Version: 2.4
Name: mandochka
Version: 0.1.0
Summary: High-performance plugin builder for ElyxCore with native D8/Javac DEX compilation and incremental architecture
Author: Mandochka Team
License-Expression: MIT
Project-URL: Homepage, https://github.com/shareui/Mandochka
Project-URL: Repository, https://github.com/shareui/Mandochka
Project-URL: Issues, https://github.com/shareui/Mandochka/issues
Project-URL: Documentation, https://github.com/shareui/Mandochka#readme
Keywords: elyx,elyxbuilder,plugin,builder,d8,javac,dex,android,compiler,fast,exteragram,ayugram
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Software Development :: Build Tools
Classifier: Topic :: Software Development :: Compilers
Classifier: Topic :: Software Development :: Code Generators
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: pyyaml>=6.0
Requires-Dist: orjson>=3.9.0
Requires-Dist: xxhash>=3.3.0
Requires-Dist: isal>=1.5.0
Provides-Extra: crypto
Requires-Dist: pyzipper>=0.3.6; extra == "crypto"
Provides-Extra: all
Requires-Dist: pyzipper>=0.3.6; extra == "all"
Dynamic: license-file

# Mandochka ⚡

[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
[![Python: >=3.10](https://img.shields.io/badge/python-%3E%3D3.10-blue.svg)](pyproject.toml)

**Mandochka** — высокопроизводительный инструмент сборки плагинов для **ElyxCore** (exteraGram, AyuGram, exteraless и др.), форк ElyxBuilder с полной переработкой под **максимальную производительность** и **нативную интеграцию с D8/Javac (DEX)** без необходимости писать костыльные скрипты-обёртки, как это приходилось делать в `pluginmanager-canary`.

---

## В чём проблема ElyxBuilder и почему появилась Mandochka?

В оригинальном `ElyxBuilder`:
1. **Полное отсутствие поддержки DEX/Java**: если плагину требовался нативный Java DEX мост (как в `pluginmanager-canary` для SIMD/DEX ускорения векторных моделей или хуков), разработчикам приходилось:
   - Вручную писать сложные скрипты `build-dex.sh` и `build-dex.bat` на 130+ строк.
   - Искать JDK, javac, Android SDK или писать скрипты скачивания `r8.jar` через PowerShell/curl.
   - Компилировать стабы (`compile_stubs`) вручную в два этапа.
   - Оборачивать `elyb build` во внешние скрипты `build-uv.sh` / `build-uv.bat`.
   - Терпеть отсутствие инкрементального кэширования для Java/DEX (каждый запуск компилировал всё заново).
2. **Экстремально медленная компиляция Python**:
   - ElyxBuilder для каждого `.py` файла запускал отдельный процесс `python -c "import py_compile..."`. При 50–100 файлах это занимало **15–20 секунд**.
3. **Недописанный интерпретатор DSL**:
   - Команда `elyb script` падала с `ModuleNotFoundError: No module named 'elyb.elyxdsl.interpreter'`.

---

## Что даёт Mandochka?

### 1. Нативная интеграция с D8 / Javac («без извращений»)
- **Zero-config автоопределение**: если в проекте есть `dex_src/` или `java_src/`, Mandochka сама всё скомпилирует в `.dex`.
- **Автопоиск компиляторов**: автоматически находит `javac` в PATH, `JAVA_HOME`, Scoop (`temurin17-jdk` и др.), Program Files и системных путях Linux/macOS.
- **Автопоиск и автозагрузка D8/R8**: находит `d8` в Android SDK `build-tools`, либо **автоматически скачивает официальный `r8.jar`** с Google Maven в глобальный кэш `~/.mandochka/bin/r8.jar`. Больше никаких ручных скачиваний!
- **Поддержка Stubs**: двухэтапная компиляция стабов (`compile_stubs/`) и внешних `.jar` библиотек из коробки.
- **Инкрементальный кэш DEX**: если Java-файлы и стабы не менялись, проверка занимает **< 15 мс**.
- **Команда `mandochka dex`**: отдельная удобная команда для прямой сборки DEX без упаковки всего плагина.

### 2. Максимальная производительность
- **Пакетная и многопоточная компиляция Python 3.11**:
  - Нативная компиляция в памяти при запуске под Python 3.11.
  - Высокоскоростной батч-воркер через потоки/процессы: **100+ файлов компилируются за ~150 мс** вместо 15 секунд.
- **Многопоточная проверка AST (`-a`)** и параллельная обфускация (`-o`).
- **Сверхбыстрая повторная сборка**: проект из 150 файлов пересобирается всего за **~170 миллисекунд**!
- **Бенчмарк фаз (`-b` / `--benchmark`)**: детальный отчёт о времени каждой стадии (dex, ast, pyc, pack) в миллисекундах.

### 3. Полная совместимость и сохранение возможностей
- Псевдонимы команд: `mandochka`, `mando`, `elyb` (полная обратная совместимость со всеми существующими скриптами и CI!).
- Поддержка `refmap.json`, `refmap.yml`, `config.yml`, `.mandochka/` и `.elyxbuilder/`.
- Полный набор команд: `new`, `build`, `dex`, `doctor`, `cached`, `stats`, `watch`, `ignore`, `script`.
- **Полнофункциональный интерпретатор `.edsl`** для автоматизации сборки.

---

## Сравнение производительности

| Сценарий | ElyxBuilder | Mandochka | Ускорение |
|---|---|---|---|
| Сборка плагина (~150 файлов) без кэша | ~18.5 с | **~1.2 с** | **~15x быстрее** |
| Инкрементальная пересборка (кэш hit) | ~3.2 с | **~0.17 с (170 мс)** | **~19x быстрее** |
| Сборка Java в DEX (3 файла + стабы) | Вручную скриптами (~4.5 с) | **Нативно (~1.0 с)** | **Автоматически** |
| Повторный DEX (кэш hit) | Перекомпиляция (~4.5 с) | **~0.01 с (10 мс)** | **Мгновенно** |

---

## Установка

```bash
git clone https://github.com/shareui/Mandochka.git
cd Mandochka
pip install -e .
```

Проверьте готовность системы:
```bash
mandochka doctor
```

---

## Быстрый старт

### Создание плагина с Java DEX мостом:
```bash
mandochka new -g -n "MyPlugin" -a "Nickname" --with-dex
cd Myplugin
```

### Сборка плагина:
```bash
# Скомпилирует Python 3.11 bytecode + Java DEX + упакует в builds/MyPlugin-0.1.0-3.11.eaf
mandochka build -c 2 -b
```

### Отдельная компиляция только DEX:
```bash
mandochka dex -v
```

### Просмотр статуса кэша:
```bash
mandochka cached
```

---

## Конфигурация (`config.yml`)

```yaml
zipFormat: eaf
source: myplugin/src
buildNameUncompiled: "{name}-{version}"
buildNameCompiled: "{name}-{version}-3.11"
ignoreAll:
  - myplugin/.mandochka/cache/*
compilationIgnore:
  - myplugin/src/main.py

# Нативная интеграция DEX / Java
dex:
  enabled: true
  source: myplugin/dex_src
  stubs: myplugin/compile_stubs
  output: myplugin/res/dex/classes.dex
  minApi: 26
  targetJava: 8
  autoDownloadR8: true

obfuscationConfig:
  stripDocstrings: true
  removeLogs: true
  renameLocals: true
  encodeStrings: true
  encodeNumbers: true
```

---

## CLI Справка

- `mandochka build`: сборка плагина (`-c [0-2]`, `-a`, `-o`, `-p <method> <pass>`, `--dex`, `--skip-dex`, `-j <jobs>`, `-b`).
- `mandochka dex`: прямая компиляция Java в Dalvik DEX (`--source`, `--output`, `--stubs`, `--min-api`, `--release`, `--d8`, `--javac`, `-f`, `-c`, `-v`).
- `mandochka doctor`: диагностика компиляторов и инструментов окружения.
- `mandochka cached`: статус файлов в кэше Python и DEX.
- `mandochka stats`: статистика проекта (`builds`, `lines`, `size`, `files`).
- `mandochka watch`: авто-пересборка при изменениях файлов.
- `mandochka new`: мастер создания плагина (интерактивный или через `--gen`).
- `mandochka script`: запуск `.edsl` скриптов автоматизации.
- `mandochka add-ignore` / `del-ignore`: управление списками игнорирования.

---

## Документация

- [Русская документация](docs/ru/)
  - [Интеграция с D8 / Javac](docs/ru/dex.md)
  - [Сборка плагинов](docs/ru/build.md)
  - [Команды и утилиты](docs/ru/commands.md)
- [English Documentation](docs/en/en.md)

---

## Лицензия

MIT License. См. файл [LICENSE](LICENSE).
