rea-agents 6.1.0 → 6.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (573) hide show
  1. package/README.md +24 -24
  2. package/bridge/ghidra/ReaGhidraBridge.java +32 -4
  3. package/bridge/hopper_bridge.py +8 -1
  4. package/dist/android/JadxConfiguration.js +87 -7
  5. package/dist/android/JadxMcpTransport.js +14 -2
  6. package/dist/android/JadxProvider.js +64 -36
  7. package/dist/android/JadxSession.js +51 -9
  8. package/dist/application/BinaryTargetResolver.js +68 -20
  9. package/dist/application/BrowserEvidence.js +3 -8
  10. package/dist/application/BrowserScenarioEvidence.js +4 -20
  11. package/dist/application/CapabilityInventory.js +43 -9
  12. package/dist/application/ClientConfigurationDocument.js +97 -25
  13. package/dist/application/ClientRegistrationStatus.js +19 -6
  14. package/dist/application/DirectAnalysis.js +41 -20
  15. package/dist/application/DirectAnalysisCleanup.js +71 -0
  16. package/dist/application/DirectAnalysisStatus.js +3 -7
  17. package/dist/application/Doctor.js +40 -53
  18. package/dist/application/DoctorDiagnostics.js +2 -3
  19. package/dist/application/EnhancedTools.js +51 -6
  20. package/dist/application/EvidenceBundleFiles.js +8 -3
  21. package/dist/application/InvestigationProviders.js +13 -5
  22. package/dist/application/JsonFiles.js +56 -23
  23. package/dist/application/LinuxHopper.js +11 -7
  24. package/dist/application/MacHopper.js +15 -18
  25. package/dist/application/RealHopperAssertions.js +0 -11
  26. package/dist/application/ReconstructionObligationCandidates.js +10 -3
  27. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -1
  28. package/dist/application/ReferenceSourceImportEntries.js +1 -1
  29. package/dist/application/RegularFileRead.js +17 -0
  30. package/dist/application/Setup.js +26 -23
  31. package/dist/application/SetupClientConfiguration.js +18 -7
  32. package/dist/application/SetupHost.js +20 -29
  33. package/dist/application/SetupPlan.js +24 -20
  34. package/dist/application/SetupSkill.js +57 -8
  35. package/dist/application/SupportedClients.js +43 -0
  36. package/dist/application/Uninstall.js +98 -30
  37. package/dist/application/UpdateMaintenance.js +13 -7
  38. package/dist/application/UpdateRuntime.js +12 -12
  39. package/dist/application/Utf8JsonInput.js +64 -0
  40. package/dist/application/WebScriptExportService.js +38 -5
  41. package/dist/application/WorkflowEvidence.js +25 -2
  42. package/dist/application/XrefsAddressResolution.js +45 -0
  43. package/dist/application/analysisView/AnalysisViewService.js +76 -0
  44. package/dist/application/android/AndroidAnalysisService.js +1 -1
  45. package/dist/application/binary/AnalysisClientCleanup.js +30 -5
  46. package/dist/application/binary/AnalysisProviderEvaluation.js +1 -2
  47. package/dist/application/binary/AnalysisProviderRegistry.js +2 -6
  48. package/dist/application/binary/AnalysisSnapshotCache.js +13 -10
  49. package/dist/application/binary/BinarySession.js +86 -29
  50. package/dist/application/binary/BinarySessionComposition.js +1 -3
  51. package/dist/application/binary/BinarySessionExecution.js +3 -5
  52. package/dist/application/binary/BinarySessionOpen.js +10 -2
  53. package/dist/application/binary/BinarySessionRecords.js +1 -1
  54. package/dist/application/binary/BinarySessionStatus.js +1 -6
  55. package/dist/application/binary/CompositeProvider.js +4 -18
  56. package/dist/application/binary/LazyAnalysisProvider.js +5 -5
  57. package/dist/application/binary/SessionProviderRouter.js +27 -135
  58. package/dist/application/homebrew.js +48 -0
  59. package/dist/application/javascript/ElectronActiveEvidence.js +10 -14
  60. package/dist/application/javascript/ElectronBoundaryAnalysis.js +2 -2
  61. package/dist/application/javascript/ElectronBoundaryGraphNative.js +5 -1
  62. package/dist/application/javascript/JavaScriptApplicationEvidence.js +3 -6
  63. package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +107 -46
  64. package/dist/application/javascript/JavaScriptApplicationService.js +7 -1
  65. package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +59 -45
  66. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +5 -9
  67. package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +19 -27
  68. package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +11 -3
  69. package/dist/application/javascript/JavaScriptArtifactGraphContext.js +9 -0
  70. package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +8 -5
  71. package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +46 -29
  72. package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +0 -1
  73. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +86 -27
  74. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +52 -9
  75. package/dist/application/javascript/JavaScriptArtifactReconstructionInput.js +1 -0
  76. package/dist/application/javascript/JavaScriptJsonModules.js +2 -2
  77. package/dist/application/javascript/JavaScriptModuleRelationships.js +6 -18
  78. package/dist/application/javascript/JavaScriptRuntimeObservationService.js +3 -3
  79. package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +11 -27
  80. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +4 -5
  81. package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +8 -6
  82. package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +2 -3
  83. package/dist/application/javascript/JavaScriptSemanticGraphConstruction.js +7 -5
  84. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +3 -4
  85. package/dist/application/javascript/JavaScriptSemanticGraphEvidence.js +1 -1
  86. package/dist/application/javascript/JavaScriptSemanticGraphFingerprintProjection.js +2 -2
  87. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +3 -7
  88. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +76 -47
  89. package/dist/application/javascript/JavaScriptSemanticGraphProjection.js +4 -4
  90. package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +3 -4
  91. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +51 -25
  92. package/dist/application/javascript/JavaScriptSemanticTraceService.js +15 -10
  93. package/dist/application/managed/ManagedMemberComparisonService.js +2 -1
  94. package/dist/application/managed/ManagedNativeVerificationService.js +2 -1
  95. package/dist/application/native/NativeCallRoutes.js +2 -4
  96. package/dist/application/process/ProcessCli.js +11 -11
  97. package/dist/application/process/ProcessEvidence.js +0 -1
  98. package/dist/artifacts/ArtifactProvider.js +53 -30
  99. package/dist/artifacts/ArtifactProviderMetadata.js +1 -4
  100. package/dist/artifacts/ArtifactReader.js +31 -0
  101. package/dist/artifacts/AsarArtifactReader.js +81 -17
  102. package/dist/artifacts/DirectoryArtifactReader.js +2 -1
  103. package/dist/artifacts/MachOSliceArtifactReader.js +9 -2
  104. package/dist/artifacts/NativeDmgArtifactReader.js +207 -77
  105. package/dist/artifacts/NativeDmgOwnership.js +109 -0
  106. package/dist/artifacts/SafeOutputTree.js +16 -2
  107. package/dist/artifacts/ZipArtifactReader.js +11 -4
  108. package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +4 -2
  109. package/dist/artifacts/apple/DylibResolutionReader.js +17 -7
  110. package/dist/artifacts/apple/KeyedArchiveReader.js +68 -42
  111. package/dist/artifacts/apple/MachoLoadCommandReader.js +36 -6
  112. package/dist/artifacts/extraction/ArtifactExtraction.js +104 -29
  113. package/dist/artifacts/inventory/ArtifactGraphConstruction.js +71 -66
  114. package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
  115. package/dist/artifacts/inventory/classify.js +33 -14
  116. package/dist/artifacts/inventory/hashStableRootArtifact.js +37 -0
  117. package/dist/artifacts/inventory/reader.js +3 -3
  118. package/dist/artifacts/inventory/scanCanonical.js +64 -34
  119. package/dist/artifacts/inventory/scanReader.js +12 -20
  120. package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +65 -27
  121. package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
  122. package/dist/browser/CdpBrowserProvider.js +6 -6
  123. package/dist/browser/CdpCaptureEventHandlers.js +2 -4
  124. package/dist/browser/CdpCaptureEvents.js +0 -1
  125. package/dist/browser/CdpCaptureStorageFingerprints.js +3 -3
  126. package/dist/browser/CdpCaptureValues.js +20 -0
  127. package/dist/browser/CdpElectronInspection.js +2 -2
  128. package/dist/browser/CdpElectronProvider.js +4 -5
  129. package/dist/browser/CdpElectronScriptEvents.js +2 -8
  130. package/dist/browser/CdpElectronScripts.js +4 -5
  131. package/dist/browser/CdpPageCaptureScripts.js +2 -3
  132. package/dist/browser/CdpSafeMetadata.js +10 -10
  133. package/dist/browser/CdpWebMcpDiscovery.js +16 -13
  134. package/dist/browser/PlaywrightBrowserScenarioProvider.js +64 -49
  135. package/dist/browser/PlaywrightElectronActiveActions.js +2 -56
  136. package/dist/browser/PlaywrightElectronActiveProvider.js +10 -6
  137. package/dist/browser/PlaywrightScenarioArtifacts.js +1 -1
  138. package/dist/browser/PlaywrightScenarioBrowser.js +269 -66
  139. package/dist/browser/PlaywrightScenarioEvents.js +1 -1
  140. package/dist/browser/PlaywrightScenarioSession.js +41 -32
  141. package/dist/browser/WebSourceMapFetcher.js +32 -6
  142. package/dist/browser/assets/ScenarioScriptCapture.js +8 -12
  143. package/dist/browser/assets/ScriptCaptureAdapters.js +1 -1
  144. package/dist/browser/history/CaptureFailures.js +6 -2
  145. package/dist/browser/history/MitmproxyCaptureAdapter.js +4 -2
  146. package/dist/catalogIdentity.js +0 -1
  147. package/dist/cli/analysisViewCommands.js +36 -0
  148. package/dist/cli/artifactCommands.js +11 -12
  149. package/dist/cli/coreAnalysisCommands.js +3 -3
  150. package/dist/cli/coreBinaryCommands.js +37 -28
  151. package/dist/cli/coreNativeCommands.js +9 -10
  152. package/dist/cli/electronCommands.js +12 -13
  153. package/dist/cli/interactiveSetup.js +6 -6
  154. package/dist/cli/javascriptApplicationAnalysis.js +2 -12
  155. package/dist/cli/jsonOutput.js +3 -2
  156. package/dist/cli/managedCommands.js +7 -8
  157. package/dist/cli/nativeCallCommands.js +1 -2
  158. package/dist/cli/omittableDefaults.js +50 -0
  159. package/dist/cli/processCommands.js +3 -2
  160. package/dist/cli/setupCommands.js +16 -15
  161. package/dist/cli/streamedJsonOutput.js +83 -4
  162. package/dist/cli/utilityCommands.js +10 -12
  163. package/dist/cli.js +19 -8
  164. package/dist/cliBrowserScenarioCommands.js +2 -2
  165. package/dist/cliCommandNames.js +1 -0
  166. package/dist/cliJsonFile.js +179 -0
  167. package/dist/cliJsonInput.js +60 -33
  168. package/dist/cliObservationOptions.js +4 -0
  169. package/dist/cliOutput.js +0 -38
  170. package/dist/composition/auxiliaryAnalysisProviders.js +30 -25
  171. package/dist/composition/binary.js +9 -9
  172. package/dist/composition/browserScenario.js +2 -1
  173. package/dist/composition/directAnalysis.js +20 -14
  174. package/dist/composition/electronScenario.js +1 -1
  175. package/dist/composition/optionalObservationProviders.js +12 -7
  176. package/dist/config/environment.js +6 -0
  177. package/dist/config/ghidraStartupTimeout.js +4 -9
  178. package/dist/config/homeDirectory.js +12 -0
  179. package/dist/config/mcpResponseBudget.js +9 -1
  180. package/dist/config/parseConfig.js +7 -3
  181. package/dist/config/parsers.js +19 -22
  182. package/dist/contracts/analysisViewToolContracts.js +56 -0
  183. package/dist/contracts/applicationToolContracts.js +5 -4
  184. package/dist/contracts/artifactComparisonExample.js +7 -7
  185. package/dist/contracts/artifactToolContracts.js +1 -1
  186. package/dist/contracts/browserScenarioToolContracts.js +1 -1
  187. package/dist/contracts/browserToolContracts.js +19 -15
  188. package/dist/contracts/enhancedInputs.js +2 -2
  189. package/dist/contracts/enhancedToolContracts.js +4 -3
  190. package/dist/contracts/errorSchemas.js +3 -1
  191. package/dist/contracts/evm/evmToolContracts.js +1 -1
  192. package/dist/contracts/functionComparisonExample.js +8 -0
  193. package/dist/contracts/functionWorkflowToolContracts.js +1 -1
  194. package/dist/contracts/inputSchemaPresentation.js +181 -0
  195. package/dist/contracts/investigationExamples.js +4 -3
  196. package/dist/contracts/javascript/electronToolContracts.js +3 -2
  197. package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +3 -22
  198. package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +248 -0
  199. package/dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js +1 -1
  200. package/dist/contracts/javascript/javascriptRuntimeReconciliationExample.js +8 -7
  201. package/dist/contracts/managed/managedToolContracts.js +8 -12
  202. package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
  203. package/dist/contracts/mobileApplicationGraphExamples.js +8 -8
  204. package/dist/contracts/native/binaryDiagnosticsToolContracts.js +1 -1
  205. package/dist/contracts/native/nativeToolContracts.js +2 -2
  206. package/dist/contracts/officialToolContracts.js +2 -1
  207. package/dist/contracts/promptContracts.js +2 -2
  208. package/dist/contracts/providerSelection.js +1 -1
  209. package/dist/contracts/sessionLifecycleInputs.js +4 -3
  210. package/dist/contracts/sessionStatusContract.js +3 -2
  211. package/dist/contracts/sessionToolContracts.js +17 -4
  212. package/dist/contracts/sessionToolSchemas.js +4 -16
  213. package/dist/contracts/toolContracts.js +2 -0
  214. package/dist/contracts/toolEffects.js +1 -0
  215. package/dist/contracts/toolOutputSchemaGroups.js +138 -94
  216. package/dist/contracts/toolOutputSchemaPrimitives.js +13 -26
  217. package/dist/contracts/toolSchemaMetadata.js +18 -69
  218. package/dist/contracts/webNetworkCaptureToolContracts.js +1 -1
  219. package/dist/contracts/webRuntimeToolContracts.js +1 -1
  220. package/dist/contracts/webScriptToolContracts.js +1 -1
  221. package/dist/doctorRuntime.js +7 -5
  222. package/dist/domain/analysisErrorBase.js +5 -0
  223. package/dist/domain/analysisErrorCore.js +3 -0
  224. package/dist/domain/analysisErrorPresentation.js +22 -5
  225. package/dist/domain/analysisErrorProjection.js +24 -5
  226. package/dist/domain/analysisSnapshot.js +31 -31
  227. package/dist/domain/analysisView/analysisView.js +241 -0
  228. package/dist/domain/analysisView/analysisViewCoverage.js +19 -0
  229. package/dist/domain/analysisView/binaryLayoutView.js +159 -0
  230. package/dist/domain/analysisView/javascriptApplicationView.js +238 -0
  231. package/dist/domain/android/androidApplication.js +1 -1
  232. package/dist/domain/android/androidPartialObservation.js +36 -0
  233. package/dist/domain/apple/appleApplication.js +1 -1
  234. package/dist/domain/apple/dylibResolution.js +10 -3
  235. package/dist/domain/apple/interfaceBuilderGraph.js +0 -1
  236. package/dist/domain/apple/keyedArchive.js +26 -2
  237. package/dist/domain/artifactComparison.js +15 -6
  238. package/dist/domain/artifactGraph.js +17 -4
  239. package/dist/domain/artifactIdentity.js +8 -8
  240. package/dist/domain/artifactInspection.js +8 -8
  241. package/dist/domain/artifactInventoryEvidence.js +9 -16
  242. package/dist/domain/artifactOperationError.js +3 -3
  243. package/dist/domain/artifactPartialObservation.js +1 -0
  244. package/dist/domain/artifactPathSyntax.js +49 -0
  245. package/dist/domain/binaryTarget.js +39 -13
  246. package/dist/domain/browserCaptureComparison.js +13 -49
  247. package/dist/domain/browserCompleteness.js +3 -2
  248. package/dist/domain/browserNetworkEvidence.js +10 -4
  249. package/dist/domain/browserObservation.js +0 -1
  250. package/dist/domain/browserObservationSchemas.js +14 -3
  251. package/dist/domain/browserScenario.js +0 -1
  252. package/dist/domain/browserScenarioCapture.js +1 -2
  253. package/dist/domain/browserScenarioCaptureValues.js +2 -2
  254. package/dist/domain/browserScenarioDiff.js +0 -2
  255. package/dist/domain/browserScenarioDiffEvidence.js +0 -12
  256. package/dist/domain/browserScenarioDiffValues.js +2 -2
  257. package/dist/domain/browserScenarioNormalization.js +3 -3
  258. package/dist/domain/browserScenarioValues.js +6 -6
  259. package/dist/domain/callPath.js +15 -18
  260. package/dist/domain/callPathSchemas.js +2 -2
  261. package/dist/domain/canonicalDigest.js +7 -1
  262. package/dist/domain/canonicalOrdering.js +1 -13
  263. package/dist/domain/changedBehavior.js +5 -6
  264. package/dist/domain/comparisonSemantics.js +0 -5
  265. package/dist/domain/completionLedgerGeneration.js +2 -1
  266. package/dist/domain/configurationErrors.js +12 -0
  267. package/dist/domain/conformancePackage.js +4 -3
  268. package/dist/domain/digests.js +0 -3
  269. package/dist/domain/evidence.js +19 -40
  270. package/dist/domain/evidenceBundle.js +58 -42
  271. package/dist/domain/evidenceCompletionLedger.js +2 -1
  272. package/dist/domain/firmware/firmwareAnalysis.js +4 -3
  273. package/dist/domain/functionComparison.js +6 -6
  274. package/dist/domain/functionComparisonDimensions.js +120 -87
  275. package/dist/domain/functionComparisonNormalization.js +26 -36
  276. package/dist/domain/functionComparisonResults.js +3 -6
  277. package/dist/domain/functionComparisonSchemas.js +2 -8
  278. package/dist/domain/functionDossierEvidence.js +4 -38
  279. package/dist/domain/hopperValues.js +11 -15
  280. package/dist/domain/javascript/electronActiveObservation.js +29 -71
  281. package/dist/domain/javascript/electronObservation.js +14 -3
  282. package/dist/domain/javascript/electronStaticAnalysisBrowser.js +12 -11
  283. package/dist/domain/javascript/electronStaticAnalysisIpc.js +11 -2
  284. package/dist/domain/javascript/electronStaticAnalysisNative.js +7 -4
  285. package/dist/domain/javascript/electronStaticAnalysisValues.js +8 -4
  286. package/dist/domain/javascript/javascriptApplicationAnalysis.js +3 -1
  287. package/dist/domain/javascript/javascriptApplicationChangeGraph.js +12 -8
  288. package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +6 -0
  289. package/dist/domain/javascript/javascriptApplicationGraph.js +41 -16
  290. package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +9 -2
  291. package/dist/domain/javascript/javascriptApplicationVersionComparison.js +4 -4
  292. package/dist/domain/javascript/javascriptApplicationVersionComparisonSchemas.js +37 -22
  293. package/dist/domain/javascript/javascriptApplicationVersionItems.js +50 -36
  294. package/dist/domain/javascript/javascriptApplicationVersionKeys.js +9 -8
  295. package/dist/domain/javascript/javascriptAstFingerprint.js +2 -2
  296. package/dist/domain/javascript/javascriptAstValues.js +22 -0
  297. package/dist/{application/javascript/JavaScriptReturnShapeProjection.js → domain/javascript/javascriptExportReturnShapeProjection.js} +4 -4
  298. package/dist/domain/javascript/javascriptExportShapeComparison.js +10 -3
  299. package/dist/domain/javascript/javascriptExportShapeComparisonIdentity.js +6 -1
  300. package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +58 -22
  301. package/dist/domain/javascript/javascriptExportShapeSelection.js +7 -7
  302. package/dist/domain/javascript/javascriptExportShapeVariants.js +70 -16
  303. package/dist/domain/javascript/javascriptFeatureSeed.js +25 -3
  304. package/dist/domain/javascript/javascriptFeatureTrace.js +7 -6
  305. package/dist/domain/javascript/javascriptFeatureTraceSchemas.js +17 -9
  306. package/dist/domain/javascript/javascriptFeatureTraversal.js +4 -5
  307. package/dist/domain/javascript/javascriptNativeHandoff.js +7 -7
  308. package/dist/domain/javascript/javascriptRuntimeLoadState.js +0 -1
  309. package/dist/domain/javascript/javascriptRuntimeObservation.js +18 -7
  310. package/dist/domain/javascript/javascriptRuntimeReconciliation.js +12 -6
  311. package/dist/domain/javascript/javascriptRuntimeReconciliationActive.js +9 -8
  312. package/dist/domain/javascript/javascriptRuntimeReconciliationCaptureParsing.js +212 -0
  313. package/dist/domain/javascript/javascriptRuntimeReconciliationGraph.js +5 -4
  314. package/dist/domain/javascript/javascriptRuntimeReconciliationInputValidation.js +28 -0
  315. package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +6 -6
  316. package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +12 -222
  317. package/dist/domain/javascript/javascriptRuntimeReconciliationResult.js +2 -2
  318. package/dist/domain/javascript/javascriptRuntimeReconciliationRuntime.js +15 -4
  319. package/dist/domain/javascript/javascriptRuntimeReconciliationSchemas.js +2 -2
  320. package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +7 -7
  321. package/dist/domain/javascript/javascriptSemanticAnalysis.js +209 -11
  322. package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +2 -1
  323. package/dist/domain/javascript/javascriptSemanticCallResolution.js +9 -7
  324. package/dist/domain/javascript/javascriptSemanticCalls.js +2 -1
  325. package/dist/domain/javascript/javascriptSemanticChildProcesses.js +4 -3
  326. package/dist/domain/javascript/javascriptSemanticCoverage.js +20 -0
  327. package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +7 -9
  328. package/dist/domain/javascript/javascriptSemanticDataEffects.js +4 -11
  329. package/dist/domain/javascript/javascriptSemanticFingerprints.js +2 -2
  330. package/dist/domain/javascript/javascriptSemanticGraph.js +220 -71
  331. package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +19 -1
  332. package/dist/domain/javascript/javascriptSemanticIr.js +0 -4
  333. package/dist/domain/javascript/javascriptSemanticIterationSources.js +106 -0
  334. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +515 -74
  335. package/dist/domain/javascript/javascriptSemanticMutationInitializers.js +190 -0
  336. package/dist/domain/javascript/javascriptSemanticMutationValues.js +44 -36
  337. package/dist/domain/javascript/javascriptSemanticObjects.js +79 -42
  338. package/dist/domain/javascript/javascriptSemanticPrimitives.js +8 -14
  339. package/dist/domain/javascript/javascriptSemanticProjection.js +21 -16
  340. package/dist/domain/javascript/javascriptSemanticPromises.js +16 -21
  341. package/dist/domain/javascript/javascriptSemanticPropertyPaths.js +23 -0
  342. package/dist/domain/javascript/javascriptSemanticProvenance.js +3 -3
  343. package/dist/domain/javascript/javascriptSemanticQuery.js +8 -2
  344. package/dist/domain/javascript/javascriptSemanticQueryIdentity.js +3 -2
  345. package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -9
  346. package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +16 -10
  347. package/dist/domain/javascript/javascriptSemanticResourceLimits.js +1 -1
  348. package/dist/domain/javascript/javascriptSemanticResources.js +1 -1
  349. package/dist/domain/javascript/javascriptSemanticReturns.js +55 -44
  350. package/dist/domain/javascript/javascriptSemanticSlots.js +72 -0
  351. package/dist/domain/javascript/javascriptSemanticTraversal.js +6 -1
  352. package/dist/domain/javascript/javascriptSemanticValues.js +180 -76
  353. package/dist/domain/javascript/javascriptSourceMapPaths.js +114 -0
  354. package/dist/domain/javascript/javascriptSourceParser.js +34 -9
  355. package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +5 -6
  356. package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +2 -1
  357. package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +26 -16
  358. package/dist/domain/javascript/sourceToBundleComparison.js +19 -8
  359. package/dist/domain/javascript/sourceToBundleSignals.js +53 -25
  360. package/dist/domain/jsonSerialization.js +109 -55
  361. package/dist/domain/jsonShape.js +46 -19
  362. package/dist/domain/localPath.js +10 -4
  363. package/dist/domain/managed/managedApplicationGraph.js +10 -6
  364. package/dist/domain/managed/managedApplicationGraphNodes.js +82 -57
  365. package/dist/domain/managed/managedArtifact.js +6 -4
  366. package/dist/domain/managed/managedMemberComparison.js +2 -9
  367. package/dist/domain/managed/managedMemberComparisonMatch.js +6 -7
  368. package/dist/domain/managed/managedNativeVerification.js +0 -2
  369. package/dist/domain/managed/managedNativeVerificationMatch.js +9 -3
  370. package/dist/domain/native/binaryLayout.js +2 -3
  371. package/dist/domain/native/nativeApiBoundary.js +1 -1
  372. package/dist/domain/native/nativeCallObservation.js +3 -3
  373. package/dist/domain/native/nativeInstruction.js +7 -0
  374. package/dist/domain/native/nativeValueFlow.js +5 -11
  375. package/dist/domain/native/objcSwiftMetadata.js +15 -17
  376. package/dist/domain/native/recordedCrash.js +2 -3
  377. package/dist/domain/offsetDateTime.js +17 -0
  378. package/dist/domain/process/processCapture.js +22 -20
  379. package/dist/domain/process/processCaptureCoverage.js +70 -0
  380. package/dist/domain/process/processCaptureExample.js +45 -1
  381. package/dist/domain/process/processCaptureParsing.js +1 -34
  382. package/dist/domain/process/processCaptureValidation.js +82 -13
  383. package/dist/domain/process/processComparison.js +39 -43
  384. package/dist/domain/process/processObservation.js +10 -2
  385. package/dist/domain/process/processScenario.js +24 -2
  386. package/dist/domain/process/processTraceComparison.js +0 -2
  387. package/dist/domain/process/processTraceDimensionProjection.js +1 -1
  388. package/dist/domain/process/processTraceEvaluation.js +19 -15
  389. package/dist/domain/process/processTraceSpecification.js +4 -7
  390. package/dist/domain/providerAdapterError.js +2 -0
  391. package/dist/domain/providerCleanupError.js +6 -2
  392. package/dist/domain/reconstructionCoverage.js +7 -3
  393. package/dist/domain/reconstructionObligationLedgerSchemas.js +2 -1
  394. package/dist/domain/reconstructionReadinessSchemas.js +2 -1
  395. package/dist/domain/reconstructionUnknowns.js +4 -3
  396. package/dist/domain/reconstructionVerification.js +6 -5
  397. package/dist/domain/reconstructionVerificationSchemas.js +2 -1
  398. package/dist/domain/referenceSourceGraph.js +27 -28
  399. package/dist/domain/referenceSourceImportParsing.js +34 -45
  400. package/dist/domain/residualUnknown.js +3 -2
  401. package/dist/domain/staticRuntimeCorrelation.js +4 -3
  402. package/dist/domain/stringPatterns.js +6 -0
  403. package/dist/domain/swiftSymbolClassification.js +66 -0
  404. package/dist/domain/symbolAnalysis.js +83 -20
  405. package/dist/domain/unicodeCodePointOrder.js +6 -0
  406. package/dist/domain/webBundleAnalyzerInspection.js +9 -1
  407. package/dist/domain/webCaptureDiff.js +71 -30
  408. package/dist/domain/webCaptureDiffSchemas.js +8 -11
  409. package/dist/domain/webEventListeners.js +3 -2
  410. package/dist/domain/webExecution.js +3 -2
  411. package/dist/domain/webInventory.js +3 -2
  412. package/dist/domain/webMcpDiscovery.js +4 -3
  413. package/dist/domain/webRuntime.js +0 -2
  414. package/dist/domain/webScriptExport.js +2 -2
  415. package/dist/dotnet/ManagedArtifactInspector.js +2 -19
  416. package/dist/dotnet/ManagedMemberInspector.js +12 -18
  417. package/dist/dotnet/ManagedMemberInspectorCore.js +47 -44
  418. package/dist/dotnet/ManagedMemberInstructionDecoder.js +1 -2
  419. package/dist/dotnet/ManagedMemberRows.js +75 -62
  420. package/dist/dotnet/ManagedMetadataInventory.js +16 -22
  421. package/dist/dotnet/ManagedMethodBodyReader.js +4 -0
  422. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +109 -94
  423. package/dist/dotnet/ManagedNativeBoundaryInspector.js +12 -21
  424. package/dist/dotnet/ManagedReaderFailure.js +16 -0
  425. package/dist/dotnet/ManagedStaticProvider.js +13 -12
  426. package/dist/dotnet/ManagedStaticProviderMetadata.js +1 -4
  427. package/dist/evaluation/AgentEvaluationFixtures.js +250 -0
  428. package/dist/evaluation/AgentEvaluationReport.js +28 -0
  429. package/dist/evaluation/CodexAgentEval.js +12 -8
  430. package/dist/evaluation/KnownAnswerEvaluation.js +281 -0
  431. package/dist/evm/EvmoleInterfaceProvider.js +2 -1
  432. package/dist/filesystem/RegularFile.js +41 -0
  433. package/dist/firmware/FirmwareCommand.js +9 -5
  434. package/dist/firmware/FirmwareProvider.js +4 -4
  435. package/dist/generatedPackageMetadata.js +2 -2
  436. package/dist/ghidra/GhidraAnalysisProfile.js +3 -6
  437. package/dist/ghidra/GhidraClient.js +105 -36
  438. package/dist/ghidra/GhidraClientStartup.js +0 -2
  439. package/dist/ghidra/GhidraDoctor.js +6 -5
  440. package/dist/ghidra/GhidraFunctionValues.js +3 -5
  441. package/dist/ghidra/GhidraInstallation.js +151 -22
  442. package/dist/ghidra/GhidraJavaLaunch.js +6 -2
  443. package/dist/ghidra/GhidraLauncher.js +58 -26
  444. package/dist/ghidra/GhidraProvider.js +6 -2
  445. package/dist/ghidra/GhidraProviderCapabilities.js +6 -0
  446. package/dist/ghidra/GhidraProviderClient.js +13 -3
  447. package/dist/ghidra/GhidraSessionError.js +2 -0
  448. package/dist/ghidra/GhidraSessionRoot.js +39 -0
  449. package/dist/ghidra/extensions/GhidraExtensions.js +17 -10
  450. package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +8 -2
  451. package/dist/hopper/BridgeLauncher.js +34 -45
  452. package/dist/hopper/HopperAnalysisProfile.js +3 -8
  453. package/dist/hopper/HopperCleanup.js +56 -27
  454. package/dist/hopper/HopperClient.js +86 -65
  455. package/dist/hopper/HopperMachOImage.js +3 -2
  456. package/dist/hopper/HopperProvider.js +16 -18
  457. package/dist/hopper/HopperRegexSearch.js +3 -6
  458. package/dist/hopper/HopperTargetLease.js +132 -49
  459. package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -0
  460. package/dist/ida/IdaConfiguration.js +8 -3
  461. package/dist/ida/IdaInput.js +1 -7
  462. package/dist/ida/IdaMcpConnection.js +8 -4
  463. package/dist/ida/IdaOperationRunner.js +5 -3
  464. package/dist/ida/IdaProvider.js +8 -12
  465. package/dist/ida/IdaSessionClient.js +24 -20
  466. package/dist/ida/IdaWorkspace.js +12 -13
  467. package/dist/inspector/JavaScriptRuntimeScope.js +9 -5
  468. package/dist/inspector/V8InspectorCaptureProjection.js +47 -14
  469. package/dist/inspector/V8InspectorProvider.js +97 -35
  470. package/dist/javascript/recovery/WakaruCommand.js +7 -2
  471. package/dist/javascript/recovery/WakaruExecution.js +5 -2
  472. package/dist/main/shutdown.js +81 -29
  473. package/dist/main/startup.js +9 -2
  474. package/dist/main/transport.js +23 -3
  475. package/dist/main.js +11 -18
  476. package/dist/native/AppleMachoSelection.js +16 -6
  477. package/dist/native/AppleObjcDispatchFacets.js +3 -3
  478. package/dist/native/AppleObjcProperties.js +17 -7
  479. package/dist/native/CommandRunner.js +9 -7
  480. package/dist/native/LldbCallTracer.js +249 -77
  481. package/dist/native/NativeMacOSProvider.js +32 -17
  482. package/dist/native/NativeMacOSProviderMetadata.js +1 -2
  483. package/dist/native/NativeUiHelperRuntime.js +11 -2
  484. package/dist/native/NativeUiObservation.js +2 -2
  485. package/dist/native/pwntools/PwntoolsDecoder.js +2 -1
  486. package/dist/process/DarwinProcessRunTokenReader.js +16 -2
  487. package/dist/process/ExecFileOutput.js +88 -6
  488. package/dist/process/PrivateRuntimeRoot.js +10 -5
  489. package/dist/process/ProcessOwnership.js +1 -4
  490. package/dist/process/ProcessOwnershipObservation.js +18 -16
  491. package/dist/process/ProviderProcess.js +1 -3
  492. package/dist/process/capture/FilesystemSnapshot.js +131 -24
  493. package/dist/process/capture/ProcessCaptureError.js +13 -0
  494. package/dist/process/capture/ProcessCaptureLifecycle.js +148 -74
  495. package/dist/process/capture/ProcessFilesystemEffects.js +51 -6
  496. package/dist/process/capture/ProcessHarness.js +16 -33
  497. package/dist/process/capture/ProcessNormalization.js +20 -2
  498. package/dist/process/capture/ProcessSampling.js +25 -2
  499. package/dist/process/capture/TerminalRenderer.js +14 -0
  500. package/dist/process/snapshotEnvironment.js +14 -0
  501. package/dist/server/EvidenceMcpServer.js +25 -14
  502. package/dist/server/analysisAdmission.js +8 -0
  503. package/dist/server/createServer.js +71 -59
  504. package/dist/server/mcpClientMetadata.js +12 -5
  505. package/dist/server/promptCompletion.js +3 -8
  506. package/dist/server/registerAnalysisViewTool.js +15 -0
  507. package/dist/server/registerAndroidTools.js +2 -3
  508. package/dist/server/registerApplicationTools/compareExportShapes.js +6 -6
  509. package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
  510. package/dist/server/registerApplicationTools/compareVersions.js +4 -5
  511. package/dist/server/registerApplicationTools/coverage.js +1 -2
  512. package/dist/server/registerApplicationTools/helpers.js +4 -4
  513. package/dist/server/registerApplicationTools/obligationLedger.js +4 -5
  514. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -4
  515. package/dist/server/registerApplicationTools/traceFeature.js +4 -5
  516. package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
  517. package/dist/server/registerArtifactComparisonTool.js +4 -5
  518. package/dist/server/registerArtifactTools.js +2 -2
  519. package/dist/server/registerBinaryDiagnosticsTools.js +2 -3
  520. package/dist/server/registerBrowserScenarioTool.js +3 -4
  521. package/dist/server/registerBrowserTools.js +13 -16
  522. package/dist/server/registerBundleComparisonTool.js +5 -6
  523. package/dist/server/registerCloseLifecycleTool.js +8 -7
  524. package/dist/server/registerElectronTools.js +10 -13
  525. package/dist/server/registerEnhancedTools.js +82 -77
  526. package/dist/server/registerEvidenceTools.js +54 -47
  527. package/dist/server/registerEvmTools.js +2 -3
  528. package/dist/server/registerFirmwareTools.js +2 -3
  529. package/dist/server/registerFunctionComparisonTool.js +7 -8
  530. package/dist/server/registerInvestigationTools.js +14 -15
  531. package/dist/server/registerJavaScriptRecoveryTool.js +2 -3
  532. package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -6
  533. package/dist/server/registerManagedTools.js +7 -4
  534. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +5 -6
  535. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -5
  536. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +6 -7
  537. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +6 -7
  538. package/dist/server/registerOfficialTools.js +32 -41
  539. package/dist/server/registerProcessComparisonTool.js +8 -8
  540. package/dist/server/registerRecordedCrashTools.js +2 -3
  541. package/dist/server/registerSessionRecordTools.js +15 -19
  542. package/dist/server/registerSessionStatusTool.js +3 -4
  543. package/dist/server/registerSessionTools.js +19 -19
  544. package/dist/server/registerWebModuleTool.js +2 -3
  545. package/dist/server/registerWebNetworkCaptureTool.js +2 -3
  546. package/dist/server/registerWebRuntimeTools.js +4 -5
  547. package/dist/server/registerWebScriptTool.js +2 -3
  548. package/dist/server/registerWebSourceLocationTool.js +2 -3
  549. package/dist/server/toolResult.js +66 -94
  550. package/dist/server/toolResultEncoding.js +11 -10
  551. package/dist/windows/WindowsNativeLoader.js +1 -0
  552. package/dist/windows/WindowsOwnedProcess.js +60 -15
  553. package/dist/windows/WindowsPrivateRuntime.js +7 -8
  554. package/native/windows/README.md +3 -1
  555. package/native/windows/build/manifest.json +2 -2
  556. package/native/windows/build/rea-windows-x64.node +0 -0
  557. package/package.json +42 -30
  558. package/scripts/rea.mjs +3 -6
  559. package/skills/reverse-engineer-anything/SKILL.md +14 -13
  560. package/skills/reverse-engineer-anything/references/android-applications.md +6 -3
  561. package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -4
  562. package/skills/reverse-engineer-anything/references/javascript-applications.md +16 -6
  563. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +18 -0
  564. package/dist/artifacts/inventory/policy.js +0 -2
  565. package/dist/config.js +0 -1
  566. package/dist/contracts/browserCaptureToolInputSchema.js +0 -43
  567. package/dist/contracts/process/processCaptureExample.js +0 -2
  568. package/dist/contracts/toolOutputSchemas.js +0 -2
  569. package/dist/domain/managed/managedApplicationGraphNodeCoverage.js +0 -6
  570. package/dist/main/reload.js +0 -12
  571. package/dist/main/state.js +0 -3
  572. package/dist/server/registerNativeTools.js +0 -6
  573. package/dist/server/sessionToolPolicies.js +0 -2
