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,7 +1,8 @@
1
1
  import * as t from "@babel/types";
2
- import { semanticCallableIdForNode, semanticStaticPropertyName, } from "./javascriptSemanticProjection.js";
2
+ import { semanticCallableIdForNode } from "./javascriptSemanticProjection.js";
3
+ import { semanticStaticPropertyName, unwrapJavaScriptExpression, } from "./javascriptAstValues.js";
3
4
  import { resolveSemanticBindingState, semanticResolutionBlocked, } from "./javascriptSemanticState.js";
4
- import { compareCodePoints } from "../canonicalOrdering.js";
5
+ import { compareUnicodeCodePoints } from "../unicodeCodePointOrder.js";
5
6
  import { traverseJavaScriptAst } from "./javascriptSemanticTraversal.js";
6
7
  import { range } from "./javascriptStaticAnalysisHelpers.js";
7
8
  import { assignedSemanticResultBindings, dataEffectMemberCallee, scalarAssignedResultBinding, } from "./javascriptSemanticDataEffectHelpers.js";
@@ -22,7 +23,7 @@ export const collectJavaScriptSemanticPromises = (program, state, callables) =>
22
23
  location: range(candidate.node),
23
24
  ownerCallableId: candidate.ownerCallableId,
24
25
  ...ownership,
25
- sourcePromiseIds: [...new Set(sources.promiseIds)].sort(compareCodePoints),
26
+ sourcePromiseIds: [...new Set(sources.promiseIds)].sort(compareUnicodeCodePoints),
26
27
  sourceResolution: sources.status,
27
28
  };
28
29
  });
@@ -84,7 +85,8 @@ const promiseCandidateDetails = (node, state) => {
84
85
  };
85
86
  const isUnshadowedGlobalPromise = (node, state) => resolveSemanticBindingState(state, node, "Promise") === undefined &&
86
87
  !semanticResolutionBlocked(state, node, "Promise");
87
- const isPromiseProducer = (node, state) => promiseCandidateDetails(unwrapExpression(node), state) !== null;
88
+ const isPromiseProducer = (node, state) => promiseCandidateDetails(unwrapJavaScriptExpression(node).node, state) !==
89
+ null;
88
90
  const semanticPromiseId = (kind, node) => `promise:${kind}:${String(node.start ?? -1)}:${String(node.end ?? -1)}`;
89
91
  const promiseOwnership = (candidate, candidateByNode, state, returnSiteIdFor) => {
90
92
  if (candidate.kind === "awaited-expression")
@@ -110,7 +112,7 @@ const promiseOwnership = (candidate, candidateByNode, state, returnSiteIdFor) =>
110
112
  const ownershipAtAncestor = (ancestor, context) => {
111
113
  const { candidate, candidateByNode, state, returnSiteIdFor } = context;
112
114
  if (t.isAwaitExpression(ancestor))
113
- return unwrapExpression(ancestor.argument) === candidate.node
115
+ return unwrapJavaScriptExpression(ancestor.argument).node === candidate.node
114
116
  ? emptyOwnership("awaited")
115
117
  : "boundary";
116
118
  const outer = candidateByNode.get(ancestor);
@@ -131,19 +133,20 @@ const ownershipAtAncestor = (ancestor, context) => {
131
133
  };
132
134
  if (t.isReturnStatement(ancestor)) {
133
135
  if (ancestor.argument == null ||
134
- unwrapExpression(ancestor.argument) !== candidate.node)
136
+ unwrapJavaScriptExpression(ancestor.argument).node !== candidate.node)
135
137
  return "boundary";
136
138
  return returnedPromiseOwnership(candidate.ownerCallableId, range(ancestor), returnSiteIdFor);
137
139
  }
138
140
  if (t.isExpressionStatement(ancestor))
139
- return unwrapExpression(ancestor.expression) === candidate.node
141
+ return unwrapJavaScriptExpression(ancestor.expression).node ===
142
+ candidate.node
140
143
  ? emptyOwnership("detached")
141
144
  : "boundary";
142
145
  const callableId = semanticCallableIdForNode(ancestor);
143
146
  if (callableId === null || callableId !== candidate.ownerCallableId)
144
147
  return null;
145
148
  return t.isArrowFunctionExpression(ancestor) &&
146
- unwrapExpression(ancestor.body) === candidate.node
149
+ unwrapJavaScriptExpression(ancestor.body).node === candidate.node
147
150
  ? returnedPromiseOwnership(candidate.ownerCallableId, range(ancestor.body), returnSiteIdFor)
148
151
  : "boundary";
149
152
  };
