rea-agents 6.0.0 → 6.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (611) hide show
  1. package/README.md +26 -18
  2. package/bridge/android/ReaJadxBridge.java +14 -5
  3. package/bridge/ghidra/ReaGhidraBridge.java +205 -51
  4. package/bridge/hopper_bridge.py +314 -127
  5. package/bridge/mitmproxy/capture.py +0 -2
  6. package/bridge/native/rea_lldb_tracer.py +630 -94
  7. package/bridge/process/ProcessRunTokenReader.swift +39 -5
  8. package/bridge/pwntools/recorded_crash_impl.py +4 -0
  9. package/dist/android/JadxConfiguration.js +274 -31
  10. package/dist/android/JadxMcpTransport.js +18 -2
  11. package/dist/android/JadxProtocol.js +6 -0
  12. package/dist/android/JadxProvider.js +76 -37
  13. package/dist/android/JadxSession.js +23 -4
  14. package/dist/application/AnalysisContextQueries.js +8 -35
  15. package/dist/application/AnalysisDocument.js +32 -0
  16. package/dist/application/AppBundleExecutable.js +67 -21
  17. package/dist/application/BinaryTargetResolver.js +5 -3
  18. package/dist/application/BrowserEvidence.js +3 -8
  19. package/dist/application/BrowserScenarioEvidence.js +2 -18
  20. package/dist/application/CallPathTracing.js +19 -3
  21. package/dist/application/CapabilityInventory.js +48 -11
  22. package/dist/application/ClientConfigurationDocument.js +917 -8
  23. package/dist/application/ClientRegistrationIdentity.js +26 -5
  24. package/dist/application/ClientRegistrationStatus.js +29 -14
  25. package/dist/application/DirectAnalysis.js +56 -51
  26. package/dist/application/DirectAnalysisCleanup.js +72 -0
  27. package/dist/application/DirectAnalysisStatus.js +4 -5
  28. package/dist/application/Doctor.js +19 -21
  29. package/dist/application/DoctorDiagnostics.js +1 -2
  30. package/dist/application/DoctorScope.js +25 -13
  31. package/dist/application/EnhancedLiteralTracing.js +22 -25
  32. package/dist/application/EnhancedTools.js +64 -17
  33. package/dist/application/EvidenceBundleFiles.js +30 -13
  34. package/dist/application/FunctionAnalysisEvidence.js +2 -3
  35. package/dist/application/InventoryProjectionEvidence.js +4 -3
  36. package/dist/application/InvestigationProviders.js +11 -2
  37. package/dist/application/JsonFiles.js +83 -28
  38. package/dist/application/LinuxHopper.js +9 -6
  39. package/dist/application/MacHopper.js +15 -18
  40. package/dist/application/ProcedureAddressResolution.js +11 -0
  41. package/dist/application/RealHopperAssertions.js +0 -11
  42. package/dist/application/ReconstructionCoverageService.js +7 -4
  43. package/dist/application/ReconstructionObligationCandidates.js +1 -1
  44. package/dist/application/ReconstructionObligationLedgerService.js +4 -3
  45. package/dist/application/ReferenceSourceImportEntries.js +1 -1
  46. package/dist/application/Setup.js +21 -17
  47. package/dist/application/SetupClientConfiguration.js +10 -15
  48. package/dist/application/SetupHost.js +21 -29
  49. package/dist/application/SetupPlan.js +11 -9
  50. package/dist/application/SupportedClients.js +34 -1
  51. package/dist/application/Uninstall.js +82 -29
  52. package/dist/application/Update.js +18 -3
  53. package/dist/application/UpdateMaintenance.js +7 -5
  54. package/dist/application/UpdateRuntime.js +57 -36
  55. package/dist/application/WebModuleTraceService.js +4 -2
  56. package/dist/application/WebNetworkCaptureService.js +4 -2
  57. package/dist/application/WebRuntimeService.js +5 -3
  58. package/dist/application/WebScriptExportService.js +32 -6
  59. package/dist/application/WebSourceLocationService.js +4 -2
  60. package/dist/application/WorkflowEvidence.js +105 -0
  61. package/dist/application/XrefsAddressResolution.js +45 -0
  62. package/dist/application/analysisView/AnalysisViewService.js +76 -0
  63. package/dist/application/binary/AnalysisClientCleanup.js +30 -5
  64. package/dist/application/binary/AnalysisProviderEvaluation.js +22 -7
  65. package/dist/application/binary/AnalysisProviderRegistry.js +4 -6
  66. package/dist/application/binary/AnalysisSnapshotCache.js +13 -14
  67. package/dist/application/binary/BinarySession.js +161 -93
  68. package/dist/application/binary/BinarySessionComposition.js +1 -3
  69. package/dist/application/binary/BinarySessionExecution.js +3 -5
  70. package/dist/application/binary/BinarySessionOpen.js +4 -4
  71. package/dist/application/binary/BinarySessionRecords.js +26 -4
  72. package/dist/application/binary/BinarySessionStatus.js +18 -7
  73. package/dist/application/binary/CompositeProvider.js +16 -17
  74. package/dist/application/binary/LazyAnalysisProvider.js +8 -5
  75. package/dist/application/binary/SessionProviderRouter.js +27 -135
  76. package/dist/application/binaryDiagnostics/BinaryLayoutService.js +4 -2
  77. package/dist/application/binaryDiagnostics/RecordedCrashService.js +4 -2
  78. package/dist/application/evm/EvmInterfaceService.js +4 -2
  79. package/dist/application/homebrew.js +48 -0
  80. package/dist/application/investigation/EvidenceLedger.js +21 -7
  81. package/dist/application/investigation/InvestigationRecords.js +8 -0
  82. package/dist/application/javascript/ElectronActiveEvidence.js +9 -13
  83. package/dist/application/javascript/JavaScriptAnalysisControl.js +34 -0
  84. package/dist/application/javascript/JavaScriptApplicationEvidence.js +21 -4
  85. package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +19 -2
  86. package/dist/application/javascript/JavaScriptApplicationService.js +27 -15
  87. package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +5 -5
  88. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +10 -7
  89. package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +44 -10
  90. package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +11 -3
  91. package/dist/application/javascript/JavaScriptArtifactGraphContext.js +9 -0
  92. package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +8 -5
  93. package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +12 -3
  94. package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +0 -1
  95. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +49 -19
  96. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +56 -8
  97. package/dist/application/javascript/JavaScriptModuleRelationships.js +38 -9
  98. package/dist/application/javascript/JavaScriptRecoveryService.js +4 -2
  99. package/dist/application/javascript/JavaScriptRuntimeObservationService.js +6 -4
  100. package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +3 -3
  101. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +2 -3
  102. package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +63 -61
  103. package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +1 -2
  104. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +2 -3
  105. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +1 -5
  106. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +75 -46
  107. package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +2 -3
  108. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +64 -19
  109. package/dist/application/managed/ManagedApplicationGraphService.js +4 -3
  110. package/dist/application/managed/ManagedMemberComparisonService.js +9 -5
  111. package/dist/application/managed/ManagedNativeVerificationService.js +6 -4
  112. package/dist/application/managed/ManagedReconstructionService.js +4 -3
  113. package/dist/application/process/ProcessCli.js +25 -17
  114. package/dist/application/process/ProcessEvidence.js +4 -4
  115. package/dist/application/workflowInputError.js +18 -0
  116. package/dist/artifacts/ArtifactProvider.js +48 -13
  117. package/dist/artifacts/ArtifactReader.js +31 -0
  118. package/dist/artifacts/DirectoryArtifactReader.js +2 -1
  119. package/dist/artifacts/MachOSliceArtifactReader.js +106 -15
  120. package/dist/artifacts/NativeDmgArtifactReader.js +73 -21
  121. package/dist/artifacts/SafeOutputTree.js +16 -2
  122. package/dist/artifacts/ZipArtifactReader.js +11 -4
  123. package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +26 -5
  124. package/dist/artifacts/apple/DylibResolutionReader.js +17 -7
  125. package/dist/artifacts/apple/InterfaceBuilderAnalysis.js +176 -56
  126. package/dist/artifacts/apple/InterfaceBuilderDecodeBudget.js +195 -0
  127. package/dist/artifacts/apple/KeyedArchiveReader.js +55 -23
  128. package/dist/artifacts/apple/MachoLoadCommandReader.js +92 -31
  129. package/dist/artifacts/apple/NibArchive.js +81 -14
  130. package/dist/artifacts/apple/NibViewHierarchy.js +10 -3
  131. package/dist/artifacts/apple/PlistNumberLiterals.js +164 -0
  132. package/dist/artifacts/extraction/ArtifactExtraction.js +78 -21
  133. package/dist/artifacts/inventory/ArtifactGraphConstruction.js +79 -68
  134. package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
  135. package/dist/artifacts/inventory/reader.js +3 -3
  136. package/dist/artifacts/inventory/scanCanonical.js +59 -38
  137. package/dist/artifacts/inventory/scanReader.js +5 -9
  138. package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +6 -2
  139. package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
  140. package/dist/browser/CdpBrowserProvider.js +2 -3
  141. package/dist/browser/CdpCaptureCompleteness.js +2 -0
  142. package/dist/browser/CdpCaptureEventHandlers.js +78 -15
  143. package/dist/browser/CdpCaptureEventTypes.js +5 -1
  144. package/dist/browser/CdpCaptureEvents.js +25 -1
  145. package/dist/browser/CdpCaptureValues.js +20 -0
  146. package/dist/browser/CdpConnection.js +30 -11
  147. package/dist/browser/CdpElectronProvider.js +0 -2
  148. package/dist/browser/CdpElectronScriptEvents.js +2 -8
  149. package/dist/browser/CdpElectronScripts.js +2 -3
  150. package/dist/browser/CdpOptionalCommand.js +2 -3
  151. package/dist/browser/CdpPageCapture.js +23 -1
  152. package/dist/browser/CdpPageCaptureScripts.js +2 -3
  153. package/dist/browser/CdpSafeMetadata.js +10 -10
  154. package/dist/browser/PlaywrightBrowserScenarioProvider.js +59 -44
  155. package/dist/browser/PlaywrightElectronActiveActions.js +34 -79
  156. package/dist/browser/PlaywrightElectronActiveProjection.js +141 -0
  157. package/dist/browser/PlaywrightElectronActiveProvider.js +133 -130
  158. package/dist/browser/PlaywrightScenarioArtifacts.js +1 -1
  159. package/dist/browser/PlaywrightScenarioBrowser.js +139 -39
  160. package/dist/browser/PlaywrightScenarioEvents.js +1 -1
  161. package/dist/browser/PlaywrightScenarioSession.js +39 -22
  162. package/dist/browser/WebSourceMapFetcher.js +426 -72
  163. package/dist/browser/assets/LocalWebScriptArtifacts.js +2 -2
  164. package/dist/browser/assets/ScriptCaptureAdapters.js +1 -1
  165. package/dist/browser/history/CaptureFailures.js +41 -1
  166. package/dist/browser/history/CaptureRelease.js +5 -0
  167. package/dist/browser/history/HarCaptureAdapter.js +3 -3
  168. package/dist/browser/history/HarJson.js +3 -2
  169. package/dist/browser/history/HistoricalCaptureDecoder.js +4 -2
  170. package/dist/browser/history/MitmproxyCaptureAdapter.js +4 -2
  171. package/dist/catalogIdentity.js +0 -1
  172. package/dist/cli/analysisSelector.js +23 -0
  173. package/dist/cli/analysisViewCommands.js +36 -0
  174. package/dist/cli/applicationCommands.js +2 -3
  175. package/dist/cli/artifactCommands.js +11 -12
  176. package/dist/cli/coreAnalysisCommands.js +3 -3
  177. package/dist/cli/coreBinaryCommands.js +100 -37
  178. package/dist/cli/coreNativeCommands.js +9 -10
  179. package/dist/cli/electronCommands.js +10 -9
  180. package/dist/cli/interactiveSetup.js +6 -6
  181. package/dist/cli/javascriptApplicationAnalysis.js +7 -3
  182. package/dist/cli/jsonOutput.js +4 -99
  183. package/dist/cli/managedCommands.js +7 -8
  184. package/dist/cli/nativeCallCommands.js +3 -5
  185. package/dist/cli/omittableDefaults.js +50 -0
  186. package/dist/cli/processCommands.js +3 -2
  187. package/dist/cli/setupCommands.js +16 -15
  188. package/dist/cli/utilityCommands.js +9 -9
  189. package/dist/cli/webRuntimeCommands.js +8 -8
  190. package/dist/cli.js +18 -9
  191. package/dist/cliBrowserScenarioCommands.js +2 -2
  192. package/dist/cliCommandNames.js +1 -1
  193. package/dist/cliJsonInput.js +24 -5
  194. package/dist/cliOutput.js +0 -38
  195. package/dist/composition/auxiliaryAnalysisProviders.js +27 -23
  196. package/dist/composition/binary.js +9 -9
  197. package/dist/composition/browserScenario.js +2 -1
  198. package/dist/composition/directAnalysis.js +20 -13
  199. package/dist/composition/electronScenario.js +1 -1
  200. package/dist/composition/optionalObservationProviders.js +12 -7
  201. package/dist/config/environment.js +10 -0
  202. package/dist/config/ghidraStartupTimeout.js +12 -0
  203. package/dist/config/homeDirectory.js +12 -0
  204. package/dist/config/mcpResponseBudget.js +30 -0
  205. package/dist/config/parseConfig.js +8 -3
  206. package/dist/config/parsers.js +19 -22
  207. package/dist/contracts/analysisViewToolContracts.js +56 -0
  208. package/dist/contracts/applicationToolContracts.js +5 -4
  209. package/dist/contracts/artifactComparisonExample.js +2 -2
  210. package/dist/contracts/artifactToolContracts.js +1 -1
  211. package/dist/contracts/browserScenarioToolContracts.js +1 -1
  212. package/dist/contracts/browserToolContracts.js +19 -15
  213. package/dist/contracts/enhancedInputs.js +7 -5
  214. package/dist/contracts/enhancedToolContracts.js +7 -6
  215. package/dist/contracts/evm/evmToolContracts.js +1 -1
  216. package/dist/contracts/functionWorkflowToolContracts.js +1 -1
  217. package/dist/contracts/hopperMemoryContracts.js +2 -5
  218. package/dist/contracts/inputSchemaPresentation.js +90 -0
  219. package/dist/contracts/investigationExamples.js +4 -3
  220. package/dist/contracts/javascript/electronToolContracts.js +2 -2
  221. package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +0 -20
  222. package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +245 -0
  223. package/dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js +1 -1
  224. package/dist/contracts/managed/managedToolContracts.js +7 -14
  225. package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
  226. package/dist/contracts/mobileApplicationGraphExamples.js +3 -3
  227. package/dist/contracts/native/binaryDiagnosticsToolContracts.js +1 -1
  228. package/dist/contracts/native/nativeToolContracts.js +5 -3
  229. package/dist/contracts/officialToolContracts.js +16 -16
  230. package/dist/contracts/promptContracts.js +5 -5
  231. package/dist/contracts/providerSelection.js +1 -1
  232. package/dist/contracts/sessionLifecycleInputs.js +3 -7
  233. package/dist/contracts/sessionStatusContract.js +2 -4
  234. package/dist/contracts/sessionToolContracts.js +18 -8
  235. package/dist/contracts/sessionToolSchemas.js +3 -19
  236. package/dist/contracts/toolContractExamples.js +0 -1
  237. package/dist/contracts/toolContractHelpers.js +4 -1
  238. package/dist/contracts/toolContracts.js +2 -0
  239. package/dist/contracts/toolEffects.js +1 -1
  240. package/dist/contracts/toolOutputSchemaGroups.js +160 -115
  241. package/dist/contracts/toolOutputSchemaPrimitives.js +28 -20
  242. package/dist/contracts/toolSchemaMetadata.js +41 -33
  243. package/dist/contracts/webNetworkCaptureToolContracts.js +2 -2
  244. package/dist/contracts/webRuntimeToolContracts.js +1 -1
  245. package/dist/contracts/webScriptToolContracts.js +1 -1
  246. package/dist/doctorRuntime.js +7 -5
  247. package/dist/domain/analysisErrorBase.js +8 -3
  248. package/dist/domain/analysisErrorCore.js +6 -1
  249. package/dist/domain/analysisErrorPresentation.js +90 -20
  250. package/dist/domain/analysisErrorProjection.js +130 -32
  251. package/dist/domain/analysisSnapshot.js +29 -31
  252. package/dist/domain/analysisView/analysisView.js +243 -0
  253. package/dist/domain/analysisView/analysisViewCoverage.js +19 -0
  254. package/dist/domain/analysisView/binaryLayoutView.js +159 -0
  255. package/dist/domain/analysisView/javascriptApplicationView.js +238 -0
  256. package/dist/domain/android/androidAnalysis.js +2 -4
  257. package/dist/domain/android/androidApplication.js +18 -10
  258. package/dist/domain/apple/appleApplication.js +42 -15
  259. package/dist/domain/apple/dyldEnvironment.js +73 -0
  260. package/dist/domain/apple/dylibResolution.js +130 -12
  261. package/dist/domain/apple/dylibResolutionFindings.js +9 -7
  262. package/dist/domain/apple/interfaceBuilderGraph.js +25 -14
  263. package/dist/domain/apple/interfaceBuilderKeyedArchive.js +13 -3
  264. package/dist/domain/apple/keyedArchive.js +35 -3
  265. package/dist/domain/apple/machoContainer.js +54 -0
  266. package/dist/domain/apple/plistNumbers.js +76 -0
  267. package/dist/domain/artifactComparison.js +15 -6
  268. package/dist/domain/artifactGraph.js +16 -3
  269. package/dist/domain/artifactIdentity.js +29 -0
  270. package/dist/domain/artifactInventoryEvidence.js +28 -40
  271. package/dist/domain/artifactOperationError.js +3 -3
  272. package/dist/domain/artifactPartialObservation.js +1 -0
  273. package/dist/domain/artifactPathSyntax.js +49 -0
  274. package/dist/domain/binaryTarget.js +39 -13
  275. package/dist/domain/bridgeCandidateProjection.js +71 -0
  276. package/dist/domain/browserCaptureComparison.js +13 -49
  277. package/dist/domain/browserCompleteness.js +1 -0
  278. package/dist/domain/browserNetworkEvidence.js +10 -4
  279. package/dist/domain/browserObservation.js +0 -1
  280. package/dist/domain/browserObservationError.js +24 -5
  281. package/dist/domain/browserObservationSchemas.js +14 -3
  282. package/dist/domain/browserScenario.js +0 -1
  283. package/dist/domain/browserScenarioCapture.js +1 -2
  284. package/dist/domain/browserScenarioDiff.js +0 -2
  285. package/dist/domain/browserScenarioDiffEvidence.js +0 -12
  286. package/dist/domain/browserScenarioDiffValues.js +2 -2
  287. package/dist/domain/browserScenarioValues.js +5 -10
  288. package/dist/domain/bundleComparison.js +3 -2
  289. package/dist/domain/callPath.js +8 -9
  290. package/dist/domain/callPathSchemas.js +2 -2
  291. package/dist/domain/canonicalJsonDigestSteps.js +133 -0
  292. package/dist/domain/canonicalOrdering.js +9 -5
  293. package/dist/domain/changedBehavior.js +9 -9
  294. package/dist/domain/comparisonSourceEvidence.js +40 -0
  295. package/dist/domain/completionLedgerGeneration.js +2 -1
  296. package/dist/domain/configurationErrors.js +13 -1
  297. package/dist/domain/conformancePackage.js +4 -3
  298. package/dist/domain/evidence.js +65 -36
  299. package/dist/domain/evidenceBundle.js +47 -8
  300. package/dist/domain/evidenceCompletionLedger.js +2 -1
  301. package/dist/domain/evidenceErrors.js +12 -1
  302. package/dist/domain/explicitSensitiveFailure.js +17 -1
  303. package/dist/domain/firmware/firmwareAnalysis.js +6 -7
  304. package/dist/domain/functionComparison.js +4 -5
  305. package/dist/domain/functionComparisonDimensions.js +120 -87
  306. package/dist/domain/functionComparisonNormalization.js +23 -34
  307. package/dist/domain/functionComparisonResults.js +1 -4
  308. package/dist/domain/functionComparisonSchemas.js +2 -8
  309. package/dist/domain/functionDossierEvidence.js +2 -37
  310. package/dist/domain/hopperErrors.js +23 -2
  311. package/dist/domain/hopperValues.js +51 -8
  312. package/dist/domain/immutableJson.js +114 -0
  313. package/dist/domain/inputIssueProjection.js +3 -0
  314. package/dist/domain/javascript/electronActiveObservation.js +47 -64
  315. package/dist/domain/javascript/electronObservation.js +14 -3
  316. package/dist/domain/javascript/electronStaticAnalysisBrowser.js +10 -9
  317. package/dist/domain/javascript/electronStaticAnalysisIpc.js +2 -1
  318. package/dist/domain/javascript/electronStaticAnalysisNative.js +2 -1
  319. package/dist/domain/javascript/electronStaticAnalysisValues.js +6 -12
  320. package/dist/domain/javascript/javascriptApplicationAnalysis.js +71 -23
  321. package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +2 -0
  322. package/dist/domain/javascript/javascriptApplicationGraph.js +39 -3
  323. package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +9 -2
  324. package/dist/domain/javascript/javascriptApplicationVersionItems.js +5 -2
  325. package/dist/domain/javascript/javascriptApplicationVersionKeys.js +2 -1
  326. package/dist/domain/javascript/javascriptAstValues.js +20 -0
  327. package/dist/{application/javascript/JavaScriptReturnShapeProjection.js → domain/javascript/javascriptExportReturnShapeProjection.js} +4 -4
  328. package/dist/domain/javascript/javascriptExportShapeComparison.js +7 -1
  329. package/dist/domain/javascript/javascriptExportShapeComparisonIdentity.js +6 -1
  330. package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +29 -1
  331. package/dist/domain/javascript/javascriptExportShapeSelection.js +5 -5
  332. package/dist/domain/javascript/javascriptExportShapeVariants.js +67 -14
  333. package/dist/domain/javascript/javascriptFeatureSeed.js +20 -0
  334. package/dist/domain/javascript/javascriptFeatureTraversal.js +0 -1
  335. package/dist/domain/javascript/javascriptNativeHandoff.js +1 -1
  336. package/dist/domain/javascript/javascriptRecovery.js +3 -8
  337. package/dist/domain/javascript/javascriptRuntimeLoadState.js +0 -1
  338. package/dist/domain/javascript/javascriptRuntimeObservation.js +10 -2
  339. package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +1 -1
  340. package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +3 -2
  341. package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +0 -1
  342. package/dist/domain/javascript/javascriptSemanticAnalysis.js +106 -5
  343. package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +2 -1
  344. package/dist/domain/javascript/javascriptSemanticCalls.js +2 -1
  345. package/dist/domain/javascript/javascriptSemanticChildProcesses.js +2 -1
  346. package/dist/domain/javascript/javascriptSemanticCoverage.js +6 -5
  347. package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +9 -17
  348. package/dist/domain/javascript/javascriptSemanticDataEffects.js +23 -6
  349. package/dist/domain/javascript/javascriptSemanticGraph.js +98 -43
  350. package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +1 -0
  351. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +77 -20
  352. package/dist/domain/javascript/javascriptSemanticMutationValues.js +21 -27
  353. package/dist/domain/javascript/javascriptSemanticObjects.js +83 -42
  354. package/dist/domain/javascript/javascriptSemanticPrimitives.js +18 -21
  355. package/dist/domain/javascript/javascriptSemanticProjection.js +2 -3
  356. package/dist/domain/javascript/javascriptSemanticPromises.js +2 -1
  357. package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -4
  358. package/dist/domain/javascript/javascriptSemanticResourceLimits.js +77 -0
  359. package/dist/domain/javascript/javascriptSemanticResources.js +1 -1
  360. package/dist/domain/javascript/javascriptSemanticReturns.js +32 -17
  361. package/dist/domain/javascript/javascriptSemanticSlots.js +72 -0
  362. package/dist/domain/javascript/javascriptSemanticValues.js +126 -61
  363. package/dist/domain/javascript/javascriptSourceMapPaths.js +104 -0
  364. package/dist/domain/javascript/javascriptSourceParser.js +6 -2
  365. package/dist/domain/javascript/javascriptStaticAnalysis.js +22 -17
  366. package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +5 -3
  367. package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +16 -5
  368. package/dist/domain/javascript/javascriptStaticAnalysisFindings.js +66 -7
  369. package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +28 -17
  370. package/dist/domain/javascript/javascriptStaticAnalysisState.js +3 -2
  371. package/dist/domain/javascript/sourceToBundleComparison.js +12 -3
  372. package/dist/domain/javascript/sourceToBundleSignals.js +47 -19
  373. package/dist/domain/jsonSerialization.js +109 -0
  374. package/dist/domain/jsonValue.js +90 -6
  375. package/dist/domain/localPath.js +6 -0
  376. package/dist/domain/managed/managedApplicationGraph.js +10 -10
  377. package/dist/domain/managed/managedArtifact.js +6 -4
  378. package/dist/domain/managed/managedInspectionEvidence.js +16 -0
  379. package/dist/domain/managed/managedMemberComparison.js +2 -9
  380. package/dist/domain/managed/managedMemberComparisonMatch.js +5 -9
  381. package/dist/domain/managed/managedNativeVerification.js +3 -11
  382. package/dist/domain/managed/managedNativeVerificationMatch.js +9 -3
  383. package/dist/domain/native/binaryLayout.js +2 -3
  384. package/dist/domain/native/fileOffsetPartialObservation.js +1 -0
  385. package/dist/domain/native/nativeApiBoundary.js +1 -1
  386. package/dist/domain/native/nativeCallObservation.js +37 -13
  387. package/dist/domain/native/nativeCallPartialObservation.js +33 -0
  388. package/dist/domain/native/nativeInstruction.js +7 -0
  389. package/dist/domain/native/recordedCrash.js +2 -3
  390. package/dist/domain/offsetDateTime.js +17 -0
  391. package/dist/domain/process/processCapture.js +21 -16
  392. package/dist/domain/process/processCaptureCoverage.js +67 -0
  393. package/dist/domain/process/processCaptureExample.js +2 -1
  394. package/dist/domain/process/processCaptureParsing.js +1 -34
  395. package/dist/domain/process/processCaptureValidation.js +81 -13
  396. package/dist/domain/process/processComparison.js +79 -26
  397. package/dist/domain/process/processObservation.js +10 -2
  398. package/dist/domain/process/processScenario.js +35 -12
  399. package/dist/domain/process/processTraceComparison.js +0 -2
  400. package/dist/domain/process/processTraceDimensionProjection.js +1 -1
  401. package/dist/domain/process/processTraceEvaluation.js +15 -11
  402. package/dist/domain/process/processTraceSpecification.js +3 -4
  403. package/dist/domain/propertyListKeys.js +1 -1
  404. package/dist/domain/propertyListXmlText.js +19 -0
  405. package/dist/domain/providerAdapterError.js +3 -1
  406. package/dist/domain/providerOperationHealth.js +54 -0
  407. package/dist/domain/reconstructionCoverage.js +5 -2
  408. package/dist/domain/reconstructionObligationLedgerSchemas.js +2 -1
  409. package/dist/domain/reconstructionReadinessSchemas.js +2 -1
  410. package/dist/domain/reconstructionVerification.js +9 -46
  411. package/dist/domain/reconstructionVerificationSchemas.js +4 -3
  412. package/dist/domain/referenceSourceGraph.js +20 -21
  413. package/dist/domain/staticRuntimeCorrelation.js +8 -45
  414. package/dist/domain/stringPatterns.js +6 -0
  415. package/dist/domain/swiftSymbolClassification.js +61 -0
  416. package/dist/domain/symbolAnalysis.js +66 -18
  417. package/dist/domain/webBundleAnalysis.js +20 -8
  418. package/dist/domain/webBundleAnalyzerInspection.js +13 -8
  419. package/dist/domain/webBundleAnalyzerResult.js +41 -2
  420. package/dist/domain/webCaptureDiff.js +0 -1
  421. package/dist/domain/webCaptureDiffSchemas.js +6 -3
  422. package/dist/domain/webEventListeners.js +3 -2
  423. package/dist/domain/webExecution.js +3 -2
  424. package/dist/domain/webRuntime.js +19 -7
  425. package/dist/domain/webScriptExport.js +1 -1
  426. package/dist/domain/webSourceLocation.js +1 -0
  427. package/dist/dotnet/ManagedArtifactInspector.js +2 -19
  428. package/dist/dotnet/ManagedMemberInspector.js +12 -18
  429. package/dist/dotnet/ManagedMemberInspectorCore.js +47 -44
  430. package/dist/dotnet/ManagedMemberRows.js +75 -62
  431. package/dist/dotnet/ManagedMetadataInventory.js +16 -22
  432. package/dist/dotnet/ManagedMethodBodyReader.js +4 -0
  433. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +109 -94
  434. package/dist/dotnet/ManagedNativeBoundaryInspector.js +12 -21
  435. package/dist/dotnet/ManagedReaderFailure.js +16 -0
  436. package/dist/dotnet/ManagedStaticProvider.js +3 -5
  437. package/dist/evaluation/AgentEvaluationFixtures.js +250 -0
  438. package/dist/evaluation/AgentEvaluationReport.js +28 -0
  439. package/dist/evaluation/CodexAgentEval.js +12 -8
  440. package/dist/evaluation/KnownAnswerEvaluation.js +281 -0
  441. package/dist/evm/EvmoleInterfaceProvider.js +2 -1
  442. package/dist/firmware/FirmwareCommand.js +9 -5
  443. package/dist/firmware/FirmwareFiles.js +1 -1
  444. package/dist/firmware/FirmwareProvider.js +4 -4
  445. package/dist/generatedPackageMetadata.js +2 -2
  446. package/dist/ghidra/GhidraAnalysisProfile.js +7 -5
  447. package/dist/ghidra/GhidraClient.js +126 -34
  448. package/dist/ghidra/GhidraClientStartup.js +0 -2
  449. package/dist/ghidra/GhidraDiagnostics.js +7 -7
  450. package/dist/ghidra/GhidraDoctor.js +6 -5
  451. package/dist/ghidra/GhidraFunctionValues.js +13 -12
  452. package/dist/ghidra/GhidraInstallation.js +58 -33
  453. package/dist/ghidra/GhidraInventoryValues.js +14 -4
  454. package/dist/ghidra/GhidraJavaLaunch.js +66 -0
  455. package/dist/ghidra/GhidraLauncher.js +47 -22
  456. package/dist/ghidra/GhidraProvider.js +6 -2
  457. package/dist/ghidra/GhidraProviderCapabilities.js +20 -2
  458. package/dist/ghidra/GhidraProviderClient.js +36 -15
  459. package/dist/ghidra/GhidraSessionError.js +13 -7
  460. package/dist/ghidra/GhidraSessionRoot.js +39 -0
  461. package/dist/ghidra/GhidraTargetSnapshot.js +47 -12
  462. package/dist/ghidra/GhidraTransport.js +20 -0
  463. package/dist/ghidra/extensions/GhidraExtensions.js +17 -10
  464. package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +8 -2
  465. package/dist/hopper/BridgeLauncher.js +65 -56
  466. package/dist/hopper/HopperAnalysisProfile.js +65 -12
  467. package/dist/hopper/HopperCleanup.js +63 -22
  468. package/dist/hopper/HopperClient.js +288 -59
  469. package/dist/hopper/HopperFileOffset.js +237 -0
  470. package/dist/hopper/HopperMachOImage.js +197 -0
  471. package/dist/hopper/HopperOperationStage.js +6 -0
  472. package/dist/hopper/HopperProvider.js +71 -19
  473. package/dist/hopper/HopperProviderCapabilities.js +19 -1
  474. package/dist/hopper/HopperRegexSearch.js +134 -0
  475. package/dist/hopper/HopperRegexWorker.js +27 -0
  476. package/dist/hopper/HopperRequestQueue.js +68 -19
  477. package/dist/hopper/HopperTargetLease.js +133 -49
  478. package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -0
  479. package/dist/ida/IdaConfiguration.js +8 -3
  480. package/dist/ida/IdaInput.js +1 -7
  481. package/dist/ida/IdaMcpConnection.js +8 -4
  482. package/dist/ida/IdaOperationRunner.js +3 -3
  483. package/dist/ida/IdaProvider.js +8 -12
  484. package/dist/ida/IdaSessionClient.js +20 -18
  485. package/dist/ida/IdaWorkspace.js +12 -13
  486. package/dist/inspector/JavaScriptRuntimeScope.js +9 -1
  487. package/dist/inspector/V8InspectorCaptureProjection.js +9 -4
  488. package/dist/inspector/V8InspectorProvider.js +82 -36
  489. package/dist/javascript/recovery/WakaruCommand.js +7 -2
  490. package/dist/javascript/recovery/WakaruExecution.js +5 -2
  491. package/dist/javascript/sourceMaps/DecodedSourceMap.js +47 -0
  492. package/dist/javascript/sourceMaps/SourceMapCommand.js +16 -0
  493. package/dist/javascript/sourceMaps/SourceMapFormat.js +79 -31
  494. package/dist/javascript/sourceMaps/TraceSourceMap.js +14 -28
  495. package/dist/main/shutdown.js +11 -3
  496. package/dist/main/startup.js +9 -2
  497. package/dist/main/transport.js +22 -2
  498. package/dist/main.js +11 -18
  499. package/dist/mcpDoctor.js +62 -2
  500. package/dist/native/AppleDispatchCoverage.js +47 -6
  501. package/dist/native/AppleDispatchDecodeFacts.js +6 -0
  502. package/dist/native/AppleDispatchMetadata.js +6 -3
  503. package/dist/native/AppleMachoFixups.js +48 -24
  504. package/dist/native/AppleMachoSelection.js +48 -22
  505. package/dist/native/AppleObjcCategories.js +6 -2
  506. package/dist/native/AppleObjcDispatchFacets.js +5 -2
  507. package/dist/native/AppleObjcProperties.js +2 -1
  508. package/dist/native/AppleSwiftDispatchFacets.js +27 -21
  509. package/dist/native/AppleSwiftVtables.js +21 -15
  510. package/dist/native/CommandRunner.js +87 -88
  511. package/dist/native/LldbCallTracer.js +372 -103
  512. package/dist/native/LldbRetainedObservations.js +178 -0
  513. package/dist/native/NativeCallObservation.js +62 -3
  514. package/dist/native/NativeMacOSProvider.js +122 -31
  515. package/dist/native/NativeUiHelperRuntime.js +11 -2
  516. package/dist/native/NativeUiObservation.js +2 -2
  517. package/dist/native/SignatureTargetBinding.js +155 -0
  518. package/dist/native/parsers/lipo.js +71 -1
  519. package/dist/native/pwndbg/PwndbgCoreContext.js +25 -5
  520. package/dist/native/pwntools/PwntoolsDecoder.js +2 -1
  521. package/dist/native/pwntools/RecordedCrashStructureBindings.js +2 -0
  522. package/dist/process/DarwinProcessRunTokenReader.js +23 -10
  523. package/dist/process/ExecFileOutput.js +108 -6
  524. package/dist/process/OwnedCommand.js +7 -2
  525. package/dist/process/PrivateRuntimeRoot.js +10 -5
  526. package/dist/process/ProcessOwnership.js +204 -57
  527. package/dist/process/ProcessOwnershipObservation.js +60 -9
  528. package/dist/process/ProviderProcess.js +39 -10
  529. package/dist/process/capture/FilesystemSnapshot.js +50 -13
  530. package/dist/process/capture/ProcessCaptureError.js +15 -2
  531. package/dist/process/capture/ProcessCaptureLifecycle.js +235 -81
  532. package/dist/process/capture/ProcessFilesystemEffects.js +33 -3
  533. package/dist/process/capture/ProcessHarness.js +21 -25
  534. package/dist/process/capture/ProcessNormalization.js +20 -2
  535. package/dist/process/capture/ProcessSampling.js +25 -2
  536. package/dist/process/capture/TerminalRenderer.js +14 -0
  537. package/dist/process/snapshotEnvironment.js +14 -0
  538. package/dist/server/EvidenceMcpServer.js +157 -0
  539. package/dist/server/createServer.js +61 -41
  540. package/dist/server/mcpClientMetadata.js +12 -5
  541. package/dist/server/promptCompletion.js +3 -8
  542. package/dist/server/registerAnalysisViewTool.js +15 -0
  543. package/dist/server/registerAndroidTools.js +2 -5
  544. package/dist/server/registerApplicationTools/compareExportShapes.js +4 -5
  545. package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
  546. package/dist/server/registerApplicationTools/compareVersions.js +4 -5
  547. package/dist/server/registerApplicationTools/coverage.js +1 -2
  548. package/dist/server/registerApplicationTools/helpers.js +1 -4
  549. package/dist/server/registerApplicationTools/obligationLedger.js +4 -5
  550. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -4
  551. package/dist/server/registerApplicationTools/traceFeature.js +4 -5
  552. package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
  553. package/dist/server/registerArtifactComparisonTool.js +13 -10
  554. package/dist/server/registerBinaryDiagnosticsTools.js +2 -5
  555. package/dist/server/registerBrowserScenarioTool.js +3 -6
  556. package/dist/server/registerBrowserTools.js +13 -18
  557. package/dist/server/registerBundleComparisonTool.js +5 -7
  558. package/dist/server/registerCloseLifecycleTool.js +9 -20
  559. package/dist/server/registerElectronTools.js +10 -15
  560. package/dist/server/registerEnhancedTools.js +36 -77
  561. package/dist/server/registerEvidenceTools.js +3 -6
  562. package/dist/server/registerEvmTools.js +2 -5
  563. package/dist/server/registerFirmwareTools.js +2 -5
  564. package/dist/server/registerFunctionComparisonTool.js +15 -12
  565. package/dist/server/registerInvestigationTools.js +16 -17
  566. package/dist/server/registerJavaScriptRecoveryTool.js +2 -5
  567. package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -8
  568. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +5 -8
  569. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -7
  570. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +6 -9
  571. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +6 -9
  572. package/dist/server/registerOfficialTools.js +4 -21
  573. package/dist/server/registerProcessComparisonTool.js +74 -48
  574. package/dist/server/registerRecordedCrashTools.js +2 -5
  575. package/dist/server/registerSessionRecordTools.js +19 -24
  576. package/dist/server/registerSessionStatusTool.js +19 -6
  577. package/dist/server/registerSessionTools.js +20 -18
  578. package/dist/server/registerWebModuleTool.js +2 -5
  579. package/dist/server/registerWebNetworkCaptureTool.js +2 -5
  580. package/dist/server/registerWebRuntimeTools.js +4 -9
  581. package/dist/server/registerWebScriptTool.js +2 -5
  582. package/dist/server/registerWebSourceLocationTool.js +2 -5
  583. package/dist/server/runDerivedOperation.js +15 -3
  584. package/dist/server/sessionAvailabilityPolicy.js +0 -1
  585. package/dist/server/toolRegistrationOptions.js +2 -2
  586. package/dist/server/toolResult.js +75 -51
  587. package/dist/server/toolResultEncoding.js +34 -0
  588. package/dist/windows/WindowsNativeLoader.js +1 -0
  589. package/dist/windows/WindowsOwnedProcess.js +60 -15
  590. package/dist/windows/WindowsPrivateRuntime.js +7 -8
  591. package/install.sh +1 -1
  592. package/native/windows/README.md +3 -1
  593. package/native/windows/build/manifest.json +2 -2
  594. package/native/windows/build/rea-windows-x64.node +0 -0
  595. package/package.json +44 -30
  596. package/scripts/electron-active-hook-boundaries.cjs +18 -20
  597. package/scripts/electron-active-hook.cjs +241 -37
  598. package/scripts/rea.mjs +3 -6
  599. package/skills/reverse-engineer-anything/SKILL.md +12 -3
  600. package/skills/reverse-engineer-anything/references/android-applications.md +6 -3
  601. package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -4
  602. package/skills/reverse-engineer-anything/references/javascript-applications.md +20 -3
  603. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +9 -0
  604. package/dist/config.js +0 -1
  605. package/dist/contracts/browserCaptureToolInputSchema.js +0 -43
  606. package/dist/contracts/process/processCaptureExample.js +0 -2
  607. package/dist/contracts/toolOutputSchemas.js +0 -2
  608. package/dist/ghidra/GhidraDefaults.js +0 -2
  609. package/dist/main/reload.js +0 -12
  610. package/dist/main/state.js +0 -3
  611. package/dist/server/sessionToolPolicies.js +0 -2