@@ -1,11 +1,11 @@
1
1
  import { posix, relative, win32 } from "node:path";
2
- import {} from "./javascriptApplicationGraph.js";
3
- import { compareCodePoints, uniqueSorted } from "../canonicalOrdering.js";
2
+ import { uniqueSorted } from "../canonicalOrdering.js";
3
+ import { compareUnicodeCodePoints } from "../unicodeCodePointOrder.js";
4
4
  /** Index statically reconstructed entities that can receive runtime matches. */
5
5
  export const collectStaticRuntimeCandidates = (layers) => layers
6
6
  .flatMap((layer) => candidatesForLayer(layer))
7
- .sort((left, right) => compareCodePoints(left.layer.layerId, right.layer.layerId) ||
8
- compareCodePoints(left.node.node_id, right.node.node_id));
7
+ .sort((left, right) => compareUnicodeCodePoints(left.layer.layerId, right.layer.layerId) ||
8
+ compareUnicodeCodePoints(left.node.node_id, right.node.node_id));
9
9
  /** Translate one already-authorized runtime location into artifact paths. */
10
10
  export const mappedRuntimePaths = (layer, entity) => {
11
11
  const paths = [];
@@ -187,7 +187,7 @@ const activeArtifactPrefixes = (layer, entities) => {
187
187
  ? pathBelowUrlPrefix(mapping.prefix, location.value) !== null
188
188
  : false))
