Plugin loader (mirrors Rust #29): - plugins_store.py walks %APPDATA%\com.priler.jarvis\plugins\<name>\ for commands.yaml fragments and merges them into VA_CMD_LIST at startup. Same schema as the project root commands.yaml. Per-pack `disabled` flag file skips a pack without deletion. Built-in ids win conflicts so a malicious pack can't silently override open_browser. 9 unit tests (parity with the Rust tests). - main.py: plugin merge runs after the root yaml load; logs the number of extra commands picked up. Flet GUI (#27 — first parity with the Rust Tauri GUI): - New gui/ package: __main__.py launches via `python -m gui` (or gui.bat). app.py routes between 7 pages (Главная / Команды / Макросы / Расписание / Память / Плагины / Настройки) via NavigationRail; dark theme matching the Tauri look. - gui/services.py centralises every store-module call the pages share — single place to swap implementations later. - One file per page in gui/pages/, all expose `build(page)` and use the same card layout idiom. Pages mirror the Tauri ones feature- for-feature: home (status + counters + launcher), commands (filterable list of all VA_CMD_LIST entries), macros (list + delete + recording banner), scheduler (list + remove), memory (add/forget/search), plugins (toggle/open folder), settings (profile + LLM hot-swap). - requirements.txt: flet>=0.85 (optional; assistant runs without). - 3 smoke tests verify imports + build callables; skip cleanly when Flet isn't installed. README: documents both the GUI and the plugin layout in user-facing terms. Tests: 42 → 54 (+9 plugins +3 GUI smoke).
19 lines
807 B
Python
19 lines
807 B
Python
"""Python Flet GUI — Russian-language desktop UI mirroring the Rust Tauri GUI.
|
|
|
|
Entry point: `python -m gui` (see `__main__.py`).
|
|
|
|
Layout:
|
|
gui/__init__.py # this docstring
|
|
gui/__main__.py # `python -m gui` entry
|
|
gui/app.py # routing, layout, theme
|
|
gui/pages/ # one file per page (home, commands, macros, ...)
|
|
gui/services.py # thin sync wrappers around store modules
|
|
|
|
Design notes:
|
|
- Each page is a function `build(page: ft.Page) -> ft.Control` returning a
|
|
composable view. This keeps state per-page lazy and lets the user navigate
|
|
without prematurely loading everything.
|
|
- The GUI does not start the assistant; it only manipulates state files and
|
|
hot-launches `main.py` in a subprocess (mirroring how the Rust GUI starts
|
|
jarvis-app.exe via tray).
|
|
"""
|