dsh-plugin-rea 1.0.5 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +139 -1
- package/README.md +210 -210
- package/README.zh-CN.md +239 -0
- package/assets/make-screenshots.ps1 +14 -8
- package/assets/screenshot-1.png +0 -0
- package/bin/rea-shim.mjs +356 -0
- package/check-updates.ps1 +71 -1
- package/cordis.patch.yml +39 -31
- package/docs/bundle-design.md +186 -0
- package/manifest/bundle.manifest.json +399 -0
- package/package.json +23 -3
- package/scripts/audit-manifest.mjs +445 -0
- package/scripts/rea-bundle-bootstrap.ps1 +192 -0
- package/scripts/setup.mjs +1453 -0
- package/scripts/setup.test.mjs +418 -0
- package/scripts/verify-branch.ps1 +131 -0
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$comment": [
|
|
3
|
+
"Component manifest for the one-plugin bundle. Every entry is fetched from an",
|
|
4
|
+
"official vendor source and verified before use. Fields:",
|
|
5
|
+
" sha256 - REQUIRED for offline integrity. Vendor-published where one exists;",
|
|
6
|
+
" otherwise measured once and recorded here, and drift is reported",
|
|
7
|
+
" rather than silently accepted. 'unverified' means neither was done",
|
|
8
|
+
" yet, and setup then pins the hash it observes on first fetch.",
|
|
9
|
+
" size - expected byte count, used for truncation checks and resume math.",
|
|
10
|
+
" license - license of the upstream project, not a redistribution claim.",
|
|
11
|
+
" requires - components whose binaries this one needs to run.",
|
|
12
|
+
" binaries - workspace-relative entries inside the unpacked directory that are",
|
|
13
|
+
" directly spawnable; the first that exists becomes the component's",
|
|
14
|
+
" recorded path so another component can depend on it.",
|
|
15
|
+
"Nothing here is redistributed inside the npm package; setup downloads it."
|
|
16
|
+
],
|
|
17
|
+
"manifestVersion": 1,
|
|
18
|
+
"generatedFor": "dsh-plugin-rea one-plugin bundle",
|
|
19
|
+
"pins": {
|
|
20
|
+
"reaAgents": "6.4.0",
|
|
21
|
+
"ghidra": "12.1.4",
|
|
22
|
+
"jdk": "21",
|
|
23
|
+
"apktool": "3.0.3",
|
|
24
|
+
"jadxHeadlessMcp": "0.7.1",
|
|
25
|
+
"node": "24.21.0",
|
|
26
|
+
"nodeEngines": "^22.19.0 || ^24.11.0 || >=26.0.0"
|
|
27
|
+
},
|
|
28
|
+
"components": {
|
|
29
|
+
"node": {
|
|
30
|
+
"description": "Portable Node.js runtime used to execute vendored REA. Only provisioned when no compatible node is already reachable.",
|
|
31
|
+
"kind": "archive",
|
|
32
|
+
"license": "MIT (Node.js)",
|
|
33
|
+
"requires": [],
|
|
34
|
+
"unpack": { "stripRootComponents": 1, "moveTo": "node" },
|
|
35
|
+
"binaries": ["bin/node", "node{exe}"],
|
|
36
|
+
"probe": {
|
|
37
|
+
"argv": ["{node}", "-v"],
|
|
38
|
+
"expect": { "regex": "^v(22\\.(1[9]|[2-9][0-9])|24\\.(1[1-9]|[2-9][0-9])|2[6-9]\\.|[3-9][0-9]\\.)" },
|
|
39
|
+
"why": "REA's engines are ^22.19.0 || ^24.11.0 || >=26.0.0. A loose '^v\\d+' accepted Node 20, which then fails at REA runtime; the reuse path must reject it here."
|
|
40
|
+
},
|
|
41
|
+
"sources": {
|
|
42
|
+
"win32-x64": {
|
|
43
|
+
"version": "24.21.0",
|
|
44
|
+
"url": "https://nodejs.org/dist/v24.21.0/node-v24.21.0-win-x64.zip",
|
|
45
|
+
"format": "zip",
|
|
46
|
+
"size": 37618919,
|
|
47
|
+
"sha256": "158f7685b44de51f6c0df1d153526cbcd3e1bc739a8dfc607721cef75de9e541",
|
|
48
|
+
"sha256Source": "https://nodejs.org/dist/v24.21.0/SHASUMS256.txt (line: node-v24.21.0-win-x64.zip)",
|
|
49
|
+
"sha256VerifiedOn": "2026-10-13",
|
|
50
|
+
"note": "Checksum and unpack verified on this machine: the extracted node.exe runs standalone (v24.21.0), no installer and no registry writes."
|
|
51
|
+
},
|
|
52
|
+
"win32-arm64": {
|
|
53
|
+
"version": "24.21.0",
|
|
54
|
+
"url": "https://nodejs.org/dist/v24.21.0/node-v24.21.0-win-arm64.zip",
|
|
55
|
+
"format": "zip",
|
|
56
|
+
"size": 33679608,
|
|
57
|
+
"sha256": "8779b1bde1d39f8d420e3b57aa657b39891af434d3de44a919044cec06785921",
|
|
58
|
+
"sha256Source": "https://nodejs.org/dist/v24.21.0/SHASUMS256.txt (line: node-v24.21.0-win-arm64.zip), size confirmed by HEAD",
|
|
59
|
+
"sha256VerifiedOn": "2026-10-13"
|
|
60
|
+
},
|
|
61
|
+
"darwin-x64": {
|
|
62
|
+
"version": "24.21.0",
|
|
63
|
+
"url": "https://nodejs.org/dist/v24.21.0/node-v24.21.0-darwin-x64.tar.gz",
|
|
64
|
+
"format": "tar.gz",
|
|
65
|
+
"size": 54203979,
|
|
66
|
+
"sha256": "1462cb3b3046b815cf8ea436d3da450ec1a9f11dac7e5a46b0ada5305d7e8097",
|
|
67
|
+
"sha256Source": "https://nodejs.org/dist/v24.21.0/SHASUMS256.txt (line: node-v24.21.0-darwin-x64.tar.gz)",
|
|
68
|
+
"sha256VerifiedOn": "2026-10-13"
|
|
69
|
+
},
|
|
70
|
+
"darwin-arm64": {
|
|
71
|
+
"version": "24.21.0",
|
|
72
|
+
"url": "https://nodejs.org/dist/v24.21.0/node-v24.21.0-darwin-arm64.tar.gz",
|
|
73
|
+
"format": "tar.gz",
|
|
74
|
+
"size": 52909993,
|
|
75
|
+
"sha256": "bed7eea5325e1108f32ce5228ddd6a5f0f08a499ee42aa7442aea583702f6057",
|
|
76
|
+
"sha256Source": "https://nodejs.org/dist/v24.21.0/SHASUMS256.txt (line: node-v24.21.0-darwin-arm64.tar.gz)",
|
|
77
|
+
"sha256VerifiedOn": "2026-10-13"
|
|
78
|
+
},
|
|
79
|
+
"linux-x64": {
|
|
80
|
+
"version": "24.21.0",
|
|
81
|
+
"url": "https://nodejs.org/dist/v24.21.0/node-v24.21.0-linux-x64.tar.xz",
|
|
82
|
+
"format": "tar.xz",
|
|
83
|
+
"size": 31890184,
|
|
84
|
+
"sha256": "fd8e59d5a511510f6a298afb548f18c7d2b1be404d8b4a27d94fbe49f56cb2d6",
|
|
85
|
+
"sha256Source": "https://nodejs.org/dist/v24.21.0/SHASUMS256.txt (line: node-v24.21.0-linux-x64.tar.xz)",
|
|
86
|
+
"sha256VerifiedOn": "2026-10-13",
|
|
87
|
+
"note": ".tar.xz is not unpackable by Windows Expand-Archive; bsdtar handles it. A .tar.gz twin exists for every platform if xz support is ever in doubt."
|
|
88
|
+
},
|
|
89
|
+
"linux-arm64": {
|
|
90
|
+
"version": "24.21.0",
|
|
91
|
+
"url": "https://nodejs.org/dist/v24.21.0/node-v24.21.0-linux-arm64.tar.xz",
|
|
92
|
+
"format": "tar.xz",
|
|
93
|
+
"size": 30859684,
|
|
94
|
+
"sha256": "6ad1325edbdb5649c379b75a237147a666c95d4f9ae8d340fef2d1575d289ad2",
|
|
95
|
+
"sha256Source": "https://nodejs.org/dist/v24.21.0/SHASUMS256.txt (line: node-v24.21.0-linux-arm64.tar.xz)",
|
|
96
|
+
"sha256VerifiedOn": "2026-10-13"
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
"jdk": {
|
|
101
|
+
"description": "Full JDK (not a JRE) for Ghidra headless and the JADX bridge. REA validates it with 'java --list-modules' and requires jdk.compiler.",
|
|
102
|
+
"kind": "archive",
|
|
103
|
+
"license": "GPL-2.0-with-classpath-exception (Eclipse Temurin)",
|
|
104
|
+
"requires": [],
|
|
105
|
+
"unpack": { "stripRootComponents": 1, "moveTo": "jdk" },
|
|
106
|
+
"probe": { "argv": ["{jvm}", "--list-modules"], "expect": { "contains": "jdk.compiler" } },
|
|
107
|
+
"sources": {
|
|
108
|
+
"win32-x64": {
|
|
109
|
+
"version": "21.0.12.1+1",
|
|
110
|
+
"url": "https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.12.1%2B1/OpenJDK21U-jdk_x64_windows_hotspot_21.0.12.1_1.zip",
|
|
111
|
+
"format": "zip",
|
|
112
|
+
"size": 205073461,
|
|
113
|
+
"sha256": "f9d6e191ab098c0d416e7d588a24420a8621cd2f4720dab2459b8b7b2d2d8b4e",
|
|
114
|
+
"sha256Source": "Adoptium API /v3/assets/latest/21/hotspot (binary.package.checksum), cross-checked against the per-asset .zip.sha256.txt sidecar",
|
|
115
|
+
"sha256VerifiedOn": "2026-10-13",
|
|
116
|
+
"metaApi": "https://api.adoptium.net/v3/assets/latest/21/hotspot?architecture=x64&image_type=jdk&os=windows&vendor=eclipse",
|
|
117
|
+
"note": "Unpacked and exercised on this machine: bin/javac.exe and jmods are present, java --list-modules reports jdk.compiler, and REA's Ghidra provider accepted it as a 64-bit full JDK 21+."
|
|
118
|
+
},
|
|
119
|
+
"darwin-x64": {
|
|
120
|
+
"version": "21.0.12.1+1",
|
|
121
|
+
"url": "https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.12.1%2B1/OpenJDK21U-jdk_x64_mac_hotspot_21.0.12.1_1.tar.gz",
|
|
122
|
+
"format": "tar.gz",
|
|
123
|
+
"size": 194316575,
|
|
124
|
+
"sha256": "44db0f08196daf19a47f90d13388b0c943b67663cb537f998fe29e836fa842ce",
|
|
125
|
+
"sha256Source": "Adoptium API (binary.package.checksum)",
|
|
126
|
+
"sha256VerifiedOn": "2026-10-13",
|
|
127
|
+
"metaApi": "https://api.adoptium.net/v3/assets/latest/21/hotspot?architecture=x64&image_type=jdk&os=mac&vendor=eclipse"
|
|
128
|
+
},
|
|
129
|
+
"darwin-arm64": {
|
|
130
|
+
"version": "21.0.12.1+1",
|
|
131
|
+
"url": "https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.12.1%2B1/OpenJDK21U-jdk_aarch64_mac_hotspot_21.0.12.1_1.tar.gz",
|
|
132
|
+
"format": "tar.gz",
|
|
133
|
+
"size": 200073404,
|
|
134
|
+
"sha256": "3623232f33a9c3baadf304480b2535f9a3cba8a58d42ecbb438ba267315d9998",
|
|
135
|
+
"sha256Source": "Adoptium API (binary.package.checksum)",
|
|
136
|
+
"sha256VerifiedOn": "2026-10-13",
|
|
137
|
+
"metaApi": "https://api.adoptium.net/v3/assets/latest/21/hotspot?architecture=aarch64&image_type=jdk&os=mac&vendor=eclipse"
|
|
138
|
+
},
|
|
139
|
+
"linux-x64": {
|
|
140
|
+
"version": "21.0.12.1+1",
|
|
141
|
+
"url": "https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.12.1%2B1/OpenJDK21U-jdk_x64_linux_hotspot_21.0.12.1_1.tar.gz",
|
|
142
|
+
"format": "tar.gz",
|
|
143
|
+
"size": 207473347,
|
|
144
|
+
"sha256": "ce79869e1307ed8ee1e2baa86a412b1eb5b75d10a01006d788a6f968bcfaee94",
|
|
145
|
+
"sha256Source": "Adoptium API (binary.package.checksum)",
|
|
146
|
+
"sha256VerifiedOn": "2026-10-13",
|
|
147
|
+
"metaApi": "https://api.adoptium.net/v3/assets/latest/21/hotspot?architecture=x64&image_type=jdk&os=linux&vendor=eclipse"
|
|
148
|
+
},
|
|
149
|
+
"linux-arm64": {
|
|
150
|
+
"version": "21.0.12.1+1",
|
|
151
|
+
"url": "https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.12.1%2B1/OpenJDK21U-jdk_aarch64_linux_hotspot_21.0.12.1_1.tar.gz",
|
|
152
|
+
"format": "tar.gz",
|
|
153
|
+
"size": 205641175,
|
|
154
|
+
"sha256": "23e37e026f12f3e706f18938ff611db3032d075b09d0879a25d06718c773e223",
|
|
155
|
+
"sha256Source": "Adoptium API (binary.package.checksum)",
|
|
156
|
+
"sha256VerifiedOn": "2026-10-13",
|
|
157
|
+
"metaApi": "https://api.adoptium.net/v3/assets/latest/21/hotspot?architecture=aarch64&image_type=jdk&os=linux&vendor=eclipse"
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
"ghidra": {
|
|
162
|
+
"description": "Ghidra release, extracted. REA locates support/analyzeHeadless(.bat) and Features/Decompiler/os/<platform>/decompile[.exe] inside it.",
|
|
163
|
+
"kind": "archive",
|
|
164
|
+
"license": "Apache-2.0",
|
|
165
|
+
"requires": ["jdk"],
|
|
166
|
+
"unpack": { "stripRootComponents": 1, "moveTo": "ghidra" },
|
|
167
|
+
"probe": { "file": "{ghidra}/Ghidra/application.properties", "expect": { "contains": "application.version=" } },
|
|
168
|
+
"sources": {
|
|
169
|
+
"all": {
|
|
170
|
+
"version": "12.1.4",
|
|
171
|
+
"url": "https://github.com/NationalSecurityAgency/ghidra/releases/download/Ghidra_12.1.4_build/ghidra_12.1.4_PUBLIC_20260921.zip",
|
|
172
|
+
"format": "zip",
|
|
173
|
+
"size": 569649598,
|
|
174
|
+
"sha256": "ddac49f903da9d5bac833e5cc79395098b9c33cfd3279be5f31bd00387d2d4db",
|
|
175
|
+
"sha256Source": "GitHub release body of the pinned tag: api.github.com/repos/NationalSecurityAgency/ghidra/releases/tags/Ghidra_12.1.4_build -> .body, line '* SHA-256: `ddac49f9...`'. No checksum asset exists (six candidate names 404). Always read the pinned tag, never releases/latest, because the body changes.",
|
|
176
|
+
"releaseApi": "https://api.github.com/repos/NationalSecurityAgency/ghidra/releases/tags/Ghidra_12.1.4_build",
|
|
177
|
+
"sha256VerifiedOn": "2026-10-13",
|
|
178
|
+
"note": "No platform split for the public release: one zip serves Windows/macOS/Linux. Unpacked and sniffed here (support/analyzeHeadless.bat and the win_x86_64 native decompiler are present, and REA reported provider version 12.1.4). Windows traps: a path containing '!' or '^' breaks Ghidra, and macOS native components are not shipped (they must be built with support/gradle/gradlew buildNatives). Ghidra requires JDK 21+; application.java.max is empty at this tag, so a newer JDK is permitted."
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
"apktool": {
|
|
183
|
+
"description": "Android resource decoding. REA is pointed at the wrapper script, which must sit next to the jar.",
|
|
184
|
+
"kind": "multi-file",
|
|
185
|
+
"license": "Apache-2.0",
|
|
186
|
+
"requires": ["jdk"],
|
|
187
|
+
"entries": {
|
|
188
|
+
"all": [
|
|
189
|
+
{
|
|
190
|
+
"id": "jar",
|
|
191
|
+
"version": "3.0.3",
|
|
192
|
+
"url": "https://github.com/iBotPeaches/Apktool/releases/download/v3.0.3/apktool_3.0.3.jar",
|
|
193
|
+
"format": "file",
|
|
194
|
+
"size": 15478013,
|
|
195
|
+
"sha256": "dbf930b076c6b9be08d57c449cacefc3bdd6b71ebd59b3066fc0e1f5b14f9423",
|
|
196
|
+
"sha256Source": "Vendor-published in the 3.0.3 release post (apktool.org/blog/apktool-3.0.3/), md5 50d98c920b005d2fcdc18d3d52e3f23b. Independently reproduced here: this is the hash of the 15,478,013-byte apktool_3.0.3.jar.",
|
|
197
|
+
"sha256VerifiedOn": "2026-10-13",
|
|
198
|
+
"moveTo": "apktool",
|
|
199
|
+
"saveAs": "apktool.jar"
|
|
200
|
+
}
|
|
201
|
+
],
|
|
202
|
+
"byPlatform": {
|
|
203
|
+
"win32-x64": [
|
|
204
|
+
{
|
|
205
|
+
"id": "wrapper",
|
|
206
|
+
"version": "master",
|
|
207
|
+
"url": "https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/windows/apktool.bat",
|
|
208
|
+
"format": "file",
|
|
209
|
+
"size": 2348,
|
|
210
|
+
"sha256": "9440ec9d98efdef14136f4cefd79ac200d72baa016b5991d128234a3a3ef3b43",
|
|
211
|
+
"sha256Source": "measured on 2026-10-13 (raw.githubusercontent.com publishes no checksum for the wrapper); a single 2,348-byte file, so the archive-free case needs no TOFU",
|
|
212
|
+
"sha256VerifiedOn": "2026-10-13",
|
|
213
|
+
"notes": [
|
|
214
|
+
"The wrapper pushd's to its own directory and resolves apktool.jar first, then globs apktool_*.jar, so the renamed jar next to it is found.",
|
|
215
|
+
"Its final line is `for %%i in (%cmdcmdline%) do if /i \"%%~i\"==\"/c\" pause & exit /b`: measured here it returns exit 0 in 0.2 s, but it appends 'Press any key to continue . . .' to stdout. That trailing text is upstream's, not a provisioning defect; tools that parse apktool's stdout should tolerate it.",
|
|
216
|
+
"REA is pointed at this .bat (REA_APKTOOL_COMMAND), not at the jar, exactly as the wrapper expects."
|
|
217
|
+
],
|
|
218
|
+
"moveTo": "apktool",
|
|
219
|
+
"saveAs": "apktool.bat"
|
|
220
|
+
}
|
|
221
|
+
],
|
|
222
|
+
"darwin-x64": [
|
|
223
|
+
{
|
|
224
|
+
"id": "wrapper",
|
|
225
|
+
"version": "master",
|
|
226
|
+
"url": "https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/osx/apktool",
|
|
227
|
+
"format": "file",
|
|
228
|
+
"size": 2672,
|
|
229
|
+
"sha256": "d0c86f0475ed73bfffa6ac39faa69de7aa2dd40ff5e7e6540f82002be3a38f0b",
|
|
230
|
+
"sha256Source": "measured on 2026-10-13 from the osx wrapper (the correct one for macOS; the linux script is a different file)",
|
|
231
|
+
"sha256VerifiedOn": "2026-10-13",
|
|
232
|
+
"moveTo": "apktool",
|
|
233
|
+
"saveAs": "apktool"
|
|
234
|
+
}
|
|
235
|
+
],
|
|
236
|
+
"darwin-arm64": [
|
|
237
|
+
{
|
|
238
|
+
"id": "wrapper",
|
|
239
|
+
"version": "master",
|
|
240
|
+
"url": "https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/osx/apktool",
|
|
241
|
+
"format": "file",
|
|
242
|
+
"size": 2672,
|
|
243
|
+
"sha256": "d0c86f0475ed73bfffa6ac39faa69de7aa2dd40ff5e7e6540f82002be3a38f0b",
|
|
244
|
+
"sha256Source": "measured on 2026-10-13 from the osx wrapper",
|
|
245
|
+
"sha256VerifiedOn": "2026-10-13",
|
|
246
|
+
"moveTo": "apktool",
|
|
247
|
+
"saveAs": "apktool"
|
|
248
|
+
}
|
|
249
|
+
],
|
|
250
|
+
"linux-x64": [
|
|
251
|
+
{
|
|
252
|
+
"id": "wrapper",
|
|
253
|
+
"version": "master",
|
|
254
|
+
"url": "https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/linux/apktool",
|
|
255
|
+
"format": "file",
|
|
256
|
+
"size": 2648,
|
|
257
|
+
"sha256": "a851371023c43ca9b9a30218f87f9fd536304283de7b85447183ae811dfd033c",
|
|
258
|
+
"sha256Source": "measured on 2026-10-13 from the linux wrapper",
|
|
259
|
+
"sha256VerifiedOn": "2026-10-13",
|
|
260
|
+
"moveTo": "apktool",
|
|
261
|
+
"saveAs": "apktool"
|
|
262
|
+
}
|
|
263
|
+
],
|
|
264
|
+
"linux-arm64": [
|
|
265
|
+
{
|
|
266
|
+
"id": "wrapper",
|
|
267
|
+
"version": "master",
|
|
268
|
+
"url": "https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/linux/apktool",
|
|
269
|
+
"format": "file",
|
|
270
|
+
"size": 2648,
|
|
271
|
+
"sha256": "a851371023c43ca9b9a30218f87f9fd536304283de7b85447183ae811dfd033c",
|
|
272
|
+
"sha256Source": "measured on 2026-10-13 from the linux wrapper",
|
|
273
|
+
"sha256VerifiedOn": "2026-10-13",
|
|
274
|
+
"moveTo": "apktool",
|
|
275
|
+
"saveAs": "apktool"
|
|
276
|
+
}
|
|
277
|
+
]
|
|
278
|
+
}
|
|
279
|
+
},
|
|
280
|
+
"probe": { "argv": ["{jvm}", "-jar", "{vendor}/apktool/apktool.jar", "--version"], "expect": { "regex": "\\d+\\.\\d+" } }
|
|
281
|
+
},
|
|
282
|
+
"jadxHeadlessMcp": {
|
|
283
|
+
"description": "REA validates this exact jar's bridge classes; it is not interchangeable with a plain jadx build.",
|
|
284
|
+
"kind": "file",
|
|
285
|
+
"license": "Apache-2.0",
|
|
286
|
+
"requires": ["jdk"],
|
|
287
|
+
"probe": { "file": "{vendor}/jadx/jadx-headless-mcp-0.7.1-all.jar" },
|
|
288
|
+
"entries": {
|
|
289
|
+
"all": [
|
|
290
|
+
{
|
|
291
|
+
"id": "jar",
|
|
292
|
+
"version": "0.7.1",
|
|
293
|
+
"url": "https://github.com/1013503897/jadx-headless-mcp/releases/download/v0.7.1/jadx-headless-mcp-0.7.1-all.jar",
|
|
294
|
+
"format": "file",
|
|
295
|
+
"size": 42619858,
|
|
296
|
+
"sha256": "6e5eacf500b64292bfb73c49797c1958f6ee44646e43e868039ae7feb573ff75",
|
|
297
|
+
"sha256Source": "Vendor-published sidecar asset releases/download/v0.7.1/jadx-headless-mcp.sha256 (98 bytes, one line); the value was independently reproduced here by hashing the downloaded 42,619,858-byte jar. 0.7.1 is the newest release and REA requires exactly this bridge build: the project's own build.gradle.kts documents that the fat jar must be shaded with duplicatesStrategy INCLUDE, otherwise only KotlinMetadataPlugin registers and every APK resolves to a single R class. Versions 0.6.0 and earlier predate that fix.",
|
|
298
|
+
"sha256VerifiedOn": "2026-10-13",
|
|
299
|
+
"moveTo": "jadx",
|
|
300
|
+
"saveAs": "jadx-headless-mcp-0.7.1-all.jar"
|
|
301
|
+
}
|
|
302
|
+
]
|
|
303
|
+
}
|
|
304
|
+
},
|
|
305
|
+
"androidPlatformTools": {
|
|
306
|
+
"description": "adb, for REA's device tools. Optional: without a device these tools simply report no devices.",
|
|
307
|
+
"kind": "archive",
|
|
308
|
+
"license": "Android SDK Terms (Google)",
|
|
309
|
+
"requires": [],
|
|
310
|
+
"optional": true,
|
|
311
|
+
"unpack": { "stripRootComponents": 1, "moveTo": "platform-tools" },
|
|
312
|
+
"probe": { "argv": ["{vendor}/platform-tools/adb{exe}", "version"], "expect": { "contains": "Android Debug Bridge" } },
|
|
313
|
+
"sources": {
|
|
314
|
+
"win32-x64": {
|
|
315
|
+
"version": "latest (37.0.1)",
|
|
316
|
+
"url": "https://dl.google.com/android/repository/platform-tools-latest-windows.zip",
|
|
317
|
+
"format": "zip",
|
|
318
|
+
"size": 8044989,
|
|
319
|
+
"sha256": "45f4d63113e895ebde0c90f194099a4676b6ac653bd28d54314a9e022bbc1a99",
|
|
320
|
+
"sha256Source": "Google publishes no checksum for this rolling asset; measured on 2026-10-13 and the archive verified readable (15 entries incl. adb.exe). The archive's own platform-tools/source.properties reports Pkg.Revision=37.0.1, so the real pin is 'platform-tools 37.0.1'. Google's repository2-3.xml carries size+checksum for versioned archives if a vendor hash is ever required.",
|
|
321
|
+
"sha256VerifiedOn": "2026-10-13",
|
|
322
|
+
"note": "Rolling 'latest' URL pinned by observation; setup re-verifies against this value and reports drift. Android SDK components are not OSI-licensed and Google restricts redistribution, so this is fetched from Google at install time and never re-hosted. Also contains fastboot, sqlite3, mke2fs and the USB API DLLs."
|
|
323
|
+
},
|
|
324
|
+
"darwin-x64": {
|
|
325
|
+
"version": "latest",
|
|
326
|
+
"url": "https://dl.google.com/android/repository/platform-tools-latest-darwin.zip",
|
|
327
|
+
"format": "zip",
|
|
328
|
+
"size": 16110554,
|
|
329
|
+
"sha256": "ee39ad5967e95c2a07f04dbcbde96b1a0c916ba376096db5d2f498b7727a5d1d",
|
|
330
|
+
"sha256Source": "Google publishes no checksum for this rolling asset; measured on 2026-10-13 by downloading the archive and hashing it locally (16,110,554 bytes)",
|
|
331
|
+
"sha256VerifiedOn": "2026-10-13",
|
|
332
|
+
"note": "Rolling 'latest' URL pinned by observation; setup re-verifies against this value and reports drift."
|
|
333
|
+
},
|
|
334
|
+
"darwin-arm64": {
|
|
335
|
+
"version": "latest",
|
|
336
|
+
"url": "https://dl.google.com/android/repository/platform-tools-latest-darwin.zip",
|
|
337
|
+
"format": "zip",
|
|
338
|
+
"size": 16110554,
|
|
339
|
+
"sha256": "ee39ad5967e95c2a07f04dbcbde96b1a0c916ba376096db5d2f498b7727a5d1d",
|
|
340
|
+
"sha256Source": "Same darwin archive as x64 (measured 2026-10-13); it serves Intel and Apple silicon.",
|
|
341
|
+
"sha256VerifiedOn": "2026-10-13",
|
|
342
|
+
"note": "The same darwin archive serves Intel and Apple silicon."
|
|
343
|
+
},
|
|
344
|
+
"linux-x64": {
|
|
345
|
+
"version": "latest",
|
|
346
|
+
"url": "https://dl.google.com/android/repository/platform-tools-latest-linux.zip",
|
|
347
|
+
"format": "zip",
|
|
348
|
+
"size": 9054187,
|
|
349
|
+
"sha256": "d230f13842f60f782a8645f9c813f8f845bf36089ea7289f28c48f17979313f1",
|
|
350
|
+
"sha256Source": "Google publishes no checksum for this rolling asset; measured on 2026-10-13 by downloading the archive and hashing it locally (9,054,187 bytes)",
|
|
351
|
+
"sha256VerifiedOn": "2026-10-13",
|
|
352
|
+
"note": "The same linux archive serves x86-64 and arm64."
|
|
353
|
+
},
|
|
354
|
+
"linux-arm64": {
|
|
355
|
+
"version": "latest",
|
|
356
|
+
"url": "https://dl.google.com/android/repository/platform-tools-latest-linux.zip",
|
|
357
|
+
"format": "zip",
|
|
358
|
+
"size": 9054187,
|
|
359
|
+
"sha256": "d230f13842f60f782a8645f9c813f8f845bf36089ea7289f28c48f17979313f1",
|
|
360
|
+
"sha256Source": "Same linux archive as x64 (measured 2026-10-13).",
|
|
361
|
+
"sha256VerifiedOn": "2026-10-13"
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
},
|
|
365
|
+
"reaAgents": {
|
|
366
|
+
"description": "The REA MCP server itself, installed into vendor/node_modules so the bundle owns the runtime copy. The resolved entry point is vendor/node_modules/rea-agents/scripts/rea.mjs.",
|
|
367
|
+
"kind": "npm",
|
|
368
|
+
"license": "MIT",
|
|
369
|
+
"requires": ["node"],
|
|
370
|
+
"unpack": { "moveTo": "rea-agents" },
|
|
371
|
+
"probe": {
|
|
372
|
+
"argv": ["{node}", "{vendor}/node_modules/rea-agents/scripts/rea.mjs", "--version"],
|
|
373
|
+
"expect": { "regex": "^6\\.4\\.0" }
|
|
374
|
+
},
|
|
375
|
+
"sources": {
|
|
376
|
+
"npm": {
|
|
377
|
+
"version": "6.4.0",
|
|
378
|
+
"registry": "https://registry.npmjs.org/rea-agents",
|
|
379
|
+
"integrity": "npm's own dist.integrity is the authoritative check for this tarball: the registry tarball ships NO node_modules (verified: 1161 entries, 0 under node_modules), so setup resolves the dependency closure with `npm install --ignore-scripts` instead of unpacking a tarball.",
|
|
380
|
+
"note": "`just unpacking the published tarball cannot work` is a verified fact, not a caution: the CLI would fail with ERR_MODULE_NOT_FOUND on zod."
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
},
|
|
385
|
+
"notProvisionable": {
|
|
386
|
+
"$comment": "Upstream host gates. Listed so the setup report can explain an unavailable capability instead of silently omitting it.",
|
|
387
|
+
"hopper": "macOS only (HOPPER_LAUNCHER_PATH).",
|
|
388
|
+
"ida": "requires a user-owned IDA plus REA_IDA_MCP_CONFIG; REA never launches IDA.",
|
|
389
|
+
"firmware": "binwalk/unblob are Linux-only (REA_BINWALK_COMMAND / REA_UNBLOB_COMMAND).",
|
|
390
|
+
"wakaru": "Linux x64 only (REA_WAKARU_COMMAND).",
|
|
391
|
+
"pwntools": "Linux x64 only (REA_PWNTOOLS_PYTHON) — ELF layout and recorded-crash tools.",
|
|
392
|
+
"pwndbg": "Linux/macOS only (gdb + REA_PWNDBG_GDB).",
|
|
393
|
+
"mitmdump": "Linux only, native mitmproxy captures (REA_MITMDUMP_COMMAND); HAR needs no engine.",
|
|
394
|
+
"appleToolchain": "macOS only (xcrun, plutil, assetutil, hdiutil, lldb).",
|
|
395
|
+
"processCapture": "Linux/macOS PTY only.",
|
|
396
|
+
"ilspycmd": "Optional .NET decompiler (REA_ILSPY_CMD_PATH). Only wired when a runnable ilspycmd already exists; the static managed provider works without it.",
|
|
397
|
+
"browser": "Reused from the host (REA_BROWSER_EXECUTABLE). Never downloaded by this bundle."
|
|
398
|
+
}
|
|
399
|
+
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-plugin-rea",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
|
+
"description": "One-plugin bundle: provisions Node/REA/JDK/Ghidra for you, then registers the upstream REA MCP server as mcp__rea__* tools. · 一体包:自动准备 Node/REA/JDK/Ghidra,并把上游 REA 的 MCP 服务接入 DeepSeek Harness。",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "czcdr",
|
|
@@ -27,9 +27,18 @@
|
|
|
27
27
|
"ghidra",
|
|
28
28
|
"binary-analysis"
|
|
29
29
|
],
|
|
30
|
+
"bin": {
|
|
31
|
+
"rea-bundle-setup": "./scripts/setup.mjs",
|
|
32
|
+
"rea-bundle-status": "./bin/rea-shim.mjs"
|
|
33
|
+
},
|
|
30
34
|
"files": [
|
|
31
35
|
"cordis.patch.yml",
|
|
36
|
+
"bin/",
|
|
37
|
+
"scripts/",
|
|
38
|
+
"manifest/",
|
|
39
|
+
"docs/bundle-design.md",
|
|
32
40
|
"README.md",
|
|
41
|
+
"README.zh-CN.md",
|
|
33
42
|
"LICENSE",
|
|
34
43
|
"CHANGELOG.md",
|
|
35
44
|
"check-updates.ps1",
|
|
@@ -43,6 +52,17 @@
|
|
|
43
52
|
}
|
|
44
53
|
},
|
|
45
54
|
"scripts": {
|
|
46
|
-
"check-updates": "powershell -NoProfile -File ./check-updates.ps1"
|
|
55
|
+
"check-updates": "powershell -NoProfile -File ./check-updates.ps1",
|
|
56
|
+
"bundle:setup": "node ./scripts/setup.mjs",
|
|
57
|
+
"bundle:status": "node ./bin/rea-shim.mjs --shim-status",
|
|
58
|
+
"bundle:dry-run": "node ./scripts/setup.mjs --reuse --dry-run",
|
|
59
|
+
"bundle:audit": "node ./scripts/audit-manifest.mjs",
|
|
60
|
+
"bundle:test": "node --test ./scripts/setup.test.mjs"
|
|
61
|
+
},
|
|
62
|
+
"engines": {
|
|
63
|
+
"node": "^22.19.0 || ^24.11.0 || >=26.0.0"
|
|
64
|
+
},
|
|
65
|
+
"publishConfig": {
|
|
66
|
+
"registry": "https://registry.npmjs.org/"
|
|
47
67
|
}
|
|
48
68
|
}
|