[PR #5248] chore(android): update jadx-headless-mcp provider to 0.8.0 #6835

Open
opened 2026-11-01 21:43:24 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/morluto/rea/pull/5248
Author: @1013503897
Created: 10/19/2026
Status: 🔄 Open

Base: main ← Head: chore/jadx-headless-mcp-0.8.0


📝 Commits (1)

  • 821b3e5 chore(android): update jadx-headless-mcp provider to 0.8.0

📊 Changes

16 files changed (+32 additions, -32 deletions)

View changed files

📝 .agents/skills/reverse-engineer-anything/references/android-applications.md (+1 -1)
📝 THIRD_PARTY_NOTICES.md (+1 -1)
📝 bridge/android/ReaJadxBridge.java (+1 -1)
📝 docs/android-analysis.md (+12 -12)
📝 docs/testing.md (+1 -1)
📝 scripts/fixtures/android/fetch.mjs (+1 -1)
📝 src/android/JadxConfiguration.ts (+1 -1)
📝 src/android/JadxRelease.ts (+4 -4)
📝 src/application/CapabilityInventory.ts (+1 -1)
📝 src/server/registerSessionTools.ts (+1 -1)
📝 tests/boundary/android/JadxAnalysis.test.ts (+1 -1)
📝 tests/boundary/mcp/androidPackageSummaryMcp.test.ts (+1 -1)
📝 tests/boundary/process/androidAnalysisMcp.test.ts (+2 -2)
📝 tests/fixtures/android/jadx-mcp.mjs (+1 -1)
📝 third_party/README.md (+2 -2)
📝 third_party/jadx-headless-mcp (+1 -1)

📄 Description

Summary

Bump the audited headless JADX MCP provider from v0.7.1 → v0.8.0
(upstream release).
The caller-supplied-JAR contract, the rea-jadx-bridge identity, and the adapter
surface are unchanged; REA still never downloads the engine.

Problem and expected behavior

REA pins the audited JADX provider at v0.7.1. Upstream shipped v0.8.0 with changes
relevant to this read-only provider:

  • get_class_source gains a UTF-8 byte offset; it and get_smali_of_class now
    window by exact UTF-8 bytes (never splitting a multibyte char) and report
    total_bytes / next_offset.
  • Decompile-pool fairness: a task's timeout is charged to its own execution time, so a
    queued request can no longer retire the pool and interrupt a sibling's decompile.
  • New tool get_main_application_classes_names; launcher JVM-arg parity; CI now runs
    test + shadowJar.

Expected: REA integrates the audited 0.8.0 JAR, pinned by digest, with the engine-version
contract and tests updated to match.

Change and scope

Version bump across the release identity, the submodule gitlink, docs, remediation
strings, tests, and the protocol fixture. No new provider or capability; no change to
REA's CLI/MCP tool surface or to target interaction. Ordinary change within existing
boundaries — maintainer scope decision: not applicable. No issue is linked: routine upstream-release version bump within existing provider boundaries.

Contract and boundary impact

  • Semantic owner and earliest changed stage: Android JADX provider (src/android/), release identity.
  • Contribution scope fit and linked maintainer decision: existing-provider version bump; not applicable.
  • CLI and MCP/tool-catalog contract: unchanged.
  • Provider, bridge, target-format, or platform compatibility: engine 0.7.1 → 0.8.0; rea-jadx-bridge identity unchanged; byte-offset paging is additive upstream.
  • Evidence, artifact, provenance, or reconstruction contract: unchanged. Dated provenance (website/evidence/aegis-login-code.md, website/public/showcase/aegis/index.html, experiments/analysis-efficiency/*) intentionally left at 0.7.1 as records of specific past runs.
  • Target selection, authority, upstream behavior, and cleanup details: not applicable.
  • Generated metadata, package, or installation impact: none committed; only the authored .agents/skills/reverse-engineer-anything/references/android-applications.md version string changed. No build outputs committed.

Expected effects — version/metadata/test change only; the provider's runtime behavior
toward targets (caller-supplied static decompile) is unchanged, so no new target
interaction is introduced.

  • Read existing files or captured data.
  • Launch or attach to a process.
  • Inject instrumentation or run scripts/code.
  • Change process memory, registers, files, or configuration.
  • Contact network services.
  • Recover protected code or work around protections.
  • Documentation or usability only; no target interaction.
  • Not sure yet; investigation or maintainer guidance needed.

Evidence and regression coverage

  • Tests added or updated: expected engine version in tests/boundary/android/JadxAnalysis.test.ts, tests/boundary/mcp/androidPackageSummaryMcp.test.ts, tests/boundary/process/androidAnalysisMcp.test.ts, and the protocol fixture tests/fixtures/android/jadx-mcp.mjs moved to 0.8.0. The engine-version mismatch mode deliberately stays at 0.7.0.

  • Base reproduction or other evidence: the pinned fat-jar SHA-256 was verified against the published GitHub release asset — 4b9a01c23845c123c217840182d2b5f2c26a7ca20dec3d08810b310fc80a2372 jadx-headless-mcp-0.8.0-all.jar.

  • User-visible CLI/MCP output (if applicable): none; the provider reports engine_reported_version: "0.8.0" via BuildInfo.VERSION.

  • Remaining proof gaps: the real-APK provider lane (REA_JADX_MCP_JAR + JDK) was not executed locally; relies on CI.

  • Observed, derived, and inferred claims remain distinguishable.

  • Artifact identity, source provenance, and failed attempts remain preserved.

  • Unsupported, incomplete, unavailable, or uncertain outcomes remain visible.

Validation performed

  • tsc --noEmit — clean.
  • oxfmt --check (changed JS/TS) — clean.
  • vitest run tests/boundary/android tests/boundary/process/jadxIntegration.test.ts tests/boundary/mcp/androidPackageSummaryMcp.test.ts src/android — pass.
  • vitest run tests/boundary/process/androidAnalysisMcp.test.ts — 3 test.each process-boundary cases fail identically on the unmodified base commit (pre-existing Windows-only stdio-handshake gap; most tests in that file are already skipIf(win32)), so they are unrelated to this change. Run on Windows x64; please let the Linux CI lane run the full matrix.

Compatibility, safety, and release

  • Breaking changes or migration steps: none. Callers supplying a 0.7.1 JAR will now see an engine-version mismatch (capability_unavailable) and must supply the 0.8.0 JAR — same pin-by-digest contract as before.
  • Real Hopper/Ghidra, browser, or OS coverage: not applicable.
  • Package or release metadata impact: none committed.
  • Security, privacy, process, or containment review: no change; read-only static analysis, engine still caller-supplied and digest-pinned.

Author readiness

Human owner: @1013503897

  • I reviewed the final diff and relevant existing code, understand the change and its edge cases, and take responsibility for the complete PR, including AI-assisted work.
  • I checked the evidence above, confirmed it supports the current change, and recorded meaningful validation gaps.
  • I declare this PR ready for initial maintainer review.

Before merge

  • This PR addresses a concrete problem or an agreed enhancement.
  • Material scope and authority questions are resolved, and any required maintainer scope decision covers the final diff.
  • The PR has one focused outcome and the title follows type(scope): outcome.
  • Related issue is linked, or the reason for not linking one is stated above.
  • Tests cover changed observable behavior and meaningful failure paths.
  • Owning docs, contracts, and generated metadata are updated where needed.
  • User-visible CLI/MCP changes include representative output.
  • I checked the final diff for secrets, unrelated cleanup, and unsupported claims.

🔄 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/5248 **Author:** [@1013503897](https://github.com/1013503897) **Created:** 10/19/2026 **Status:** 🔄 Open **Base:** `main` ← **Head:** `chore/jadx-headless-mcp-0.8.0` --- ### 📝 Commits (1) - [`821b3e5`](https://github.com/morluto/rea/commit/821b3e558cc8b4f5bf4d0e47714ed943a749dd83) chore(android): update jadx-headless-mcp provider to 0.8.0 ### 📊 Changes **16 files changed** (+32 additions, -32 deletions) <details> <summary>View changed files</summary> 📝 `.agents/skills/reverse-engineer-anything/references/android-applications.md` (+1 -1) 📝 `THIRD_PARTY_NOTICES.md` (+1 -1) 📝 `bridge/android/ReaJadxBridge.java` (+1 -1) 📝 `docs/android-analysis.md` (+12 -12) 📝 `docs/testing.md` (+1 -1) 📝 `scripts/fixtures/android/fetch.mjs` (+1 -1) 📝 `src/android/JadxConfiguration.ts` (+1 -1) 📝 `src/android/JadxRelease.ts` (+4 -4) 📝 `src/application/CapabilityInventory.ts` (+1 -1) 📝 `src/server/registerSessionTools.ts` (+1 -1) 📝 `tests/boundary/android/JadxAnalysis.test.ts` (+1 -1) 📝 `tests/boundary/mcp/androidPackageSummaryMcp.test.ts` (+1 -1) 📝 `tests/boundary/process/androidAnalysisMcp.test.ts` (+2 -2) 📝 `tests/fixtures/android/jadx-mcp.mjs` (+1 -1) 📝 `third_party/README.md` (+2 -2) 📝 `third_party/jadx-headless-mcp` (+1 -1) </details> ### 📄 Description ## Summary Bump the audited headless JADX MCP provider from **v0.7.1 → v0.8.0** ([upstream release](https://github.com/1013503897/jadx-headless-mcp/releases/tag/v0.8.0)). The caller-supplied-JAR contract, the `rea-jadx-bridge` identity, and the adapter surface are unchanged; REA still never downloads the engine. ## Problem and expected behavior REA pins the audited JADX provider at v0.7.1. Upstream shipped v0.8.0 with changes relevant to this read-only provider: - `get_class_source` gains a UTF-8 **byte** `offset`; it and `get_smali_of_class` now window by exact UTF-8 bytes (never splitting a multibyte char) and report `total_bytes` / `next_offset`. - Decompile-pool fairness: a task's timeout is charged to its own execution time, so a queued request can no longer retire the pool and interrupt a sibling's decompile. - New tool `get_main_application_classes_names`; launcher JVM-arg parity; CI now runs `test` + `shadowJar`. Expected: REA integrates the audited 0.8.0 JAR, pinned by digest, with the engine-version contract and tests updated to match. ## Change and scope Version bump across the release identity, the submodule gitlink, docs, remediation strings, tests, and the protocol fixture. No new provider or capability; no change to REA's CLI/MCP tool surface or to target interaction. Ordinary change within existing boundaries — maintainer scope decision: not applicable. No issue is linked: routine upstream-release version bump within existing provider boundaries. ## Contract and boundary impact - Semantic owner and earliest changed stage: Android JADX provider (`src/android/`), release identity. - Contribution scope fit and linked maintainer decision: existing-provider version bump; not applicable. - CLI and MCP/tool-catalog contract: unchanged. - Provider, bridge, target-format, or platform compatibility: engine 0.7.1 → 0.8.0; `rea-jadx-bridge` identity unchanged; byte-offset paging is additive upstream. - Evidence, artifact, provenance, or reconstruction contract: unchanged. Dated provenance (`website/evidence/aegis-login-code.md`, `website/public/showcase/aegis/index.html`, `experiments/analysis-efficiency/*`) intentionally left at 0.7.1 as records of specific past runs. - Target selection, authority, upstream behavior, and cleanup details: not applicable. - Generated metadata, package, or installation impact: none committed; only the authored `.agents/skills/reverse-engineer-anything/references/android-applications.md` version string changed. No build outputs committed. Expected effects — version/metadata/test change only; the provider's runtime behavior toward targets (caller-supplied static decompile) is unchanged, so no new target interaction is introduced. - [ ] Read existing files or captured data. - [ ] Launch or attach to a process. - [ ] Inject instrumentation or run scripts/code. - [ ] Change process memory, registers, files, or configuration. - [ ] Contact network services. - [ ] Recover protected code or work around protections. - [ ] Documentation or usability only; no target interaction. - [ ] Not sure yet; investigation or maintainer guidance needed. ## Evidence and regression coverage - Tests added or updated: expected engine version in `tests/boundary/android/JadxAnalysis.test.ts`, `tests/boundary/mcp/androidPackageSummaryMcp.test.ts`, `tests/boundary/process/androidAnalysisMcp.test.ts`, and the protocol fixture `tests/fixtures/android/jadx-mcp.mjs` moved to `0.8.0`. The `engine-version` **mismatch** mode deliberately stays at `0.7.0`. - Base reproduction or other evidence: the pinned fat-jar SHA-256 was verified against the published GitHub release asset — `4b9a01c23845c123c217840182d2b5f2c26a7ca20dec3d08810b310fc80a2372 jadx-headless-mcp-0.8.0-all.jar`. - User-visible CLI/MCP output (if applicable): none; the provider reports `engine_reported_version: "0.8.0"` via `BuildInfo.VERSION`. - Remaining proof gaps: the real-APK provider lane (`REA_JADX_MCP_JAR` + JDK) was not executed locally; relies on CI. - [x] Observed, derived, and inferred claims remain distinguishable. - [x] Artifact identity, source provenance, and failed attempts remain preserved. - [x] Unsupported, incomplete, unavailable, or uncertain outcomes remain visible. ## Validation performed - `tsc --noEmit` — clean. - `oxfmt --check` (changed JS/TS) — clean. - `vitest run tests/boundary/android tests/boundary/process/jadxIntegration.test.ts tests/boundary/mcp/androidPackageSummaryMcp.test.ts src/android` — pass. - `vitest run tests/boundary/process/androidAnalysisMcp.test.ts` — 3 `test.each` process-boundary cases fail **identically on the unmodified base commit** (pre-existing Windows-only stdio-handshake gap; most tests in that file are already `skipIf(win32)`), so they are unrelated to this change. Run on Windows x64; please let the Linux CI lane run the full matrix. ## Compatibility, safety, and release - Breaking changes or migration steps: none. Callers supplying a 0.7.1 JAR will now see an engine-version mismatch (`capability_unavailable`) and must supply the 0.8.0 JAR — same pin-by-digest contract as before. - Real Hopper/Ghidra, browser, or OS coverage: not applicable. - Package or release metadata impact: none committed. - Security, privacy, process, or containment review: no change; read-only static analysis, engine still caller-supplied and digest-pinned. ## Author readiness <!-- Left for the human owner to complete per CONTRIBUTING.md and this template. As an AI-assisted change, these declarations are intentionally NOT filled by the agent. The human owner must set the handle and check the boxes before marking ready. --> Human owner: @1013503897 - [x] I reviewed the final diff and relevant existing code, understand the change and its edge cases, and take responsibility for the complete PR, including AI-assisted work. - [x] I checked the evidence above, confirmed it supports the current change, and recorded meaningful validation gaps. - [x] I declare this PR ready for initial maintainer review. ## Before merge - [x] This PR addresses a concrete problem or an agreed enhancement. - [x] Material scope and authority questions are resolved, and any required maintainer scope decision covers the final diff. - [x] The PR has one focused outcome and the title follows `type(scope): outcome`. - [ ] Related issue is linked, or the reason for not linking one is stated above. - [x] Tests cover changed observable behavior and meaningful failure paths. - [x] Owning docs, contracts, and generated metadata are updated where needed. - [x] User-visible CLI/MCP changes include representative output. - [x] I checked the final diff for secrets, unrelated cleanup, and unsupported claims. <!-- readiness-retrigger: 2026-10-19T22:14:01.9122141+08:00 --> --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
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#6835
No description provided.