aboutsummaryrefslogtreecommitdiffstats
path: root/docs
diff options
context:
space:
mode:
authorblasty <blasty@local>2026-07-10 15:29:21 +0200
committerblasty <blasty@local>2026-07-10 15:29:21 +0200
commit9583334d0d413d8f4962b5d8fa1eccdbc196dd33 (patch)
tree13ed9424c875dcf98d1323f573d19e35c139ef1b /docs
parentdocs: RPC protocol reference (docs/RPC.md) (diff)
downloadida-tui-9583334d0d413d8f4962b5d8fa1eccdbc196dd33.tar.gz
ida-tui-9583334d0d413d8f4962b5d8fa1eccdbc196dd33.tar.xz
ida-tui-9583334d0d413d8f4962b5d8fa1eccdbc196dd33.zip
rpc: more verbs — structured reads, modal select, in-view search, save
Introspection (offloaded to a thread so a big fetch can't freeze the render): pseudocode (full body), disassembly (bounded), xrefs_to/from (structured), resolve (name->ea). These let an agent reason about a function and the call graph without scraping screen(). Semantic: select (choose the highlighted/nth item in the open xrefs or symbol-palette list and activate it — the natural follow-up to xrefs/ symbols), search (/ or ? incremental in the active code view), save (Ctrl+S). rpc_smoke exercises all of them end-to-end (18 green).
Diffstat (limited to 'docs')
-rw-r--r--docs/RPC.md12
1 files changed, 12 insertions, 0 deletions
diff --git a/docs/RPC.md b/docs/RPC.md
index dcf63b6..0a60cc9 100644
--- a/docs/RPC.md
+++ b/docs/RPC.md
@@ -45,12 +45,21 @@ acts on stale state.
| `text` | `text: str`, `delay_ms?=0`, `settle?`, `timeout?` | type a literal string into the focused input; `delay_ms` interleaves per-char waits for a typed-out look. |
### Introspection (read-only)
+Structured reads for an agent to reason without scraping the screen. The heavy
+ones (`pseudocode`/`disassembly`/`xrefs_*`) run off the UI loop so the render never
+stalls. `target` is a name, `0xADDR`, or omitted (= current function).
+
| method | params | returns |
|--------|--------|---------|
| `state` | — | active/pref view, current function `{ea,name}`, cursor `{line,col,word,ea}` (or `{va,byte}` in hex), status text, filter, nav depth, dirty, open `modal`. |
| `view` | `lines?` | visible lines of the active code pane, cursor-marked (disasm/decomp; use `screen` for hex). |
| `screen` | — | `{width,height,text}` — a full plain-text render of exactly what's on screen. |
| `functions` | `filter?`, `limit?=50` | `[{ea,name,size}]`. |
+| `pseudocode` | `target?` | `{ea,name,code,failed,error,truncated}` — the **whole** decompiled body. |
+| `disassembly` | `target?`, `max?=2000` | `{ea,name,total,lines:[{ea,text}]}`. |
+| `xrefs_to` | `target`, `limit?=200` | `[{frm,to,type,fn_addr,fn_name}]` — who references it. |
+| `xrefs_from` | `target`, `limit?=200` | `[{frm,to,type,fn_addr,fn_name}]` — what it references. |
+| `resolve` | `name` | `{ea}` (or `{ea:null}`). |
### Semantic verbs
High-level ops type through the **real prompts** with a per-char delay
@@ -70,6 +79,9 @@ predicate so the returned state is final.
| `xrefs` | — | `x`: open the xref picker. |
| `symbols` | `query?` | Ctrl+N palette, optionally pre-typed. |
| `structs` | — | Ctrl+T struct editor. |
+| `search` | `term`, `direction?=1` | `/` (or `?`) incremental search in the active code view. |
+| `select` | `index?` | in an open modal list (xrefs/symbols) choose the highlighted (or nth) item and activate it. |
+| `save` | — | Ctrl+S: persist the `.i64`. |
| `close` | — | Escape (dismiss a modal). |
### Movement (fast — bare keypresses, pump-only settle)