@@ -1,40 +1,50 @@
1
1
  import { canonicalJson } from "./comparisonSemantics.js";
2
2
  import { diffLines } from "diff";
3
- import { commentProjection, combineCoverage, identityProjection, isAutoName, normalizeCfg, project, referenceKindProjection, referenceProjection, sorted, stringAndNameProjection, } from "./functionComparisonNormalization.js";
4
- import { dimensionResult, unresolvedDimension as buildUnresolvedDimension, } from "./functionComparisonResults.js";
5
- const unresolvedDimension = (...[dimension, status, links, leftCount, rightCount, limitations]) => buildUnresolvedDimension({
6
- dimension,
7
- status,
8
- links,
9
- leftCount,
10
- rightCount,
11
- limitations,
12
- });
13
- export const compareDimensions = (left, right, links, providersDiffer) => [
14
- compareIdentity(left, right, links, providersDiffer),
15
- compareText("pseudocode", left.pseudocode.text, right.pseudocode.text, left.pseudocode.complete, right.pseudocode.complete, links, providersDiffer),
16
- compareText("assembly", left.collections.assembly.items.join("\n"), right.collections.assembly.items.join("\n"), left.collections.assembly.complete, right.collections.assembly.complete, links, providersDiffer, left.collections.assembly.truncated || right.collections.assembly.truncated, "Assembly is opaque provider text; relocation normalization is unavailable."),
17
- compareComments(left, right, links, providersDiffer),
18
- compareCalls(left, right, links, providersDiffer),
19
- compareReferences(left, right, links, providersDiffer),
20
- compareStringsAndNames(left, right, links, providersDiffer),
21
- compareCfg(left, right, links, providersDiffer),
22
- ];
23
- const compareText = (...[dimension, left, right, leftComplete, rightComplete, links, providersDiffer, explicitTruncation, limitation,]) => {
24
- const truncated = explicitTruncation ?? (!leftComplete || !rightComplete);
25
- if (!leftComplete || !rightComplete || providersDiffer)
26
- return unresolvedDimension(dimension, truncated ? "truncated" : "unknown", links, left.length, right.length, [
27
- ...(limitation === undefined ? [] : [limitation]),
28
- ...(providersDiffer
29
- ? ["Exact text comparison requires one provider identity."]
30
- : []),
31
- ]);
3
+ import { commentProjection, identityProjection, isAutoName, normalizeCfg, referenceKindProjection, referenceProjection, sorted, stringAndNameProjection, } from "./functionComparisonNormalization.js";
4
+ import { dimensionResult, unresolvedDimension, } from "./functionComparisonResults.js";
5
+ export const compareDimensions = (left, right, context) => {
6
+ return [
7
+ compareIdentity(left, right, context),
8
+ compareText("pseudocode", left.dossier.pseudocode, right.dossier.pseudocode, context),
9
+ compareText("assembly", left.dossier.assembly.join("\n"), right.dossier.assembly.join("\n"), context),
10
+ compareComments(left, right, context),
11
+ compareCalls(left, right, context),
12
+ compareReferences(left, right, context),
13
+ compareStringsAndNames(left, right, context),
14
+ compareCfg(left, right, context),
15
+ ];
16
+ };
17
+ const compareText = (dimension, left, right, context) => {
18
+ const limitations = dimension === "assembly"
19
+ ? [
20
+ "Assembly is opaque provider text; relocation normalization is unavailable.",
21
+ ]
22
+ : [];
23
+ if (context.providersDiffer)
24
+ return unresolvedDimension({
25
+ dimension,
26
+ links: context.links,
27
+ leftCount: [...left].length,
28
+ rightCount: [...right].length,
29
+ limitations: [
30
+ ...limitations,
31
+ "Exact text comparison requires one provider identity.",
32
+ ],
33
+ });
32
34
  const changes = diffLines(left, right, {
33
35
  timeout: 100,
34
36
  maxEditLength: 10_000,
35
37
  });
36
38
  if (changes === undefined)
37
- return unresolvedDimension(dimension, "unknown", links, left.length, right.length, ["Bounded line diff exceeded its time or edit-distance limit."]);
39
+ return unresolvedDimension({
40
+ dimension,
41
+ links: context.links,
42
+ leftCount: [...left].length,
43
+ rightCount: [...right].length,
44
+ limitations: [
45
+ "Bounded line diff exceeded its time or edit-distance limit.",
46
+ ],
47
+ });
38
48
  const delta = changes.reduce((summary, change) => ({
39
49
  added_lines: summary.added_lines + (change.added ? (change.count ?? 0) : 0),
40
50
  removed_lines: summary.removed_lines + (change.removed ? (change.count ?? 0) : 0),
@@ -45,48 +55,48 @@ const compareText = (...[dimension, left, right, leftComplete, rightComplete, li
45
55
  status: delta.hunks === 0 ? "unchanged" : "changed",
46
56
  left,
47
57
  right,
48
- links,
49
- providersDiffer,
58
+ ...context,
50
59
  leftCount: [...left].length,
51
60
  rightCount: [...right].length,
52
61
  textDelta: delta,
53
- limitations: limitation === undefined ? [] : [limitation],
62
+ limitations,
54
63
  });
55
64
  };
56
- const compareCollections = (...[dimension, left, right, leftCoverage, rightCoverage, links, providersDiffer,]) => {
57
- if (!leftCoverage.complete || !rightCoverage.complete)
58
- return unresolvedDimension(dimension, leftCoverage.truncated || rightCoverage.truncated
59
- ? "truncated"
60
- : "unknown", links, left.length, right.length, []);
61
- return compareValues(dimension, sorted(left), sorted(right), links, true, true, providersDiffer);
62
- };
63
- const compareComments = (left, right, links, providersDiffer) => {
65
+ const compareComments = (left, right, context) => {
64
66
  const leftValues = commentProjection(left);
65
67
  const rightValues = commentProjection(right);
66
68
  if (leftValues === null || rightValues === null)
67
- return unresolvedDimension("comments", "unknown", links, left.collections.comments.items.length, right.collections.comments.items.length, ["Comment locations could not be normalized relative to the function."]);
68
- return compareCollections("comments", leftValues, rightValues, left.collections.comments, right.collections.comments, links, providersDiffer);
69
+ return unresolvedDimension({
70
+ dimension: "comments",
71
+ links: context.links,
72
+ leftCount: left.dossier.comments.length,
73
+ rightCount: right.dossier.comments.length,
74
+ limitations: [
75
+ "Comment locations could not be normalized relative to the function.",
76
+ ],
77
+ });
78
+ return compareValues("comments", leftValues, rightValues, context);
69
79
  };
70
- const compareStringsAndNames = (left, right, links, providersDiffer) => {
80
+ const compareStringsAndNames = (left, right, context) => {
71
81
  const leftValues = stringAndNameProjection(left);
72
82
  const rightValues = stringAndNameProjection(right);
73
83
  if (leftValues === null || rightValues === null)
74
- return unresolvedDimension("strings_names", "unknown", links, null, null, [
75
- "Reference source locations could not be normalized to function offsets.",
76
- ]);
77
- return compareCollections("strings_names", leftValues, rightValues, combineCoverage(left.collections.referenced_strings, left.collections.referenced_names), combineCoverage(right.collections.referenced_strings, right.collections.referenced_names), links, providersDiffer);
84
+ return unresolvedDimension({
85
+ dimension: "strings_names",
86
+ links: context.links,
87
+ leftCount: null,
88
+ rightCount: null,
89
+ limitations: [
90
+ "Reference source locations could not be normalized to function offsets.",
91
+ ],
92
+ });
93
+ return compareValues("strings_names", leftValues, rightValues, context);
78
94
  };
79
- const compareReferences = (left, right, links, providersDiffer) => {
80
- const leftCoverage = combineCoverage(left.collections.incoming_references, left.collections.outgoing_references);
81
- const rightCoverage = combineCoverage(right.collections.incoming_references, right.collections.outgoing_references);
82
- if (!leftCoverage.complete || !rightCoverage.complete)
83
- return unresolvedDimension("references", leftCoverage.truncated || rightCoverage.truncated
84
- ? "truncated"
85
- : "unknown", links, leftCoverage.items.length, rightCoverage.items.length, []);
95
+ const compareReferences = (left, right, context) => {
86
96
  const leftProjection = referenceProjection(left);
87
97
  const rightProjection = referenceProjection(right);
88
98
  if (leftProjection.length === 0 && rightProjection.length === 0)
89
- return compareValues("references", leftProjection, rightProjection, links, true, true, providersDiffer);
99
+ return compareValues("references", leftProjection, rightProjection, context);
90
100
  if (canonicalJson(leftProjection, "Function comparison") !==
91
101
  canonicalJson(rightProjection, "Function comparison"))
92
102
  return dimensionResult({
@@ -94,8 +104,7 @@ const compareReferences = (left, right, links, providersDiffer) => {
94
104
  status: "changed",
95
105
  left: leftProjection,
96
106
  right: rightProjection,
97
- links,
98
- providersDiffer,
107
+ ...context,
99
108
  leftCount: leftProjection.length,
100
109
  rightCount: rightProjection.length,
101
110
  textDelta: null,
@@ -106,49 +115,74 @@ const compareReferences = (left, right, links, providersDiffer) => {
106
115
  const leftKinds = referenceKindProjection(left);
107
116
  const rightKinds = referenceKindProjection(right);
108
117
  if (leftKinds !== null && rightKinds !== null)
109
- return compareValues("references", leftKinds, rightKinds, links, true, true, providersDiffer);
110
- return unresolvedDimension("references", "unknown", links, leftProjection.length, rightProjection.length, [
111
- "At least one provider did not expose reference kinds, so equal endpoints do not prove equal edge semantics.",
112
- ]);
118
+ return compareValues("references", leftKinds, rightKinds, context);
119
+ return unresolvedDimension({
120
+ dimension: "references",
121
+ links: context.links,
122
+ leftCount: leftProjection.length,
123
+ rightCount: rightProjection.length,
124
+ limitations: [
125
+ "At least one provider did not expose reference kinds, so equal endpoints do not prove equal edge semantics.",
126
+ ],
127
+ });
113
128
  };
114
- const compareIdentity = (left, right, links, providersDiffer) => {
115
- if (isAutoName(left.procedure.name) || isAutoName(right.procedure.name))
116
- return unresolvedDimension("identity", "unknown", links, null, null, [
117
- "Address-derived function names are not stable cross-version identity.",
118
- ]);
119
- return compareValues("identity", identityProjection(left), identityProjection(right), links, true, true, providersDiffer);
129
+ const compareIdentity = (left, right, context) => {
130
+ if (isAutoName(left.dossier.procedure.name) ||
131
+ isAutoName(right.dossier.procedure.name))
132
+ return unresolvedDimension({
133
+ dimension: "identity",
134
+ links: context.links,
135
+ leftCount: null,
136
+ rightCount: null,
137
+ limitations: [
138
+ "Address-derived function names are not stable cross-version identity.",
139
+ ],
140
+ });
141
+ return compareValues("identity", identityProjection(left), identityProjection(right), context);
120
142
  };
121
- const compareCalls = (left, right, links, providersDiffer) => {
143
+ const compareCalls = (left, right, context) => {
122
144
  const leftValues = callProjection(left);
123
145
  const rightValues = callProjection(right);
124
146
  if ([...leftValues, ...rightValues].some(({ name }) => isAutoName(name)))
125
- return unresolvedDimension("calls", "unknown", links, leftValues.length, rightValues.length, ["Address-derived callee or caller names cannot be matched safely."]);
126
- return compareCollections("calls", leftValues, rightValues, combineCoverage(left.collections.callers, left.collections.callees), combineCoverage(right.collections.callers, right.collections.callees), links, providersDiffer);
147
+ return unresolvedDimension({
148
+ dimension: "calls",
149
+ links: context.links,
150
+ leftCount: leftValues.length,
151
+ rightCount: rightValues.length,
152
+ limitations: [
153
+ "Address-derived callee or caller names cannot be matched safely.",
154
+ ],
155
+ });
156
+ return compareValues("calls", sorted(leftValues), sorted(rightValues), context);
127
157
  };
128
158
  const callProjection = (snapshot) => [
129
- ...project(snapshot.collections.callers, ({ name }) => ({
159
+ ...snapshot.dossier.callers.map(({ name }) => ({
130
160
  direction: "in",
131
161
  name,
132
162
  })),
133
- ...project(snapshot.collections.callees, ({ name }) => ({
163
+ ...snapshot.dossier.callees.map(({ name }) => ({
134
164
  direction: "out",
135
165
  name,
136
166
  })),
137
167
  ];
138
- const compareCfg = (left, right, links, providersDiffer) => {
139
- const leftBlocks = left.collections.basic_blocks;
140
- const rightBlocks = right.collections.basic_blocks;
141
- if (!leftBlocks.complete || !rightBlocks.complete)
142
- return unresolvedDimension("cfg", leftBlocks.truncated || rightBlocks.truncated ? "truncated" : "unknown", links, leftBlocks.items.length, rightBlocks.items.length, []);
143
- const leftGraph = normalizeCfg(leftBlocks.items);
144
- const rightGraph = normalizeCfg(rightBlocks.items);
168
+ const compareCfg = (left, right, context) => {
169
+ const leftBlocks = left.dossier.basic_blocks;
170
+ const rightBlocks = right.dossier.basic_blocks;
171
+ const leftGraph = normalizeCfg(leftBlocks);
172
+ const rightGraph = normalizeCfg(rightBlocks);
145
173
  if (leftGraph === null || rightGraph === null)
146
- return unresolvedDimension("cfg", "unknown", links, leftBlocks.items.length, rightBlocks.items.length, ["CFG addresses could not be normalized to local block indices."]);
147
- return compareValues("cfg", leftGraph, rightGraph, links, true, true, providersDiffer);
174
+ return unresolvedDimension({
175
+ dimension: "cfg",
176
+ links: context.links,
177
+ leftCount: leftBlocks.length,
178
+ rightCount: rightBlocks.length,
179
+ limitations: [
180
+ "CFG addresses could not be normalized to local block indices.",
181
+ ],
182
+ });
183
+ return compareValues("cfg", leftGraph, rightGraph, context);
148
184
  };
149
- const compareValues = (...[dimension, left, right, links, leftComplete, rightComplete, providersDiffer,]) => {
150
- if (!leftComplete || !rightComplete)
151
- return unresolvedDimension(dimension, "unknown", links, null, null, []);
185
+ const compareValues = (dimension, left, right, context) => {
152
186
  const leftJson = canonicalJson(left, "Function comparison");
153
187
  const rightJson = canonicalJson(right, "Function comparison");
154
188
  return dimensionResult({
@@ -156,8 +190,7 @@ const compareValues = (...[dimension, left, right, links, leftComplete, rightCom
156
190
  status: leftJson === rightJson ? "unchanged" : "changed",
157
191
  left,
158
192
  right,
159
- links,
160
- providersDiffer,
193
+ ...context,
161
194
  leftCount: Array.isArray(left) ? left.length : null,
162
195
  rightCount: Array.isArray(right) ? right.length : null,
163
196
  textDelta: null,
@@ -1,26 +1,28 @@
1
1
  import { canonicalJson } from "./comparisonSemantics.js";
2
2
  import { compareCodePoints } from "./canonicalOrdering.js";
3
3
  export const identityProjection = (snapshot) => ({
4
- name: snapshot.procedure.name,
5
- signature: snapshot.procedure.signature,
6
- locals: snapshot.procedure.locals
4
+ name: snapshot.dossier.procedure.name,
5
+ signature: snapshot.dossier.procedure.signature,
6
+ locals: snapshot.dossier.procedure.locals
7
7
  .map(({ description }) => description)
8
8
  .sort(),
9
9
  });
10
10
  export const functionMatch = (left, right) => {
11
- if (!isAutoName(left.procedure.name) &&
12
- left.procedure.name === right.procedure.name)
11
+ if (!isAutoName(left.dossier.procedure.name) &&
12
+ left.dossier.procedure.name === right.dossier.procedure.name)
13
13
  return {
14
14
  status: "matched",
15
15
  method: "symbol",
16
- left_name: left.procedure.name,
17
- right_name: right.procedure.name,
16
+ left_name: left.dossier.procedure.name,
17
+ right_name: right.dossier.procedure.name,
18
18
  };
19
19
  return {
20
- status: left.procedure.name === right.procedure.name ? "ambiguous" : "mismatched",
20
+ status: left.dossier.procedure.name === right.dossier.procedure.name
21
+ ? "ambiguous"
22
+ : "mismatched",
21
23
  method: "explicit",
22
- left_name: left.procedure.name,
23
- right_name: right.procedure.name,
24
+ left_name: left.dossier.procedure.name,
25
+ right_name: right.dossier.procedure.name,
24
26
  };
25
27
  };
26
28
  export const normalizeCfg = (blocks) => {
@@ -56,12 +58,12 @@ export const normalizeCfg = (blocks) => {
56
58
  return graph;
57
59
  };
58
60
  export const referenceProjection = (snapshot) => sorted([
59
- ...snapshot.collections.incoming_references.items.map((item) => ({
61
+ ...snapshot.dossier.incoming_references.map((item) => ({
60
62
  direction: "in",
61
63
  source: item.source_procedure?.name ?? null,
62
64
  target: item.target_procedure?.name ?? null,
63
65
  })),
64
- ...snapshot.collections.outgoing_references.items.map((item) => ({
66
+ ...snapshot.dossier.outgoing_references.map((item) => ({
65
67
  direction: "out",
66
68
  source: item.source_procedure?.name ?? null,
67
69
  target: item.target_procedure?.name ?? null,
@@ -69,11 +71,11 @@ export const referenceProjection = (snapshot) => sorted([
69
71
  ]);
70
72
  export const referenceKindProjection = (snapshot) => {
71
73
  const edges = [
72
- ...snapshot.collections.incoming_references.items.map((edge) => ({
74
+ ...snapshot.dossier.incoming_references.map((edge) => ({
73
75
  direction: "in",
74
76
  edge,
75
77
  })),
76
- ...snapshot.collections.outgoing_references.items.map((edge) => ({
78
+ ...snapshot.dossier.outgoing_references.map((edge) => ({
77
79
  direction: "out",
78
80
  edge,
79
81
  })),
@@ -105,8 +107,8 @@ export const referenceKindProjection = (snapshot) => {
105
107
  }));
106
108
  };
107
109
  export const commentProjection = (snapshot) => {
108
- const values = snapshot.collections.comments.items.map(({ address, kind, text }) => ({
109
- offset: relativeAddress(address, snapshot.procedure.address),
110
+ const values = snapshot.dossier.comments.map(({ address, kind, text }) => ({
111
+ offset: relativeAddress(address, snapshot.dossier.procedure.address),
110
112
  kind,
111
113
  text,
112
114
  }));
@@ -114,14 +116,14 @@ export const commentProjection = (snapshot) => {
114
116
  };
115
117
  export const stringAndNameProjection = (snapshot) => {
116
118
  const values = [
117
- ...snapshot.collections.referenced_strings.items.map(({ source_address: sourceAddress, value }) => ({
119
+ ...snapshot.dossier.referenced_strings.map(({ source_address: sourceAddress, value }) => ({
118
120
  kind: "string",
119
- source_offset: relativeAddress(sourceAddress, snapshot.procedure.address),
121
+ source_offset: relativeAddress(sourceAddress, snapshot.dossier.procedure.address),
120
122
  value,
121
123
  })),
122
- ...snapshot.collections.referenced_names.items.map(({ source_address: sourceAddress, value }) => ({
124
+ ...snapshot.dossier.referenced_names.map(({ source_address: sourceAddress, value }) => ({
123
125
  kind: "name",
124
- source_offset: relativeAddress(sourceAddress, snapshot.procedure.address),
126
+ source_offset: relativeAddress(sourceAddress, snapshot.dossier.procedure.address),
125
127
  value,
126
128
  })),
127
129
  ];
@@ -134,21 +136,8 @@ export const sorted = (values) => values
134
136
  value,
135
137
  json: canonicalJson(value, "Function normalization"),
136
138
  }))
137
- .sort((left, right) => {
138
- // Preserve existing collation while ordering distinct values within a tie.
139
- return (left.json.localeCompare(right.json) ||
140
- compareCodePoints(left.json, right.json));
141
- })
139
+ .sort((left, right) => compareCodePoints(left.json, right.json))
142
140
  .map(({ value }) => value);
143
- export const combineCoverage = (left, right) => {
144
- return {
145
- items: [...left.items, ...right.items],
146
- total: left.total + right.total,
147
- complete: true,
148
- truncated: false,
149
- };
150
- };
151
- export const project = (collection, mapper) => collection.items.map(mapper);
152
141
  export const isAutoName = (name) => /^(?:sub_[0-9a-f]+|fcn\.[0-9a-f]+)$/iu.test(name);
153
142
  const parseAddress = (value) => /^0x[0-9a-f]+$/iu.test(value) ? BigInt(value) : null;
154
143
  const relativeAddress = (value, base) => {
@@ -26,7 +26,7 @@ export const dimensionResult = (input) => {
26
26
  };
27
27
  export const unresolvedDimension = (input) => ({
28
28
  dimension: input.dimension,
29
- status: input.status,
29
+ status: "unknown",
30
30
  left_digest: null,
31
31
  right_digest: null,
32
32
  left_count: input.leftCount,
@@ -37,8 +37,6 @@ export const unresolvedDimension = (input) => ({
37
37
  limitations: [...input.limitations],
38
38
  });
39
39
  export const overallStatus = (dimensions, match) => {
40
- if (dimensions.some(({ status }) => status === "truncated"))
41
- return "truncated";
42
40
  if (match === "ambiguous" ||
43
41
  dimensions.some(({ status }) => status === "unknown"))
44
42
  return "unknown";
@@ -51,7 +49,6 @@ export const overallStatus = (dimensions, match) => {
51
49
  export const summarize = (dimensions) => ({
52
50
  unchanged: dimensions.filter(({ status }) => status === "unchanged").length,
53
51
  changed: dimensions.filter(({ status }) => status === "changed").length,
54
- truncated: dimensions.filter(({ status }) => status === "truncated").length,
55
52
  unknown: dimensions.filter(({ status }) => status === "unknown").length,
56
53
  });
57
54
  const digest = (value) => canonicalDigest(value, "Function comparison");
@@ -2,12 +2,7 @@ import { z } from "zod";
2
2
  import { evidenceSchema } from "./evidence.js";
3
3
  import { digestSchema } from "./../domain/digests.js";
4
4
  import { prefixedDigestSchema } from "./../domain/digests.js";
5
- const comparisonStatusSchema = z.enum([
6
- "unchanged",
7
- "changed",
8
- "truncated",
9
- "unknown",
10
- ]);
5
+ const comparisonStatusSchema = z.enum(["unchanged", "changed", "unknown"]);
11
6
  const dimensionNameSchema = z.enum([
12
7
  "identity",
13
8
  "pseudocode",
@@ -55,7 +50,7 @@ const functionDimensionSchema = z.union([
55
50
  }),
56
51
  z.object({
57
52
  ...functionDimensionContextShape,
58
- status: z.enum(["truncated", "unknown"]),
53
+ status: z.literal("unknown"),
59
54
  left_digest: z.null(),
60
55
  right_digest: z.null(),
61
56
  text_delta: z.null(),
@@ -85,7 +80,6 @@ export const functionComparisonResultSchema = z.object({
85
80
  summary: z.object({
86
81
  unchanged: z.number().int().min(0),
87
82
  changed: z.number().int().min(0),
88
- truncated: z.number().int().min(0),
89
83
  unknown: z.number().int().min(0),
90
84
  }),
91
85
  dimensions: z.array(functionDimensionSchema).length(8),
@@ -1,16 +1,5 @@
1
1
  import { parseEvidence } from "./evidence.js";
2
2
  import { functionDossierSchema } from "./hopperValues.js";
3
- const DOSSIER_COLLECTION_FIELDS = [
4
- "assembly",
5
- "comments",
6
- "callers",
7
- "callees",
8
- "incoming_references",
9
- "outgoing_references",
10
- "referenced_strings",
11
- "referenced_names",
12
- "basic_blocks",
13
- ];
14
3
  /** Parse one complete analyze_function Evidence record for comparison workflows. */
15
4
  export const parseFunctionEvidence = (input) => {
16
5
  const evidence = parseEvidence(input);
@@ -20,35 +9,11 @@ export const parseFunctionEvidence = (input) => {
20
9
  throw new TypeError("Function comparison requires artifact-bound Evidence");
21
10
  const dossier = functionDossierSchema.parse(evidence.normalized_result);
22
11
  return {
23
- evidence: [evidence],
24
- procedure: dossier.procedure,
25
- provider: evidence.provider,
12
+ evidence,
26
13
  subject: evidence.subject,
27
- pseudocode: {
28
- text: dossier.pseudocode,
29
- total: [...dossier.pseudocode].length,
30
- complete: true,
31
- truncated: false,
32
- },
33
- collections: {
34
- assembly: completeCollection(dossier.assembly),
35
- comments: completeCollection(dossier.comments),
36
- callers: completeCollection(dossier.callers),
37
- callees: completeCollection(dossier.callees),
38
- incoming_references: completeCollection(dossier.incoming_references),
39
- outgoing_references: completeCollection(dossier.outgoing_references),
40
- referenced_strings: completeCollection(dossier.referenced_strings),
41
- referenced_names: completeCollection(dossier.referenced_names),
42
- basic_blocks: completeCollection(dossier.basic_blocks),
43
- },
14
+ dossier,
44
15
  limitations: [
45
16
  ...new Set([...evidence.limitations, ...dossier.limitations]),
46
17
  ].sort((left, right) => left.localeCompare(right)),
47
18
  };
48
19
  };
49
- const completeCollection = (items) => ({
50
- items,
51
- total: items.length,
52
- complete: true,
53
- truncated: false,
54
- });
@@ -9,13 +9,19 @@ export class HopperTimeoutError extends HopperError {
9
9
  operation;
10
10
  requestId;
11
11
  providerState;
12
+ stage;
13
+ launcherOutcome;
12
14
  _tag = "HopperTimeoutError";
13
- constructor(timeoutMs, operation, requestId, providerState = "not_started") {
15
+ constructor(timeoutMs, operation, requestId, providerState = "not_started", stage = operation === undefined
16
+ ? "launch"
17
+ : "analysis", launcherOutcome) {
14
18
  super(`Hopper ${operation === undefined ? "startup" : operation} timed out after ${String(timeoutMs)}ms`);
15
19
  this.timeoutMs = timeoutMs;
16
20
  this.operation = operation;
17
21
  this.requestId = requestId;
18
22
  this.providerState = providerState;
23
+ this.stage = stage;
24
+ this.launcherOutcome = launcherOutcome;
19
25
  }
20
26
  }
21
27
  /** The caller cancelled a Hopper operation before it completed. */
@@ -51,18 +57,31 @@ export class HopperProcessError extends HopperError {
51
57
  diagnostic;
52
58
  operation;
53
59
  requestId;
60
+ launcherFailure;
54
61
  _tag = "HopperProcessError";
55
62
  failureCode;
56
63
  userMessage;
57
- constructor(exitCode, diagnostic, operation, requestId) {
64
+ providerState;
65
+ stage;
66
+ constructor(exitCode, diagnostic, operation, requestId, providerState, stage, launcherFailure) {
58
67
  super(`Hopper bridge stopped unexpectedly with code ${String(exitCode)}`);
59
68
  this.exitCode = exitCode;
60
69
  this.diagnostic = diagnostic;
61
70
  this.operation = operation;
62
71
  this.requestId = requestId;
72
+ this.launcherFailure = launcherFailure;
63
73
  const failure = hopperStartupFailure(exitCode);
74
+ this.stage =
75
+ stage ??
76
+ (failure === undefined
77
+ ? operation === undefined
78
+ ? "connection"
79
+ : "analysis"
80
+ : "launch");
64
81
  this.failureCode = failure?.code;
65
82
  this.userMessage = failure?.message;
83
+ this.providerState =
84
+ providerState ?? (exitCode === null ? "unknown" : "exited");
66
85
  }
67
86
  }
68
87
  /** Hopper or the repository bridge could not be started. */
@@ -70,9 +89,11 @@ export class HopperStartError extends HopperError {
70
89
  _tag = "HopperStartError";
71
90
  userMessage;
72
91
  ownerRunId;
92
+ launcherFailure;
73
93
  constructor(options) {
74
94
  super("Hopper application bridge could not be started", options);
75
95
  this.userMessage = options?.userMessage;
76
96
  this.ownerRunId = options?.ownerRunId;
97
+ this.launcherFailure = options?.launcherFailure;
77
98
  }
78
99
  }