<feed xmlns='http://www.w3.org/2005/Atom'>
<title>ida-tui.git/ida-tui, branch main</title>
<subtitle>tui for headless ida</subtitle>
<id>https://git.sl0p.foo/ida-tui.git/atom/ida-tui?h=main</id>
<link rel='self' href='https://git.sl0p.foo/ida-tui.git/atom/ida-tui?h=main'/>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/ida-tui.git/'/>
<updated>2026-07-24T12:53:56Z</updated>
<entry>
<title>mcp: delete the ida-pro-mcp transport, supervisor, and mcp-only tests</title>
<updated>2026-07-24T12:53:56Z</updated>
<author>
<name>blasty</name>
<email>blasty@local</email>
</author>
<published>2026-07-24T12:53:56Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/ida-tui.git/commit/?id=22ffea91210610d1def042e230ffe8d223022b30'/>
<id>urn:sha1:22ffea91210610d1def042e230ffe8d223022b30</id>
<content type='text'>
The idalib worker is the only backend now, so remove the dead HTTP/supervisor
surface entirely (~2200 lines):

* deleted idatui/client.py (the IDAClient HTTP/JSON-RPC transport + session
  manager), idatui/tui.py (the old mcp TUI entry, superseded by launch.py),
  spawn.sh, and systemd/ (the supervisor unit).
* deleted the mcp-only tests (stress_client, smoke_client, test_keepalive,
  stress_paging, rpc_smoke, serverctl.sh, pane_smoke, test_domain) -- the worker
  pilot (tests/test_scenarios.py) supersedes them.
* migrated the tmux RPC harness (idatui/pane.py) to the worker: it spawns
  `idatui.launch &lt;binary&gt; --rpc &lt;sock&gt;` instead of the mcp `idatui.tui`, drops
  the supervisor auto-start/ensure machinery, and reaps our own worker
  (idatui/worker.py) instead of ida_pro_mcp.idalib_server. --db/--url/--no-
  ensure-server are gone; --open is required.
* __init__ / __main__ / domain no longer import client (exceptions come from
  errors.py, the domain client hint is WorkerClient); pyproject points both
  console scripts at idatui.launch; README + ida-tui header describe the
  worker-only flow.

What stays (by design): the ida_pro_mcp *package* (the worker reuses its @tool
functions in-process) and server/patch_server.py (the worker injects its custom
tools on startup). Verified: whole package imports + IdaTui constructs + pilot
lists 31 scenarios. The worker pilot (134 pass / 2 known flakes) is the E2E gate.
</content>
</entry>
<entry>
<title>deprecate: make the idalib worker the default backend; mark mcp path for removal</title>
<updated>2026-07-23T23:56:47Z</updated>
<author>
<name>blasty</name>
<email>blasty@local</email>
</author>
<published>2026-07-23T23:56:47Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/ida-tui.git/commit/?id=03564655fda1682e61bbf7055c3ef310c448cf28'/>
<id>urn:sha1:03564655fda1682e61bbf7055c3ef310c448cf28</id>
<content type='text'>
Opening a binary now defaults to our own idalib worker; the ida-pro-mcp HTTP
supervisor path is deprecated (kept only for --db/attach and --backend mcp).

* launch.py: --backend default resolves to worker for a fresh binary open, mcp
  for the attach modes (--db / bare `ida-tui`, which have no worker equivalent);
  explicit --backend or IDATUI_BACKEND still wins. Logs a deprecation notice when
  the mcp path is used.
* Deprecation markers on client.py and server/patch_server.py; the ida-tui shell
  header and README now describe the worker as primary and note
  $IDATUI_WORKER_PYTHON. TODO tracks the removal checklist.

No code deleted yet — the mcp fallback stays until the worker is proven on a box
where idalib can spawn (pilot against --backend worker is the gate). Backend
resolution matrix verified: `ida-tui bash`-&gt;worker, bare/`--db`-&gt;mcp, explicit
flag/env honored.
</content>
</entry>
<entry>
<title>launch: `ida-tui foo.elf` one-shot wrapper (server + locks + session)</title>
<updated>2026-07-22T22:14:59Z</updated>
<author>
<name>blasty</name>
<email>blasty@local</email>
</author>
<published>2026-07-22T22:14:59Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/ida-tui.git/commit/?id=d259039706c25fe99096ecdf3302987a3a792ebb'/>
<id>urn:sha1:d259039706c25fe99096ecdf3302987a3a792ebb</id>
<content type='text'>
A caveman entry point so you don't hand-craft the plumbing every time. It:
  * ensures the ida-pro-mcp supervisor is up — starts spawn.sh detached
    (start_new_session, tmux-free) and waits for the port if it's down;
  * recovers a binary wedged by a hard-killed worker — sweeps the stale
    unpacked .id0/.id1/.id2/.nam/.til next to the .i64 and retries (the packed
    .i64 is never touched);
  * adopts an already-open session for the same binary (idempotent), else
    idb_opens it with a sane idle-TTL;
  * launches the TUI attached to that session with keepalive on.

  ./ida-tui /path/to/binary     # open a binary and drive it
  ./ida-tui                     # attach to the sole session
  ./ida-tui --db &lt;id&gt;           # attach to a specific session

Pieces: idatui/launch.py (logic, reuses pane.py's server probe), a repo-root
`ida-tui` sh wrapper (resolves ~/ida-venv python, keeps idatui importable from
any cwd), and an `ida-tui` console-script in pyproject. --help works without
textual (app imported late). README documents both the one-liner and the
manual recovery. gitignore bin/ (binary targets, like targets/).

Verified live: ensure_server up-detection, open, adopt (same session id), and
lock-sweep all work against a running supervisor.
</content>
</entry>
</feed>
