rea-agents 6.1.0 → 6.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (453) hide show
  1. package/README.md +7 -5
  2. package/bridge/ghidra/ReaGhidraBridge.java +32 -4
  3. package/bridge/hopper_bridge.py +6 -1
  4. package/dist/android/JadxConfiguration.js +87 -7
  5. package/dist/android/JadxMcpTransport.js +14 -2
  6. package/dist/android/JadxProvider.js +57 -35
  7. package/dist/application/BinaryTargetResolver.js +5 -3
  8. package/dist/application/BrowserEvidence.js +3 -8
  9. package/dist/application/BrowserScenarioEvidence.js +2 -18
  10. package/dist/application/CapabilityInventory.js +43 -9
  11. package/dist/application/ClientConfigurationDocument.js +69 -25
  12. package/dist/application/DirectAnalysis.js +29 -14
  13. package/dist/application/DirectAnalysisCleanup.js +72 -0
  14. package/dist/application/DirectAnalysisStatus.js +4 -5
  15. package/dist/application/Doctor.js +15 -19
  16. package/dist/application/DoctorDiagnostics.js +1 -2
  17. package/dist/application/EnhancedTools.js +51 -6
  18. package/dist/application/EvidenceBundleFiles.js +8 -3
  19. package/dist/application/InvestigationProviders.js +9 -1
  20. package/dist/application/JsonFiles.js +42 -9
  21. package/dist/application/LinuxHopper.js +9 -6
  22. package/dist/application/MacHopper.js +15 -18
  23. package/dist/application/RealHopperAssertions.js +0 -11
  24. package/dist/application/ReconstructionObligationCandidates.js +1 -1
  25. package/dist/application/ReferenceSourceImportEntries.js +1 -1
  26. package/dist/application/Setup.js +8 -16
  27. package/dist/application/SetupHost.js +16 -27
  28. package/dist/application/SetupPlan.js +6 -6
  29. package/dist/application/Uninstall.js +81 -29
  30. package/dist/application/UpdateMaintenance.js +7 -5
  31. package/dist/application/UpdateRuntime.js +12 -12
  32. package/dist/application/WebScriptExportService.js +30 -4
  33. package/dist/application/WorkflowEvidence.js +25 -2
  34. package/dist/application/XrefsAddressResolution.js +45 -0
  35. package/dist/application/analysisView/AnalysisViewService.js +76 -0
  36. package/dist/application/binary/AnalysisClientCleanup.js +30 -5
  37. package/dist/application/binary/AnalysisProviderEvaluation.js +1 -2
  38. package/dist/application/binary/AnalysisProviderRegistry.js +2 -6
  39. package/dist/application/binary/AnalysisSnapshotCache.js +10 -8
  40. package/dist/application/binary/BinarySession.js +70 -29
  41. package/dist/application/binary/BinarySessionComposition.js +1 -3
  42. package/dist/application/binary/BinarySessionExecution.js +3 -5
  43. package/dist/application/binary/BinarySessionOpen.js +1 -1
  44. package/dist/application/binary/BinarySessionRecords.js +1 -1
  45. package/dist/application/binary/BinarySessionStatus.js +1 -6
  46. package/dist/application/binary/CompositeProvider.js +4 -18
  47. package/dist/application/binary/LazyAnalysisProvider.js +5 -5
  48. package/dist/application/binary/SessionProviderRouter.js +27 -135
  49. package/dist/application/homebrew.js +48 -0
  50. package/dist/application/javascript/ElectronActiveEvidence.js +9 -13
  51. package/dist/application/javascript/JavaScriptApplicationEvidence.js +2 -6
  52. package/dist/application/javascript/JavaScriptApplicationService.js +6 -1
  53. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +5 -3
  54. package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +11 -9
  55. package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +11 -3
  56. package/dist/application/javascript/JavaScriptArtifactGraphContext.js +9 -0
  57. package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +8 -5
  58. package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +12 -3
  59. package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +0 -1
  60. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +43 -16
  61. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +46 -6
  62. package/dist/application/javascript/JavaScriptModuleRelationships.js +1 -1
  63. package/dist/application/javascript/JavaScriptRuntimeObservationService.js +3 -3
  64. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +2 -3
  65. package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +1 -2
  66. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +2 -3
  67. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +1 -5
  68. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +75 -46
  69. package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +2 -3
  70. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +42 -19
  71. package/dist/application/managed/ManagedMemberComparisonService.js +2 -1
  72. package/dist/application/managed/ManagedNativeVerificationService.js +2 -1
  73. package/dist/application/process/ProcessCli.js +11 -11
  74. package/dist/application/process/ProcessEvidence.js +0 -1
  75. package/dist/artifacts/ArtifactProvider.js +39 -14
  76. package/dist/artifacts/ArtifactReader.js +31 -0
  77. package/dist/artifacts/DirectoryArtifactReader.js +2 -1
  78. package/dist/artifacts/MachOSliceArtifactReader.js +9 -2
  79. package/dist/artifacts/NativeDmgArtifactReader.js +65 -20
  80. package/dist/artifacts/SafeOutputTree.js +16 -2
  81. package/dist/artifacts/ZipArtifactReader.js +11 -4
  82. package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +4 -2
  83. package/dist/artifacts/apple/DylibResolutionReader.js +17 -7
  84. package/dist/artifacts/apple/KeyedArchiveReader.js +21 -3
  85. package/dist/artifacts/extraction/ArtifactExtraction.js +78 -21
  86. package/dist/artifacts/inventory/ArtifactGraphConstruction.js +67 -61
  87. package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
  88. package/dist/artifacts/inventory/reader.js +3 -3
  89. package/dist/artifacts/inventory/scanCanonical.js +48 -24
  90. package/dist/artifacts/inventory/scanReader.js +5 -9
  91. package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
  92. package/dist/browser/CdpBrowserProvider.js +2 -3
  93. package/dist/browser/CdpCaptureEventHandlers.js +2 -4
  94. package/dist/browser/CdpCaptureEvents.js +0 -1
  95. package/dist/browser/CdpCaptureValues.js +20 -0
  96. package/dist/browser/CdpElectronProvider.js +0 -2
  97. package/dist/browser/CdpElectronScriptEvents.js +2 -8
  98. package/dist/browser/CdpElectronScripts.js +2 -3
  99. package/dist/browser/CdpPageCaptureScripts.js +2 -3
  100. package/dist/browser/CdpSafeMetadata.js +10 -10
  101. package/dist/browser/PlaywrightBrowserScenarioProvider.js +59 -44
  102. package/dist/browser/PlaywrightElectronActiveActions.js +2 -56
  103. package/dist/browser/PlaywrightElectronActiveProvider.js +10 -6
  104. package/dist/browser/PlaywrightScenarioArtifacts.js +1 -1
  105. package/dist/browser/PlaywrightScenarioBrowser.js +139 -39
  106. package/dist/browser/PlaywrightScenarioEvents.js +1 -1
  107. package/dist/browser/PlaywrightScenarioSession.js +39 -22
  108. package/dist/browser/assets/ScriptCaptureAdapters.js +1 -1
  109. package/dist/browser/history/CaptureFailures.js +6 -2
  110. package/dist/browser/history/MitmproxyCaptureAdapter.js +4 -2
  111. package/dist/catalogIdentity.js +0 -1
  112. package/dist/cli/analysisViewCommands.js +36 -0
  113. package/dist/cli/artifactCommands.js +11 -12
  114. package/dist/cli/coreAnalysisCommands.js +3 -3
  115. package/dist/cli/coreBinaryCommands.js +32 -27
  116. package/dist/cli/coreNativeCommands.js +9 -10
  117. package/dist/cli/electronCommands.js +4 -4
  118. package/dist/cli/interactiveSetup.js +6 -6
  119. package/dist/cli/managedCommands.js +7 -8
  120. package/dist/cli/nativeCallCommands.js +1 -2
  121. package/dist/cli/omittableDefaults.js +50 -0
  122. package/dist/cli/processCommands.js +3 -2
  123. package/dist/cli/setupCommands.js +16 -15
  124. package/dist/cli/utilityCommands.js +9 -9
  125. package/dist/cli.js +16 -8
  126. package/dist/cliBrowserScenarioCommands.js +2 -2
  127. package/dist/cliCommandNames.js +1 -0
  128. package/dist/cliJsonInput.js +15 -1
  129. package/dist/cliOutput.js +0 -38
  130. package/dist/composition/auxiliaryAnalysisProviders.js +27 -23
  131. package/dist/composition/binary.js +9 -9
  132. package/dist/composition/browserScenario.js +2 -1
  133. package/dist/composition/directAnalysis.js +20 -13
  134. package/dist/composition/electronScenario.js +1 -1
  135. package/dist/composition/optionalObservationProviders.js +12 -7
  136. package/dist/config/environment.js +6 -0
  137. package/dist/config/ghidraStartupTimeout.js +4 -9
  138. package/dist/config/homeDirectory.js +12 -0
  139. package/dist/config/mcpResponseBudget.js +9 -1
  140. package/dist/config/parseConfig.js +7 -3
  141. package/dist/config/parsers.js +19 -22
  142. package/dist/contracts/analysisViewToolContracts.js +56 -0
  143. package/dist/contracts/applicationToolContracts.js +5 -4
  144. package/dist/contracts/artifactComparisonExample.js +2 -2
  145. package/dist/contracts/artifactToolContracts.js +1 -1
  146. package/dist/contracts/browserScenarioToolContracts.js +1 -1
  147. package/dist/contracts/browserToolContracts.js +19 -15
  148. package/dist/contracts/enhancedInputs.js +2 -2
  149. package/dist/contracts/enhancedToolContracts.js +4 -3
  150. package/dist/contracts/evm/evmToolContracts.js +1 -1
  151. package/dist/contracts/functionWorkflowToolContracts.js +1 -1
  152. package/dist/contracts/inputSchemaPresentation.js +90 -0
  153. package/dist/contracts/investigationExamples.js +4 -3
  154. package/dist/contracts/javascript/electronToolContracts.js +1 -1
  155. package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +0 -20
  156. package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +245 -0
  157. package/dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js +1 -1
  158. package/dist/contracts/managed/managedToolContracts.js +5 -10
  159. package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
  160. package/dist/contracts/mobileApplicationGraphExamples.js +3 -3
  161. package/dist/contracts/native/binaryDiagnosticsToolContracts.js +1 -1
  162. package/dist/contracts/native/nativeToolContracts.js +2 -2
  163. package/dist/contracts/officialToolContracts.js +2 -1
  164. package/dist/contracts/promptContracts.js +2 -2
  165. package/dist/contracts/providerSelection.js +1 -1
  166. package/dist/contracts/sessionToolContracts.js +14 -2
  167. package/dist/contracts/sessionToolSchemas.js +1 -14
  168. package/dist/contracts/toolContracts.js +2 -0
  169. package/dist/contracts/toolEffects.js +1 -0
  170. package/dist/contracts/toolOutputSchemaGroups.js +136 -92
  171. package/dist/contracts/toolOutputSchemaPrimitives.js +11 -21
  172. package/dist/contracts/toolSchemaMetadata.js +18 -69
  173. package/dist/contracts/webNetworkCaptureToolContracts.js +1 -1
  174. package/dist/contracts/webRuntimeToolContracts.js +1 -1
  175. package/dist/contracts/webScriptToolContracts.js +1 -1
  176. package/dist/doctorRuntime.js +7 -5
  177. package/dist/domain/analysisErrorCore.js +3 -0
  178. package/dist/domain/analysisErrorPresentation.js +18 -3
  179. package/dist/domain/analysisErrorProjection.js +24 -5
  180. package/dist/domain/analysisSnapshot.js +29 -31
  181. package/dist/domain/analysisView/analysisView.js +243 -0
  182. package/dist/domain/analysisView/analysisViewCoverage.js +19 -0
  183. package/dist/domain/analysisView/binaryLayoutView.js +159 -0
  184. package/dist/domain/analysisView/javascriptApplicationView.js +238 -0
  185. package/dist/domain/android/androidApplication.js +1 -1
  186. package/dist/domain/apple/appleApplication.js +1 -1
  187. package/dist/domain/apple/dylibResolution.js +10 -3
  188. package/dist/domain/apple/interfaceBuilderGraph.js +0 -1
  189. package/dist/domain/apple/keyedArchive.js +26 -2
  190. package/dist/domain/artifactComparison.js +15 -6
  191. package/dist/domain/artifactGraph.js +16 -3
  192. package/dist/domain/artifactInventoryEvidence.js +9 -16
  193. package/dist/domain/artifactOperationError.js +3 -3
  194. package/dist/domain/artifactPartialObservation.js +1 -0
  195. package/dist/domain/artifactPathSyntax.js +49 -0
  196. package/dist/domain/binaryTarget.js +39 -13
  197. package/dist/domain/browserCaptureComparison.js +13 -49
  198. package/dist/domain/browserNetworkEvidence.js +10 -4
  199. package/dist/domain/browserObservation.js +0 -1
  200. package/dist/domain/browserObservationSchemas.js +14 -3
  201. package/dist/domain/browserScenario.js +0 -1
  202. package/dist/domain/browserScenarioCapture.js +1 -2
  203. package/dist/domain/browserScenarioDiff.js +0 -2
  204. package/dist/domain/browserScenarioDiffEvidence.js +0 -12
  205. package/dist/domain/browserScenarioDiffValues.js +2 -2
  206. package/dist/domain/browserScenarioValues.js +3 -4
  207. package/dist/domain/callPath.js +8 -9
  208. package/dist/domain/callPathSchemas.js +2 -2
  209. package/dist/domain/changedBehavior.js +3 -3
  210. package/dist/domain/completionLedgerGeneration.js +2 -1
  211. package/dist/domain/configurationErrors.js +12 -0
  212. package/dist/domain/conformancePackage.js +4 -3
  213. package/dist/domain/evidence.js +10 -36
  214. package/dist/domain/evidenceBundle.js +7 -9
  215. package/dist/domain/evidenceCompletionLedger.js +2 -1
  216. package/dist/domain/functionComparison.js +4 -5
  217. package/dist/domain/functionComparisonDimensions.js +120 -87
  218. package/dist/domain/functionComparisonNormalization.js +23 -34
  219. package/dist/domain/functionComparisonResults.js +1 -4
  220. package/dist/domain/functionComparisonSchemas.js +2 -8
  221. package/dist/domain/functionDossierEvidence.js +2 -37
  222. package/dist/domain/javascript/electronActiveObservation.js +26 -69
  223. package/dist/domain/javascript/electronObservation.js +14 -3
  224. package/dist/domain/javascript/electronStaticAnalysisBrowser.js +10 -9
  225. package/dist/domain/javascript/electronStaticAnalysisIpc.js +2 -1
  226. package/dist/domain/javascript/electronStaticAnalysisNative.js +2 -1
  227. package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +2 -0
  228. package/dist/domain/javascript/javascriptApplicationGraph.js +26 -3
  229. package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +9 -2
  230. package/dist/domain/javascript/javascriptApplicationVersionItems.js +5 -2
  231. package/dist/domain/javascript/javascriptApplicationVersionKeys.js +2 -1
  232. package/dist/{application/javascript/JavaScriptReturnShapeProjection.js → domain/javascript/javascriptExportReturnShapeProjection.js} +4 -4
  233. package/dist/domain/javascript/javascriptExportShapeComparison.js +7 -1
  234. package/dist/domain/javascript/javascriptExportShapeComparisonIdentity.js +6 -1
  235. package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +29 -1
  236. package/dist/domain/javascript/javascriptExportShapeSelection.js +5 -5
  237. package/dist/domain/javascript/javascriptExportShapeVariants.js +67 -14
  238. package/dist/domain/javascript/javascriptFeatureSeed.js +20 -0
  239. package/dist/domain/javascript/javascriptFeatureTraversal.js +0 -1
  240. package/dist/domain/javascript/javascriptNativeHandoff.js +1 -1
  241. package/dist/domain/javascript/javascriptRuntimeLoadState.js +0 -1
  242. package/dist/domain/javascript/javascriptRuntimeObservation.js +10 -2
  243. package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +1 -1
  244. package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +3 -2
  245. package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +0 -1
  246. package/dist/domain/javascript/javascriptSemanticAnalysis.js +9 -3
  247. package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +2 -1
  248. package/dist/domain/javascript/javascriptSemanticCalls.js +2 -1
  249. package/dist/domain/javascript/javascriptSemanticChildProcesses.js +2 -1
  250. package/dist/domain/javascript/javascriptSemanticDataEffects.js +1 -1
  251. package/dist/domain/javascript/javascriptSemanticGraph.js +88 -46
  252. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +77 -20
  253. package/dist/domain/javascript/javascriptSemanticMutationValues.js +21 -27
  254. package/dist/domain/javascript/javascriptSemanticObjects.js +83 -42
  255. package/dist/domain/javascript/javascriptSemanticPrimitives.js +1 -12
  256. package/dist/domain/javascript/javascriptSemanticProjection.js +2 -3
  257. package/dist/domain/javascript/javascriptSemanticPromises.js +2 -1
  258. package/dist/domain/javascript/javascriptSemanticResourceLimits.js +1 -1
  259. package/dist/domain/javascript/javascriptSemanticResources.js +1 -1
  260. package/dist/domain/javascript/javascriptSemanticReturns.js +32 -17
  261. package/dist/domain/javascript/javascriptSemanticSlots.js +72 -0
  262. package/dist/domain/javascript/javascriptSemanticValues.js +47 -54
  263. package/dist/domain/javascript/javascriptSourceMapPaths.js +104 -0
  264. package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +2 -1
  265. package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +0 -1
  266. package/dist/domain/javascript/sourceToBundleComparison.js +12 -3
  267. package/dist/domain/javascript/sourceToBundleSignals.js +47 -19
  268. package/dist/domain/localPath.js +1 -1
  269. package/dist/domain/managed/managedArtifact.js +6 -4
  270. package/dist/domain/managed/managedMemberComparison.js +2 -9
  271. package/dist/domain/managed/managedNativeVerification.js +0 -2
  272. package/dist/domain/managed/managedNativeVerificationMatch.js +9 -3
  273. package/dist/domain/native/binaryLayout.js +2 -3
  274. package/dist/domain/native/nativeApiBoundary.js +1 -1
  275. package/dist/domain/native/nativeCallObservation.js +5 -3
  276. package/dist/domain/native/nativeInstruction.js +7 -0
  277. package/dist/domain/native/recordedCrash.js +2 -3
  278. package/dist/domain/offsetDateTime.js +17 -0
  279. package/dist/domain/process/processCapture.js +13 -12
  280. package/dist/domain/process/processCaptureCoverage.js +67 -0
  281. package/dist/domain/process/processCaptureExample.js +2 -1
  282. package/dist/domain/process/processCaptureParsing.js +1 -34
  283. package/dist/domain/process/processCaptureValidation.js +81 -13
  284. package/dist/domain/process/processComparison.js +41 -22
  285. package/dist/domain/process/processObservation.js +10 -2
  286. package/dist/domain/process/processScenario.js +24 -2
  287. package/dist/domain/process/processTraceComparison.js +0 -2
  288. package/dist/domain/process/processTraceDimensionProjection.js +1 -1
  289. package/dist/domain/process/processTraceEvaluation.js +15 -11
  290. package/dist/domain/process/processTraceSpecification.js +3 -4
  291. package/dist/domain/providerAdapterError.js +2 -0
  292. package/dist/domain/reconstructionCoverage.js +5 -2
  293. package/dist/domain/reconstructionObligationLedgerSchemas.js +2 -1
  294. package/dist/domain/reconstructionReadinessSchemas.js +2 -1
  295. package/dist/domain/reconstructionVerification.js +3 -3
  296. package/dist/domain/reconstructionVerificationSchemas.js +2 -1
  297. package/dist/domain/referenceSourceGraph.js +20 -21
  298. package/dist/domain/staticRuntimeCorrelation.js +2 -2
  299. package/dist/domain/stringPatterns.js +6 -0
  300. package/dist/domain/swiftSymbolClassification.js +61 -0
  301. package/dist/domain/symbolAnalysis.js +66 -18
  302. package/dist/domain/webCaptureDiff.js +0 -1
  303. package/dist/domain/webCaptureDiffSchemas.js +6 -3
  304. package/dist/domain/webEventListeners.js +3 -2
  305. package/dist/domain/webExecution.js +3 -2
  306. package/dist/domain/webRuntime.js +0 -2
  307. package/dist/domain/webScriptExport.js +1 -1
  308. package/dist/dotnet/ManagedArtifactInspector.js +2 -19
  309. package/dist/dotnet/ManagedMemberInspector.js +12 -18
  310. package/dist/dotnet/ManagedMemberInspectorCore.js +47 -44
  311. package/dist/dotnet/ManagedMemberRows.js +75 -62
  312. package/dist/dotnet/ManagedMetadataInventory.js +16 -22
  313. package/dist/dotnet/ManagedMethodBodyReader.js +4 -0
  314. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +109 -94
  315. package/dist/dotnet/ManagedNativeBoundaryInspector.js +12 -21
  316. package/dist/dotnet/ManagedReaderFailure.js +16 -0
  317. package/dist/dotnet/ManagedStaticProvider.js +3 -5
  318. package/dist/evaluation/AgentEvaluationFixtures.js +250 -0
  319. package/dist/evaluation/AgentEvaluationReport.js +28 -0
  320. package/dist/evaluation/CodexAgentEval.js +12 -8
  321. package/dist/evaluation/KnownAnswerEvaluation.js +281 -0
  322. package/dist/evm/EvmoleInterfaceProvider.js +2 -1
  323. package/dist/firmware/FirmwareCommand.js +9 -5
  324. package/dist/firmware/FirmwareProvider.js +4 -4
  325. package/dist/generatedPackageMetadata.js +2 -2
  326. package/dist/ghidra/GhidraAnalysisProfile.js +3 -6
  327. package/dist/ghidra/GhidraClient.js +91 -32
  328. package/dist/ghidra/GhidraClientStartup.js +0 -2
  329. package/dist/ghidra/GhidraDoctor.js +6 -5
  330. package/dist/ghidra/GhidraFunctionValues.js +3 -5
  331. package/dist/ghidra/GhidraInstallation.js +40 -12
  332. package/dist/ghidra/GhidraJavaLaunch.js +6 -2
  333. package/dist/ghidra/GhidraLauncher.js +15 -7
  334. package/dist/ghidra/GhidraProvider.js +6 -2
  335. package/dist/ghidra/GhidraProviderCapabilities.js +6 -0
  336. package/dist/ghidra/GhidraProviderClient.js +13 -3
  337. package/dist/ghidra/GhidraSessionError.js +2 -0
  338. package/dist/ghidra/GhidraSessionRoot.js +39 -0
  339. package/dist/ghidra/extensions/GhidraExtensions.js +17 -10
  340. package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +8 -2
  341. package/dist/hopper/BridgeLauncher.js +34 -45
  342. package/dist/hopper/HopperAnalysisProfile.js +3 -8
  343. package/dist/hopper/HopperCleanup.js +56 -27
  344. package/dist/hopper/HopperClient.js +86 -65
  345. package/dist/hopper/HopperMachOImage.js +3 -2
  346. package/dist/hopper/HopperProvider.js +16 -18
  347. package/dist/hopper/HopperRegexSearch.js +3 -6
  348. package/dist/hopper/HopperTargetLease.js +132 -49
  349. package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -0
  350. package/dist/ida/IdaConfiguration.js +8 -3
  351. package/dist/ida/IdaInput.js +1 -7
  352. package/dist/ida/IdaMcpConnection.js +8 -4
  353. package/dist/ida/IdaOperationRunner.js +3 -3
  354. package/dist/ida/IdaProvider.js +8 -12
  355. package/dist/ida/IdaSessionClient.js +20 -18
  356. package/dist/ida/IdaWorkspace.js +12 -13
  357. package/dist/inspector/V8InspectorCaptureProjection.js +1 -1
  358. package/dist/inspector/V8InspectorProvider.js +38 -28
  359. package/dist/javascript/recovery/WakaruCommand.js +7 -2
  360. package/dist/javascript/recovery/WakaruExecution.js +5 -2
  361. package/dist/main/shutdown.js +11 -3
  362. package/dist/main/startup.js +9 -2
  363. package/dist/main/transport.js +22 -2
  364. package/dist/main.js +11 -18
  365. package/dist/native/AppleMachoSelection.js +16 -6
  366. package/dist/native/CommandRunner.js +9 -7
  367. package/dist/native/LldbCallTracer.js +8 -2
  368. package/dist/native/NativeMacOSProvider.js +25 -15
  369. package/dist/native/NativeUiHelperRuntime.js +11 -2
  370. package/dist/native/NativeUiObservation.js +2 -2
  371. package/dist/native/pwntools/PwntoolsDecoder.js +2 -1
  372. package/dist/process/DarwinProcessRunTokenReader.js +16 -2
  373. package/dist/process/ExecFileOutput.js +88 -6
  374. package/dist/process/PrivateRuntimeRoot.js +10 -5
  375. package/dist/process/ProcessOwnership.js +1 -4
  376. package/dist/process/ProcessOwnershipObservation.js +11 -5
  377. package/dist/process/ProviderProcess.js +1 -3
  378. package/dist/process/capture/FilesystemSnapshot.js +50 -13
  379. package/dist/process/capture/ProcessCaptureError.js +13 -0
  380. package/dist/process/capture/ProcessCaptureLifecycle.js +158 -70
  381. package/dist/process/capture/ProcessFilesystemEffects.js +33 -3
  382. package/dist/process/capture/ProcessHarness.js +21 -25
  383. package/dist/process/capture/ProcessNormalization.js +20 -2
  384. package/dist/process/capture/ProcessSampling.js +25 -2
  385. package/dist/process/capture/TerminalRenderer.js +14 -0
  386. package/dist/process/snapshotEnvironment.js +14 -0
  387. package/dist/server/EvidenceMcpServer.js +25 -14
  388. package/dist/server/createServer.js +49 -36
  389. package/dist/server/mcpClientMetadata.js +12 -5
  390. package/dist/server/promptCompletion.js +3 -8
  391. package/dist/server/registerAnalysisViewTool.js +15 -0
  392. package/dist/server/registerAndroidTools.js +2 -3
  393. package/dist/server/registerApplicationTools/compareExportShapes.js +4 -5
  394. package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
  395. package/dist/server/registerApplicationTools/compareVersions.js +4 -5
  396. package/dist/server/registerApplicationTools/coverage.js +1 -2
  397. package/dist/server/registerApplicationTools/helpers.js +1 -2
  398. package/dist/server/registerApplicationTools/obligationLedger.js +4 -5
  399. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -4
  400. package/dist/server/registerApplicationTools/traceFeature.js +4 -5
  401. package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
  402. package/dist/server/registerArtifactComparisonTool.js +4 -5
  403. package/dist/server/registerBinaryDiagnosticsTools.js +2 -3
  404. package/dist/server/registerBrowserScenarioTool.js +3 -4
  405. package/dist/server/registerBrowserTools.js +13 -16
  406. package/dist/server/registerBundleComparisonTool.js +5 -6
  407. package/dist/server/registerCloseLifecycleTool.js +2 -3
  408. package/dist/server/registerElectronTools.js +10 -13
  409. package/dist/server/registerEnhancedTools.js +23 -23
  410. package/dist/server/registerEvidenceTools.js +3 -4
  411. package/dist/server/registerEvmTools.js +2 -3
  412. package/dist/server/registerFirmwareTools.js +2 -3
  413. package/dist/server/registerFunctionComparisonTool.js +7 -8
  414. package/dist/server/registerInvestigationTools.js +14 -15
  415. package/dist/server/registerJavaScriptRecoveryTool.js +2 -3
  416. package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -6
  417. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +5 -6
  418. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -5
  419. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +6 -7
  420. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +6 -7
  421. package/dist/server/registerOfficialTools.js +4 -19
  422. package/dist/server/registerProcessComparisonTool.js +8 -8
  423. package/dist/server/registerRecordedCrashTools.js +2 -3
  424. package/dist/server/registerSessionRecordTools.js +15 -19
  425. package/dist/server/registerSessionStatusTool.js +3 -4
  426. package/dist/server/registerSessionTools.js +12 -18
  427. package/dist/server/registerWebModuleTool.js +2 -3
  428. package/dist/server/registerWebNetworkCaptureTool.js +2 -3
  429. package/dist/server/registerWebRuntimeTools.js +4 -5
  430. package/dist/server/registerWebScriptTool.js +2 -3
  431. package/dist/server/registerWebSourceLocationTool.js +2 -3
  432. package/dist/server/toolResult.js +66 -94
  433. package/dist/server/toolResultEncoding.js +11 -10
  434. package/dist/windows/WindowsNativeLoader.js +1 -0
  435. package/dist/windows/WindowsOwnedProcess.js +60 -15
  436. package/dist/windows/WindowsPrivateRuntime.js +7 -8
  437. package/native/windows/README.md +3 -1
  438. package/native/windows/build/manifest.json +2 -2
  439. package/native/windows/build/rea-windows-x64.node +0 -0
  440. package/package.json +39 -30
  441. package/scripts/rea.mjs +3 -6
  442. package/skills/reverse-engineer-anything/SKILL.md +9 -8
  443. package/skills/reverse-engineer-anything/references/android-applications.md +6 -3
  444. package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -4
  445. package/skills/reverse-engineer-anything/references/javascript-applications.md +16 -6
  446. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +9 -0
  447. package/dist/config.js +0 -1
  448. package/dist/contracts/browserCaptureToolInputSchema.js +0 -43
  449. package/dist/contracts/process/processCaptureExample.js +0 -2
  450. package/dist/contracts/toolOutputSchemas.js +0 -2
  451. package/dist/main/reload.js +0 -12
  452. package/dist/main/state.js +0 -3
  453. package/dist/server/sessionToolPolicies.js +0 -2