@@ -159,7 +162,7 @@ const assignedPromiseBinding = (ancestor, candidate, state) => {
159
162
  : ancestor.right;
160
163
  if (source == null)
161
164
  return undefined;
162
- if (unwrapExpression(source) !== candidate)
165
+ if (unwrapJavaScriptExpression(source).node !== candidate)
163
166
  return undefined;
164
167
  return scalarAssignedResultBinding(assignedSemanticResultBindings(source, [ancestor], state));
165
168
  };
@@ -172,7 +175,8 @@ const outerConsumesCandidate = (outer, candidate) => {
172
175
  if (outer.kind === "chain" &&
173
176
  (t.isCallExpression(outer.node) || t.isOptionalCallExpression(outer.node))) {
174
177
  const member = dataEffectMemberCallee(outer.node);
175
- return (member !== null && unwrapExpression(member.object) === candidate.node);
178
+ return (member !== null &&
179
+ unwrapJavaScriptExpression(member.object).node === candidate.node);
176
180
  }
177
181
  if (outer.kind === "aggregate" &&
178
182
  (t.isCallExpression(outer.node) || t.isOptionalCallExpression(outer.node))) {
@@ -180,7 +184,7 @@ const outerConsumesCandidate = (outer, candidate) => {
180
184
  return (t.isArrayExpression(input) &&
181
185
  input.elements.some((element) => element !== null &&
182
186
  !t.isSpreadElement(element) &&
183
- unwrapExpression(element) === candidate.node));
187
+ unwrapJavaScriptExpression(element).node === candidate.node));
184
188
  }
185
189
  return false;
186
190
  };
@@ -265,7 +269,7 @@ const aggregateSources = (candidate, candidateByNode, state) => {
265
269
  };
