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
@@ -1,4 +1,6 @@
1
1
  import { snapshotEnvironment } from "../process/snapshotEnvironment.js";
2
+ import { createPeResourcesService } from "../composition/binaryDiagnostics.js";
3
+ import { registerPeResourcesTool } from "./registerPeResourcesTool.js";
2
4
  import { createEvmInterfaceService } from "../composition/evm.js";
3
5
  import { registerEvmTools } from "./registerEvmTools.js";
4
6
  import { registerRecordedCrashTools } from "./registerRecordedCrashTools.js";
@@ -9,6 +11,7 @@ import { createBinaryLayoutService } from "../composition/binaryDiagnostics.js";
9
11
  import { EvidenceMcpServer } from "./EvidenceMcpServer.js";
10
12
  import { createToolResultDelivery, } from "./toolResult.js";
11
13
  import { parseMcpResponseBudget } from "../config/mcpResponseBudget.js";
14
+ import { COMPACT_INPUT_SCHEMA_BUDGET_BYTES, parseMcpInputSchemaProfile, } from "../config/mcpInputSchemaProfile.js";
12
15
  import { isAbsolute } from "node:path";
13
16
  import { PRODUCT_IDENTITY } from "../identity.js";
14
17
  import { silentLogger } from "../logger.js";
@@ -29,6 +32,7 @@ import { registerJavaScriptRecoveryTool } from "./registerJavaScriptRecoveryTool
29
32
  import { JavaScriptRecoveryService } from "../application/javascript/JavaScriptRecoveryService.js";
30
33
  import { createJavaScriptRecoveryProvider } from "../composition/javascriptRecovery.js";
31
34
  import { registerElectronTools } from "./registerElectronTools.js";
35
+ import { ArtifactResourceScope } from "../artifacts/ArtifactResourceScope.js";
32
36
  import { registerEnhancedTools } from "./registerEnhancedTools.js";
33
37
  import { registerJavaScriptRuntimeObservationTools } from "./registerJavaScriptRuntimeObservationTools.js";
34
38
  import { registerManagedTools } from "./registerManagedTools.js";
@@ -36,8 +40,17 @@ import { registerFirmwareTools } from "./registerFirmwareTools.js";
36
40
  import { FirmwareAnalysisService } from "../application/firmware/FirmwareAnalysisService.js";
37
41
  import { createFirmwareAnalysisProvider } from "../composition/firmware.js";
38
42
  import { registerAndroidTools } from "./registerAndroidTools.js";
43
+ import { registerApktoolTools } from "./registerApktoolTools.js";
44
+ import { registerJebTools } from "./registerJebTools.js";
45
+ import { registerAdbTools } from "./registerAdbTools.js";
39
46
  import { AndroidAnalysisService } from "../application/android/AndroidAnalysisService.js";
47
+ import { JebAnalysisService } from "../application/jeb/JebAnalysisService.js";
48
+ import { ApktoolResourceAnalysisService } from "../application/apktool/ApktoolResourceAnalysisService.js";
40
49
  import { createAndroidAnalysisProvider } from "../composition/android.js";
50
+ import { createApktoolResourceAnalysisProvider } from "../composition/apktool.js";
51
+ import { createJebAnalysisProvider } from "../composition/jeb.js";
52
+ import { AdbDeviceAnalysisService } from "../application/adb/AdbDeviceAnalysisService.js";
53
+ import { createAdbDeviceAnalysisProvider } from "../composition/adb.js";
41
54
  import { registerManagedWorkflowTools } from "./registerManagedWorkflowTools.js";
42
55
  import { NATIVE_TOOL_CONTRACTS } from "../contracts/native/nativeToolContracts.js";
43
56
  import { registerEvidenceTools } from "./registerEvidenceTools.js";
@@ -79,7 +92,7 @@ const installSessionToolAvailability = (session, options, environment) => {
79
92
  policy,
80
93
  };
81
94
  };