@@ -1,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
- });
@@ -61,61 +61,16 @@ export const electronActiveObservationInputSchema = z.strictObject({
61
61
  .optional()
62
62
  .describe("Absolute local filesystem root for application-relative paths; omit to derive it from the application path. Relative paths are rejected."),
63
63
  args: z
64
- .array(z.string().regex(/^[^\0]*$/u, "Electron arguments must not contain NUL"))
64
+ .array(z
65
+ .string()
66
+ .regex(/^[^\u0000]*$/u, "Electron arguments must not contain NUL"))
65
67
  .default([]),
66
68
  actions: z.array(actionSchema).default([]),
67
69
  });
68
- const ipcEventSchema = z.strictObject({
69
- sequence: z.number().int().min(1),
70
- correlation_id: z.string().nullable().default(null),
71
- kind: z.enum([
72
- "main-handler-invocation",
73
- "main-event-invocation",
74
- "utility-process-fork",
75
- "utility-process-message",
76
- "ipc-main-to-renderer",
77
- "ipc-utility-to-main",
78
- "ipc-renderer-send",
79
- "ipc-renderer-invoke",
80
- "ipc-renderer-post-message",
81
- ]),
82
- event: z.string().nullable().optional(),
83
- phase: z
84
- .enum(["attempted", "completed", "blocked", "failed", "observed"])
85
- .nullable()
86
- .optional(),
87
- channel: z.string().nullable(),
88
- direction: z
89
- .enum([
90
- "renderer-to-main",
91
- "main-to-renderer",
92
- "main-to-utility",
93
- "utility-to-main",
94
- ])
95
- .nullable()
96
- .optional(),
97
- sender: z.string().nullable().optional(),
98
- receiver: z.string().nullable().optional(),
99
- frame: z.string().nullable().default(null),
100
- target: z.string().nullable().optional(),
101
- argument_shapes: z.array(z.string()),
102
- result_shape: z.string().nullable(),
103
- process_type: z.string().nullable(),
104
- source: z.string().default("electron-active-hook"),
105
- capture_method: z
106
- .enum(["api-wrapper", "event-emitter", "process-hook"])
107
- .default("api-wrapper"),
108
- artifact_path: z.string().nullable().default(null),
109
- artifact_sha256: z
110
- .string()
111
- .regex(/^[a-f0-9]{64}$/u)
112
- .nullable()
113
- .default(null),
114
- error: z.boolean(),
115
- });
116
- const timelineEventSchema = z.strictObject({
70
+ /** Canonical active Electron event shared by the hook boundary and public timeline. */
71
+ export const electronActiveTimelineEventSchema = z.strictObject({
117
72
  sequence: z.number().int().min(1),
118
- correlation_id: z.string().nullable().default(null),
73
+ correlation_id: z.string().nullable(),
119
74
  kind: z.enum([
120
75
  "main-handler-invocation",
121
76
  "main-event-invocation",
@@ -168,6 +123,19 @@ const timelineEventSchema = z.strictObject({
168
123
  .nullable(),
169
124
  error: z.boolean(),
170
125
  });
126
+ const ipcEventSchema = electronActiveTimelineEventSchema.extend({
127
+ kind: z.enum([
128
+ "main-handler-invocation",
129
+ "main-event-invocation",
130
+ "utility-process-fork",
131
+ "utility-process-message",
132
+ "ipc-main-to-renderer",
133
+ "ipc-utility-to-main",
134
+ "ipc-renderer-send",
135
+ "ipc-renderer-invoke",
136
+ "ipc-renderer-post-message",
137
+ ]),
138
+ });
171
139
  const processMetricSchema = z.strictObject({
172
140
  pid: z.number().int().min(1),
173
141
  type: z.string().min(1),
@@ -237,17 +205,14 @@ export const electronActiveObservationResultSchema = z.strictObject({
237
205
  ipc: z.strictObject({
238
206
  events: z.array(ipcEventSchema),
239
207
  observed: z.number().int().min(0),
240
- dropped: z.number().int().min(0).nullable().default(null),
208
+ dropped: z.number().int().min(0),
241
209
  }),
242
- timeline: z
243
- .strictObject({
244
- events: z.array(timelineEventSchema),
210
+ timeline: z.strictObject({
211
+ events: z.array(electronActiveTimelineEventSchema),
245
212
  observed: z.number().int().min(0),
246
- dropped: z.number().int().min(0).nullable().default(null),
247
- })
248
- .default({ events: [], observed: 0, dropped: null }),
249
- retention: z
250
- .strictObject({
213
+ dropped: z.number().int().min(0),
214
+ }),
215
+ retention: z.strictObject({
251
216
  budget_bytes: z.number().int().min(0),
252
217
  estimated_retained_bytes: z.number().int().min(0),
253
218
  event_serialized_byte_upper_bound: z.number().int().min(0),
@@ -265,15 +230,7 @@ export const electronActiveObservationResultSchema = z.strictObject({
265
230
  dropped_ipc: z.number().int().min(0),
266
231
  observed_runtime: z.number().int().min(0),
267
232
  dropped_runtime: z.number().int().min(0),
268
- })
269
- .nullable()
270
- .default(null),
271
- coverage: coverageSchema.default({
272
- status: "partial_attach",
273
- observed_event_families: [],
274
- unavailable_event_families: [],
275
- observed_roles: [],
276
- pre_capture_activity: "unavailable",
277
233
  }),
234
+ coverage: coverageSchema,
278
235
  limitations: z.array(z.string()),
279
236
  });
@@ -80,9 +80,20 @@ export const electronPageInspectionSchema = z.object({
80
80
  script_key: prefixedDigestSchema("electron_script"),
81
81
  frame_id: z.string().nullable().default(null),
82
82
  file_path: z.string(),
83
- cdp_hash: z.string(),
84
- length: z.number().int().min(0),
85
- is_module: z.boolean(),
83
+ cdp_hash: z
84
+ .string()
85
+ .nullable()
86
+ .describe("Producer-reported script hash; null when unavailable."),
87
+ length: z
88
+ .number()
89
+ .int()
90
+ .min(0)
91
+ .nullable()
92
+ .describe("Producer-reported script length; null when unavailable."),
93
+ is_module: z
94
+ .boolean()
95
+ .nullable()
96
+ .describe("Producer-reported module classification; null when unavailable."),
86
97
  language: z.string().nullable(),
87
98
  source: electronSourceSchema,
88
99
  })),
@@ -54,10 +54,16 @@ const collectWindowOptions = (source, options) => {
54
54
  const collectWebPreferences = (source, object) => {
55
55
  const preferences = [];
56
56
  let unknown = 0;
57
- let preload = {
58
- preload_path: null,
59
- preload_resolution_context: null,
60
- };
57
+ const effectivePreload = objectProperty(object, "preload");
58
+ const preloadPath = effectivePreload.status === "explicit"
59
+ ? staticPath(effectivePreload.property.value)
60
+ : undefined;
61
+ const preload = effectivePreload.status === "explicit" && preloadPath !== undefined
62
+ ? {
63
+ preload_path: preloadPath,
64
+ preload_resolution_context: staticPathResolutionContext(effectivePreload.property.value),
65
+ }
66
+ : { preload_path: null, preload_resolution_context: null };
61
67
  for (const property of object.properties) {
62
68
  if (t.isSpreadElement(property)) {
63
69
  unknown += 1;
@@ -85,11 +91,6 @@ const collectWebPreferences = (source, object) => {
85
91
  continue;
86
92
  }
87
93
  const path = name === "preload" ? staticPath(property.value) : undefined;
88
- if (path !== undefined)
89
- preload = {
90
- preload_path: path,
91
- preload_resolution_context: staticPathResolutionContext(property.value),
92
- };
93
94
  const value = path === undefined
94
95
  ? electronStaticValue(source, property.value)
95
96
  : { status: "literal", value: path, expression: null };
@@ -1,7 +1,8 @@
1
1
  import * as t from "@babel/types";
2
2
  import { boundedExpression, electronStaticValue, handlerKind, } from "./electronStaticAnalysisValues.js";
3
3
  import { addLocatedFinding } from "./javascriptStaticAnalysisFindings.js";
4
- import { argumentNode, calleeName, range, semanticStaticPropertyName, } from "./javascriptStaticAnalysisHelpers.js";
4
+ import { argumentNode, calleeName, range, } from "./javascriptStaticAnalysisHelpers.js";
5
+ import { semanticStaticPropertyName } from "./javascriptAstValues.js";
5
6
  /** Inspect Electron IPC operations and validation candidates. */
6
7
  export const inspectElectronIpcNode = (node, context) => {
7
8
  if (t.isCallExpression(node)) {
@@ -2,7 +2,8 @@ import * as t from "@babel/types";
2
2
  import { compareCodePoints } from "../canonicalOrdering.js";
3
3
  import { stripQueryAndFragment } from "../artifactPathSyntax.js";
4
4
  import { addLocatedFinding } from "./javascriptStaticAnalysisFindings.js";
5
- import { argumentNode, calleeName, propertyName, range, semanticStaticPropertyName, stringValue, } from "./javascriptStaticAnalysisHelpers.js";
5
+ import { argumentNode, calleeName, range, stringValue, } from "./javascriptStaticAnalysisHelpers.js";
6
+ import { propertyName, semanticStaticPropertyName, } from "./javascriptAstValues.js";
6
7
  /** Inspect JavaScript-side imports and re-exports of native .node addons. */
7
8
  export const inspectElectronNativeNode = (node, context) => {
8
9
  if (t.isImportDeclaration(node))
@@ -347,6 +347,8 @@ export const applicationNodeIdentitySchema = z.discriminatedUnion("strategy", [
347
347
  source_map_sha256: digestSchema,
348
348
  // The exact `sources` entry; `""` is a legal relative reference.
349
349
  original_source: z.string(),
350
+ // Exact leaf-local root; null means omitted or explicitly null.
351
+ source_root: z.string().nullable(),
350
352
  source_sha256: digestSchema.nullable(),
351
353
  }),
352
354
  z.strictObject({
@@ -63,6 +63,18 @@ const checkEvidenceNormalization = (evidence, path, context) => {
63
63
  path: [...path, "location"],
64
64
  });
65
65
  };
66
+ const sourceMapObservationMatchesIdentity = (identity, observation) => {
67
+ const { evidence, source_map_reference: reference } = observation;
68
+ return (reference !== null &&
69
+ evidence.state === "observed" &&
70
+ evidence.artifact.available &&
71
+ evidence.artifact.sha256 === identity.source_map_sha256 &&
72
+ reference.source_name === identity.original_source &&
73
+ reference.source_root === identity.source_root &&
74
+ evidence.location.available &&
75
+ evidence.location.value.kind === "artifact-path" &&
76
+ reference.map_path === evidence.location.value.path);
77
+ };
66
78
  const observationMatchesIdentity = (node, observation) => {
67
79
  const { identity } = node;
68
80
  const { evidence } = observation;
@@ -71,9 +83,7 @@ const observationMatchesIdentity = (node, observation) => {
71
83
  evidence.artifact.available &&
72
84
  evidence.artifact.sha256 === identity.sha256);
73
85
  if (identity.strategy === "source-map-original")
74
- return (evidence.state === "observed" &&
75
- evidence.artifact.available &&
76
- evidence.artifact.sha256 === identity.source_map_sha256);
86
+ return sourceMapObservationMatchesIdentity(identity, observation);
77
87
  if (identity.strategy === "canonical-path")
78
88
  return (evidence.artifact.available &&
79
89
  evidence.artifact.sha256 === identity.artifact_sha256 &&
@@ -126,6 +136,19 @@ const checkNode = (node, index, context) => {
126
136
  "observation_id",
127
137
  ],
128
138
  });
139
+ if (node.identity.strategy === "source-map-original" &&
140
+ !observationMatchesIdentity(node, observation))
141
+ context.addIssue({
142
+ code: "custom",
143
+ message: "Source-map observation must retain its exact declaration and map location",
144
+ path: [
145
+ "nodes",
146
+ index,
147
+ "observations",
148
+ observationIndex,
149
+ "source_map_reference",
150
+ ],
151
+ });
129
152
  checkEvidenceNormalization(observation.evidence, ["nodes", index, "observations", observationIndex, "evidence"], context);
130
153
  }
131
154
  if (!node.observations.some((observation) => observationMatchesIdentity(node, observation)))
@@ -1,4 +1,5 @@
1
1
  import { z } from "zod";
2
+ import { javascriptSourceMapReferenceSchema } from "./javascriptSourceMapPaths.js";
2
3
  import { applicationCoverageSchema, applicationGraphEvidenceSchema, applicationNodeIdentitySchema, } from "./javascriptApplicationEvidenceSchemas.js";
3
4
  import { jsonValueSchema } from "../jsonValue.js";
4
5
  import { prefixedDigestSchema } from "../digests.js";
@@ -61,13 +62,19 @@ export const JAVASCRIPT_APPLICATION_RELATIONS = [
61
62
  const applicationRelationSchema = z.enum(JAVASCRIPT_APPLICATION_RELATIONS);
62
63
  const applicationPropertiesSchema = z.record(z.string().min(1), jsonValueSchema);
63
64
  /** One node observation before its semantic identifier is derived. */
64
- const applicationNodeObservationInputSchema = z.strictObject({
65
+ const applicationNodeObservationBaseSchema = z.strictObject({
65
66
  label: z.string().min(1).nullable(),
67
+ source_map_reference: javascriptSourceMapReferenceSchema.nullable(),
66
68
  properties: applicationPropertiesSchema,
67
69
  evidence: applicationGraphEvidenceSchema,
68
70
  });
71
+ const applicationNodeObservationInputSchema = applicationNodeObservationBaseSchema.extend({
72
+ source_map_reference: javascriptSourceMapReferenceSchema
73
+ .nullable()
74
+ .default(null),
75
+ });
69
76
  /** One immutable, evidence-bearing observation attached to an entity. */
70
- export const applicationNodeObservationSchema = applicationNodeObservationInputSchema.extend({
77
+ export const applicationNodeObservationSchema = applicationNodeObservationBaseSchema.extend({
71
78
  observation_id: prefixedDigestSchema("jag_observation"),
72
79
  identifier_strategy: z.strictObject({
73
80
  strategy: z.literal("semantic-content-sha256"),
@@ -1,6 +1,5 @@
1
1
  import { absenceClaimable, canonicalDigest, canonicalJson, } from "../comparisonSemantics.js";
2
2
  import { compareCodePoints } from "../canonicalOrdering.js";
3
- import {} from "./javascriptApplicationGraph.js";
4
3
  /** Classify matched, unmatched, and ambiguous nodes without inventing absence. */
5
4
  export const classifyJavaScriptApplicationVersions = (matching, context) => {
6
5
  const pairByLeft = new Map(matching.pairs.map(({ left, right }) => [
@@ -204,7 +203,11 @@ const locations = (node) => node.observations
204
203
  .map(({ evidence }) => evidence.location.available ? evidence.location.value : evidence.location)
205
204
  .sort((left, right) => compareCodePoints(canonicalJson(left), canonicalJson(right)));
206
205
  const properties = (node) => node.observations
207
- .map(({ label, properties: values }) => ({ label, properties: values }))
206
+ .map(({ label, properties: values, source_map_reference }) => ({
207
+ label,
208
+ properties: values,
209
+ source_map_reference,
210
+ }))
208
211
  .sort((left, right) => compareCodePoints(canonicalJson(left), canonicalJson(right)));
209
212
  const relationshipSignature = (node, side, context) => {
210
213
  const graph = side === "left" ? context.leftGraph : context.rightGraph;
@@ -1,3 +1,4 @@
1
+ import { canonicalJson } from "../comparisonSemantics.js";
1
2
  import { compareCodePoints } from "../canonicalOrdering.js";
2
3
  const matchTiers = () => [
3
4
  {
@@ -112,7 +113,7 @@ const moduleSourceDigestKey = (node) => {
112
113
  };
113
114
  const sourceMapKey = (node) => node.kind === "source-module" &&
114
115
  node.identity.strategy === "source-map-original"
115
- ? `source-map\0${node.identity.original_source}`
116
+ ? `source-map\0${canonicalJson([node.identity.source_root, node.identity.original_source])}`
116
117
  : null;
117
118
  const structuralFingerprintKey = (node) => {
118
119
  if (node.kind !== "javascript-module")
@@ -1,7 +1,7 @@
1
- import { jsonObjectSchema, jsonValueSchema } from "../../domain/jsonValue.js";
2
- import { partialApplicationCoverage, truncatedApplicationCoverage, } from "../../domain/javascript/javascriptApplicationEvidenceSchemas.js";
3
- import { flattenSemanticReturnValue } from "../../domain/javascript/javascriptSemanticReturns.js";
4
- /** Project one exact export/callable link into shallow bounded graph values. */
1
+ import { jsonObjectSchema, jsonValueSchema } from "../jsonValue.js";
2
+ import { partialApplicationCoverage, truncatedApplicationCoverage, } from "./javascriptApplicationEvidenceSchemas.js";
3
+ import { flattenSemanticReturnValue } from "./javascriptSemanticReturns.js";
4
+ /** Project one exact export/callable link into inert return-shape observations. */
5
5
  export const projectJavaScriptExportReturnShapes = (input) => {
6
6
  if (input.link.callableId === null || input.link.exportedName === null)
7
7
  return null;
@@ -2,7 +2,7 @@ import { compareCodePoints, uniqueSorted } from "../canonicalOrdering.js";
2
2
  import { canonicalExportShapeValue, digestExportShapeValue, } from "./javascriptExportShapeComparisonIdentity.js";
3
3
  import { javaScriptExportShapeComparisonResultSchema, } from "./javascriptExportShapeComparisonSchemas.js";
4
4
  import { retainJavaScriptExportShapes, selectJavaScriptExport, } from "./javascriptExportShapeSelection.js";
5
- import { buildJavaScriptExportShapeChanges, hasPartialJavaScriptExportPropertyCoverage, pairJavaScriptExportShapeVariants, } from "./javascriptExportShapeVariants.js";
5
+ import { buildJavaScriptExportShapeChanges, buildJavaScriptExportShapeInventories, hasPartialJavaScriptExportPropertyCoverage, pairJavaScriptExportShapeVariants, } from "./javascriptExportShapeVariants.js";
6
6
  /** Compare exact selected export return shapes without executing JavaScript. */
7
7
  export const compareJavaScriptExportShapes = (input) => {
8
8
  const left = selectJavaScriptExport(input.left);
@@ -21,6 +21,11 @@ export const compareJavaScriptExportShapes = (input) => {
21
21
  }));
22
22
  const changes = allChanges;
23
23
  const omittedChanges = 0;
24
+ const propertyInventories = buildJavaScriptExportShapeInventories({
25
+ pairing,
26
+ leftShapes: leftRetained.shapes,
27
+ rightShapes: rightRetained.shapes,
28
+ });
24
29
  const coverage = comparisonCoverage({
25
30
  input,
26
31
  left,
@@ -35,6 +40,7 @@ export const compareJavaScriptExportShapes = (input) => {
35
40
  const semantic = {
36
41
  left: left.selection,
37
42
  right: right.selection,
43
+ property_inventories: propertyInventories,
38
44
  summary: summarize(allChanges),
39
45
  changes,
40
46
  coverage,
@@ -1,6 +1,11 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import canonicalize from "canonicalize";
3
- /** Canonically encode one export-shape comparison value. */
3
+ /**
4
+ * Canonically encode one export-shape comparison value.
5
+ *
6
+ * Comparison identifiers hash the full result semantics, including each
7
+ * change's presence object and the per-variant property inventories.
8
+ */
4
9
  export const canonicalExportShapeValue = (value) => {
5
10
  const encoded = canonicalize(value);
6
11
  if (encoded === undefined)
@@ -67,7 +67,10 @@ export const compareJavaScriptExportShapesInputSchema = z
67
67
  message: "JavaScript export shape Evidence must be distinct",
68
68
  });
69
69
  });
70
- const projectedReturnFieldShape = { path: jsonPointerSchema };
70
+ const projectedReturnFieldShape = {
71
+ path: jsonPointerSchema,
72
+ presence: z.enum(["present", "absent", "unknown-coverage"]),
73
+ };
71
74
  const projectedReturnFieldSchema = z.discriminatedUnion("state", [
72
75
  z.strictObject({
73
76
  ...projectedReturnFieldShape,
@@ -209,11 +212,20 @@ const discriminantSchema = z.strictObject({
209
212
  path: jsonPointerSchema,
210
213
  value: semanticPrimitiveSchema,
211
214
  });
215
+ const propertyPresenceSchema = z.enum([
216
+ "present",
217
+ "absent",
218
+ "unknown-coverage",
219
+ ]);
212
220
  const comparisonChangeSchema = z.strictObject({
213
221
  change_id: prefixedDigestSchema("jesc_change"),
214
222
  status: z.enum(["added", "removed", "changed", "unknown"]),
215
223
  path: jsonPointerSchema,
216
224
  discriminant: discriminantSchema.nullable(),
225
+ presence: z.strictObject({
226
+ left: propertyPresenceSchema,
227
+ right: propertyPresenceSchema,
228
+ }),
217
229
  left: valueAvailabilitySchema,
218
230
  right: valueAvailabilitySchema,
219
231
  left_source_range: sourceRangeSchema.nullable(),
@@ -221,11 +233,27 @@ const comparisonChangeSchema = z.strictObject({
221
233
  evidence_links: z.array(evidenceIdSchema).length(2),
222
234
  limitations: z.array(textSchema),
223
235
  });
236
+ /** One change row; presence is required even when values stay unknown. */
237
+ export const javaScriptExportShapeComparisonChangeSchema = comparisonChangeSchema;
238
+ const inventoryPropertyCoverageSchema = z.strictObject({
239
+ path: jsonPointerSchema,
240
+ status: z.enum(["complete", "partial"]),
241
+ });
242
+ const propertyInventorySchema = z.strictObject({
243
+ side: z.enum(["left", "right"]),
244
+ variant_index: z.number().int().nonnegative(),
245
+ discriminant: discriminantSchema.nullable(),
246
+ paired: z.boolean(),
247
+ source_range: sourceRangeSchema,
248
+ properties: z.array(jsonPointerSchema),
249
+ property_coverage: z.array(inventoryPropertyCoverageSchema),
250
+ });
224
251
  /** Static export-return comparison with explicit unknown semantics. */
225
252
  export const javaScriptExportShapeComparisonResultSchema = z.strictObject({
226
253
  comparison_id: prefixedDigestSchema("jesc"),
227
254
  left: selectorResultSchema,
228
255
  right: selectorResultSchema,
256
+ property_inventories: z.array(propertyInventorySchema),
229
257
  summary: z.strictObject({
230
258
  added: z.number().int().min(0),
231
259
  removed: z.number().int().min(0),
@@ -41,11 +41,11 @@ export const selectJavaScriptExport = (side) => {
41
41
  limitations: [],
42
42
  };
43
43
  };
44
- /** Retain every projected return variant. */
45
- export const retainJavaScriptExportShapes = (selection) => {
46
- const shapes = selection.projection?.static_return_shapes ?? [];
47
- return { shapes, omitted: 0 };
48
- };
44
+ /** Retain every authenticated variant with its explicit slot presence. */
45
+ export const retainJavaScriptExportShapes = (selection) => ({
46
+ shapes: selection.projection?.static_return_shapes ?? [],
47
+ omitted: 0,
48
+ });
49
49
  const selectorBase = (side, candidates) => ({
50
50
  evidence_id: side.evidenceId,
51
51
  graph_id: side.graph.graph_id,