rea-agents 4.1.0 → 6.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.
Files changed (757) hide show
  1. package/README.md +173 -568
  2. package/bridge/android/ReaJadxBridge.java +247 -0
  3. package/bridge/mitmproxy/capture.py +210 -0
  4. package/bridge/native/NativeUIChildren.swift +27 -0
  5. package/bridge/native/ReaNativeUI.swift +30 -16
  6. package/bridge/native/rea_lldb_tracer.py +303 -0
  7. package/bridge/process/ProcessRunTokenReader.swift +263 -0
  8. package/bridge/process/ProcessRunTokenReaderMain.swift +35 -0
  9. package/bridge/pwndbg/core_context.py +101 -0
  10. package/bridge/pwndbg/launch.py +39 -0
  11. package/bridge/pwndbg/launch_impl.py +34 -0
  12. package/bridge/pwntools/decoder_runtime.py +59 -0
  13. package/bridge/pwntools/layout.py +39 -0
  14. package/bridge/pwntools/layout_impl.py +309 -0
  15. package/bridge/pwntools/recorded_crash.py +39 -0
  16. package/bridge/pwntools/recorded_crash_impl.py +143 -0
  17. package/dist/android/AndroidTargetSnapshot.js +5 -3
  18. package/dist/android/JadxAnalysis.js +8 -6
  19. package/dist/android/JadxConfiguration.js +19 -3
  20. package/dist/android/JadxMcpTransport.js +43 -16
  21. package/dist/android/JadxProtocol.js +8 -0
  22. package/dist/android/JadxProvider.js +118 -28
  23. package/dist/android/JadxRelease.js +8 -0
  24. package/dist/android/JadxSession.js +32 -18
  25. package/dist/application/AppBundleExecutable.js +141 -0
  26. package/dist/application/BinaryTargetResolver.js +9 -64
  27. package/dist/application/CapabilityInventory.js +82 -3
  28. package/dist/application/ClientConfigurationDocument.js +72 -12
  29. package/dist/application/ClientRegistrationStatus.js +7 -8
  30. package/dist/application/DirectAnalysis.js +109 -37
  31. package/dist/application/DirectAnalysisStatus.js +4 -5
  32. package/dist/application/DoctorDiagnostics.js +3 -3
  33. package/dist/application/EnhancedTools.js +4 -4
  34. package/dist/application/EvidenceBundleCommands.js +1 -1
  35. package/dist/application/EvidenceBundleFiles.js +1 -1
  36. package/dist/application/InvestigationProviders.js +6 -0
  37. package/dist/application/LinuxHopper.js +8 -2
  38. package/dist/application/OptionalObservationProviders.js +3 -0
  39. package/dist/application/ReconstructionCoverageService.js +2 -6
  40. package/dist/application/ReconstructionObligationCandidates.js +10 -3
  41. package/dist/application/ReferenceSourceImport.js +2 -0
  42. package/dist/application/ReferenceSourceImportEntries.js +20 -3
  43. package/dist/application/ReferenceSourceImportTypes.js +5 -0
  44. package/dist/application/Setup.js +10 -2
  45. package/dist/application/SetupClientConfiguration.js +19 -16
  46. package/dist/application/SetupHost.js +18 -3
  47. package/dist/application/SetupPlan.js +1 -1
  48. package/dist/application/Uninstall.js +23 -17
  49. package/dist/application/UpdateMaintenance.js +3 -3
  50. package/dist/application/ValidateSelectedWebScript.js +27 -0
  51. package/dist/application/WebModuleTraceService.js +209 -0
  52. package/dist/application/WebNetworkCaptureService.js +132 -0
  53. package/dist/application/WebRuntimeService.js +73 -0
  54. package/dist/application/WebScriptExportService.js +115 -0
  55. package/dist/application/WebSourceLocationService.js +160 -0
  56. package/dist/application/WindowsCapabilities.js +1 -1
  57. package/dist/application/{AndroidAnalysisService.js → android/AndroidAnalysisService.js} +6 -6
  58. package/dist/application/{AndroidApplicationService.js → android/AndroidApplicationService.js} +3 -3
  59. package/dist/application/{AppleApplicationService.js → apple/AppleApplicationService.js} +5 -5
  60. package/dist/application/{AnalysisClientCleanup.js → binary/AnalysisClientCleanup.js} +2 -2
  61. package/dist/application/{AnalysisProviderEvaluation.js → binary/AnalysisProviderEvaluation.js} +4 -4
  62. package/dist/application/{AnalysisProviderRegistry.js → binary/AnalysisProviderRegistry.js} +5 -5
  63. package/dist/application/{AnalysisSnapshotCache.js → binary/AnalysisSnapshotCache.js} +55 -14
  64. package/dist/application/{AnalysisSnapshotFiles.js → binary/AnalysisSnapshotFiles.js} +4 -4
  65. package/dist/application/{BinarySession.js → binary/BinarySession.js} +50 -20
  66. package/dist/application/{BinarySessionComposition.js → binary/BinarySessionComposition.js} +2 -1
  67. package/dist/application/{BinarySessionExecution.js → binary/BinarySessionExecution.js} +9 -7
  68. package/dist/application/{BinarySessionOpen.js → binary/BinarySessionOpen.js} +22 -9
  69. package/dist/application/{BinarySessionRecords.js → binary/BinarySessionRecords.js} +48 -40
  70. package/dist/application/{CompositeProvider.js → binary/CompositeProvider.js} +2 -2
  71. package/dist/application/{LazyAnalysisProvider.js → binary/LazyAnalysisProvider.js} +6 -6
  72. package/dist/application/{SessionProviderRouter.js → binary/SessionProviderRouter.js} +7 -7
  73. package/dist/application/binaryDiagnostics/BinaryLayoutService.js +57 -0
  74. package/dist/application/binaryDiagnostics/RecordedCrashPort.js +1 -0
  75. package/dist/application/binaryDiagnostics/RecordedCrashService.js +60 -0
  76. package/dist/application/evm/EvmInterfacePort.js +1 -0
  77. package/dist/application/evm/EvmInterfaceService.js +62 -0
  78. package/dist/application/firmware/FirmwareAnalysisPort.js +1 -0
  79. package/dist/application/{FirmwareAnalysisService.js → firmware/FirmwareAnalysisService.js} +5 -5
  80. package/dist/application/{EvidenceLedger.js → investigation/EvidenceLedger.js} +44 -7
  81. package/dist/application/investigation/InvestigationRecordPort.js +1 -0
  82. package/dist/application/investigation/InvestigationRecords.js +69 -0
  83. package/dist/application/{UnknownEvidence.js → investigation/UnknownEvidence.js} +1 -1
  84. package/dist/application/{ElectronActiveEvidence.js → javascript/ElectronActiveEvidence.js} +3 -3
  85. package/dist/application/javascript/ElectronActiveObservationPort.js +1 -0
  86. package/dist/application/{ElectronActiveObservationService.js → javascript/ElectronActiveObservationService.js} +3 -3
  87. package/dist/application/{ElectronBoundaryAnalysis.js → javascript/ElectronBoundaryAnalysis.js} +1 -1
  88. package/dist/application/{ElectronBoundaryGraphContext.js → javascript/ElectronBoundaryGraphContext.js} +1 -1
  89. package/dist/application/{ElectronEvidence.js → javascript/ElectronEvidence.js} +2 -2
  90. package/dist/application/javascript/ElectronObservationPort.js +1 -0
  91. package/dist/application/{ElectronObservationService.js → javascript/ElectronObservationService.js} +3 -3
  92. package/dist/application/{JavaScriptApplicationEvidence.js → javascript/JavaScriptApplicationEvidence.js} +3 -4
  93. package/dist/application/{JavaScriptApplicationEvidenceGraph.js → javascript/JavaScriptApplicationEvidenceGraph.js} +5 -5
  94. package/dist/application/{JavaScriptApplicationService.js → javascript/JavaScriptApplicationService.js} +25 -12
  95. package/dist/application/{JavaScriptApplicationWorkflowEvidence.js → javascript/JavaScriptApplicationWorkflowEvidence.js} +3 -3
  96. package/dist/application/{JavaScriptApplicationWorkflowService.js → javascript/JavaScriptApplicationWorkflowService.js} +12 -12
  97. package/dist/application/{JavaScriptArtifactAnalysis.js → javascript/JavaScriptArtifactAnalysis.js} +50 -47
  98. package/dist/application/javascript/JavaScriptArtifactAnalysisTypes.js +1 -0
  99. package/dist/application/{JavaScriptArtifactGraphAccumulator.js → javascript/JavaScriptArtifactGraphAccumulator.js} +16 -2
  100. package/dist/application/{JavaScriptArtifactGraphBuilder.js → javascript/JavaScriptArtifactGraphBuilder.js} +2 -2
  101. package/dist/application/{JavaScriptArtifactGraphContext.js → javascript/JavaScriptArtifactGraphContext.js} +1 -1
  102. package/dist/application/{JavaScriptArtifactGraphDocuments.js → javascript/JavaScriptArtifactGraphDocuments.js} +27 -3
  103. package/dist/application/{JavaScriptArtifactGraphFindings.js → javascript/JavaScriptArtifactGraphFindings.js} +20 -7
  104. package/dist/application/{JavaScriptArtifactGraphStructure.js → javascript/JavaScriptArtifactGraphStructure.js} +1 -1
  105. package/dist/application/{JavaScriptArtifactPathResolution.js → javascript/JavaScriptArtifactPathResolution.js} +80 -36
  106. package/dist/application/{JavaScriptArtifactReconstruction.js → javascript/JavaScriptArtifactReconstruction.js} +26 -17
  107. package/dist/application/{JavaScriptJsonModules.js → javascript/JavaScriptJsonModules.js} +1 -1
  108. package/dist/application/{JavaScriptModuleRelationships.js → javascript/JavaScriptModuleRelationships.js} +2 -2
  109. package/dist/application/javascript/JavaScriptRecoveryPort.js +1 -0
  110. package/dist/application/javascript/JavaScriptRecoveryService.js +52 -0
  111. package/dist/application/{JavaScriptReturnShapeProjection.js → javascript/JavaScriptReturnShapeProjection.js} +3 -3
  112. package/dist/application/{JavaScriptRuntimeObservationEvidence.js → javascript/JavaScriptRuntimeObservationEvidence.js} +2 -2
  113. package/dist/application/javascript/JavaScriptRuntimeObservationPort.js +1 -0
  114. package/dist/application/{JavaScriptRuntimeObservationService.js → javascript/JavaScriptRuntimeObservationService.js} +3 -3
  115. package/dist/application/{JavaScriptRuntimeReconciliationEvidence.js → javascript/JavaScriptRuntimeReconciliationEvidence.js} +3 -3
  116. package/dist/application/{JavaScriptRuntimeReconciliationService.js → javascript/JavaScriptRuntimeReconciliationService.js} +6 -6
  117. package/dist/application/{JavaScriptSemanticGraphAsyncProjection.js → javascript/JavaScriptSemanticGraphAsyncProjection.js} +8 -8
  118. package/dist/application/{JavaScriptSemanticGraphBuilder.js → javascript/JavaScriptSemanticGraphBuilder.js} +150 -73
  119. package/dist/application/{JavaScriptSemanticGraphChildProcessProjection.js → javascript/JavaScriptSemanticGraphChildProcessProjection.js} +15 -16
  120. package/dist/application/{JavaScriptSemanticGraphConstruction.js → javascript/JavaScriptSemanticGraphConstruction.js} +43 -2
  121. package/dist/application/{JavaScriptSemanticGraphDataProjection.js → javascript/JavaScriptSemanticGraphDataProjection.js} +8 -8
  122. package/dist/application/{JavaScriptSemanticGraphFingerprintProjection.js → javascript/JavaScriptSemanticGraphFingerprintProjection.js} +1 -1
  123. package/dist/application/{JavaScriptSemanticGraphFlowProjection.js → javascript/JavaScriptSemanticGraphFlowProjection.js} +7 -11
  124. package/dist/application/{JavaScriptSemanticGraphObjectProjection.js → javascript/JavaScriptSemanticGraphObjectProjection.js} +4 -4
  125. package/dist/application/javascript/JavaScriptSemanticGraphProjection.js +144 -0
  126. package/dist/application/{JavaScriptSemanticGraphResourceProjection.js → javascript/JavaScriptSemanticGraphResourceProjection.js} +4 -4
  127. package/dist/application/{JavaScriptSemanticGraphValueProjection.js → javascript/JavaScriptSemanticGraphValueProjection.js} +5 -5
  128. package/dist/application/{JavaScriptSemanticTraceService.js → javascript/JavaScriptSemanticTraceService.js} +6 -6
  129. package/dist/application/{ManagedApplicationGraphService.js → managed/ManagedApplicationGraphService.js} +7 -7
  130. package/dist/application/{ManagedMemberComparisonService.js → managed/ManagedMemberComparisonService.js} +10 -10
  131. package/dist/application/{ManagedNativeVerificationService.js → managed/ManagedNativeVerificationService.js} +7 -7
  132. package/dist/application/{ManagedReconstructionService.js → managed/ManagedReconstructionService.js} +7 -7
  133. package/dist/application/{NativeApiInspection.js → native/NativeApiInspection.js} +1 -1
  134. package/dist/application/{NativeCallRoutes.js → native/NativeCallRoutes.js} +3 -3
  135. package/dist/application/{NativeDispatchMetadataInspection.js → native/NativeDispatchMetadataInspection.js} +4 -4
  136. package/dist/application/{NativeUiActionTrace.js → native/NativeUiActionTrace.js} +7 -7
  137. package/dist/application/{NativeValueTrace.js → native/NativeValueTrace.js} +6 -6
  138. package/dist/application/{ProcessCli.js → process/ProcessCli.js} +15 -11
  139. package/dist/application/{ProcessEvidence.js → process/ProcessEvidence.js} +4 -4
  140. package/dist/{application/ArtifactInventory/hash.js → artifacts/ArtifactHash.js} +4 -2
  141. package/dist/artifacts/ArtifactPaths.js +3 -3
  142. package/dist/artifacts/ArtifactProvider.js +37 -40
  143. package/dist/artifacts/ArtifactProviderMetadata.js +37 -0
  144. package/dist/artifacts/AsarArtifactReader.js +195 -23
  145. package/dist/artifacts/AsarEntryStream.js +76 -0
  146. package/dist/artifacts/DirectoryArtifactReader.js +41 -7
  147. package/dist/artifacts/NativeDmgArtifactReader.js +161 -9
  148. package/dist/artifacts/ZipArtifactReader.js +3 -0
  149. package/dist/{application → artifacts/apple}/AppleAssetCatalogAnalysis.js +4 -4
  150. package/dist/artifacts/apple/DylibResolutionReader.js +259 -0
  151. package/dist/{application → artifacts/apple}/InterfaceBuilderAnalysis.js +125 -51
  152. package/dist/artifacts/{KeyedArchiveReader.js → apple/KeyedArchiveReader.js} +21 -27
  153. package/dist/artifacts/apple/MachoLoadCommandReader.js +294 -0
  154. package/dist/artifacts/apple/NibViewHierarchy.js +150 -0
  155. package/dist/{application → artifacts/extraction}/ArtifactExtraction.js +10 -10
  156. package/dist/{application → artifacts/inventory}/ArtifactGraphConstruction.js +3 -3
  157. package/dist/{application → artifacts/inventory}/ArtifactInventory.js +4 -4
  158. package/dist/{application/ArtifactInventory → artifacts/inventory}/classify.js +2 -2
  159. package/dist/{application/ArtifactInventory → artifacts/inventory}/reader.js +5 -5
  160. package/dist/{application/ArtifactInventory → artifacts/inventory}/scanCanonical.js +3 -3
  161. package/dist/{application/ArtifactInventory → artifacts/inventory}/scanReader.js +5 -5
  162. package/dist/{application → artifacts/javascript}/JavaScriptArtifactFiles.js +27 -6
  163. package/dist/artifacts/javascript/JavaScriptArtifactReader.js +6 -0
  164. package/dist/artifacts/readStableArtifact.js +68 -0
  165. package/dist/browser/BrowserScenarioSecrets.js +50 -8
  166. package/dist/browser/CdpAuthorizedMainFrame.js +4 -4
  167. package/dist/browser/CdpAuthorizedTarget.js +22 -0
  168. package/dist/browser/CdpBrowserProvider.js +4 -15
  169. package/dist/browser/CdpCaptureDocuments.js +33 -21
  170. package/dist/browser/CdpCaptureEventBodyShapes.js +3 -3
  171. package/dist/browser/CdpCaptureEventHandlers.js +116 -28
  172. package/dist/browser/CdpCaptureEventHelpers.js +6 -6
  173. package/dist/browser/CdpCaptureEvents.js +9 -0
  174. package/dist/browser/CdpCaptureStorage.js +10 -8
  175. package/dist/browser/CdpCaptureStorageFingerprints.js +24 -22
  176. package/dist/browser/CdpCaptureValues.js +2 -2
  177. package/dist/browser/CdpCommandRejection.js +17 -0
  178. package/dist/browser/CdpConnection.js +51 -11
  179. package/dist/browser/CdpElectronInspection.js +10 -10
  180. package/dist/browser/CdpElectronProvider.js +3 -6
  181. package/dist/browser/CdpElectronScriptEvents.js +6 -6
  182. package/dist/browser/CdpElectronScripts.js +2 -2
  183. package/dist/browser/CdpElectronWorkers.js +4 -4
  184. package/dist/browser/CdpObservationSession.js +18 -23
  185. package/dist/browser/CdpPageCapture.js +4 -4
  186. package/dist/browser/CdpPageCaptureScripts.js +2 -2
  187. package/dist/browser/CdpPageCaptureWorkers.js +9 -9
  188. package/dist/browser/CdpSafeMetadata.js +48 -10
  189. package/dist/browser/CdpScreenshot.js +5 -5
  190. package/dist/browser/CdpTargetEvents.js +8 -0
  191. package/dist/browser/CdpTargetSession.js +2 -2
  192. package/dist/browser/CdpWebMcpDiscovery.js +22 -16
  193. package/dist/browser/PlaywrightBrowserScenarioProvider.js +7 -6
  194. package/dist/browser/PlaywrightElectronActiveProvider.js +15 -9
  195. package/dist/browser/PlaywrightScenarioEvents.js +59 -51
  196. package/dist/browser/PlaywrightScenarioSession.js +8 -1
  197. package/dist/browser/WebSourceMapFetcher.js +37 -53
  198. package/dist/browser/assets/LocalWebScriptArtifacts.js +87 -0
  199. package/dist/browser/assets/PageScriptCapture.js +32 -0
  200. package/dist/browser/assets/PublishWebScripts.js +74 -0
  201. package/dist/browser/assets/ScenarioScriptCapture.js +76 -0
  202. package/dist/browser/assets/ScriptCaptureAdapters.js +57 -0
  203. package/dist/browser/assets/WebArtifactReads.js +56 -0
  204. package/dist/browser/assets/WebSourceLocationArtifacts.js +40 -0
  205. package/dist/browser/execution/CdpEventListeners.js +79 -0
  206. package/dist/browser/execution/CdpExecutionCapture.js +135 -0
  207. package/dist/browser/execution/CdpExecutionCollection.js +57 -0
  208. package/dist/browser/execution/CdpExecutionWindow.js +100 -0
  209. package/dist/browser/execution/CdpListenerSelector.js +22 -0
  210. package/dist/browser/execution/CdpPreciseCoverage.js +48 -0
  211. package/dist/browser/execution/CdpRuntimeInitiator.js +18 -0
  212. package/dist/browser/execution/CdpRuntimeProtocol.js +106 -0
  213. package/dist/browser/execution/CdpRuntimeRequests.js +81 -0
  214. package/dist/browser/execution/CdpRuntimeSession.js +163 -0
  215. package/dist/browser/execution/CdpRuntimeSources.js +223 -0
  216. package/dist/browser/execution/CdpWebRuntimeProvider.js +51 -0
  217. package/dist/browser/history/CaptureFailures.js +101 -0
  218. package/dist/browser/history/CaptureFormatError.js +10 -0
  219. package/dist/browser/history/CaptureRedaction.js +65 -0
  220. package/dist/browser/history/CaptureRelease.js +12 -0
  221. package/dist/browser/history/HarCapture.js +165 -0
  222. package/dist/browser/history/HarCaptureAdapter.js +20 -0
  223. package/dist/browser/history/HarCaptureProcess.js +57 -0
  224. package/dist/browser/history/HarJson.js +91 -0
  225. package/dist/browser/history/HarSchema.js +72 -0
  226. package/dist/browser/history/HistoricalCaptureDecoder.js +186 -0
  227. package/dist/browser/history/HistoricalCaptureFormatAdapter.js +1 -0
  228. package/dist/browser/history/MitmproxyCaptureAdapter.js +42 -0
  229. package/dist/browser/modules/NativeModuleResolver.js +210 -0
  230. package/dist/browser/modules/WebModuleArtifacts.js +40 -0
  231. package/dist/browser/network/PlaywrightNetworkContent.js +71 -0
  232. package/dist/browser/network/PlaywrightScenarioNetwork.js +180 -0
  233. package/dist/browser/providerIdentities.js +24 -0
  234. package/dist/catalogIdentity.js +23 -15
  235. package/dist/cli/androidCommands.js +13 -3
  236. package/dist/cli/applicationCommands.js +39 -8
  237. package/dist/cli/artifactCommands.js +27 -2
  238. package/dist/cli/binaryDiagnosticsCommands.js +39 -0
  239. package/dist/cli/browserAdvancedCommands.js +27 -9
  240. package/dist/cli/coreAnalysisCommands.js +6 -494
  241. package/dist/cli/coreBinaryCommands.js +211 -0
  242. package/dist/cli/coreNativeCommands.js +293 -0
  243. package/dist/cli/electronCommands.js +29 -27
  244. package/dist/cli/evmCommands.js +24 -0
  245. package/dist/cli/firmwareCommands.js +9 -6
  246. package/dist/cli/javascriptApplicationAnalysis.js +17 -4
  247. package/dist/cli/javascriptRecoveryCommands.js +45 -0
  248. package/dist/cli/jsonOutput.js +133 -0
  249. package/dist/cli/managedCommands.js +4 -4
  250. package/dist/cli/managedProjectGraphCommand.js +1 -1
  251. package/dist/cli/nativeCallCommands.js +35 -0
  252. package/dist/cli/processCommands.js +1 -1
  253. package/dist/cli/referenceSourceImportStatus.js +6 -1
  254. package/dist/cli/streamedJsonOutput.js +56 -0
  255. package/dist/cli/utilityCommands.js +49 -23
  256. package/dist/cli/webModuleCommands.js +56 -0
  257. package/dist/cli/webNetworkCaptureCommands.js +40 -0
  258. package/dist/cli/webRuntimeCommands.js +60 -0
  259. package/dist/cli/webScriptCommands.js +31 -0
  260. package/dist/cli/webSourceLocationCommands.js +42 -0
  261. package/dist/cli.js +19 -3
  262. package/dist/cliBrowserContext.js +4 -2
  263. package/dist/cliBrowserScenarioCommands.js +6 -5
  264. package/dist/cliCommandNames.js +14 -0
  265. package/dist/cliJavaScriptRuntimeCommands.js +6 -4
  266. package/dist/cliJsonInput.js +38 -2
  267. package/dist/cliOutput.js +52 -11
  268. package/dist/composition/android.js +3 -0
  269. package/dist/composition/auxiliaryAnalysisProviders.js +30 -0
  270. package/dist/composition/binary.js +25 -0
  271. package/dist/composition/binaryDiagnostics.js +8 -0
  272. package/dist/composition/browserObservation.js +3 -0
  273. package/dist/composition/browserScenario.js +3 -0
  274. package/dist/composition/directAnalysis.js +17 -0
  275. package/dist/composition/electronObservation.js +3 -0
  276. package/dist/composition/electronScenario.js +3 -0
  277. package/dist/composition/evm.js +4 -0
  278. package/dist/composition/firmware.js +3 -0
  279. package/dist/composition/javascriptRecovery.js +3 -0
  280. package/dist/composition/javascriptRuntimeObservation.js +3 -0
  281. package/dist/composition/optionalObservationProviders.js +49 -0
  282. package/dist/composition/webModules.js +5 -0
  283. package/dist/composition/webNetworkCaptures.js +6 -0
  284. package/dist/composition/webRuntime.js +4 -0
  285. package/dist/composition/webSourceLocations.js +5 -0
  286. package/dist/config/parseConfig.js +22 -3
  287. package/dist/contracts/{androidToolContracts.js → android/androidToolContracts.js} +5 -5
  288. package/dist/contracts/applicationToolContracts.js +43 -8
  289. package/dist/contracts/artifactToolContracts.js +8 -2
  290. package/dist/contracts/browserCaptureToolInputSchema.js +43 -0
  291. package/dist/contracts/browserScenarioToolContracts.js +1 -1
  292. package/dist/contracts/browserToolContracts.js +4 -3
  293. package/dist/contracts/enhancedInputs.js +1 -1
  294. package/dist/contracts/errorSchemas.js +8 -1
  295. package/dist/contracts/evm/evmToolContracts.js +20 -0
  296. package/dist/contracts/{firmwareToolContracts.js → firmware/firmwareToolContracts.js} +5 -5
  297. package/dist/contracts/investigationExamples.js +2 -2
  298. package/dist/contracts/{applicationWorkflowInputContracts.js → javascript/applicationWorkflowInputContracts.js} +6 -6
  299. package/dist/contracts/{electronToolContracts.js → javascript/electronToolContracts.js} +6 -6
  300. package/dist/contracts/{javascriptApplicationWorkflowExamples.js → javascript/javascriptApplicationWorkflowExamples.js} +3 -3
  301. package/dist/contracts/javascript/javascriptRecoveryToolContracts.js +23 -0
  302. package/dist/contracts/{javascriptRuntimeObservationToolContracts.js → javascript/javascriptRuntimeObservationToolContracts.js} +3 -3
  303. package/dist/contracts/{javascriptRuntimeReconciliationExample.js → javascript/javascriptRuntimeReconciliationExample.js} +5 -5
  304. package/dist/contracts/{managedToolContracts.js → managed/managedToolContracts.js} +10 -6
  305. package/dist/contracts/{managedWorkflowExamples.js → managed/managedWorkflowExamples.js} +1 -1
  306. package/dist/contracts/{managedWorkflowToolContracts.js → managed/managedWorkflowToolContracts.js} +6 -6
  307. package/dist/contracts/mobileApplicationGraphExamples.js +105 -0
  308. package/dist/contracts/native/binaryDiagnosticsToolContracts.js +42 -0
  309. package/dist/contracts/{nativeToolContracts.js → native/nativeToolContracts.js} +31 -8
  310. package/dist/contracts/officialToolContracts.js +15 -12
  311. package/dist/contracts/process/processCaptureExample.js +2 -0
  312. package/dist/contracts/sessionLifecycleInputs.js +22 -5
  313. package/dist/contracts/sessionStatusContract.js +10 -2
  314. package/dist/contracts/sessionToolContracts.js +9 -2
  315. package/dist/contracts/sessionToolSchemas.js +10 -3
  316. package/dist/contracts/toolContractExamples.js +1 -1
  317. package/dist/contracts/toolContracts.js +19 -7
  318. package/dist/contracts/toolEffects.js +62 -0
  319. package/dist/contracts/toolOutputSchemaGroups.js +23 -19
  320. package/dist/contracts/toolOutputSchemaPrimitives.js +1 -1
  321. package/dist/contracts/webNetworkCaptureToolContracts.js +24 -0
  322. package/dist/contracts/webRuntimeToolContracts.js +43 -0
  323. package/dist/contracts/webScriptToolContracts.js +68 -0
  324. package/dist/domain/analysisErrorBase.js +15 -0
  325. package/dist/domain/analysisErrorCore.js +63 -7
  326. package/dist/domain/analysisErrorPresentation.js +29 -1
  327. package/dist/domain/analysisErrorProjection.js +53 -2
  328. package/dist/domain/analysisSnapshot.js +166 -2
  329. package/dist/domain/{androidApplication.js → android/androidApplication.js} +7 -6
  330. package/dist/domain/apple/appleApplication.js +277 -0
  331. package/dist/domain/{appleAssetCatalog.js → apple/appleAssetCatalog.js} +2 -2
  332. package/dist/domain/apple/appleBundleAnatomy.js +236 -0
  333. package/dist/domain/apple/dyldPaths.js +81 -0
  334. package/dist/domain/apple/dylibResolution.js +367 -0
  335. package/dist/domain/apple/dylibResolutionFindings.js +75 -0
  336. package/dist/domain/{interfaceBuilderGraph.js → apple/interfaceBuilderGraph.js} +47 -314
  337. package/dist/domain/apple/interfaceBuilderKeyedArchive.js +411 -0
  338. package/dist/domain/{keyedArchive.js → apple/keyedArchive.js} +10 -9
  339. package/dist/domain/apple/plistValue.js +35 -0
  340. package/dist/domain/artifactInventoryEvidence.js +12 -2
  341. package/dist/domain/artifactInventorySnapshot.js +1 -0
  342. package/dist/domain/artifactOperationError.js +5 -1
  343. package/dist/domain/artifactPathSyntax.js +26 -0
  344. package/dist/domain/browserNetworkEvidence.js +82 -0
  345. package/dist/domain/browserObservation.js +1 -1
  346. package/dist/domain/browserObservationError.js +2 -0
  347. package/dist/domain/browserObservationSchemas.js +15 -1
  348. package/dist/domain/browserScenarioCapture.js +22 -0
  349. package/dist/domain/browserScenarioCaptureValues.js +25 -0
  350. package/dist/domain/browserScenarioDiff.js +6 -3
  351. package/dist/domain/browserScenarioDiffEvidence.js +35 -1
  352. package/dist/domain/browserScenarioValues.js +21 -3
  353. package/dist/domain/browserSession.js +2 -7
  354. package/dist/domain/bundleComparison.js +2 -1
  355. package/dist/domain/callPath.js +52 -44
  356. package/dist/domain/callPathSchemas.js +1 -1
  357. package/dist/domain/canonicalDigest.js +13 -1
  358. package/dist/domain/changedBehavior.js +3 -3
  359. package/dist/domain/comparisonStatus.js +11 -0
  360. package/dist/domain/conformanceTrustGate.js +0 -16
  361. package/dist/domain/evidence.js +17 -5
  362. package/dist/domain/evidenceBundle.js +98 -35
  363. package/dist/domain/evm/evmInterface.js +63 -0
  364. package/dist/domain/explicitSensitiveFailure.js +92 -0
  365. package/dist/domain/explicitSensitiveValues.js +10 -0
  366. package/dist/domain/{firmwareAnalysis.js → firmware/firmwareAnalysis.js} +10 -3
  367. package/dist/domain/functionComparisonNormalization.js +11 -13
  368. package/dist/domain/hopperValues.js +2 -2
  369. package/dist/domain/inputIssueProjection.js +17 -2
  370. package/dist/domain/{electronActiveObservation.js → javascript/electronActiveObservation.js} +9 -4
  371. package/dist/domain/{electronObservation.js → javascript/electronObservation.js} +5 -11
  372. package/dist/domain/{electronStaticAnalysisBrowser.js → javascript/electronStaticAnalysisBrowser.js} +4 -3
  373. package/dist/domain/{electronStaticAnalysisIpc.js → javascript/electronStaticAnalysisIpc.js} +2 -2
  374. package/dist/domain/{electronStaticAnalysisNative.js → javascript/electronStaticAnalysisNative.js} +12 -13
  375. package/dist/domain/javascript/electronStaticAnalysisTypes.js +1 -0
  376. package/dist/domain/{electronStaticAnalysisValues.js → javascript/electronStaticAnalysisValues.js} +3 -3
  377. package/dist/domain/javascript/htmlArtifactReferences.js +40 -0
  378. package/dist/domain/{javascriptApplicationAnalysis.js → javascript/javascriptApplicationAnalysis.js} +2 -2
  379. package/dist/domain/{javascriptApplicationChangeGraph.js → javascript/javascriptApplicationChangeGraph.js} +1 -1
  380. package/dist/domain/{javascriptApplicationEvidenceSchemas.js → javascript/javascriptApplicationEvidenceSchemas.js} +6 -4
  381. package/dist/domain/{javascriptApplicationGraph.js → javascript/javascriptApplicationGraph.js} +2 -2
  382. package/dist/domain/{javascriptApplicationGraphSchemas.js → javascript/javascriptApplicationGraphSchemas.js} +2 -2
  383. package/dist/domain/{javascriptApplicationVersionComparison.js → javascript/javascriptApplicationVersionComparison.js} +2 -2
  384. package/dist/domain/{javascriptApplicationVersionComparisonSchemas.js → javascript/javascriptApplicationVersionComparisonSchemas.js} +3 -3
  385. package/dist/domain/{javascriptApplicationVersionItems.js → javascript/javascriptApplicationVersionItems.js} +2 -2
  386. package/dist/domain/{javascriptApplicationVersionKeys.js → javascript/javascriptApplicationVersionKeys.js} +16 -9
  387. package/dist/domain/javascript/javascriptArtifactFiles.js +1 -0
  388. package/dist/domain/{javascriptAstFingerprint.js → javascript/javascriptAstFingerprint.js} +38 -22
  389. package/dist/domain/javascript/javascriptAstValues.js +23 -0
  390. package/dist/domain/{javascriptExportShapeComparison.js → javascript/javascriptExportShapeComparison.js} +21 -5
  391. package/dist/domain/{javascriptExportShapeComparisonSchemas.js → javascript/javascriptExportShapeComparisonSchemas.js} +2 -2
  392. package/dist/domain/{javascriptExportShapeSelection.js → javascript/javascriptExportShapeSelection.js} +1 -1
  393. package/dist/domain/{javascriptExportShapeVariants.js → javascript/javascriptExportShapeVariants.js} +1 -11
  394. package/dist/domain/{javascriptFeatureSeed.js → javascript/javascriptFeatureSeed.js} +4 -3
  395. package/dist/domain/{javascriptFeatureTrace.js → javascript/javascriptFeatureTrace.js} +2 -2
  396. package/dist/domain/{javascriptFeatureTraceSchemas.js → javascript/javascriptFeatureTraceSchemas.js} +32 -18
  397. package/dist/domain/{javascriptFeatureTraversal.js → javascript/javascriptFeatureTraversal.js} +6 -2
  398. package/dist/domain/{javascriptNativeHandoff.js → javascript/javascriptNativeHandoff.js} +1 -1
  399. package/dist/domain/javascript/javascriptRecovery.js +88 -0
  400. package/dist/domain/{javascriptRuntimeLoadState.js → javascript/javascriptRuntimeLoadState.js} +1 -1
  401. package/dist/domain/{javascriptRuntimeObservation.js → javascript/javascriptRuntimeObservation.js} +2 -2
  402. package/dist/domain/{javascriptRuntimeReconciliationActive.js → javascript/javascriptRuntimeReconciliationActive.js} +3 -3
  403. package/dist/domain/{javascriptRuntimeReconciliationGraph.js → javascript/javascriptRuntimeReconciliationGraph.js} +1 -1
  404. package/dist/domain/{javascriptRuntimeReconciliationMatching.js → javascript/javascriptRuntimeReconciliationMatching.js} +2 -2
  405. package/dist/domain/{javascriptRuntimeReconciliationParsing.js → javascript/javascriptRuntimeReconciliationParsing.js} +5 -5
  406. package/dist/domain/{javascriptRuntimeReconciliationResult.js → javascript/javascriptRuntimeReconciliationResult.js} +2 -2
  407. package/dist/domain/{javascriptRuntimeReconciliationSchemas.js → javascript/javascriptRuntimeReconciliationSchemas.js} +4 -4
  408. package/dist/domain/{javascriptRuntimeStaticCandidates.js → javascript/javascriptRuntimeStaticCandidates.js} +1 -1
  409. package/dist/domain/{javascriptSemanticAnalysis.js → javascript/javascriptSemanticAnalysis.js} +40 -14
  410. package/dist/domain/{javascriptSemanticAsyncEffects.js → javascript/javascriptSemanticAsyncEffects.js} +2 -1
  411. package/dist/domain/{javascriptSemanticCallResolution.js → javascript/javascriptSemanticCallResolution.js} +10 -5
  412. package/dist/domain/{javascriptSemanticCalls.js → javascript/javascriptSemanticCalls.js} +7 -4
  413. package/dist/domain/{javascriptSemanticChildProcesses.js → javascript/javascriptSemanticChildProcesses.js} +4 -2
  414. package/dist/domain/{javascriptSemanticDataEffectHelpers.js → javascript/javascriptSemanticDataEffectHelpers.js} +7 -6
  415. package/dist/domain/{javascriptSemanticDataEffects.js → javascript/javascriptSemanticDataEffects.js} +8 -6
  416. package/dist/domain/{javascriptSemanticFingerprints.js → javascript/javascriptSemanticFingerprints.js} +40 -16
  417. package/dist/domain/{javascriptSemanticGraph.js → javascript/javascriptSemanticGraph.js} +23 -7
  418. package/dist/domain/{javascriptSemanticGraphSchemas.js → javascript/javascriptSemanticGraphSchemas.js} +3 -3
  419. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +116 -0
  420. package/dist/domain/javascript/javascriptSemanticMutationValues.js +53 -0
  421. package/dist/domain/{javascriptSemanticObjects.js → javascript/javascriptSemanticObjects.js} +5 -5
  422. package/dist/domain/{javascriptSemanticPrimitives.js → javascript/javascriptSemanticPrimitives.js} +1 -1
  423. package/dist/domain/{javascriptSemanticProjection.js → javascript/javascriptSemanticProjection.js} +31 -44
  424. package/dist/domain/{javascriptSemanticPromises.js → javascript/javascriptSemanticPromises.js} +77 -22
  425. package/dist/domain/{javascriptSemanticProvenance.js → javascript/javascriptSemanticProvenance.js} +4 -1
  426. package/dist/domain/{javascriptSemanticQuery.js → javascript/javascriptSemanticQuery.js} +1 -1
  427. package/dist/domain/{javascriptSemanticQueryAssessment.js → javascript/javascriptSemanticQueryAssessment.js} +1 -1
  428. package/dist/domain/{javascriptSemanticQueryIdentity.js → javascript/javascriptSemanticQueryIdentity.js} +1 -1
  429. package/dist/domain/{javascriptSemanticQuerySchemas.js → javascript/javascriptSemanticQuerySchemas.js} +3 -3
  430. package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +25 -0
  431. package/dist/domain/{javascriptSemanticResources.js → javascript/javascriptSemanticResources.js} +2 -1
  432. package/dist/domain/{javascriptSemanticReturns.js → javascript/javascriptSemanticReturns.js} +1 -1
  433. package/dist/domain/{javascriptSemanticTraceSchemas.js → javascript/javascriptSemanticTraceSchemas.js} +2 -2
  434. package/dist/domain/javascript/javascriptSemanticTraversal.js +55 -0
  435. package/dist/domain/javascript/javascriptSemanticValueTypes.js +1 -0
  436. package/dist/domain/{javascriptSemanticValues.js → javascript/javascriptSemanticValues.js} +72 -48
  437. package/dist/domain/{javascriptStaticAnalysis.js → javascript/javascriptStaticAnalysis.js} +7 -4
  438. package/dist/domain/{javascriptStaticAnalysisBundler.js → javascript/javascriptStaticAnalysisBundler.js} +14 -11
  439. package/dist/domain/{javascriptStaticAnalysisCalls.js → javascript/javascriptStaticAnalysisCalls.js} +2 -2
  440. package/dist/domain/{javascriptStaticAnalysisHelpers.js → javascript/javascriptStaticAnalysisHelpers.js} +231 -40
  441. package/dist/domain/{sourceToBundleComparison.js → javascript/sourceToBundleComparison.js} +2 -2
  442. package/dist/domain/{sourceToBundleComparisonSchemas.js → javascript/sourceToBundleComparisonSchemas.js} +4 -4
  443. package/dist/domain/{sourceToBundleSignals.js → javascript/sourceToBundleSignals.js} +2 -2
  444. package/dist/domain/jsonValue.js +4 -0
  445. package/dist/domain/localPath.js +2 -0
  446. package/dist/domain/{managedApplicationGraph.js → managed/managedApplicationGraph.js} +4 -4
  447. package/dist/domain/{managedApplicationGraphNodes.js → managed/managedApplicationGraphNodes.js} +1 -1
  448. package/dist/domain/{managedArtifact.js → managed/managedArtifact.js} +1 -1
  449. package/dist/domain/{managedMemberComparison.js → managed/managedMemberComparison.js} +4 -4
  450. package/dist/domain/{managedMemberComparisonCoverage.js → managed/managedMemberComparisonCoverage.js} +2 -1
  451. package/dist/domain/{managedMemberComparisonItems.js → managed/managedMemberComparisonItems.js} +97 -40
  452. package/dist/domain/{managedMemberComparisonMatch.js → managed/managedMemberComparisonMatch.js} +22 -11
  453. package/dist/domain/{managedNativeVerification.js → managed/managedNativeVerification.js} +1 -1
  454. package/dist/domain/{managedNativeVerificationMatch.js → managed/managedNativeVerificationMatch.js} +3 -3
  455. package/dist/domain/{managedNativeVerificationSchemas.js → managed/managedNativeVerificationSchemas.js} +6 -5
  456. package/dist/domain/{managedReconstruction.js → managed/managedReconstruction.js} +3 -3
  457. package/dist/domain/native/binaryLayout.js +357 -0
  458. package/dist/domain/native/nativeCallObservation.js +164 -0
  459. package/dist/domain/{nativeFunctionAnnotations.js → native/nativeFunctionAnnotations.js} +1 -1
  460. package/dist/domain/{nativeInspection.js → native/nativeInspection.js} +1 -1
  461. package/dist/domain/{nativeInvestigationGraph.js → native/nativeInvestigationGraph.js} +13 -4
  462. package/dist/domain/{nativeLoadImage.js → native/nativeLoadImage.js} +1 -1
  463. package/dist/domain/{nativeUiObservation.js → native/nativeUiObservation.js} +20 -6
  464. package/dist/domain/{objcSwiftMetadata.js → native/objcSwiftMetadata.js} +17 -39
  465. package/dist/domain/native/recordedCrash.js +266 -0
  466. package/dist/domain/native/recordedCrashNoteCoverage.js +73 -0
  467. package/dist/domain/process/processCapture.js +316 -0
  468. package/dist/domain/{processCaptureExample.js → process/processCaptureExample.js} +5 -0
  469. package/dist/domain/process/processCaptureParsing.js +54 -0
  470. package/dist/domain/{processCaptureValidation.js → process/processCaptureValidation.js} +18 -2
  471. package/dist/domain/{processComparison.js → process/processComparison.js} +1 -1
  472. package/dist/domain/{processObservation.js → process/processObservation.js} +1 -1
  473. package/dist/domain/{processScenario.js → process/processScenario.js} +17 -17
  474. package/dist/domain/{processTraceSpecification.js → process/processTraceSpecification.js} +1 -1
  475. package/dist/domain/propertyListKeys.js +69 -0
  476. package/dist/domain/providerCleanupError.js +5 -2
  477. package/dist/domain/providerSelectionError.js +4 -2
  478. package/dist/domain/reconstructionCoverageEvaluation.js +46 -24
  479. package/dist/domain/reconstructionCoverageInput.js +7 -0
  480. package/dist/domain/reconstructionVerification.js +3 -3
  481. package/dist/domain/reconstructionVerificationSchemas.js +1 -1
  482. package/dist/domain/residualUnknown.js +3 -2
  483. package/dist/domain/runtimeVersion.js +2 -0
  484. package/dist/domain/sourceMapEnvelope.js +38 -0
  485. package/dist/domain/staticRuntimeCorrelation.js +3 -3
  486. package/dist/domain/unicodeCodePointOrder.js +11 -6
  487. package/dist/domain/webBundleAnalyzerAst.js +2 -34
  488. package/dist/domain/webBundleAnalyzerInspection.js +12 -9
  489. package/dist/domain/webCaptureDiff.js +1 -0
  490. package/dist/domain/webEventListeners.js +28 -0
  491. package/dist/domain/webExecution.js +74 -0
  492. package/dist/domain/webMcpDiscovery.js +1 -7
  493. package/dist/domain/webModuleImports.js +104 -0
  494. package/dist/domain/webModuleTrace.js +106 -0
  495. package/dist/domain/webNetworkCapture.js +118 -0
  496. package/dist/domain/webNetworkCaptureCoordinates.js +58 -0
  497. package/dist/domain/webRuntime.js +69 -0
  498. package/dist/domain/webScreenshot.js +1 -7
  499. package/dist/domain/webScriptArtifacts.js +39 -0
  500. package/dist/domain/webScriptExport.js +86 -0
  501. package/dist/domain/webScriptExportError.js +13 -0
  502. package/dist/domain/webScriptExportPlan.js +108 -0
  503. package/dist/domain/webSourceLocation.js +106 -0
  504. package/dist/domain/webSourcePosition.js +21 -0
  505. package/dist/dotnet/ManagedArtifactInspector.js +1 -1
  506. package/dist/dotnet/ManagedExceptionRegionValidation.js +41 -0
  507. package/dist/dotnet/ManagedMemberInspector.js +5 -3
  508. package/dist/dotnet/ManagedMemberInspectorCore.js +72 -32
  509. package/dist/dotnet/ManagedMemberInstructionDecoder.js +23 -7
  510. package/dist/dotnet/ManagedMemberRows.js +19 -6
  511. package/dist/dotnet/ManagedMetadataHeaps.js +20 -2
  512. package/dist/dotnet/ManagedMetadataInventory.js +38 -28
  513. package/dist/dotnet/ManagedMetadataInventoryRows.js +24 -10
  514. package/dist/dotnet/ManagedMethodBodyReader.js +7 -1
  515. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +37 -19
  516. package/dist/dotnet/ManagedNativeBoundaryInspector.js +59 -51
  517. package/dist/dotnet/ManagedPeReader.js +11 -0
  518. package/dist/dotnet/ManagedStaticProvider.js +3 -33
  519. package/dist/dotnet/ManagedStaticProviderMetadata.js +36 -0
  520. package/dist/evaluation/CodexAgentEval.js +2 -1
  521. package/dist/evm/EvmBytecodeCarrier.js +21 -0
  522. package/dist/evm/EvmWorkerLimits.js +40 -0
  523. package/dist/evm/EvmoleFailures.js +126 -0
  524. package/dist/evm/EvmoleInterfaceAdapter.js +53 -0
  525. package/dist/evm/EvmoleInterfaceProvider.js +273 -0
  526. package/dist/evm/EvmoleInterfaceWorker.js +87 -0
  527. package/dist/evm/EvmoleRelease.js +16 -0
  528. package/dist/firmware/FirmwareCommand.js +1 -0
  529. package/dist/firmware/FirmwareProvider.js +18 -12
  530. package/dist/firmware/FirmwarePublication.js +1 -1
  531. package/dist/firmware/FirmwareRelease.js +1 -1
  532. package/dist/firmware/FirmwareReports.js +12 -0
  533. package/dist/firmware/FirmwareVersion.js +80 -0
  534. package/dist/generatedPackageMetadata.js +2 -2
  535. package/dist/ghidra/GhidraFunctionValues.js +5 -5
  536. package/dist/ghidra/GhidraInstallation.js +38 -34
  537. package/dist/ghidra/GhidraInstallationPolicy.js +140 -0
  538. package/dist/ghidra/GhidraInventoryValues.js +1 -1
  539. package/dist/ghidra/GhidraLauncher.js +13 -4
  540. package/dist/ghidra/GhidraLoadImageAttest.js +36 -0
  541. package/dist/ghidra/GhidraLoadImageValues.js +1 -1
  542. package/dist/ghidra/GhidraProvider.js +17 -235
  543. package/dist/ghidra/GhidraProviderCapabilities.js +8 -15
  544. package/dist/ghidra/GhidraProviderClient.js +209 -0
  545. package/dist/ghidra/GhidraResponseBuffer.js +7 -1
  546. package/dist/ghidra/extensions/nativeaot/NativeAotReport.js +17 -1
  547. package/dist/hopper/BridgeLauncher.js +2 -0
  548. package/dist/hopper/HopperProvider.js +2 -48
  549. package/dist/hopper/HopperProviderCapabilities.js +73 -0
  550. package/dist/hopper/HopperResponseStream.js +7 -1
  551. package/dist/hopper/LinuxPrivateDisplayProbe.js +8 -6
  552. package/dist/ida/IdaProviderCapabilities.js +3 -11
  553. package/dist/ida/IdaSessionClient.js +12 -0
  554. package/dist/{browser → inspector}/JavaScriptRuntimeScope.js +16 -5
  555. package/dist/{browser → inspector}/V8InspectorCaptureProjection.js +46 -8
  556. package/dist/{browser → inspector}/V8InspectorEndpoint.js +1 -1
  557. package/dist/{browser → inspector}/V8InspectorProvider.js +10 -13
  558. package/dist/inspector/providerIdentity.js +6 -0
  559. package/dist/javascript/recovery/RecoveryFiles.js +122 -0
  560. package/dist/javascript/recovery/WakaruCommand.js +119 -0
  561. package/dist/javascript/recovery/WakaruExecution.js +100 -0
  562. package/dist/javascript/recovery/WakaruProvider.js +96 -0
  563. package/dist/javascript/recovery/WakaruPublication.js +102 -0
  564. package/dist/javascript/recovery/WakaruRelease.js +29 -0
  565. package/dist/javascript/recovery/WakaruReport.js +134 -0
  566. package/dist/javascript/sourceMaps/SourceMapCodecProcess.js +37 -0
  567. package/dist/javascript/sourceMaps/SourceMapCodecProtocol.js +20 -0
  568. package/dist/javascript/sourceMaps/SourceMapCommand.js +177 -0
  569. package/dist/javascript/sourceMaps/SourceMapDecoder.js +61 -0
  570. package/dist/javascript/sourceMaps/SourceMapFormat.js +185 -0
  571. package/dist/javascript/sourceMaps/TraceSourceMap.js +138 -0
  572. package/dist/main/shutdown.js +8 -2
  573. package/dist/main/transport.js +24 -7
  574. package/dist/main.js +4 -18
  575. package/dist/native/AppleDispatchCoverage.js +58 -0
  576. package/dist/native/AppleDispatchMetadata.js +71 -509
  577. package/dist/native/AppleMachoFixups.js +292 -0
  578. package/dist/native/AppleMachoSelection.js +188 -0
  579. package/dist/native/AppleObjcCategories.js +59 -0
  580. package/dist/native/AppleObjcDispatchFacets.js +257 -0
  581. package/dist/native/AppleObjcProperties.js +68 -0
  582. package/dist/native/AppleObjcProtocols.js +2 -1
  583. package/dist/native/AppleSwiftDispatchFacets.js +150 -0
  584. package/dist/native/CommandRunner.js +2 -1
  585. package/dist/native/LldbCallTracer.js +278 -0
  586. package/dist/native/NativeCallObservation.js +135 -0
  587. package/dist/native/NativeMacOSProvider.js +151 -75
  588. package/dist/native/NativeMacOSProviderMetadata.js +47 -0
  589. package/dist/native/NativeMachoInspection.js +45 -14
  590. package/dist/native/NativeUiHelperRuntime.js +7 -3
  591. package/dist/native/NativeUiObservation.js +8 -4
  592. package/dist/native/NativeUiOutputBudget.js +8 -0
  593. package/dist/native/parsers/codesign.js +40 -5
  594. package/dist/native/parsers/demangle.js +6 -2
  595. package/dist/native/parsers/dyldInfo.js +13 -4
  596. package/dist/native/parsers/echoedPath.js +14 -0
  597. package/dist/native/parsers/lipo.js +14 -0
  598. package/dist/native/parsers/otool.js +1 -1
  599. package/dist/native/parsers/plist.js +174 -19
  600. package/dist/native/pwndbg/PwndbgCoreContext.js +160 -0
  601. package/dist/native/pwntools/PwntoolsDecoder.js +203 -0
  602. package/dist/native/pwntools/PwntoolsFailures.js +180 -0
  603. package/dist/native/pwntools/PwntoolsLayoutProvider.js +36 -0
  604. package/dist/native/pwntools/PwntoolsRecordedCrashProvider.js +75 -0
  605. package/dist/native/pwntools/PwntoolsRelease.js +19 -0
  606. package/dist/native/pwntools/PwntoolsResourceLimits.js +76 -0
  607. package/dist/native/pwntools/RecordedCrashSourceBindings.js +46 -0
  608. package/dist/native/pwntools/RecordedCrashStructureBindings.js +101 -0
  609. package/dist/process/DarwinProcessRunTokenReader.js +294 -0
  610. package/dist/process/ExecFileOutput.js +2 -0
  611. package/dist/process/OwnedCommand.js +113 -0
  612. package/dist/process/ProcessOwnership.js +263 -33
  613. package/dist/process/ProcessOwnershipObservation.js +161 -24
  614. package/dist/process/ProviderProcess.js +68 -20
  615. package/dist/{application → process/capture}/FilesystemSnapshot.js +20 -5
  616. package/dist/{application → process/capture}/ProcessCaptureCapability.js +16 -1
  617. package/dist/{application → process/capture}/ProcessCaptureError.js +17 -1
  618. package/dist/process/capture/ProcessCaptureLifecycle.js +615 -0
  619. package/dist/process/capture/ProcessHarness.js +452 -0
  620. package/dist/{application → process/capture}/ProcessSampling.js +2 -2
  621. package/dist/reference/ReferenceSourceReaderEntries.js +6 -1
  622. package/dist/server/createServer.js +70 -6
  623. package/dist/server/mcpClientMetadata.js +6 -3
  624. package/dist/server/promptCompletion.js +10 -3
  625. package/dist/server/registerAndroidTools.js +1 -1
  626. package/dist/server/registerApplicationTools/compareExportShapes.js +2 -2
  627. package/dist/server/registerApplicationTools/compareSourceToBundle.js +2 -2
  628. package/dist/server/registerApplicationTools/compareVersions.js +2 -2
  629. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +43 -0
  630. package/dist/server/registerApplicationTools/traceFeature.js +1 -1
  631. package/dist/server/registerApplicationTools/traceSemantics.js +1 -1
  632. package/dist/server/registerApplicationTools.js +2 -0
  633. package/dist/server/registerBinaryDiagnosticsTools.js +17 -0
  634. package/dist/server/registerBrowserScenarioTool.js +6 -2
  635. package/dist/server/registerBrowserTools.js +13 -2
  636. package/dist/server/registerCloseLifecycleTool.js +1 -1
  637. package/dist/server/registerElectronTools.js +21 -7
  638. package/dist/server/registerEvidenceTools.js +1 -1
  639. package/dist/server/registerEvmTools.js +17 -0
  640. package/dist/server/registerJavaScriptRecoveryTool.js +17 -0
  641. package/dist/server/registerJavaScriptRuntimeObservationTools.js +9 -4
  642. package/dist/server/registerManagedTools.js +3 -3
  643. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +2 -2
  644. package/dist/server/registerManagedWorkflowTools/contract.js +1 -1
  645. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +1 -1
  646. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +1 -1
  647. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +2 -2
  648. package/dist/server/registerNativeTools.js +1 -1
  649. package/dist/server/registerProcessComparisonTool.js +1 -1
  650. package/dist/server/registerPrompts.js +5 -1
  651. package/dist/server/registerRecordedCrashTools.js +17 -0
  652. package/dist/server/registerSessionTools.js +3 -3
  653. package/dist/server/registerWebModuleTool.js +17 -0
  654. package/dist/server/registerWebNetworkCaptureTool.js +28 -0
  655. package/dist/server/registerWebRuntimeTools.js +31 -0
  656. package/dist/server/registerWebScriptTool.js +18 -0
  657. package/dist/server/registerWebSourceLocationTool.js +17 -0
  658. package/dist/server/sessionAvailabilityPolicy.js +27 -12
  659. package/dist/server/sessionToolPolicies.js +1 -1
  660. package/dist/server/toolResult.js +1 -1
  661. package/dist/windows/WindowsOwnedProcess.js +3 -1
  662. package/install.sh +12 -2
  663. package/native/windows/README.md +5 -0
  664. package/native/windows/build/manifest.json +2 -2
  665. package/native/windows/build/rea-windows-x64.node +0 -0
  666. package/package.json +75 -26
  667. package/scripts/hopper-demo-x11.py +67 -8
  668. package/scripts/rea.mjs +19 -3
  669. package/skills/reverse-engineer-anything/SKILL.md +23 -3
  670. package/skills/reverse-engineer-anything/references/android-applications.md +2 -2
  671. package/skills/reverse-engineer-anything/references/javascript-applications.md +1 -1
  672. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +61 -23
  673. package/third_party/README.md +60 -0
  674. package/third_party/evmole/LICENSE +21 -0
  675. package/third_party/evmole/README.md +22 -0
  676. package/third_party/pwndbg/LICENSE.md +21 -0
  677. package/third_party/pwndbg/README.md +23 -0
  678. package/third_party/pwntools/README.md +40 -0
  679. package/dist/application/AuthorizedArtifactInventory.js +0 -7
  680. package/dist/application/JavaScriptSemanticGraphProjection.js +0 -38
  681. package/dist/application/ProcessCaptureLifecycle.js +0 -299
  682. package/dist/application/ProcessHarness.js +0 -275
  683. package/dist/application/StoreFileLock.js +0 -124
  684. package/dist/application/runtime.js +0 -53
  685. package/dist/contracts/processCaptureExample.js +0 -2
  686. package/dist/domain/appleApplication.js +0 -181
  687. package/dist/domain/bytecodeProvider.js +0 -178
  688. package/dist/domain/customProtocolCapture.js +0 -137
  689. package/dist/domain/eventProcessTree.js +0 -225
  690. package/dist/domain/javascriptAstValues.js +0 -13
  691. package/dist/domain/javascriptSemanticTraversal.js +0 -30
  692. package/dist/domain/mobileApplicationInvestigation.js +0 -159
  693. package/dist/domain/packageAnalysis.js +0 -123
  694. package/dist/domain/peInspection.js +0 -197
  695. package/dist/domain/processCapture.js +0 -177
  696. package/dist/domain/processCaptureParsing.js +0 -21
  697. package/dist/domain/protocolCapture.js +0 -217
  698. package/dist/domain/runtimeIdentification.js +0 -212
  699. package/dist/generatedMcpToolCatalog.js +0 -37
  700. package/dist/native/NativeHostCapabilities.js +0 -23
  701. /package/dist/application/{AndroidAnalysisPort.js → DirectAnalysisDependencies.js} +0 -0
  702. /package/dist/application/{BinarySessionPort.js → WebModulePorts.js} +0 -0
  703. /package/dist/application/{ElectronActiveObservationPort.js → WebNetworkCapturePort.js} +0 -0
  704. /package/dist/application/{ElectronObservationPort.js → WebRuntimePort.js} +0 -0
  705. /package/dist/application/{FirmwareAnalysisPort.js → WebScriptArtifactPort.js} +0 -0
  706. /package/dist/application/{JavaScriptArtifactAnalysisTypes.js → WebSourceLocationPorts.js} +0 -0
  707. /package/dist/application/{JavaScriptRuntimeObservationPort.js → android/AndroidAnalysisPort.js} +0 -0
  708. /package/dist/application/{ArtifactExtractionDestination.js → artifacts/ArtifactExtractionDestination.js} +0 -0
  709. /package/dist/application/{AbortablePromise.js → binary/AbortablePromise.js} +0 -0
  710. /package/dist/{domain/electronStaticAnalysisTypes.js → application/binary/BinarySessionPort.js} +0 -0
  711. /package/dist/application/{BinarySessionStatus.js → binary/BinarySessionStatus.js} +0 -0
  712. /package/dist/{domain/javascriptSemanticValueTypes.js → application/binaryDiagnostics/BinaryLayoutPort.js} +0 -0
  713. /package/dist/application/{ElectronBoundaryGraph.js → javascript/ElectronBoundaryGraph.js} +0 -0
  714. /package/dist/application/{ElectronBoundaryGraphIpc.js → javascript/ElectronBoundaryGraphIpc.js} +0 -0
  715. /package/dist/application/{ElectronBoundaryGraphNative.js → javascript/ElectronBoundaryGraphNative.js} +0 -0
  716. /package/dist/application/{ElectronBoundaryGraphWindows.js → javascript/ElectronBoundaryGraphWindows.js} +0 -0
  717. /package/dist/application/{JavaScriptArtifactGraphBundlers.js → javascript/JavaScriptArtifactGraphBundlers.js} +0 -0
  718. /package/dist/application/{JavaScriptArtifactGraphEvidence.js → javascript/JavaScriptArtifactGraphEvidence.js} +0 -0
  719. /package/dist/application/{JavaScriptArtifactReconstructionInput.js → javascript/JavaScriptArtifactReconstructionInput.js} +0 -0
  720. /package/dist/application/{JavaScriptSemanticGraphEvidence.js → javascript/JavaScriptSemanticGraphEvidence.js} +0 -0
  721. /package/dist/artifacts/{NibArchive.js → apple/NibArchive.js} +0 -0
  722. /package/dist/{application/ArtifactInventory → artifacts/inventory}/policy.js +0 -0
  723. /package/dist/{application/ArtifactInventory → artifacts/inventory}/types.js +0 -0
  724. /package/dist/domain/{androidAnalysis.js → android/androidAnalysis.js} +0 -0
  725. /package/dist/domain/{electronStaticAnalysis.js → javascript/electronStaticAnalysis.js} +0 -0
  726. /package/dist/domain/{javascriptExportShapeComparisonIdentity.js → javascript/javascriptExportShapeComparisonIdentity.js} +0 -0
  727. /package/dist/domain/{javascriptRuntimeReconciliation.js → javascript/javascriptRuntimeReconciliation.js} +0 -0
  728. /package/dist/domain/{javascriptRuntimeReconciliationRuntime.js → javascript/javascriptRuntimeReconciliationRuntime.js} +0 -0
  729. /package/dist/domain/{javascriptSemanticCoverage.js → javascript/javascriptSemanticCoverage.js} +0 -0
  730. /package/dist/domain/{javascriptSemanticDerivedAnalysis.js → javascript/javascriptSemanticDerivedAnalysis.js} +0 -0
  731. /package/dist/domain/{javascriptSemanticGraphSerialization.js → javascript/javascriptSemanticGraphSerialization.js} +0 -0
  732. /package/dist/domain/{javascriptSemanticIr.js → javascript/javascriptSemanticIr.js} +0 -0
  733. /package/dist/domain/{javascriptSemanticQueryRelations.js → javascript/javascriptSemanticQueryRelations.js} +0 -0
  734. /package/dist/domain/{javascriptSemanticState.js → javascript/javascriptSemanticState.js} +0 -0
  735. /package/dist/domain/{javascriptSourceParser.js → javascript/javascriptSourceParser.js} +0 -0
  736. /package/dist/domain/{javascriptStaticAnalysisFindings.js → javascript/javascriptStaticAnalysisFindings.js} +0 -0
  737. /package/dist/domain/{javascriptStaticAnalysisState.js → javascript/javascriptStaticAnalysisState.js} +0 -0
  738. /package/dist/domain/{javascriptStaticAnalysisTypes.js → javascript/javascriptStaticAnalysisTypes.js} +0 -0
  739. /package/dist/domain/{managedApplicationGraphCoverage.js → managed/managedApplicationGraphCoverage.js} +0 -0
  740. /package/dist/domain/{managedApplicationGraphNodeCoverage.js → managed/managedApplicationGraphNodeCoverage.js} +0 -0
  741. /package/dist/domain/{nativeApiBoundary.js → native/nativeApiBoundary.js} +0 -0
  742. /package/dist/domain/{nativeDataType.js → native/nativeDataType.js} +0 -0
  743. /package/dist/domain/{nativeInstruction.js → native/nativeInstruction.js} +0 -0
  744. /package/dist/domain/{nativeMetadataRecovery.js → native/nativeMetadataRecovery.js} +0 -0
  745. /package/dist/domain/{nativeValueFlow.js → native/nativeValueFlow.js} +0 -0
  746. /package/dist/domain/{nativeValueTrace.js → native/nativeValueTrace.js} +0 -0
  747. /package/dist/domain/{processEvidenceProvider.js → process/processEvidenceProvider.js} +0 -0
  748. /package/dist/domain/{processTraceComparison.js → process/processTraceComparison.js} +0 -0
  749. /package/dist/domain/{processTraceDimensionProjection.js → process/processTraceDimensionProjection.js} +0 -0
  750. /package/dist/domain/{processTraceEvaluation.js → process/processTraceEvaluation.js} +0 -0
  751. /package/dist/{application → process/capture}/ProcessCaptureEnvironment.js +0 -0
  752. /package/dist/{application → process/capture}/ProcessCaptureJournal.js +0 -0
  753. /package/dist/{application → process/capture}/ProcessFilesystemEffects.js +0 -0
  754. /package/dist/{application → process/capture}/ProcessNormalization.js +0 -0
  755. /package/dist/{application → process/capture}/ProcessScenarioRuntimeValidation.js +0 -0
  756. /package/dist/{application → process/capture}/ProcessTimer.js +0 -0
  757. /package/dist/{application → process/capture}/TerminalRenderer.js +0 -0
