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,26 +1,65 @@
1
1
  import { z } from "zod";
2
- import { canonicalDigest, canonicalJson } from "../comparisonSemantics.js";
3
- import { compareCodePoints, uniqueSorted } from "../canonicalOrdering.js";
2
+ import { canonicalJson } from "../comparisonSemantics.js";
3
+ import { digestCanonicalValue } from "../canonicalDigest.js";
4
+ import { uniqueSorted } from "../canonicalOrdering.js";
5
+ import { compareUnicodeCodePoints } from "../unicodeCodePointOrder.js";
6
+ import { canonicalJsonDigestSteps } from "../canonicalJsonDigestSteps.js";
4
7
  import { freezeOwnedJsonSnapshotSteps } from "../immutableJson.js";
8
+ import { applicationGraphEvidenceSchema } from "./javascriptApplicationEvidenceSchemas.js";
5
9
  import { JAVASCRIPT_SEMANTIC_RELATION_FAMILIES, JAVASCRIPT_SEMANTIC_RELATION_FAMILY, javaScriptSemanticFingerprintInputSchema, javaScriptSemanticFingerprintSchema, javaScriptSemanticGraphInputSchema, javaScriptSemanticGraphRecordSchema, javaScriptSemanticNodeInputSchema, javaScriptSemanticNodeSchema, javaScriptSemanticRelationInputSchema, javaScriptSemanticRelationSchema, javaScriptSemanticUnknownInputSchema, javaScriptSemanticUnknownSchema, } from "./javascriptSemanticGraphSchemas.js";
6
10
  const normalizeEvidence = (evidence) => ({
7
11
  ...evidence,
8
12
  coverage: {
9
13
  ...evidence.coverage,
10
- limits: [...evidence.coverage.limits].sort((left, right) => compareCodePoints(canonicalJson(left, "JavaScript semantic graph"), canonicalJson(right, "JavaScript semantic graph"))),
14
+ limits: [...evidence.coverage.limits].sort((left, right) => compareUnicodeCodePoints(canonicalJson(left, "JavaScript semantic graph"), canonicalJson(right, "JavaScript semantic graph"))),
11
15
  },
12
16
  limitations: uniqueSorted(evidence.limitations),
13
17
  evidence_ids: uniqueSorted(evidence.evidence_ids),
14
18
  });
