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,9 +1,9 @@
1
1
  import { resolve } from "node:path";
2
2
  import { z } from "zod";
3
- import { AnalysisInputError, AnalysisProtocolError, } from "../../domain/analysisErrorCore.js";
3
+ import { AnalysisProtocolError } from "../../domain/analysisErrorCore.js";
4
4
  import {} from "../../domain/analysisErrorBase.js";
5
5
  import { analysisInputErrorFromIssues } from "../../domain/inputIssueProjection.js";
6
- import { reconcileJavaScriptRuntime } from "../../domain/javascript/javascriptRuntimeReconciliation.js";
6
+ import { parseRuntimeReconciliationInput, reconcileJavaScriptRuntime, } from "../../domain/javascript/javascriptRuntimeReconciliation.js";
7
7
  import { reconcileJavaScriptRuntimeInputSchema } from "../../domain/javascript/javascriptRuntimeReconciliationSchemas.js";
8
8
  import { err, ok } from "../../domain/result.js";
9
9
  import { createJavaScriptRuntimeReconciliationEvidence } from "./JavaScriptRuntimeReconciliationEvidence.js";
@@ -17,19 +17,20 @@ export const reconcileJavaScriptRuntimeEvidence = (rawInput) => {
17
17
  };
18
18
  /** Reconcile input already parsed by a trusted adapter boundary. */
19
19
  export const reconcileJavaScriptRuntimeEvidenceValidated = (parsedInput) => {
20
+ let parsed;
20
21
  try {
21
- const input = reconcileJavaScriptRuntimeInputSchema.parse(normalizeRuntimeMappingRoots(parsedInput));
22
- const result = reconcileJavaScriptRuntime(input);
23
- return ok(createJavaScriptRuntimeReconciliationEvidence(input, result));
22
+ parsed = parseRuntimeReconciliationInput(normalizeRuntimeMappingRoots(parsedInput));
24
23
  }
25
24
  catch (cause) {
26
25
  if (cause instanceof z.ZodError)
27
26
  return err(analysisInputErrorFromIssues(OPERATION, cause.issues, parsedInput));
28
- if (cause instanceof TypeError &&
29
- SAFE_RECONCILIATION_INPUT_CONSTRAINTS.has(cause.message))
30
- return err(new AnalysisInputError(OPERATION, undefined, [
31
- { path: [], reason: "invalid_value", message: cause.message },
32
- ]));
27
+ return err(new AnalysisProtocolError("JavaScript runtime reconciliation input parsing failed", { cause }));
28
+ }
29
+ try {
30
+ const result = reconcileJavaScriptRuntime(parsed);
31
+ return ok(createJavaScriptRuntimeReconciliationEvidence(parsed.input, result));
32
+ }
33
+ catch (cause) {
33
34
  return err(new AnalysisProtocolError("JavaScript runtime reconciliation produced an invalid result", { cause }));
34
35
  }
35
36
  };
@@ -50,20 +51,3 @@ const normalizeRuntimeMappingRoots = (input) => ({
50
51
  const isPortableAbsolutePath = (path) => path.startsWith("/") ||
51
52
  /^[a-z]:[\\/]/iu.test(path) ||
52
53
  /^(?:\\\\|\/\/)[^\\/]+[\\/][^\\/]+(?:[\\/]|$)/u.test(path);
53
- const SAFE_RECONCILIATION_INPUT_CONSTRAINTS = new Set([
54
- "Evidence semantic identifier does not match its record",
55
- "JavaScript application Evidence subject disagrees with its result",
56
- "Runtime reconciliation requires inspect_web_page, inspect_electron_page, observe_javascript_runtime, or capture_electron_scenario Evidence",
57
- "Runtime Evidence target or declared role disagrees with its result",
58
- "Runtime Evidence contains an invalid builtin location",
59
- "Runtime Evidence target disagrees with its captured result",
60
- "Browser Evidence target is outside its recorded origin scope",
61
- "Runtime Evidence contains source without source-capture selection",
62
- "Active Electron Evidence application path disagrees with its configured root",
63
- ...[
64
- "inspect_web_page",
65
- "inspect_electron_page",
66
- "observe_javascript_runtime",
67
- "capture_electron_scenario",
68
- ].map((operation) => `Evidence does not match the supported ${operation} contract`),
69
- ]);
@@ -1,7 +1,6 @@
1
1
  import { createJavaScriptSemanticGraphUnknown } from "../../domain/javascript/javascriptSemanticGraph.js";
2
2
  import { retainSemanticGraphNode, addSemanticGraphRelation, addSemanticGraphUnknown, } from "./JavaScriptSemanticGraphConstruction.js";
3
3
  import { unknownSemanticEvidence } from "./JavaScriptSemanticGraphEvidence.js";
4
- import { semanticCallSiteAt, } from "./JavaScriptSemanticGraphFlowProjection.js";
5
4
  /** Project literal EventEmitter registrations, removals, and dispatches. */
6
5
  export const projectSemanticEvents = (context) => {
7
6
  const eventNodes = new Map();
@@ -85,7 +84,7 @@ const addEventUnknown = (context, operation, event, relation) => {
85
84
  : `Static ${operation.method} emitter identity is partial.`,
86
85
  candidate_node_ids: [],
87
86
  evidence: unknownSemanticEvidence(context.file, operation.location),
88
- }));
87
+ }, context.state.evidenceContexts));
89
88
  };
