rea-agents 6.0.0 → 6.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (611) hide show
  1. package/README.md +26 -18
  2. package/bridge/android/ReaJadxBridge.java +14 -5
  3. package/bridge/ghidra/ReaGhidraBridge.java +205 -51
  4. package/bridge/hopper_bridge.py +314 -127
  5. package/bridge/mitmproxy/capture.py +0 -2
  6. package/bridge/native/rea_lldb_tracer.py +630 -94
  7. package/bridge/process/ProcessRunTokenReader.swift +39 -5
  8. package/bridge/pwntools/recorded_crash_impl.py +4 -0
  9. package/dist/android/JadxConfiguration.js +274 -31
  10. package/dist/android/JadxMcpTransport.js +18 -2
  11. package/dist/android/JadxProtocol.js +6 -0
  12. package/dist/android/JadxProvider.js +76 -37
  13. package/dist/android/JadxSession.js +23 -4
  14. package/dist/application/AnalysisContextQueries.js +8 -35
  15. package/dist/application/AnalysisDocument.js +32 -0
  16. package/dist/application/AppBundleExecutable.js +67 -21
  17. package/dist/application/BinaryTargetResolver.js +5 -3
  18. package/dist/application/BrowserEvidence.js +3 -8
  19. package/dist/application/BrowserScenarioEvidence.js +2 -18
  20. package/dist/application/CallPathTracing.js +19 -3
  21. package/dist/application/CapabilityInventory.js +48 -11
  22. package/dist/application/ClientConfigurationDocument.js +917 -8
  23. package/dist/application/ClientRegistrationIdentity.js +26 -5
  24. package/dist/application/ClientRegistrationStatus.js +29 -14
  25. package/dist/application/DirectAnalysis.js +56 -51
  26. package/dist/application/DirectAnalysisCleanup.js +72 -0
  27. package/dist/application/DirectAnalysisStatus.js +4 -5
  28. package/dist/application/Doctor.js +19 -21
  29. package/dist/application/DoctorDiagnostics.js +1 -2
  30. package/dist/application/DoctorScope.js +25 -13
  31. package/dist/application/EnhancedLiteralTracing.js +22 -25
  32. package/dist/application/EnhancedTools.js +64 -17
  33. package/dist/application/EvidenceBundleFiles.js +30 -13
  34. package/dist/application/FunctionAnalysisEvidence.js +2 -3
  35. package/dist/application/InventoryProjectionEvidence.js +4 -3
  36. package/dist/application/InvestigationProviders.js +11 -2
  37. package/dist/application/JsonFiles.js +83 -28
  38. package/dist/application/LinuxHopper.js +9 -6
  39. package/dist/application/MacHopper.js +15 -18
  40. package/dist/application/ProcedureAddressResolution.js +11 -0
  41. package/dist/application/RealHopperAssertions.js +0 -11
  42. package/dist/application/ReconstructionCoverageService.js +7 -4
  43. package/dist/application/ReconstructionObligationCandidates.js +1 -1
  44. package/dist/application/ReconstructionObligationLedgerService.js +4 -3
  45. package/dist/application/ReferenceSourceImportEntries.js +1 -1
  46. package/dist/application/Setup.js +21 -17
  47. package/dist/application/SetupClientConfiguration.js +10 -15
  48. package/dist/application/SetupHost.js +21 -29
  49. package/dist/application/SetupPlan.js +11 -9
  50. package/dist/application/SupportedClients.js +34 -1
  51. package/dist/application/Uninstall.js +82 -29
  52. package/dist/application/Update.js +18 -3
  53. package/dist/application/UpdateMaintenance.js +7 -5
  54. package/dist/application/UpdateRuntime.js +57 -36
  55. package/dist/application/WebModuleTraceService.js +4 -2
  56. package/dist/application/WebNetworkCaptureService.js +4 -2
  57. package/dist/application/WebRuntimeService.js +5 -3
  58. package/dist/application/WebScriptExportService.js +32 -6
  59. package/dist/application/WebSourceLocationService.js +4 -2
  60. package/dist/application/WorkflowEvidence.js +105 -0
  61. package/dist/application/XrefsAddressResolution.js +45 -0
  62. package/dist/application/analysisView/AnalysisViewService.js +76 -0
  63. package/dist/application/binary/AnalysisClientCleanup.js +30 -5
  64. package/dist/application/binary/AnalysisProviderEvaluation.js +22 -7
  65. package/dist/application/binary/AnalysisProviderRegistry.js +4 -6
  66. package/dist/application/binary/AnalysisSnapshotCache.js +13 -14
  67. package/dist/application/binary/BinarySession.js +161 -93
  68. package/dist/application/binary/BinarySessionComposition.js +1 -3
  69. package/dist/application/binary/BinarySessionExecution.js +3 -5
  70. package/dist/application/binary/BinarySessionOpen.js +4 -4
  71. package/dist/application/binary/BinarySessionRecords.js +26 -4
  72. package/dist/application/binary/BinarySessionStatus.js +18 -7
  73. package/dist/application/binary/CompositeProvider.js +16 -17
  74. package/dist/application/binary/LazyAnalysisProvider.js +8 -5
  75. package/dist/application/binary/SessionProviderRouter.js +27 -135
  76. package/dist/application/binaryDiagnostics/BinaryLayoutService.js +4 -2
  77. package/dist/application/binaryDiagnostics/RecordedCrashService.js +4 -2
  78. package/dist/application/evm/EvmInterfaceService.js +4 -2
  79. package/dist/application/homebrew.js +48 -0
  80. package/dist/application/investigation/EvidenceLedger.js +21 -7
  81. package/dist/application/investigation/InvestigationRecords.js +8 -0
  82. package/dist/application/javascript/ElectronActiveEvidence.js +9 -13
  83. package/dist/application/javascript/JavaScriptAnalysisControl.js +34 -0
  84. package/dist/application/javascript/JavaScriptApplicationEvidence.js +21 -4
  85. package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +19 -2
  86. package/dist/application/javascript/JavaScriptApplicationService.js +27 -15
  87. package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +5 -5
  88. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +10 -7
  89. package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +44 -10
  90. package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +11 -3
  91. package/dist/application/javascript/JavaScriptArtifactGraphContext.js +9 -0
  92. package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +8 -5
  93. package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +12 -3
  94. package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +0 -1
  95. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +49 -19
  96. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +56 -8
  97. package/dist/application/javascript/JavaScriptModuleRelationships.js +38 -9
  98. package/dist/application/javascript/JavaScriptRecoveryService.js +4 -2
  99. package/dist/application/javascript/JavaScriptRuntimeObservationService.js +6 -4
  100. package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +3 -3
  101. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +2 -3
  102. package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +63 -61
  103. package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +1 -2
  104. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +2 -3
  105. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +1 -5
  106. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +75 -46
  107. package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +2 -3
  108. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +64 -19
  109. package/dist/application/managed/ManagedApplicationGraphService.js +4 -3
  110. package/dist/application/managed/ManagedMemberComparisonService.js +9 -5
  111. package/dist/application/managed/ManagedNativeVerificationService.js +6 -4
  112. package/dist/application/managed/ManagedReconstructionService.js +4 -3
  113. package/dist/application/process/ProcessCli.js +25 -17
  114. package/dist/application/process/ProcessEvidence.js +4 -4
  115. package/dist/application/workflowInputError.js +18 -0
  116. package/dist/artifacts/ArtifactProvider.js +48 -13
  117. package/dist/artifacts/ArtifactReader.js +31 -0
  118. package/dist/artifacts/DirectoryArtifactReader.js +2 -1
  119. package/dist/artifacts/MachOSliceArtifactReader.js +106 -15
  120. package/dist/artifacts/NativeDmgArtifactReader.js +73 -21
  121. package/dist/artifacts/SafeOutputTree.js +16 -2
  122. package/dist/artifacts/ZipArtifactReader.js +11 -4
  123. package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +26 -5
  124. package/dist/artifacts/apple/DylibResolutionReader.js +17 -7
  125. package/dist/artifacts/apple/InterfaceBuilderAnalysis.js +176 -56
  126. package/dist/artifacts/apple/InterfaceBuilderDecodeBudget.js +195 -0
  127. package/dist/artifacts/apple/KeyedArchiveReader.js +55 -23
  128. package/dist/artifacts/apple/MachoLoadCommandReader.js +92 -31
  129. package/dist/artifacts/apple/NibArchive.js +81 -14
  130. package/dist/artifacts/apple/NibViewHierarchy.js +10 -3
  131. package/dist/artifacts/apple/PlistNumberLiterals.js +164 -0
  132. package/dist/artifacts/extraction/ArtifactExtraction.js +78 -21
  133. package/dist/artifacts/inventory/ArtifactGraphConstruction.js +79 -68
  134. package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
  135. package/dist/artifacts/inventory/reader.js +3 -3
  136. package/dist/artifacts/inventory/scanCanonical.js +59 -38
  137. package/dist/artifacts/inventory/scanReader.js +5 -9
  138. package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +6 -2
  139. package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
  140. package/dist/browser/CdpBrowserProvider.js +2 -3
  141. package/dist/browser/CdpCaptureCompleteness.js +2 -0
  142. package/dist/browser/CdpCaptureEventHandlers.js +78 -15
  143. package/dist/browser/CdpCaptureEventTypes.js +5 -1
  144. package/dist/browser/CdpCaptureEvents.js +25 -1
  145. package/dist/browser/CdpCaptureValues.js +20 -0
  146. package/dist/browser/CdpConnection.js +30 -11
  147. package/dist/browser/CdpElectronProvider.js +0 -2
  148. package/dist/browser/CdpElectronScriptEvents.js +2 -8
  149. package/dist/browser/CdpElectronScripts.js +2 -3
  150. package/dist/browser/CdpOptionalCommand.js +2 -3
  151. package/dist/browser/CdpPageCapture.js +23 -1
  152. package/dist/browser/CdpPageCaptureScripts.js +2 -3
  153. package/dist/browser/CdpSafeMetadata.js +10 -10
  154. package/dist/browser/PlaywrightBrowserScenarioProvider.js +59 -44
  155. package/dist/browser/PlaywrightElectronActiveActions.js +34 -79
  156. package/dist/browser/PlaywrightElectronActiveProjection.js +141 -0
  157. package/dist/browser/PlaywrightElectronActiveProvider.js +133 -130
  158. package/dist/browser/PlaywrightScenarioArtifacts.js +1 -1
  159. package/dist/browser/PlaywrightScenarioBrowser.js +139 -39
  160. package/dist/browser/PlaywrightScenarioEvents.js +1 -1
  161. package/dist/browser/PlaywrightScenarioSession.js +39 -22
  162. package/dist/browser/WebSourceMapFetcher.js +426 -72
  163. package/dist/browser/assets/LocalWebScriptArtifacts.js +2 -2
  164. package/dist/browser/assets/ScriptCaptureAdapters.js +1 -1
  165. package/dist/browser/history/CaptureFailures.js +41 -1
  166. package/dist/browser/history/CaptureRelease.js +5 -0
  167. package/dist/browser/history/HarCaptureAdapter.js +3 -3
  168. package/dist/browser/history/HarJson.js +3 -2
  169. package/dist/browser/history/HistoricalCaptureDecoder.js +4 -2
  170. package/dist/browser/history/MitmproxyCaptureAdapter.js +4 -2
  171. package/dist/catalogIdentity.js +0 -1
  172. package/dist/cli/analysisSelector.js +23 -0
  173. package/dist/cli/analysisViewCommands.js +36 -0
  174. package/dist/cli/applicationCommands.js +2 -3
  175. package/dist/cli/artifactCommands.js +11 -12
  176. package/dist/cli/coreAnalysisCommands.js +3 -3
  177. package/dist/cli/coreBinaryCommands.js +100 -37
  178. package/dist/cli/coreNativeCommands.js +9 -10
  179. package/dist/cli/electronCommands.js +10 -9
  180. package/dist/cli/interactiveSetup.js +6 -6
  181. package/dist/cli/javascriptApplicationAnalysis.js +7 -3
  182. package/dist/cli/jsonOutput.js +4 -99
  183. package/dist/cli/managedCommands.js +7 -8
  184. package/dist/cli/nativeCallCommands.js +3 -5
  185. package/dist/cli/omittableDefaults.js +50 -0
  186. package/dist/cli/processCommands.js +3 -2
  187. package/dist/cli/setupCommands.js +16 -15
  188. package/dist/cli/utilityCommands.js +9 -9
  189. package/dist/cli/webRuntimeCommands.js +8 -8
  190. package/dist/cli.js +18 -9
  191. package/dist/cliBrowserScenarioCommands.js +2 -2
  192. package/dist/cliCommandNames.js +1 -1
  193. package/dist/cliJsonInput.js +24 -5
  194. package/dist/cliOutput.js +0 -38
  195. package/dist/composition/auxiliaryAnalysisProviders.js +27 -23
  196. package/dist/composition/binary.js +9 -9
  197. package/dist/composition/browserScenario.js +2 -1
  198. package/dist/composition/directAnalysis.js +20 -13
  199. package/dist/composition/electronScenario.js +1 -1
  200. package/dist/composition/optionalObservationProviders.js +12 -7
  201. package/dist/config/environment.js +10 -0
  202. package/dist/config/ghidraStartupTimeout.js +12 -0
  203. package/dist/config/homeDirectory.js +12 -0
  204. package/dist/config/mcpResponseBudget.js +30 -0
  205. package/dist/config/parseConfig.js +8 -3
  206. package/dist/config/parsers.js +19 -22
  207. package/dist/contracts/analysisViewToolContracts.js +56 -0
  208. package/dist/contracts/applicationToolContracts.js +5 -4
  209. package/dist/contracts/artifactComparisonExample.js +2 -2
  210. package/dist/contracts/artifactToolContracts.js +1 -1
  211. package/dist/contracts/browserScenarioToolContracts.js +1 -1
  212. package/dist/contracts/browserToolContracts.js +19 -15
  213. package/dist/contracts/enhancedInputs.js +7 -5
  214. package/dist/contracts/enhancedToolContracts.js +7 -6
  215. package/dist/contracts/evm/evmToolContracts.js +1 -1
  216. package/dist/contracts/functionWorkflowToolContracts.js +1 -1
  217. package/dist/contracts/hopperMemoryContracts.js +2 -5
  218. package/dist/contracts/inputSchemaPresentation.js +90 -0
  219. package/dist/contracts/investigationExamples.js +4 -3
  220. package/dist/contracts/javascript/electronToolContracts.js +2 -2
  221. package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +0 -20
  222. package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +245 -0
  223. package/dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js +1 -1
  224. package/dist/contracts/managed/managedToolContracts.js +7 -14
  225. package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
  226. package/dist/contracts/mobileApplicationGraphExamples.js +3 -3
  227. package/dist/contracts/native/binaryDiagnosticsToolContracts.js +1 -1
  228. package/dist/contracts/native/nativeToolContracts.js +5 -3
  229. package/dist/contracts/officialToolContracts.js +16 -16
  230. package/dist/contracts/promptContracts.js +5 -5
  231. package/dist/contracts/providerSelection.js +1 -1
  232. package/dist/contracts/sessionLifecycleInputs.js +3 -7
  233. package/dist/contracts/sessionStatusContract.js +2 -4
  234. package/dist/contracts/sessionToolContracts.js +18 -8
  235. package/dist/contracts/sessionToolSchemas.js +3 -19
  236. package/dist/contracts/toolContractExamples.js +0 -1
  237. package/dist/contracts/toolContractHelpers.js +4 -1
  238. package/dist/contracts/toolContracts.js +2 -0
  239. package/dist/contracts/toolEffects.js +1 -1
  240. package/dist/contracts/toolOutputSchemaGroups.js +160 -115
  241. package/dist/contracts/toolOutputSchemaPrimitives.js +28 -20
  242. package/dist/contracts/toolSchemaMetadata.js +41 -33
  243. package/dist/contracts/webNetworkCaptureToolContracts.js +2 -2
  244. package/dist/contracts/webRuntimeToolContracts.js +1 -1
  245. package/dist/contracts/webScriptToolContracts.js +1 -1
  246. package/dist/doctorRuntime.js +7 -5
  247. package/dist/domain/analysisErrorBase.js +8 -3
  248. package/dist/domain/analysisErrorCore.js +6 -1
  249. package/dist/domain/analysisErrorPresentation.js +90 -20
  250. package/dist/domain/analysisErrorProjection.js +130 -32
  251. package/dist/domain/analysisSnapshot.js +29 -31
  252. package/dist/domain/analysisView/analysisView.js +243 -0
  253. package/dist/domain/analysisView/analysisViewCoverage.js +19 -0
  254. package/dist/domain/analysisView/binaryLayoutView.js +159 -0
  255. package/dist/domain/analysisView/javascriptApplicationView.js +238 -0
  256. package/dist/domain/android/androidAnalysis.js +2 -4
  257. package/dist/domain/android/androidApplication.js +18 -10
  258. package/dist/domain/apple/appleApplication.js +42 -15
  259. package/dist/domain/apple/dyldEnvironment.js +73 -0
  260. package/dist/domain/apple/dylibResolution.js +130 -12
  261. package/dist/domain/apple/dylibResolutionFindings.js +9 -7
  262. package/dist/domain/apple/interfaceBuilderGraph.js +25 -14
  263. package/dist/domain/apple/interfaceBuilderKeyedArchive.js +13 -3
  264. package/dist/domain/apple/keyedArchive.js +35 -3
  265. package/dist/domain/apple/machoContainer.js +54 -0
  266. package/dist/domain/apple/plistNumbers.js +76 -0
  267. package/dist/domain/artifactComparison.js +15 -6
  268. package/dist/domain/artifactGraph.js +16 -3
  269. package/dist/domain/artifactIdentity.js +29 -0
  270. package/dist/domain/artifactInventoryEvidence.js +28 -40
  271. package/dist/domain/artifactOperationError.js +3 -3
  272. package/dist/domain/artifactPartialObservation.js +1 -0
  273. package/dist/domain/artifactPathSyntax.js +49 -0
  274. package/dist/domain/binaryTarget.js +39 -13
  275. package/dist/domain/bridgeCandidateProjection.js +71 -0
  276. package/dist/domain/browserCaptureComparison.js +13 -49
  277. package/dist/domain/browserCompleteness.js +1 -0
  278. package/dist/domain/browserNetworkEvidence.js +10 -4
  279. package/dist/domain/browserObservation.js +0 -1
  280. package/dist/domain/browserObservationError.js +24 -5
  281. package/dist/domain/browserObservationSchemas.js +14 -3
  282. package/dist/domain/browserScenario.js +0 -1
  283. package/dist/domain/browserScenarioCapture.js +1 -2
  284. package/dist/domain/browserScenarioDiff.js +0 -2
  285. package/dist/domain/browserScenarioDiffEvidence.js +0 -12
  286. package/dist/domain/browserScenarioDiffValues.js +2 -2
  287. package/dist/domain/browserScenarioValues.js +5 -10
  288. package/dist/domain/bundleComparison.js +3 -2
  289. package/dist/domain/callPath.js +8 -9
  290. package/dist/domain/callPathSchemas.js +2 -2
  291. package/dist/domain/canonicalJsonDigestSteps.js +133 -0
  292. package/dist/domain/canonicalOrdering.js +9 -5
  293. package/dist/domain/changedBehavior.js +9 -9
  294. package/dist/domain/comparisonSourceEvidence.js +40 -0
  295. package/dist/domain/completionLedgerGeneration.js +2 -1
  296. package/dist/domain/configurationErrors.js +13 -1
  297. package/dist/domain/conformancePackage.js +4 -3
  298. package/dist/domain/evidence.js +65 -36
  299. package/dist/domain/evidenceBundle.js +47 -8
  300. package/dist/domain/evidenceCompletionLedger.js +2 -1
  301. package/dist/domain/evidenceErrors.js +12 -1
  302. package/dist/domain/explicitSensitiveFailure.js +17 -1
  303. package/dist/domain/firmware/firmwareAnalysis.js +6 -7
  304. package/dist/domain/functionComparison.js +4 -5
  305. package/dist/domain/functionComparisonDimensions.js +120 -87
  306. package/dist/domain/functionComparisonNormalization.js +23 -34
  307. package/dist/domain/functionComparisonResults.js +1 -4
  308. package/dist/domain/functionComparisonSchemas.js +2 -8
  309. package/dist/domain/functionDossierEvidence.js +2 -37
  310. package/dist/domain/hopperErrors.js +23 -2
  311. package/dist/domain/hopperValues.js +51 -8
  312. package/dist/domain/immutableJson.js +114 -0
  313. package/dist/domain/inputIssueProjection.js +3 -0
  314. package/dist/domain/javascript/electronActiveObservation.js +47 -64
  315. package/dist/domain/javascript/electronObservation.js +14 -3
  316. package/dist/domain/javascript/electronStaticAnalysisBrowser.js +10 -9
  317. package/dist/domain/javascript/electronStaticAnalysisIpc.js +2 -1
  318. package/dist/domain/javascript/electronStaticAnalysisNative.js +2 -1
  319. package/dist/domain/javascript/electronStaticAnalysisValues.js +6 -12
  320. package/dist/domain/javascript/javascriptApplicationAnalysis.js +71 -23
  321. package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +2 -0
  322. package/dist/domain/javascript/javascriptApplicationGraph.js +39 -3
  323. package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +9 -2
  324. package/dist/domain/javascript/javascriptApplicationVersionItems.js +5 -2
  325. package/dist/domain/javascript/javascriptApplicationVersionKeys.js +2 -1
  326. package/dist/domain/javascript/javascriptAstValues.js +20 -0
  327. package/dist/{application/javascript/JavaScriptReturnShapeProjection.js → domain/javascript/javascriptExportReturnShapeProjection.js} +4 -4
  328. package/dist/domain/javascript/javascriptExportShapeComparison.js +7 -1
  329. package/dist/domain/javascript/javascriptExportShapeComparisonIdentity.js +6 -1
  330. package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +29 -1
  331. package/dist/domain/javascript/javascriptExportShapeSelection.js +5 -5
  332. package/dist/domain/javascript/javascriptExportShapeVariants.js +67 -14
  333. package/dist/domain/javascript/javascriptFeatureSeed.js +20 -0
  334. package/dist/domain/javascript/javascriptFeatureTraversal.js +0 -1
  335. package/dist/domain/javascript/javascriptNativeHandoff.js +1 -1
  336. package/dist/domain/javascript/javascriptRecovery.js +3 -8
  337. package/dist/domain/javascript/javascriptRuntimeLoadState.js +0 -1
  338. package/dist/domain/javascript/javascriptRuntimeObservation.js +10 -2
  339. package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +1 -1
  340. package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +3 -2
  341. package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +0 -1
  342. package/dist/domain/javascript/javascriptSemanticAnalysis.js +106 -5
  343. package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +2 -1
  344. package/dist/domain/javascript/javascriptSemanticCalls.js +2 -1
  345. package/dist/domain/javascript/javascriptSemanticChildProcesses.js +2 -1
  346. package/dist/domain/javascript/javascriptSemanticCoverage.js +6 -5
  347. package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +9 -17
  348. package/dist/domain/javascript/javascriptSemanticDataEffects.js +23 -6
  349. package/dist/domain/javascript/javascriptSemanticGraph.js +98 -43
  350. package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +1 -0
  351. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +77 -20
  352. package/dist/domain/javascript/javascriptSemanticMutationValues.js +21 -27
  353. package/dist/domain/javascript/javascriptSemanticObjects.js +83 -42
  354. package/dist/domain/javascript/javascriptSemanticPrimitives.js +18 -21
  355. package/dist/domain/javascript/javascriptSemanticProjection.js +2 -3
  356. package/dist/domain/javascript/javascriptSemanticPromises.js +2 -1
  357. package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -4
  358. package/dist/domain/javascript/javascriptSemanticResourceLimits.js +77 -0
  359. package/dist/domain/javascript/javascriptSemanticResources.js +1 -1
  360. package/dist/domain/javascript/javascriptSemanticReturns.js +32 -17
  361. package/dist/domain/javascript/javascriptSemanticSlots.js +72 -0
  362. package/dist/domain/javascript/javascriptSemanticValues.js +126 -61
  363. package/dist/domain/javascript/javascriptSourceMapPaths.js +104 -0
  364. package/dist/domain/javascript/javascriptSourceParser.js +6 -2
  365. package/dist/domain/javascript/javascriptStaticAnalysis.js +22 -17
  366. package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +5 -3
  367. package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +16 -5
  368. package/dist/domain/javascript/javascriptStaticAnalysisFindings.js +66 -7
  369. package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +28 -17
  370. package/dist/domain/javascript/javascriptStaticAnalysisState.js +3 -2
  371. package/dist/domain/javascript/sourceToBundleComparison.js +12 -3
  372. package/dist/domain/javascript/sourceToBundleSignals.js +47 -19
  373. package/dist/domain/jsonSerialization.js +109 -0
  374. package/dist/domain/jsonValue.js +90 -6
  375. package/dist/domain/localPath.js +6 -0
  376. package/dist/domain/managed/managedApplicationGraph.js +10 -10
  377. package/dist/domain/managed/managedArtifact.js +6 -4
  378. package/dist/domain/managed/managedInspectionEvidence.js +16 -0
  379. package/dist/domain/managed/managedMemberComparison.js +2 -9
  380. package/dist/domain/managed/managedMemberComparisonMatch.js +5 -9
  381. package/dist/domain/managed/managedNativeVerification.js +3 -11
  382. package/dist/domain/managed/managedNativeVerificationMatch.js +9 -3
  383. package/dist/domain/native/binaryLayout.js +2 -3
  384. package/dist/domain/native/fileOffsetPartialObservation.js +1 -0
  385. package/dist/domain/native/nativeApiBoundary.js +1 -1
  386. package/dist/domain/native/nativeCallObservation.js +37 -13
  387. package/dist/domain/native/nativeCallPartialObservation.js +33 -0
  388. package/dist/domain/native/nativeInstruction.js +7 -0
  389. package/dist/domain/native/recordedCrash.js +2 -3
  390. package/dist/domain/offsetDateTime.js +17 -0
  391. package/dist/domain/process/processCapture.js +21 -16
  392. package/dist/domain/process/processCaptureCoverage.js +67 -0
  393. package/dist/domain/process/processCaptureExample.js +2 -1
  394. package/dist/domain/process/processCaptureParsing.js +1 -34
  395. package/dist/domain/process/processCaptureValidation.js +81 -13
  396. package/dist/domain/process/processComparison.js +79 -26
  397. package/dist/domain/process/processObservation.js +10 -2
  398. package/dist/domain/process/processScenario.js +35 -12
  399. package/dist/domain/process/processTraceComparison.js +0 -2
  400. package/dist/domain/process/processTraceDimensionProjection.js +1 -1
  401. package/dist/domain/process/processTraceEvaluation.js +15 -11
  402. package/dist/domain/process/processTraceSpecification.js +3 -4
  403. package/dist/domain/propertyListKeys.js +1 -1
  404. package/dist/domain/propertyListXmlText.js +19 -0
  405. package/dist/domain/providerAdapterError.js +3 -1
  406. package/dist/domain/providerOperationHealth.js +54 -0
  407. package/dist/domain/reconstructionCoverage.js +5 -2
  408. package/dist/domain/reconstructionObligationLedgerSchemas.js +2 -1
  409. package/dist/domain/reconstructionReadinessSchemas.js +2 -1
  410. package/dist/domain/reconstructionVerification.js +9 -46
  411. package/dist/domain/reconstructionVerificationSchemas.js +4 -3
  412. package/dist/domain/referenceSourceGraph.js +20 -21
  413. package/dist/domain/staticRuntimeCorrelation.js +8 -45
  414. package/dist/domain/stringPatterns.js +6 -0
  415. package/dist/domain/swiftSymbolClassification.js +61 -0
  416. package/dist/domain/symbolAnalysis.js +66 -18
  417. package/dist/domain/webBundleAnalysis.js +20 -8
  418. package/dist/domain/webBundleAnalyzerInspection.js +13 -8
  419. package/dist/domain/webBundleAnalyzerResult.js +41 -2
  420. package/dist/domain/webCaptureDiff.js +0 -1
  421. package/dist/domain/webCaptureDiffSchemas.js +6 -3
  422. package/dist/domain/webEventListeners.js +3 -2
  423. package/dist/domain/webExecution.js +3 -2
  424. package/dist/domain/webRuntime.js +19 -7
  425. package/dist/domain/webScriptExport.js +1 -1
  426. package/dist/domain/webSourceLocation.js +1 -0
  427. package/dist/dotnet/ManagedArtifactInspector.js +2 -19
  428. package/dist/dotnet/ManagedMemberInspector.js +12 -18
  429. package/dist/dotnet/ManagedMemberInspectorCore.js +47 -44
  430. package/dist/dotnet/ManagedMemberRows.js +75 -62
  431. package/dist/dotnet/ManagedMetadataInventory.js +16 -22
  432. package/dist/dotnet/ManagedMethodBodyReader.js +4 -0
  433. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +109 -94
  434. package/dist/dotnet/ManagedNativeBoundaryInspector.js +12 -21
  435. package/dist/dotnet/ManagedReaderFailure.js +16 -0
  436. package/dist/dotnet/ManagedStaticProvider.js +3 -5
  437. package/dist/evaluation/AgentEvaluationFixtures.js +250 -0
  438. package/dist/evaluation/AgentEvaluationReport.js +28 -0
  439. package/dist/evaluation/CodexAgentEval.js +12 -8
  440. package/dist/evaluation/KnownAnswerEvaluation.js +281 -0
  441. package/dist/evm/EvmoleInterfaceProvider.js +2 -1
  442. package/dist/firmware/FirmwareCommand.js +9 -5
  443. package/dist/firmware/FirmwareFiles.js +1 -1
  444. package/dist/firmware/FirmwareProvider.js +4 -4
  445. package/dist/generatedPackageMetadata.js +2 -2
  446. package/dist/ghidra/GhidraAnalysisProfile.js +7 -5
  447. package/dist/ghidra/GhidraClient.js +126 -34
  448. package/dist/ghidra/GhidraClientStartup.js +0 -2
  449. package/dist/ghidra/GhidraDiagnostics.js +7 -7
  450. package/dist/ghidra/GhidraDoctor.js +6 -5
  451. package/dist/ghidra/GhidraFunctionValues.js +13 -12
  452. package/dist/ghidra/GhidraInstallation.js +58 -33
  453. package/dist/ghidra/GhidraInventoryValues.js +14 -4
  454. package/dist/ghidra/GhidraJavaLaunch.js +66 -0
  455. package/dist/ghidra/GhidraLauncher.js +47 -22
  456. package/dist/ghidra/GhidraProvider.js +6 -2
  457. package/dist/ghidra/GhidraProviderCapabilities.js +20 -2
  458. package/dist/ghidra/GhidraProviderClient.js +36 -15
  459. package/dist/ghidra/GhidraSessionError.js +13 -7
  460. package/dist/ghidra/GhidraSessionRoot.js +39 -0
  461. package/dist/ghidra/GhidraTargetSnapshot.js +47 -12
  462. package/dist/ghidra/GhidraTransport.js +20 -0
  463. package/dist/ghidra/extensions/GhidraExtensions.js +17 -10
  464. package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +8 -2
  465. package/dist/hopper/BridgeLauncher.js +65 -56
  466. package/dist/hopper/HopperAnalysisProfile.js +65 -12
  467. package/dist/hopper/HopperCleanup.js +63 -22
  468. package/dist/hopper/HopperClient.js +288 -59
  469. package/dist/hopper/HopperFileOffset.js +237 -0
  470. package/dist/hopper/HopperMachOImage.js +197 -0
  471. package/dist/hopper/HopperOperationStage.js +6 -0
  472. package/dist/hopper/HopperProvider.js +71 -19
  473. package/dist/hopper/HopperProviderCapabilities.js +19 -1
  474. package/dist/hopper/HopperRegexSearch.js +134 -0
  475. package/dist/hopper/HopperRegexWorker.js +27 -0
  476. package/dist/hopper/HopperRequestQueue.js +68 -19
  477. package/dist/hopper/HopperTargetLease.js +133 -49
  478. package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -0
  479. package/dist/ida/IdaConfiguration.js +8 -3
  480. package/dist/ida/IdaInput.js +1 -7
  481. package/dist/ida/IdaMcpConnection.js +8 -4
  482. package/dist/ida/IdaOperationRunner.js +3 -3
  483. package/dist/ida/IdaProvider.js +8 -12
  484. package/dist/ida/IdaSessionClient.js +20 -18
  485. package/dist/ida/IdaWorkspace.js +12 -13
  486. package/dist/inspector/JavaScriptRuntimeScope.js +9 -1
  487. package/dist/inspector/V8InspectorCaptureProjection.js +9 -4
  488. package/dist/inspector/V8InspectorProvider.js +82 -36
  489. package/dist/javascript/recovery/WakaruCommand.js +7 -2
  490. package/dist/javascript/recovery/WakaruExecution.js +5 -2
  491. package/dist/javascript/sourceMaps/DecodedSourceMap.js +47 -0
  492. package/dist/javascript/sourceMaps/SourceMapCommand.js +16 -0
  493. package/dist/javascript/sourceMaps/SourceMapFormat.js +79 -31
  494. package/dist/javascript/sourceMaps/TraceSourceMap.js +14 -28
  495. package/dist/main/shutdown.js +11 -3
  496. package/dist/main/startup.js +9 -2
  497. package/dist/main/transport.js +22 -2
  498. package/dist/main.js +11 -18
  499. package/dist/mcpDoctor.js +62 -2
  500. package/dist/native/AppleDispatchCoverage.js +47 -6
  501. package/dist/native/AppleDispatchDecodeFacts.js +6 -0
  502. package/dist/native/AppleDispatchMetadata.js +6 -3
  503. package/dist/native/AppleMachoFixups.js +48 -24
  504. package/dist/native/AppleMachoSelection.js +48 -22
  505. package/dist/native/AppleObjcCategories.js +6 -2
  506. package/dist/native/AppleObjcDispatchFacets.js +5 -2
  507. package/dist/native/AppleObjcProperties.js +2 -1
  508. package/dist/native/AppleSwiftDispatchFacets.js +27 -21
  509. package/dist/native/AppleSwiftVtables.js +21 -15
  510. package/dist/native/CommandRunner.js +87 -88
  511. package/dist/native/LldbCallTracer.js +372 -103
  512. package/dist/native/LldbRetainedObservations.js +178 -0
  513. package/dist/native/NativeCallObservation.js +62 -3
  514. package/dist/native/NativeMacOSProvider.js +122 -31
  515. package/dist/native/NativeUiHelperRuntime.js +11 -2
  516. package/dist/native/NativeUiObservation.js +2 -2
  517. package/dist/native/SignatureTargetBinding.js +155 -0
  518. package/dist/native/parsers/lipo.js +71 -1
  519. package/dist/native/pwndbg/PwndbgCoreContext.js +25 -5
  520. package/dist/native/pwntools/PwntoolsDecoder.js +2 -1
  521. package/dist/native/pwntools/RecordedCrashStructureBindings.js +2 -0
  522. package/dist/process/DarwinProcessRunTokenReader.js +23 -10
  523. package/dist/process/ExecFileOutput.js +108 -6
  524. package/dist/process/OwnedCommand.js +7 -2
  525. package/dist/process/PrivateRuntimeRoot.js +10 -5
  526. package/dist/process/ProcessOwnership.js +204 -57
  527. package/dist/process/ProcessOwnershipObservation.js +60 -9
  528. package/dist/process/ProviderProcess.js +39 -10
  529. package/dist/process/capture/FilesystemSnapshot.js +50 -13
  530. package/dist/process/capture/ProcessCaptureError.js +15 -2
  531. package/dist/process/capture/ProcessCaptureLifecycle.js +235 -81
  532. package/dist/process/capture/ProcessFilesystemEffects.js +33 -3
  533. package/dist/process/capture/ProcessHarness.js +21 -25
  534. package/dist/process/capture/ProcessNormalization.js +20 -2
  535. package/dist/process/capture/ProcessSampling.js +25 -2
  536. package/dist/process/capture/TerminalRenderer.js +14 -0
  537. package/dist/process/snapshotEnvironment.js +14 -0
  538. package/dist/server/EvidenceMcpServer.js +157 -0
  539. package/dist/server/createServer.js +61 -41
  540. package/dist/server/mcpClientMetadata.js +12 -5
  541. package/dist/server/promptCompletion.js +3 -8
  542. package/dist/server/registerAnalysisViewTool.js +15 -0
  543. package/dist/server/registerAndroidTools.js +2 -5
  544. package/dist/server/registerApplicationTools/compareExportShapes.js +4 -5
  545. package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
  546. package/dist/server/registerApplicationTools/compareVersions.js +4 -5
  547. package/dist/server/registerApplicationTools/coverage.js +1 -2
  548. package/dist/server/registerApplicationTools/helpers.js +1 -4
  549. package/dist/server/registerApplicationTools/obligationLedger.js +4 -5
  550. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -4
  551. package/dist/server/registerApplicationTools/traceFeature.js +4 -5
  552. package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
  553. package/dist/server/registerArtifactComparisonTool.js +13 -10
  554. package/dist/server/registerBinaryDiagnosticsTools.js +2 -5
  555. package/dist/server/registerBrowserScenarioTool.js +3 -6
  556. package/dist/server/registerBrowserTools.js +13 -18
  557. package/dist/server/registerBundleComparisonTool.js +5 -7
  558. package/dist/server/registerCloseLifecycleTool.js +9 -20
  559. package/dist/server/registerElectronTools.js +10 -15
  560. package/dist/server/registerEnhancedTools.js +36 -77
  561. package/dist/server/registerEvidenceTools.js +3 -6
  562. package/dist/server/registerEvmTools.js +2 -5
  563. package/dist/server/registerFirmwareTools.js +2 -5
  564. package/dist/server/registerFunctionComparisonTool.js +15 -12
  565. package/dist/server/registerInvestigationTools.js +16 -17
  566. package/dist/server/registerJavaScriptRecoveryTool.js +2 -5
  567. package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -8
  568. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +5 -8
  569. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -7
  570. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +6 -9
  571. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +6 -9
  572. package/dist/server/registerOfficialTools.js +4 -21
  573. package/dist/server/registerProcessComparisonTool.js +74 -48
  574. package/dist/server/registerRecordedCrashTools.js +2 -5
  575. package/dist/server/registerSessionRecordTools.js +19 -24
  576. package/dist/server/registerSessionStatusTool.js +19 -6
  577. package/dist/server/registerSessionTools.js +20 -18
  578. package/dist/server/registerWebModuleTool.js +2 -5
  579. package/dist/server/registerWebNetworkCaptureTool.js +2 -5
  580. package/dist/server/registerWebRuntimeTools.js +4 -9
  581. package/dist/server/registerWebScriptTool.js +2 -5
  582. package/dist/server/registerWebSourceLocationTool.js +2 -5
  583. package/dist/server/runDerivedOperation.js +15 -3
  584. package/dist/server/sessionAvailabilityPolicy.js +0 -1
  585. package/dist/server/toolRegistrationOptions.js +2 -2
  586. package/dist/server/toolResult.js +75 -51
  587. package/dist/server/toolResultEncoding.js +34 -0
  588. package/dist/windows/WindowsNativeLoader.js +1 -0
  589. package/dist/windows/WindowsOwnedProcess.js +60 -15
  590. package/dist/windows/WindowsPrivateRuntime.js +7 -8
  591. package/install.sh +1 -1
  592. package/native/windows/README.md +3 -1
  593. package/native/windows/build/manifest.json +2 -2
  594. package/native/windows/build/rea-windows-x64.node +0 -0
  595. package/package.json +44 -30
  596. package/scripts/electron-active-hook-boundaries.cjs +18 -20
  597. package/scripts/electron-active-hook.cjs +241 -37
  598. package/scripts/rea.mjs +3 -6
  599. package/skills/reverse-engineer-anything/SKILL.md +12 -3
  600. package/skills/reverse-engineer-anything/references/android-applications.md +6 -3
  601. package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -4
  602. package/skills/reverse-engineer-anything/references/javascript-applications.md +20 -3
  603. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +9 -0
  604. package/dist/config.js +0 -1
  605. package/dist/contracts/browserCaptureToolInputSchema.js +0 -43
  606. package/dist/contracts/process/processCaptureExample.js +0 -2
  607. package/dist/contracts/toolOutputSchemas.js +0 -2
  608. package/dist/ghidra/GhidraDefaults.js +0 -2
  609. package/dist/main/reload.js +0 -12
  610. package/dist/main/state.js +0 -3
  611. package/dist/server/sessionToolPolicies.js +0 -2