266
270
  const resolvePromiseExpression = (rawNode, context) => {
267
271
  const { current, candidateByNode, state, seenBindings } = context;
268
- const node = unwrapExpression(rawNode);
272
+ const node = unwrapJavaScriptExpression(rawNode).node;
269
273
  const direct = candidateByNode.get(node);
270
274
  if (direct !== undefined && direct.promiseId !== current.promiseId)
271
275
  return { promiseIds: [direct.promiseId], status: "complete" };
@@ -293,15 +297,6 @@ const promiseResolutionContext = (current, candidateByNode, state) => ({
293
297
  state,
294
298
  seenBindings: new Set(),
295
299
  });
296
- const unwrapExpression = (node) => {
297
- if (t.isParenthesizedExpression(node) ||
298
- t.isTSAsExpression(node) ||
299
- t.isTSSatisfiesExpression(node) ||
300
- t.isTSNonNullExpression(node) ||
301
- t.isTypeCastExpression(node))
302
- return unwrapExpression(node.expression);
303
- return node;
304
- };
305
300
  const combinePromiseResolutions = (resolutions) => ({
306
301
  promiseIds: resolutions.flatMap(({ promiseIds }) => promiseIds),
307
302
  status: resolutions.some(({ status }) => status === "unresolved")
@@ -0,0 +1,23 @@
1
+ /** Read only canonical JavaScript array indices, excluding named properties. */
2
+ export const semanticArrayIndex = (key) => {
3
+ const index = Number(key);
4
+ return Number.isInteger(index) &&
5
+ index >= 0 &&
6
+ index < 4_294_967_295 &&
7
+ String(index) === String(key)
8
+ ? index
9
+ : null;
10
+ };
11
+ /** Test an exact key, wildcard, or copied-slot selection against an own key. */
12
+ export const semanticPropertyPathKeyMatches = (key, name) => {
13
+ if (key === null)
14
+ return true;
15
+ if (typeof key !== "object")
16
+ return String(key) === name;
17
+ if (key.excludedKeys.includes(name))
18
+ return false;
19
+ if (key.startIndex === undefined)
20
+ return true;
21
+ const index = semanticArrayIndex(name);
22
+ return index !== null && index >= key.startIndex;
23
+ };
@@ -1,4 +1,4 @@
1
- import { compareCodePoints } from "../canonicalOrdering.js";
1
+ import { compareUnicodeCodePoints } from "../unicodeCodePointOrder.js";
2
2
  /** Construct exact local provenance without inventing module origins. */
3
3
  export const semanticLocalProvenance = () => ({
4
4
  status: "local",
@@ -20,8 +20,8 @@ export const semanticOriginsProvenance = (origins) => {
20
20
  /** Deduplicate and canonically order module origins. */
21
21
  export const uniqueSemanticOrigins = (origins) => [
22
22
  ...new Map(origins.map((origin) => [semanticOriginKey(origin), origin])).values(),
23
- ].sort((left, right) => compareCodePoints(semanticOriginKey(left), semanticOriginKey(right)));
24
- const semanticOriginKey = (origin) => `${origin.specifier}\0${origin.importedPath.join("\0")}`;
23
+ ].sort((left, right) => compareUnicodeCodePoints(semanticOriginKey(left), semanticOriginKey(right)));
24
+ const semanticOriginKey = (origin) => JSON.stringify([origin.specifier, origin.importedPath]);
25
25
  /** Canonically distinguish primitive values across type boundaries. */
26
26
  export const semanticPrimitiveKey = (value) => `${value === null ? "null" : typeof value}:${JSON.stringify(value)}`;
27
27
  /** Match namespace paths only after the caller has identified a Node built-in. */
@@ -1,4 +1,4 @@
1
- import { compareCodePoints } from "../canonicalOrdering.js";
1
+ import { compareUnicodeCodePoints } from "../unicodeCodePointOrder.js";
2
2
  import { isJavaScriptSemanticOwnershipRelation as ownershipRelation } from "./javascriptSemanticQueryRelations.js";
3
3
  import { javaScriptSemanticQueryInputSchema, javaScriptSemanticQueryResultSchema, } from "./javascriptSemanticQuerySchemas.js";
4
4
  import { assessJavaScriptSemanticQuery } from "./javascriptSemanticQueryAssessment.js";
@@ -17,6 +17,11 @@ export const queryJavaScriptSemanticGraph = (graph, rawInput) => {
17
17
  const relevantUnknowns = allRelevantUnknowns;
18
18
  const candidateRelations = relevantCandidateRelationCount(graph, traversal.nodeIds, input);
19
19
  const expectedMatches = expectedMatchesFor(result.retainedNodes, result.retainedRelations, input);
20
+ const retainedContextIds = new Set([
21
+ ...result.retainedNodes.map(({ evidence }) => evidence.context_id),
22
+ ...result.retainedRelations.map(({ evidence }) => evidence.context_id),
23
+ ...relevantUnknowns.map(({ evidence }) => evidence.context_id),
24
+ ]);
20
25
  const assessment = assessJavaScriptSemanticQuery({
21
26
  graph,
22
27
  totalSeeds: seeds.length,
@@ -32,6 +37,7 @@ export const queryJavaScriptSemanticGraph = (graph, rawInput) => {
32
37
  direction: input.direction,
33
38
  status: assessment.status,
34
39
  seed_node_ids: retainedSeeds,
40
+ evidence_contexts: graph.evidence_contexts.filter(({ context_id }) => retainedContextIds.has(context_id)),
35
41
  nodes: result.retainedNodes,
36
42
  relations: result.retainedRelations,
37
43
  unknowns: relevantUnknowns,
@@ -78,7 +84,7 @@ const buildAdjacency = (relations, input) => {
78
84
  addDirectedEntries(adjacency, relation, input.direction);
79
85
  }
80
86
  for (const entries of adjacency.values())
81
- entries.sort((left, right) => compareCodePoints(`${left.relation.relation_id}\0${left.nextNodeId}`, `${right.relation.relation_id}\0${right.nextNodeId}`));
87
+ entries.sort((left, right) => compareUnicodeCodePoints(`${left.relation.relation_id}\0${left.nextNodeId}`, `${right.relation.relation_id}\0${right.nextNodeId}`));
82
88
  return adjacency;
83
89
  };
84
90
  const addDirectedEntries = (adjacency, relation, direction) => {
@@ -1,6 +1,7 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import canonicalize from "canonicalize";
3
- import { compareCodePoints, uniqueSorted } from "../canonicalOrdering.js";
3
+ import { uniqueSorted } from "../canonicalOrdering.js";
4
+ import { compareUnicodeCodePoints } from "../unicodeCodePointOrder.js";
4
5
  /** Canonical JSON used by semantic query commitments and ordering. */
5
6
  export const canonicalJavaScriptSemanticQueryJson = (value) => {
6
7
  const encoded = canonicalize(value);
@@ -39,7 +40,7 @@ export const resolveJavaScriptSemanticQuerySeeds = (graph, input) => {
39
40
  return graph.nodes
40
41
  .filter((node) => seedMatches(node, input, fingerprintFunctions))
41
42
  .map(({ node_id }) => node_id)
42
- .sort(compareCodePoints);
43
+ .sort(compareUnicodeCodePoints);
43
44
  };
44
45
  const seedMatches = (node, input, fingerprintFunctions) => {
45
46
  const seed = input.seed;
@@ -1,16 +1,14 @@
1
1
  import { z } from "zod";
2
- import { JAVASCRIPT_SEMANTIC_NODE_KINDS, JAVASCRIPT_SEMANTIC_RELATIONS, javaScriptSemanticNodeSchema, javaScriptSemanticRelationSchema, javaScriptSemanticUnknownSchema, } from "./javascriptSemanticGraphSchemas.js";
3
- import { jsonValueSchema } from "../jsonValue.js";
2
+ import { JAVASCRIPT_SEMANTIC_NODE_KINDS, JAVASCRIPT_SEMANTIC_RELATIONS, javaScriptSemanticNodeSchema, javaScriptSemanticRelationSchema, javaScriptSemanticEvidenceContextSchema, javaScriptSemanticUnknownSchema, } from "./javascriptSemanticGraphSchemas.js";
4
3
  import { digestSchema } from "../digests.js";
5
4
  import { prefixedDigestSchema } from "../digests.js";
6
5
  const semanticNodeIdSchema = prefixedDigestSchema("jsrg_node");
7
- const literalValueSchema = jsonValueSchema.refine((value) => value === null ||
8
- typeof value === "string" ||
9
- typeof value === "number" ||
10
- typeof value === "boolean", "Literal seeds accept only JSON primitive values");
11
- // Zod derivations drop the shared schema's JSON Schema projection override;
12
- // re-apply it so MCP catalog generation keeps projecting `{}`.
13
- literalValueSchema._zod.toJSONSchema = () => ({});
6
+ const literalValueSchema = z.union([
7
+ z.string(),
8
+ z.number(),
9
+ z.boolean(),
10
+ z.null(),
11
+ ]);
14
12
  const literalSeedSchema = z.strictObject({
15
13
  kind: z.literal("literal"),
16
14
  value: literalValueSchema,
@@ -77,6 +75,7 @@ export const javaScriptSemanticQueryResultSchema = z.strictObject({
77
75
  direction: javaScriptSemanticQueryInputSchema.shape.direction,
78
76
  status: z.enum(["found", "no-match", "ambiguous", "partial", "unsupported"]),
79
77
  seed_node_ids: z.array(semanticNodeIdSchema),
78
+ evidence_contexts: z.array(javaScriptSemanticEvidenceContextSchema),
80
79
  nodes: z.array(javaScriptSemanticNodeSchema),
81
80
  relations: z.array(javaScriptSemanticRelationSchema),
82
81
  unknowns: z.array(javaScriptSemanticUnknownSchema),
@@ -1,24 +1,30 @@
1
1
  import * as t from "@babel/types";
2
2
  import { resolveSemanticBindingState, semanticResolutionBlocked, } from "./javascriptSemanticState.js";
3
- import { semanticStaticPropertyKey } from "./javascriptAstValues.js";
3
+ import { semanticStaticPropertyKey, unwrapJavaScriptExpression, } from "./javascriptAstValues.js";
4
4
  import { stringValue } from "./javascriptStaticAnalysisHelpers.js";
5
5
  /** Recover an unshadowed literal require origin and its exact member path. */
6
6
  export const semanticRequireOrigin = (node, state) => {
7
7
  const members = [];
8
- while (t.isMemberExpression(node) || t.isOptionalMemberExpression(node)) {
9
- const member = semanticStaticPropertyKey(node.property, node.computed);
10
- if (member === null || !t.isNode(node.object))
8
+ let current = node;
9
+ while (current !== null && current !== undefined) {
10
+ current = unwrapJavaScriptExpression(current).node;
11
+ if (!t.isMemberExpression(current) &&
12
+ !t.isOptionalMemberExpression(current))
13
+ break;
14
+ const member = semanticStaticPropertyKey(current.property, current.computed);
15
+ if (member === null || !t.isNode(current.object))
11
16
  return undefined;
12
17
  members.push(member);
13
- node = node.object;
18
+ current = current.object;
14
19
  }
15
- if (!t.isCallExpression(node) ||
16
- !t.isIdentifier(node.callee, { name: "require" }))
20
+ if (!t.isCallExpression(current) ||
21
+ !t.isIdentifier(current.callee, { name: "require" }))
17
22
  return undefined;
18
- if (resolveSemanticBindingState(state, node.callee, "require") !== undefined ||
19
- semanticResolutionBlocked(state, node.callee, "require"))
23
+ if (resolveSemanticBindingState(state, current.callee, "require") !==
24
+ undefined ||
25
+ semanticResolutionBlocked(state, current.callee, "require"))
20
26
  return undefined;
21
- const specifier = stringValue(node.arguments[0]);
27
+ const specifier = stringValue(current.arguments[0]);
22
28
  return specifier === undefined
23
29
  ? undefined
24
30
  : { specifier, importedPath: members.reverse() };
@@ -69,7 +69,7 @@ export const semanticResourceLimitsIn = (values) => {
69
69
  pending.push(property.value);
70
70
  else if (value.status === "array")
71
71
  for (const item of value.items)
72
- pending.push(item);
72
+ pending.push(item.value);
73
73
  }
74
74
  return [...found].sort();
75
75
  };
@@ -1,6 +1,6 @@
1
1
  import * as t from "@babel/types";
2
2
  import { semanticBuiltinNamespacePath } from "./javascriptSemanticProvenance.js";
3
- import { semanticStaticPropertyName } from "./javascriptSemanticProjection.js";
3
+ import { semanticStaticPropertyName } from "./javascriptAstValues.js";
4
4
  import { resolveSemanticBindingState, } from "./javascriptSemanticState.js";
5
5
  import { dataEffectMemberCallee, outerDataEffectBinding, traverseDataEffects, } from "./javascriptSemanticDataEffectHelpers.js";
6
6
  import { range } from "./javascriptStaticAnalysisHelpers.js";
@@ -1,11 +1,13 @@
1
1
  import * as t from "@babel/types";
2
- import { compareCodePoints } from "../canonicalOrdering.js";
2
+ import { semanticContainer, semanticPropertyPointer, } from "./javascriptSemanticSlots.js";
3
+ import { compareUnicodeCodePoints } from "../unicodeCodePointOrder.js";
3
4
  import { semanticCallableIdForNode } from "./javascriptSemanticProjection.js";
5
+ import { unwrapJavaScriptExpression } from "./javascriptAstValues.js";
4
6
  import { resolveSemanticBindingState, } from "./javascriptSemanticState.js";
5
7
  import { evaluateSemanticExpression } from "./javascriptSemanticValues.js";
6
8
  import { range } from "./javascriptStaticAnalysisHelpers.js";
7
9
  import { semanticReturnCoverage } from "./javascriptSemanticCoverage.js";
8
- import { traverseJavaScriptAst } from "./javascriptSemanticTraversal.js";
10
+ import { childNodes, traverseJavaScriptAst, } from "./javascriptSemanticTraversal.js";
9
11
  /** Evaluate direct returns while excluding every nested callable. */
10
12
  export const collectSemanticReturns = (program, state, parserPartial) => {
11
13
  const nodes = callableNodes(program);
@@ -45,16 +47,14 @@ const semanticReturnSiteId = (callableId, location) => `${callableId}:return:${S
45
47
  /** Link exports to callables only when lexical resolution is unique and exact. */
46
48
  export const resolveSemanticModuleCallables = (state, callables) => {
47
49
  const callableIds = new Set(callables.map(({ callableId }) => callableId));
48
- const root = state.scopes.find(({ kind }) => kind === "program");
49
50
  return state.moduleLinks.map((link) => {
50
- if (link.callableId !== null && callableIds.has(link.callableId))
51
- return link;
52
- if (link.localName === null || root === undefined)
53
- return { ...link, callableId: null };
54
- const named = callables.filter(({ name, containerScopeId }) => name === link.localName && containerScopeId === root.scopeId);
55
- if (named.length === 1)
56
- return { ...link, callableId: named[0]?.callableId ?? null };
57
- const binding = root.bindings.get(link.localName);
51
+ // Named exports follow their lexical binding, including every assignment.
52
+ // A declaration's ID or a callable's display name cannot prove that link.
53
+ if (link.localName === null)
54
+ return link.callableId !== null && callableIds.has(link.callableId)
55
+ ? link
56
+ : { ...link, callableId: null };
57
+ const binding = state.moduleLinkBindings.get(link);
58
58
  const resolved = binding === undefined
59
59
  ? []
60
60
  : callableIdsForBinding(binding, state, callableIds, new Set());
@@ -96,23 +96,24 @@ const directReturnExpressions = (callable) => {
96
96
  visit(child);
97
97
  return output;
98
98
  };
99
- const childNodes = (node) => (t.VISITOR_KEYS[node.type] ?? []).flatMap((key) => {
100
- const value = Reflect.get(node, key);
101
- if (t.isNode(value))
102
- return [value];
103
- return Array.isArray(value)
104
- ? value.filter((item) => t.isNode(item))
105
- : [];
106
- });
107
99
  const callableIdsForBinding = (binding, state, admitted, seen) => {
108
- if (seen.has(binding.bindingId) || binding.initializers.length !== 1)
100
+ // A single initializer does not prove an assignment executes or replace
101
+ // the unknown incoming value of a parameter/catch binding.
102
+ if (seen.has(binding.bindingId) ||
103
+ binding.initializers.length !== 1 ||
104
+ binding.definitions.some(({ kind }) => kind === "assignment" || kind === "parameter" || kind === "catch"))
109
105
  return [];
110
106
  const initializer = binding.initializers[0];
111
- if (initializer === undefined || initializer.projection.length > 0)
107
+ if (initializer === undefined ||
108
+ initializer.projection.length > 0 ||
109
+ state.conditionalInitializers.has(initializer.node))
112
110
  return [];
113
111
  return callableIdsForNode(initializer.node, state, admitted, new Set([...seen, binding.bindingId]));
114
112
  };
115
113
  const callableIdsForNode = (node, state, admitted, seen) => {
114
+ const unwrapped = unwrapJavaScriptExpression(node).node;
115
+ if (unwrapped !== node)
116
+ return callableIdsForNode(unwrapped, state, admitted, seen);
116
117
  const direct = semanticCallableIdForNode(node);
117
118
  if (direct !== null && admitted.has(direct))
118
119
  return [direct];
@@ -122,10 +123,6 @@ const callableIdsForNode = (node, state, admitted, seen) => {
122
123
  ? []
123
124
  : callableIdsForBinding(binding, state, admitted, seen);
124
125
  }
125
- if (t.isTSAsExpression(node) ||
126
- t.isTSTypeAssertion(node) ||
127
- t.isTSNonNullExpression(node))
128
- return callableIdsForNode(node.expression, state, admitted, seen);
129
126
  return [];
130
127
  };
131
128
  /** Flatten a semantic value to bounded JSON-pointer leaves for graph projection. */
@@ -133,39 +130,53 @@ export const flattenSemanticReturnValue = (value) => {
133
130
  const fields = [];
134
131
  const propertyCoverage = [];
135
132
  flattenValue(value, "", fields, propertyCoverage);
136
- fields.sort((left, right) => compareCodePoints(left.path, right.path));
137
- propertyCoverage.sort((left, right) => compareCodePoints(left.path, right.path));
133
+ fields.sort((left, right) => compareUnicodeCodePoints(left.path, right.path));
134
+ propertyCoverage.sort((left, right) => compareUnicodeCodePoints(left.path, right.path));
138
135
  return { fields, propertyCoverage };
139
136
  };
140
- const flattenValue = (value, path, fields, coverage) => {
137
+ const flattenValue = (value, path, fields, coverage, presence = "present") => {
138
+ if (presence !== "present") {
139
+ fields.push({
140
+ path,
141
+ presence,
142
+ state: "unknown",
143
+ value: null,
144
+ reason: "reason" in value ? value.reason : "Property presence is uncertain.",
145
+ });
146
+ return;
147
+ }
141
148
  if (value.status === "literal") {
142
- fields.push({ path, state: "literal", value: value.value, reason: null });
149
+ fields.push({
150
+ path,
151
+ presence,
152
+ state: "literal",
153
+ value: value.value,
154
+ reason: null,
155
+ });
143
156
  return;
144
157
  }
145
158
  if (value.status === "union") {
146
159
  fields.push({
147
160
  path,
161
+ presence,
148
162
  state: "union",
149
163
  value: [...value.values],
150
164
  reason: null,
151
165
  });
152
166
  return;
153
167
  }
154
- if (value.status === "object") {
155
- coverage.push(value.unknownProperties
156
- ? { path, status: "partial", omitted: value.omittedProperties }
157
- : { path, status: "complete", omitted: 0 });
158
- for (const property of value.properties)
159
- flattenValue(property.value, `${path}/${escapePointer(property.name)}`, fields, coverage);
160
- return;
161
- }
162
- if (value.status === "array") {
163
- coverage.push(value.unknownItems
164
- ? { path, status: "partial", omitted: value.omittedItems }
165
- : { path, status: "complete", omitted: 0 });
166
- value.items.forEach((item, index) => flattenValue(item, `${path}/${String(index)}`, fields, coverage));
168
+ if ("reason" in value) {
169
+ fields.push({
170
+ path,
171
+ presence,
172
+ state: "unknown",
173
+ value: null,
174
+ reason: value.reason,
175
+ });
167
176
  return;
168
177
  }
169
- fields.push({ path, state: "unknown", value: null, reason: value.reason });
178
+ const container = semanticContainer(value);
179
+ coverage.push({ path, ...container.coverage });
180
+ for (const slot of container.slots)
181
+ flattenValue(slot.value, `${path}${semanticPropertyPointer([slot.name])}`, fields, coverage, slot.presence);
170
182
  };
171
- const escapePointer = (value) => value.replaceAll("~", "~0").replaceAll("/", "~1");
@@ -0,0 +1,72 @@
1
+ export function semanticContainer(value) {
2
+ if (value.status === "object")
3
+ return {
4
+ slots: value.properties,
5
+ coverage: value.unknownProperties
6
+ ? { status: "partial", omitted: value.omittedProperties }
7
+ : { status: "complete", omitted: 0 },
8
+ };
9
+ if (value.status === "array")
10
+ return {
11
+ slots: value.items,
12
+ coverage: value.unknownItems
13
+ ? { status: "partial", omitted: value.omittedItems }
14
+ : { status: "complete", omitted: 0 },
15
+ };
16
+ return null;
17
+ }
18
+ /** Resolve a full static own-property path without conflating missing siblings. */
19
+ export const semanticSlotAtPath = (value, path) => {
20
+ const leafName = path.at(-1) ?? "";
21
+ let current = {
22
+ name: "",
23
+ presence: "present",
24
+ value,
25
+ };
26
+ for (const [index, name] of path.entries()) {
27
+ const container = semanticContainer(current.value);
28
+ if (current.presence !== "present" || container === null)
29
+ return {
30
+ name: leafName,
31
+ presence: "unknown-coverage",
32
+ value: "reason" in current.value
33
+ ? {
34
+ ...current.value,
35
+ reason: `${current.value.reason} Cannot continue ${semanticPropertyPointer(path)} through receiver ${semanticPropertyPointer(path.slice(0, index))}.`,
36
+ }
37
+ : {
38
+ status: "unknown",
39
+ reason: `Cannot resolve ${semanticPropertyPointer(path)} through ${current.value.status} receiver ${semanticPropertyPointer(path.slice(0, index))}.`,
40
+ },
41
+ };
42
+ // Array position inventories omit the intrinsic non-enumerable length slot.
43
+ // Its own presence is guaranteed even when no exact length is retained.
44
+ if (current.value.status === "array" && name === "length") {
45
+ current = {
46
+ name,
47
+ presence: "present",
48
+ value: {
49
+ status: "unknown",
50
+ reason: "Array length is present but its value is not retained.",
51
+ },
52
+ };
53
+ continue;
54
+ }
55
+ const observed = container.slots.find((slot) => slot.name === name);
56
+ current = observed ?? {
57
+ name,
58
+ presence: container.coverage.status === "complete"
59
+ ? "absent"
60
+ : "unknown-coverage",
61
+ value: {
62
+ status: "unknown",
63
+ reason: `Own property ${name} was not observed.`,
64
+ },
65
+ };
66
+ }
67
+ return current;
68
+ };
69
+ /** Encode path segments as an unambiguous JSON Pointer, preserving empty keys. */
70
+ export const semanticPropertyPointer = (path) => path
71
+ .map((key) => `/${key.replaceAll("~", "~0").replaceAll("/", "~1")}`)
72
+ .join("");
@@ -33,7 +33,12 @@ export const traverseJavaScriptAst = (root, visitor) => {
33
33
  }
34
34
  }
35
35
  };
36
- const childNodes = (node) => {
36
+ /**
37
+ * Child Babel nodes in `VISITOR_KEYS` order. Single owner for AST child
38
+ * expansion; bespoke `Object.values` / duplicated `childNodes` walkers must
39
+ * not be reintroduced (they diverge on loc/comment fields and ordering).
40
+ */
41
+ export const childNodes = (node) => {
37
42
  const keys = t.VISITOR_KEYS[node.type];
38
43
  if (keys === undefined)
39
44
  return [];