rea-agents 6.1.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 (453) hide show
  1. package/README.md +7 -5
  2. package/bridge/ghidra/ReaGhidraBridge.java +32 -4
  3. package/bridge/hopper_bridge.py +6 -1
  4. package/dist/android/JadxConfiguration.js +87 -7
  5. package/dist/android/JadxMcpTransport.js +14 -2
  6. package/dist/android/JadxProvider.js +57 -35
  7. package/dist/application/BinaryTargetResolver.js +5 -3
  8. package/dist/application/BrowserEvidence.js +3 -8
  9. package/dist/application/BrowserScenarioEvidence.js +2 -18
  10. package/dist/application/CapabilityInventory.js +43 -9
  11. package/dist/application/ClientConfigurationDocument.js +69 -25
  12. package/dist/application/DirectAnalysis.js +29 -14
  13. package/dist/application/DirectAnalysisCleanup.js +72 -0
  14. package/dist/application/DirectAnalysisStatus.js +4 -5
  15. package/dist/application/Doctor.js +15 -19
  16. package/dist/application/DoctorDiagnostics.js +1 -2
  17. package/dist/application/EnhancedTools.js +51 -6
  18. package/dist/application/EvidenceBundleFiles.js +8 -3
  19. package/dist/application/InvestigationProviders.js +9 -1
  20. package/dist/application/JsonFiles.js +42 -9
  21. package/dist/application/LinuxHopper.js +9 -6
  22. package/dist/application/MacHopper.js +15 -18
  23. package/dist/application/RealHopperAssertions.js +0 -11
  24. package/dist/application/ReconstructionObligationCandidates.js +1 -1
  25. package/dist/application/ReferenceSourceImportEntries.js +1 -1
  26. package/dist/application/Setup.js +8 -16
  27. package/dist/application/SetupHost.js +16 -27
  28. package/dist/application/SetupPlan.js +6 -6
  29. package/dist/application/Uninstall.js +81 -29
  30. package/dist/application/UpdateMaintenance.js +7 -5
  31. package/dist/application/UpdateRuntime.js +12 -12
  32. package/dist/application/WebScriptExportService.js +30 -4
  33. package/dist/application/WorkflowEvidence.js +25 -2
  34. package/dist/application/XrefsAddressResolution.js +45 -0
  35. package/dist/application/analysisView/AnalysisViewService.js +76 -0
  36. package/dist/application/binary/AnalysisClientCleanup.js +30 -5
  37. package/dist/application/binary/AnalysisProviderEvaluation.js +1 -2
  38. package/dist/application/binary/AnalysisProviderRegistry.js +2 -6
  39. package/dist/application/binary/AnalysisSnapshotCache.js +10 -8
  40. package/dist/application/binary/BinarySession.js +70 -29
  41. package/dist/application/binary/BinarySessionComposition.js +1 -3
  42. package/dist/application/binary/BinarySessionExecution.js +3 -5
  43. package/dist/application/binary/BinarySessionOpen.js +1 -1
  44. package/dist/application/binary/BinarySessionRecords.js +1 -1
  45. package/dist/application/binary/BinarySessionStatus.js +1 -6
  46. package/dist/application/binary/CompositeProvider.js +4 -18
  47. package/dist/application/binary/LazyAnalysisProvider.js +5 -5
  48. package/dist/application/binary/SessionProviderRouter.js +27 -135
  49. package/dist/application/homebrew.js +48 -0
  50. package/dist/application/javascript/ElectronActiveEvidence.js +9 -13
  51. package/dist/application/javascript/JavaScriptApplicationEvidence.js +2 -6
  52. package/dist/application/javascript/JavaScriptApplicationService.js +6 -1
  53. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +5 -3
  54. package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +11 -9
  55. package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +11 -3
  56. package/dist/application/javascript/JavaScriptArtifactGraphContext.js +9 -0
  57. package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +8 -5
  58. package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +12 -3
  59. package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +0 -1
  60. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +43 -16
  61. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +46 -6
  62. package/dist/application/javascript/JavaScriptModuleRelationships.js +1 -1
  63. package/dist/application/javascript/JavaScriptRuntimeObservationService.js +3 -3
  64. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +2 -3
  65. package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +1 -2
  66. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +2 -3
  67. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +1 -5
  68. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +75 -46
  69. package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +2 -3
  70. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +42 -19
  71. package/dist/application/managed/ManagedMemberComparisonService.js +2 -1
  72. package/dist/application/managed/ManagedNativeVerificationService.js +2 -1
  73. package/dist/application/process/ProcessCli.js +11 -11
  74. package/dist/application/process/ProcessEvidence.js +0 -1
  75. package/dist/artifacts/ArtifactProvider.js +39 -14
  76. package/dist/artifacts/ArtifactReader.js +31 -0
  77. package/dist/artifacts/DirectoryArtifactReader.js +2 -1
  78. package/dist/artifacts/MachOSliceArtifactReader.js +9 -2
  79. package/dist/artifacts/NativeDmgArtifactReader.js +65 -20
  80. package/dist/artifacts/SafeOutputTree.js +16 -2
  81. package/dist/artifacts/ZipArtifactReader.js +11 -4
  82. package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +4 -2
  83. package/dist/artifacts/apple/DylibResolutionReader.js +17 -7
  84. package/dist/artifacts/apple/KeyedArchiveReader.js +21 -3
  85. package/dist/artifacts/extraction/ArtifactExtraction.js +78 -21
  86. package/dist/artifacts/inventory/ArtifactGraphConstruction.js +67 -61
  87. package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
  88. package/dist/artifacts/inventory/reader.js +3 -3
  89. package/dist/artifacts/inventory/scanCanonical.js +48 -24
  90. package/dist/artifacts/inventory/scanReader.js +5 -9
  91. package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
  92. package/dist/browser/CdpBrowserProvider.js +2 -3
  93. package/dist/browser/CdpCaptureEventHandlers.js +2 -4
  94. package/dist/browser/CdpCaptureEvents.js +0 -1
  95. package/dist/browser/CdpCaptureValues.js +20 -0
  96. package/dist/browser/CdpElectronProvider.js +0 -2
  97. package/dist/browser/CdpElectronScriptEvents.js +2 -8
  98. package/dist/browser/CdpElectronScripts.js +2 -3
  99. package/dist/browser/CdpPageCaptureScripts.js +2 -3
  100. package/dist/browser/CdpSafeMetadata.js +10 -10
  101. package/dist/browser/PlaywrightBrowserScenarioProvider.js +59 -44
  102. package/dist/browser/PlaywrightElectronActiveActions.js +2 -56
  103. package/dist/browser/PlaywrightElectronActiveProvider.js +10 -6
  104. package/dist/browser/PlaywrightScenarioArtifacts.js +1 -1
  105. package/dist/browser/PlaywrightScenarioBrowser.js +139 -39
  106. package/dist/browser/PlaywrightScenarioEvents.js +1 -1
  107. package/dist/browser/PlaywrightScenarioSession.js +39 -22
  108. package/dist/browser/assets/ScriptCaptureAdapters.js +1 -1
  109. package/dist/browser/history/CaptureFailures.js +6 -2
  110. package/dist/browser/history/MitmproxyCaptureAdapter.js +4 -2
  111. package/dist/catalogIdentity.js +0 -1
  112. package/dist/cli/analysisViewCommands.js +36 -0
  113. package/dist/cli/artifactCommands.js +11 -12
  114. package/dist/cli/coreAnalysisCommands.js +3 -3
  115. package/dist/cli/coreBinaryCommands.js +32 -27
  116. package/dist/cli/coreNativeCommands.js +9 -10
  117. package/dist/cli/electronCommands.js +4 -4
  118. package/dist/cli/interactiveSetup.js +6 -6
  119. package/dist/cli/managedCommands.js +7 -8
  120. package/dist/cli/nativeCallCommands.js +1 -2
  121. package/dist/cli/omittableDefaults.js +50 -0
  122. package/dist/cli/processCommands.js +3 -2
  123. package/dist/cli/setupCommands.js +16 -15
  124. package/dist/cli/utilityCommands.js +9 -9
  125. package/dist/cli.js +16 -8
  126. package/dist/cliBrowserScenarioCommands.js +2 -2
  127. package/dist/cliCommandNames.js +1 -0
  128. package/dist/cliJsonInput.js +15 -1
  129. package/dist/cliOutput.js +0 -38
  130. package/dist/composition/auxiliaryAnalysisProviders.js +27 -23
  131. package/dist/composition/binary.js +9 -9
  132. package/dist/composition/browserScenario.js +2 -1
  133. package/dist/composition/directAnalysis.js +20 -13
  134. package/dist/composition/electronScenario.js +1 -1
  135. package/dist/composition/optionalObservationProviders.js +12 -7
  136. package/dist/config/environment.js +6 -0
  137. package/dist/config/ghidraStartupTimeout.js +4 -9
  138. package/dist/config/homeDirectory.js +12 -0
  139. package/dist/config/mcpResponseBudget.js +9 -1
  140. package/dist/config/parseConfig.js +7 -3
  141. package/dist/config/parsers.js +19 -22
  142. package/dist/contracts/analysisViewToolContracts.js +56 -0
  143. package/dist/contracts/applicationToolContracts.js +5 -4
  144. package/dist/contracts/artifactComparisonExample.js +2 -2
  145. package/dist/contracts/artifactToolContracts.js +1 -1
  146. package/dist/contracts/browserScenarioToolContracts.js +1 -1
  147. package/dist/contracts/browserToolContracts.js +19 -15
  148. package/dist/contracts/enhancedInputs.js +2 -2
  149. package/dist/contracts/enhancedToolContracts.js +4 -3
  150. package/dist/contracts/evm/evmToolContracts.js +1 -1
  151. package/dist/contracts/functionWorkflowToolContracts.js +1 -1
  152. package/dist/contracts/inputSchemaPresentation.js +90 -0
  153. package/dist/contracts/investigationExamples.js +4 -3
  154. package/dist/contracts/javascript/electronToolContracts.js +1 -1
  155. package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +0 -20
  156. package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +245 -0
  157. package/dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js +1 -1
  158. package/dist/contracts/managed/managedToolContracts.js +5 -10
  159. package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
  160. package/dist/contracts/mobileApplicationGraphExamples.js +3 -3
  161. package/dist/contracts/native/binaryDiagnosticsToolContracts.js +1 -1
  162. package/dist/contracts/native/nativeToolContracts.js +2 -2
  163. package/dist/contracts/officialToolContracts.js +2 -1
  164. package/dist/contracts/promptContracts.js +2 -2
  165. package/dist/contracts/providerSelection.js +1 -1
  166. package/dist/contracts/sessionToolContracts.js +14 -2
  167. package/dist/contracts/sessionToolSchemas.js +1 -14
  168. package/dist/contracts/toolContracts.js +2 -0
  169. package/dist/contracts/toolEffects.js +1 -0
  170. package/dist/contracts/toolOutputSchemaGroups.js +136 -92
  171. package/dist/contracts/toolOutputSchemaPrimitives.js +11 -21
  172. package/dist/contracts/toolSchemaMetadata.js +18 -69
  173. package/dist/contracts/webNetworkCaptureToolContracts.js +1 -1
  174. package/dist/contracts/webRuntimeToolContracts.js +1 -1
  175. package/dist/contracts/webScriptToolContracts.js +1 -1
  176. package/dist/doctorRuntime.js +7 -5
  177. package/dist/domain/analysisErrorCore.js +3 -0
  178. package/dist/domain/analysisErrorPresentation.js +18 -3
  179. package/dist/domain/analysisErrorProjection.js +24 -5
  180. package/dist/domain/analysisSnapshot.js +29 -31
  181. package/dist/domain/analysisView/analysisView.js +243 -0
  182. package/dist/domain/analysisView/analysisViewCoverage.js +19 -0
  183. package/dist/domain/analysisView/binaryLayoutView.js +159 -0
  184. package/dist/domain/analysisView/javascriptApplicationView.js +238 -0
  185. package/dist/domain/android/androidApplication.js +1 -1
  186. package/dist/domain/apple/appleApplication.js +1 -1
  187. package/dist/domain/apple/dylibResolution.js +10 -3
  188. package/dist/domain/apple/interfaceBuilderGraph.js +0 -1
  189. package/dist/domain/apple/keyedArchive.js +26 -2
  190. package/dist/domain/artifactComparison.js +15 -6
  191. package/dist/domain/artifactGraph.js +16 -3
  192. package/dist/domain/artifactInventoryEvidence.js +9 -16
  193. package/dist/domain/artifactOperationError.js +3 -3
  194. package/dist/domain/artifactPartialObservation.js +1 -0
  195. package/dist/domain/artifactPathSyntax.js +49 -0
  196. package/dist/domain/binaryTarget.js +39 -13
  197. package/dist/domain/browserCaptureComparison.js +13 -49
  198. package/dist/domain/browserNetworkEvidence.js +10 -4
  199. package/dist/domain/browserObservation.js +0 -1
  200. package/dist/domain/browserObservationSchemas.js +14 -3
  201. package/dist/domain/browserScenario.js +0 -1
  202. package/dist/domain/browserScenarioCapture.js +1 -2
  203. package/dist/domain/browserScenarioDiff.js +0 -2
  204. package/dist/domain/browserScenarioDiffEvidence.js +0 -12
  205. package/dist/domain/browserScenarioDiffValues.js +2 -2
  206. package/dist/domain/browserScenarioValues.js +3 -4
  207. package/dist/domain/callPath.js +8 -9
  208. package/dist/domain/callPathSchemas.js +2 -2
  209. package/dist/domain/changedBehavior.js +3 -3
  210. package/dist/domain/completionLedgerGeneration.js +2 -1
  211. package/dist/domain/configurationErrors.js +12 -0
  212. package/dist/domain/conformancePackage.js +4 -3
  213. package/dist/domain/evidence.js +10 -36
  214. package/dist/domain/evidenceBundle.js +7 -9
  215. package/dist/domain/evidenceCompletionLedger.js +2 -1
  216. package/dist/domain/functionComparison.js +4 -5
  217. package/dist/domain/functionComparisonDimensions.js +120 -87
  218. package/dist/domain/functionComparisonNormalization.js +23 -34
  219. package/dist/domain/functionComparisonResults.js +1 -4
  220. package/dist/domain/functionComparisonSchemas.js +2 -8
  221. package/dist/domain/functionDossierEvidence.js +2 -37
  222. package/dist/domain/javascript/electronActiveObservation.js +26 -69
  223. package/dist/domain/javascript/electronObservation.js +14 -3
  224. package/dist/domain/javascript/electronStaticAnalysisBrowser.js +10 -9
  225. package/dist/domain/javascript/electronStaticAnalysisIpc.js +2 -1
  226. package/dist/domain/javascript/electronStaticAnalysisNative.js +2 -1
  227. package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +2 -0
  228. package/dist/domain/javascript/javascriptApplicationGraph.js +26 -3
  229. package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +9 -2
  230. package/dist/domain/javascript/javascriptApplicationVersionItems.js +5 -2
  231. package/dist/domain/javascript/javascriptApplicationVersionKeys.js +2 -1
  232. package/dist/{application/javascript/JavaScriptReturnShapeProjection.js → domain/javascript/javascriptExportReturnShapeProjection.js} +4 -4
  233. package/dist/domain/javascript/javascriptExportShapeComparison.js +7 -1
  234. package/dist/domain/javascript/javascriptExportShapeComparisonIdentity.js +6 -1
  235. package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +29 -1
  236. package/dist/domain/javascript/javascriptExportShapeSelection.js +5 -5
  237. package/dist/domain/javascript/javascriptExportShapeVariants.js +67 -14
  238. package/dist/domain/javascript/javascriptFeatureSeed.js +20 -0
  239. package/dist/domain/javascript/javascriptFeatureTraversal.js +0 -1
  240. package/dist/domain/javascript/javascriptNativeHandoff.js +1 -1
  241. package/dist/domain/javascript/javascriptRuntimeLoadState.js +0 -1
  242. package/dist/domain/javascript/javascriptRuntimeObservation.js +10 -2
  243. package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +1 -1
  244. package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +3 -2
  245. package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +0 -1
  246. package/dist/domain/javascript/javascriptSemanticAnalysis.js +9 -3
  247. package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +2 -1
  248. package/dist/domain/javascript/javascriptSemanticCalls.js +2 -1
  249. package/dist/domain/javascript/javascriptSemanticChildProcesses.js +2 -1
  250. package/dist/domain/javascript/javascriptSemanticDataEffects.js +1 -1
  251. package/dist/domain/javascript/javascriptSemanticGraph.js +88 -46
  252. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +77 -20
  253. package/dist/domain/javascript/javascriptSemanticMutationValues.js +21 -27
  254. package/dist/domain/javascript/javascriptSemanticObjects.js +83 -42
  255. package/dist/domain/javascript/javascriptSemanticPrimitives.js +1 -12
  256. package/dist/domain/javascript/javascriptSemanticProjection.js +2 -3
  257. package/dist/domain/javascript/javascriptSemanticPromises.js +2 -1
  258. package/dist/domain/javascript/javascriptSemanticResourceLimits.js +1 -1
  259. package/dist/domain/javascript/javascriptSemanticResources.js +1 -1
  260. package/dist/domain/javascript/javascriptSemanticReturns.js +32 -17
  261. package/dist/domain/javascript/javascriptSemanticSlots.js +72 -0
  262. package/dist/domain/javascript/javascriptSemanticValues.js +47 -54
  263. package/dist/domain/javascript/javascriptSourceMapPaths.js +104 -0
  264. package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +2 -1
  265. package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +0 -1
  266. package/dist/domain/javascript/sourceToBundleComparison.js +12 -3
  267. package/dist/domain/javascript/sourceToBundleSignals.js +47 -19
  268. package/dist/domain/localPath.js +1 -1
  269. package/dist/domain/managed/managedArtifact.js +6 -4
  270. package/dist/domain/managed/managedMemberComparison.js +2 -9
  271. package/dist/domain/managed/managedNativeVerification.js +0 -2
  272. package/dist/domain/managed/managedNativeVerificationMatch.js +9 -3
  273. package/dist/domain/native/binaryLayout.js +2 -3
  274. package/dist/domain/native/nativeApiBoundary.js +1 -1
  275. package/dist/domain/native/nativeCallObservation.js +5 -3
  276. package/dist/domain/native/nativeInstruction.js +7 -0
  277. package/dist/domain/native/recordedCrash.js +2 -3
  278. package/dist/domain/offsetDateTime.js +17 -0
  279. package/dist/domain/process/processCapture.js +13 -12
  280. package/dist/domain/process/processCaptureCoverage.js +67 -0
  281. package/dist/domain/process/processCaptureExample.js +2 -1
  282. package/dist/domain/process/processCaptureParsing.js +1 -34
  283. package/dist/domain/process/processCaptureValidation.js +81 -13
  284. package/dist/domain/process/processComparison.js +41 -22
  285. package/dist/domain/process/processObservation.js +10 -2
  286. package/dist/domain/process/processScenario.js +24 -2
  287. package/dist/domain/process/processTraceComparison.js +0 -2
  288. package/dist/domain/process/processTraceDimensionProjection.js +1 -1
  289. package/dist/domain/process/processTraceEvaluation.js +15 -11
  290. package/dist/domain/process/processTraceSpecification.js +3 -4
  291. package/dist/domain/providerAdapterError.js +2 -0
  292. package/dist/domain/reconstructionCoverage.js +5 -2
  293. package/dist/domain/reconstructionObligationLedgerSchemas.js +2 -1
  294. package/dist/domain/reconstructionReadinessSchemas.js +2 -1
  295. package/dist/domain/reconstructionVerification.js +3 -3
  296. package/dist/domain/reconstructionVerificationSchemas.js +2 -1
  297. package/dist/domain/referenceSourceGraph.js +20 -21
  298. package/dist/domain/staticRuntimeCorrelation.js +2 -2
  299. package/dist/domain/stringPatterns.js +6 -0
  300. package/dist/domain/swiftSymbolClassification.js +61 -0
  301. package/dist/domain/symbolAnalysis.js +66 -18
  302. package/dist/domain/webCaptureDiff.js +0 -1
  303. package/dist/domain/webCaptureDiffSchemas.js +6 -3
  304. package/dist/domain/webEventListeners.js +3 -2
  305. package/dist/domain/webExecution.js +3 -2
  306. package/dist/domain/webRuntime.js +0 -2
  307. package/dist/domain/webScriptExport.js +1 -1
  308. package/dist/dotnet/ManagedArtifactInspector.js +2 -19
  309. package/dist/dotnet/ManagedMemberInspector.js +12 -18
  310. package/dist/dotnet/ManagedMemberInspectorCore.js +47 -44
  311. package/dist/dotnet/ManagedMemberRows.js +75 -62
  312. package/dist/dotnet/ManagedMetadataInventory.js +16 -22
  313. package/dist/dotnet/ManagedMethodBodyReader.js +4 -0
  314. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +109 -94
  315. package/dist/dotnet/ManagedNativeBoundaryInspector.js +12 -21
  316. package/dist/dotnet/ManagedReaderFailure.js +16 -0
  317. package/dist/dotnet/ManagedStaticProvider.js +3 -5
  318. package/dist/evaluation/AgentEvaluationFixtures.js +250 -0
  319. package/dist/evaluation/AgentEvaluationReport.js +28 -0
  320. package/dist/evaluation/CodexAgentEval.js +12 -8
  321. package/dist/evaluation/KnownAnswerEvaluation.js +281 -0
  322. package/dist/evm/EvmoleInterfaceProvider.js +2 -1
  323. package/dist/firmware/FirmwareCommand.js +9 -5
  324. package/dist/firmware/FirmwareProvider.js +4 -4
  325. package/dist/generatedPackageMetadata.js +2 -2
  326. package/dist/ghidra/GhidraAnalysisProfile.js +3 -6
  327. package/dist/ghidra/GhidraClient.js +91 -32
  328. package/dist/ghidra/GhidraClientStartup.js +0 -2
  329. package/dist/ghidra/GhidraDoctor.js +6 -5
  330. package/dist/ghidra/GhidraFunctionValues.js +3 -5
  331. package/dist/ghidra/GhidraInstallation.js +40 -12
  332. package/dist/ghidra/GhidraJavaLaunch.js +6 -2
  333. package/dist/ghidra/GhidraLauncher.js +15 -7
  334. package/dist/ghidra/GhidraProvider.js +6 -2
  335. package/dist/ghidra/GhidraProviderCapabilities.js +6 -0
  336. package/dist/ghidra/GhidraProviderClient.js +13 -3
  337. package/dist/ghidra/GhidraSessionError.js +2 -0
  338. package/dist/ghidra/GhidraSessionRoot.js +39 -0
  339. package/dist/ghidra/extensions/GhidraExtensions.js +17 -10
  340. package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +8 -2
  341. package/dist/hopper/BridgeLauncher.js +34 -45
  342. package/dist/hopper/HopperAnalysisProfile.js +3 -8
  343. package/dist/hopper/HopperCleanup.js +56 -27
  344. package/dist/hopper/HopperClient.js +86 -65
  345. package/dist/hopper/HopperMachOImage.js +3 -2
  346. package/dist/hopper/HopperProvider.js +16 -18
  347. package/dist/hopper/HopperRegexSearch.js +3 -6
  348. package/dist/hopper/HopperTargetLease.js +132 -49
  349. package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -0
  350. package/dist/ida/IdaConfiguration.js +8 -3
  351. package/dist/ida/IdaInput.js +1 -7
  352. package/dist/ida/IdaMcpConnection.js +8 -4
  353. package/dist/ida/IdaOperationRunner.js +3 -3
  354. package/dist/ida/IdaProvider.js +8 -12
  355. package/dist/ida/IdaSessionClient.js +20 -18
  356. package/dist/ida/IdaWorkspace.js +12 -13
  357. package/dist/inspector/V8InspectorCaptureProjection.js +1 -1
  358. package/dist/inspector/V8InspectorProvider.js +38 -28
  359. package/dist/javascript/recovery/WakaruCommand.js +7 -2
  360. package/dist/javascript/recovery/WakaruExecution.js +5 -2
  361. package/dist/main/shutdown.js +11 -3
  362. package/dist/main/startup.js +9 -2
  363. package/dist/main/transport.js +22 -2
  364. package/dist/main.js +11 -18
  365. package/dist/native/AppleMachoSelection.js +16 -6
  366. package/dist/native/CommandRunner.js +9 -7
  367. package/dist/native/LldbCallTracer.js +8 -2
  368. package/dist/native/NativeMacOSProvider.js +25 -15
  369. package/dist/native/NativeUiHelperRuntime.js +11 -2
  370. package/dist/native/NativeUiObservation.js +2 -2
  371. package/dist/native/pwntools/PwntoolsDecoder.js +2 -1
  372. package/dist/process/DarwinProcessRunTokenReader.js +16 -2
  373. package/dist/process/ExecFileOutput.js +88 -6
  374. package/dist/process/PrivateRuntimeRoot.js +10 -5
  375. package/dist/process/ProcessOwnership.js +1 -4
  376. package/dist/process/ProcessOwnershipObservation.js +11 -5
  377. package/dist/process/ProviderProcess.js +1 -3
  378. package/dist/process/capture/FilesystemSnapshot.js +50 -13
  379. package/dist/process/capture/ProcessCaptureError.js +13 -0
  380. package/dist/process/capture/ProcessCaptureLifecycle.js +158 -70
  381. package/dist/process/capture/ProcessFilesystemEffects.js +33 -3
  382. package/dist/process/capture/ProcessHarness.js +21 -25
  383. package/dist/process/capture/ProcessNormalization.js +20 -2
  384. package/dist/process/capture/ProcessSampling.js +25 -2
  385. package/dist/process/capture/TerminalRenderer.js +14 -0
  386. package/dist/process/snapshotEnvironment.js +14 -0
  387. package/dist/server/EvidenceMcpServer.js +25 -14
  388. package/dist/server/createServer.js +49 -36
  389. package/dist/server/mcpClientMetadata.js +12 -5
  390. package/dist/server/promptCompletion.js +3 -8
  391. package/dist/server/registerAnalysisViewTool.js +15 -0
  392. package/dist/server/registerAndroidTools.js +2 -3
  393. package/dist/server/registerApplicationTools/compareExportShapes.js +4 -5
  394. package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
  395. package/dist/server/registerApplicationTools/compareVersions.js +4 -5
  396. package/dist/server/registerApplicationTools/coverage.js +1 -2
  397. package/dist/server/registerApplicationTools/helpers.js +1 -2
  398. package/dist/server/registerApplicationTools/obligationLedger.js +4 -5
  399. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -4
  400. package/dist/server/registerApplicationTools/traceFeature.js +4 -5
  401. package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
  402. package/dist/server/registerArtifactComparisonTool.js +4 -5
  403. package/dist/server/registerBinaryDiagnosticsTools.js +2 -3
  404. package/dist/server/registerBrowserScenarioTool.js +3 -4
  405. package/dist/server/registerBrowserTools.js +13 -16
  406. package/dist/server/registerBundleComparisonTool.js +5 -6
  407. package/dist/server/registerCloseLifecycleTool.js +2 -3
  408. package/dist/server/registerElectronTools.js +10 -13
  409. package/dist/server/registerEnhancedTools.js +23 -23
  410. package/dist/server/registerEvidenceTools.js +3 -4
  411. package/dist/server/registerEvmTools.js +2 -3
  412. package/dist/server/registerFirmwareTools.js +2 -3
  413. package/dist/server/registerFunctionComparisonTool.js +7 -8
  414. package/dist/server/registerInvestigationTools.js +14 -15
  415. package/dist/server/registerJavaScriptRecoveryTool.js +2 -3
  416. package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -6
  417. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +5 -6
  418. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -5
  419. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +6 -7
  420. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +6 -7
  421. package/dist/server/registerOfficialTools.js +4 -19
  422. package/dist/server/registerProcessComparisonTool.js +8 -8
  423. package/dist/server/registerRecordedCrashTools.js +2 -3
  424. package/dist/server/registerSessionRecordTools.js +15 -19
  425. package/dist/server/registerSessionStatusTool.js +3 -4
  426. package/dist/server/registerSessionTools.js +12 -18
  427. package/dist/server/registerWebModuleTool.js +2 -3
  428. package/dist/server/registerWebNetworkCaptureTool.js +2 -3
  429. package/dist/server/registerWebRuntimeTools.js +4 -5
  430. package/dist/server/registerWebScriptTool.js +2 -3
  431. package/dist/server/registerWebSourceLocationTool.js +2 -3
  432. package/dist/server/toolResult.js +66 -94
  433. package/dist/server/toolResultEncoding.js +11 -10
  434. package/dist/windows/WindowsNativeLoader.js +1 -0
  435. package/dist/windows/WindowsOwnedProcess.js +60 -15
  436. package/dist/windows/WindowsPrivateRuntime.js +7 -8
  437. package/native/windows/README.md +3 -1
  438. package/native/windows/build/manifest.json +2 -2
  439. package/native/windows/build/rea-windows-x64.node +0 -0
  440. package/package.json +39 -30
  441. package/scripts/rea.mjs +3 -6
  442. package/skills/reverse-engineer-anything/SKILL.md +9 -8
  443. package/skills/reverse-engineer-anything/references/android-applications.md +6 -3
  444. package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -4
  445. package/skills/reverse-engineer-anything/references/javascript-applications.md +16 -6
  446. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +9 -0
  447. package/dist/config.js +0 -1
  448. package/dist/contracts/browserCaptureToolInputSchema.js +0 -43
  449. package/dist/contracts/process/processCaptureExample.js +0 -2
  450. package/dist/contracts/toolOutputSchemas.js +0 -2
  451. package/dist/main/reload.js +0 -12
  452. package/dist/main/state.js +0 -3
  453. package/dist/server/sessionToolPolicies.js +0 -2