@@ -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 } 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 toCallToolResult(recorded, contract);
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 toCallToolResult(recorded, contract);
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 toCallToolResult(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,
@@ -128,7 +127,7 @@ const registerStaticRuntime = (server, session, contract) => {
128
127
  rationale: "Repeat runtime observations and complete the mapped static comparison Evidence.",
129
128
  },
130
129
  ],
131
- }), contract);
130
+ }));
132
131
  });
133
132
  };
134
133
  const registerReconstruction = (server, session, contract) => {
@@ -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 toCallToolResult(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,
@@ -164,6 +163,6 @@ const registerReconstruction = (server, session, contract) => {
164
163
  operation,
165
164
  rationale,
166
165
  })),
167
- }), contract);
166
+ }));
168
167
  });
169
168
  };
@@ -1,17 +1,14 @@
1
1
  import { toolContract } from "../contracts/toolContracts.js";
2
2
  import { logToolExecution } from "./toolLogging.js";
3
3
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
4
- import { toCallToolResult } from "./toolResult.js";
5
4
  /** Bind 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 recorded !== undefined && !recorded.ok
14
- ? toCallToolResult(recorded, contract)
15
- : toCallToolResult(result, contract);
12
+ return server.delivery.toEvidenceToolResult(result.value, contract, recorded);
16
13
  });
17
14
  };
@@ -5,13 +5,13 @@ import { toolContract } from "../contracts/toolContracts.js";
5
5
  import { observeJavaScriptRuntimeInputSchema } from "../domain/javascript/javascriptRuntimeObservation.js";
6
6
  import { logToolExecution } from "./toolLogging.js";
7
7
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
8
- import { toCallToolResult } from "./toolResult.js";
9
8
  /** Register passive Inspector tools even when policy keeps them unavailable. */
