rea-agents 6.1.0 → 6.3.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 (573) hide show
  1. package/README.md +24 -24
  2. package/bridge/ghidra/ReaGhidraBridge.java +32 -4
  3. package/bridge/hopper_bridge.py +8 -1
  4. package/dist/android/JadxConfiguration.js +87 -7
  5. package/dist/android/JadxMcpTransport.js +14 -2
  6. package/dist/android/JadxProvider.js +64 -36
  7. package/dist/android/JadxSession.js +51 -9
  8. package/dist/application/BinaryTargetResolver.js +68 -20
  9. package/dist/application/BrowserEvidence.js +3 -8
  10. package/dist/application/BrowserScenarioEvidence.js +4 -20
  11. package/dist/application/CapabilityInventory.js +43 -9
  12. package/dist/application/ClientConfigurationDocument.js +97 -25
  13. package/dist/application/ClientRegistrationStatus.js +19 -6
  14. package/dist/application/DirectAnalysis.js +41 -20
  15. package/dist/application/DirectAnalysisCleanup.js +71 -0
  16. package/dist/application/DirectAnalysisStatus.js +3 -7
  17. package/dist/application/Doctor.js +40 -53
  18. package/dist/application/DoctorDiagnostics.js +2 -3
  19. package/dist/application/EnhancedTools.js +51 -6
  20. package/dist/application/EvidenceBundleFiles.js +8 -3
  21. package/dist/application/InvestigationProviders.js +13 -5
  22. package/dist/application/JsonFiles.js +56 -23
  23. package/dist/application/LinuxHopper.js +11 -7
  24. package/dist/application/MacHopper.js +15 -18
  25. package/dist/application/RealHopperAssertions.js +0 -11
  26. package/dist/application/ReconstructionObligationCandidates.js +10 -3
  27. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -1
  28. package/dist/application/ReferenceSourceImportEntries.js +1 -1
  29. package/dist/application/RegularFileRead.js +17 -0
  30. package/dist/application/Setup.js +26 -23
  31. package/dist/application/SetupClientConfiguration.js +18 -7
  32. package/dist/application/SetupHost.js +20 -29
  33. package/dist/application/SetupPlan.js +24 -20
  34. package/dist/application/SetupSkill.js +57 -8
  35. package/dist/application/SupportedClients.js +43 -0
  36. package/dist/application/Uninstall.js +98 -30
  37. package/dist/application/UpdateMaintenance.js +13 -7
  38. package/dist/application/UpdateRuntime.js +12 -12
  39. package/dist/application/Utf8JsonInput.js +64 -0
  40. package/dist/application/WebScriptExportService.js +38 -5
  41. package/dist/application/WorkflowEvidence.js +25 -2
  42. package/dist/application/XrefsAddressResolution.js +45 -0
  43. package/dist/application/analysisView/AnalysisViewService.js +76 -0
  44. package/dist/application/android/AndroidAnalysisService.js +1 -1
  45. package/dist/application/binary/AnalysisClientCleanup.js +30 -5
  46. package/dist/application/binary/AnalysisProviderEvaluation.js +1 -2
  47. package/dist/application/binary/AnalysisProviderRegistry.js +2 -6
  48. package/dist/application/binary/AnalysisSnapshotCache.js +13 -10
  49. package/dist/application/binary/BinarySession.js +86 -29
  50. package/dist/application/binary/BinarySessionComposition.js +1 -3
  51. package/dist/application/binary/BinarySessionExecution.js +3 -5
  52. package/dist/application/binary/BinarySessionOpen.js +10 -2
  53. package/dist/application/binary/BinarySessionRecords.js +1 -1
  54. package/dist/application/binary/BinarySessionStatus.js +1 -6
  55. package/dist/application/binary/CompositeProvider.js +4 -18
  56. package/dist/application/binary/LazyAnalysisProvider.js +5 -5
  57. package/dist/application/binary/SessionProviderRouter.js +27 -135
  58. package/dist/application/homebrew.js +48 -0
  59. package/dist/application/javascript/ElectronActiveEvidence.js +10 -14
  60. package/dist/application/javascript/ElectronBoundaryAnalysis.js +2 -2
  61. package/dist/application/javascript/ElectronBoundaryGraphNative.js +5 -1
  62. package/dist/application/javascript/JavaScriptApplicationEvidence.js +3 -6
  63. package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +107 -46
  64. package/dist/application/javascript/JavaScriptApplicationService.js +7 -1
  65. package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +59 -45
  66. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +5 -9
  67. package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +19 -27
  68. package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +11 -3
  69. package/dist/application/javascript/JavaScriptArtifactGraphContext.js +9 -0
  70. package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +8 -5
  71. package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +46 -29
  72. package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +0 -1
  73. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +86 -27
  74. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +52 -9
  75. package/dist/application/javascript/JavaScriptArtifactReconstructionInput.js +1 -0
  76. package/dist/application/javascript/JavaScriptJsonModules.js +2 -2
  77. package/dist/application/javascript/JavaScriptModuleRelationships.js +6 -18
  78. package/dist/application/javascript/JavaScriptRuntimeObservationService.js +3 -3
  79. package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +11 -27
  80. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +4 -5
  81. package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +8 -6
  82. package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +2 -3
  83. package/dist/application/javascript/JavaScriptSemanticGraphConstruction.js +7 -5
  84. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +3 -4
  85. package/dist/application/javascript/JavaScriptSemanticGraphEvidence.js +1 -1
  86. package/dist/application/javascript/JavaScriptSemanticGraphFingerprintProjection.js +2 -2
  87. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +3 -7
  88. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +76 -47
  89. package/dist/application/javascript/JavaScriptSemanticGraphProjection.js +4 -4
  90. package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +3 -4
  91. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +51 -25
  92. package/dist/application/javascript/JavaScriptSemanticTraceService.js +15 -10
  93. package/dist/application/managed/ManagedMemberComparisonService.js +2 -1
  94. package/dist/application/managed/ManagedNativeVerificationService.js +2 -1
  95. package/dist/application/native/NativeCallRoutes.js +2 -4
  96. package/dist/application/process/ProcessCli.js +11 -11
  97. package/dist/application/process/ProcessEvidence.js +0 -1
  98. package/dist/artifacts/ArtifactProvider.js +53 -30
  99. package/dist/artifacts/ArtifactProviderMetadata.js +1 -4
  100. package/dist/artifacts/ArtifactReader.js +31 -0
  101. package/dist/artifacts/AsarArtifactReader.js +81 -17
  102. package/dist/artifacts/DirectoryArtifactReader.js +2 -1
  103. package/dist/artifacts/MachOSliceArtifactReader.js +9 -2
  104. package/dist/artifacts/NativeDmgArtifactReader.js +207 -77
  105. package/dist/artifacts/NativeDmgOwnership.js +109 -0
  106. package/dist/artifacts/SafeOutputTree.js +16 -2
  107. package/dist/artifacts/ZipArtifactReader.js +11 -4
  108. package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +4 -2
  109. package/dist/artifacts/apple/DylibResolutionReader.js +17 -7
  110. package/dist/artifacts/apple/KeyedArchiveReader.js +68 -42
  111. package/dist/artifacts/apple/MachoLoadCommandReader.js +36 -6
  112. package/dist/artifacts/extraction/ArtifactExtraction.js +104 -29
  113. package/dist/artifacts/inventory/ArtifactGraphConstruction.js +71 -66
  114. package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
  115. package/dist/artifacts/inventory/classify.js +33 -14
  116. package/dist/artifacts/inventory/hashStableRootArtifact.js +37 -0
  117. package/dist/artifacts/inventory/reader.js +3 -3
  118. package/dist/artifacts/inventory/scanCanonical.js +64 -34
  119. package/dist/artifacts/inventory/scanReader.js +12 -20
  120. package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +65 -27
  121. package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
  122. package/dist/browser/CdpBrowserProvider.js +6 -6
  123. package/dist/browser/CdpCaptureEventHandlers.js +2 -4
  124. package/dist/browser/CdpCaptureEvents.js +0 -1
  125. package/dist/browser/CdpCaptureStorageFingerprints.js +3 -3
  126. package/dist/browser/CdpCaptureValues.js +20 -0
  127. package/dist/browser/CdpElectronInspection.js +2 -2
  128. package/dist/browser/CdpElectronProvider.js +4 -5
  129. package/dist/browser/CdpElectronScriptEvents.js +2 -8
  130. package/dist/browser/CdpElectronScripts.js +4 -5
  131. package/dist/browser/CdpPageCaptureScripts.js +2 -3
  132. package/dist/browser/CdpSafeMetadata.js +10 -10
  133. package/dist/browser/CdpWebMcpDiscovery.js +16 -13
  134. package/dist/browser/PlaywrightBrowserScenarioProvider.js +64 -49
  135. package/dist/browser/PlaywrightElectronActiveActions.js +2 -56
  136. package/dist/browser/PlaywrightElectronActiveProvider.js +10 -6
  137. package/dist/browser/PlaywrightScenarioArtifacts.js +1 -1
  138. package/dist/browser/PlaywrightScenarioBrowser.js +269 -66
  139. package/dist/browser/PlaywrightScenarioEvents.js +1 -1
  140. package/dist/browser/PlaywrightScenarioSession.js +41 -32
  141. package/dist/browser/WebSourceMapFetcher.js +32 -6
  142. package/dist/browser/assets/ScenarioScriptCapture.js +8 -12
  143. package/dist/browser/assets/ScriptCaptureAdapters.js +1 -1
  144. package/dist/browser/history/CaptureFailures.js +6 -2
  145. package/dist/browser/history/MitmproxyCaptureAdapter.js +4 -2
  146. package/dist/catalogIdentity.js +0 -1
  147. package/dist/cli/analysisViewCommands.js +36 -0
  148. package/dist/cli/artifactCommands.js +11 -12
  149. package/dist/cli/coreAnalysisCommands.js +3 -3
  150. package/dist/cli/coreBinaryCommands.js +37 -28
  151. package/dist/cli/coreNativeCommands.js +9 -10
  152. package/dist/cli/electronCommands.js +12 -13
  153. package/dist/cli/interactiveSetup.js +6 -6
  154. package/dist/cli/javascriptApplicationAnalysis.js +2 -12
  155. package/dist/cli/jsonOutput.js +3 -2
  156. package/dist/cli/managedCommands.js +7 -8
  157. package/dist/cli/nativeCallCommands.js +1 -2
  158. package/dist/cli/omittableDefaults.js +50 -0
  159. package/dist/cli/processCommands.js +3 -2
  160. package/dist/cli/setupCommands.js +16 -15
  161. package/dist/cli/streamedJsonOutput.js +83 -4
  162. package/dist/cli/utilityCommands.js +10 -12
  163. package/dist/cli.js +19 -8
  164. package/dist/cliBrowserScenarioCommands.js +2 -2
  165. package/dist/cliCommandNames.js +1 -0
  166. package/dist/cliJsonFile.js +179 -0
  167. package/dist/cliJsonInput.js +60 -33
  168. package/dist/cliObservationOptions.js +4 -0
  169. package/dist/cliOutput.js +0 -38
  170. package/dist/composition/auxiliaryAnalysisProviders.js +30 -25
  171. package/dist/composition/binary.js +9 -9
  172. package/dist/composition/browserScenario.js +2 -1
  173. package/dist/composition/directAnalysis.js +20 -14
  174. package/dist/composition/electronScenario.js +1 -1
  175. package/dist/composition/optionalObservationProviders.js +12 -7
  176. package/dist/config/environment.js +6 -0
  177. package/dist/config/ghidraStartupTimeout.js +4 -9
  178. package/dist/config/homeDirectory.js +12 -0
  179. package/dist/config/mcpResponseBudget.js +9 -1
  180. package/dist/config/parseConfig.js +7 -3
  181. package/dist/config/parsers.js +19 -22
  182. package/dist/contracts/analysisViewToolContracts.js +56 -0
  183. package/dist/contracts/applicationToolContracts.js +5 -4
  184. package/dist/contracts/artifactComparisonExample.js +7 -7
  185. package/dist/contracts/artifactToolContracts.js +1 -1
  186. package/dist/contracts/browserScenarioToolContracts.js +1 -1
  187. package/dist/contracts/browserToolContracts.js +19 -15
  188. package/dist/contracts/enhancedInputs.js +2 -2
  189. package/dist/contracts/enhancedToolContracts.js +4 -3
  190. package/dist/contracts/errorSchemas.js +3 -1
  191. package/dist/contracts/evm/evmToolContracts.js +1 -1
  192. package/dist/contracts/functionComparisonExample.js +8 -0
  193. package/dist/contracts/functionWorkflowToolContracts.js +1 -1
  194. package/dist/contracts/inputSchemaPresentation.js +181 -0
  195. package/dist/contracts/investigationExamples.js +4 -3
  196. package/dist/contracts/javascript/electronToolContracts.js +3 -2
  197. package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +3 -22
  198. package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +248 -0
  199. package/dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js +1 -1
  200. package/dist/contracts/javascript/javascriptRuntimeReconciliationExample.js +8 -7
  201. package/dist/contracts/managed/managedToolContracts.js +8 -12
  202. package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
  203. package/dist/contracts/mobileApplicationGraphExamples.js +8 -8
  204. package/dist/contracts/native/binaryDiagnosticsToolContracts.js +1 -1
  205. package/dist/contracts/native/nativeToolContracts.js +2 -2
  206. package/dist/contracts/officialToolContracts.js +2 -1
  207. package/dist/contracts/promptContracts.js +2 -2
  208. package/dist/contracts/providerSelection.js +1 -1
  209. package/dist/contracts/sessionLifecycleInputs.js +4 -3
  210. package/dist/contracts/sessionStatusContract.js +3 -2
  211. package/dist/contracts/sessionToolContracts.js +17 -4
  212. package/dist/contracts/sessionToolSchemas.js +4 -16
  213. package/dist/contracts/toolContracts.js +2 -0
  214. package/dist/contracts/toolEffects.js +1 -0
  215. package/dist/contracts/toolOutputSchemaGroups.js +138 -94
  216. package/dist/contracts/toolOutputSchemaPrimitives.js +13 -26
  217. package/dist/contracts/toolSchemaMetadata.js +18 -69
  218. package/dist/contracts/webNetworkCaptureToolContracts.js +1 -1
  219. package/dist/contracts/webRuntimeToolContracts.js +1 -1
  220. package/dist/contracts/webScriptToolContracts.js +1 -1
  221. package/dist/doctorRuntime.js +7 -5
  222. package/dist/domain/analysisErrorBase.js +5 -0
  223. package/dist/domain/analysisErrorCore.js +3 -0
  224. package/dist/domain/analysisErrorPresentation.js +22 -5
  225. package/dist/domain/analysisErrorProjection.js +24 -5
  226. package/dist/domain/analysisSnapshot.js +31 -31
  227. package/dist/domain/analysisView/analysisView.js +241 -0
  228. package/dist/domain/analysisView/analysisViewCoverage.js +19 -0
  229. package/dist/domain/analysisView/binaryLayoutView.js +159 -0
  230. package/dist/domain/analysisView/javascriptApplicationView.js +238 -0
  231. package/dist/domain/android/androidApplication.js +1 -1
  232. package/dist/domain/android/androidPartialObservation.js +36 -0
  233. package/dist/domain/apple/appleApplication.js +1 -1
  234. package/dist/domain/apple/dylibResolution.js +10 -3
  235. package/dist/domain/apple/interfaceBuilderGraph.js +0 -1
  236. package/dist/domain/apple/keyedArchive.js +26 -2
  237. package/dist/domain/artifactComparison.js +15 -6
  238. package/dist/domain/artifactGraph.js +17 -4
  239. package/dist/domain/artifactIdentity.js +8 -8
  240. package/dist/domain/artifactInspection.js +8 -8
  241. package/dist/domain/artifactInventoryEvidence.js +9 -16
  242. package/dist/domain/artifactOperationError.js +3 -3
  243. package/dist/domain/artifactPartialObservation.js +1 -0
  244. package/dist/domain/artifactPathSyntax.js +49 -0
  245. package/dist/domain/binaryTarget.js +39 -13
  246. package/dist/domain/browserCaptureComparison.js +13 -49
  247. package/dist/domain/browserCompleteness.js +3 -2
  248. package/dist/domain/browserNetworkEvidence.js +10 -4
  249. package/dist/domain/browserObservation.js +0 -1
  250. package/dist/domain/browserObservationSchemas.js +14 -3
  251. package/dist/domain/browserScenario.js +0 -1
  252. package/dist/domain/browserScenarioCapture.js +1 -2
  253. package/dist/domain/browserScenarioCaptureValues.js +2 -2
  254. package/dist/domain/browserScenarioDiff.js +0 -2
  255. package/dist/domain/browserScenarioDiffEvidence.js +0 -12
  256. package/dist/domain/browserScenarioDiffValues.js +2 -2
  257. package/dist/domain/browserScenarioNormalization.js +3 -3
  258. package/dist/domain/browserScenarioValues.js +6 -6
  259. package/dist/domain/callPath.js +15 -18
  260. package/dist/domain/callPathSchemas.js +2 -2
  261. package/dist/domain/canonicalDigest.js +7 -1
  262. package/dist/domain/canonicalOrdering.js +1 -13
  263. package/dist/domain/changedBehavior.js +5 -6
  264. package/dist/domain/comparisonSemantics.js +0 -5
  265. package/dist/domain/completionLedgerGeneration.js +2 -1
  266. package/dist/domain/configurationErrors.js +12 -0
  267. package/dist/domain/conformancePackage.js +4 -3
  268. package/dist/domain/digests.js +0 -3
  269. package/dist/domain/evidence.js +19 -40
  270. package/dist/domain/evidenceBundle.js +58 -42
  271. package/dist/domain/evidenceCompletionLedger.js +2 -1
  272. package/dist/domain/firmware/firmwareAnalysis.js +4 -3
  273. package/dist/domain/functionComparison.js +6 -6
  274. package/dist/domain/functionComparisonDimensions.js +120 -87
  275. package/dist/domain/functionComparisonNormalization.js +26 -36
  276. package/dist/domain/functionComparisonResults.js +3 -6
  277. package/dist/domain/functionComparisonSchemas.js +2 -8
  278. package/dist/domain/functionDossierEvidence.js +4 -38
  279. package/dist/domain/hopperValues.js +11 -15
  280. package/dist/domain/javascript/electronActiveObservation.js +29 -71
  281. package/dist/domain/javascript/electronObservation.js +14 -3
  282. package/dist/domain/javascript/electronStaticAnalysisBrowser.js +12 -11
  283. package/dist/domain/javascript/electronStaticAnalysisIpc.js +11 -2
  284. package/dist/domain/javascript/electronStaticAnalysisNative.js +7 -4
  285. package/dist/domain/javascript/electronStaticAnalysisValues.js +8 -4
  286. package/dist/domain/javascript/javascriptApplicationAnalysis.js +3 -1
  287. package/dist/domain/javascript/javascriptApplicationChangeGraph.js +12 -8
  288. package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +6 -0
  289. package/dist/domain/javascript/javascriptApplicationGraph.js +41 -16
  290. package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +9 -2
  291. package/dist/domain/javascript/javascriptApplicationVersionComparison.js +4 -4
  292. package/dist/domain/javascript/javascriptApplicationVersionComparisonSchemas.js +37 -22
  293. package/dist/domain/javascript/javascriptApplicationVersionItems.js +50 -36
  294. package/dist/domain/javascript/javascriptApplicationVersionKeys.js +9 -8
  295. package/dist/domain/javascript/javascriptAstFingerprint.js +2 -2
  296. package/dist/domain/javascript/javascriptAstValues.js +22 -0
  297. package/dist/{application/javascript/JavaScriptReturnShapeProjection.js → domain/javascript/javascriptExportReturnShapeProjection.js} +4 -4
  298. package/dist/domain/javascript/javascriptExportShapeComparison.js +10 -3
  299. package/dist/domain/javascript/javascriptExportShapeComparisonIdentity.js +6 -1
  300. package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +58 -22
  301. package/dist/domain/javascript/javascriptExportShapeSelection.js +7 -7
  302. package/dist/domain/javascript/javascriptExportShapeVariants.js +70 -16
  303. package/dist/domain/javascript/javascriptFeatureSeed.js +25 -3
  304. package/dist/domain/javascript/javascriptFeatureTrace.js +7 -6
  305. package/dist/domain/javascript/javascriptFeatureTraceSchemas.js +17 -9
  306. package/dist/domain/javascript/javascriptFeatureTraversal.js +4 -5
  307. package/dist/domain/javascript/javascriptNativeHandoff.js +7 -7
  308. package/dist/domain/javascript/javascriptRuntimeLoadState.js +0 -1
  309. package/dist/domain/javascript/javascriptRuntimeObservation.js +18 -7
  310. package/dist/domain/javascript/javascriptRuntimeReconciliation.js +12 -6
  311. package/dist/domain/javascript/javascriptRuntimeReconciliationActive.js +9 -8
  312. package/dist/domain/javascript/javascriptRuntimeReconciliationCaptureParsing.js +212 -0
  313. package/dist/domain/javascript/javascriptRuntimeReconciliationGraph.js +5 -4
  314. package/dist/domain/javascript/javascriptRuntimeReconciliationInputValidation.js +28 -0
  315. package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +6 -6
  316. package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +12 -222
  317. package/dist/domain/javascript/javascriptRuntimeReconciliationResult.js +2 -2
  318. package/dist/domain/javascript/javascriptRuntimeReconciliationRuntime.js +15 -4
  319. package/dist/domain/javascript/javascriptRuntimeReconciliationSchemas.js +2 -2
  320. package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +7 -7
  321. package/dist/domain/javascript/javascriptSemanticAnalysis.js +209 -11
  322. package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +2 -1
  323. package/dist/domain/javascript/javascriptSemanticCallResolution.js +9 -7
  324. package/dist/domain/javascript/javascriptSemanticCalls.js +2 -1
  325. package/dist/domain/javascript/javascriptSemanticChildProcesses.js +4 -3
  326. package/dist/domain/javascript/javascriptSemanticCoverage.js +20 -0
  327. package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +7 -9
  328. package/dist/domain/javascript/javascriptSemanticDataEffects.js +4 -11
  329. package/dist/domain/javascript/javascriptSemanticFingerprints.js +2 -2
  330. package/dist/domain/javascript/javascriptSemanticGraph.js +220 -71
  331. package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +19 -1
  332. package/dist/domain/javascript/javascriptSemanticIr.js +0 -4
  333. package/dist/domain/javascript/javascriptSemanticIterationSources.js +106 -0
  334. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +515 -74
  335. package/dist/domain/javascript/javascriptSemanticMutationInitializers.js +190 -0
  336. package/dist/domain/javascript/javascriptSemanticMutationValues.js +44 -36
  337. package/dist/domain/javascript/javascriptSemanticObjects.js +79 -42
  338. package/dist/domain/javascript/javascriptSemanticPrimitives.js +8 -14
  339. package/dist/domain/javascript/javascriptSemanticProjection.js +21 -16
  340. package/dist/domain/javascript/javascriptSemanticPromises.js +16 -21
  341. package/dist/domain/javascript/javascriptSemanticPropertyPaths.js +23 -0
  342. package/dist/domain/javascript/javascriptSemanticProvenance.js +3 -3
  343. package/dist/domain/javascript/javascriptSemanticQuery.js +8 -2
  344. package/dist/domain/javascript/javascriptSemanticQueryIdentity.js +3 -2
  345. package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -9
  346. package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +16 -10
  347. package/dist/domain/javascript/javascriptSemanticResourceLimits.js +1 -1
  348. package/dist/domain/javascript/javascriptSemanticResources.js +1 -1
  349. package/dist/domain/javascript/javascriptSemanticReturns.js +55 -44
  350. package/dist/domain/javascript/javascriptSemanticSlots.js +72 -0
  351. package/dist/domain/javascript/javascriptSemanticTraversal.js +6 -1
  352. package/dist/domain/javascript/javascriptSemanticValues.js +180 -76
  353. package/dist/domain/javascript/javascriptSourceMapPaths.js +114 -0
  354. package/dist/domain/javascript/javascriptSourceParser.js +34 -9
  355. package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +5 -6
  356. package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +2 -1
  357. package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +26 -16
  358. package/dist/domain/javascript/sourceToBundleComparison.js +19 -8
  359. package/dist/domain/javascript/sourceToBundleSignals.js +53 -25
  360. package/dist/domain/jsonSerialization.js +109 -55
  361. package/dist/domain/jsonShape.js +46 -19
  362. package/dist/domain/localPath.js +10 -4
  363. package/dist/domain/managed/managedApplicationGraph.js +10 -6
  364. package/dist/domain/managed/managedApplicationGraphNodes.js +82 -57
  365. package/dist/domain/managed/managedArtifact.js +6 -4
  366. package/dist/domain/managed/managedMemberComparison.js +2 -9
  367. package/dist/domain/managed/managedMemberComparisonMatch.js +6 -7
  368. package/dist/domain/managed/managedNativeVerification.js +0 -2
  369. package/dist/domain/managed/managedNativeVerificationMatch.js +9 -3
  370. package/dist/domain/native/binaryLayout.js +2 -3
  371. package/dist/domain/native/nativeApiBoundary.js +1 -1
  372. package/dist/domain/native/nativeCallObservation.js +3 -3
  373. package/dist/domain/native/nativeInstruction.js +7 -0
  374. package/dist/domain/native/nativeValueFlow.js +5 -11
  375. package/dist/domain/native/objcSwiftMetadata.js +15 -17
  376. package/dist/domain/native/recordedCrash.js +2 -3
  377. package/dist/domain/offsetDateTime.js +17 -0
  378. package/dist/domain/process/processCapture.js +22 -20
  379. package/dist/domain/process/processCaptureCoverage.js +70 -0
  380. package/dist/domain/process/processCaptureExample.js +45 -1
  381. package/dist/domain/process/processCaptureParsing.js +1 -34
  382. package/dist/domain/process/processCaptureValidation.js +82 -13
  383. package/dist/domain/process/processComparison.js +39 -43
  384. package/dist/domain/process/processObservation.js +10 -2
  385. package/dist/domain/process/processScenario.js +24 -2
  386. package/dist/domain/process/processTraceComparison.js +0 -2
  387. package/dist/domain/process/processTraceDimensionProjection.js +1 -1
  388. package/dist/domain/process/processTraceEvaluation.js +19 -15
  389. package/dist/domain/process/processTraceSpecification.js +4 -7
  390. package/dist/domain/providerAdapterError.js +2 -0
  391. package/dist/domain/providerCleanupError.js +6 -2
  392. package/dist/domain/reconstructionCoverage.js +7 -3
  393. package/dist/domain/reconstructionObligationLedgerSchemas.js +2 -1
  394. package/dist/domain/reconstructionReadinessSchemas.js +2 -1
  395. package/dist/domain/reconstructionUnknowns.js +4 -3
  396. package/dist/domain/reconstructionVerification.js +6 -5
  397. package/dist/domain/reconstructionVerificationSchemas.js +2 -1
  398. package/dist/domain/referenceSourceGraph.js +27 -28
  399. package/dist/domain/referenceSourceImportParsing.js +34 -45
  400. package/dist/domain/residualUnknown.js +3 -2
  401. package/dist/domain/staticRuntimeCorrelation.js +4 -3
  402. package/dist/domain/stringPatterns.js +6 -0
  403. package/dist/domain/swiftSymbolClassification.js +66 -0
  404. package/dist/domain/symbolAnalysis.js +83 -20
  405. package/dist/domain/unicodeCodePointOrder.js +6 -0
  406. package/dist/domain/webBundleAnalyzerInspection.js +9 -1
  407. package/dist/domain/webCaptureDiff.js +71 -30
  408. package/dist/domain/webCaptureDiffSchemas.js +8 -11
  409. package/dist/domain/webEventListeners.js +3 -2
  410. package/dist/domain/webExecution.js +3 -2
  411. package/dist/domain/webInventory.js +3 -2
  412. package/dist/domain/webMcpDiscovery.js +4 -3
  413. package/dist/domain/webRuntime.js +0 -2
  414. package/dist/domain/webScriptExport.js +2 -2
  415. package/dist/dotnet/ManagedArtifactInspector.js +2 -19
  416. package/dist/dotnet/ManagedMemberInspector.js +12 -18
  417. package/dist/dotnet/ManagedMemberInspectorCore.js +47 -44
  418. package/dist/dotnet/ManagedMemberInstructionDecoder.js +1 -2
  419. package/dist/dotnet/ManagedMemberRows.js +75 -62
  420. package/dist/dotnet/ManagedMetadataInventory.js +16 -22
  421. package/dist/dotnet/ManagedMethodBodyReader.js +4 -0
  422. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +109 -94
  423. package/dist/dotnet/ManagedNativeBoundaryInspector.js +12 -21
  424. package/dist/dotnet/ManagedReaderFailure.js +16 -0
  425. package/dist/dotnet/ManagedStaticProvider.js +13 -12
  426. package/dist/dotnet/ManagedStaticProviderMetadata.js +1 -4
  427. package/dist/evaluation/AgentEvaluationFixtures.js +250 -0
  428. package/dist/evaluation/AgentEvaluationReport.js +28 -0
  429. package/dist/evaluation/CodexAgentEval.js +12 -8
  430. package/dist/evaluation/KnownAnswerEvaluation.js +281 -0
  431. package/dist/evm/EvmoleInterfaceProvider.js +2 -1
  432. package/dist/filesystem/RegularFile.js +41 -0
  433. package/dist/firmware/FirmwareCommand.js +9 -5
  434. package/dist/firmware/FirmwareProvider.js +4 -4
  435. package/dist/generatedPackageMetadata.js +2 -2
  436. package/dist/ghidra/GhidraAnalysisProfile.js +3 -6
  437. package/dist/ghidra/GhidraClient.js +105 -36
  438. package/dist/ghidra/GhidraClientStartup.js +0 -2
  439. package/dist/ghidra/GhidraDoctor.js +6 -5
  440. package/dist/ghidra/GhidraFunctionValues.js +3 -5
  441. package/dist/ghidra/GhidraInstallation.js +151 -22
  442. package/dist/ghidra/GhidraJavaLaunch.js +6 -2
  443. package/dist/ghidra/GhidraLauncher.js +58 -26
  444. package/dist/ghidra/GhidraProvider.js +6 -2
  445. package/dist/ghidra/GhidraProviderCapabilities.js +6 -0
  446. package/dist/ghidra/GhidraProviderClient.js +13 -3
  447. package/dist/ghidra/GhidraSessionError.js +2 -0
  448. package/dist/ghidra/GhidraSessionRoot.js +39 -0
  449. package/dist/ghidra/extensions/GhidraExtensions.js +17 -10
  450. package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +8 -2
  451. package/dist/hopper/BridgeLauncher.js +34 -45
  452. package/dist/hopper/HopperAnalysisProfile.js +3 -8
  453. package/dist/hopper/HopperCleanup.js +56 -27
  454. package/dist/hopper/HopperClient.js +86 -65
  455. package/dist/hopper/HopperMachOImage.js +3 -2
  456. package/dist/hopper/HopperProvider.js +16 -18
  457. package/dist/hopper/HopperRegexSearch.js +3 -6
  458. package/dist/hopper/HopperTargetLease.js +132 -49
  459. package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -0
  460. package/dist/ida/IdaConfiguration.js +8 -3
  461. package/dist/ida/IdaInput.js +1 -7
  462. package/dist/ida/IdaMcpConnection.js +8 -4
  463. package/dist/ida/IdaOperationRunner.js +5 -3
  464. package/dist/ida/IdaProvider.js +8 -12
  465. package/dist/ida/IdaSessionClient.js +24 -20
  466. package/dist/ida/IdaWorkspace.js +12 -13
  467. package/dist/inspector/JavaScriptRuntimeScope.js +9 -5
  468. package/dist/inspector/V8InspectorCaptureProjection.js +47 -14
  469. package/dist/inspector/V8InspectorProvider.js +97 -35
  470. package/dist/javascript/recovery/WakaruCommand.js +7 -2
  471. package/dist/javascript/recovery/WakaruExecution.js +5 -2
  472. package/dist/main/shutdown.js +81 -29
  473. package/dist/main/startup.js +9 -2
  474. package/dist/main/transport.js +23 -3
  475. package/dist/main.js +11 -18
  476. package/dist/native/AppleMachoSelection.js +16 -6
  477. package/dist/native/AppleObjcDispatchFacets.js +3 -3
  478. package/dist/native/AppleObjcProperties.js +17 -7
  479. package/dist/native/CommandRunner.js +9 -7
  480. package/dist/native/LldbCallTracer.js +249 -77
  481. package/dist/native/NativeMacOSProvider.js +32 -17
  482. package/dist/native/NativeMacOSProviderMetadata.js +1 -2
  483. package/dist/native/NativeUiHelperRuntime.js +11 -2
  484. package/dist/native/NativeUiObservation.js +2 -2
  485. package/dist/native/pwntools/PwntoolsDecoder.js +2 -1
  486. package/dist/process/DarwinProcessRunTokenReader.js +16 -2
  487. package/dist/process/ExecFileOutput.js +88 -6
  488. package/dist/process/PrivateRuntimeRoot.js +10 -5
  489. package/dist/process/ProcessOwnership.js +1 -4
  490. package/dist/process/ProcessOwnershipObservation.js +18 -16
  491. package/dist/process/ProviderProcess.js +1 -3
  492. package/dist/process/capture/FilesystemSnapshot.js +131 -24
  493. package/dist/process/capture/ProcessCaptureError.js +13 -0
  494. package/dist/process/capture/ProcessCaptureLifecycle.js +148 -74
  495. package/dist/process/capture/ProcessFilesystemEffects.js +51 -6
  496. package/dist/process/capture/ProcessHarness.js +16 -33
  497. package/dist/process/capture/ProcessNormalization.js +20 -2
  498. package/dist/process/capture/ProcessSampling.js +25 -2
  499. package/dist/process/capture/TerminalRenderer.js +14 -0
  500. package/dist/process/snapshotEnvironment.js +14 -0
  501. package/dist/server/EvidenceMcpServer.js +25 -14
  502. package/dist/server/analysisAdmission.js +8 -0
  503. package/dist/server/createServer.js +71 -59
  504. package/dist/server/mcpClientMetadata.js +12 -5
  505. package/dist/server/promptCompletion.js +3 -8
  506. package/dist/server/registerAnalysisViewTool.js +15 -0
  507. package/dist/server/registerAndroidTools.js +2 -3
  508. package/dist/server/registerApplicationTools/compareExportShapes.js +6 -6
  509. package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
  510. package/dist/server/registerApplicationTools/compareVersions.js +4 -5
  511. package/dist/server/registerApplicationTools/coverage.js +1 -2
  512. package/dist/server/registerApplicationTools/helpers.js +4 -4
  513. package/dist/server/registerApplicationTools/obligationLedger.js +4 -5
  514. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -4
  515. package/dist/server/registerApplicationTools/traceFeature.js +4 -5
  516. package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
  517. package/dist/server/registerArtifactComparisonTool.js +4 -5
  518. package/dist/server/registerArtifactTools.js +2 -2
  519. package/dist/server/registerBinaryDiagnosticsTools.js +2 -3
  520. package/dist/server/registerBrowserScenarioTool.js +3 -4
  521. package/dist/server/registerBrowserTools.js +13 -16
  522. package/dist/server/registerBundleComparisonTool.js +5 -6
  523. package/dist/server/registerCloseLifecycleTool.js +8 -7
  524. package/dist/server/registerElectronTools.js +10 -13
  525. package/dist/server/registerEnhancedTools.js +82 -77
  526. package/dist/server/registerEvidenceTools.js +54 -47
  527. package/dist/server/registerEvmTools.js +2 -3
  528. package/dist/server/registerFirmwareTools.js +2 -3
  529. package/dist/server/registerFunctionComparisonTool.js +7 -8
  530. package/dist/server/registerInvestigationTools.js +14 -15
  531. package/dist/server/registerJavaScriptRecoveryTool.js +2 -3
  532. package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -6
  533. package/dist/server/registerManagedTools.js +7 -4
  534. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +5 -6
  535. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -5
  536. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +6 -7
  537. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +6 -7
  538. package/dist/server/registerOfficialTools.js +32 -41
  539. package/dist/server/registerProcessComparisonTool.js +8 -8
  540. package/dist/server/registerRecordedCrashTools.js +2 -3
  541. package/dist/server/registerSessionRecordTools.js +15 -19
  542. package/dist/server/registerSessionStatusTool.js +3 -4
  543. package/dist/server/registerSessionTools.js +19 -19
  544. package/dist/server/registerWebModuleTool.js +2 -3
  545. package/dist/server/registerWebNetworkCaptureTool.js +2 -3
  546. package/dist/server/registerWebRuntimeTools.js +4 -5
  547. package/dist/server/registerWebScriptTool.js +2 -3
  548. package/dist/server/registerWebSourceLocationTool.js +2 -3
  549. package/dist/server/toolResult.js +66 -94
  550. package/dist/server/toolResultEncoding.js +11 -10
  551. package/dist/windows/WindowsNativeLoader.js +1 -0
  552. package/dist/windows/WindowsOwnedProcess.js +60 -15
  553. package/dist/windows/WindowsPrivateRuntime.js +7 -8
  554. package/native/windows/README.md +3 -1
  555. package/native/windows/build/manifest.json +2 -2
  556. package/native/windows/build/rea-windows-x64.node +0 -0
  557. package/package.json +42 -30
  558. package/scripts/rea.mjs +3 -6
  559. package/skills/reverse-engineer-anything/SKILL.md +14 -13
  560. package/skills/reverse-engineer-anything/references/android-applications.md +6 -3
  561. package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -4
  562. package/skills/reverse-engineer-anything/references/javascript-applications.md +16 -6
  563. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +18 -0
  564. package/dist/artifacts/inventory/policy.js +0 -2
  565. package/dist/config.js +0 -1
  566. package/dist/contracts/browserCaptureToolInputSchema.js +0 -43
  567. package/dist/contracts/process/processCaptureExample.js +0 -2
  568. package/dist/contracts/toolOutputSchemas.js +0 -2
  569. package/dist/domain/managed/managedApplicationGraphNodeCoverage.js +0 -6
  570. package/dist/main/reload.js +0 -12
  571. package/dist/main/state.js +0 -3
  572. package/dist/server/registerNativeTools.js +0 -6
  573. package/dist/server/sessionToolPolicies.js +0 -2