19
+ const evidenceContextId = (context) => `jsrg_evidence_${digestCanonicalValue(context, "JavaScript semantic evidence context")}`;
20
+ /** Graph-scoped owner for canonical provenance shared by semantic facts. */
21
+ export class JavaScriptSemanticEvidenceContextRegistry {
22
+ #contexts = new Map();
23
+ /** Intern normalized non-location provenance at fact construction. */
24
+ intern(evidence) {
25
+ const normalized = normalizeEvidence(evidence);
26
+ const { location, ...context } = normalized;
27
+ const contextId = evidenceContextId(context);
28
+ const row = { ...context, context_id: contextId };
29
+ const existing = this.#contexts.get(contextId);
30
+ if (existing !== undefined &&
31
+ canonicalJson(existing, "JavaScript semantic graph") !==
32
+ canonicalJson(row, "JavaScript semantic graph"))
33
+ throw new TypeError("JavaScript semantic evidence context digest collision");
34
+ this.#contexts.set(contextId, row);
35
+ return { context_id: contextId, location };
36
+ }
37
+ /** Resolve one already interned fact reference for derived evidence. */
38
+ resolve(reference) {
39
+ const context = this.#contexts.get(reference.context_id);
40
+ if (context === undefined)
41
+ throw new TypeError("Semantic evidence reference names an absent context");
42
+ const { context_id: _contextId, ...evidenceContext } = context;
43
+ return { ...evidenceContext, location: reference.location };
44
+ }
45
+ /** Return the deterministic context table owned by this graph projection. */
46
+ get contexts() {
47
+ return [...this.#contexts.values()].sort((left, right) => compareUnicodeCodePoints(left.context_id, right.context_id));
48
+ }
49
+ /** Release interned contexts after the owning graph is finalized. */
50
+ clear() {
51
+ this.#contexts.clear();
52
+ }
53
+ }
15
54
  /** Derive a semantic node ID from its kind and exact artifact identity. */
16
- export const javaScriptSemanticNodeId = (node) => `jsrg_node_${canonicalDigest({ kind: node.kind, identity: node.identity }, "JavaScript semantic graph")}`;
55
+ export const javaScriptSemanticNodeId = (node) => `jsrg_node_${digestCanonicalValue({ kind: node.kind, identity: node.identity }, "JavaScript semantic graph")}`;
17
56
  /** Normalize one semantic entity and derive its artifact-version identifier. */
18
- export const createJavaScriptSemanticGraphNode = (input) => {
57
+ export const createJavaScriptSemanticGraphNode = (input, evidenceContexts) => {
19
58
  const parsed = javaScriptSemanticNodeInputSchema.parse(input);
20
59
  const semantic = {
21
60
  ...parsed,
22
61
  application_node_ids: uniqueSorted(parsed.application_node_ids),
23
- evidence: normalizeEvidence(parsed.evidence),
62
+ evidence: evidenceContexts.intern(parsed.evidence),
24
63
  identifier_strategy: {
25
64
  strategy: "semantic-content-sha256",
26
65
  stability: "artifact-version",
@@ -32,11 +71,11 @@ export const createJavaScriptSemanticGraphNode = (input) => {
32
71
  });
33
72
  };
34
73
  /** Normalize one semantic relationship and derive its exact identifier. */
35
- export const createJavaScriptSemanticGraphRelation = (input) => {
74
+ export const createJavaScriptSemanticGraphRelation = (input, evidenceContexts) => {
36
75
  const parsed = javaScriptSemanticRelationInputSchema.parse(input);
37
76
  const semantic = {
38
77
  ...parsed,
39
- evidence: normalizeEvidence(parsed.evidence),
78
+ evidence: evidenceContexts.intern(parsed.evidence),
40
79
  identifier_strategy: {
41
80
  strategy: "semantic-content-sha256",
42
81
  stability: "relationship-exact",
@@ -44,25 +83,25 @@ export const createJavaScriptSemanticGraphRelation = (input) => {
44
83
  };
45
84
  return javaScriptSemanticRelationSchema.parse({
46
85
  ...semantic,
47
- relation_id: `jsrg_relation_${canonicalDigest(semantic, "JavaScript semantic graph")}`,
86
+ relation_id: `jsrg_relation_${digestCanonicalValue(semantic, "JavaScript semantic graph")}`,
48
87
  });
49
88
  };
50
89
  /** Normalize one unresolved semantic frontier and derive its identifier. */
51
- export const createJavaScriptSemanticGraphUnknown = (input) => {
90
+ export const createJavaScriptSemanticGraphUnknown = (input, evidenceContexts) => {
52
91
  const parsed = javaScriptSemanticUnknownInputSchema.parse(input);
53
92
  const semantic = {
54
93
  ...parsed,
55
94
  relation_kinds: uniqueSorted(parsed.relation_kinds),
56
95
  candidate_node_ids: uniqueSorted(parsed.candidate_node_ids),
57
- evidence: normalizeEvidence(parsed.evidence),
96
+ evidence: evidenceContexts.intern(parsed.evidence),
58
97
  };
59
98
  return javaScriptSemanticUnknownSchema.parse({
60
99
  ...semantic,
61
- unknown_id: `jsrg_unknown_${canonicalDigest(semantic, "JavaScript semantic graph")}`,
100
+ unknown_id: `jsrg_unknown_${digestCanonicalValue(semantic, "JavaScript semantic graph")}`,
62
101
  });
63
102
  };
64
103
  /** Normalize one function fingerprint and derive its component commitment. */
65
- export const createJavaScriptSemanticFingerprint = (input) => {
104
+ export const createJavaScriptSemanticFingerprint = (input, evidenceContexts) => {
66
105
  const parsed = javaScriptSemanticFingerprintInputSchema.parse(input);
67
106
  const semantic = {
68
107
  ...parsed,
@@ -71,13 +110,13 @@ export const createJavaScriptSemanticFingerprint = (input) => {
71
110
  effects: uniqueSorted(parsed.components.effects),
72
111
  },
73
112
  limitations: uniqueSorted(parsed.limitations),
74
- evidence: normalizeEvidence(parsed.evidence),
113
+ evidence: evidenceContexts.intern(parsed.evidence),
75
114
  };
76
- const fingerprintSha256 = canonicalDigest(semantic.components, "JavaScript semantic graph");
115
+ const fingerprintSha256 = digestCanonicalValue(semantic.components, "JavaScript semantic graph");
77
116
  return javaScriptSemanticFingerprintSchema.parse({
78
117
  ...semantic,
79
118
  fingerprint_sha256: fingerprintSha256,
80
- fingerprint_id: `jsrg_fingerprint_${canonicalDigest({
119
+ fingerprint_id: `jsrg_fingerprint_${digestCanonicalValue({
81
120
  function_node_id: semantic.function_node_id,
82
121
  algorithm: semantic.algorithm,
83
122
  fingerprint_sha256: fingerprintSha256,
@@ -86,7 +125,7 @@ export const createJavaScriptSemanticFingerprint = (input) => {
86
125
  };
87
126
  const sortedUniqueIssue = (values, path, label, context) => {
88
127
  for (let index = 1; index < values.length; index += 1) {
89
- if (compareCodePoints(values[index - 1] ?? "", values[index] ?? "") < 0)
128
+ if (compareUnicodeCodePoints(values[index - 1] ?? "", values[index] ?? "") < 0)
90
129
  continue;
91
130
  context.addIssue({
92
131
  code: "custom",
@@ -96,7 +135,7 @@ const sortedUniqueIssue = (values, path, label, context) => {
96
135
  return;
97
136
  }
98
137
  };
99
- const checkCoverage = (graph, context) => {
138
+ function* checkCoverageSteps(graph, context) {
100
139
  const families = graph.coverage.families.map(({ family }) => family);
101
140
  if (canonicalJson(families, "JavaScript semantic graph") !==
102
141
  canonicalJson(JAVASCRIPT_SEMANTIC_RELATION_FAMILIES, "JavaScript semantic graph"))
@@ -122,11 +161,18 @@ const checkCoverage = (graph, context) => {
122
161
  message: "Truncated graph coverage must identify an effective limit",
123
162
  });
124
163
  const relationsByFamily = new Map(JAVASCRIPT_SEMANTIC_RELATION_FAMILIES.map((family) => [family, 0]));
125
- for (const relation of graph.relations) {
164
+ for (const [index, relation] of graph.relations.entries()) {
165
+ if (index % 256 === 0)
166
+ yield;
126
167
  const family = JAVASCRIPT_SEMANTIC_RELATION_FAMILY[relation.relation];
127
168
  relationsByFamily.set(family, (relationsByFamily.get(family) ?? 0) + 1);
128
169
  }
129
- const unknownsById = new Map(graph.unknowns.map((unknown) => [unknown.unknown_id, unknown]));
170
+ const unknownsById = new Map();
171
+ for (const [index, unknown] of graph.unknowns.entries()) {
172
+ if (index % 256 === 0)
173
+ yield;
174
+ unknownsById.set(unknown.unknown_id, unknown);
175
+ }
130
176
  for (const [index, family] of graph.coverage.families.entries()) {
131
177
  if (family.retained_relations !== relationsByFamily.get(family.family))
132
178
  context.addIssue({
@@ -148,17 +194,71 @@ const checkCoverage = (graph, context) => {
148
194
  message: "Complete family coverage cannot omit or retain unknown facts",
149
195
  });
150
196
  }
151
- };
197
+ }
152
198
  const checkCanonicalOrder = (graph, context) => {
153
199
  sortedUniqueIssue(graph.root_node_ids, ["root_node_ids"], "Root nodes", context);
200
+ sortedUniqueIssue(graph.evidence_contexts.map(({ context_id }) => context_id), ["evidence_contexts"], "Evidence contexts", context);
154
201
  sortedUniqueIssue(graph.nodes.map(({ node_id }) => node_id), ["nodes"], "Nodes", context);
155
202
  sortedUniqueIssue(graph.relations.map(({ relation_id }) => relation_id), ["relations"], "Relations", context);
156
203
  sortedUniqueIssue(graph.fingerprints.map(({ fingerprint_id }) => fingerprint_id), ["fingerprints"], "Fingerprints", context);
157
204
  sortedUniqueIssue(graph.unknowns.map(({ unknown_id }) => unknown_id), ["unknowns"], "Unknown frontiers", context);
158
205
  sortedUniqueIssue(graph.limitations, ["limitations"], "Limitations", context);
159
206
  };
160
- const checkNodes = (graph, nodes, context) => {
207
+ function* checkEvidenceContextReferencesSteps(graph, context) {
208
+ const contexts = new Map(graph.evidence_contexts.map((value) => [value.context_id, value]));
209
+ const referenced = new Set();
210
+ const validateReferences = function* (entities, entityKind) {
211
+ for (const [index, { evidence }] of entities.entries()) {
212
+ if (index % 256 === 0)
213
+ yield;
214
+ referenced.add(evidence.context_id);
215
+ const evidenceContext = contexts.get(evidence.context_id);
216
+ if (evidenceContext === undefined) {
217
+ context.addIssue({
218
+ code: "custom",
219
+ path: [entityKind, index, "evidence", "context_id"],
220
+ message: "Evidence reference names an absent context",
221
+ });
222
+ continue;
223
+ }
224
+ const { context_id: _contextId, ...evidenceValue } = evidenceContext;
225
+ if (!applicationGraphEvidenceSchema.safeParse({
226
+ ...evidenceValue,
227
+ location: evidence.location,
228
+ }).success)
229
+ context.addIssue({
230
+ code: "custom",
231
+ path: [entityKind, index, "evidence"],
232
+ message: "Evidence context is incompatible with its fact location",
233
+ });
234
+ }
235
+ };
236
+ yield* validateReferences(graph.nodes, "nodes");
237
+ yield* validateReferences(graph.relations, "relations");
238
+ yield* validateReferences(graph.unknowns, "unknowns");
239
+ yield* validateReferences(graph.fingerprints, "fingerprints");
240
+ for (const [index, evidenceContext] of graph.evidence_contexts.entries()) {
241
+ if (index % 256 === 0)
242
+ yield;
243
+ const { context_id: identifier, ...value } = evidenceContext;
244
+ if (identifier !== evidenceContextId(value))
245
+ context.addIssue({
246
+ code: "custom",
247
+ path: ["evidence_contexts", index, "context_id"],
248
+ message: "Evidence context identifier is stale",
249
+ });
250
+ if (!referenced.has(identifier))
251
+ context.addIssue({
252
+ code: "custom",
253
+ path: ["evidence_contexts", index],
254
+ message: "Evidence context is not referenced by a graph fact",
255
+ });
256
+ }
257
+ }
258
+ function* checkNodesSteps(graph, nodes, context) {
161
259
  for (const [index, node] of graph.nodes.entries()) {
260
+ if (index % 256 === 0)
261
+ yield;
162
262
  if (node.node_id !== javaScriptSemanticNodeId(node))
163
263
  context.addIssue({
164
264
  code: "custom",
@@ -173,21 +273,27 @@ const checkNodes = (graph, nodes, context) => {
173
273
  message: "Function owner must name a function node",
174
274
  });
175
275
  }
176
- };
177
- const checkRoots = (graph, nodes, context) => {
178
- for (const root of graph.root_node_ids)
276
+ }
277
+ function* checkRootsSteps(graph, nodes, context) {
278
+ for (const [index, root] of graph.root_node_ids.entries()) {
279
+ if (index % 256 === 0)
280
+ yield;
179
281
  if (!nodes.has(root))
180
282
  context.addIssue({
181
283
  code: "custom",
182
284
  path: ["root_node_ids"],
183
285
  message: "Root identifier must name a semantic node",
184
286
  });
185
- };
186
- const checkRelations = (graph, nodes, context) => {
287
+ }
288
+ }
289
+ function* checkRelationsSteps(graph, nodes, evidenceContexts, context) {
187
290
  for (const [index, relation] of graph.relations.entries()) {
291
+ if (index % 256 === 0)
292
+ yield;
188
293
  const { relation_id: identifier, ...semantic } = relation;
189
294
  if (identifier !==
190
- "jsrg_relation_" + canonicalDigest(semantic, "JavaScript semantic graph"))
295
+ "jsrg_relation_" +
296
+ digestCanonicalValue(semantic, "JavaScript semantic graph"))
191
297
  context.addIssue({
192
298
  code: "custom",
193
299
  path: ["relations", index, "relation_id"],
@@ -207,19 +313,22 @@ const checkRelations = (graph, nodes, context) => {
207
313
  message: "Semantic relations cannot be self-referential",
208
314
  });
209
315
  if (relation.resolution === "candidate" &&
210
- relation.evidence.state === "observed")
316
+ evidenceContexts.get(relation.evidence.context_id)?.state === "observed")
211
317
  context.addIssue({
212
318
  code: "custom",
213
319
  path: ["relations", index, "evidence", "state"],
214
320
  message: "Candidate relations cannot claim observed resolution",
215
321
  });
216
322
  }
217
- };
218
- const checkUnknowns = (graph, nodes, context) => {
323
+ }
324
+ function* checkUnknownsSteps(graph, nodes, evidenceContexts, context) {
219
325
  for (const [index, unknown] of graph.unknowns.entries()) {
326
+ if (index % 256 === 0)
327
+ yield;
220
328
  const { unknown_id: identifier, ...semantic } = unknown;
221
329
  if (identifier !==
222
- "jsrg_unknown_" + canonicalDigest(semantic, "JavaScript semantic graph"))
330
+ "jsrg_unknown_" +
331
+ digestCanonicalValue(semantic, "JavaScript semantic graph"))
223
332
  context.addIssue({
224
333
  code: "custom",
225
334
  path: ["unknowns", index, "unknown_id"],
@@ -243,14 +352,15 @@ const checkUnknowns = (graph, nodes, context) => {
243
352
  path: ["unknowns", index, "relation_kinds"],
244
353
  message: "Unknown relation kinds must belong to their declared family",
245
354
  });
246
- if (!["unknown", "unavailable"].includes(unknown.evidence.state))
355
+ const evidenceState = evidenceContexts.get(unknown.evidence.context_id)?.state;
356
+ if (evidenceState !== "unknown" && evidenceState !== "unavailable")
247
357
  context.addIssue({
248
358
  code: "custom",
249
359
  path: ["unknowns", index, "evidence", "state"],
250
360
  message: "Unknown frontiers require unknown or unavailable evidence",
251
361
  });
252
362
  }
253
- };
363
+ }
254
364
  const checkUnknownReferences = (graph, context) => {
255
365
  const unknownIds = new Set(graph.unknowns.map(({ unknown_id }) => unknown_id));
256
366
  for (const [index, family] of graph.coverage.families.entries())
@@ -261,8 +371,10 @@ const checkUnknownReferences = (graph, context) => {
261
371
  message: "Family coverage references an absent unknown frontier",
262
372
  });
263
373
  };
264
- const checkFingerprints = (graph, nodes, context) => {
374
+ function* checkFingerprintsSteps(graph, nodes, context) {
265
375
  for (const [index, fingerprint] of graph.fingerprints.entries()) {
376
+ if (index % 256 === 0)
377
+ yield;
266
378
  if (nodes.get(fingerprint.function_node_id)?.kind !== "function")
267
379
  context.addIssue({
268
380
  code: "custom",
@@ -270,14 +382,14 @@ const checkFingerprints = (graph, nodes, context) => {
270
382
  message: "Fingerprint must name a function node",
271
383
  });
272
384
  if (fingerprint.fingerprint_sha256 !==
273
- canonicalDigest(fingerprint.components, "JavaScript semantic graph"))
385
+ digestCanonicalValue(fingerprint.components, "JavaScript semantic graph"))
274
386
  context.addIssue({
275
387
  code: "custom",
276
388
  path: ["fingerprints", index, "fingerprint_sha256"],
277
389
  message: "Fingerprint component commitment is stale",
278
390
  });
279
391
  const expectedIdentifier = "jsrg_fingerprint_" +
280
- canonicalDigest({
392
+ digestCanonicalValue({
281
393
  function_node_id: fingerprint.function_node_id,
282
394
  algorithm: fingerprint.algorithm,
283
395
  fingerprint_sha256: fingerprint.fingerprint_sha256,
@@ -296,29 +408,45 @@ const checkFingerprints = (graph, nodes, context) => {
296
408
  message: "Incomplete fingerprints require a limitation",
297
409
  });
298
410
  }
299
- };
300
- const checkGraphContent = (graph, context) => {
411
+ }
412
+ function* checkGraphContentSteps(graph, context) {
301
413
  checkCanonicalOrder(graph, context);
302
- const nodes = new Map(graph.nodes.map((node) => [node.node_id, node]));
303
- checkNodes(graph, nodes, context);
304
- checkRoots(graph, nodes, context);
305
- checkRelations(graph, nodes, context);
306
- checkUnknowns(graph, nodes, context);
414
+ yield* checkEvidenceContextReferencesSteps(graph, context);
415
+ const evidenceContexts = new Map(graph.evidence_contexts.map((evidenceContext) => [
416
+ evidenceContext.context_id,
417
+ evidenceContext,
418
+ ]));
419
+ const nodes = new Map();
420
+ for (const [index, node] of graph.nodes.entries()) {
421
+ if (index % 256 === 0)
422
+ yield;
423
+ nodes.set(node.node_id, node);
424
+ }
425
+ yield* checkNodesSteps(graph, nodes, context);
426
+ yield* checkRootsSteps(graph, nodes, context);
427
+ yield* checkRelationsSteps(graph, nodes, evidenceContexts, context);
428
+ yield* checkUnknownsSteps(graph, nodes, evidenceContexts, context);
307
429
  checkUnknownReferences(graph, context);
308
- checkFingerprints(graph, nodes, context);
309
- checkCoverage(graph, context);
430
+ yield* checkFingerprintsSteps(graph, nodes, context);
431
+ yield* checkCoverageSteps(graph, context);
310
432
  if (graph.coverage.status !== "complete" && graph.limitations.length === 0)
311
433
  context.addIssue({
312
434
  code: "custom",
313
435
  path: ["limitations"],
314
436
  message: "Non-complete graph coverage requires a limitation",
315
437
  });
438
+ }
439
+ const checkGraphContent = (graph, context) => {
440
+ const steps = checkGraphContentSteps(graph, context);
441
+ while (!steps.next().done) {
442
+ // Synchronous callers apply the same integrity checks without scheduling.
443
+ }
316
444
  };
317
445
  const checkGraph = (graph, context) => {
318
446
  checkGraphContent(graph, context);
319
447
  const { graph_id: identifier, ...semantic } = graph;
320
448
  if (identifier !==
321
- "jsrg_" + canonicalDigest(semantic, "JavaScript semantic graph"))
449
+ "jsrg_" + digestCanonicalValue(semantic, "JavaScript semantic graph"))
322
450
  context.addIssue({
323
451
  code: "custom",
324
452
  path: ["graph_id"],
@@ -327,34 +455,43 @@ const checkGraph = (graph, context) => {
327
455
  };
328
456
  /** Strict semantic graph schema with verified canonical commitments. */
329
457
  export const javaScriptSemanticGraphSchema = javaScriptSemanticGraphRecordSchema.superRefine(checkGraph);
458
+ /** Resolve one fact's compact provenance without changing its stored shape. */
459
+ export const resolveJavaScriptSemanticEvidence = (graph, reference) => {
460
+ const context = graph.evidence_contexts.find(({ context_id }) => context_id === reference.context_id);
461
+ if (context === undefined)
462
+ throw new TypeError("Semantic evidence reference names an absent context");
463
+ const { context_id: _contextId, ...evidenceContext } = context;
464
+ return { ...evidenceContext, location: reference.location };
465
+ };
466
+ const normalizeGraphInput = (parsed) => ({
467
+ ...parsed,
468
+ root_node_ids: uniqueSorted(parsed.root_node_ids),
469
+ evidence_contexts: [...parsed.evidence_contexts].sort((left, right) => compareUnicodeCodePoints(left.context_id, right.context_id)),
470
+ nodes: [...parsed.nodes].sort((left, right) => compareUnicodeCodePoints(left.node_id, right.node_id)),
471
+ relations: [...parsed.relations].sort((left, right) => compareUnicodeCodePoints(left.relation_id, right.relation_id)),
472
+ fingerprints: [...parsed.fingerprints].sort((left, right) => compareUnicodeCodePoints(left.fingerprint_id, right.fingerprint_id)),
473
+ unknowns: [...parsed.unknowns].sort((left, right) => compareUnicodeCodePoints(left.unknown_id, right.unknown_id)),
474
+ coverage: {
475
+ ...parsed.coverage,
476
+ limits: [...parsed.coverage.limits].sort((left, right) => compareUnicodeCodePoints(canonicalJson(left, "JavaScript semantic graph"), canonicalJson(right, "JavaScript semantic graph"))),
477
+ families: [...parsed.coverage.families]
478
+ .map((family) => ({
479
+ ...family,
480
+ unknown_ids: uniqueSorted(family.unknown_ids),
481
+ }))
482
+ .sort((left, right) => compareUnicodeCodePoints(left.family, right.family)),
483
+ },
484
+ limitations: uniqueSorted(parsed.limitations),
485
+ });
330
486
  /** Normalize a complete companion graph and derive its graph ID. */
331
487
  export const createJavaScriptSemanticGraph = (input) => {
332
- const parsed = javaScriptSemanticGraphInputSchema.parse(input);
333
- const semantic = {
334
- ...parsed,
335
- root_node_ids: uniqueSorted(parsed.root_node_ids),
336
- nodes: [...parsed.nodes].sort((left, right) => compareCodePoints(left.node_id, right.node_id)),
337
- relations: [...parsed.relations].sort((left, right) => compareCodePoints(left.relation_id, right.relation_id)),
338
- fingerprints: [...parsed.fingerprints].sort((left, right) => compareCodePoints(left.fingerprint_id, right.fingerprint_id)),
339
- unknowns: [...parsed.unknowns].sort((left, right) => compareCodePoints(left.unknown_id, right.unknown_id)),
340
- coverage: {
341
- ...parsed.coverage,
342
- limits: [...parsed.coverage.limits].sort((left, right) => compareCodePoints(canonicalJson(left, "JavaScript semantic graph"), canonicalJson(right, "JavaScript semantic graph"))),
343
- families: [...parsed.coverage.families]
344
- .map((family) => ({
345
- ...family,
346
- unknown_ids: uniqueSorted(family.unknown_ids),
347
- }))
348
- .sort((left, right) => compareCodePoints(left.family, right.family)),
349
- },
350
- limitations: uniqueSorted(parsed.limitations),
351
- };
488
+ const semantic = normalizeGraphInput(javaScriptSemanticGraphInputSchema.parse(input));
352
489
  // The input schema already cloned and validated every field. Validate the
353
490
  // normalized relationships in place, then derive the only added field. The
354
491
  // public schema still verifies arbitrary records and their commitments.
355
492
  const record = {
356
493
  ...semantic,
357
- graph_id: `jsrg_${canonicalDigest(semantic, "JavaScript semantic graph")}`,
494
+ graph_id: `jsrg_${digestCanonicalValue(semantic, "JavaScript semantic graph")}`,
358
495
  };
359
496
  const issues = [];
360
497
  checkGraphContent(record, {
@@ -367,9 +504,21 @@ export const createJavaScriptSemanticGraph = (input) => {
367
504
  return record;
368
505
  };
369
506
  const validatedImmutableSemanticGraphs = new WeakSet();
370
- /** Clone and validate synchronously, then return steps to seal the owned graph. */
371
- export const createImmutableJavaScriptSemanticGraphSteps = (input) => sealValidatedSemanticGraphSteps(createJavaScriptSemanticGraph(input));
372
- function* sealValidatedSemanticGraphSteps(graph) {
507
+ /** Clone input synchronously; commit, check and seal the owned graph in steps. */
508
+ export const createImmutableJavaScriptSemanticGraphSteps = (input) => validateAndSealSemanticGraphSteps(normalizeGraphInput(javaScriptSemanticGraphInputSchema.parse(input)));
509
+ function* validateAndSealSemanticGraphSteps(semantic) {
510
+ const graph = {
511
+ ...semantic,
512
+ graph_id: `jsrg_${yield* canonicalJsonDigestSteps(semantic)}`,
513
+ };
514
+ const issues = [];
515
+ yield* checkGraphContentSteps(graph, {
516
+ addIssue: (issue) => {
517
+ issues.push(issue);
518
+ },
519
+ });
520
+ if (issues.length > 0)
521
+ throw new z.ZodError(issues);
373
522
  yield* freezeOwnedJsonSnapshotSteps(graph);
374
523
  validatedImmutableSemanticGraphs.add(graph);
375
524
  return graph;
@@ -1,5 +1,5 @@
1
1
  import { z } from "zod";
2
- import { applicationGraphEvidenceSchema } from "./javascriptApplicationEvidenceSchemas.js";
2
+ import { applicationGraphEvidenceContextSchema, applicationGraphEvidenceLocationSchema, applicationGraphEvidenceSchema, } from "./javascriptApplicationEvidenceSchemas.js";
3
3
  import { jsonValueSchema } from "../jsonValue.js";
4
4
  import { digestSchema } from "../digests.js";
5
5
  import { prefixedDigestSchema } from "../digests.js";
@@ -11,6 +11,18 @@ const semanticRelationIdSchema = z
11
11
  const semanticUnknownIdSchema = z
12
12
  .string()
13
13
  .regex(/^jsrg_unknown_[a-f0-9]{64}$/u);
14
+ const semanticEvidenceContextIdSchema = z
15
+ .string()
16
+ .regex(/^jsrg_evidence_[a-f0-9]{64}$/u);
17
+ /** One canonical owner for provenance shared by semantic graph facts. */
18
+ export const javaScriptSemanticEvidenceContextSchema = applicationGraphEvidenceContextSchema.extend({
19
+ context_id: semanticEvidenceContextIdSchema,
20
+ });
21
+ /** Location-specific reference to one exact graph-level evidence context. */
22
+ export const javaScriptSemanticEvidenceReferenceSchema = z.strictObject({
23
+ context_id: semanticEvidenceContextIdSchema,
24
+ location: applicationGraphEvidenceLocationSchema,
25
+ });
14
26
  /** Semantic entity kinds admitted by JavaScript Semantic Relation Graph. */
15
27
  export const JAVASCRIPT_SEMANTIC_NODE_KINDS = [
16
28
  "module",
@@ -188,6 +200,7 @@ export const javaScriptSemanticNodeInputSchema = z.strictObject({
188
200
  });
189
201
  /** One exact, artifact-version semantic entity. */
190
202
  export const javaScriptSemanticNodeSchema = javaScriptSemanticNodeInputSchema.extend({
203
+ evidence: javaScriptSemanticEvidenceReferenceSchema,
191
204
  node_id: semanticNodeIdSchema,
192
205
  identifier_strategy: z.strictObject({
193
206
  strategy: z.literal("semantic-content-sha256"),
@@ -205,6 +218,7 @@ export const javaScriptSemanticRelationInputSchema = z.strictObject({
205
218
  });
206
219
  /** One canonical directed semantic relationship. */
207
220
  export const javaScriptSemanticRelationSchema = javaScriptSemanticRelationInputSchema.extend({
221
+ evidence: javaScriptSemanticEvidenceReferenceSchema,
208
222
  relation_id: semanticRelationIdSchema,
209
223
  identifier_strategy: z.strictObject({
210
224
  strategy: z.literal("semantic-content-sha256"),
@@ -222,6 +236,7 @@ export const JAVASCRIPT_SEMANTIC_UNKNOWN_REASONS = [
222
236
  "incomplete-module",
223
237
  "missing-source",
224
238
  "resource-limit",
239
+ "unknown-value",
225
240
  "unsupported-syntax",
226
241
  ];
227
242
  /** One unresolved semantic frontier before its ID is derived. */
@@ -236,6 +251,7 @@ export const javaScriptSemanticUnknownInputSchema = z.strictObject({
236
251
  });
237
252
  /** One canonical unresolved semantic frontier. */
238
253
  export const javaScriptSemanticUnknownSchema = javaScriptSemanticUnknownInputSchema.extend({
254
+ evidence: javaScriptSemanticEvidenceReferenceSchema,
239
255
  unknown_id: semanticUnknownIdSchema,
240
256
  });
241
257
  const fingerprintComponentsSchema = z.strictObject({
@@ -265,6 +281,7 @@ export const javaScriptSemanticFingerprintInputSchema = z.strictObject({
265
281
  });
266
282
  /** One canonical function fingerprint record. */
267
283
  export const javaScriptSemanticFingerprintSchema = javaScriptSemanticFingerprintInputSchema.extend({
284
+ evidence: javaScriptSemanticEvidenceReferenceSchema,
268
285
  fingerprint_id: prefixedDigestSchema("jsrg_fingerprint"),
269
286
  fingerprint_sha256: digestSchema,
270
287
  });
@@ -293,6 +310,7 @@ export const javaScriptSemanticGraphInputSchema = z.strictObject({
293
310
  root_artifact_sha256: digestSchema,
294
311
  application_graph_id: prefixedDigestSchema("jag"),
295
312
  root_node_ids: z.array(semanticNodeIdSchema).min(1),
313
+ evidence_contexts: z.array(javaScriptSemanticEvidenceContextSchema),
296
314
  nodes: z.array(javaScriptSemanticNodeSchema).min(1),
297
315
  relations: z.array(javaScriptSemanticRelationSchema),
298
316
  fingerprints: z.array(javaScriptSemanticFingerprintSchema),
@@ -1,7 +1,3 @@
1
- /** Find the innermost resolved reference at one source coordinate. */
2
- export const semanticReferenceAt = (ir, line, column) => ir.references.find(({ location }) => location.start.line === line && location.start.column === column);
3
- /** Read one binding by its deterministic semantic identifier. */
4
- export const semanticBinding = (ir, bindingId) => ir.bindings.find(({ bindingId: candidate }) => candidate === bindingId);
5
1
  /** Fail-closed result when Babel cannot produce an inert syntax tree. */
6
2
  export const failedJavaScriptSemanticIr = () => ({
7
3
  schema: "JavaScriptSemanticIR",