rea-agents 3.1.0 → 3.2.1

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 (590) hide show
  1. package/README.md +72 -95
  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/AnalysisSnapshotCache.js +0 -1
  6. package/dist/application/AnalysisSnapshotFiles.js +7 -7
  7. package/dist/application/AndroidApplicationService.js +1 -1
  8. package/dist/application/AppleApplicationService.js +1 -1
  9. package/dist/application/ArtifactExtraction.js +35 -54
  10. package/dist/application/ArtifactExtractionDestination.js +17 -0
  11. package/dist/application/ArtifactGraphConstruction.js +2 -17
  12. package/dist/application/ArtifactInventory/classify.js +2 -6
  13. package/dist/application/ArtifactInventory/hash.js +2 -20
  14. package/dist/application/ArtifactInventory/scanCanonical.js +8 -12
  15. package/dist/application/ArtifactInventory/scanReader.js +69 -51
  16. package/dist/application/ArtifactInventory.js +6 -14
  17. package/dist/application/AuthorizedArtifactInventory.js +3 -13
  18. package/dist/application/BinarySession.js +41 -13
  19. package/dist/application/BinarySessionComposition.js +0 -11
  20. package/dist/application/BinarySessionOpen.js +2 -1
  21. package/dist/application/BinarySessionRecords.js +5 -93
  22. package/dist/application/BinarySessionStatus.js +5 -16
  23. package/dist/application/BinaryTargetResolver.js +216 -0
  24. package/dist/application/BrowserEvidence.js +42 -58
  25. package/dist/application/BrowserObservationService.js +3 -6
  26. package/dist/application/BrowserScenarioCaptureService.js +3 -6
  27. package/dist/application/BrowserScenarioEvidence.js +3 -3
  28. package/dist/application/CallPathTracing.js +2 -36
  29. package/dist/application/CapabilityInventory.js +10 -15
  30. package/dist/application/ClientConfigurationDocument.js +27 -0
  31. package/dist/application/ClientRegistrationStatus.js +16 -13
  32. package/dist/application/CommandShimReplay.js +14 -1
  33. package/dist/application/DirectAnalysis.js +22 -46
  34. package/dist/application/DirectAnalysisStatus.js +5 -61
  35. package/dist/application/Doctor.js +11 -32
  36. package/dist/application/DoctorDiagnostics.js +1 -2
  37. package/dist/application/DoctorScope.js +1 -1
  38. package/dist/application/ElectronActiveEvidence.js +3 -8
  39. package/dist/application/ElectronActiveObservationService.js +3 -6
  40. package/dist/application/ElectronBoundaryAnalysis.js +7 -8
  41. package/dist/application/ElectronBoundaryGraphContext.js +1 -1
  42. package/dist/application/ElectronBoundaryGraphIpc.js +3 -3
  43. package/dist/application/ElectronBoundaryGraphNative.js +1 -2
  44. package/dist/application/ElectronBoundaryGraphWindows.js +6 -8
  45. package/dist/application/ElectronEvidence.js +4 -7
  46. package/dist/application/ElectronObservationService.js +5 -9
  47. package/dist/application/EnhancedLiteralTracing.js +42 -65
  48. package/dist/application/EnhancedTools.js +76 -44
  49. package/dist/application/EvidenceBundleCommands.js +11 -11
  50. package/dist/application/EvidenceBundleFiles.js +9 -15
  51. package/dist/application/EvidenceLedger.js +6 -41
  52. package/dist/application/FilesystemSnapshot.js +2 -3
  53. package/dist/application/InterfaceBuilderAnalysis.js +266 -0
  54. package/dist/application/InventoryProjectionEvidence.js +4 -2
  55. package/dist/application/InvestigationProviders.js +1 -1
  56. package/dist/application/JavaScriptApplicationEvidence.js +2 -5
  57. package/dist/application/JavaScriptApplicationEvidenceGraph.js +6 -10
  58. package/dist/application/JavaScriptApplicationService.js +6 -29
  59. package/dist/application/JavaScriptApplicationWorkflowEvidence.js +5 -5
  60. package/dist/application/JavaScriptApplicationWorkflowService.js +0 -8
  61. package/dist/application/JavaScriptArtifactAnalysis.js +38 -127
  62. package/dist/application/JavaScriptArtifactFiles.js +67 -107
  63. package/dist/application/JavaScriptArtifactGraphAccumulator.js +0 -7
  64. package/dist/application/JavaScriptArtifactGraphBuilder.js +7 -58
  65. package/dist/application/JavaScriptArtifactGraphBundlers.js +1 -6
  66. package/dist/application/JavaScriptArtifactGraphContext.js +12 -39
  67. package/dist/application/JavaScriptArtifactGraphDocuments.js +4 -11
  68. package/dist/application/JavaScriptArtifactGraphEvidence.js +0 -14
  69. package/dist/application/JavaScriptArtifactGraphFindings.js +3 -3
  70. package/dist/application/JavaScriptArtifactGraphStructure.js +16 -17
  71. package/dist/application/JavaScriptArtifactPathResolution.js +61 -49
  72. package/dist/application/JavaScriptArtifactReconstruction.js +5 -10
  73. package/dist/application/JavaScriptArtifactReconstructionInput.js +2 -14
  74. package/dist/application/JavaScriptJsonModules.js +2 -2
  75. package/dist/application/JavaScriptModuleRelationships.js +22 -27
  76. package/dist/application/JavaScriptReplayPlanning.js +9 -3
  77. package/dist/application/JavaScriptReplayService.js +6 -32
  78. package/dist/application/JavaScriptReturnShapeProjection.js +12 -42
  79. package/dist/application/JavaScriptRuntimeObservationEvidence.js +7 -8
  80. package/dist/application/JavaScriptRuntimeObservationService.js +4 -8
  81. package/dist/application/JavaScriptRuntimeReconciliationEvidence.js +2 -3
  82. package/dist/application/JavaScriptSemanticGraphBuilder.js +11 -41
  83. package/dist/application/JavaScriptSemanticGraphConstruction.js +5 -29
  84. package/dist/application/JavaScriptSemanticGraphEvidence.js +1 -1
  85. package/dist/application/JavaScriptSemanticGraphFingerprintProjection.js +1 -1
  86. package/dist/application/JavaScriptSemanticGraphFlowProjection.js +0 -13
  87. package/dist/application/JavaScriptSemanticGraphProjection.js +1 -3
  88. package/dist/application/JavaScriptSemanticTraceService.js +1 -10
  89. package/dist/application/JsonFiles.js +79 -0
  90. package/dist/application/LinuxHopper.js +11 -9
  91. package/dist/application/LoopbackReplay.js +26 -23
  92. package/dist/application/LoopbackReplayRecorder.js +29 -1
  93. package/dist/application/ManagedApplicationGraphService.js +1 -2
  94. package/dist/application/ManagedMemberComparisonService.js +11 -41
  95. package/dist/application/ManagedNativeVerificationService.js +1 -2
  96. package/dist/application/ManagedReconstructionService.js +1 -1
  97. package/dist/application/ManagedRuntimeCorrelationService.js +5 -8
  98. package/dist/application/NativeApiInspection.js +2 -7
  99. package/dist/application/NativeUiActionTrace.js +394 -0
  100. package/dist/application/NodeRuntimeCharacterizationService.js +3 -7
  101. package/dist/application/PermissionAuthority.js +15 -7
  102. package/dist/application/PermissionFailure.js +5 -0
  103. package/dist/application/ProcessCaptureAuthority.js +5 -7
  104. package/dist/application/ProcessCaptureJournal.js +3 -2
  105. package/dist/application/ProcessCaptureLifecycle.js +5 -12
  106. package/dist/application/ProcessCheckpoints.js +29 -11
  107. package/dist/application/ProcessCli.js +6 -16
  108. package/dist/application/ProcessEvidence.js +5 -7
  109. package/dist/application/ProcessHarness.js +52 -17
  110. package/dist/application/ProcessReactiveCoordinator.js +2 -4
  111. package/dist/application/ProcessReactiveEffects.js +9 -3
  112. package/dist/application/ProcessReactiveHarness.js +13 -7
  113. package/dist/application/ProcessSampling.js +2 -4
  114. package/dist/application/ProcessTimer.js +39 -0
  115. package/dist/application/ProjectPermissionStore.js +39 -96
  116. package/dist/application/RealHopperAssertions.js +20 -66
  117. package/dist/application/ReconstructionCoverageService.js +12 -58
  118. package/dist/application/ReconstructionObligationAuthority.js +2 -2
  119. package/dist/application/ReconstructionObligationCandidates.js +4 -4
  120. package/dist/application/ReconstructionObligationLedgerEvaluation.js +8 -15
  121. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -7
  122. package/dist/application/ReconstructionObligationLedgerService.js +19 -38
  123. package/dist/application/ReferenceSourceImport.js +19 -45
  124. package/dist/application/ReferenceSourceImportEntries.js +2 -4
  125. package/dist/application/ReferenceSourceImportPolicy.js +5 -32
  126. package/dist/application/ReferenceSourceImportTypes.js +0 -16
  127. package/dist/application/RuntimeExecutableDiagnostics.js +55 -29
  128. package/dist/application/SessionProviderRouter.js +2 -2
  129. package/dist/application/Setup.js +1 -3
  130. package/dist/application/SetupClientConfiguration.js +22 -93
  131. package/dist/application/SetupRegistrationEnvironment.js +0 -7
  132. package/dist/application/StoreFileLock.js +119 -0
  133. package/dist/application/TerminalRenderer.js +2 -3
  134. package/dist/application/Uninstall.js +9 -14
  135. package/dist/application/UnknownEvidence.js +1 -1
  136. package/dist/artifacts/ArtifactPaths.js +2 -5
  137. package/dist/artifacts/ArtifactProvider.js +36 -58
  138. package/dist/artifacts/DirectoryArtifactReader.js +13 -8
  139. package/dist/artifacts/MachOSliceArtifactReader.js +1 -5
  140. package/dist/artifacts/NativeDmgArtifactReader.js +11 -11
  141. package/dist/artifacts/NibArchive.js +269 -0
  142. package/dist/artifacts/SafeOutputTree.js +15 -24
  143. package/dist/browser/BrowserProcessStartup.js +1 -2
  144. package/dist/browser/CdpAuthorizedMainFrame.js +16 -0
  145. package/dist/browser/CdpBrowserProvider.js +3 -13
  146. package/dist/browser/CdpCanonicalJsonDigest.js +9 -0
  147. package/dist/browser/CdpCaptureDocuments.js +28 -76
  148. package/dist/browser/CdpCaptureEventBodyShapes.js +13 -33
  149. package/dist/browser/CdpCaptureEventHandlers.js +22 -87
  150. package/dist/browser/CdpCaptureEvents.js +2 -8
  151. package/dist/browser/CdpCaptureStorage.js +9 -20
  152. package/dist/browser/CdpCaptureStorageFingerprints.js +85 -98
  153. package/dist/browser/CdpCaptureValues.js +21 -21
  154. package/dist/browser/CdpConnection.js +10 -25
  155. package/dist/browser/CdpElectronInspection.js +26 -50
  156. package/dist/browser/CdpElectronProvider.js +10 -35
  157. package/dist/browser/CdpElectronScriptEvents.js +8 -16
  158. package/dist/browser/CdpElectronScripts.js +6 -35
  159. package/dist/browser/CdpElectronWorkers.js +6 -10
  160. package/dist/browser/CdpEndpoint.js +25 -41
  161. package/dist/browser/CdpObservationSession.js +14 -26
  162. package/dist/browser/CdpPageCapture.js +34 -48
  163. package/dist/browser/CdpPageCaptureScripts.js +1 -19
  164. package/dist/browser/CdpPageCaptureWorkers.js +6 -10
  165. package/dist/browser/CdpSafeMetadata.js +19 -22
  166. package/dist/browser/CdpScreenshot.js +3 -5
  167. package/dist/browser/CdpTargetSession.js +1 -2
  168. package/dist/browser/CdpWebMcpDiscovery.js +13 -22
  169. package/dist/browser/ElectronFileScope.js +8 -19
  170. package/dist/browser/JavaScriptRuntimeScope.js +9 -14
  171. package/dist/browser/PlaywrightBrowserScenarioProvider.js +31 -64
  172. package/dist/browser/PlaywrightElectronActiveActions.js +54 -69
  173. package/dist/browser/PlaywrightElectronActiveProvider.js +14 -34
  174. package/dist/browser/PlaywrightExecutionBoundary.js +16 -5
  175. package/dist/browser/PlaywrightScenarioActions.js +3 -7
  176. package/dist/browser/PlaywrightScenarioArtifacts.js +23 -92
  177. package/dist/browser/PlaywrightScenarioBrowser.js +3 -5
  178. package/dist/browser/PlaywrightScenarioEvents.js +45 -94
  179. package/dist/browser/PlaywrightScenarioSession.js +14 -30
  180. package/dist/browser/PngVisualDiff.js +22 -14
  181. package/dist/browser/SensitiveTextCapture.js +0 -17
  182. package/dist/browser/V8InspectorCaptureProjection.js +7 -8
  183. package/dist/browser/V8InspectorEndpoint.js +12 -14
  184. package/dist/browser/V8InspectorProvider.js +20 -61
  185. package/dist/browser/WebSourceMapFetcher.js +56 -176
  186. package/dist/catalogIdentity.js +0 -54
  187. package/dist/cli/artifactCommands.js +49 -77
  188. package/dist/cli/coreAnalysisCommands.js +83 -133
  189. package/dist/cli/javascriptApplicationAnalysis.js +1 -9
  190. package/dist/cli/managedCommands.js +5 -270
  191. package/dist/cli/setupCommands.js +3 -12
  192. package/dist/cli/utilityCommands.js +7 -41
  193. package/dist/cli.js +0 -2
  194. package/dist/cliApplicationCommands.js +42 -112
  195. package/dist/cliBrowserAdvancedCommands.js +10 -106
  196. package/dist/cliBrowserCommands.js +15 -127
  197. package/dist/cliBrowserContext.js +30 -0
  198. package/dist/cliCommandNames.js +4 -5
  199. package/dist/cliElectronCommands.js +8 -72
  200. package/dist/cliEvidenceCommands.js +8 -77
  201. package/dist/cliJavaScriptRuntimeCommands.js +9 -91
  202. package/dist/cliJsonInput.js +4 -14
  203. package/dist/cliObservationOptions.js +11 -96
  204. package/dist/cliPolicyCommands.js +2 -17
  205. package/dist/cliProcessCommands.js +3 -3
  206. package/dist/cliSetup.js +0 -13
  207. package/dist/config/browserScenario.js +2 -2
  208. package/dist/config/environment.js +0 -9
  209. package/dist/config/parseConfig.js +1 -33
  210. package/dist/config/parsers.js +6 -27
  211. package/dist/config/passiveObservation.js +7 -77
  212. package/dist/config/permissions.js +0 -7
  213. package/dist/contracts/analysisSearchContract.js +2 -5
  214. package/dist/contracts/applicationToolContracts.js +56 -109
  215. package/dist/contracts/applicationWorkflowInputContracts.js +27 -102
  216. package/dist/contracts/artifactComparisonExample.js +58 -60
  217. package/dist/contracts/artifactToolContracts.js +20 -67
  218. package/dist/contracts/browserScenarioToolContracts.js +6 -51
  219. package/dist/contracts/browserToolContracts.js +8 -73
  220. package/dist/contracts/electronToolContracts.js +8 -108
  221. package/dist/contracts/enhancedInputs.js +23 -54
  222. package/dist/contracts/errorSchemas.js +0 -1
  223. package/dist/contracts/functionComparisonExample.js +10 -24
  224. package/dist/contracts/functionInstructionContract.js +1 -3
  225. package/dist/contracts/functionWorkflowToolContracts.js +2 -2
  226. package/dist/contracts/hopperMemoryContracts.js +3 -3
  227. package/dist/contracts/investigationExamples.js +14 -11
  228. package/dist/contracts/javascriptApplicationWorkflowExamples.js +12 -19
  229. package/dist/contracts/javascriptRuntimeObservationToolContracts.js +2 -20
  230. package/dist/contracts/javascriptRuntimeReconciliationExample.js +45 -12
  231. package/dist/contracts/managedToolContracts.js +6 -95
  232. package/dist/contracts/managedWorkflowExamples.js +77 -128
  233. package/dist/contracts/managedWorkflowToolContracts.js +51 -77
  234. package/dist/contracts/nativeToolContracts.js +7 -11
  235. package/dist/contracts/processCaptureExample.js +2 -69
  236. package/dist/contracts/promptContracts.js +49 -67
  237. package/dist/contracts/providerSelection.js +0 -1
  238. package/dist/contracts/reconstructionReadinessExample.js +1 -6
  239. package/dist/contracts/sessionStatusContract.js +1 -17
  240. package/dist/contracts/sessionToolSchemas.js +6 -15
  241. package/dist/contracts/toolContractExamples.js +11 -11
  242. package/dist/contracts/toolContractHelpers.js +0 -4
  243. package/dist/contracts/toolContracts.js +60 -71
  244. package/dist/contracts/toolEffects.js +5 -13
  245. package/dist/contracts/toolOutputSchemaGroups.js +37 -91
  246. package/dist/contracts/toolOutputSchemaPrimitives.js +16 -56
  247. package/dist/contracts/toolSchemaMetadata.js +8 -19
  248. package/dist/contracts/unknownContractExamples.js +0 -2
  249. package/dist/domain/analysisErrorPresentation.js +46 -54
  250. package/dist/domain/analysisErrorProjection.js +28 -37
  251. package/dist/domain/analysisProfile.js +3 -31
  252. package/dist/domain/analysisSnapshot.js +3 -12
  253. package/dist/domain/androidApplication.js +15 -54
  254. package/dist/domain/appleApplication.js +24 -67
  255. package/dist/domain/artifactComparison.js +11 -29
  256. package/dist/domain/artifactGraph.js +14 -44
  257. package/dist/domain/artifactInspection.js +38 -69
  258. package/dist/domain/artifactInventoryEvidence.js +27 -21
  259. package/dist/domain/binaryTarget.js +2 -221
  260. package/dist/domain/browserCaptureComparison.js +47 -24
  261. package/dist/domain/browserObservation.js +28 -193
  262. package/dist/domain/browserObservationSchemas.js +5 -23
  263. package/dist/domain/browserScenario.js +11 -14
  264. package/dist/domain/browserScenarioCapture.js +11 -12
  265. package/dist/domain/browserScenarioCaptureValues.js +146 -84
  266. package/dist/domain/browserScenarioDiff.js +2 -59
  267. package/dist/domain/browserScenarioDiffEvidence.js +51 -0
  268. package/dist/domain/browserScenarioDiffValues.js +21 -38
  269. package/dist/domain/browserScenarioValues.js +80 -109
  270. package/dist/domain/browserSession.js +4 -7
  271. package/dist/domain/bundleComparison.js +6 -32
  272. package/dist/domain/bytecodeProvider.js +20 -19
  273. package/dist/domain/callPath.js +47 -167
  274. package/dist/domain/callPathSchemas.js +79 -0
  275. package/dist/domain/changedBehavior.js +34 -60
  276. package/dist/domain/completionLedgerGeneration.js +8 -14
  277. package/dist/domain/conformancePackage.js +126 -97
  278. package/dist/domain/conformanceReplay.js +36 -8
  279. package/dist/domain/conformanceTrustGate.js +23 -14
  280. package/dist/domain/customProtocolCapture.js +1 -1
  281. package/dist/domain/electronActiveObservation.js +70 -103
  282. package/dist/domain/electronObservation.js +14 -80
  283. package/dist/domain/electronStaticAnalysisBrowser.js +36 -46
  284. package/dist/domain/electronStaticAnalysisIpc.js +38 -14
  285. package/dist/domain/electronStaticAnalysisNative.js +1 -8
  286. package/dist/domain/electronStaticAnalysisValues.js +10 -17
  287. package/dist/domain/errors.js +33 -54
  288. package/dist/domain/eventProcessTree.js +20 -12
  289. package/dist/domain/evidence.js +2 -10
  290. package/dist/domain/evidenceBundle.js +3 -5
  291. package/dist/domain/evidenceCompletionLedger.js +6 -8
  292. package/dist/domain/functionComparison.js +4 -14
  293. package/dist/domain/functionComparisonNormalization.js +4 -11
  294. package/dist/domain/functionComparisonResults.js +25 -15
  295. package/dist/domain/functionComparisonSchemas.js +49 -33
  296. package/dist/domain/functionDossierEvidence.js +31 -156
  297. package/dist/domain/hopperStartupFailure.js +1 -1
  298. package/dist/domain/hopperValues.js +15 -136
  299. package/dist/domain/interfaceBuilderGraph.js +654 -0
  300. package/dist/domain/javascriptApplicationAnalysis.js +8 -112
  301. package/dist/domain/javascriptApplicationChangeGraph.js +22 -82
  302. package/dist/domain/javascriptApplicationEvidenceSchemas.js +59 -47
  303. package/dist/domain/javascriptApplicationGraph.js +3 -13
  304. package/dist/domain/javascriptApplicationGraphSchemas.js +12 -34
  305. package/dist/domain/javascriptApplicationVersionComparison.js +26 -30
  306. package/dist/domain/javascriptApplicationVersionComparisonSchemas.js +123 -68
  307. package/dist/domain/javascriptApplicationVersionItems.js +120 -53
  308. package/dist/domain/javascriptApplicationVersionKeys.js +24 -11
  309. package/dist/domain/javascriptAstFingerprint.js +25 -58
  310. package/dist/domain/javascriptAstValues.js +9 -0
  311. package/dist/domain/javascriptExportInstrumentation.js +2 -4
  312. package/dist/domain/javascriptExportShapeComparison.js +6 -7
  313. package/dist/domain/javascriptExportShapeComparisonSchemas.js +68 -75
  314. package/dist/domain/javascriptExportShapeSelection.js +17 -19
  315. package/dist/domain/javascriptFeatureSeed.js +20 -12
  316. package/dist/domain/javascriptFeatureTrace.js +13 -67
  317. package/dist/domain/javascriptFeatureTraceSchemas.js +24 -52
  318. package/dist/domain/javascriptFeatureTraversal.js +1 -44
  319. package/dist/domain/javascriptNativeHandoff.js +1 -1
  320. package/dist/domain/javascriptReplay.js +24 -41
  321. package/dist/domain/javascriptRuntimeLoadState.js +3 -8
  322. package/dist/domain/javascriptRuntimeObservation.js +42 -103
  323. package/dist/domain/javascriptRuntimeReconciliation.js +1 -3
  324. package/dist/domain/javascriptRuntimeReconciliationActive.js +8 -17
  325. package/dist/domain/javascriptRuntimeReconciliationGraph.js +10 -23
  326. package/dist/domain/javascriptRuntimeReconciliationMatching.js +18 -12
  327. package/dist/domain/javascriptRuntimeReconciliationParsing.js +16 -45
  328. package/dist/domain/javascriptRuntimeReconciliationResult.js +4 -5
  329. package/dist/domain/javascriptRuntimeReconciliationRuntime.js +8 -12
  330. package/dist/domain/javascriptRuntimeReconciliationSchemas.js +33 -48
  331. package/dist/domain/javascriptRuntimeStaticCandidates.js +3 -3
  332. package/dist/domain/javascriptSemanticAnalysis.js +12 -45
  333. package/dist/domain/javascriptSemanticAsyncEffects.js +1 -9
  334. package/dist/domain/javascriptSemanticCallResolution.js +6 -16
  335. package/dist/domain/javascriptSemanticCalls.js +5 -32
  336. package/dist/domain/javascriptSemanticChildProcesses.js +1 -11
  337. package/dist/domain/javascriptSemanticCoverage.js +11 -0
  338. package/dist/domain/javascriptSemanticDataEffectHelpers.js +1 -8
  339. package/dist/domain/javascriptSemanticDataEffects.js +1 -11
  340. package/dist/domain/javascriptSemanticFingerprints.js +3 -5
  341. package/dist/domain/javascriptSemanticGraphSchemas.js +25 -51
  342. package/dist/domain/javascriptSemanticGraphSerialization.js +2 -13
  343. package/dist/domain/javascriptSemanticIr.js +1 -29
  344. package/dist/domain/javascriptSemanticObjects.js +1 -5
  345. package/dist/domain/javascriptSemanticPrimitives.js +2 -9
  346. package/dist/domain/javascriptSemanticProjection.js +0 -18
  347. package/dist/domain/javascriptSemanticPromises.js +9 -16
  348. package/dist/domain/javascriptSemanticProvenance.js +16 -19
  349. package/dist/domain/javascriptSemanticQuery.js +17 -139
  350. package/dist/domain/javascriptSemanticQueryAssessment.js +9 -37
  351. package/dist/domain/javascriptSemanticQueryIdentity.js +2 -23
  352. package/dist/domain/javascriptSemanticQuerySchemas.js +14 -107
  353. package/dist/domain/javascriptSemanticResources.js +1 -6
  354. package/dist/domain/javascriptSemanticReturns.js +10 -27
  355. package/dist/domain/javascriptSemanticValueTypes.js +1 -0
  356. package/dist/domain/javascriptSemanticValues.js +44 -62
  357. package/dist/domain/javascriptStaticAnalysis.js +21 -43
  358. package/dist/domain/javascriptStaticAnalysisBundler.js +34 -93
  359. package/dist/domain/javascriptStaticAnalysisCalls.js +17 -16
  360. package/dist/domain/javascriptStaticAnalysisFindings.js +3 -19
  361. package/dist/domain/javascriptStaticAnalysisHelpers.js +47 -88
  362. package/dist/domain/javascriptStaticAnalysisState.js +1 -5
  363. package/dist/domain/javascriptStaticAnalysisTypes.js +1 -0
  364. package/dist/domain/jsonShape.js +7 -33
  365. package/dist/domain/localPath.js +7 -0
  366. package/dist/domain/managedApplicationGraph.js +9 -41
  367. package/dist/domain/managedApplicationGraphCoverage.js +24 -156
  368. package/dist/domain/managedApplicationGraphNodes.js +10 -13
  369. package/dist/domain/managedArtifact.js +14 -27
  370. package/dist/domain/managedMemberComparison.js +90 -92
  371. package/dist/domain/managedMemberComparisonCoverage.js +11 -33
  372. package/dist/domain/managedMemberComparisonItems.js +221 -0
  373. package/dist/domain/managedMemberComparisonMatch.js +8 -208
  374. package/dist/domain/managedNativeVerification.js +3 -6
  375. package/dist/domain/managedNativeVerificationMatch.js +55 -59
  376. package/dist/domain/managedNativeVerificationSchemas.js +83 -47
  377. package/dist/domain/managedReconstruction.js +19 -23
  378. package/dist/domain/managedRuntimeCorrelation.js +6 -9
  379. package/dist/domain/nativeApiBoundary.js +2 -7
  380. package/dist/domain/nativeInspection.js +0 -2
  381. package/dist/domain/nativeInvestigationGraph.js +351 -0
  382. package/dist/domain/nativeValueFlow.js +61 -0
  383. package/dist/domain/nodeRuntimeCharacterization.js +1 -5
  384. package/dist/domain/objcSwiftMetadata.js +254 -0
  385. package/dist/domain/peInspection.js +1 -1
  386. package/dist/domain/permissionPolicy.js +13 -0
  387. package/dist/domain/processCapture.js +76 -113
  388. package/dist/domain/processCaptureExample.js +68 -0
  389. package/dist/domain/processCaptureParsing.js +21 -0
  390. package/dist/domain/processCaptureReactiveSchema.js +68 -0
  391. package/dist/domain/processCaptureValidation.js +1 -7
  392. package/dist/domain/processComparison.js +3 -12
  393. package/dist/domain/processReactiveMatching.js +29 -50
  394. package/dist/domain/processReactiveRuntime.js +4 -8
  395. package/dist/domain/processReactiveScenario.js +28 -94
  396. package/dist/domain/processReactiveScenarioPreflight.js +5 -30
  397. package/dist/domain/processReactiveTransition.js +33 -18
  398. package/dist/domain/processScenario.js +56 -90
  399. package/dist/domain/processTraceComparison.js +0 -8
  400. package/dist/domain/processTraceEvaluation.js +14 -4
  401. package/dist/domain/processTraceSpecification.js +11 -17
  402. package/dist/domain/protocolCapture.js +3 -3
  403. package/dist/domain/reconstructionCoverage.js +62 -129
  404. package/dist/domain/reconstructionCoverageEvaluation.js +17 -17
  405. package/dist/domain/reconstructionObligationLedgerSchemas.js +45 -72
  406. package/dist/domain/reconstructionReadiness.js +1 -2
  407. package/dist/domain/reconstructionReadinessSchemas.js +36 -38
  408. package/dist/domain/reconstructionUnknowns.js +3 -3
  409. package/dist/domain/reconstructionVerification.js +13 -47
  410. package/dist/domain/reconstructionVerificationSchemas.js +50 -38
  411. package/dist/domain/referenceSourceGraph.js +53 -61
  412. package/dist/domain/referenceSourceImportParsing.js +1 -5
  413. package/dist/domain/replayMachine.js +19 -31
  414. package/dist/domain/replayMachineRun.js +15 -63
  415. package/dist/domain/replayMachineRuntime.js +41 -41
  416. package/dist/domain/replayMachineValues.js +84 -0
  417. package/dist/domain/residualUnknown.js +25 -30
  418. package/dist/domain/runtimeCharacterization.js +15 -16
  419. package/dist/domain/runtimeIdentification.js +48 -47
  420. package/dist/domain/sourceToBundleComparison.js +9 -85
  421. package/dist/domain/sourceToBundleComparisonSchemas.js +17 -42
  422. package/dist/domain/sourceToBundleSignals.js +4 -15
  423. package/dist/domain/staticRuntimeCorrelation.js +37 -49
  424. package/dist/domain/symbolAnalysis.js +10 -19
  425. package/dist/domain/unicodeCodePointOrder.js +12 -0
  426. package/dist/domain/webBundleAnalysis.js +70 -99
  427. package/dist/domain/webBundleAnalyzer.js +2 -4
  428. package/dist/domain/webBundleAnalyzerAst.js +0 -13
  429. package/dist/domain/webBundleAnalyzerInspection.js +26 -52
  430. package/dist/domain/webBundleAnalyzerResult.js +7 -24
  431. package/dist/domain/webCaptureDiff.js +33 -73
  432. package/dist/domain/webCaptureDiffSchemas.js +86 -0
  433. package/dist/domain/webContentArtifact.js +1 -10
  434. package/dist/domain/webMcpDiscovery.js +3 -14
  435. package/dist/domain/webScreenshot.js +58 -34
  436. package/dist/domain/zipPackageFormat.js +7 -0
  437. package/dist/dotnet/ManagedArtifactInspector.js +17 -50
  438. package/dist/dotnet/ManagedMemberInspector.js +27 -58
  439. package/dist/dotnet/ManagedMemberInspectorCore.js +14 -51
  440. package/dist/dotnet/ManagedMemberInstructionDecoder.js +2 -2
  441. package/dist/dotnet/ManagedMemberRows.js +16 -16
  442. package/dist/dotnet/ManagedMetadataHeaps.js +26 -8
  443. package/dist/dotnet/ManagedMetadataInventory.js +21 -30
  444. package/dist/dotnet/ManagedMetadataInventoryRows.js +57 -63
  445. package/dist/dotnet/ManagedMetadataLayout.js +3 -5
  446. package/dist/dotnet/ManagedMethodBodyReader.js +5 -30
  447. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +19 -49
  448. package/dist/dotnet/ManagedNativeBoundaryInspector.js +13 -41
  449. package/dist/dotnet/ManagedPeReader.js +2 -2
  450. package/dist/dotnet/ManagedStaticProvider.js +13 -71
  451. package/dist/generatedMcpToolCatalog.js +1 -1
  452. package/dist/generatedPackageMetadata.js +1 -1
  453. package/dist/ghidra/GhidraAnalysisProfile.js +3 -8
  454. package/dist/ghidra/GhidraClient.js +4 -12
  455. package/dist/ghidra/GhidraClientWire.js +9 -5
  456. package/dist/ghidra/GhidraDefaults.js +0 -18
  457. package/dist/ghidra/GhidraDiagnostics.js +0 -2
  458. package/dist/ghidra/GhidraDoctor.js +16 -12
  459. package/dist/ghidra/GhidraFunctionValues.js +65 -108
  460. package/dist/ghidra/GhidraInstallation.js +98 -42
  461. package/dist/ghidra/GhidraInventoryValues.js +16 -85
  462. package/dist/ghidra/GhidraLauncher.js +0 -8
  463. package/dist/ghidra/GhidraProvider.js +15 -22
  464. package/dist/ghidra/GhidraProviderCapabilities.js +6 -47
  465. package/dist/ghidra/GhidraRequestQueue.js +6 -30
  466. package/dist/ghidra/GhidraResponseBuffer.js +1 -7
  467. package/dist/ghidra/GhidraSessionValues.js +0 -2
  468. package/dist/ghidra/GhidraTransport.js +4 -7
  469. package/dist/ghidra/protocol.js +2 -2
  470. package/dist/hopper/BridgeLauncher.js +112 -36
  471. package/dist/hopper/HopperAnalysisProfile.js +1 -1
  472. package/dist/hopper/HopperCleanup.js +6 -3
  473. package/dist/hopper/HopperClient.js +4 -7
  474. package/dist/hopper/HopperProcessDiagnostic.js +2 -2
  475. package/dist/hopper/HopperProvider.js +0 -16
  476. package/dist/hopper/HopperRequestQueue.js +21 -40
  477. package/dist/hopper/HopperResponseStream.js +1 -9
  478. package/dist/hopper/HopperSessionValues.js +3 -2
  479. package/dist/hopper/HopperTargetLease.js +119 -0
  480. package/dist/hopper/LinuxPrivateDisplayDiagnostic.js +24 -31
  481. package/dist/hopper/LinuxPrivateDisplayProbe.js +5 -16
  482. package/dist/hopper/protocol.js +6 -4
  483. package/dist/main/reload.js +0 -3
  484. package/dist/main/shutdown.js +1 -1
  485. package/dist/main/state.js +0 -9
  486. package/dist/main/transport.js +0 -5
  487. package/dist/mcpDoctor.js +25 -45
  488. package/dist/native/CommandRunner.js +18 -25
  489. package/dist/native/NativeMacOSProvider.js +13 -38
  490. package/dist/native/NativeMachoInspection.js +1 -1
  491. package/dist/process/BoundedFileBytes.js +17 -0
  492. package/dist/process/ExecFileOutput.js +11 -0
  493. package/dist/process/PendingOperations.js +8 -6
  494. package/dist/process/ProcessOwnership.js +3 -2
  495. package/dist/process/ProcessOwnershipObservation.js +0 -1
  496. package/dist/process/ProviderProcess.js +7 -28
  497. package/dist/reference/ReferenceSourceReader.js +8 -24
  498. package/dist/reference/ReferenceSourceReaderEntries.js +11 -39
  499. package/dist/reference/ReferenceSourceReaderFile.js +13 -31
  500. package/dist/reference/ReferenceSourceReaderPaths.js +3 -18
  501. package/dist/reference/ReferenceSourceReaderValidate.js +3 -6
  502. package/dist/replay/JavaScriptReplayWorker.js +3 -5
  503. package/dist/replay/LinuxJavaScriptReplayRunner.js +33 -29
  504. package/dist/replay/LinuxJavaScriptReplaySandbox.js +0 -19
  505. package/dist/replay/LinuxRuntimeClosure.js +1 -3
  506. package/dist/replay/ReplayOutcome.js +1 -3
  507. package/dist/replay/ReplayProcessLifecycle.js +32 -7
  508. package/dist/replay/ReplaySeccompFile.js +29 -0
  509. package/dist/replay/ReplayWorkerProtocol.js +0 -2
  510. package/dist/replay/SystemJavaScriptReplayHost.js +45 -74
  511. package/dist/server/ProcessCaptureElicitation.js +4 -8
  512. package/dist/server/createServer.js +6 -44
  513. package/dist/server/promptCompletion.js +37 -61
  514. package/dist/server/recordDerivedEvidence.js +1 -1
  515. package/dist/server/registerApplicationTools/characterization.js +4 -8
  516. package/dist/server/registerApplicationTools/compareExportShapes.js +5 -10
  517. package/dist/server/registerApplicationTools/compareSourceToBundle.js +6 -10
  518. package/dist/server/registerApplicationTools/compareVersions.js +5 -10
  519. package/dist/server/registerApplicationTools/controlledReplay.js +3 -5
  520. package/dist/server/registerApplicationTools/coverage.js +6 -71
  521. package/dist/server/registerApplicationTools/helpers.js +1 -13
  522. package/dist/server/registerApplicationTools/obligationLedger.js +3 -2
  523. package/dist/server/registerApplicationTools/traceFeature.js +5 -9
  524. package/dist/server/registerApplicationTools/traceSemantics.js +5 -8
  525. package/dist/server/registerApplicationTools.js +0 -2
  526. package/dist/server/registerArtifactComparisonTool.js +23 -27
  527. package/dist/server/registerBrowserScenarioTool.js +4 -4
  528. package/dist/server/registerBrowserTools.js +5 -8
  529. package/dist/server/registerBundleComparisonTool.js +5 -7
  530. package/dist/server/registerCloseLifecycleTool.js +2 -16
  531. package/dist/server/registerElectronTools.js +10 -29
  532. package/dist/server/registerEnhancedTools.js +10 -11
  533. package/dist/server/registerEvidenceTools.js +15 -22
  534. package/dist/server/registerFunctionComparisonTool.js +30 -25
  535. package/dist/server/registerInvestigationTools/helpers.js +3 -32
  536. package/dist/server/registerInvestigationTools.js +20 -116
  537. package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -4
  538. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +15 -17
  539. package/dist/server/registerManagedWorkflowTools/evidence.js +19 -35
  540. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +3 -8
  541. package/dist/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.js +3 -8
  542. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +10 -14
  543. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +9 -15
  544. package/dist/server/registerOfficialTools.js +1 -43
  545. package/dist/server/registerProcessComparisonTool.js +33 -23
  546. package/dist/server/registerPrompts.js +19 -17
  547. package/dist/server/registerSessionRecordTools.js +10 -156
  548. package/dist/server/registerSessionStatusTool.js +6 -69
  549. package/dist/server/registerSessionTools.js +10 -51
  550. package/dist/server/sessionAvailabilityPolicy.js +0 -2
  551. package/dist/server/sessionEvidence.js +9 -15
  552. package/dist/server/sessionToolPolicies.js +0 -8
  553. package/dist/server/toolResult.js +14 -50
  554. package/dist/serverIdentity.js +0 -20
  555. package/install.sh +1 -1
  556. package/package.json +11 -7
  557. package/scripts/electron-active-hook.cjs +23 -55
  558. package/scripts/hopper-demo-x11.py +13 -32
  559. package/skills/reverse-engineer-anything/SKILL.md +47 -12
  560. package/skills/reverse-engineer-anything/references/evidence-workflows.md +6 -4
  561. package/skills/reverse-engineer-anything/references/javascript-applications.md +13 -13
  562. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +12 -8
  563. package/dist/application/ApplicationWorkflowEvidenceResolver.js +0 -188
  564. package/dist/application/BoundedJsonFiles.js +0 -86
  565. package/dist/application/CrossVersionInventory.js +0 -129
  566. package/dist/application/CrossVersionInvestigation.js +0 -301
  567. package/dist/application/CrossVersionInvestigationCollections.js +0 -23
  568. package/dist/application/CrossVersionInvestigationEvidence.js +0 -64
  569. package/dist/application/CrossVersionInvestigationReplay.js +0 -170
  570. package/dist/application/DeferredFileAuthorization.js +0 -61
  571. package/dist/application/DoctorProjection.js +0 -43
  572. package/dist/application/EnhancedToolPagination.js +0 -22
  573. package/dist/application/EvidenceReferenceResolver.js +0 -26
  574. package/dist/application/InvestigationWorkspaceStore.js +0 -204
  575. package/dist/application/ProcessPairedExperiment.js +0 -72
  576. package/dist/application/ReconstructionCoverageWorkspaceStore.js +0 -31
  577. package/dist/application/ReconstructionReadinessService.js +0 -48
  578. package/dist/cliInvestigationCommands.js +0 -173
  579. package/dist/domain/boundedCartesianProjection.js +0 -15
  580. package/dist/domain/investigationWorkspace.js +0 -347
  581. package/dist/domain/jsonLimits.js +0 -26
  582. package/dist/domain/knownPageCoverage.js +0 -29
  583. package/dist/domain/processPairedExperiment.js +0 -128
  584. package/dist/server/javascriptApplicationResult.js +0 -106
  585. package/dist/server/permissionFailure.js +0 -12
  586. package/dist/server/registerApplicationTools/readiness.js +0 -50
  587. package/dist/server/registerEvidenceResources.js +0 -315
  588. package/dist/server/registerJavaScriptApplicationGraphResource.js +0 -65
  589. package/dist/server/registerReconstructionObligationLedgerResource.js +0 -32
  590. package/dist/server/registerReconstructionReadinessResource.js +0 -32