@@ -1,15 +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, toEvidenceToolResult } 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 toEvidenceToolResult(result.value, contract, recorded);
12
+ return server.delivery.toEvidenceToolResult(result.value, contract, recorded);
14
13
  });
15
14
  };
@@ -5,20 +5,19 @@ 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 { toCallToolResult, toEvidenceToolResult } from "./toolResult.js";
9
8
  /** Register the browser scenario tool with execution-time provider diagnostics. */
10
9
  export const registerBrowserScenarioTool = (server, options) => {
11
10
  const contract = toolContract("capture_browser_scenario");
12
11
  server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => {
13
12
  const scenario = browserScenarioSchema.parse(input);
14
13
  if (options.loadFailure !== undefined)
15
- return toCallToolResult(err(optionalProviderUnavailable(options.loadFailure, contract.name)), contract);
14
+ return server.delivery.toCallToolResult(err(optionalProviderUnavailable(options.loadFailure, contract.name)), contract);
16
15
  const result = await logToolExecution(options.logger, contract.name, () => captureBrowserScenario(options.provider, scenario, {
17
16
  signal: context.mcpReq.signal,
18
17
  }));
19
18
  if (!result.ok)
20
- return toCallToolResult(result, contract);
19
+ return server.delivery.toCallToolResult(result, contract);
21
20
  const recorded = options.recordEvidence?.(result.value);
22
- return toEvidenceToolResult(result.value, contract, recorded);
21
+ return server.delivery.toEvidenceToolResult(result.value, contract, recorded);
23
22
  });
