rea-agents 6.2.0 → 6.4.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 (636) hide show
  1. package/README.md +24 -23
  2. package/bridge/ghidra/ReaGhidraApplySeeds.java +151 -0
  3. package/bridge/ghidra/ReaGhidraBridge.java +597 -209
  4. package/bridge/ghidra/ReaGhidraNoReturnFix.java +123 -0
  5. package/bridge/hopper_bridge.py +2 -0
  6. package/dist/adb/AdbConfiguration.js +88 -0
  7. package/dist/adb/AdbDeviceOutput.js +186 -0
  8. package/dist/adb/AdbProvider.js +1190 -0
  9. package/dist/adb/AdbShellOutput.js +309 -0
  10. package/dist/android/AndroidTargetSnapshot.js +104 -22
  11. package/dist/android/JadxConfiguration.js +44 -24
  12. package/dist/android/JadxProvider.js +59 -21
  13. package/dist/android/JadxSession.js +51 -9
  14. package/dist/apktool/ApktoolConfiguration.js +84 -0
  15. package/dist/apktool/ApktoolDecodeOutput.js +59 -0
  16. package/dist/apktool/ApktoolProvider.js +506 -0
  17. package/dist/application/AnalysisProvider.js +8 -2
  18. package/dist/application/AppBundleExecutable.js +27 -22
  19. package/dist/application/BinaryTargetResolver.js +85 -19
  20. package/dist/application/BrowserScenarioEvidence.js +2 -2
  21. package/dist/application/CapabilityInventory.js +11 -1
  22. package/dist/application/ClientConfigurationDocument.js +98 -0
  23. package/dist/application/ClientConfigurationFiles.js +91 -0
  24. package/dist/application/ClientRegistrationEnvironment.js +35 -0
  25. package/dist/application/ClientRegistrationStatus.js +75 -27
  26. package/dist/application/DirectAnalysis.js +14 -8
  27. package/dist/application/DirectAnalysisCleanup.js +1 -2
  28. package/dist/application/DirectAnalysisStatus.js +3 -6
  29. package/dist/application/Doctor.js +27 -34
  30. package/dist/application/DoctorDiagnostics.js +1 -1
  31. package/dist/application/EvidenceBundleCommands.js +6 -12
  32. package/dist/application/EvidenceBundleFiles.js +1 -1
  33. package/dist/application/GeminiClientSettings.js +139 -0
  34. package/dist/application/HermesClientHome.js +115 -0
  35. package/dist/application/HopperDownload.js +39 -0
  36. package/dist/application/InvestigationProviders.js +10 -4
  37. package/dist/application/JsonFiles.js +16 -15
  38. package/dist/application/JsonInputFile.js +252 -0
  39. package/dist/application/LinuxHopper.js +6 -13
  40. package/dist/application/MacHopper.js +172 -149
  41. package/dist/application/MipsElfAbiFlags.js +140 -0
  42. package/dist/application/ProviderOperationExecution.js +31 -0
  43. package/dist/application/ReconstructionObligationCandidates.js +16 -3
  44. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -1
  45. package/dist/application/ReferenceSourceImport.js +76 -29
  46. package/dist/application/ReferenceSourceImportEntries.js +18 -9
  47. package/dist/application/ReferenceSourceImportPolicy.js +99 -23
  48. package/dist/application/ReferenceSourceImportTypes.js +30 -22
  49. package/dist/application/ReferenceSourceVcsAdapter.js +145 -30
  50. package/dist/application/RegularFileRead.js +103 -0
  51. package/dist/application/Setup.js +69 -10
  52. package/dist/application/SetupClientConfiguration.js +134 -23
  53. package/dist/application/SetupHost.js +102 -22
  54. package/dist/application/SetupPlan.js +18 -17
  55. package/dist/application/SetupSkill.js +81 -13
  56. package/dist/application/SupportedClients.js +305 -37
  57. package/dist/application/Uninstall.js +172 -8
  58. package/dist/application/UpdateMaintenance.js +23 -23
  59. package/dist/application/Utf8JsonInput.js +71 -0
  60. package/dist/application/WebScriptExportService.js +130 -57
  61. package/dist/application/WebSourceLocationService.js +3 -0
  62. package/dist/application/adb/AdbDeviceAnalysisPort.js +1 -0
  63. package/dist/application/adb/AdbDeviceAnalysisService.js +13 -0
  64. package/dist/application/analysisView/AnalysisViewService.js +40 -2
  65. package/dist/application/android/AndroidAnalysisService.js +1 -1
  66. package/dist/application/apktool/ApktoolResourceAnalysisPort.js +1 -0
  67. package/dist/application/apktool/ApktoolResourceAnalysisService.js +13 -0
  68. package/dist/application/binary/AnalysisClientCleanup.js +0 -24
  69. package/dist/application/binary/AnalysisSnapshotCache.js +5 -4
  70. package/dist/application/binary/BinarySession.js +18 -1
  71. package/dist/application/binary/BinarySessionOpen.js +9 -1
  72. package/dist/application/binaryDiagnostics/BinaryLayoutService.js +2 -1
  73. package/dist/application/binaryDiagnostics/PeResourcesPort.js +1 -0
  74. package/dist/application/binaryDiagnostics/PeResourcesService.js +111 -0
  75. package/dist/application/binaryDiagnostics/RecordedCrashService.js +2 -1
  76. package/dist/application/evm/EvmInterfaceService.js +3 -0
  77. package/dist/application/firmware/FirmwareAnalysisService.js +3 -0
  78. package/dist/application/investigation/InspectEvidenceBundle.js +18 -0
  79. package/dist/application/javascript/ElectronActiveEvidence.js +2 -2
  80. package/dist/application/javascript/ElectronBoundaryAnalysis.js +2 -2
  81. package/dist/application/javascript/ElectronBoundaryGraphContext.js +3 -2
  82. package/dist/application/javascript/ElectronBoundaryGraphIpc.js +2 -2
  83. package/dist/application/javascript/ElectronBoundaryGraphNative.js +20 -3
  84. package/dist/application/javascript/ElectronBoundaryGraphWindows.js +3 -3
  85. package/dist/application/javascript/JavaScriptApplicationEvidence.js +1 -0
  86. package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +107 -46
  87. package/dist/application/javascript/JavaScriptApplicationService.js +23 -11
  88. package/dist/application/javascript/JavaScriptApplicationWorkflowEvidence.js +5 -6
  89. package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +59 -45
  90. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +171 -36
  91. package/dist/application/javascript/JavaScriptArtifactGraphAccumulator.js +14 -16
  92. package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +74 -36
  93. package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +4 -3
  94. package/dist/application/javascript/JavaScriptArtifactGraphContext.js +11 -5
  95. package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +53 -42
  96. package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +92 -10
  97. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +293 -238
  98. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +120 -28
  99. package/dist/application/javascript/JavaScriptArtifactReconstructionInput.js +4 -0
  100. package/dist/application/javascript/JavaScriptJsonModules.js +2 -2
  101. package/dist/application/javascript/JavaScriptModuleRelationships.js +10 -20
  102. package/dist/application/javascript/JavaScriptRecoveryService.js +3 -0
  103. package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +11 -27
  104. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +11 -5
  105. package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +206 -66
  106. package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +1 -1
  107. package/dist/application/javascript/JavaScriptSemanticGraphConstruction.js +18 -23
  108. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +5 -2
  109. package/dist/application/javascript/JavaScriptSemanticGraphEvidence.js +1 -1
  110. package/dist/application/javascript/JavaScriptSemanticGraphFingerprintProjection.js +2 -2
  111. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +7 -5
  112. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +6 -4
  113. package/dist/application/javascript/JavaScriptSemanticGraphProjection.js +4 -4
  114. package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +1 -1
  115. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +29 -15
  116. package/dist/application/javascript/JavaScriptSemanticTraceService.js +15 -10
  117. package/dist/application/jeb/JebAnalysisPort.js +1 -0
  118. package/dist/application/jeb/JebAnalysisService.js +13 -0
  119. package/dist/application/managed/ManagedApplicationGraphService.js +1 -1
  120. package/dist/application/native/NativeCallRoutes.js +2 -4
  121. package/dist/application/native/NativeUiActionTrace.js +16 -8
  122. package/dist/application/native/NativeValueTrace.js +23 -6
  123. package/dist/application/process/ProcessCli.js +25 -20
  124. package/dist/artifacts/ArtifactPaths.js +129 -8
  125. package/dist/artifacts/ArtifactProvider.js +34 -31
  126. package/dist/artifacts/ArtifactProviderMetadata.js +1 -4
  127. package/dist/artifacts/ArtifactReader.js +23 -0
  128. package/dist/artifacts/ArtifactResourceScope.js +100 -0
  129. package/dist/artifacts/AsarArtifactReader.js +218 -80
  130. package/dist/artifacts/AsarHeader.js +24 -0
  131. package/dist/artifacts/DirectoryArtifactReader.js +168 -65
  132. package/dist/artifacts/MachOSliceArtifactReader.js +116 -39
  133. package/dist/artifacts/NativeDmgArtifactReader.js +179 -87
  134. package/dist/artifacts/NativeDmgOwnership.js +109 -0
  135. package/dist/artifacts/SafeOutputTree.js +245 -70
  136. package/dist/artifacts/SafeOutputTreeCleanup.js +45 -0
  137. package/dist/artifacts/SafeOutputTreeCreationFailure.js +20 -0
  138. package/dist/artifacts/SafeOutputTreeIdentity.js +42 -0
  139. package/dist/artifacts/SafeOutputTreeReadback.js +33 -0
  140. package/dist/artifacts/ZipArtifactReader.js +77 -27
  141. package/dist/artifacts/apple/InterfaceBuilderAnalysis.js +58 -18
  142. package/dist/artifacts/apple/InterfaceBuilderDecodeBudget.js +62 -24
  143. package/dist/artifacts/apple/KeyedArchiveReader.js +76 -49
  144. package/dist/artifacts/apple/MachoLoadCommandReader.js +36 -6
  145. package/dist/artifacts/extraction/ArtifactExtraction.js +134 -92
  146. package/dist/artifacts/inventory/ArtifactGraphConstruction.js +116 -50
  147. package/dist/artifacts/inventory/ArtifactInventory.js +5 -4
  148. package/dist/artifacts/inventory/classify.js +87 -25
  149. package/dist/artifacts/inventory/hashStableRootArtifact.js +70 -0
  150. package/dist/artifacts/inventory/reader.js +13 -5
  151. package/dist/artifacts/inventory/scanCanonical.js +73 -30
  152. package/dist/artifacts/inventory/scanReader.js +43 -20
  153. package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +72 -28
  154. package/dist/artifacts/javascript/JavaScriptSourceAnalysis.js +3 -0
  155. package/dist/browser/BrowserScenarioPartialObservation.js +8 -2
  156. package/dist/browser/BrowserScenarioSecrets.js +52 -37
  157. package/dist/browser/CdpBrowserProvider.js +9 -3
  158. package/dist/browser/CdpCaptureDocuments.js +40 -6
  159. package/dist/browser/CdpCaptureDomSvg.js +210 -0
  160. package/dist/browser/CdpCaptureEventBodyShapes.js +4 -8
  161. package/dist/browser/CdpCaptureEventHandlers.js +26 -9
  162. package/dist/browser/CdpCaptureEvents.js +4 -9
  163. package/dist/browser/CdpCaptureStorageFingerprints.js +3 -3
  164. package/dist/browser/CdpConnection.js +22 -5
  165. package/dist/browser/CdpElectronInspection.js +2 -2
  166. package/dist/browser/CdpElectronProvider.js +4 -3
  167. package/dist/browser/CdpElectronScripts.js +2 -2
  168. package/dist/browser/CdpPageCapture.js +1 -1
  169. package/dist/browser/CdpTargetSession.js +30 -34
  170. package/dist/browser/CdpWebMcpDiscovery.js +48 -23
  171. package/dist/browser/ElectronFileScope.js +99 -9
  172. package/dist/browser/PlaywrightBrowserScenarioProvider.js +63 -7
  173. package/dist/browser/PlaywrightElectronActiveProvider.js +11 -6
  174. package/dist/browser/PlaywrightScenarioArtifacts.js +5 -5
  175. package/dist/browser/PlaywrightScenarioBrowser.js +208 -43
  176. package/dist/browser/PlaywrightScenarioSession.js +130 -65
  177. package/dist/browser/PlaywrightScenarioStorage.js +507 -0
  178. package/dist/browser/PngVisualDiff.js +198 -29
  179. package/dist/browser/WebSourceMapFetcher.js +35 -9
  180. package/dist/browser/assets/LocalWebScriptArtifacts.js +3 -1
  181. package/dist/browser/assets/PublishWebScripts.js +75 -20
  182. package/dist/browser/assets/ScenarioScriptCapture.js +8 -12
  183. package/dist/browser/assets/WebArtifactReads.js +23 -1
  184. package/dist/browser/assets/WebSourceLocationArtifacts.js +1 -0
  185. package/dist/browser/execution/CdpExecutionCapture.js +3 -3
  186. package/dist/browser/execution/CdpPreciseCoverage.js +5 -8
  187. package/dist/browser/history/HarCapture.js +14 -0
  188. package/dist/browser/history/HarCaptureProcess.js +2 -10
  189. package/dist/browser/history/MitmproxyCaptureAdapter.js +3 -1
  190. package/dist/browser/modules/WebModuleArtifacts.js +1 -0
  191. package/dist/cli/adbCommands.js +337 -0
  192. package/dist/cli/analysisViewCommands.js +39 -1
  193. package/dist/cli/apktoolCommands.js +53 -0
  194. package/dist/cli/artifactCommands.js +8 -11
  195. package/dist/cli/binaryDiagnosticsCommands.js +19 -1
  196. package/dist/cli/browserAdvancedCommands.js +65 -36
  197. package/dist/cli/coreAnalysisCommands.js +2 -2
  198. package/dist/cli/coreBinaryCommands.js +12 -13
  199. package/dist/cli/coreNativeCommands.js +1 -14
  200. package/dist/cli/electronCommands.js +14 -10
  201. package/dist/cli/evmCommands.js +13 -4
  202. package/dist/cli/firmwareCommands.js +7 -2
  203. package/dist/cli/javascriptApplicationAnalysis.js +19 -13
  204. package/dist/cli/javascriptRecoveryCommands.js +22 -15
  205. package/dist/cli/jebCommands.js +99 -0
  206. package/dist/cli/jsonOutput.js +12 -4
  207. package/dist/cli/referenceSourceImportStatus.js +7 -0
  208. package/dist/cli/setupCommands.js +15 -3
  209. package/dist/cli/streamedJsonOutput.js +83 -4
  210. package/dist/cli/utilityCommands.js +68 -22
  211. package/dist/cli/webScriptCommands.js +20 -1
  212. package/dist/cli/webSourceLocationCommands.js +21 -9
  213. package/dist/cli.js +11 -2
  214. package/dist/cliBrowserScenarioCommands.js +2 -1
  215. package/dist/cliCommandNames.js +32 -0
  216. package/dist/cliJsonInput.js +47 -34
  217. package/dist/cliObservationOptions.js +7 -0
  218. package/dist/composition/adb.js +3 -0
  219. package/dist/composition/apktool.js +3 -0
  220. package/dist/composition/auxiliaryAnalysisProviders.js +5 -4
  221. package/dist/composition/binaryDiagnostics.js +4 -0
  222. package/dist/composition/browserScenario.js +2 -2
  223. package/dist/composition/directAnalysis.js +14 -7
  224. package/dist/composition/javascriptAnalysisWorkerProcess.js +48 -0
  225. package/dist/composition/jeb.js +6 -0
  226. package/dist/config/environment.js +10 -0
  227. package/dist/config/ghidraLanguageOverride.js +9 -0
  228. package/dist/config/mcpInputSchemaProfile.js +27 -0
  229. package/dist/config/parseConfig.js +28 -1
  230. package/dist/contracts/adb/adbToolContracts.js +353 -0
  231. package/dist/contracts/advertisedInputExamples.js +48 -0
  232. package/dist/contracts/analysisDetail.js +10 -0
  233. package/dist/contracts/analysisViewToolContracts.js +17 -2
  234. package/dist/contracts/apktool/apktoolToolContracts.js +33 -0
  235. package/dist/contracts/artifactComparisonExample.js +5 -5
  236. package/dist/contracts/artifactToolContracts.js +8 -5
  237. package/dist/contracts/browserToolContracts.js +1 -1
  238. package/dist/contracts/compactInputSchema.js +256 -0
  239. package/dist/contracts/errorSchemas.js +3 -1
  240. package/dist/contracts/functionComparisonExample.js +8 -0
  241. package/dist/contracts/functionWorkflowToolContracts.js +1 -1
  242. package/dist/contracts/inputSchemaPresentation.js +104 -13
  243. package/dist/contracts/javascript/electronToolContracts.js +16 -3
  244. package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +3 -2
  245. package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +6 -3
  246. package/dist/contracts/javascript/javascriptRecoveryToolContracts.js +1 -1
  247. package/dist/contracts/javascript/javascriptRuntimeReconciliationExample.js +8 -7
  248. package/dist/contracts/jeb/jebToolContracts.js +64 -0
  249. package/dist/contracts/managed/managedToolContracts.js +3 -2
  250. package/dist/contracts/mobileApplicationGraphExamples.js +5 -5
  251. package/dist/contracts/native/binaryDiagnosticsToolContracts.js +25 -3
  252. package/dist/contracts/native/nativeToolContracts.js +1 -1
  253. package/dist/contracts/officialToolContracts.js +5 -5
  254. package/dist/contracts/sessionLifecycleInputs.js +4 -3
  255. package/dist/contracts/sessionStatusContract.js +3 -2
  256. package/dist/contracts/sessionToolContracts.js +5 -4
  257. package/dist/contracts/sessionToolSchemas.js +9 -4
  258. package/dist/contracts/toolContractExamples.js +6 -0
  259. package/dist/contracts/toolContractTypes.js +3 -0
  260. package/dist/contracts/toolContracts.js +6 -0
  261. package/dist/contracts/toolEffects.js +167 -0
  262. package/dist/contracts/toolOutputSchemaGroups.js +7 -5
  263. package/dist/contracts/toolOutputSchemaPrimitives.js +2 -5
  264. package/dist/contracts/toolSchemaMetadata.js +82 -7
  265. package/dist/domain/adb/adbDeviceAnalysis.js +583 -0
  266. package/dist/domain/analysisErrorBase.js +5 -0
  267. package/dist/domain/analysisErrorCleanup.js +29 -0
  268. package/dist/domain/analysisErrorPresentation.js +18 -4
  269. package/dist/domain/analysisErrorProjection.js +4 -1
  270. package/dist/domain/analysisSnapshot.js +5 -2
  271. package/dist/domain/analysisView/analysisView.js +53 -5
  272. package/dist/domain/analysisView/binaryLayoutView.js +2 -0
  273. package/dist/domain/analysisView/javascriptApplicationView.js +2 -0
  274. package/dist/domain/analysisView/nativeFunctionView.js +155 -0
  275. package/dist/domain/android/androidApplication.js +25 -20
  276. package/dist/domain/android/androidPartialObservation.js +36 -0
  277. package/dist/domain/apktool/apktoolResourceAnalysis.js +77 -0
  278. package/dist/domain/apple/appleApplication.js +40 -23
  279. package/dist/domain/apple/appleBundleAnatomy.js +95 -28
  280. package/dist/domain/apple/dyldPaths.js +9 -1
  281. package/dist/domain/apple/dylibResolution.js +3 -3
  282. package/dist/domain/apple/interfaceBuilderGraph.js +22 -19
  283. package/dist/domain/apple/interfaceBuilderKeyedArchive.js +10 -1
  284. package/dist/domain/artifactComparison.js +39 -11
  285. package/dist/domain/artifactGraph.js +6 -4
  286. package/dist/domain/artifactIdentity.js +37 -9
  287. package/dist/domain/artifactInspection.js +10 -50
  288. package/dist/domain/artifactIntegrityPolicy.js +10 -0
  289. package/dist/domain/artifactInventoryEvidence.js +16 -17
  290. package/dist/domain/artifactPathSyntax.js +1 -1
  291. package/dist/domain/binaryTarget.js +16 -0
  292. package/dist/domain/binaryTargetTypes.js +8 -1
  293. package/dist/domain/browserCompleteness.js +3 -2
  294. package/dist/domain/browserObservationSchemas.js +8 -4
  295. package/dist/domain/browserScenarioCaptureValues.js +2 -2
  296. package/dist/domain/browserScenarioNormalization.js +3 -3
  297. package/dist/domain/browserScenarioValues.js +3 -2
  298. package/dist/domain/callPath.js +8 -10
  299. package/dist/domain/canonicalDigest.js +7 -1
  300. package/dist/domain/canonicalJsonDigestSteps.js +34 -12
  301. package/dist/domain/canonicalOrdering.js +1 -13
  302. package/dist/domain/changedBehavior.js +2 -3
  303. package/dist/domain/compactStringIdentity.js +9 -0
  304. package/dist/domain/comparisonSemantics.js +0 -5
  305. package/dist/domain/digests.js +0 -3
  306. package/dist/domain/evidence.js +12 -6
  307. package/dist/domain/evidenceBundle.js +51 -33
  308. package/dist/domain/evidenceRecordSummary.js +144 -0
  309. package/dist/domain/firmware/firmwareAnalysis.js +4 -3
  310. package/dist/domain/functionComparison.js +2 -1
  311. package/dist/domain/functionComparisonNormalization.js +4 -3
  312. package/dist/domain/functionComparisonResults.js +2 -2
  313. package/dist/domain/functionDossierEvidence.js +2 -1
  314. package/dist/domain/hopperValues.js +11 -15
  315. package/dist/domain/inputIssueProjection.js +16 -1
  316. package/dist/domain/javascript/electronActiveObservation.js +4 -3
  317. package/dist/domain/javascript/electronStaticAnalysisBrowser.js +14 -15
  318. package/dist/domain/javascript/electronStaticAnalysisIpc.js +20 -21
  319. package/dist/domain/javascript/electronStaticAnalysisNative.js +73 -41
  320. package/dist/domain/javascript/electronStaticAnalysisValues.js +24 -4
  321. package/dist/domain/javascript/javascriptAnalysisResourceControls.js +45 -0
  322. package/dist/domain/javascript/javascriptApplicationAnalysis.js +6 -1
  323. package/dist/domain/javascript/javascriptApplicationChangeGraph.js +18 -14
  324. package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +4 -0
  325. package/dist/domain/javascript/javascriptApplicationGraph.js +91 -28
  326. package/dist/domain/javascript/javascriptApplicationProjectionResources.js +35 -0
  327. package/dist/domain/javascript/javascriptApplicationVersionComparison.js +4 -4
  328. package/dist/domain/javascript/javascriptApplicationVersionComparisonSchemas.js +37 -22
  329. package/dist/domain/javascript/javascriptApplicationVersionItems.js +72 -45
  330. package/dist/domain/javascript/javascriptApplicationVersionKeys.js +16 -8
  331. package/dist/domain/javascript/javascriptAstFingerprint.js +60 -33
  332. package/dist/domain/javascript/javascriptAstValues.js +54 -0
  333. package/dist/domain/javascript/javascriptElectronMemberWrites.js +50 -0
  334. package/dist/domain/javascript/javascriptExportShapeComparison.js +3 -2
  335. package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +31 -23
  336. package/dist/domain/javascript/javascriptExportShapeSelection.js +2 -2
  337. package/dist/domain/javascript/javascriptExportShapeVariants.js +3 -2
  338. package/dist/domain/javascript/javascriptFeatureSeed.js +5 -3
  339. package/dist/domain/javascript/javascriptFeatureTrace.js +7 -6
  340. package/dist/domain/javascript/javascriptFeatureTraceSchemas.js +17 -9
  341. package/dist/domain/javascript/javascriptFeatureTraversal.js +4 -4
  342. package/dist/domain/javascript/javascriptModuleSemanticIr.js +15 -0
  343. package/dist/domain/javascript/javascriptNativeHandoff.js +12 -7
  344. package/dist/domain/javascript/javascriptRpcEndpoints.js +253 -0
  345. package/dist/domain/javascript/javascriptRuntimeLoadState.js +1 -3
  346. package/dist/domain/javascript/javascriptRuntimeObservation.js +8 -5
  347. package/dist/domain/javascript/javascriptRuntimeReconciliation.js +12 -6
  348. package/dist/domain/javascript/javascriptRuntimeReconciliationActive.js +9 -8
  349. package/dist/domain/javascript/javascriptRuntimeReconciliationCaptureParsing.js +212 -0
  350. package/dist/domain/javascript/javascriptRuntimeReconciliationGraph.js +12 -6
  351. package/dist/domain/javascript/javascriptRuntimeReconciliationInputValidation.js +28 -0
  352. package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +5 -5
  353. package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +12 -223
  354. package/dist/domain/javascript/javascriptRuntimeReconciliationResult.js +2 -2
  355. package/dist/domain/javascript/javascriptRuntimeReconciliationRuntime.js +15 -4
  356. package/dist/domain/javascript/javascriptRuntimeReconciliationSchemas.js +2 -2
  357. package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +15 -17
  358. package/dist/domain/javascript/javascriptSemanticAnalysis.js +379 -30
  359. package/dist/domain/javascript/javascriptSemanticCallResolution.js +9 -7
  360. package/dist/domain/javascript/javascriptSemanticCallableResults.js +42 -0
  361. package/dist/domain/javascript/javascriptSemanticCalls.js +8 -1
  362. package/dist/domain/javascript/javascriptSemanticChildProcesses.js +2 -2
  363. package/dist/domain/javascript/javascriptSemanticCoverage.js +20 -0
  364. package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +7 -9
  365. package/dist/domain/javascript/javascriptSemanticDataEffects.js +4 -11
  366. package/dist/domain/javascript/javascriptSemanticDerivedAnalysis.js +15 -4
  367. package/dist/domain/javascript/javascriptSemanticFileProjection.js +1 -0
  368. package/dist/domain/javascript/javascriptSemanticFingerprints.js +43 -42
  369. package/dist/domain/javascript/javascriptSemanticGraph.js +205 -52
  370. package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +21 -11
  371. package/dist/domain/javascript/javascriptSemanticIr.js +0 -4
  372. package/dist/domain/javascript/javascriptSemanticIterationSources.js +139 -0
  373. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +774 -136
  374. package/dist/domain/javascript/javascriptSemanticMutationInitializers.js +190 -0
  375. package/dist/domain/javascript/javascriptSemanticMutationValues.js +98 -41
  376. package/dist/domain/javascript/javascriptSemanticObjectReferences.js +381 -0
  377. package/dist/domain/javascript/javascriptSemanticObjects.js +9 -7
  378. package/dist/domain/javascript/javascriptSemanticPrimitives.js +7 -2
  379. package/dist/domain/javascript/javascriptSemanticProjection.js +72 -28
  380. package/dist/domain/javascript/javascriptSemanticPromises.js +15 -21
  381. package/dist/domain/javascript/javascriptSemanticPropertyPaths.js +100 -0
  382. package/dist/domain/javascript/javascriptSemanticProvenance.js +3 -3
  383. package/dist/domain/javascript/javascriptSemanticQuery.js +33 -29
  384. package/dist/domain/javascript/javascriptSemanticQueryIdentity.js +4 -5
  385. package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -9
  386. package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +16 -10
  387. package/dist/domain/javascript/javascriptSemanticReturnedReferences.js +219 -0
  388. package/dist/domain/javascript/javascriptSemanticReturns.js +34 -48
  389. package/dist/domain/javascript/javascriptSemanticState.js +22 -2
  390. package/dist/domain/javascript/javascriptSemanticTraversal.js +25 -2
  391. package/dist/domain/javascript/javascriptSemanticValues.js +169 -30
  392. package/dist/domain/javascript/javascriptSourceAnalysis.js +1 -0
  393. package/dist/domain/javascript/javascriptSourceMapPaths.js +11 -1
  394. package/dist/domain/javascript/javascriptSourceParser.js +34 -9
  395. package/dist/domain/javascript/javascriptStaticAnalysis.js +29 -17
  396. package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +13 -12
  397. package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +49 -5
  398. package/dist/domain/javascript/javascriptStaticAnalysisFindings.js +8 -4
  399. package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +26 -15
  400. package/dist/domain/javascript/javascriptStaticAnalysisState.js +1 -0
  401. package/dist/domain/javascript/sourceToBundleComparison.js +7 -5
  402. package/dist/domain/javascript/sourceToBundleSignals.js +7 -7
  403. package/dist/domain/jeb/jebAnalysis.js +114 -0
  404. package/dist/domain/jsonSerialization.js +109 -55
  405. package/dist/domain/jsonShape.js +69 -31
  406. package/dist/domain/jsonValue.js +3 -0
  407. package/dist/domain/localPath.js +10 -4
  408. package/dist/domain/managed/managedApplicationGraph.js +47 -6
  409. package/dist/domain/managed/managedApplicationGraphCoverage.js +8 -2
  410. package/dist/domain/managed/managedApplicationGraphNodes.js +94 -59
  411. package/dist/domain/managed/managedArtifact.js +1 -0
  412. package/dist/domain/managed/managedInspectionEvidence.js +13 -0
  413. package/dist/domain/managed/managedMemberComparisonMatch.js +6 -7
  414. package/dist/domain/native/nativeAotPe.js +1408 -0
  415. package/dist/domain/native/nativeCallObservation.js +2 -4
  416. package/dist/domain/native/nativeInstruction.js +21 -0
  417. package/dist/domain/native/nativeMetadataRecovery.js +79 -6
  418. package/dist/domain/native/nativeValueFlow.js +5 -11
  419. package/dist/domain/native/objcSwiftMetadata.js +15 -17
  420. package/dist/domain/native/peResources.js +94 -0
  421. package/dist/domain/nativeConvention.js +33 -0
  422. package/dist/domain/process/processCapture.js +102 -11
  423. package/dist/domain/process/processCaptureCoverage.js +8 -5
  424. package/dist/domain/process/processCaptureExample.js +67 -0
  425. package/dist/domain/process/processCaptureValidation.js +83 -3
  426. package/dist/domain/process/processComparison.js +0 -23
  427. package/dist/domain/process/processScenario.js +62 -10
  428. package/dist/domain/process/processTraceEvaluation.js +4 -4
  429. package/dist/domain/process/processTraceSpecification.js +1 -3
  430. package/dist/domain/propertyListKeys.js +3 -1
  431. package/dist/domain/providerCleanupError.js +6 -2
  432. package/dist/domain/reconstructionCoverage.js +2 -1
  433. package/dist/domain/reconstructionUnknowns.js +4 -3
  434. package/dist/domain/reconstructionVerification.js +3 -2
  435. package/dist/domain/referenceSourceGraph.js +32 -23
  436. package/dist/domain/referenceSourceImportParsing.js +40 -48
  437. package/dist/domain/referenceSourcePathIdentity.js +22 -0
  438. package/dist/domain/referenceSourceRequireBindings.js +137 -0
  439. package/dist/domain/residualUnknown.js +3 -2
  440. package/dist/domain/staticRuntimeCorrelation.js +2 -1
  441. package/dist/domain/swiftSymbolClassification.js +6 -1
  442. package/dist/domain/symbolAnalysis.js +17 -2
  443. package/dist/domain/unicodeCodePointOrder.js +6 -0
  444. package/dist/domain/webBundleAnalyzerInspection.js +23 -3
  445. package/dist/domain/webCaptureDiff.js +170 -30
  446. package/dist/domain/webCaptureDiffSchemas.js +2 -8
  447. package/dist/domain/webInventory.js +3 -2
  448. package/dist/domain/webMcpDiscovery.js +4 -3
  449. package/dist/domain/webScriptExport.js +1 -1
  450. package/dist/domain/webScriptExportError.js +10 -4
  451. package/dist/domain/webScriptExportPlan.js +7 -13
  452. package/dist/domain/zipPackageFormat.js +4 -1
  453. package/dist/domain/zodCollectionSteps.js +24 -0
  454. package/dist/dotnet/ManagedArtifactInspector.js +55 -43
  455. package/dist/dotnet/ManagedDecodeBudget.js +80 -0
  456. package/dist/dotnet/ManagedMemberInspector.js +13 -6
  457. package/dist/dotnet/ManagedMemberInspectorCore.js +2 -2
  458. package/dist/dotnet/ManagedMemberInstructionDecoder.js +5 -4
  459. package/dist/dotnet/ManagedMemberRows.js +9 -4
  460. package/dist/dotnet/ManagedMetadataHeaps.js +15 -5
  461. package/dist/dotnet/ManagedMetadataInventoryRows.js +20 -11
  462. package/dist/dotnet/ManagedMetadataLayout.js +10 -4
  463. package/dist/dotnet/ManagedMethodBodyReader.js +8 -3
  464. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +3 -2
  465. package/dist/dotnet/ManagedNativeBoundaryInspector.js +49 -34
  466. package/dist/dotnet/ManagedPeReader.js +41 -25
  467. package/dist/dotnet/ManagedReaderFailure.js +2 -1
  468. package/dist/dotnet/ManagedStaticProvider.js +65 -31
  469. package/dist/dotnet/ManagedStaticProviderMetadata.js +1 -4
  470. package/dist/evaluation/AgentEvaluationReport.js +9 -5
  471. package/dist/evaluation/CodexAgentEval.js +43 -13
  472. package/dist/evm/EvmoleFailures.js +0 -2
  473. package/dist/evm/EvmoleInterfaceProvider.js +67 -2
  474. package/dist/filesystem/OwnedDirectoryHandle.js +29 -0
  475. package/dist/filesystem/OwnedFileHandle.js +36 -0
  476. package/dist/filesystem/RegularFile.js +73 -0
  477. package/dist/filesystem/StableFileHash.js +46 -0
  478. package/dist/filesystem/readFileHandleChunks.js +26 -0
  479. package/dist/firmware/FirmwareCommand.js +25 -3
  480. package/dist/firmware/FirmwareFiles.js +23 -8
  481. package/dist/firmware/FirmwareProvider.js +156 -32
  482. package/dist/firmware/FirmwarePublication.js +24 -3
  483. package/dist/firmware/FirmwareRelease.js +1 -0
  484. package/dist/generatedPackageMetadata.js +2 -2
  485. package/dist/ghidra/GhidraAnalysisProfile.js +55 -4
  486. package/dist/ghidra/GhidraAnalysisSeeds.js +211 -0
  487. package/dist/ghidra/GhidraClient.js +90 -8
  488. package/dist/ghidra/GhidraDiagnostics.js +11 -8
  489. package/dist/ghidra/GhidraFunctionValues.js +26 -2
  490. package/dist/ghidra/GhidraInstallation.js +111 -10
  491. package/dist/ghidra/GhidraInventoryValues.js +23 -1
  492. package/dist/ghidra/GhidraLanguageCatalog.js +99 -0
  493. package/dist/ghidra/GhidraLauncher.js +123 -58
  494. package/dist/ghidra/GhidraLoadImageAttest.js +49 -2
  495. package/dist/ghidra/GhidraMipsProfile.js +79 -0
  496. package/dist/ghidra/GhidraProvider.js +57 -9
  497. package/dist/ghidra/GhidraProviderCapabilities.js +18 -8
  498. package/dist/ghidra/GhidraProviderClient.js +282 -21
  499. package/dist/ghidra/GhidraSessionValues.js +9 -2
  500. package/dist/hopper/HopperAnalysisProfile.js +2 -0
  501. package/dist/hopper/HopperCleanup.js +1 -1
  502. package/dist/hopper/HopperClient.js +15 -6
  503. package/dist/hopper/HopperMachOImage.js +2 -0
  504. package/dist/hopper/HopperProvider.js +13 -2
  505. package/dist/ida/IdaOperationRunner.js +10 -2
  506. package/dist/ida/IdaProvider.js +7 -0
  507. package/dist/ida/IdaSessionClient.js +7 -3
  508. package/dist/ida/IdaWorkspace.js +4 -2
  509. package/dist/inspector/JavaScriptRuntimeScope.js +9 -5
  510. package/dist/inspector/V8InspectorCaptureProjection.js +46 -13
  511. package/dist/inspector/V8InspectorProvider.js +60 -8
  512. package/dist/javascript/analysis/JavaScriptAnalysisTransfer.js +326 -0
  513. package/dist/javascript/analysis/JavaScriptAnalysisWorker.js +520 -0
  514. package/dist/javascript/analysis/JavaScriptAnalysisWorkerProtocol.js +63 -0
  515. package/dist/javascript/analysis/JavaScriptAnalysisWorkerSchemas.js +521 -0
  516. package/dist/javascript/analysis/JavaScriptAnalysisWorkerServer.js +116 -0
  517. package/dist/javascript/recovery/RecoveryFiles.js +18 -7
  518. package/dist/javascript/recovery/WakaruCommand.js +22 -9
  519. package/dist/javascript/recovery/WakaruExecution.js +11 -7
  520. package/dist/javascript/recovery/WakaruProvider.js +139 -16
  521. package/dist/javascript/recovery/WakaruPublication.js +14 -4
  522. package/dist/javascript/recovery/WakaruRelease.js +10 -3
  523. package/dist/javascript/recovery/WakaruReport.js +12 -7
  524. package/dist/javascript/recovery/WakaruVersion.js +24 -0
  525. package/dist/javascript/sourceMaps/SourceMapCommand.js +16 -3
  526. package/dist/javascript/sourceMaps/SourceMapDecoder.js +63 -7
  527. package/dist/javascript/sourceMaps/SourceMapFormat.js +15 -4
  528. package/dist/jeb/JebMcpConnection.js +179 -0
  529. package/dist/jeb/JebMcpEndpoint.js +40 -0
  530. package/dist/jeb/JebProvider.js +299 -0
  531. package/dist/main/shutdown.js +76 -32
  532. package/dist/main/transport.js +1 -1
  533. package/dist/mcpDoctor.js +15 -6
  534. package/dist/native/AppleDispatchCoverage.js +25 -12
  535. package/dist/native/AppleDispatchMetadata.js +14 -7
  536. package/dist/native/AppleMachoFixups.js +71 -15
  537. package/dist/native/AppleMachoSelection.js +23 -3
  538. package/dist/native/AppleObjcDispatchFacets.js +3 -3
  539. package/dist/native/AppleObjcProperties.js +17 -7
  540. package/dist/native/LldbCallTracer.js +241 -75
  541. package/dist/native/NativeMacOSProvider.js +100 -20
  542. package/dist/native/NativeMacOSProviderMetadata.js +1 -2
  543. package/dist/native/NativeMachoInspection.js +11 -7
  544. package/dist/native/NativeUiHelperRuntime.js +6 -1
  545. package/dist/native/NativeUiObservation.js +4 -3
  546. package/dist/native/pe/PeResourceLayout.js +120 -0
  547. package/dist/native/pe/PeResourceParser.js +286 -0
  548. package/dist/native/pe/PeResourcesProvider.js +63 -0
  549. package/dist/process/BoundedFileBytes.js +30 -7
  550. package/dist/process/DarwinProcessRunTokenReader.js +8 -3
  551. package/dist/process/OwnedCommand.js +4 -3
  552. package/dist/process/ProcessOwnership.js +104 -112
  553. package/dist/process/ProcessOwnershipObservation.js +104 -51
  554. package/dist/process/ProcessOwnershipProcessTree.js +4 -4
  555. package/dist/process/ProcessRunTokenObservations.js +48 -0
  556. package/dist/process/ProviderDiagnosticRedaction.js +17 -0
  557. package/dist/process/ProviderProcess.js +4 -3
  558. package/dist/process/capture/FilesystemSnapshot.js +116 -22
  559. package/dist/process/capture/ProcessCaptureLifecycle.js +363 -86
  560. package/dist/process/capture/ProcessCaptureProgress.js +62 -0
  561. package/dist/process/capture/ProcessFilesystemEffects.js +19 -4
  562. package/dist/process/capture/ProcessHarness.js +202 -47
  563. package/dist/process/capture/ProcessNormalization.js +3 -1
  564. package/dist/process/capture/ProcessScenarioRuntimeValidation.js +5 -2
  565. package/dist/process/capture/TerminalRenderer.js +24 -7
  566. package/dist/reference/ReferenceSourceReader.js +22 -5
  567. package/dist/reference/ReferenceSourceReaderEntries.js +114 -51
  568. package/dist/reference/ReferenceSourceReaderErrors.js +12 -0
  569. package/dist/reference/ReferenceSourceReaderFile.js +50 -10
  570. package/dist/reference/ReferenceSourceReaderValidate.js +4 -4
  571. package/dist/server/EvidenceMcpServer.js +36 -1
  572. package/dist/server/admittedToolOperation.js +9 -0
  573. package/dist/server/analysisAdmission.js +8 -0
  574. package/dist/server/contractToolHandler.js +21 -0
  575. package/dist/server/createServer.js +118 -47
  576. package/dist/server/registerAdbTools.js +36 -0
  577. package/dist/server/registerAnalysisViewTool.js +4 -9
  578. package/dist/server/registerAndroidTools.js +3 -12
  579. package/dist/server/registerApktoolTools.js +14 -0
  580. package/dist/server/registerApplicationTools/compareExportShapes.js +6 -7
  581. package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
  582. package/dist/server/registerApplicationTools/compareVersions.js +3 -2
  583. package/dist/server/registerApplicationTools/coverage.js +3 -2
  584. package/dist/server/registerApplicationTools/helpers.js +3 -2
  585. package/dist/server/registerApplicationTools/obligationLedger.js +3 -2
  586. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -2
  587. package/dist/server/registerApplicationTools/traceFeature.js +3 -2
  588. package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
  589. package/dist/server/registerArtifactComparisonTool.js +5 -2
  590. package/dist/server/registerArtifactTools.js +2 -2
  591. package/dist/server/registerBinaryDiagnosticsTools.js +16 -4
  592. package/dist/server/registerBrowserScenarioTool.js +10 -7
  593. package/dist/server/registerBrowserTools.js +12 -9
  594. package/dist/server/registerBundleComparisonTool.js +16 -2
  595. package/dist/server/registerCloseLifecycleTool.js +36 -5
  596. package/dist/server/registerElectronTools.js +28 -10
  597. package/dist/server/registerEnhancedTools.js +78 -73
  598. package/dist/server/registerEvidenceTools.js +54 -46
  599. package/dist/server/registerEvmTools.js +4 -9
  600. package/dist/server/registerFirmwareTools.js +3 -11
  601. package/dist/server/registerFunctionComparisonTool.js +5 -2
  602. package/dist/server/registerJavaScriptRecoveryTool.js +4 -9
  603. package/dist/server/registerJavaScriptRuntimeObservationTools.js +9 -6
  604. package/dist/server/registerJebTools.js +16 -0
  605. package/dist/server/registerManagedTools.js +7 -4
  606. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +4 -6
  607. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +3 -2
  608. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +3 -2
  609. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +3 -2
  610. package/dist/server/registerOfficialTools.js +31 -25
  611. package/dist/server/registerPeResourcesTool.js +9 -0
  612. package/dist/server/registerProcessComparisonTool.js +5 -2
  613. package/dist/server/registerRecordedCrashTools.js +4 -9
  614. package/dist/server/registerSessionRecordTools.js +2 -1
  615. package/dist/server/registerSessionTools.js +58 -21
  616. package/dist/server/registerWebModuleTool.js +4 -9
  617. package/dist/server/registerWebNetworkCaptureTool.js +4 -9
  618. package/dist/server/registerWebRuntimeTools.js +6 -5
  619. package/dist/server/registerWebScriptTool.js +6 -3
  620. package/dist/server/registerWebSourceLocationTool.js +4 -9
  621. package/dist/server/toolResult.js +21 -2
  622. package/dist/windows/WindowsPrivateRuntime.js +12 -5
  623. package/install.sh +7 -4
  624. package/licenses/nativeaot-parser-MIT.txt +28 -0
  625. package/native/windows/build/manifest.json +2 -2
  626. package/native/windows/build/rea-windows-x64.node +0 -0
  627. package/package.json +38 -7
  628. package/scripts/rea.mjs +16 -1
  629. package/skills/reverse-engineer-anything/SKILL.md +52 -51
  630. package/skills/reverse-engineer-anything/references/connection-and-recovery.md +127 -0
  631. package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -0
  632. package/skills/reverse-engineer-anything/references/javascript-applications.md +92 -13
  633. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +31 -1
  634. package/dist/artifacts/inventory/policy.js +0 -2
  635. package/dist/domain/managed/managedApplicationGraphNodeCoverage.js +0 -6
  636. package/dist/server/registerNativeTools.js +0 -6
