rea-agents 6.1.0 → 6.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (573) hide show
  1. package/README.md +24 -24
  2. package/bridge/ghidra/ReaGhidraBridge.java +32 -4
  3. package/bridge/hopper_bridge.py +8 -1
  4. package/dist/android/JadxConfiguration.js +87 -7
  5. package/dist/android/JadxMcpTransport.js +14 -2
  6. package/dist/android/JadxProvider.js +64 -36
  7. package/dist/android/JadxSession.js +51 -9
  8. package/dist/application/BinaryTargetResolver.js +68 -20
  9. package/dist/application/BrowserEvidence.js +3 -8
  10. package/dist/application/BrowserScenarioEvidence.js +4 -20
  11. package/dist/application/CapabilityInventory.js +43 -9
  12. package/dist/application/ClientConfigurationDocument.js +97 -25
  13. package/dist/application/ClientRegistrationStatus.js +19 -6
  14. package/dist/application/DirectAnalysis.js +41 -20
  15. package/dist/application/DirectAnalysisCleanup.js +71 -0
  16. package/dist/application/DirectAnalysisStatus.js +3 -7
  17. package/dist/application/Doctor.js +40 -53
  18. package/dist/application/DoctorDiagnostics.js +2 -3
  19. package/dist/application/EnhancedTools.js +51 -6
  20. package/dist/application/EvidenceBundleFiles.js +8 -3
  21. package/dist/application/InvestigationProviders.js +13 -5
  22. package/dist/application/JsonFiles.js +56 -23
  23. package/dist/application/LinuxHopper.js +11 -7
  24. package/dist/application/MacHopper.js +15 -18
  25. package/dist/application/RealHopperAssertions.js +0 -11
  26. package/dist/application/ReconstructionObligationCandidates.js +10 -3
  27. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -1
  28. package/dist/application/ReferenceSourceImportEntries.js +1 -1
  29. package/dist/application/RegularFileRead.js +17 -0
  30. package/dist/application/Setup.js +26 -23
  31. package/dist/application/SetupClientConfiguration.js +18 -7
  32. package/dist/application/SetupHost.js +20 -29
  33. package/dist/application/SetupPlan.js +24 -20
  34. package/dist/application/SetupSkill.js +57 -8
  35. package/dist/application/SupportedClients.js +43 -0
  36. package/dist/application/Uninstall.js +98 -30
  37. package/dist/application/UpdateMaintenance.js +13 -7
  38. package/dist/application/UpdateRuntime.js +12 -12
  39. package/dist/application/Utf8JsonInput.js +64 -0
  40. package/dist/application/WebScriptExportService.js +38 -5
  41. package/dist/application/WorkflowEvidence.js +25 -2
  42. package/dist/application/XrefsAddressResolution.js +45 -0
  43. package/dist/application/analysisView/AnalysisViewService.js +76 -0
  44. package/dist/application/android/AndroidAnalysisService.js +1 -1
  45. package/dist/application/binary/AnalysisClientCleanup.js +30 -5
  46. package/dist/application/binary/AnalysisProviderEvaluation.js +1 -2
  47. package/dist/application/binary/AnalysisProviderRegistry.js +2 -6
  48. package/dist/application/binary/AnalysisSnapshotCache.js +13 -10
  49. package/dist/application/binary/BinarySession.js +86 -29
  50. package/dist/application/binary/BinarySessionComposition.js +1 -3
  51. package/dist/application/binary/BinarySessionExecution.js +3 -5
  52. package/dist/application/binary/BinarySessionOpen.js +10 -2
  53. package/dist/application/binary/BinarySessionRecords.js +1 -1
  54. package/dist/application/binary/BinarySessionStatus.js +1 -6
  55. package/dist/application/binary/CompositeProvider.js +4 -18
  56. package/dist/application/binary/LazyAnalysisProvider.js +5 -5
  57. package/dist/application/binary/SessionProviderRouter.js +27 -135
  58. package/dist/application/homebrew.js +48 -0
  59. package/dist/application/javascript/ElectronActiveEvidence.js +10 -14
  60. package/dist/application/javascript/ElectronBoundaryAnalysis.js +2 -2
  61. package/dist/application/javascript/ElectronBoundaryGraphNative.js +5 -1
  62. package/dist/application/javascript/JavaScriptApplicationEvidence.js +3 -6
  63. package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +107 -46
  64. package/dist/application/javascript/JavaScriptApplicationService.js +7 -1
  65. package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +59 -45
  66. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +5 -9
  67. package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +19 -27
  68. package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +11 -3
  69. package/dist/application/javascript/JavaScriptArtifactGraphContext.js +9 -0
  70. package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +8 -5
  71. package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +46 -29
  72. package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +0 -1
  73. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +86 -27
  74. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +52 -9
  75. package/dist/application/javascript/JavaScriptArtifactReconstructionInput.js +1 -0
  76. package/dist/application/javascript/JavaScriptJsonModules.js +2 -2
  77. package/dist/application/javascript/JavaScriptModuleRelationships.js +6 -18
  78. package/dist/application/javascript/JavaScriptRuntimeObservationService.js +3 -3
  79. package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +11 -27
  80. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +4 -5
  81. package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +8 -6
  82. package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +2 -3
  83. package/dist/application/javascript/JavaScriptSemanticGraphConstruction.js +7 -5
  84. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +3 -4
  85. package/dist/application/javascript/JavaScriptSemanticGraphEvidence.js +1 -1
  86. package/dist/application/javascript/JavaScriptSemanticGraphFingerprintProjection.js +2 -2
  87. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +3 -7
  88. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +76 -47
  89. package/dist/application/javascript/JavaScriptSemanticGraphProjection.js +4 -4
  90. package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +3 -4
  91. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +51 -25
  92. package/dist/application/javascript/JavaScriptSemanticTraceService.js +15 -10
  93. package/dist/application/managed/ManagedMemberComparisonService.js +2 -1
  94. package/dist/application/managed/ManagedNativeVerificationService.js +2 -1
  95. package/dist/application/native/NativeCallRoutes.js +2 -4
  96. package/dist/application/process/ProcessCli.js +11 -11
  97. package/dist/application/process/ProcessEvidence.js +0 -1
  98. package/dist/artifacts/ArtifactProvider.js +53 -30
  99. package/dist/artifacts/ArtifactProviderMetadata.js +1 -4
  100. package/dist/artifacts/ArtifactReader.js +31 -0
  101. package/dist/artifacts/AsarArtifactReader.js +81 -17
  102. package/dist/artifacts/DirectoryArtifactReader.js +2 -1
  103. package/dist/artifacts/MachOSliceArtifactReader.js +9 -2
  104. package/dist/artifacts/NativeDmgArtifactReader.js +207 -77
  105. package/dist/artifacts/NativeDmgOwnership.js +109 -0
  106. package/dist/artifacts/SafeOutputTree.js +16 -2
  107. package/dist/artifacts/ZipArtifactReader.js +11 -4
  108. package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +4 -2
  109. package/dist/artifacts/apple/DylibResolutionReader.js +17 -7
  110. package/dist/artifacts/apple/KeyedArchiveReader.js +68 -42
  111. package/dist/artifacts/apple/MachoLoadCommandReader.js +36 -6
  112. package/dist/artifacts/extraction/ArtifactExtraction.js +104 -29
  113. package/dist/artifacts/inventory/ArtifactGraphConstruction.js +71 -66
  114. package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
  115. package/dist/artifacts/inventory/classify.js +33 -14
  116. package/dist/artifacts/inventory/hashStableRootArtifact.js +37 -0
  117. package/dist/artifacts/inventory/reader.js +3 -3
  118. package/dist/artifacts/inventory/scanCanonical.js +64 -34
  119. package/dist/artifacts/inventory/scanReader.js +12 -20
  120. package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +65 -27
  121. package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
  122. package/dist/browser/CdpBrowserProvider.js +6 -6
  123. package/dist/browser/CdpCaptureEventHandlers.js +2 -4
  124. package/dist/browser/CdpCaptureEvents.js +0 -1
  125. package/dist/browser/CdpCaptureStorageFingerprints.js +3 -3
  126. package/dist/browser/CdpCaptureValues.js +20 -0
  127. package/dist/browser/CdpElectronInspection.js +2 -2
  128. package/dist/browser/CdpElectronProvider.js +4 -5
  129. package/dist/browser/CdpElectronScriptEvents.js +2 -8
  130. package/dist/browser/CdpElectronScripts.js +4 -5
  131. package/dist/browser/CdpPageCaptureScripts.js +2 -3
  132. package/dist/browser/CdpSafeMetadata.js +10 -10
  133. package/dist/browser/CdpWebMcpDiscovery.js +16 -13
  134. package/dist/browser/PlaywrightBrowserScenarioProvider.js +64 -49
  135. package/dist/browser/PlaywrightElectronActiveActions.js +2 -56
  136. package/dist/browser/PlaywrightElectronActiveProvider.js +10 -6
  137. package/dist/browser/PlaywrightScenarioArtifacts.js +1 -1
  138. package/dist/browser/PlaywrightScenarioBrowser.js +269 -66
  139. package/dist/browser/PlaywrightScenarioEvents.js +1 -1
  140. package/dist/browser/PlaywrightScenarioSession.js +41 -32
  141. package/dist/browser/WebSourceMapFetcher.js +32 -6
  142. package/dist/browser/assets/ScenarioScriptCapture.js +8 -12
  143. package/dist/browser/assets/ScriptCaptureAdapters.js +1 -1
  144. package/dist/browser/history/CaptureFailures.js +6 -2
  145. package/dist/browser/history/MitmproxyCaptureAdapter.js +4 -2
  146. package/dist/catalogIdentity.js +0 -1
  147. package/dist/cli/analysisViewCommands.js +36 -0
  148. package/dist/cli/artifactCommands.js +11 -12
  149. package/dist/cli/coreAnalysisCommands.js +3 -3
  150. package/dist/cli/coreBinaryCommands.js +37 -28
  151. package/dist/cli/coreNativeCommands.js +9 -10
  152. package/dist/cli/electronCommands.js +12 -13
  153. package/dist/cli/interactiveSetup.js +6 -6
  154. package/dist/cli/javascriptApplicationAnalysis.js +2 -12
  155. package/dist/cli/jsonOutput.js +3 -2
  156. package/dist/cli/managedCommands.js +7 -8
  157. package/dist/cli/nativeCallCommands.js +1 -2
  158. package/dist/cli/omittableDefaults.js +50 -0
  159. package/dist/cli/processCommands.js +3 -2
  160. package/dist/cli/setupCommands.js +16 -15
  161. package/dist/cli/streamedJsonOutput.js +83 -4
  162. package/dist/cli/utilityCommands.js +10 -12
  163. package/dist/cli.js +19 -8
  164. package/dist/cliBrowserScenarioCommands.js +2 -2
  165. package/dist/cliCommandNames.js +1 -0
  166. package/dist/cliJsonFile.js +179 -0
  167. package/dist/cliJsonInput.js +60 -33
  168. package/dist/cliObservationOptions.js +4 -0
  169. package/dist/cliOutput.js +0 -38
  170. package/dist/composition/auxiliaryAnalysisProviders.js +30 -25
  171. package/dist/composition/binary.js +9 -9
  172. package/dist/composition/browserScenario.js +2 -1
  173. package/dist/composition/directAnalysis.js +20 -14
  174. package/dist/composition/electronScenario.js +1 -1
  175. package/dist/composition/optionalObservationProviders.js +12 -7
  176. package/dist/config/environment.js +6 -0
  177. package/dist/config/ghidraStartupTimeout.js +4 -9
  178. package/dist/config/homeDirectory.js +12 -0
  179. package/dist/config/mcpResponseBudget.js +9 -1
  180. package/dist/config/parseConfig.js +7 -3
  181. package/dist/config/parsers.js +19 -22
  182. package/dist/contracts/analysisViewToolContracts.js +56 -0
  183. package/dist/contracts/applicationToolContracts.js +5 -4
  184. package/dist/contracts/artifactComparisonExample.js +7 -7
  185. package/dist/contracts/artifactToolContracts.js +1 -1
  186. package/dist/contracts/browserScenarioToolContracts.js +1 -1
  187. package/dist/contracts/browserToolContracts.js +19 -15
  188. package/dist/contracts/enhancedInputs.js +2 -2
  189. package/dist/contracts/enhancedToolContracts.js +4 -3
  190. package/dist/contracts/errorSchemas.js +3 -1
  191. package/dist/contracts/evm/evmToolContracts.js +1 -1
  192. package/dist/contracts/functionComparisonExample.js +8 -0
  193. package/dist/contracts/functionWorkflowToolContracts.js +1 -1
  194. package/dist/contracts/inputSchemaPresentation.js +181 -0
  195. package/dist/contracts/investigationExamples.js +4 -3
  196. package/dist/contracts/javascript/electronToolContracts.js +3 -2
  197. package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +3 -22
  198. package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +248 -0
  199. package/dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js +1 -1
  200. package/dist/contracts/javascript/javascriptRuntimeReconciliationExample.js +8 -7
  201. package/dist/contracts/managed/managedToolContracts.js +8 -12
  202. package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
  203. package/dist/contracts/mobileApplicationGraphExamples.js +8 -8
  204. package/dist/contracts/native/binaryDiagnosticsToolContracts.js +1 -1
  205. package/dist/contracts/native/nativeToolContracts.js +2 -2
  206. package/dist/contracts/officialToolContracts.js +2 -1
  207. package/dist/contracts/promptContracts.js +2 -2
  208. package/dist/contracts/providerSelection.js +1 -1
  209. package/dist/contracts/sessionLifecycleInputs.js +4 -3
  210. package/dist/contracts/sessionStatusContract.js +3 -2
  211. package/dist/contracts/sessionToolContracts.js +17 -4
  212. package/dist/contracts/sessionToolSchemas.js +4 -16
  213. package/dist/contracts/toolContracts.js +2 -0
  214. package/dist/contracts/toolEffects.js +1 -0
  215. package/dist/contracts/toolOutputSchemaGroups.js +138 -94
  216. package/dist/contracts/toolOutputSchemaPrimitives.js +13 -26
  217. package/dist/contracts/toolSchemaMetadata.js +18 -69
  218. package/dist/contracts/webNetworkCaptureToolContracts.js +1 -1
  219. package/dist/contracts/webRuntimeToolContracts.js +1 -1
  220. package/dist/contracts/webScriptToolContracts.js +1 -1
  221. package/dist/doctorRuntime.js +7 -5
  222. package/dist/domain/analysisErrorBase.js +5 -0
  223. package/dist/domain/analysisErrorCore.js +3 -0
  224. package/dist/domain/analysisErrorPresentation.js +22 -5
  225. package/dist/domain/analysisErrorProjection.js +24 -5
  226. package/dist/domain/analysisSnapshot.js +31 -31
  227. package/dist/domain/analysisView/analysisView.js +241 -0
  228. package/dist/domain/analysisView/analysisViewCoverage.js +19 -0
  229. package/dist/domain/analysisView/binaryLayoutView.js +159 -0
  230. package/dist/domain/analysisView/javascriptApplicationView.js +238 -0
  231. package/dist/domain/android/androidApplication.js +1 -1
  232. package/dist/domain/android/androidPartialObservation.js +36 -0
  233. package/dist/domain/apple/appleApplication.js +1 -1
  234. package/dist/domain/apple/dylibResolution.js +10 -3
  235. package/dist/domain/apple/interfaceBuilderGraph.js +0 -1
  236. package/dist/domain/apple/keyedArchive.js +26 -2
  237. package/dist/domain/artifactComparison.js +15 -6
  238. package/dist/domain/artifactGraph.js +17 -4
  239. package/dist/domain/artifactIdentity.js +8 -8
  240. package/dist/domain/artifactInspection.js +8 -8
  241. package/dist/domain/artifactInventoryEvidence.js +9 -16
  242. package/dist/domain/artifactOperationError.js +3 -3
  243. package/dist/domain/artifactPartialObservation.js +1 -0
  244. package/dist/domain/artifactPathSyntax.js +49 -0
  245. package/dist/domain/binaryTarget.js +39 -13
  246. package/dist/domain/browserCaptureComparison.js +13 -49
  247. package/dist/domain/browserCompleteness.js +3 -2
  248. package/dist/domain/browserNetworkEvidence.js +10 -4
  249. package/dist/domain/browserObservation.js +0 -1
  250. package/dist/domain/browserObservationSchemas.js +14 -3
  251. package/dist/domain/browserScenario.js +0 -1
  252. package/dist/domain/browserScenarioCapture.js +1 -2
  253. package/dist/domain/browserScenarioCaptureValues.js +2 -2
  254. package/dist/domain/browserScenarioDiff.js +0 -2
  255. package/dist/domain/browserScenarioDiffEvidence.js +0 -12
  256. package/dist/domain/browserScenarioDiffValues.js +2 -2
  257. package/dist/domain/browserScenarioNormalization.js +3 -3
  258. package/dist/domain/browserScenarioValues.js +6 -6
  259. package/dist/domain/callPath.js +15 -18
  260. package/dist/domain/callPathSchemas.js +2 -2
  261. package/dist/domain/canonicalDigest.js +7 -1
  262. package/dist/domain/canonicalOrdering.js +1 -13
  263. package/dist/domain/changedBehavior.js +5 -6
  264. package/dist/domain/comparisonSemantics.js +0 -5
  265. package/dist/domain/completionLedgerGeneration.js +2 -1
  266. package/dist/domain/configurationErrors.js +12 -0
  267. package/dist/domain/conformancePackage.js +4 -3
  268. package/dist/domain/digests.js +0 -3
  269. package/dist/domain/evidence.js +19 -40
  270. package/dist/domain/evidenceBundle.js +58 -42
  271. package/dist/domain/evidenceCompletionLedger.js +2 -1
  272. package/dist/domain/firmware/firmwareAnalysis.js +4 -3
  273. package/dist/domain/functionComparison.js +6 -6
  274. package/dist/domain/functionComparisonDimensions.js +120 -87
  275. package/dist/domain/functionComparisonNormalization.js +26 -36
  276. package/dist/domain/functionComparisonResults.js +3 -6
  277. package/dist/domain/functionComparisonSchemas.js +2 -8
  278. package/dist/domain/functionDossierEvidence.js +4 -38
  279. package/dist/domain/hopperValues.js +11 -15
  280. package/dist/domain/javascript/electronActiveObservation.js +29 -71
  281. package/dist/domain/javascript/electronObservation.js +14 -3
  282. package/dist/domain/javascript/electronStaticAnalysisBrowser.js +12 -11
  283. package/dist/domain/javascript/electronStaticAnalysisIpc.js +11 -2
  284. package/dist/domain/javascript/electronStaticAnalysisNative.js +7 -4
  285. package/dist/domain/javascript/electronStaticAnalysisValues.js +8 -4
  286. package/dist/domain/javascript/javascriptApplicationAnalysis.js +3 -1
  287. package/dist/domain/javascript/javascriptApplicationChangeGraph.js +12 -8
  288. package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +6 -0
  289. package/dist/domain/javascript/javascriptApplicationGraph.js +41 -16
  290. package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +9 -2
  291. package/dist/domain/javascript/javascriptApplicationVersionComparison.js +4 -4
  292. package/dist/domain/javascript/javascriptApplicationVersionComparisonSchemas.js +37 -22
  293. package/dist/domain/javascript/javascriptApplicationVersionItems.js +50 -36
  294. package/dist/domain/javascript/javascriptApplicationVersionKeys.js +9 -8
  295. package/dist/domain/javascript/javascriptAstFingerprint.js +2 -2
  296. package/dist/domain/javascript/javascriptAstValues.js +22 -0
  297. package/dist/{application/javascript/JavaScriptReturnShapeProjection.js → domain/javascript/javascriptExportReturnShapeProjection.js} +4 -4
  298. package/dist/domain/javascript/javascriptExportShapeComparison.js +10 -3
  299. package/dist/domain/javascript/javascriptExportShapeComparisonIdentity.js +6 -1
  300. package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +58 -22
  301. package/dist/domain/javascript/javascriptExportShapeSelection.js +7 -7
  302. package/dist/domain/javascript/javascriptExportShapeVariants.js +70 -16
  303. package/dist/domain/javascript/javascriptFeatureSeed.js +25 -3
  304. package/dist/domain/javascript/javascriptFeatureTrace.js +7 -6
  305. package/dist/domain/javascript/javascriptFeatureTraceSchemas.js +17 -9
  306. package/dist/domain/javascript/javascriptFeatureTraversal.js +4 -5
  307. package/dist/domain/javascript/javascriptNativeHandoff.js +7 -7
  308. package/dist/domain/javascript/javascriptRuntimeLoadState.js +0 -1
  309. package/dist/domain/javascript/javascriptRuntimeObservation.js +18 -7
  310. package/dist/domain/javascript/javascriptRuntimeReconciliation.js +12 -6
  311. package/dist/domain/javascript/javascriptRuntimeReconciliationActive.js +9 -8
  312. package/dist/domain/javascript/javascriptRuntimeReconciliationCaptureParsing.js +212 -0
  313. package/dist/domain/javascript/javascriptRuntimeReconciliationGraph.js +5 -4
  314. package/dist/domain/javascript/javascriptRuntimeReconciliationInputValidation.js +28 -0
  315. package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +6 -6
  316. package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +12 -222
  317. package/dist/domain/javascript/javascriptRuntimeReconciliationResult.js +2 -2
  318. package/dist/domain/javascript/javascriptRuntimeReconciliationRuntime.js +15 -4
  319. package/dist/domain/javascript/javascriptRuntimeReconciliationSchemas.js +2 -2
  320. package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +7 -7
  321. package/dist/domain/javascript/javascriptSemanticAnalysis.js +209 -11
  322. package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +2 -1
  323. package/dist/domain/javascript/javascriptSemanticCallResolution.js +9 -7
  324. package/dist/domain/javascript/javascriptSemanticCalls.js +2 -1
  325. package/dist/domain/javascript/javascriptSemanticChildProcesses.js +4 -3
  326. package/dist/domain/javascript/javascriptSemanticCoverage.js +20 -0
  327. package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +7 -9
  328. package/dist/domain/javascript/javascriptSemanticDataEffects.js +4 -11
  329. package/dist/domain/javascript/javascriptSemanticFingerprints.js +2 -2
  330. package/dist/domain/javascript/javascriptSemanticGraph.js +220 -71
  331. package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +19 -1
  332. package/dist/domain/javascript/javascriptSemanticIr.js +0 -4
  333. package/dist/domain/javascript/javascriptSemanticIterationSources.js +106 -0
  334. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +515 -74
  335. package/dist/domain/javascript/javascriptSemanticMutationInitializers.js +190 -0
  336. package/dist/domain/javascript/javascriptSemanticMutationValues.js +44 -36
  337. package/dist/domain/javascript/javascriptSemanticObjects.js +79 -42
  338. package/dist/domain/javascript/javascriptSemanticPrimitives.js +8 -14
  339. package/dist/domain/javascript/javascriptSemanticProjection.js +21 -16
  340. package/dist/domain/javascript/javascriptSemanticPromises.js +16 -21
  341. package/dist/domain/javascript/javascriptSemanticPropertyPaths.js +23 -0
  342. package/dist/domain/javascript/javascriptSemanticProvenance.js +3 -3
  343. package/dist/domain/javascript/javascriptSemanticQuery.js +8 -2
  344. package/dist/domain/javascript/javascriptSemanticQueryIdentity.js +3 -2
  345. package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -9
  346. package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +16 -10
  347. package/dist/domain/javascript/javascriptSemanticResourceLimits.js +1 -1
  348. package/dist/domain/javascript/javascriptSemanticResources.js +1 -1
  349. package/dist/domain/javascript/javascriptSemanticReturns.js +55 -44
  350. package/dist/domain/javascript/javascriptSemanticSlots.js +72 -0
  351. package/dist/domain/javascript/javascriptSemanticTraversal.js +6 -1
  352. package/dist/domain/javascript/javascriptSemanticValues.js +180 -76
  353. package/dist/domain/javascript/javascriptSourceMapPaths.js +114 -0
  354. package/dist/domain/javascript/javascriptSourceParser.js +34 -9
  355. package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +5 -6
  356. package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +2 -1
  357. package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +26 -16
  358. package/dist/domain/javascript/sourceToBundleComparison.js +19 -8
  359. package/dist/domain/javascript/sourceToBundleSignals.js +53 -25
  360. package/dist/domain/jsonSerialization.js +109 -55
  361. package/dist/domain/jsonShape.js +46 -19
  362. package/dist/domain/localPath.js +10 -4
  363. package/dist/domain/managed/managedApplicationGraph.js +10 -6
  364. package/dist/domain/managed/managedApplicationGraphNodes.js +82 -57
  365. package/dist/domain/managed/managedArtifact.js +6 -4
  366. package/dist/domain/managed/managedMemberComparison.js +2 -9
  367. package/dist/domain/managed/managedMemberComparisonMatch.js +6 -7
  368. package/dist/domain/managed/managedNativeVerification.js +0 -2
  369. package/dist/domain/managed/managedNativeVerificationMatch.js +9 -3
  370. package/dist/domain/native/binaryLayout.js +2 -3
  371. package/dist/domain/native/nativeApiBoundary.js +1 -1
  372. package/dist/domain/native/nativeCallObservation.js +3 -3
  373. package/dist/domain/native/nativeInstruction.js +7 -0
  374. package/dist/domain/native/nativeValueFlow.js +5 -11
  375. package/dist/domain/native/objcSwiftMetadata.js +15 -17
  376. package/dist/domain/native/recordedCrash.js +2 -3
  377. package/dist/domain/offsetDateTime.js +17 -0
  378. package/dist/domain/process/processCapture.js +22 -20
  379. package/dist/domain/process/processCaptureCoverage.js +70 -0
  380. package/dist/domain/process/processCaptureExample.js +45 -1
  381. package/dist/domain/process/processCaptureParsing.js +1 -34
  382. package/dist/domain/process/processCaptureValidation.js +82 -13
  383. package/dist/domain/process/processComparison.js +39 -43
  384. package/dist/domain/process/processObservation.js +10 -2
  385. package/dist/domain/process/processScenario.js +24 -2
  386. package/dist/domain/process/processTraceComparison.js +0 -2
  387. package/dist/domain/process/processTraceDimensionProjection.js +1 -1
  388. package/dist/domain/process/processTraceEvaluation.js +19 -15
  389. package/dist/domain/process/processTraceSpecification.js +4 -7
  390. package/dist/domain/providerAdapterError.js +2 -0
  391. package/dist/domain/providerCleanupError.js +6 -2
  392. package/dist/domain/reconstructionCoverage.js +7 -3
  393. package/dist/domain/reconstructionObligationLedgerSchemas.js +2 -1
  394. package/dist/domain/reconstructionReadinessSchemas.js +2 -1
  395. package/dist/domain/reconstructionUnknowns.js +4 -3
  396. package/dist/domain/reconstructionVerification.js +6 -5
  397. package/dist/domain/reconstructionVerificationSchemas.js +2 -1
  398. package/dist/domain/referenceSourceGraph.js +27 -28
  399. package/dist/domain/referenceSourceImportParsing.js +34 -45
  400. package/dist/domain/residualUnknown.js +3 -2
  401. package/dist/domain/staticRuntimeCorrelation.js +4 -3
  402. package/dist/domain/stringPatterns.js +6 -0
  403. package/dist/domain/swiftSymbolClassification.js +66 -0
  404. package/dist/domain/symbolAnalysis.js +83 -20
  405. package/dist/domain/unicodeCodePointOrder.js +6 -0
  406. package/dist/domain/webBundleAnalyzerInspection.js +9 -1
  407. package/dist/domain/webCaptureDiff.js +71 -30
  408. package/dist/domain/webCaptureDiffSchemas.js +8 -11
  409. package/dist/domain/webEventListeners.js +3 -2
  410. package/dist/domain/webExecution.js +3 -2
  411. package/dist/domain/webInventory.js +3 -2
  412. package/dist/domain/webMcpDiscovery.js +4 -3
  413. package/dist/domain/webRuntime.js +0 -2
  414. package/dist/domain/webScriptExport.js +2 -2
  415. package/dist/dotnet/ManagedArtifactInspector.js +2 -19
  416. package/dist/dotnet/ManagedMemberInspector.js +12 -18
  417. package/dist/dotnet/ManagedMemberInspectorCore.js +47 -44
  418. package/dist/dotnet/ManagedMemberInstructionDecoder.js +1 -2
  419. package/dist/dotnet/ManagedMemberRows.js +75 -62
  420. package/dist/dotnet/ManagedMetadataInventory.js +16 -22
  421. package/dist/dotnet/ManagedMethodBodyReader.js +4 -0
  422. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +109 -94
  423. package/dist/dotnet/ManagedNativeBoundaryInspector.js +12 -21
  424. package/dist/dotnet/ManagedReaderFailure.js +16 -0
  425. package/dist/dotnet/ManagedStaticProvider.js +13 -12
  426. package/dist/dotnet/ManagedStaticProviderMetadata.js +1 -4
  427. package/dist/evaluation/AgentEvaluationFixtures.js +250 -0
  428. package/dist/evaluation/AgentEvaluationReport.js +28 -0
  429. package/dist/evaluation/CodexAgentEval.js +12 -8
  430. package/dist/evaluation/KnownAnswerEvaluation.js +281 -0
  431. package/dist/evm/EvmoleInterfaceProvider.js +2 -1
  432. package/dist/filesystem/RegularFile.js +41 -0
  433. package/dist/firmware/FirmwareCommand.js +9 -5
  434. package/dist/firmware/FirmwareProvider.js +4 -4
  435. package/dist/generatedPackageMetadata.js +2 -2
  436. package/dist/ghidra/GhidraAnalysisProfile.js +3 -6
  437. package/dist/ghidra/GhidraClient.js +105 -36
  438. package/dist/ghidra/GhidraClientStartup.js +0 -2
  439. package/dist/ghidra/GhidraDoctor.js +6 -5
  440. package/dist/ghidra/GhidraFunctionValues.js +3 -5
  441. package/dist/ghidra/GhidraInstallation.js +151 -22
  442. package/dist/ghidra/GhidraJavaLaunch.js +6 -2
  443. package/dist/ghidra/GhidraLauncher.js +58 -26
  444. package/dist/ghidra/GhidraProvider.js +6 -2
  445. package/dist/ghidra/GhidraProviderCapabilities.js +6 -0
  446. package/dist/ghidra/GhidraProviderClient.js +13 -3
  447. package/dist/ghidra/GhidraSessionError.js +2 -0
  448. package/dist/ghidra/GhidraSessionRoot.js +39 -0
  449. package/dist/ghidra/extensions/GhidraExtensions.js +17 -10
  450. package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +8 -2
  451. package/dist/hopper/BridgeLauncher.js +34 -45
  452. package/dist/hopper/HopperAnalysisProfile.js +3 -8
  453. package/dist/hopper/HopperCleanup.js +56 -27
  454. package/dist/hopper/HopperClient.js +86 -65
  455. package/dist/hopper/HopperMachOImage.js +3 -2
  456. package/dist/hopper/HopperProvider.js +16 -18
  457. package/dist/hopper/HopperRegexSearch.js +3 -6
  458. package/dist/hopper/HopperTargetLease.js +132 -49
  459. package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -0
  460. package/dist/ida/IdaConfiguration.js +8 -3
  461. package/dist/ida/IdaInput.js +1 -7
  462. package/dist/ida/IdaMcpConnection.js +8 -4
  463. package/dist/ida/IdaOperationRunner.js +5 -3
  464. package/dist/ida/IdaProvider.js +8 -12
  465. package/dist/ida/IdaSessionClient.js +24 -20
  466. package/dist/ida/IdaWorkspace.js +12 -13
  467. package/dist/inspector/JavaScriptRuntimeScope.js +9 -5
  468. package/dist/inspector/V8InspectorCaptureProjection.js +47 -14
  469. package/dist/inspector/V8InspectorProvider.js +97 -35
  470. package/dist/javascript/recovery/WakaruCommand.js +7 -2
  471. package/dist/javascript/recovery/WakaruExecution.js +5 -2
  472. package/dist/main/shutdown.js +81 -29
  473. package/dist/main/startup.js +9 -2
  474. package/dist/main/transport.js +23 -3
  475. package/dist/main.js +11 -18
  476. package/dist/native/AppleMachoSelection.js +16 -6
  477. package/dist/native/AppleObjcDispatchFacets.js +3 -3
  478. package/dist/native/AppleObjcProperties.js +17 -7
  479. package/dist/native/CommandRunner.js +9 -7
  480. package/dist/native/LldbCallTracer.js +249 -77
  481. package/dist/native/NativeMacOSProvider.js +32 -17
  482. package/dist/native/NativeMacOSProviderMetadata.js +1 -2
  483. package/dist/native/NativeUiHelperRuntime.js +11 -2
  484. package/dist/native/NativeUiObservation.js +2 -2
  485. package/dist/native/pwntools/PwntoolsDecoder.js +2 -1
  486. package/dist/process/DarwinProcessRunTokenReader.js +16 -2
  487. package/dist/process/ExecFileOutput.js +88 -6
  488. package/dist/process/PrivateRuntimeRoot.js +10 -5
  489. package/dist/process/ProcessOwnership.js +1 -4
  490. package/dist/process/ProcessOwnershipObservation.js +18 -16
  491. package/dist/process/ProviderProcess.js +1 -3
  492. package/dist/process/capture/FilesystemSnapshot.js +131 -24
  493. package/dist/process/capture/ProcessCaptureError.js +13 -0
  494. package/dist/process/capture/ProcessCaptureLifecycle.js +148 -74
  495. package/dist/process/capture/ProcessFilesystemEffects.js +51 -6
  496. package/dist/process/capture/ProcessHarness.js +16 -33
  497. package/dist/process/capture/ProcessNormalization.js +20 -2
  498. package/dist/process/capture/ProcessSampling.js +25 -2
  499. package/dist/process/capture/TerminalRenderer.js +14 -0
  500. package/dist/process/snapshotEnvironment.js +14 -0
  501. package/dist/server/EvidenceMcpServer.js +25 -14
  502. package/dist/server/analysisAdmission.js +8 -0
  503. package/dist/server/createServer.js +71 -59
  504. package/dist/server/mcpClientMetadata.js +12 -5
  505. package/dist/server/promptCompletion.js +3 -8
  506. package/dist/server/registerAnalysisViewTool.js +15 -0
  507. package/dist/server/registerAndroidTools.js +2 -3
  508. package/dist/server/registerApplicationTools/compareExportShapes.js +6 -6
  509. package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
  510. package/dist/server/registerApplicationTools/compareVersions.js +4 -5
  511. package/dist/server/registerApplicationTools/coverage.js +1 -2
  512. package/dist/server/registerApplicationTools/helpers.js +4 -4
  513. package/dist/server/registerApplicationTools/obligationLedger.js +4 -5
  514. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -4
  515. package/dist/server/registerApplicationTools/traceFeature.js +4 -5
  516. package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
  517. package/dist/server/registerArtifactComparisonTool.js +4 -5
  518. package/dist/server/registerArtifactTools.js +2 -2
  519. package/dist/server/registerBinaryDiagnosticsTools.js +2 -3
  520. package/dist/server/registerBrowserScenarioTool.js +3 -4
  521. package/dist/server/registerBrowserTools.js +13 -16
  522. package/dist/server/registerBundleComparisonTool.js +5 -6
  523. package/dist/server/registerCloseLifecycleTool.js +8 -7
  524. package/dist/server/registerElectronTools.js +10 -13
  525. package/dist/server/registerEnhancedTools.js +82 -77
  526. package/dist/server/registerEvidenceTools.js +54 -47
  527. package/dist/server/registerEvmTools.js +2 -3
  528. package/dist/server/registerFirmwareTools.js +2 -3
  529. package/dist/server/registerFunctionComparisonTool.js +7 -8
  530. package/dist/server/registerInvestigationTools.js +14 -15
  531. package/dist/server/registerJavaScriptRecoveryTool.js +2 -3
  532. package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -6
  533. package/dist/server/registerManagedTools.js +7 -4
  534. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +5 -6
  535. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -5
  536. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +6 -7
  537. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +6 -7
  538. package/dist/server/registerOfficialTools.js +32 -41
  539. package/dist/server/registerProcessComparisonTool.js +8 -8
  540. package/dist/server/registerRecordedCrashTools.js +2 -3
  541. package/dist/server/registerSessionRecordTools.js +15 -19
  542. package/dist/server/registerSessionStatusTool.js +3 -4
  543. package/dist/server/registerSessionTools.js +19 -19
  544. package/dist/server/registerWebModuleTool.js +2 -3
  545. package/dist/server/registerWebNetworkCaptureTool.js +2 -3
  546. package/dist/server/registerWebRuntimeTools.js +4 -5
  547. package/dist/server/registerWebScriptTool.js +2 -3
  548. package/dist/server/registerWebSourceLocationTool.js +2 -3
  549. package/dist/server/toolResult.js +66 -94
  550. package/dist/server/toolResultEncoding.js +11 -10
  551. package/dist/windows/WindowsNativeLoader.js +1 -0
  552. package/dist/windows/WindowsOwnedProcess.js +60 -15
  553. package/dist/windows/WindowsPrivateRuntime.js +7 -8
  554. package/native/windows/README.md +3 -1
  555. package/native/windows/build/manifest.json +2 -2
  556. package/native/windows/build/rea-windows-x64.node +0 -0
  557. package/package.json +42 -30
  558. package/scripts/rea.mjs +3 -6
  559. package/skills/reverse-engineer-anything/SKILL.md +14 -13
  560. package/skills/reverse-engineer-anything/references/android-applications.md +6 -3
  561. package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -4
  562. package/skills/reverse-engineer-anything/references/javascript-applications.md +16 -6
  563. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +18 -0
  564. package/dist/artifacts/inventory/policy.js +0 -2
  565. package/dist/config.js +0 -1
  566. package/dist/contracts/browserCaptureToolInputSchema.js +0 -43
  567. package/dist/contracts/process/processCaptureExample.js +0 -2
  568. package/dist/contracts/toolOutputSchemas.js +0 -2
  569. package/dist/domain/managed/managedApplicationGraphNodeCoverage.js +0 -6
  570. package/dist/main/reload.js +0 -12
  571. package/dist/main/state.js +0 -3
  572. package/dist/server/registerNativeTools.js +0 -6
  573. package/dist/server/sessionToolPolicies.js +0 -2
