rea-agents 6.0.0 → 6.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (611) hide show
  1. package/README.md +26 -18
  2. package/bridge/android/ReaJadxBridge.java +14 -5
  3. package/bridge/ghidra/ReaGhidraBridge.java +205 -51
  4. package/bridge/hopper_bridge.py +314 -127
  5. package/bridge/mitmproxy/capture.py +0 -2
  6. package/bridge/native/rea_lldb_tracer.py +630 -94
  7. package/bridge/process/ProcessRunTokenReader.swift +39 -5
  8. package/bridge/pwntools/recorded_crash_impl.py +4 -0
  9. package/dist/android/JadxConfiguration.js +274 -31
  10. package/dist/android/JadxMcpTransport.js +18 -2
  11. package/dist/android/JadxProtocol.js +6 -0
  12. package/dist/android/JadxProvider.js +76 -37
  13. package/dist/android/JadxSession.js +23 -4
  14. package/dist/application/AnalysisContextQueries.js +8 -35
  15. package/dist/application/AnalysisDocument.js +32 -0
  16. package/dist/application/AppBundleExecutable.js +67 -21
  17. package/dist/application/BinaryTargetResolver.js +5 -3
  18. package/dist/application/BrowserEvidence.js +3 -8
  19. package/dist/application/BrowserScenarioEvidence.js +2 -18
  20. package/dist/application/CallPathTracing.js +19 -3
  21. package/dist/application/CapabilityInventory.js +48 -11
  22. package/dist/application/ClientConfigurationDocument.js +917 -8
  23. package/dist/application/ClientRegistrationIdentity.js +26 -5
  24. package/dist/application/ClientRegistrationStatus.js +29 -14
  25. package/dist/application/DirectAnalysis.js +56 -51
  26. package/dist/application/DirectAnalysisCleanup.js +72 -0
  27. package/dist/application/DirectAnalysisStatus.js +4 -5
  28. package/dist/application/Doctor.js +19 -21
  29. package/dist/application/DoctorDiagnostics.js +1 -2
  30. package/dist/application/DoctorScope.js +25 -13
  31. package/dist/application/EnhancedLiteralTracing.js +22 -25
  32. package/dist/application/EnhancedTools.js +64 -17
  33. package/dist/application/EvidenceBundleFiles.js +30 -13
  34. package/dist/application/FunctionAnalysisEvidence.js +2 -3
  35. package/dist/application/InventoryProjectionEvidence.js +4 -3
  36. package/dist/application/InvestigationProviders.js +11 -2
  37. package/dist/application/JsonFiles.js +83 -28
  38. package/dist/application/LinuxHopper.js +9 -6
  39. package/dist/application/MacHopper.js +15 -18
  40. package/dist/application/ProcedureAddressResolution.js +11 -0
  41. package/dist/application/RealHopperAssertions.js +0 -11
  42. package/dist/application/ReconstructionCoverageService.js +7 -4
  43. package/dist/application/ReconstructionObligationCandidates.js +1 -1
  44. package/dist/application/ReconstructionObligationLedgerService.js +4 -3
  45. package/dist/application/ReferenceSourceImportEntries.js +1 -1
  46. package/dist/application/Setup.js +21 -17
  47. package/dist/application/SetupClientConfiguration.js +10 -15
  48. package/dist/application/SetupHost.js +21 -29
  49. package/dist/application/SetupPlan.js +11 -9
  50. package/dist/application/SupportedClients.js +34 -1
  51. package/dist/application/Uninstall.js +82 -29
  52. package/dist/application/Update.js +18 -3
  53. package/dist/application/UpdateMaintenance.js +7 -5
  54. package/dist/application/UpdateRuntime.js +57 -36
  55. package/dist/application/WebModuleTraceService.js +4 -2
  56. package/dist/application/WebNetworkCaptureService.js +4 -2
  57. package/dist/application/WebRuntimeService.js +5 -3
  58. package/dist/application/WebScriptExportService.js +32 -6
  59. package/dist/application/WebSourceLocationService.js +4 -2
  60. package/dist/application/WorkflowEvidence.js +105 -0
  61. package/dist/application/XrefsAddressResolution.js +45 -0
  62. package/dist/application/analysisView/AnalysisViewService.js +76 -0
  63. package/dist/application/binary/AnalysisClientCleanup.js +30 -5
  64. package/dist/application/binary/AnalysisProviderEvaluation.js +22 -7
  65. package/dist/application/binary/AnalysisProviderRegistry.js +4 -6
  66. package/dist/application/binary/AnalysisSnapshotCache.js +13 -14
  67. package/dist/application/binary/BinarySession.js +161 -93
  68. package/dist/application/binary/BinarySessionComposition.js +1 -3
  69. package/dist/application/binary/BinarySessionExecution.js +3 -5
  70. package/dist/application/binary/BinarySessionOpen.js +4 -4
  71. package/dist/application/binary/BinarySessionRecords.js +26 -4
  72. package/dist/application/binary/BinarySessionStatus.js +18 -7
  73. package/dist/application/binary/CompositeProvider.js +16 -17
  74. package/dist/application/binary/LazyAnalysisProvider.js +8 -5
  75. package/dist/application/binary/SessionProviderRouter.js +27 -135
  76. package/dist/application/binaryDiagnostics/BinaryLayoutService.js +4 -2
  77. package/dist/application/binaryDiagnostics/RecordedCrashService.js +4 -2
  78. package/dist/application/evm/EvmInterfaceService.js +4 -2
  79. package/dist/application/homebrew.js +48 -0
  80. package/dist/application/investigation/EvidenceLedger.js +21 -7
  81. package/dist/application/investigation/InvestigationRecords.js +8 -0
  82. package/dist/application/javascript/ElectronActiveEvidence.js +9 -13
  83. package/dist/application/javascript/JavaScriptAnalysisControl.js +34 -0
  84. package/dist/application/javascript/JavaScriptApplicationEvidence.js +21 -4
  85. package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +19 -2
  86. package/dist/application/javascript/JavaScriptApplicationService.js +27 -15
  87. package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +5 -5
  88. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +10 -7
  89. package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +44 -10
  90. package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +11 -3
  91. package/dist/application/javascript/JavaScriptArtifactGraphContext.js +9 -0
  92. package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +8 -5
  93. package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +12 -3
  94. package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +0 -1
  95. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +49 -19
  96. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +56 -8
  97. package/dist/application/javascript/JavaScriptModuleRelationships.js +38 -9
  98. package/dist/application/javascript/JavaScriptRecoveryService.js +4 -2
  99. package/dist/application/javascript/JavaScriptRuntimeObservationService.js +6 -4
  100. package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +3 -3
  101. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +2 -3
  102. package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +63 -61
  103. package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +1 -2
  104. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +2 -3
  105. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +1 -5
  106. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +75 -46
  107. package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +2 -3
  108. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +64 -19
  109. package/dist/application/managed/ManagedApplicationGraphService.js +4 -3
  110. package/dist/application/managed/ManagedMemberComparisonService.js +9 -5
  111. package/dist/application/managed/ManagedNativeVerificationService.js +6 -4
  112. package/dist/application/managed/ManagedReconstructionService.js +4 -3
  113. package/dist/application/process/ProcessCli.js +25 -17
  114. package/dist/application/process/ProcessEvidence.js +4 -4
  115. package/dist/application/workflowInputError.js +18 -0
  116. package/dist/artifacts/ArtifactProvider.js +48 -13
  117. package/dist/artifacts/ArtifactReader.js +31 -0
  118. package/dist/artifacts/DirectoryArtifactReader.js +2 -1
  119. package/dist/artifacts/MachOSliceArtifactReader.js +106 -15
  120. package/dist/artifacts/NativeDmgArtifactReader.js +73 -21
  121. package/dist/artifacts/SafeOutputTree.js +16 -2
  122. package/dist/artifacts/ZipArtifactReader.js +11 -4
  123. package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +26 -5
  124. package/dist/artifacts/apple/DylibResolutionReader.js +17 -7
  125. package/dist/artifacts/apple/InterfaceBuilderAnalysis.js +176 -56
  126. package/dist/artifacts/apple/InterfaceBuilderDecodeBudget.js +195 -0
  127. package/dist/artifacts/apple/KeyedArchiveReader.js +55 -23
  128. package/dist/artifacts/apple/MachoLoadCommandReader.js +92 -31
  129. package/dist/artifacts/apple/NibArchive.js +81 -14
  130. package/dist/artifacts/apple/NibViewHierarchy.js +10 -3
  131. package/dist/artifacts/apple/PlistNumberLiterals.js +164 -0
  132. package/dist/artifacts/extraction/ArtifactExtraction.js +78 -21
  133. package/dist/artifacts/inventory/ArtifactGraphConstruction.js +79 -68
  134. package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
  135. package/dist/artifacts/inventory/reader.js +3 -3
  136. package/dist/artifacts/inventory/scanCanonical.js +59 -38
  137. package/dist/artifacts/inventory/scanReader.js +5 -9
  138. package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +6 -2
  139. package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
  140. package/dist/browser/CdpBrowserProvider.js +2 -3
  141. package/dist/browser/CdpCaptureCompleteness.js +2 -0
  142. package/dist/browser/CdpCaptureEventHandlers.js +78 -15
  143. package/dist/browser/CdpCaptureEventTypes.js +5 -1
  144. package/dist/browser/CdpCaptureEvents.js +25 -1
  145. package/dist/browser/CdpCaptureValues.js +20 -0
  146. package/dist/browser/CdpConnection.js +30 -11
  147. package/dist/browser/CdpElectronProvider.js +0 -2
  148. package/dist/browser/CdpElectronScriptEvents.js +2 -8
  149. package/dist/browser/CdpElectronScripts.js +2 -3
  150. package/dist/browser/CdpOptionalCommand.js +2 -3
  151. package/dist/browser/CdpPageCapture.js +23 -1
  152. package/dist/browser/CdpPageCaptureScripts.js +2 -3
  153. package/dist/browser/CdpSafeMetadata.js +10 -10
  154. package/dist/browser/PlaywrightBrowserScenarioProvider.js +59 -44
  155. package/dist/browser/PlaywrightElectronActiveActions.js +34 -79
  156. package/dist/browser/PlaywrightElectronActiveProjection.js +141 -0
  157. package/dist/browser/PlaywrightElectronActiveProvider.js +133 -130
  158. package/dist/browser/PlaywrightScenarioArtifacts.js +1 -1
  159. package/dist/browser/PlaywrightScenarioBrowser.js +139 -39
  160. package/dist/browser/PlaywrightScenarioEvents.js +1 -1
  161. package/dist/browser/PlaywrightScenarioSession.js +39 -22
  162. package/dist/browser/WebSourceMapFetcher.js +426 -72
  163. package/dist/browser/assets/LocalWebScriptArtifacts.js +2 -2
  164. package/dist/browser/assets/ScriptCaptureAdapters.js +1 -1
  165. package/dist/browser/history/CaptureFailures.js +41 -1
  166. package/dist/browser/history/CaptureRelease.js +5 -0
  167. package/dist/browser/history/HarCaptureAdapter.js +3 -3
  168. package/dist/browser/history/HarJson.js +3 -2
  169. package/dist/browser/history/HistoricalCaptureDecoder.js +4 -2
  170. package/dist/browser/history/MitmproxyCaptureAdapter.js +4 -2
  171. package/dist/catalogIdentity.js +0 -1
  172. package/dist/cli/analysisSelector.js +23 -0
  173. package/dist/cli/analysisViewCommands.js +36 -0
  174. package/dist/cli/applicationCommands.js +2 -3
  175. package/dist/cli/artifactCommands.js +11 -12
  176. package/dist/cli/coreAnalysisCommands.js +3 -3
  177. package/dist/cli/coreBinaryCommands.js +100 -37
  178. package/dist/cli/coreNativeCommands.js +9 -10
  179. package/dist/cli/electronCommands.js +10 -9
  180. package/dist/cli/interactiveSetup.js +6 -6
  181. package/dist/cli/javascriptApplicationAnalysis.js +7 -3
  182. package/dist/cli/jsonOutput.js +4 -99
  183. package/dist/cli/managedCommands.js +7 -8
  184. package/dist/cli/nativeCallCommands.js +3 -5
  185. package/dist/cli/omittableDefaults.js +50 -0
  186. package/dist/cli/processCommands.js +3 -2
  187. package/dist/cli/setupCommands.js +16 -15
  188. package/dist/cli/utilityCommands.js +9 -9
  189. package/dist/cli/webRuntimeCommands.js +8 -8
  190. package/dist/cli.js +18 -9
  191. package/dist/cliBrowserScenarioCommands.js +2 -2
  192. package/dist/cliCommandNames.js +1 -1
  193. package/dist/cliJsonInput.js +24 -5
  194. package/dist/cliOutput.js +0 -38
  195. package/dist/composition/auxiliaryAnalysisProviders.js +27 -23
  196. package/dist/composition/binary.js +9 -9
  197. package/dist/composition/browserScenario.js +2 -1
  198. package/dist/composition/directAnalysis.js +20 -13
  199. package/dist/composition/electronScenario.js +1 -1
  200. package/dist/composition/optionalObservationProviders.js +12 -7
  201. package/dist/config/environment.js +10 -0
  202. package/dist/config/ghidraStartupTimeout.js +12 -0
  203. package/dist/config/homeDirectory.js +12 -0
  204. package/dist/config/mcpResponseBudget.js +30 -0
  205. package/dist/config/parseConfig.js +8 -3
  206. package/dist/config/parsers.js +19 -22
  207. package/dist/contracts/analysisViewToolContracts.js +56 -0
  208. package/dist/contracts/applicationToolContracts.js +5 -4
  209. package/dist/contracts/artifactComparisonExample.js +2 -2
  210. package/dist/contracts/artifactToolContracts.js +1 -1
  211. package/dist/contracts/browserScenarioToolContracts.js +1 -1
  212. package/dist/contracts/browserToolContracts.js +19 -15
  213. package/dist/contracts/enhancedInputs.js +7 -5
  214. package/dist/contracts/enhancedToolContracts.js +7 -6
  215. package/dist/contracts/evm/evmToolContracts.js +1 -1
  216. package/dist/contracts/functionWorkflowToolContracts.js +1 -1
  217. package/dist/contracts/hopperMemoryContracts.js +2 -5
  218. package/dist/contracts/inputSchemaPresentation.js +90 -0
  219. package/dist/contracts/investigationExamples.js +4 -3
  220. package/dist/contracts/javascript/electronToolContracts.js +2 -2
  221. package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +0 -20
  222. package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +245 -0
  223. package/dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js +1 -1
  224. package/dist/contracts/managed/managedToolContracts.js +7 -14
  225. package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
  226. package/dist/contracts/mobileApplicationGraphExamples.js +3 -3
  227. package/dist/contracts/native/binaryDiagnosticsToolContracts.js +1 -1
  228. package/dist/contracts/native/nativeToolContracts.js +5 -3
  229. package/dist/contracts/officialToolContracts.js +16 -16
  230. package/dist/contracts/promptContracts.js +5 -5
  231. package/dist/contracts/providerSelection.js +1 -1
  232. package/dist/contracts/sessionLifecycleInputs.js +3 -7
  233. package/dist/contracts/sessionStatusContract.js +2 -4
  234. package/dist/contracts/sessionToolContracts.js +18 -8
  235. package/dist/contracts/sessionToolSchemas.js +3 -19
  236. package/dist/contracts/toolContractExamples.js +0 -1
  237. package/dist/contracts/toolContractHelpers.js +4 -1
  238. package/dist/contracts/toolContracts.js +2 -0
  239. package/dist/contracts/toolEffects.js +1 -1
  240. package/dist/contracts/toolOutputSchemaGroups.js +160 -115
  241. package/dist/contracts/toolOutputSchemaPrimitives.js +28 -20
  242. package/dist/contracts/toolSchemaMetadata.js +41 -33
  243. package/dist/contracts/webNetworkCaptureToolContracts.js +2 -2
  244. package/dist/contracts/webRuntimeToolContracts.js +1 -1
  245. package/dist/contracts/webScriptToolContracts.js +1 -1
  246. package/dist/doctorRuntime.js +7 -5
  247. package/dist/domain/analysisErrorBase.js +8 -3
  248. package/dist/domain/analysisErrorCore.js +6 -1
  249. package/dist/domain/analysisErrorPresentation.js +90 -20
  250. package/dist/domain/analysisErrorProjection.js +130 -32
  251. package/dist/domain/analysisSnapshot.js +29 -31
  252. package/dist/domain/analysisView/analysisView.js +243 -0
  253. package/dist/domain/analysisView/analysisViewCoverage.js +19 -0
  254. package/dist/domain/analysisView/binaryLayoutView.js +159 -0
  255. package/dist/domain/analysisView/javascriptApplicationView.js +238 -0
  256. package/dist/domain/android/androidAnalysis.js +2 -4
  257. package/dist/domain/android/androidApplication.js +18 -10
  258. package/dist/domain/apple/appleApplication.js +42 -15
  259. package/dist/domain/apple/dyldEnvironment.js +73 -0
  260. package/dist/domain/apple/dylibResolution.js +130 -12
  261. package/dist/domain/apple/dylibResolutionFindings.js +9 -7
  262. package/dist/domain/apple/interfaceBuilderGraph.js +25 -14
  263. package/dist/domain/apple/interfaceBuilderKeyedArchive.js +13 -3
  264. package/dist/domain/apple/keyedArchive.js +35 -3
  265. package/dist/domain/apple/machoContainer.js +54 -0
  266. package/dist/domain/apple/plistNumbers.js +76 -0
  267. package/dist/domain/artifactComparison.js +15 -6
  268. package/dist/domain/artifactGraph.js +16 -3
  269. package/dist/domain/artifactIdentity.js +29 -0
  270. package/dist/domain/artifactInventoryEvidence.js +28 -40
  271. package/dist/domain/artifactOperationError.js +3 -3
  272. package/dist/domain/artifactPartialObservation.js +1 -0
  273. package/dist/domain/artifactPathSyntax.js +49 -0
  274. package/dist/domain/binaryTarget.js +39 -13
  275. package/dist/domain/bridgeCandidateProjection.js +71 -0
  276. package/dist/domain/browserCaptureComparison.js +13 -49
  277. package/dist/domain/browserCompleteness.js +1 -0
  278. package/dist/domain/browserNetworkEvidence.js +10 -4
  279. package/dist/domain/browserObservation.js +0 -1
  280. package/dist/domain/browserObservationError.js +24 -5
  281. package/dist/domain/browserObservationSchemas.js +14 -3
  282. package/dist/domain/browserScenario.js +0 -1
  283. package/dist/domain/browserScenarioCapture.js +1 -2
  284. package/dist/domain/browserScenarioDiff.js +0 -2
  285. package/dist/domain/browserScenarioDiffEvidence.js +0 -12
  286. package/dist/domain/browserScenarioDiffValues.js +2 -2
  287. package/dist/domain/browserScenarioValues.js +5 -10
  288. package/dist/domain/bundleComparison.js +3 -2
  289. package/dist/domain/callPath.js +8 -9
  290. package/dist/domain/callPathSchemas.js +2 -2
  291. package/dist/domain/canonicalJsonDigestSteps.js +133 -0
  292. package/dist/domain/canonicalOrdering.js +9 -5
  293. package/dist/domain/changedBehavior.js +9 -9
  294. package/dist/domain/comparisonSourceEvidence.js +40 -0
  295. package/dist/domain/completionLedgerGeneration.js +2 -1
  296. package/dist/domain/configurationErrors.js +13 -1
  297. package/dist/domain/conformancePackage.js +4 -3
  298. package/dist/domain/evidence.js +65 -36
  299. package/dist/domain/evidenceBundle.js +47 -8
  300. package/dist/domain/evidenceCompletionLedger.js +2 -1
  301. package/dist/domain/evidenceErrors.js +12 -1
  302. package/dist/domain/explicitSensitiveFailure.js +17 -1
  303. package/dist/domain/firmware/firmwareAnalysis.js +6 -7
  304. package/dist/domain/functionComparison.js +4 -5
  305. package/dist/domain/functionComparisonDimensions.js +120 -87
  306. package/dist/domain/functionComparisonNormalization.js +23 -34
  307. package/dist/domain/functionComparisonResults.js +1 -4
  308. package/dist/domain/functionComparisonSchemas.js +2 -8
  309. package/dist/domain/functionDossierEvidence.js +2 -37
  310. package/dist/domain/hopperErrors.js +23 -2
  311. package/dist/domain/hopperValues.js +51 -8
  312. package/dist/domain/immutableJson.js +114 -0
  313. package/dist/domain/inputIssueProjection.js +3 -0
  314. package/dist/domain/javascript/electronActiveObservation.js +47 -64
  315. package/dist/domain/javascript/electronObservation.js +14 -3
  316. package/dist/domain/javascript/electronStaticAnalysisBrowser.js +10 -9
  317. package/dist/domain/javascript/electronStaticAnalysisIpc.js +2 -1
  318. package/dist/domain/javascript/electronStaticAnalysisNative.js +2 -1
  319. package/dist/domain/javascript/electronStaticAnalysisValues.js +6 -12
  320. package/dist/domain/javascript/javascriptApplicationAnalysis.js +71 -23
  321. package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +2 -0
  322. package/dist/domain/javascript/javascriptApplicationGraph.js +39 -3
  323. package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +9 -2
  324. package/dist/domain/javascript/javascriptApplicationVersionItems.js +5 -2
  325. package/dist/domain/javascript/javascriptApplicationVersionKeys.js +2 -1
  326. package/dist/domain/javascript/javascriptAstValues.js +20 -0
  327. package/dist/{application/javascript/JavaScriptReturnShapeProjection.js → domain/javascript/javascriptExportReturnShapeProjection.js} +4 -4
  328. package/dist/domain/javascript/javascriptExportShapeComparison.js +7 -1
  329. package/dist/domain/javascript/javascriptExportShapeComparisonIdentity.js +6 -1
  330. package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +29 -1
  331. package/dist/domain/javascript/javascriptExportShapeSelection.js +5 -5
  332. package/dist/domain/javascript/javascriptExportShapeVariants.js +67 -14
  333. package/dist/domain/javascript/javascriptFeatureSeed.js +20 -0
  334. package/dist/domain/javascript/javascriptFeatureTraversal.js +0 -1
  335. package/dist/domain/javascript/javascriptNativeHandoff.js +1 -1
  336. package/dist/domain/javascript/javascriptRecovery.js +3 -8
  337. package/dist/domain/javascript/javascriptRuntimeLoadState.js +0 -1
  338. package/dist/domain/javascript/javascriptRuntimeObservation.js +10 -2
  339. package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +1 -1
  340. package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +3 -2
  341. package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +0 -1
  342. package/dist/domain/javascript/javascriptSemanticAnalysis.js +106 -5
  343. package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +2 -1
  344. package/dist/domain/javascript/javascriptSemanticCalls.js +2 -1
  345. package/dist/domain/javascript/javascriptSemanticChildProcesses.js +2 -1
  346. package/dist/domain/javascript/javascriptSemanticCoverage.js +6 -5
  347. package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +9 -17
  348. package/dist/domain/javascript/javascriptSemanticDataEffects.js +23 -6
  349. package/dist/domain/javascript/javascriptSemanticGraph.js +98 -43
  350. package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +1 -0
  351. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +77 -20
  352. package/dist/domain/javascript/javascriptSemanticMutationValues.js +21 -27
  353. package/dist/domain/javascript/javascriptSemanticObjects.js +83 -42
  354. package/dist/domain/javascript/javascriptSemanticPrimitives.js +18 -21
  355. package/dist/domain/javascript/javascriptSemanticProjection.js +2 -3
  356. package/dist/domain/javascript/javascriptSemanticPromises.js +2 -1
  357. package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -4
  358. package/dist/domain/javascript/javascriptSemanticResourceLimits.js +77 -0
  359. package/dist/domain/javascript/javascriptSemanticResources.js +1 -1
  360. package/dist/domain/javascript/javascriptSemanticReturns.js +32 -17
  361. package/dist/domain/javascript/javascriptSemanticSlots.js +72 -0
  362. package/dist/domain/javascript/javascriptSemanticValues.js +126 -61
  363. package/dist/domain/javascript/javascriptSourceMapPaths.js +104 -0
  364. package/dist/domain/javascript/javascriptSourceParser.js +6 -2
  365. package/dist/domain/javascript/javascriptStaticAnalysis.js +22 -17
  366. package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +5 -3
  367. package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +16 -5
  368. package/dist/domain/javascript/javascriptStaticAnalysisFindings.js +66 -7
  369. package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +28 -17
  370. package/dist/domain/javascript/javascriptStaticAnalysisState.js +3 -2
  371. package/dist/domain/javascript/sourceToBundleComparison.js +12 -3
  372. package/dist/domain/javascript/sourceToBundleSignals.js +47 -19
  373. package/dist/domain/jsonSerialization.js +109 -0
  374. package/dist/domain/jsonValue.js +90 -6
  375. package/dist/domain/localPath.js +6 -0
  376. package/dist/domain/managed/managedApplicationGraph.js +10 -10
  377. package/dist/domain/managed/managedArtifact.js +6 -4
  378. package/dist/domain/managed/managedInspectionEvidence.js +16 -0
  379. package/dist/domain/managed/managedMemberComparison.js +2 -9
  380. package/dist/domain/managed/managedMemberComparisonMatch.js +5 -9
  381. package/dist/domain/managed/managedNativeVerification.js +3 -11
  382. package/dist/domain/managed/managedNativeVerificationMatch.js +9 -3
  383. package/dist/domain/native/binaryLayout.js +2 -3
  384. package/dist/domain/native/fileOffsetPartialObservation.js +1 -0
  385. package/dist/domain/native/nativeApiBoundary.js +1 -1
  386. package/dist/domain/native/nativeCallObservation.js +37 -13
  387. package/dist/domain/native/nativeCallPartialObservation.js +33 -0
  388. package/dist/domain/native/nativeInstruction.js +7 -0
  389. package/dist/domain/native/recordedCrash.js +2 -3
  390. package/dist/domain/offsetDateTime.js +17 -0
  391. package/dist/domain/process/processCapture.js +21 -16
  392. package/dist/domain/process/processCaptureCoverage.js +67 -0
  393. package/dist/domain/process/processCaptureExample.js +2 -1
  394. package/dist/domain/process/processCaptureParsing.js +1 -34
  395. package/dist/domain/process/processCaptureValidation.js +81 -13
  396. package/dist/domain/process/processComparison.js +79 -26
  397. package/dist/domain/process/processObservation.js +10 -2
  398. package/dist/domain/process/processScenario.js +35 -12
  399. package/dist/domain/process/processTraceComparison.js +0 -2
  400. package/dist/domain/process/processTraceDimensionProjection.js +1 -1
  401. package/dist/domain/process/processTraceEvaluation.js +15 -11
  402. package/dist/domain/process/processTraceSpecification.js +3 -4
  403. package/dist/domain/propertyListKeys.js +1 -1
  404. package/dist/domain/propertyListXmlText.js +19 -0
  405. package/dist/domain/providerAdapterError.js +3 -1
  406. package/dist/domain/providerOperationHealth.js +54 -0
  407. package/dist/domain/reconstructionCoverage.js +5 -2
  408. package/dist/domain/reconstructionObligationLedgerSchemas.js +2 -1
  409. package/dist/domain/reconstructionReadinessSchemas.js +2 -1
  410. package/dist/domain/reconstructionVerification.js +9 -46
  411. package/dist/domain/reconstructionVerificationSchemas.js +4 -3
  412. package/dist/domain/referenceSourceGraph.js +20 -21
  413. package/dist/domain/staticRuntimeCorrelation.js +8 -45
  414. package/dist/domain/stringPatterns.js +6 -0
  415. package/dist/domain/swiftSymbolClassification.js +61 -0
  416. package/dist/domain/symbolAnalysis.js +66 -18
  417. package/dist/domain/webBundleAnalysis.js +20 -8
  418. package/dist/domain/webBundleAnalyzerInspection.js +13 -8
  419. package/dist/domain/webBundleAnalyzerResult.js +41 -2
  420. package/dist/domain/webCaptureDiff.js +0 -1
  421. package/dist/domain/webCaptureDiffSchemas.js +6 -3
  422. package/dist/domain/webEventListeners.js +3 -2
  423. package/dist/domain/webExecution.js +3 -2
  424. package/dist/domain/webRuntime.js +19 -7
  425. package/dist/domain/webScriptExport.js +1 -1
  426. package/dist/domain/webSourceLocation.js +1 -0
  427. package/dist/dotnet/ManagedArtifactInspector.js +2 -19
  428. package/dist/dotnet/ManagedMemberInspector.js +12 -18
  429. package/dist/dotnet/ManagedMemberInspectorCore.js +47 -44
  430. package/dist/dotnet/ManagedMemberRows.js +75 -62
  431. package/dist/dotnet/ManagedMetadataInventory.js +16 -22
  432. package/dist/dotnet/ManagedMethodBodyReader.js +4 -0
  433. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +109 -94
  434. package/dist/dotnet/ManagedNativeBoundaryInspector.js +12 -21
  435. package/dist/dotnet/ManagedReaderFailure.js +16 -0
  436. package/dist/dotnet/ManagedStaticProvider.js +3 -5
  437. package/dist/evaluation/AgentEvaluationFixtures.js +250 -0
  438. package/dist/evaluation/AgentEvaluationReport.js +28 -0
  439. package/dist/evaluation/CodexAgentEval.js +12 -8
  440. package/dist/evaluation/KnownAnswerEvaluation.js +281 -0
  441. package/dist/evm/EvmoleInterfaceProvider.js +2 -1
  442. package/dist/firmware/FirmwareCommand.js +9 -5
  443. package/dist/firmware/FirmwareFiles.js +1 -1
  444. package/dist/firmware/FirmwareProvider.js +4 -4
  445. package/dist/generatedPackageMetadata.js +2 -2
  446. package/dist/ghidra/GhidraAnalysisProfile.js +7 -5
  447. package/dist/ghidra/GhidraClient.js +126 -34
  448. package/dist/ghidra/GhidraClientStartup.js +0 -2
  449. package/dist/ghidra/GhidraDiagnostics.js +7 -7
  450. package/dist/ghidra/GhidraDoctor.js +6 -5
  451. package/dist/ghidra/GhidraFunctionValues.js +13 -12
  452. package/dist/ghidra/GhidraInstallation.js +58 -33
  453. package/dist/ghidra/GhidraInventoryValues.js +14 -4
  454. package/dist/ghidra/GhidraJavaLaunch.js +66 -0
  455. package/dist/ghidra/GhidraLauncher.js +47 -22
  456. package/dist/ghidra/GhidraProvider.js +6 -2
  457. package/dist/ghidra/GhidraProviderCapabilities.js +20 -2
  458. package/dist/ghidra/GhidraProviderClient.js +36 -15
  459. package/dist/ghidra/GhidraSessionError.js +13 -7
  460. package/dist/ghidra/GhidraSessionRoot.js +39 -0
  461. package/dist/ghidra/GhidraTargetSnapshot.js +47 -12
  462. package/dist/ghidra/GhidraTransport.js +20 -0
  463. package/dist/ghidra/extensions/GhidraExtensions.js +17 -10
  464. package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +8 -2
  465. package/dist/hopper/BridgeLauncher.js +65 -56
  466. package/dist/hopper/HopperAnalysisProfile.js +65 -12
  467. package/dist/hopper/HopperCleanup.js +63 -22
  468. package/dist/hopper/HopperClient.js +288 -59
  469. package/dist/hopper/HopperFileOffset.js +237 -0
  470. package/dist/hopper/HopperMachOImage.js +197 -0
  471. package/dist/hopper/HopperOperationStage.js +6 -0
  472. package/dist/hopper/HopperProvider.js +71 -19
  473. package/dist/hopper/HopperProviderCapabilities.js +19 -1
  474. package/dist/hopper/HopperRegexSearch.js +134 -0
  475. package/dist/hopper/HopperRegexWorker.js +27 -0
  476. package/dist/hopper/HopperRequestQueue.js +68 -19
  477. package/dist/hopper/HopperTargetLease.js +133 -49
  478. package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -0
  479. package/dist/ida/IdaConfiguration.js +8 -3
  480. package/dist/ida/IdaInput.js +1 -7
  481. package/dist/ida/IdaMcpConnection.js +8 -4
  482. package/dist/ida/IdaOperationRunner.js +3 -3
  483. package/dist/ida/IdaProvider.js +8 -12
  484. package/dist/ida/IdaSessionClient.js +20 -18
  485. package/dist/ida/IdaWorkspace.js +12 -13
  486. package/dist/inspector/JavaScriptRuntimeScope.js +9 -1
  487. package/dist/inspector/V8InspectorCaptureProjection.js +9 -4
  488. package/dist/inspector/V8InspectorProvider.js +82 -36
  489. package/dist/javascript/recovery/WakaruCommand.js +7 -2
  490. package/dist/javascript/recovery/WakaruExecution.js +5 -2
  491. package/dist/javascript/sourceMaps/DecodedSourceMap.js +47 -0
  492. package/dist/javascript/sourceMaps/SourceMapCommand.js +16 -0
  493. package/dist/javascript/sourceMaps/SourceMapFormat.js +79 -31
  494. package/dist/javascript/sourceMaps/TraceSourceMap.js +14 -28
  495. package/dist/main/shutdown.js +11 -3
  496. package/dist/main/startup.js +9 -2
  497. package/dist/main/transport.js +22 -2
  498. package/dist/main.js +11 -18
  499. package/dist/mcpDoctor.js +62 -2
  500. package/dist/native/AppleDispatchCoverage.js +47 -6
  501. package/dist/native/AppleDispatchDecodeFacts.js +6 -0
  502. package/dist/native/AppleDispatchMetadata.js +6 -3
  503. package/dist/native/AppleMachoFixups.js +48 -24
  504. package/dist/native/AppleMachoSelection.js +48 -22
  505. package/dist/native/AppleObjcCategories.js +6 -2
  506. package/dist/native/AppleObjcDispatchFacets.js +5 -2
  507. package/dist/native/AppleObjcProperties.js +2 -1
  508. package/dist/native/AppleSwiftDispatchFacets.js +27 -21
  509. package/dist/native/AppleSwiftVtables.js +21 -15
  510. package/dist/native/CommandRunner.js +87 -88
  511. package/dist/native/LldbCallTracer.js +372 -103
  512. package/dist/native/LldbRetainedObservations.js +178 -0
  513. package/dist/native/NativeCallObservation.js +62 -3
  514. package/dist/native/NativeMacOSProvider.js +122 -31
  515. package/dist/native/NativeUiHelperRuntime.js +11 -2
  516. package/dist/native/NativeUiObservation.js +2 -2
  517. package/dist/native/SignatureTargetBinding.js +155 -0
  518. package/dist/native/parsers/lipo.js +71 -1
  519. package/dist/native/pwndbg/PwndbgCoreContext.js +25 -5
  520. package/dist/native/pwntools/PwntoolsDecoder.js +2 -1
  521. package/dist/native/pwntools/RecordedCrashStructureBindings.js +2 -0
  522. package/dist/process/DarwinProcessRunTokenReader.js +23 -10
  523. package/dist/process/ExecFileOutput.js +108 -6
  524. package/dist/process/OwnedCommand.js +7 -2
  525. package/dist/process/PrivateRuntimeRoot.js +10 -5
  526. package/dist/process/ProcessOwnership.js +204 -57
  527. package/dist/process/ProcessOwnershipObservation.js +60 -9
  528. package/dist/process/ProviderProcess.js +39 -10
  529. package/dist/process/capture/FilesystemSnapshot.js +50 -13
  530. package/dist/process/capture/ProcessCaptureError.js +15 -2
  531. package/dist/process/capture/ProcessCaptureLifecycle.js +235 -81
  532. package/dist/process/capture/ProcessFilesystemEffects.js +33 -3
  533. package/dist/process/capture/ProcessHarness.js +21 -25
  534. package/dist/process/capture/ProcessNormalization.js +20 -2
  535. package/dist/process/capture/ProcessSampling.js +25 -2
  536. package/dist/process/capture/TerminalRenderer.js +14 -0
  537. package/dist/process/snapshotEnvironment.js +14 -0
  538. package/dist/server/EvidenceMcpServer.js +157 -0
  539. package/dist/server/createServer.js +61 -41
  540. package/dist/server/mcpClientMetadata.js +12 -5
  541. package/dist/server/promptCompletion.js +3 -8
  542. package/dist/server/registerAnalysisViewTool.js +15 -0
  543. package/dist/server/registerAndroidTools.js +2 -5
  544. package/dist/server/registerApplicationTools/compareExportShapes.js +4 -5
  545. package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
  546. package/dist/server/registerApplicationTools/compareVersions.js +4 -5
  547. package/dist/server/registerApplicationTools/coverage.js +1 -2
  548. package/dist/server/registerApplicationTools/helpers.js +1 -4
  549. package/dist/server/registerApplicationTools/obligationLedger.js +4 -5
  550. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -4
  551. package/dist/server/registerApplicationTools/traceFeature.js +4 -5
  552. package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
  553. package/dist/server/registerArtifactComparisonTool.js +13 -10
  554. package/dist/server/registerBinaryDiagnosticsTools.js +2 -5
  555. package/dist/server/registerBrowserScenarioTool.js +3 -6
  556. package/dist/server/registerBrowserTools.js +13 -18
  557. package/dist/server/registerBundleComparisonTool.js +5 -7
  558. package/dist/server/registerCloseLifecycleTool.js +9 -20
  559. package/dist/server/registerElectronTools.js +10 -15
  560. package/dist/server/registerEnhancedTools.js +36 -77
  561. package/dist/server/registerEvidenceTools.js +3 -6
  562. package/dist/server/registerEvmTools.js +2 -5
  563. package/dist/server/registerFirmwareTools.js +2 -5
  564. package/dist/server/registerFunctionComparisonTool.js +15 -12
  565. package/dist/server/registerInvestigationTools.js +16 -17
  566. package/dist/server/registerJavaScriptRecoveryTool.js +2 -5
  567. package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -8
  568. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +5 -8
  569. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -7
  570. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +6 -9
  571. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +6 -9
  572. package/dist/server/registerOfficialTools.js +4 -21
  573. package/dist/server/registerProcessComparisonTool.js +74 -48
  574. package/dist/server/registerRecordedCrashTools.js +2 -5
  575. package/dist/server/registerSessionRecordTools.js +19 -24
  576. package/dist/server/registerSessionStatusTool.js +19 -6
  577. package/dist/server/registerSessionTools.js +20 -18
  578. package/dist/server/registerWebModuleTool.js +2 -5
  579. package/dist/server/registerWebNetworkCaptureTool.js +2 -5
  580. package/dist/server/registerWebRuntimeTools.js +4 -9
  581. package/dist/server/registerWebScriptTool.js +2 -5
  582. package/dist/server/registerWebSourceLocationTool.js +2 -5
  583. package/dist/server/runDerivedOperation.js +15 -3
  584. package/dist/server/sessionAvailabilityPolicy.js +0 -1
  585. package/dist/server/toolRegistrationOptions.js +2 -2
  586. package/dist/server/toolResult.js +75 -51
  587. package/dist/server/toolResultEncoding.js +34 -0
  588. package/dist/windows/WindowsNativeLoader.js +1 -0
  589. package/dist/windows/WindowsOwnedProcess.js +60 -15
  590. package/dist/windows/WindowsPrivateRuntime.js +7 -8
  591. package/install.sh +1 -1
  592. package/native/windows/README.md +3 -1
  593. package/native/windows/build/manifest.json +2 -2
  594. package/native/windows/build/rea-windows-x64.node +0 -0
  595. package/package.json +44 -30
  596. package/scripts/electron-active-hook-boundaries.cjs +18 -20
  597. package/scripts/electron-active-hook.cjs +241 -37
  598. package/scripts/rea.mjs +3 -6
  599. package/skills/reverse-engineer-anything/SKILL.md +12 -3
  600. package/skills/reverse-engineer-anything/references/android-applications.md +6 -3
  601. package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -4
  602. package/skills/reverse-engineer-anything/references/javascript-applications.md +20 -3
  603. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +9 -0
  604. package/dist/config.js +0 -1
  605. package/dist/contracts/browserCaptureToolInputSchema.js +0 -43
  606. package/dist/contracts/process/processCaptureExample.js +0 -2
  607. package/dist/contracts/toolOutputSchemas.js +0 -2
  608. package/dist/ghidra/GhidraDefaults.js +0 -2
  609. package/dist/main/reload.js +0 -12
  610. package/dist/main/state.js +0 -3
  611. package/dist/server/sessionToolPolicies.js +0 -2