@@ -19,6 +19,8 @@ export class TerminalRenderer {
19
19
  #frames = [];
20
20
  #pending = Promise.resolve();
21
21
  #capturedBytes = 0;
22
+ #observedBytes = 0;
23
+ #observedFrames = 0;
22
24
  #truncated = false;
23
25
  constructor(options) {
24
26
  this.options = options;
@@ -55,6 +57,16 @@ export class TerminalRenderer {
55
57
  truncated() {
56
58
  return this.#truncated;
57
59
  }
60
+ /** Budget accounting after awaiting queued writes with frames(). */
61
+ retention() {
62
+ return {
63
+ budget_bytes: this.options.maxBytes,
64
+ observed_bytes: this.#observedBytes,
65
+ retained_bytes: this.#capturedBytes,
66
+ observed_frames: this.#observedFrames,
67
+ retained_frames: this.#frames.length,
68
+ };
69
+ }
58
70
  /** Release addon and terminal resources after all writes settle. */
59
71
  async dispose() {
60
72
  await this.#pending;
@@ -71,6 +83,8 @@ export class TerminalRenderer {
71
83
  const serializedState = this.options.normalize(this.#serializeAddon.serialize());
72
84
  const bytes = Buffer.byteLength(serializedState) +
73
85
  lines.reduce((total, line) => total + Buffer.byteLength(line), 0);
86
+ this.#observedBytes += bytes;
87
+ this.#observedFrames += 1;
74
88
  if (this.#capturedBytes + bytes > this.options.maxBytes) {
75
89
  this.#truncated = true;
76
90
  return;
@@ -0,0 +1,14 @@
1
+ /** Snapshot caller-selected variables using Node child-process key semantics. */
2
+ export const snapshotEnvironment = (environment, platform = process.platform) => {
3
+ if (platform !== "win32")
4
+ return Object.freeze({ ...environment });
5
+ const snapshot = {};
6
+ // Node sorts keys lexicographically and forwards the first case-insensitive
7
+ // match on Windows. Canonical keys also make subsequent lookups deterministic.
8
+ for (const key of Object.keys(environment).sort()) {
9
+ const canonicalKey = key.toUpperCase();
10
+ if (!Object.hasOwn(snapshot, canonicalKey))
11
+ snapshot[canonicalKey] = environment[key];
12
+ }
13
+ return Object.freeze(snapshot);
14
+ };
@@ -1,35 +1,37 @@
1
1
  import { McpServer, isCallToolResult, isJSONRPCRequest, isJSONRPCNotification, isJSONRPCResultResponse, } from "@modelcontextprotocol/server";
2
2
  import { analysisErrorProjectionSchema } from "../contracts/errorSchemas.js";
3
- import { parseMcpResponseBudget } from "../config/mcpResponseBudget.js";
4
3
  import { AnalysisResourceConstraintError } from "../domain/analysisErrorCore.js";
5
4
  import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
6
5
  import { createEvidence } from "../domain/evidence.js";
7
6
  import { jsonObjectSchema } from "../domain/jsonValue.js";
8
- import { toErrorToolResult } from "./toolResult.js";
9
- import { encodeToolResult, MCP_RESULT_BUDGET_BYTES, } from "./toolResultEncoding.js";
7
+ import { encodeToolResult } from "./toolResultEncoding.js";
10
8
  /** Bind oversized MCP error recovery to this server's Evidence ledger. */
11
9
  export class EvidenceMcpServer extends McpServer {
12
10
  recordEvidence;
13
- constructor(info, options, recordEvidence) {
11
+ delivery;
12
+ constructor(info, options, recordEvidence, delivery) {
14
13
  super(info, options);
15
14
  this.recordEvidence = recordEvidence;
15
+ this.delivery = delivery;
16
16
  }
17
17
  /** Preserve the SDK transport lifecycle while retaining oversized errors. */
18
18
  connect(transport) {
19
- return super.connect(new ErrorEvidenceTransport(transport, this.recordEvidence));
19
+ return super.connect(new ErrorEvidenceTransport(transport, this.recordEvidence, this.delivery));
20
20
  }
21
21
  }
22
22
  class ErrorEvidenceTransport {
23
23
  transport;
24
24
  recordEvidence;
25
+ delivery;
25
26
  onclose;
26
27
  onerror;
27
28
  onmessage;
28
29
  hasPerRequestStream;
29
30
  pendingTools = new Map();
30
- constructor(transport, recordEvidence) {
31
+ constructor(transport, recordEvidence, delivery) {
31
32
  this.transport = transport;
32
33
  this.recordEvidence = recordEvidence;
34
+ this.delivery = delivery;
33
35
  if (transport.hasPerRequestStream !== undefined)
34
36
  this.hasPerRequestStream = transport.hasPerRequestStream;
35
37
  transport.onmessage = (message, extra) => {
@@ -83,7 +85,18 @@ class ErrorEvidenceTransport {
83
85
  : undefined;
84
86
  const tool = id === undefined ? undefined : this.pendingTools.get(id);
85
87
  try {
86
- await this.transport.send(this.recoverError(message, tool), options);
88
+ const recovered = this.recoverError(message, tool);
89
+ if (isJSONRPCResultResponse(recovered) &&
90
+ isCallToolResult(recovered.result) &&
91
+ recovered.result.isError === true) {
92
+ // Keep the complete typed JSON in content. Error projections are not
93
+ // success outputSchema data; oversized recovery must consume their
94
+ // private structured carrier before it is removed from the wire.
95
+ const { structuredContent: _diagnostic, ...result } = recovered.result;
96
+ await this.transport.send({ ...recovered, result }, options);
97
+ }
98
+ else
99
+ await this.transport.send(recovered, options);
87
100
  }
88
101
  finally {
89
102
  if (!isJSONRPCRequest(message) && id !== undefined)
@@ -97,11 +110,9 @@ class ErrorEvidenceTransport {
97
110
  message.result.structuredContent === undefined)
98
111
  return message;
99
112
  const structured = jsonObjectSchema.parse(message.result.structuredContent);
100
- const configured = parseMcpResponseBudget(process.env.REA_MCP_MAX_RESPONSE_BYTES);
101
- const budget = configured.ok && configured.value !== undefined
102
- ? configured.value - 1024
103
- : MCP_RESULT_BUDGET_BYTES;
104
- const encoded = encodeToolResult(structured, budget);
113
+ const budget = this.delivery.resultBudgetBytes;
114
+ // The delivered error omits structuredContent, so only its text counts.
115
+ const encoded = encodeToolResult(structured, budget, "text");
105
116
  if (encoded.ok)
106
117
  return message;
107
118
  const operation = tool ?? "mcp_tool_error";
@@ -139,8 +150,8 @@ class ErrorEvidenceTransport {
139
150
  }, {
140
151
  remediationAction: retained
141
152
  ? "Export the retained original error through export_evidence_bundle to a caller-selected path. The connection remains usable."
142
- : "Configure a larger REA_MCP_MAX_RESPONSE_BYTES and matching client receive buffer, then retry. The original error could not be retained by this server.",
153
+ : "Restart REA with a larger REA_MCP_MAX_RESPONSE_BYTES and matching client receive buffer, then retry. The original error could not be retained by this server.",
143
154
  });
144
- return { ...message, result: toErrorToolResult(failure) };
155
+ return { ...message, result: this.delivery.toErrorToolResult(failure) };
145
156
  }
146
157
  }
@@ -0,0 +1,8 @@
1
+ import { AnalysisCancelledError } from "../domain/analysisErrorCore.js";
2
+ import { err, ok } from "../domain/result.js";
3
+ /** Run against the source's explicit owner, admitting session-scoped work. */
4
+ export const withAdmittedAnalysis = (source) => source.kind === "session"
5
+ ? (operationName, signal, operation) => source.session.withAdmittedAnalysis(operationName, signal, operation)
6
+ : async (operationName, signal, operation) => signal?.aborted === true
7
+ ? err(new AnalysisCancelledError(operationName))
8
+ : ok(await operation(source.analysis));
@@ -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
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";
@@ -35,42 +39,36 @@ import { registerAndroidTools } from "./registerAndroidTools.js";
35
39
  import { AndroidAnalysisService } from "../application/android/AndroidAnalysisService.js";
36
40
  import { createAndroidAnalysisProvider } from "../composition/android.js";
37
41
  import { registerManagedWorkflowTools } from "./registerManagedWorkflowTools.js";
38
- import { registerNativeTools } from "./registerNativeTools.js";
42
+ import { NATIVE_TOOL_CONTRACTS } from "../contracts/native/nativeToolContracts.js";
43
+ import { registerEvidenceTools } from "./registerEvidenceTools.js";
39
44
  import { registerOfficialTools } from "./registerOfficialTools.js";
40
45
  import { registerGuidedPrompts } from "./registerPrompts.js";
41
46
  import { registerSessionTools } from "./registerSessionTools.js";
42
47
  import { sessionAvailabilityPolicy } from "./sessionAvailabilityPolicy.js";
48
+ import { withAdmittedAnalysis, } from "./analysisAdmission.js";
43
49
  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
50
  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) => {
51
+ const installSessionToolAvailability = (session, options, environment) => {
46
52
  if (session === undefined)
47
53
  return undefined;
54
+ const linux = process.platform === "linux";
55
+ const linuxX64 = linux && process.arch === "x64";
56
+ const pwntools = linuxX64 && isAbsolute(environment.REA_PWNTOOLS_PYTHON ?? "");
48
57
  const policy = sessionAvailabilityPolicy(options.availabilityPolicy, {
49
58
  optionalProviderLoadFailures: options.optionalProviderLoadFailures,
50
59
  optionalFeatures: {
51
- evmInterfaceEnabled: options.evmInterface !== undefined ||
52
- (process.platform === "linux" && process.arch === "x64"),
60
+ evmInterfaceEnabled: options.evmInterface !== undefined || linuxX64,
53
61
  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 ?? "")),
62
+ isAbsolute(environment.REA_BROWSER_EXECUTABLE ?? ""),
63
+ recordedCrashEnabled: options.recordedCrash !== undefined || pwntools,
64
+ binaryLayoutEnabled: options.binaryLayout !== undefined || pwntools,
63
65
  firmwareInspectionEnabled: options.firmwareAnalysis !== undefined ||
64
- (process.platform === "linux" &&
65
- isAbsolute(process.env.REA_BINWALK_COMMAND ?? "")),
66
+ (linux && isAbsolute(environment.REA_BINWALK_COMMAND ?? "")),
66
67
  firmwareExtractionEnabled: options.firmwareAnalysis !== undefined ||
67
- (process.platform === "linux" &&
68
- isAbsolute(process.env.REA_UNBLOB_COMMAND ?? "")),
68
+ (linux && isAbsolute(environment.REA_UNBLOB_COMMAND ?? "")),
69
69
  browserObservationEnabled: options.browserObservation !== undefined,
70
70
  javascriptRecoveryEnabled: options.javascriptRecovery !== undefined ||
71
- (process.platform === "linux" &&
72
- process.arch === "x64" &&
73
- isAbsolute(process.env.REA_WAKARU_COMMAND ?? "")),
71
+ (linuxX64 && isAbsolute(environment.REA_WAKARU_COMMAND ?? "")),
74
72
  browserScenarioEnabled: options.browserScenarioCapture !== undefined,
75
73
  electronObservationEnabled: options.electronObservation !== undefined,
76
74
  electronAutomationEnabled: options.electronActiveObservation !== undefined,
@@ -81,7 +79,7 @@ const installSessionToolAvailability = (server, session, options) => {
81
79
  policy,
82
80
  };
83
81
  };
84
- const createMcpServer = (session) => new EvidenceMcpServer({
82
+ const createMcpServer = (session, delivery) => new EvidenceMcpServer({
85
83
  name: PRODUCT_IDENTITY.mcpServerKey,
86
84
  version: PRODUCT_IDENTITY.packageVersion,
87
85
  }, {
@@ -91,30 +89,36 @@ const createMcpServer = (session) => new EvidenceMcpServer({
91
89
  : TARGET_FREE_INSTRUCTIONS,
92
90
  }, session === undefined
93
91
  ? undefined
94
- : (evidence) => session.recordEvidence(evidence));
92
+ : (evidence) => session.recordEvidence(evidence), delivery);
95
93
  /**
96
94
  * Construct one MCP server without acquiring subprocess resources.
97
95
  * Supplying a session adds target lifecycle tools; omitting it retains the
98
96
  * fixed-target seam used by focused tests and embedders.
99
97
  */
100
- export const createServer = (analysis, session, options = {}) => {
98
+ export const createServer = (source, options = {}) => {
99
+ const session = source.kind === "session" ? source.session : undefined;
100
+ const analysis = source.kind === "session" ? source.session : source.analysis;
101
+ const environment = snapshotEnvironment(options.environment ?? process.env);
102
+ const delivery = selectToolResultDelivery(environment, options.delivery);
103
+ const selectedOptions = { ...options, environment, delivery };
101
104
  const startedAt = new Date().toISOString();
102
105
  const logger = options.logger ?? silentLogger;
103
- const server = createMcpServer(session);
104
- const android = options.androidAnalysis ?? createAndroidAnalysisProvider();
105
- const availability = installSessionToolAvailability(server, session, options);
106
+ const server = createMcpServer(session, delivery);
107
+ const android = options.androidAnalysis ?? createAndroidAnalysisProvider(environment);
108
+ const availability = installSessionToolAvailability(session, selectedOptions, environment);
106
109
  const toolLogger = logger.child({ layer: "server" });
107
110
  const { evidenceById, activeTarget, recordEvidence, recordEvidenceWithUnknown, } = createSessionRecorders(server, session);
108
111
  const toolContext = {
109
112
  server,
110
- analysis,
111
113
  session,
112
- options,
114
+ options: selectedOptions,
115
+ environment,
113
116
  logger: toolLogger,
114
117
  evidenceById,
115
118
  activeTarget,
116
119
  recordEvidence,
117
120
  recordEvidenceWithUnknown,
121
+ withAdmittedAnalysis: withAdmittedAnalysis(source),
118
122
  };
119
123
  registerBinaryAnalysisTools(toolContext);
120
124
  const previousOnclose = server.server.onclose;
@@ -131,21 +135,12 @@ export const createServer = (analysis, session, options = {}) => {
131
135
  if (result.status === "rejected")
132
136
  throw result.reason;
133
137
  };
134
- registerAndroidTools(server, new AndroidAnalysisService(android), toolLogger, recordEvidence);
135
- registerBinaryDiagnosticsTools(server, options.binaryLayout ?? createBinaryLayoutService(), toolLogger, recordEvidence);
136
- registerEvmTools(server, options.evmInterface ?? createEvmInterfaceService(), toolLogger, recordEvidence);
137
- registerRecordedCrashTools(server, options.recordedCrash ?? createRecordedCrashService(), toolLogger, recordEvidence);
138
- registerFirmwareTools(server, new FirmwareAnalysisService(options.firmwareAnalysis ?? createFirmwareAnalysisProvider()), toolLogger, recordEvidence);
138
+ registerConfiguredAnalysisTools(toolContext, android);
139
139
  registerObservationTools(toolContext);
140
- registerWebModuleTool(server, options.webModuleTrace ?? createWebModuleTraceService(), toolLogger, recordEvidence);
141
- registerWebSourceLocationTool(server, options.webSourceLocation ?? createWebSourceLocationService(), toolLogger, recordEvidence);
142
- registerWebRuntimeTools(server, options.webRuntime ?? createWebRuntimeService(), toolLogger, recordEvidence);
143
- registerWebNetworkCaptureTool(server, options.webNetworkCapture ?? createWebNetworkCaptureService(), toolLogger, recordEvidence);
144
- registerJavaScriptRecoveryTool(server, new JavaScriptRecoveryService(options.javascriptRecovery ?? createJavaScriptRecoveryProvider()), toolLogger, recordEvidence);
145
140
  registerGuidedPrompts(server, analysis, session);
146
141
  if (session !== undefined) {
147
142
  registerSessionTools(server, session, toolLogger, {
148
- ...options,
143
+ ...selectedOptions,
149
144
  ...(availability === undefined
150
145
  ? {}
151
146
  : { availabilityPolicy: availability.policy }),
@@ -155,6 +150,28 @@ export const createServer = (analysis, session, options = {}) => {
155
150
  }
156
151
  return server;
157
152
  };
153
+ const selectToolResultDelivery = (environment, selected) => {
154
+ if (selected !== undefined)
155
+ return selected;
156
+ const configured = parseMcpResponseBudget(environment.REA_MCP_MAX_RESPONSE_BYTES);
157
+ if (!configured.ok)
158
+ throw configured.error;
159
+ return createToolResultDelivery(configured.value);
160
+ };
161
+ const registerConfiguredAnalysisTools = ({ server, options, environment, logger: toolLogger, evidenceById, recordEvidence, }, android) => {
162
+ registerAndroidTools(server, new AndroidAnalysisService(android), toolLogger, recordEvidence);
163
+ registerBinaryDiagnosticsTools(server, options.binaryLayout ?? createBinaryLayoutService(environment), toolLogger, recordEvidence);
164
+ registerAnalysisViewTool(server, toolLogger, evidenceById, recordEvidence);
165
+ registerEvmTools(server, options.evmInterface ?? createEvmInterfaceService(environment), toolLogger, recordEvidence);
166
+ registerRecordedCrashTools(server, options.recordedCrash ?? createRecordedCrashService(environment), toolLogger, recordEvidence);
167
+ registerFirmwareTools(server, new FirmwareAnalysisService(options.firmwareAnalysis ?? createFirmwareAnalysisProvider(environment)), toolLogger, recordEvidence);
168
+ registerWebModuleTool(server, options.webModuleTrace ?? createWebModuleTraceService(environment), toolLogger, recordEvidence);
169
+ registerWebSourceLocationTool(server, options.webSourceLocation ?? createWebSourceLocationService(environment), toolLogger, recordEvidence);
170
+ registerWebRuntimeTools(server, options.webRuntime ?? createWebRuntimeService(), toolLogger, recordEvidence);
171
+ registerWebNetworkCaptureTool(server, options.webNetworkCapture ?? createWebNetworkCaptureService(environment), toolLogger, recordEvidence);
172
+ registerJavaScriptRecoveryTool(server, new JavaScriptRecoveryService(options.javascriptRecovery ??
173
+ createJavaScriptRecoveryProvider(environment)), toolLogger, recordEvidence);
174
+ };
158
175
  const createSessionRecorders = (server, session) => ({
159
176
  evidenceById: session === undefined
160
177
  ? undefined
@@ -163,18 +180,12 @@ const createSessionRecorders = (server, session) => ({
163
180
  activeTarget: session === undefined ? undefined : () => session.activeTarget(),
164
181
  recordEvidence: session === undefined
165
182
  ? undefined
166
- : (evidence) => {
167
- const recorded = session.recordEvidence(evidence);
168
- return recorded;
169
- },
183
+ : (evidence) => session.recordEvidence(evidence),
170
184
  recordEvidenceWithUnknown: session === undefined
171
185
  ? undefined
172
- : (evidence, input) => {
173
- const recorded = session.recordEvidenceWithUnknown(evidence, input);
174
- return recorded;
175
- },
186
+ : (evidence, input) => session.recordEvidenceWithUnknown(evidence, input),
176
187
  });
177
- const registerBinaryAnalysisTools = ({ server, analysis, session, logger, activeTarget, recordEvidence, recordEvidenceWithUnknown, }) => {
188
+ const registerBinaryAnalysisTools = ({ server, session, logger, activeTarget, recordEvidence, recordEvidenceWithUnknown, withAdmittedAnalysis, }) => {
178
189
  const recordUnknown = session === undefined
179
190
  ? undefined
180
191
  : (input) => session.recordUnknown(input);
@@ -183,9 +194,10 @@ const registerBinaryAnalysisTools = ({ server, analysis, session, logger, active
183
194
  activeTarget,
184
195
  recordEvidence,
185
196
  recordUnknown,
197
+ withAdmittedAnalysis,
186
198
  };
187
- registerOfficialTools(server, analysis, analysisOptions);
188
- registerEnhancedTools(server, analysis, {
199
+ registerOfficialTools(server, analysisOptions);
200
+ registerEnhancedTools(server, {
189
201
  ...analysisOptions,
190
202
  analysisProfile: session === undefined ? undefined : () => session.analysisProfile(),
191
203
  allowsSnapshotReplay: session === undefined
@@ -195,15 +207,15 @@ const registerBinaryAnalysisTools = ({ server, analysis, session, logger, active
195
207
  ? undefined
196
208
  : (input) => session.recordWorkflowSnapshot(input),
197
209
  });
198
- const evidenceOptions = { logger, activeTarget, recordEvidence };
199
- registerNativeTools(server, analysis, evidenceOptions);
200
- registerArtifactTools(server, analysis, {
201
- ...evidenceOptions,
202
- });
203
- registerManagedTools(server, analysis, {
204
- ...evidenceOptions,
205
- session,
206
- });
210
+ const evidenceOptions = {
211
+ logger,
212
+ activeTarget,
213
+ recordEvidence,
214
+ withAdmittedAnalysis,
215
+ };
216
+ registerEvidenceTools(server, NATIVE_TOOL_CONTRACTS, evidenceOptions);
217
+ registerArtifactTools(server, evidenceOptions);
218
+ registerManagedTools(server, evidenceOptions);
207
219
  if (session !== undefined)
208
220
  registerManagedWorkflowTools(server, {
209
221
  logger,
@@ -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, toEvidenceToolResult } 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,9 +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 toEvidenceToolResult(result.value, contract, recorded);
14
+ return server.delivery.toEvidenceToolResult(result.value, contract, recorded);
16
15
  };
17
16
  };
18
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,20 @@ 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
- const unknown = comparison.summary.unknown > 0;
29
- return recordResult(options, contract, result.value, unknown ? "javascript-export-shape" : undefined);
27
+ const unknown = comparison.summary.unknown > 0 ||
28
+ comparison.coverage.status !== "complete-within-inputs";
29
+ return recordResult({ ...options, delivery: server.delivery }, contract, result.value, unknown ? "javascript-export-shape" : undefined);
30
30
  });
31
31
  };
@@ -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,17 +1,17 @@
1
1
  import { APPLICATION_TOOL_CONTRACTS } from "../../contracts/applicationToolContracts.js";
2
- import { toEvidenceToolResult } 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
- return toEvidenceToolResult(evidence, contract, recorded);
6
+ return options.delivery.toEvidenceToolResult(evidence, contract, recorded);
8
7
  };
9
8
  const unknownRegistration = (evidence, kind) => ({
10
- question: kind === "application-version-comparison"
9
+ // Scope unknown identity to the comparison while keeping exact replays stable.
10
+ question: `${kind === "application-version-comparison"
11
11
  ? "Which application entities remain unmatched or ambiguous across these versions?"
12
12
  : kind === "source-to-bundle-comparison"
13
13
  ? "Which historical source files remain unmatched or ambiguously mapped to the shipped bundle?"
14
- : "Which selected JavaScript export return shapes remain dynamic, incomplete, or ambiguously paired?",
14
+ : "Which selected JavaScript export return shapes remain dynamic, incomplete, or ambiguously paired?"} (comparison ${evidence.evidence_id})`,
15
15
  severity: "medium",
16
16
  domain: kind,
17
17
  supporting_evidence_ids: [evidence.evidence_id],