90
89
  /** Project Node timer scheduling and exact local handle cancellation. */
91
90
  export const projectSemanticTimers = (context) => {
@@ -116,7 +115,7 @@ export const projectSemanticTimers = (context) => {
116
115
  };
117
116
  const projectTimerSchedule = (context, operation, timerNodes) => {
118
117
  addSemanticGraphRelation(context.state, {
119
- source: semanticCallSiteAt(context, operation.location),
118
+ source: context.callSiteAt(operation.location),
120
119
  target: timerNodes.get(operation.timerId),
121
120
  relation: "schedules-timer",
122
121
  resolution: "resolved",
@@ -134,7 +133,7 @@ const projectTimerSchedule = (context, operation, timerNodes) => {
134
133
  });
135
134
  };
136
135
  const projectTimerCancellation = (context, operation, timerNodes) => {
137
- const callSite = semanticCallSiteAt(context, operation.location);
136
+ const callSite = context.callSiteAt(operation.location);
138
137
  const target = operation.linkedTimerId === null
139
138
  ? undefined
140
139
  : timerNodes.get(operation.linkedTimerId);
@@ -154,5 +153,5 @@ const projectTimerCancellation = (context, operation, timerNodes) => {
154
153
  detail: `Static ${operation.method} handle resolution was ${operation.resolution}.`,
155
154
  candidate_node_ids: [],
156
155
  evidence: unknownSemanticEvidence(context.file, operation.location),
157
- }));
156
+ }, context.state.evidenceContexts));
158
157
  };
@@ -45,7 +45,7 @@ export const buildJavaScriptSemanticGraph = ({ rootArtifactSha256, applicationGr
45
45
  if (analyzed.semantic !== null)
46
46
  projection.projectFile(analyzed.file, analyzed.semantic.ir);
47
47
  }
48
- return projection.finish(rootArtifactSha256, applicationGraph, analysis);
48
+ return projection.finish(rootArtifactSha256, applicationGraph);
49
49
  };
50
50
  /** Accumulate semantic nodes while each source IR is still file-local. */