10
9
  export const registerJavaScriptRuntimeObservationTools = (server, options) => {
10
+ const registration = { ...options, delivery: server.delivery };
11
11
  const listContract = toolContract("list_javascript_runtime_targets");
12
12
  const observeContract = toolContract("observe_javascript_runtime");
13
- server.registerTool(listContract.name, toolRegistrationOptions(listContract), (input, context) => runRuntimeTool(options, listContract, { input, context }, (parsed, signal) => listJavaScriptRuntimeTargets(options.runtime, parsed, { signal })));
14
- server.registerTool(observeContract.name, toolRegistrationOptions(observeContract), (input, context) => runRuntimeTool(options, observeContract, { input, context }, async (parsed, signal) => {
13
+ server.registerTool(listContract.name, toolRegistrationOptions(listContract), (input, context) => runRuntimeTool(registration, listContract, { input, context }, (parsed, signal) => listJavaScriptRuntimeTargets(options.runtime, parsed, { signal })));
14
+ server.registerTool(observeContract.name, toolRegistrationOptions(observeContract), (input, context) => runRuntimeTool(registration, observeContract, { input, context }, async (parsed, signal) => {
15
15
  const request = observeJavaScriptRuntimeInputSchema.parse(parsed);
16
16
  return observeJavaScriptRuntime(options.runtime, request, { signal });
17
17
  }));
@@ -19,12 +19,10 @@ export const registerJavaScriptRuntimeObservationTools = (server, options) => {
19
19
  const runRuntimeTool = async (options, contract, request, execute) => {
20
20
  const { input, context } = request;
21
21
  if (options.loadFailure !== undefined)
22
- return toCallToolResult(err(optionalProviderUnavailable(options.loadFailure, contract.name)), contract);
22
+ return options.delivery.toCallToolResult(err(optionalProviderUnavailable(options.loadFailure, contract.name)), contract);
23
23
  const result = await logToolExecution(options.logger, contract.name, () => execute(input, context.mcpReq.signal));
24
24
  if (!result.ok)
25
- return toCallToolResult(result, contract);
25
+ return options.delivery.toCallToolResult(result, contract);
26
26
  const recorded = options.recordEvidence?.(result.value);
27
- return recorded !== undefined && !recorded.ok
28
- ? toCallToolResult(recorded, contract)
29
- : toCallToolResult({ ok: true, value: result.value }, contract);
27
+ return options.delivery.toEvidenceToolResult(result.value, contract, recorded);
30
28
  };
@@ -3,7 +3,6 @@ import { compareManagedMembersEvidenceValidated } from "../../application/manage
3
3
  import { managedMemberComparisonResultSchema } from "../../domain/managed/managedMemberComparison.js";
4
4
  import { logToolExecution } from "../toolLogging.js";
5
5
  import { toolRegistrationOptions } from "../toolRegistrationOptions.js";
6
- import { toCallToolResult } from "../toolResult.js";
7
6
  import { managedWorkflowContract } from "./contract.js";
8
7
  import { resolveManagedEvidence } from "./evidence.js";
9
8
  const compareContract = managedWorkflowContract("compare_managed_members");
@@ -13,9 +12,9 @@ export const registerCompareManagedMembers = (server, options) => {
13
12
  const leftResolved = resolveManagedEvidence(input.left);
14
13
  const rightResolved = resolveManagedEvidence(input.right);
15
14
  if (!leftResolved.ok)
16
- return toCallToolResult(leftResolved, compareContract);
15
+ return server.delivery.toCallToolResult(leftResolved, compareContract);
17
16
  if (!rightResolved.ok)
18
- return toCallToolResult(rightResolved, compareContract);
17
+ return server.delivery.toCallToolResult(rightResolved, compareContract);
19
18
  const [left] = leftResolved.value;
20
19
  const [right] = rightResolved.value;
21
20
  if (left === undefined || right === undefined)
@@ -23,13 +22,13 @@ export const registerCompareManagedMembers = (server, options) => {
23
22
  const parsed = { left, right };
24
23
  const result = await logToolExecution(options.logger, compareContract.name, () => Promise.resolve(compareManagedMembersEvidenceValidated(parsed)));
25
24
  if (!result.ok)
26
- return toCallToolResult(result, compareContract);
25
+ return server.delivery.toCallToolResult(result, compareContract);
27
26
  const recorded = recordSessionEvidenceSources(options.recordEvidence, [
28
27
  parsed.left,
29
28
  parsed.right,
30
29
  ]);
31
30
  if (!recorded.ok)
32
- return toCallToolResult(recorded, compareContract);
31
+ return server.delivery.toCallToolResult(recorded, compareContract);
33
32
  const comparison = managedMemberComparisonResultSchema.parse(result.value.normalized_result);
34
33
  const unknown = comparison.summary.unknown > 0;
35
34
  const output = unknown
@@ -51,8 +50,6 @@ export const registerCompareManagedMembers = (server, options) => {
51
50
  relationships: [],
52
51
  })
53
52
  : options.recordEvidence?.(result.value);
54
- if (output !== undefined && !output.ok)
55
- return toCallToolResult(output, compareContract);
56
- return toCallToolResult({ ok: true, value: result.value }, compareContract);
53
+ return server.delivery.toEvidenceToolResult(result.value, compareContract, output);
57
54
  });
58
55
  };
@@ -1,7 +1,6 @@
1
1
  import { importManagedReconstructionEvidenceValidated } from "../../application/managed/ManagedReconstructionService.js";
2
2
  import { logToolExecution } from "../toolLogging.js";
3
3
  import { toolRegistrationOptions } from "../toolRegistrationOptions.js";
4
- import { toCallToolResult } from "../toolResult.js";
5
4
  import { managedWorkflowContract } from "./contract.js";
6
5
  import { resolveManagedEvidence } from "./evidence.js";
7
6
  const reconstructionContract = managedWorkflowContract("import_managed_reconstruction");
@@ -10,20 +9,18 @@ export const registerImportManagedReconstruction = (server, options) => {
10
9
  server.registerTool(reconstructionContract.name, toolRegistrationOptions(reconstructionContract), async (input) => {
11
10
  const resolved = resolveManagedEvidence(input.static_members);
12
11
  if (!resolved.ok)
13
- return toCallToolResult(resolved, reconstructionContract);
12
+ return server.delivery.toCallToolResult(resolved, reconstructionContract);
14
13
  const staticMembers = resolved.value[0];
15
14
  if (staticMembers === undefined)
16
15
  throw new TypeError("Managed reconstruction Evidence resolution failed");
17
16
  const parsed = { ...input, static_members: staticMembers };
18
17
  const result = await logToolExecution(options.logger, reconstructionContract.name, () => Promise.resolve(importManagedReconstructionEvidenceValidated(parsed)));
19
18
  if (!result.ok)
20
- return toCallToolResult(result, reconstructionContract);
19
+ return server.delivery.toCallToolResult(result, reconstructionContract);
21
20
  const recordedSource = options.recordEvidence?.(parsed.static_members);
22
21
  if (recordedSource !== undefined && !recordedSource.ok)
23
- return toCallToolResult(recordedSource, reconstructionContract);
22
+ return server.delivery.toCallToolResult(recordedSource, reconstructionContract);
24
23
  const recorded = options.recordEvidence?.(result.value);
25
- if (recorded !== undefined && !recorded.ok)
26
- return toCallToolResult(recorded, reconstructionContract);
27
- return toCallToolResult(result, reconstructionContract);
24
+ return server.delivery.toEvidenceToolResult(result.value, reconstructionContract, recorded);
28
25
  });
29
26
  };
@@ -2,7 +2,6 @@ import { recordSessionEvidenceSources } from "../sessionEvidence.js";
2
2
  import { projectManagedApplicationGraphEvidence } from "../../application/managed/ManagedApplicationGraphService.js";
3
3
  import { logToolExecution } from "../toolLogging.js";
4
4
  import { toolRegistrationOptions } from "../toolRegistrationOptions.js";
5
- import { toCallToolResult } from "../toolResult.js";
6
5
  import { managedWorkflowContract } from "./contract.js";
7
6
  import { resolveManagedArtifactEvidence, resolveManagedBoundaryEvidence, resolveManagedEvidence, sourceEvidence, } from "./evidence.js";
8
7
  const graphContract = managedWorkflowContract("project_managed_application_graph");
@@ -13,17 +12,17 @@ export const registerProjectManagedApplicationGraph = (server, options) => {
13
12
  ? undefined
14
13
  : resolveManagedArtifactEvidence(input.managed_artifact);
15
14
  if (managedArtifact !== undefined && !managedArtifact.ok)
16
- return toCallToolResult(managedArtifact, graphContract);
15
+ return server.delivery.toCallToolResult(managedArtifact, graphContract);
17
16
  const managedMembers = input.managed_members === undefined
18
17
  ? undefined
19
18
  : resolveManagedEvidence(input.managed_members);
20
19
  if (managedMembers !== undefined && !managedMembers.ok)
21
- return toCallToolResult(managedMembers, graphContract);
20
+ return server.delivery.toCallToolResult(managedMembers, graphContract);
22
21
  const managedBoundaries = input.managed_native_boundaries === undefined
23
22
  ? undefined
24
23
  : resolveManagedBoundaryEvidence(input.managed_native_boundaries);
25
24
  if (managedBoundaries !== undefined && !managedBoundaries.ok)
26
- return toCallToolResult(managedBoundaries, graphContract);
25
+ return server.delivery.toCallToolResult(managedBoundaries, graphContract);
27
26
  const parsed = {
28
27
  managed_artifact: managedArtifact?.value[0],
29
28
  managed_members: managedMembers?.value[0],
@@ -31,13 +30,11 @@ export const registerProjectManagedApplicationGraph = (server, options) => {
31
30
  };
32
31
  const result = await logToolExecution(options.logger, graphContract.name, () => Promise.resolve(projectManagedApplicationGraphEvidence(parsed)));
33
32
  if (!result.ok)
34
- return toCallToolResult(result, graphContract);
33
+ return server.delivery.toCallToolResult(result, graphContract);
35
34
  const recordedSources = recordSessionEvidenceSources(options.recordEvidence, sourceEvidence(parsed));
36
35
  if (!recordedSources.ok)
37
- return toCallToolResult(recordedSources, graphContract);
36
+ return server.delivery.toCallToolResult(recordedSources, graphContract);
38
37
  const recorded = options.recordEvidence?.(result.value);
39
- if (recorded !== undefined && !recorded.ok)
40
- return toCallToolResult(recorded, graphContract);
41
- return toCallToolResult(result, graphContract);
38
+ return server.delivery.toEvidenceToolResult(result.value, graphContract, recorded);
42
39
  });
43
40
  };
@@ -1,9 +1,8 @@
1
1
  import { recordSessionEvidenceSources } from "../sessionEvidence.js";
2
2
  import { verifyManagedNativeBoundariesEvidence } from "../../application/managed/ManagedNativeVerificationService.js";
3
- import { managedNativeVerificationResultSchema } from "../../domain/managed/managedNativeVerification.js";
3
+ import { managedNativeVerificationResultSchema } from "../../domain/managed/managedNativeVerificationSchemas.js";
4
4
  import { logToolExecution } from "../toolLogging.js";
5
5
  import { toolRegistrationOptions } from "../toolRegistrationOptions.js";
6
- import { toCallToolResult } from "../toolResult.js";
7
6
  import { managedWorkflowContract } from "./contract.js";
8
7
  import { resolveManagedBoundaryEvidence, resolveNativeEvidence, } from "./evidence.js";
9
8
  const nativeVerificationContract = managedWorkflowContract("verify_managed_native_boundaries");
@@ -12,10 +11,10 @@ export const registerVerifyManagedNativeBoundaries = (server, options) => {
12
11
  server.registerTool(nativeVerificationContract.name, toolRegistrationOptions(nativeVerificationContract), async (input) => {
13
12
  const managedBoundaries = resolveManagedBoundaryEvidence(input.managed_boundaries);
14
13
  if (!managedBoundaries.ok)
15
- return toCallToolResult(managedBoundaries, nativeVerificationContract);
14
+ return server.delivery.toCallToolResult(managedBoundaries, nativeVerificationContract);
16
15
  const nativeObservations = resolveNativeEvidence(input.native_observations);
17
16
  if (!nativeObservations.ok)
18
- return toCallToolResult(nativeObservations, nativeVerificationContract);
17
+ return server.delivery.toCallToolResult(nativeObservations, nativeVerificationContract);
19
18
  const managedBoundary = managedBoundaries.value[0];
20
19
  if (managedBoundary === undefined)
21
20
  throw new TypeError("Managed boundary Evidence resolution failed");
@@ -26,10 +25,10 @@ export const registerVerifyManagedNativeBoundaries = (server, options) => {
26
25
  };
27
26
  const result = await logToolExecution(options.logger, nativeVerificationContract.name, () => Promise.resolve(verifyManagedNativeBoundariesEvidence(parsed)));
28
27
  if (!result.ok)
29
- return toCallToolResult(result, nativeVerificationContract);
28
+ return server.delivery.toCallToolResult(result, nativeVerificationContract);
30
29
  const recordedSources = recordSessionEvidenceSources(options.recordEvidence, [parsed.managed_boundaries, ...parsed.native_observations]);
31
30
  if (!recordedSources.ok)
32
- return toCallToolResult(recordedSources, nativeVerificationContract);
31
+ return server.delivery.toCallToolResult(recordedSources, nativeVerificationContract);
33
32
  const verification = managedNativeVerificationResultSchema.parse(result.value.normalized_result);
34
33
  const unknown = verification.summary.unresolved > 0 ||
35
34
  verification.summary.contradicted > 0 ||
@@ -57,8 +56,6 @@ export const registerVerifyManagedNativeBoundaries = (server, options) => {
57
56
  relationships: [],
58
57
  })
59
58
  : options.recordEvidence?.(result.value);
60
- if (output !== undefined && !output.ok)
61
- return toCallToolResult(output, nativeVerificationContract);
62
- return toCallToolResult(result, nativeVerificationContract);
59
+ return server.delivery.toEvidenceToolResult(result.value, nativeVerificationContract, output);
63
60
  });
64
61
  };
@@ -1,11 +1,9 @@
1
- import { z } from "zod";
2
1
  import { OFFICIAL_TOOL_CONTRACTS } from "../contracts/officialToolContracts.js";
3
2
  import { createEvidence } from "../domain/evidence.js";
4
- import { jsonObjectSchema, jsonValueSchema, } from "../domain/jsonValue.js";
3
+ import { jsonObjectSchema } from "../domain/jsonValue.js";
5
4
  import { mcpProgressReporter } from "./mcpProgress.js";
6
5
  import { logToolExecution } from "./toolLogging.js";
7
6
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
8
- import { toCallToolResult } from "./toolResult.js";
9
7
  /** Register direct bridge proxies, preserving MCP cancellation and typed errors. */
10
8
  export const registerOfficialTools = (server, analysis, options) => {
11
9
  for (const contract of OFFICIAL_TOOL_CONTRACTS) {
@@ -18,7 +16,7 @@ export const registerOfficialTools = (server, analysis, options) => {
18
16
  };
19
17
  const registerOfficialTool = (server, analysis, contract, registration) => {
20
18
  server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => {
21
- const arguments_ = projectOfficialArguments(contract, input);
19
+ const arguments_ = jsonObjectSchema.parse(contract.inputSchema.parse(input));
22
20
  const progress = mcpProgressReporter(context);
23
21
  const result = await runOfficialOperation(analysis, contract, arguments_, {
24
22
  logger: registration.logger,
@@ -26,7 +24,7 @@ const registerOfficialTool = (server, analysis, contract, registration) => {
26
24
  progress,
27
25
  });
28
26
  if (!result.ok) {
29
- return toCallToolResult(result, contract);
27
+ return server.delivery.toCallToolResult(result, contract);
30
28
  }
31
29
  const evidence = createEvidence(result.value.subject ?? registration.activeTarget?.(), result.value.provider, {
32
30
  operation: contract.name,
@@ -40,9 +38,7 @@ const registerOfficialTool = (server, analysis, contract, registration) => {
40
38
  locations: result.value.locations,
41
39
  });
42
40
  const recorded = registration.recordEvidence?.(evidence);
43
- if (recorded !== undefined && !recorded.ok)
44
- return toCallToolResult(recorded, contract);
45
- return toCallToolResult({ ok: true, value: evidence }, contract);
41
+ return server.delivery.toEvidenceToolResult(evidence, contract, recorded);
46
42
  });
47
43
  };
48
44
  const runOfficialOperation = async (analysis, contract, arguments_, execution) => {
@@ -65,16 +61,3 @@ const runOfficialOperation = async (analysis, contract, arguments_, execution) =
65
61
  });
66
62
  return result;
67
63
  };
68
- const projectOfficialArguments = (contract, input) => {
69
- // Annotation omissions preserve existing values; they are not Python defaults.
70
- if (contract.name === "annotate_native_function")
71
- return jsonObjectSchema.parse(contract.inputSchema.parse(input));
72
- const parsed = jsonObjectSchema.parse(input);
73
- if (!(contract.inputSchema instanceof z.ZodObject))
74
- throw new TypeError("Official tool input contract must be an object schema");
75
- const projected = {};
76
- for (const key of Object.keys(contract.inputSchema.shape)) {
77
- projected[key] = jsonValueSchema.parse(parsed[key] ?? null);
78
- }
79
- return projected;
80
- };
@@ -1,61 +1,83 @@
1
1
  import { toolContract } from "../contracts/toolContracts.js";
2
+ import { AnalysisInputError } from "../domain/analysisErrorCore.js";
3
+ import {} from "../domain/analysisErrorBase.js";
4
+ import { describeValidationFailure } from "../domain/evidenceBundle.js";
2
5
  import { EvidenceIntegrityError } from "../domain/evidenceErrors.js";
3
6
  import { createEvidence, parseEvidence, } from "../domain/evidence.js";
4
7
  import { jsonValueSchema } from "../domain/jsonValue.js";
5
- import { compareProcessCaptures, parseProcessCapture, } from "../domain/process/processCapture.js";
6
- import { err } from "../domain/result.js";
8
+ import { compareProcessCaptures } from "../domain/process/processComparison.js";
9
+ import { parseProcessCapture, } from "../domain/process/processCaptureParsing.js";
10
+ import { err, ok } from "../domain/result.js";
7
11
  import { recordDerivedEvidence } from "./recordDerivedEvidence.js";
8
12
  import { recordSessionEvidenceSources } from "./sessionEvidence.js";
9
13
  import { runDerivedOperation } from "./runDerivedOperation.js";
10
- import { PROCESS_PROVIDER } from "./sessionToolPolicies.js";
14
+ import { PROCESS_PROVIDER } from "../domain/process/processEvidenceProvider.js";
11
15
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
12
- import { toCallToolResult } from "./toolResult.js";
13
16
  const PROCESS_CAPTURE_EVIDENCE = {
14
17
  operation: "capture_process_scenario",
15
18
  predicate: "rea.process-capture",
16
19
  };
17
20
  const sourceLocations = (left, right) => [...(left ?? []), ...(right ?? [])];
21
+ /**
22
+ * Parse one side and name the failed constraint: tampered Evidence, Evidence
23
+ * from another workflow, or an invalid capture result.
24
+ */
25
+ const parseCaptureSide = (operation, side, value) => {
26
+ let record;
27
+ try {
28
+ record = parseEvidence(value);
29
+ }
30
+ catch (cause) {
31
+ return err(new EvidenceIntegrityError(`${side} Evidence failed validation`, {
32
+ cause,
33
+ userMessage: `The ${side} Evidence failed validation (${describeValidationFailure(cause)}). Supply unmodified capture Evidence from capture_process_scenario.`,
34
+ }));
35
+ }
36
+ if (record.operation !== PROCESS_CAPTURE_EVIDENCE.operation ||
37
+ record.predicate_type !== PROCESS_CAPTURE_EVIDENCE.predicate)
38
+ return err(new AnalysisInputError(operation, undefined, [
39
+ {
40
+ path: [side],
41
+ reason: "invalid_value",
42
+ message: `Expected process capture Evidence (operation ${PROCESS_CAPTURE_EVIDENCE.operation}, predicate ${PROCESS_CAPTURE_EVIDENCE.predicate}); the ${side} Evidence has operation ${record.operation} and predicate ${record.predicate_type}.`,
43
+ },
44
+ ]));
45
+ try {
46
+ return ok({
47
+ record,
48
+ capture: parseProcessCapture(record.normalized_result),
49
+ });
50
+ }
51
+ catch (cause) {
52
+ return err(new EvidenceIntegrityError(`${side} process capture failed validation`, {
53
+ cause,
54
+ userMessage: `The ${side} Evidence has an invalid process capture result (${describeValidationFailure(cause)}). Recreate the capture with capture_process_scenario.`,
55
+ }));
56
+ }
57
+ };
18
58
  /** Register deterministic process-capture comparison and contradiction tracking. */
19
59
  export const registerProcessComparisonTool = (server, session, contract, now = Date.now) => {
20
60
  server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => {
21
- let leftRecord;
22
- let rightRecord;
23
- try {
24
- leftRecord = parseEvidence(input.left);
25
- rightRecord = parseEvidence(input.right);
26
- if (leftRecord.operation !== PROCESS_CAPTURE_EVIDENCE.operation ||
27
- rightRecord.operation !== PROCESS_CAPTURE_EVIDENCE.operation ||
28
- leftRecord.predicate_type !== PROCESS_CAPTURE_EVIDENCE.predicate ||
29
- rightRecord.predicate_type !== PROCESS_CAPTURE_EVIDENCE.predicate)
30
- throw new TypeError("Expected process capture Evidence");
31
- }
32
- catch (cause) {
33
- return toCallToolResult(err(new EvidenceIntegrityError(cause instanceof Error ? cause.message : "Invalid Evidence")), contract);
34
- }
35
- let comparison;
36
- let leftCapture;
37
- let rightCapture;
38
- try {
39
- leftCapture = parseProcessCapture(leftRecord.normalized_result);
40
- rightCapture = parseProcessCapture(rightRecord.normalized_result);
41
- const computed = await runDerivedOperation(context, contract.name, () => compareProcessCaptures(leftCapture, rightCapture, {
42
- ...(input.max_capture_age_ms === undefined
43
- ? {}
44
- : { maxCaptureAgeMs: input.max_capture_age_ms }),
45
- ...(input.trace_spec === undefined
46
- ? {}
47
- : { traceSpecification: input.trace_spec }),
48
- now,
49
- }));
50
- if (!computed.ok)
51
- return toCallToolResult(computed, contract);
52
- comparison = computed.value;
53
- }
54
- catch (cause) {
55
- return toCallToolResult(err(new EvidenceIntegrityError(cause instanceof Error
56
- ? cause.message
57
- : "Invalid process capture")), contract);
58
- }
61
+ const left = parseCaptureSide(contract.name, "left", input.left);
62
+ if (!left.ok)
63
+ return server.delivery.toCallToolResult(left, contract);
64
+ const right = parseCaptureSide(contract.name, "right", input.right);
65
+ if (!right.ok)
66
+ return server.delivery.toCallToolResult(right, contract);
67
+ const { record: leftRecord, capture: leftCapture } = left.value;
68
+ const { record: rightRecord, capture: rightCapture } = right.value;
69
+ const computed = await runDerivedOperation(context, contract.name, () => compareProcessCaptures(leftCapture, rightCapture, {
70
+ ...(input.max_capture_age_ms === undefined
71
+ ? {}
72
+ : { maxCaptureAgeMs: input.max_capture_age_ms }),
73
+ ...(input.trace_spec === undefined
74
+ ? {}
75
+ : { traceSpecification: input.trace_spec }),
76
+ now,
77
+ }));
78
+ if (!computed.ok)
79
+ return server.delivery.toCallToolResult(computed, contract);
80
+ const comparison = computed.value;
59
81
  const evidence = createEvidence(undefined, PROCESS_PROVIDER, {
60
82
  predicateType: "rea.process-comparison",
61
83
  operation: contract.name,
@@ -77,12 +99,12 @@ export const registerProcessComparisonTool = (server, session, contract, now = D
77
99
  });
78
100
  const recordedSources = recordSessionEvidenceSources((evidence) => session.recordEvidence(evidence), [leftRecord, rightRecord]);
79
101
  if (!recordedSources.ok)
80
- return toCallToolResult(recordedSources, contract);
81
- return toCallToolResult(recordDerivedEvidence(session, evidence, comparisonUnknownInput({
102
+ return server.delivery.toCallToolResult(recordedSources, contract);
103
+ return server.delivery.toEvidenceToolResult(evidence, contract, recordDerivedEvidence(session, evidence, comparisonUnknownInput({
82
104
  left_evidence_id: leftRecord.evidence_id,
83
105
  right_evidence_id: rightRecord.evidence_id,
84
106
  comparison_evidence_id: evidence.evidence_id,
85
- }, comparison)), contract);
107
+ }, comparison)));
86
108
  });
87
109
  };
88
110
  const comparisonUnknownInput = (parsed, comparison) => {
@@ -98,14 +120,18 @@ const comparisonUnknownInput = (parsed, comparison) => {
98
120
  .filter(([, status]) => status !== "unchanged")
99
121
  .map(([scope]) => scope)
100
122
  .join(", ");
123
+ const contradictory = comparison.status === "changed" &&
124
+ parsed.left_evidence_id !== parsed.right_evidence_id;
101
125
  // Unknown identity uses the question, not its supporting records. Bind the
102
126
  // question to this comparison so distinct capture pairs and policies coexist.
103
127
  return {
104
- question: `Process captures disagree across: ${differingScopes} (comparison ${parsed.comparison_evidence_id})`,
128
+ question: `${contradictory ? "Process captures disagree" : `Process comparison is ${comparison.status}`} across: ${differingScopes} (comparison ${parsed.comparison_evidence_id})`,
105
129
  severity: "high",
106
130
  domain: "process-comparison",
107
- supporting_evidence_ids: [parsed.left_evidence_id],
108
- contradicting_evidence_ids: [parsed.right_evidence_id],
131
+ supporting_evidence_ids: contradictory
132
+ ? [parsed.left_evidence_id]
133
+ : [...new Set([parsed.left_evidence_id, parsed.right_evidence_id])],
134
+ contradicting_evidence_ids: contradictory ? [parsed.right_evidence_id] : [],
109
135
  required_authority: "controlled-replay",
110
136
  required_confidence: "observed",
111
137
  required_environment: null,
@@ -1,17 +1,14 @@
1
1
  import { toolContract } from "../contracts/toolContracts.js";
2
2
  import { logToolExecution } from "./toolLogging.js";
3
3
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
4
- import { toCallToolResult } from "./toolResult.js";
5
4
  /** Bind recorded crash inspection to its named contract and session Evidence owner. */
6
5
  export const registerRecordedCrashTools = (server, service, logger, recordEvidence) => {
7
6
  const contract = toolContract("inspect_recorded_crash");
8
7
  server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => {
9
8
  const result = await logToolExecution(logger, contract.name, () => service.inspect(input, { signal: context.mcpReq.signal }));
10
9
  if (!result.ok)
11
- return toCallToolResult(result, contract);
10
+ return server.delivery.toCallToolResult(result, contract);
12
11
  const recorded = recordEvidence?.(result.value);
13
- return recorded !== undefined && !recorded.ok
14
- ? toCallToolResult(recorded, contract)
15
- : toCallToolResult(result, contract);
12
+ return server.delivery.toEvidenceToolResult(result.value, contract, recorded);
16
13
  });
17
14
  };