189
189
  prefixes.add(mapping.artifact_prefix);
190
- return [...prefixes].sort(compareCodePoints);
190
+ return [...prefixes].sort(compareUnicodeCodePoints);
191
191
  };
192
192
  const pathWithinPrefix = (path, prefix) => prefix === "" || path === prefix || path.startsWith(`${prefix}/`);
193
193
  const safeArtifactPath = (prefix, suffix) => normalizeArtifactPath(prefix === "" ? suffix : posix.join(prefix, suffix));
@@ -205,5 +205,5 @@ const normalizeArtifactPath = (value) => {
205
205
  };
206
206
  const uniqueMappedPaths = (values) => [
207
207
  ...new Map(values.map((value) => [`${value.basis}:${value.path}`, value])).values(),
208
- ].sort((left, right) => compareCodePoints(left.path, right.path) ||
209
- compareCodePoints(left.basis, right.basis));
208
+ ].sort((left, right) => compareUnicodeCodePoints(left.path, right.path) ||
209
+ compareUnicodeCodePoints(left.basis, right.basis));
@@ -1,12 +1,14 @@
1
1
  import * as t from "@babel/types";
2
2
  import { failedJavaScriptSemanticIr, } from "./javascriptSemanticIr.js";
3
- import { collectSemanticModuleLink, collectSemanticCallable, collectSemanticReferences, immutableSemanticBindings, immutableSemanticScopes, semanticStaticPropertyKey, } from "./javascriptSemanticProjection.js";
3
+ import { collectSemanticModuleLink, collectSemanticCallable, collectSemanticReferences, immutableSemanticBindings, immutableSemanticScopes, } from "./javascriptSemanticProjection.js";
4
+ import { semanticStaticPropertyKey } from "./javascriptAstValues.js";
4
5
  import { currentSemanticScope, resolveSemanticBindingState, semanticResolutionBlocked, resolveSemanticBindingFromScope, semanticScopeId, semanticVariableScope, } from "./javascriptSemanticState.js";
