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
@@ -8,15 +8,12 @@ export const compareSourceToBundle = (input) => {
8
8
  const mappings = compareMappings(input, projection);
9
9
  const factors = {
10
10
  ...projection.factors,
11
- omittedCandidateEvaluations: mappings.omittedCandidateEvaluations,
12
- omittedCandidateReferences: mappings.omittedCandidateReferences,
13
11
  };
14
12
  const mappedCurrentIds = new Set(mappings.items.flatMap(({ current_node_ids: nodeIds }) => nodeIds));
15
13
  const unmappedCurrentNodeIds = projection.currentNodes
16
14
  .map(({ node_id: nodeId }) => nodeId)
17
15
  .filter((nodeId) => !mappedCurrentIds.has(nodeId));
18
16
  const semanticResult = {
19
- schema_version: 1,
20
17
  reference: {
21
18
  root_sha256: input.reference.root_sha256,
22
19
  inventory_state: input.reference.inventory_state,
@@ -42,10 +39,8 @@ export const compareSourceToBundle = (input) => {
42
39
  const projectComparison = (input) => {
43
40
  const allSources = historicalSourceFiles(input.reference);
44
41
  const allCurrentNodes = sourceBearingNodes(input.application.graph.nodes);
45
- const sources = allSources.slice(0, input.limits.max_source_files);
46
- const currentNodes = allCurrentNodes.slice(0, input.limits.max_application_nodes);
47
- const omittedSourceFiles = allSources.length - sources.length;
48
- const omittedApplicationNodes = allCurrentNodes.length - currentNodes.length;
42
+ const sources = allSources;
43
+ const currentNodes = allCurrentNodes;
49
44
  const index = buildSourceToBundleCandidateIndex(currentNodes);
50
45
  return {
51
46
  sources,
@@ -53,41 +48,23 @@ const projectComparison = (input) => {
53
48
  index,
54
49
  absenceComplete: input.reference.inventory_state === "complete" &&
55
50
  input.application.graph.coverage.status === "complete" &&
56
- !input.application.graph.coverage.truncated &&
57
- omittedSourceFiles === 0 &&
58
- omittedApplicationNodes === 0 &&
59
- !index.pathIndexTruncated,
51
+ !input.application.graph.coverage.truncated,
60
52
  factors: {
61
53
  input,
62
- omittedSourceFiles,
63
- omittedApplicationNodes,
64
- omittedCandidateEvaluations: 0,
65
- omittedCandidateReferences: 0,
66
- pathIndexTruncated: index.pathIndexTruncated,
67
54
  },
68
55
  };
69
56
  };
70
57
  const compareMappings = (input, projection) => {
71
- let evaluationsRemaining = input.limits.max_candidate_evaluations;
72
58
  let candidateEvaluations = 0;
73
- let omittedCandidateEvaluations = 0;
74
- let omittedCandidateReferences = 0;
75
59
  const provisionalItems = [];
76
60
  for (const source of projection.sources) {
77
61
  const candidateIds = candidateIdsForSource(source, projection.index);
78
- const retainedIds = candidateIds.slice(0, evaluationsRemaining);
79
- const omittedEvaluations = candidateIds.length - retainedIds.length;
80
- evaluationsRemaining -= retainedIds.length;
81
- candidateEvaluations += retainedIds.length;
82
- omittedCandidateEvaluations += omittedEvaluations;
83
- const scored = retainedIds
62
+ candidateEvaluations += candidateIds.length;
63
+ const scored = candidateIds
84
64
  .map((nodeId) => scoreSourceToBundleCandidate(source, nodeId, projection.index))
85
65
  .filter((candidate) => candidate !== null)
86
66
  .sort(compareCandidates);
87
- const retainedCandidates = scored.slice(0, input.limits.max_candidate_nodes);
88
- const omittedCandidates = omittedEvaluations + scored.length - retainedCandidates.length;
89
- omittedCandidateReferences += omittedCandidates;
90
- const classification = classifyMapping(retainedCandidates, omittedCandidates === 0, projection.absenceComplete);
67
+ const classification = classifyMapping(scored, projection.absenceComplete);
91
68
  const semantic = {
92
69
  source_path: source.path,
93
70
  source_sha256: source.sha256,
@@ -95,16 +72,10 @@ const compareMappings = (input, projection) => {
95
72
  status: classification.status,
96
73
  confidence: classification.confidence,
97
74
  current_node_ids: classification.currentNodeIds,
98
- candidates: retainedCandidates,
99
- omitted_candidates: omittedCandidates,
75
+ candidates: scored,
100
76
  limitations: uniqueSorted([
101
77
  ...source.limitations,
102
78
  ...classification.limitations,
103
- ...(omittedCandidates > 0
104
- ? [
105
- `${String(omittedCandidates)} candidate references were omitted by comparison limits.`,
106
- ]
107
- : []),
108
79
  ]),
109
80
  };
110
81
  provisionalItems.push({
@@ -115,8 +86,6 @@ const compareMappings = (input, projection) => {
115
86
  return {
116
87
  items: markMergedMappings(input, provisionalItems),
117
88
  candidateEvaluations,
118
- omittedCandidateEvaluations,
119
- omittedCandidateReferences,
120
89
  };
121
90
  };
122
91
  const comparisonCoverage = (projection, mappings, factors) => ({
@@ -124,32 +93,18 @@ const comparisonCoverage = (projection, mappings, factors) => ({
124
93
  reference_inventory_state: factors.input.reference.inventory_state,
125
94
  application_graph_status: factors.input.application.graph.coverage.status,
126
95
  retained_source_files: projection.sources.length,
127
- omitted_source_files: factors.omittedSourceFiles,
128
96
  retained_application_nodes: projection.currentNodes.length,
129
- omitted_application_nodes: factors.omittedApplicationNodes,
130
97
  candidate_evaluations: mappings.candidateEvaluations,
131
- omitted_candidate_evaluations: mappings.omittedCandidateEvaluations,
132
- omitted_candidate_references: mappings.omittedCandidateReferences,
133
- omitted_unmapped_current_nodes: 0,
134
98
  });
135
99
  const scoringModel = () => ({
136
- algorithm: "rea-source-to-bundle-signals/v1",
100
+ algorithm: "rea-source-to-bundle-signals",
137
101
  minimum_candidate_score: 20,
138
- weights: Object.entries(SOURCE_TO_BUNDLE_SIGNAL_WEIGHTS).map(([signal, weight]) => ({
139
- signal: signal,
102
+ weights: SOURCE_TO_BUNDLE_SIGNAL_WEIGHTS.map(([signal, weight]) => ({
103
+ signal,
140
104
  weight,
141
105
  })),
142
106
  });
143
- const classifyMapping = (candidates, evaluationComplete, absenceComplete) => {
144
- if (!evaluationComplete)
145
- return {
146
- status: "unknown",
147
- confidence: "unknown",
148
- currentNodeIds: [],
149
- limitations: [
150
- "Candidate evaluation stopped at the declared limit; a stronger match may be omitted.",
151
- ],
152
- };
107
+ const classifyMapping = (candidates, absenceComplete) => {
153
108
  const exact = candidates.filter((candidate) => hasSignal(candidate, "exact-source-digest"));
154
109
  if (exact.length === 1)
155
110
  return {
@@ -271,12 +226,6 @@ const comparisonSummary = (items) => ({
271
226
  });
272
227
  const countStatus = (items, status) => items.filter((item) => item.status === status).length;
273
228
  const coverageStatus = (factors) => {
274
- if (factors.omittedSourceFiles > 0 ||
275
- factors.omittedApplicationNodes > 0 ||
276
- factors.omittedCandidateEvaluations > 0 ||
277
- factors.omittedCandidateReferences > 0 ||
278
- factors.pathIndexTruncated)
279
- return "truncated";
280
229
  return factors.input.reference.inventory_state === "complete" &&
281
230
  factors.input.application.graph.coverage.status === "complete"
282
231
  ? "complete-within-inputs"
@@ -296,31 +245,6 @@ const comparisonLimitations = (factors) => uniqueSorted([
296
245
  : [
297
246
  `Application graph coverage is ${factors.input.application.graph.coverage.status}; unmatched files remain unknown.`,
298
247
  ]),
299
- ...(factors.omittedSourceFiles > 0
300
- ? [
301
- `${String(factors.omittedSourceFiles)} historical source files were omitted by max_source_files.`,
302
- ]
303
- : []),
304
- ...(factors.omittedApplicationNodes > 0
305
- ? [
306
- `${String(factors.omittedApplicationNodes)} source-bearing application nodes were omitted by max_application_nodes.`,
307
- ]
308
- : []),
309
- ...(factors.omittedCandidateEvaluations > 0
310
- ? [
311
- `${String(factors.omittedCandidateEvaluations)} candidate evaluations were omitted by max_candidate_evaluations.`,
312
- ]
313
- : []),
314
- ...(factors.omittedCandidateReferences > 0
315
- ? [
316
- `${String(factors.omittedCandidateReferences)} candidate references were omitted from item output.`,
317
- ]
318
- : []),
319
- ...(factors.pathIndexTruncated
320
- ? [
321
- "At least one current path exceeded the 128-segment suffix index bound.",
322
- ]
323
- : []),
324
248
  ]);
325
249
  const hasSignal = (candidate, kind) => candidate.signals.some((signal) => signal.kind === kind);
326
250
  const compareCandidates = (left, right) => right.score - left.score ||
@@ -5,15 +5,15 @@ import { historicalSourceGraphSchema } from "./referenceSourceGraph.js";
5
5
  const digestSchema = z.string().regex(/^[a-f0-9]{64}$/u);
6
6
  const evidenceIdSchema = z.string().regex(/^ev_[a-f0-9]{64}$/u);
7
7
  const nodeIdSchema = z.string().regex(/^jag_node_[a-f0-9]{64}$/u);
8
- const boundedTextSchema = z.string().min(1).max(4_096);
9
- export const SOURCE_TO_BUNDLE_SIGNAL_WEIGHTS = {
10
- "exact-source-digest": 100,
11
- "source-map-original-path": 70,
12
- "current-path-exact": 60,
13
- "current-path-suffix": 40,
14
- "basename-match": 20,
15
- "language-extension": 5,
16
- };
8
+ const textSchema = z.string().min(1);
9
+ export const SOURCE_TO_BUNDLE_SIGNAL_WEIGHTS = [
10
+ ["exact-source-digest", 100],
11
+ ["source-map-original-path", 70],
12
+ ["current-path-exact", 60],
13
+ ["current-path-suffix", 40],
14
+ ["basename-match", 20],
15
+ ["language-extension", 5],
16
+ ];
17
17
  const sourceToBundleSignalKindSchema = z.enum([
18
18
  "exact-source-digest",
19
19
  "source-map-original-path",
@@ -22,47 +22,29 @@ const sourceToBundleSignalKindSchema = z.enum([
22
22
  "basename-match",
23
23
  "language-extension",
24
24
  ]);
25
- const sourceToBundleLimitsSchema = z.strictObject({
26
- max_source_files: z.number().int().min(1).max(100_000).default(10_000),
27
- max_application_nodes: z.number().int().min(1).max(100_000).default(20_000),
28
- max_candidate_nodes: z.number().int().min(1).max(1_000).default(100),
29
- max_candidate_evaluations: z
30
- .number()
31
- .int()
32
- .min(1)
33
- .max(10_000_000)
34
- .default(1_000_000),
35
- });
36
- /** Historical source inventory, authenticated application Evidence, and bounds. */
25
+ /** Historical source inventory and authenticated application Evidence. */
37
26
  export const compareSourceToBundleInputSchema = z.strictObject({
38
27
  reference: historicalSourceGraphSchema,
39
28
  application: evidenceSchema,
40
- limits: sourceToBundleLimitsSchema.default({
41
- max_source_files: 10_000,
42
- max_application_nodes: 20_000,
43
- max_candidate_nodes: 100,
44
- max_candidate_evaluations: 1_000_000,
45
- }),
46
- unknown_registry_approved: z.literal(true).optional(),
47
29
  });
48
30
  const sourceToBundleSignalSchema = z.strictObject({
49
31
  kind: sourceToBundleSignalKindSchema,
50
32
  weight: z.number().int().min(1).max(100),
51
- source_value: boundedTextSchema,
52
- current_values: z.array(boundedTextSchema).min(1).max(64),
33
+ source_value: textSchema,
34
+ current_values: z.array(textSchema).min(1),
53
35
  });
54
36
  const sourceToBundleCandidateSchema = z.strictObject({
55
37
  current_node_id: nodeIdSchema,
56
38
  current_node_kind: z.enum(JAVASCRIPT_APPLICATION_NODE_KINDS),
57
- score: z.number().int().min(1).max(300),
39
+ score: z.number().int().min(1),
58
40
  confidence: z.enum(["exact", "high", "medium", "low"]),
59
- signals: z.array(sourceToBundleSignalSchema).min(1).max(6),
41
+ signals: z.array(sourceToBundleSignalSchema).min(1),
60
42
  });
61
43
  const sourceToBundleItemSchema = z.strictObject({
62
44
  mapping_id: z.string().regex(/^stbc_item_[a-f0-9]{64}$/u),
63
- source_path: boundedTextSchema,
45
+ source_path: textSchema,
64
46
  source_sha256: digestSchema.nullable(),
65
- source_language: z.string().min(1).max(100).nullable(),
47
+ source_language: textSchema.nullable(),
66
48
  status: z.enum([
67
49
  "unchanged",
68
50
  "modified",
@@ -73,14 +55,12 @@ const sourceToBundleItemSchema = z.strictObject({
73
55
  "unknown",
74
56
  ]),
75
57
  confidence: z.enum(["exact", "high", "medium", "unknown"]),
76
- current_node_ids: z.array(nodeIdSchema).max(1_000),
77
- candidates: z.array(sourceToBundleCandidateSchema).max(1_000),
78
- omitted_candidates: z.number().int().min(0),
79
- limitations: z.array(boundedTextSchema).max(100),
58
+ current_node_ids: z.array(nodeIdSchema),
59
+ candidates: z.array(sourceToBundleCandidateSchema),
60
+ limitations: z.array(textSchema),
80
61
  });
81
62
  /** Deterministic, evidence-bearing historical-source to shipped-bundle comparison. */
82
63
  export const sourceToBundleComparisonResultSchema = z.strictObject({
83
- schema_version: z.literal(1),
84
64
  comparison_id: z.string().regex(/^stbc_[a-f0-9]{64}$/u),
85
65
  reference: z.strictObject({
86
66
  root_sha256: digestSchema,
@@ -92,7 +72,7 @@ export const sourceToBundleComparisonResultSchema = z.strictObject({
92
72
  root_artifact_sha256: digestSchema,
93
73
  }),
94
74
  scoring: z.strictObject({
95
- algorithm: z.literal("rea-source-to-bundle-signals/v1"),
75
+ algorithm: z.literal("rea-source-to-bundle-signals"),
96
76
  minimum_candidate_score: z.literal(20),
97
77
  weights: z.array(z.strictObject({
98
78
  signal: sourceToBundleSignalKindSchema,
@@ -108,10 +88,10 @@ export const sourceToBundleComparisonResultSchema = z.strictObject({
108
88
  duplicated: z.number().int().min(0),
109
89
  unknown: z.number().int().min(0),
110
90
  }),
111
- items: z.array(sourceToBundleItemSchema).max(100_000),
112
- unmapped_current_node_ids: z.array(nodeIdSchema).max(100_000),
91
+ items: z.array(sourceToBundleItemSchema),
92
+ unmapped_current_node_ids: z.array(nodeIdSchema),
113
93
  coverage: z.strictObject({
114
- status: z.enum(["complete-within-inputs", "partial", "truncated"]),
94
+ status: z.enum(["complete-within-inputs", "partial"]),
115
95
  reference_inventory_state: z.enum(["complete", "partial", "unknown"]),
116
96
  application_graph_status: z.enum([
117
97
  "complete",
@@ -120,14 +100,9 @@ export const sourceToBundleComparisonResultSchema = z.strictObject({
120
100
  "unavailable",
121
101
  ]),
122
102
  retained_source_files: z.number().int().min(0),
123
- omitted_source_files: z.number().int().min(0),
124
103
  retained_application_nodes: z.number().int().min(0),
125
- omitted_application_nodes: z.number().int().min(0),
126
104
  candidate_evaluations: z.number().int().min(0),
127
- omitted_candidate_evaluations: z.number().int().min(0),
128
- omitted_candidate_references: z.number().int().min(0),
129
- omitted_unmapped_current_nodes: z.number().int().min(0),
130
105
  }),
131
- evidence_links: z.array(evidenceIdSchema).min(1).max(1),
132
- limitations: z.array(boundedTextSchema).max(1_000),
106
+ evidence_links: z.array(evidenceIdSchema).length(1),
107
+ limitations: z.array(textSchema),
133
108
  });
@@ -13,7 +13,12 @@ const PATH_PROPERTIES = [
13
13
  "resolved_path",
14
14
  "declared_path",
15
15
  ];
16
- const MAX_PATH_SUFFIXES = 128;
16
+ const signalWeight = (kind) => {
17
+ const entry = SOURCE_TO_BUNDLE_SIGNAL_WEIGHTS.find(([signal]) => signal === kind);
18
+ if (entry === undefined)
19
+ throw new TypeError(`Missing source-to-bundle signal weight: ${kind}`);
20
+ return entry[1];
21
+ };
17
22
  /** Keep source-bearing application nodes in stable identifier order. */
18
23
  export const sourceBearingNodes = (nodes) => nodes
19
24
  .filter(({ kind }) => RELEVANT_NODE_KINDS.has(kind))
@@ -22,20 +27,17 @@ export const sourceBearingNodes = (nodes) => nodes
22
27
  export const historicalSourceFiles = (graph) => graph.entries
23
28
  .filter((entry) => entry.kind === "file" && entry.classifications.includes("source"))
24
29
  .sort((left, right) => compareText(left.path, right.path));
25
- /** Build bounded-key indices without assigning fuzzy matches. */
30
+ /** Build deterministic candidate indices without assigning fuzzy matches. */
26
31
  export const buildSourceToBundleCandidateIndex = (nodes) => {
27
32
  const projections = nodes.map(projectCurrentNode);
28
33
  const byDigest = new Map();
29
34
  const byPathSuffix = new Map();
30
35
  const byBasename = new Map();
31
- let pathIndexTruncated = false;
32
36
  for (const projection of projections) {
33
37
  for (const digest of projection.digests)
34
38
  addIndexValue(byDigest, digest, projection.node.node_id);
35
39
  for (const path of projection.paths) {
36
- const suffixes = pathSuffixes(path.value);
37
- pathIndexTruncated ||= suffixes.truncated;
38
- for (const suffix of suffixes.values)
40
+ for (const suffix of pathSuffixes(path.value))
39
41
  addIndexValue(byPathSuffix, suffix, projection.node.node_id);
40
42
  addIndexValue(byBasename, posix.basename(path.value), projection.node.node_id);
41
43
  }
@@ -45,7 +47,6 @@ export const buildSourceToBundleCandidateIndex = (nodes) => {
45
47
  byDigest,
46
48
  byPathSuffix,
47
49
  byBasename,
48
- pathIndexTruncated,
49
50
  };
50
51
  };
51
52
  /** Candidate identifiers ordered by strongest available signal, then ID. */
@@ -145,9 +146,9 @@ const candidateSignals = (source, current) => {
145
146
  };
146
147
  const signal = (kind, sourceValue, currentValues) => ({
147
148
  kind,
148
- weight: SOURCE_TO_BUNDLE_SIGNAL_WEIGHTS[kind],
149
+ weight: signalWeight(kind),
149
150
  source_value: sourceValue,
150
- current_values: [...new Set(currentValues)].sort(compareText).slice(0, 64),
151
+ current_values: [...new Set(currentValues)].sort(compareText),
151
152
  });
152
153
  const candidateConfidence = (signals) => {
153
154
  const kinds = new Set(signals.map(({ kind }) => kind));
@@ -185,13 +186,7 @@ const uniquePaths = (paths) => [
185
186
  ].sort((left, right) => compareText(`${left.kind}\0${left.value}`, `${right.kind}\0${right.value}`));
186
187
  const pathSuffixes = (path) => {
187
188
  const parts = path.split("/");
188
- const start = Math.max(0, parts.length - MAX_PATH_SUFFIXES);
189
- return {
190
- values: parts
191
- .slice(start)
192
- .map((_, index) => parts.slice(start + index).join("/")),
193
- truncated: start > 0,
194
- };
189
+ return parts.map((_, index) => parts.slice(index).join("/"));
195
190
  };
196
191
  const addIndexValue = (index, key, nodeId) => {
197
192
  const values = index.get(key) ?? new Set();
@@ -39,7 +39,7 @@ const observedPatternSchema = z.enum([
39
39
  const artifactSelectorSchema = z
40
40
  .object({
41
41
  kind: z.literal("artifact"),
42
- logical_path: z.string().min(1).max(4_096),
42
+ logical_path: z.string().min(1),
43
43
  })
44
44
  .strict();
45
45
  const functionSelectorSchema = z
@@ -66,21 +66,18 @@ const mappingSchema = z
66
66
  side_alignment: z.enum(["left_to_left", "left_to_right"]),
67
67
  hypothesis: z
68
68
  .object({
69
- statement: z.string().trim().min(1).max(500),
69
+ statement: z.string().trim().min(1),
70
70
  expected_pattern: expectedPatternSchema,
71
71
  })
72
72
  .strict(),
73
73
  })
74
74
  .strict();
75
- /** Strict bounded input for explicit static/runtime hypothesis correlation. */
75
+ /** Strict input for explicit static/runtime hypothesis correlation. */
76
76
  export const staticRuntimeCorrelationInputSchema = z
77
77
  .object({
78
- static_comparisons: z.array(evidenceSchema).min(1).max(100),
79
- runtime_comparisons: z.array(evidenceSchema).min(1).max(100),
80
- mappings: z.array(mappingSchema).min(1).max(500),
81
- offset: z.number().int().min(0).default(0),
82
- limit: z.number().int().min(1).max(100).default(100),
83
- unknown_registry_approved: z.literal(true).optional(),
78
+ static_comparisons: z.array(evidenceSchema).min(1),
79
+ runtime_comparisons: z.array(evidenceSchema).min(1),
80
+ mappings: z.array(mappingSchema).min(1),
84
81
  })
85
82
  .strict();
86
83
  const correlationItemSchema = z.object({
@@ -102,15 +99,15 @@ const correlationItemSchema = z.object({
102
99
  }),
103
100
  side_alignment: z.enum(["left_to_left", "left_to_right"]),
104
101
  hypothesis: z.object({
105
- statement: z.string().min(1).max(500),
102
+ statement: z.string().min(1),
106
103
  expected_pattern: expectedPatternSchema,
107
104
  }),
108
105
  observed_pattern: observedPatternSchema,
109
106
  classification: z.enum(["hypothesis", "contradiction", "unresolved_branch"]),
110
- evidence_links: z.array(evidenceIdSchema).min(2).max(20_100),
107
+ evidence_links: z.array(evidenceIdSchema).min(2),
111
108
  limitations: z.array(z.string()),
112
109
  });
113
- /** Deterministic, paginated static/runtime correlation payload. */
110
+ /** Deterministic static/runtime correlation payload. */
114
111
  export const staticRuntimeCorrelationResultSchema = z.object({
115
112
  status: z.enum(["correlated", "contradicted", "unknown", "truncated"]),
116
113
  summary: z.object({
@@ -119,28 +116,24 @@ export const staticRuntimeCorrelationResultSchema = z.object({
119
116
  unresolved: z.number().int().min(0),
120
117
  }),
121
118
  correlations: z.object({
122
- items: z.array(correlationItemSchema).max(100),
123
- offset: z.number().int().min(0),
124
- limit: z.number().int().min(1).max(100),
125
- total: z.number().int().min(0),
126
- next_offset: z.number().int().min(0).nullable(),
119
+ items: z.array(correlationItemSchema),
127
120
  }),
128
- evidence_links: z.array(evidenceIdSchema).min(2).max(20_100),
121
+ evidence_links: z.array(evidenceIdSchema).min(2),
129
122
  limitations: z.array(z.string()),
130
123
  });
131
124
  const EXPECTED = {
132
125
  compare_artifacts: [
133
- "rea.artifact-comparison/v1",
126
+ "rea.artifact-comparison",
134
127
  "rea-artifact-comparison",
135
128
  "REA artifact comparison",
136
129
  ],
137
130
  compare_functions: [
138
- "rea.function-comparison/v1",
131
+ "rea.function-comparison",
139
132
  "rea-function-comparison",
140
133
  "REA function comparison",
141
134
  ],
142
135
  compare_process_captures: [
143
- ["rea.process-comparison/v3", "rea.process-comparison/v4"],
136
+ "rea.process-comparison",
144
137
  "rea-process",
145
138
  "REA deterministic process harness",
146
139
  ],
@@ -160,10 +153,7 @@ export const correlateStaticAndRuntime = (input) => {
160
153
  if (new Set(correlations.map(({ correlation_id: id }) => id)).size !==
161
154
  correlations.length)
162
155
  throw new TypeError("Static/runtime correlation rejects duplicate mappings");
163
- const page = correlations.slice(parsed.offset, parsed.offset + parsed.limit);
164
156
  const links = uniqueSorted(correlations.flatMap(({ evidence_links: evidenceLinks }) => evidenceLinks));
165
- if (links.length > 20_100)
166
- throw new TypeError("Static/runtime Evidence closure exceeds limit");
167
157
  const unresolved = correlations.filter(({ classification }) => classification === "unresolved_branch");
168
158
  const contradictions = correlations.filter(({ classification }) => classification === "contradiction");
169
159
  return staticRuntimeCorrelationResultSchema.parse({
@@ -180,13 +170,7 @@ export const correlateStaticAndRuntime = (input) => {
180
170
  unresolved: unresolved.length,
181
171
  },
182
172
  correlations: {
183
- items: page,
184
- offset: parsed.offset,
185
- limit: parsed.limit,
186
- total: correlations.length,
187
- next_offset: parsed.offset + page.length < correlations.length
188
- ? parsed.offset + page.length
189
- : null,
173
+ items: correlations,
190
174
  },
191
175
  evidence_links: links,
192
176
  limitations: [
@@ -242,24 +226,22 @@ const selectStatic = (evidence, selector) => {
242
226
  throw new TypeError("Function selector requires function comparison Evidence");
243
227
  const result = functionComparisonResultSchema.parse(evidence.normalized_result);
244
228
  const matches = result.dimensions.filter(({ dimension }) => dimension === selector.dimension);
245
- if (matches.length !== 1)
229
+ const match = matches.at(0);
230
+ if (matches.length !== 1 || match === undefined)
246
231
  throw new TypeError("Function selector must resolve exactly once");
247
232
  return {
248
- status: matches[0].status,
249
- conclusion_kind: matches[0].conclusion_kind,
233
+ status: match.status,
234
+ conclusion_kind: match.conclusion_kind,
250
235
  };
251
236
  }
252
237
  if (evidence.operation !== "compare_artifacts")
253
238
  throw new TypeError("Artifact selector requires artifact comparison Evidence");
254
239
  const result = artifactComparisonResultSchema.parse(evidence.normalized_result);
255
- if (result.changes.offset !== 0 ||
256
- result.changes.next_offset !== null ||
257
- result.changes.items.length !== result.changes.total)
258
- throw new TypeError("Static/runtime correlation requires complete artifact comparison pagination");
259
- const matches = result.changes.items.filter(({ logical_path: path }) => path === selector.logical_path);
260
- if (matches.length !== 1)
240
+ const matches = result.changes.filter(({ logical_path: path }) => path === selector.logical_path);
241
+ const match = matches.at(0);
242
+ if (matches.length !== 1 || match === undefined)
261
243
  throw new TypeError("Artifact selector must resolve exactly one reported delta");
262
- const status = matches[0].classification;
244
+ const status = match.classification;
263
245
  return {
264
246
  status,
265
247
  conclusion_kind: status === "contradiction"
@@ -277,8 +259,7 @@ const parseStatic = (input) => {
277
259
  assertComparisonIdentity(evidence);
278
260
  if (evidence.operation === "compare_artifacts") {
279
261
  const result = artifactComparisonResultSchema.parse(evidence.normalized_result);
280
- assertCompleteArtifactResult(result);
281
- assertNestedLinks(evidence, result.changes.items.flatMap(({ evidence_links: links }) => links));
262
+ assertNestedLinks(evidence, result.changes.flatMap(({ evidence_links: links }) => links));
282
263
  }
283
264
  else {
284
265
  const result = functionComparisonResultSchema.parse(evidence.normalized_result);
@@ -332,21 +313,30 @@ const comparisonParameterLinks = (evidence) => {
332
313
  }
333
314
  const parameters = z
334
315
  .object({
335
- left_evidence_ids: z.array(evidenceIdSchema).min(1).max(100),
336
- right_evidence_ids: z.array(evidenceIdSchema).min(1).max(100),
316
+ left_evidence_id: evidenceIdSchema.optional(),
317
+ right_evidence_id: evidenceIdSchema.optional(),
318
+ left_evidence_ids: z.array(evidenceIdSchema).min(1).optional(),
319
+ right_evidence_ids: z.array(evidenceIdSchema).min(1).optional(),
337
320
  })
338
321
  .passthrough()
339
322
  .parse(evidence.parameters);
340
- return [...parameters.left_evidence_ids, ...parameters.right_evidence_ids];
323
+ const left = parameters.left_evidence_id === undefined
324
+ ? (parameters.left_evidence_ids ?? [])
325
+ : [parameters.left_evidence_id];
326
+ const right = parameters.right_evidence_id === undefined
327
+ ? (parameters.right_evidence_ids ?? [])
328
+ : [parameters.right_evidence_id];
329
+ if (left.length === 0 || right.length === 0)
330
+ throw new TypeError("Comparison Evidence omitted its source parameters");
331
+ return [...left, ...right];
341
332
  };
342
- const sameSet = (left, right) => left.length === right.length &&
343
- new Set(left).size === left.length &&
344
- left.every((item) => right.includes(item));
345
- const assertCompleteArtifactResult = (result) => {
346
- if (result.changes.offset !== 0 ||
347
- result.changes.next_offset !== null ||
348
- result.changes.items.length !== result.changes.total)
349
- throw new TypeError("Static/runtime correlation requires complete artifact comparison pagination");
333
+ const sameSet = (left, right) => {
334
+ if (left.length !== right.length)
335
+ return false;
336
+ const rightSet = new Set(right);
337
+ return (rightSet.size === right.length &&
338
+ new Set(left).size === left.length &&
339
+ left.every((item) => rightSet.has(item)));
350
340
  };
351
341
  const observedPattern = (staticStatus, runtimeStatus) => {
352
342
  if (staticStatus === "truncated" || runtimeStatus === "truncated")
@@ -1,16 +1,3 @@
1
- const MAX_SCANNED_SYMBOLS = 5_000;
2
- const MAX_RETURNED_SYMBOLS = 100;
3
- /** Select Swift class symbols using the legacy `_TtC` convention. */
4
- export const discoverSwiftClasses = (procedures, pattern) => {
5
- const classes = procedures
6
- .slice(0, MAX_SCANNED_SYMBOLS)
7
- .filter(({ name }) => name.includes("_TtC"))
8
- .filter(({ name }) => pattern.length === 0 || name.includes(pattern));
9
- return {
10
- count: classes.length,
11
- classes: classes.slice(0, MAX_RETURNED_SYMBOLS).map(toJsonEntry),
12
- };
13
- };
14
1
  /** Select and deduplicate Objective-C class labels. */
15
2
  export const discoverObjcClasses = (names, pattern) => {
16
3
  const classes = uniqueByName(names
@@ -18,7 +5,7 @@ export const discoverObjcClasses = (names, pattern) => {
18
5
  .filter(({ name }) => pattern.length === 0 || name.includes(pattern)));
19
6
  return {
20
7
  count: classes.length,
21
- classes: classes.slice(0, MAX_RETURNED_SYMBOLS).map(toJsonEntry),
8
+ classes: classes.map(toJsonEntry),
22
9
  };
23
10
  };
24
11
  /** Select and deduplicate Objective-C and Swift protocol labels. */
@@ -26,7 +13,7 @@ export const discoverObjcProtocols = (names) => {
26
13
  const protocols = uniqueByName(names.filter(({ name }) => name.includes("OBJC_PROTOCOL") || name.includes("_TtP")));
27
14
  return {
28
15
  count: protocols.length,
29
- protocols: protocols.slice(0, MAX_RETURNED_SYMBOLS).map(toJsonEntry),
16
+ protocols: protocols.map(toJsonEntry),
30
17
  };
31
18
  };
32
19
  const SWIFT_CATEGORIES = [
@@ -37,19 +24,23 @@ const SWIFT_CATEGORIES = [
37
24
  ["extensions", "_TtE"],
38
25
  ];
39
26
  /** Categorize deduplicated Swift mangled symbols. */
40
- export const categorizeSwiftTypes = (procedures) => {
27
+ export const categorizeSwiftTypes = (procedures, filter = {}) => {
41
28
  const groups = Object.fromEntries([...SWIFT_CATEGORIES.map(([category]) => category), "other"].map((category) => [category, []]));
42
29
  const seen = new Set();
43
- for (const entry of procedures.slice(0, MAX_SCANNED_SYMBOLS)) {
30
+ for (const entry of procedures) {
44
31
  if (!entry.name.includes("_Tt") || seen.has(entry.name))
45
32
  continue;
46
- seen.add(entry.name);
47
33
  const category = SWIFT_CATEGORIES.find(([, prefix]) => entry.name.startsWith(prefix))?.[0] ?? "other";
34
+ if (filter.category !== undefined && filter.category !== category)
35
+ continue;
36
+ if (filter.pattern !== undefined && !entry.name.includes(filter.pattern))
37
+ continue;
38
+ seen.add(entry.name);
48
39
  groups[category]?.push(entry);
49
40
  }
50
41
  const categories = Object.fromEntries(Object.entries(groups).map(([category, items]) => [
51
42
  category,
52
- { count: items.length, items: items.slice(0, 50).map(toJsonEntry) },
43
+ { count: items.length, items: items.map(toJsonEntry) },
53
44
  ]));
54
45
  return { total: seen.size, categories };
55
46
  };
@@ -0,0 +1,12 @@
1
+ /** Compare strings lexicographically by Unicode code point, independent of locale. */
2
+ export const compareUnicodeCodePoints = (left, right) => {
3
+ const leftPoints = [...left].map((value) => value.codePointAt(0) ?? 0);
4
+ const rightPoints = [...right].map((value) => value.codePointAt(0) ?? 0);
5
+ const length = Math.min(leftPoints.length, rightPoints.length);
6
+ for (let index = 0; index < length; index += 1) {
7
+ const difference = (leftPoints[index] ?? 0) - (rightPoints[index] ?? 0);
8
+ if (difference !== 0)
9
+ return difference;
10
+ }
11
+ return leftPoints.length - rightPoints.length;
12
+ };