rea-agents 4.0.0 → 4.1.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 (416) hide show
  1. package/README.md +93 -30
  2. package/bridge/ghidra/ReaGhidraBridge.java +358 -15
  3. package/bridge/ghidra/ReaGhidraExtensions.java +113 -0
  4. package/bridge/ghidra/ReaGhidraPrepareCom.java +32 -0
  5. package/dist/android/AndroidTargetSnapshot.js +34 -0
  6. package/dist/android/JadxAnalysis.js +191 -0
  7. package/dist/android/JadxConfiguration.js +41 -0
  8. package/dist/android/JadxMcpTransport.js +145 -0
  9. package/dist/android/JadxProtocol.js +101 -0
  10. package/dist/android/JadxProvider.js +170 -0
  11. package/dist/android/JadxRelease.js +19 -0
  12. package/dist/android/JadxSession.js +97 -0
  13. package/dist/application/AnalysisContextQueries.js +2 -1
  14. package/dist/application/AnalysisProviderEvaluation.js +5 -3
  15. package/dist/application/AnalysisProviderRegistry.js +2 -1
  16. package/dist/application/AnalysisSnapshotCache.js +4 -1
  17. package/dist/application/AnalysisSnapshotFiles.js +1 -1
  18. package/dist/application/AndroidAnalysisPort.js +1 -0
  19. package/dist/application/AndroidAnalysisService.js +37 -0
  20. package/dist/application/ArtifactExtraction.js +7 -4
  21. package/dist/application/ArtifactGraphConstruction.js +10 -17
  22. package/dist/application/ArtifactInventory/scanCanonical.js +8 -7
  23. package/dist/application/BinarySession.js +16 -3
  24. package/dist/application/BinarySessionExecution.js +4 -1
  25. package/dist/application/BinarySessionOpen.js +3 -2
  26. package/dist/application/BinarySessionRecords.js +9 -3
  27. package/dist/application/BinaryTargetResolver.js +25 -6
  28. package/dist/application/BrowserObservationService.js +2 -1
  29. package/dist/application/BrowserScenarioCaptureService.js +2 -1
  30. package/dist/application/BrowserScenarioEvidence.js +2 -2
  31. package/dist/application/CallPathTracing.js +2 -1
  32. package/dist/application/CapabilityInventory.js +18 -0
  33. package/dist/application/ClientConfigPath.js +3 -1
  34. package/dist/application/ClientConfigurationDocument.js +11 -1
  35. package/dist/application/ClientRegistrationStatus.js +8 -1
  36. package/dist/application/CompositeProvider.js +1 -1
  37. package/dist/application/DirectAnalysis.js +23 -7
  38. package/dist/application/DirectAnalysisStatus.js +3 -3
  39. package/dist/application/Doctor.js +48 -8
  40. package/dist/application/DoctorDiagnostics.js +7 -5
  41. package/dist/application/DoctorScope.js +1 -1
  42. package/dist/application/ElectronActiveEvidence.js +2 -2
  43. package/dist/application/ElectronActiveObservationService.js +2 -1
  44. package/dist/application/ElectronBoundaryAnalysis.js +1 -1
  45. package/dist/application/ElectronObservationService.js +2 -1
  46. package/dist/application/EnhancedLiteralTracing.js +2 -1
  47. package/dist/application/EnhancedToolTypes.js +2 -1
  48. package/dist/application/EnhancedTools.js +3 -1
  49. package/dist/application/EvidenceBundleCommands.js +2 -1
  50. package/dist/application/EvidenceBundleFiles.js +1 -1
  51. package/dist/application/EvidenceInputResolver.js +30 -0
  52. package/dist/application/EvidenceLedger.js +2 -1
  53. package/dist/application/FirmwareAnalysisPort.js +1 -0
  54. package/dist/application/FirmwareAnalysisService.js +35 -0
  55. package/dist/application/FunctionAnalysisEvidence.js +32 -0
  56. package/dist/application/InventoryProjectionEvidence.js +2 -1
  57. package/dist/application/JavaScriptApplicationService.js +50 -3
  58. package/dist/application/JavaScriptApplicationWorkflowService.js +2 -1
  59. package/dist/application/JavaScriptArtifactAnalysis.js +4 -2
  60. package/dist/application/JavaScriptArtifactFiles.js +4 -2
  61. package/dist/application/JavaScriptArtifactPathResolution.js +6 -2
  62. package/dist/application/JavaScriptJsonModules.js +3 -2
  63. package/dist/application/JavaScriptModuleRelationships.js +4 -2
  64. package/dist/application/JavaScriptRuntimeObservationService.js +2 -1
  65. package/dist/application/JavaScriptRuntimeReconciliationService.js +2 -1
  66. package/dist/application/JavaScriptSemanticGraphProjection.js +1 -1
  67. package/dist/application/JavaScriptSemanticTraceService.js +2 -1
  68. package/dist/application/JsonFiles.js +1 -1
  69. package/dist/application/LazyAnalysisProvider.js +3 -1
  70. package/dist/application/LinuxHopper.js +12 -4
  71. package/dist/application/MacHopper.js +20 -7
  72. package/dist/application/ManagedApplicationGraphService.js +2 -1
  73. package/dist/application/ManagedMemberComparisonService.js +3 -1
  74. package/dist/application/ManagedNativeVerificationService.js +2 -1
  75. package/dist/application/ManagedReconstructionService.js +2 -1
  76. package/dist/application/NativeCallRoutes.js +1 -1
  77. package/dist/application/NativeDispatchMetadataInspection.js +1 -1
  78. package/dist/application/NativeUiActionTrace.js +2 -1
  79. package/dist/application/NativeValueTrace.js +1 -1
  80. package/dist/application/ProcessCaptureError.js +1 -1
  81. package/dist/application/ProcessCaptureJournal.js +3 -1
  82. package/dist/application/ProcessCaptureLifecycle.js +6 -3
  83. package/dist/application/ProcessCli.js +9 -5
  84. package/dist/application/ProcessEvidence.js +2 -6
  85. package/dist/application/ProcessHarness.js +3 -2
  86. package/dist/application/ProcessNormalization.js +12 -5
  87. package/dist/application/ProcessSampling.js +3 -1
  88. package/dist/application/ReconstructionCoverageService.js +2 -1
  89. package/dist/application/ReconstructionObligationLedgerService.js +2 -1
  90. package/dist/application/ReferenceSourceImportEntries.js +2 -0
  91. package/dist/application/ReferenceSourceImportPolicy.js +4 -2
  92. package/dist/application/ReferenceSourceVcsAdapter.js +35 -4
  93. package/dist/application/SessionProviderRouter.js +4 -1
  94. package/dist/application/Setup.js +1 -128
  95. package/dist/application/SetupClientConfiguration.js +17 -6
  96. package/dist/application/SetupHost.js +111 -0
  97. package/dist/application/SetupRegistrationEnvironment.js +1 -2
  98. package/dist/application/SetupSkill.js +9 -3
  99. package/dist/application/SetupTypes.js +17 -0
  100. package/dist/application/StoreFileLock.js +7 -2
  101. package/dist/application/SupportedClients.js +8 -0
  102. package/dist/application/Uninstall.js +9 -4
  103. package/dist/application/UpdateRuntime.js +5 -2
  104. package/dist/application/WindowsCapabilities.js +7 -7
  105. package/dist/application/runtime.js +3 -1
  106. package/dist/artifacts/ArtifactProvider.js +3 -1
  107. package/dist/artifacts/DirectoryArtifactReader.js +2 -0
  108. package/dist/artifacts/NativeDmgArtifactReader.js +10 -3
  109. package/dist/artifacts/NibArchive.js +4 -2
  110. package/dist/artifacts/SafeOutputTree.js +26 -10
  111. package/dist/artifacts/ZipArtifactReader.js +1 -0
  112. package/dist/browser/BrowserProcessStartup.js +3 -1
  113. package/dist/browser/CdpAuthorizedMainFrame.js +1 -1
  114. package/dist/browser/CdpBrowserProvider.js +4 -1
  115. package/dist/browser/CdpCaptureDocuments.js +3 -1
  116. package/dist/browser/CdpCaptureEventHandlers.js +6 -2
  117. package/dist/browser/CdpCaptureStorageFingerprints.js +1 -1
  118. package/dist/browser/CdpCaptureValues.js +6 -2
  119. package/dist/browser/CdpConnection.js +8 -6
  120. package/dist/browser/CdpElectronInspection.js +3 -3
  121. package/dist/browser/CdpElectronProvider.js +4 -1
  122. package/dist/browser/CdpElectronScripts.js +2 -2
  123. package/dist/browser/CdpEndpoint.js +22 -10
  124. package/dist/browser/CdpObservationSession.js +2 -1
  125. package/dist/browser/CdpOptionalCommand.js +1 -1
  126. package/dist/browser/CdpPageCapture.js +2 -1
  127. package/dist/browser/CdpSafeMetadata.js +53 -8
  128. package/dist/browser/CdpScreenshot.js +1 -1
  129. package/dist/browser/CdpTargetSession.js +8 -5
  130. package/dist/browser/CdpWebMcpDiscovery.js +1 -1
  131. package/dist/browser/ElectronFileScope.js +9 -3
  132. package/dist/browser/JavaScriptRuntimeScope.js +3 -1
  133. package/dist/browser/PlaywrightBrowserScenarioProvider.js +3 -1
  134. package/dist/browser/PlaywrightElectronActiveActions.js +1 -1
  135. package/dist/browser/PlaywrightElectronActiveProvider.js +6 -2
  136. package/dist/browser/PlaywrightExecutionBoundary.js +1 -1
  137. package/dist/browser/PlaywrightScenarioArtifacts.js +10 -5
  138. package/dist/browser/PlaywrightScenarioBrowser.js +3 -1
  139. package/dist/browser/PlaywrightScenarioEvents.js +6 -2
  140. package/dist/browser/PlaywrightScenarioSession.js +5 -2
  141. package/dist/browser/V8InspectorEndpoint.js +2 -1
  142. package/dist/browser/V8InspectorProvider.js +6 -1
  143. package/dist/browser/WebSourceMapFetcher.js +24 -11
  144. package/dist/cli/androidCommands.js +81 -0
  145. package/dist/{cliApplicationCommands.js → cli/applicationCommands.js} +18 -16
  146. package/dist/{cliBrowserAdvancedCommands.js → cli/browserAdvancedCommands.js} +13 -16
  147. package/dist/{cliBrowserCommands.js → cli/browserCommands.js} +9 -9
  148. package/dist/cli/commandCancellation.js +24 -0
  149. package/dist/cli/coreAnalysisCommands.js +110 -17
  150. package/dist/{cliElectronCommands.js → cli/electronCommands.js} +14 -13
  151. package/dist/cli/firmwareCommands.js +75 -0
  152. package/dist/{cliSetup.js → cli/interactiveSetup.js} +1 -1
  153. package/dist/cli/javascriptApplicationAnalysis.js +1 -1
  154. package/dist/cli/managedCommands.js +1 -1
  155. package/dist/cli/managedProjectGraphCommand.js +1 -1
  156. package/dist/cli/options.js +7 -1
  157. package/dist/{cliProcessCommands.js → cli/processCommands.js} +3 -3
  158. package/dist/cli/referenceSourceImportStatus.js +10 -0
  159. package/dist/cli/setupCommands.js +4 -2
  160. package/dist/cli/utilityCommands.js +3 -2
  161. package/dist/cli.js +10 -15
  162. package/dist/cliBrowserContext.js +1 -1
  163. package/dist/cliBrowserScenarioCommands.js +2 -1
  164. package/dist/cliCommandNames.js +11 -2
  165. package/dist/cliEvidenceCommands.js +2 -1
  166. package/dist/cliJavaScriptRuntimeCommands.js +2 -1
  167. package/dist/cliJsonInput.js +26 -11
  168. package/dist/cliLogging.js +2 -1
  169. package/dist/cliOutput.js +15 -16
  170. package/dist/config/environment.js +11 -1
  171. package/dist/config/parseConfig.js +7 -1
  172. package/dist/config/parsers.js +1 -1
  173. package/dist/contracts/androidToolContracts.js +77 -0
  174. package/dist/contracts/applicationToolContracts.js +32 -5
  175. package/dist/contracts/applicationWorkflowInputContracts.js +13 -13
  176. package/dist/contracts/artifactComparisonExample.js +7 -14
  177. package/dist/contracts/enhancedToolContracts.js +31 -0
  178. package/dist/contracts/errorSchemas.js +4 -2
  179. package/dist/contracts/evidenceInputContracts.js +13 -0
  180. package/dist/contracts/firmwareToolContracts.js +38 -0
  181. package/dist/contracts/officialToolContracts.js +66 -0
  182. package/dist/contracts/promptContracts.js +1 -1
  183. package/dist/contracts/sessionLifecycleInputs.js +4 -0
  184. package/dist/contracts/sessionToolContracts.js +43 -0
  185. package/dist/contracts/sessionToolSchemas.js +1 -1
  186. package/dist/contracts/toolContractExamples.js +5 -0
  187. package/dist/contracts/toolContractTypes.js +2 -0
  188. package/dist/contracts/toolContracts.js +7 -130
  189. package/dist/contracts/toolEffects.js +43 -0
  190. package/dist/contracts/toolOutputSchemaGroups.js +4 -0
  191. package/dist/contracts/toolOutputSchemaPrimitives.js +1 -0
  192. package/dist/doctorRuntime.js +5 -1
  193. package/dist/domain/analysisErrorBase.js +33 -0
  194. package/dist/domain/analysisErrorCore.js +60 -0
  195. package/dist/domain/analysisErrorPresentation.js +22 -2
  196. package/dist/domain/analysisErrorProjection.js +24 -3
  197. package/dist/domain/analysisSnapshot.js +1 -0
  198. package/dist/domain/androidAnalysis.js +141 -0
  199. package/dist/domain/appleAssetCatalog.js +1 -1
  200. package/dist/domain/artifactGraph.js +1 -0
  201. package/dist/domain/artifactInspection.js +19 -17
  202. package/dist/domain/artifactInventoryEvidence.js +20 -25
  203. package/dist/domain/artifactOperationError.js +16 -0
  204. package/dist/domain/browserObservation.js +12 -4
  205. package/dist/domain/browserObservationError.js +23 -0
  206. package/dist/domain/browserScenario.js +1 -1
  207. package/dist/domain/browserScenarioCapture.js +1 -1
  208. package/dist/domain/browserScenarioDiff.js +1 -1
  209. package/dist/domain/browserScenarioNormalization.js +6 -11
  210. package/dist/domain/browserScenarioValues.js +3 -1
  211. package/dist/domain/callPath.js +47 -7
  212. package/dist/domain/canonicalDigest.js +65 -0
  213. package/dist/domain/canonicalOrdering.js +11 -0
  214. package/dist/domain/changedBehavior.js +8 -7
  215. package/dist/domain/comparisonSemantics.js +2 -4
  216. package/dist/domain/configurationErrors.js +25 -0
  217. package/dist/domain/dosCom.js +8 -0
  218. package/dist/domain/electronActiveObservation.js +3 -1
  219. package/dist/domain/electronStaticAnalysisBrowser.js +13 -23
  220. package/dist/domain/electronStaticAnalysisNative.js +2 -1
  221. package/dist/domain/electronStaticAnalysisValues.js +23 -3
  222. package/dist/domain/evidence.js +3 -11
  223. package/dist/domain/evidenceErrors.js +30 -0
  224. package/dist/domain/firmwareAnalysis.js +121 -0
  225. package/dist/domain/functionComparison.js +4 -2
  226. package/dist/domain/functionComparisonDimensions.js +6 -4
  227. package/dist/domain/functionComparisonNormalization.js +8 -1
  228. package/dist/domain/functionComparisonResults.js +1 -4
  229. package/dist/domain/hopperErrors.js +78 -0
  230. package/dist/domain/hopperValues.js +2 -1
  231. package/dist/domain/interfaceBuilderGraph.js +3 -1
  232. package/dist/domain/javascriptApplicationChangeGraph.js +2 -2
  233. package/dist/domain/javascriptApplicationGraph.js +13 -22
  234. package/dist/domain/javascriptApplicationVersionComparison.js +3 -11
  235. package/dist/domain/javascriptApplicationVersionItems.js +3 -3
  236. package/dist/domain/javascriptApplicationVersionKeys.js +1 -1
  237. package/dist/domain/javascriptAstFingerprint.js +1 -1
  238. package/dist/domain/javascriptExportShapeComparison.js +1 -2
  239. package/dist/domain/javascriptExportShapeSelection.js +1 -1
  240. package/dist/domain/javascriptExportShapeVariants.js +7 -3
  241. package/dist/domain/javascriptFeatureSeed.js +29 -9
  242. package/dist/domain/javascriptFeatureTrace.js +9 -13
  243. package/dist/domain/javascriptFeatureTraversal.js +2 -1
  244. package/dist/domain/javascriptNativeHandoff.js +2 -1
  245. package/dist/domain/javascriptRuntimeLoadState.js +2 -2
  246. package/dist/domain/javascriptRuntimeReconciliationActive.js +3 -10
  247. package/dist/domain/javascriptRuntimeReconciliationGraph.js +2 -2
  248. package/dist/domain/javascriptRuntimeReconciliationMatching.js +4 -3
  249. package/dist/domain/javascriptRuntimeReconciliationParsing.js +8 -14
  250. package/dist/domain/javascriptRuntimeReconciliationResult.js +4 -4
  251. package/dist/domain/javascriptRuntimeReconciliationSchemas.js +5 -2
  252. package/dist/domain/javascriptRuntimeStaticCandidates.js +8 -4
  253. package/dist/domain/javascriptSemanticAnalysis.js +40 -3
  254. package/dist/domain/javascriptSemanticCallResolution.js +2 -1
  255. package/dist/domain/javascriptSemanticChildProcesses.js +2 -1
  256. package/dist/domain/javascriptSemanticDataEffects.js +2 -1
  257. package/dist/domain/javascriptSemanticFingerprints.js +1 -1
  258. package/dist/domain/javascriptSemanticGraph.js +23 -28
  259. package/dist/domain/javascriptSemanticPrimitives.js +9 -2
  260. package/dist/domain/javascriptSemanticProjection.js +2 -1
  261. package/dist/domain/javascriptSemanticPromises.js +2 -1
  262. package/dist/domain/javascriptSemanticProvenance.js +1 -1
  263. package/dist/domain/javascriptSemanticQuery.js +7 -8
  264. package/dist/domain/javascriptSemanticQueryAssessment.js +1 -2
  265. package/dist/domain/javascriptSemanticQueryIdentity.js +1 -2
  266. package/dist/domain/javascriptSemanticReturns.js +2 -1
  267. package/dist/domain/javascriptSemanticValues.js +50 -16
  268. package/dist/domain/javascriptSourceParser.js +4 -2
  269. package/dist/domain/javascriptStaticAnalysis.js +1 -1
  270. package/dist/domain/javascriptStaticAnalysisBundler.js +2 -1
  271. package/dist/domain/javascriptStaticAnalysisCalls.js +14 -6
  272. package/dist/domain/javascriptStaticAnalysisHelpers.js +31 -4
  273. package/dist/domain/jsonShape.js +6 -2
  274. package/dist/domain/managedMemberComparison.js +1 -0
  275. package/dist/domain/managedMemberComparisonItems.js +2 -0
  276. package/dist/domain/managedNativeVerificationMatch.js +5 -3
  277. package/dist/domain/nativeDataType.js +2 -0
  278. package/dist/domain/nativeFunctionAnnotations.js +43 -0
  279. package/dist/domain/nativeLoadImage.js +95 -0
  280. package/dist/domain/nativeMetadataRecovery.js +55 -0
  281. package/dist/domain/processCapture.js +0 -1
  282. package/dist/domain/processEvidenceProvider.js +11 -0
  283. package/dist/domain/processTraceComparison.js +1 -1
  284. package/dist/domain/providerAdapterError.js +17 -0
  285. package/dist/domain/providerCleanupError.js +1 -1
  286. package/dist/domain/providerSelectionError.js +44 -0
  287. package/dist/domain/reconstructionUnknowns.js +1 -1
  288. package/dist/domain/reconstructionVerification.js +22 -8
  289. package/dist/domain/referenceSourceClassification.js +5 -6
  290. package/dist/domain/referenceSourceGraph.js +9 -17
  291. package/dist/domain/referenceSourceImportParsing.js +38 -23
  292. package/dist/domain/runtimeIdentification.js +1 -1
  293. package/dist/domain/runtimeVersion.js +4 -7
  294. package/dist/domain/safeJson.js +13 -0
  295. package/dist/domain/sourceToBundleComparison.js +5 -7
  296. package/dist/domain/sourceToBundleSignals.js +6 -6
  297. package/dist/domain/staticRuntimeCorrelation.js +9 -7
  298. package/dist/domain/unknownRegistryError.js +10 -0
  299. package/dist/domain/webBundleAnalyzerAst.js +22 -5
  300. package/dist/domain/webBundleAnalyzerInspection.js +20 -14
  301. package/dist/dotnet/ManagedMemberRows.js +1 -1
  302. package/dist/dotnet/ManagedMetadataHeaps.js +3 -2
  303. package/dist/dotnet/ManagedMetadataInventoryRows.js +4 -2
  304. package/dist/dotnet/ManagedMethodBodyReader.js +8 -1
  305. package/dist/dotnet/ManagedStaticProvider.js +3 -1
  306. package/dist/firmware/FirmwareCommand.js +163 -0
  307. package/dist/firmware/FirmwareFiles.js +190 -0
  308. package/dist/firmware/FirmwareProvider.js +258 -0
  309. package/dist/firmware/FirmwarePublication.js +84 -0
  310. package/dist/firmware/FirmwareRelease.js +32 -0
  311. package/dist/firmware/FirmwareReports.js +223 -0
  312. package/dist/generatedMcpToolCatalog.js +1 -1
  313. package/dist/generatedPackageMetadata.js +5 -5
  314. package/dist/ghidra/GhidraAnalysisProfile.js +37 -8
  315. package/dist/ghidra/GhidraClient.js +52 -6
  316. package/dist/ghidra/GhidraDiagnostics.js +3 -0
  317. package/dist/ghidra/GhidraDoctor.js +38 -14
  318. package/dist/ghidra/GhidraFunctionValues.js +10 -4
  319. package/dist/ghidra/GhidraInstallation.js +10 -4
  320. package/dist/ghidra/GhidraInventoryValues.js +39 -2
  321. package/dist/ghidra/GhidraLauncher.js +91 -26
  322. package/dist/ghidra/GhidraLoadImageValues.js +199 -0
  323. package/dist/ghidra/GhidraProvider.js +129 -13
  324. package/dist/ghidra/GhidraProviderCapabilities.js +52 -15
  325. package/dist/ghidra/GhidraRequestQueue.js +2 -2
  326. package/dist/ghidra/GhidraSessionError.js +31 -4
  327. package/dist/ghidra/GhidraSessionValues.js +10 -7
  328. package/dist/ghidra/GhidraTargetSnapshot.js +16 -2
  329. package/dist/ghidra/GhidraTransport.js +12 -0
  330. package/dist/ghidra/extensions/GhidraExtensionFailures.js +20 -0
  331. package/dist/ghidra/extensions/GhidraExtensions.js +170 -0
  332. package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +21 -0
  333. package/dist/ghidra/extensions/nativeaot/NativeAotReport.js +84 -0
  334. package/dist/hopper/BridgeLauncher.js +4 -2
  335. package/dist/hopper/HopperAnalysisProfile.js +7 -2
  336. package/dist/hopper/HopperCleanup.js +55 -9
  337. package/dist/hopper/HopperClient.js +14 -4
  338. package/dist/hopper/HopperProcessDiagnostic.js +1 -1
  339. package/dist/hopper/HopperProvider.js +8 -4
  340. package/dist/hopper/HopperRequestQueue.js +7 -3
  341. package/dist/hopper/HopperSessionValues.js +1 -1
  342. package/dist/hopper/HopperSocketConnection.js +1 -1
  343. package/dist/hopper/HopperTargetLease.js +23 -15
  344. package/dist/hopper/LinuxPrivateDisplayDiagnostic.js +7 -8
  345. package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -2
  346. package/dist/hopper/protocol.js +8 -8
  347. package/dist/ida/IdaConfiguration.js +56 -0
  348. package/dist/ida/IdaDoctor.js +53 -0
  349. package/dist/ida/IdaInput.js +62 -0
  350. package/dist/ida/IdaMcpConnection.js +111 -0
  351. package/dist/ida/IdaOperationRunner.js +299 -0
  352. package/dist/ida/IdaProtocolValues.js +178 -0
  353. package/dist/ida/IdaProvider.js +126 -0
  354. package/dist/ida/IdaProviderCapabilities.js +60 -0
  355. package/dist/ida/IdaSessionClient.js +306 -0
  356. package/dist/ida/IdaWorkspace.js +54 -0
  357. package/dist/main/shutdown.js +21 -1
  358. package/dist/main/startup.js +1 -1
  359. package/dist/main/transport.js +8 -4
  360. package/dist/main.js +5 -2
  361. package/dist/native/AppleDispatchMetadata.js +31 -10
  362. package/dist/native/NativeMacOSProvider.js +87 -15
  363. package/dist/native/NativeMachoInspection.js +42 -12
  364. package/dist/native/NativeUiHelperRuntime.js +7 -1
  365. package/dist/native/NativeUiObservation.js +6 -2
  366. package/dist/native/parsers/demangle.js +1 -1
  367. package/dist/native/parsers/dyldInfo.js +3 -3
  368. package/dist/native/parsers/otool.js +4 -1
  369. package/dist/native/parsers/plist.js +11 -3
  370. package/dist/process/PrivateRuntimeRoot.js +13 -3
  371. package/dist/process/ProcessOwnership.js +5 -73
  372. package/dist/process/ProcessOwnershipObservation.js +62 -2
  373. package/dist/process/ProcessOwnershipProcessTree.js +13 -0
  374. package/dist/process/ProviderProcess.js +24 -7
  375. package/dist/process/ProviderRunLineage.js +1 -1
  376. package/dist/process/WindowsAuthority.js +20 -1
  377. package/dist/reference/ReferenceSourceReaderEntries.js +5 -1
  378. package/dist/reference/ReferenceSourceReaderFile.js +1 -0
  379. package/dist/server/createServer.js +25 -2
  380. package/dist/server/mcpProgress.js +2 -1
  381. package/dist/server/promptCompletion.js +3 -3
  382. package/dist/server/registerAndroidTools.js +30 -0
  383. package/dist/server/registerApplicationTools/compareExportShapes.js +5 -1
  384. package/dist/server/registerApplicationTools/compareSourceToBundle.js +7 -2
  385. package/dist/server/registerApplicationTools/compareVersions.js +5 -1
  386. package/dist/server/registerApplicationTools/traceFeature.js +7 -2
  387. package/dist/server/registerApplicationTools/traceSemantics.js +7 -2
  388. package/dist/server/registerEnhancedTools.js +28 -1
  389. package/dist/server/registerFirmwareTools.js +22 -0
  390. package/dist/server/registerFunctionComparisonTool.js +1 -1
  391. package/dist/server/registerInvestigationTools/helpers.js +2 -1
  392. package/dist/server/registerManagedTools.js +1 -1
  393. package/dist/server/registerManagedWorkflowTools/evidence.js +1 -1
  394. package/dist/server/registerOfficialTools.js +4 -1
  395. package/dist/server/registerProcessComparisonTool.js +5 -2
  396. package/dist/server/registerSessionTools.js +3 -1
  397. package/dist/server/runDerivedOperation.js +1 -1
  398. package/dist/server/sessionAvailabilityPolicy.js +3 -0
  399. package/dist/server/sessionEvidence.js +1 -1
  400. package/dist/server/toolResult.js +2 -1
  401. package/dist/windows/WindowsNativeLoader.js +108 -0
  402. package/dist/windows/WindowsOwnedProcess.js +168 -0
  403. package/dist/windows/WindowsPrivateRuntime.js +137 -0
  404. package/install.sh +4 -6
  405. package/native/windows/README.md +102 -0
  406. package/native/windows/build/manifest.json +9 -0
  407. package/native/windows/build/rea-windows-x64.node +0 -0
  408. package/package.json +38 -24
  409. package/scripts/rea.mjs +1 -1
  410. package/scripts/verify-windows-native-artifact.mjs +39 -0
  411. package/skills/reverse-engineer-anything/SKILL.md +92 -24
  412. package/skills/reverse-engineer-anything/references/android-applications.md +31 -0
  413. package/skills/reverse-engineer-anything/references/javascript-applications.md +19 -2
  414. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +52 -4
  415. package/dist/browser/CdpCanonicalJsonDigest.js +0 -9
  416. package/dist/domain/errors.js +0 -324