@@ -1,17 +1,21 @@
1
1
  import * as t from "@babel/types";
2
2
  import { failedJavaScriptSemanticIr, } from "./javascriptSemanticIr.js";
3
- import { collectSemanticModuleLink, collectSemanticCallable, collectSemanticReferences, immutableSemanticBindings, immutableSemanticScopes, } from "./javascriptSemanticProjection.js";
4
- import { semanticStaticPropertyKey } from "./javascriptAstValues.js";
5
- import { currentSemanticScope, resolveSemanticBindingState, semanticResolutionBlocked, resolveSemanticBindingFromScope, semanticScopeId, semanticVariableScope, } from "./javascriptSemanticState.js";
6
- import { traverseJavaScriptAst } from "./javascriptSemanticTraversal.js";
7
- import { collectSemanticMemberMutations } from "./javascriptSemanticMemberMutations.js";
3
+ import { collectSemanticModuleLink, collectSemanticCallable, collectSemanticReferences, collectSemanticReferencesSteps, immutableSemanticBindings, immutableSemanticScopes, } from "./javascriptSemanticProjection.js";
4
+ import { semanticObjectPatternKeys, semanticStaticPropertyKey, } from "./javascriptAstValues.js";
5
+ import { currentSemanticScope, resolveSemanticBindingState, semanticResolutionBlocked, resolveSemanticBindingFromScope, semanticBindingId, semanticScopeId, semanticVariableScope, } from "./javascriptSemanticState.js";
6
+ import { completeSemanticSteps, traverseJavaScriptAstSteps, } from "./javascriptSemanticTraversal.js";
7
+ import { semanticRequireOrigin } from "./javascriptSemanticRequireOrigin.js";
8
+ import { collectSemanticMemberMutationsSteps } from "./javascriptSemanticMemberMutations.js";
8
9
  import { collectSemanticReturns, resolveSemanticModuleCallables, } from "./javascriptSemanticReturns.js";