51
51
  export const createJavaScriptSemanticGraphProjection = () => {
@@ -68,7 +68,7 @@ export const createJavaScriptSemanticGraphProjection = () => {
68
68
  truncatedFiles += 1;
69
69
  state.fileNodeBudget = null;
70
70
  };
71
- const finishWith = (factory, rootArtifactSha256, applicationGraph, analysis) => {
71
+ const finishWith = (factory, rootArtifactSha256, applicationGraph) => {
72
72
  bindSemanticGraphApplicationNodes(state, applicationGraph);
73
73
  if (state.roots.size === 0)
74
74
  addFallbackRoot(rootArtifactSha256, state);
@@ -78,6 +78,7 @@ export const createJavaScriptSemanticGraphProjection = () => {
78
78
  root_artifact_sha256: rootArtifactSha256,
79
79
  application_graph_id: applicationGraph.graph_id,
80
80
  root_node_ids: [...state.roots],
81
+ evidence_contexts: state.evidenceContexts.contexts,
81
82
  nodes: [...state.nodes.values()],
82
83
  relations: [...state.relations.values()],
83
84
  fingerprints,
@@ -98,7 +99,7 @@ export const createJavaScriptSemanticGraphProjection = () => {
98
99
  : [],
99
100
  families: JAVASCRIPT_SEMANTIC_RELATION_FAMILIES.map((family) => ({
100
101
  family,
101
- status: semanticFamilyStatus(family, analysis),
102
+ status: semanticFamilyStatus(family),
102
103
  retained_relations: [...state.relations.values()].filter((relation) => JAVASCRIPT_SEMANTIC_RELATION_FAMILY[relation.relation] ===
103
104
  family).length,
104
105
  omitted_relations: truncatedFiles > 0 ? null : 0,
@@ -125,13 +126,14 @@ export const createJavaScriptSemanticGraphProjection = () => {
125
126
  state.relations.clear();
126
127
  state.unknowns.clear();
127
128
  state.roots.clear();
129
+ state.evidenceContexts.clear();
128
130
  fingerprints.length = 0;
129
131
  return graph;
130
132
  };
131
133
  return {
132
134
  projectFile: projectSource,
133
- finish: (rootArtifactSha256, applicationGraph, analysis) => finishWith(createJavaScriptSemanticGraph, rootArtifactSha256, applicationGraph, analysis),
134
- finishImmutableSteps: (rootArtifactSha256, applicationGraph, analysis) => finishWith(createImmutableJavaScriptSemanticGraphSteps, rootArtifactSha256, applicationGraph, analysis),
135
+ finish: (rootArtifactSha256, applicationGraph) => finishWith(createJavaScriptSemanticGraph, rootArtifactSha256, applicationGraph),
136
+ finishImmutableSteps: (rootArtifactSha256, applicationGraph) => finishWith(createImmutableJavaScriptSemanticGraphSteps, rootArtifactSha256, applicationGraph),
135
137
  };
136
138
  };
137
139
  const projectFile = (file, ir, state) => {
@@ -209,7 +211,7 @@ const projectFile = (file, ir, state) => {
209
211
  projectSemanticResources(context);
210
212
  projectSemanticClosureCaptures(context);
211
213
  projectSemanticFrontiers(context);
212
- return projectSemanticFunctionFingerprints(file, ir, callableNodes);
214
+ return projectSemanticFunctionFingerprints(file, ir, callableNodes, state.evidenceContexts);
213
215
  };
214
216
  const createReturnSiteNodes = (file, ir, callables, state) => {
215
217
  const result = new Map();
@@ -1,7 +1,6 @@
1
1
  import { createJavaScriptSemanticGraphUnknown } from "../../domain/javascript/javascriptSemanticGraph.js";
2
2
  import { retainSemanticGraphNode, addSemanticGraphRelation, addSemanticGraphUnknown, } from "./JavaScriptSemanticGraphConstruction.js";
3
3
  import { unknownSemanticEvidence } from "./JavaScriptSemanticGraphEvidence.js";
4
- import { semanticCallSiteAt, } from "./JavaScriptSemanticGraphFlowProjection.js";
5
4
  /** Project child creation, argv/env/stdio, listeners, and signals. */
6
5
  export const projectSemanticChildProcesses = (context) => {
7
6
  const processNodes = new Map(context.ir.childProcessSpawns.flatMap((spawn) => {
@@ -34,7 +33,7 @@ const addChildProcessNode = (context, spawn) => retainSemanticGraphNode(context.
34
33
  },
35
34
  });
36
35
  const projectSpawn = (context, spawn, child) => {
37
- const callSite = semanticCallSiteAt(context, spawn.location);
36
+ const callSite = context.callSiteAt(spawn.location);
38
37
  addSemanticGraphRelation(context.state, {
39
38
  source: callSite,
40
39
  target: child,
@@ -162,5 +161,5 @@ const addChildUnknown = (input) => {
162
161
  detail,
163
162
  candidate_node_ids: candidateNodeIds,
164
163
  evidence: unknownSemanticEvidence(context.file, location),
165
- }));
164
+ }, context.state.evidenceContexts));
166
165
  };
@@ -1,5 +1,5 @@
1
1
  import { javascriptDisplayText } from "../../domain/javascript/javascriptAstValues.js";
2
- import { createJavaScriptSemanticGraphNode, createJavaScriptSemanticGraphRelation, javaScriptSemanticNodeId, } from "../../domain/javascript/javascriptSemanticGraph.js";
2
+ import { createJavaScriptSemanticGraphNode, createJavaScriptSemanticGraphRelation, JavaScriptSemanticEvidenceContextRegistry, javaScriptSemanticNodeId, } from "../../domain/javascript/javascriptSemanticGraph.js";
3
3
  import { inferredSemanticEvidence, observedSemanticEvidence, unavailableSemanticRootEvidence, } from "./JavaScriptSemanticGraphEvidence.js";
4
4
  /** Create empty projection state with structural application-node mappings. */
5
5
  export const createSemanticGraphProjectionState = (applicationGraph) => {
@@ -8,6 +8,7 @@ export const createSemanticGraphProjectionState = (applicationGraph) => {
8
8
  nodes: new Map(),
9
9
  relations: new Map(),
10
10
  unknowns: new Map(),
11
+ evidenceContexts: new JavaScriptSemanticEvidenceContextRegistry(),
11
12
  roots: new Set(),
12
13
  applicationNodeIdsByLocation: index.identifiers,
13
14
  };
@@ -38,7 +39,7 @@ export const constructSemanticGraphNode = (file, input, state) => createJavaScri
38
39
  label: input.label === null ? null : javascriptDisplayText(input.label),
39
40
  properties: input.properties ?? {},
40
41
  evidence: observedSemanticEvidence(file, input.location),
41
- });
42
+ }, state.evidenceContexts);
42
43
  /** Reuse retained identities and reject exhausted budgets before allocation. */
43
44
  export const retainSemanticGraphNode = (state, file, input) => {
44
45
  const identifier = javaScriptSemanticNodeId({
@@ -89,8 +90,9 @@ export const addSemanticGraphRelation = (state, input) => {
89
90
  relation: input.relation,
90
91
  resolution: input.resolution ?? "candidate",
91
92
  properties: input.properties ?? {},
92
- evidence: input.evidence ?? inferredSemanticEvidence(input.source),
93
- });
93
+ evidence: input.evidence ??
94
+ inferredSemanticEvidence(state.evidenceContexts.resolve(input.source.evidence)),
95
+ }, state.evidenceContexts);
94
96
  if (state.relations.has(value.relation_id))
95
97
  return;
96
98
  state.relations.set(value.relation_id, value);
@@ -116,7 +118,7 @@ export const addSemanticFallbackRoot = (rootArtifactSha256, state) => {
116
118
  label: "unavailable semantic root",
117
119
  properties: {},
118
120
  evidence: unavailableSemanticRootEvidence(rootArtifactSha256),
119
- }));
121
+ }, state.evidenceContexts));
120
122
  if (node !== null)
