rea-agents 3.0.0 → 3.2.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 (628) hide show
  1. package/README.md +83 -108
  2. package/bridge/ghidra/ReaGhidraBridge.java +609 -841
  3. package/bridge/hopper_bridge.py +99 -344
  4. package/dist/application/AbortablePromise.js +6 -3
  5. package/dist/application/AnalysisContextQueries.js +21 -9
  6. package/dist/application/AnalysisSnapshotCache.js +0 -1
  7. package/dist/application/AnalysisSnapshotFiles.js +7 -7
  8. package/dist/application/AndroidApplicationService.js +1 -1
  9. package/dist/application/AppleApplicationService.js +1 -1
  10. package/dist/application/ArtifactExtraction.js +35 -54
  11. package/dist/application/ArtifactExtractionDestination.js +17 -0
  12. package/dist/application/ArtifactGraphConstruction.js +2 -17
  13. package/dist/application/ArtifactInventory/classify.js +2 -6
  14. package/dist/application/ArtifactInventory/hash.js +2 -20
  15. package/dist/application/ArtifactInventory/policy.js +17 -0
  16. package/dist/application/ArtifactInventory/reader.js +1 -4
  17. package/dist/application/ArtifactInventory/scanCanonical.js +8 -15
  18. package/dist/application/ArtifactInventory/scanReader.js +76 -58
  19. package/dist/application/ArtifactInventory/types.js +1 -5
  20. package/dist/application/ArtifactInventory.js +6 -14
  21. package/dist/application/AuthorizedArtifactInventory.js +3 -13
  22. package/dist/application/BinarySession.js +54 -28
  23. package/dist/application/BinarySessionComposition.js +0 -11
  24. package/dist/application/BinarySessionOpen.js +2 -1
  25. package/dist/application/BinarySessionRecords.js +24 -86
  26. package/dist/application/BinarySessionStatus.js +16 -21
  27. package/dist/application/BinaryTargetResolver.js +216 -0
  28. package/dist/application/BrowserEvidence.js +39 -57
  29. package/dist/application/BrowserObservationService.js +3 -6
  30. package/dist/application/BrowserScenarioCaptureService.js +3 -6
  31. package/dist/application/BrowserScenarioEvidence.js +3 -3
  32. package/dist/application/CallPathTracing.js +2 -36
  33. package/dist/application/CapabilityClientRequirements.js +26 -0
  34. package/dist/application/CapabilityInventory.js +143 -77
  35. package/dist/application/ClientConfigurationDocument.js +27 -0
  36. package/dist/application/ClientRegistrationStatus.js +16 -13
  37. package/dist/application/CommandShimReplay.js +14 -1
  38. package/dist/application/DirectAnalysis.js +22 -46
  39. package/dist/application/DirectAnalysisStatus.js +5 -61
  40. package/dist/application/Doctor.js +11 -32
  41. package/dist/application/DoctorDiagnostics.js +1 -2
  42. package/dist/application/DoctorScope.js +1 -1
  43. package/dist/application/ElectronActiveEvidence.js +50 -0
  44. package/dist/application/ElectronActiveObservationPort.js +1 -0
  45. package/dist/application/ElectronActiveObservationService.js +78 -0
  46. package/dist/application/ElectronBoundaryAnalysis.js +7 -8
  47. package/dist/application/ElectronBoundaryGraphContext.js +1 -1
  48. package/dist/application/ElectronBoundaryGraphIpc.js +3 -3
  49. package/dist/application/ElectronBoundaryGraphNative.js +1 -2
  50. package/dist/application/ElectronBoundaryGraphWindows.js +6 -8
  51. package/dist/application/ElectronEvidence.js +4 -7
  52. package/dist/application/ElectronObservationService.js +5 -9
  53. package/dist/application/EnhancedLiteralTracing.js +42 -65
  54. package/dist/application/EnhancedTools.js +98 -64
  55. package/dist/application/EvidenceBundleCommands.js +16 -12
  56. package/dist/application/EvidenceBundleFiles.js +9 -15
  57. package/dist/application/EvidenceLedger.js +14 -42
  58. package/dist/application/FilesystemSnapshot.js +2 -3
  59. package/dist/application/InterfaceBuilderAnalysis.js +266 -0
  60. package/dist/application/InventoryProjectionEvidence.js +4 -2
  61. package/dist/application/InvestigationProviders.js +1 -1
  62. package/dist/application/JavaScriptApplicationEvidence.js +2 -5
  63. package/dist/application/JavaScriptApplicationEvidenceGraph.js +6 -10
  64. package/dist/application/JavaScriptApplicationService.js +6 -29
  65. package/dist/application/JavaScriptApplicationWorkflowEvidence.js +5 -5
  66. package/dist/application/JavaScriptApplicationWorkflowService.js +0 -8
  67. package/dist/application/JavaScriptArtifactAnalysis.js +38 -127
  68. package/dist/application/JavaScriptArtifactFiles.js +67 -107
  69. package/dist/application/JavaScriptArtifactGraphAccumulator.js +0 -7
  70. package/dist/application/JavaScriptArtifactGraphBuilder.js +7 -58
  71. package/dist/application/JavaScriptArtifactGraphBundlers.js +1 -6
  72. package/dist/application/JavaScriptArtifactGraphContext.js +12 -39
  73. package/dist/application/JavaScriptArtifactGraphDocuments.js +4 -11
  74. package/dist/application/JavaScriptArtifactGraphEvidence.js +0 -14
  75. package/dist/application/JavaScriptArtifactGraphFindings.js +3 -3
  76. package/dist/application/JavaScriptArtifactGraphStructure.js +16 -17
  77. package/dist/application/JavaScriptArtifactPathResolution.js +61 -49
  78. package/dist/application/JavaScriptArtifactReconstruction.js +5 -10
  79. package/dist/application/JavaScriptArtifactReconstructionInput.js +2 -14
  80. package/dist/application/JavaScriptJsonModules.js +2 -2
  81. package/dist/application/JavaScriptModuleRelationships.js +22 -27
  82. package/dist/application/JavaScriptReplayPermission.js +1 -1
  83. package/dist/application/JavaScriptReplayPlanning.js +9 -3
  84. package/dist/application/JavaScriptReplayService.js +29 -47
  85. package/dist/application/JavaScriptReturnShapeProjection.js +12 -42
  86. package/dist/application/JavaScriptRuntimeObservationEvidence.js +7 -8
  87. package/dist/application/JavaScriptRuntimeObservationService.js +4 -8
  88. package/dist/application/JavaScriptRuntimeReconciliationEvidence.js +2 -3
  89. package/dist/application/JavaScriptSemanticGraphBuilder.js +11 -41
  90. package/dist/application/JavaScriptSemanticGraphConstruction.js +5 -29
  91. package/dist/application/JavaScriptSemanticGraphEvidence.js +1 -1
  92. package/dist/application/JavaScriptSemanticGraphFingerprintProjection.js +1 -1
  93. package/dist/application/JavaScriptSemanticGraphFlowProjection.js +0 -13
  94. package/dist/application/JavaScriptSemanticGraphProjection.js +1 -3
  95. package/dist/application/JavaScriptSemanticTraceService.js +1 -10
  96. package/dist/application/JsonFiles.js +79 -0
  97. package/dist/application/LinuxHopper.js +11 -9
  98. package/dist/application/LoopbackReplay.js +26 -23
  99. package/dist/application/LoopbackReplayRecorder.js +29 -1
  100. package/dist/application/ManagedApplicationGraphService.js +1 -2
  101. package/dist/application/ManagedMemberComparisonService.js +11 -41
  102. package/dist/application/ManagedNativeVerificationService.js +1 -2
  103. package/dist/application/ManagedReconstructionService.js +1 -1
  104. package/dist/application/ManagedRuntimeCorrelationService.js +14 -13
  105. package/dist/application/NativeApiInspection.js +2 -7
  106. package/dist/application/NativeUiActionTrace.js +394 -0
  107. package/dist/application/NodeRuntimeCharacterizationService.js +11 -16
  108. package/dist/application/PermissionAuthority.js +15 -7
  109. package/dist/application/PermissionFailure.js +5 -0
  110. package/dist/application/ProcessCaptureAuthority.js +5 -7
  111. package/dist/application/ProcessCaptureJournal.js +3 -2
  112. package/dist/application/ProcessCaptureLifecycle.js +10 -12
  113. package/dist/application/ProcessCheckpoints.js +29 -11
  114. package/dist/application/ProcessCli.js +8 -17
  115. package/dist/application/ProcessEvidence.js +5 -7
  116. package/dist/application/ProcessHarness.js +60 -20
  117. package/dist/application/ProcessNormalization.js +2 -1
  118. package/dist/application/ProcessReactiveCoordinator.js +2 -4
  119. package/dist/application/ProcessReactiveEffects.js +9 -3
  120. package/dist/application/ProcessReactiveHarness.js +13 -7
  121. package/dist/application/ProcessSampling.js +2 -4
  122. package/dist/application/ProcessTimer.js +39 -0
  123. package/dist/application/ProjectPermissionStore.js +39 -95
  124. package/dist/application/RealHopperAssertions.js +20 -66
  125. package/dist/application/ReconstructionCoverageService.js +12 -58
  126. package/dist/application/ReconstructionObligationAuthority.js +2 -2
  127. package/dist/application/ReconstructionObligationCandidates.js +4 -4
  128. package/dist/application/ReconstructionObligationLedgerEvaluation.js +8 -15
  129. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -7
  130. package/dist/application/ReconstructionObligationLedgerService.js +19 -38
  131. package/dist/application/ReferenceSourceImport.js +21 -47
  132. package/dist/application/ReferenceSourceImportEntries.js +2 -4
  133. package/dist/application/ReferenceSourceImportPolicy.js +5 -32
  134. package/dist/application/ReferenceSourceImportTypes.js +0 -16
  135. package/dist/application/RuntimeExecutableDiagnostics.js +55 -29
  136. package/dist/application/SessionProviderRouter.js +2 -2
  137. package/dist/application/Setup.js +1 -3
  138. package/dist/application/SetupClientConfiguration.js +22 -88
  139. package/dist/application/SetupRegistrationEnvironment.js +0 -7
  140. package/dist/application/StoreFileLock.js +119 -0
  141. package/dist/application/TerminalRenderer.js +2 -3
  142. package/dist/application/Uninstall.js +9 -14
  143. package/dist/application/UnknownEvidence.js +1 -1
  144. package/dist/application/WindowsCapabilities.js +5 -4
  145. package/dist/artifacts/ArtifactPaths.js +2 -5
  146. package/dist/artifacts/ArtifactProvider.js +43 -67
  147. package/dist/artifacts/DirectoryArtifactReader.js +13 -8
  148. package/dist/artifacts/MachOSliceArtifactReader.js +1 -5
  149. package/dist/artifacts/NativeDmgArtifactReader.js +11 -11
  150. package/dist/artifacts/NibArchive.js +269 -0
  151. package/dist/artifacts/SafeOutputTree.js +21 -31
  152. package/dist/browser/BrowserProcessStartup.js +1 -2
  153. package/dist/browser/CdpAuthorizedMainFrame.js +16 -0
  154. package/dist/browser/CdpBrowserProvider.js +3 -13
  155. package/dist/browser/CdpCanonicalJsonDigest.js +9 -0
  156. package/dist/browser/CdpCaptureDocuments.js +28 -76
  157. package/dist/browser/CdpCaptureEventBodyShapes.js +13 -33
  158. package/dist/browser/CdpCaptureEventHandlers.js +22 -87
  159. package/dist/browser/CdpCaptureEvents.js +2 -8
  160. package/dist/browser/CdpCaptureStorage.js +9 -20
  161. package/dist/browser/CdpCaptureStorageFingerprints.js +85 -95
  162. package/dist/browser/CdpCaptureValues.js +21 -21
  163. package/dist/browser/CdpConnection.js +10 -25
  164. package/dist/browser/CdpElectronInspection.js +29 -51
  165. package/dist/browser/CdpElectronProvider.js +10 -35
  166. package/dist/browser/CdpElectronScriptEvents.js +8 -16
  167. package/dist/browser/CdpElectronScripts.js +6 -35
  168. package/dist/browser/CdpElectronWorkers.js +6 -10
  169. package/dist/browser/CdpEndpoint.js +25 -41
  170. package/dist/browser/CdpObservationSession.js +14 -26
  171. package/dist/browser/CdpPageCapture.js +34 -48
  172. package/dist/browser/CdpPageCaptureScripts.js +1 -19
  173. package/dist/browser/CdpPageCaptureWorkers.js +6 -10
  174. package/dist/browser/CdpSafeMetadata.js +19 -22
  175. package/dist/browser/CdpScreenshot.js +3 -5
  176. package/dist/browser/CdpTargetSession.js +1 -2
  177. package/dist/browser/CdpWebMcpDiscovery.js +13 -22
  178. package/dist/browser/ElectronFileScope.js +8 -19
  179. package/dist/browser/JavaScriptRuntimeScope.js +10 -10
  180. package/dist/browser/PlaywrightBrowserScenarioProvider.js +31 -64
  181. package/dist/browser/PlaywrightElectronActiveActions.js +309 -0
  182. package/dist/browser/PlaywrightElectronActiveProvider.js +274 -0
  183. package/dist/browser/PlaywrightExecutionBoundary.js +16 -5
  184. package/dist/browser/PlaywrightScenarioActions.js +3 -7
  185. package/dist/browser/PlaywrightScenarioArtifacts.js +23 -92
  186. package/dist/browser/PlaywrightScenarioBrowser.js +7 -9
  187. package/dist/browser/PlaywrightScenarioEvents.js +45 -94
  188. package/dist/browser/PlaywrightScenarioSession.js +18 -34
  189. package/dist/browser/PngVisualDiff.js +22 -14
  190. package/dist/browser/SensitiveTextCapture.js +1 -18
  191. package/dist/browser/V8InspectorCaptureProjection.js +7 -7
  192. package/dist/browser/V8InspectorEndpoint.js +12 -14
  193. package/dist/browser/V8InspectorProvider.js +20 -61
  194. package/dist/browser/WebSourceMapFetcher.js +56 -176
  195. package/dist/catalogIdentity.js +12 -60
  196. package/dist/cli/artifactCommands.js +49 -77
  197. package/dist/cli/coreAnalysisCommands.js +83 -133
  198. package/dist/cli/javascriptApplicationAnalysis.js +1 -9
  199. package/dist/cli/managedCommands.js +6 -271
  200. package/dist/cli/setupCommands.js +3 -12
  201. package/dist/cli/utilityCommands.js +7 -41
  202. package/dist/cli.js +0 -2
  203. package/dist/cliApplicationCommands.js +44 -114
  204. package/dist/cliBrowserAdvancedCommands.js +12 -102
  205. package/dist/cliBrowserCommands.js +19 -124
  206. package/dist/cliBrowserContext.js +30 -0
  207. package/dist/cliCommandNames.js +5 -5
  208. package/dist/cliElectronCommands.js +49 -71
  209. package/dist/cliEvidenceCommands.js +8 -77
  210. package/dist/cliJavaScriptRuntimeCommands.js +18 -92
  211. package/dist/cliJsonInput.js +4 -14
  212. package/dist/cliObservationOptions.js +11 -92
  213. package/dist/cliPolicyCommands.js +2 -16
  214. package/dist/cliProcessCommands.js +3 -3
  215. package/dist/cliSetup.js +0 -13
  216. package/dist/config/browserScenario.js +77 -0
  217. package/dist/config/electronAutomation.js +35 -0
  218. package/dist/config/environment.js +6 -9
  219. package/dist/config/javascriptReplay.js +41 -0
  220. package/dist/config/managedRuntime.js +25 -0
  221. package/dist/config/parseConfig.js +56 -232
  222. package/dist/config/parsers.js +16 -28
  223. package/dist/config/passiveObservation.js +87 -0
  224. package/dist/config/permissions.js +0 -7
  225. package/dist/config/processCapture.js +47 -0
  226. package/dist/contracts/analysisSearchContract.js +2 -5
  227. package/dist/contracts/applicationToolContracts.js +58 -114
  228. package/dist/contracts/applicationWorkflowInputContracts.js +29 -114
  229. package/dist/contracts/artifactComparisonExample.js +58 -60
  230. package/dist/contracts/artifactToolContracts.js +37 -91
  231. package/dist/contracts/browserScenarioToolContracts.js +6 -51
  232. package/dist/contracts/browserToolContracts.js +10 -75
  233. package/dist/contracts/electronToolContracts.js +27 -98
  234. package/dist/contracts/enhancedInputs.js +31 -78
  235. package/dist/contracts/errorSchemas.js +0 -1
  236. package/dist/contracts/functionComparisonExample.js +10 -24
  237. package/dist/contracts/functionInstructionContract.js +1 -3
  238. package/dist/contracts/functionWorkflowToolContracts.js +4 -5
  239. package/dist/contracts/hopperMemoryContracts.js +3 -3
  240. package/dist/contracts/investigationExamples.js +14 -11
  241. package/dist/contracts/javascriptApplicationWorkflowExamples.js +12 -19
  242. package/dist/contracts/javascriptRuntimeObservationToolContracts.js +2 -20
  243. package/dist/contracts/javascriptRuntimeReconciliationExample.js +45 -12
  244. package/dist/contracts/managedToolContracts.js +10 -104
  245. package/dist/contracts/managedWorkflowExamples.js +77 -125
  246. package/dist/contracts/managedWorkflowToolContracts.js +51 -74
  247. package/dist/contracts/nativeToolContracts.js +9 -14
  248. package/dist/contracts/processCaptureExample.js +2 -69
  249. package/dist/contracts/promptContracts.js +49 -67
  250. package/dist/contracts/providerSelection.js +0 -1
  251. package/dist/contracts/reconstructionReadinessExample.js +1 -6
  252. package/dist/contracts/sessionStatusContract.js +1 -17
  253. package/dist/contracts/sessionToolSchemas.js +52 -0
  254. package/dist/contracts/toolContractExamples.js +11 -10
  255. package/dist/contracts/toolContractHelpers.js +19 -0
  256. package/dist/contracts/toolContracts.js +60 -143
  257. package/dist/contracts/toolEffects.js +16 -9
  258. package/dist/contracts/toolOutputSchemaGroups.js +47 -86
  259. package/dist/contracts/toolOutputSchemaPrimitives.js +72 -62
  260. package/dist/contracts/toolSchemaMetadata.js +117 -0
  261. package/dist/contracts/unknownContractExamples.js +0 -2
  262. package/dist/doctorRuntime.js +1 -1
  263. package/dist/domain/analysisErrorPresentation.js +46 -54
  264. package/dist/domain/analysisErrorProjection.js +28 -37
  265. package/dist/domain/analysisProfile.js +3 -31
  266. package/dist/domain/analysisSnapshot.js +3 -12
  267. package/dist/domain/androidApplication.js +15 -52
  268. package/dist/domain/appleApplication.js +24 -65
  269. package/dist/domain/artifactComparison.js +11 -29
  270. package/dist/domain/artifactGraph.js +14 -44
  271. package/dist/domain/artifactInspection.js +38 -69
  272. package/dist/domain/artifactInventoryEvidence.js +27 -21
  273. package/dist/domain/binaryTarget.js +2 -219
  274. package/dist/domain/binaryTargetTypes.js +1 -0
  275. package/dist/domain/browserCaptureComparison.js +35 -60
  276. package/dist/domain/browserObservation.js +45 -197
  277. package/dist/domain/browserObservationSchemas.js +5 -23
  278. package/dist/domain/browserScenario.js +11 -14
  279. package/dist/domain/browserScenarioCapture.js +11 -12
  280. package/dist/domain/browserScenarioCaptureValues.js +146 -84
  281. package/dist/domain/browserScenarioDiff.js +2 -59
  282. package/dist/domain/browserScenarioDiffEvidence.js +51 -0
  283. package/dist/domain/browserScenarioDiffValues.js +21 -38
  284. package/dist/domain/browserScenarioValues.js +80 -109
  285. package/dist/domain/browserSession.js +4 -7
  286. package/dist/domain/bundleComparison.js +6 -32
  287. package/dist/domain/bytecodeProvider.js +53 -54
  288. package/dist/domain/callPath.js +50 -169
  289. package/dist/domain/callPathSchemas.js +79 -0
  290. package/dist/domain/changedBehavior.js +34 -60
  291. package/dist/domain/completionLedgerGeneration.js +8 -14
  292. package/dist/domain/conformancePackage.js +126 -97
  293. package/dist/domain/conformanceReplay.js +39 -11
  294. package/dist/domain/conformanceTrustGate.js +174 -30
  295. package/dist/domain/customProtocolCapture.js +4 -4
  296. package/dist/domain/electronActiveObservation.js +244 -0
  297. package/dist/domain/electronObservation.js +21 -83
  298. package/dist/domain/electronStaticAnalysisBrowser.js +36 -46
  299. package/dist/domain/electronStaticAnalysisIpc.js +38 -14
  300. package/dist/domain/electronStaticAnalysisNative.js +1 -8
  301. package/dist/domain/electronStaticAnalysisValues.js +14 -18
  302. package/dist/domain/errors.js +33 -54
  303. package/dist/domain/eventProcessTree.js +101 -90
  304. package/dist/domain/evidence.js +2 -10
  305. package/dist/domain/evidenceBundle.js +3 -5
  306. package/dist/domain/evidenceCompletionLedger.js +6 -8
  307. package/dist/domain/functionComparison.js +4 -14
  308. package/dist/domain/functionComparisonNormalization.js +8 -8
  309. package/dist/domain/functionComparisonResults.js +25 -15
  310. package/dist/domain/functionComparisonSchemas.js +49 -33
  311. package/dist/domain/functionDossierEvidence.js +31 -151
  312. package/dist/domain/hopperStartupFailure.js +1 -1
  313. package/dist/domain/hopperValues.js +17 -141
  314. package/dist/domain/inputIssueProjection.js +4 -1
  315. package/dist/domain/interfaceBuilderGraph.js +654 -0
  316. package/dist/domain/javascriptApplicationAnalysis.js +8 -112
  317. package/dist/domain/javascriptApplicationChangeGraph.js +22 -82
  318. package/dist/domain/javascriptApplicationEvidenceSchemas.js +59 -47
  319. package/dist/domain/javascriptApplicationGraph.js +3 -13
  320. package/dist/domain/javascriptApplicationGraphSchemas.js +12 -34
  321. package/dist/domain/javascriptApplicationVersionComparison.js +26 -30
  322. package/dist/domain/javascriptApplicationVersionComparisonSchemas.js +123 -68
  323. package/dist/domain/javascriptApplicationVersionItems.js +120 -53
  324. package/dist/domain/javascriptApplicationVersionKeys.js +24 -11
  325. package/dist/domain/javascriptAstFingerprint.js +25 -58
  326. package/dist/domain/javascriptAstValues.js +9 -0
  327. package/dist/domain/javascriptExportInstrumentation.js +2 -4
  328. package/dist/domain/javascriptExportShapeComparison.js +6 -7
  329. package/dist/domain/javascriptExportShapeComparisonSchemas.js +70 -77
  330. package/dist/domain/javascriptExportShapeSelection.js +17 -19
  331. package/dist/domain/javascriptFeatureSeed.js +20 -12
  332. package/dist/domain/javascriptFeatureTrace.js +13 -67
  333. package/dist/domain/javascriptFeatureTraceSchemas.js +24 -52
  334. package/dist/domain/javascriptFeatureTraversal.js +1 -44
  335. package/dist/domain/javascriptNativeHandoff.js +1 -1
  336. package/dist/domain/javascriptReplay.js +100 -101
  337. package/dist/domain/javascriptRuntimeLoadState.js +3 -8
  338. package/dist/domain/javascriptRuntimeObservation.js +43 -103
  339. package/dist/domain/javascriptRuntimeReconciliation.js +1 -3
  340. package/dist/domain/javascriptRuntimeReconciliationActive.js +80 -0
  341. package/dist/domain/javascriptRuntimeReconciliationGraph.js +21 -33
  342. package/dist/domain/javascriptRuntimeReconciliationMatching.js +75 -61
  343. package/dist/domain/javascriptRuntimeReconciliationParsing.js +21 -46
  344. package/dist/domain/javascriptRuntimeReconciliationResult.js +25 -19
  345. package/dist/domain/javascriptRuntimeReconciliationRuntime.js +8 -12
  346. package/dist/domain/javascriptRuntimeReconciliationSchemas.js +34 -49
  347. package/dist/domain/javascriptRuntimeStaticCandidates.js +3 -3
  348. package/dist/domain/javascriptSemanticAnalysis.js +12 -45
  349. package/dist/domain/javascriptSemanticAsyncEffects.js +1 -9
  350. package/dist/domain/javascriptSemanticCallResolution.js +6 -16
  351. package/dist/domain/javascriptSemanticCalls.js +5 -32
  352. package/dist/domain/javascriptSemanticChildProcesses.js +1 -11
  353. package/dist/domain/javascriptSemanticCoverage.js +11 -0
  354. package/dist/domain/javascriptSemanticDataEffectHelpers.js +1 -8
  355. package/dist/domain/javascriptSemanticDataEffects.js +1 -11
  356. package/dist/domain/javascriptSemanticFingerprints.js +3 -5
  357. package/dist/domain/javascriptSemanticGraphSchemas.js +25 -51
  358. package/dist/domain/javascriptSemanticGraphSerialization.js +2 -13
  359. package/dist/domain/javascriptSemanticIr.js +1 -29
  360. package/dist/domain/javascriptSemanticObjects.js +1 -5
  361. package/dist/domain/javascriptSemanticPrimitives.js +2 -9
  362. package/dist/domain/javascriptSemanticProjection.js +0 -18
  363. package/dist/domain/javascriptSemanticPromises.js +9 -16
  364. package/dist/domain/javascriptSemanticProvenance.js +16 -19
  365. package/dist/domain/javascriptSemanticQuery.js +17 -139
  366. package/dist/domain/javascriptSemanticQueryAssessment.js +9 -37
  367. package/dist/domain/javascriptSemanticQueryIdentity.js +2 -23
  368. package/dist/domain/javascriptSemanticQuerySchemas.js +14 -107
  369. package/dist/domain/javascriptSemanticResources.js +1 -6
  370. package/dist/domain/javascriptSemanticReturns.js +10 -27
  371. package/dist/domain/javascriptSemanticValueTypes.js +1 -0
  372. package/dist/domain/javascriptSemanticValues.js +44 -62
  373. package/dist/domain/javascriptStaticAnalysis.js +21 -43
  374. package/dist/domain/javascriptStaticAnalysisBundler.js +34 -93
  375. package/dist/domain/javascriptStaticAnalysisCalls.js +17 -16
  376. package/dist/domain/javascriptStaticAnalysisFindings.js +3 -19
  377. package/dist/domain/javascriptStaticAnalysisHelpers.js +47 -88
  378. package/dist/domain/javascriptStaticAnalysisState.js +1 -5
  379. package/dist/domain/javascriptStaticAnalysisTypes.js +1 -0
  380. package/dist/domain/jsonShape.js +7 -33
  381. package/dist/domain/localPath.js +7 -0
  382. package/dist/domain/managedApplicationGraph.js +9 -41
  383. package/dist/domain/managedApplicationGraphCoverage.js +24 -156
  384. package/dist/domain/managedApplicationGraphNodes.js +10 -13
  385. package/dist/domain/managedArtifact.js +14 -27
  386. package/dist/domain/managedMemberComparison.js +90 -92
  387. package/dist/domain/managedMemberComparisonCoverage.js +11 -33
  388. package/dist/domain/managedMemberComparisonItems.js +221 -0
  389. package/dist/domain/managedMemberComparisonMatch.js +8 -208
  390. package/dist/domain/managedNativeVerification.js +3 -6
  391. package/dist/domain/managedNativeVerificationMatch.js +55 -59
  392. package/dist/domain/managedNativeVerificationSchemas.js +83 -47
  393. package/dist/domain/managedReconstruction.js +19 -23
  394. package/dist/domain/managedRuntimeCorrelation.js +6 -9
  395. package/dist/domain/nativeApiBoundary.js +17 -14
  396. package/dist/domain/nativeInspection.js +0 -2
  397. package/dist/domain/nativeInvestigationGraph.js +351 -0
  398. package/dist/domain/nativeValueFlow.js +61 -0
  399. package/dist/domain/nodeRuntimeCharacterization.js +15 -18
  400. package/dist/domain/objcSwiftMetadata.js +254 -0
  401. package/dist/domain/peInspection.js +1 -1
  402. package/dist/domain/permissionPolicy.js +13 -0
  403. package/dist/domain/processCapture.js +76 -113
  404. package/dist/domain/processCaptureExample.js +68 -0
  405. package/dist/domain/processCaptureParsing.js +21 -0
  406. package/dist/domain/processCaptureReactiveSchema.js +68 -0
  407. package/dist/domain/processCaptureReactiveValidation.js +8 -3
  408. package/dist/domain/processCaptureValidation.js +8 -10
  409. package/dist/domain/processComparison.js +12 -16
  410. package/dist/domain/processObservation.js +5 -6
  411. package/dist/domain/processReactiveMatching.js +32 -46
  412. package/dist/domain/processReactiveRuntime.js +4 -8
  413. package/dist/domain/processReactiveScenario.js +28 -94
  414. package/dist/domain/processReactiveScenarioPreflight.js +5 -30
  415. package/dist/domain/processReactiveTransition.js +42 -21
  416. package/dist/domain/processScenario.js +62 -93
  417. package/dist/domain/processTraceComparison.js +0 -7
  418. package/dist/domain/processTraceEvaluation.js +14 -4
  419. package/dist/domain/processTraceSpecification.js +11 -17
  420. package/dist/domain/protocolCapture.js +11 -9
  421. package/dist/domain/reconstructionCoverage.js +62 -129
  422. package/dist/domain/reconstructionCoverageEvaluation.js +17 -17
  423. package/dist/domain/reconstructionObligationLedgerSchemas.js +45 -72
  424. package/dist/domain/reconstructionReadiness.js +1 -2
  425. package/dist/domain/reconstructionReadinessSchemas.js +66 -40
  426. package/dist/domain/reconstructionUnknowns.js +3 -3
  427. package/dist/domain/reconstructionVerification.js +13 -47
  428. package/dist/domain/reconstructionVerificationSchemas.js +50 -38
  429. package/dist/domain/referenceSourceGraph.js +53 -61
  430. package/dist/domain/referenceSourceImportParsing.js +3 -7
  431. package/dist/domain/replayMachine.js +19 -31
  432. package/dist/domain/replayMachineRun.js +15 -63
  433. package/dist/domain/replayMachineRuntime.js +46 -44
  434. package/dist/domain/replayMachineValues.js +84 -0
  435. package/dist/domain/residualUnknown.js +25 -30
  436. package/dist/domain/runtimeCharacterization.js +15 -16
  437. package/dist/domain/runtimeIdentification.js +48 -47
  438. package/dist/domain/sourceToBundleComparison.js +11 -87
  439. package/dist/domain/sourceToBundleComparisonSchemas.js +25 -50
  440. package/dist/domain/sourceToBundleSignals.js +11 -16
  441. package/dist/domain/staticRuntimeCorrelation.js +44 -54
  442. package/dist/domain/symbolAnalysis.js +10 -19
  443. package/dist/domain/unicodeCodePointOrder.js +12 -0
  444. package/dist/domain/webBundleAnalysis.js +70 -99
  445. package/dist/domain/webBundleAnalyzer.js +2 -4
  446. package/dist/domain/webBundleAnalyzerAst.js +0 -13
  447. package/dist/domain/webBundleAnalyzerInspection.js +26 -52
  448. package/dist/domain/webBundleAnalyzerResult.js +7 -24
  449. package/dist/domain/webCaptureDiff.js +48 -85
  450. package/dist/domain/webCaptureDiffSchemas.js +86 -0
  451. package/dist/domain/webContentArtifact.js +1 -10
  452. package/dist/domain/webMcpDiscovery.js +3 -14
  453. package/dist/domain/webScreenshot.js +58 -34
  454. package/dist/domain/zipPackageFormat.js +7 -0
  455. package/dist/dotnet/ManagedArtifactInspector.js +17 -50
  456. package/dist/dotnet/ManagedMemberInspector.js +27 -58
  457. package/dist/dotnet/ManagedMemberInspectorCore.js +14 -51
  458. package/dist/dotnet/ManagedMemberInstructionDecoder.js +2 -2
  459. package/dist/dotnet/ManagedMemberRows.js +16 -16
  460. package/dist/dotnet/ManagedMetadataHeaps.js +26 -8
  461. package/dist/dotnet/ManagedMetadataInventory.js +21 -30
  462. package/dist/dotnet/ManagedMetadataInventoryRows.js +57 -63
  463. package/dist/dotnet/ManagedMetadataLayout.js +3 -5
  464. package/dist/dotnet/ManagedMethodBodyReader.js +5 -30
  465. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +19 -49
  466. package/dist/dotnet/ManagedNativeBoundaryInspector.js +13 -42
  467. package/dist/dotnet/ManagedPeReader.js +2 -2
  468. package/dist/dotnet/ManagedStaticProvider.js +13 -71
  469. package/dist/generatedMcpToolCatalog.js +1 -1
  470. package/dist/generatedPackageMetadata.js +1 -1
  471. package/dist/ghidra/GhidraAnalysisProfile.js +3 -8
  472. package/dist/ghidra/GhidraClient.js +5 -13
  473. package/dist/ghidra/GhidraClientStartup.js +1 -1
  474. package/dist/ghidra/GhidraClientWire.js +9 -5
  475. package/dist/ghidra/GhidraDefaults.js +0 -18
  476. package/dist/ghidra/GhidraDiagnostics.js +0 -2
  477. package/dist/ghidra/GhidraDoctor.js +16 -12
  478. package/dist/ghidra/GhidraFunctionValues.js +67 -108
  479. package/dist/ghidra/GhidraInstallation.js +98 -42
  480. package/dist/ghidra/GhidraInventoryValues.js +18 -77
  481. package/dist/ghidra/GhidraLauncher.js +0 -8
  482. package/dist/ghidra/GhidraProvider.js +32 -31
  483. package/dist/ghidra/GhidraProviderCapabilities.js +11 -48
  484. package/dist/ghidra/GhidraRequestQueue.js +6 -30
  485. package/dist/ghidra/GhidraResponseBuffer.js +1 -7
  486. package/dist/ghidra/GhidraSessionValues.js +0 -2
  487. package/dist/ghidra/GhidraSocketConnection.js +1 -1
  488. package/dist/ghidra/GhidraTransport.js +4 -7
  489. package/dist/ghidra/protocol.js +19 -42
  490. package/dist/hopper/BridgeLauncher.js +115 -37
  491. package/dist/hopper/HopperAnalysisProfile.js +3 -5
  492. package/dist/hopper/HopperCleanup.js +11 -9
  493. package/dist/hopper/HopperClient.js +5 -8
  494. package/dist/hopper/HopperProcessDiagnostic.js +2 -2
  495. package/dist/hopper/HopperProvider.js +0 -30
  496. package/dist/hopper/HopperRequestQueue.js +21 -40
  497. package/dist/hopper/HopperResponseStream.js +1 -9
  498. package/dist/hopper/HopperSessionValues.js +3 -2
  499. package/dist/hopper/HopperTargetLease.js +119 -0
  500. package/dist/hopper/LinuxPrivateDisplayDiagnostic.js +24 -31
  501. package/dist/hopper/LinuxPrivateDisplayProbe.js +21 -26
  502. package/dist/hopper/protocol.js +6 -4
  503. package/dist/main/reload.js +1 -9
  504. package/dist/main/shutdown.js +1 -1
  505. package/dist/main/state.js +0 -23
  506. package/dist/main/transport.js +27 -39
  507. package/dist/main.js +17 -15
  508. package/dist/mcpDoctor.js +27 -69
  509. package/dist/native/CommandRunner.js +18 -25
  510. package/dist/native/NativeMacOSProvider.js +13 -38
  511. package/dist/native/NativeMachoInspection.js +1 -1
  512. package/dist/process/BoundedFileBytes.js +17 -0
  513. package/dist/process/ExecFileOutput.js +11 -0
  514. package/dist/process/PendingOperations.js +8 -6
  515. package/dist/process/PrivateRuntimeRoot.js +17 -0
  516. package/dist/process/ProcessOwnership.js +67 -130
  517. package/dist/process/ProcessOwnershipIdentity.js +13 -0
  518. package/dist/process/ProcessOwnershipObservation.js +87 -0
  519. package/dist/process/ProcessOwnershipProcessTree.js +22 -0
  520. package/dist/process/ProviderDeadline.js +8 -12
  521. package/dist/process/ProviderProcess.js +7 -28
  522. package/dist/process/WindowsAuthority.js +32 -0
  523. package/dist/reference/ReferenceSourceReader.js +8 -24
  524. package/dist/reference/ReferenceSourceReaderEntries.js +11 -39
  525. package/dist/reference/ReferenceSourceReaderFile.js +13 -31
  526. package/dist/reference/ReferenceSourceReaderPaths.js +3 -18
  527. package/dist/reference/ReferenceSourceReaderValidate.js +3 -6
  528. package/dist/replay/JavaScriptReplayWorker.js +95 -13
  529. package/dist/replay/JavaScriptReplayWorkerTypes.js +1 -0
  530. package/dist/replay/LinuxJavaScriptReplayRunner.js +42 -43
  531. package/dist/replay/LinuxJavaScriptReplaySandbox.js +0 -19
  532. package/dist/replay/LinuxRuntimeClosure.js +1 -3
  533. package/dist/replay/ReplayOutcome.js +27 -18
  534. package/dist/replay/ReplayProcessLifecycle.js +32 -7
  535. package/dist/replay/ReplaySeccompFile.js +29 -0
  536. package/dist/replay/ReplayWorkerProtocol.js +33 -30
  537. package/dist/replay/SystemJavaScriptReplayHost.js +45 -74
  538. package/dist/server/ProcessCaptureElicitation.js +4 -8
  539. package/dist/server/createServer.js +145 -119
  540. package/dist/server/mcpClientMetadata.js +32 -0
  541. package/dist/server/promptCompletion.js +37 -61
  542. package/dist/server/recordDerivedEvidence.js +1 -1
  543. package/dist/server/registerApplicationTools/characterization.js +10 -21
  544. package/dist/server/registerApplicationTools/compareExportShapes.js +6 -16
  545. package/dist/server/registerApplicationTools/compareSourceToBundle.js +6 -15
  546. package/dist/server/registerApplicationTools/compareVersions.js +6 -16
  547. package/dist/server/registerApplicationTools/controlledReplay.js +8 -15
  548. package/dist/server/registerApplicationTools/coverage.js +7 -78
  549. package/dist/server/registerApplicationTools/helpers.js +1 -13
  550. package/dist/server/registerApplicationTools/obligationLedger.js +4 -8
  551. package/dist/server/registerApplicationTools/traceFeature.js +6 -15
  552. package/dist/server/registerApplicationTools/traceSemantics.js +5 -13
  553. package/dist/server/registerApplicationTools.js +0 -2
  554. package/dist/server/registerArtifactComparisonTool.js +27 -35
  555. package/dist/server/registerBrowserScenarioTool.js +3 -8
  556. package/dist/server/registerBrowserTools.js +36 -81
  557. package/dist/server/registerBundleComparisonTool.js +10 -16
  558. package/dist/server/registerCloseLifecycleTool.js +5 -27
  559. package/dist/server/registerElectronTools.js +29 -65
  560. package/dist/server/registerEnhancedTools.js +118 -127
  561. package/dist/server/registerEvidenceTools.js +19 -30
  562. package/dist/server/registerFunctionComparisonTool.js +35 -34
  563. package/dist/server/registerInvestigationTools/helpers.js +3 -32
  564. package/dist/server/registerInvestigationTools.js +36 -148
  565. package/dist/server/registerJavaScriptRuntimeObservationTools.js +15 -27
  566. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +16 -23
  567. package/dist/server/registerManagedWorkflowTools/contract.js +2 -3
  568. package/dist/server/registerManagedWorkflowTools/evidence.js +19 -35
  569. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -14
  570. package/dist/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.js +4 -14
  571. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +11 -20
  572. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +10 -21
  573. package/dist/server/registerOfficialTools.js +8 -51
  574. package/dist/server/registerProcessComparisonTool.js +43 -38
  575. package/dist/server/registerPrompts.js +19 -17
  576. package/dist/server/registerReplayMachineTool.js +4 -10
  577. package/dist/server/registerSessionRecordTools.js +36 -153
  578. package/dist/server/registerSessionStatusTool.js +18 -96
  579. package/dist/server/registerSessionTools.js +34 -91
  580. package/dist/server/sessionAvailabilityPolicy.js +2 -3
  581. package/dist/server/sessionEvidence.js +9 -15
  582. package/dist/server/sessionToolPolicies.js +1 -13
  583. package/dist/server/toolRegistrationOptions.js +4 -192
  584. package/dist/server/toolResult.js +15 -67
  585. package/dist/serverIdentity.js +0 -20
  586. package/install.sh +1 -1
  587. package/package.json +27 -15
  588. package/scripts/electron-active-hook-boundaries.cjs +394 -0
  589. package/scripts/electron-active-hook.cjs +469 -0
  590. package/scripts/hopper-demo-x11.py +13 -32
  591. package/scripts/rea.mjs +1 -11
  592. package/skills/reverse-engineer-anything/SKILL.md +46 -11
  593. package/skills/reverse-engineer-anything/references/evidence-workflows.md +6 -4
  594. package/skills/reverse-engineer-anything/references/javascript-applications.md +13 -13
  595. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +12 -8
  596. package/dist/application/ApplicationWorkflowEvidenceResolver.js +0 -180
  597. package/dist/application/BoundedJsonFiles.js +0 -86
  598. package/dist/application/CrossVersionInventory.js +0 -128
  599. package/dist/application/CrossVersionInvestigation.js +0 -301
  600. package/dist/application/CrossVersionInvestigationCollections.js +0 -23
  601. package/dist/application/CrossVersionInvestigationEvidence.js +0 -64
  602. package/dist/application/CrossVersionInvestigationReplay.js +0 -170
  603. package/dist/application/DeferredFileAuthorization.js +0 -61
  604. package/dist/application/DoctorProjection.js +0 -43
  605. package/dist/application/EnhancedToolPagination.js +0 -22
  606. package/dist/application/EvidenceReferenceResolver.js +0 -26
  607. package/dist/application/InvestigationWorkspaceStore.js +0 -204
  608. package/dist/application/ProcessPairedExperiment.js +0 -72
  609. package/dist/application/ReconstructionCoverageWorkspaceStore.js +0 -31
  610. package/dist/application/ReconstructionReadinessService.js +0 -48
  611. package/dist/cliInvestigationCommands.js +0 -173
  612. package/dist/domain/boundedCartesianProjection.js +0 -15
  613. package/dist/domain/investigationWorkspace.js +0 -346
  614. package/dist/domain/jsonLimits.js +0 -26
  615. package/dist/domain/knownPageCoverage.js +0 -21
  616. package/dist/domain/processPairedExperiment.js +0 -128
  617. package/dist/server/DynamicToolAvailability.js +0 -70
  618. package/dist/server/LazyToolCatalog.js +0 -134
  619. package/dist/server/hydrateServerTools.js +0 -191
  620. package/dist/server/javascriptApplicationResult.js +0 -106
  621. package/dist/server/permissionFailure.js +0 -12
  622. package/dist/server/registerApplicationTools/readiness.js +0 -55
  623. package/dist/server/registerEvidenceResources.js +0 -315
  624. package/dist/server/registerJavaScriptApplicationGraphResource.js +0 -65
  625. package/dist/server/registerReconstructionObligationLedgerResource.js +0 -32
  626. package/dist/server/registerReconstructionReadinessResource.js +0 -32
  627. package/dist/server/toolInputValidation.js +0 -77
  628. package/scripts/package-runner-bootstrap.mjs +0 -72