@@ -0,0 +1,84 @@
1
+ import { createReadStream } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { SafeOutputTree } from "../artifacts/SafeOutputTree.js";
4
+ import { AnalysisOutputError } from "../domain/analysisErrorCore.js";
5
+ import { ProviderCleanupError } from "../domain/providerCleanupError.js";
6
+ import { firmwareResultSchemas } from "../domain/firmwareAnalysis.js";
7
+ import { hashFirmwareFile } from "./FirmwareFiles.js";
8
+ /** Publish verified regular files, preserving links as metadata and rolling back failed writes. */
9
+ export const publishFirmwareExtraction = async (context) => {
10
+ let tree;
11
+ try {
12
+ const materialized = new Set(context.entries
13
+ .filter((entry) => entry.kind === "file")
14
+ .map((entry) => `$output/${entry.relativePath}`));
15
+ for (const path of context.normalized.files.keys()) {
16
+ if (path !== "$input" && !materialized.has(path))
17
+ throw new AnalysisOutputError("extract_firmware", `Reported regular file is absent from materialized output: ${path}`);
18
+ }
19
+ const files = [];
20
+ const unpublished = [];
21
+ tree = await SafeOutputTree.create(context.outputDirectory);
22
+ for (const entry of context.entries) {
23
+ if (entry.kind !== "file") {
24
+ unpublished.push({
25
+ relative_path: entry.relativePath,
26
+ kind: entry.kind,
27
+ link_target: entry.linkTarget,
28
+ });
29
+ continue;
30
+ }
31
+ const logicalPath = `$output/${entry.relativePath}`;
32
+ const reported = context.normalized.files.get(logicalPath);
33
+ const sha256 = await hashFirmwareFile(entry.path, context.signal);
34
+ if ((reported?.sha256 !== null &&
35
+ reported?.sha256 !== undefined &&
36
+ reported.sha256 !== sha256) ||
37
+ (context.normalized.sizes.has(logicalPath) &&
38
+ context.normalized.sizes.get(logicalPath) !== entry.size))
39
+ throw new AnalysisOutputError("extract_firmware", `Extracted bytes disagree with provider report: ${entry.relativePath}`);
40
+ await tree.write(entry.relativePath, createReadStream(entry.path), sha256, context.signal);
41
+ files.push({
42
+ relative_path: entry.relativePath,
43
+ path: join(tree.outputRoot, entry.relativePath),
44
+ size: entry.size,
45
+ sha256,
46
+ reported_sha256: reported?.sha256 ?? null,
47
+ mime_type: reported?.mimeType ?? null,
48
+ analysis_depth: reported?.depth ?? null,
49
+ runtime_address: null,
50
+ original_file_range: null,
51
+ });
52
+ }
53
+ const result = firmwareResultSchemas.extract_firmware.parse({
54
+ engine: context.engine,
55
+ selection: context.selection,
56
+ output_directory: tree.outputRoot,
57
+ coverage: unpublished.length > 0 ? "partial" : context.normalized.coverage,
58
+ files,
59
+ unpublished_entries: unpublished,
60
+ chunks: context.normalized.chunks,
61
+ derivations: context.normalized.derivations,
62
+ depth_limited_paths: context.normalized.depth_limited_paths,
63
+ diagnostics: context.normalized.diagnostics,
64
+ published_bytes: files.reduce((sum, file) => sum + file.size, 0),
65
+ });
66
+ context.signal.throwIfAborted();
67
+ await tree.commit();
68
+ return result;
69
+ }
70
+ catch (cause) {
71
+ try {
72
+ await tree?.rollback();
73
+ }
74
+ catch (cleanupCause) {
75
+ throw new ProviderCleanupError("unblob", [context.outputDirectory], {
76
+ reason: cleanupCause instanceof Error
77
+ ? cleanupCause.message
78
+ : String(cleanupCause),
79
+ previous_error: cause instanceof Error ? cause.message : String(cause),
80
+ }, { cause: cleanupCause });
81
+ }
82
+ throw cause;
83
+ }
84
+ };
@@ -0,0 +1,32 @@
1
+ /** Audited upstream sources; installed tool bytes are fingerprinted separately. */
2
+ export const FIRMWARE_RELEASES = {
3
+ binwalk: {
4
+ version: "3.1.0",
5
+ revision: "4fdab3d464d97b68e0af9088df3f9e2e1545b21c",
6
+ repository: "https://github.com/ReFirmLabs/binwalk",
7
+ },
8
+ unblob: {
9
+ version: "26.6.4",
10
+ revision: "1fcc7a0a584a70a96c31f5a276c20944d199a089",
11
+ repository: "https://github.com/onekey-sec/unblob",
12
+ },
13
+ };
14
+ /** Catalog identities; Evidence uses the version observed from the executed tool. */
15
+ export const BINWALK_PROVIDER_IDENTITY = {
16
+ id: "binwalk",
17
+ name: "Binwalk",
18
+ version: FIRMWARE_RELEASES.binwalk.version,
19
+ };
20
+ /** Catalog identity for explicit firmware extraction. */
21
+ export const UNBLOB_PROVIDER_IDENTITY = {
22
+ id: "unblob",
23
+ name: "Unblob",
24
+ version: FIRMWARE_RELEASES.unblob.version,
25
+ };
26
+ /** Resource policy for this Linux integration, not a claim of aggregate containment. */
27
+ export const FIRMWARE_LIMITS = {
28
+ inputBytes: 128 * 1024 * 1024,
29
+ reportBytes: 8 * 1024 * 1024,
30
+ addressSpaceBytes: 1024 * 1024 * 1024,
31
+ timeoutMs: 120_000,
32
+ };
@@ -0,0 +1,223 @@
1
+ import { z } from "zod";
2
+ import { AnalysisOutputError } from "../domain/analysisErrorCore.js";
3
+ import { jsonValueSchema } from "../domain/jsonValue.js";
4
+ import { digestSchema } from "../domain/digests.js";
5
+ import { firmwareLogicalPath } from "./FirmwareFiles.js";
6
+ const integer = z.number().int().min(0).max(Number.MAX_SAFE_INTEGER);
7
+ const signature = z.object({
8
+ id: z.string().min(1),
9
+ offset: integer,
10
+ size: integer,
11
+ name: z.string(),
12
+ description: z.string(),
13
+ confidence: z.number().int().min(0).max(255),
14
+ always_display: z.boolean(),
15
+ extraction_declined: z.boolean(),
16
+ });
17
+ const scan = z.array(z.object({
18
+ Analysis: z.object({
19
+ file_path: z.string(),
20
+ file_map: z.array(signature),
21
+ extractions: z.record(z.string(), jsonValueSchema),
22
+ }),
23
+ }));
24
+ const report = z.object({ __typename__: z.string() }).catchall(jsonValueSchema);
25
+ const task = z.object({
26
+ path: z.string(),
27
+ depth: integer,
28
+ blob_id: z.string(),
29
+ is_multi_file: z.boolean(),
30
+ });
31
+ const extraction = z.array(z.object({ task, reports: z.array(report), subtasks: z.array(task) }));
32
+ const stat = z.object({
33
+ __typename__: z.literal("StatReport"),
34
+ path: z.string(),
35
+ size: integer,
36
+ is_dir: z.boolean(),
37
+ is_file: z.boolean(),
38
+ is_link: z.boolean(),
39
+ link_target: z.string().nullable(),
40
+ });
41
+ const hashes = z.object({ sha256: digestSchema });
42
+ const region = z.object({
43
+ id: z.string(),
44
+ start_offset: integer,
45
+ end_offset: integer,
46
+ size: integer,
47
+ });
48
+ const known = new Set([
49
+ "StatReport",
50
+ "HashReport",
51
+ "FileMagicReport",
52
+ "RandomnessReport",
53
+ "ChunkReport",
54
+ "UnknownChunkReport",
55
+ "CarveDirectoryReport",
56
+ "MultiFileReport",
57
+ ]);
58
+ /** Interpret the pinned Binwalk report without inventing validated region lengths. */
59
+ export const normalizeBinwalkReport = (raw, inputPath, size) => {
60
+ const records = scan.parse(raw);
61
+ const analysis = records[0]?.Analysis;
62
+ if (records.length !== 1 ||
63
+ analysis?.file_path !== inputPath ||
64
+ Object.keys(analysis.extractions).length !== 0)
65
+ throw new AnalysisOutputError("inspect_firmware_regions", "Expected one inspection-only report for the selected immutable input");
66
+ return analysis.file_map.map((hit) => {
67
+ if (hit.offset >= size || hit.size > size - hit.offset)
68
+ throw new AnalysisOutputError("inspect_firmware_regions", "Reported region lies outside the selected file");
69
+ return {
70
+ provider_id: hit.id,
71
+ offset: hit.offset,
72
+ reported_size: hit.size,
73
+ signature: hit.name,
74
+ description: hit.description,
75
+ reported_confidence: hit.confidence,
76
+ size_basis: "provider_reported_validation_unknown",
77
+ };
78
+ });
79
+ };
80
+ /** Normalize Unblob's unordered task graph, retaining unknown and failed analyses. */
81
+ export const normalizeUnblobReport = (raw, context) => {
82
+ const records = extraction.parse(raw);
83
+ const logical = (path) => firmwareLogicalPath(path, context.inputPath, context.outputRoot);
84
+ const roots = records.filter(({ task: item }) => item.path === context.inputPath && item.depth === 0);
85
+ if (roots.length !== 1)
86
+ throw new AnalysisOutputError("extract_firmware", "Expected exactly one selected input task");
87
+ const rootHash = roots[0]?.reports.find((r) => r.__typename__ === "HashReport");
88
+ if (rootHash === undefined ||
89
+ hashes.parse(rootHash).sha256 !== context.sha256)
90
+ throw new AnalysisOutputError("extract_firmware", "Unblob input hash disagrees with selected snapshot");
91
+ const files = new Map();
92
+ const sizes = new Map();
93
+ const depths = [];
94
+ const diagnostics = [];
95
+ const chunks = [];
96
+ const seen = new Set();
97
+ for (const record of records) {
98
+ const path = logical(record.task.path);
99
+ if (seen.has(path))
100
+ throw new AnalysisOutputError("extract_firmware", `Duplicate analysis task: ${path}`);
101
+ seen.add(path);
102
+ if (record.task.depth >= context.maxDepth)
103
+ depths.push(path);
104
+ const metadata = record.reports.find((r) => r.__typename__ === "StatReport");
105
+ if (metadata === undefined)
106
+ throw new AnalysisOutputError("extract_firmware", `Missing StatReport: ${path}`);
107
+ const parsedStat = stat.parse(metadata);
108
+ if (parsedStat.path !== record.task.path)
109
+ throw new AnalysisOutputError("extract_firmware", `StatReport is bound to another task: ${path}`);
110
+ if (path === "$input" && parsedStat.size !== context.length)
111
+ throw new AnalysisOutputError("extract_firmware", "Unblob input size disagrees with selected snapshot");
112
+ if (path === "$input" &&
113
+ (!parsedStat.is_file || parsedStat.is_link || parsedStat.is_dir))
114
+ throw new AnalysisOutputError("extract_firmware", "Selected input was not reported as a regular file");
115
+ sizes.set(path, parsedStat.size);
116
+ const hash = record.reports.find((r) => r.__typename__ === "HashReport");
117
+ const magic = record.reports.find((r) => r.__typename__ === "FileMagicReport");
118
+ if (parsedStat.is_file && !parsedStat.is_link)
119
+ files.set(path, {
120
+ sha256: hash === undefined ? null : hashes.parse(hash).sha256,
121
+ mimeType: magic === undefined
122
+ ? null
123
+ : z.object({ mime_type: z.string() }).parse(magic).mime_type,
124
+ depth: record.task.depth,
125
+ });
126
+ for (const item of record.reports) {
127
+ if (!known.has(item.__typename__))
128
+ diagnostics.push(jsonValueSchema.parse({ input_path: path, report: item }));
129
+ if (item.__typename__ === "ChunkReport" ||
130
+ item.__typename__ === "UnknownChunkReport") {
131
+ const parsed = region.parse(item);
132
+ if (parsed.end_offset <= parsed.start_offset ||
133
+ parsed.end_offset > parsedStat.size ||
134
+ parsed.size !== parsed.end_offset - parsed.start_offset)
135
+ throw new AnalysisOutputError("extract_firmware", `Invalid chunk bounds for ${path}`);
136
+ const detail = item.__typename__ === "ChunkReport"
137
+ ? z
138
+ .object({
139
+ handler_name: z.string(),
140
+ is_encrypted: z.boolean(),
141
+ extraction_reports: z.array(jsonValueSchema),
142
+ })
143
+ .parse(item)
144
+ : null;
145
+ if (detail !== null)
146
+ for (const problem of detail.extraction_reports)
147
+ diagnostics.push({ input_path: path, report: problem });
148
+ chunks.push({
149
+ input_path: path,
150
+ provider_id: parsed.id,
151
+ range: { offset: parsed.start_offset, length: parsed.size },
152
+ handler: detail?.handler_name ?? null,
153
+ encrypted: detail?.is_encrypted ?? null,
154
+ root_file_range: path === "$input"
155
+ ? {
156
+ offset: context.offset + parsed.start_offset,
157
+ length: parsed.size,
158
+ }
159
+ : null,
160
+ });
161
+ }
162
+ }
163
+ }
164
+ const recordsByPath = new Map(records.map((record) => [record.task.path, record.task]));
165
+ const chunksByOrigin = new Map();
166
+ for (const item of chunks) {
167
+ const key = JSON.stringify([item.input_path, item.provider_id]);
168
+ if (chunksByOrigin.has(key))
169
+ throw new AnalysisOutputError("extract_firmware", `Duplicate chunk identity in ${item.input_path}`);
170
+ chunksByOrigin.set(key, item);
171
+ }
172
+ const derivations = records.flatMap((record) => record.subtasks.map((child) => {
173
+ const parentPath = logical(record.task.path);
174
+ const childPath = logical(child.path);
175
+ if (!seen.has(childPath))
176
+ throw new AnalysisOutputError("extract_firmware", `Missing child task: ${childPath}`);
177
+ const reportedChild = recordsByPath.get(child.path);
178
+ if (reportedChild?.depth !== child.depth ||
179
+ reportedChild.blob_id !== child.blob_id ||
180
+ reportedChild.is_multi_file !== child.is_multi_file)
181
+ throw new AnalysisOutputError("extract_firmware", `Child task identity disagrees with its analysis: ${childPath}`);
182
+ const origin = chunksByOrigin.get(JSON.stringify([parentPath, child.blob_id]));
183
+ return {
184
+ parent_path: parentPath,
185
+ child_path: childPath,
186
+ provider_blob_id: child.blob_id,
187
+ handler: origin?.handler ?? null,
188
+ parent_file_range: origin?.range ?? null,
189
+ };
190
+ }));
191
+ const reachable = new Set(["$input"]);
192
+ const pending = ["$input"];
193
+ const childrenByParent = new Map();
194
+ for (const edge of derivations) {
195
+ const children = childrenByParent.get(edge.parent_path) ?? [];
196
+ children.push(edge.child_path);
197
+ childrenByParent.set(edge.parent_path, children);
198
+ }
199
+ while (pending.length > 0) {
200
+ const parent = pending.pop();
201
+ for (const child of childrenByParent.get(parent ?? "") ?? []) {
202
+ if (reachable.has(child))
203
+ continue;
204
+ reachable.add(child);
205
+ pending.push(child);
206
+ }
207
+ }
208
+ if (reachable.size !== seen.size)
209
+ throw new AnalysisOutputError("extract_firmware", "Report contains tasks disconnected from the selected input");
210
+ return {
211
+ files,
212
+ sizes,
213
+ chunks,
214
+ derivations,
215
+ depth_limited_paths: depths.sort(),
216
+ diagnostics,
217
+ coverage: depths.length > 0 ||
218
+ diagnostics.length > 0 ||
219
+ chunks.some((c) => c.handler === null || c.encrypted === true)
220
+ ? "partial"
221
+ : "complete",
222
+ };
223
+ };