121
123
  state.roots.add(node.node_id);
122
124
  };
@@ -1,7 +1,6 @@
1
1
  import { createJavaScriptSemanticGraphUnknown } from "../../domain/javascript/javascriptSemanticGraph.js";
2
2
  import { retainSemanticGraphNode, addSemanticGraphRelation, addSemanticGraphUnknown, } from "./JavaScriptSemanticGraphConstruction.js";
3
3
  import { unknownSemanticEvidence } from "./JavaScriptSemanticGraphEvidence.js";
4
- import { semanticCallSiteAt, } from "./JavaScriptSemanticGraphFlowProjection.js";
5
4
  /** Project environment, argv, file, default, and precedence candidates. */
6
5
  export const projectSemanticConfiguration = (context) => {
7
6
  const configNodes = new Map(context.ir.configurationOperations.flatMap((operation) => {
@@ -110,7 +109,7 @@ const addRequestNode = (context, operation) => retainSemanticGraphNode(context.s
110
109
  },
111
110
  });
112
111
  const projectRequestConstruction = (context, operation, request) => {
113
- const callSite = semanticCallSiteAt(context, operation.location);
112
+ const callSite = context.callSiteAt(operation.location);
114
113
  addSemanticGraphRelation(context.state, {
115
114
  source: callSite,
116
115
  target: request,
@@ -142,7 +141,7 @@ const projectRequestConstruction = (context, operation, request) => {
142
141
  const projectResponseConsumer = (context, operation, response) => {
143
142
  addSemanticGraphRelation(context.state, {
144
143
  source: response,
145
- target: semanticCallSiteAt(context, operation.location),
144
+ target: context.callSiteAt(operation.location),
146
145
  relation: "consumed-by",
147
146
  resolution: operation.resolution === "complete" ? "resolved" : "candidate",
148
147
  properties: { method: operation.method },
@@ -210,5 +209,5 @@ const addDataUnknown = (input) => {
210
209
  detail,
211
210
  candidate_node_ids: candidateNodeIds,
212
211
  evidence: unknownSemanticEvidence(context.file, location),
213
- }));
212
+ }, context.state.evidenceContexts));
214
213
  };
@@ -32,7 +32,7 @@ export const observedSemanticEvidence = (file, location) => ({
32
32
  });
33
33
  /** Conservative static relationship evidence derived from one syntax node. */
34
34
  export const inferredSemanticEvidence = (source) => ({
35
- ...source.evidence,
35
+ ...source,
36
36
  authority: "static-relationship-inference",
37
37
  state: "inferred",
38
38
  confidence: "high",
@@ -1,7 +1,7 @@
1
1
  import { createJavaScriptSemanticFingerprint, } from "../../domain/javascript/javascriptSemanticGraph.js";
2
2
  import { observedSemanticEvidence } from "./JavaScriptSemanticGraphEvidence.js";
3
3
  /** Bind domain fingerprint components to exact semantic function nodes. */
4
- export const projectSemanticFunctionFingerprints = (file, ir, callableNodes) => ir.functionFingerprints.flatMap((fingerprint) => {
4
+ export const projectSemanticFunctionFingerprints = (file, ir, callableNodes, evidenceContexts) => ir.functionFingerprints.flatMap((fingerprint) => {
5
5
  const callable = callableNodes.get(fingerprint.callableId);
6
6
  if (callable === undefined)
7
7
  return [];
@@ -20,6 +20,6 @@ export const projectSemanticFunctionFingerprints = (file, ir, callableNodes) =>
20
20
  },
21
21
  limitations: fingerprint.limitations,
22
22
  evidence: observedSemanticEvidence(file, callable.identity.source_range),
23
- }),
23
+ }, evidenceContexts),
24
24
  ];
25
25
  });
@@ -2,10 +2,6 @@ import { createJavaScriptSemanticGraphUnknown } from "../../domain/javascript/ja
2
2
  import { sourceRangesEqual } from "../../domain/javascript/javascriptStaticAnalysisHelpers.js";
3
3
  import { retainSemanticGraphNode, addSemanticGraphRelation, addSemanticGraphUnknown, } from "./JavaScriptSemanticGraphConstruction.js";
4
4
  import { inferredSemanticEvidenceAt, unknownSemanticEvidence, } from "./JavaScriptSemanticGraphEvidence.js";
5
- /** Find the retained call-site node at one exact semantic source range. */
6
- export const semanticCallSiteAt = (context, location) => {
7
- return context.callSiteAt(location);
8
- };
9
5
  /** Project explicit static Promise/task ownership without runtime claims. */
10
6
  export const projectSemanticPromises = (context) => {
11
7
  const promiseNodes = new Map(context.ir.promiseOperations.flatMap((operation) => {
@@ -46,7 +42,7 @@ const projectPromiseCreation = (context, operation, promise) => {
46
42
  if (operation.kind === "awaited-expression")
47
43
  return;
48
44
  addSemanticGraphRelation(context.state, {
49
- source: semanticCallSiteAt(context, operation.location),
45
+ source: context.callSiteAt(operation.location),
50
46
  target: promise,
51
47
  relation: "creates-promise",
52
48
  resolution: operation.kind === "chain" || operation.sourceResolution !== "complete"
@@ -123,7 +119,7 @@ const addPromiseUnknown = (context, operation, promise, promiseNodes) => {
123
119
  return candidate === undefined ? [] : [candidate.node_id];
124
120
  }),
125
121
  evidence: unknownSemanticEvidence(context.file, operation.location),
126
- }));
122
+ }, context.state.evidenceContexts));
127
123
  };
