What's Changed
Rewrite framework as an object-oriented package
Replace the flat, procedural scripts (main.py + config/*.py + dinstaller/)
with a modular, object-oriented quadrainspect package.
Core:
- registry.py: a command registry of first-class Command objects; dispatch
and help tables are derived from one source, replacing the duplicated
match/switch blocks that were spread across every module. - shell.py: a single InteractiveShell REPL base owning prompt, dispatch,
help, graceful quit and Ctrl-C/EOF handling. - app.py: frame (interactive) and argument modes are driven by one shared
MenuEntry list instead of two hand-maintained match blocks. - runner.py: centralised subprocess execution using argument lists
(shell=False), closing the command-injection holes from the old
string-formatted shell=True calls; cwd= replaces os.chdir juggling. - exceptions.py: a typed QuadraInspectError hierarchy; the REPL reports
expected failures cleanly instead of crashing or swallowing them. - platform.py, session.py, console.py, net.py: OS abstraction, workspace/
target state, shared console + logging, and dependency-free downloads.
Tools:
- Each integrated tool (apkleaks, apkeditor, andropass, backdoor, mobfs,
rms, installer, addins, updater) is now a focused class built on a
Tool/OneShotTool/InteractiveTool hierarchy with dependency injection via
ToolContext. - Add-ons are declarative AddOn objects; the updater self-updates via git.
Packaging & docs:
- Adopt uv: pyproject.toml with a console script and tools/dev extras, a
committed uv.lock, and a .gitignore. - Add a pytest suite (23 tests) covering the core and menu wiring.
- Rewrite the README around the uv workflow and the new architecture.
- main.py is kept as a thin backward-compatible shim.
Add complete-install option (dependencies + tools + add-ons)
Provide a single "install everything" path in addition to the piecemeal
install_tools command.
- FullInstaller (tools/full_installer.py): a one-shot tool that runs the
integrated-tool Installer and then installs every add-on. Exposed as
'START full_install' (frame mode) and '--command full-install' (argument
mode) via one shared MenuEntry. - AddinsManager.install_all(): installs every add-on best-effort, so a
missing dependency or unsupported platform on one add-on is logged and
skipped without aborting the rest; add anaddonsaccessor. - install.sh / install.bat: bootstrap scripts that install uv (if missing),
install all Python dependencies (core + tools extra), and then run the
complete tool/add-on install in one command. Support --deps-only. - Tests: full-installer ordering, best-effort install_all, and both-mode
menu exposure. - README: document the quick-install scripts and the full_install command.
- Add files via upload by @lordprime in #9
- Delete Contributor.txt by @morpheuslord in #10
- Fix typos in README.md by @lingxiaoyiyu-hub in #13
- Long time fixes and updates by @morpheuslord in #14
New Contributors
- @lordprime made their first contribution in #9
- @lingxiaoyiyu-hub made their first contribution in #13
Full Changelog: 1.1.1...1.1.2