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,7 @@
1
1
  import { inferJsonShape } from "../domain/jsonShape.js";
2
2
  import { safeResponseMetadata } from "./CdpSafeMetadata.js";
3
- import { boundedSensitiveText } from "./SensitiveTextCapture.js";
4
- import { allowedSanitizedUrl, boundedText, isHttpUrl, numberValue, recordValue, recordsValue, stringValue, } from "./CdpCaptureValues.js";
3
+ import { redactSensitiveText } from "./SensitiveTextCapture.js";
4
+ import { allowedSanitizedUrl, isHttpUrl, numberValue, recordValue, recordsValue, stringValue, } from "./CdpCaptureValues.js";
5
5
  import { requestBodyShape } from "./CdpCaptureEventBodyShapes.js";
6
6
  import { consolePrimitive, decodeBase64, exclusionReasonForUrl, executionContextKey, firstCallFrame, initiatorLocation, integerOrNull, } from "./CdpCaptureEventHelpers.js";
7
7
  export const handleExecutionContextCreated = (state, params) => {
@@ -10,15 +10,9 @@ export const handleExecutionContextCreated = (state, params) => {
10
10
  const frameId = stringValue(recordValue(context?.auxData)?.frameId);
11
11
  if (identifier === undefined ||
12
12
  !Number.isSafeInteger(identifier) ||
13
- frameId === undefined ||
14
- frameId.length > 256)
13
+ frameId === undefined)
15
14
  return;
16
15
  const key = String(identifier);
17
- if (state.executionContextFrames.size >= state.input.limits.max_scripts &&
18
- !state.executionContextFrames.has(key)) {
19
- state.completeness.truncate("scripts");
20
- return;
21
- }
22
16
  state.executionContextFrames.set(key, frameId);
23
17
  };