@@ -1,4 +1,5 @@
1
1
  import * as t from "@babel/types";
2
+ import { semanticContainer, semanticPropertyPointer, } from "./javascriptSemanticSlots.js";
2
3
  import { compareCodePoints } from "../canonicalOrdering.js";
3
4
  import { semanticCallableIdForNode } from "./javascriptSemanticProjection.js";
4
5
  import { resolveSemanticBindingState, } from "./javascriptSemanticState.js";
@@ -137,35 +138,49 @@ export const flattenSemanticReturnValue = (value) => {
137
138
  propertyCoverage.sort((left, right) => compareCodePoints(left.path, right.path));
138
139
  return { fields, propertyCoverage };
139
140
  };
140
- const flattenValue = (value, path, fields, coverage) => {
141
+ const flattenValue = (value, path, fields, coverage, presence = "present") => {
142
+ if (presence !== "present") {
143
+ fields.push({
144
+ path,
145
+ presence,
146
+ state: "unknown",
147
+ value: null,
148
+ reason: "reason" in value ? value.reason : "Property presence is uncertain.",
149
+ });
150
+ return;
151
+ }
141
152
  if (value.status === "literal") {
142
- fields.push({ path, state: "literal", value: value.value, reason: null });
153
+ fields.push({
154
+ path,
155
+ presence,
156
+ state: "literal",
157
+ value: value.value,
158
+ reason: null,
159
+ });
143
160
  return;
144
161
  }
145
162
  if (value.status === "union") {
146
163
  fields.push({
147
164
  path,
165
+ presence,
148
166
  state: "union",
149
167
  value: [...value.values],
150
168
  reason: null,
151
169
  });
152
170
  return;
153
171
  }
154
- if (value.status === "object") {
155
- coverage.push(value.unknownProperties
156
- ? { path, status: "partial", omitted: value.omittedProperties }
157
- : { path, status: "complete", omitted: 0 });
158
- for (const property of value.properties)
159
- flattenValue(property.value, `${path}/${escapePointer(property.name)}`, fields, coverage);
160
- return;
161
- }
162
- if (value.status === "array") {
163
- coverage.push(value.unknownItems
164
- ? { path, status: "partial", omitted: value.omittedItems }
165
- : { path, status: "complete", omitted: 0 });
166
- value.items.forEach((item, index) => flattenValue(item, `${path}/${String(index)}`, fields, coverage));
172
+ if ("reason" in value) {
173
+ fields.push({
174
+ path,
175
+ presence,
176
+ state: "unknown",
177
+ value: null,
178
+ reason: value.reason,
179
+ });
167
180
  return;
168
181
  }
169
- fields.push({ path, state: "unknown", value: null, reason: value.reason });
182
+ const container = semanticContainer(value);
183
+ coverage.push({ path, ...container.coverage });
184
+ for (const slot of container.slots)
185
+ flattenValue(slot.value, `${path}${semanticPropertyPointer([slot.name])}`, fields, coverage, slot.presence);
170
186
  };
171
- const escapePointer = (value) => value.replaceAll("~", "~0").replaceAll("/", "~1");
@@ -0,0 +1,72 @@
1
+ export function semanticContainer(value) {
2
+ if (value.status === "object")
3
+ return {
4
+ slots: value.properties,
5
+ coverage: value.unknownProperties
6
+ ? { status: "partial", omitted: value.omittedProperties }
7
+ : { status: "complete", omitted: 0 },
8
+ };
9
+ if (value.status === "array")
10
+ return {
11
+ slots: value.items,
12
+ coverage: value.unknownItems
13
+ ? { status: "partial", omitted: value.omittedItems }
14
+ : { status: "complete", omitted: 0 },
15
+ };
16
+ return null;
17
+ }
18
+ /** Resolve a full static own-property path without conflating missing siblings. */
19
+ export const semanticSlotAtPath = (value, path) => {
20
+ const leafName = path.at(-1) ?? "";
21
+ let current = {
22
+ name: "",
23
+ presence: "present",
24
+ value,
25
+ };
26
+ for (const [index, name] of path.entries()) {
27
+ const container = semanticContainer(current.value);
28
+ if (current.presence !== "present" || container === null)
29
+ return {
30
+ name: leafName,
31
+ presence: "unknown-coverage",
32
+ value: "reason" in current.value
33
+ ? {
34
+ ...current.value,
35
+ reason: `${current.value.reason} Cannot continue ${semanticPropertyPointer(path)} through receiver ${semanticPropertyPointer(path.slice(0, index))}.`,
36
+ }
37
+ : {
38
+ status: "unknown",
39
+ reason: `Cannot resolve ${semanticPropertyPointer(path)} through ${current.value.status} receiver ${semanticPropertyPointer(path.slice(0, index))}.`,
40
+ },
41
+ };
42
+ // Array position inventories omit the intrinsic non-enumerable length slot.
43
+ // Its own presence is guaranteed even when no exact length is retained.
44
+ if (current.value.status === "array" && name === "length") {
45
+ current = {
46
+ name,
47
+ presence: "present",
48
+ value: {
49
+ status: "unknown",
50
+ reason: "Array length is present but its value is not retained.",
51
+ },
52
+ };
53
+ continue;
54
+ }
55
+ const observed = container.slots.find((slot) => slot.name === name);
56
+ current = observed ?? {
57
+ name,
58
+ presence: container.coverage.status === "complete"
59
+ ? "absent"
60
+ : "unknown-coverage",
61
+ value: {
62
+ status: "unknown",
63
+ reason: `Own property ${name} was not observed.`,
64
+ },
65
+ };
66
+ }
67
+ return current;
68
+ };
69
+ /** Encode path segments as an unambiguous JSON Pointer, preserving empty keys. */
70
+ export const semanticPropertyPointer = (path) => path
71
+ .map((key) => `/${key.replaceAll("~", "~0").replaceAll("/", "~1")}`)
72
+ .join("");
@@ -1,25 +1,66 @@
1
1
  import * as t from "@babel/types";
2
+ import { semanticSlotAtPath } from "./javascriptSemanticSlots.js";
2
3
  import { invalidateSemanticMutationPath } from "./javascriptSemanticMutationValues.js";
3
4
  import { resolveSemanticBindingState, } from "./javascriptSemanticState.js";
4
5
  import { semanticRequireOrigin } from "./javascriptSemanticRequireOrigin.js";
5
6
  import { compareCodePoints } from "../canonicalOrdering.js";
6
- import { semanticStaticPropertyKey } from "./javascriptAstValues.js";
7
+ import { readExactJavaScriptLiteral, semanticStaticPropertyKey, } from "./javascriptAstValues.js";
7
8
  import { semanticAmbiguousProvenance, semanticLocalProvenance, semanticOriginsProvenance, semanticUnresolvedProvenance, uniqueSemanticOrigins, } from "./javascriptSemanticProvenance.js";
8
- import { semanticPrimitiveCandidates as primitiveCandidates, semanticPrimitiveSet as primitiveSet, semanticPrimitiveValue as primitiveValue, } from "./javascriptSemanticPrimitives.js";
9
+ import { semanticPrimitiveCandidates as primitiveCandidates, semanticPrimitiveSet as primitiveSet, } from "./javascriptSemanticPrimitives.js";
10
+ import { SEMANTIC_EXPRESSION_DEPTH_LIMIT, SEMANTIC_PRIMITIVE_CANDIDATE_LIMIT, exceedsSemanticPrimitiveAdditionByteBudget, exceedsSemanticTemplateByteBudget, semanticResourceLimitUnknown, semanticResourceLimitReason, } from "./javascriptSemanticResourceLimits.js";
11
+ const primitiveBindingValuesByState = new WeakMap();
12
+ const primitiveBindingValuesFor = (state) => {
13
+ const existing = primitiveBindingValuesByState.get(state);
14
+ if (existing !== undefined)
15
+ return existing;
16
+ const values = new Map();
17
+ primitiveBindingValuesByState.set(state, values);
18
+ return values;
19
+ };
20
+ // Cap expression recursion independently from graph nodes and primitive unions.
21
+ const isSemanticResourceLimit = (value) => value.status === "unknown" && value.resourceLimit !== undefined;
9
22
  /** Evaluate one binding in the bounded constant-value lattice. */
10
- export const evaluateSemanticBinding = (binding, state) => evaluateBinding(binding, { state, bindings: new Set() });
23
+ export const evaluateSemanticBinding = (binding, state) => evaluateBinding(binding, {
24
+ state,
25
+ bindings: new Set(),
26
+ expressionDepth: 0,
27
+ primitiveBindingValues: primitiveBindingValuesFor(state),
28
+ });
11
29
  /** Evaluate one arbitrary inert expression in the established lexical state. */
12
- export const evaluateSemanticExpression = (node, state) => evaluateExpression(node, { state, bindings: new Set() });
30
+ export const evaluateSemanticExpression = (node, state) => evaluateExpression(node, {
31
+ state,
32
+ bindings: new Set(),
33
+ expressionDepth: 0,
34
+ primitiveBindingValues: primitiveBindingValuesFor(state),
35
+ });
13
36
  /** Follow module provenance through destructuring, members, and aliases. */
14
- export const evaluateSemanticProvenance = (binding, state) => provenanceForBinding(binding, { state, bindings: new Set() });
37
+ export const evaluateSemanticProvenance = (binding, state) => provenanceForBinding(binding, {
38
+ state,
39
+ bindings: new Set(),
40
+ expressionDepth: 0,
41
+ primitiveBindingValues: primitiveBindingValuesFor(state),
42
+ });
15
43
  const evaluateBinding = (binding, context) => {
16
44
  if (context.bindings.has(binding.bindingId))
17
45
  return { status: "cycle", reason: `Alias cycle at ${binding.name}.` };
46
+ const cached = context.primitiveBindingValues.get(binding.bindingId);
47
+ if (cached !== undefined)
48
+ return cached;
18
49
  if (binding.initializers.length === 0)
19
50
  return {
20
51
  status: "unknown",
21
52
  reason: `Binding ${binding.name} has no constant initializer.`,
22
53
  };
54
+ if (binding.initializers.some(({ node }) => t.isUpdateExpression(node) ||
55
+ (t.isAssignmentExpression(node) &&
56
+ node.operator !== "=" &&
57
+ node.operator !== "&&=" &&
58
+ node.operator !== "||=" &&
59
+ node.operator !== "??=")))
60
+ return {
61
+ status: "unknown",
62
+ reason: `Binding ${binding.name} has a compound or update write.`,
63
+ };
23
64
  if (binding.initializers.length > 1)
24
65
  return {
25
66
  status: "ambiguous",
@@ -30,10 +71,19 @@ const evaluateBinding = (binding, context) => {
30
71
  return { status: "unknown", reason: "Missing binding initializer." };
31
72
  const nested = nestedContext(context, binding.bindingId);
32
73
  const value = projectValue(evaluateExpression(initializer.node, nested), initializer.projection);
33
- return binding.mutatedPaths.reduce(invalidateSemanticMutationPath, value);
74
+ const projected = binding.mutatedPaths.reduce(invalidateSemanticMutationPath, value);
75
+ if (projected.status === "literal" ||
76
+ projected.status === "union" ||
77
+ (isSemanticResourceLimit(projected) &&
78
+ (projected.resourceLimit === "primitive-bytes" ||
79
+ projected.resourceLimit === "primitive-candidates")))
80
+ context.primitiveBindingValues.set(binding.bindingId, projected);
81
+ return projected;
34
82
  };
35
83
  const evaluateExpression = (node, context) => {
36
- const literal = primitiveValue(node);
84
+ if (context.expressionDepth > SEMANTIC_EXPRESSION_DEPTH_LIMIT)
85
+ return semanticResourceLimitUnknown("expression-depth");
86
+ const literal = readExactJavaScriptLiteral(node);
37
87
  if (literal.found)
38
88
  return { status: "literal", value: literal.value };
39
89
  if (t.isIdentifier(node)) {
@@ -75,18 +125,34 @@ const evaluateTemplate = (node, context) => {
75
125
  let candidates = [""];
76
126
  for (let index = 0; index < node.quasis.length; index += 1) {
77
127
  const quasi = node.quasis[index];
78
- const text = quasi?.value.cooked ?? quasi?.value.raw ?? "";
128
+ const text = quasi?.value.cooked;
129
+ if (text === undefined || text === null)
130
+ return {
131
+ status: "unknown",
132
+ reason: "Template text has no cooked representation.",
133
+ };
134
+ if (exceedsSemanticTemplateByteBudget(candidates, [text]))
135
+ return semanticResourceLimitUnknown("primitive-bytes");
79
136
  candidates = candidates.map((prefix) => `${prefix}${text}`);
80
137
  const expression = node.expressions[index];
81
138
  if (expression === undefined)
82
139
  continue;
83
- const values = primitiveCandidates(evaluateExpression(expression, nestedContext(context)));
84
- if (values === null)
140
+ const evaluated = evaluateExpression(expression, nestedContext(context));
141
+ const values = primitiveCandidates(evaluated);
142
+ if (values === null) {
143
+ if (isSemanticResourceLimit(evaluated))
144
+ return evaluated;
85
145
  return {
86
146
  status: "unknown",
87
147
  reason: "Template expression is not a bounded primitive.",
88
148
  };
89
- candidates = candidates.flatMap((prefix) => values.map((value) => `${prefix}${String(value)}`));
149
+ }
150
+ if (candidates.length > SEMANTIC_PRIMITIVE_CANDIDATE_LIMIT / values.length)
151
+ return semanticResourceLimitUnknown("primitive-candidates");
152
+ const suffixes = values.map((value) => String(value));
153
+ if (exceedsSemanticTemplateByteBudget(candidates, suffixes))
154
+ return semanticResourceLimitUnknown("primitive-bytes");
155
+ candidates = candidates.flatMap((prefix) => suffixes.map((suffix) => `${prefix}${suffix}`));
90
156
  }
91
157
  return primitiveSet(candidates);
92
158
  };
@@ -98,6 +164,7 @@ const evaluateObject = (node, context) => {
98
164
  for (const [name] of propertiesByName)
99
165
  propertiesByName.set(name, {
100
166
  name,
167
+ presence: "present",
101
168
  value: {
102
169
  status: "unknown",
103
170
  reason: "A later property may overwrite this value.",
@@ -131,6 +198,7 @@ const evaluateObject = (node, context) => {
131
198
  }
132
199
  propertiesByName.set(name, {
133
200
  name,
201
+ presence: "present",
134
202
  value: t.isObjectProperty(property)
135
203
  ? evaluateExpression(property.value, nestedContext(context))
136
204
  : {
@@ -166,20 +234,27 @@ const evaluateArray = (node, context) => {
166
234
  break;
167
235
  }
168
236
  if (element === null) {
169
- unknownItems = true;
170
- if (omittedItems !== null)
171
- omittedItems += 1;
172
237
  items.push({
173
- status: "unknown",
174
- reason: "Array hole has no primitive value.",
238
+ name: String(items.length),
239
+ presence: "absent",
240
+ value: { status: "unknown", reason: "Array hole has no own value." },
175
241
  });
176
242
  continue;
177
243
  }
178
- items.push(evaluateExpression(element, nestedContext(context)));
244
+ items.push({
245
+ name: String(items.length),
246
+ presence: "present",
247
+ value: evaluateExpression(element, nestedContext(context)),
248
+ });
179
249
  }
180
250
  return unknownItems
181
251
  ? { status: "array", items, unknownItems: true, omittedItems }
182
- : { status: "array", items, unknownItems: false, omittedItems: 0 };
252
+ : {
253
+ status: "array",
254
+ items,
255
+ unknownItems: false,
256
+ omittedItems: 0,
257
+ };
183
258
  };
184
259
  const evaluateMember = (node, context) => {
185
260
  const keys = [];
@@ -231,17 +306,30 @@ const evaluateAddition = (node, context) => {
231
306
  const addPrimitiveValues = (leftValue, rightValue) => {
232
307
  const left = primitiveCandidates(leftValue);
233
308
  const right = primitiveCandidates(rightValue);
234
- if (left === null || right === null)
309
+ if (left === null || right === null) {
310
+ if (isSemanticResourceLimit(leftValue))
311
+ return leftValue;
312
+ if (isSemanticResourceLimit(rightValue))
313
+ return rightValue;
235
314
  return { status: "unknown", reason: "Non-primitive addition." };
315
+ }
316
+ if (left.length > SEMANTIC_PRIMITIVE_CANDIDATE_LIMIT / right.length)
317
+ return semanticResourceLimitUnknown("primitive-candidates");
318
+ if (exceedsSemanticPrimitiveAdditionByteBudget(left, right))
319
+ return semanticResourceLimitUnknown("primitive-bytes");
236
320
  const values = left.flatMap((leftValue) => right.map((rightValue) => typeof leftValue === "string" || typeof rightValue === "string"
237
321
  ? `${String(leftValue)}${String(rightValue)}`
238
322
  : Number(leftValue) + Number(rightValue)));
239
323
  return primitiveSet(values);
240
324
  };
241
325
  const evaluateUnary = (node, context) => {
242
- const argument = primitiveCandidates(evaluateExpression(node.argument, nestedContext(context)));
243
- if (argument === null)
326
+ const evaluated = evaluateExpression(node.argument, nestedContext(context));
327
+ const argument = primitiveCandidates(evaluated);
328
+ if (argument === null) {
329
+ if (isSemanticResourceLimit(evaluated))
330
+ return evaluated;
244
331
  return { status: "unknown", reason: "Non-primitive unary operand." };
332
+ }
245
333
  if (node.operator === "!")
246
334
  return primitiveSet(argument.map((value) => !value));
247
335
  if (node.operator === "+")
@@ -251,46 +339,16 @@ const evaluateUnary = (node, context) => {
251
339
  return { status: "unknown", reason: `Unsupported unary ${node.operator}.` };
252
340
  };
253
341
  const projectValue = (value, projection) => {
254
- let current = value;
255
- for (const key of projection) {
256
- if (key === null)
257
- return {
258
- status: "unknown",
259
- reason: "Cannot project a dynamic property.",
260
- };
261
- if (current.status === "object" && typeof key === "string") {
262
- const property = current.properties.find(({ name }) => name === key);
263
- if (property === undefined)
264
- return {
265
- status: current.unknownProperties ? "unknown" : "unknown",
266
- reason: `Object property ${key} was not observed.`,
267
- };
268
- current = property.value;
269
- }
270
- else if (current.status === "array") {
271
- const index = typeof key === "number" ? key : Number(key);
272
- if (!Number.isSafeInteger(index) ||
273
- index < 0 ||
274
- String(index) !== String(key))
275
- return {
276
- status: "unknown",
277
- reason: `Array property ${String(key)} is not a canonical index.`,
278
- };
279
- const item = current.items[index];
280
- if (item === undefined)
281
- return {
282
- status: "unknown",
283
- reason: `Array item ${String(key)} missing.`,
284
- };
285
- current = item;
286
- }
287
- else
288
- return {
289
- status: "unknown",
290
- reason: `Cannot project ${String(key)} from ${current.status}.`,
291
- };
292
- }
293
- return current;
342
+ if (projection.includes(null))
343
+ return { status: "unknown", reason: "Cannot project a dynamic property." };
344
+ const path = projection.map((key) => String(key));
345
+ const slot = semanticSlotAtPath(value, path);
346
+ return slot.presence === "present"
347
+ ? slot.value
348
+ : {
349
+ status: "unknown",
350
+ reason: `Own property ${path.join("/")} is ${slot.presence}.`,
351
+ };
294
352
  };
295
353
  const provenanceForBinding = (binding, context) => {
296
354
  if (context.bindings.has(binding.bindingId))
@@ -318,6 +376,8 @@ const provenanceForBinding = (binding, context) => {
318
376
  })));
319
377
  };
320
378
  const provenanceForExpression = (node, context) => {
379
+ if (context.expressionDepth > SEMANTIC_EXPRESSION_DEPTH_LIMIT)
380
+ return semanticUnresolvedProvenance("unknown", semanticResourceLimitReason("expression-depth"));
321
381
  const required = semanticRequireOrigin(node, context.state);
322
382
  if (required !== undefined)
323
383
  return semanticOriginsProvenance([required]);
@@ -364,6 +424,9 @@ const provenanceForExpression = (node, context) => {
364
424
  return semanticLocalProvenance();
365
425
  };
366
426
  const mergeValues = (values) => {
427
+ const resourceLimit = values.find(isSemanticResourceLimit);
428
+ if (resourceLimit !== undefined)
429
+ return resourceLimit;
367
430
  const primitives = values.flatMap((value) => primitiveCandidates(value) ?? []);
368
431
  return values.every((value) => value.status === "union" || value.status === "literal")
369
432
  ? primitiveSet(primitives)
@@ -371,6 +434,8 @@ const mergeValues = (values) => {
371
434
  };
372
435
  const nestedContext = (context, bindingId) => ({
373
436
  state: context.state,
437
+ primitiveBindingValues: context.primitiveBindingValues,
438
+ expressionDepth: context.expressionDepth + 1,
374
439
  bindings: bindingId === undefined
375
440
  ? context.bindings
376
441
  : new Set([...context.bindings, bindingId]),
@@ -0,0 +1,104 @@
1
+ import { posix } from "node:path";
2
+ import { fileURLToPath, pathToFileURL } from "node:url";
3
+ import { z } from "zod";
4
+ /** Map-scoped source declaration and its path interpretation for matching. */
5
+ export const javascriptSourceMapReferenceSchema = z.strictObject({
6
+ source_name: z.string(),
7
+ source_root: z.string().nullable(),
8
+ map_path: z.string().min(1),
9
+ resolution: z.discriminatedUnion("kind", [
10
+ z.strictObject({
11
+ kind: z.enum(["artifact-relative", "suffix"]),
12
+ path: z.string().min(1),
13
+ }),
14
+ z.strictObject({
15
+ kind: z.literal("unresolved"),
16
+ reason: z.string().min(1),
17
+ }),
18
+ ]),
19
+ });
20
+ /** Interpret a declaration once at the source-map ingestion boundary. */
21
+ export const resolveJavaScriptSourceMapReference = (sourceName, sourceRoot, mapPath) => {
22
+ // TraceMap's producer prefixes sourceRoot before resolving the URL reference.
23
+ const reference = `${sourceRoot ? `${sourceRoot}/` : ""}${sourceName}`;
24
+ return {
25
+ source_name: sourceName,
26
+ source_root: sourceRoot,
27
+ map_path: mapPath,
28
+ resolution: resolveJavaScriptSourceMapPath(reference, mapPath),
29
+ };
30
+ };
31
+ /** Resolve a source-map URL reference without changing its recorded identity. */
32
+ const resolveJavaScriptSourceMapPath = (source, mapPath) => {
33
+ const portable = source.replaceAll("\\", "/");
34
+ const windowsPath = /^[a-z]:\//iu.test(portable) || source.startsWith("\\\\");
35
+ // Preserve parent traversal rather than letting URL resolution clamp at '/'.
36
+ const anchor = `/${"source/".repeat(portable.split("/").length + 1)}`;
37
+ const directory = posix.join(anchor, posix.dirname(mapPath.replaceAll("\\", "/")));
38
+ const base = pathToFileURL(`${directory}/`, { windows: false });
39
+ const absolute = windowsPath ? windowsFileUrl(source) : URL.parse(source);
40
+ const resolved = windowsPath ? absolute : URL.parse(source, base);
41
+ if (resolved === null)
42
+ return {
43
+ kind: "unresolved",
44
+ reason: "Source reference is not a valid URL or filesystem path.",
45
+ };
46
+ if (!resolved.pathname.startsWith("/"))
47
+ return {
48
+ kind: "unresolved",
49
+ reason: "Source reference uses a non-hierarchical URL without a file pathname.",
50
+ };
51
+ if (resolved.pathname.endsWith("/"))
52
+ return {
53
+ kind: "unresolved",
54
+ reason: "Source reference names a directory rather than a file.",
55
+ };
56
+ // Encoded separators must not manufacture a different filesystem hierarchy.
57
+ if (/%(?:2f|5c)/iu.test(resolved.pathname))
58
+ return {
59
+ kind: "unresolved",
60
+ reason: "Source reference contains an encoded path separator.",
61
+ };
62
+ const relative = absolute === null
63
+ ? !portable.startsWith("/")
64
+ : absolute.href !== resolved.href;
65
+ const path = decodedUrlPath(resolved);
66
+ if (path === null)
67
+ return {
68
+ kind: "unresolved",
69
+ reason: "Source reference has malformed URL encoding or an invalid file URL.",
70
+ };
71
+ const value = relative
72
+ ? posix.relative(anchor, path)
73
+ : path.replace(/^\/+/, "");
74
+ if (value === "" || value === ".." || value.startsWith("../"))
75
+ return {
76
+ kind: "unresolved",
77
+ reason: "Source reference resolves outside the inventoried artifact.",
78
+ };
79
+ return { path: value, kind: relative ? "artifact-relative" : "suffix" };
80
+ };
81
+ const windowsFileUrl = (path) => {
82
+ try {
83
+ return pathToFileURL(path, { windows: true });
84
+ }
85
+ catch (cause) {
86
+ if (cause instanceof TypeError)
87
+ return null;
88
+ throw cause;
89
+ }
90
+ };
91
+ const decodedUrlPath = (url) => {
92
+ try {
93
+ if (url.protocol === "file:")
94
+ return fileURLToPath(url, {
95
+ windows: url.hostname !== "" && url.hostname !== "localhost",
96
+ }).replaceAll("\\", "/");
97
+ return `${url.host}${decodeURIComponent(url.pathname)}`;
98
+ }
99
+ catch (cause) {
100
+ if (cause instanceof URIError || cause instanceof TypeError)
101
+ return null;
102
+ throw cause;
103
+ }
104
+ };
@@ -1,6 +1,6 @@
1
1
  import { parse } from "@babel/parser";
2
2
  /** Parse JavaScript or TypeScript once without attaching comments to AST nodes. */
3
- export const parseJavaScriptSource = (source) => {
3
+ export const parseJavaScriptSource = (source, sourcePath) => {
4
4
  try {
5
5
  return parse(source, {
6
6
  sourceType: "unambiguous",
@@ -10,7 +10,11 @@ export const parseJavaScriptSource = (source) => {
10
10
  // forms, including parameter decorators. Without it a decorated
11
11
  // TypeScript source fails to parse at all rather than reporting
12
12
  // recovered syntax, which loses every fact derived from that source.
13
- plugins: ["decorators-legacy", "jsx", "typescript"],
13
+ // Plain .ts artifacts admit angle-bracket type assertions instead of JSX.
14
+ // Unknown paths retain the existing JSX-capable parser contract.
15
+ plugins: sourcePath?.toLowerCase().endsWith(".ts") === true
16
+ ? ["decorators-legacy", "typescript"]
17
+ : ["decorators-legacy", "jsx", "typescript"],
14
18
  });
15
19
  }
16
20
  catch (cause) {
@@ -6,26 +6,27 @@ import { addReference, addSourceMapDirectives, inspectCall, inspectRouteProperty
6
6
  import { inspectBundlerRegistration, inspectEsbuildWrapper, } from "./javascriptStaticAnalysisBundler.js";
7
7
  import { finalizeLocatedFindings } from "./javascriptStaticAnalysisFindings.js";
8
8
  import { createJavaScriptAnalysisAccumulator, } from "./javascriptStaticAnalysisState.js";
9
+ import { classifyParsedJavaScriptOpenReceivers, } from "./javascriptSemanticAnalysis.js";
9
10
  import { parseJavaScriptSource, } from "./javascriptSourceParser.js";
10
11
  /** Parse one JavaScript artifact and recover static structure only. */
11
12
  export const analyzeJavaScriptStaticSource = (source) => {
12
13
  const file = parseJavaScriptSource(source);
13
14
  return file === null
14
15
  ? failedJavaScriptStaticAnalysis()
15
- : analyzeParsedJavaScriptStaticSource(source, file);
16
+ : analyzeParsedJavaScriptStaticSource(source, file, classifyParsedJavaScriptOpenReceivers(file));
16
17
  };
17
18
  /** Recover static structure from an already parsed JavaScript artifact. */
18
- export const analyzeParsedJavaScriptStaticSource = (source, file) => {
19
- const accumulator = createJavaScriptAnalysisAccumulator();
20
- traverseStaticSource(source, file, accumulator);
19
+ export const analyzeParsedJavaScriptStaticSource = (source, file, openReceiverFacts) => {
20
+ const accumulator = createJavaScriptAnalysisAccumulator(source.length);
21
+ traverseStaticSource(source, file, accumulator, openReceiverFacts);
21
22
  addSourceMapDirectives(source, file.comments ?? [], accumulator);
22
23
  return finalizeStaticAnalysis(source, file, accumulator);
23
24
  };
24
- const traverseStaticSource = (source, file, accumulator) => {
25
+ const traverseStaticSource = (source, file, accumulator, openReceiverFacts) => {
25
26
  traverseJavaScriptAst(file, {
26
27
  enter: (node) => {
27
28
  accumulator.visitedNodes += 1;
28
- inspectNode(source, node, accumulator);
29
+ inspectNode(source, node, accumulator, openReceiverFacts);
29
30
  return undefined;
30
31
  },
31
32
  });
@@ -51,28 +52,29 @@ const finalizeStaticAnalysis = (source, file, accumulator) => {
51
52
  : "complete",
52
53
  parse_error_count: parserErrors,
53
54
  visited_ast_nodes: accumulator.visitedNodes,
54
- references: finalizeLocatedFindings(accumulator.references, accumulator.modules),
55
- endpoints: finalizeLocatedFindings(accumulator.endpoints, accumulator.modules),
56
- storage: finalizeLocatedFindings(accumulator.storage, accumulator.modules),
55
+ references: finalizeLocatedFindings(accumulator.references, accumulator.moduleRangeIndex),
56
+ endpoints: finalizeLocatedFindings(accumulator.endpoints, accumulator.moduleRangeIndex),
57
+ storage: finalizeLocatedFindings(accumulator.storage, accumulator.moduleRangeIndex),
57
58
  bundler_registrations: sortedUnique(accumulator.registrations, registrationKey),
58
- role_paths: finalizeLocatedFindings(accumulator.roles, accumulator.modules),
59
+ role_paths: finalizeLocatedFindings(accumulator.roles, accumulator.moduleRangeIndex),
59
60
  source_map_urls: accumulator.sourceMaps,
60
61
  vendors: detectVendors(source),
61
62
  electron: {
62
- browser_windows: finalizeLocatedFindings(accumulator.browserWindows, accumulator.modules),
63
- context_bridge_apis: finalizeLocatedFindings(accumulator.contextBridgeApis, accumulator.modules),
64
- ipc: finalizeLocatedFindings(accumulator.ipc, accumulator.modules),
65
- sender_validations: finalizeLocatedFindings(accumulator.senderValidations, accumulator.modules),
66
- utility_processes: finalizeLocatedFindings(accumulator.utilityProcesses, accumulator.modules),
67
- native_addon_bindings: finalizeLocatedFindings(accumulator.nativeAddonBindings, accumulator.modules),
63
+ browser_windows: finalizeLocatedFindings(accumulator.browserWindows, accumulator.moduleRangeIndex),
64
+ context_bridge_apis: finalizeLocatedFindings(accumulator.contextBridgeApis, accumulator.moduleRangeIndex),
65
+ ipc: finalizeLocatedFindings(accumulator.ipc, accumulator.moduleRangeIndex),
66
+ sender_validations: finalizeLocatedFindings(accumulator.senderValidations, accumulator.moduleRangeIndex),
67
+ utility_processes: finalizeLocatedFindings(accumulator.utilityProcesses, accumulator.moduleRangeIndex),
68
+ native_addon_bindings: finalizeLocatedFindings(accumulator.nativeAddonBindings, accumulator.moduleRangeIndex),
68
69
  },
69
70
  limitations,
70
71
  };
71
72
  };
72
- const inspectNode = (source, node, accumulator) => {
73
+ const inspectNode = (source, node, accumulator, openReceiverFacts) => {
73
74
  const findings = {
74
75
  source,
75
76
  accumulator,
77
+ ...(openReceiverFacts === undefined ? {} : { openReceiverFacts }),
76
78
  };
77
79
  inspectElectronStaticNode(node, findings);
78
80
  if (t.isCallExpression(node)) {
@@ -80,6 +82,9 @@ const inspectNode = (source, node, accumulator) => {
80
82
  inspectEsbuildWrapper(source, node, accumulator);
81
83
  inspectCall(source, node, findings);
82
84
  }
85
+ else if (t.isOptionalCallExpression(node)) {
86
+ inspectCall(source, node, findings);
87
+ }
83
88
  else if (t.isNewExpression(node))
84
89
  inspectCall(source, node, findings);
85
90
  if ((t.isImportDeclaration(node) || t.isExportAllDeclaration(node)) &&