@@ -0,0 +1,143 @@
1
+ """Bounded Linux core evidence via unchanged ELFFile/structs and pwntools ctypes.
2
+
3
+ No Corefile-selected thread, executable guessing, process lookup or target launch.
4
+ """
5
+ import base64
6
+ import ctypes
7
+ import importlib.metadata
8
+ import io
9
+ from pathlib import Path
10
+ import sys
11
+
12
+ PROFILE = "pwntools@4.15.0;pyelftools@0.33;unicorn@2.1.2"
13
+
14
+
15
+ class CoreFailure(Exception):
16
+ def __init__(self, reason, message):
17
+ super().__init__(message)
18
+ self.reason = reason
19
+
20
+
21
+ def encoded(value):
22
+ return base64.b64encode(value).decode("ascii")
23
+
24
+
25
+ def location(offset, size, limit):
26
+ if not 0 <= offset <= limit or not 0 <= size <= limit - offset:
27
+ raise CoreFailure("format", "Recorded source range exceeds its declared container.")
28
+ return {"offset": hex(offset), "bytes": hex(size)}
29
+
30
+
31
+ def inspect_core(path, cache):
32
+ for package, required in {"pwntools": "4.15.0", "pyelftools": "0.33", "unicorn": "2.1.2"}.items():
33
+ try:
34
+ actual = importlib.metadata.version(package)
35
+ except importlib.metadata.PackageNotFoundError as error:
36
+ raise CoreFailure("unavailable", "Selected Python lacks " + package + " " + required + ".") from error
37
+ if actual != required:
38
+ raise CoreFailure("unsupported", "Expected " + package + " " + required + "; selected Python reports " + actual + ".")
39
+ content = path.read_bytes()
40
+ if len(content) < 16 or content[:4] != b"\x7fELF":
41
+ raise CoreFailure("format", "Selected recording lacks a complete ELF identification.")
42
+ if content[4:6] != b"\x02\x01":
43
+ raise CoreFailure("unsupported-target", "Initial recorded-core profile requires ELF64 little-endian.")
44
+ if len(content) < 64:
45
+ raise CoreFailure("format", "Selected ELF64 core header is truncated.")
46
+ # Linux commonly emits ELFOSABI_NONE (0), also accepted as GNU/Linux (3).
47
+ # Other declared OSABIs must never select Linux note ctypes.
48
+ if content[7] not in (0, 3) or content[8] != 0:
49
+ raise CoreFailure("unsupported-target", "Initial recorded-core profile requires System V or GNU/Linux OSABI with ABI version zero; selected OSABI=" + str(content[7]) + ", ABI version=" + str(content[8]) + ".")
50
+ if int.from_bytes(content[16:18], "little") != 4 or int.from_bytes(content[18:20], "little") != 62:
51
+ raise CoreFailure("unsupported-target", "Initial recorded-core profile requires x86-64 ET_CORE.")
52
+ from elftools.common.exceptions import ELFError
53
+ from elftools.common.utils import struct_parse
54
+ from elftools.elf.elffile import ELFFile
55
+ from pwnlib.elf.datatypes import elf_prstatus_amd64, elf_siginfo_64, user_regs_struct_amd64
56
+ try:
57
+ image = ELFFile(io.BytesIO(content))
58
+ header = image.header
59
+ count = image.num_segments()
60
+ if count and header.e_phentsize < image.structs.Elf_Phdr.sizeof():
61
+ raise CoreFailure("format", "Program-header entry is shorter than the required ELF64 structure.")
62
+ location(header.e_phoff, count * header.e_phentsize, len(content))
63
+ segments, notes, padding, threads, signals = [], [], [], [], []
64
+ for segment_index, segment in enumerate(image.iter_segments()):
65
+ h = segment.header
66
+ backing = h.p_type != "PT_NULL" and h.p_filesz > 0
67
+ if backing:
68
+ location(h.p_offset, h.p_filesz, len(content))
69
+ if h.p_type == "PT_LOAD" and h.p_filesz > h.p_memsz:
70
+ raise CoreFailure("format", "Recorded PT_LOAD file bytes exceed memory size.")
71
+ segments.append({"index": segment_index, "type": h.p_type,
72
+ "header_location": location(header.e_phoff + segment_index * header.e_phentsize, header.e_phentsize, len(content)),
73
+ "offset": hex(h.p_offset), "file_size": hex(h.p_filesz), "memory_size": hex(h.p_memsz),
74
+ "virtual_address": hex(h.p_vaddr), "physical_address": hex(h.p_paddr), "alignment": hex(h.p_align), "flags": hex(h.p_flags), "file_backing": "file" if backing else "none"})
75
+ if h.p_type != "PT_NOTE" or h.p_filesz == 0:
76
+ continue
77
+ position, end = h.p_offset, h.p_offset + h.p_filesz
78
+ header_size = image.structs.Elf_Nhdr.sizeof()
79
+ while position < end:
80
+ if end - position < header_size:
81
+ raw = content[position:end]
82
+ if any(raw):
83
+ raise CoreFailure("format", "Nonzero trailing note bytes lack a complete note header.")
84
+ padding.append({"segment_index": segment_index, "location": location(position, len(raw), end), "bytes_base64": encoded(raw)})
85
+ break
86
+ note = struct_parse(image.structs.Elf_Nhdr, image.stream, stream_pos=position)
87
+ owner_start = position + header_size
88
+ descriptor_start = owner_start + ((note.n_namesz + 3) // 4) * 4
89
+ note_end = descriptor_start + ((note.n_descsz + 3) // 4) * 4
90
+ location(position, note_end - position, end)
91
+ owner = content[owner_start:owner_start + note.n_namesz]
92
+ if owner and b"\0" not in owner:
93
+ raise CoreFailure("format", "Declared note owner has no NUL terminator.")
94
+ display = owner.split(b"\0", 1)[0].decode("utf-8", "replace") if owner else None
95
+ descriptor = content[descriptor_start:descriptor_start + note.n_descsz]
96
+ note_index = len(notes)
97
+ notes.append({"index": note_index, "segment_index": segment_index, "type": note.n_type,
98
+ "location": location(position, note_end - position, end),
99
+ "owner_location": location(owner_start, len(owner), end), "owner_bytes_base64": encoded(owner), "owner_display": display,
100
+ "descriptor_location": location(descriptor_start, len(descriptor), end), "descriptor_bytes_base64": encoded(descriptor)})
101
+ position = note_end
102
+ # Only the initial Linux CORE ABI is interpreted. Other owners retain exact bytes.
103
+ if owner != b"CORE\0":
104
+ continue
105
+ if note.n_type == "NT_PRSTATUS":
106
+ if len(descriptor) < ctypes.sizeof(elf_prstatus_amd64):
107
+ raise CoreFailure("format", "Linux amd64 NT_PRSTATUS descriptor is truncated.")
108
+ status = elf_prstatus_amd64.from_buffer_copy(descriptor)
109
+ registers = []
110
+ for name, kind in user_regs_struct_amd64._fields_:
111
+ relative = elf_prstatus_amd64.pr_reg.offset + getattr(user_regs_struct_amd64, name).offset
112
+ registers.append({"name": name, "value": hex(getattr(status.pr_reg, name)), "location": location(descriptor_start + relative, ctypes.sizeof(kind), end)})
113
+ threads.append({"note_index": note_index, "historical_pid": ctypes.c_int32(status.pr_pid).value, "recorded_current_signal": status.pr_cursig, "registers": registers})
114
+ elif note.n_type == "NT_SIGINFO":
115
+ if len(descriptor) < ctypes.sizeof(elf_siginfo_64):
116
+ raise CoreFailure("format", "Linux amd64 NT_SIGINFO descriptor is truncated.")
117
+ signal = elf_siginfo_64.from_buffer_copy(descriptor)
118
+ number = ctypes.c_int32(signal.si_signo).value
119
+ code = ctypes.c_int32(signal.si_code).value
120
+ known = number == 11 and code in (1, 2)
121
+ signals.append({"note_index": note_index, "number": number, "code": code, "errno": ctypes.c_int32(signal.si_errno).value,
122
+ "fault_address": hex(signal.sigfault_addr) if known else None,
123
+ "fault_address_meaning": "recorded-sigsegv-address" if known else "unknown", "thread_association": "unknown"})
124
+ return {"format": "elf-core", "architecture": "x86_64-little-endian", "target_execution": "not-performed", "live_process_identity": "unknown",
125
+ "segments": segments, "notes": notes, "note_padding": padding, "threads": threads, "signals": signals,
126
+ "note_interpretation_completeness": "unknown",
127
+ "limitations": ["The initial Linux note profile accepts System V/unspecified or GNU/Linux OSABI with ABI version zero; an unspecified OSABI alone does not prove operating-system origin.",
128
+ "Historical PID and signal values are recorded metadata, not current process identity or attach authority.",
129
+ "Only exact Linux CORE NT_PRSTATUS/NT_SIGINFO owners are interpreted; every descriptor and owner retains original bytes. Other note semantics remain unknown.",
130
+ "NT_SIGINFO thread association is unknown. Only SIGSEGV SEGV_MAPERR/SEGV_ACCERR initially establish a fault-address union meaning.",
131
+ "PT_LOAD file bytes are recorded bytes. Undumped memory and current executable/library identity remain unknown; no current host file is resolved from a recorded pathname.",
132
+ "Missing notes/registers/signals do not establish their absence at the original crash. Full unwinding, executable pairing and live control are not provided."]}
133
+ except CoreFailure:
134
+ raise
135
+ except (ELFError, ValueError, AssertionError, IndexError) as error:
136
+ raise CoreFailure("format", "Recorded core failed unchanged upstream structural parsing: " + str(error)) from error
137
+
138
+
139
+ if __name__ == "__main__":
140
+ runtime_path = Path(__file__).with_name("decoder_runtime.py")
141
+ runtime = {"__file__": str(runtime_path), "__name__": "rea_decoder_runtime"}
142
+ exec(compile(runtime_path.read_bytes(), str(runtime_path), "exec"), runtime)
143
+ runtime["main"](sys.argv[-1], inspect_core, CoreFailure, PROFILE)
@@ -2,7 +2,7 @@ import { constants, createReadStream } from "node:fs";
2
2
  import { chmod, copyFile } from "node:fs/promises";
3
3
  import { createHash } from "node:crypto";
4
4
  import { join } from "node:path";
5
- import { AnalysisInputError } from "../domain/analysisErrorCore.js";
5
+ import { AnalysisInputError, AnalysisCapabilityUnavailableError, } from "../domain/analysisErrorCore.js";
6
6
  /** Stream a local file digest without retaining the APK or JAR in memory. */
7
7
  export const hashAndroidFile = async (path) => {
8
8
  const hash = createHash("sha256");
@@ -26,9 +26,11 @@ export const snapshotAndroidTarget = async (path, sha256, root, operation) => {
26
26
  return snapshot;
27
27
  };
28
28
  /** Fingerprint the actual immutable engine bytes executed for this observation. */
29
- export const snapshotAndroidEngine = async (source, root) => {
29
+ export const snapshotAndroidEngine = async (source, sha256, root, operation) => {
30
30
  const path = join(root, "engine.jar");
31
31
  await copyFile(source, path, constants.COPYFILE_EXCL);
32
32
  await chmod(path, 0o400);
33
- return { path, sha256: await hashAndroidFile(path) };
33
+ if ((await hashAndroidFile(path)) !== sha256)
34
+ throw new AnalysisCapabilityUnavailableError("jadx", operation, "REA_JADX_MCP_JAR bytes changed during admission; retry with a stable engine file.");
35
+ return { path, sha256 };
34
36
  };
@@ -1,6 +1,7 @@
1
- import { androidResultSchemas } from "../domain/androidAnalysis.js";
1
+ import { androidResultSchemas } from "../domain/android/androidAnalysis.js";
2
2
  import { AnalysisCapabilityUnavailableError, AnalysisInputError, AnalysisOutputError, } from "../domain/analysisErrorCore.js";
3
3
  import { jadxAppSchema, jadxClassPageSchema, jadxClassSchema, jadxLoadSchema, jadxMethodSchema, jadxXrefsSchema, normalizeJadxText, } from "./JadxProtocol.js";
4
+ import { JADX_RELEASE } from "./JadxRelease.js";
4
5
  const methodsOf = (summary) => {
5
6
  const seen = new Map();
6
7
  return summary.methods.map((method) => {
@@ -60,16 +61,17 @@ const inspectPackage = async (tools, loaded, engine) => {
60
61
  };
61
62
  const searchClasses = async (tools, request, loaded, engine) => {
62
63
  const classes = [];
64
+ const pageSize = 4096;
63
65
  let total;
64
66
  do {
65
67
  const page = jadxClassPageSchema.parse(await tools.json("list_classes", {
66
68
  offset: classes.length,
67
- limit: 200,
69
+ limit: pageSize,
68
70
  }));
69
71
  if ((total !== undefined && total !== page.total) ||
70
72
  page.offset !== classes.length ||
71
- page.limit !== 200 ||
72
- page.items.length > 200)
73
+ page.limit !== pageSize ||
74
+ page.items.length > pageSize)
73
75
  throw new AnalysisOutputError(request.operation, "JADX class pagination changed identity or counts");
74
76
  total = page.total;
75
77
  classes.push(...page.items);
@@ -115,7 +117,7 @@ const inspectMethod = async (tools, request, summary, engine) => {
115
117
  if (body.body.startsWith("// ERROR:"))
116
118
  throw new AnalysisOutputError(request.operation, `JADX did not produce method source: ${body.body}`);
117
119
  if (body.mode === "smali" && candidates.length > 1)
118
- throw new AnalysisCapabilityUnavailableError("jadx", request.operation, `JADX 0.7.1 smali fallback joins all same-name overloads for ${summary.full_name}.${request.input.method_name}; it cannot establish source for only overload ${index}.`);
120
+ throw new AnalysisCapabilityUnavailableError("jadx", request.operation, `JADX ${JADX_RELEASE.version} smali fallback joins all same-name overloads for ${summary.full_name}.${request.input.method_name}; it cannot establish source for only overload ${index}.`);
119
121
  return androidResultSchemas.inspect_android_method.parse({
120
122
  engine,
121
123
  class_name: summary.full_name,
@@ -158,7 +160,7 @@ const traceReferences = async (tools, request, summary, engine) => {
158
160
  const methodName = request.input.method_name;
159
161
  const candidates = matchingMethods(summary, request);
160
162
  if (candidates.length > 1)
161
- throw new AnalysisCapabilityUnavailableError("jadx", request.operation, `JADX 0.7.1 references select the first same-name method; ${summary.full_name}.${methodName} has ${candidates.length} overloads. No unambiguous reference result is available.`);
163
+ throw new AnalysisCapabilityUnavailableError("jadx", request.operation, `References require a unique method name; ${summary.full_name}.${methodName} has ${candidates.length} overloads. No unambiguous reference result is available.`);
162
164
  const expectedTarget = methodName === undefined
163
165
  ? summary.full_name
164
166
  : `${summary.full_name}.${methodName}`;
@@ -2,16 +2,17 @@ import { access, realpath, stat } from "node:fs/promises";
2
2
  import { constants } from "node:fs";
3
3
  import { isAbsolute, join } from "node:path";
4
4
  import { AnalysisCapabilityUnavailableError } from "../domain/analysisErrorCore.js";
5
+ import { JADX_JAR_CONFIGURATION_REMEDIATION } from "./JadxRelease.js";
5
6
  /** Admit explicit local tooling without installing or changing host configuration. */
6
7
  export const resolveJadxConfiguration = async (environment, operation) => {
7
8
  const unavailable = (reason) => new AnalysisCapabilityUnavailableError("jadx", operation, reason);
8
9
  if (process.platform !== "linux" && process.platform !== "darwin")
9
- throw unavailable(`Android JADX subprocess ownership is unsupported on ${process.platform}; use Linux or macOS. Only Linux has real-provider verification.`);
10
+ throw unavailable(`Android JADX subprocess ownership is unsupported on ${process.platform}; use Linux or macOS. The metadata bridge has real-provider verification on macOS arm64.`);
10
11
  const jar = environment.REA_JADX_MCP_JAR;
11
12
  if (environment.JAVA_HOME !== undefined && !isAbsolute(environment.JAVA_HOME))
12
13
  throw unavailable("JAVA_HOME must select an existing JDK by absolute path; omit it to use java on PATH.");
13
14
  if (jar === undefined || !isAbsolute(jar))
14
- throw unavailable("Set REA_JADX_MCP_JAR to the absolute path of a caller-supplied jadx-headless-mcp 0.7.1 JAR. REA does not download or install it.");
15
+ throw unavailable(JADX_JAR_CONFIGURATION_REMEDIATION);
15
16
  const java = environment.JAVA_HOME === undefined
16
17
  ? "java"
17
18
  : join(environment.JAVA_HOME, "bin", "java");
@@ -37,5 +38,20 @@ export const resolveJadxConfiguration = async (environment, operation) => {
37
38
  throw unavailable(`Cannot execute JAVA_HOME java ${java}: ${cause instanceof Error ? cause.message : String(cause)}`);
38
39
  }
39
40
  }
40
- return { jar: await realpath(jar), java };
41
+ const jvmArguments = [];
42
+ for (const [name, prefix, suffix] of [
43
+ ["REA_JADX_HEAP_MIB", "-Xmx", "m"],
44
+ ["REA_JADX_ACTIVE_PROCESSOR_COUNT", "-XX:ActiveProcessorCount=", ""],
45
+ ]) {
46
+ const value = environment[name];
47
+ if (value === undefined)
48
+ continue;
49
+ if (!/^[1-9]\d*$/u.test(value) || !Number.isSafeInteger(Number(value)))
50
+ throw unavailable(`${name} must be a positive safe integer; received ${value}.`);
51
+ if (name === "REA_JADX_ACTIVE_PROCESSOR_COUNT" &&
52
+ Number(value) > 2_147_483_647)
53
+ throw unavailable(`${name} exceeds the JVM's signed 32-bit processor-count range.`);
54
+ jvmArguments.push(`${prefix}${value}${suffix}`);
55
+ }
56
+ return { jar: await realpath(jar), java, jvmArguments };
41
57
  };
@@ -4,7 +4,7 @@ import { ProviderProcessSupervisor, spawnOwnedProviderProcess, } from "../proces
4
4
  import { cleanupOwnedProcessGroup } from "../process/ProcessOwnership.js";
5
5
  import { ProviderCleanupError } from "../domain/providerCleanupError.js";
6
6
  const MAX_FRAME_BYTES = 8 * 1024 * 1024;
7
- const MAX_SESSION_BYTES = 32 * 1024 * 1024;
7
+ const MAX_OPERATION_BYTES = 32 * 1024 * 1024;
8
8
  /** SDK-framed stdio with REA-owned process cleanup rather than an unowned child. */
9
9
  export class JadxMcpTransport {
10
10
  options;
@@ -15,7 +15,8 @@ export class JadxMcpTransport {
15
15
  runId = randomUUID();
16
16
  #spawned;
17
17
  #supervisor;
18
- #buffer = Buffer.alloc(0);
18
+ #frameBuffer = Buffer.alloc(0);
19
+ #frameLength = 0;
19
20
  #bytes = 0;
20
21
  #started = false;
21
22
  #closed = false;
@@ -44,8 +45,9 @@ export class JadxMcpTransport {
44
45
  this.#supervisor = new ProviderProcessSupervisor({
45
46
  ...spawned,
46
47
  ownsProcessLifetime: true,
47
- cleanup: spawned.cleanup ?? (() => cleanupOwnedProcessGroup(spawned.ownership)),
48
- });
48
+ cleanup: spawned.cleanup ??
49
+ (() => cleanupOwnedProcessGroup(spawned.ownership)),
50
+ }, { captureStdout: false });
49
51
  if (spawned.process.stdin === undefined ||
50
52
  spawned.process.stdin === null ||
51
53
  spawned.process.stdout === null)
@@ -80,8 +82,15 @@ export class JadxMcpTransport {
80
82
  failureReason() {
81
83
  return this.#failure;
82
84
  }
85
+ /** Scope both the byte budget and diagnostic retention to the next serialized request. */
86
+ beginOperation() {
87
+ this.#bytes = 0;
88
+ this.#supervisor?.resetOutput();
89
+ }
83
90
  async #stop() {
84
91
  this.#closed = true;
92
+ this.#frameBuffer = Buffer.alloc(0);
93
+ this.#frameLength = 0;
85
94
  // A cancellation may race acquisition. Join it before inspecting ownership.
86
95
  await this.#starting?.catch(() => undefined);
87
96
  const process = this.#spawned?.process;
@@ -106,35 +115,53 @@ export class JadxMcpTransport {
106
115
  };
107
116
  #countStderr = (chunk) => {
108
117
  this.#bytes += Buffer.byteLength(chunk);
109
- if (this.#bytes > MAX_SESSION_BYTES)
110
- this.#fail(new Error(`JADX session output exceeds ${MAX_SESSION_BYTES} bytes; no complete result is available`));
118
+ if (this.#bytes > MAX_OPERATION_BYTES)
119
+ this.#fail(new Error(`JADX operation output exceeds ${MAX_OPERATION_BYTES} bytes; no complete result is available`));
111
120
  };
112
121
  #read = (chunk) => {
113
122
  if (this.#closed)
114
123
  return;
115
124
  const bytes = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
116
125
  this.#bytes += bytes.length;
117
- if (this.#bytes > MAX_SESSION_BYTES) {
118
- this.#fail(new Error(`JADX session output exceeds ${MAX_SESSION_BYTES} bytes; no complete result is available`));
126
+ if (this.#bytes > MAX_OPERATION_BYTES) {
127
+ this.#fail(new Error(`JADX operation output exceeds ${MAX_OPERATION_BYTES} bytes; no complete result is available`));
119
128
  return;
120
129
  }
121
- this.#buffer = Buffer.concat([this.#buffer, bytes]);
122
130
  try {
123
- let newline;
124
- while ((newline = this.#buffer.indexOf(10)) !== -1) {
125
- if (newline > MAX_FRAME_BYTES)
131
+ let offset = 0;
132
+ while (offset < bytes.length) {
133
+ const newline = bytes.indexOf(10, offset);
134
+ const end = newline === -1 ? bytes.length : newline;
135
+ const fragment = bytes.subarray(offset, end);
136
+ const frameBytes = this.#frameLength + fragment.length;
137
+ if (frameBytes > MAX_FRAME_BYTES)
126
138
  throw new Error(`JADX MCP frame exceeds ${MAX_FRAME_BYTES} bytes`);
127
- const line = this.#buffer.subarray(0, newline).toString("utf8");
128
- this.#buffer = this.#buffer.subarray(newline + 1);
139
+ this.#appendFrame(fragment, frameBytes);
140
+ if (newline === -1)
141
+ return;
142
+ const line = this.#frameBuffer
143
+ .subarray(0, this.#frameLength)
144
+ .toString("utf8");
145
+ this.#frameBuffer = Buffer.alloc(0);
146
+ this.#frameLength = 0;
129
147
  this.onmessage?.(deserializeMessage(line));
148
+ offset = newline + 1;
130
149
  }
131
- if (this.#buffer.length > MAX_FRAME_BYTES)
132
- throw new Error(`JADX MCP frame exceeds ${MAX_FRAME_BYTES} bytes`);
133
150
  }
134
151
  catch (cause) {
135
152
  this.#fail(cause instanceof Error ? cause : new Error(String(cause)));
136
153
  }
137
154
  };
155
+ #appendFrame(fragment, frameBytes) {
156
+ if (frameBytes > this.#frameBuffer.length) {
157
+ const capacity = Math.min(MAX_FRAME_BYTES, Math.max(frameBytes, this.#frameBuffer.length * 2, 1));
158
+ const grown = Buffer.allocUnsafe(capacity);
159
+ this.#frameBuffer.copy(grown, 0, 0, this.#frameLength);
160
+ this.#frameBuffer = grown;
161
+ }
162
+ fragment.copy(this.#frameBuffer, this.#frameLength);
163
+ this.#frameLength = frameBytes;
164
+ }
138
165
  #fail(error) {
139
166
  this.#failure ??= error.message;
140
167
  this.onerror?.(error);
@@ -2,6 +2,14 @@ import { z } from "zod";
2
2
  import { AnalysisOutputError } from "../domain/analysisErrorCore.js";
3
3
  import { jsonValueSchema } from "../domain/jsonValue.js";
4
4
  const count = z.number().int().nonnegative();
5
+ /** Values observed inside the exact JVM producing the analysis. */
6
+ export const jadxRuntimeSchema = z.object({
7
+ engine_reported_version: z.string().min(1),
8
+ max_heap_bytes: z.number().int().positive().safe(),
9
+ available_processors: z.number().int().positive(),
10
+ java_version: z.string().min(1),
11
+ metadata_scope: z.literal("parsed_members"),
12
+ });
5
13
  export const jadxLoadSchema = z.object({
6
14
  state: z.literal("LOADED"),
7
15
  apk_path: z.string(),
@@ -1,14 +1,18 @@
1
1
  import { z } from "zod";
2
+ import { chmod, copyFile } from "node:fs/promises";
3
+ import { join } from "node:path";
4
+ import { fileURLToPath } from "node:url";
2
5
  import { AnalysisError } from "../domain/analysisErrorBase.js";
3
- import { AnalysisCancelledError, AnalysisCapabilityUnavailableError, AnalysisOutputError, AnalysisTimeoutError, } from "../domain/analysisErrorCore.js";
6
+ import { AnalysisCancelledError, AnalysisCapabilityUnavailableError, AnalysisOutputError, AnalysisInputError, AnalysisTimeoutError, } from "../domain/analysisErrorCore.js";
4
7
  import { ProviderAdapterError } from "../domain/providerAdapterError.js";
5
8
  import { ProviderCleanupError } from "../domain/providerCleanupError.js";
6
9
  import { err, ok } from "../domain/result.js";
7
10
  import { PrivateRuntimeRoot } from "../process/PrivateRuntimeRoot.js";
8
- import { snapshotAndroidEngine, snapshotAndroidTarget, } from "./AndroidTargetSnapshot.js";
11
+ import { snapshotAndroidEngine, hashAndroidFile, snapshotAndroidTarget, } from "./AndroidTargetSnapshot.js";
9
12
  import { resolveJadxConfiguration } from "./JadxConfiguration.js";
10
13
  import { JadxSession } from "./JadxSession.js";
11
14
  const OPERATION_TIMEOUT_MS = 120_000;
15
+ const BRIDGE_SOURCE = fileURLToPath(new URL("../../bridge/android/ReaJadxBridge.java", import.meta.url));
12
16
  const waitForTurn = (predecessor, request, signal) => new Promise((resolve, reject) => {
13
17
  const abort = () => reject(new AnalysisCancelledError(request.operation));
14
18
  signal?.addEventListener("abort", abort, { once: true });
@@ -75,44 +79,81 @@ const cleanup = async (session, root, previous) => {
75
79
  }
76
80
  return previous;
77
81
  };
78
- /** One queued engine per REA instance, with a fresh owned workspace for every request. */
82
+ /** One serialized, immutable APK session per REA instance, retired on idle or shutdown. */
79
83
  export class JadxProvider {
80
84
  environment;
81
85
  launcher;
82
86
  #tail = Promise.resolve();
83
87
  #cleanupFailure;
88
+ #retained;
89
+ #idle;
90
+ #shutdown = new AbortController();
91
+ #closePromise;
84
92
  constructor(environment = process.env, launcher) {
85
93
  this.environment = environment;
86
94
  this.launcher = launcher;
87
95
  }
88
96
  /** Serialize expensive work and bind both raw and normalized results to the APK. */
89
97
  async execute(target, request, options) {
98
+ if (this.#shutdown.signal.aborted)
99
+ return err(new AnalysisCancelledError(request.operation));
100
+ const signal = options?.signal === undefined
101
+ ? this.#shutdown.signal
102
+ : AbortSignal.any([options.signal, this.#shutdown.signal]);
90
103
  const predecessor = this.#tail;
91
104
  let release = () => { };
92
105
  this.#tail = new Promise((resolve) => {
93
106
  release = resolve;
94
107
  });
95
108
  try {
96
- await waitForTurn(predecessor, request, options?.signal);
109
+ await waitForTurn(predecessor, request, signal);
97
110
  }
98
111
  catch {
99
112
  void predecessor.then(release);
100
113
  return err(new AnalysisCancelledError(request.operation));
101
114
  }
102
115
  try {
103
- if (options?.signal?.aborted === true)
116
+ if (signal.aborted)
104
117
  return err(new AnalysisCancelledError(request.operation));
105
118
  if (this.#cleanupFailure !== undefined)
106
119
  return err(this.#cleanupFailure);
107
- const outcome = await this.#execute(target, request, options);
120
+ clearTimeout(this.#idle);
121
+ const outcome = await this.#execute(target, request, { signal });
108
122
  if (!outcome.ok && outcome.error.cleanupIncomplete)
109
123
  this.#cleanupFailure = outcome.error;
124
+ if (outcome.ok)
125
+ this.#scheduleIdle();
110
126
  return outcome;
111
127
  }
112
128
  finally {
113
129
  release();
114
130
  }
115
131
  }
132
+ /** Cancel queued/active operations and join the owned engine and workspace cleanup. */
133
+ close() {
134
+ this.#shutdown.abort();
135
+ clearTimeout(this.#idle);
136
+ this.#closePromise ??= this.#tail.then(() => this.#retire());
137
+ return this.#closePromise;
138
+ }
139
+ async #retire() {
140
+ if (this.#cleanupFailure !== undefined)
141
+ throw this.#cleanupFailure;
142
+ const retained = this.#retained;
143
+ this.#retained = undefined;
144
+ const result = await cleanup(retained?.session, retained?.root, ok(undefined));
145
+ if (!result.ok) {
146
+ this.#cleanupFailure = result.error;
147
+ throw result.error;
148
+ }
149
+ }
150
+ #scheduleIdle() {
151
+ this.#idle = setTimeout(() => {
152
+ const retirement = this.#tail.then(() => this.#retire());
153
+ this.#tail = retirement.catch(() => undefined);
154
+ }, 60_000);
155
+ this.#idle.unref();
156
+ }
116
157
  async #execute(target, request, options) {
117
158
  const timeout = AbortSignal.timeout(OPERATION_TIMEOUT_MS);
118
159
  const signal = options?.signal === undefined
@@ -126,35 +167,80 @@ export class JadxProvider {
126
167
  throw new AnalysisCapabilityUnavailableError("jadx", request.operation, `Target ${target.path} is ${target.format}; provide one standalone APK.`);
127
168
  const configuration = await resolveJadxConfiguration(this.environment, request.operation);
128
169
  signal.throwIfAborted();
129
- root = await PrivateRuntimeRoot.create({ prefix: "rea-android-" });
130
- const engine = await snapshotAndroidEngine(configuration.jar, root.path);
131
- const snapshot = await snapshotAndroidTarget(target.path, target.sha256, root.path, request.operation);
132
- signal.throwIfAborted();
133
- session = new JadxSession({
134
- command: configuration.java,
135
- arguments: [
136
- "-Xmx512m",
137
- "-XX:ActiveProcessorCount=1",
138
- "-jar",
139
- engine.path,
140
- "--threads",
141
- "1",
142
- "--max-source-bytes",
143
- "1048576",
144
- "--decompile-timeout-ms",
145
- "90000",
170
+ const jarHash = await hashAndroidFile(configuration.jar);
171
+ const bridgeHash = await hashAndroidFile(BRIDGE_SOURCE);
172
+ if ((await hashAndroidFile(target.path)) !== target.sha256)
173
+ throw new AnalysisInputError(request.operation, undefined, [
174
+ {
175
+ path: ["path"],
176
+ reason: "invalid_value",
177
+ message: "APK bytes changed after admission; retry against a stable file.",
178
+ },
179
+ ]);
180
+ const key = JSON.stringify({
181
+ path: target.path,
182
+ sha256: target.sha256,
183
+ jar: configuration.jar,
184
+ jarHash,
185
+ bridgeHash,
186
+ java: configuration.java,
187
+ arguments: configuration.jvmArguments,
188
+ options: [
189
+ this.environment.JAVA_TOOL_OPTIONS,
190
+ this.environment._JAVA_OPTIONS,
191
+ this.environment.JDK_JAVA_OPTIONS,
192
+ this.environment.PATH,
193
+ this.environment.JAVA_HOME,
146
194
  ],
147
- cwd: root.path,
148
- hostEnvironment: this.environment,
149
- env: { _JAVA_OPTIONS: "-Xmx512m -XX:ActiveProcessorCount=1" },
150
- }, this.launcher);
195
+ });
196
+ if (this.#retained !== undefined && this.#retained.key !== key)
197
+ await this.#retire();
198
+ let retained = this.#retained;
199
+ if (retained === undefined) {
200
+ root = await PrivateRuntimeRoot.create({ prefix: "rea-android-" });
201
+ const engine = await snapshotAndroidEngine(configuration.jar, jarHash, root.path, request.operation);
202
+ const snapshot = await snapshotAndroidTarget(target.path, target.sha256, root.path, request.operation);
203
+ const bridge = join(root.path, "ReaJadxBridge.java");
204
+ await copyFile(BRIDGE_SOURCE, bridge);
205
+ await chmod(bridge, 0o400);
206
+ if ((await hashAndroidFile(bridge)) !== bridgeHash)
207
+ throw new AnalysisCapabilityUnavailableError("jadx", request.operation, "REA Android bridge bytes changed during admission; retry with a stable installation.");
208
+ signal.throwIfAborted();
209
+ session = new JadxSession({
210
+ command: configuration.java,
211
+ arguments: [
212
+ ...configuration.jvmArguments,
213
+ "--class-path",
214
+ engine.path,
215
+ bridge,
216
+ ],
217
+ cwd: root.path,
218
+ hostEnvironment: this.environment,
219
+ signal,
220
+ }, this.launcher);
221
+ retained = {
222
+ key,
223
+ root,
224
+ session,
225
+ snapshot,
226
+ jarHash: engine.sha256,
227
+ bridgeHash,
228
+ };
229
+ }
230
+ root = retained.root;
231
+ session = retained.session;
232
+ const { snapshot } = retained;
151
233
  outcome = ok(await session.execute({
152
234
  request,
153
235
  target,
154
236
  snapshot,
155
- jarHash: engine.sha256,
237
+ jarHash: retained.jarHash,
238
+ bridgeHash: retained.bridgeHash,
156
239
  signal,
157
240
  }));
241
+ signal.throwIfAborted();
242
+ this.#retained = retained;
243
+ return outcome;
158
244
  }
159
245
  catch (cause) {
160
246
  outcome = err(executionError({
@@ -165,6 +251,10 @@ export class JadxProvider {
165
251
  session,
166
252
  }));
167
253
  }
254
+ // An existing session also needs retirement when admission fails before selection.
255
+ root ??= this.#retained?.root;
256
+ session ??= this.#retained?.session;
257
+ this.#retained = undefined;
168
258
  return cleanup(session, root, outcome);
169
259
  }
170
260
  }
@@ -5,6 +5,13 @@ export const JADX_RELEASE = Object.freeze({
5
5
  sha256: "6e5eacf500b64292bfb73c49797c1958f6ee44646e43e868039ae7feb573ff75",
6
6
  url: "https://github.com/1013503897/jadx-headless-mcp/releases/download/v0.7.1/jadx-headless-mcp-0.7.1-all.jar",
7
7
  });
8
+ /** Identity of REA's metadata bridge, distinct from the producing engine. */
9
+ export const JADX_BRIDGE_IDENTITY = Object.freeze({
10
+ name: "rea-jadx-bridge",
11
+ version: "1",
12
+ });
13
+ /** Remediation when `REA_JADX_MCP_JAR` is missing or not an absolute path. */
14
+ export const JADX_JAR_CONFIGURATION_REMEDIATION = `Set REA_JADX_MCP_JAR to the absolute path of a caller-supplied jadx-headless-mcp ${JADX_RELEASE.version} JAR. REA does not download or install it.`;
8
15
  /** Producing engine identity used by Evidence and the generated product catalog. */
9
16
  export const JADX_PROVIDER_IDENTITY = Object.freeze({
10
17
  id: "jadx",
@@ -15,5 +22,6 @@ export const JADX_PROVIDER_IDENTITY = Object.freeze({
15
22
  export const JADX_LIMITATIONS = [
16
23
  "Static decompiler observations do not establish runtime behavior; the APK is never executed.",
17
24
  "Method signatures use provider display types; exact DEX descriptors and instruction offsets are unavailable. Overload indices are local to this engine and artifact.",
25
+ "Class inventories use parsed metadata before code generation, including synthetic members that may be omitted from decompiled source. Source positions remain unknown.",
18
26
  "Manifest summary fields are extracted by the upstream engine; decoded XML is retained for verification. APK signatures, split APKs, native libraries and Android runtime capture are not verified by this provider.",
19
27
  ];