24
18
  export const handleExecutionContextDestroyed = (state, params) => {
@@ -30,7 +24,7 @@ export const handleScriptParsed = (state, params) => {
30
24
  const scriptId = stringValue(params.scriptId);
31
25
  const rawUrl = stringValue(params.url) ?? "";
32
26
  const sanitized = allowedSanitizedUrl(rawUrl, state.allowedOrigins);
33
- if (scriptId === undefined || scriptId.length > 256) {
27
+ if (scriptId === undefined) {
34
28
  state.completeness.exclude("scripts", "invalid_protocol_value");
35
29
  return;
36
30
  }
@@ -38,21 +32,16 @@ export const handleScriptParsed = (state, params) => {
38
32
  state.completeness.exclude("scripts", exclusionReasonForUrl(rawUrl));
39
33
  return;
40
34
  }
41
- if (state.scripts.size >= state.input.limits.max_scripts &&
42
- !state.scripts.has(scriptId)) {
43
- state.completeness.drop("scripts");
44
- return;
45
- }
46
35
  const sourceMap = sourceMapForScript(params.sourceMapURL, rawUrl, state);
47
36
  const script = {
48
37
  scriptId,
49
38
  rawUrl,
50
39
  url: sanitized.url,
51
40
  origin: sanitized.origin,
52
- hash: (stringValue(params.hash) ?? "").slice(0, 512),
41
+ hash: stringValue(params.hash) ?? "",
53
42
  length: Math.max(0, Math.min(Number.MAX_SAFE_INTEGER, Math.trunc(numberValue(params.length) ?? 0))),
54
43
  isModule: params.isModule === true,
55
- language: boundedText(params.scriptLanguage, 100),
44
+ language: stringValue(params.scriptLanguage) ?? null,
56
45
  sourceMapUrl: sourceMap.sanitized,
57
46
  sourceMapRawUrl: sourceMap.raw,
58
47
  executionContextKey: executionContextKey(params.executionContextId),
@@ -80,7 +69,7 @@ const sourceMapForScript = (value, scriptUrl, state) => {
80
69
  export const handleRequestWillBeSent = (state, params) => {
81
70
  const requestId = stringValue(params.requestId);
82
71
  const request = recordValue(params.request);
83
- if (requestId === undefined || requestId.length > 256) {
72
+ if (requestId === undefined) {
84
73
  state.completeness.exclude("network_requests", "invalid_protocol_value");
85
74
  return;
86
75
  }
@@ -95,11 +84,6 @@ export const handleRequestWillBeSent = (state, params) => {
95
84
  state.network.delete(requestId);
96
85
  return;
97
86
  }
98
- if (state.network.size >= state.input.limits.max_network_events &&
99
- !state.network.has(requestId)) {
100
- state.completeness.drop("network_requests");
101
- return;
102
- }
103
87
  const initiator = recordValue(params.initiator);
104
88
  const initiatorFrame = initiatorLocation(initiator);
105
89
  const rawInitiatorUrl = stringValue(initiatorFrame?.url);
@@ -110,13 +94,13 @@ export const handleRequestWillBeSent = (state, params) => {
110
94
  request_id: requestId,
111
95
  url: sanitized.url,
112
96
  origin: sanitized.origin ?? "",
113
- method: (stringValue(request.method) ?? "GET").slice(0, 32),
114
- resource_type: boundedText(params.type, 100),
97
+ method: stringValue(request.method) ?? "GET",
98
+ resource_type: stringValue(params.type) ?? null,
115
99
  status: null,
116
100
  mime_type: null,
117
101
  encoded_data_length: null,
118
102
  initiator: {
119
- type: (stringValue(initiator?.type) ?? "other").slice(0, 100),
103
+ type: stringValue(initiator?.type) ?? "other",
120
104
  url: initiatorUrl?.url ?? null,
121
105
  line: integerOrNull(initiatorFrame?.lineNumber),
122
106
  column: integerOrNull(initiatorFrame?.columnNumber),
@@ -126,7 +110,7 @@ export const handleRequestWillBeSent = (state, params) => {
126
110
  };
127
111
  export const handleResponseReceived = (state, params) => {
128
112
  const requestId = stringValue(params.requestId);
129
- if (requestId === undefined || requestId.length > 256) {
113
+ if (requestId === undefined) {
130
114
  state.completeness.exclude("network_requests", "invalid_protocol_value");
131
115
  return;
132
116
  }
@@ -145,19 +129,15 @@ export const handleResponseReceived = (state, params) => {
145
129
  state.network.set(requestId, {
146
130
  ...current,
147
131
  status: numberValue(response.status) ?? null,
148
- mime_type: boundedText(response.mimeType, 256),
132
+ mime_type: stringValue(response.mimeType) ?? null,
149
133
  });
150
- if (state.responseMetadata.length >= state.input.limits.max_network_events) {
151
- state.completeness.truncate("metadata");
152
- return;
153
- }
154
134
  const metadata = safeResponseMetadata(requestId, sanitized.url, response, state.allowedOrigins);
155
135
  state.responseMetadata.push(metadata.response);
156
136
  state.agentHints.push(...metadata.agentHints);
157
137
  };
158
138
  export const handleLoadingFinished = (state, params) => {
159
139
  const requestId = stringValue(params.requestId);
160
- if (requestId === undefined || requestId.length > 256)
140
+ if (requestId === undefined)
161
141
  return;
162
142
  const current = state.network.get(requestId);
163
143
  if (current === undefined)
@@ -178,17 +158,11 @@ export const handleConsoleAPICalled = (state, params) => {
178
158
  state.completeness.exclude("console_events", exclusionReasonForUrl(stringValue(frame.url)));
179
159
  return;
180
160
  }
181
- if (state.console.length >= state.input.limits.max_console_events) {
182
- state.completeness.drop("console_events");
183
- return;
184
- }
185
161
  const arguments_ = recordsValue(params.args);
186
162
  state.console.push({
187
- type: (stringValue(params.type) ?? "unknown").slice(0, 100),
163
+ type: stringValue(params.type) ?? "unknown",
188
164
  timestamp: numberValue(params.timestamp) ?? 0,
189
- argument_types: arguments_
190
- .map((argument) => (stringValue(argument.type) ?? "unknown").slice(0, 100))
191
- .slice(0, 100),
165
+ argument_types: arguments_.map((argument) => stringValue(argument.type) ?? "unknown"),
192
166
  url: source.url,
193
167
  line: integerOrNull(frame.lineNumber),
194
168
  column: integerOrNull(frame.columnNumber),
@@ -201,50 +175,32 @@ const captureConsoleText = (state, arguments_) => {
201
175
  status: "not_approved",
202
176
  values: [],
203
177
  retained_bytes: 0,
204
- truncated_values: 0,
205
178
  };
206
179
  const values = [];
207
180
  let retainedBytes = 0;
208
- let truncatedValues = 0;
209
181
  for (const [argumentIndex, argument] of arguments_.entries()) {
210
182
  const primitive = consolePrimitive(argument);
211
183
  if (primitive === undefined)
212
184
  continue;
213
- const remaining = state.input.limits.max_total_console_text_bytes - state.consoleTextBytes;
214
- if (remaining <= 0) {
215
- truncatedValues += 1;
216
- continue;
217
- }
218
- const bounded = boundedSensitiveText(primitive.text, Math.min(state.input.limits.max_console_text_field_bytes, remaining));
185
+ const text = redactSensitiveText(primitive.text);
219
186
  values.push({
220
187
  argument_index: argumentIndex,
221
188
  type: primitive.type,
222
- text: bounded.text,
189
+ text,
223
190
  });
224
- retainedBytes += bounded.bytes;
225
- state.consoleTextBytes += bounded.bytes;
226
- if (bounded.truncated)
227
- truncatedValues += 1;
191
+ retainedBytes += Buffer.byteLength(text);
228
192
  }
229
- if (truncatedValues > 0)
230
- state.completeness.truncate("console_text");
231
193
  return {
232
- status: truncatedValues > 0 ? "truncated" : "included",
194
+ status: "included",
233
195
  values,
234
196
  retained_bytes: retainedBytes,
235
- truncated_values: truncatedValues,
236
197
  };
237
198
  };
238
199
  export const handleWebSocketFrame = (state, params, direction) => {
239
200
  const requestId = stringValue(params.requestId);
240
201
  if (requestId === undefined ||
241
- requestId.length > 256 ||
242
202
  (!state.network.has(requestId) && !state.allowedWebSockets.has(requestId)))
243
203
  return;
244
- if (state.websockets.length >= state.input.limits.max_websocket_events) {
245
- state.completeness.drop("websocket_frames");
246
- return;
247
- }
248
204
  const response = recordValue(params.response);
249
205
  const payload = stringValue(response?.payloadData) ?? "";
250
206
  const opcode = Math.max(0, Math.trunc(numberValue(response?.opcode) ?? 0));
@@ -263,33 +219,17 @@ const captureWebSocketShape = (state, payload, opcode) => {
263
219
  if (!state.input.include_websocket_shapes)
264
220
  return null;
265
221
  if (opcode !== 1)
266
- return { format: "binary", json_shape: null, truncated: false };
267
- const bytes = Buffer.byteLength(payload);
268
- const remaining = state.input.limits.max_total_websocket_shape_bytes -
269
- state.websocketShapeBytes;
270
- if (bytes > state.input.limits.max_websocket_shape_bytes ||
271
- bytes > remaining) {
272
- state.completeness.truncate("websocket_shapes");
273
- return { format: "text", json_shape: null, truncated: true };
274
- }
275
- state.websocketShapeBytes += bytes;
276
- const shape = inferJsonShape(payload, {
277
- maximumBytes: state.input.limits.max_websocket_shape_bytes,
278
- maximumNodes: state.input.limits.max_json_shape_nodes,
279
- maximumDepth: state.input.limits.max_json_shape_depth,
280
- });
281
- if (shape?.truncated === true)
282
- state.completeness.truncate("websocket_shapes");
222
+ return { format: "binary", json_shape: null };
223
+ const shape = inferJsonShape(payload);
283
224
  return {
284
225
  format: shape === null ? "text" : "json",
285
226
  json_shape: shape,
286
- truncated: shape?.truncated === true,
287
227
  };
288
228
  };
289
229
  export const handleWebSocketCreated = (state, params) => {
290
230
  const requestId = stringValue(params.requestId);
291
231
  const rawUrl = stringValue(params.url);
292
- if (requestId === undefined || requestId.length > 256) {
232
+ if (requestId === undefined) {
293
233
  state.completeness.exclude("websocket_connections", "invalid_protocol_value");
294
234
  return;
295
235
  }
@@ -317,11 +257,6 @@ export const handleWebSocketCreated = (state, params) => {
317
257
  state.completeness.exclude("websocket_connections", "disallowed_origin");
318
258
  return;
319
259
  }
320
- if (!state.allowedWebSockets.has(requestId) &&
321
- state.allowedWebSockets.size >= state.input.limits.max_websocket_events) {
322
- state.completeness.drop("websocket_connections");
323
- return;
324
- }
325
260
  state.allowedWebSockets.add(requestId);
326
261
  };
327
262
  export const handleFrameNavigated = (state, params) => {
@@ -4,7 +4,7 @@ import * as handlers from "./CdpCaptureEventHandlers.js";
4
4
  import { isJsonMediaType } from "./CdpCaptureEventHelpers.js";
5
5
  import { recordValue } from "./CdpCaptureValues.js";
6
6
  export {} from "./CdpCaptureEventTypes.js";
7
- /** Bounded event accumulator that drops payload values at ingestion time. */
7
+ /** Event accumulator that validates and normalizes payloads at ingestion. */
8
8
  export class CdpCaptureEvents {
9
9
  scripts = new Map();
10
10
  executionContextFrames = new Map();
@@ -24,9 +24,6 @@ export class CdpCaptureEvents {
24
24
  originViolation = false;
25
25
  navigationDuringCapture = false;
26
26
  mainFrameId = undefined;
27
- consoleTextBytes = 0;
28
- jsonBodyBytes = 0;
29
- websocketShapeBytes = 0;
30
27
  input;
31
28
  allowedOrigins;
32
29
  constructor(input, allowedOrigins) {
@@ -45,9 +42,6 @@ export class CdpCaptureEvents {
45
42
  this.websockets.length = 0;
46
43
  this.responseMetadata.length = 0;
47
44
  this.agentHints.length = 0;
48
- this.consoleTextBytes = 0;
49
- this.jsonBodyBytes = 0;
50
- this.websocketShapeBytes = 0;
51
45
  this.completeness.reset();
52
46
  if (!this.input.include_console_text)
53
47
  this.completeness.exclude("console_text", "not_approved", null);
@@ -120,7 +114,7 @@ export class CdpCaptureEvents {
120
114
  .map((request) => request.request_id);
121
115
  }
122
116
  responseBodyUnavailable(requestId) {
123
- bodyShapes.updateResponseBodyShape(this, requestId, null, false);
117
+ bodyShapes.updateResponseBodyShape(this, requestId, null);
124
118
  this.completeness.unavailable("json_body_shapes");
125
119
  }
126
120
  ingestResponseBody(requestId, value) {
@@ -2,7 +2,7 @@ import { CdpConnection } from "./CdpConnection.js";
2
2
  import { optionalCdpCommand } from "./CdpOptionalCommand.js";
3
3
  import { captureStorageFingerprints, } from "./CdpCaptureStorageFingerprints.js";
4
4
  import { numberValue, recordValue, recordsValue, stringValue, } from "./CdpCaptureValues.js";
5
- /** Capture redacted, bounded storage metadata for one authorized origin. */
5
+ /** Capture redacted storage metadata for one authorized origin. */
6
6
  export const captureStorage = async (context, origin, limitations) => {
7
7
  const quota = recordValue(await optionalCdpCommand(context, "Storage.getUsageAndQuota", { origin }, limitations));
8
8
  const local = context.input.include_storage_keys
@@ -21,19 +21,17 @@ export const captureStorage = async (context, origin, limitations) => {
21
21
  : undefined;
22
22
  const cacheValues = recordsValue(recordValue(cacheRaw)?.caches);
23
23
  const caches = capturedCaches(cacheValues);
24
- const maximum = context.input.limits.max_storage_keys;
25
24
  const fingerprints = context.input.include_storage_fingerprints
26
25
  ? await captureStorageFingerprints({
27
26
  context,
28
27
  origin,
29
28
  local,
30
29
  session,
31
- indexedDbNames: indexed.slice(0, maximum),
32
- caches: caches.slice(0, maximum),
30
+ indexedDbNames: indexed,
31
+ caches,
33
32
  limitations,
34
33
  })
35
- : { items: [], complete: false, truncated: false };
36
- const truncated = [local.items, session.items, indexed, caches].some((items) => items.length > maximum) || fingerprints.truncated;
34
+ : { items: [], complete: false };
37
35
  const structuredStorageComplete = indexedRaw !== undefined &&
38
36
  Array.isArray(indexedValues) &&
39
37
  indexed.length === indexedValues.length &&
@@ -44,24 +42,15 @@ export const captureStorage = async (context, origin, limitations) => {
44
42
  origin,
45
43
  usage_bytes: numberValue(quota?.usage) ?? null,
46
44
  quota_bytes: numberValue(quota?.quota) ?? null,
47
- local_storage_keys: local.items
48
- .map(({ key }) => key.slice(0, 1_024))
49
- .slice(0, maximum),
50
- session_storage_keys: session.items
51
- .map(({ key }) => key.slice(0, 1_024))
52
- .slice(0, maximum),
53
- indexed_db_names: indexed
54
- .map((name) => name.slice(0, 1_024))
55
- .slice(0, maximum),
56
- cache_names: caches
57
- .map(({ name }) => name.slice(0, 1_024))
58
- .slice(0, maximum),
45
+ local_storage_keys: local.items.map(({ key }) => key),
46
+ session_storage_keys: session.items.map(({ key }) => key),
47
+ indexed_db_names: [...indexed],
48
+ cache_names: caches.map(({ name }) => name),
59
49
  content_fingerprints: [...fingerprints.items],
60
50
  fingerprint_algorithm: "sha256",
61
- fingerprints_complete: fingerprints.complete && structuredStorageComplete && !truncated,
51
+ fingerprints_complete: fingerprints.complete && structuredStorageComplete,
62
52
  values_redacted: true,
63
53
  },
64
- truncated,
65
54
  };
66
55
  };
67
56
  const emptyStorageItems = {
@@ -3,14 +3,11 @@ import canonicalize from "canonicalize";
3
3
  import { CdpConnection } from "./CdpConnection.js";
4
4
  import { optionalCdpCommand } from "./CdpOptionalCommand.js";
5
5
  import { recordValue, recordsValue, stringValue } from "./CdpCaptureValues.js";
6
- const MAX_CACHE_BODY_BYTES = 64 * 1_024;
7
6
  /** Capture stable hashes of approved storage content without returning values. */
8
7
  export const captureStorageFingerprints = async ({ context, origin, local, session, indexedDbNames, caches, limitations, }) => {
9
8
  const state = {
10
9
  items: [],
11
- maximum: context.input.limits.max_storage_keys,
12
10
  complete: local.complete && session.complete,
13
- truncated: false,
14
11
  };
15
12
  const run = { context, limitations, state };
16
13
  addStorageItems(state, "local_storage", local.items);
@@ -19,16 +16,8 @@ export const captureStorageFingerprints = async ({ context, origin, local, sessi
19
16
  await addIndexedDb(run, origin, indexedDbNames);
20
17
  await addCaches(run, caches);
21
18
  state.items.sort((left, right) => compareCodePoints(`${left.scope}:${left.identity_sha256}`, `${right.scope}:${right.identity_sha256}`));
22
- const complete = state.complete &&
23
- !state.truncated &&
24
- state.items.every(({ complete }) => complete);
25
- return complete
26
- ? { items: state.items, complete: true, truncated: false }
27
- : {
28
- items: state.items,
29
- complete: false,
30
- truncated: state.truncated,
31
- };
19
+ const complete = state.complete && state.items.every(({ complete }) => complete);
20
+ return { items: state.items, complete };
32
21
  };
33
22
  const addStorageItems = (state, scope, items) => {
34
23
  for (const item of items)
@@ -80,10 +69,6 @@ const addCookies = async (run, origin) => {
80
69
  };
81
70
  const addIndexedDb = async (run, origin, names) => {
82
71
  for (const databaseName of names) {
83
- if (run.state.items.length >= run.state.maximum) {
84
- run.state.truncated = true;
85
- return;
86
- }
87
72
  const raw = await optionalCdpCommand(run.context, "IndexedDB.requestDatabase", { securityOrigin: origin, databaseName }, run.limitations);
88
73
  const database = recordValue(recordValue(raw)?.databaseWithObjectStores);
89
74
  if (raw === undefined || database === undefined) {
@@ -142,76 +127,88 @@ const indexedDbSchemaComplete = (stores) => stores.every((store) => stringValue(
142
127
  typeof index.unique === "boolean" &&
143
128
  typeof index.multiEntry === "boolean"));
144
129
  const addIndexedDbRecords = async (run, input) => {
145
- const remaining = run.state.maximum - run.state.items.length;
146
- if (remaining <= 0) {
147
- run.state.truncated = true;
148
- return;
149
- }
150
- const raw = await optionalCdpCommand(run.context, "IndexedDB.requestData", {
151
- securityOrigin: input.origin,
152
- databaseName: input.databaseName,
153
- objectStoreName: input.objectStoreName,
154
- indexName: "",
155
- skipCount: 0,
156
- pageSize: remaining,
157
- }, run.limitations);
158
- const result = recordValue(raw);
159
- if (raw === undefined || result === undefined) {
160
- run.state.complete = false;
161
- return;
162
- }
163
- if (!Array.isArray(result.objectStoreDataEntries) ||
164
- typeof result.hasMore !== "boolean") {
165
- run.state.complete = false;
166
- return;
167
- }
168
- const entries = recordsValue(result.objectStoreDataEntries);
169
- if (entries.length !== result.objectStoreDataEntries.length)
170
- run.state.complete = false;
171
- for (const entry of entries) {
172
- const key = stableValue(entry.key);
173
- const primaryKey = stableValue(entry.primaryKey);
174
- const value = stableValue(entry.value);
175
- addFingerprint(run.state, {
176
- scope: "indexed_db_record",
177
- identity: {
178
- database: input.databaseName,
179
- store: input.objectStoreName,
180
- key,
181
- primaryKey,
182
- },
183
- value,
184
- complete: remoteObjectComplete(entry.value),
185
- });
186
- }
187
- if (result.hasMore === true || entries.length > remaining)
188
- run.state.truncated = true;
189
- };
190
- const addCaches = async (run, caches) => {
191
- for (const cache of caches) {
192
- const remaining = run.state.maximum - run.state.items.length;
193
- if (remaining <= 0) {
194
- run.state.truncated = true;
195
- return;
196
- }
197
- const raw = await optionalCdpCommand(run.context, "CacheStorage.requestEntries", { cacheId: cache.id, skipCount: 0, pageSize: remaining }, run.limitations);
130
+ let skipCount = 0;
131
+ while (true) {
132
+ const raw = await optionalCdpCommand(run.context, "IndexedDB.requestData", {
133
+ securityOrigin: input.origin,
134
+ databaseName: input.databaseName,
135
+ objectStoreName: input.objectStoreName,
136
+ indexName: "",
137
+ skipCount,
138
+ pageSize: STORAGE_ENTRY_PAGE_SIZE,
139
+ }, run.limitations);
198
140
  const result = recordValue(raw);
199
141
  if (raw === undefined || result === undefined) {
200
142
  run.state.complete = false;
201
- continue;
143
+ return;
202
144
  }
203
- if (!Array.isArray(result.cacheDataEntries) ||
204
- typeof result.returnCount !== "number") {
145
+ if (!Array.isArray(result.objectStoreDataEntries) ||
146
+ typeof result.hasMore !== "boolean") {
205
147
  run.state.complete = false;
206
- continue;
148
+ return;
149
+ }
150
+ const entries = recordsValue(result.objectStoreDataEntries);
151
+ if (entries.length !== result.objectStoreDataEntries.length)
152
+ run.state.complete = false;
153
+ for (const entry of entries) {
154
+ const key = stableValue(entry.key);
155
+ const primaryKey = stableValue(entry.primaryKey);
156
+ const value = stableValue(entry.value);
157
+ addFingerprint(run.state, {
158
+ scope: "indexed_db_record",
159
+ identity: {
160
+ database: input.databaseName,
161
+ store: input.objectStoreName,
162
+ key,
163
+ primaryKey,
164
+ },
165
+ value,
166
+ complete: remoteObjectComplete(entry.value),
167
+ });
207
168
  }
208
- const entries = recordsValue(result.cacheDataEntries);
209
- if (entries.length !== result.cacheDataEntries.length)
169
+ if (result.hasMore !== true)
170
+ return;
171
+ if (entries.length === 0 ||
172
+ skipCount > Number.MAX_SAFE_INTEGER - entries.length) {
210
173
  run.state.complete = false;
211
- for (const entry of entries)
212
- await addCacheEntry(run, cache, entry);
213
- if (result.returnCount > entries.length)
214
- run.state.truncated = true;
174
+ return;
175
+ }
176
+ skipCount += entries.length;
177
+ }
178
+ };
179
+ const addCaches = async (run, caches) => {
180
+ for (const cache of caches) {
181
+ let skipCount = 0;
182
+ let returnCount;
183
+ while (returnCount === undefined || skipCount < returnCount) {
184
+ const raw = await optionalCdpCommand(run.context, "CacheStorage.requestEntries", { cacheId: cache.id, skipCount, pageSize: STORAGE_ENTRY_PAGE_SIZE }, run.limitations);
185
+ const result = recordValue(raw);
186
+ if (raw === undefined || result === undefined) {
187
+ run.state.complete = false;
188
+ break;
189
+ }
190
+ if (!Array.isArray(result.cacheDataEntries) ||
191
+ typeof result.returnCount !== "number" ||
192
+ !Number.isSafeInteger(result.returnCount) ||
193
+ result.returnCount < 0) {
194
+ run.state.complete = false;
195
+ break;
196
+ }
197
+ const entries = recordsValue(result.cacheDataEntries);
198
+ if (entries.length !== result.cacheDataEntries.length)
199
+ run.state.complete = false;
200
+ for (const entry of entries)
201
+ await addCacheEntry(run, cache, entry);
202
+ returnCount = result.returnCount;
203
+ if (skipCount + entries.length >= returnCount)
204
+ break;
205
+ if (entries.length === 0 ||
206
+ skipCount > Number.MAX_SAFE_INTEGER - entries.length) {
207
+ run.state.complete = false;
208
+ break;
209
+ }
210
+ skipCount += entries.length;
211
+ }
215
212
  }
216
213
  };
217
214
  const addCacheEntry = async (run, cache, entry) => {
@@ -239,7 +236,7 @@ const addCacheEntry = async (run, cache, entry) => {
239
236
  const raw = await optionalCdpCommand(run.context, "CacheStorage.requestCachedResponse", { cacheId: cache.id, requestURL, requestHeaders }, run.limitations);
240
237
  const body = stringValue(recordValue(recordValue(raw)?.response)?.body);
241
238
  const decoded = body === undefined ? null : decodeBase64(body);
242
- const complete = decoded !== null && decoded.byteLength <= MAX_CACHE_BODY_BYTES;
239
+ const complete = decoded !== null;
243
240
  if (!complete)
244
241
  run.state.complete = false;
245
242
  addFingerprint(run.state, {
@@ -250,10 +247,6 @@ const addCacheEntry = async (run, cache, entry) => {
250
247
  });
251
248
  };
252
249
  const addFingerprint = (state, input) => {
253
- if (state.items.length >= state.maximum) {
254
- state.truncated = true;
255
- return;
256
- }
257
250
  state.items.push({
258
251
  scope: input.scope,
259
252
  identity_sha256: digest(input.identity),
@@ -263,6 +256,7 @@ const addFingerprint = (state, input) => {
263
256
  stableValueComplete(input.value),
264
257
  });
265
258
  };
259
+ const STORAGE_ENTRY_PAGE_SIZE = 1_000;
266
260
  const digest = (value) => createHash("sha256").update(encodedValue(value)).digest("hex");
267
261
  const encodedValue = (value) => {
268
262
  if (value instanceof Uint8Array)
@@ -272,26 +266,23 @@ const encodedValue = (value) => {
272
266
  throw new TypeError("Expected canonical JSON");
273
267
  return encoded;
274
268
  };
275
- const stableValue = (value, depth = 0) => {
269
+ const stableValue = (value) => {
276
270
  if (value === null ||
277
271
  typeof value === "string" ||
278
272
  typeof value === "number" ||
279
273
  typeof value === "boolean")
280
274
  return value;
281
- if (depth >= 8)
282
- return "<depth-limit>";
283
275
  if (Array.isArray(value))
284
- return value.slice(0, 64).map((item) => stableValue(item, depth + 1));
276
+ return value.map((item) => stableValue(item));
285
277
  const record = recordValue(value);
286
278
  if (record === undefined)
287
279
  return String(value);
288
280
  return Object.fromEntries(Object.entries(record)
289
281
  .filter(([key]) => key !== "objectId" && key !== "customPreview")
290
282
  .sort(([left], [right]) => compareCodePoints(left, right))
291
- .slice(0, 64)
292
- .map(([key, item]) => [key, stableValue(item, depth + 1)]));
283
+ .map(([key, item]) => [key, stableValue(item)]));
293
284
  };
294
- const stableValueComplete = (value, depth = 0) => {
285
+ const stableValueComplete = (value) => {
295
286
  if (value instanceof Uint8Array)
296
287
  return true;
297
288
  if (value === null ||
@@ -300,17 +291,13 @@ const stableValueComplete = (value, depth = 0) => {
300
291
  typeof value === "number" ||
301
292
  typeof value === "boolean")
302
293
  return true;
303
- if (depth >= 8)
304
- return false;
305
294
  if (Array.isArray(value))
306
- return (value.length <= 64 &&
307
- value.every((item) => stableValueComplete(item, depth + 1)));
295
+ return value.every((item) => stableValueComplete(item));
308
296
  const record = recordValue(value);
309
297
  if (record === undefined)
310
298
  return false;
311
299
  const entries = Object.entries(record).filter(([key]) => key !== "objectId" && key !== "customPreview");
312
- return (entries.length <= 64 &&
313
- entries.every(([, item]) => stableValueComplete(item, depth + 1)));
300
+ return entries.every(([, item]) => stableValueComplete(item));
314
301
  };
315
302
  const remoteObjectComplete = (value) => {
316
303
  const record = recordValue(value);