128
124
  /** Link direct return expressions to their retained semantic references. */
129
125
  export const projectSemanticReturnValues = (context) => {
@@ -179,7 +175,7 @@ export const projectSemanticFrontiers = (context) => {
179
175
  detail: frontier.reason,
180
176
  candidate_node_ids: [],
181
177
  evidence: unknownSemanticEvidence(context.file, frontier.location),
182
- });
178
+ }, context.state.evidenceContexts);
183
179
  addSemanticGraphUnknown(context.state, unknown);
184
180
  }
185
181
  };
@@ -1,81 +1,110 @@
1
+ import { semanticSlotAtPath, semanticContainer, semanticPropertyPointer, } from "../../domain/javascript/javascriptSemanticSlots.js";
1
2
  import { createJavaScriptSemanticGraphUnknown } from "../../domain/javascript/javascriptSemanticGraph.js";
2
3
  import { retainSemanticGraphNode, addSemanticGraphRelation, addSemanticGraphUnknown, } from "./JavaScriptSemanticGraphConstruction.js";
3
4
  import { unknownSemanticEvidence } from "./JavaScriptSemanticGraphEvidence.js";
4
5
  import { semanticPropertySlot } from "./JavaScriptSemanticGraphValueProjection.js";
5
6
  /** Project static object reads, writes, spreads, and destructuring. */