@@ -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
- import { compareCodePoints } from "./canonicalOrdering.js";
2
+ import { compareUnicodeCodePoints } from "./unicodeCodePointOrder.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,22 +136,10 @@ 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) => compareUnicodeCodePoints(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
- export const isAutoName = (name) => /^(?:sub_[0-9a-f]+|fcn\.[0-9a-f]+)$/iu.test(name);
141
+ /** Recognize address-derived procedure names without excluding named FUN_ symbols. */
142
+ export const isAutoName = (name) => /^(?:sub_[0-9a-f]+|fcn\.[0-9a-f]+|FUN_[0-9a-f]+)$/iu.test(name);
153
143
  const parseAddress = (value) => /^0x[0-9a-f]+$/iu.test(value) ? BigInt(value) : null;
154
144
  const relativeAddress = (value, base) => {
155
145
  const parsed = parseAddress(value);
@@ -1,4 +1,4 @@
1
- import { canonicalDigest } from "./comparisonSemantics.js";
1
+ import { digestCanonicalValue } from "./canonicalDigest.js";
2
2
  export const dimensionResult = (input) => {
3
3
  const context = {
4
4
  dimension: input.dimension,
@@ -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
- const digest = (value) => canonicalDigest(value, "Function comparison");
54
+ const digest = (value) => digestCanonicalValue(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,6 @@
1
1
  import { parseEvidence } from "./evidence.js";
2
+ import { compareUnicodeCodePoints } from "./unicodeCodePointOrder.js";
2
3
  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
4
  /** Parse one complete analyze_function Evidence record for comparison workflows. */
15
5
  export const parseFunctionEvidence = (input) => {
16
6
  const evidence = parseEvidence(input);
@@ -20,35 +10,11 @@ export const parseFunctionEvidence = (input) => {
20
10
  throw new TypeError("Function comparison requires artifact-bound Evidence");
21
11
  const dossier = functionDossierSchema.parse(evidence.normalized_result);
22
12
  return {
23
- evidence: [evidence],
24
- procedure: dossier.procedure,
25
- provider: evidence.provider,
13
+ evidence,
26
14
  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
- },
15
+ dossier,
44
16
  limitations: [
45
17
  ...new Set([...evidence.limitations, ...dossier.limitations]),
46
- ].sort((left, right) => left.localeCompare(right)),
18
+ ].sort((left, right) => compareUnicodeCodePoints(left, right)),
47
19
  };
48
20
  };
49
- const completeCollection = (items) => ({
50
- items,
51
- total: items.length,
52
- complete: true,
53
- truncated: false,
54
- });
@@ -29,12 +29,12 @@ const procedureMapSchema = z.record(z.string(), z.string());
29
29
  const addressedNamesSchema = z.array(z.object({ address: z.string(), name: z.string() }));
30
30
  const addressedNameMapSchema = z.record(z.string(), z.string());
31
31
  const segmentSchema = z.object({
32
- name: z.string().default(""),
33
- start: z.string().default(""),
34
- end: z.string().default(""),
35
- readable: z.boolean().nullable().default(null),
36
- writable: z.boolean().nullable().default(null),
37
- executable: z.boolean().nullable().default(null),
32
+ name: z.string(),
33
+ start: z.string(),
34
+ end: z.string(),
35
+ readable: z.boolean().nullable(),
36
+ writable: z.boolean().nullable(),
37
+ executable: z.boolean().nullable(),
38
38
  });
39
39
  const unavailableAnalysisFactSchema = z
40
40
  .object({ available: z.literal(false), reason: z.string() })
@@ -142,10 +142,6 @@ export const functionBodySchema = z.discriminatedUnion("available", [
142
142
  });
143
143
  }),
144
144
  ]);
