rea-agents 6.3.0 → 6.4.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 (487) hide show
  1. package/README.md +7 -4
  2. package/bridge/ghidra/ReaGhidraApplySeeds.java +151 -0
  3. package/bridge/ghidra/ReaGhidraBridge.java +597 -209
  4. package/bridge/ghidra/ReaGhidraNoReturnFix.java +123 -0
  5. package/dist/adb/AdbConfiguration.js +88 -0
  6. package/dist/adb/AdbDeviceOutput.js +186 -0
  7. package/dist/adb/AdbProvider.js +1190 -0
  8. package/dist/adb/AdbShellOutput.js +309 -0
  9. package/dist/android/AndroidTargetSnapshot.js +104 -22
  10. package/dist/android/JadxConfiguration.js +44 -24
  11. package/dist/android/JadxProvider.js +51 -19
  12. package/dist/apktool/ApktoolConfiguration.js +84 -0
  13. package/dist/apktool/ApktoolDecodeOutput.js +59 -0
  14. package/dist/apktool/ApktoolProvider.js +506 -0
  15. package/dist/application/AnalysisProvider.js +8 -2
  16. package/dist/application/AppBundleExecutable.js +27 -22
  17. package/dist/application/BinaryTargetResolver.js +22 -2
  18. package/dist/application/CapabilityInventory.js +11 -1
  19. package/dist/application/ClientConfigurationDocument.js +70 -0
  20. package/dist/application/ClientConfigurationFiles.js +91 -0
  21. package/dist/application/ClientRegistrationEnvironment.js +35 -0
  22. package/dist/application/ClientRegistrationStatus.js +66 -31
  23. package/dist/application/DirectAnalysis.js +2 -2
  24. package/dist/application/DirectAnalysisCleanup.js +1 -1
  25. package/dist/application/DirectAnalysisStatus.js +1 -1
  26. package/dist/application/Doctor.js +5 -3
  27. package/dist/application/DoctorDiagnostics.js +1 -1
  28. package/dist/application/EvidenceBundleCommands.js +6 -12
  29. package/dist/application/GeminiClientSettings.js +139 -0
  30. package/dist/application/HermesClientHome.js +115 -0
  31. package/dist/application/HopperDownload.js +39 -0
  32. package/dist/application/InvestigationProviders.js +6 -0
  33. package/dist/application/JsonFiles.js +6 -5
  34. package/dist/{cliJsonFile.js → application/JsonInputFile.js} +108 -35
  35. package/dist/application/LinuxHopper.js +4 -12
  36. package/dist/application/MacHopper.js +172 -149
  37. package/dist/application/MipsElfAbiFlags.js +140 -0
  38. package/dist/application/ProviderOperationExecution.js +31 -0
  39. package/dist/application/ReconstructionObligationCandidates.js +9 -3
  40. package/dist/application/ReferenceSourceImport.js +76 -29
  41. package/dist/application/ReferenceSourceImportEntries.js +18 -9
  42. package/dist/application/ReferenceSourceImportPolicy.js +99 -23
  43. package/dist/application/ReferenceSourceImportTypes.js +30 -22
  44. package/dist/application/ReferenceSourceVcsAdapter.js +145 -30
  45. package/dist/application/RegularFileRead.js +93 -7
  46. package/dist/application/Setup.js +54 -6
  47. package/dist/application/SetupClientConfiguration.js +116 -16
  48. package/dist/application/SetupHost.js +102 -24
  49. package/dist/application/SetupPlan.js +5 -8
  50. package/dist/application/SetupSkill.js +58 -39
  51. package/dist/application/SupportedClients.js +290 -65
  52. package/dist/application/Uninstall.js +158 -10
  53. package/dist/application/UpdateMaintenance.js +17 -21
  54. package/dist/application/Utf8JsonInput.js +7 -0
  55. package/dist/application/WebScriptExportService.js +131 -65
  56. package/dist/application/WebSourceLocationService.js +3 -0
  57. package/dist/application/adb/AdbDeviceAnalysisPort.js +1 -0
  58. package/dist/application/adb/AdbDeviceAnalysisService.js +13 -0
  59. package/dist/application/analysisView/AnalysisViewService.js +40 -2
  60. package/dist/application/apktool/ApktoolResourceAnalysisPort.js +1 -0
  61. package/dist/application/apktool/ApktoolResourceAnalysisService.js +13 -0
  62. package/dist/application/binary/AnalysisClientCleanup.js +0 -24
  63. package/dist/application/binary/BinarySession.js +2 -1
  64. package/dist/application/binaryDiagnostics/BinaryLayoutService.js +2 -1
  65. package/dist/application/binaryDiagnostics/PeResourcesPort.js +1 -0
  66. package/dist/application/binaryDiagnostics/PeResourcesService.js +111 -0
  67. package/dist/application/binaryDiagnostics/RecordedCrashService.js +2 -1
  68. package/dist/application/evm/EvmInterfaceService.js +3 -0
  69. package/dist/application/firmware/FirmwareAnalysisService.js +3 -0
  70. package/dist/application/investigation/InspectEvidenceBundle.js +18 -0
  71. package/dist/application/javascript/ElectronBoundaryGraphContext.js +3 -2
  72. package/dist/application/javascript/ElectronBoundaryGraphIpc.js +2 -2
  73. package/dist/application/javascript/ElectronBoundaryGraphNative.js +19 -6
  74. package/dist/application/javascript/ElectronBoundaryGraphWindows.js +3 -3
  75. package/dist/application/javascript/JavaScriptApplicationService.js +22 -11
  76. package/dist/application/javascript/JavaScriptApplicationWorkflowEvidence.js +5 -6
  77. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +171 -30
  78. package/dist/application/javascript/JavaScriptArtifactGraphAccumulator.js +14 -16
  79. package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +67 -19
  80. package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +4 -3
  81. package/dist/application/javascript/JavaScriptArtifactGraphContext.js +11 -5
  82. package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +19 -16
  83. package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +92 -10
  84. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +258 -235
  85. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +115 -26
  86. package/dist/application/javascript/JavaScriptArtifactReconstructionInput.js +4 -1
  87. package/dist/application/javascript/JavaScriptModuleRelationships.js +6 -4
  88. package/dist/application/javascript/JavaScriptRecoveryService.js +3 -0
  89. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +9 -3
  90. package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +199 -61
  91. package/dist/application/javascript/JavaScriptSemanticGraphConstruction.js +12 -19
  92. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +4 -1
  93. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +5 -3
  94. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +5 -3
  95. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +19 -8
  96. package/dist/application/jeb/JebAnalysisPort.js +1 -0
  97. package/dist/application/jeb/JebAnalysisService.js +13 -0
  98. package/dist/application/managed/ManagedApplicationGraphService.js +1 -1
  99. package/dist/application/native/NativeUiActionTrace.js +16 -8
  100. package/dist/application/native/NativeValueTrace.js +23 -6
  101. package/dist/application/process/ProcessCli.js +25 -20
  102. package/dist/artifacts/ArtifactPaths.js +129 -8
  103. package/dist/artifacts/ArtifactProvider.js +20 -15
  104. package/dist/artifacts/ArtifactReader.js +23 -0
  105. package/dist/artifacts/ArtifactResourceScope.js +100 -0
  106. package/dist/artifacts/AsarArtifactReader.js +176 -102
  107. package/dist/artifacts/AsarHeader.js +24 -0
  108. package/dist/artifacts/DirectoryArtifactReader.js +168 -65
  109. package/dist/artifacts/MachOSliceArtifactReader.js +116 -39
  110. package/dist/artifacts/NativeDmgArtifactReader.js +29 -22
  111. package/dist/artifacts/SafeOutputTree.js +245 -70
  112. package/dist/artifacts/SafeOutputTreeCleanup.js +45 -0
  113. package/dist/artifacts/SafeOutputTreeCreationFailure.js +20 -0
  114. package/dist/artifacts/SafeOutputTreeIdentity.js +42 -0
  115. package/dist/artifacts/SafeOutputTreeReadback.js +33 -0
  116. package/dist/artifacts/ZipArtifactReader.js +77 -27
  117. package/dist/artifacts/apple/InterfaceBuilderAnalysis.js +58 -18
  118. package/dist/artifacts/apple/InterfaceBuilderDecodeBudget.js +62 -24
  119. package/dist/artifacts/apple/KeyedArchiveReader.js +32 -13
  120. package/dist/artifacts/extraction/ArtifactExtraction.js +110 -86
  121. package/dist/artifacts/inventory/ArtifactGraphConstruction.js +110 -43
  122. package/dist/artifacts/inventory/ArtifactInventory.js +5 -4
  123. package/dist/artifacts/inventory/classify.js +75 -32
  124. package/dist/artifacts/inventory/hashStableRootArtifact.js +48 -15
  125. package/dist/artifacts/inventory/reader.js +13 -5
  126. package/dist/artifacts/inventory/scanCanonical.js +62 -25
  127. package/dist/artifacts/inventory/scanReader.js +38 -11
  128. package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +15 -9
  129. package/dist/artifacts/javascript/JavaScriptSourceAnalysis.js +3 -0
  130. package/dist/browser/BrowserScenarioPartialObservation.js +8 -2
  131. package/dist/browser/BrowserScenarioSecrets.js +52 -37
  132. package/dist/browser/CdpBrowserProvider.js +5 -0
  133. package/dist/browser/CdpCaptureDocuments.js +40 -6
  134. package/dist/browser/CdpCaptureDomSvg.js +210 -0
  135. package/dist/browser/CdpCaptureEventBodyShapes.js +4 -8
  136. package/dist/browser/CdpCaptureEventHandlers.js +26 -9
  137. package/dist/browser/CdpCaptureEvents.js +4 -9
  138. package/dist/browser/CdpConnection.js +22 -5
  139. package/dist/browser/CdpPageCapture.js +1 -1
  140. package/dist/browser/CdpTargetSession.js +30 -34
  141. package/dist/browser/CdpWebMcpDiscovery.js +32 -10
  142. package/dist/browser/ElectronFileScope.js +99 -9
  143. package/dist/browser/PlaywrightBrowserScenarioProvider.js +60 -4
  144. package/dist/browser/PlaywrightElectronActiveProvider.js +11 -6
  145. package/dist/browser/PlaywrightScenarioArtifacts.js +5 -5
  146. package/dist/browser/PlaywrightScenarioBrowser.js +69 -7
  147. package/dist/browser/PlaywrightScenarioSession.js +127 -54
  148. package/dist/browser/PlaywrightScenarioStorage.js +507 -0
  149. package/dist/browser/PngVisualDiff.js +198 -29
  150. package/dist/browser/WebSourceMapFetcher.js +3 -3
  151. package/dist/browser/assets/LocalWebScriptArtifacts.js +3 -1
  152. package/dist/browser/assets/PublishWebScripts.js +75 -20
  153. package/dist/browser/assets/WebArtifactReads.js +23 -1
  154. package/dist/browser/assets/WebSourceLocationArtifacts.js +1 -0
  155. package/dist/browser/execution/CdpExecutionCapture.js +3 -3
  156. package/dist/browser/execution/CdpPreciseCoverage.js +5 -8
  157. package/dist/browser/history/HarCapture.js +14 -0
  158. package/dist/browser/history/HarCaptureProcess.js +2 -10
  159. package/dist/browser/history/MitmproxyCaptureAdapter.js +3 -1
  160. package/dist/browser/modules/WebModuleArtifacts.js +1 -0
  161. package/dist/cli/adbCommands.js +337 -0
  162. package/dist/cli/analysisViewCommands.js +39 -1
  163. package/dist/cli/apktoolCommands.js +53 -0
  164. package/dist/cli/artifactCommands.js +8 -11
  165. package/dist/cli/binaryDiagnosticsCommands.js +19 -1
  166. package/dist/cli/browserAdvancedCommands.js +65 -36
  167. package/dist/cli/coreBinaryCommands.js +0 -5
  168. package/dist/cli/coreNativeCommands.js +1 -14
  169. package/dist/cli/electronCommands.js +6 -1
  170. package/dist/cli/evmCommands.js +13 -4
  171. package/dist/cli/firmwareCommands.js +7 -2
  172. package/dist/cli/javascriptApplicationAnalysis.js +17 -1
  173. package/dist/cli/javascriptRecoveryCommands.js +22 -15
  174. package/dist/cli/jebCommands.js +99 -0
  175. package/dist/cli/jsonOutput.js +11 -4
  176. package/dist/cli/referenceSourceImportStatus.js +7 -0
  177. package/dist/cli/setupCommands.js +15 -3
  178. package/dist/cli/utilityCommands.js +66 -18
  179. package/dist/cli/webScriptCommands.js +20 -1
  180. package/dist/cli/webSourceLocationCommands.js +21 -9
  181. package/dist/cli.js +6 -0
  182. package/dist/cliBrowserScenarioCommands.js +2 -1
  183. package/dist/cliCommandNames.js +32 -0
  184. package/dist/cliJsonInput.js +2 -2
  185. package/dist/cliObservationOptions.js +3 -0
  186. package/dist/composition/adb.js +3 -0
  187. package/dist/composition/apktool.js +3 -0
  188. package/dist/composition/binaryDiagnostics.js +4 -0
  189. package/dist/composition/directAnalysis.js +12 -4
  190. package/dist/composition/javascriptAnalysisWorkerProcess.js +48 -0
  191. package/dist/composition/jeb.js +6 -0
  192. package/dist/config/environment.js +10 -0
  193. package/dist/config/ghidraLanguageOverride.js +9 -0
  194. package/dist/config/mcpInputSchemaProfile.js +27 -0
  195. package/dist/config/parseConfig.js +28 -1
  196. package/dist/contracts/adb/adbToolContracts.js +353 -0
  197. package/dist/contracts/advertisedInputExamples.js +48 -0
  198. package/dist/contracts/analysisDetail.js +10 -0
  199. package/dist/contracts/analysisViewToolContracts.js +17 -2
  200. package/dist/contracts/apktool/apktoolToolContracts.js +33 -0
  201. package/dist/contracts/artifactToolContracts.js +8 -5
  202. package/dist/contracts/browserToolContracts.js +1 -1
  203. package/dist/contracts/compactInputSchema.js +256 -0
  204. package/dist/contracts/functionWorkflowToolContracts.js +1 -1
  205. package/dist/contracts/inputSchemaPresentation.js +10 -10
  206. package/dist/contracts/javascript/electronToolContracts.js +15 -3
  207. package/dist/contracts/javascript/javascriptRecoveryToolContracts.js +1 -1
  208. package/dist/contracts/jeb/jebToolContracts.js +64 -0
  209. package/dist/contracts/native/binaryDiagnosticsToolContracts.js +25 -3
  210. package/dist/contracts/officialToolContracts.js +5 -5
  211. package/dist/contracts/sessionToolContracts.js +2 -2
  212. package/dist/contracts/sessionToolSchemas.js +6 -2
  213. package/dist/contracts/toolContractExamples.js +6 -0
  214. package/dist/contracts/toolContractTypes.js +3 -0
  215. package/dist/contracts/toolContracts.js +6 -0
  216. package/dist/contracts/toolEffects.js +167 -0
  217. package/dist/contracts/toolOutputSchemaGroups.js +5 -3
  218. package/dist/contracts/toolSchemaMetadata.js +82 -7
  219. package/dist/domain/adb/adbDeviceAnalysis.js +583 -0
  220. package/dist/domain/analysisErrorCleanup.js +29 -0
  221. package/dist/domain/analysisErrorPresentation.js +18 -6
  222. package/dist/domain/analysisErrorProjection.js +4 -1
  223. package/dist/domain/analysisSnapshot.js +2 -1
  224. package/dist/domain/analysisView/analysisView.js +52 -2
  225. package/dist/domain/analysisView/binaryLayoutView.js +2 -0
  226. package/dist/domain/analysisView/javascriptApplicationView.js +2 -0
  227. package/dist/domain/analysisView/nativeFunctionView.js +155 -0
  228. package/dist/domain/android/androidApplication.js +25 -20
  229. package/dist/domain/apktool/apktoolResourceAnalysis.js +77 -0
  230. package/dist/domain/apple/appleApplication.js +40 -23
  231. package/dist/domain/apple/appleBundleAnatomy.js +95 -28
  232. package/dist/domain/apple/dyldPaths.js +9 -1
  233. package/dist/domain/apple/dylibResolution.js +2 -2
  234. package/dist/domain/apple/interfaceBuilderGraph.js +22 -19
  235. package/dist/domain/apple/interfaceBuilderKeyedArchive.js +10 -1
  236. package/dist/domain/artifactComparison.js +35 -7
  237. package/dist/domain/artifactGraph.js +5 -3
  238. package/dist/domain/artifactIdentity.js +30 -2
  239. package/dist/domain/artifactInspection.js +3 -43
  240. package/dist/domain/artifactIntegrityPolicy.js +10 -0
  241. package/dist/domain/artifactInventoryEvidence.js +11 -12
  242. package/dist/domain/artifactPathSyntax.js +1 -1
  243. package/dist/domain/binaryTarget.js +16 -0
  244. package/dist/domain/binaryTargetTypes.js +8 -1
  245. package/dist/domain/browserObservationSchemas.js +8 -4
  246. package/dist/domain/canonicalJsonDigestSteps.js +34 -12
  247. package/dist/domain/compactStringIdentity.js +9 -0
  248. package/dist/domain/evidence.js +2 -1
  249. package/dist/domain/evidenceRecordSummary.js +144 -0
  250. package/dist/domain/inputIssueProjection.js +16 -1
  251. package/dist/domain/javascript/electronStaticAnalysisBrowser.js +12 -13
  252. package/dist/domain/javascript/electronStaticAnalysisIpc.js +11 -20
  253. package/dist/domain/javascript/electronStaticAnalysisNative.js +70 -40
  254. package/dist/domain/javascript/electronStaticAnalysisValues.js +16 -0
  255. package/dist/domain/javascript/javascriptAnalysisResourceControls.js +45 -0
  256. package/dist/domain/javascript/javascriptApplicationAnalysis.js +4 -1
  257. package/dist/domain/javascript/javascriptApplicationChangeGraph.js +6 -6
  258. package/dist/domain/javascript/javascriptApplicationGraph.js +79 -18
  259. package/dist/domain/javascript/javascriptApplicationProjectionResources.js +35 -0
  260. package/dist/domain/javascript/javascriptApplicationVersionItems.js +28 -12
  261. package/dist/domain/javascript/javascriptApplicationVersionKeys.js +9 -1
  262. package/dist/domain/javascript/javascriptAstFingerprint.js +58 -31
  263. package/dist/domain/javascript/javascriptAstValues.js +32 -0
  264. package/dist/domain/javascript/javascriptElectronMemberWrites.js +50 -0
  265. package/dist/domain/javascript/javascriptModuleSemanticIr.js +15 -0
  266. package/dist/domain/javascript/javascriptNativeHandoff.js +6 -1
  267. package/dist/domain/javascript/javascriptRpcEndpoints.js +253 -0
  268. package/dist/domain/javascript/javascriptRuntimeLoadState.js +1 -3
  269. package/dist/domain/javascript/javascriptRuntimeReconciliationGraph.js +7 -2
  270. package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +8 -11
  271. package/dist/domain/javascript/javascriptSemanticAnalysis.js +190 -33
  272. package/dist/domain/javascript/javascriptSemanticCallableResults.js +42 -0
  273. package/dist/domain/javascript/javascriptSemanticCalls.js +8 -1
  274. package/dist/domain/javascript/javascriptSemanticDerivedAnalysis.js +15 -4
  275. package/dist/domain/javascript/javascriptSemanticFileProjection.js +1 -0
  276. package/dist/domain/javascript/javascriptSemanticFingerprints.js +42 -41
  277. package/dist/domain/javascript/javascriptSemanticGraph.js +69 -23
  278. package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +2 -10
  279. package/dist/domain/javascript/javascriptSemanticIterationSources.js +40 -7
  280. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +341 -87
  281. package/dist/domain/javascript/javascriptSemanticMutationValues.js +78 -35
  282. package/dist/domain/javascript/javascriptSemanticObjectReferences.js +381 -0
  283. package/dist/domain/javascript/javascriptSemanticObjects.js +7 -1
  284. package/dist/domain/javascript/javascriptSemanticProjection.js +52 -14
  285. package/dist/domain/javascript/javascriptSemanticPropertyPaths.js +77 -0
  286. package/dist/domain/javascript/javascriptSemanticQuery.js +27 -29
  287. package/dist/domain/javascript/javascriptSemanticQueryIdentity.js +1 -3
  288. package/dist/domain/javascript/javascriptSemanticReturnedReferences.js +219 -0
  289. package/dist/domain/javascript/javascriptSemanticReturns.js +13 -23
  290. package/dist/domain/javascript/javascriptSemanticState.js +22 -2
  291. package/dist/domain/javascript/javascriptSemanticTraversal.js +19 -1
  292. package/dist/domain/javascript/javascriptSemanticValues.js +47 -19
  293. package/dist/domain/javascript/javascriptSourceAnalysis.js +1 -0
  294. package/dist/domain/javascript/javascriptStaticAnalysis.js +29 -17
  295. package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +8 -6
  296. package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +49 -5
  297. package/dist/domain/javascript/javascriptStaticAnalysisFindings.js +8 -4
  298. package/dist/domain/javascript/javascriptStaticAnalysisState.js +1 -0
  299. package/dist/domain/jeb/jebAnalysis.js +114 -0
  300. package/dist/domain/jsonShape.js +63 -52
  301. package/dist/domain/jsonValue.js +3 -0
  302. package/dist/domain/managed/managedApplicationGraph.js +37 -0
  303. package/dist/domain/managed/managedApplicationGraphCoverage.js +8 -2
  304. package/dist/domain/managed/managedApplicationGraphNodes.js +32 -22
  305. package/dist/domain/managed/managedArtifact.js +1 -0
  306. package/dist/domain/managed/managedInspectionEvidence.js +13 -0
  307. package/dist/domain/native/nativeAotPe.js +1408 -0
  308. package/dist/domain/native/nativeInstruction.js +21 -0
  309. package/dist/domain/native/nativeMetadataRecovery.js +79 -6
  310. package/dist/domain/native/peResources.js +94 -0
  311. package/dist/domain/nativeConvention.js +33 -0
  312. package/dist/domain/process/processCapture.js +91 -1
  313. package/dist/domain/process/processCaptureExample.js +24 -0
  314. package/dist/domain/process/processCaptureValidation.js +79 -0
  315. package/dist/domain/process/processScenario.js +59 -7
  316. package/dist/domain/propertyListKeys.js +3 -1
  317. package/dist/domain/referenceSourceGraph.js +25 -16
  318. package/dist/domain/referenceSourceImportParsing.js +6 -3
  319. package/dist/domain/referenceSourcePathIdentity.js +22 -0
  320. package/dist/domain/referenceSourceRequireBindings.js +137 -0
  321. package/dist/domain/webBundleAnalyzerInspection.js +14 -2
  322. package/dist/domain/webCaptureDiff.js +102 -4
  323. package/dist/domain/webScriptExportError.js +10 -4
  324. package/dist/domain/webScriptExportPlan.js +7 -13
  325. package/dist/domain/zipPackageFormat.js +4 -1
  326. package/dist/domain/zodCollectionSteps.js +24 -0
  327. package/dist/dotnet/ManagedArtifactInspector.js +55 -43
  328. package/dist/dotnet/ManagedDecodeBudget.js +80 -0
  329. package/dist/dotnet/ManagedMemberInspector.js +13 -6
  330. package/dist/dotnet/ManagedMemberInspectorCore.js +2 -2
  331. package/dist/dotnet/ManagedMemberInstructionDecoder.js +4 -2
  332. package/dist/dotnet/ManagedMemberRows.js +9 -4
  333. package/dist/dotnet/ManagedMetadataHeaps.js +15 -5
  334. package/dist/dotnet/ManagedMetadataInventoryRows.js +20 -11
  335. package/dist/dotnet/ManagedMetadataLayout.js +10 -4
  336. package/dist/dotnet/ManagedMethodBodyReader.js +8 -3
  337. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +3 -2
  338. package/dist/dotnet/ManagedNativeBoundaryInspector.js +49 -34
  339. package/dist/dotnet/ManagedPeReader.js +41 -25
  340. package/dist/dotnet/ManagedReaderFailure.js +2 -1
  341. package/dist/dotnet/ManagedStaticProvider.js +55 -24
  342. package/dist/evaluation/AgentEvaluationReport.js +9 -5
  343. package/dist/evaluation/CodexAgentEval.js +43 -13
  344. package/dist/evm/EvmoleFailures.js +0 -2
  345. package/dist/evm/EvmoleInterfaceProvider.js +67 -2
  346. package/dist/filesystem/OwnedDirectoryHandle.js +29 -0
  347. package/dist/filesystem/OwnedFileHandle.js +36 -0
  348. package/dist/filesystem/RegularFile.js +33 -1
  349. package/dist/filesystem/StableFileHash.js +46 -0
  350. package/dist/filesystem/readFileHandleChunks.js +26 -0
  351. package/dist/firmware/FirmwareCommand.js +25 -3
  352. package/dist/firmware/FirmwareFiles.js +23 -8
  353. package/dist/firmware/FirmwareProvider.js +156 -32
  354. package/dist/firmware/FirmwarePublication.js +24 -3
  355. package/dist/firmware/FirmwareRelease.js +1 -0
  356. package/dist/generatedPackageMetadata.js +2 -2
  357. package/dist/ghidra/GhidraAnalysisProfile.js +55 -4
  358. package/dist/ghidra/GhidraAnalysisSeeds.js +211 -0
  359. package/dist/ghidra/GhidraClient.js +76 -4
  360. package/dist/ghidra/GhidraDiagnostics.js +11 -8
  361. package/dist/ghidra/GhidraFunctionValues.js +26 -2
  362. package/dist/ghidra/GhidraInstallation.js +1 -1
  363. package/dist/ghidra/GhidraInventoryValues.js +23 -1
  364. package/dist/ghidra/GhidraLanguageCatalog.js +99 -0
  365. package/dist/ghidra/GhidraLauncher.js +80 -39
  366. package/dist/ghidra/GhidraLoadImageAttest.js +49 -2
  367. package/dist/ghidra/GhidraMipsProfile.js +79 -0
  368. package/dist/ghidra/GhidraProvider.js +57 -9
  369. package/dist/ghidra/GhidraProviderCapabilities.js +18 -8
  370. package/dist/ghidra/GhidraProviderClient.js +282 -21
  371. package/dist/ghidra/GhidraSessionValues.js +9 -2
  372. package/dist/hopper/HopperAnalysisProfile.js +2 -0
  373. package/dist/hopper/HopperClient.js +15 -6
  374. package/dist/hopper/HopperMachOImage.js +2 -0
  375. package/dist/hopper/HopperProvider.js +13 -2
  376. package/dist/ida/IdaOperationRunner.js +8 -2
  377. package/dist/ida/IdaProvider.js +7 -0
  378. package/dist/ida/IdaSessionClient.js +3 -1
  379. package/dist/ida/IdaWorkspace.js +4 -2
  380. package/dist/javascript/analysis/JavaScriptAnalysisTransfer.js +326 -0
  381. package/dist/javascript/analysis/JavaScriptAnalysisWorker.js +520 -0
  382. package/dist/javascript/analysis/JavaScriptAnalysisWorkerProtocol.js +63 -0
  383. package/dist/javascript/analysis/JavaScriptAnalysisWorkerSchemas.js +521 -0
  384. package/dist/javascript/analysis/JavaScriptAnalysisWorkerServer.js +116 -0
  385. package/dist/javascript/recovery/RecoveryFiles.js +18 -7
  386. package/dist/javascript/recovery/WakaruCommand.js +22 -9
  387. package/dist/javascript/recovery/WakaruExecution.js +11 -7
  388. package/dist/javascript/recovery/WakaruProvider.js +139 -16
  389. package/dist/javascript/recovery/WakaruPublication.js +14 -4
  390. package/dist/javascript/recovery/WakaruRelease.js +10 -3
  391. package/dist/javascript/recovery/WakaruReport.js +12 -7
  392. package/dist/javascript/recovery/WakaruVersion.js +24 -0
  393. package/dist/javascript/sourceMaps/SourceMapCommand.js +16 -3
  394. package/dist/javascript/sourceMaps/SourceMapDecoder.js +63 -7
  395. package/dist/javascript/sourceMaps/SourceMapFormat.js +15 -4
  396. package/dist/jeb/JebMcpConnection.js +179 -0
  397. package/dist/jeb/JebMcpEndpoint.js +40 -0
  398. package/dist/jeb/JebProvider.js +299 -0
  399. package/dist/mcpDoctor.js +15 -6
  400. package/dist/native/AppleDispatchCoverage.js +25 -12
  401. package/dist/native/AppleDispatchMetadata.js +14 -7
  402. package/dist/native/AppleMachoFixups.js +71 -15
  403. package/dist/native/AppleMachoSelection.js +23 -3
  404. package/dist/native/NativeMacOSProvider.js +91 -16
  405. package/dist/native/NativeMachoInspection.js +11 -7
  406. package/dist/native/NativeUiHelperRuntime.js +6 -1
  407. package/dist/native/NativeUiObservation.js +4 -3
  408. package/dist/native/pe/PeResourceLayout.js +120 -0
  409. package/dist/native/pe/PeResourceParser.js +286 -0
  410. package/dist/native/pe/PeResourcesProvider.js +63 -0
  411. package/dist/process/BoundedFileBytes.js +30 -7
  412. package/dist/process/DarwinProcessRunTokenReader.js +8 -3
  413. package/dist/process/OwnedCommand.js +4 -3
  414. package/dist/process/ProcessOwnership.js +104 -112
  415. package/dist/process/ProcessOwnershipObservation.js +96 -39
  416. package/dist/process/ProcessOwnershipProcessTree.js +4 -4
  417. package/dist/process/ProcessRunTokenObservations.js +48 -0
  418. package/dist/process/ProviderDiagnosticRedaction.js +17 -0
  419. package/dist/process/ProviderProcess.js +4 -3
  420. package/dist/process/capture/FilesystemSnapshot.js +28 -4
  421. package/dist/process/capture/ProcessCaptureLifecycle.js +350 -59
  422. package/dist/process/capture/ProcessCaptureProgress.js +62 -0
  423. package/dist/process/capture/ProcessHarness.js +194 -26
  424. package/dist/process/capture/ProcessNormalization.js +3 -1
  425. package/dist/process/capture/ProcessScenarioRuntimeValidation.js +5 -2
  426. package/dist/process/capture/TerminalRenderer.js +24 -7
  427. package/dist/reference/ReferenceSourceReader.js +22 -5
  428. package/dist/reference/ReferenceSourceReaderEntries.js +114 -51
  429. package/dist/reference/ReferenceSourceReaderErrors.js +12 -0
  430. package/dist/reference/ReferenceSourceReaderFile.js +50 -10
  431. package/dist/reference/ReferenceSourceReaderValidate.js +4 -4
  432. package/dist/server/EvidenceMcpServer.js +36 -1
  433. package/dist/server/admittedToolOperation.js +9 -0
  434. package/dist/server/contractToolHandler.js +21 -0
  435. package/dist/server/createServer.js +97 -25
  436. package/dist/server/registerAdbTools.js +36 -0
  437. package/dist/server/registerAnalysisViewTool.js +4 -9
  438. package/dist/server/registerAndroidTools.js +3 -12
  439. package/dist/server/registerApktoolTools.js +14 -0
  440. package/dist/server/registerApplicationTools/compareExportShapes.js +4 -6
  441. package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
  442. package/dist/server/registerApplicationTools/compareVersions.js +3 -2
  443. package/dist/server/registerApplicationTools/coverage.js +3 -2
  444. package/dist/server/registerApplicationTools/obligationLedger.js +3 -2
  445. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -2
  446. package/dist/server/registerApplicationTools/traceFeature.js +3 -2
  447. package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
  448. package/dist/server/registerArtifactComparisonTool.js +5 -2
  449. package/dist/server/registerBinaryDiagnosticsTools.js +16 -4
  450. package/dist/server/registerBrowserScenarioTool.js +10 -7
  451. package/dist/server/registerBrowserTools.js +12 -9
  452. package/dist/server/registerBundleComparisonTool.js +16 -2
  453. package/dist/server/registerCloseLifecycleTool.js +32 -3
  454. package/dist/server/registerElectronTools.js +28 -10
  455. package/dist/server/registerEvmTools.js +4 -9
  456. package/dist/server/registerFirmwareTools.js +3 -11
  457. package/dist/server/registerFunctionComparisonTool.js +5 -2
  458. package/dist/server/registerJavaScriptRecoveryTool.js +4 -9
  459. package/dist/server/registerJavaScriptRuntimeObservationTools.js +9 -6
  460. package/dist/server/registerJebTools.js +16 -0
  461. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +4 -6
  462. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +3 -2
  463. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +3 -2
  464. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +3 -2
  465. package/dist/server/registerPeResourcesTool.js +9 -0
  466. package/dist/server/registerProcessComparisonTool.js +5 -2
  467. package/dist/server/registerRecordedCrashTools.js +4 -9
  468. package/dist/server/registerSessionRecordTools.js +2 -1
  469. package/dist/server/registerSessionTools.js +49 -18
  470. package/dist/server/registerWebModuleTool.js +4 -9
  471. package/dist/server/registerWebNetworkCaptureTool.js +4 -9
  472. package/dist/server/registerWebRuntimeTools.js +6 -5
  473. package/dist/server/registerWebScriptTool.js +6 -3
  474. package/dist/server/registerWebSourceLocationTool.js +4 -9
  475. package/dist/server/toolResult.js +21 -2
  476. package/dist/windows/WindowsPrivateRuntime.js +12 -5
  477. package/install.sh +7 -4
  478. package/licenses/nativeaot-parser-MIT.txt +28 -0
  479. package/native/windows/build/manifest.json +2 -2
  480. package/native/windows/build/rea-windows-x64.node +0 -0
  481. package/package.json +33 -5
  482. package/scripts/rea.mjs +16 -1
  483. package/skills/reverse-engineer-anything/SKILL.md +52 -51
  484. package/skills/reverse-engineer-anything/references/connection-and-recovery.md +127 -0
  485. package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -0
  486. package/skills/reverse-engineer-anything/references/javascript-applications.md +92 -13
  487. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +22 -1
