rea-agents 6.0.0 → 6.2.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 (611) hide show
  1. package/README.md +26 -18
  2. package/bridge/android/ReaJadxBridge.java +14 -5
  3. package/bridge/ghidra/ReaGhidraBridge.java +205 -51
  4. package/bridge/hopper_bridge.py +314 -127
  5. package/bridge/mitmproxy/capture.py +0 -2
  6. package/bridge/native/rea_lldb_tracer.py +630 -94
  7. package/bridge/process/ProcessRunTokenReader.swift +39 -5
  8. package/bridge/pwntools/recorded_crash_impl.py +4 -0
  9. package/dist/android/JadxConfiguration.js +274 -31
  10. package/dist/android/JadxMcpTransport.js +18 -2
  11. package/dist/android/JadxProtocol.js +6 -0
  12. package/dist/android/JadxProvider.js +76 -37
  13. package/dist/android/JadxSession.js +23 -4
  14. package/dist/application/AnalysisContextQueries.js +8 -35
  15. package/dist/application/AnalysisDocument.js +32 -0
  16. package/dist/application/AppBundleExecutable.js +67 -21
  17. package/dist/application/BinaryTargetResolver.js +5 -3
  18. package/dist/application/BrowserEvidence.js +3 -8
  19. package/dist/application/BrowserScenarioEvidence.js +2 -18
  20. package/dist/application/CallPathTracing.js +19 -3
  21. package/dist/application/CapabilityInventory.js +48 -11
  22. package/dist/application/ClientConfigurationDocument.js +917 -8
  23. package/dist/application/ClientRegistrationIdentity.js +26 -5
  24. package/dist/application/ClientRegistrationStatus.js +29 -14
  25. package/dist/application/DirectAnalysis.js +56 -51
  26. package/dist/application/DirectAnalysisCleanup.js +72 -0
  27. package/dist/application/DirectAnalysisStatus.js +4 -5
  28. package/dist/application/Doctor.js +19 -21
  29. package/dist/application/DoctorDiagnostics.js +1 -2
  30. package/dist/application/DoctorScope.js +25 -13
  31. package/dist/application/EnhancedLiteralTracing.js +22 -25
  32. package/dist/application/EnhancedTools.js +64 -17
  33. package/dist/application/EvidenceBundleFiles.js +30 -13
  34. package/dist/application/FunctionAnalysisEvidence.js +2 -3
  35. package/dist/application/InventoryProjectionEvidence.js +4 -3
  36. package/dist/application/InvestigationProviders.js +11 -2
  37. package/dist/application/JsonFiles.js +83 -28
  38. package/dist/application/LinuxHopper.js +9 -6
  39. package/dist/application/MacHopper.js +15 -18
  40. package/dist/application/ProcedureAddressResolution.js +11 -0
  41. package/dist/application/RealHopperAssertions.js +0 -11
  42. package/dist/application/ReconstructionCoverageService.js +7 -4
  43. package/dist/application/ReconstructionObligationCandidates.js +1 -1
  44. package/dist/application/ReconstructionObligationLedgerService.js +4 -3
  45. package/dist/application/ReferenceSourceImportEntries.js +1 -1
  46. package/dist/application/Setup.js +21 -17
  47. package/dist/application/SetupClientConfiguration.js +10 -15
  48. package/dist/application/SetupHost.js +21 -29
  49. package/dist/application/SetupPlan.js +11 -9
  50. package/dist/application/SupportedClients.js +34 -1
  51. package/dist/application/Uninstall.js +82 -29
  52. package/dist/application/Update.js +18 -3
  53. package/dist/application/UpdateMaintenance.js +7 -5
  54. package/dist/application/UpdateRuntime.js +57 -36
  55. package/dist/application/WebModuleTraceService.js +4 -2
  56. package/dist/application/WebNetworkCaptureService.js +4 -2
  57. package/dist/application/WebRuntimeService.js +5 -3
  58. package/dist/application/WebScriptExportService.js +32 -6
  59. package/dist/application/WebSourceLocationService.js +4 -2
  60. package/dist/application/WorkflowEvidence.js +105 -0
  61. package/dist/application/XrefsAddressResolution.js +45 -0
  62. package/dist/application/analysisView/AnalysisViewService.js +76 -0
  63. package/dist/application/binary/AnalysisClientCleanup.js +30 -5
  64. package/dist/application/binary/AnalysisProviderEvaluation.js +22 -7
  65. package/dist/application/binary/AnalysisProviderRegistry.js +4 -6
  66. package/dist/application/binary/AnalysisSnapshotCache.js +13 -14
  67. package/dist/application/binary/BinarySession.js +161 -93
  68. package/dist/application/binary/BinarySessionComposition.js +1 -3
  69. package/dist/application/binary/BinarySessionExecution.js +3 -5
  70. package/dist/application/binary/BinarySessionOpen.js +4 -4
  71. package/dist/application/binary/BinarySessionRecords.js +26 -4
  72. package/dist/application/binary/BinarySessionStatus.js +18 -7
  73. package/dist/application/binary/CompositeProvider.js +16 -17
  74. package/dist/application/binary/LazyAnalysisProvider.js +8 -5
  75. package/dist/application/binary/SessionProviderRouter.js +27 -135
  76. package/dist/application/binaryDiagnostics/BinaryLayoutService.js +4 -2
  77. package/dist/application/binaryDiagnostics/RecordedCrashService.js +4 -2
  78. package/dist/application/evm/EvmInterfaceService.js +4 -2
  79. package/dist/application/homebrew.js +48 -0
  80. package/dist/application/investigation/EvidenceLedger.js +21 -7
  81. package/dist/application/investigation/InvestigationRecords.js +8 -0
  82. package/dist/application/javascript/ElectronActiveEvidence.js +9 -13
  83. package/dist/application/javascript/JavaScriptAnalysisControl.js +34 -0
  84. package/dist/application/javascript/JavaScriptApplicationEvidence.js +21 -4
  85. package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +19 -2
  86. package/dist/application/javascript/JavaScriptApplicationService.js +27 -15
  87. package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +5 -5
  88. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +10 -7
  89. package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +44 -10
  90. package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +11 -3
  91. package/dist/application/javascript/JavaScriptArtifactGraphContext.js +9 -0
  92. package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +8 -5
  93. package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +12 -3
  94. package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +0 -1
  95. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +49 -19
  96. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +56 -8
  97. package/dist/application/javascript/JavaScriptModuleRelationships.js +38 -9
  98. package/dist/application/javascript/JavaScriptRecoveryService.js +4 -2
  99. package/dist/application/javascript/JavaScriptRuntimeObservationService.js +6 -4
  100. package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +3 -3
  101. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +2 -3
  102. package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +63 -61
  103. package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +1 -2
  104. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +2 -3
  105. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +1 -5
  106. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +75 -46
  107. package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +2 -3
  108. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +64 -19
  109. package/dist/application/managed/ManagedApplicationGraphService.js +4 -3
  110. package/dist/application/managed/ManagedMemberComparisonService.js +9 -5
  111. package/dist/application/managed/ManagedNativeVerificationService.js +6 -4
  112. package/dist/application/managed/ManagedReconstructionService.js +4 -3
  113. package/dist/application/process/ProcessCli.js +25 -17
  114. package/dist/application/process/ProcessEvidence.js +4 -4
  115. package/dist/application/workflowInputError.js +18 -0
  116. package/dist/artifacts/ArtifactProvider.js +48 -13
  117. package/dist/artifacts/ArtifactReader.js +31 -0
  118. package/dist/artifacts/DirectoryArtifactReader.js +2 -1
  119. package/dist/artifacts/MachOSliceArtifactReader.js +106 -15
  120. package/dist/artifacts/NativeDmgArtifactReader.js +73 -21
  121. package/dist/artifacts/SafeOutputTree.js +16 -2
  122. package/dist/artifacts/ZipArtifactReader.js +11 -4
  123. package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +26 -5
  124. package/dist/artifacts/apple/DylibResolutionReader.js +17 -7
  125. package/dist/artifacts/apple/InterfaceBuilderAnalysis.js +176 -56
  126. package/dist/artifacts/apple/InterfaceBuilderDecodeBudget.js +195 -0
  127. package/dist/artifacts/apple/KeyedArchiveReader.js +55 -23
  128. package/dist/artifacts/apple/MachoLoadCommandReader.js +92 -31
  129. package/dist/artifacts/apple/NibArchive.js +81 -14
  130. package/dist/artifacts/apple/NibViewHierarchy.js +10 -3
  131. package/dist/artifacts/apple/PlistNumberLiterals.js +164 -0
  132. package/dist/artifacts/extraction/ArtifactExtraction.js +78 -21
  133. package/dist/artifacts/inventory/ArtifactGraphConstruction.js +79 -68
  134. package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
  135. package/dist/artifacts/inventory/reader.js +3 -3
  136. package/dist/artifacts/inventory/scanCanonical.js +59 -38
  137. package/dist/artifacts/inventory/scanReader.js +5 -9
  138. package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +6 -2
  139. package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
  140. package/dist/browser/CdpBrowserProvider.js +2 -3
  141. package/dist/browser/CdpCaptureCompleteness.js +2 -0
  142. package/dist/browser/CdpCaptureEventHandlers.js +78 -15
  143. package/dist/browser/CdpCaptureEventTypes.js +5 -1
  144. package/dist/browser/CdpCaptureEvents.js +25 -1
  145. package/dist/browser/CdpCaptureValues.js +20 -0
  146. package/dist/browser/CdpConnection.js +30 -11
  147. package/dist/browser/CdpElectronProvider.js +0 -2
  148. package/dist/browser/CdpElectronScriptEvents.js +2 -8
  149. package/dist/browser/CdpElectronScripts.js +2 -3
  150. package/dist/browser/CdpOptionalCommand.js +2 -3
  151. package/dist/browser/CdpPageCapture.js +23 -1
  152. package/dist/browser/CdpPageCaptureScripts.js +2 -3
  153. package/dist/browser/CdpSafeMetadata.js +10 -10
  154. package/dist/browser/PlaywrightBrowserScenarioProvider.js +59 -44
  155. package/dist/browser/PlaywrightElectronActiveActions.js +34 -79
  156. package/dist/browser/PlaywrightElectronActiveProjection.js +141 -0
  157. package/dist/browser/PlaywrightElectronActiveProvider.js +133 -130
  158. package/dist/browser/PlaywrightScenarioArtifacts.js +1 -1
  159. package/dist/browser/PlaywrightScenarioBrowser.js +139 -39
  160. package/dist/browser/PlaywrightScenarioEvents.js +1 -1
  161. package/dist/browser/PlaywrightScenarioSession.js +39 -22
  162. package/dist/browser/WebSourceMapFetcher.js +426 -72
  163. package/dist/browser/assets/LocalWebScriptArtifacts.js +2 -2
  164. package/dist/browser/assets/ScriptCaptureAdapters.js +1 -1
  165. package/dist/browser/history/CaptureFailures.js +41 -1
  166. package/dist/browser/history/CaptureRelease.js +5 -0
  167. package/dist/browser/history/HarCaptureAdapter.js +3 -3
  168. package/dist/browser/history/HarJson.js +3 -2
  169. package/dist/browser/history/HistoricalCaptureDecoder.js +4 -2
  170. package/dist/browser/history/MitmproxyCaptureAdapter.js +4 -2
  171. package/dist/catalogIdentity.js +0 -1
  172. package/dist/cli/analysisSelector.js +23 -0
  173. package/dist/cli/analysisViewCommands.js +36 -0
  174. package/dist/cli/applicationCommands.js +2 -3
  175. package/dist/cli/artifactCommands.js +11 -12
  176. package/dist/cli/coreAnalysisCommands.js +3 -3
  177. package/dist/cli/coreBinaryCommands.js +100 -37
  178. package/dist/cli/coreNativeCommands.js +9 -10
  179. package/dist/cli/electronCommands.js +10 -9
  180. package/dist/cli/interactiveSetup.js +6 -6
  181. package/dist/cli/javascriptApplicationAnalysis.js +7 -3
  182. package/dist/cli/jsonOutput.js +4 -99
  183. package/dist/cli/managedCommands.js +7 -8
  184. package/dist/cli/nativeCallCommands.js +3 -5
  185. package/dist/cli/omittableDefaults.js +50 -0
  186. package/dist/cli/processCommands.js +3 -2
  187. package/dist/cli/setupCommands.js +16 -15
  188. package/dist/cli/utilityCommands.js +9 -9
  189. package/dist/cli/webRuntimeCommands.js +8 -8
  190. package/dist/cli.js +18 -9
  191. package/dist/cliBrowserScenarioCommands.js +2 -2
  192. package/dist/cliCommandNames.js +1 -1
  193. package/dist/cliJsonInput.js +24 -5
  194. package/dist/cliOutput.js +0 -38
  195. package/dist/composition/auxiliaryAnalysisProviders.js +27 -23
  196. package/dist/composition/binary.js +9 -9
  197. package/dist/composition/browserScenario.js +2 -1
  198. package/dist/composition/directAnalysis.js +20 -13
  199. package/dist/composition/electronScenario.js +1 -1
  200. package/dist/composition/optionalObservationProviders.js +12 -7
  201. package/dist/config/environment.js +10 -0
  202. package/dist/config/ghidraStartupTimeout.js +12 -0
  203. package/dist/config/homeDirectory.js +12 -0
  204. package/dist/config/mcpResponseBudget.js +30 -0
  205. package/dist/config/parseConfig.js +8 -3
  206. package/dist/config/parsers.js +19 -22
  207. package/dist/contracts/analysisViewToolContracts.js +56 -0
  208. package/dist/contracts/applicationToolContracts.js +5 -4
  209. package/dist/contracts/artifactComparisonExample.js +2 -2
  210. package/dist/contracts/artifactToolContracts.js +1 -1
  211. package/dist/contracts/browserScenarioToolContracts.js +1 -1
  212. package/dist/contracts/browserToolContracts.js +19 -15
  213. package/dist/contracts/enhancedInputs.js +7 -5
  214. package/dist/contracts/enhancedToolContracts.js +7 -6
  215. package/dist/contracts/evm/evmToolContracts.js +1 -1
  216. package/dist/contracts/functionWorkflowToolContracts.js +1 -1
  217. package/dist/contracts/hopperMemoryContracts.js +2 -5
  218. package/dist/contracts/inputSchemaPresentation.js +90 -0
  219. package/dist/contracts/investigationExamples.js +4 -3
  220. package/dist/contracts/javascript/electronToolContracts.js +2 -2
  221. package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +0 -20
  222. package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +245 -0
  223. package/dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js +1 -1
  224. package/dist/contracts/managed/managedToolContracts.js +7 -14
  225. package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
  226. package/dist/contracts/mobileApplicationGraphExamples.js +3 -3
  227. package/dist/contracts/native/binaryDiagnosticsToolContracts.js +1 -1
  228. package/dist/contracts/native/nativeToolContracts.js +5 -3
  229. package/dist/contracts/officialToolContracts.js +16 -16
  230. package/dist/contracts/promptContracts.js +5 -5
  231. package/dist/contracts/providerSelection.js +1 -1
  232. package/dist/contracts/sessionLifecycleInputs.js +3 -7
  233. package/dist/contracts/sessionStatusContract.js +2 -4
  234. package/dist/contracts/sessionToolContracts.js +18 -8
  235. package/dist/contracts/sessionToolSchemas.js +3 -19
  236. package/dist/contracts/toolContractExamples.js +0 -1
  237. package/dist/contracts/toolContractHelpers.js +4 -1
  238. package/dist/contracts/toolContracts.js +2 -0
  239. package/dist/contracts/toolEffects.js +1 -1
  240. package/dist/contracts/toolOutputSchemaGroups.js +160 -115
  241. package/dist/contracts/toolOutputSchemaPrimitives.js +28 -20
  242. package/dist/contracts/toolSchemaMetadata.js +41 -33
  243. package/dist/contracts/webNetworkCaptureToolContracts.js +2 -2
  244. package/dist/contracts/webRuntimeToolContracts.js +1 -1
  245. package/dist/contracts/webScriptToolContracts.js +1 -1
  246. package/dist/doctorRuntime.js +7 -5
  247. package/dist/domain/analysisErrorBase.js +8 -3
  248. package/dist/domain/analysisErrorCore.js +6 -1
  249. package/dist/domain/analysisErrorPresentation.js +90 -20
  250. package/dist/domain/analysisErrorProjection.js +130 -32
  251. package/dist/domain/analysisSnapshot.js +29 -31
  252. package/dist/domain/analysisView/analysisView.js +243 -0
  253. package/dist/domain/analysisView/analysisViewCoverage.js +19 -0
  254. package/dist/domain/analysisView/binaryLayoutView.js +159 -0
  255. package/dist/domain/analysisView/javascriptApplicationView.js +238 -0
  256. package/dist/domain/android/androidAnalysis.js +2 -4
  257. package/dist/domain/android/androidApplication.js +18 -10
  258. package/dist/domain/apple/appleApplication.js +42 -15
  259. package/dist/domain/apple/dyldEnvironment.js +73 -0
  260. package/dist/domain/apple/dylibResolution.js +130 -12
  261. package/dist/domain/apple/dylibResolutionFindings.js +9 -7
  262. package/dist/domain/apple/interfaceBuilderGraph.js +25 -14
  263. package/dist/domain/apple/interfaceBuilderKeyedArchive.js +13 -3
  264. package/dist/domain/apple/keyedArchive.js +35 -3
  265. package/dist/domain/apple/machoContainer.js +54 -0
  266. package/dist/domain/apple/plistNumbers.js +76 -0
  267. package/dist/domain/artifactComparison.js +15 -6
  268. package/dist/domain/artifactGraph.js +16 -3
  269. package/dist/domain/artifactIdentity.js +29 -0
  270. package/dist/domain/artifactInventoryEvidence.js +28 -40
  271. package/dist/domain/artifactOperationError.js +3 -3
  272. package/dist/domain/artifactPartialObservation.js +1 -0
  273. package/dist/domain/artifactPathSyntax.js +49 -0
  274. package/dist/domain/binaryTarget.js +39 -13
  275. package/dist/domain/bridgeCandidateProjection.js +71 -0
  276. package/dist/domain/browserCaptureComparison.js +13 -49
  277. package/dist/domain/browserCompleteness.js +1 -0
  278. package/dist/domain/browserNetworkEvidence.js +10 -4
  279. package/dist/domain/browserObservation.js +0 -1
  280. package/dist/domain/browserObservationError.js +24 -5
  281. package/dist/domain/browserObservationSchemas.js +14 -3
  282. package/dist/domain/browserScenario.js +0 -1
  283. package/dist/domain/browserScenarioCapture.js +1 -2
  284. package/dist/domain/browserScenarioDiff.js +0 -2
  285. package/dist/domain/browserScenarioDiffEvidence.js +0 -12
  286. package/dist/domain/browserScenarioDiffValues.js +2 -2
  287. package/dist/domain/browserScenarioValues.js +5 -10
  288. package/dist/domain/bundleComparison.js +3 -2
  289. package/dist/domain/callPath.js +8 -9
  290. package/dist/domain/callPathSchemas.js +2 -2
  291. package/dist/domain/canonicalJsonDigestSteps.js +133 -0
  292. package/dist/domain/canonicalOrdering.js +9 -5
  293. package/dist/domain/changedBehavior.js +9 -9
  294. package/dist/domain/comparisonSourceEvidence.js +40 -0
  295. package/dist/domain/completionLedgerGeneration.js +2 -1
  296. package/dist/domain/configurationErrors.js +13 -1
  297. package/dist/domain/conformancePackage.js +4 -3
  298. package/dist/domain/evidence.js +65 -36
  299. package/dist/domain/evidenceBundle.js +47 -8
  300. package/dist/domain/evidenceCompletionLedger.js +2 -1
  301. package/dist/domain/evidenceErrors.js +12 -1
  302. package/dist/domain/explicitSensitiveFailure.js +17 -1
  303. package/dist/domain/firmware/firmwareAnalysis.js +6 -7
  304. package/dist/domain/functionComparison.js +4 -5
  305. package/dist/domain/functionComparisonDimensions.js +120 -87
  306. package/dist/domain/functionComparisonNormalization.js +23 -34
  307. package/dist/domain/functionComparisonResults.js +1 -4
  308. package/dist/domain/functionComparisonSchemas.js +2 -8
  309. package/dist/domain/functionDossierEvidence.js +2 -37
  310. package/dist/domain/hopperErrors.js +23 -2
  311. package/dist/domain/hopperValues.js +51 -8
  312. package/dist/domain/immutableJson.js +114 -0
  313. package/dist/domain/inputIssueProjection.js +3 -0
  314. package/dist/domain/javascript/electronActiveObservation.js +47 -64
  315. package/dist/domain/javascript/electronObservation.js +14 -3
  316. package/dist/domain/javascript/electronStaticAnalysisBrowser.js +10 -9
  317. package/dist/domain/javascript/electronStaticAnalysisIpc.js +2 -1
  318. package/dist/domain/javascript/electronStaticAnalysisNative.js +2 -1
  319. package/dist/domain/javascript/electronStaticAnalysisValues.js +6 -12
  320. package/dist/domain/javascript/javascriptApplicationAnalysis.js +71 -23
  321. package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +2 -0
  322. package/dist/domain/javascript/javascriptApplicationGraph.js +39 -3
  323. package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +9 -2
  324. package/dist/domain/javascript/javascriptApplicationVersionItems.js +5 -2
  325. package/dist/domain/javascript/javascriptApplicationVersionKeys.js +2 -1
  326. package/dist/domain/javascript/javascriptAstValues.js +20 -0
  327. package/dist/{application/javascript/JavaScriptReturnShapeProjection.js → domain/javascript/javascriptExportReturnShapeProjection.js} +4 -4
  328. package/dist/domain/javascript/javascriptExportShapeComparison.js +7 -1
  329. package/dist/domain/javascript/javascriptExportShapeComparisonIdentity.js +6 -1
  330. package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +29 -1
  331. package/dist/domain/javascript/javascriptExportShapeSelection.js +5 -5
  332. package/dist/domain/javascript/javascriptExportShapeVariants.js +67 -14
  333. package/dist/domain/javascript/javascriptFeatureSeed.js +20 -0
  334. package/dist/domain/javascript/javascriptFeatureTraversal.js +0 -1
  335. package/dist/domain/javascript/javascriptNativeHandoff.js +1 -1
  336. package/dist/domain/javascript/javascriptRecovery.js +3 -8
  337. package/dist/domain/javascript/javascriptRuntimeLoadState.js +0 -1
  338. package/dist/domain/javascript/javascriptRuntimeObservation.js +10 -2
  339. package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +1 -1
  340. package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +3 -2
  341. package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +0 -1
  342. package/dist/domain/javascript/javascriptSemanticAnalysis.js +106 -5
  343. package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +2 -1
  344. package/dist/domain/javascript/javascriptSemanticCalls.js +2 -1
  345. package/dist/domain/javascript/javascriptSemanticChildProcesses.js +2 -1
  346. package/dist/domain/javascript/javascriptSemanticCoverage.js +6 -5
  347. package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +9 -17
  348. package/dist/domain/javascript/javascriptSemanticDataEffects.js +23 -6
  349. package/dist/domain/javascript/javascriptSemanticGraph.js +98 -43
  350. package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +1 -0
  351. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +77 -20
  352. package/dist/domain/javascript/javascriptSemanticMutationValues.js +21 -27
  353. package/dist/domain/javascript/javascriptSemanticObjects.js +83 -42
  354. package/dist/domain/javascript/javascriptSemanticPrimitives.js +18 -21
  355. package/dist/domain/javascript/javascriptSemanticProjection.js +2 -3
  356. package/dist/domain/javascript/javascriptSemanticPromises.js +2 -1
  357. package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -4
  358. package/dist/domain/javascript/javascriptSemanticResourceLimits.js +77 -0
  359. package/dist/domain/javascript/javascriptSemanticResources.js +1 -1
  360. package/dist/domain/javascript/javascriptSemanticReturns.js +32 -17
  361. package/dist/domain/javascript/javascriptSemanticSlots.js +72 -0
  362. package/dist/domain/javascript/javascriptSemanticValues.js +126 -61
  363. package/dist/domain/javascript/javascriptSourceMapPaths.js +104 -0
  364. package/dist/domain/javascript/javascriptSourceParser.js +6 -2
  365. package/dist/domain/javascript/javascriptStaticAnalysis.js +22 -17
  366. package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +5 -3
  367. package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +16 -5
  368. package/dist/domain/javascript/javascriptStaticAnalysisFindings.js +66 -7
  369. package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +28 -17
  370. package/dist/domain/javascript/javascriptStaticAnalysisState.js +3 -2
  371. package/dist/domain/javascript/sourceToBundleComparison.js +12 -3
  372. package/dist/domain/javascript/sourceToBundleSignals.js +47 -19
  373. package/dist/domain/jsonSerialization.js +109 -0
  374. package/dist/domain/jsonValue.js +90 -6
  375. package/dist/domain/localPath.js +6 -0
  376. package/dist/domain/managed/managedApplicationGraph.js +10 -10
  377. package/dist/domain/managed/managedArtifact.js +6 -4
  378. package/dist/domain/managed/managedInspectionEvidence.js +16 -0
  379. package/dist/domain/managed/managedMemberComparison.js +2 -9
  380. package/dist/domain/managed/managedMemberComparisonMatch.js +5 -9
  381. package/dist/domain/managed/managedNativeVerification.js +3 -11
  382. package/dist/domain/managed/managedNativeVerificationMatch.js +9 -3
  383. package/dist/domain/native/binaryLayout.js +2 -3
  384. package/dist/domain/native/fileOffsetPartialObservation.js +1 -0
  385. package/dist/domain/native/nativeApiBoundary.js +1 -1
  386. package/dist/domain/native/nativeCallObservation.js +37 -13
  387. package/dist/domain/native/nativeCallPartialObservation.js +33 -0
  388. package/dist/domain/native/nativeInstruction.js +7 -0
  389. package/dist/domain/native/recordedCrash.js +2 -3
  390. package/dist/domain/offsetDateTime.js +17 -0
  391. package/dist/domain/process/processCapture.js +21 -16
  392. package/dist/domain/process/processCaptureCoverage.js +67 -0
  393. package/dist/domain/process/processCaptureExample.js +2 -1
  394. package/dist/domain/process/processCaptureParsing.js +1 -34
  395. package/dist/domain/process/processCaptureValidation.js +81 -13
  396. package/dist/domain/process/processComparison.js +79 -26
  397. package/dist/domain/process/processObservation.js +10 -2
  398. package/dist/domain/process/processScenario.js +35 -12
  399. package/dist/domain/process/processTraceComparison.js +0 -2
  400. package/dist/domain/process/processTraceDimensionProjection.js +1 -1
  401. package/dist/domain/process/processTraceEvaluation.js +15 -11
  402. package/dist/domain/process/processTraceSpecification.js +3 -4
  403. package/dist/domain/propertyListKeys.js +1 -1
  404. package/dist/domain/propertyListXmlText.js +19 -0
  405. package/dist/domain/providerAdapterError.js +3 -1
  406. package/dist/domain/providerOperationHealth.js +54 -0
  407. package/dist/domain/reconstructionCoverage.js +5 -2
  408. package/dist/domain/reconstructionObligationLedgerSchemas.js +2 -1
  409. package/dist/domain/reconstructionReadinessSchemas.js +2 -1
  410. package/dist/domain/reconstructionVerification.js +9 -46
  411. package/dist/domain/reconstructionVerificationSchemas.js +4 -3
  412. package/dist/domain/referenceSourceGraph.js +20 -21
  413. package/dist/domain/staticRuntimeCorrelation.js +8 -45
  414. package/dist/domain/stringPatterns.js +6 -0
  415. package/dist/domain/swiftSymbolClassification.js +61 -0
  416. package/dist/domain/symbolAnalysis.js +66 -18
  417. package/dist/domain/webBundleAnalysis.js +20 -8
  418. package/dist/domain/webBundleAnalyzerInspection.js +13 -8
  419. package/dist/domain/webBundleAnalyzerResult.js +41 -2
  420. package/dist/domain/webCaptureDiff.js +0 -1
  421. package/dist/domain/webCaptureDiffSchemas.js +6 -3
  422. package/dist/domain/webEventListeners.js +3 -2
  423. package/dist/domain/webExecution.js +3 -2
  424. package/dist/domain/webRuntime.js +19 -7
  425. package/dist/domain/webScriptExport.js +1 -1
  426. package/dist/domain/webSourceLocation.js +1 -0
  427. package/dist/dotnet/ManagedArtifactInspector.js +2 -19
  428. package/dist/dotnet/ManagedMemberInspector.js +12 -18
  429. package/dist/dotnet/ManagedMemberInspectorCore.js +47 -44
  430. package/dist/dotnet/ManagedMemberRows.js +75 -62
  431. package/dist/dotnet/ManagedMetadataInventory.js +16 -22
  432. package/dist/dotnet/ManagedMethodBodyReader.js +4 -0
  433. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +109 -94
  434. package/dist/dotnet/ManagedNativeBoundaryInspector.js +12 -21
  435. package/dist/dotnet/ManagedReaderFailure.js +16 -0
  436. package/dist/dotnet/ManagedStaticProvider.js +3 -5
  437. package/dist/evaluation/AgentEvaluationFixtures.js +250 -0
  438. package/dist/evaluation/AgentEvaluationReport.js +28 -0
  439. package/dist/evaluation/CodexAgentEval.js +12 -8
  440. package/dist/evaluation/KnownAnswerEvaluation.js +281 -0
  441. package/dist/evm/EvmoleInterfaceProvider.js +2 -1
  442. package/dist/firmware/FirmwareCommand.js +9 -5
  443. package/dist/firmware/FirmwareFiles.js +1 -1
  444. package/dist/firmware/FirmwareProvider.js +4 -4
  445. package/dist/generatedPackageMetadata.js +2 -2
  446. package/dist/ghidra/GhidraAnalysisProfile.js +7 -5
  447. package/dist/ghidra/GhidraClient.js +126 -34
  448. package/dist/ghidra/GhidraClientStartup.js +0 -2
  449. package/dist/ghidra/GhidraDiagnostics.js +7 -7
  450. package/dist/ghidra/GhidraDoctor.js +6 -5
  451. package/dist/ghidra/GhidraFunctionValues.js +13 -12
  452. package/dist/ghidra/GhidraInstallation.js +58 -33
  453. package/dist/ghidra/GhidraInventoryValues.js +14 -4
  454. package/dist/ghidra/GhidraJavaLaunch.js +66 -0
  455. package/dist/ghidra/GhidraLauncher.js +47 -22
  456. package/dist/ghidra/GhidraProvider.js +6 -2
  457. package/dist/ghidra/GhidraProviderCapabilities.js +20 -2
  458. package/dist/ghidra/GhidraProviderClient.js +36 -15
  459. package/dist/ghidra/GhidraSessionError.js +13 -7
  460. package/dist/ghidra/GhidraSessionRoot.js +39 -0
  461. package/dist/ghidra/GhidraTargetSnapshot.js +47 -12
  462. package/dist/ghidra/GhidraTransport.js +20 -0
  463. package/dist/ghidra/extensions/GhidraExtensions.js +17 -10
  464. package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +8 -2
  465. package/dist/hopper/BridgeLauncher.js +65 -56
  466. package/dist/hopper/HopperAnalysisProfile.js +65 -12
  467. package/dist/hopper/HopperCleanup.js +63 -22
  468. package/dist/hopper/HopperClient.js +288 -59
  469. package/dist/hopper/HopperFileOffset.js +237 -0
  470. package/dist/hopper/HopperMachOImage.js +197 -0
  471. package/dist/hopper/HopperOperationStage.js +6 -0
  472. package/dist/hopper/HopperProvider.js +71 -19
  473. package/dist/hopper/HopperProviderCapabilities.js +19 -1
  474. package/dist/hopper/HopperRegexSearch.js +134 -0
  475. package/dist/hopper/HopperRegexWorker.js +27 -0
  476. package/dist/hopper/HopperRequestQueue.js +68 -19
  477. package/dist/hopper/HopperTargetLease.js +133 -49
  478. package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -0
  479. package/dist/ida/IdaConfiguration.js +8 -3
  480. package/dist/ida/IdaInput.js +1 -7
  481. package/dist/ida/IdaMcpConnection.js +8 -4
  482. package/dist/ida/IdaOperationRunner.js +3 -3
  483. package/dist/ida/IdaProvider.js +8 -12
  484. package/dist/ida/IdaSessionClient.js +20 -18
  485. package/dist/ida/IdaWorkspace.js +12 -13
  486. package/dist/inspector/JavaScriptRuntimeScope.js +9 -1
  487. package/dist/inspector/V8InspectorCaptureProjection.js +9 -4
  488. package/dist/inspector/V8InspectorProvider.js +82 -36
  489. package/dist/javascript/recovery/WakaruCommand.js +7 -2
  490. package/dist/javascript/recovery/WakaruExecution.js +5 -2
  491. package/dist/javascript/sourceMaps/DecodedSourceMap.js +47 -0
  492. package/dist/javascript/sourceMaps/SourceMapCommand.js +16 -0
  493. package/dist/javascript/sourceMaps/SourceMapFormat.js +79 -31
  494. package/dist/javascript/sourceMaps/TraceSourceMap.js +14 -28
  495. package/dist/main/shutdown.js +11 -3
  496. package/dist/main/startup.js +9 -2
  497. package/dist/main/transport.js +22 -2
  498. package/dist/main.js +11 -18
  499. package/dist/mcpDoctor.js +62 -2
  500. package/dist/native/AppleDispatchCoverage.js +47 -6
  501. package/dist/native/AppleDispatchDecodeFacts.js +6 -0
  502. package/dist/native/AppleDispatchMetadata.js +6 -3
  503. package/dist/native/AppleMachoFixups.js +48 -24
  504. package/dist/native/AppleMachoSelection.js +48 -22
  505. package/dist/native/AppleObjcCategories.js +6 -2
  506. package/dist/native/AppleObjcDispatchFacets.js +5 -2
  507. package/dist/native/AppleObjcProperties.js +2 -1
  508. package/dist/native/AppleSwiftDispatchFacets.js +27 -21
  509. package/dist/native/AppleSwiftVtables.js +21 -15
  510. package/dist/native/CommandRunner.js +87 -88
  511. package/dist/native/LldbCallTracer.js +372 -103
  512. package/dist/native/LldbRetainedObservations.js +178 -0
  513. package/dist/native/NativeCallObservation.js +62 -3
  514. package/dist/native/NativeMacOSProvider.js +122 -31
  515. package/dist/native/NativeUiHelperRuntime.js +11 -2
  516. package/dist/native/NativeUiObservation.js +2 -2
  517. package/dist/native/SignatureTargetBinding.js +155 -0
  518. package/dist/native/parsers/lipo.js +71 -1
  519. package/dist/native/pwndbg/PwndbgCoreContext.js +25 -5
  520. package/dist/native/pwntools/PwntoolsDecoder.js +2 -1
  521. package/dist/native/pwntools/RecordedCrashStructureBindings.js +2 -0
  522. package/dist/process/DarwinProcessRunTokenReader.js +23 -10
  523. package/dist/process/ExecFileOutput.js +108 -6
  524. package/dist/process/OwnedCommand.js +7 -2
  525. package/dist/process/PrivateRuntimeRoot.js +10 -5
  526. package/dist/process/ProcessOwnership.js +204 -57
  527. package/dist/process/ProcessOwnershipObservation.js +60 -9
  528. package/dist/process/ProviderProcess.js +39 -10
  529. package/dist/process/capture/FilesystemSnapshot.js +50 -13
  530. package/dist/process/capture/ProcessCaptureError.js +15 -2
  531. package/dist/process/capture/ProcessCaptureLifecycle.js +235 -81
  532. package/dist/process/capture/ProcessFilesystemEffects.js +33 -3
  533. package/dist/process/capture/ProcessHarness.js +21 -25
  534. package/dist/process/capture/ProcessNormalization.js +20 -2
  535. package/dist/process/capture/ProcessSampling.js +25 -2
  536. package/dist/process/capture/TerminalRenderer.js +14 -0
  537. package/dist/process/snapshotEnvironment.js +14 -0
  538. package/dist/server/EvidenceMcpServer.js +157 -0
  539. package/dist/server/createServer.js +61 -41
  540. package/dist/server/mcpClientMetadata.js +12 -5
  541. package/dist/server/promptCompletion.js +3 -8
  542. package/dist/server/registerAnalysisViewTool.js +15 -0
  543. package/dist/server/registerAndroidTools.js +2 -5
  544. package/dist/server/registerApplicationTools/compareExportShapes.js +4 -5
  545. package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
  546. package/dist/server/registerApplicationTools/compareVersions.js +4 -5
  547. package/dist/server/registerApplicationTools/coverage.js +1 -2
  548. package/dist/server/registerApplicationTools/helpers.js +1 -4
  549. package/dist/server/registerApplicationTools/obligationLedger.js +4 -5
  550. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -4
  551. package/dist/server/registerApplicationTools/traceFeature.js +4 -5
  552. package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
  553. package/dist/server/registerArtifactComparisonTool.js +13 -10
  554. package/dist/server/registerBinaryDiagnosticsTools.js +2 -5
  555. package/dist/server/registerBrowserScenarioTool.js +3 -6
  556. package/dist/server/registerBrowserTools.js +13 -18
  557. package/dist/server/registerBundleComparisonTool.js +5 -7
  558. package/dist/server/registerCloseLifecycleTool.js +9 -20
  559. package/dist/server/registerElectronTools.js +10 -15
  560. package/dist/server/registerEnhancedTools.js +36 -77
  561. package/dist/server/registerEvidenceTools.js +3 -6
  562. package/dist/server/registerEvmTools.js +2 -5
  563. package/dist/server/registerFirmwareTools.js +2 -5
  564. package/dist/server/registerFunctionComparisonTool.js +15 -12
  565. package/dist/server/registerInvestigationTools.js +16 -17
  566. package/dist/server/registerJavaScriptRecoveryTool.js +2 -5
  567. package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -8
  568. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +5 -8
  569. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -7
  570. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +6 -9
  571. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +6 -9
  572. package/dist/server/registerOfficialTools.js +4 -21
  573. package/dist/server/registerProcessComparisonTool.js +74 -48
  574. package/dist/server/registerRecordedCrashTools.js +2 -5
  575. package/dist/server/registerSessionRecordTools.js +19 -24
  576. package/dist/server/registerSessionStatusTool.js +19 -6
  577. package/dist/server/registerSessionTools.js +20 -18
  578. package/dist/server/registerWebModuleTool.js +2 -5
  579. package/dist/server/registerWebNetworkCaptureTool.js +2 -5
  580. package/dist/server/registerWebRuntimeTools.js +4 -9
  581. package/dist/server/registerWebScriptTool.js +2 -5
  582. package/dist/server/registerWebSourceLocationTool.js +2 -5
  583. package/dist/server/runDerivedOperation.js +15 -3
  584. package/dist/server/sessionAvailabilityPolicy.js +0 -1
  585. package/dist/server/toolRegistrationOptions.js +2 -2
  586. package/dist/server/toolResult.js +75 -51
  587. package/dist/server/toolResultEncoding.js +34 -0
  588. package/dist/windows/WindowsNativeLoader.js +1 -0
  589. package/dist/windows/WindowsOwnedProcess.js +60 -15
  590. package/dist/windows/WindowsPrivateRuntime.js +7 -8
  591. package/install.sh +1 -1
  592. package/native/windows/README.md +3 -1
  593. package/native/windows/build/manifest.json +2 -2
  594. package/native/windows/build/rea-windows-x64.node +0 -0
  595. package/package.json +44 -30
  596. package/scripts/electron-active-hook-boundaries.cjs +18 -20
  597. package/scripts/electron-active-hook.cjs +241 -37
  598. package/scripts/rea.mjs +3 -6
  599. package/skills/reverse-engineer-anything/SKILL.md +12 -3
  600. package/skills/reverse-engineer-anything/references/android-applications.md +6 -3
  601. package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -4
  602. package/skills/reverse-engineer-anything/references/javascript-applications.md +20 -3
  603. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +9 -0
  604. package/dist/config.js +0 -1
  605. package/dist/contracts/browserCaptureToolInputSchema.js +0 -43
  606. package/dist/contracts/process/processCaptureExample.js +0 -2
  607. package/dist/contracts/toolOutputSchemas.js +0 -2
  608. package/dist/ghidra/GhidraDefaults.js +0 -2
  609. package/dist/main/reload.js +0 -12
  610. package/dist/main/state.js +0 -3
  611. package/dist/server/sessionToolPolicies.js +0 -2