5
6
  import { traverseJavaScriptAst } from "./javascriptSemanticTraversal.js";
6
7
  import { collectSemanticMemberMutations } from "./javascriptSemanticMemberMutations.js";
7
8
  import { collectSemanticReturns, resolveSemanticModuleCallables, } from "./javascriptSemanticReturns.js";
8
9
  import { collectJavaScriptDerivedSemantics } from "./javascriptSemanticDerivedAnalysis.js";
9
- import { propertyName, range } from "./javascriptStaticAnalysisHelpers.js";
10
+ import { range } from "./javascriptStaticAnalysisHelpers.js";
11
+ import { propertyName } from "./javascriptAstValues.js";
10
12
  import { semanticCoverage } from "./javascriptSemanticCoverage.js";
11
13
  import { semanticResourceLimitsIn } from "./javascriptSemanticResourceLimits.js";
12
14
  import { parseJavaScriptSource, } from "./javascriptSourceParser.js";
@@ -164,6 +166,7 @@ const createState = (program) => {
164
166
  bindings: new Map(),
165
167
  };
166
168
  return {
169
+ parentsByNode: new WeakMap(),
167
170
  scopes: [root],
168
171
  scopesById: new Map([[root.scopeId, root]]),
169
172
  scopeByNode: new WeakMap([[program, root]]),
@@ -171,6 +174,8 @@ const createState = (program) => {
171
174
  callables: [],
172
175
  callableNodesById: new Map(),
173
176
  moduleLinks: [],
177
+ moduleLinkBindings: new WeakMap(),
178
+ conditionalInitializers: new WeakSet(),
174
179
  };
175
180
  };