@@ -1,7 +1,8 @@
1
- import { AnalysisCapabilityUnavailableError, AnalysisProtocolError, PermissionRequiredError, } from "../domain/errors.js";
1
+ import { projectPermissionFailure } from "./PermissionFailure.js";
2
+ import { AnalysisCapabilityUnavailableError, } from "../domain/errors.js";
2
3
  import { err, ok } from "../domain/result.js";
3
4
  import { createElectronEvidence } from "./ElectronEvidence.js";
4
- /** Authorize and list root-confined Electron page targets. */
5
+ /** Authorize and list Electron file pages exposed by the selected endpoint. */
5
6
  export const listElectronTargets = async (provider, authority, input, options = {}) => {
6
7
  const ready = await prepare(provider, authority, input, "list_electron_targets");
7
8
  if (!ready.ok)
@@ -26,20 +27,15 @@ const prepare = async (provider, authority, input, operation) => {
26
27
  return err(new AnalysisCapabilityUnavailableError("rea-cdp-electron", operation, "Electron observation permission policy is not configured"));
27
28
  const authorized = await authority.authorize({
28
29
  capability: "electron_observe",
29
- roots: input.allowed_file_roots,
30
+ roots: [],
30
31
  executables: [],
31
32
  environment_names: [],
32
- origins: [input.cdp_endpoint],
33
33
  network: "loopback",
34
34
  mount: false,
35
35
  operation_identity: `${operation}:${"target_id" in input ? input.target_id : input.cdp_endpoint}`,
36
36
  }, "read");
37
37
  if (!authorized.ok)
38
- return err(authorized.error instanceof PermissionRequiredError
39
- ? authorized.error
40
- : new AnalysisProtocolError(authorized.error.message, {
41
- cause: authorized.error,
42
- }));
38
+ return err(projectPermissionFailure(authorized.error));
43
39
  return provider === undefined
44
40
  ? err(new AnalysisCapabilityUnavailableError("rea-cdp-electron", operation, "Electron observation provider is not configured"))
45
41
  : ok(provider);
@@ -1,86 +1,78 @@
1
+ import { z } from "zod";
1
2
  import { AnalysisOutputError } from "../domain/errors.js";
2
- import { parseAddressedPage } from "../domain/hopperValues.js";
3
3
  import { err, ok } from "../domain/result.js";
4
4
  const FEATURE_SEARCH_SOURCES = [
5
- ["list_strings", "string"],
6
- ["list_procedures", "procedure"],
5
+ ["search_strings", "string"],
6
+ ["search_procedures", "procedure"],
7
7
  ];
8
8
  const STRING_SEARCH_SOURCES = [
9
- ["list_strings", "string"],
9
+ ["search_strings", "string"],
10
10
  ];
11
- /** Trace a bounded feature or string literal through provider xrefs. */
11
+ /** Trace every matching feature or string literal through provider xrefs. */
12
12
  export const traceLiteralFeature = async (call, input, scope, signal) => {
13
13
  const sources = scope === "feature" ? FEATURE_SEARCH_SOURCES : STRING_SEARCH_SOURCES;
14
14
  const searched = await literalMatches(call, input, sources, signal);
15
15
  if (!searched.ok)
16
16
  return searched;
17
- const residual = new Set();
18
17
  const traced = await traceReferences(call, {
19
18
  matches: searched.value.matches,
20
- limit: input.limit,
21
- operationBudget: input.max_operations - searched.value.operations,
22
19
  ...(signal === undefined ? {} : { signal }),
23
20
  });
24
21
  if (!traced.ok)
25
22
  return traced;
26
- for (const reason of traced.value.residual)
27
- residual.add(reason);
28
- const operations = searched.value.operations + traced.value.operations;
29
- if (operations >= input.max_operations)
30
- residual.add("Investigation reached the operation budget.");
31
- if (searched.value.matches.length >= input.limit)
32
- residual.add("Literal matches reached the configured limit.");
33
23
  return ok({
34
24
  query: input.query,
35
25
  search_mode: "literal",
36
- operations_used: operations,
37
- operation_budget: input.max_operations,
38
26
  matches: searched.value.matches,
39
27
  references: traced.value.references,
40
- truncated: residual.size > 0,
41
- residual_unknowns: [...residual],
28
+ truncated: false,
29
+ residual_unknowns: [],
42
30
  });
43
31
  };
44
32
  const literalMatches = async (call, input, sources, signal) => {
45
- let operations = 0;
46
33
  const matches = [];
47
- const needle = input.case_sensitive ? input.query : input.query.toLowerCase();
48
- for (const [tool, type] of sources) {
49
- let offset = 0;
50
- while (operations < input.max_operations && matches.length < input.limit) {
51
- operations += 1;
52
- const result = await call(tool, { offset, limit: 500 }, signal);
34
+ const needles = [...new Set(input.query.trim().split(/\s+/u))];
35
+ const matched = new Set();
36
+ for (const needle of needles) {
37
+ for (const [tool, type] of sources) {
38
+ const result = await call(tool, {
39
+ pattern: needle,
40
+ mode: "literal",
41
+ case_sensitive: input.case_sensitive,
42
+ }, signal);
53
43
  if (!result.ok)
54
44
  return result;
55
- const page = parseAddressedPage(result.value);
56
- if (!page.ok)
57
- return page;
58
- for (const item of page.value.items) {
59
- const haystack = input.case_sensitive
60
- ? item.name
61
- : item.name.toLowerCase();
62
- if (haystack.includes(needle))
63
- matches.push({ type, address: item.address, value: item.name });
64
- if (matches.length >= input.limit)
65
- break;
66
- }
67
- if (!page.value.hasMore || page.value.nextOffset === null)
68
- break;
69
- offset = page.value.nextOffset;
45
+ const items = z
46
+ .array(z.object({ address: z.string(), value: z.string() }))
47
+ .safeParse(result.value);
48
+ if (!items.success)
49
+ return err(new AnalysisOutputError(tool, "provider returned an invalid search result"));
50
+ addPageMatches({
51
+ items: items.data.map(({ address, value: name }) => ({
52
+ address,
53
+ name,
54
+ })),
55
+ type,
56
+ matches,
57
+ matched,
58
+ });
70
59
  }
71
60
  }
72
- return ok({ matches, operations });
61
+ return ok({ matches });
62
+ };
63
+ const addPageMatches = (input) => {
64
+ const { items, type, matches, matched } = input;
65
+ for (const item of items) {
66
+ const key = `${type}\u0000${item.address}`;
67
+ if (matched.has(key))
68
+ continue;
69
+ matches.push({ type, address: item.address, value: item.name });
70
+ matched.add(key);
71
+ }
73
72
  };
74
73
  const traceReferences = async (call, request) => {
75
- let operations = 0;
76
74
  const references = [];
77
- const residual = new Set();
78
75
  for (const match of request.matches) {
79
- if (operations >= request.operationBudget) {
80
- residual.add("Reference traversal stopped at the operation budget.");
81
- break;
82
- }
83
- operations += 1;
84
76
  const xrefs = await call("xrefs", { address: match.address }, request.signal);
85
77
  if (!xrefs.ok)
86
78
  return xrefs;
@@ -89,11 +81,6 @@ const traceReferences = async (call, request) => {
89
81
  for (const source of xrefs.value) {
90
82
  if (typeof source !== "string")
91
83
  return err(new AnalysisOutputError("xrefs", "provider returned a non-address value"));
92
- if (operations >= request.operationBudget) {
93
- residual.add("Containing-procedure resolution stopped at the operation budget.");
94
- break;
95
- }
96
- operations += 1;
97
84
  const resolved = await call("resolve_containing_procedure", { address: source }, request.signal);
98
85
  if (!resolved.ok)
99
86
  return resolved;
@@ -102,17 +89,7 @@ const traceReferences = async (call, request) => {
102
89
  source_address: source,
103
90
  containing_procedure: resolved.value,
104
91
  });
105
- if (references.length >= request.limit) {
106
- residual.add("Reference results reached the configured limit.");
107
- break;
108
- }
109
92
  }
110
- if (references.length >= request.limit)
111
- break;
112
93
  }
113
- return ok({
114
- references,
115
- operations,
116
- residual: [...residual],
117
- });
94
+ return ok({ references });
118
95
  };
@@ -1,11 +1,13 @@
1
+ import { z } from "zod";
1
2
  import { enhancedInputSchemas } from "../contracts/enhancedInputs.js";
2
3
  import { AnalysisCancelledError, AnalysisOutputError, projectAnalysisError, } from "../domain/errors.js";
3
4
  import { addressDistance, functionDossierSchema, parseDocuments, parseFunctionDossier, parseListCount, parseRelatedAddresses, parseSegments, } from "../domain/hopperValues.js";
4
5
  import { err, ok } from "../domain/result.js";
5
- import { categorizeSwiftTypes, discoverObjcClasses, discoverObjcProtocols, discoverSwiftClasses, } from "../domain/symbolAnalysis.js";
6
+ import { categorizeSwiftTypes, discoverObjcClasses, discoverObjcProtocols, } from "../domain/symbolAnalysis.js";
7
+ import { inspectNativeDispatchMetadata, nativeDispatchMetadataResultSchema, } from "../domain/objcSwiftMetadata.js";
8
+ import { traceNativeUiAction } from "./NativeUiActionTrace.js";
6
9
  import { jsonValueSchema } from "../domain/jsonValue.js";
7
10
  import { invalidEnhancedInput, } from "./EnhancedToolTypes.js";
8
- import { readAllAddressed } from "./EnhancedToolPagination.js";
9
11
  import { traceCallPath } from "./CallPathTracing.js";
10
12
  import { traceLiteralFeature } from "./EnhancedLiteralTracing.js";
11
13
  import { projectNativeApiInspection } from "./NativeApiInspection.js";
@@ -25,11 +27,17 @@ export class EnhancedTools {
25
27
  name === "find_code_for_string" ||
26
28
  name === "trace_call_path")
27
29
  return this.#executeTracing(name, input, signal);
30
+ if (name === "trace_native_ui_action") {
31
+ const parsed = enhancedInputSchemas.trace_native_ui_action.safeParse(input);
32
+ return parsed.success
33
+ ? this.executeValidated({ name, input: parsed.data }, signal)
34
+ : invalidEnhancedInput(name, parsed.error);
35
+ }
28
36
  if (name === "analyze_function" || name === "inspect_native_api")
29
37
  return this.#executeFunctionAnalysis(name, input, signal);
30
38
  switch (name) {
31
- case "swift_classes": {
32
- const parsed = enhancedInputSchemas.swift_classes.safeParse(input);
39
+ case "inspect_native_dispatch_metadata": {
40
+ const parsed = enhancedInputSchemas.inspect_native_dispatch_metadata.safeParse(input);
33
41
  return parsed.success
34
42
  ? this.executeValidated({ name, input: parsed.data }, signal)
35
43
  : invalidEnhancedInput(name, parsed.error);
@@ -54,8 +62,12 @@ export class EnhancedTools {
54
62
  ? this.executeValidated({ name, input: parsed.data }, signal)
55
63
  : invalidEnhancedInput(name, parsed.error);
56
64
  }
57
- case "analyze_swift_types":
58
- return this.executeValidated({ name, input: {} }, signal);
65
+ case "analyze_swift_types": {
66
+ const parsed = enhancedInputSchemas.analyze_swift_types.safeParse(input);
67
+ return parsed.success
68
+ ? this.executeValidated({ name, input: parsed.data }, signal)
69
+ : invalidEnhancedInput(name, parsed.error);
70
+ }
59
71
  case "find_xrefs_to_name": {
60
72
  const parsed = enhancedInputSchemas.find_xrefs_to_name.safeParse(input);
61
73
  return parsed.success
@@ -73,8 +85,8 @@ export class EnhancedTools {
73
85
  /** Dispatch input already parsed by a trusted adapter boundary. */
74
86
  executeValidated(call, signal) {
75
87
  switch (call.name) {
76
- case "swift_classes":
77
- return this.#swiftClasses(call.input.pattern, signal);
88
+ case "inspect_native_dispatch_metadata":
89
+ return this.#inspectNativeDispatchMetadata(call.input.max_records, signal);
78
90
  case "get_objc_classes":
79
91
  return this.#objcClasses(call.input.pattern, signal);
80
92
  case "get_objc_protocols":
@@ -84,11 +96,11 @@ export class EnhancedTools {
84
96
  case "get_call_graph":
85
97
  return this.#callGraph(call.input, signal);
86
98
  case "analyze_swift_types":
87
- return this.#analyzeSwiftTypes(signal);
99
+ return this.#analyzeSwiftTypes(call.input, signal);
88
100
  case "find_xrefs_to_name":
89
101
  return this.#findXrefs(call.input.name, signal);
90
102
  case "binary_overview":
91
- return this.#binaryOverview(call.input, signal);
103
+ return this.#binaryOverview(signal);
92
104
  case "analyze_function":
93
105
  return this.#analyzeFunction(call.input, signal);
94
106
  case "inspect_native_api":
@@ -99,6 +111,9 @@ export class EnhancedTools {
99
111
  return traceLiteralFeature((name, arguments_, operationSignal) => this.#call(name, arguments_, operationSignal), call.input, "string", signal);
100
112
  case "trace_call_path":
101
113
  return traceCallPath((name, arguments_, operationSignal) => this.#call(name, arguments_, operationSignal), call.input, signal);
114
+ case "trace_native_ui_action": {
115
+ return traceNativeUiAction(this.analysis, call.input, signal);
116
+ }
102
117
  }
103
118
  }
104
119
  #executeTracing(name, input, signal) {
@@ -138,9 +153,6 @@ export class EnhancedTools {
138
153
  async #inspectNativeApi(input, signal) {
139
154
  const analysisInput = enhancedInputSchemas.analyze_function.parse({
140
155
  procedure: input.procedure,
141
- include_assembly: true,
142
- max_pseudocode_chars: input.max_pseudocode_chars,
143
- max_instructions: input.max_instructions,
144
156
  });
145
157
  const result = await this.#call("analyze_function", analysisInput, signal);
146
158
  if (!result.ok)
@@ -151,16 +163,32 @@ export class EnhancedTools {
151
163
  const dossier = functionDossierSchema.parse(parsed.value);
152
164
  return ok(jsonValueSchema.parse(projectNativeApiInspection(dossier)));
153
165
  }
154
- async #swiftClasses(pattern, signal) {
155
- const procedures = await this.#allAddressed("list_procedures", signal);
156
- return procedures.ok
157
- ? ok(discoverSwiftClasses(procedures.value, pattern))
158
- : procedures;
159
- }
160
166
  async #objcClasses(pattern, signal) {
161
167
  const names = await this.#allAddressed("list_names", signal);
162
168
  return names.ok ? ok(discoverObjcClasses(names.value, pattern)) : names;
163
169
  }
170
+ async #inspectNativeDispatchMetadata(maxRecords, signal) {
171
+ const execution = await this.analysis.execute("list_names", {}, signal === undefined ? {} : { signal });
172
+ if (!execution.ok)
173
+ return err(execution.error);
174
+ const names = z
175
+ .array(z.union([
176
+ z.strictObject({ address: z.string(), value: z.string() }),
177
+ z.strictObject({ address: z.string(), name: z.string() }),
178
+ ]))
179
+ .safeParse(execution.value.result);
180
+ if (!names.success)
181
+ return err(new AnalysisOutputError("list_names", "provider returned an invalid inventory"));
182
+ return ok(nativeDispatchMetadataResultSchema.parse({
183
+ target_sha256: execution.value.subject?.sha256 ?? null,
184
+ provider: execution.value.provider,
185
+ analysis_profile_digest: execution.value.analysisProfile?.digest ?? null,
186
+ result: inspectNativeDispatchMetadata(names.data.map((entry) => ({
187
+ address: entry.address,
188
+ name: "value" in entry ? entry.value : entry.name,
189
+ })), maxRecords),
190
+ }));
191
+ }
164
192
  async #objcProtocols(signal) {
165
193
  const names = await this.#allAddressed("list_names", signal);
166
194
  return names.ok ? ok(discoverObjcProtocols(names.value)) : names;
@@ -201,9 +229,8 @@ export class EnhancedTools {
201
229
  const graph = {};
202
230
  while (queueIndex < queue.length) {
203
231
  const current = queue[queueIndex++];
204
- if (current === undefined || current.depth >= input.depth) {
232
+ if (current === undefined)
205
233
  continue;
206
- }
207
234
  const level = String(current.depth);
208
235
  graph[level] ??= [];
209
236
  const result = await this.#call(tool, { procedure: current.address }, signal);
@@ -229,21 +256,19 @@ export class EnhancedTools {
229
256
  status: "ok",
230
257
  calls: [...related.value],
231
258
  });
232
- if (current.depth + 1 < input.depth) {
233
- for (const address of related.value) {
234
- if (!discovered.has(address)) {
235
- discovered.add(address);
236
- queue.push({ address, depth: current.depth + 1 });
237
- }
259
+ for (const address of related.value) {
260
+ if (!discovered.has(address)) {
261
+ discovered.add(address);
262
+ queue.push({ address, depth: current.depth + 1 });
238
263
  }
239
264
  }
240
265
  }
241
266
  return ok(graph);
242
267
  }
243
- async #analyzeSwiftTypes(signal) {
268
+ async #analyzeSwiftTypes(input, signal) {
244
269
  const procedures = await this.#allAddressed("list_procedures", signal);
245
270
  return procedures.ok
246
- ? ok(categorizeSwiftTypes(procedures.value))
271
+ ? ok(categorizeSwiftTypes(procedures.value, input))
247
272
  : procedures;
248
273
  }
249
274
  async #findXrefs(name, signal) {
@@ -266,12 +291,12 @@ export class EnhancedTools {
266
291
  xrefs: xrefs.value,
267
292
  });
268
293
  }
269
- async #binaryOverview(input, signal) {
294
+ async #binaryOverview(signal) {
270
295
  const [segmentsResult, documentsResult, proceduresResult, stringsResult] = await Promise.all([
271
296
  this.#call("list_segments", {}, signal),
272
297
  this.#call("list_documents", {}, signal),
273
- this.#call("list_procedures", { offset: 0, limit: 1 }, signal),
274
- this.#call("list_strings", { offset: 0, limit: 1 }, signal),
298
+ this.#call("list_procedures", {}, signal),
299
+ this.#call("list_strings", {}, signal),
275
300
  ]);
276
301
  if (!segmentsResult.ok)
277
302
  return segmentsResult;
@@ -295,28 +320,35 @@ export class EnhancedTools {
295
320
  return stringCount;
296
321
  return ok({
297
322
  document: documents.value[0] ?? "unknown",
298
- detail: input.detail,
299
- segments: segments.value
300
- .slice(0, input.limit)
301
- .map(({ name, start, end }) => input.detail === "detailed"
302
- ? { name, start, end, length: addressDistance(start, end) }
303
- : { name, start, end }),
323
+ segments: segments.value.map(({ name, start, end }) => ({
324
+ name,
325
+ start,
326
+ end,
327
+ length: addressDistance(start, end),
328
+ })),
304
329
  segment_count: segments.value.length,
305
330
  procedure_count: procedureCount.value,
306
331
  string_count: stringCount.value,
307
332
  });
308
333
  }
309
334
  async #allAddressed(tool, signal) {
310
- return readAllAddressed({
311
- call: (name, arguments_, operationSignal) => this.#call(name, arguments_, operationSignal),
312
- tool,
313
- ...(signal === undefined ? {} : { signal }),
314
- });
335
+ const result = await this.#call(tool, {}, signal);
336
+ if (!result.ok)
337
+ return result;
338
+ const parsed = z
339
+ .array(z.object({ address: z.string(), value: z.string() }))
340
+ .safeParse(result.value);
341
+ return parsed.success
342
+ ? ok(parsed.data.map(({ address, value: name }) => ({ address, name })))
343
+ : err(new AnalysisOutputError(tool, "provider returned an invalid inventory"));
315
344
  }
316
345
  async #call(name, arguments_, signal) {
317
- if (signal?.aborted === true)
346
+ if (isAborted(signal))
318
347
  return err(new AnalysisCancelledError(name));
319
348
  const execution = await this.analysis.execute(name, arguments_, signal === undefined ? {} : { signal });
349
+ if (isAborted(signal))
350
+ return err(new AnalysisCancelledError(name));
320
351
  return execution.ok ? ok(execution.value.result) : execution;
321
352
  }
322
353
  }
354
+ const isAborted = (signal) => signal?.aborted === true;
@@ -4,9 +4,9 @@ import { err, ok } from "../domain/result.js";
4
4
  import { compareBundles } from "../domain/bundleComparison.js";
5
5
  import { EvidenceLedger } from "./EvidenceLedger.js";
6
6
  import { readEvidenceBundle, writeEvidenceBundle, } from "./EvidenceBundleFiles.js";
7
- /** Validate and merge one bundle using the same bounded ledger as MCP. */
8
- export const importEvidenceBundleCommand = async (path, policy) => {
9
- const loaded = await readEvidenceBundle(path, policy);
7
+ /** Validate and merge one bundle using the session Evidence ledger. */
8
+ export const importEvidenceBundleCommand = async (path) => {
9
+ const loaded = await readEvidenceBundle(path);
10
10
  if (!loaded.ok)
11
11
  return loaded;
12
12
  const ledger = createLedger();
@@ -20,24 +20,24 @@ export const importEvidenceBundleCommand = async (path, policy) => {
20
20
  : imported;
21
21
  };
22
22
  /** Validate a source bundle and atomically export canonical bytes. */
23
- export const exportEvidenceBundleCommand = async (sourcePath, outputPath, overwrite, policy) => {
24
- const loaded = await readEvidenceBundle(sourcePath, policy);
23
+ export const exportEvidenceBundleCommand = async (sourcePath, outputPath, overwrite) => {
24
+ const loaded = await readEvidenceBundle(sourcePath);
25
25
  if (!loaded.ok)
26
26
  return loaded;
27
- return projectWrite(loaded.value, await writeEvidenceBundle(loaded.value, outputPath, overwrite, policy));
27
+ return projectWrite(loaded.value, await writeEvidenceBundle(loaded.value, outputPath, overwrite));
28
28
  };
29
- /** Compare two validated canonical Evidence v2 bundles without session state. */
29
+ /** Compare two validated canonical Evidence bundles without session state. */
30
30
  export const compareEvidenceBundlesCommand = async (input) => {
31
31
  const [left, right] = await Promise.all([
32
- readEvidenceBundle(input.leftPath, input.policy),
33
- readEvidenceBundle(input.rightPath, input.policy),
32
+ readEvidenceBundle(input.leftPath),
33
+ readEvidenceBundle(input.rightPath),
34
34
  ]);
35
35
  if (!left.ok)
36
36
  return left;
37
37
  if (!right.ok)
38
38
  return right;
39
39
  try {
40
- return ok(jsonValueSchema.parse(compareBundles(left.value, right.value, [], input.offset, input.limit)));
40
+ return ok(jsonValueSchema.parse(compareBundles(left.value, right.value)));
41
41
  }
42
42
  catch (cause) {
43
43
  return err(new EvidenceIntegrityError("Evidence bundle comparison failed", {
@@ -45,7 +45,7 @@ export const compareEvidenceBundlesCommand = async (input) => {
45
45
  }));
46
46
  }
47
47
  };
48
- const createLedger = () => new EvidenceLedger({ maxRecords: 10_000, maxBytes: 64 * 1024 * 1024 });
48
+ const createLedger = () => new EvidenceLedger();
49
49
  const projectWrite = (bundle, written) => written.ok
50
50
  ? ok({
51
51
  path: written.value.path,
@@ -1,21 +1,17 @@
1
1
  import { parseEvidenceBundle, serializeEvidenceBundle, } from "../domain/evidenceBundle.js";
2
2
  import { EvidenceFileError, EvidenceIntegrityError } from "../domain/errors.js";
3
3
  import { err, ok } from "../domain/result.js";
4
- import { LEGACY_PROCESS_CAPTURE_MESSAGE, parseProcessCapture, } from "../domain/processCapture.js";
5
- import { readBoundedJson, writeBoundedText } from "./BoundedJsonFiles.js";
6
- /** Read and validate a bounded evidence bundle inside an approved root. */
7
- export const readEvidenceBundle = async (path, policy) => {
8
- if (policy.roots.length === 0)
9
- return err(new EvidenceFileError("read", "disabled"));
10
- const loaded = await readBoundedJson(path, policy);
4
+ import { parseProcessCapture } from "../domain/processCapture.js";
5
+ import { readJsonFile, writeTextFile } from "./JsonFiles.js";
6
+ /** Read and validate an evidence bundle at the caller-supplied path. */
7
+ export const readEvidenceBundle = async (path) => {
8
+ const loaded = await readJsonFile(path);
11
9
  if (!loaded.ok)
12
10
  return loaded;
13
11
  try {
14
12
  const bundle = parseEvidenceBundle(loaded.value);
15
13
  for (const record of bundle.records) {
16
- if (record.predicate_type === "rea.process-capture/v3")
17
- throw new TypeError(LEGACY_PROCESS_CAPTURE_MESSAGE);
18
- if (record.predicate_type === "rea.process-capture/v4")
14
+ if (record.predicate_type === "rea.process-capture")
19
15
  parseProcessCapture(record.normalized_result);
20
16
  }
21
17
  return ok(bundle);
@@ -26,10 +22,8 @@ export const readEvidenceBundle = async (path, policy) => {
26
22
  }));
27
23
  }
28
24
  };
29
- /** Atomically write deterministic evidence JSON inside an approved root. */
30
- export const writeEvidenceBundle = async (bundle, path, overwrite, policy) => {
31
- if (policy.roots.length === 0)
32
- return err(new EvidenceFileError("write", "disabled"));
25
+ /** Atomically write deterministic evidence JSON at the caller-supplied path. */
26
+ export const writeEvidenceBundle = async (bundle, path, overwrite) => {
33
27
  let encoded;
34
28
  try {
35
29
  encoded = serializeEvidenceBundle(bundle);
@@ -39,5 +33,5 @@ export const writeEvidenceBundle = async (bundle, path, overwrite, policy) => {
39
33
  cause,
40
34
  }));
41
35
  }
42
- return writeBoundedText(encoded, path, overwrite, policy);
36
+ return writeTextFile(encoded, path, overwrite);
43
37
  };
@@ -1,23 +1,14 @@
1
1
  import canonicalize from "canonicalize";
2
2
  import { createEvidenceBundle, parseEvidenceBundle, validateResidualUnknownAddition, } from "../domain/evidenceBundle.js";
3
- import { EvidenceIntegrityError, EvidenceLimitError, UnknownRegistryError, } from "../domain/errors.js";
3
+ import { EvidenceIntegrityError, UnknownRegistryError, } from "../domain/errors.js";
4
4
  import { parseEvidence } from "../domain/evidence.js";
5
5
  import { createResidualUnknown, updateResidualUnknown, } from "../domain/residualUnknown.js";
6
6
  import { err, ok } from "../domain/result.js";
7
- /** Bounded, session-owned set of immutable evidence records. */
7
+ /** Session-owned set of immutable evidence records. */
8
8
  export class EvidenceLedger {
9
- limits;
10
9
  #records = new Map();
11
10
  #unknownRevisions = new Map();
12
11
  #unknownHeads = new Map();
13
- #bytes = 0;
14
- constructor(limits) {
15
- this.limits = limits;
16
- if (!Number.isSafeInteger(limits.maxRecords) || limits.maxRecords < 1)
17
- throw new RangeError("maxRecords must be a positive safe integer");
18
- if (!Number.isSafeInteger(limits.maxBytes) || limits.maxBytes < 1)
19
- throw new RangeError("maxBytes must be a positive safe integer");
20
- }
21
12
  /** Record evidence idempotently; conflicting content is rejected. */
22
13
  record(input) {
23
14
  let evidence;
@@ -35,13 +26,7 @@ export class EvidenceLedger {
35
26
  ? ok("duplicate")
36
27
  : err(new EvidenceIntegrityError("Conflicting evidence record"));
37
28
  }
38
- if (this.#exceedsRecordLimit(this.#records.size + 1, this.#unknownRevisions.size))
39
- return err(new EvidenceLimitError("records", this.limits.maxRecords));
40
- const bytes = serializedBytes(evidence);
41
- if (this.#bytes + bytes > this.limits.maxBytes)
42
- return err(new EvidenceLimitError("bytes", this.limits.maxBytes));
43
29
  this.#records.set(evidence.evidence_id, evidence);
44
- this.#bytes += bytes;
45
30
  return ok("added");
46
31
  }
47
32
  /** Validate an entire bundle before atomically merging its records. */
@@ -83,7 +68,7 @@ export class EvidenceLedger {
83
68
  return err(checked.error);
84
69
  }
85
70
  const added = pending.size - this.#records.size;
86
- this.#commit(pending, pendingUnknowns, checked.value);
71
+ this.#commit(pending, pendingUnknowns);
87
72
  return ok({
88
73
  recordsAdded: added,
89
74
  unknownsAdded,
@@ -125,7 +110,7 @@ export class EvidenceLedger {
125
110
  return err(new UnknownRegistryError("already-exists"));
126
111
  return this.#appendUnknown(unknown, parsedMutation);
127
112
  }
128
- /** Atomically record derived Evidence and an approved residual unknown. */
113
+ /** Atomically record derived Evidence and a linked residual unknown. */
129
114
  recordWithUnknown(evidenceInput, input, mutationInput) {
130
115
  let evidence;
131
116
  let mutation;
@@ -206,7 +191,6 @@ export class EvidenceLedger {
206
191
  this.#records.clear();
207
192
  this.#unknownRevisions.clear();
208
193
  this.#unknownHeads.clear();
209
- this.#bytes = 0;
210
194
  }
211
195
  #appendUnknown(unknown, mutationEvidenceInput) {
212
196
  let mutationEvidence;
@@ -225,7 +209,6 @@ export class EvidenceLedger {
225
209
  }
226
210
  #appendIncremental(records, unknown) {
227
211
  const additions = new Map();
228
- let addedBytes = 0;
229
212
  for (const evidence of records) {
230
213
  const existing = additions.get(evidence.evidence_id) ??
231
214
  this.#records.get(evidence.evidence_id);
@@ -235,16 +218,10 @@ export class EvidenceLedger {
235
218
  continue;
236
219
  }
237
220
  additions.set(evidence.evidence_id, evidence);
238
- addedBytes += serializedBytes(evidence);
239
221
  }
240
222
  const unknownKey = unknown === undefined ? undefined : unknownRevisionKey(unknown);
241
223
  if (unknownKey !== undefined && this.#unknownRevisions.has(unknownKey))
242
224
  return err(new UnknownRegistryError("integrity"));
243
- const unknownBytes = unknown === undefined ? 0 : serializedBytes(unknown);
244
- if (this.#exceedsRecordLimit(this.#records.size + additions.size, this.#unknownRevisions.size + (unknown === undefined ? 0 : 1)))
245
- return err(new EvidenceLimitError("records", this.limits.maxRecords));
246
- if (this.#bytes + addedBytes + unknownBytes > this.limits.maxBytes)
247
- return err(new EvidenceLimitError("bytes", this.limits.maxBytes));
248
225
  if (unknown !== undefined)
249
226
  try {
250
227
  validateResidualUnknownAddition(unknown, {
@@ -261,28 +238,18 @@ export class EvidenceLedger {
261
238
  this.#unknownRevisions.set(unknownKey, unknown);
262
239
  this.#unknownHeads.set(unknown.unknown_id, unknown);
263
240
  }
264
- this.#bytes += addedBytes + unknownBytes;
265
241
  return ok(undefined);
266
242
  }
267
243
  #validateCandidate(records, unknowns) {
268
- if (this.#exceedsRecordLimit(records.size, unknowns.size))
269
- return err(new EvidenceLimitError("records", this.limits.maxRecords));
270
- const bytes = [...records.values()].reduce((total, evidence) => total + serializedBytes(evidence), 0) +
271
- [...unknowns.values()].reduce((total, unknown) => total + serializedBytes(unknown), 0);
272
- if (bytes > this.limits.maxBytes)
273
- return err(new EvidenceLimitError("bytes", this.limits.maxBytes));
274
244
  try {
275
245
  parseEvidenceBundle(createEvidenceBundle([...records.values()], [...unknowns.values()]));
276
246
  }
277
247
  catch (cause) {
278
248
  return err(new UnknownRegistryError("integrity", { cause }));
279
249
  }
280
- return ok(bytes);
281
- }
282
- #exceedsRecordLimit(recordCount, unknownCount) {
283
- return recordCount + unknownCount > this.limits.maxRecords;
250
+ return ok(undefined);
284
251
  }
285
- #commit(records, unknowns, bytes) {
252
+ #commit(records, unknowns) {
286
253
  this.#records.clear();
287
254
  for (const [id, evidence] of records)
288
255
  this.#records.set(id, evidence);
@@ -294,10 +261,8 @@ export class EvidenceLedger {
294
261
  if (head === undefined || head.revision < unknown.revision)
295
262
  this.#unknownHeads.set(unknown.unknown_id, unknown);
296
263
  }
297
- this.#bytes = bytes;
298
264
  }
299
265
  }
300
- const serializedBytes = (value) => Buffer.byteLength(JSON.stringify(value), "utf8");
301
266
  const unknownRevisionKey = (unknown) => `${unknown.unknown_id}:${String(unknown.revision)}`;
302
267
  const recordsAgree = (left, right) => canonicalize(withoutLocalPath(left)) ===
303
268
  canonicalize(withoutLocalPath(right));