@@ -1,142 +1,68 @@
1
1
  import { compareCodePoints } from "./javascriptApplicationGraph.js";
2
2
  import { isJavaScriptSemanticOwnershipRelation as ownershipRelation } from "./javascriptSemanticQueryRelations.js";
3
3
  import { javaScriptSemanticQueryInputSchema, javaScriptSemanticQueryResultSchema, } from "./javascriptSemanticQuerySchemas.js";
4
- import { assessJavaScriptSemanticQuery, } from "./javascriptSemanticQueryAssessment.js";
5
- import { canonicalJavaScriptSemanticQueryJson as canonicalJson, createJavaScriptSemanticQueryCursor as createCursor, JavaScriptSemanticQueryCursorError, javaScriptSemanticQueryIdentifier as queryIdentifier, parseJavaScriptSemanticQueryCursor as parseCursor, resolveJavaScriptSemanticQuerySeeds as resolveSeeds, } from "./javascriptSemanticQueryIdentity.js";
6
- /** Run one deterministic bounded traversal over a verified semantic graph. */
4
+ import { assessJavaScriptSemanticQuery } from "./javascriptSemanticQueryAssessment.js";
5
+ import { javaScriptSemanticQueryIdentifier as queryIdentifier, resolveJavaScriptSemanticQuerySeeds as resolveSeeds, } from "./javascriptSemanticQueryIdentity.js";
6
+ /** Run one deterministic traversal over a verified semantic graph. */
7
7
  export const queryJavaScriptSemanticGraph = (graph, rawInput) => {
8
8
  const input = javaScriptSemanticQueryInputSchema.parse(rawInput);
9
9
  const queryId = queryIdentifier(graph, input);
10
- const offset = parseCursor(input.cursor, queryId);
11
10
  const seeds = resolveSeeds(graph, input);
12
- const admission = admitSeeds(graph, seeds, input);
11
+ const admission = admitSeeds(graph, seeds);
13
12
  const retainedSeeds = admission.nodeIds;
14
13
  const adjacency = buildAdjacency(graph.relations, input);
15
- const traversal = traverse(graph, retainedSeeds, adjacency, input);
16
- const frontier = uniqueFrontier([
17
- ...traversal.frontier,
18
- ...admission.frontier,
19
- ]);
20
- const page = createQueryPage({
21
- graph,
22
- traversal,
23
- query: input,
24
- queryId,
25
- offset,
26
- retainedSeeds,
27
- });
14
+ const traversal = traverse(graph, retainedSeeds, adjacency);
15
+ const result = createQueryResult(graph, traversal);
28
16
  const allRelevantUnknowns = relevantUnknownFrontiers(graph, traversal.nodeIds, input);
29
- const relevantUnknowns = allRelevantUnknowns.slice(0, input.limits.max_unknowns);
17
+ const relevantUnknowns = allRelevantUnknowns;
30
18
  const candidateRelations = relevantCandidateRelationCount(graph, traversal.nodeIds, input);
31
- const expectedMatches = expectedMatchesFor(page.retainedNodes, page.retainedRelations, input);
19
+ const expectedMatches = expectedMatchesFor(result.retainedNodes, result.retainedRelations, input);
32
20
  const assessment = assessJavaScriptSemanticQuery({
33
21
  graph,
34
22
  totalSeeds: seeds.length,
35
- retainedSeeds: retainedSeeds.length,
36
23
  expectedMatches: expectedMatches.length,
37
24
  hasExpectation: input.expected !== null,
38
- frontier,
39
25
  unknowns: relevantUnknowns,
40
26
  candidateRelations,
41
- unknownsTruncated: allRelevantUnknowns.length > relevantUnknowns.length,
42
27
  });
43
28
  return javaScriptSemanticQueryResultSchema.parse({
44
- schema_version: 1,
45
29
  query_id: queryId,
46
30
  source_graph_id: graph.graph_id,
47
31
  seed: input.seed,
48
32
  direction: input.direction,
49
33
  status: assessment.status,
50
34
  seed_node_ids: retainedSeeds,
51
- nodes: page.pageNodes,
52
- relations: page.pageRelations,
35
+ nodes: result.retainedNodes,
36
+ relations: result.retainedRelations,
53
37
  unknowns: relevantUnknowns,
54
38
  expected_match_node_ids: expectedMatches.map(({ node_id }) => node_id),
55
39
  summary: {
56
40
  total_seed_matches: seeds.length,
57
- retained_seed_matches: retainedSeeds.length,
58
41
  traversed_nodes: traversal.nodeIds.size,
59
42
  traversed_relations: traversal.relationIds.size,
60
43
  traversed_functions: traversal.functionIds.size,
61
44
  traversed_modules: traversal.modules.size,
62
45
  relevant_unknowns: allRelevantUnknowns.length,
63
- retained_unknowns: relevantUnknowns.length,
64
46
  },
65
47
  coverage: assessment.coverage,
66
- page: {
67
- offset,
68
- size: page.pageRelations.length,
69
- next_cursor: page.nextCursor,
70
- },
71
- applied_limits: input.limits,
72
- accepted_limit_ranges: assessment.acceptedLimitRanges,
73
48
  limitations: assessment.limitations,
74
49
  });
75
50
  };
