[PR #1764] [MERGED] fix(ida): declare GUI navigation for attached legacy analysis #4801

Closed
opened 2026-10-31 00:55:13 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/morluto/rea/pull/1764
Author: @kaoru0822-kitauji
Created: 10/11/2026
Status: ✅ Merged
Merged: 10/11/2026
Merged by: @kaoru0822-kitauji

Base: main ← Head: fix/ida-legacy-ui-effects


📝 Commits (1)

  • 1997795 fix(ida): declare GUI navigation for attached legacy analysis

📊 Changes

3 files changed (+60 additions, -3 deletions)

View changed files

📝 docs/ida-provider.md (+3 -1)
📝 src/ida/IdaProviderCapabilities.ts (+15 -1)
📝 tests/conformance/ida/providerContracts.test.ts (+42 -1)

📄 Description

Fixes #1712.

Problem

Attached IDA mode always selects the legacy 1.4 producer (mrexodia/ida-pro-mcp tag 1.4.0, 27722e9). When an IDA Qt window is active, that producer has two GUI side effects:

  • disassemble_function calls ida_kernwin.jumpto(start) (mcp-plugin.py:939-940).
  • decompile_function calls ida_hexrays.open_pseudocode(start, OPF_REUSE) (mcp-plugin.py:877-878).

No other legacy tool REA uses touches the GUI. But idaCapabilities hard-coded mayShowUi: false, so binary_session reported effects.may_show_ui: false for operations that move the analyst's view.

Change

In attached mode, the operations that reach those tools now declare mayShowUi: true:

  • procedure_pseudo_code
  • procedure_assembly
  • read_function_instructions: this one also calls disassemble_function, which the issue did not list.
  • analyze_function

Headless mode and the other attached operations keep false. The issue asked to keep these controls.

docs/ida-provider.md now describes the side effect in the attached section. The coverage note now says that requested GUI navigation is out of scope, so it no longer contradicts the side effect.

Validation

  • New conformance check in tests/conformance/ida/providerContracts.test.ts, run for both attached and headless modes on every operation. It runs the operation through IdaSessionClient against the recording producer and asserts that the declared mayShowUi equals whether the operation called disassemble_function or decompile_function. Without the source change it fails on the four attached operations listed above.
  • npm run test:local -- tests/conformance/ida/providerContracts.test.ts tests/composition/idaProvider.test.ts src/ida/*.test.ts passes (86 tests).
  • npm run test:focused on the session and provider-selection MCP/composition tests passes (39 tests).
  • npm run check:fast and npm run docs:check pass.

Not verified: a live IDA GUI. The producer behavior comes from reading the pinned upstream source; no real window change was observed.

🤖 Generated with Claude Code


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/morluto/rea/pull/1764 **Author:** [@kaoru0822-kitauji](https://github.com/kaoru0822-kitauji) **Created:** 10/11/2026 **Status:** ✅ Merged **Merged:** 10/11/2026 **Merged by:** [@kaoru0822-kitauji](https://github.com/kaoru0822-kitauji) **Base:** `main` ← **Head:** `fix/ida-legacy-ui-effects` --- ### 📝 Commits (1) - [`1997795`](https://github.com/morluto/rea/commit/1997795ffeaa5df3fce397168ba67427b2d4dce1) fix(ida): declare GUI navigation for attached legacy analysis ### 📊 Changes **3 files changed** (+60 additions, -3 deletions) <details> <summary>View changed files</summary> 📝 `docs/ida-provider.md` (+3 -1) 📝 `src/ida/IdaProviderCapabilities.ts` (+15 -1) 📝 `tests/conformance/ida/providerContracts.test.ts` (+42 -1) </details> ### 📄 Description Fixes #1712. ## Problem Attached IDA mode always selects the legacy 1.4 producer (`mrexodia/ida-pro-mcp` tag 1.4.0, `27722e9`). When an IDA Qt window is active, that producer has two GUI side effects: - `disassemble_function` calls `ida_kernwin.jumpto(start)` (`mcp-plugin.py:939-940`). - `decompile_function` calls `ida_hexrays.open_pseudocode(start, OPF_REUSE)` (`mcp-plugin.py:877-878`). No other legacy tool REA uses touches the GUI. But `idaCapabilities` hard-coded `mayShowUi: false`, so `binary_session` reported `effects.may_show_ui: false` for operations that move the analyst's view. ## Change In attached mode, the operations that reach those tools now declare `mayShowUi: true`: - `procedure_pseudo_code` - `procedure_assembly` - `read_function_instructions`: this one also calls `disassemble_function`, which the issue did not list. - `analyze_function` Headless mode and the other attached operations keep `false`. The issue asked to keep these controls. `docs/ida-provider.md` now describes the side effect in the attached section. The coverage note now says that *requested* GUI navigation is out of scope, so it no longer contradicts the side effect. ## Validation - New conformance check in `tests/conformance/ida/providerContracts.test.ts`, run for both attached and headless modes on every operation. It runs the operation through `IdaSessionClient` against the recording producer and asserts that the declared `mayShowUi` equals whether the operation called `disassemble_function` or `decompile_function`. Without the source change it fails on the four attached operations listed above. - `npm run test:local -- tests/conformance/ida/providerContracts.test.ts tests/composition/idaProvider.test.ts src/ida/*.test.ts` passes (86 tests). - `npm run test:focused` on the session and provider-selection MCP/composition tests passes (39 tests). - `npm run check:fast` and `npm run docs:check` pass. Not verified: a live IDA GUI. The producer behavior comes from reading the pinned upstream source; no real window change was observed. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
bsakaguchi 2026-10-31 00:55:13 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
morluto/rea#4801
No description provided.