176
181
  const collectDefinitions = (program, state) => {
@@ -178,9 +183,25 @@ const collectDefinitions = (program, state) => {
178
183
  currentSemanticScope(state.scopes),
179
184
  ];
180
185
  const openedScopes = new WeakMap();
186
+ const assignments = [];
187
+ const functionBodies = [];
181
188
  traverseJavaScriptAst(program, {
182
- enter: (node, parent) => {
189
+ enter: (node, parent, readAncestors) => {
183
190
  let parentScope = currentSemanticScope(stack);
191
+ if (parent !== null &&
192
+ (t.isObjectMethod(parent) || t.isClassMethod(parent)) &&
193
+ parent.computed &&
194
+ parent.key === node &&
195
+ parentScope.parentScopeId !== null) {
196
+ // A computed method key is evaluated before entering the method's
197
+ // parameter and body environments.
198
+ const keyScope = state.scopesById.get(parentScope.parentScopeId);
199
+ if (keyScope !== undefined) {
200
+ stack.push(keyScope);
201
+ openedScopes.set(node, 1);
202
+ parentScope = keyScope;
203
+ }
204
+ }
184
205
  if (parent !== null &&
185
206
  t.isWithStatement(parent) &&
186
207
  parent.body === node) {
@@ -203,6 +224,12 @@ const collectDefinitions = (program, state) => {
203
224
  if (nested !== undefined) {
204
225
  stack.push(nested);
205
226
  openedScopes.set(node, (openedScopes.get(node) ?? 0) + 1);
227
+ if (t.isBlockStatement(node) && t.isFunction(parent))
228
+ functionBodies.push({
229
+ body: node,
230
+ scope: nested,
231
+ parameters: parent.params,
232
+ });
206
233
  }
207
234
  const scope = currentSemanticScope(stack);
208
235
  state.scopeByNode.set(node, scope);
@@ -214,12 +241,73 @@ const collectDefinitions = (program, state) => {
214
241
  state,
215
242
  });
216
243
  bindInnerDeclaration(node, parent, scope, state);
244
+ if (t.isVariableDeclarator(node) &&
245
+ node.init != null &&
246
+ parent !== null &&
247
+ t.isVariableDeclaration(parent, { kind: "var" }) &&
248
+ hasConditionalInitializer(readAncestors()))
249
+ state.conditionalInitializers.add(node.init);
250
+ if (t.isAssignmentExpression(node) ||
251
+ t.isUpdateExpression(node) ||
252
+ t.isForOfStatement(node) ||
253
+ t.isForInStatement(node))
254
+ assignments.push({ node, scope });
217
255
  },
218
256
  exit: (node) => {
219
257
  for (let count = openedScopes.get(node) ?? 0; count > 0; count--)
220
258
  stack.pop();
221
259
  },
222
260
  });
261
+ // All declarations must exist before resolving writes, including hoisted
262
+ // functions and local declarations that shadow an outer binding.
263
+ for (const { node, scope } of assignments)
264
+ bindAssignment(node, scope, state);
265
+ for (const { body, scope, parameters } of functionBodies)
266
+ for (const parameter of parameters)
267
+ for (const identifier of assignedPatternIdentifiers(t.isTSParameterProperty(parameter) ? parameter.parameter : parameter))
268
+ copyParameterToBody({ identifier, body, scope, state });
269
+ };
270
+ const copyParameterToBody = (input) => {
271
+ const { identifier, body, scope, state } = input;
272
+ const binding = scope.bindings.get(identifier.name);
273
+ if (binding === undefined ||
274
+ binding.kind !== "variable" ||
275
+ binding.definitions.some(({ kind }) => kind === "function"))
276
+ return;
277
+ // A separate body var environment starts with the parameter's value. The
278
+ // real parameter identifier retains its scope and source location; entryBody
279
+ // records when the copy occurs without inventing an expression in the AST.
280
+ binding.initializers.unshift({
281
+ node: identifier,
282
+ projection: [],
283
+ entryBody: body,
284
+ });
285
+ for (let index = binding.initializers.length - 1; index >= 0; index -= 1) {
286
+ const initializer = binding.initializers[index];
287
+ if (initializer !== undefined &&
288
+ initializer.entryBody === undefined &&
289
+ initializer.projection.length === 0 &&
290
+ t.isIdentifier(initializer.node) &&
291
+ resolveSemanticBindingState(state, initializer.node, initializer.node.name) === binding)
292
+ // Direct self-initialization preserves the prior value, including any
293
+ // actual overwrite before it. Keep the source definition/reference facts.
294
+ binding.initializers.splice(index, 1);
295
+ }
296
+ };
297
+ const hasConditionalInitializer = (ancestors) => {
298
+ // A hoisted var can remain undefined when control flow skips its initializer.
299
+ // Conditions outside the owning callable/static block do not govern its body.
300
+ for (let index = ancestors.length - 1; index >= 0; index -= 1) {
301
+ const node = ancestors[index];
302
+ if (t.isFunction(node) || t.isProgram(node) || t.isStaticBlock(node))
303
+ return false;
304
+ if (t.isIfStatement(node) ||
305
+ t.isLoop(node) ||
306
+ t.isSwitchCase(node) ||
307
+ t.isTryStatement(node))
308
+ return true;
309
+ }
310
+ return false;
223
311
  };
224
312
  const bindOuterDeclaration = (node, scope, state) => {
225
313
  if (t.isFunctionDeclaration(node) && t.isIdentifier(node.id))
@@ -277,9 +365,15 @@ const bindInnerDeclaration = (node, parent, scope, state) => {
277
365
  mutable: true,
278
366
  kind: "catch",
279
367
  });
280
- else if (t.isAssignmentExpression(node)) {
368
+ };
369
+ const bindAssignment = (node, scope, state) => {
370
+ if (t.isAssignmentExpression(node)) {
281
371
  if (t.isIdentifier(node.left))
282
- addAssignment(node.left, node.right, scope, state);
372
+ addAssignment(node.left, node.operator === "=" ||
373
+ node.operator === "||=" ||
374
+ node.operator === "??="
375
+ ? node.right
376
+ : node, scope, state);
283
377
  else
284
378
  for (const identifier of assignedPatternIdentifiers(node.left))
285
379
  addAssignment(identifier, node, scope, state);
@@ -287,8 +381,11 @@ const bindInnerDeclaration = (node, parent, scope, state) => {
287
381
  else if (t.isUpdateExpression(node) && t.isIdentifier(node.argument))
288
382
  addAssignment(node.argument, node, scope, state);
289
383
  else if (t.isForOfStatement(node) || t.isForInStatement(node))
290
- for (const identifier of assignedPatternIdentifiers(node.left))
291
- addAssignment(identifier, node, scope, state);
384
+ for (const pattern of t.isVariableDeclaration(node.left)
385
+ ? node.left.declarations.map(({ id }) => id)
386
+ : [node.left])
387
+ for (const identifier of assignedPatternIdentifiers(pattern))
388
+ addAssignment(identifier, node, scope, state);
292
389
  };
293
390
  const assignedPatternIdentifiers = (pattern) => {
294
391
  const identifiers = [];
@@ -386,10 +483,47 @@ const scopeKind = (node, parent) => {
386
483
  if (t.isStaticBlock(node))
387
484
  return "static-block";
388
485
  if (t.isBlockStatement(node) &&
389
- !(parent !== null && t.isFunction(parent) && parent.body === node))
486
+ parent !== null &&
487
+ t.isFunction(parent) &&
488
+ parent.body === node) {
489
+ // Parameter expressions cannot see declarations in the function body.
490
+ // Retain the outer function scope for parameters and callable ownership;
491
+ // body declarations belong to a separate variable environment.
492
+ return functionParametersHaveExpressions(parent) ? "function" : undefined;
493
+ }
494
+ if (t.isBlockStatement(node))
390
495
  return "block";
391
496
  return undefined;
392
497
  };
498
+ const functionParametersHaveExpressions = (node) => {
499
+ const pending = [...node.params];
500
+ while (pending.length > 0) {
501
+ const parameter = pending.pop();
502
+ if (t.isAssignmentPattern(parameter))
503
+ return true;
504
+ if (t.isTSParameterProperty(parameter))
505
+ pending.push(parameter.parameter);
506
+ else if (t.isRestElement(parameter))
507
+ pending.push(parameter.argument);
508
+ else if (t.isArrayPattern(parameter)) {
509
+ for (const element of parameter.elements)
510
+ if (element !== null)
511
+ pending.push(element);
512
+ }
513
+ else if (t.isObjectPattern(parameter)) {
514
+ for (const property of parameter.properties) {
515
+ if (t.isRestElement(property))
516
+ pending.push(property.argument);
517
+ else {
518
+ if (property.computed)
519
+ return true;
520
+ pending.push(property.value);
521
+ }
522
+ }
523
+ }
524
+ }
525
+ return false;
526
+ };
393
527
  const bindImports = (node, scope, state) => {
394
528
  for (const specifier of node.specifiers) {
395
529
  const importedPath = t.isImportDefaultSpecifier(specifier)
@@ -423,12 +557,29 @@ const bindFunctionLocals = (node, scope, state) => {
423
557
  });
424
558
  };
425
559
  const bindPattern = (input) => {
426
- const { pattern, initializer, scope, state, mutable, kind = "variable", projection = [], } = input;
560
+ const { pattern, initializer, scope, state, mutable, kind = "variable", projection = [], referenceOnly = false, copyKind, copyProjectionOffset, copyExcludedKeys, copyStartIndex, fallbackSources, requiredSources, } = input;
427
561
  if (t.isTSParameterProperty(pattern)) {
428
562
  bindPattern({ ...input, pattern: pattern.parameter });
429
563
  return;
430
564
  }
431
565
  if (t.isIdentifier(pattern)) {
566
+ if (referenceOnly) {
567
+ const binding = scope.bindings.get(pattern.name);
568
+ if (binding !== undefined && initializer !== null)
569
+ binding.referenceInitializers.push({
570
+ node: initializer,
571
+ projection,
572
+ ...(copyKind === undefined ? {} : { copyKind }),
573
+ ...(copyProjectionOffset === undefined
574
+ ? {}
575
+ : { copyProjectionOffset }),
576
+ ...(copyExcludedKeys === undefined ? {} : { copyExcludedKeys }),
577
+ ...(copyStartIndex === undefined ? {} : { copyStartIndex }),
578
+ ...(fallbackSources === undefined ? {} : { fallbackSources }),
579
+ ...(requiredSources === undefined ? {} : { requiredSources }),
580
+ });
581
+ return;
582
+ }
432
583
  addBinding({
433
584
  state,
434
585
  scope,
@@ -448,6 +599,25 @@ const bindPattern = (input) => {
448
599
  initializer: kind === "parameter" || kind === "catch"
449
600
  ? initializer
450
601
  : (initializer ?? pattern.right),
602
+ requiredSources: [
603
+ ...(requiredSources ?? []),
604
+ ...(initializer === null ? [] : [{ node: initializer, projection }]),
605
+ ],
606
+ });
607
+ bindPattern({
608
+ state,
609
+ scope,
610
+ mutable,
611
+ kind,
612
+ pattern: pattern.left,
613
+ initializer: pattern.right,
614
+ projection: [],
615
+ referenceOnly: true,
616
+ fallbackSources: [
617
+ ...(fallbackSources ?? []),
618
+ ...(initializer === null ? [] : [{ node: initializer, projection }]),
619
+ ],
620
+ ...(requiredSources === undefined ? {} : { requiredSources }),
451
621
  });
452
622
  return;
453
623
  }
@@ -462,7 +632,7 @@ const bindPattern = (input) => {
462
632
  }
463
633
  if (t.isObjectPattern(pattern))
464
634
  for (const property of pattern.properties) {
465
- if (t.isRestElement(property))
635
+ if (t.isRestElement(property)) {
466
636
  bindPattern({
467
637
  ...input,
468
638
  pattern: property.argument,
@@ -470,6 +640,21 @@ const bindPattern = (input) => {
470
640
  mutable: true,
471
641
  projection: [],
472
642
  });
643
+ bindPattern({
644
+ ...input,
645
+ pattern: property.argument,
646
+ projection: [...projection, null],
647
+ referenceOnly: true,
648
+ copyKind: "object-rest",
649
+ copyProjectionOffset: projection.length,
650
+ copyExcludedKeys: pattern.properties.flatMap((property) => {
651
+ if (t.isRestElement(property))
652
+ return [];
653
+ const key = semanticStaticPropertyKey(property.key, property.computed);
654
+ return key === null ? [] : [key];
655
+ }),
656
+ });
657
+ }
473
658
  else {
474
659
  const name = semanticStaticPropertyKey(property.key, property.computed);
475
660
  bindPattern({
@@ -481,12 +666,23 @@ const bindPattern = (input) => {
481
666
  }
482
667
  else if (t.isArrayPattern(pattern))
483
668
  pattern.elements.forEach((element, index) => {
484
- if (element !== null)
669
+ if (element !== null) {
485
670
  bindPattern({
486
671
  ...input,
487
672
  pattern: element,
488
673
  projection: [...projection, index],
489
674
  });
675
+ if (t.isRestElement(element))
676
+ bindPattern({
677
+ ...input,
678
+ pattern: element.argument,
679
+ projection: [...projection, null],
680
+ referenceOnly: true,
681
+ copyKind: "array-rest",
682
+ copyProjectionOffset: projection.length,
683
+ copyStartIndex: index,
684
+ });
685
+ }
490
686
  });
491
687
  };
492
688
  const addBinding = (input) => {
@@ -513,8 +709,10 @@ const createBinding = (scope, name, kind, mutable) => ({
513
709
  kind,
514
710
  mutable,
515
711
  mutatedPaths: [],
712
+ escapedPaths: [],
516
713
  definitions: [],
517
714
  initializers: [],
715
+ referenceInitializers: [],
518
716
  directOrigins: [],
519
717
  });
520
718
  const addAssignment = (identifier, initializer, scope, state) => {
@@ -1,6 +1,7 @@
1
1
  import * as t from "@babel/types";
2
2
  import { semanticBuiltinNamespacePath } from "./javascriptSemanticProvenance.js";
3
- import { semanticCallableIdForNode, semanticStaticPropertyName, } from "./javascriptSemanticProjection.js";
3
+ import { semanticCallableIdForNode } from "./javascriptSemanticProjection.js";
4
+ import { semanticStaticPropertyName } from "./javascriptAstValues.js";
4
5
  import { resolveSemanticBindingState, semanticResolutionBlocked, } from "./javascriptSemanticState.js";
5
6
  import { traverseJavaScriptAst } from "./javascriptSemanticTraversal.js";
6
7
  import { range } from "./javascriptStaticAnalysisHelpers.js";
@@ -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);
@@ -1,5 +1,6 @@
1
1
  import * as t from "@babel/types";
2
- import { semanticCallableIdForNode, semanticReferenceRole, semanticStaticPropertyKey, } from "./javascriptSemanticProjection.js";
2
+ import { semanticCallableIdForNode, semanticReferenceRole, } from "./javascriptSemanticProjection.js";
3
+ import { semanticStaticPropertyKey } from "./javascriptAstValues.js";
3
4
  import { resolveSemanticBindingState, isUnshadowedGlobal, } from "./javascriptSemanticState.js";
4
5
  import { parameterBindings, resolveLocalCallables, } from "./javascriptSemanticCallResolution.js";
5
6
  import { traverseJavaScriptAst } from "./javascriptSemanticTraversal.js";
@@ -1,8 +1,9 @@
1
1
  import * as t from "@babel/types";
2
2
  import { semanticBuiltinNamespacePath } from "./javascriptSemanticProvenance.js";
3
- import { semanticCallableIdForNode, semanticStaticPropertyName, } from "./javascriptSemanticProjection.js";
3
+ import { semanticCallableIdForNode } from "./javascriptSemanticProjection.js";
4
+ import { semanticStaticPropertyName } from "./javascriptAstValues.js";
4
5
  import { resolveSemanticBindingState, } from "./javascriptSemanticState.js";
5
- import { compareCodePoints } from "../canonicalOrdering.js";
6
+ import { compareUnicodeCodePoints } from "../unicodeCodePointOrder.js";
6
7
  import { traverseJavaScriptAst } from "./javascriptSemanticTraversal.js";
7
8
  import { range } from "./javascriptStaticAnalysisHelpers.js";
8
9
  import { dataEffectLiteralString, dataEffectMemberCallee, assignedSemanticResultBindings, scalarAssignedResultBinding, semanticProjectedBindingFacts, } from "./javascriptSemanticDataEffectHelpers.js";
@@ -129,7 +130,7 @@ const childInteraction = (node, ownerCallableId, context) => {
129
130
  processBindingId: binding?.bindingId ?? null,
130
131
  linkedProcessIds: linked
131
132
  .map((candidate) => spawnId(candidate))
132
- .sort(compareCodePoints),
133
+ .sort(compareUnicodeCodePoints),
133
134
  eventName: kind === "listener" ? eventName : null,
134
135
  signalName: kind === "signal"
135
136
  ? (dataEffectLiteralString(node.arguments[0]) ?? "SIGTERM")
@@ -1,9 +1,29 @@
1
+ import { SEMANTIC_EXPRESSION_DEPTH_LIMIT, SEMANTIC_PRIMITIVE_CANDIDATE_LIMIT, SEMANTIC_PRIMITIVE_JSON_BYTES_LIMIT, } from "./javascriptSemanticResourceLimits.js";
1
2
  /** Classify whole-file semantic coverage from parsing and value bounds. */
2
3
  export const semanticCoverage = (parserPartial, resourceLimits = []) => resourceLimits.length > 0
3
4
  ? { status: "partial", omittedCount: null, resourceLimits }
4
5
  : { status: parserPartial ? "partial" : "complete", omittedCount: 0 };
5
6
  /** Read typed resource-limit classifications from any coverage state. */
6
7
  export const semanticCoverageResourceLimits = (coverage) => coverage.resourceLimits ?? [];
8
+ const semanticResourceBounds = {
9
+ "primitive-candidates": {
10
+ value: SEMANTIC_PRIMITIVE_CANDIDATE_LIMIT,
11
+ unit: "items",
12
+ },
13
+ "primitive-bytes": {
14
+ value: SEMANTIC_PRIMITIVE_JSON_BYTES_LIMIT,
15
+ unit: "bytes",
16
+ },
17
+ "expression-depth": {
18
+ value: SEMANTIC_EXPRESSION_DEPTH_LIMIT,
19
+ unit: "depth",
20
+ },
21
+ };
22
+ /** Map semantic evaluator bounds to their caller-visible application coverage. */
23
+ export const semanticResourceLimitCoverage = (resourceLimits) => resourceLimits.map((resourceLimit) => ({
24
+ name: `javascript_semantic_${resourceLimit.replaceAll("-", "_")}`,
25
+ ...semanticResourceBounds[resourceLimit],
26
+ }));
7
27
  /** Classify one callable's direct-return coverage. */
8
28
  export const semanticReturnCoverage = (retainedCount, parserPartial) => ({
9
29
  status: parserPartial ? "partial" : "complete",
@@ -3,7 +3,7 @@ import { semanticBuiltinNamespacePath } from "./javascriptSemanticProvenance.js"
3
3
  import { semanticCallableIdForNode } from "./javascriptSemanticProjection.js";
4
4
  import { resolveSemanticBindingState, semanticResolutionBlocked, } from "./javascriptSemanticState.js";
5
5
  import { traverseJavaScriptAst } from "./javascriptSemanticTraversal.js";
6
- import { readExactJavaScriptLiteral, semanticStaticPropertyKey, semanticStaticPropertyName, } from "./javascriptAstValues.js";
6
+ import { readExactJavaScriptLiteral, semanticStaticPropertyKey, semanticStaticPropertyName, unwrapJavaScriptExpression, } from "./javascriptAstValues.js";
7
7
  /** Resolve bindings written by the nearest variable or assignment owner. */
8
8
  export const assignedSemanticResultBindings = (node, ancestors, state) => {
9
9
  for (let index = ancestors.length - 1; index >= 0; index -= 1) {
@@ -34,14 +34,12 @@ const assignedSourceIs = (node, source) => {
34
34
  while (true) {
35
35
  if (t.isAwaitExpression(value))
36
36
  value = value.argument;
37
- else if (t.isParenthesizedExpression(value) ||
38
- t.isTSAsExpression(value) ||
39
- t.isTSTypeAssertion(value) ||
40
- t.isTypeCastExpression(value) ||
41
- t.isTSSatisfiesExpression(value))
42
- value = value.expression;
43
- else
44
- break;
37
+ else {
38
+ const unwrapped = unwrapJavaScriptExpression(value).node;
39
+ if (unwrapped === value)
40
+ break;
41
+ value = unwrapped;
42
+ }
45
43
  }
46
44
  return value === node;
47
45
  };
@@ -1,7 +1,7 @@
1
1
  import * as t from "@babel/types";
2
2
  import { semanticBuiltinNamespacePath } from "./javascriptSemanticProvenance.js";
3
- import { compareCodePoints } from "../canonicalOrdering.js";
4
- import { semanticStaticPropertyKey, semanticStaticPropertyName, } from "./javascriptSemanticProjection.js";
3
+ import { compareUnicodeCodePoints } from "../unicodeCodePointOrder.js";
4
+ import { semanticStaticPropertyKey, semanticStaticPropertyName, unwrapJavaScriptExpression, } from "./javascriptAstValues.js";
5
5
  import { resolveSemanticBindingState, semanticResolutionBlocked, } from "./javascriptSemanticState.js";
6
6
  import { builtinDataEffectMethod as builtinMethod, dataEffectArgumentBindingId as argumentBindingId, dataEffectLiteralString as literalString, dataEffectMemberCallee as memberCallee, dataEffectMemberObject as memberObject, dataEffectPrimitive as primitiveValue, isSemanticProcessObject as isProcessObject, outerDataEffectBinding as outerAssignedBinding, assignedSemanticResultBindings, semanticProjectedBindingFacts, traverseDataEffects as traverseWithContext, } from "./javascriptSemanticDataEffectHelpers.js";
7
7
  import { range } from "./javascriptStaticAnalysisHelpers.js";
@@ -101,14 +101,7 @@ const collectDefaults = (program, context, configurations) => {
101
101
  if (!t.isLogicalExpression(node) ||
102
102
  (node.operator !== "??" && node.operator !== "||"))
103
103
  return;
104
- let source = node.left;
105
- while (t.isParenthesizedExpression(source) ||
106
- t.isTSAsExpression(source) ||
107
- t.isTSTypeAssertion(source) ||
108
- t.isTypeCastExpression(source) ||
109
- t.isTSSatisfiesExpression(source) ||
110
- t.isTSNonNullExpression(source))
111
- source = source.expression;
104
+ const source = unwrapJavaScriptExpression(node.left).node;
112
105
  const candidate = configurationsByNode.get(source);
113
106
  if (candidate === undefined)
114
107
  return;
@@ -197,7 +190,7 @@ const collectResponseConsumers = (program, context, requests) => {
197
190
  projectedResultBindings: semanticProjectedBindingFacts(assignedSemanticResultBindings(node, context.ancestors, context.state).filter(({ projectionPath }) => projectionPath.length > 0)),
198
191
  linkedRequestIds: linked
199
192
  .map(({ operation }) => operation.requestId)
200
- .sort(compareCodePoints),
193
+ .sort(compareUnicodeCodePoints),
201
194
  endpoint: null,
202
195
  fields: [],
203
196
  resolution: linked.length === 1 &&
@@ -1,6 +1,6 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import * as t from "@babel/types";
3
- import { compareCodePoints } from "../canonicalOrdering.js";
3
+ import { compareUnicodeCodePoints } from "../unicodeCodePointOrder.js";
4
4
  import { semanticCallableIdForNode } from "./javascriptSemanticProjection.js";
5
5
  import { traverseJavaScriptAst } from "./javascriptSemanticTraversal.js";
6
6
  /** Build bounded rename- and formatting-resistant components per callable. */
@@ -38,7 +38,7 @@ export const collectJavaScriptSemanticFingerprints = (input) => {
38
38
  normalizedAstSha256: digest(syntax.normalizedTokens),
39
39
  controlFlowSha256: digest(syntax.controlFlowTokens),
40
40
  relationShapeSha256: digest(relationShape(callable, callSitesByCaller.get(callable.callableId) ?? [], captureCountByCallable.get(callable.callableId) ?? 0, promiseEffects)),
41
- literalSetSha256: digest([...new Set(syntax.literals)].sort(compareCodePoints)),
41
+ literalSetSha256: digest([...new Set(syntax.literals)].sort(compareUnicodeCodePoints)),
42
42
  effects: [
43
43
  ...(isAsyncCallable(node) ? ["async"] : []),
44
44
  ...(childProcessEffects.length > 0