24
23
  };
@@ -7,10 +7,10 @@ import { inspectWebPageInputSchema } from "../domain/browserObservation.js";
7
7
  import { mcpProgressReporter } from "./mcpProgress.js";
8
8
  import { logToolExecution } from "./toolLogging.js";
9
9
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
10
- import { toCallToolResult, toEvidenceToolResult } from "./toolResult.js";
11
10
  /** Register browser tools with execution-time provider diagnostics. */
12
11
  // oxlint-disable-next-line max-lines-per-function -- direct SDK calls retain each schema-handler type correlation.
13
12
  export const registerBrowserTools = (server, options) => {
13
+ const registration = { ...options, delivery: server.delivery };
14
14
  const listContract = toolContract("list_browser_targets");
15
15
  const inspectContract = toolContract("inspect_web_page");
16
16
  const analyzeContract = toolContract("analyze_web_bundle");
@@ -19,42 +19,39 @@ export const registerBrowserTools = (server, options) => {
19
19
  const captureDiffContract = toolContract("compare_web_captures");
20
20
  const screenshotContract = toolContract("capture_web_screenshot");
21
21
  const screenshotDiffContract = toolContract("compare_web_screenshots");
22
- server.registerTool(listContract.name, toolRegistrationOptions(listContract), (input, context) => runBrowserTool(options, listContract, { input, context }, (parsed, { signal }) => listBrowserTargets(options.browser, parsed, {
22
+ server.registerTool(listContract.name, toolRegistrationOptions(listContract), (input, context) => runBrowserTool(registration, listContract, { input, context }, (parsed, { signal }) => listBrowserTargets(options.browser, parsed, {
23
23
  signal,
24
24
  })));
25
- server.registerTool(inspectContract.name, toolRegistrationOptions(inspectContract), (input, context) => runBrowserTool(options, inspectContract, { input, context }, (parsed, { signal, progress }) => inspectWebPage(options.browser, inspectWebPageInputSchema.parse(parsed), { signal, progress })));
26
- server.registerTool(analyzeContract.name, toolRegistrationOptions(analyzeContract), (input, context) => runBrowserTool(options, analyzeContract, { input, context }, (parsed, { signal, progress }) => analyzeWebBundle(options.browser, analyzeWebBundleInputSchema.parse(parsed), {
25
+ server.registerTool(inspectContract.name, toolRegistrationOptions(inspectContract), (input, context) => runBrowserTool(registration, inspectContract, { input, context }, (parsed, { signal, progress }) => inspectWebPage(options.browser, inspectWebPageInputSchema.parse(parsed), { signal, progress })));
26
+ server.registerTool(analyzeContract.name, toolRegistrationOptions(analyzeContract), (input, context) => runBrowserTool(registration, analyzeContract, { input, context }, (parsed, { signal, progress }) => analyzeWebBundle(options.browser, analyzeWebBundleInputSchema.parse(parsed), {
27
27
  signal,
28
28
  progress,
29
29
  })));
30
- server.registerTool(sessionContract.name, toolRegistrationOptions(sessionContract), (input, context) => runBrowserTool(options, sessionContract, { input, context }, (parsed, { signal, progress }) => observeWebSession(options.browser, parsed, {
30
+ server.registerTool(sessionContract.name, toolRegistrationOptions(sessionContract), (input, context) => runBrowserTool(registration, sessionContract, { input, context }, (parsed, { signal, progress }) => observeWebSession(options.browser, parsed, {
31
31
  signal,
32
32
  progress,
33
33
  })));
34
- server.registerTool(webMcpContract.name, toolRegistrationOptions(webMcpContract), (input, context) => runBrowserTool(options, webMcpContract, { input, context }, (parsed, { signal, progress }) => discoverWebMcpTools(options.browser, parsed, {
34
+ server.registerTool(webMcpContract.name, toolRegistrationOptions(webMcpContract), (input, context) => runBrowserTool(registration, webMcpContract, { input, context }, (parsed, { signal, progress }) => discoverWebMcpTools(options.browser, parsed, {
35
35
  signal,
36
36
  progress,
37
37
  })));
38
- server.registerTool(captureDiffContract.name, toolRegistrationOptions(captureDiffContract), (input, context) => runBrowserTool(options, captureDiffContract, { input, context }, (parsed) => compareWebCaptureEvidence(options.browser, parsed)));
39
- server.registerTool(screenshotContract.name, toolRegistrationOptions(screenshotContract), (input, context) => runBrowserTool(options, screenshotContract, { input, context }, (parsed, { signal, progress }) => captureWebScreenshot(options.browser, parsed, {
38
+ server.registerTool(captureDiffContract.name, toolRegistrationOptions(captureDiffContract), (input, context) => runBrowserTool(registration, captureDiffContract, { input, context }, (parsed) => compareWebCaptureEvidence(options.browser, parsed)));
39
+ server.registerTool(screenshotContract.name, toolRegistrationOptions(screenshotContract), (input, context) => runBrowserTool(registration, screenshotContract, { input, context }, (parsed, { signal, progress }) => captureWebScreenshot(options.browser, parsed, {
40
40
  signal,
41
41
  progress,
42
42
  })));
43
- server.registerTool(screenshotDiffContract.name, toolRegistrationOptions(screenshotDiffContract), (input, context) => runBrowserTool(options, screenshotDiffContract, { input, context }, (parsed) => compareWebScreenshotEvidence(options.browser, parsed)));
43
+ server.registerTool(screenshotDiffContract.name, toolRegistrationOptions(screenshotDiffContract), (input, context) => runBrowserTool(registration, screenshotDiffContract, { input, context }, (parsed) => compareWebScreenshotEvidence(options.browser, parsed)));
44
44
  };
45
45
  const runBrowserTool = async (options, contract, request, execute) => {
46
46
  const { input, context } = request;
47
47
  if (options.loadFailure !== undefined)
48
- return toCallToolResult(err(optionalProviderUnavailable(options.loadFailure, contract.name)), contract);
48
+ return options.delivery.toCallToolResult(err(optionalProviderUnavailable(options.loadFailure, contract.name)), contract);
49
49
  const result = await logToolExecution(options.logger, contract.name, () => execute(input, {
50
50
  signal: context.mcpReq.signal,
51
51
  progress: mcpProgressReporter(context),
52
52
  }));
53
53
  if (!result.ok)
54
- return toCallToolResult(result, contract);
55
- return evidenceResult(options, contract, result.value);
56
- };
57
- const evidenceResult = (options, contract, evidence) => {
58
- const recorded = options.recordEvidence?.(evidence);
59
- return toEvidenceToolResult(evidence, contract, recorded);
54
+ return options.delivery.toCallToolResult(result, contract);
55
+ const recorded = options.recordEvidence?.(result.value);
56
+ return options.delivery.toEvidenceToolResult(result.value, contract, recorded);
60
57
  };
@@ -4,9 +4,8 @@ import { compareBundles } from "../domain/bundleComparison.js";
4
4
  import { createEvidence } from "../domain/evidence.js";
5
5
  import { jsonValueSchema } from "../domain/jsonValue.js";
6
6
  import { runDerivedOperation } from "./runDerivedOperation.js";
7
- import { BUNDLE_COMPARISON_PROVIDER } from "./sessionToolPolicies.js";
7
+ import { BUNDLE_COMPARISON_PROVIDER } from "../application/InvestigationProviders.js";
8
8
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
9
- import { toCallToolResult, toEvidenceToolResult } from "./toolResult.js";
10
9
  /** Register canonical Evidence bundle comparison. */
11
10
  export const registerBundleComparisonTool = (server, session, contract) => {
12
11
  server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => {
@@ -15,12 +14,12 @@ export const registerBundleComparisonTool = (server, session, contract) => {
15
14
  readEvidenceBundle(input.right_bundle_path),
16
15
  ]);
17
16
  if (!left.ok)
18
- return toCallToolResult(left, contract);
17
+ return server.delivery.toCallToolResult(left, contract);
19
18
  if (!right.ok)
20
- return toCallToolResult(right, contract);
19
+ return server.delivery.toCallToolResult(right, contract);
21
20
  const computed = await runDerivedOperation(context, contract.name, () => compareBundles(left.value, right.value, input.record_pairs));
22
21
  if (!computed.ok)
23
- return toCallToolResult(computed, contract);
22
+ return server.delivery.toCallToolResult(computed, contract);
24
23
  const comparison = computed.value;
25
24
  const evidence = createEvidence(undefined, BUNDLE_COMPARISON_PROVIDER, {
26
25
  predicateType: "rea.bundle-comparison",
@@ -36,6 +35,6 @@ export const registerBundleComparisonTool = (server, session, contract) => {
36
35
  limitations: comparison.limitations,
37
36
  });
38
37
  const recorded = session.recordEvidence(evidence);
39
- return toEvidenceToolResult(evidence, contract, recorded);
38
+ return server.delivery.toEvidenceToolResult(evidence, contract, recorded);
40
39
  });
41
40
  };
@@ -3,7 +3,6 @@ import { ok } from "../domain/result.js";
3
3
  import { mcpProgressReporter } from "./mcpProgress.js";
4
4
  import { logToolExecution } from "./toolLogging.js";
5
5
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
6
- import { toCallToolResult } from "./toolResult.js";
7
6
  /** Register provider cleanup and optional pre-close snapshot persistence. */
8
7
  export const registerCloseLifecycleTool = ({ server, session, logger, closeContract, }) => {
9
8
  server.registerTool(closeContract.name, toolRegistrationOptions(closeContract), async (input, context) => {
@@ -13,13 +12,13 @@ export const registerCloseLifecycleTool = ({ server, session, logger, closeContr
13
12
  await reportLifecycleStart(progress, closeContract.name);
14
13
  const closed = await logToolExecution(logger, closeContract.name, () => session.close({ progress }));
15
14
  await reportLifecycleEnd(progress, closeContract.name, closed.ok);
16
- return toCallToolResult(closed, closeContract);
15
+ return server.delivery.toCallToolResult(closed, closeContract);
17
16
  }
18
17
  await reportLifecycleStart(progress, closeContract.name, "saving snapshot; closing provider");
19
18
  const closed = await logToolExecution(logger, closeContract.name, () => session.closeWithSnapshot(snapshotPath, input.overwrite, {
20
19
  progress,
21
20
  }));
22
21
  await reportLifecycleEnd(progress, closeContract.name, closed.ok);
23
- return toCallToolResult(closed.ok ? ok({ ...closed.value }) : closed, closeContract);
22
+ return server.delivery.toCallToolResult(closed.ok ? ok({ ...closed.value }) : closed, closeContract);
24
23
  });
25
24
  };
@@ -9,28 +9,28 @@ import { inspectElectronPageInputSchema } from "../domain/javascript/electronObs
9
9
  import { mcpProgressReporter } from "./mcpProgress.js";
10
10
  import { logToolExecution } from "./toolLogging.js";
11
11
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
12
- import { toCallToolResult, toEvidenceToolResult } from "./toolResult.js";
13
12
  /** Register Electron tools even when a provider is absent. */
14
13
  // oxlint-disable-next-line max-lines-per-function -- direct SDK calls retain each schema-handler type correlation.
15
14
  export const registerElectronTools = (server, options) => {
15
+ const registration = { ...options, delivery: server.delivery };
16
16
  const listContract = toolContract("list_electron_targets");
17
17
  const inspectContract = toolContract("inspect_electron_page");
18
18
  const analyzeContract = toolContract("analyze_javascript_application");
19
19
  const reconcileContract = toolContract("reconcile_javascript_runtime");
20
20
  const activeContract = toolContract("capture_electron_scenario");
21
- server.registerTool(listContract.name, toolRegistrationOptions(listContract), (input, context) => runElectronTool(options, listContract, { input, context }, (parsed, { signal }) => listElectronTargets(options.electron, parsed, {
21
+ server.registerTool(listContract.name, toolRegistrationOptions(listContract), (input, context) => runElectronTool(registration, listContract, { input, context }, (parsed, { signal }) => listElectronTargets(options.electron, parsed, {
22
22
  signal,
23
23
  })));
24
- server.registerTool(inspectContract.name, toolRegistrationOptions(inspectContract), (input, context) => runElectronTool(options, inspectContract, { input, context }, async (parsed, { signal, progress }) => {
24
+ server.registerTool(inspectContract.name, toolRegistrationOptions(inspectContract), (input, context) => runElectronTool(registration, inspectContract, { input, context }, async (parsed, { signal, progress }) => {
25
25
  const request = inspectElectronPageInputSchema.parse(parsed);
26
26
  return inspectElectronPage(options.electron, request, {
27
27
  signal,
28
28
  progress,
29
29
  });
30
30
  }));
31
- server.registerTool(analyzeContract.name, toolRegistrationOptions(analyzeContract), (input, context) => runElectronTool(options, analyzeContract, { input, context }, (parsed, { signal, progress }) => analyzeJavaScriptApplicationValidated(parsed, { signal, progress })));
32
- server.registerTool(reconcileContract.name, toolRegistrationOptions(reconcileContract), (input, context) => runElectronTool(options, reconcileContract, { input, context }, (parsed) => Promise.resolve(reconcileJavaScriptRuntimeEvidenceValidated(parsed))));
33
- server.registerTool(activeContract.name, toolRegistrationOptions(activeContract), (input, context) => runElectronTool(options, activeContract, { input, context }, (parsed, { signal, progress }) => captureElectronScenario(options.electronActive, parsed, {
31
+ server.registerTool(analyzeContract.name, toolRegistrationOptions(analyzeContract), (input, context) => runElectronTool(registration, analyzeContract, { input, context }, (parsed, { signal, progress }) => analyzeJavaScriptApplicationValidated(parsed, { signal, progress })));
32
+ server.registerTool(reconcileContract.name, toolRegistrationOptions(reconcileContract), (input, context) => runElectronTool(registration, reconcileContract, { input, context }, (parsed) => Promise.resolve(reconcileJavaScriptRuntimeEvidenceValidated(parsed))));
33
+ server.registerTool(activeContract.name, toolRegistrationOptions(activeContract), (input, context) => runElectronTool(registration, activeContract, { input, context }, (parsed, { signal, progress }) => captureElectronScenario(options.electronActive, parsed, {
34
34
  signal,
35
35
  progress,
36
36
  })));
@@ -44,16 +44,13 @@ const runElectronTool = async (options, contract, request, execute) => {
44
44
  ? options.observationLoadFailure
45
45
  : undefined;
46
46
  if (failure !== undefined)
47
- return toCallToolResult(err(optionalProviderUnavailable(failure, contract.name)), contract);
47
+ return options.delivery.toCallToolResult(err(optionalProviderUnavailable(failure, contract.name)), contract);
48
48
  const result = await logToolExecution(options.logger, contract.name, () => execute(input, {
49
49
  signal: context.mcpReq.signal,
50
50
  progress: mcpProgressReporter(context),
51
51
  }));
52
52
  if (!result.ok)
53
- return toCallToolResult(result, contract);
54
- return evidenceResult(options, contract, result.value);
55
- };
56
- const evidenceResult = (options, contract, evidence) => {
57
- const recorded = options.recordEvidence?.(evidence);
58
- return toEvidenceToolResult(evidence, contract, recorded);
53
+ return options.delivery.toCallToolResult(result, contract);
54
+ const recorded = options.recordEvidence?.(result.value);
55
+ return options.delivery.toEvidenceToolResult(result.value, contract, recorded);
59
56
  };
@@ -1,14 +1,14 @@
1
- import { EnhancedTools, } from "../application/EnhancedTools.js";
1
+ import { EnhancedTools } from "../application/EnhancedTools.js";
2
2
  import { createWorkflowEvidence, workflowSnapshotRecord, recordWorkflowUnknowns, } from "../application/WorkflowEvidence.js";
3
3
  import { toolContract } from "../contracts/toolContracts.js";
4
4
  import { mcpProgressReporter } from "./mcpProgress.js";
5
5
  import { logToolExecution } from "./toolLogging.js";
6
6
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
7
- import { toCallToolResult, toEvidenceToolResult } from "./toolResult.js";
8
7
  import { executeFunctionAnalysisEvidence } from "../application/FunctionAnalysisEvidence.js";
9
8
  /** Register composed workflows against the same port as direct bridge tools. */
10
9
  // oxlint-disable-next-line max-lines-per-function -- direct SDK calls retain each schema-handler type correlation.
11
10
  export const registerEnhancedTools = (server, analysis, options) => {
11
+ const registration = { ...options, delivery: server.delivery };
12
12
  const nativeDispatchMetadata = toolContract("inspect_native_dispatch_metadata");
13
13
  const objcClasses = toolContract("get_objc_classes");
14
14
  const objcProtocols = toolContract("get_objc_protocols");
@@ -23,59 +23,59 @@ export const registerEnhancedTools = (server, analysis, options) => {
23
23
  const traceCallPath = toolContract("trace_call_path");
24
24
  const traceNativeUiAction = toolContract("trace_native_ui_action");
25
25
  const traceNativeValues = toolContract("trace_native_values");
26
- server.registerTool(traceNativeValues.name, toolRegistrationOptions(traceNativeValues), (input, context) => executeEnhancedTool(analysis, options, traceNativeValues, {
26
+ server.registerTool(traceNativeValues.name, toolRegistrationOptions(traceNativeValues), (input, context) => executeEnhancedTool(analysis, registration, traceNativeValues, {
27
27
  validatedCall: { name: "trace_native_values", input },
28
28
  context,
29
29
  }));
30
- server.registerTool(nativeDispatchMetadata.name, toolRegistrationOptions(nativeDispatchMetadata), (input, context) => executeEnhancedTool(analysis, options, nativeDispatchMetadata, {
30
+ server.registerTool(nativeDispatchMetadata.name, toolRegistrationOptions(nativeDispatchMetadata), (input, context) => executeEnhancedTool(analysis, registration, nativeDispatchMetadata, {
31
31
  validatedCall: { name: "inspect_native_dispatch_metadata", input },
32
32
  context,
33
33
  }));
34
- server.registerTool(objcClasses.name, toolRegistrationOptions(objcClasses), (input, context) => executeEnhancedTool(analysis, options, objcClasses, {
34
+ server.registerTool(objcClasses.name, toolRegistrationOptions(objcClasses), (input, context) => executeEnhancedTool(analysis, registration, objcClasses, {
35
35
  validatedCall: { name: "get_objc_classes", input },
36
36
  context,
37
37
  }));
38
- server.registerTool(objcProtocols.name, toolRegistrationOptions(objcProtocols), (input, context) => executeEnhancedTool(analysis, options, objcProtocols, {
38
+ server.registerTool(objcProtocols.name, toolRegistrationOptions(objcProtocols), (input, context) => executeEnhancedTool(analysis, registration, objcProtocols, {
39
39
  validatedCall: { name: "get_objc_protocols", input },
40
40
  context,
41
41
  }));
42
- server.registerTool(batchDecompile.name, toolRegistrationOptions(batchDecompile), (input, context) => executeEnhancedTool(analysis, options, batchDecompile, {
42
+ server.registerTool(batchDecompile.name, toolRegistrationOptions(batchDecompile), (input, context) => executeEnhancedTool(analysis, registration, batchDecompile, {
43
43
  validatedCall: { name: "batch_decompile", input },
44
44
  context,
45
45
  }));
46
- server.registerTool(callGraph.name, toolRegistrationOptions(callGraph), (input, context) => executeEnhancedTool(analysis, options, callGraph, {
46
+ server.registerTool(callGraph.name, toolRegistrationOptions(callGraph), (input, context) => executeEnhancedTool(analysis, registration, callGraph, {
47
47
  validatedCall: { name: "get_call_graph", input },
48
48
  context,
49
49
  }));
50
- server.registerTool(swiftTypes.name, toolRegistrationOptions(swiftTypes), (input, context) => executeEnhancedTool(analysis, options, swiftTypes, {
50
+ server.registerTool(swiftTypes.name, toolRegistrationOptions(swiftTypes), (input, context) => executeEnhancedTool(analysis, registration, swiftTypes, {
51
51
  validatedCall: { name: "analyze_swift_types", input },
52
52
  context,
53
53
  }));
54
- server.registerTool(xrefsToName.name, toolRegistrationOptions(xrefsToName), (input, context) => executeEnhancedTool(analysis, options, xrefsToName, {
54
+ server.registerTool(xrefsToName.name, toolRegistrationOptions(xrefsToName), (input, context) => executeEnhancedTool(analysis, registration, xrefsToName, {
55
55
  validatedCall: { name: "find_xrefs_to_name", input },
56
56
  context,
57
57
  }));
58
- server.registerTool(binaryOverview.name, toolRegistrationOptions(binaryOverview), (input, context) => executeEnhancedTool(analysis, options, binaryOverview, {
58
+ server.registerTool(binaryOverview.name, toolRegistrationOptions(binaryOverview), (input, context) => executeEnhancedTool(analysis, registration, binaryOverview, {
59
59
  validatedCall: { name: "binary_overview", input },
60
60
  context,
61
61
  }));
62
- server.registerTool(analyzeFunction.name, toolRegistrationOptions(analyzeFunction), (input, context) => executeEnhancedTool(analysis, options, analyzeFunction, {
62
+ server.registerTool(analyzeFunction.name, toolRegistrationOptions(analyzeFunction), (input, context) => executeEnhancedTool(analysis, registration, analyzeFunction, {
63
63
  validatedCall: { name: "analyze_function", input },
64
64
  context,
65
65
  }));
66
- server.registerTool(inspectNativeApi.name, toolRegistrationOptions(inspectNativeApi), (input, context) => executeEnhancedTool(analysis, options, inspectNativeApi, {
66
+ server.registerTool(inspectNativeApi.name, toolRegistrationOptions(inspectNativeApi), (input, context) => executeEnhancedTool(analysis, registration, inspectNativeApi, {
67
67
  validatedCall: { name: "inspect_native_api", input },
68
68
  context,
69
69
  }));
70
- server.registerTool(traceFeature.name, toolRegistrationOptions(traceFeature), (input, context) => executeEnhancedTool(analysis, options, traceFeature, {
70
+ server.registerTool(traceFeature.name, toolRegistrationOptions(traceFeature), (input, context) => executeEnhancedTool(analysis, registration, traceFeature, {
71
71
  validatedCall: { name: "trace_feature", input },
72
72
  context,
73
73
  }));
74
- server.registerTool(traceCallPath.name, toolRegistrationOptions(traceCallPath), (input, context) => executeEnhancedTool(analysis, options, traceCallPath, {
74
+ server.registerTool(traceCallPath.name, toolRegistrationOptions(traceCallPath), (input, context) => executeEnhancedTool(analysis, registration, traceCallPath, {
75
75
  validatedCall: { name: "trace_call_path", input },
76
76
  context,
77
77
  }));
78
- server.registerTool(traceNativeUiAction.name, toolRegistrationOptions(traceNativeUiAction), (input, context) => executeEnhancedTool(analysis, options, traceNativeUiAction, {
78
+ server.registerTool(traceNativeUiAction.name, toolRegistrationOptions(traceNativeUiAction), (input, context) => executeEnhancedTool(analysis, registration, traceNativeUiAction, {
79
79
  validatedCall: { name: "trace_native_ui_action", input },
80
80
  context,
81
81
  }));
@@ -121,14 +121,14 @@ const executeEnhancedTool = async (analysis, registration, contract, request) =>
121
121
  });
122
122
  const recorded = registration.recordEvidence?.(evidence);
123
123
  if (recorded !== undefined && !recorded.ok)
124
- return toCallToolResult(recorded, contract);
124
+ return registration.delivery.toCallToolResult(recorded, contract);
125
125
  if (name !== "trace_native_ui_action" &&
126
126
  registration.allowsSnapshotReplay?.(name) === true) {
127
127
  const workflowRecord = workflowSnapshotRecord(evidence, name);
128
128
  if (workflowRecord !== undefined) {
129
129
  const snapshot = registration.recordWorkflowSnapshot?.(workflowRecord);
130
130
  if (snapshot !== undefined && !snapshot.ok)
131
- return toCallToolResult(snapshot, contract);
131
+ return registration.delivery.toCallToolResult(snapshot, contract);
132
132
  }
133
133
  }
134
134
  const unknowns = recordWorkflowUnknowns({
@@ -138,10 +138,10 @@ const executeEnhancedTool = async (analysis, registration, contract, request) =>
138
138
  recordUnknown: registration.recordUnknown,
139
139
  });
140
140
  if (!unknowns.ok)
141
- return toCallToolResult(unknowns, contract);
142
- return toEvidenceToolResult(evidence, contract, recorded);
141
+ return registration.delivery.toCallToolResult(unknowns, contract);
142
+ return registration.delivery.toEvidenceToolResult(evidence, contract, recorded);
143
143
  }
144
- return toCallToolResult(result, contract);
144
+ return registration.delivery.toCallToolResult(result, contract);
145
145
  };
146
146
  const executeFunctionTool = async (analysis, registration, contract, request) => {
147
147
  const { context, parameters } = request;
@@ -158,7 +158,7 @@ const executeFunctionTool = async (analysis, registration, contract, request) =>
158
158
  terminal: true,
159
159
  });
160
160
  if (!result.ok)
161
- return toCallToolResult(result, contract);
162
- return toEvidenceToolResult(result.value, contract, registration.recordEvidence?.(result.value));
161
+ return registration.delivery.toCallToolResult(result, contract);
162
+ return registration.delivery.toEvidenceToolResult(result.value, contract, registration.recordEvidence?.(result.value));
163
163
  };
164
164
  const jsonParameters = (input) => Object.fromEntries(Object.entries(input).filter((entry) => entry[1] !== undefined));
@@ -3,7 +3,6 @@ import { jsonObjectSchema } from "../domain/jsonValue.js";
3
3
  import { mcpProgressReporter } from "./mcpProgress.js";
4
4
  import { logToolExecution } from "./toolLogging.js";
5
5
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
6
- import { toCallToolResult, toEvidenceToolResult } from "./toolResult.js";
7
6
  import { createArtifactExtractionDestination } from "../application/artifacts/ArtifactExtractionDestination.js";
8
7
  /** Register provider-backed contracts that return atomic Evidence observations. */
9
8
  export const registerEvidenceTools = (server, analysis, contracts, options) => {
@@ -35,7 +34,7 @@ export const registerEvidenceTools = (server, analysis, contracts, options) => {
35
34
  terminal: true,
36
35
  });
37
36
  if (!execution.ok)
38
- return toCallToolResult(execution, contract);
37
+ return server.delivery.toCallToolResult(execution, contract);
39
38
  const sourceEvidence = options.sourceEvidence?.(contract.name, execution.value.result) ?? [];
40
39
  const evidence = createEvidence(execution.value.subject ?? options.activeTarget?.(), execution.value.provider, {
41
40
  operation: contract.name,
@@ -52,10 +51,10 @@ export const registerEvidenceTools = (server, analysis, contracts, options) => {
52
51
  for (const source of sourceEvidence) {
53
52
  const sourceRecorded = options.recordEvidence?.(source);
54
53
  if (sourceRecorded !== undefined && !sourceRecorded.ok)
55
- return toCallToolResult(sourceRecorded, contract);
54
+ return server.delivery.toCallToolResult(sourceRecorded, contract);
56
55
  }
57
56
  const recorded = options.recordEvidence?.(evidence);
58
- return toEvidenceToolResult(evidence, contract, recorded);
57
+ return server.delivery.toEvidenceToolResult(evidence, contract, recorded);
59
58
  });
60
59
  }
61
60
  };
@@ -1,15 +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, toEvidenceToolResult } from "./toolResult.js";
5
4
  /** Bind the named EVM contract to shared validation and session Evidence recording. */
6
5
  export const registerEvmTools = (server, service, logger, recordEvidence) => {
7
6
  const contract = toolContract("inspect_evm_interface");
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 toEvidenceToolResult(result.value, contract, recorded);
12
+ return server.delivery.toEvidenceToolResult(result.value, contract, recorded);
14
13
  });
15
14
  };
@@ -1,7 +1,6 @@
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, toEvidenceToolResult } from "./toolResult.js";
5
4
  /** Bind firmware handlers to their exact named schemas. */
6
5
  export const registerFirmwareTools = (server, service, logger, recordEvidence) => {
7
6
  const handler = (contract) => async (input, context) => {
@@ -9,9 +8,9 @@ export const registerFirmwareTools = (server, service, logger, recordEvidence) =
9
8
  signal: context.mcpReq.signal,
10
9
  }));
11
10
  if (!result.ok)
12
- return toCallToolResult(result, contract);
11
+ return server.delivery.toCallToolResult(result, contract);
13
12
  const recorded = recordEvidence?.(result.value);
14
- return toEvidenceToolResult(result.value, contract, recorded);
13
+ return server.delivery.toEvidenceToolResult(result.value, contract, recorded);
15
14
  };
16
15
  const inspect = toolContract("inspect_firmware_regions");
17
16
  server.registerTool(inspect.name, toolRegistrationOptions(inspect), handler(inspect));
@@ -2,14 +2,13 @@ import { toolContract } from "../contracts/toolContracts.js";
2
2
  import { createEvidence, parseEvidence, } from "../domain/evidence.js";
3
3
  import { EvidenceIntegrityError } from "../domain/evidenceErrors.js";
4
4
  import { err } from "../domain/result.js";
5
- import { compareFunctions } from "../domain/functionComparison.js";
6
5
  import { jsonValueSchema } from "../domain/jsonValue.js";
7
6
  import { recordDerivedEvidence } from "./recordDerivedEvidence.js";
8
7
  import { recordSessionEvidenceSources } from "./sessionEvidence.js";
9
8
  import { runDerivedOperation } from "./runDerivedOperation.js";
10
- import { FUNCTION_COMPARISON_PROVIDER } from "./sessionToolPolicies.js";
9
+ import { FUNCTION_COMPARISON_PROVIDER } from "../application/InvestigationProviders.js";
11
10
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
12
- import { toCallToolResult, toEvidenceToolResult } from "./toolResult.js";
11
+ import { compareFunctions } from "../domain/functionComparison.js";
13
12
  /** Register explicit Evidence-backed function comparison. */
14
13
  export const registerFunctionComparisonTool = (server, session, contract) => {
15
14
  server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => {
@@ -20,22 +19,22 @@ export const registerFunctionComparisonTool = (server, session, contract) => {
20
19
  rightEvidence = parseEvidence(input.right);
21
20
  }
22
21
  catch (cause) {
23
- return toCallToolResult(err(new EvidenceIntegrityError(cause instanceof Error ? cause.message : "Invalid Evidence")), contract);
22
+ return server.delivery.toCallToolResult(err(new EvidenceIntegrityError(cause instanceof Error ? cause.message : "Invalid Evidence")), contract);
24
23
  }
25
24
  if (leftEvidence.operation !== "analyze_function" ||
26
25
  rightEvidence.operation !== "analyze_function" ||
27
26
  leftEvidence.predicate_type !== "rea.analysis" ||
28
27
  rightEvidence.predicate_type !== "rea.analysis")
29
- return toCallToolResult(err(new EvidenceIntegrityError("Expected analyze_function Evidence")), contract);
28
+ return server.delivery.toCallToolResult(err(new EvidenceIntegrityError("Expected analyze_function Evidence")), contract);
30
29
  const leftIds = [leftEvidence.evidence_id];
31
30
  const rightIds = [rightEvidence.evidence_id];
32
31
  const computed = await runDerivedOperation(context, contract.name, () => compareFunctions(leftEvidence, rightEvidence));
33
32
  if (!computed.ok)
34
- return toCallToolResult(computed, contract);
33
+ return server.delivery.toCallToolResult(computed, contract);
35
34
  const comparison = computed.value;
36
35
  const recordedSources = recordSessionEvidenceSources((evidence) => session.recordEvidence(evidence), [leftEvidence, rightEvidence]);
37
36
  if (!recordedSources.ok)
38
- return toCallToolResult(recordedSources, contract);
37
+ return server.delivery.toCallToolResult(recordedSources, contract);
39
38
  const evidence = createEvidence(undefined, FUNCTION_COMPARISON_PROVIDER, {
40
39
  predicateType: "rea.function-comparison",
41
40
  operation: contract.name,
@@ -55,7 +54,7 @@ export const registerFunctionComparisonTool = (server, session, contract) => {
55
54
  rightIds,
56
55
  comparisonEvidenceId: evidence.evidence_id,
57
56
  }));
58
- return toEvidenceToolResult(evidence, contract, recorded);
57
+ return server.delivery.toEvidenceToolResult(evidence, contract, recorded);
59
58
  });
60
59
  };
61
60
  const functionUnknownInput = ({ status, leftIds, rightIds, comparisonEvidenceId, }) => {
@@ -3,13 +3,12 @@ import { buildCallPath } from "../domain/callPath.js";
3
3
  import { findChangedBehavior } from "../domain/changedBehavior.js";
4
4
  import { createEvidence } from "../domain/evidence.js";
5
5
  import { jsonValueSchema } from "../domain/jsonValue.js";
6
- import { verifyReconstruction } from "../domain/reconstructionVerification.js";
7
6
  import { correlateStaticAndRuntime } from "../domain/staticRuntimeCorrelation.js";
8
7
  import { comparisonClosure, evidenceClosure, functionEvidenceIds, isIncomplete, recordWorkflowEvidence, } from "./registerInvestigationTools/helpers.js";
9
8
  import { runDerivedOperation } from "./runDerivedOperation.js";
10
- import { CALL_PATH_PROVIDER, CHANGED_BEHAVIOR_PROVIDER, RECONSTRUCTION_PROVIDER, STATIC_RUNTIME_PROVIDER, } from "./sessionToolPolicies.js";
9
+ import { CALL_PATH_PROVIDER, CHANGED_BEHAVIOR_PROVIDER, RECONSTRUCTION_PROVIDER, STATIC_RUNTIME_PROVIDER, } from "../application/InvestigationProviders.js";
11
10
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
12
- import { toCallToolResult, toEvidenceToolResult } from "./toolResult.js";
11
+ import { verifyReconstruction } from "../domain/reconstructionVerification.js";
13
12
  /** Register Evidence-composed differential investigation workflows. */
14
13
  export const registerInvestigationTools = (server, session) => {
15
14
  registerChangedBehavior(server, session, toolContract("find_changed_behavior"));
@@ -21,11 +20,11 @@ const registerChangedBehavior = (server, session, contract) => {
21
20
  server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => {
22
21
  const closure = evidenceClosure(session, comparisonClosure(input.comparisons));
23
22
  if (!closure.ok)
24
- return toCallToolResult(closure, contract);
23
+ return server.delivery.toCallToolResult(closure, contract);
25
24
  const links = closure.value;
26
25
  const computed = await runDerivedOperation(context, contract.name, () => findChangedBehavior(input.comparisons));
27
26
  if (!computed.ok)
28
- return toCallToolResult(computed, contract);
27
+ return server.delivery.toCallToolResult(computed, contract);
29
28
  const result = computed.value;
30
29
  const evidence = createEvidence(undefined, CHANGED_BEHAVIOR_PROVIDER, {
31
30
  predicateType: "rea.changed-behavior",
@@ -51,18 +50,18 @@ const registerChangedBehavior = (server, session, contract) => {
51
50
  },
52
51
  ],
53
52
  });
54
- return toEvidenceToolResult(evidence, contract, recorded);
53
+ return server.delivery.toEvidenceToolResult(evidence, contract, recorded);
55
54
  });
56
55
  };
57
56
  const registerCallPath = (server, session, contract) => {
58
57
  server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => {
59
58
  const closure = evidenceClosure(session, functionEvidenceIds(input.functions));
60
59
  if (!closure.ok)
61
- return toCallToolResult(closure, contract);
60
+ return server.delivery.toCallToolResult(closure, contract);
62
61
  const links = closure.value;
63
62
  const computed = await runDerivedOperation(context, contract.name, () => buildCallPath(input));
64
63
  if (!computed.ok)
65
- return toCallToolResult(computed, contract);
64
+ return server.delivery.toCallToolResult(computed, contract);
66
65
  const result = computed.value;
67
66
  const evidence = createEvidence(undefined, CALL_PATH_PROVIDER, {
68
67
  predicateType: "rea.call-path",
@@ -89,7 +88,7 @@ const registerCallPath = (server, session, contract) => {
89
88
  },
90
89
  ],
91
90
  });
92
- return toEvidenceToolResult(evidence, contract, recorded);
91
+ return server.delivery.toEvidenceToolResult(evidence, contract, recorded);
93
92
  });
94
93
  };
95
94
  const registerStaticRuntime = (server, session, contract) => {
@@ -99,11 +98,11 @@ const registerStaticRuntime = (server, session, contract) => {
99
98
  ...input.runtime_comparisons,
100
99
  ]));
101
100
  if (!closure.ok)
102
- return toCallToolResult(closure, contract);
101
+ return server.delivery.toCallToolResult(closure, contract);
103
102
  const links = closure.value;
104
103
  const computed = await runDerivedOperation(context, contract.name, () => correlateStaticAndRuntime(input));
105
104
  if (!computed.ok)
106
- return toCallToolResult(computed, contract);
105
+ return server.delivery.toCallToolResult(computed, contract);
107
106
  const result = computed.value;
108
107
  const evidence = createEvidence(undefined, STATIC_RUNTIME_PROVIDER, {
109
108
  predicateType: "rea.static-runtime-correlation",
@@ -117,7 +116,7 @@ const registerStaticRuntime = (server, session, contract) => {
117
116
  limitations: result.limitations,
118
117
  evidenceLinks: links,
119
118
  });
120
- return toEvidenceToolResult(evidence, contract, recordWorkflowEvidence(session, evidence, result.status === "unknown" || result.status === "truncated", {
119
+ return server.delivery.toEvidenceToolResult(evidence, contract, recordWorkflowEvidence(session, evidence, result.status === "unknown" || result.status === "truncated", {
121
120
  question: "Does runtime behavior match the available static analysis?",
122
121
  domain: "static-runtime-correlation",
123
122
  requiredAuthority: null,
@@ -136,11 +135,11 @@ const registerReconstruction = (server, session, contract) => {
136
135
  const owned = session.exportEvidenceBundle();
137
136
  const computed = await runDerivedOperation(context, contract.name, () => verifyReconstruction(input.specification, owned));
138
137
  if (!computed.ok)
139
- return toCallToolResult(computed, contract);
138
+ return server.delivery.toCallToolResult(computed, contract);
140
139
  const result = computed.value;
141
140
  const closure = evidenceClosure(session, result.evidence_links);
142
141
  if (!closure.ok)
143
- return toCallToolResult(closure, contract);
142
+ return server.delivery.toCallToolResult(closure, contract);
144
143
  const links = closure.value;
145
144
  const evidence = createEvidence(undefined, RECONSTRUCTION_PROVIDER, {
146
145
  predicateType: "rea.reconstruction-verification",
@@ -155,7 +154,7 @@ const registerReconstruction = (server, session, contract) => {
155
154
  limitations: result.limitations,
156
155
  evidenceLinks: links,
157
156
  });
158
- return toEvidenceToolResult(evidence, contract, recordWorkflowEvidence(session, evidence, result.status === "unknown", {
157
+ return server.delivery.toEvidenceToolResult(evidence, contract, recordWorkflowEvidence(session, evidence, result.status === "unknown", {
159
158
  question: "Does the reconstruction satisfy every declared claim?",
160
159
  domain: "reconstruction-verification",
161
160
  requiredAuthority: null,
@@ -1,15 +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, toEvidenceToolResult } from "./toolResult.js";
5
4
  /** Bind optional recovery to its exact named contract without acquiring an engine. */
6
5
  export const registerJavaScriptRecoveryTool = (server, service, logger, recordEvidence) => {
7
6
  const contract = toolContract("recover_javascript_sources");
8
7
  server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => {
9
8
  const result = await logToolExecution(logger, contract.name, () => service.recover(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 toEvidenceToolResult(result.value, contract, recorded);
12
+ return server.delivery.toEvidenceToolResult(result.value, contract, recorded);
14
13
  });
15
14
  };