@@ -1,10 +1,14 @@
1
+ import { snapshotEnvironment } from "../process/snapshotEnvironment.js";
1
2
  import { createEvmInterfaceService } from "../composition/evm.js";
2
3
  import { registerEvmTools } from "./registerEvmTools.js";
3
4
  import { registerRecordedCrashTools } from "./registerRecordedCrashTools.js";
4
5
  import { createRecordedCrashService } from "../composition/binaryDiagnostics.js";
6
+ import { registerAnalysisViewTool } from "./registerAnalysisViewTool.js";
5
7
  import { registerBinaryDiagnosticsTools } from "./registerBinaryDiagnosticsTools.js";
6
8
  import { createBinaryLayoutService } from "../composition/binaryDiagnostics.js";
7
- import { McpServer } from "@modelcontextprotocol/server";
9
+ import { EvidenceMcpServer } from "./EvidenceMcpServer.js";
10
+ import { createToolResultDelivery, } from "./toolResult.js";
11
+ import { parseMcpResponseBudget } from "../config/mcpResponseBudget.js";
8
12
  import { isAbsolute } from "node:path";
9
13
  import { PRODUCT_IDENTITY } from "../identity.js";
10
14
  import { silentLogger } from "../logger.js";
@@ -42,38 +46,27 @@ import { registerSessionTools } from "./registerSessionTools.js";
42
46
  import { sessionAvailabilityPolicy } from "./sessionAvailabilityPolicy.js";