6
7
  export const projectSemanticObjects = (context) => {
8
+ const values = new Map(context.ir.bindings.map((binding) => [binding.bindingId, binding.value]));
7
9
  for (const operation of context.ir.objectOperations) {
8
10
  const occurrence = addObjectOccurrence(context, operation);
9
- const slot = operation.objectBindingId === null || operation.propertyName === null
10
- ? null
11
- : semanticPropertySlot(context, operation.objectBindingId, operation.propertyName);
12
- if (operation.kind === "read")
13
- addSemanticGraphRelation(context.state, {
14
- source: slot,
15
- target: occurrence,
16
- relation: "reads-property",
17
- resolution: operation.resolution === "complete" ? "resolved" : "candidate",
18
- });
19
- else if (operation.kind === "write")
20
- addSemanticGraphRelation(context.state, {
21
- source: occurrence,
22
- target: slot,
23
- relation: "writes-property",
24
- resolution: operation.resolution === "complete" ? "resolved" : "candidate",
25
- });
26
- else if (operation.kind === "destructure")
27
- addSemanticGraphRelation(context.state, {
28
- source: slot,
11
+ const target = objectTarget(context, values, operation);
12
+ const ends = objectRelationEnds(context, operation, occurrence, target);
13
+ const resolved = operation.resolution === "complete" &&
14
+ (operation.kind === "write"
15
+ ? target.receiverResolved
16
+ : target.presence === "present");
17
+ addSemanticGraphRelation(context.state, {
18
+ ...ends,
19
+ relation: OBJECT_RELATIONS[operation.kind],
20
+ resolution: resolved ? "resolved" : "candidate",
21
+ });
22
+ if (!resolved)
23
+ addObjectUnknown(context, operation, target.slot ?? occurrence, target);
24
+ }
25
+ };
26
+ const OBJECT_RELATIONS = {
27
+ read: "reads-property",
28
+ write: "writes-property",
29
+ destructure: "destructures",
30
+ spread: "spreads",
31
+ };
32
+ const objectTarget = (context, values, operation) => {
33
+ const binding = operation.objectBindingId === null
34
+ ? undefined
35
+ : context.bindingNodes.get(operation.objectBindingId);
36
+ const value = operation.objectBindingId === null
37
+ ? undefined
38
+ : values.get(operation.objectBindingId);
39
+ if (operation.objectBindingId === null ||
40
+ operation.propertyPath === null ||
41
+ value === undefined)
42
+ return {
43
+ objectNode: binding,
44
+ slot: null,
45
+ presence: "unknown-coverage",
46
+ receiverResolved: false,
47
+ };
48
+ const fact = semanticSlotAtPath(value, operation.propertyPath);
49
+ if (operation.propertyPath.length === 0)
50
+ return {
51
+ objectNode: binding,
52
+ slot: null,
53
+ presence: fact.presence,
54
+ receiverResolved: semanticContainer(value) !== null,
55
+ };
56
+ const slot = semanticPropertySlot(context, operation.objectBindingId, operation.propertyPath, fact);
57
+ const receiver = semanticSlotAtPath(value, operation.propertyPath.slice(0, -1));
58
+ return {
59
+ objectNode: slot,
60
+ slot,
61
+ presence: fact.presence,
62
+ receiverResolved: receiver.presence === "present" &&
63
+ semanticContainer(receiver.value) !== null,
64
+ };
65
+ };
66
+ const objectRelationEnds = (context, operation, occurrence, target) => {
67
+ switch (operation.kind) {
68
+ case "read":
69
+ return { source: target.slot, target: occurrence };
70
+ case "write":
71
+ return { source: occurrence, target: target.slot };
72
+ case "destructure":
73
+ return {
74
+ source: target.slot,
29
75
  target: operation.targetBindingId === null
30
76
  ? undefined
31
77
  : context.bindingNodes.get(operation.targetBindingId),
32
- relation: "destructures",
33
- resolution: operation.resolution === "complete" ? "resolved" : "candidate",
34
- });
35
- else
36
- addSemanticGraphRelation(context.state, {
37
- source: operation.objectBindingId === null
38
- ? undefined
39
- : context.bindingNodes.get(operation.objectBindingId),
40
- target: occurrence,
41
- relation: "spreads",
42
- resolution: operation.resolution === "complete" ? "resolved" : "candidate",
43
- });
44
- if (operation.resolution !== "complete")
45
- addObjectUnknown(context, operation, slot ?? occurrence);
78
+ };
79
+ case "spread":
80
+ return { source: target.objectNode, target: occurrence };
46
81
  }
47
82
  };