82
- const createMcpServer = (session, delivery) => new EvidenceMcpServer({
95
+ const createMcpServer = (session, delivery, compactPresentation) => new EvidenceMcpServer({
83
96
  name: PRODUCT_IDENTITY.mcpServerKey,
84
97
  version: PRODUCT_IDENTITY.packageVersion,
85
98
  }, {
@@ -89,7 +102,7 @@ const createMcpServer = (session, delivery) => new EvidenceMcpServer({
89
102
  : TARGET_FREE_INSTRUCTIONS,
90
103
  }, session === undefined
91
104
  ? undefined
92
- : (evidence) => session.recordEvidence(evidence), delivery);
105
+ : (evidence) => session.recordEvidence(evidence), delivery, compactPresentation);
93
106
  /**
94
107
  * Construct one MCP server without acquiring subprocess resources.
95
108
  * Supplying a session adds target lifecycle tools; omitting it retains the
@@ -100,14 +113,56 @@ export const createServer = (source, options = {}) => {
100
113
  const analysis = source.kind === "session" ? source.session : source.analysis;
101
114
  const environment = snapshotEnvironment(options.environment ?? process.env);
102
115
  const delivery = selectToolResultDelivery(environment, options.delivery);
103
- const selectedOptions = { ...options, environment, delivery };
116
+ const evmInterface = options.evmInterface ?? createEvmInterfaceService(environment);
117
+ const webSourceLocation = options.webSourceLocation ?? createWebSourceLocationService(environment);
118
+ const javascriptRecovery = options.javascriptRecovery ?? createJavaScriptRecoveryProvider(environment);
119
+ const artifactResources = new ArtifactResourceScope();
120
+ const firmwareAnalysis = new FirmwareAnalysisService(options.firmwareAnalysis ?? createFirmwareAnalysisProvider(environment));
121
+ const selectedOptions = {
122
+ ...options,
123
+ environment,
124
+ delivery,
125
+ evmInterface,
126
+ webSourceLocation,
127
+ javascriptRecovery,
128
+ };
104
129
  const startedAt = new Date().toISOString();
105
130
  const logger = options.logger ?? silentLogger;
106
- const server = createMcpServer(session, delivery);
131
+ const server = createMcpServer(session, delivery, selectCompactInputSchemaPresentation(environment));
107
132
  const android = options.androidAnalysis ?? createAndroidAnalysisProvider(environment);
108
- const availability = installSessionToolAvailability(session, selectedOptions, environment);
133
+ const apktool = options.apktoolAnalysis ??
134
+ createApktoolResourceAnalysisProvider(environment);
135
+ const jeb = options.jebAnalysis ?? createJebAnalysisProvider(environment);
136
+ const adbDevice = options.adbDeviceAnalysis ?? createAdbDeviceAnalysisProvider(environment);
137
+ let providerClose;
138
+ const closeProviders = () => {
139
+ providerClose ??= Promise.allSettled([
140
+ android.close(),
141
+ apktool.close(),
142
+ jeb.close(),
143
+ adbDevice.close(),
144
+ evmInterface.close(),
145
+ webSourceLocation.close(),
146
+ javascriptRecovery.close?.() ?? Promise.resolve(),
147
+ artifactResources.close(),
148
+ firmwareAnalysis.close(),
149
+ options.browserScenarioCapture?.close?.() ?? Promise.resolve(),
150
+ ])
151
+ .then((results) => {
152
+ const failures = results.flatMap((result) => result.status === "rejected" ? [result.reason] : []);
153
+ if (failures.length > 0)
154
+ throw new AggregateError(failures, "REA provider cleanup failed");
155
+ })
156
+ .catch((cause) => {
157
+ providerClose = undefined;
158
+ throw cause;
159
+ });
160
+ return providerClose;
161
+ };
162
+ const availability = installSessionToolAvailability(session, options, environment);
109
163
  const toolLogger = logger.child({ layer: "server" });
110
164
  const { evidenceById, activeTarget, recordEvidence, recordEvidenceWithUnknown, } = createSessionRecorders(server, session);
165
+ const analysisAdmission = withAdmittedAnalysis(source);
111
166
  const toolContext = {
112
167
  server,
113
168
  session,
@@ -118,24 +173,27 @@ export const createServer = (source, options = {}) => {
118
173
  activeTarget,
119
174
  recordEvidence,
120
175
  recordEvidenceWithUnknown,
121
- withAdmittedAnalysis: withAdmittedAnalysis(source),
176
+ withAdmittedAnalysis: analysisAdmission,
177
+ artifactResources,
122
178
  };
123
179
  registerBinaryAnalysisTools(toolContext);
124
180
  const previousOnclose = server.server.onclose;
125
181
  server.server.onclose = () => {
126
182
  previousOnclose?.();
127
- void android.close().catch((cause) => {
128
- logger.error({ error: cause instanceof Error ? cause.message : String(cause) }, "Android provider cleanup failed");
183
+ void closeProviders().catch((cause) => {
184
+ logger.error({ error: cause instanceof Error ? cause.message : String(cause) }, "Provider cleanup failed during server shutdown");
129
185
  });
130
186
  };
131
187
  const closeServer = server.close.bind(server);
132
188
  server.close = async () => {
133
- const results = await Promise.allSettled([closeServer(), android.close()]);
189
+ const results = await Promise.allSettled([closeServer(), closeProviders()]);
134
190
  for (const result of results)
135
191
  if (result.status === "rejected")
136
192
  throw result.reason;
137
193
  };
138
- registerConfiguredAnalysisTools(toolContext, android);
194
+ registerConfiguredAnalysisTools(toolContext, android, jeb, firmwareAnalysis);
195
+ registerAdbTools(server, new AdbDeviceAnalysisService(adbDevice), toolLogger, recordEvidence, analysisAdmission);
196
+ registerApktoolTools(server, new ApktoolResourceAnalysisService(apktool), toolLogger, recordEvidence, analysisAdmission);
139
197
  registerObservationTools(toolContext);
140
198
  registerGuidedPrompts(server, analysis, session);
141
199
  if (session !== undefined) {
@@ -158,19 +216,29 @@ const selectToolResultDelivery = (environment, selected) => {
158
216
  throw configured.error;
159
217
  return createToolResultDelivery(configured.value);
160
218
  };
161
- const registerConfiguredAnalysisTools = ({ server, options, environment, logger: toolLogger, evidenceById, recordEvidence, }, android) => {
162
- registerAndroidTools(server, new AndroidAnalysisService(android), toolLogger, recordEvidence);
163
- registerBinaryDiagnosticsTools(server, options.binaryLayout ?? createBinaryLayoutService(environment), toolLogger, recordEvidence);
164
- registerAnalysisViewTool(server, toolLogger, evidenceById, recordEvidence);
165
- registerEvmTools(server, options.evmInterface ?? createEvmInterfaceService(environment), toolLogger, recordEvidence);
166
- registerRecordedCrashTools(server, options.recordedCrash ?? createRecordedCrashService(environment), toolLogger, recordEvidence);
167
- registerFirmwareTools(server, new FirmwareAnalysisService(options.firmwareAnalysis ?? createFirmwareAnalysisProvider(environment)), toolLogger, recordEvidence);
168
- registerWebModuleTool(server, options.webModuleTrace ?? createWebModuleTraceService(environment), toolLogger, recordEvidence);
169
- registerWebSourceLocationTool(server, options.webSourceLocation ?? createWebSourceLocationService(environment), toolLogger, recordEvidence);
170
- registerWebRuntimeTools(server, options.webRuntime ?? createWebRuntimeService(), toolLogger, recordEvidence);
171
- registerWebNetworkCaptureTool(server, options.webNetworkCapture ?? createWebNetworkCaptureService(environment), toolLogger, recordEvidence);
219
+ const selectCompactInputSchemaPresentation = (environment) => {
220
+ const configured = parseMcpInputSchemaProfile(environment.REA_MCP_INPUT_SCHEMA_PROFILE);
221
+ if (!configured.ok)
222
+ throw configured.error;
223
+ return configured.value === "compact"
224
+ ? { budgetBytes: COMPACT_INPUT_SCHEMA_BUDGET_BYTES }
225
+ : undefined;
226
+ };
227
+ const registerConfiguredAnalysisTools = ({ server, options, environment, logger: toolLogger, evidenceById, recordEvidence, withAdmittedAnalysis, }, android, jeb, firmwareAnalysis) => {
228
+ registerAndroidTools(server, new AndroidAnalysisService(android), toolLogger, recordEvidence, withAdmittedAnalysis);
229
+ registerJebTools(server, new JebAnalysisService(jeb), toolLogger, recordEvidence, withAdmittedAnalysis);
230
+ registerBinaryDiagnosticsTools(server, options.binaryLayout ?? createBinaryLayoutService(environment), toolLogger, recordEvidence, evidenceById, withAdmittedAnalysis);
231
+ registerAnalysisViewTool(server, toolLogger, evidenceById, recordEvidence, withAdmittedAnalysis);
232
+ registerPeResourcesTool(server, createPeResourcesService(), toolLogger, recordEvidence, withAdmittedAnalysis);
233
+ registerEvmTools(server, options.evmInterface ?? createEvmInterfaceService(environment), toolLogger, recordEvidence, withAdmittedAnalysis);
234
+ registerRecordedCrashTools(server, options.recordedCrash ?? createRecordedCrashService(environment), toolLogger, recordEvidence, withAdmittedAnalysis);
235
+ registerFirmwareTools(server, firmwareAnalysis, toolLogger, recordEvidence, withAdmittedAnalysis);
236
+ registerWebModuleTool(server, options.webModuleTrace ?? createWebModuleTraceService(environment), toolLogger, recordEvidence, withAdmittedAnalysis);
237
+ registerWebSourceLocationTool(server, options.webSourceLocation ?? createWebSourceLocationService(environment), toolLogger, recordEvidence, withAdmittedAnalysis);
238
+ registerWebRuntimeTools(server, options.webRuntime ?? createWebRuntimeService(), toolLogger, recordEvidence, withAdmittedAnalysis);
239
+ registerWebNetworkCaptureTool(server, options.webNetworkCapture ?? createWebNetworkCaptureService(environment), toolLogger, recordEvidence, withAdmittedAnalysis);
172
240
  registerJavaScriptRecoveryTool(server, new JavaScriptRecoveryService(options.javascriptRecovery ??
173
- createJavaScriptRecoveryProvider(environment)), toolLogger, recordEvidence);
241
+ createJavaScriptRecoveryProvider(environment)), toolLogger, recordEvidence, withAdmittedAnalysis);
174
242
  };
175
243
  const createSessionRecorders = (server, session) => ({
176
244
  evidenceById: session === undefined
@@ -222,11 +290,12 @@ const registerBinaryAnalysisTools = ({ server, session, logger, activeTarget, re
222
290
  recordEvidence,
223
291
  recordEvidenceWithUnknown,
224
292
  session,
293
+ withAdmittedAnalysis,
225
294
  });
226
295
  };
227
- const registerObservationTools = ({ evidenceById, server, options, logger, recordEvidence, recordEvidenceWithUnknown, }) => {
228
- const common = { logger, recordEvidence };
229
- registerWebScriptTool(server, common);
296
+ const registerObservationTools = ({ evidenceById, server, options, logger, recordEvidence, recordEvidenceWithUnknown, withAdmittedAnalysis, artifactResources, }) => {
297
+ const common = { logger, recordEvidence, withAdmittedAnalysis };
298
+ registerWebScriptTool(server, { ...common, artifactResources });
230
299
  registerBrowserTools(server, {
231
300
  ...common,
232
301
  browser: options.browserObservation,
@@ -239,6 +308,8 @@ const registerObservationTools = ({ evidenceById, server, options, logger, recor
239
308
  });
240
309
  registerElectronTools(server, {
241
310
  ...common,
311
+ artifactResources,
312
+ evidenceById,
242
313
  electron: options.electronObservation,
243
314
  electronActive: options.electronActiveObservation,
244
315
  observationLoadFailure: options.optionalProviderLoadFailures?.electronObservation,
@@ -254,5 +325,6 @@ const registerObservationTools = ({ evidenceById, server, options, logger, recor
254
325
  logger,
255
326
  recordEvidence,
256
327
  recordEvidenceWithUnknown,
328
+ withAdmittedAnalysis,
257
329
  });
258
330
  };
@@ -0,0 +1,36 @@
1
+ import { AdbDeviceAnalysisService } from "../application/adb/AdbDeviceAnalysisService.js";
2
+ import { toolContract } from "../contracts/toolContracts.js";
3
+ import { createContractToolHandler } from "./contractToolHandler.js";
4
+ import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
5
+ /** Bind ADB handlers to their exact named contracts through shared workflows. */
6
+ export const registerAdbTools = (server, service, logger, recordEvidence, withAdmittedAnalysis) => {
7
+ const handler = createContractToolHandler(server, service, logger, recordEvidence, withAdmittedAnalysis);
8
+ for (const contract of [
9
+ toolContract("inspect_adb_client"),
10
+ toolContract("list_adb_devices"),
11
+ toolContract("inspect_adb_device"),
12
+ toolContract("list_adb_packages"),
13
+ toolContract("pull_adb_package"),
14
+ toolContract("read_adb_logcat"),
15
+ toolContract("inspect_adb_package"),
16
+ toolContract("pull_adb_file"),
17
+ toolContract("push_adb_file"),
18
+ toolContract("capture_adb_screen"),
19
+ toolContract("list_adb_processes"),
20
+ toolContract("list_adb_directory"),
21
+ toolContract("list_adb_features"),
22
+ toolContract("list_adb_services"),
23
+ toolContract("inspect_adb_display"),
24
+ toolContract("inspect_adb_window"),
25
+ toolContract("read_adb_setting"),
26
+ toolContract("collect_adb_bugreport"),
27
+ toolContract("resolve_adb_packages"),
28
+ toolContract("install_adb_package"),
29
+ toolContract("uninstall_adb_package"),
30
+ toolContract("start_adb_app"),
31
+ toolContract("start_adb_activity"),
32
+ toolContract("stop_adb_app"),
33
+ ]) {
34
+ server.registerTool(contract.name, toolRegistrationOptions(contract), handler(contract));
35
+ }
36
+ };
@@ -1,15 +1,10 @@
1
1
  import { inspectAnalysisView } from "../application/analysisView/AnalysisViewService.js";
2
2
  import { toolContract } from "../contracts/toolContracts.js";
3
- import { logToolExecution } from "./toolLogging.js";
3
+ import { createEvidenceToolHandler } from "./contractToolHandler.js";
4
4
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
5
5
  /** Bind selected-view projection to its named contract and session Evidence owner. */
6
- export const registerAnalysisViewTool = (server, logger, evidenceById, recordEvidence) => {
6
+ export const registerAnalysisViewTool = (server, logger, evidenceById, recordEvidence, withAdmittedAnalysis) => {
7
7
  const contract = toolContract("inspect_analysis_view");
8
- server.registerTool(contract.name, toolRegistrationOptions(contract), async (input) => {
9
- const result = await logToolExecution(logger, contract.name, () => Promise.resolve(inspectAnalysisView(input, evidenceById)));
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
- });
8
+ const handler = createEvidenceToolHandler(server, (input) => Promise.resolve(inspectAnalysisView(input, evidenceById)), logger, recordEvidence, withAdmittedAnalysis);
9
+ server.registerTool(contract.name, toolRegistrationOptions(contract), handler(contract));
15
10
  };
@@ -1,19 +1,10 @@
1
1
  import { AndroidAnalysisService } from "../application/android/AndroidAnalysisService.js";
2
2
  import { toolContract } from "../contracts/toolContracts.js";
3
- import { logToolExecution } from "./toolLogging.js";
3
+ import { createContractToolHandler } from "./contractToolHandler.js";
4
4
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
5
5
  /** Bind Android handlers to their exact named contracts through shared workflows. */
6
- export const registerAndroidTools = (server, service, logger, recordEvidence) => {
7
- const handler = (contract) => {
8
- const name = contract.name;
9
- return async (input, context) => {
10
- const result = await logToolExecution(logger, name, () => service.execute(name, input, { signal: context.mcpReq.signal }));
11
- if (!result.ok)
12
- return server.delivery.toCallToolResult(result, contract);
13
- const recorded = recordEvidence?.(result.value);
14
- return server.delivery.toEvidenceToolResult(result.value, contract, recorded);
15
- };
16
- };
6
+ export const registerAndroidTools = (server, service, logger, recordEvidence, withAdmittedAnalysis) => {
7
+ const handler = createContractToolHandler(server, service, logger, recordEvidence, withAdmittedAnalysis);
17
8
  const packageContract = toolContract("inspect_android_package");
18
9
  server.registerTool(packageContract.name, toolRegistrationOptions(packageContract), handler(packageContract));
19
10
  const searchContract = toolContract("search_android_classes");
@@ -0,0 +1,14 @@
1
+ import { ApktoolResourceAnalysisService } from "../application/apktool/ApktoolResourceAnalysisService.js";
2
+ import { toolContract } from "../contracts/toolContracts.js";
3
+ import { createContractToolHandler } from "./contractToolHandler.js";
4
+ import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
5
+ /** Bind Apktool handlers to their exact named contracts. */
6
+ export const registerApktoolTools = (server, service, logger, recordEvidence, withAdmittedAnalysis) => {
7
+ const handler = createContractToolHandler(server, service, logger, recordEvidence, withAdmittedAnalysis);
8
+ for (const contract of [
9
+ toolContract("inspect_apktool_client"),
10
+ toolContract("decode_android_resources"),
11
+ ]) {
12
+ server.registerTool(contract.name, toolRegistrationOptions(contract), handler(contract));
13
+ }
14
+ };
@@ -1,3 +1,4 @@
1
+ import { runAdmittedToolOperation } from "../admittedToolOperation.js";
1
2
  import { resolvePairedEvidenceRequest } from "../../application/EvidenceInputResolver.js";
2
3
  import { recordSessionEvidenceSources } from "../sessionEvidence.js";
3
4
  import { compareJavaScriptExportShapesEvidenceValidated } from "../../application/javascript/JavaScriptApplicationWorkflowService.js";
@@ -9,7 +10,7 @@ import { recordResult } from "./helpers.js";
9
10
  const contract = applicationToolContract("compare_javascript_export_shapes");
10
11
  /** Register the execution-free exact JavaScript export-shape comparison. */
11
12
  export const registerCompareJavaScriptExportShapesTool = (server, options) => {
12
- server.registerTool(contract.name, toolRegistrationOptions(contract), async (input) => {
13
+ server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => runAdmittedToolOperation(server, options.withAdmittedAnalysis, contract.name, context.mcpReq.signal, async () => {
13
14
  const resolved = resolvePairedEvidenceRequest(input, options.evidenceById);
14
15
  if (!resolved.ok)
15
16
  return server.delivery.toCallToolResult(resolved, contract);
@@ -17,15 +18,12 @@ export const registerCompareJavaScriptExportShapesTool = (server, options) => {
17
18
  const result = await logToolExecution(options.logger, contract.name, () => Promise.resolve(compareJavaScriptExportShapesEvidenceValidated(parsed)));
18
19
  if (!result.ok)
19
20
  return server.delivery.toCallToolResult(result, contract);
20
- const recorded = recordSessionEvidenceSources(options.recordEvidence, [
21
- parsed.left,
22
- parsed.right,
23
- ]);
21
+ const recorded = recordSessionEvidenceSources(options.recordEvidence, [parsed.left, parsed.right]);
24
22
  if (!recorded.ok)
25
23
  return server.delivery.toCallToolResult(recorded, contract);
26
24
  const comparison = javaScriptExportShapeComparisonResultSchema.parse(result.value.normalized_result);
27
25
  const unknown = comparison.summary.unknown > 0 ||
28
26
  comparison.coverage.status !== "complete-within-inputs";
29
27
  return recordResult({ ...options, delivery: server.delivery }, contract, result.value, unknown ? "javascript-export-shape" : undefined);
30
- });
28
+ }));
31
29
  };
@@ -1,3 +1,4 @@
1
+ import { runAdmittedToolOperation } from "../admittedToolOperation.js";
1
2
  import { resolveApplicationEvidenceRequest } from "../../application/EvidenceInputResolver.js";
2
3
  import { recordSessionEvidenceSources } from "../sessionEvidence.js";
3
4
  import { compareSourceToBundleEvidenceValidated } from "../../application/javascript/JavaScriptApplicationWorkflowService.js";
@@ -9,7 +10,7 @@ import { recordResult } from "./helpers.js";
9
10
  const contract = applicationToolContract("compare_source_to_bundle");
10
11
  /** Register conservative historical-source to bundle comparison. */
11
12
  export const registerCompareSourceToBundleTool = (server, options) => {
12
- server.registerTool(contract.name, toolRegistrationOptions(contract), async (input) => {
13
+ server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => runAdmittedToolOperation(server, options.withAdmittedAnalysis, contract.name, context.mcpReq.signal, async () => {
13
14
  const resolved = resolveApplicationEvidenceRequest(input, options.evidenceById);
14
15
  if (!resolved.ok)
15
16
  return server.delivery.toCallToolResult(resolved, contract);
@@ -17,14 +18,12 @@ export const registerCompareSourceToBundleTool = (server, options) => {
17
18
  const result = await logToolExecution(options.logger, contract.name, () => Promise.resolve(compareSourceToBundleEvidenceValidated(parsed)));
18
19
  if (!result.ok)
19
20
  return server.delivery.toCallToolResult(result, contract);
20
- const recorded = recordSessionEvidenceSources(options.recordEvidence, [
21
- parsed.application,
22
- ]);
21
+ const recorded = recordSessionEvidenceSources(options.recordEvidence, [parsed.application]);
23
22
  if (!recorded.ok)
24
23
  return server.delivery.toCallToolResult(recorded, contract);
25
24
  const comparison = sourceToBundleComparisonResultSchema.parse(result.value.normalized_result);
26
25
  return recordResult({ ...options, delivery: server.delivery }, contract, result.value, comparison.summary.unknown > 0
27
26
  ? "source-to-bundle-comparison"
28
27
  : undefined);
29
- });
28
+ }));
30
29
  };
@@ -1,3 +1,4 @@
1
+ import { runAdmittedToolOperation } from "../admittedToolOperation.js";
1
2
  import { resolvePairedEvidenceRequest } from "../../application/EvidenceInputResolver.js";
2
3
  import { recordSessionEvidenceSources } from "../sessionEvidence.js";
3
4
  import { compareApplicationVersionsEvidenceValidated } from "../../application/javascript/JavaScriptApplicationWorkflowService.js";
@@ -9,7 +10,7 @@ import { recordResult } from "./helpers.js";
9
10
  const compareContract = applicationToolContract("compare_application_versions");
10
11
  /** Register the provider-neutral JavaScript version comparison tool. */
11
12
  export const registerCompareApplicationVersionsTool = (server, options) => {
12
- server.registerTool(compareContract.name, toolRegistrationOptions(compareContract), async (input) => {
13
+ server.registerTool(compareContract.name, toolRegistrationOptions(compareContract), async (input, context) => runAdmittedToolOperation(server, options.withAdmittedAnalysis, compareContract.name, context.mcpReq.signal, async () => {
13
14
  const resolved = resolvePairedEvidenceRequest(input, options.evidenceById);
14
15
  if (!resolved.ok)
15
16
  return server.delivery.toCallToolResult(resolved, compareContract);
@@ -29,5 +30,5 @@ export const registerCompareApplicationVersionsTool = (server, options) => {
29
30
  const comparison = applicationVersionComparisonResultSchema.parse(result.value.normalized_result);
30
31
  const unknown = comparison.summary.unknown > 0;
31
32
  return recordResult({ ...options, delivery: server.delivery }, compareContract, result.value, unknown ? "application-version-comparison" : undefined);
32
- });
33
+ }));
33
34
  };
@@ -1,3 +1,4 @@
1
+ import { runAdmittedToolOperation } from "../admittedToolOperation.js";
1
2
  import { evaluateReconstructionCoverage } from "../../application/ReconstructionCoverageService.js";
2
3
  import { applicationToolContract } from "../../contracts/applicationToolContracts.js";
3
4
  import { logToolExecution } from "../toolLogging.js";
@@ -5,8 +6,8 @@ import { toolRegistrationOptions } from "../toolRegistrationOptions.js";
5
6
  const contract = applicationToolContract("evaluate_reconstruction_coverage");
6
7
  /** Register the inline fail-closed reconstruction coverage evaluator. */
7
8
  export const registerCoverageTools = (server, options) => {
8
- server.registerTool(contract.name, toolRegistrationOptions(contract), async (input) => {
9
+ server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => runAdmittedToolOperation(server, options.withAdmittedAnalysis, contract.name, context.mcpReq.signal, async () => {
9
10
  const result = await logToolExecution(options.logger, contract.name, () => Promise.resolve(evaluateReconstructionCoverage(input)));
10
11
  return server.delivery.toCallToolResult(result, contract);
11
- });
12
+ }));
12
13
  };
@@ -1,3 +1,4 @@
1
+ import { runAdmittedToolOperation } from "../admittedToolOperation.js";
1
2
  import { recordSessionEvidenceSources } from "../sessionEvidence.js";
2
3
  import { buildReconstructionObligationLedgerEvidenceValidated, resolveReconstructionObligationLedgerRequest, } from "../../application/ReconstructionObligationLedgerService.js";
3
4
  import { applicationToolContract } from "../../contracts/applicationToolContracts.js";
@@ -7,7 +8,7 @@ import { recordResult } from "./helpers.js";
7
8
  const contract = applicationToolContract("build_reconstruction_obligation_ledger");
8
9
  /** Register conservative reconstruction-obligation generation and closure. */
9
10
  export const registerReconstructionObligationLedgerTool = (server, options) => {
10
- server.registerTool(contract.name, toolRegistrationOptions(contract), async (input) => {
11
+ server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => runAdmittedToolOperation(server, options.withAdmittedAnalysis, contract.name, context.mcpReq.signal, async () => {
11
12
  const resolved = resolveReconstructionObligationLedgerRequest(input);
12
13
  if (!resolved.ok)
13
14
  return server.delivery.toCallToolResult(resolved, contract);
@@ -18,5 +19,5 @@ export const registerReconstructionObligationLedgerTool = (server, options) => {
18
19
  if (!recorded.ok)
19
20
  return server.delivery.toCallToolResult(recorded, contract);
20
21
  return recordResult({ ...options, delivery: server.delivery }, contract, result.value);
21
- });
22
+ }));
22
23
  };
@@ -1,3 +1,4 @@
1
+ import { runAdmittedToolOperation } from "../admittedToolOperation.js";
1
2
  import { projectAndroidApplicationEvidence } from "../../application/android/AndroidApplicationService.js";
2
3
  import { projectAppleApplicationEvidence } from "../../application/apple/AppleApplicationService.js";
3
4
  import { APPLICATION_TOOL_CONTRACTS, applicationToolContract, } from "../../contracts/applicationToolContracts.js";
@@ -22,7 +23,7 @@ export const registerProjectMobileApplicationGraphTools = (server, options) => {
22
23
  };
23
24
  const registerProjection = (context) => {
24
25
  const { server, options, contract, project } = context;
25
- server.registerTool(contract.name, toolRegistrationOptions(contract), async (input) => {
26
+ server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, request) => runAdmittedToolOperation(server, options.withAdmittedAnalysis, contract.name, request.mcpReq.signal, async () => {
26
27
  const result = await logToolExecution(options.logger, contract.name, () => Promise.resolve(project(input)));
27
28
  if (!result.ok)
28
29
  return server.delivery.toCallToolResult(result, contract);
@@ -30,7 +31,7 @@ const registerProjection = (context) => {
30
31
  if (!recordedSources.ok)
31
32
  return server.delivery.toCallToolResult(recordedSources, contract);
32
33
  return recordResult({ ...options, delivery: server.delivery }, contract, result.value);
33
- });
34
+ }));
34
35
  };
35
36
  const inventoryEvidenceSources = (input) => {
36
37
  if (typeof input !== "object" ||
@@ -1,3 +1,4 @@
1
+ import { runAdmittedToolOperation } from "../admittedToolOperation.js";
1
2
  import { resolveApplicationEvidenceRequest } from "../../application/EvidenceInputResolver.js";
2
3
  import { recordSessionEvidenceSources } from "../sessionEvidence.js";
3
4
  import { traceApplicationFeatureEvidenceValidated } from "../../application/javascript/JavaScriptApplicationWorkflowService.js";
@@ -8,7 +9,7 @@ import { recordResult } from "./helpers.js";
8
9
  const traceContract = applicationToolContract("trace_application_feature");
9
10
  /** Register the provider-neutral JavaScript feature trace tool. */
10
11
  export const registerTraceFeatureTool = (server, options) => {
11
- server.registerTool(traceContract.name, toolRegistrationOptions(traceContract), async (input) => {
12
+ server.registerTool(traceContract.name, toolRegistrationOptions(traceContract), async (input, context) => runAdmittedToolOperation(server, options.withAdmittedAnalysis, traceContract.name, context.mcpReq.signal, async () => {
12
13
  const resolved = resolveApplicationEvidenceRequest(input, options.evidenceById);
13
14
  if (!resolved.ok)
14
15
  return server.delivery.toCallToolResult(resolved, traceContract);
@@ -21,5 +22,5 @@ export const registerTraceFeatureTool = (server, options) => {
21
22
  if (!recorded.ok)
22
23
  return server.delivery.toCallToolResult(recorded, traceContract);
23
24
  return recordResult({ ...options, delivery: server.delivery }, traceContract, result.value);
24
- });
25
+ }));
25
26
  };
@@ -1,3 +1,4 @@
1
+ import { runAdmittedToolOperation } from "../admittedToolOperation.js";
1
2
  import { resolveApplicationEvidenceRequest } from "../../application/EvidenceInputResolver.js";
2
3
  import { recordSessionEvidenceSources } from "../sessionEvidence.js";
3
4
  import { traceJavaScriptSemanticsEvidenceValidated } from "../../application/javascript/JavaScriptSemanticTraceService.js";
@@ -8,7 +9,7 @@ import { recordResult } from "./helpers.js";
8
9
  const contract = applicationToolContract("trace_javascript_semantics");
9
10
  /** Register the bounded JavaScript semantic relation trace tool. */
10
11
  export const registerTraceJavaScriptSemanticsTool = (server, options) => {
11
- server.registerTool(contract.name, toolRegistrationOptions(contract), async (input) => {
12
+ server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => runAdmittedToolOperation(server, options.withAdmittedAnalysis, contract.name, context.mcpReq.signal, async () => {
12
13
  const resolved = resolveApplicationEvidenceRequest(input, options.evidenceById);
13
14
  if (!resolved.ok)
14
15
  return server.delivery.toCallToolResult(resolved, contract);
@@ -16,11 +17,9 @@ export const registerTraceJavaScriptSemanticsTool = (server, options) => {
16
17
  const result = await logToolExecution(options.logger, contract.name, () => Promise.resolve(traceJavaScriptSemanticsEvidenceValidated(parsed)));
17
18
  if (!result.ok)
18
19
  return server.delivery.toCallToolResult(result, contract);
19
- const recorded = recordSessionEvidenceSources(options.recordEvidence, [
20
- parsed.application,
21
- ]);
20
+ const recorded = recordSessionEvidenceSources(options.recordEvidence, [parsed.application]);
22
21
  if (!recorded.ok)
23
22
  return server.delivery.toCallToolResult(recorded, contract);
24
23
  return recordResult({ ...options, delivery: server.delivery }, contract, result.value);
25
- });
24
+ }));
26
25
  };
@@ -6,9 +6,12 @@ import { recordDerivedEvidence } from "./recordDerivedEvidence.js";
6
6
  import { runDerivedOperation } from "./runDerivedOperation.js";
7
7
  import { ARTIFACT_COMPARISON_PROVIDER } from "../application/InvestigationProviders.js";
8
8
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
9
+ import { withAdmittedAnalysis } from "./analysisAdmission.js";
10
+ import { runAdmittedToolOperation } from "./admittedToolOperation.js";
9
11
  /** Register Evidence-backed deterministic artifact comparison. */
10
12
  export const registerArtifactComparisonTool = (server, session, contract) => {
11
- server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => {
13
+ const admission = withAdmittedAnalysis({ kind: "session", session });
14
+ server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => runAdmittedToolOperation(server, admission, contract.name, context.mcpReq.signal, async () => {
12
15
  const computed = await runDerivedOperation(context, contract.name, () => {
13
16
  const left = parseEvidence(input.left);
14
17
  const right = parseEvidence(input.right);
@@ -39,7 +42,7 @@ export const registerArtifactComparisonTool = (server, session, contract) => {
39
42
  evidenceLinks: [...leftEvidenceIds, ...rightEvidenceIds],
40
43
  });
41
44
  return server.delivery.toEvidenceToolResult(evidence, contract, recordDerivedEvidence(session, evidence, artifactUnknownInput(left, right, comparison.status, evidence.evidence_id)));
42
- });
45
+ }));
43
46
  };
44
47
  const artifactUnknownInput = (left, right, status, comparisonEvidenceId) => {
45
48
  if (status === "unchanged")
@@ -1,14 +1,26 @@
1
+ import { summarizeRetainedAnalysis } from "../application/analysisView/AnalysisViewService.js";
1
2
  import { toolContract } from "../contracts/toolContracts.js";
2
3
  import { logToolExecution } from "./toolLogging.js";
3
4
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
5
+ import { runAdmittedToolOperation } from "./admittedToolOperation.js";
4
6
  /** Bind offline layout inspection to its named contract and session Evidence owner. */
5
- export const registerBinaryDiagnosticsTools = (server, service, logger, recordEvidence) => {
7
+ export const registerBinaryDiagnosticsTools = (server, service, logger, recordEvidence, evidenceById, withAdmittedAnalysis) => {
6
8
  const contract = toolContract("inspect_binary_layout");
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
+ server.registerTool(contract.name, toolRegistrationOptions(contract), async ({ detail, ...request }, context) => runAdmittedToolOperation(server, withAdmittedAnalysis, contract.name, context.mcpReq.signal, async () => {
10
+ const result = await logToolExecution(logger, contract.name, async () => {
11
+ const inspected = await service.inspect(request, {
12
+ signal: context.mcpReq.signal,
13
+ });
14
+ return detail === "summary" && inspected.ok
15
+ ? summarizeRetainedAnalysis(inspected.value, {
16
+ recordEvidence,
17
+ evidenceById,
18
+ })
19
+ : inspected;
20
+ });
9
21
  if (!result.ok)
10
22
  return server.delivery.toCallToolResult(result, contract);
11
23
  const recorded = recordEvidence?.(result.value);
12
24
  return server.delivery.toEvidenceToolResult(result.value, contract, recorded);
13
- });
25
+ }));
14
26
  };
@@ -5,6 +5,7 @@ import { toolContract } from "../contracts/toolContracts.js";
5
5
  import { browserScenarioSchema } from "../domain/browserScenario.js";
6
6
  import { logToolExecution } from "./toolLogging.js";
7
7
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
8
+ import { runAdmittedToolOperation } from "./admittedToolOperation.js";
8
9
  /** Register the browser scenario tool with execution-time provider diagnostics. */
9
10
  export const registerBrowserScenarioTool = (server, options) => {
10
11
  const contract = toolContract("capture_browser_scenario");
@@ -12,12 +13,14 @@ export const registerBrowserScenarioTool = (server, options) => {
12
13
  const scenario = browserScenarioSchema.parse(input);
13
14
  if (options.loadFailure !== undefined)
14
15
  return server.delivery.toCallToolResult(err(optionalProviderUnavailable(options.loadFailure, contract.name)), contract);
15
- const result = await logToolExecution(options.logger, contract.name, () => captureBrowserScenario(options.provider, scenario, {
16
- signal: context.mcpReq.signal,
17
- }));
18
- if (!result.ok)
19
- return server.delivery.toCallToolResult(result, contract);
20
- const recorded = options.recordEvidence?.(result.value);
21
- return server.delivery.toEvidenceToolResult(result.value, contract, recorded);
16
+ return runAdmittedToolOperation(server, options.withAdmittedAnalysis, contract.name, context.mcpReq.signal, async () => {
17
+ const result = await logToolExecution(options.logger, contract.name, () => captureBrowserScenario(options.provider, scenario, {
18
+ signal: context.mcpReq.signal,
19
+ }));
20
+ if (!result.ok)
21
+ return server.delivery.toCallToolResult(result, contract);
22
+ const recorded = options.recordEvidence?.(result.value);
23
+ return server.delivery.toEvidenceToolResult(result.value, contract, recorded);
24
+ });
22
25
  });
23
26
  };