@@ -7,10 +7,11 @@ import { inspectWebPageInputSchema } from "../domain/browserObservation.js";
7
7
  import { mcpProgressReporter } from "./mcpProgress.js";
8
8
  import { logToolExecution } from "./toolLogging.js";
9
9
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
10
+ import { runAdmittedToolOperation } from "./admittedToolOperation.js";
10
11
  /** Register browser tools with execution-time provider diagnostics. */
11
12
  // oxlint-disable-next-line max-lines-per-function -- direct SDK calls retain each schema-handler type correlation.
12
13
  export const registerBrowserTools = (server, options) => {
13
- const registration = { ...options, delivery: server.delivery };
14
+ const registration = { ...options, delivery: server.delivery, server };
14
15
  const listContract = toolContract("list_browser_targets");
15
16
  const inspectContract = toolContract("inspect_web_page");
16
17
  const analyzeContract = toolContract("analyze_web_bundle");
@@ -46,12 +47,14 @@ const runBrowserTool = async (options, contract, request, execute) => {
46
47
  const { input, context } = request;
47
48
  if (options.loadFailure !== undefined)
48
49
  return options.delivery.toCallToolResult(err(optionalProviderUnavailable(options.loadFailure, contract.name)), contract);
49
- const result = await logToolExecution(options.logger, contract.name, () => execute(input, {
50
- signal: context.mcpReq.signal,
51
- progress: mcpProgressReporter(context),
52
- }));
53
- if (!result.ok)
54
- return options.delivery.toCallToolResult(result, contract);
55
- const recorded = options.recordEvidence?.(result.value);
56
- return options.delivery.toEvidenceToolResult(result.value, contract, recorded);
50
+ return runAdmittedToolOperation(options.server, options.withAdmittedAnalysis, contract.name, context.mcpReq.signal, async () => {
51
+ const result = await logToolExecution(options.logger, contract.name, () => execute(input, {
52
+ signal: context.mcpReq.signal,
53
+ progress: mcpProgressReporter(context),
54
+ }));
55
+ if (!result.ok)
56
+ return options.delivery.toCallToolResult(result, contract);
57
+ const recorded = options.recordEvidence?.(result.value);
58
+ return options.delivery.toEvidenceToolResult(result.value, contract, recorded);
59
+ });
57
60
  };
@@ -4,11 +4,15 @@ import { compareBundles } from "../domain/bundleComparison.js";
4
4
  import { createEvidence } from "../domain/evidence.js";
5
5
  import { jsonValueSchema } from "../domain/jsonValue.js";
6
6
  import { runDerivedOperation } from "./runDerivedOperation.js";
7
+ import { recordSessionEvidenceSources } from "./sessionEvidence.js";
7
8
  import { BUNDLE_COMPARISON_PROVIDER } from "../application/InvestigationProviders.js";
8
9
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
10
+ import { withAdmittedAnalysis } from "./analysisAdmission.js";
11
+ import { runAdmittedToolOperation } from "./admittedToolOperation.js";
9
12
  /** Register canonical Evidence bundle comparison. */
10
13
  export const registerBundleComparisonTool = (server, session, contract) => {
11
- server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => {
14
+ const admission = withAdmittedAnalysis({ kind: "session", session });
15
+ server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => runAdmittedToolOperation(server, admission, contract.name, context.mcpReq.signal, async () => {
12
16
  const [left, right] = await Promise.all([
13
17
  readEvidenceBundle(input.left_bundle_path),
14
18
  readEvidenceBundle(input.right_bundle_path),
@@ -21,6 +25,15 @@ export const registerBundleComparisonTool = (server, session, contract) => {
21
25
  if (!computed.ok)
22
26
  return server.delivery.toCallToolResult(computed, contract);
23
27
  const comparison = computed.value;
28
+ const sourceRecords = [
29
+ ...new Map([...left.value.records, ...right.value.records].map((record) => [
30
+ record.evidence_id,
31
+ record,
32
+ ])).values(),
33
+ ];
34
+ const recordedSources = recordSessionEvidenceSources((evidence) => session.recordEvidence(evidence), sourceRecords);
35
+ if (!recordedSources.ok)
36
+ return server.delivery.toCallToolResult(recordedSources, contract);
24
37
  const evidence = createEvidence(undefined, BUNDLE_COMPARISON_PROVIDER, {
25
38
  predicateType: "rea.bundle-comparison",
26
39
  operation: contract.name,
@@ -33,8 +46,9 @@ export const registerBundleComparisonTool = (server, session, contract) => {
33
46
  confidence: "derived",
34
47
  authority: "analyst-inference",
35
48
  limitations: comparison.limitations,
49
+ evidenceLinks: sourceRecords.map(({ evidence_id }) => evidence_id),
36
50
  });
37
51
  const recorded = session.recordEvidence(evidence);
38
52
  return server.delivery.toEvidenceToolResult(evidence, contract, recorded);
39
- });
53
+ }));
40
54
  };
@@ -4,20 +4,49 @@ import { mcpProgressReporter } from "./mcpProgress.js";
4
4
  import { logToolExecution } from "./toolLogging.js";
5
5
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
6
6
  /** Register provider cleanup and optional pre-close snapshot persistence. */
7
- export const registerCloseLifecycleTool = ({ server, session, logger, closeContract, }) => {
7
+ export const registerCloseLifecycleTool = ({ server, session, logger, closeContract, closeProcessResources, }) => {
8
+ const closeWithResources = async (closeSession) => {
9
+ const [sessionClose, resourceClose] = await Promise.allSettled([
10
+ closeSession(),
11
+ closeProcessResources(),
12
+ ]);
13
+ if (sessionClose.status === "rejected") {
14
+ if (resourceClose.status === "rejected")
15
+ logger.warn({
16
+ error: resourceClose.reason instanceof Error
17
+ ? resourceClose.reason.message
18
+ : String(resourceClose.reason),
19
+ }, "Process capture cleanup threw while closing the session");
20
+ else if (!resourceClose.value.ok)
21
+ logger.warn({ error: resourceClose.value.error.message }, "Process capture cleanup failed while closing the session");
22
+ throw sessionClose.reason;
23
+ }
24
+ if (resourceClose.status === "rejected")
25
+ throw resourceClose.reason;
26
+ const closed = sessionClose.value;
27
+ const resources = resourceClose.value;
28
+ if (!closed.ok) {
29
+ if (!resources.ok)
30
+ logger.warn({ error: resources.error.message }, "Process capture cleanup failed while closing the session");
31
+ return closed;
32
+ }
33
+ return resources.ok ? closed : resources;
34
+ };
8
35
  server.registerTool(closeContract.name, toolRegistrationOptions(closeContract), async (input, context) => {
9
36
  const progress = mcpProgressReporter(context);
10
37
  const snapshotPath = input.snapshot_path;
11
38
  if (snapshotPath === undefined) {
12
39
  // Enqueue the lifecycle transition before awaiting progress transport so
13
40
  // a later open request cannot overtake this close.
14
- const closing = logToolExecution(logger, closeContract.name, () => session.close({ progress }));
41
+ const closing = logToolExecution(logger, closeContract.name, () => closeWithResources(() => session.close({ progress })));
15
42
  await reportLifecycleStart(progress, closeContract.name);
16
43
  const closed = await closing;
17
44
  await reportLifecycleEnd(progress, closeContract.name, closed.ok);
18
45
  return server.delivery.toCallToolResult(closed, closeContract);
19
46
  }
20
- const closing = logToolExecution(logger, closeContract.name, () => session.closeWithSnapshot(snapshotPath, input.overwrite, { progress }));
47
+ const closing = logToolExecution(logger, closeContract.name, () => closeWithResources(() => session.closeWithSnapshot(snapshotPath, input.overwrite, {
48
+ progress,
49
+ })));
21
50
  await reportLifecycleStart(progress, closeContract.name, "saving snapshot; closing provider");
22
51
  const closed = await closing;
23
52
  await reportLifecycleEnd(progress, closeContract.name, closed.ok);
@@ -1,3 +1,4 @@
1
+ import { summarizeRetainedAnalysis } from "../application/analysisView/AnalysisViewService.js";
1
2
  import { optionalProviderUnavailable, } from "../application/OptionalObservationProviders.js";
2
3
  import { err } from "../domain/result.js";
3
4
  import { captureElectronScenario } from "../application/javascript/ElectronActiveObservationService.js";
@@ -9,10 +10,11 @@ import { inspectElectronPageInputSchema } from "../domain/javascript/electronObs
9
10
  import { mcpProgressReporter } from "./mcpProgress.js";
10
11
  import { logToolExecution } from "./toolLogging.js";
11
12
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
13
+ import { runAdmittedToolOperation } from "./admittedToolOperation.js";
12
14
  /** Register Electron tools even when a provider is absent. */
13
15
  // oxlint-disable-next-line max-lines-per-function -- direct SDK calls retain each schema-handler type correlation.
14
16
  export const registerElectronTools = (server, options) => {
15
- const registration = { ...options, delivery: server.delivery };
17
+ const registration = { ...options, delivery: server.delivery, server };
16
18
  const listContract = toolContract("list_electron_targets");
17
19
  const inspectContract = toolContract("inspect_electron_page");
18
20
  const analyzeContract = toolContract("analyze_javascript_application");
@@ -28,7 +30,12 @@ export const registerElectronTools = (server, options) => {
28
30
  progress,
29
31
  });
30
32
  }));
31
- server.registerTool(analyzeContract.name, toolRegistrationOptions(analyzeContract), (input, context) => runElectronTool(registration, analyzeContract, { input, context }, (parsed, { signal, progress }) => analyzeJavaScriptApplicationValidated(parsed, { signal, progress })));
33
+ server.registerTool(analyzeContract.name, toolRegistrationOptions(analyzeContract), (input, context) => runElectronTool(registration, analyzeContract, { input, context }, async ({ detail, ...request }, { signal, progress }) => {
34
+ const analyzed = await analyzeJavaScriptApplicationValidated(request, options.artifactResources, { signal, progress });
35
+ return detail === "summary" && analyzed.ok
36
+ ? summarizeRetainedAnalysis(analyzed.value, options)
37
+ : analyzed;
38
+ }));
32
39
  server.registerTool(reconcileContract.name, toolRegistrationOptions(reconcileContract), (input, context) => runElectronTool(registration, reconcileContract, { input, context }, (parsed) => Promise.resolve(reconcileJavaScriptRuntimeEvidenceValidated(parsed))));
33
40
  server.registerTool(activeContract.name, toolRegistrationOptions(activeContract), (input, context) => runElectronTool(registration, activeContract, { input, context }, (parsed, { signal, progress }) => captureElectronScenario(options.electronActive, parsed, {
34
41
  signal,
@@ -45,12 +52,23 @@ const runElectronTool = async (options, contract, request, execute) => {
45
52
  : undefined;
46
53
  if (failure !== undefined)
47
54
  return options.delivery.toCallToolResult(err(optionalProviderUnavailable(failure, contract.name)), contract);
48
- const result = await logToolExecution(options.logger, contract.name, () => execute(input, {
49
- signal: context.mcpReq.signal,
50
- progress: mcpProgressReporter(context),
51
- }));
52
- if (!result.ok)
53
- return options.delivery.toCallToolResult(result, contract);
54
- const recorded = options.recordEvidence?.(result.value);
55
- return options.delivery.toEvidenceToolResult(result.value, contract, recorded);
55
+ return runAdmittedToolOperation(options.server, options.withAdmittedAnalysis, contract.name, context.mcpReq.signal, async () => {
56
+ const result = await logToolExecution(options.logger, contract.name, () => execute(input, {
57
+ signal: context.mcpReq.signal,
58
+ progress: mcpProgressReporter(context),
59
+ }));
60
+ if (!result.ok) {
61
+ const partial = result.error.partialObservation;
62
+ if (partial !== undefined &&
63
+ "evidence_id" in partial &&
64
+ typeof partial.evidence_id === "string") {
65
+ const recorded = options.recordEvidence?.(partial);
66
+ if (recorded !== undefined)
67
+ return options.delivery.toRecordedPartialErrorToolResult(result.error, partial.evidence_id, recorded);
68
+ }
69
+ return options.delivery.toCallToolResult(result, contract);
70
+ }
71
+ const recorded = options.recordEvidence?.(result.value);
72
+ return options.delivery.toEvidenceToolResult(result.value, contract, recorded);
73
+ });
56
74
  };
@@ -1,14 +1,9 @@
1
1
  import { toolContract } from "../contracts/toolContracts.js";
2
- import { logToolExecution } from "./toolLogging.js";
2
+ import { createEvidenceToolHandler } from "./contractToolHandler.js";
3
3
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
4
4
  /** Bind the named EVM contract to shared validation and session Evidence recording. */
5
- export const registerEvmTools = (server, service, logger, recordEvidence) => {
5
+ export const registerEvmTools = (server, service, logger, recordEvidence, withAdmittedAnalysis) => {
6
6
  const contract = toolContract("inspect_evm_interface");
7
- server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => {
8
- const result = await logToolExecution(logger, contract.name, () => service.inspect(input, { signal: context.mcpReq.signal }));
9
- if (!result.ok)
10
- return server.delivery.toCallToolResult(result, contract);
11
- const recorded = recordEvidence?.(result.value);
12
- return server.delivery.toEvidenceToolResult(result.value, contract, recorded);
13
- });
7
+ const handler = createEvidenceToolHandler(server, (input, options) => service.inspect(input, options), logger, recordEvidence, withAdmittedAnalysis);
8
+ server.registerTool(contract.name, toolRegistrationOptions(contract), handler(contract));
14
9
  };
@@ -1,17 +1,9 @@
1
1
  import { toolContract } from "../contracts/toolContracts.js";
2
- import { logToolExecution } from "./toolLogging.js";
2
+ import { createContractToolHandler } from "./contractToolHandler.js";
3
3
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
4
4
  /** Bind firmware handlers to their exact named schemas. */
5
- export const registerFirmwareTools = (server, service, logger, recordEvidence) => {
6
- const handler = (contract) => async (input, context) => {
7
- const result = await logToolExecution(logger, contract.name, () => service.execute(contract.name, input, {
8
- signal: context.mcpReq.signal,
9
- }));
10
- if (!result.ok)
11
- return server.delivery.toCallToolResult(result, contract);
12
- const recorded = recordEvidence?.(result.value);
13
- return server.delivery.toEvidenceToolResult(result.value, contract, recorded);
14
- };
5
+ export const registerFirmwareTools = (server, service, logger, recordEvidence, withAdmittedAnalysis) => {
6
+ const handler = createContractToolHandler(server, service, logger, recordEvidence, withAdmittedAnalysis);
15
7
  const inspect = toolContract("inspect_firmware_regions");
16
8
  server.registerTool(inspect.name, toolRegistrationOptions(inspect), handler(inspect));
17
9
  const extract = toolContract("extract_firmware");
@@ -8,10 +8,13 @@ import { recordSessionEvidenceSources } from "./sessionEvidence.js";
8
8
  import { runDerivedOperation } from "./runDerivedOperation.js";
9
9
  import { FUNCTION_COMPARISON_PROVIDER } from "../application/InvestigationProviders.js";
10
10
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
11
+ import { withAdmittedAnalysis } from "./analysisAdmission.js";
12
+ import { runAdmittedToolOperation } from "./admittedToolOperation.js";
11
13
  import { compareFunctions } from "../domain/functionComparison.js";
12
14
  /** Register explicit Evidence-backed function comparison. */
13
15
  export const registerFunctionComparisonTool = (server, session, contract) => {
14
- server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => {
16
+ const admission = withAdmittedAnalysis({ kind: "session", session });
17
+ server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => runAdmittedToolOperation(server, admission, contract.name, context.mcpReq.signal, async () => {
15
18
  let leftEvidence;
16
19
  let rightEvidence;
17
20
  try {
@@ -55,7 +58,7 @@ export const registerFunctionComparisonTool = (server, session, contract) => {
55
58
  comparisonEvidenceId: evidence.evidence_id,
56
59
  }));
57
60
  return server.delivery.toEvidenceToolResult(evidence, contract, recorded);
58
- });
61
+ }));
59
62
  };
60
63
  const functionUnknownInput = ({ status, leftIds, rightIds, comparisonEvidenceId, }) => {
61
64
  if (status === "unchanged")
@@ -1,14 +1,9 @@
1
1
  import { toolContract } from "../contracts/toolContracts.js";
2
- import { logToolExecution } from "./toolLogging.js";
2
+ import { createEvidenceToolHandler } from "./contractToolHandler.js";
3
3
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
4
4
  /** Bind optional recovery to its exact named contract without acquiring an engine. */
5
- export const registerJavaScriptRecoveryTool = (server, service, logger, recordEvidence) => {
5
+ export const registerJavaScriptRecoveryTool = (server, service, logger, recordEvidence, withAdmittedAnalysis) => {
6
6
  const contract = toolContract("recover_javascript_sources");
7
- server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => {
8
- const result = await logToolExecution(logger, contract.name, () => service.recover(input, { signal: context.mcpReq.signal }));
9
- if (!result.ok)
10
- return server.delivery.toCallToolResult(result, contract);
11
- const recorded = recordEvidence?.(result.value);
12
- return server.delivery.toEvidenceToolResult(result.value, contract, recorded);
13
- });
7
+ const handler = createEvidenceToolHandler(server, (input, options) => service.recover(input, options), logger, recordEvidence, withAdmittedAnalysis);
8
+ server.registerTool(contract.name, toolRegistrationOptions(contract), handler(contract));
14
9
  };
@@ -5,9 +5,10 @@ import { toolContract } from "../contracts/toolContracts.js";
5
5
  import { observeJavaScriptRuntimeInputSchema } from "../domain/javascript/javascriptRuntimeObservation.js";
6
6
  import { logToolExecution } from "./toolLogging.js";
7
7
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
8
+ import { runAdmittedToolOperation } from "./admittedToolOperation.js";
8
9
  /** Register passive Inspector tools even when policy keeps them unavailable. */
9
10
  export const registerJavaScriptRuntimeObservationTools = (server, options) => {
10
- const registration = { ...options, delivery: server.delivery };
11
+ const registration = { ...options, delivery: server.delivery, server };
11
12
  const listContract = toolContract("list_javascript_runtime_targets");
12
13
  const observeContract = toolContract("observe_javascript_runtime");
13
14
  server.registerTool(listContract.name, toolRegistrationOptions(listContract), (input, context) => runRuntimeTool(registration, listContract, { input, context }, (parsed, signal) => listJavaScriptRuntimeTargets(options.runtime, parsed, { signal })));
@@ -20,9 +21,11 @@ const runRuntimeTool = async (options, contract, request, execute) => {
20
21
  const { input, context } = request;
21
22
  if (options.loadFailure !== undefined)
22
23
  return options.delivery.toCallToolResult(err(optionalProviderUnavailable(options.loadFailure, contract.name)), contract);
23
- const result = await logToolExecution(options.logger, contract.name, () => execute(input, context.mcpReq.signal));
24
- if (!result.ok)
25
- return options.delivery.toCallToolResult(result, contract);
26
- const recorded = options.recordEvidence?.(result.value);
27
- return options.delivery.toEvidenceToolResult(result.value, contract, recorded);
24
+ return runAdmittedToolOperation(options.server, options.withAdmittedAnalysis, contract.name, context.mcpReq.signal, async () => {
25
+ const result = await logToolExecution(options.logger, contract.name, () => execute(input, context.mcpReq.signal));
26
+ if (!result.ok)
27
+ return options.delivery.toCallToolResult(result, contract);
28
+ const recorded = options.recordEvidence?.(result.value);
29
+ return options.delivery.toEvidenceToolResult(result.value, contract, recorded);
30
+ });
28
31
  };
@@ -0,0 +1,16 @@
1
+ import { JebAnalysisService } from "../application/jeb/JebAnalysisService.js";
2
+ import { toolContract } from "../contracts/toolContracts.js";
3
+ import { createContractToolHandler } from "./contractToolHandler.js";
4
+ import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
5
+ /** Bind JEB handlers to their exact named contracts through shared workflows. */
6
+ export const registerJebTools = (server, service, logger, recordEvidence, withAdmittedAnalysis) => {
7
+ const handler = createContractToolHandler(server, service, logger, recordEvidence, withAdmittedAnalysis);
8
+ const clientContract = toolContract("inspect_jeb_client");
9
+ server.registerTool(clientContract.name, toolRegistrationOptions(clientContract), handler(clientContract));
10
+ const openContract = toolContract("open_jeb_project");
11
+ server.registerTool(openContract.name, toolRegistrationOptions(openContract), handler(openContract));
12
+ const unitsContract = toolContract("list_jeb_units");
13
+ server.registerTool(unitsContract.name, toolRegistrationOptions(unitsContract), handler(unitsContract));
14
+ const decompileContract = toolContract("decompile_jeb_item");
15
+ server.registerTool(decompileContract.name, toolRegistrationOptions(decompileContract), handler(decompileContract));
16
+ };
@@ -1,3 +1,4 @@
1
+ import { runAdmittedToolOperation } from "../admittedToolOperation.js";
1
2
  import { recordSessionEvidenceSources } from "../sessionEvidence.js";
2
3
  import { compareManagedMembersEvidenceValidated } from "../../application/managed/ManagedMemberComparisonService.js";
3
4
  import { managedMemberComparisonResultSchema } from "../../domain/managed/managedMemberComparison.js";
@@ -8,7 +9,7 @@ import { resolveManagedEvidence } from "./evidence.js";
8
9
  const compareContract = managedWorkflowContract("compare_managed_members");
9
10
  /** Register the managed member comparison workflow tool. */
10
11
  export const registerCompareManagedMembers = (server, options) => {
11
- server.registerTool(compareContract.name, toolRegistrationOptions(compareContract), async (input) => {
12
+ server.registerTool(compareContract.name, toolRegistrationOptions(compareContract), async (input, context) => runAdmittedToolOperation(server, options.withAdmittedAnalysis, compareContract.name, context.mcpReq.signal, async () => {
12
13
  const leftResolved = resolveManagedEvidence(input.left);
13
14
  const rightResolved = resolveManagedEvidence(input.right);
14
15
  if (!leftResolved.ok)
@@ -23,10 +24,7 @@ export const registerCompareManagedMembers = (server, options) => {
23
24
  const result = await logToolExecution(options.logger, compareContract.name, () => Promise.resolve(compareManagedMembersEvidenceValidated(parsed)));
24
25
  if (!result.ok)
25
26
  return server.delivery.toCallToolResult(result, compareContract);
26
- const recorded = recordSessionEvidenceSources(options.recordEvidence, [
27
- parsed.left,
28
- parsed.right,
29
- ]);
27
+ const recorded = recordSessionEvidenceSources(options.recordEvidence, [parsed.left, parsed.right]);
30
28
  if (!recorded.ok)
31
29
  return server.delivery.toCallToolResult(recorded, compareContract);
32
30
  const comparison = managedMemberComparisonResultSchema.parse(result.value.normalized_result);
@@ -51,5 +49,5 @@ export const registerCompareManagedMembers = (server, options) => {
51
49
  })
52
50
  : options.recordEvidence?.(result.value);
53
51
  return server.delivery.toEvidenceToolResult(result.value, compareContract, output);
54
- });
52
+ }));
55
53
  };
@@ -1,3 +1,4 @@
1
+ import { runAdmittedToolOperation } from "../admittedToolOperation.js";
1
2
  import { importManagedReconstructionEvidenceValidated } from "../../application/managed/ManagedReconstructionService.js";
2
3
  import { logToolExecution } from "../toolLogging.js";
3
4
  import { toolRegistrationOptions } from "../toolRegistrationOptions.js";
@@ -6,7 +7,7 @@ import { resolveManagedEvidence } from "./evidence.js";
6
7
  const reconstructionContract = managedWorkflowContract("import_managed_reconstruction");
7
8
  /** Register the managed reconstruction import workflow tool. */
8
9
  export const registerImportManagedReconstruction = (server, options) => {
9
- server.registerTool(reconstructionContract.name, toolRegistrationOptions(reconstructionContract), async (input) => {
10
+ server.registerTool(reconstructionContract.name, toolRegistrationOptions(reconstructionContract), async (input, context) => runAdmittedToolOperation(server, options.withAdmittedAnalysis, reconstructionContract.name, context.mcpReq.signal, async () => {
10
11
  const resolved = resolveManagedEvidence(input.static_members);
11
12
  if (!resolved.ok)
12
13
  return server.delivery.toCallToolResult(resolved, reconstructionContract);
@@ -22,5 +23,5 @@ export const registerImportManagedReconstruction = (server, options) => {
22
23
  return server.delivery.toCallToolResult(recordedSource, reconstructionContract);
23
24
  const recorded = options.recordEvidence?.(result.value);
24
25
  return server.delivery.toEvidenceToolResult(result.value, reconstructionContract, recorded);
25
- });
26
+ }));
26
27
  };
@@ -1,3 +1,4 @@
1
+ import { runAdmittedToolOperation } from "../admittedToolOperation.js";
1
2
  import { recordSessionEvidenceSources } from "../sessionEvidence.js";
2
3
  import { projectManagedApplicationGraphEvidence } from "../../application/managed/ManagedApplicationGraphService.js";
3
4
  import { logToolExecution } from "../toolLogging.js";
@@ -7,7 +8,7 @@ import { resolveManagedArtifactEvidence, resolveManagedBoundaryEvidence, resolve
7
8
  const graphContract = managedWorkflowContract("project_managed_application_graph");
8
9
  /** Register the managed application graph projection workflow tool. */
9
10
  export const registerProjectManagedApplicationGraph = (server, options) => {
10
- server.registerTool(graphContract.name, toolRegistrationOptions(graphContract), async (input) => {
11
+ server.registerTool(graphContract.name, toolRegistrationOptions(graphContract), async (input, context) => runAdmittedToolOperation(server, options.withAdmittedAnalysis, graphContract.name, context.mcpReq.signal, async () => {
11
12
  const managedArtifact = input.managed_artifact === undefined
12
13
  ? undefined
13
14
  : resolveManagedArtifactEvidence(input.managed_artifact);
@@ -36,5 +37,5 @@ export const registerProjectManagedApplicationGraph = (server, options) => {
36
37
  return server.delivery.toCallToolResult(recordedSources, graphContract);
37
38
  const recorded = options.recordEvidence?.(result.value);
38
39
  return server.delivery.toEvidenceToolResult(result.value, graphContract, recorded);
39
- });
40
+ }));
40
41
  };
@@ -1,3 +1,4 @@
1
+ import { runAdmittedToolOperation } from "../admittedToolOperation.js";
1
2
  import { recordSessionEvidenceSources } from "../sessionEvidence.js";
2
3
  import { verifyManagedNativeBoundariesEvidence } from "../../application/managed/ManagedNativeVerificationService.js";
3
4
  import { managedNativeVerificationResultSchema } from "../../domain/managed/managedNativeVerificationSchemas.js";
@@ -8,7 +9,7 @@ import { resolveManagedBoundaryEvidence, resolveNativeEvidence, } from "./eviden
8
9
  const nativeVerificationContract = managedWorkflowContract("verify_managed_native_boundaries");
9
10
  /** Register the managed/native boundary verification workflow tool. */
10
11
  export const registerVerifyManagedNativeBoundaries = (server, options) => {
11
- server.registerTool(nativeVerificationContract.name, toolRegistrationOptions(nativeVerificationContract), async (input) => {
12
+ server.registerTool(nativeVerificationContract.name, toolRegistrationOptions(nativeVerificationContract), async (input, context) => runAdmittedToolOperation(server, options.withAdmittedAnalysis, nativeVerificationContract.name, context.mcpReq.signal, async () => {
12
13
  const managedBoundaries = resolveManagedBoundaryEvidence(input.managed_boundaries);
13
14
  if (!managedBoundaries.ok)
14
15
  return server.delivery.toCallToolResult(managedBoundaries, nativeVerificationContract);
@@ -57,5 +58,5 @@ export const registerVerifyManagedNativeBoundaries = (server, options) => {
57
58
  })
58
59
  : options.recordEvidence?.(result.value);
59
60
  return server.delivery.toEvidenceToolResult(result.value, nativeVerificationContract, output);
60
- });
61
+ }));
61
62
  };
@@ -0,0 +1,9 @@
1
+ import { toolContract } from "../contracts/toolContracts.js";
2
+ import { createEvidenceToolHandler } from "./contractToolHandler.js";
3
+ import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
4
+ /** Register the explicit-file PE resource workflow and retain its complete Evidence. */
5
+ export const registerPeResourcesTool = (server, service, logger, recordEvidence, withAdmittedAnalysis) => {
6
+ const contract = toolContract("inspect_pe_resources");
7
+ const handler = createEvidenceToolHandler(server, (input, options) => service.inspect(input, options), logger, recordEvidence, withAdmittedAnalysis);
8
+ server.registerTool(contract.name, toolRegistrationOptions(contract), handler(contract));
9
+ };
@@ -13,6 +13,8 @@ import { recordSessionEvidenceSources } from "./sessionEvidence.js";
13
13
  import { runDerivedOperation } from "./runDerivedOperation.js";
14
14
  import { PROCESS_PROVIDER } from "../domain/process/processEvidenceProvider.js";
15
15
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
16
+ import { withAdmittedAnalysis } from "./analysisAdmission.js";
17
+ import { runAdmittedToolOperation } from "./admittedToolOperation.js";
16
18
  const PROCESS_CAPTURE_EVIDENCE = {
17
19
  operation: "capture_process_scenario",
18
20
  predicate: "rea.process-capture",
@@ -57,7 +59,8 @@ const parseCaptureSide = (operation, side, value) => {
57
59
  };
58
60
  /** Register deterministic process-capture comparison and contradiction tracking. */
59
61
  export const registerProcessComparisonTool = (server, session, contract, now = Date.now) => {
60
- server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => {
62
+ const admission = withAdmittedAnalysis({ kind: "session", session });
63
+ server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => runAdmittedToolOperation(server, admission, contract.name, context.mcpReq.signal, async () => {
61
64
  const left = parseCaptureSide(contract.name, "left", input.left);
62
65
  if (!left.ok)
63
66
  return server.delivery.toCallToolResult(left, contract);
@@ -105,7 +108,7 @@ export const registerProcessComparisonTool = (server, session, contract, now = D
105
108
  right_evidence_id: rightRecord.evidence_id,
106
109
  comparison_evidence_id: evidence.evidence_id,
107
110
  }, comparison)));
108
- });
111
+ }));
109
112
  };
110
113
  const comparisonUnknownInput = (parsed, comparison) => {
111
114
  if (comparison.status === "unchanged")
@@ -1,14 +1,9 @@
1
1
  import { toolContract } from "../contracts/toolContracts.js";
2
- import { logToolExecution } from "./toolLogging.js";
2
+ import { createEvidenceToolHandler } from "./contractToolHandler.js";
3
3
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
4
4
  /** Bind recorded crash inspection to its named contract and session Evidence owner. */
5
- export const registerRecordedCrashTools = (server, service, logger, recordEvidence) => {
5
+ export const registerRecordedCrashTools = (server, service, logger, recordEvidence, withAdmittedAnalysis) => {
6
6
  const contract = toolContract("inspect_recorded_crash");
7
- server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => {
8
- const result = await logToolExecution(logger, contract.name, () => service.inspect(input, { signal: context.mcpReq.signal }));
9
- if (!result.ok)
10
- return server.delivery.toCallToolResult(result, contract);
11
- const recorded = recordEvidence?.(result.value);
12
- return server.delivery.toEvidenceToolResult(result.value, contract, recorded);
13
- });
7
+ const handler = createEvidenceToolHandler(server, (input, options) => service.inspect(input, options), logger, recordEvidence, withAdmittedAnalysis);
8
+ server.registerTool(contract.name, toolRegistrationOptions(contract), handler(contract));
14
9
  };
@@ -1,6 +1,7 @@
1
1
  import { readEvidenceBundle, writeEvidenceBundle, } from "../application/EvidenceBundleFiles.js";
2
2
  import { toolContract } from "../contracts/toolContracts.js";
3
3
  import { ok } from "../domain/result.js";
4
+ import { inspectEvidenceBundle } from "../application/investigation/InspectEvidenceBundle.js";
4
5
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
5
6
  /** Register evidence bundle import and export tools. */
6
7
  export const registerEvidenceTools = (registration) => {
@@ -23,7 +24,7 @@ const registerExportEvidenceTool = ({ server, session, exportContract, }) => {
23
24
  });
24
25
  };
25
26
  const registerSnapshotEvidenceTool = ({ server, session, snapshotContract, }) => {
26
- server.registerTool(snapshotContract.name, toolRegistrationOptions(snapshotContract), () => server.delivery.toCallToolResult(ok(bundleForSerialization(session)), snapshotContract));
27
+ server.registerTool(snapshotContract.name, toolRegistrationOptions(snapshotContract), (input) => server.delivery.toCallToolResult(inspectEvidenceBundle(bundleForSerialization(session), input), snapshotContract));
27
28
  };
28
29
  const registerImportEvidenceTool = ({ server, session, importContract, }) => {
29
30
  server.registerTool(importContract.name, toolRegistrationOptions(importContract), async (input) => {