48
83
  const addObjectOccurrence = (context, operation) => retainSemanticGraphNode(context.state, context.file, {
49
84
  kind: "expression",
50
85
  roleKey: operation.objectOperationId,
51
86
  location: operation.location,
52
- label: operation.propertyName === null
87
+ label: operation.propertyPath === null
53
88
  ? operation.kind
54
- : `${operation.kind}:${operation.propertyName}`,
89
+ : `${operation.kind}:${semanticPropertyPointer(operation.propertyPath)}`,
55
90
  functionNodeId: operation.ownerCallableId === null
56
91
  ? null
57
92
  : (context.callableNodes.get(operation.ownerCallableId)?.node_id ??
58
93
  null),
59
94
  properties: {
60
95
  operation_kind: operation.kind,
61
- property_name: operation.propertyName,
96
+ property_path: operation.propertyPath === null ? null : [...operation.propertyPath],
62
97
  },
63
98
  });
64
- const addObjectUnknown = (context, operation, node) => {
65
- const relation = operation.kind === "read"
66
- ? "reads-property"
67
- : operation.kind === "write"
68
- ? "writes-property"
69
- : operation.kind === "spread"
70
- ? "spreads"
71
- : "destructures";
99
+ const addObjectUnknown = (context, operation, node, target) => {
100
+ const relation = OBJECT_RELATIONS[operation.kind];
72
101
  addSemanticGraphUnknown(context.state, createJavaScriptSemanticGraphUnknown({
73
102
  node_id: node?.node_id ?? null,
74
103
  family: "object-flow",
75
104
  relation_kinds: [relation],
76
105
  reason: "ambiguous-target",
77
- detail: `Static ${operation.kind} object identity is partial.`,
106
+ detail: `Static ${operation.kind} property ${operation.propertyPath === null ? "path is unresolved" : semanticPropertyPointer(operation.propertyPath)} has ${target.presence} presence; its receiver is ${target.receiverResolved ? "a retained container" : "unresolved or not a retained container"}; object identity is ${operation.resolution}.`,
78
107
  candidate_node_ids: [],
79
108
  evidence: unknownSemanticEvidence(context.file, operation.location),
80
- }));
109
+ }, context.state.evidenceContexts));
81
110
  };