43
47
  const TARGET_FREE_INSTRUCTIONS = "REA provides reverse-engineering tools for local artifacts, native binaries, managed code, browser pages, and runtimes. Use the tool that directly answers the question; discover targets or inspect inventory only when needed. Tool results include inline Evidence and report their coverage and limitations.";
44
48
  const ACTIVE_TARGET_INSTRUCTIONS = "REA analyzes the active reverse-engineering target. Use the analysis tool that answers the question directly. Search or list symbols when discovery is needed; analyze_function provides a function dossier, and focused procedure tools return individual facets.";
45
- const installSessionToolAvailability = (server, session, options) => {
49
+ const installSessionToolAvailability = (session, options, environment) => {
46
50
  if (session === undefined)
47
51
  return undefined;
52
+ const linux = process.platform === "linux";
53
+ const linuxX64 = linux && process.arch === "x64";
54
+ const pwntools = linuxX64 && isAbsolute(environment.REA_PWNTOOLS_PYTHON ?? "");
48
55
  const policy = sessionAvailabilityPolicy(options.availabilityPolicy, {
49
56
  optionalProviderLoadFailures: options.optionalProviderLoadFailures,
50
57
  optionalFeatures: {
51
- evmInterfaceEnabled: options.evmInterface !== undefined ||
52
- (process.platform === "linux" && process.arch === "x64"),
58
+ evmInterfaceEnabled: options.evmInterface !== undefined || linuxX64,
53
59
  webModuleResolutionEnabled: options.webModuleTrace !== undefined ||
54
- isAbsolute(process.env.REA_BROWSER_EXECUTABLE ?? ""),
55
- recordedCrashEnabled: options.recordedCrash !== undefined ||
56
- (process.platform === "linux" &&
57
- process.arch === "x64" &&
58
- isAbsolute(process.env.REA_PWNTOOLS_PYTHON ?? "")),
59
- binaryLayoutEnabled: options.binaryLayout !== undefined ||
60
- (process.platform === "linux" &&
61
- process.arch === "x64" &&
62
- isAbsolute(process.env.REA_PWNTOOLS_PYTHON ?? "")),
60
+ isAbsolute(environment.REA_BROWSER_EXECUTABLE ?? ""),
61
+ recordedCrashEnabled: options.recordedCrash !== undefined || pwntools,
62
+ binaryLayoutEnabled: options.binaryLayout !== undefined || pwntools,
63
63
  firmwareInspectionEnabled: options.firmwareAnalysis !== undefined ||
64
- (process.platform === "linux" &&
65
- isAbsolute(process.env.REA_BINWALK_COMMAND ?? "")),
64
+ (linux && isAbsolute(environment.REA_BINWALK_COMMAND ?? "")),
66
65
  firmwareExtractionEnabled: options.firmwareAnalysis !== undefined ||
67
- (process.platform === "linux" &&
68
- isAbsolute(process.env.REA_UNBLOB_COMMAND ?? "")),
69
- androidAnalysisEnabled: options.androidAnalysis !== undefined ||
70
- ((process.platform === "linux" || process.platform === "darwin") &&
71
- isAbsolute(process.env.REA_JADX_MCP_JAR ?? "")),
66
+ (linux && isAbsolute(environment.REA_UNBLOB_COMMAND ?? "")),
72
67
  browserObservationEnabled: options.browserObservation !== undefined,
73
68
  javascriptRecoveryEnabled: options.javascriptRecovery !== undefined ||
74
- (process.platform === "linux" &&
75
- process.arch === "x64" &&
76
- isAbsolute(process.env.REA_WAKARU_COMMAND ?? "")),
69
+ (linuxX64 && isAbsolute(environment.REA_WAKARU_COMMAND ?? "")),
77
70
  browserScenarioEnabled: options.browserScenarioCapture !== undefined,
78
71
  electronObservationEnabled: options.electronObservation !== undefined,
79
72
  electronAutomationEnabled: options.electronActiveObservation !== undefined,
@@ -84,7 +77,7 @@ const installSessionToolAvailability = (server, session, options) => {
84
77
  policy,
85
78
  };
86
79
  };
87
- const createMcpServer = (session) => new McpServer({
80
+ const createMcpServer = (session, delivery) => new EvidenceMcpServer({
88
81
  name: PRODUCT_IDENTITY.mcpServerKey,
89
82
  version: PRODUCT_IDENTITY.packageVersion,
90
83
  }, {
@@ -92,24 +85,31 @@ const createMcpServer = (session) => new McpServer({
92
85
  instructions: session === undefined
93
86
  ? ACTIVE_TARGET_INSTRUCTIONS
94
87
  : TARGET_FREE_INSTRUCTIONS,
95
- });
88
+ }, session === undefined
89
+ ? undefined
90
+ : (evidence) => session.recordEvidence(evidence), delivery);
96
91
  /**
97
92
  * Construct one MCP server without acquiring subprocess resources.
98
93
  * Supplying a session adds target lifecycle tools; omitting it retains the
99
94
  * fixed-target seam used by focused tests and embedders.
100
95
  */
101
96
  export const createServer = (analysis, session, options = {}) => {
97
+ const environment = snapshotEnvironment(options.environment ?? process.env);
98
+ const delivery = selectToolResultDelivery(environment, options.delivery);
99
+ const selectedOptions = { ...options, environment, delivery };
102
100
  const startedAt = new Date().toISOString();
103
101
  const logger = options.logger ?? silentLogger;
104
- const server = createMcpServer(session);
105
- const availability = installSessionToolAvailability(server, session, options);
102
+ const server = createMcpServer(session, delivery);
103
+ const android = options.androidAnalysis ?? createAndroidAnalysisProvider(environment);
104
+ const availability = installSessionToolAvailability(session, selectedOptions, environment);
106
105
  const toolLogger = logger.child({ layer: "server" });
107
106
  const { evidenceById, activeTarget, recordEvidence, recordEvidenceWithUnknown, } = createSessionRecorders(server, session);
108
107
  const toolContext = {
109
108
  server,
110
109
  analysis,
111
110
  session,
112
- options,
111
+ options: selectedOptions,
112
+ environment,
113
113
  logger: toolLogger,
114
114
  evidenceById,
115
115
  activeTarget,
@@ -117,7 +117,6 @@ export const createServer = (analysis, session, options = {}) => {
117
117
  recordEvidenceWithUnknown,
118
118
  };
119
119
  registerBinaryAnalysisTools(toolContext);
120
- const android = options.androidAnalysis ?? createAndroidAnalysisProvider();
121
120
  const previousOnclose = server.server.onclose;
122
121
  server.server.onclose = () => {
123
122
  previousOnclose?.();
@@ -132,33 +131,48 @@ export const createServer = (analysis, session, options = {}) => {
132
131
  if (result.status === "rejected")
133
132
  throw result.reason;
134
133
  };
135
- registerAndroidTools(server, new AndroidAnalysisService(android), toolLogger, recordEvidence);
136
- registerBinaryDiagnosticsTools(server, options.binaryLayout ?? createBinaryLayoutService(), toolLogger, recordEvidence);
137
- registerEvmTools(server, options.evmInterface ?? createEvmInterfaceService(), toolLogger, recordEvidence);
138
- registerRecordedCrashTools(server, options.recordedCrash ?? createRecordedCrashService(), toolLogger, recordEvidence);
139
- registerFirmwareTools(server, new FirmwareAnalysisService(options.firmwareAnalysis ?? createFirmwareAnalysisProvider()), toolLogger, recordEvidence);
134
+ registerConfiguredAnalysisTools(toolContext, android);
140
135
  registerObservationTools(toolContext);
141
- registerWebModuleTool(server, options.webModuleTrace ?? createWebModuleTraceService(), toolLogger, recordEvidence);
142
- registerWebSourceLocationTool(server, options.webSourceLocation ?? createWebSourceLocationService(), toolLogger, recordEvidence);
143
- registerWebRuntimeTools(server, options.webRuntime ?? createWebRuntimeService(), toolLogger, recordEvidence);
144
- registerWebNetworkCaptureTool(server, options.webNetworkCapture ?? createWebNetworkCaptureService(), toolLogger, recordEvidence);
145
- registerJavaScriptRecoveryTool(server, new JavaScriptRecoveryService(options.javascriptRecovery ?? createJavaScriptRecoveryProvider()), toolLogger, recordEvidence);
146
136
  registerGuidedPrompts(server, analysis, session);
147
137
  if (session !== undefined) {
148
138
  registerSessionTools(server, session, toolLogger, {
149
- ...options,
139
+ ...selectedOptions,
150
140
  ...(availability === undefined
151
141
  ? {}
152
142
  : { availabilityPolicy: availability.policy }),
143
+ androidAnalysisAvailability: (signal) => android.inspectAvailability(signal),
153
144
  startedAt,
154
145
  });
155
146
  }
156
147
  return server;
157
148
  };
149
+ const selectToolResultDelivery = (environment, selected) => {
150
+ if (selected !== undefined)
151
+ return selected;
152
+ const configured = parseMcpResponseBudget(environment.REA_MCP_MAX_RESPONSE_BYTES);
153
+ if (!configured.ok)
154
+ throw configured.error;
155
+ return createToolResultDelivery(configured.value);
156
+ };
157
+ const registerConfiguredAnalysisTools = ({ server, options, environment, logger: toolLogger, evidenceById, recordEvidence, }, android) => {
158
+ registerAndroidTools(server, new AndroidAnalysisService(android), toolLogger, recordEvidence);
159
+ registerBinaryDiagnosticsTools(server, options.binaryLayout ?? createBinaryLayoutService(environment), toolLogger, recordEvidence);
160
+ registerAnalysisViewTool(server, toolLogger, evidenceById, recordEvidence);
161
+ registerEvmTools(server, options.evmInterface ?? createEvmInterfaceService(environment), toolLogger, recordEvidence);
162
+ registerRecordedCrashTools(server, options.recordedCrash ?? createRecordedCrashService(environment), toolLogger, recordEvidence);
163
+ registerFirmwareTools(server, new FirmwareAnalysisService(options.firmwareAnalysis ?? createFirmwareAnalysisProvider(environment)), toolLogger, recordEvidence);
164
+ registerWebModuleTool(server, options.webModuleTrace ?? createWebModuleTraceService(environment), toolLogger, recordEvidence);
165
+ registerWebSourceLocationTool(server, options.webSourceLocation ?? createWebSourceLocationService(environment), toolLogger, recordEvidence);
166
+ registerWebRuntimeTools(server, options.webRuntime ?? createWebRuntimeService(), toolLogger, recordEvidence);
167
+ registerWebNetworkCaptureTool(server, options.webNetworkCapture ?? createWebNetworkCaptureService(environment), toolLogger, recordEvidence);
168
+ registerJavaScriptRecoveryTool(server, new JavaScriptRecoveryService(options.javascriptRecovery ??
169
+ createJavaScriptRecoveryProvider(environment)), toolLogger, recordEvidence);
170
+ };
158
171
  const createSessionRecorders = (server, session) => ({
159
172
  evidenceById: session === undefined
160
173
  ? undefined
161
- : (evidenceId) => session.evidenceById(evidenceId),
174
+ : (evidenceId) => session.evidenceForAnalysis?.(evidenceId) ??
175
+ session.evidenceById(evidenceId),
162
176
  activeTarget: session === undefined ? undefined : () => session.activeTarget(),
163
177
  recordEvidence: session === undefined
164
178
  ? undefined
@@ -187,6 +201,12 @@ const registerBinaryAnalysisTools = ({ server, analysis, session, logger, active
187
201
  registerEnhancedTools(server, analysis, {
188
202
  ...analysisOptions,
189
203
  analysisProfile: session === undefined ? undefined : () => session.analysisProfile(),
204
+ allowsSnapshotReplay: session === undefined
205
+ ? undefined
206
+ : (operation) => session.allowsSnapshotReplay(operation),
207
+ recordWorkflowSnapshot: session === undefined
208
+ ? undefined
209
+ : (input) => session.recordWorkflowSnapshot(input),
190
210
  });
191
211
  const evidenceOptions = { logger, activeTarget, recordEvidence };
192
212
  registerNativeTools(server, analysis, evidenceOptions);
@@ -1,12 +1,19 @@
1
1
  import { CLIENT_CAPABILITIES_META_KEY, CLIENT_INFO_META_KEY, PROTOCOL_VERSION_META_KEY, } from "@modelcontextprotocol/server";
2
- /** Client metadata bound to the current SDK request rather than server-global state. */
3
- export const mcpClientMetadata = (context) => {
2
+ /**
3
+ * Client metadata for the current request. A 2026-era request carries it in
4
+ * its per-request envelope; a 2025-era connection sends no envelope, so its
5
+ * `initialize` handshake supplies the values.
6
+ */
7
+ export const mcpClientMetadata = (context, connection) => {
4
8
  const envelope = context.mcpReq.envelope;
5
- const client = implementation(mcpEnvelopeValue(envelope, CLIENT_INFO_META_KEY));
6
- const protocolVersion = mcpEnvelopeValue(envelope, PROTOCOL_VERSION_META_KEY);
9
+ // The SDK deprecates these accessors only in favor of the envelope, which
10
+ // 2025-era requests do not carry; they still return initialize values.
11
+ const value = (key, initialized) => envelope === undefined ? initialized() : mcpEnvelopeValue(envelope, key);
12
+ const client = implementation(value(CLIENT_INFO_META_KEY, () => connection.getClientVersion()));
13
+ const protocolVersion = value(PROTOCOL_VERSION_META_KEY, () => connection.getNegotiatedProtocolVersion());
7
14
  return {
8
15
  ...(client === undefined ? {} : { client }),
9
- clientFeatures: capabilityFeatures(mcpEnvelopeValue(envelope, CLIENT_CAPABILITIES_META_KEY)),
16
+ clientFeatures: capabilityFeatures(value(CLIENT_CAPABILITIES_META_KEY, () => connection.getClientCapabilities())),
10
17
  ...(typeof protocolVersion === "string" ? { protocolVersion } : {}),
11
18
  };
12
19
  };
@@ -2,13 +2,10 @@ import { z } from "zod";
2
2
  import { uniqueSorted } from "../domain/canonicalOrdering.js";
3
3
  import { artifactInventoryResultSchema } from "../domain/artifactGraph.js";
4
4
  import { artifactInspectionResultSchema } from "../domain/artifactInspection.js";
5
- import { parseProcessCapture } from "../domain/process/processCapture.js";
5
+ import { parseProcessCapture } from "../domain/process/processCaptureParsing.js";
6
6
  const documentListSchema = z.array(z.string().min(1));
7
7
  const providerStatusSchema = z.object({
8
- providers: z.array(z.object({ id: z.string().min(1) })),
9
- analysis_provider_candidates: z
10
- .array(z.object({ provider: z.object({ id: z.string().min(1) }) }))
11
- .optional(),
8
+ analysis_provider_candidates: z.array(z.object({ provider: z.object({ id: z.string().min(1) }) })),
12
9
  });
13
10
  /** Build live completion over the active provider and session ledger. */
14
11
  export const createPromptCompletionSource = (analysis, session) => ({
@@ -74,9 +71,7 @@ const providerCandidates = (session) => {
74
71
  const parsed = providerStatusSchema.safeParse(session.status());
75
72
  if (!parsed.success)
76
73
  return [];
77
- const candidates = (parsed.data.analysis_provider_candidates?.length ?? 0) > 0
78
- ? (parsed.data.analysis_provider_candidates?.map(({ provider }) => provider.id) ?? [])
79
- : parsed.data.providers.map(({ id }) => id);
74
+ const candidates = parsed.data.analysis_provider_candidates.map(({ provider }) => provider.id);
80
75
  return ["auto", ...candidates];
81
76
  };
82
77
  const evidenceCandidates = (kind, session) => {
@@ -0,0 +1,15 @@
1
+ import { inspectAnalysisView } from "../application/analysisView/AnalysisViewService.js";
2
+ import { toolContract } from "../contracts/toolContracts.js";
3
+ import { logToolExecution } from "./toolLogging.js";
4
+ import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
5
+ /** Bind selected-view projection to its named contract and session Evidence owner. */
6
+ export const registerAnalysisViewTool = (server, logger, evidenceById, recordEvidence) => {
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
+ });
15
+ };
@@ -2,7 +2,6 @@ import { AndroidAnalysisService } from "../application/android/AndroidAnalysisSe
2
2
  import { toolContract } from "../contracts/toolContracts.js";
3
3
  import { logToolExecution } from "./toolLogging.js";
4
4
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
5
- import { toCallToolResult } from "./toolResult.js";
6
5
  /** Bind Android handlers to their exact named contracts through shared workflows. */
7
6
  export const registerAndroidTools = (server, service, logger, recordEvidence) => {
8
7
  const handler = (contract) => {
@@ -10,11 +9,9 @@ export const registerAndroidTools = (server, service, logger, recordEvidence) =>
10
9
  return async (input, context) => {
11
10
  const result = await logToolExecution(logger, name, () => service.execute(name, input, { signal: context.mcpReq.signal }));
12
11
  if (!result.ok)
13
- return toCallToolResult(result, contract);
12
+ return server.delivery.toCallToolResult(result, contract);
14
13
  const recorded = recordEvidence?.(result.value);
15
- return recorded !== undefined && !recorded.ok
16
- ? toCallToolResult(recorded, contract)
17
- : toCallToolResult(result, contract);
14
+ return server.delivery.toEvidenceToolResult(result.value, contract, recorded);
18
15
  };
19
16
  };
20
17
  const packageContract = toolContract("inspect_android_package");
@@ -5,7 +5,6 @@ import { applicationToolContract } from "../../contracts/applicationToolContract
5
5
  import { javaScriptExportShapeComparisonResultSchema } from "../../domain/javascript/javascriptExportShapeComparisonSchemas.js";
6
6
  import { logToolExecution } from "../toolLogging.js";
7
7
  import { toolRegistrationOptions } from "../toolRegistrationOptions.js";
8
- import { toCallToolResult } from "../toolResult.js";
9
8
  import { recordResult } from "./helpers.js";
10
9
  const contract = applicationToolContract("compare_javascript_export_shapes");
11
10
  /** Register the execution-free exact JavaScript export-shape comparison. */
@@ -13,19 +12,19 @@ export const registerCompareJavaScriptExportShapesTool = (server, options) => {
13
12
  server.registerTool(contract.name, toolRegistrationOptions(contract), async (input) => {
14
13
  const resolved = resolvePairedEvidenceRequest(input, options.evidenceById);
15
14
  if (!resolved.ok)
16
- return toCallToolResult(resolved, contract);
15
+ return server.delivery.toCallToolResult(resolved, contract);
17
16
  const parsed = resolved.value;
18
17
  const result = await logToolExecution(options.logger, contract.name, () => Promise.resolve(compareJavaScriptExportShapesEvidenceValidated(parsed)));
19
18
  if (!result.ok)
20
- return toCallToolResult(result, contract);
19
+ return server.delivery.toCallToolResult(result, contract);
21
20
  const recorded = recordSessionEvidenceSources(options.recordEvidence, [
22
21
  parsed.left,
23
22
  parsed.right,
24
23
  ]);
25
24
  if (!recorded.ok)
26
- return toCallToolResult(recorded, contract);
25
+ return server.delivery.toCallToolResult(recorded, contract);
27
26
  const comparison = javaScriptExportShapeComparisonResultSchema.parse(result.value.normalized_result);
28
27
  const unknown = comparison.summary.unknown > 0;
29
- return recordResult(options, contract, result.value, unknown ? "javascript-export-shape" : undefined);
28
+ return recordResult({ ...options, delivery: server.delivery }, contract, result.value, unknown ? "javascript-export-shape" : undefined);
30
29
  });
31
30
  };
@@ -5,7 +5,6 @@ import { applicationToolContract } from "../../contracts/applicationToolContract
5
5
  import { sourceToBundleComparisonResultSchema } from "../../domain/javascript/sourceToBundleComparisonSchemas.js";
6
6
  import { logToolExecution } from "../toolLogging.js";
7
7
  import { toolRegistrationOptions } from "../toolRegistrationOptions.js";
8
- import { toCallToolResult } from "../toolResult.js";
9
8
  import { recordResult } from "./helpers.js";
10
9
  const contract = applicationToolContract("compare_source_to_bundle");
11
10
  /** Register conservative historical-source to bundle comparison. */
@@ -13,18 +12,18 @@ export const registerCompareSourceToBundleTool = (server, options) => {
13
12
  server.registerTool(contract.name, toolRegistrationOptions(contract), async (input) => {
14
13
  const resolved = resolveApplicationEvidenceRequest(input, options.evidenceById);
15
14
  if (!resolved.ok)
16
- return toCallToolResult(resolved, contract);
15
+ return server.delivery.toCallToolResult(resolved, contract);
17
16
  const parsed = resolved.value;
18
17
  const result = await logToolExecution(options.logger, contract.name, () => Promise.resolve(compareSourceToBundleEvidenceValidated(parsed)));
19
18
  if (!result.ok)
20
- return toCallToolResult(result, contract);
19
+ return server.delivery.toCallToolResult(result, contract);
21
20
  const recorded = recordSessionEvidenceSources(options.recordEvidence, [
22
21
  parsed.application,
23
22
  ]);
24
23
  if (!recorded.ok)
25
- return toCallToolResult(recorded, contract);
24
+ return server.delivery.toCallToolResult(recorded, contract);
26
25
  const comparison = sourceToBundleComparisonResultSchema.parse(result.value.normalized_result);
27
- return recordResult(options, contract, result.value, comparison.summary.unknown > 0
26
+ return recordResult({ ...options, delivery: server.delivery }, contract, result.value, comparison.summary.unknown > 0
28
27
  ? "source-to-bundle-comparison"
29
28
  : undefined);
30
29
  });
@@ -5,7 +5,6 @@ import { applicationToolContract } from "../../contracts/applicationToolContract
5
5
  import { applicationVersionComparisonResultSchema } from "../../domain/javascript/javascriptApplicationVersionComparisonSchemas.js";
6
6
  import { logToolExecution } from "../toolLogging.js";
7
7
  import { toolRegistrationOptions } from "../toolRegistrationOptions.js";
8
- import { toCallToolResult } from "../toolResult.js";
9
8
  import { recordResult } from "./helpers.js";
10
9
  const compareContract = applicationToolContract("compare_application_versions");
11
10
  /** Register the provider-neutral JavaScript version comparison tool. */
@@ -13,11 +12,11 @@ export const registerCompareApplicationVersionsTool = (server, options) => {
13
12
  server.registerTool(compareContract.name, toolRegistrationOptions(compareContract), async (input) => {
14
13
  const resolved = resolvePairedEvidenceRequest(input, options.evidenceById);
15
14
  if (!resolved.ok)
16
- return toCallToolResult(resolved, compareContract);
15
+ return server.delivery.toCallToolResult(resolved, compareContract);
17
16
  const parsed = resolved.value;
18
17
  const result = await logToolExecution(options.logger, compareContract.name, () => Promise.resolve(compareApplicationVersionsEvidenceValidated(parsed)));
19
18
  if (!result.ok)
20
- return toCallToolResult(result, compareContract);
19
+ return server.delivery.toCallToolResult(result, compareContract);
21
20
  const sources = [
22
21
  parsed.left,
23
22
  parsed.right,
@@ -26,9 +25,9 @@ export const registerCompareApplicationVersionsTool = (server, options) => {
26
25
  ];
27
26
  const recorded = recordSessionEvidenceSources(options.recordEvidence, sources);
28
27
  if (!recorded.ok)
29
- return toCallToolResult(recorded, compareContract);
28
+ return server.delivery.toCallToolResult(recorded, compareContract);
30
29
  const comparison = applicationVersionComparisonResultSchema.parse(result.value.normalized_result);
31
30
  const unknown = comparison.summary.unknown > 0;
32
- return recordResult(options, compareContract, result.value, unknown ? "application-version-comparison" : undefined);
31
+ return recordResult({ ...options, delivery: server.delivery }, compareContract, result.value, unknown ? "application-version-comparison" : undefined);
33
32
  });
34
33
  };
@@ -2,12 +2,11 @@ import { evaluateReconstructionCoverage } from "../../application/Reconstruction
2
2
  import { applicationToolContract } from "../../contracts/applicationToolContracts.js";
3
3
  import { logToolExecution } from "../toolLogging.js";
4
4
  import { toolRegistrationOptions } from "../toolRegistrationOptions.js";
5
- import { toCallToolResult } from "../toolResult.js";
6
5
  const contract = applicationToolContract("evaluate_reconstruction_coverage");
7
6
  /** Register the inline fail-closed reconstruction coverage evaluator. */
8
7
  export const registerCoverageTools = (server, options) => {
9
8
  server.registerTool(contract.name, toolRegistrationOptions(contract), async (input) => {
10
9
  const result = await logToolExecution(options.logger, contract.name, () => Promise.resolve(evaluateReconstructionCoverage(input)));
11
- return toCallToolResult(result, contract);
10
+ return server.delivery.toCallToolResult(result, contract);
12
11
  });
13
12
  };
@@ -1,12 +1,9 @@
1
1
  import { APPLICATION_TOOL_CONTRACTS } from "../../contracts/applicationToolContracts.js";
2
- import { toCallToolResult } from "../toolResult.js";
3
2
  export const recordResult = (options, contract, evidence, unknownKind) => {
4
3
  const recorded = unknownKind === undefined
5
4
  ? options.recordEvidence?.(evidence)
6
5
  : options.recordEvidenceWithUnknown?.(evidence, unknownRegistration(evidence, unknownKind));
7
- if (recorded !== undefined && !recorded.ok)
8
- return toCallToolResult(recorded, contract);
9
- return toCallToolResult({ ok: true, value: evidence }, contract);
6
+ return options.delivery.toEvidenceToolResult(evidence, contract, recorded);
10
7
  };
11
8
  const unknownRegistration = (evidence, kind) => ({
12
9
  question: kind === "application-version-comparison"
@@ -3,7 +3,6 @@ import { buildReconstructionObligationLedgerEvidenceValidated, resolveReconstruc
3
3
  import { applicationToolContract } from "../../contracts/applicationToolContracts.js";
4
4
  import { logToolExecution } from "../toolLogging.js";
5
5
  import { toolRegistrationOptions } from "../toolRegistrationOptions.js";
6
- import { toCallToolResult } from "../toolResult.js";
7
6
  import { recordResult } from "./helpers.js";
8
7
  const contract = applicationToolContract("build_reconstruction_obligation_ledger");
9
8
  /** Register conservative reconstruction-obligation generation and closure. */
@@ -11,13 +10,13 @@ export const registerReconstructionObligationLedgerTool = (server, options) => {
11
10
  server.registerTool(contract.name, toolRegistrationOptions(contract), async (input) => {
12
11
  const resolved = resolveReconstructionObligationLedgerRequest(input);
13
12
  if (!resolved.ok)
14
- return toCallToolResult(resolved, contract);
13
+ return server.delivery.toCallToolResult(resolved, contract);
15
14
  const result = await logToolExecution(options.logger, contract.name, () => Promise.resolve(buildReconstructionObligationLedgerEvidenceValidated(resolved.value)));
16
15
  if (!result.ok)
17
- return toCallToolResult(result, contract);
16
+ return server.delivery.toCallToolResult(result, contract);
18
17
  const recorded = recordSessionEvidenceSources(options.recordEvidence, resolved.value.evidence_bundle.records);
19
18
  if (!recorded.ok)
20
- return toCallToolResult(recorded, contract);
21
- return recordResult(options, contract, result.value);
19
+ return server.delivery.toCallToolResult(recorded, contract);
20
+ return recordResult({ ...options, delivery: server.delivery }, contract, result.value);
22
21
  });
23
22
  };
@@ -4,7 +4,6 @@ import { APPLICATION_TOOL_CONTRACTS, applicationToolContract, } from "../../cont
4
4
  import { recordSessionEvidenceSources } from "../sessionEvidence.js";
5
5
  import { logToolExecution } from "../toolLogging.js";
6
6
  import { toolRegistrationOptions } from "../toolRegistrationOptions.js";
7
- import { toCallToolResult } from "../toolResult.js";
8
7
  import { recordResult } from "./helpers.js";
9
8
  /** Register execution-free Android and Apple inventory projection tools. */
10
9
  export const registerProjectMobileApplicationGraphTools = (server, options) => {
@@ -26,11 +25,11 @@ const registerProjection = (context) => {
26
25
  server.registerTool(contract.name, toolRegistrationOptions(contract), async (input) => {
27
26
  const result = await logToolExecution(options.logger, contract.name, () => Promise.resolve(project(input)));
28
27
  if (!result.ok)
29
- return toCallToolResult(result, contract);
28
+ return server.delivery.toCallToolResult(result, contract);
30
29
  const recordedSources = recordSessionEvidenceSources(options.recordEvidence, inventoryEvidenceSources(input));
31
30
  if (!recordedSources.ok)
32
- return toCallToolResult(recordedSources, contract);
33
- return recordResult(options, contract, result.value);
31
+ return server.delivery.toCallToolResult(recordedSources, contract);
32
+ return recordResult({ ...options, delivery: server.delivery }, contract, result.value);
34
33
  });
35
34
  };
36
35
  const inventoryEvidenceSources = (input) => {
@@ -4,7 +4,6 @@ import { traceApplicationFeatureEvidenceValidated } from "../../application/java
4
4
  import { applicationToolContract } from "../../contracts/applicationToolContracts.js";
5
5
  import { logToolExecution } from "../toolLogging.js";
6
6
  import { toolRegistrationOptions } from "../toolRegistrationOptions.js";
7
- import { toCallToolResult } from "../toolResult.js";
8
7
  import { recordResult } from "./helpers.js";
9
8
  const traceContract = applicationToolContract("trace_application_feature");
10
9
  /** Register the provider-neutral JavaScript feature trace tool. */
@@ -12,15 +11,15 @@ export const registerTraceFeatureTool = (server, options) => {
12
11
  server.registerTool(traceContract.name, toolRegistrationOptions(traceContract), async (input) => {
13
12
  const resolved = resolveApplicationEvidenceRequest(input, options.evidenceById);
14
13
  if (!resolved.ok)
15
- return toCallToolResult(resolved, traceContract);
14
+ return server.delivery.toCallToolResult(resolved, traceContract);
16
15
  const parsed = resolved.value;
17
16
  const result = await logToolExecution(options.logger, traceContract.name, () => Promise.resolve(traceApplicationFeatureEvidenceValidated(parsed)));
18
17
  if (!result.ok)
19
- return toCallToolResult(result, traceContract);
18
+ return server.delivery.toCallToolResult(result, traceContract);
20
19
  const sources = [parsed.application, ...parsed.native_observations];
21
20
  const recorded = recordSessionEvidenceSources(options.recordEvidence, sources);
22
21
  if (!recorded.ok)
23
- return toCallToolResult(recorded, traceContract);
24
- return recordResult(options, traceContract, result.value);
22
+ return server.delivery.toCallToolResult(recorded, traceContract);
23
+ return recordResult({ ...options, delivery: server.delivery }, traceContract, result.value);
25
24
  });
26
25
  };
@@ -4,7 +4,6 @@ import { traceJavaScriptSemanticsEvidenceValidated } from "../../application/jav
4
4
  import { applicationToolContract } from "../../contracts/applicationToolContracts.js";
5
5
  import { logToolExecution } from "../toolLogging.js";
6
6
  import { toolRegistrationOptions } from "../toolRegistrationOptions.js";
7
- import { toCallToolResult } from "../toolResult.js";
8
7
  import { recordResult } from "./helpers.js";
9
8
  const contract = applicationToolContract("trace_javascript_semantics");
10
9
  /** Register the bounded JavaScript semantic relation trace tool. */
@@ -12,16 +11,16 @@ export const registerTraceJavaScriptSemanticsTool = (server, options) => {
12
11
  server.registerTool(contract.name, toolRegistrationOptions(contract), async (input) => {
13
12
  const resolved = resolveApplicationEvidenceRequest(input, options.evidenceById);
14
13
  if (!resolved.ok)
15
- return toCallToolResult(resolved, contract);
14
+ return server.delivery.toCallToolResult(resolved, contract);
16
15
  const parsed = resolved.value;
17
16
  const result = await logToolExecution(options.logger, contract.name, () => Promise.resolve(traceJavaScriptSemanticsEvidenceValidated(parsed)));
18
17
  if (!result.ok)
19
- return toCallToolResult(result, contract);
18
+ return server.delivery.toCallToolResult(result, contract);
20
19
  const recorded = recordSessionEvidenceSources(options.recordEvidence, [
21
20
  parsed.application,
22
21
  ]);
23
22
  if (!recorded.ok)
24
- return toCallToolResult(recorded, contract);
25
- return recordResult(options, contract, result.value);
23
+ return server.delivery.toCallToolResult(recorded, contract);
24
+ return recordResult({ ...options, delivery: server.delivery }, contract, result.value);
26
25
  });
27
26
  };
@@ -4,9 +4,8 @@ import { createEvidence, parseEvidence } from "../domain/evidence.js";
4
4
  import { jsonValueSchema } from "../domain/jsonValue.js";
5
5
  import { recordDerivedEvidence } from "./recordDerivedEvidence.js";
6
6
  import { runDerivedOperation } from "./runDerivedOperation.js";
7
- import { ARTIFACT_COMPARISON_PROVIDER } from "./sessionToolPolicies.js";
7
+ import { ARTIFACT_COMPARISON_PROVIDER } from "../application/InvestigationProviders.js";
8
8
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
9
- import { toCallToolResult } from "./toolResult.js";
10
9
  /** Register Evidence-backed deterministic artifact comparison. */
11
10
  export const registerArtifactComparisonTool = (server, session, contract) => {
12
11
  server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => {
@@ -16,13 +15,13 @@ export const registerArtifactComparisonTool = (server, session, contract) => {
16
15
  return { left, right, comparison: compareArtifacts(left, right) };
17
16
  });
18
17
  if (!computed.ok)
19
- return toCallToolResult(computed, contract);
18
+ return server.delivery.toCallToolResult(computed, contract);
20
19
  const { left, right, comparison } = computed.value;
21
20
  const sources = [left, right];
22
21
  for (const source of sources) {
23
22
  const recordedSource = session.recordEvidence(source);
24
23
  if (!recordedSource.ok)
25
- return toCallToolResult(recordedSource, contract);
24
+ return server.delivery.toCallToolResult(recordedSource, contract);
26
25
  }
27
26
  const leftEvidenceIds = [left.evidence_id];
28
27
  const rightEvidenceIds = [right.evidence_id];
@@ -39,18 +38,22 @@ export const registerArtifactComparisonTool = (server, session, contract) => {
39
38
  limitations: comparison.limitations,
40
39
  evidenceLinks: [...leftEvidenceIds, ...rightEvidenceIds],
41
40
  });
42
- return toCallToolResult(recordDerivedEvidence(session, evidence, artifactUnknownInput(left, right, comparison.status)), contract);
41
+ return server.delivery.toEvidenceToolResult(evidence, contract, recordDerivedEvidence(session, evidence, artifactUnknownInput(left, right, comparison.status, evidence.evidence_id)));
43
42
  });
44
43
  };
45
- const artifactUnknownInput = (left, right, status) => {
46
- if (status === "unchanged" || left.evidence_id === right.evidence_id)
44
+ const artifactUnknownInput = (left, right, status, comparisonEvidenceId) => {
45
+ if (status === "unchanged")
47
46
  return undefined;
47
+ const contradictory = (status === "changed" || status === "contradiction") &&
48
+ left.evidence_id !== right.evidence_id;
48
49
  return {
49
- question: `Artifact comparison is ${status}`,
50
+ question: `Artifact comparison is ${status} (comparison ${comparisonEvidenceId})`,
50
51
  severity: status === "unknown" || status === "truncated" ? "high" : "medium",
51
52
  domain: "artifact-comparison",
52
- supporting_evidence_ids: [left.evidence_id],
53
- contradicting_evidence_ids: [right.evidence_id],
53
+ supporting_evidence_ids: contradictory
54
+ ? [left.evidence_id]
55
+ : [...new Set([left.evidence_id, right.evidence_id])],
56
+ contradicting_evidence_ids: contradictory ? [right.evidence_id] : [],
54
57
  required_authority: "shipped-artifact",
55
58
  required_confidence: "observed",
56
59
  required_environment: null,
@@ -1,17 +1,14 @@
1
1
  import { toolContract } from "../contracts/toolContracts.js";
2
2
  import { logToolExecution } from "./toolLogging.js";
3
3
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
4
- import { toCallToolResult } from "./toolResult.js";
5
4
  /** Bind offline layout inspection to its named contract and session Evidence owner. */
6
5
  export const registerBinaryDiagnosticsTools = (server, service, logger, recordEvidence) => {
7
6
  const contract = toolContract("inspect_binary_layout");
8
7
  server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => {
9
8
  const result = await logToolExecution(logger, contract.name, () => service.inspect(input, { signal: context.mcpReq.signal }));
10
9
  if (!result.ok)
11
- return toCallToolResult(result, contract);
10
+ return server.delivery.toCallToolResult(result, contract);
12
11
  const recorded = recordEvidence?.(result.value);
13
- return recorded !== undefined && !recorded.ok
14
- ? toCallToolResult(recorded, contract)
15
- : toCallToolResult(result, contract);
12
+ return server.delivery.toEvidenceToolResult(result.value, contract, recorded);
16
13
  });
17
14
  };