9
- import { collectJavaScriptDerivedSemantics } from "./javascriptSemanticDerivedAnalysis.js";
10
+ import { collectJavaScriptDerivedSemanticsSteps } from "./javascriptSemanticDerivedAnalysis.js";
11
+ import { evaluateSemanticProvenance } from "./javascriptSemanticValues.js";
12
+ import { collectElectronMemberWritesSteps, electronExportPath, electronMemberPath, ELECTRON_MODULE, } from "./javascriptElectronMemberWrites.js";
10
13
  import { range } from "./javascriptStaticAnalysisHelpers.js";
11
14
  import { propertyName } from "./javascriptAstValues.js";
12
15
  import { semanticCoverage } from "./javascriptSemanticCoverage.js";
13
16
  import { semanticResourceLimitsIn } from "./javascriptSemanticResourceLimits.js";
14
17
  import { parseJavaScriptSource, } from "./javascriptSourceParser.js";
18
+ import { isJavaScriptRpcClientFactory } from "./javascriptRpcEndpoints.js";
15
19
  /** Recover lexical bindings, aliases, constants, and module links. */
16
20
  export const analyzeJavaScriptSemantics = (source) => {
17
21
  const file = parseJavaScriptSource(source);
@@ -22,23 +26,33 @@ export const analyzeJavaScriptSemantics = (source) => {
22
26
  /** Recover lexical references, optionally for one name, without evaluating values or provenance. */
23
27
  export const analyzeParsedJavaScriptReferences = (file, name) => {
24
28
  const state = createState(file.program);
25
- collectDefinitions(file.program, state);
29
+ completeSemanticSteps(collectDefinitionsSteps(file.program, state));
26
30
  return collectSemanticReferences(file.program, state, name);
27
31
  };
28
32
  /** Recover semantics from an already parsed JavaScript artifact. */
29
- export const analyzeParsedJavaScriptSemantics = (file) => {
33
+ export const analyzeParsedJavaScriptSemantics = (file) => completeSemanticSteps(analyzeParsedJavaScriptSemanticsSteps(file));
34
+ /**
35
+ * Recover semantics from a parsed artifact with a yield between analysis
36
+ * phases, so a caller can serve control messages within one large file.
37
+ * Each phase completes before the next starts; results equal the synchronous
38
+ * form.
39
+ */
40
+ export function* analyzeParsedJavaScriptSemanticsSteps(file) {
30
41
  const state = createState(file.program);
31
- collectDefinitions(file.program, state);
32
- collectSemanticMemberMutations(file.program, state);
33
- traverseJavaScriptAst(file.program, {
42
+ yield* collectDefinitionsSteps(file.program, state);
43
+ yield* collectSemanticMemberMutationsSteps(file.program, state);
44
+ yield* traverseJavaScriptAstSteps(file.program, {
34
45
  enter: (node) => collectSemanticModuleLink(node, state),
35
46
  });
36
- const references = collectSemanticReferences(file.program, state);
47
+ yield;
48
+ const references = yield* collectSemanticReferencesSteps(file.program, state);
37
49
  const parserPartial = file.errors.length > 0;
38
50
  const bindings = immutableSemanticBindings(state);
51
+ yield;
39
52
  const callables = collectSemanticReturns(file.program, state, parserPartial);
53
+ yield;
40
54
  const moduleLinks = resolveSemanticModuleCallables(state, callables);
41
- const derived = collectJavaScriptDerivedSemantics(file.program, state, callables, parserPartial);
55
+ const derived = yield* collectJavaScriptDerivedSemanticsSteps(file.program, state, callables, parserPartial);
42
56
  return {
43
57
  schema: "JavaScriptSemanticIR",
44
58
  scopes: immutableSemanticScopes(state),
@@ -64,17 +78,53 @@ export const analyzeParsedJavaScriptSemantics = (file) => {
64
78
  "Cross-function mutation and dynamic property resolution remain unknown.",
65
79
  ],
66
80
  };
67
- };
81
+ }
82
+ /** Resolve tRPC client roots by lexical identity, excluding overwritten bindings. */
83
+ export function* classifyParsedJavaScriptRpcClientRootsSteps(file) {
84
+ const state = createState(file.program);
85
+ yield* collectDefinitionsSteps(file.program, state);
86
+ const roots = new Set();
87
+ const clients = new Map();
88
+ yield* traverseJavaScriptAstSteps(file.program, {
89
+ enter: (node) => {
90
+ if (!t.isMemberExpression(node) && !t.isOptionalMemberExpression(node))
91
+ return;
92
+ const root = node.object;
93
+ if (!t.isIdentifier(root))
94
+ return;
95
+ const binding = resolveSemanticBindingState(state, root, root.name);
96
+ if (binding === undefined)
97
+ return;
98
+ let client = clients.get(binding.bindingId);
99
+ if (client === undefined) {
100
+ const [initializer] = binding.initializers;
101
+ client =
102
+ initializer !== undefined &&
103
+ initializer.projection.length === 0 &&
104
+ binding.initializers.length === 1 &&
105
+ !binding.definitions.some(({ kind }) => kind === "assignment") &&
106
+ !state.conditionalInitializers.has(initializer.node) &&
107
+ isJavaScriptRpcClientFactory(initializer.node);
108
+ clients.set(binding.bindingId, client);
109
+ }
110
+ if (client)
111
+ roots.add(root);
112
+ },
113
+ });
114
+ return roots;
115
+ }
68
116
  /**
69
117
  * Resolve only the lexical receiver identity needed to distinguish browser
70
118
  * `window.open` from XHR and global storage `.open` calls. This deliberately
71
119
  * builds definitions without running semantic value or provenance analysis.
72
120
  */
73
- export const classifyParsedJavaScriptOpenReceivers = (file) => {
121
+ export const classifyParsedJavaScriptOpenReceivers = (file) => completeSemanticSteps(classifyParsedJavaScriptOpenReceiversSteps(file));
122
+ /** Classify `.open` receivers while yielding during lexical and AST scans. */
123
+ export function* classifyParsedJavaScriptOpenReceiversSteps(file) {
74
124
  const state = createState(file.program);
75
- collectDefinitions(file.program, state);
125
+ yield* collectDefinitionsSteps(file.program, state);
76
126
  const facts = new Map();
77
- traverseJavaScriptAst(file.program, {
127
+ yield* traverseJavaScriptAstSteps(file.program, {
78
128
  enter: (node) => {
79
129
  if ((!t.isCallExpression(node) && !t.isOptionalCallExpression(node)) ||
80
130
  (!t.isMemberExpression(node.callee) &&
@@ -133,7 +183,7 @@ export const classifyParsedJavaScriptOpenReceivers = (file) => {
133
183
  },
134
184
  });
135
185
  return facts;
136
- };
186
+ }
137
187
  const openGlobalFact = (name) => {
138
188
  if (name === "window" ||
139
189
  name === "self" ||
@@ -156,6 +206,95 @@ const resolveGlobalAliasFact = (state, node, name) => {
156
206
  return undefined;
157
207
  return openGlobalFact(name);
158
208
  };
209
+ /**
210
+ * Proven Electron export path segments for call and construction roots, keyed by
211
+ * root offset. Only proven Electron origins are present; callers must not
212
+ * infer an Electron export from an absent entry or familiar local name.
213
+ */
214
+ export const classifyParsedJavaScriptElectronBindings = (file) => completeSemanticSteps(classifyParsedJavaScriptElectronBindingsSteps(file));
215
+ /** Resolve Electron aliases while yielding during lexical and AST scans. */
216
+ export function* classifyParsedJavaScriptElectronBindingsSteps(file) {
217
+ const facts = new Map();
218
+ const state = createState(file.program);
219
+ yield* collectDefinitionsSteps(file.program, state);
220
+ const exportsByBinding = new Map();
221
+ const rootExport = (root) => {
222
+ if (t.isIdentifier(root)) {
223
+ if (semanticResolutionBlocked(state, root, root.name))
224
+ return undefined;
225
+ const binding = resolveSemanticBindingState(state, root, root.name);
226
+ if (binding === undefined)
227
+ return undefined;
228
+ let exported = exportsByBinding.get(binding.bindingId);
229
+ if (exported === undefined) {
230
+ exported = electronExport(binding, state);
231
+ exportsByBinding.set(binding.bindingId, exported);
232
+ }
233
+ return exported ?? undefined;
234
+ }
235
+ const origin = semanticRequireOrigin(root, state);
236
+ return origin !== undefined && ELECTRON_MODULE.test(origin.specifier)
237
+ ? electronExportPath(origin.importedPath)
238
+ : undefined;
239
+ };
240
+ const writes = yield* collectElectronMemberWritesSteps(file.program, rootExport);
241
+ yield* traverseJavaScriptAstSteps(file.program, {
242
+ enter: (node) => {
243
+ if (!t.isCallExpression(node) &&
244
+ !t.isOptionalCallExpression(node) &&
245
+ !t.isNewExpression(node))
246
+ return;
247
+ const { root, members } = electronMemberPath(node.callee);
248
+ const exported = rootExport(root);
249
+ if (exported !== undefined && !writes.covers([...exported, ...members]))
250
+ facts.set(root.start ?? -1, exported);
251
+ },
252
+ });
253
+ return facts;
254
+ }
255
+ // Read import and require origins directly; general value evaluation is
256
+ // unnecessary here and costly across large vendor bundles.
257
+ const electronExport = (binding, state) => {
258
+ if (binding.definitions.some(({ kind }) => kind === "assignment"))
259
+ return null;
260
+ const directOrigin = bindingOrigin(binding, state);
261
+ const [initializer] = binding.initializers;
262
+ if (directOrigin === undefined &&
263
+ (initializer === undefined ||
264
+ binding.initializers.length !== 1 ||
265
+ state.conditionalInitializers.has(initializer.node)))
266
+ return null;
267
+ const provenance = directOrigin === undefined
268
+ ? evaluateSemanticProvenance(binding, state)
269
+ : undefined;
270
+ const origin = directOrigin ??
271
+ (provenance?.status === "module" && provenance.origins.length === 1
272
+ ? provenance.origins[0]
273
+ : undefined);
274
+ return origin !== undefined && ELECTRON_MODULE.test(origin.specifier)
275
+ ? electronExportPath(origin.importedPath)
276
+ : null;
277
+ };
278
+ const bindingOrigin = (binding, state) => {
279
+ if (binding.directOrigins.length > 0)
280
+ return binding.directOrigins.length === 1
281
+ ? binding.directOrigins[0]
282
+ : undefined;
283
+ const [initializer] = binding.initializers;
284
+ // A var/let declaration permits writes without proving one occurred.
285
+ // Require one unconditional initializer and no actual binding writes.
286
+ if (initializer === undefined ||
287
+ binding.initializers.length !== 1 ||
288
+ binding.definitions.some(({ kind }) => kind === "assignment") ||
289
+ state.conditionalInitializers.has(initializer.node))
290
+ return undefined;
291
+ const origin = semanticRequireOrigin(initializer.node, state);
292
+ const projection = initializer.projection;
293
+ return origin === undefined ||
294
+ !projection.every((key) => typeof key === "string")
295
+ ? undefined
296
+ : { ...origin, importedPath: [...origin.importedPath, ...projection] };
297
+ };
159
298
  const createState = (program) => {
160
299
  const root = {
161
300
  scopeId: semanticScopeId("program", program),
@@ -166,6 +305,7 @@ const createState = (program) => {
166
305
  bindings: new Map(),
167
306
  };
168
307
  return {
308
+ parentsByNode: new WeakMap(),
169
309
  scopes: [root],
170
310
  scopesById: new Map([[root.scopeId, root]]),
171
311
  scopeByNode: new WeakMap([[program, root]]),
@@ -173,16 +313,36 @@ const createState = (program) => {
173
313
  callables: [],
174
314
  callableNodesById: new Map(),
175
315
  moduleLinks: [],
316
+ moduleLinkBindings: new WeakMap(),
317
+ conditionalInitializers: new WeakSet(),
176
318
  };
177
319
  };
178
- const collectDefinitions = (program, state) => {
320
+ function* collectDefinitionsSteps(program, state) {
179
321
  const stack = [
180
322
  currentSemanticScope(state.scopes),
181
323
  ];
182
324
  const openedScopes = new WeakMap();
183
- traverseJavaScriptAst(program, {
184
- enter: (node, parent) => {
325
+ const assignments = [];
326
+ const functionBodies = [];
327
+ yield* traverseJavaScriptAstSteps(program, {
328
+ enter: (node, parent, readAncestors) => {
329
+ if (parent !== null)
330
+ state.parentsByNode.set(node, parent);
185
331
  let parentScope = currentSemanticScope(stack);
332
+ if (parent !== null &&
333
+ (t.isObjectMethod(parent) || t.isClassMethod(parent)) &&
334
+ parent.computed &&
335
+ parent.key === node &&
336
+ parentScope.parentScopeId !== null) {
337
+ // A computed method key is evaluated before entering the method's
338
+ // parameter and body environments.
339
+ const keyScope = state.scopesById.get(parentScope.parentScopeId);
340
+ if (keyScope !== undefined) {
341
+ stack.push(keyScope);
342
+ openedScopes.set(node, 1);
343
+ parentScope = keyScope;
344
+ }
345
+ }
186
346
  if (parent !== null &&
187
347
  t.isWithStatement(parent) &&
188
348
  parent.body === node) {
@@ -205,9 +365,18 @@ const collectDefinitions = (program, state) => {
205
365
  if (nested !== undefined) {
206
366
  stack.push(nested);
207
367
  openedScopes.set(node, (openedScopes.get(node) ?? 0) + 1);
368
+ if (t.isBlockStatement(node) && t.isFunction(parent))
369
+ functionBodies.push({
370
+ body: node,
371
+ scope: nested,
372
+ parameters: parent.params,
373
+ });
208
374
  }
209
375
  const scope = currentSemanticScope(stack);
210
- state.scopeByNode.set(node, scope);
376
+ // Other nodes inherit the nearest boundary through their AST parents.
377
+ // Avoid a second full-tree index for the same lexical relationship.
378
+ if (parent === null || openedScopes.has(node))
379
+ state.scopeByNode.set(node, scope);
211
380
  collectSemanticCallable({
212
381
  node,
213
382
  parent,
@@ -216,12 +385,79 @@ const collectDefinitions = (program, state) => {
216
385
  state,
217
386
  });
218
387
  bindInnerDeclaration(node, parent, scope, state);
388
+ if (t.isVariableDeclarator(node) &&
389
+ node.init != null &&
390
+ parent !== null &&
391
+ t.isVariableDeclaration(parent, { kind: "var" }) &&
392
+ hasConditionalInitializer(readAncestors()))
393
+ state.conditionalInitializers.add(node.init);
394
+ if (t.isAssignmentExpression(node) ||
395
+ t.isUpdateExpression(node) ||
396
+ t.isForOfStatement(node) ||
397
+ t.isForInStatement(node))
398
+ assignments.push({ node, scope });
219
399
  },
220
400
  exit: (node) => {
221
401
  for (let count = openedScopes.get(node) ?? 0; count > 0; count--)
222
402
  stack.pop();
223
403
  },
224
404
  });
405
+ // All declarations must exist before resolving writes, including hoisted
406
+ // functions and local declarations that shadow an outer binding.
407
+ for (const [index, { node, scope }] of assignments.entries()) {
408
+ if (index % 64 === 0)
409
+ yield;
410
+ bindAssignment(node, scope, state);
411
+ }
412
+ for (const [index, { body, scope, parameters }] of functionBodies.entries()) {
413
+ if (index % 64 === 0)
414
+ yield;
415
+ for (const parameter of parameters)
416
+ for (const identifier of assignedPatternIdentifiers(t.isTSParameterProperty(parameter) ? parameter.parameter : parameter))
417
+ copyParameterToBody({ identifier, body, scope, state });
418
+ }
419
+ }
420
+ const copyParameterToBody = (input) => {
421
+ const { identifier, body, scope, state } = input;
422
+ const binding = scope.bindings.get(identifier.name);
423
+ if (binding === undefined ||
424
+ binding.kind !== "variable" ||
425
+ binding.definitions.some(({ kind }) => kind === "function"))
426
+ return;
427
+ // A separate body var environment starts with the parameter's value. The
428
+ // real parameter identifier retains its scope and source location; entryBody
429
+ // records when the copy occurs without inventing an expression in the AST.
430
+ binding.initializers.unshift({
431
+ node: identifier,
432
+ projection: [],
433
+ entryBody: body,
434
+ });
435
+ for (let index = binding.initializers.length - 1; index >= 0; index -= 1) {
436
+ const initializer = binding.initializers[index];
437
+ if (initializer !== undefined &&
438
+ initializer.entryBody === undefined &&
439
+ initializer.projection.length === 0 &&
440
+ t.isIdentifier(initializer.node) &&
441
+ resolveSemanticBindingState(state, initializer.node, initializer.node.name) === binding)
442
+ // Direct self-initialization preserves the prior value, including any
443
+ // actual overwrite before it. Keep the source definition/reference facts.
444
+ binding.initializers.splice(index, 1);
445
+ }
446
+ };
447
+ const hasConditionalInitializer = (ancestors) => {
448
+ // A hoisted var can remain undefined when control flow skips its initializer.
449
+ // Conditions outside the owning callable/static block do not govern its body.
450
+ for (let index = ancestors.length - 1; index >= 0; index -= 1) {
451
+ const node = ancestors[index];
452
+ if (t.isFunction(node) || t.isProgram(node) || t.isStaticBlock(node))
453
+ return false;
454
+ if (t.isIfStatement(node) ||
455
+ t.isLoop(node) ||
456
+ t.isSwitchCase(node) ||
457
+ t.isTryStatement(node))
458
+ return true;
459
+ }
460
+ return false;
225
461
  };
226
462
  const bindOuterDeclaration = (node, scope, state) => {
227
463
  if (t.isFunctionDeclaration(node) && t.isIdentifier(node.id))
@@ -279,7 +515,9 @@ const bindInnerDeclaration = (node, parent, scope, state) => {
279
515
  mutable: true,
280
516
  kind: "catch",
281
517
  });
282
- else if (t.isAssignmentExpression(node)) {
518
+ };
519
+ const bindAssignment = (node, scope, state) => {
520
+ if (t.isAssignmentExpression(node)) {
283
521
  if (t.isIdentifier(node.left))
284
522
  addAssignment(node.left, node.operator === "=" ||
285
523
  node.operator === "||=" ||
@@ -293,8 +531,23 @@ const bindInnerDeclaration = (node, parent, scope, state) => {
293
531
  else if (t.isUpdateExpression(node) && t.isIdentifier(node.argument))
294
532
  addAssignment(node.argument, node, scope, state);
295
533
  else if (t.isForOfStatement(node) || t.isForInStatement(node))
296
- for (const identifier of assignedPatternIdentifiers(node.left))
297
- addAssignment(identifier, node, scope, state);
534
+ for (const pattern of t.isVariableDeclaration(node.left)
535
+ ? node.left.declarations.map(({ id }) => id)
536
+ : [node.left]) {
537
+ for (const identifier of assignedPatternIdentifiers(pattern))
538
+ addAssignment(identifier, node, scope, state);
539
+ if (t.isForOfStatement(node))
540
+ // Keep the loop value unknown, but preserve references yielded into
541
+ // each bound slot so writes/escapes can reach their iterable origins.
542
+ bindPattern({
543
+ pattern,
544
+ initializer: node,
545
+ scope,
546
+ state,
547
+ mutable: true,
548
+ referenceOnly: true,
549
+ });
550
+ }
298
551
  };
299
552
  const assignedPatternIdentifiers = (pattern) => {
300
553
  const identifiers = [];
@@ -392,10 +645,47 @@ const scopeKind = (node, parent) => {
392
645
  if (t.isStaticBlock(node))
393
646
  return "static-block";
394
647
  if (t.isBlockStatement(node) &&
395
- !(parent !== null && t.isFunction(parent) && parent.body === node))
648
+ parent !== null &&
649
+ t.isFunction(parent) &&
650
+ parent.body === node) {
651
+ // Parameter expressions cannot see declarations in the function body.
652
+ // Retain the outer function scope for parameters and callable ownership;
653
+ // body declarations belong to a separate variable environment.
654
+ return functionParametersHaveExpressions(parent) ? "function" : undefined;
655
+ }
656
+ if (t.isBlockStatement(node))
396
657
  return "block";
397
658
  return undefined;
398
659
  };
660
+ const functionParametersHaveExpressions = (node) => {
661
+ const pending = [...node.params];
662
+ while (pending.length > 0) {
663
+ const parameter = pending.pop();
664
+ if (t.isAssignmentPattern(parameter))
665
+ return true;
666
+ if (t.isTSParameterProperty(parameter))
667
+ pending.push(parameter.parameter);
668
+ else if (t.isRestElement(parameter))
669
+ pending.push(parameter.argument);
670
+ else if (t.isArrayPattern(parameter)) {
671
+ for (const element of parameter.elements)
672
+ if (element !== null)
673
+ pending.push(element);
674
+ }
675
+ else if (t.isObjectPattern(parameter)) {
676
+ for (const property of parameter.properties) {
677
+ if (t.isRestElement(property))
678
+ pending.push(property.argument);
679
+ else {
680
+ if (property.computed)
681
+ return true;
682
+ pending.push(property.value);
683
+ }
684
+ }
685
+ }
686
+ }
687
+ return false;
688
+ };
399
689
  const bindImports = (node, scope, state) => {
400
690
  for (const specifier of node.specifiers) {
401
691
  const importedPath = t.isImportDefaultSpecifier(specifier)
@@ -429,12 +719,29 @@ const bindFunctionLocals = (node, scope, state) => {
429
719
  });
430
720
  };
431
721
  const bindPattern = (input) => {
432
- const { pattern, initializer, scope, state, mutable, kind = "variable", projection = [], } = input;
722
+ const { pattern, initializer, scope, state, mutable, kind = "variable", projection = [], referenceOnly = false, copyKind, copyProjectionOffset, copyExcludedKeys, copyStartIndex, fallbackSources, requiredSources, } = input;
433
723
  if (t.isTSParameterProperty(pattern)) {
434
724
  bindPattern({ ...input, pattern: pattern.parameter });
435
725
  return;
436
726
  }
437
727
  if (t.isIdentifier(pattern)) {
728
+ if (referenceOnly) {
729
+ const binding = resolveSemanticBindingFromScope(scope, pattern.name, state);
730
+ if (binding !== undefined && initializer !== null)
731
+ binding.referenceInitializers.push({
732
+ node: initializer,
733
+ projection,
734
+ ...(copyKind === undefined ? {} : { copyKind }),
735
+ ...(copyProjectionOffset === undefined
736
+ ? {}
737
+ : { copyProjectionOffset }),
738
+ ...(copyExcludedKeys === undefined ? {} : { copyExcludedKeys }),
739
+ ...(copyStartIndex === undefined ? {} : { copyStartIndex }),
740
+ ...(fallbackSources === undefined ? {} : { fallbackSources }),
741
+ ...(requiredSources === undefined ? {} : { requiredSources }),
742
+ });
743
+ return;
744
+ }
438
745
  addBinding({
439
746
  state,
440
747
  scope,
@@ -454,6 +761,25 @@ const bindPattern = (input) => {
454
761
  initializer: kind === "parameter" || kind === "catch"
455
762
  ? initializer
456
763
  : (initializer ?? pattern.right),
764
+ requiredSources: [
765
+ ...(requiredSources ?? []),
766
+ ...(initializer === null ? [] : [{ node: initializer, projection }]),
767
+ ],
768
+ });
769
+ bindPattern({
770
+ state,
771
+ scope,
772
+ mutable,
773
+ kind,
774
+ pattern: pattern.left,
775
+ initializer: pattern.right,
776
+ projection: [],
777
+ referenceOnly: true,
778
+ fallbackSources: [
779
+ ...(fallbackSources ?? []),
780
+ ...(initializer === null ? [] : [{ node: initializer, projection }]),
781
+ ],
782
+ ...(requiredSources === undefined ? {} : { requiredSources }),
457
783
  });
458
784
  return;
459
785
  }
@@ -468,7 +794,7 @@ const bindPattern = (input) => {
468
794
  }
469
795
  if (t.isObjectPattern(pattern))
470
796
  for (const property of pattern.properties) {
471
- if (t.isRestElement(property))
797
+ if (t.isRestElement(property)) {
472
798
  bindPattern({
473
799
  ...input,
474
800
  pattern: property.argument,
@@ -476,6 +802,16 @@ const bindPattern = (input) => {
476
802
  mutable: true,
477
803
  projection: [],
478
804
  });
805
+ bindPattern({
806
+ ...input,
807
+ pattern: property.argument,
808
+ projection: [...projection, null],
809
+ referenceOnly: true,
810
+ copyKind: "object-rest",
811
+ copyProjectionOffset: projection.length,
812
+ copyExcludedKeys: semanticObjectPatternKeys(pattern),
813
+ });
814
+ }
479
815
  else {
480
816
  const name = semanticStaticPropertyKey(property.key, property.computed);
481
817
  bindPattern({
@@ -487,12 +823,23 @@ const bindPattern = (input) => {
487
823
  }
488
824
  else if (t.isArrayPattern(pattern))
489
825
  pattern.elements.forEach((element, index) => {
490
- if (element !== null)
826
+ if (element !== null) {
491
827
  bindPattern({
492
828
  ...input,
493
829
  pattern: element,
494
830
  projection: [...projection, index],
495
831
  });
832
+ if (t.isRestElement(element))
833
+ bindPattern({
834
+ ...input,
835
+ pattern: element.argument,
836
+ projection: [...projection, null],
837
+ referenceOnly: true,
838
+ copyKind: "array-rest",
839
+ copyProjectionOffset: projection.length,
840
+ copyStartIndex: index,
841
+ });
842
+ }
496
843
  });
497
844
  };
498
845
  const addBinding = (input) => {
@@ -513,14 +860,16 @@ const addBinding = (input) => {
513
860
  binding.directOrigins.push(directOrigin);
514
861
  };
515
862
  const createBinding = (scope, name, kind, mutable) => ({
516
- bindingId: `${scope.scopeId}:binding:${encodeURIComponent(name)}`,
863
+ bindingId: semanticBindingId(scope.scopeId, name),
517
864
  scopeId: scope.scopeId,
518
865
  name,
519
866
  kind,
520
867
  mutable,
521
868
  mutatedPaths: [],
869
+ escapedPaths: [],
522
870
  definitions: [],
523
871
  initializers: [],
872
+ referenceInitializers: [],
524
873
  directOrigins: [],
525
874
  });
526
875
  const addAssignment = (identifier, initializer, scope, state) => {
@@ -1,6 +1,7 @@
1
1
  import * as t from "@babel/types";
2
- import { compareCodePoints } from "../canonicalOrdering.js";
2
+ import { compareUnicodeCodePoints } from "../unicodeCodePointOrder.js";
3
3
  import { semanticCallableIdForNode } from "./javascriptSemanticProjection.js";
4
+ import { unwrapJavaScriptExpression } from "./javascriptAstValues.js";
4
5
  import { resolveSemanticBindingState, } from "./javascriptSemanticState.js";
5
6
  import { range } from "./javascriptStaticAnalysisHelpers.js";
6
7
  /** Resolve local callable candidates without following dynamic properties. */
@@ -11,6 +12,11 @@ export const resolveLocalCallables = (input) => resolveCallables(input.node, {
11
12
  bindingCache: input.bindingCache,
12
13
  });
13
14
  const resolveCallables = (node, context) => {
15
+ // `unwrapJavaScriptExpression` strips all transparent layers iteratively,
16
+ // so a single recursion step suffices (no per-layer stack growth).
17
+ const unwrapped = unwrapJavaScriptExpression(node).node;
18
+ if (unwrapped !== node)
19
+ return resolveCallables(unwrapped, context);
14
20
  const direct = semanticCallableIdForNode(node);
15
21
  if (direct !== null && context.callableById.has(direct))
16
22
  return {
@@ -20,10 +26,6 @@ const resolveCallables = (node, context) => {
20
26
  };
21
27
  if (t.isIdentifier(node))
22
28
  return resolveIdentifier(node, context);
23
- if (t.isTSAsExpression(node) ||
24
- t.isTSTypeAssertion(node) ||
25
- t.isTSNonNullExpression(node))
26
- return resolveCallables(node.expression, context);
27
29
  if (t.isConditionalExpression(node) || t.isLogicalExpression(node))
28
30
  return resolveAlternatives(t.isConditionalExpression(node) ? node.consequent : node.left, t.isConditionalExpression(node) ? node.alternate : node.right, context);
29
31
  return {
@@ -103,7 +105,7 @@ export const parameterBindings = (callable, index, state) => {
103
105
  .filter((binding) => binding.kind === "parameter" &&
104
106
  binding.definitions.some(({ kind, location }) => kind === "parameter" &&
105
107
  parameterAcceptsArgument(callable, location, index, state)))
106
- .sort((left, right) => compareCodePoints(left.bindingId, right.bindingId));
108
+ .sort((left, right) => compareUnicodeCodePoints(left.bindingId, right.bindingId));
107
109
  };
108
110
  const parameterAcceptsArgument = (callable, location, argumentIndex, state) => {
109
111
  const node = state.callableNodesById.get(callable.callableId);
@@ -122,4 +124,4 @@ const rangeContains = (outer, inner) => (outer.start.line < inner.start.line ||
122
124
  (outer.end.line > inner.end.line ||
123
125
  (outer.end.line === inner.end.line &&
124
126
  outer.end.column >= inner.end.column));
125
- const uniqueCallableIds = (values) => [...new Set(values)].sort(compareCodePoints);
127
+ const uniqueCallableIds = (values) => [...new Set(values)].sort(compareUnicodeCodePoints);
@@ -0,0 +1,42 @@
1
+ import * as t from "@babel/types";
2
+ import { childNodes } from "./javascriptSemanticTraversal.js";
3
+ /** Collect direct result syntax without executing or evaluating a callable. */
4
+ export const semanticCallableResultExpressions = (callable) => {
5
+ if (t.isArrowFunctionExpression(callable) &&
6
+ !t.isBlockStatement(callable.body))
7
+ return [
8
+ {
9
+ node: callable.body,
10
+ site: callable.body,
11
+ kind: "return",
12
+ delegated: false,
13
+ },
14
+ ];
15
+ if (!t.isFunction(callable))
16
+ return [];
17
+ const output = [];
18
+ const pending = childNodes(callable.body).reverse();
19
+ while (pending.length > 0) {
20
+ const node = pending.pop();
21
+ if (node === undefined || t.isFunction(node) || t.isClass(node))
22
+ continue;
23
+ if (t.isReturnStatement(node)) {
24
+ output.push({
25
+ node: node.argument ?? null,
26
+ site: node,
27
+ kind: "return",
28
+ delegated: false,
29
+ });
30
+ }
31
+ if (t.isYieldExpression(node))
32
+ output.push({
33
+ node: node.argument ?? null,
34
+ site: node,
35
+ kind: "yield",
36
+ delegated: node.delegate,
37
+ });
38
+ for (const child of childNodes(node).reverse())
39
+ pending.push(child);
40
+ }
41
+ return output;
42
+ };