76
- const createQueryPage = ({ graph, traversal, query, queryId, offset, retainedSeeds, }) => {
51
+ const createQueryResult = (graph, traversal) => {
77
52
  const retainedNodes = graph.nodes.filter(({ node_id }) => traversal.nodeIds.has(node_id));
78
53
  const retainedRelations = graph.relations.filter(({ relation_id }) => traversal.relationIds.has(relation_id));
79
- if (offset > retainedRelations.length)
80
- throw new JavaScriptSemanticQueryCursorError("Semantic query cursor is beyond the retained result");
81
- const pageRelations = retainedRelations.slice(offset, offset + query.limits.page_size);
82
- const pageNodeIds = new Set([
83
- ...retainedSeeds,
84
- ...pageRelations.flatMap(({ source_node_id, target_node_id }) => [
85
- source_node_id,
86
- target_node_id,
87
- ]),
88
- ]);
89
- const pageNodes = graph.nodes.filter(({ node_id }) => pageNodeIds.has(node_id));
90
- const nextOffset = offset + pageRelations.length;
91
- return {
92
- retainedNodes,
93
- retainedRelations,
94
- pageRelations,
95
- pageNodes,
96
- nextCursor: nextOffset < retainedRelations.length
97
- ? createCursor(queryId, nextOffset)
98
- : null,
99
- };
54
+ return { retainedNodes, retainedRelations };
100
55
  };
101
- const admitSeeds = (graph, seeds, input) => {
56
+ const admitSeeds = (graph, seeds) => {
102
57
  const nodes = new Map(graph.nodes.map((node) => [node.node_id, node]));
103
58
  const retained = [];
104
- const functions = new Set();
105
- const modules = new Set();
106
- const frontier = [];
107
59
  for (const nodeId of seeds) {
108
60
  const node = nodes.get(nodeId);
109
61
  if (node === undefined)
110
62
  continue;
111
- const reason = seedBlockedReason(node, {
112
- retained,
113
- functions,
114
- modules,
115
- input,
116
- });
117
- if (reason !== null) {
118
- frontier.push({ node_id: nodeId, depth: 0, reason });
119
- continue;
120
- }
121
63
  retained.push(nodeId);
122
- retainOwners(node, functions, modules);
123
64
  }
124
- return { nodeIds: retained, frontier: uniqueFrontier(frontier) };
125
- };
126
- const seedBlockedReason = (node, bounds) => {
127
- if (bounds.retained.length >= bounds.input.limits.max_seed_matches)
128
- return "max-seed-matches";
129
- if (bounds.retained.length >= bounds.input.limits.max_nodes)
130
- return "max-nodes";
131
- const functionId = functionOwner(node);
132
- if (functionId !== null &&
133
- !bounds.functions.has(functionId) &&
134
- bounds.functions.size >= bounds.input.limits.max_functions)
135
- return "max-functions";
136
- if (!bounds.modules.has(node.identity.module_path) &&
137
- bounds.modules.size >= bounds.input.limits.max_modules)
138
- return "max-modules";
139
- return null;
65
+ return { nodeIds: retained };
140
66
  };
141
67
  const buildAdjacency = (relations, input) => {
142
68
  const adjacency = new Map();
@@ -178,36 +104,20 @@ const addEntry = (adjacency, from, nextNodeId, relation) => {
178
104
  entries.push({ relation, nextNodeId });
179
105
  adjacency.set(from, entries);
180
106
  };
181
- const traverse = (graph, seeds, adjacency, input) => {
107
+ const traverse = (graph, seeds, adjacency) => {
182
108
  const nodes = new Map(graph.nodes.map((node) => [node.node_id, node]));
183
109
  const nodeIds = new Set(seeds);
184
110
  const relationIds = new Set();
185
111
  const functionIds = new Set();
186
112
  const modules = new Set();
187
- const frontier = [];
113
+ const queue = [...nodeIds];
188
114
  for (const nodeId of nodeIds)
189
115
  retainOwners(nodes.get(nodeId), functionIds, modules);
190
- const depths = new Map([...nodeIds].map((nodeId) => [nodeId, 0]));
191
- const queue = [...nodeIds];
192
- const bounds = {
193
- nodes,
194
- nodeIds,
195
- relationIds,
196
- functionIds,
197
- modules,
198
- input,
199
- };
200
116
  for (let offset = 0; offset < queue.length; offset += 1) {
201
117
  const current = queue[offset];
202
118
  if (current === undefined)
203
119
  continue;
204
- const depth = depths.get(current) ?? 0;
205
120
  for (const entry of adjacency.get(current) ?? []) {
206
- const reason = blockedReason(entry, depth, bounds);
207
- if (reason !== null) {
208
- frontier.push({ node_id: current, depth, reason });
209
- continue;
210
- }
211
121
  relationIds.add(entry.relation.relation_id);
212
122
  if (nodeIds.has(entry.nextNodeId))
213
123
  continue;
@@ -216,7 +126,6 @@ const traverse = (graph, seeds, adjacency, input) => {
216
126
  continue;
217
127
  nodeIds.add(entry.nextNodeId);
218
128
  retainOwners(node, functionIds, modules);
219
- depths.set(entry.nextNodeId, depth + 1);
220
129
  queue.push(entry.nextNodeId);
221
130
  }
222
131
  }
@@ -225,47 +134,16 @@ const traverse = (graph, seeds, adjacency, input) => {
225
134
  relationIds,
226
135
  functionIds,
227
136
  modules,
228
- frontier: uniqueFrontier(frontier),
229
137
  };
230
138
  };
231
- const blockedReason = (entry, depth, bounds) => {
232
- if (depth >= bounds.input.limits.max_depth)
233
- return "max-depth";
234
- if (!bounds.relationIds.has(entry.relation.relation_id) &&
235
- bounds.relationIds.size >= bounds.input.limits.max_edges)
236
- return "max-edges";
237
- if (bounds.nodeIds.has(entry.nextNodeId))
238
- return null;
239
- if (bounds.nodeIds.size >= bounds.input.limits.max_nodes)
240
- return "max-nodes";
241
- const node = bounds.nodes.get(entry.nextNodeId);
242
- if (node === undefined)
243
- return null;
244
- const functionId = functionOwner(node);
245
- if (functionId !== null &&
246
- !bounds.functionIds.has(functionId) &&
247
- bounds.functionIds.size >= bounds.input.limits.max_functions)
248
- return "max-functions";
249
- if (!bounds.modules.has(node.identity.module_path) &&
250
- bounds.modules.size >= bounds.input.limits.max_modules)
251
- return "max-modules";
252
- return null;
253
- };
254
139
  const retainOwners = (node, functions, modules) => {
255
140
  if (node === undefined)
256
141
  return;
257
- const functionId = functionOwner(node);
142
+ const functionId = node.kind === "function" ? node.node_id : node.function_node_id;
258
143
  if (functionId !== null)
259
144
  functions.add(functionId);
260
145
  modules.add(node.identity.module_path);
261
146
  };
262
- const functionOwner = (node) => node.kind === "function" ? node.node_id : node.function_node_id;
263
- const uniqueFrontier = (frontier) => [
264
- ...new Map(frontier.map((item) => [
265
- `${item.node_id}\0${String(item.depth)}\0${item.reason}`,
266
- item,
267
- ])).values(),
268
- ].sort((left, right) => compareCodePoints(canonicalJson(left), canonicalJson(right)));
269
147
  const relevantUnknownFrontiers = (graph, nodeIds, input) => {
270
148
  const allowed = input.allowed_relations === undefined
271
149
  ? null
@@ -1,43 +1,30 @@
1
1
  import { compareCodePoints } from "./javascriptApplicationGraph.js";
2
- /** Classify a bounded semantic traversal without promoting unknowns to absence. */
2
+ /** Classify a complete semantic traversal without promoting unknowns to absence. */
3
3
  export const assessJavaScriptSemanticQuery = (input) => ({
4
4
  status: queryStatus(input),
5
5
  coverage: queryCoverage(input),
6
6
  limitations: queryLimitations(input),
7
- acceptedLimitRanges: {
8
- max_seed_matches: { minimum: 1, maximum: 1_000 },
9
- max_nodes: { minimum: 1, maximum: 50_000 },
10
- max_edges: { minimum: 1, maximum: 100_000 },
11
- max_depth: { minimum: 0, maximum: 64 },
12
- max_functions: { minimum: 1, maximum: 10_000 },
13
- max_modules: { minimum: 1, maximum: 10_000 },
14
- max_unknowns: { minimum: 0, maximum: 10_000 },
15
- page_size: { minimum: 1, maximum: 1_000 },
16
- },
17
7
  });
18
8
  const queryCoverage = (input) => ({
19
9
  status: input.graph.coverage.status === "unavailable"
20
10
  ? "unavailable"
21
- : input.frontier.length > 0 || input.unknownsTruncated
22
- ? "truncated"
23
- : input.unknowns.length > 0 ||
24
- input.candidateRelations > 0 ||
25
- input.graph.coverage.status !== "complete"
26
- ? "partial"
27
- : "complete",
28
- frontier: [...input.frontier],
11
+ : input.unknowns.length > 0 ||
12
+ input.candidateRelations > 0 ||
13
+ input.graph.coverage.status !== "complete" ||
14
+ input.graph.coverage.truncated
15
+ ? "partial"
16
+ : "complete",
29
17
  });
30
18
  const queryStatus = (input) => {
31
19
  if (input.graph.coverage.status === "unavailable")
32
20
  return "unsupported";
33
- if (input.frontier.length > 0 || input.unknownsTruncated)
34
- return "truncated";
35
21
  if (input.candidateRelations > 0)
36
22
  return "ambiguous";
37
23
  if (input.totalSeeds === 0 ||
38
24
  (input.hasExpectation && input.expectedMatches === 0))
39
25
  return input.unknowns.length > 0 ||
40
- input.graph.coverage.status !== "complete"
26
+ input.graph.coverage.status !== "complete" ||
27
+ input.graph.coverage.truncated
41
28
  ? "partial"
42
29
  : "no-match";
43
30
  return input.totalSeeds > 1 ? "ambiguous" : "found";
@@ -45,26 +32,11 @@ const queryStatus = (input) => {
45
32
  const queryLimitations = (input) => uniqueSorted([
46
33
  "Semantic graph reachability is a static inference and does not prove runtime execution.",
47
34
  ...input.graph.limitations,
48
- ...(input.totalSeeds === input.retainedSeeds
49
- ? []
50
- : [
51
- "Seed matches exceeded caller bounds; omitted starts remain unexplored.",
52
- ]),
53
- ...(input.frontier.length === 0
54
- ? []
55
- : [
56
- "Traversal stopped at explicit caller limits; frontier facts remain unknown.",
57
- ]),
58
35
  ...(input.unknowns.length === 0
59
36
  ? []
60
37
  : [
61
38
  "Relevant dynamic, unsupported, incomplete, or ambiguous semantics remain unknown.",
62
39
  ]),
63
- ...(input.unknownsTruncated
64
- ? [
65
- "Relevant unknown frontiers exceeded the caller limit; omitted unknowns remain unresolved.",
66
- ]
67
- : []),
68
40
  ...(input.candidateRelations === 0
69
41
  ? []
70
42
  : [
@@ -1,9 +1,6 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import canonicalize from "canonicalize";
3
3
  import { compareCodePoints } from "./javascriptApplicationGraph.js";
4
- /** Caller cursor that cannot identify a page of the current semantic query. */
5
- export class JavaScriptSemanticQueryCursorError extends TypeError {
6
- }
7
4
  /** Canonical JSON used by semantic query commitments and ordering. */
8
5
  export const canonicalJavaScriptSemanticQueryJson = (value) => {
9
6
  const encoded = canonicalize(value);
@@ -15,9 +12,9 @@ const digest = (value) => createHash("sha256")
15
12
  .update(canonicalJavaScriptSemanticQueryJson(value))
16
13
  .digest("hex");
17
14
  const uniqueSorted = (values) => [...new Set(values)].sort(compareCodePoints);
18
- /** Derive the stable identity for one graph-bound query without its cursor. */
15
+ /** Derive the stable identity for one graph-bound query. */
19
16
  export const javaScriptSemanticQueryIdentifier = (graph, input) => {
20
- const { cursor: _cursor, ...semantic } = input;
17
+ const semantic = input;
21
18
  return `jsrq_${digest({
22
19
  source_graph_id: graph.graph_id,
23
20
  ...semantic,
@@ -32,24 +29,6 @@ export const javaScriptSemanticQueryIdentifier = (graph, input) => {
32
29
  },
33
30
  })}`;
34
31
  };
35
- /** Commit one deterministic relation-page offset to a query identity. */
36
- export const createJavaScriptSemanticQueryCursor = (queryId, offset) => `jsrqc_${String(offset)}_${digest({ query_id: queryId, offset })}`;
37
- /** Parse a query-bound cursor and reject stale, malformed, or foreign values. */
38
- export const parseJavaScriptSemanticQueryCursor = (cursor, queryId) => {
39
- if (cursor === null)
40
- return 0;
41
- const match = /^jsrqc_([0-9]+)_([a-f0-9]{64})$/u.exec(cursor);
42
- const offsetText = match?.[1];
43
- const commitment = match?.[2];
44
- if (offsetText === undefined || commitment === undefined)
45
- throw new JavaScriptSemanticQueryCursorError("Semantic query cursor is malformed");
46
- const offset = Number(offsetText);
47
- if (!Number.isSafeInteger(offset) ||
48
- offset < 0 ||
49
- commitment !== digest({ query_id: queryId, offset }))
50
- throw new JavaScriptSemanticQueryCursorError("Semantic query cursor does not match this query");
51
- return offset;
52
- };
53
32
  /** Resolve deterministic seed candidates without applying traversal limits. */
54
33
  export const resolveJavaScriptSemanticQuerySeeds = (graph, input) => {
55
34
  const fingerprintFunctions = new Set(input.seed.kind === "function"
@@ -27,32 +27,21 @@ export const javaScriptSemanticQuerySeedSchema = z.discriminatedUnion("kind", [
27
27
  }),
28
28
  z.strictObject({
29
29
  kind: z.literal("property"),
30
- name: z.string().min(1).max(4_096),
30
+ name: z.string().min(1),
31
31
  }),
32
32
  z.strictObject({
33
33
  kind: z.literal("endpoint"),
34
- value: z.string().min(1).max(16_384),
34
+ value: z.string().min(1),
35
35
  }),
36
36
  z.strictObject({
37
37
  kind: z.literal("event"),
38
- name: z.string().min(1).max(4_096),
38
+ name: z.string().min(1),
39
39
  }),
40
40
  z.strictObject({
41
41
  kind: z.literal("boundary-field"),
42
- field: z.string().min(1).max(4_096),
42
+ field: z.string().min(1),
43
43
  }),
44
44
  ]);
45
- /** Strict caller limits for deterministic bounded traversal. */
46
- export const javaScriptSemanticQueryLimitsSchema = z.strictObject({
47
- max_seed_matches: z.number().int().min(1).max(1_000).default(25),
48
- max_nodes: z.number().int().min(1).max(50_000).default(2_000),
49
- max_edges: z.number().int().min(1).max(100_000).default(4_000),
50
- max_depth: z.number().int().min(0).max(64).default(12),
51
- max_functions: z.number().int().min(1).max(10_000).default(500),
52
- max_modules: z.number().int().min(1).max(10_000).default(500),
53
- max_unknowns: z.number().int().min(0).max(10_000).default(1_000),
54
- page_size: z.number().int().min(1).max(1_000).default(200),
55
- });
56
45
  const sourceMapAuthoritySchema = z.strictObject({
57
46
  authority: z.literal("none"),
58
47
  });
@@ -68,121 +57,39 @@ export const javaScriptSemanticQueryInputSchema = z.strictObject({
68
57
  allowed_relations: z
69
58
  .array(z.enum(JAVASCRIPT_SEMANTIC_RELATIONS))
70
59
  .min(1)
71
- .max(JAVASCRIPT_SEMANTIC_RELATIONS.length)
72
60
  .optional(),
73
61
  include_ambiguous_dynamic_edges: z.boolean().default(false),
74
62
  expected: z
75
63
  .strictObject({
76
64
  role: z.enum(["source", "sink"]),
77
- classes: z.array(z.enum(JAVASCRIPT_SEMANTIC_NODE_KINDS)).min(1).max(24),
65
+ classes: z.array(z.enum(JAVASCRIPT_SEMANTIC_NODE_KINDS)).min(1),
78
66
  })
79
67
  .nullable()
80
68
  .default(null),
81
69
  source_map_authority: sourceMapAuthoritySchema.default({ authority: "none" }),
82
- limits: javaScriptSemanticQueryLimitsSchema.default({
83
- max_seed_matches: 25,
84
- max_nodes: 2_000,
85
- max_edges: 4_000,
86
- max_depth: 12,
87
- max_functions: 500,
88
- max_modules: 500,
89
- max_unknowns: 1_000,
90
- page_size: 200,
91
- }),
92
- cursor: z
93
- .string()
94
- .regex(/^jsrqc_[0-9]+_[a-f0-9]{64}$/u)
95
- .nullable()
96
- .default(null),
97
70
  });
98
- const queryFrontierSchema = z.strictObject({
99
- node_id: semanticNodeIdSchema,
100
- depth: z.number().int().min(0).max(65),
101
- reason: z.enum([
102
- "max-depth",
103
- "max-edges",
104
- "max-functions",
105
- "max-modules",
106
- "max-nodes",
107
- "max-seed-matches",
108
- ]),
109
- });
110
- /** Deterministic, pageable semantic trace result. */
71
+ /** Deterministic semantic trace result. */
111
72
  export const javaScriptSemanticQueryResultSchema = z.strictObject({
112
- schema_version: z.literal(1),
113
73
  query_id: z.string().regex(/^jsrq_[a-f0-9]{64}$/u),
114
74
  source_graph_id: z.string().regex(/^jsrg_[a-f0-9]{64}$/u),
115
75
  seed: javaScriptSemanticQuerySeedSchema,
116
76
  direction: javaScriptSemanticQueryInputSchema.shape.direction,
117
- status: z.enum([
118
- "found",
119
- "no-match",
120
- "ambiguous",
121
- "partial",
122
- "truncated",
123
- "unsupported",
124
- ]),
125
- seed_node_ids: z.array(semanticNodeIdSchema).max(1_000),
126
- nodes: z.array(javaScriptSemanticNodeSchema).max(3_000),
127
- relations: z.array(javaScriptSemanticRelationSchema).max(1_000),
128
- unknowns: z.array(javaScriptSemanticUnknownSchema).max(100_000),
129
- expected_match_node_ids: z.array(semanticNodeIdSchema).max(50_000),
77
+ status: z.enum(["found", "no-match", "ambiguous", "partial", "unsupported"]),
78
+ seed_node_ids: z.array(semanticNodeIdSchema),
79
+ nodes: z.array(javaScriptSemanticNodeSchema),
80
+ relations: z.array(javaScriptSemanticRelationSchema),
81
+ unknowns: z.array(javaScriptSemanticUnknownSchema),
82
+ expected_match_node_ids: z.array(semanticNodeIdSchema),
130
83
  summary: z.strictObject({
131
84
  total_seed_matches: z.number().int().min(0),
132
- retained_seed_matches: z.number().int().min(0),
133
85
  traversed_nodes: z.number().int().min(0),
134
86
  traversed_relations: z.number().int().min(0),
135
87
  traversed_functions: z.number().int().min(0),
136
88
  traversed_modules: z.number().int().min(0),
137
89
  relevant_unknowns: z.number().int().min(0),
138
- retained_unknowns: z.number().int().min(0).max(10_000),
139
90
  }),
140
91
  coverage: z.strictObject({
141
- status: z.enum(["complete", "partial", "truncated", "unavailable"]),
142
- frontier: z.array(queryFrontierSchema).max(100_000),
143
- }),
144
- page: z.strictObject({
145
- offset: z.number().int().min(0),
146
- size: z.number().int().min(0).max(1_000),
147
- next_cursor: z
148
- .string()
149
- .regex(/^jsrqc_[0-9]+_[a-f0-9]{64}$/u)
150
- .nullable(),
151
- }),
152
- applied_limits: javaScriptSemanticQueryLimitsSchema,
153
- accepted_limit_ranges: z.strictObject({
154
- max_seed_matches: z.strictObject({
155
- minimum: z.literal(1),
156
- maximum: z.literal(1_000),
157
- }),
158
- max_nodes: z.strictObject({
159
- minimum: z.literal(1),
160
- maximum: z.literal(50_000),
161
- }),
162
- max_edges: z.strictObject({
163
- minimum: z.literal(1),
164
- maximum: z.literal(100_000),
165
- }),
166
- max_depth: z.strictObject({
167
- minimum: z.literal(0),
168
- maximum: z.literal(64),
169
- }),
170
- max_functions: z.strictObject({
171
- minimum: z.literal(1),
172
- maximum: z.literal(10_000),
173
- }),
174
- max_modules: z.strictObject({
175
- minimum: z.literal(1),
176
- maximum: z.literal(10_000),
177
- }),
178
- max_unknowns: z.strictObject({
179
- minimum: z.literal(0),
180
- maximum: z.literal(10_000),
181
- }),
182
- page_size: z.strictObject({
183
- minimum: z.literal(1),
184
- maximum: z.literal(1_000),
185
- }),
92
+ status: z.enum(["complete", "partial", "unavailable"]),
186
93
  }),
187
- limitations: z.array(z.string().min(1).max(4_096)).max(1_000),
94
+ limitations: z.array(z.string().min(1)),
188
95
  });
@@ -1,7 +1,7 @@
1
1
  import * as t from "@babel/types";
2
2
  import { semanticStaticPropertyName } from "./javascriptSemanticProjection.js";
3
3
  import { resolveSemanticBindingState, } from "./javascriptSemanticState.js";
4
- import { dataEffectLimitReached, outerDataEffectBinding, traverseDataEffects, } from "./javascriptSemanticDataEffectHelpers.js";
4
+ import { outerDataEffectBinding, traverseDataEffects, } from "./javascriptSemanticDataEffectHelpers.js";
5
5
  import { range } from "./javascriptStaticAnalysisHelpers.js";
6
6
  const ACQUIRE_METHODS = [
7
7
  "open",
@@ -34,8 +34,6 @@ const collectAcquisitions = (program, context) => {
34
34
  const method = acquisitionMethod(node.callee, context.state);
35
35
  if (method === null)
36
36
  return;
37
- if (resourceLimitReached(output.length, context.state))
38
- return;
39
37
  output.push({
40
38
  node,
41
39
  method,
@@ -69,8 +67,6 @@ const collectReleases = (program, context, acquisitions) => {
69
67
  const linked = binding === undefined ? [] : (byBinding.get(binding.bindingId) ?? []);
70
68
  if (linked.length === 0)
71
69
  return;
72
- if (resourceLimitReached(acquisitions.length + output.length, context.state))
73
- return;
74
70
  output.push({
75
71
  resourceId: `resource:release:${String(node.start ?? -1)}:${String(node.end ?? -1)}`,
76
72
  kind: "release",
@@ -129,7 +125,6 @@ const resourceModule = (specifier) => [
129
125
  "node:tls",
130
126
  "tls",
131
127
  ].includes(specifier);
132
- const resourceLimitReached = (retained, state) => dataEffectLimitReached(retained, state.limits.maxResourceOperations, "maxResourceOperations", state);
133
128
  const resourceCandidateId = (candidate) => `resource:acquire:${String(candidate.node.start ?? -1)}:${String(candidate.node.end ?? -1)}`;
134
129
  const memberCallee = (node) => t.isMemberExpression(node.callee) || t.isOptionalMemberExpression(node.callee)
135
130
  ? node.callee
@@ -1,13 +1,13 @@
1
1
  import * as t from "@babel/types";
2
- import { reachSemanticLimit, semanticCallableIdForNode, } from "./javascriptSemanticProjection.js";
2
+ import { semanticCallableIdForNode } from "./javascriptSemanticProjection.js";
3
3
  import { resolveSemanticBindingState, } from "./javascriptSemanticState.js";
4
4
  import { evaluateSemanticExpression } from "./javascriptSemanticValues.js";
5
5
  import { compareCodePoints, range } from "./javascriptStaticAnalysisHelpers.js";
6
+ import { semanticReturnCoverage } from "./javascriptSemanticCoverage.js";
6
7
  import { traverseJavaScriptAst } from "./javascriptSemanticTraversal.js";
7
- /** Evaluate bounded direct returns while excluding every nested callable. */
8
+ /** Evaluate direct returns while excluding every nested callable. */
8
9
  export const collectSemanticReturns = (program, state, parserPartial) => {
9
10
  const nodes = callableNodes(program);
10
- let retained = 0;
11
11
  return state.callables.map((callable) => {
12
12
  const node = nodes.get(callable.callableId);
13
13
  if (node === undefined)
@@ -17,19 +17,11 @@ export const collectSemanticReturns = (program, state, parserPartial) => {
17
17
  status: "partial",
18
18
  retainedCount: 0,
19
19
  omittedCount: null,
20
- limitsReached: [],
21
20
  },
22
21
  };
23
22
  const expressions = directReturnExpressions(node);
24
23
  const sites = [];
25
- let omitted = 0;
26
24
  for (const expression of expressions) {
27
- if (retained >= state.limits.maxReturnSites) {
28
- omitted += 1;
29
- reachSemanticLimit(state, "maxReturnSites");
30
- continue;
31
- }
32
- retained += 1;
33
25
  sites.push({
34
26
  returnSiteId: semanticReturnSiteId(callable.callableId, expression.location),
35
27
  location: expression.location,
@@ -44,12 +36,7 @@ export const collectSemanticReturns = (program, state, parserPartial) => {
44
36
  return {
45
37
  ...callable,
46
38
  returnSites: sites,
47
- returnCoverage: {
48
- status: omitted > 0 ? "truncated" : parserPartial ? "partial" : "complete",
49
- retainedCount: sites.length,
50
- omittedCount: omitted,
51
- limitsReached: omitted > 0 ? ["maxReturnSites"] : [],
52
- },
39
+ returnCoverage: semanticReturnCoverage(sites.length, parserPartial),
53
40
  };
54
41
  });
55
42
  };
@@ -164,21 +151,17 @@ const flattenValue = (value, path, fields, coverage) => {
164
151
  return;
165
152
  }
166
153
  if (value.status === "object") {
167
- coverage.push({
168
- path,
169
- status: value.unknownProperties ? "partial" : "complete",
170
- omitted: value.omittedProperties,
171
- });
154
+ coverage.push(value.unknownProperties
155
+ ? { path, status: "partial", omitted: value.omittedProperties }
156
+ : { path, status: "complete", omitted: 0 });
172
157
  for (const property of value.properties)
173
158
  flattenValue(property.value, `${path}/${escapePointer(property.name)}`, fields, coverage);
174
159
  return;
175
160
  }
176
161
  if (value.status === "array") {
177
- coverage.push({
178
- path,
179
- status: value.unknownItems ? "partial" : "complete",
180
- omitted: value.omittedItems,
181
- });
162
+ coverage.push(value.unknownItems
163
+ ? { path, status: "partial", omitted: value.omittedItems }
164
+ : { path, status: "complete", omitted: 0 });
182
165
  value.items.forEach((item, index) => flattenValue(item, `${path}/${String(index)}`, fields, coverage));
183
166
  return;
184
167
  }
@@ -0,0 +1 @@
1
+ export {};