@@ -1,4 +1,4 @@
1
- import { compareCodePoints } from "../../domain/canonicalOrdering.js";
1
+ import { compareUnicodeCodePoints } from "../../domain/unicodeCodePointOrder.js";
2
2
  import { JAVASCRIPT_SEMANTIC_RELATION_FAMILIES } from "../../domain/javascript/javascriptSemanticGraphSchemas.js";
3
3
  /** Index one immutable file IR; read retained callable membership at query time. */
4
4
  export const createSemanticCallableOwnerLookup = (ir, nodes) => {
@@ -29,7 +29,7 @@ export const createSemanticCallableOwnerLookup = (ir, nodes) => {
29
29
  const node = nodes.get(candidate.callableId);
30
30
  const rank = best === undefined
31
31
  ? 1
32
- : compareCodePoints(candidate.priority, best.priority) ||
32
+ : compareUnicodeCodePoints(candidate.priority, best.priority) ||
33
33
  best.order - candidate.order;
34
34
  if (node !== undefined && rank > 0) {
35
35
  best = candidate;
@@ -120,7 +120,7 @@ export const createSemanticCallSiteLookup = (ir, nodes) => {
120
120
  };
121
121
  const rangeKey = (range) => `${range.start.line}:${range.start.column}-${range.end.line}:${range.end.column}`;
122
122
  /** Report extractor support without treating missing families as absence. */
123
- export const semanticFamilyStatus = (family, analysis) => {
123
+ export const semanticFamilyStatus = (family) => {
124
124
  if (![
125
125
  "call-flow",
126
126
  "boundary",
@@ -136,7 +136,7 @@ export const semanticFamilyStatus = (family, analysis) => {
136
136
  "timer",
137
137
  ].includes(family))
138
138
  return "unsupported";
139
- return analysis.truncated_scopes === 0 ? "partial" : "unknown";
139
+ return "partial";
140
140
  };
141
141
  const contains = (outer, inner) => pointCompare(outer.start, inner.start) <= 0 &&
142
142
  pointCompare(outer.end, inner.end) >= 0;
@@ -1,7 +1,6 @@
1
1
  import { createJavaScriptSemanticGraphUnknown } from "../../domain/javascript/javascriptSemanticGraph.js";
2
2
  import { retainSemanticGraphNode, addSemanticGraphRelation, addSemanticGraphUnknown, } from "./JavaScriptSemanticGraphConstruction.js";
3
3
  import { unknownSemanticEvidence } from "./JavaScriptSemanticGraphEvidence.js";
4
- import { semanticCallSiteAt, } from "./JavaScriptSemanticGraphFlowProjection.js";
5
4
  /** Project built-in resource acquisition and exact local release handles. */
6
5
  export const projectSemanticResources = (context) => {
7
6
  const resourceNodes = new Map(context.ir.resourceOperations.flatMap((operation) => {
@@ -13,7 +12,7 @@ export const projectSemanticResources = (context) => {
13
12
  for (const operation of context.ir.resourceOperations)
14
13
  if (operation.kind === "acquire")
15
14
  addSemanticGraphRelation(context.state, {
16
- source: semanticCallSiteAt(context, operation.location),
15
+ source: context.callSiteAt(operation.location),
17
16
  target: resourceNodes.get(operation.resourceId),
18
17
  relation: "acquires",
19
18
  resolution: "resolved",
@@ -33,7 +32,7 @@ const addResourceNode = (context, operation) => retainSemanticGraphNode(context.
33
32
  properties: { method: operation.method },
34
33
  });
35
34
  const projectRelease = (context, operation, resourceNodes) => {
36
- const callSite = semanticCallSiteAt(context, operation.location);
35
+ const callSite = context.callSiteAt(operation.location);
37
36
  const resources = operation.linkedResourceIds.flatMap((identifier) => {
38
37
  const resource = resourceNodes.get(identifier);
39
38
  return resource === undefined ? [] : [resource];
@@ -55,5 +54,5 @@ const projectRelease = (context, operation, resourceNodes) => {
55
54
  detail: `Static ${operation.method} resource ownership is ambiguous.`,
56
55
  candidate_node_ids: resources.map(({ node_id: identifier }) => identifier),
57
56
  evidence: unknownSemanticEvidence(context.file, operation.location),
58
- }));
57
+ }, context.state.evidenceContexts));
59
58
  };