Metadata-Version: 2.5
Name: remandochka
Version: 0.0.6
Summary: RM (ReMandochka) — Высокопроизводительная библиотека хукинга, обхода защит ART/R8 и KDL v2 рантайма для плагинов exteraGram
Author: swagnonher
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Requires-Python: >=3.8
Description-Content-Type: text/markdown

# RM (ReMandochka) v0.0.6 — Библиотека хукинга, обхода защит ART/R8, UI и KDL v2 рантайма
### (PyPI: `remandochka` | Python import: `import rm` или `import remandochka`)

**ReMandochka (RM)** — высокопроизводительная инструментальная библиотека для разработчиков плагинов **exteraGram**, решающая проблемы с защитами, барьерами Android Runtime (ART), компилятора R8, предоставляющая архитектурный каркас UI компонентов, встроенный ультра-быстрый парсер документов **KDL v2 (2.0.0)** и безопасную Java-рефлексию.

- **PyPI**: `remandochka` (установка: `pip install remandochka`).
- **Сборщик**: Hatchling (PEP 621 / `pyproject.toml`).
- **Архитектура**: 1 единственный `__init__.py` на всю библиотеку без лишнего бойлерплейта.
- **Производительность**: оптимизирована под мульти-плагинный сценарий (кэширование дескрипторов полей, JNI-классов, версий, memoization KDL, мультиплексирование хуков).
- **Импорт в плагинах**: `import rm` или `import remandochka`.

---

## ⚡ Структура библиотеки (`src/`)

- **`remandochka.core`**:
  - `rm.parse_kdl(text)` / `rm.dumps_kdl(doc)`: моментальный парсер KDL 2.0.0 (~100 микросекунд с LRU-кэшем).
  - `rm.is_dev_mode()`, `rm.dev_log(plugin, msg)`: Zero Log Spam логирование (TTL-кэшировано).
  - `rm.get_app_version()`: автоопределение версии клиента Telegram / exteraGram.
  - `rm.get_field()`, `rm.set_field()`, `rm.get_java_class()`: безопасная Java-рефлексия с кэшированием `Field` и JNI-классов.
- **`remandochka.bypass`**:
  - `rm.Bypass(plugin)`: фасад управления хуками с защитой от дублирования и безопасной выгрузкой плагинов.
  - `@bypass.hook("ClassName", "methodName")`: декоратор для классов `MethodHook` или функций.
  - Внешняя база правил: `remandochka/resources/rules.jsonl`.
- **`remandochka.ui`**:
  - **`views`**: `View`, `SheetView`, `DialogView`, `PanelView`.
  - **`cells`**: `Cell`, `HeaderCell`, `TextCell`, `ButtonCell`, `SwitchCell`, `InputCell`.
  - **`fragment`**: `BaseFragment`, `SettingsFragment`, `TabFragment`.
  - **`layout`**: `LinearLayout`, `FrameLayout`, `ScrollLayout`, `StackLayout`.
  - **`components`**: `BadgeComponent`, `AvatarComponent`, `ProgressBarComponent`, `SearchBarComponent`, `DividerComponent`, `IconComponent`, `ActionSheetComponent`.

---

## ⚡ Моментальный KDL v2/v1 парсер (`rm.parse_kdl`)

Пакет содержит оптимизированный парсер новейшей спецификации **KDL 2.0.0** с поддержкой:
- Всех современных конструкций KDL v2 (`#true`, `#false`, `#null`, `#inf`, `#-inf`, `#nan`, шестнадцатеричные `0x...`, восьмеричные `0o...`, двоичные `0b...`, децимальные числа с экспонентой и разделителями `_`).
- Многострочных строк `""" ... """` и `#""" ... """#` с автоматическим дедентированием по спецификации KDL v2.
- Сырых строк `#"..."#`, `##"..."##`.
- Эскейп-последовательностей (`\n`, `\r`, `\t`, `\s`, `\u{1F600}`, whitespace escapes `\`).
- Комментариев `//`, вложенных блочных комментариев `/* /* ... */ */` и слешдаш-комментариев `/-` (для нод, аргументов, свойств и дочерних блоков).
- Типовых аннотаций `(type)node` и `(type)value`.

### Использование KDL в коде:

```python
import rm

# 1. Быстрый парсинг KDL-строки
doc = rm.parse_kdl("""
package name="ReMandochka" version="0.0.6" {
    flags active=#true debug=#false test=#null
    numbers hex=0xDEAD_BEEF dec=1_000_000
    multiline \"\"\"
        Привет, мир!
        Вторая строка с отступом.
        \"\"\"
    raw #"C:\\Path\\Without\\Escapes"#
    (role)node (u8)255 (date)"2026-10-26"
}
""")

# 2. Доступ к узлам и свойствам
pkg = doc["package"]
print(pkg["name"])              # "ReMandochka"
print(pkg.get("version"))        # "0.0.6"

flags = pkg.child("flags")
print(flags["active"])           # True

# 3. Конвертация в словарь
data_dict = doc.to_dict()

# 4. Сериализация обратно в KDL
kdl_text = rm.dumps_kdl(doc)
```

---

## 🛡️ Модуль обхода блокировок ART/R8 (`rm.Bypass`)

```python
from base_plugin import BasePlugin, MethodHook
import rm

class MyPlugin(BasePlugin):
    def on_plugin_load(self):
        self.bypass = rm.Bypass(self)

        @self.bypass.hook("InstallPluginBottomSheet", "<init>")
        class CtorHook(MethodHook):
            def before_hooked_method(self, param):
                # param.args[2] — PluginInstallParams
                param.args[2].setTrusted(True)

            def after_hooked_method(self, param):
                sheet = param.thisObject # живой экземпляр шторки

        @self.bypass.hook("InstallPluginBottomSheet", "applyButtonState")
        class ButtonHook(MethodHook):
            def after_hooked_method(self, param):
                sheet = param.thisObject
                # кастомизация кнопки

        self.bypass.install()

    def on_plugin_unload(self):
        self.bypass.uninstall()
```

---

## 🎨 Модуль UI (`rm.ui`)

Архитектурный каркас для построения интерфейсов плагинов exteraGram:

```python
import rm
from rm.ui.views import SheetView
from rm.ui.cells import HeaderCell, TextCell, SwitchCell, ButtonCell
from rm.ui.layout import LinearLayout
from rm.ui.components import BadgeComponent, AvatarComponent

sheet = SheetView(title="Настройки плагина")
layout = LinearLayout(orientation="vertical", spacing=8)

layout.add(AvatarComponent(initials="RM", size=48))
layout.add(BadgeComponent(text="Beta", color="#4CAF50"))
layout.add(HeaderCell("Основное"))
layout.add(TextCell("Статус", "Активен"))
layout.add(SwitchCell("Авто-обновление", value=True))
layout.add(ButtonCell("Сохранить", on_click=lambda: print("Saved!")))

sheet.add_child(layout)
```

---

## 🔇 Интеллектуальное логирование (Zero Log Spam)

Библиотека не засоряет логи приложения:
* Логи выводятся **ТОЛЬКО** тогда, когда в настройках плагин-системы включен **Режим разработчика (`rm.is_dev_mode() == True`)**.
* При выключенном режиме разработчика библиотека работает в режиме **полной тишины**.

---

## 📦 Спецификация для плагинов exteraGram

- В файлах `.plugin`:
  ```python
  __requirements__ = ["remandochka 0.0.6"]
  ```
- В архивах `.elyx` (`metainfo.json`):
  ```json
  "requirements": "remandochka 0.0.6"
  ```
