From 8d67549eaa927c7ffc48c57f3ebc438c0fe7da09 Mon Sep 17 00:00:00 2001 From: blasty Date: Thu, 9 Jul 2026 12:05:24 +0200 Subject: Phase 1 TUI: two-pane functions<->disasm, virtualized listing, nav backbone - idatui/app.py: keyboard-first Textual app * FunctionsPanel: lazy-streamed function list (DataTable) with glob filter * DisasmView: line-VIRTUALIZED ScrollView -- paints from domain block cache, background-fetches misses, prefetches neighbors. Proven: 52,120-insn func, jump-to-bottom in 0.31s with only ~6 blocks (~1.5k lines) ever materialized. * address-history nav stack (Enter follow / Esc back); goto by name or 0xADDR * bump_idle_ttl + KeepAlive on startup so the session never idles out * all MCP work on Textual worker threads; UI never blocks - idatui/tui.py: launcher (python -m idatui.tui / console script 'idatui') - tests/test_tui.py: headless Pilot test, 9/9 (boot, load 10k funcs, open, scroll, bg-cache, goto-bottom, filter) - pyproject: textual extra + idatui script entry --- pyproject.toml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'pyproject.toml') diff --git a/pyproject.toml b/pyproject.toml index e491542..cb23cfa 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,10 +8,13 @@ requires-python = ">=3.11" dependencies = [] [project.optional-dependencies] -# The TUI layer (added in a later phase) pulls in Textual. -tui = ["textual>=0.60"] +# The TUI layer pulls in Textual; the client/domain layers are stdlib-only. +tui = ["textual>=8"] dev = ["pytest>=8"] +[project.scripts] +idatui = "idatui.tui:main" + [build-system] requires = ["hatchling"] build-backend = "hatchling.build" -- cgit v1.3.1-sl0p