145
- const unknownFunctionBody = () => functionBodySchema.default({
146
- available: false,
147
- reason: "The provider did not report complete function body ranges.",
148
- });
149
145
  /** Check the declared entry membership against complete, inclusive body ranges. */
150
146
  export const functionBodyEntryAgrees = (body, address) => {
151
147
  if (!body.available)
@@ -176,8 +172,8 @@ export const procedureIdentitySchema = z
176
172
  .object({
177
173
  address: z.string(),
178
174
  name: z.string(),
179
- classification: procedureClassificationSchema.nullable().default(null),
180
- body: unknownFunctionBody(),
175
+ classification: procedureClassificationSchema.nullable(),
176
+ body: functionBodySchema,
181
177
  })
182
178
  .strict()
183
179
  .superRefine((identity, context) => {
@@ -289,9 +285,9 @@ export const functionDossierSchema = z
289
285
  successors: z.array(z.string()),
290
286
  })
291
287
  .strict()),
292
- native_api: nativeApiBoundarySchema.nullable().default(null),
293
- native_value_flow: nativeValueFlowSchema.nullable().default(null),
294
- limitations: z.array(z.string()).default([]),
288
+ native_api: nativeApiBoundarySchema.nullable(),
289
+ native_value_flow: nativeValueFlowSchema.nullable(),
290
+ limitations: z.array(z.string()),
295
291
  })
296
292
  .strict();
297
293
  /** Strictly parse a complete provider-neutral function dossier. */