rea-agents 4.0.1 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (740) hide show
  1. package/README.md +257 -96
  2. package/bridge/android/ReaJadxBridge.java +247 -0
  3. package/bridge/ghidra/ReaGhidraBridge.java +358 -15
  4. package/bridge/ghidra/ReaGhidraExtensions.java +113 -0
  5. package/bridge/ghidra/ReaGhidraPrepareCom.java +32 -0
  6. package/bridge/native/NativeUIChildren.swift +27 -0
  7. package/bridge/native/ReaNativeUI.swift +30 -16
  8. package/dist/android/AndroidTargetSnapshot.js +36 -0
  9. package/dist/android/JadxAnalysis.js +193 -0
  10. package/dist/android/JadxConfiguration.js +57 -0
  11. package/dist/android/JadxMcpTransport.js +172 -0
  12. package/dist/android/JadxProtocol.js +109 -0
  13. package/dist/android/JadxProvider.js +259 -0
  14. package/dist/android/JadxRelease.js +27 -0
  15. package/dist/android/JadxSession.js +111 -0
  16. package/dist/application/AnalysisContextQueries.js +2 -1
  17. package/dist/application/AppBundleExecutable.js +141 -0
  18. package/dist/application/ArtifactExtraction.js +7 -4
  19. package/dist/application/ArtifactGraphConstruction.js +10 -17
  20. package/dist/application/ArtifactInventory/classify.js +1 -1
  21. package/dist/application/ArtifactInventory/scanCanonical.js +9 -8
  22. package/dist/application/ArtifactInventory/scanReader.js +1 -1
  23. package/dist/application/ArtifactInventory.js +1 -1
  24. package/dist/application/BinaryTargetResolver.js +32 -68
  25. package/dist/application/BrowserObservationService.js +2 -1
  26. package/dist/application/BrowserScenarioCaptureService.js +2 -1
  27. package/dist/application/BrowserScenarioEvidence.js +2 -2
  28. package/dist/application/CallPathTracing.js +2 -1
  29. package/dist/application/CapabilityInventory.js +78 -2
  30. package/dist/application/ClientConfigPath.js +3 -1
  31. package/dist/application/ClientConfigurationDocument.js +83 -13
  32. package/dist/application/ClientRegistrationStatus.js +15 -9
  33. package/dist/application/DirectAnalysis.js +35 -21
  34. package/dist/application/DirectAnalysisStatus.js +7 -8
  35. package/dist/application/Doctor.js +48 -8
  36. package/dist/application/DoctorDiagnostics.js +9 -7
  37. package/dist/application/DoctorScope.js +1 -1
  38. package/dist/application/EnhancedLiteralTracing.js +2 -1
  39. package/dist/application/EnhancedToolTypes.js +2 -1
  40. package/dist/application/EnhancedTools.js +7 -5
  41. package/dist/application/EvidenceBundleCommands.js +3 -2
  42. package/dist/application/EvidenceBundleFiles.js +1 -1
  43. package/dist/application/EvidenceInputResolver.js +30 -0
  44. package/dist/application/FilesystemSnapshot.js +20 -5
  45. package/dist/application/FunctionAnalysisEvidence.js +32 -0
  46. package/dist/application/InventoryProjectionEvidence.js +2 -1
  47. package/dist/application/InvestigationProviders.js +6 -0
  48. package/dist/application/JsonFiles.js +1 -1
  49. package/dist/application/LinuxHopper.js +20 -6
  50. package/dist/application/MacHopper.js +20 -7
  51. package/dist/application/OptionalObservationProviders.js +3 -0
  52. package/dist/application/ProcessCaptureCapability.js +1 -1
  53. package/dist/application/ProcessCaptureError.js +1 -1
  54. package/dist/application/ProcessCaptureJournal.js +3 -1
  55. package/dist/application/ProcessCaptureLifecycle.js +8 -5
  56. package/dist/application/ProcessCli.js +14 -6
  57. package/dist/application/ProcessEvidence.js +2 -6
  58. package/dist/application/ProcessHarness.js +23 -11
  59. package/dist/application/ProcessNormalization.js +12 -5
  60. package/dist/application/ProcessSampling.js +3 -1
  61. package/dist/application/ReconstructionCoverageService.js +4 -7
  62. package/dist/application/ReconstructionObligationCandidates.js +5 -2
  63. package/dist/application/ReconstructionObligationLedgerService.js +2 -1
  64. package/dist/application/ReferenceSourceImport.js +2 -0
  65. package/dist/application/ReferenceSourceImportEntries.js +22 -3
  66. package/dist/application/ReferenceSourceImportPolicy.js +4 -2
  67. package/dist/application/ReferenceSourceImportTypes.js +5 -0
  68. package/dist/application/ReferenceSourceVcsAdapter.js +35 -4
  69. package/dist/application/Setup.js +11 -130
  70. package/dist/application/SetupClientConfiguration.js +36 -22
  71. package/dist/application/SetupHost.js +126 -0
  72. package/dist/application/SetupPlan.js +1 -1
  73. package/dist/application/SetupRegistrationEnvironment.js +1 -2
  74. package/dist/application/SetupSkill.js +9 -3
  75. package/dist/application/SetupTypes.js +17 -0
  76. package/dist/application/StoreFileLock.js +7 -2
  77. package/dist/application/SupportedClients.js +8 -0
  78. package/dist/application/Uninstall.js +32 -21
  79. package/dist/application/UpdateMaintenance.js +3 -3
  80. package/dist/application/UpdateRuntime.js +5 -2
  81. package/dist/application/ValidateSelectedWebScript.js +27 -0
  82. package/dist/application/WebModuleTraceService.js +209 -0
  83. package/dist/application/WebRuntimeService.js +73 -0
  84. package/dist/application/WebScriptExportService.js +115 -0
  85. package/dist/application/WebSourceLocationService.js +160 -0
  86. package/dist/application/WindowsCapabilities.js +7 -7
  87. package/dist/application/android/AndroidAnalysisService.js +37 -0
  88. package/dist/application/{AndroidApplicationService.js → android/AndroidApplicationService.js} +3 -3
  89. package/dist/application/{AppleApplicationService.js → apple/AppleApplicationService.js} +5 -5
  90. package/dist/application/{AnalysisClientCleanup.js → binary/AnalysisClientCleanup.js} +2 -2
  91. package/dist/application/{AnalysisProviderEvaluation.js → binary/AnalysisProviderEvaluation.js} +8 -6
  92. package/dist/application/{AnalysisProviderRegistry.js → binary/AnalysisProviderRegistry.js} +5 -4
  93. package/dist/application/{AnalysisSnapshotCache.js → binary/AnalysisSnapshotCache.js} +8 -7
  94. package/dist/application/{AnalysisSnapshotFiles.js → binary/AnalysisSnapshotFiles.js} +4 -4
  95. package/dist/application/{BinarySession.js → binary/BinarySession.js} +26 -11
  96. package/dist/application/{BinarySessionComposition.js → binary/BinarySessionComposition.js} +2 -1
  97. package/dist/application/{BinarySessionExecution.js → binary/BinarySessionExecution.js} +9 -4
  98. package/dist/application/{BinarySessionOpen.js → binary/BinarySessionOpen.js} +7 -6
  99. package/dist/application/{BinarySessionRecords.js → binary/BinarySessionRecords.js} +34 -40
  100. package/dist/application/{CompositeProvider.js → binary/CompositeProvider.js} +2 -2
  101. package/dist/application/{LazyAnalysisProvider.js → binary/LazyAnalysisProvider.js} +6 -4
  102. package/dist/application/{SessionProviderRouter.js → binary/SessionProviderRouter.js} +7 -4
  103. package/dist/application/firmware/FirmwareAnalysisPort.js +1 -0
  104. package/dist/application/firmware/FirmwareAnalysisService.js +35 -0
  105. package/dist/application/{EvidenceLedger.js → investigation/EvidenceLedger.js} +44 -6
  106. package/dist/application/investigation/InvestigationRecordPort.js +1 -0
  107. package/dist/application/investigation/InvestigationRecords.js +69 -0
  108. package/dist/application/{UnknownEvidence.js → investigation/UnknownEvidence.js} +1 -1
  109. package/dist/application/{ElectronActiveEvidence.js → javascript/ElectronActiveEvidence.js} +4 -4
  110. package/dist/application/javascript/ElectronActiveObservationPort.js +1 -0
  111. package/dist/application/{ElectronActiveObservationService.js → javascript/ElectronActiveObservationService.js} +3 -2
  112. package/dist/application/{ElectronBoundaryAnalysis.js → javascript/ElectronBoundaryAnalysis.js} +1 -1
  113. package/dist/application/{ElectronBoundaryGraphContext.js → javascript/ElectronBoundaryGraphContext.js} +1 -1
  114. package/dist/application/{ElectronEvidence.js → javascript/ElectronEvidence.js} +2 -2
  115. package/dist/application/javascript/ElectronObservationPort.js +1 -0
  116. package/dist/application/{ElectronObservationService.js → javascript/ElectronObservationService.js} +3 -2
  117. package/dist/application/{JavaScriptApplicationEvidence.js → javascript/JavaScriptApplicationEvidence.js} +3 -3
  118. package/dist/application/{JavaScriptApplicationEvidenceGraph.js → javascript/JavaScriptApplicationEvidenceGraph.js} +5 -5
  119. package/dist/application/javascript/JavaScriptApplicationService.js +99 -0
  120. package/dist/application/{JavaScriptApplicationWorkflowEvidence.js → javascript/JavaScriptApplicationWorkflowEvidence.js} +3 -3
  121. package/dist/application/{JavaScriptApplicationWorkflowService.js → javascript/JavaScriptApplicationWorkflowService.js} +12 -11
  122. package/dist/application/{JavaScriptArtifactAnalysis.js → javascript/JavaScriptArtifactAnalysis.js} +12 -26
  123. package/dist/application/javascript/JavaScriptArtifactAnalysisTypes.js +1 -0
  124. package/dist/application/{JavaScriptArtifactGraphAccumulator.js → javascript/JavaScriptArtifactGraphAccumulator.js} +16 -2
  125. package/dist/application/{JavaScriptArtifactGraphBuilder.js → javascript/JavaScriptArtifactGraphBuilder.js} +2 -2
  126. package/dist/application/{JavaScriptArtifactGraphContext.js → javascript/JavaScriptArtifactGraphContext.js} +1 -1
  127. package/dist/application/{JavaScriptArtifactGraphDocuments.js → javascript/JavaScriptArtifactGraphDocuments.js} +1 -1
  128. package/dist/application/{JavaScriptArtifactGraphFindings.js → javascript/JavaScriptArtifactGraphFindings.js} +20 -7
  129. package/dist/application/{JavaScriptArtifactGraphStructure.js → javascript/JavaScriptArtifactGraphStructure.js} +1 -1
  130. package/dist/application/{JavaScriptArtifactPathResolution.js → javascript/JavaScriptArtifactPathResolution.js} +12 -14
  131. package/dist/application/{JavaScriptArtifactReconstruction.js → javascript/JavaScriptArtifactReconstruction.js} +4 -8
  132. package/dist/application/{JavaScriptJsonModules.js → javascript/JavaScriptJsonModules.js} +3 -2
  133. package/dist/application/{JavaScriptModuleRelationships.js → javascript/JavaScriptModuleRelationships.js} +5 -3
  134. package/dist/application/javascript/JavaScriptRecoveryPort.js +1 -0
  135. package/dist/application/javascript/JavaScriptRecoveryService.js +52 -0
  136. package/dist/application/{JavaScriptReturnShapeProjection.js → javascript/JavaScriptReturnShapeProjection.js} +3 -3
  137. package/dist/application/{JavaScriptRuntimeObservationEvidence.js → javascript/JavaScriptRuntimeObservationEvidence.js} +2 -2
  138. package/dist/application/javascript/JavaScriptRuntimeObservationPort.js +1 -0
  139. package/dist/application/{JavaScriptRuntimeObservationService.js → javascript/JavaScriptRuntimeObservationService.js} +3 -2
  140. package/dist/application/{JavaScriptRuntimeReconciliationEvidence.js → javascript/JavaScriptRuntimeReconciliationEvidence.js} +3 -3
  141. package/dist/application/{JavaScriptRuntimeReconciliationService.js → javascript/JavaScriptRuntimeReconciliationService.js} +6 -5
  142. package/dist/application/{JavaScriptSemanticGraphAsyncProjection.js → javascript/JavaScriptSemanticGraphAsyncProjection.js} +1 -1
  143. package/dist/application/{JavaScriptSemanticGraphBuilder.js → javascript/JavaScriptSemanticGraphBuilder.js} +5 -3
  144. package/dist/application/{JavaScriptSemanticGraphChildProcessProjection.js → javascript/JavaScriptSemanticGraphChildProcessProjection.js} +1 -1
  145. package/dist/application/{JavaScriptSemanticGraphConstruction.js → javascript/JavaScriptSemanticGraphConstruction.js} +3 -2
  146. package/dist/application/{JavaScriptSemanticGraphDataProjection.js → javascript/JavaScriptSemanticGraphDataProjection.js} +1 -1
  147. package/dist/application/{JavaScriptSemanticGraphFingerprintProjection.js → javascript/JavaScriptSemanticGraphFingerprintProjection.js} +1 -1
  148. package/dist/application/{JavaScriptSemanticGraphFlowProjection.js → javascript/JavaScriptSemanticGraphFlowProjection.js} +2 -2
  149. package/dist/application/{JavaScriptSemanticGraphObjectProjection.js → javascript/JavaScriptSemanticGraphObjectProjection.js} +1 -1
  150. package/dist/application/{JavaScriptSemanticGraphProjection.js → javascript/JavaScriptSemanticGraphProjection.js} +2 -2
  151. package/dist/application/{JavaScriptSemanticGraphResourceProjection.js → javascript/JavaScriptSemanticGraphResourceProjection.js} +1 -1
  152. package/dist/application/{JavaScriptSemanticTraceService.js → javascript/JavaScriptSemanticTraceService.js} +6 -5
  153. package/dist/application/{ManagedApplicationGraphService.js → managed/ManagedApplicationGraphService.js} +7 -6
  154. package/dist/application/{ManagedMemberComparisonService.js → managed/ManagedMemberComparisonService.js} +10 -8
  155. package/dist/application/{ManagedNativeVerificationService.js → managed/ManagedNativeVerificationService.js} +7 -6
  156. package/dist/application/{ManagedReconstructionService.js → managed/ManagedReconstructionService.js} +7 -6
  157. package/dist/application/{NativeApiInspection.js → native/NativeApiInspection.js} +1 -1
  158. package/dist/application/{NativeCallRoutes.js → native/NativeCallRoutes.js} +3 -3
  159. package/dist/application/{NativeDispatchMetadataInspection.js → native/NativeDispatchMetadataInspection.js} +4 -4
  160. package/dist/application/{NativeUiActionTrace.js → native/NativeUiActionTrace.js} +7 -6
  161. package/dist/application/{NativeValueTrace.js → native/NativeValueTrace.js} +6 -6
  162. package/dist/{application/ArtifactInventory/hash.js → artifacts/ArtifactHash.js} +4 -2
  163. package/dist/artifacts/ArtifactPaths.js +3 -3
  164. package/dist/artifacts/ArtifactProvider.js +10 -38
  165. package/dist/artifacts/ArtifactProviderMetadata.js +36 -0
  166. package/dist/artifacts/AsarArtifactReader.js +195 -23
  167. package/dist/artifacts/AsarEntryStream.js +76 -0
  168. package/dist/artifacts/DirectoryArtifactReader.js +43 -7
  169. package/dist/artifacts/NativeDmgArtifactReader.js +171 -12
  170. package/dist/artifacts/SafeOutputTree.js +26 -10
  171. package/dist/artifacts/ZipArtifactReader.js +1 -0
  172. package/dist/{application → artifacts/apple}/AppleAssetCatalogAnalysis.js +4 -4
  173. package/dist/{application → artifacts/apple}/InterfaceBuilderAnalysis.js +125 -51
  174. package/dist/artifacts/{KeyedArchiveReader.js → apple/KeyedArchiveReader.js} +21 -27
  175. package/dist/artifacts/{NibArchive.js → apple/NibArchive.js} +4 -2
  176. package/dist/artifacts/apple/NibViewHierarchy.js +150 -0
  177. package/dist/{application → artifacts/javascript}/JavaScriptArtifactFiles.js +30 -7
  178. package/dist/artifacts/javascript/JavaScriptArtifactReader.js +6 -0
  179. package/dist/artifacts/readStableArtifact.js +52 -0
  180. package/dist/browser/BrowserProcessStartup.js +3 -1
  181. package/dist/browser/BrowserScenarioSecrets.js +50 -8
  182. package/dist/browser/CdpAuthorizedMainFrame.js +5 -5
  183. package/dist/browser/CdpAuthorizedTarget.js +22 -0
  184. package/dist/browser/CdpBrowserProvider.js +8 -16
  185. package/dist/browser/CdpCaptureDocuments.js +36 -22
  186. package/dist/browser/CdpCaptureEventBodyShapes.js +3 -3
  187. package/dist/browser/CdpCaptureEventHandlers.js +32 -28
  188. package/dist/browser/CdpCaptureEventHelpers.js +6 -6
  189. package/dist/browser/CdpCaptureStorage.js +10 -8
  190. package/dist/browser/CdpCaptureStorageFingerprints.js +25 -23
  191. package/dist/browser/CdpCaptureValues.js +8 -4
  192. package/dist/browser/CdpCommandRejection.js +17 -0
  193. package/dist/browser/CdpConnection.js +59 -17
  194. package/dist/browser/CdpElectronInspection.js +13 -13
  195. package/dist/browser/CdpElectronProvider.js +7 -7
  196. package/dist/browser/CdpElectronScriptEvents.js +6 -6
  197. package/dist/browser/CdpElectronScripts.js +4 -4
  198. package/dist/browser/CdpElectronWorkers.js +4 -4
  199. package/dist/browser/CdpEndpoint.js +22 -10
  200. package/dist/browser/CdpObservationSession.js +20 -24
  201. package/dist/browser/CdpOptionalCommand.js +1 -1
  202. package/dist/browser/CdpPageCapture.js +6 -5
  203. package/dist/browser/CdpPageCaptureScripts.js +2 -2
  204. package/dist/browser/CdpPageCaptureWorkers.js +9 -9
  205. package/dist/browser/CdpSafeMetadata.js +101 -18
  206. package/dist/browser/CdpScreenshot.js +6 -6
  207. package/dist/browser/CdpTargetEvents.js +8 -0
  208. package/dist/browser/CdpTargetSession.js +10 -7
  209. package/dist/browser/CdpWebMcpDiscovery.js +23 -17
  210. package/dist/browser/ElectronFileScope.js +9 -3
  211. package/dist/browser/PlaywrightBrowserScenarioProvider.js +10 -7
  212. package/dist/browser/PlaywrightElectronActiveActions.js +1 -1
  213. package/dist/browser/PlaywrightElectronActiveProvider.js +9 -8
  214. package/dist/browser/PlaywrightExecutionBoundary.js +1 -1
  215. package/dist/browser/PlaywrightScenarioArtifacts.js +10 -5
  216. package/dist/browser/PlaywrightScenarioBrowser.js +3 -1
  217. package/dist/browser/PlaywrightScenarioEvents.js +65 -53
  218. package/dist/browser/PlaywrightScenarioSession.js +13 -3
  219. package/dist/browser/WebSourceMapFetcher.js +55 -58
  220. package/dist/browser/assets/LocalWebScriptArtifacts.js +87 -0
  221. package/dist/browser/assets/PageScriptCapture.js +32 -0
  222. package/dist/browser/assets/PublishWebScripts.js +74 -0
  223. package/dist/browser/assets/ScenarioScriptCapture.js +76 -0
  224. package/dist/browser/assets/ScriptCaptureAdapters.js +57 -0
  225. package/dist/browser/assets/WebArtifactReads.js +56 -0
  226. package/dist/browser/assets/WebSourceLocationArtifacts.js +40 -0
  227. package/dist/browser/execution/CdpEventListeners.js +79 -0
  228. package/dist/browser/execution/CdpExecutionCapture.js +135 -0
  229. package/dist/browser/execution/CdpExecutionCollection.js +57 -0
  230. package/dist/browser/execution/CdpExecutionWindow.js +100 -0
  231. package/dist/browser/execution/CdpListenerSelector.js +22 -0
  232. package/dist/browser/execution/CdpPreciseCoverage.js +48 -0
  233. package/dist/browser/execution/CdpRuntimeInitiator.js +18 -0
  234. package/dist/browser/execution/CdpRuntimeProtocol.js +106 -0
  235. package/dist/browser/execution/CdpRuntimeRequests.js +81 -0
  236. package/dist/browser/execution/CdpRuntimeSession.js +163 -0
  237. package/dist/browser/execution/CdpRuntimeSources.js +223 -0
  238. package/dist/browser/execution/CdpWebRuntimeProvider.js +51 -0
  239. package/dist/browser/modules/NativeModuleResolver.js +210 -0
  240. package/dist/browser/modules/WebModuleArtifacts.js +40 -0
  241. package/dist/browser/network/PlaywrightNetworkContent.js +71 -0
  242. package/dist/browser/network/PlaywrightScenarioNetwork.js +180 -0
  243. package/dist/browser/providerIdentities.js +24 -0
  244. package/dist/catalogIdentity.js +23 -15
  245. package/dist/cli/androidCommands.js +91 -0
  246. package/dist/{cliApplicationCommands.js → cli/applicationCommands.js} +49 -16
  247. package/dist/cli/artifactCommands.js +1 -1
  248. package/dist/{cliBrowserAdvancedCommands.js → cli/browserAdvancedCommands.js} +39 -24
  249. package/dist/{cliBrowserCommands.js → cli/browserCommands.js} +9 -9
  250. package/dist/cli/commandCancellation.js +24 -0
  251. package/dist/cli/coreAnalysisCommands.js +5 -400
  252. package/dist/cli/coreBinaryCommands.js +211 -0
  253. package/dist/cli/coreNativeCommands.js +293 -0
  254. package/dist/{cliElectronCommands.js → cli/electronCommands.js} +20 -24
  255. package/dist/cli/firmwareCommands.js +75 -0
  256. package/dist/{cliSetup.js → cli/interactiveSetup.js} +1 -1
  257. package/dist/cli/javascriptApplicationAnalysis.js +2 -2
  258. package/dist/cli/javascriptRecoveryCommands.js +45 -0
  259. package/dist/cli/managedCommands.js +5 -5
  260. package/dist/cli/managedProjectGraphCommand.js +2 -2
  261. package/dist/cli/options.js +7 -1
  262. package/dist/{cliProcessCommands.js → cli/processCommands.js} +3 -3
  263. package/dist/cli/referenceSourceImportStatus.js +15 -0
  264. package/dist/cli/setupCommands.js +4 -2
  265. package/dist/cli/utilityCommands.js +50 -25
  266. package/dist/cli/webModuleCommands.js +56 -0
  267. package/dist/cli/webRuntimeCommands.js +60 -0
  268. package/dist/cli/webScriptCommands.js +31 -0
  269. package/dist/cli/webSourceLocationCommands.js +42 -0
  270. package/dist/cli.js +20 -15
  271. package/dist/cliBrowserContext.js +5 -3
  272. package/dist/cliBrowserScenarioCommands.js +6 -4
  273. package/dist/cliCommandNames.js +19 -2
  274. package/dist/cliEvidenceCommands.js +2 -1
  275. package/dist/cliJavaScriptRuntimeCommands.js +8 -5
  276. package/dist/cliJsonInput.js +35 -13
  277. package/dist/cliLogging.js +2 -1
  278. package/dist/cliOutput.js +52 -27
  279. package/dist/composition/android.js +3 -0
  280. package/dist/composition/auxiliaryAnalysisProviders.js +30 -0
  281. package/dist/composition/binary.js +25 -0
  282. package/dist/composition/browserObservation.js +3 -0
  283. package/dist/composition/browserScenario.js +3 -0
  284. package/dist/composition/directAnalysis.js +17 -0
  285. package/dist/composition/electronObservation.js +3 -0
  286. package/dist/composition/electronScenario.js +3 -0
  287. package/dist/composition/firmware.js +3 -0
  288. package/dist/composition/javascriptRecovery.js +3 -0
  289. package/dist/composition/javascriptRuntimeObservation.js +3 -0
  290. package/dist/composition/optionalObservationProviders.js +49 -0
  291. package/dist/composition/webModules.js +5 -0
  292. package/dist/composition/webRuntime.js +4 -0
  293. package/dist/composition/webSourceLocations.js +5 -0
  294. package/dist/config/environment.js +11 -1
  295. package/dist/config/parseConfig.js +29 -4
  296. package/dist/config/parsers.js +1 -1
  297. package/dist/contracts/android/androidToolContracts.js +77 -0
  298. package/dist/contracts/applicationToolContracts.js +75 -13
  299. package/dist/contracts/artifactComparisonExample.js +7 -14
  300. package/dist/contracts/artifactToolContracts.js +2 -2
  301. package/dist/contracts/browserScenarioToolContracts.js +1 -1
  302. package/dist/contracts/enhancedInputs.js +1 -1
  303. package/dist/contracts/enhancedToolContracts.js +31 -0
  304. package/dist/contracts/errorSchemas.js +4 -2
  305. package/dist/contracts/evidenceInputContracts.js +13 -0
  306. package/dist/contracts/firmware/firmwareToolContracts.js +38 -0
  307. package/dist/contracts/{applicationWorkflowInputContracts.js → javascript/applicationWorkflowInputContracts.js} +18 -18
  308. package/dist/contracts/{electronToolContracts.js → javascript/electronToolContracts.js} +6 -6
  309. package/dist/contracts/{javascriptApplicationWorkflowExamples.js → javascript/javascriptApplicationWorkflowExamples.js} +3 -3
  310. package/dist/contracts/javascript/javascriptRecoveryToolContracts.js +23 -0
  311. package/dist/contracts/{javascriptRuntimeObservationToolContracts.js → javascript/javascriptRuntimeObservationToolContracts.js} +3 -3
  312. package/dist/contracts/{javascriptRuntimeReconciliationExample.js → javascript/javascriptRuntimeReconciliationExample.js} +5 -5
  313. package/dist/contracts/{managedToolContracts.js → managed/managedToolContracts.js} +3 -3
  314. package/dist/contracts/{managedWorkflowExamples.js → managed/managedWorkflowExamples.js} +1 -1
  315. package/dist/contracts/{managedWorkflowToolContracts.js → managed/managedWorkflowToolContracts.js} +6 -6
  316. package/dist/contracts/mobileApplicationGraphExamples.js +105 -0
  317. package/dist/contracts/{nativeToolContracts.js → native/nativeToolContracts.js} +14 -7
  318. package/dist/contracts/officialToolContracts.js +66 -0
  319. package/dist/contracts/promptContracts.js +1 -1
  320. package/dist/contracts/sessionLifecycleInputs.js +4 -0
  321. package/dist/contracts/sessionToolContracts.js +43 -0
  322. package/dist/contracts/sessionToolSchemas.js +1 -1
  323. package/dist/contracts/toolContractExamples.js +5 -0
  324. package/dist/contracts/toolContractTypes.js +2 -0
  325. package/dist/contracts/toolContracts.js +18 -135
  326. package/dist/contracts/toolEffects.js +75 -0
  327. package/dist/contracts/toolOutputSchemaGroups.js +20 -16
  328. package/dist/contracts/toolOutputSchemaPrimitives.js +1 -0
  329. package/dist/contracts/webRuntimeToolContracts.js +43 -0
  330. package/dist/contracts/webScriptToolContracts.js +68 -0
  331. package/dist/doctorRuntime.js +5 -1
  332. package/dist/domain/analysisErrorBase.js +33 -0
  333. package/dist/domain/analysisErrorCore.js +62 -0
  334. package/dist/domain/analysisErrorPresentation.js +22 -2
  335. package/dist/domain/analysisErrorProjection.js +25 -3
  336. package/dist/domain/analysisSnapshot.js +1 -0
  337. package/dist/domain/android/androidAnalysis.js +141 -0
  338. package/dist/domain/{androidApplication.js → android/androidApplication.js} +7 -6
  339. package/dist/domain/apple/appleApplication.js +277 -0
  340. package/dist/domain/{appleAssetCatalog.js → apple/appleAssetCatalog.js} +2 -2
  341. package/dist/domain/apple/appleBundleAnatomy.js +236 -0
  342. package/dist/domain/{interfaceBuilderGraph.js → apple/interfaceBuilderGraph.js} +47 -312
  343. package/dist/domain/apple/interfaceBuilderKeyedArchive.js +411 -0
  344. package/dist/domain/{keyedArchive.js → apple/keyedArchive.js} +10 -9
  345. package/dist/domain/apple/plistValue.js +35 -0
  346. package/dist/domain/artifactGraph.js +1 -0
  347. package/dist/domain/artifactInspection.js +19 -17
  348. package/dist/domain/artifactInventoryEvidence.js +32 -27
  349. package/dist/domain/artifactInventorySnapshot.js +1 -0
  350. package/dist/domain/artifactOperationError.js +20 -0
  351. package/dist/domain/artifactPathSyntax.js +26 -0
  352. package/dist/domain/browserNetworkEvidence.js +82 -0
  353. package/dist/domain/browserObservation.js +12 -4
  354. package/dist/domain/browserObservationError.js +25 -0
  355. package/dist/domain/browserObservationSchemas.js +2 -1
  356. package/dist/domain/browserScenario.js +1 -1
  357. package/dist/domain/browserScenarioCapture.js +23 -1
  358. package/dist/domain/browserScenarioCaptureValues.js +25 -0
  359. package/dist/domain/browserScenarioDiff.js +7 -4
  360. package/dist/domain/browserScenarioDiffEvidence.js +35 -1
  361. package/dist/domain/browserScenarioNormalization.js +6 -11
  362. package/dist/domain/browserScenarioValues.js +15 -2
  363. package/dist/domain/browserSession.js +2 -7
  364. package/dist/domain/bundleComparison.js +2 -1
  365. package/dist/domain/callPath.js +86 -38
  366. package/dist/domain/canonicalDigest.js +65 -0
  367. package/dist/domain/canonicalOrdering.js +11 -0
  368. package/dist/domain/changedBehavior.js +8 -7
  369. package/dist/domain/comparisonSemantics.js +2 -4
  370. package/dist/domain/comparisonStatus.js +39 -0
  371. package/dist/domain/configurationErrors.js +25 -0
  372. package/dist/domain/dosCom.js +8 -0
  373. package/dist/domain/evidence.js +3 -11
  374. package/dist/domain/evidenceBundle.js +98 -35
  375. package/dist/domain/evidenceErrors.js +30 -0
  376. package/dist/domain/firmware/firmwareAnalysis.js +121 -0
  377. package/dist/domain/functionComparison.js +4 -2
  378. package/dist/domain/functionComparisonDimensions.js +6 -4
  379. package/dist/domain/functionComparisonNormalization.js +13 -8
  380. package/dist/domain/functionComparisonResults.js +1 -4
  381. package/dist/domain/hopperErrors.js +78 -0
  382. package/dist/domain/hopperValues.js +4 -3
  383. package/dist/domain/inputIssueProjection.js +17 -2
  384. package/dist/domain/{electronActiveObservation.js → javascript/electronActiveObservation.js} +3 -1
  385. package/dist/domain/{electronObservation.js → javascript/electronObservation.js} +5 -11
  386. package/dist/domain/{electronStaticAnalysisBrowser.js → javascript/electronStaticAnalysisBrowser.js} +15 -24
  387. package/dist/domain/{electronStaticAnalysisIpc.js → javascript/electronStaticAnalysisIpc.js} +2 -2
  388. package/dist/domain/{electronStaticAnalysisNative.js → javascript/electronStaticAnalysisNative.js} +12 -12
  389. package/dist/domain/javascript/electronStaticAnalysisTypes.js +1 -0
  390. package/dist/domain/{electronStaticAnalysisValues.js → javascript/electronStaticAnalysisValues.js} +24 -4
  391. package/dist/domain/{javascriptApplicationAnalysis.js → javascript/javascriptApplicationAnalysis.js} +2 -2
  392. package/dist/domain/{javascriptApplicationChangeGraph.js → javascript/javascriptApplicationChangeGraph.js} +2 -2
  393. package/dist/domain/{javascriptApplicationEvidenceSchemas.js → javascript/javascriptApplicationEvidenceSchemas.js} +6 -4
  394. package/dist/domain/{javascriptApplicationGraph.js → javascript/javascriptApplicationGraph.js} +13 -22
  395. package/dist/domain/{javascriptApplicationGraphSchemas.js → javascript/javascriptApplicationGraphSchemas.js} +2 -2
  396. package/dist/domain/{javascriptApplicationVersionComparison.js → javascript/javascriptApplicationVersionComparison.js} +3 -11
  397. package/dist/domain/{javascriptApplicationVersionComparisonSchemas.js → javascript/javascriptApplicationVersionComparisonSchemas.js} +3 -3
  398. package/dist/domain/{javascriptApplicationVersionItems.js → javascript/javascriptApplicationVersionItems.js} +4 -4
  399. package/dist/domain/{javascriptApplicationVersionKeys.js → javascript/javascriptApplicationVersionKeys.js} +16 -9
  400. package/dist/domain/javascript/javascriptArtifactFiles.js +1 -0
  401. package/dist/domain/{javascriptAstFingerprint.js → javascript/javascriptAstFingerprint.js} +38 -22
  402. package/dist/domain/javascript/javascriptAstValues.js +23 -0
  403. package/dist/domain/{javascriptExportShapeComparison.js → javascript/javascriptExportShapeComparison.js} +1 -2
  404. package/dist/domain/{javascriptExportShapeComparisonSchemas.js → javascript/javascriptExportShapeComparisonSchemas.js} +2 -2
  405. package/dist/domain/{javascriptExportShapeSelection.js → javascript/javascriptExportShapeSelection.js} +1 -1
  406. package/dist/domain/{javascriptExportShapeVariants.js → javascript/javascriptExportShapeVariants.js} +7 -3
  407. package/dist/domain/{javascriptFeatureSeed.js → javascript/javascriptFeatureSeed.js} +32 -11
  408. package/dist/domain/{javascriptFeatureTrace.js → javascript/javascriptFeatureTrace.js} +9 -13
  409. package/dist/domain/{javascriptFeatureTraceSchemas.js → javascript/javascriptFeatureTraceSchemas.js} +32 -18
  410. package/dist/domain/{javascriptFeatureTraversal.js → javascript/javascriptFeatureTraversal.js} +7 -2
  411. package/dist/domain/{javascriptNativeHandoff.js → javascript/javascriptNativeHandoff.js} +2 -1
  412. package/dist/domain/javascript/javascriptRecovery.js +88 -0
  413. package/dist/domain/{javascriptRuntimeLoadState.js → javascript/javascriptRuntimeLoadState.js} +2 -2
  414. package/dist/domain/{javascriptRuntimeObservation.js → javascript/javascriptRuntimeObservation.js} +2 -2
  415. package/dist/domain/{javascriptRuntimeReconciliationActive.js → javascript/javascriptRuntimeReconciliationActive.js} +5 -12
  416. package/dist/domain/{javascriptRuntimeReconciliationGraph.js → javascript/javascriptRuntimeReconciliationGraph.js} +2 -2
  417. package/dist/domain/{javascriptRuntimeReconciliationMatching.js → javascript/javascriptRuntimeReconciliationMatching.js} +4 -3
  418. package/dist/domain/{javascriptRuntimeReconciliationParsing.js → javascript/javascriptRuntimeReconciliationParsing.js} +11 -17
  419. package/dist/domain/{javascriptRuntimeReconciliationResult.js → javascript/javascriptRuntimeReconciliationResult.js} +4 -4
  420. package/dist/domain/{javascriptRuntimeReconciliationSchemas.js → javascript/javascriptRuntimeReconciliationSchemas.js} +8 -5
  421. package/dist/domain/{javascriptRuntimeStaticCandidates.js → javascript/javascriptRuntimeStaticCandidates.js} +8 -4
  422. package/dist/domain/{javascriptSemanticAnalysis.js → javascript/javascriptSemanticAnalysis.js} +80 -17
  423. package/dist/domain/{javascriptSemanticAsyncEffects.js → javascript/javascriptSemanticAsyncEffects.js} +2 -1
  424. package/dist/domain/{javascriptSemanticCallResolution.js → javascript/javascriptSemanticCallResolution.js} +11 -5
  425. package/dist/domain/{javascriptSemanticCalls.js → javascript/javascriptSemanticCalls.js} +7 -4
  426. package/dist/domain/{javascriptSemanticChildProcesses.js → javascript/javascriptSemanticChildProcesses.js} +5 -2
  427. package/dist/domain/{javascriptSemanticDataEffectHelpers.js → javascript/javascriptSemanticDataEffectHelpers.js} +7 -6
  428. package/dist/domain/{javascriptSemanticDataEffects.js → javascript/javascriptSemanticDataEffects.js} +9 -6
  429. package/dist/domain/{javascriptSemanticFingerprints.js → javascript/javascriptSemanticFingerprints.js} +40 -16
  430. package/dist/domain/{javascriptSemanticGraph.js → javascript/javascriptSemanticGraph.js} +23 -28
  431. package/dist/domain/{javascriptSemanticGraphSchemas.js → javascript/javascriptSemanticGraphSchemas.js} +3 -3
  432. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +116 -0
  433. package/dist/domain/javascript/javascriptSemanticMutationValues.js +53 -0
  434. package/dist/domain/{javascriptSemanticObjects.js → javascript/javascriptSemanticObjects.js} +5 -5
  435. package/dist/domain/{javascriptSemanticPrimitives.js → javascript/javascriptSemanticPrimitives.js} +9 -2
  436. package/dist/domain/{javascriptSemanticProjection.js → javascript/javascriptSemanticProjection.js} +32 -44
  437. package/dist/domain/{javascriptSemanticPromises.js → javascript/javascriptSemanticPromises.js} +77 -21
  438. package/dist/domain/{javascriptSemanticProvenance.js → javascript/javascriptSemanticProvenance.js} +4 -1
  439. package/dist/domain/{javascriptSemanticQuery.js → javascript/javascriptSemanticQuery.js} +7 -8
  440. package/dist/domain/{javascriptSemanticQueryAssessment.js → javascript/javascriptSemanticQueryAssessment.js} +1 -2
  441. package/dist/domain/{javascriptSemanticQueryIdentity.js → javascript/javascriptSemanticQueryIdentity.js} +1 -2
  442. package/dist/domain/{javascriptSemanticQuerySchemas.js → javascript/javascriptSemanticQuerySchemas.js} +3 -3
  443. package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +25 -0
  444. package/dist/domain/{javascriptSemanticResources.js → javascript/javascriptSemanticResources.js} +2 -1
  445. package/dist/domain/{javascriptSemanticReturns.js → javascript/javascriptSemanticReturns.js} +2 -1
  446. package/dist/domain/{javascriptSemanticTraceSchemas.js → javascript/javascriptSemanticTraceSchemas.js} +2 -2
  447. package/dist/domain/javascript/javascriptSemanticTraversal.js +55 -0
  448. package/dist/domain/javascript/javascriptSemanticValueTypes.js +1 -0
  449. package/dist/domain/{javascriptSemanticValues.js → javascript/javascriptSemanticValues.js} +118 -60
  450. package/dist/domain/{javascriptSourceParser.js → javascript/javascriptSourceParser.js} +4 -2
  451. package/dist/domain/{javascriptStaticAnalysis.js → javascript/javascriptStaticAnalysis.js} +8 -5
  452. package/dist/domain/{javascriptStaticAnalysisBundler.js → javascript/javascriptStaticAnalysisBundler.js} +15 -11
  453. package/dist/domain/{javascriptStaticAnalysisCalls.js → javascript/javascriptStaticAnalysisCalls.js} +16 -8
  454. package/dist/domain/{javascriptStaticAnalysisHelpers.js → javascript/javascriptStaticAnalysisHelpers.js} +261 -43
  455. package/dist/domain/{sourceToBundleComparison.js → javascript/sourceToBundleComparison.js} +6 -8
  456. package/dist/domain/{sourceToBundleComparisonSchemas.js → javascript/sourceToBundleComparisonSchemas.js} +4 -4
  457. package/dist/domain/{sourceToBundleSignals.js → javascript/sourceToBundleSignals.js} +7 -7
  458. package/dist/domain/jsonShape.js +6 -2
  459. package/dist/domain/{managedApplicationGraph.js → managed/managedApplicationGraph.js} +4 -4
  460. package/dist/domain/{managedApplicationGraphNodes.js → managed/managedApplicationGraphNodes.js} +1 -1
  461. package/dist/domain/{managedArtifact.js → managed/managedArtifact.js} +1 -1
  462. package/dist/domain/{managedMemberComparison.js → managed/managedMemberComparison.js} +5 -4
  463. package/dist/domain/{managedMemberComparisonCoverage.js → managed/managedMemberComparisonCoverage.js} +2 -1
  464. package/dist/domain/{managedMemberComparisonItems.js → managed/managedMemberComparisonItems.js} +99 -40
  465. package/dist/domain/{managedMemberComparisonMatch.js → managed/managedMemberComparisonMatch.js} +22 -11
  466. package/dist/domain/{managedNativeVerification.js → managed/managedNativeVerification.js} +1 -1
  467. package/dist/domain/{managedNativeVerificationMatch.js → managed/managedNativeVerificationMatch.js} +8 -6
  468. package/dist/domain/{managedNativeVerificationSchemas.js → managed/managedNativeVerificationSchemas.js} +6 -5
  469. package/dist/domain/{managedReconstruction.js → managed/managedReconstruction.js} +3 -3
  470. package/dist/domain/{nativeDataType.js → native/nativeDataType.js} +2 -0
  471. package/dist/domain/native/nativeFunctionAnnotations.js +43 -0
  472. package/dist/domain/{nativeInspection.js → native/nativeInspection.js} +1 -1
  473. package/dist/domain/{nativeInvestigationGraph.js → native/nativeInvestigationGraph.js} +13 -4
  474. package/dist/domain/native/nativeLoadImage.js +95 -0
  475. package/dist/domain/native/nativeMetadataRecovery.js +55 -0
  476. package/dist/domain/{nativeUiObservation.js → native/nativeUiObservation.js} +20 -6
  477. package/dist/domain/{objcSwiftMetadata.js → native/objcSwiftMetadata.js} +17 -0
  478. package/dist/domain/processCapture.js +4 -3
  479. package/dist/domain/processEvidenceProvider.js +11 -0
  480. package/dist/domain/processScenario.js +17 -17
  481. package/dist/domain/processTraceComparison.js +1 -1
  482. package/dist/domain/propertyListKeys.js +69 -0
  483. package/dist/domain/providerAdapterError.js +17 -0
  484. package/dist/domain/providerCleanupError.js +6 -3
  485. package/dist/domain/providerSelectionError.js +44 -0
  486. package/dist/domain/reconstructionCoverageEvaluation.js +46 -24
  487. package/dist/domain/reconstructionCoverageInput.js +7 -0
  488. package/dist/domain/reconstructionUnknowns.js +1 -1
  489. package/dist/domain/reconstructionVerification.js +22 -8
  490. package/dist/domain/referenceSourceClassification.js +5 -6
  491. package/dist/domain/referenceSourceGraph.js +9 -17
  492. package/dist/domain/referenceSourceImportParsing.js +38 -23
  493. package/dist/domain/runtimeIdentification.js +1 -1
  494. package/dist/domain/runtimeVersion.js +6 -7
  495. package/dist/domain/safeJson.js +13 -0
  496. package/dist/domain/sourceMapEnvelope.js +38 -0
  497. package/dist/domain/staticRuntimeCorrelation.js +9 -7
  498. package/dist/domain/unicodeCodePointOrder.js +11 -6
  499. package/dist/domain/unknownRegistryError.js +10 -0
  500. package/dist/domain/webBundleAnalyzerAst.js +23 -38
  501. package/dist/domain/webBundleAnalyzerInspection.js +29 -20
  502. package/dist/domain/webEventListeners.js +28 -0
  503. package/dist/domain/webExecution.js +74 -0
  504. package/dist/domain/webMcpDiscovery.js +1 -7
  505. package/dist/domain/webModuleImports.js +104 -0
  506. package/dist/domain/webModuleTrace.js +106 -0
  507. package/dist/domain/webRuntime.js +69 -0
  508. package/dist/domain/webScreenshot.js +1 -7
  509. package/dist/domain/webScriptArtifacts.js +39 -0
  510. package/dist/domain/webScriptExport.js +86 -0
  511. package/dist/domain/webScriptExportError.js +13 -0
  512. package/dist/domain/webScriptExportPlan.js +108 -0
  513. package/dist/domain/webSourceLocation.js +106 -0
  514. package/dist/domain/webSourcePosition.js +21 -0
  515. package/dist/dotnet/ManagedArtifactInspector.js +1 -1
  516. package/dist/dotnet/ManagedMemberInspector.js +1 -1
  517. package/dist/dotnet/ManagedMemberInspectorCore.js +34 -0
  518. package/dist/dotnet/ManagedMemberRows.js +6 -4
  519. package/dist/dotnet/ManagedMetadataHeaps.js +3 -2
  520. package/dist/dotnet/ManagedMetadataInventoryRows.js +4 -2
  521. package/dist/dotnet/ManagedMethodBodyReader.js +8 -1
  522. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +22 -16
  523. package/dist/dotnet/ManagedNativeBoundaryInspector.js +56 -50
  524. package/dist/dotnet/ManagedStaticProvider.js +6 -34
  525. package/dist/dotnet/ManagedStaticProviderMetadata.js +36 -0
  526. package/dist/evaluation/CodexAgentEval.js +2 -1
  527. package/dist/firmware/FirmwareCommand.js +163 -0
  528. package/dist/firmware/FirmwareFiles.js +190 -0
  529. package/dist/firmware/FirmwareProvider.js +264 -0
  530. package/dist/firmware/FirmwarePublication.js +84 -0
  531. package/dist/firmware/FirmwareRelease.js +32 -0
  532. package/dist/firmware/FirmwareReports.js +235 -0
  533. package/dist/firmware/FirmwareVersion.js +80 -0
  534. package/dist/generatedMcpToolCatalog.js +1 -1
  535. package/dist/generatedPackageMetadata.js +5 -5
  536. package/dist/ghidra/GhidraAnalysisProfile.js +37 -8
  537. package/dist/ghidra/GhidraClient.js +52 -6
  538. package/dist/ghidra/GhidraDiagnostics.js +3 -0
  539. package/dist/ghidra/GhidraDoctor.js +38 -14
  540. package/dist/ghidra/GhidraFunctionValues.js +14 -8
  541. package/dist/ghidra/GhidraInstallation.js +48 -38
  542. package/dist/ghidra/GhidraInstallationPolicy.js +140 -0
  543. package/dist/ghidra/GhidraInventoryValues.js +39 -2
  544. package/dist/ghidra/GhidraLauncher.js +102 -29
  545. package/dist/ghidra/GhidraLoadImageAttest.js +36 -0
  546. package/dist/ghidra/GhidraLoadImageValues.js +199 -0
  547. package/dist/ghidra/GhidraProvider.js +47 -149
  548. package/dist/ghidra/GhidraProviderCapabilities.js +58 -28
  549. package/dist/ghidra/GhidraProviderClient.js +209 -0
  550. package/dist/ghidra/GhidraRequestQueue.js +2 -2
  551. package/dist/ghidra/GhidraResponseBuffer.js +7 -1
  552. package/dist/ghidra/GhidraSessionError.js +31 -4
  553. package/dist/ghidra/GhidraSessionValues.js +10 -7
  554. package/dist/ghidra/GhidraTargetSnapshot.js +16 -2
  555. package/dist/ghidra/GhidraTransport.js +12 -0
  556. package/dist/ghidra/extensions/GhidraExtensionFailures.js +20 -0
  557. package/dist/ghidra/extensions/GhidraExtensions.js +170 -0
  558. package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +21 -0
  559. package/dist/ghidra/extensions/nativeaot/NativeAotReport.js +100 -0
  560. package/dist/hopper/BridgeLauncher.js +4 -2
  561. package/dist/hopper/HopperAnalysisProfile.js +7 -2
  562. package/dist/hopper/HopperCleanup.js +55 -9
  563. package/dist/hopper/HopperClient.js +14 -4
  564. package/dist/hopper/HopperProcessDiagnostic.js +1 -1
  565. package/dist/hopper/HopperProvider.js +8 -50
  566. package/dist/hopper/HopperProviderCapabilities.js +73 -0
  567. package/dist/hopper/HopperRequestQueue.js +7 -3
  568. package/dist/hopper/HopperResponseStream.js +7 -1
  569. package/dist/hopper/HopperSessionValues.js +1 -1
  570. package/dist/hopper/HopperSocketConnection.js +1 -1
  571. package/dist/hopper/HopperTargetLease.js +23 -15
  572. package/dist/hopper/LinuxPrivateDisplayDiagnostic.js +7 -8
  573. package/dist/hopper/LinuxPrivateDisplayProbe.js +10 -6
  574. package/dist/hopper/protocol.js +8 -8
  575. package/dist/ida/IdaConfiguration.js +56 -0
  576. package/dist/ida/IdaDoctor.js +53 -0
  577. package/dist/ida/IdaInput.js +62 -0
  578. package/dist/ida/IdaMcpConnection.js +111 -0
  579. package/dist/ida/IdaOperationRunner.js +299 -0
  580. package/dist/ida/IdaProtocolValues.js +178 -0
  581. package/dist/ida/IdaProvider.js +126 -0
  582. package/dist/ida/IdaProviderCapabilities.js +52 -0
  583. package/dist/ida/IdaSessionClient.js +318 -0
  584. package/dist/ida/IdaWorkspace.js +54 -0
  585. package/dist/{browser → inspector}/JavaScriptRuntimeScope.js +19 -6
  586. package/dist/{browser → inspector}/V8InspectorCaptureProjection.js +46 -8
  587. package/dist/{browser → inspector}/V8InspectorEndpoint.js +3 -2
  588. package/dist/{browser → inspector}/V8InspectorProvider.js +16 -14
  589. package/dist/inspector/providerIdentity.js +6 -0
  590. package/dist/javascript/recovery/RecoveryFiles.js +122 -0
  591. package/dist/javascript/recovery/WakaruCommand.js +116 -0
  592. package/dist/javascript/recovery/WakaruExecution.js +100 -0
  593. package/dist/javascript/recovery/WakaruProvider.js +96 -0
  594. package/dist/javascript/recovery/WakaruPublication.js +102 -0
  595. package/dist/javascript/recovery/WakaruRelease.js +29 -0
  596. package/dist/javascript/recovery/WakaruReport.js +134 -0
  597. package/dist/javascript/sourceMaps/SourceMapCodecProcess.js +37 -0
  598. package/dist/javascript/sourceMaps/SourceMapCodecProtocol.js +20 -0
  599. package/dist/javascript/sourceMaps/SourceMapCommand.js +176 -0
  600. package/dist/javascript/sourceMaps/SourceMapDecoder.js +61 -0
  601. package/dist/javascript/sourceMaps/SourceMapFormat.js +185 -0
  602. package/dist/javascript/sourceMaps/TraceSourceMap.js +138 -0
  603. package/dist/main/shutdown.js +29 -3
  604. package/dist/main/startup.js +1 -1
  605. package/dist/main/transport.js +32 -11
  606. package/dist/main.js +9 -20
  607. package/dist/native/AppleDispatchCoverage.js +58 -0
  608. package/dist/native/AppleDispatchMetadata.js +73 -490
  609. package/dist/native/AppleMachoFixups.js +292 -0
  610. package/dist/native/AppleMachoSelection.js +188 -0
  611. package/dist/native/AppleObjcCategories.js +59 -0
  612. package/dist/native/AppleObjcDispatchFacets.js +257 -0
  613. package/dist/native/AppleObjcProperties.js +68 -0
  614. package/dist/native/AppleObjcProtocols.js +2 -1
  615. package/dist/native/AppleSwiftDispatchFacets.js +150 -0
  616. package/dist/native/NativeMacOSProvider.js +204 -72
  617. package/dist/native/NativeMacOSProviderMetadata.js +42 -0
  618. package/dist/native/NativeMachoInspection.js +87 -26
  619. package/dist/native/NativeUiHelperRuntime.js +14 -4
  620. package/dist/native/NativeUiObservation.js +14 -6
  621. package/dist/native/NativeUiOutputBudget.js +8 -0
  622. package/dist/native/parsers/codesign.js +40 -5
  623. package/dist/native/parsers/demangle.js +6 -2
  624. package/dist/native/parsers/dyldInfo.js +16 -7
  625. package/dist/native/parsers/echoedPath.js +14 -0
  626. package/dist/native/parsers/lipo.js +14 -0
  627. package/dist/native/parsers/otool.js +5 -2
  628. package/dist/native/parsers/plist.js +174 -11
  629. package/dist/process/ExecFileOutput.js +2 -0
  630. package/dist/process/PrivateRuntimeRoot.js +13 -3
  631. package/dist/process/ProcessOwnership.js +5 -73
  632. package/dist/process/ProcessOwnershipObservation.js +62 -2
  633. package/dist/process/ProcessOwnershipProcessTree.js +13 -0
  634. package/dist/process/ProviderProcess.js +62 -24
  635. package/dist/process/ProviderRunLineage.js +1 -1
  636. package/dist/process/WindowsAuthority.js +20 -1
  637. package/dist/reference/ReferenceSourceReaderEntries.js +11 -2
  638. package/dist/reference/ReferenceSourceReaderFile.js +1 -0
  639. package/dist/server/createServer.js +67 -2
  640. package/dist/server/mcpClientMetadata.js +6 -3
  641. package/dist/server/mcpProgress.js +2 -1
  642. package/dist/server/promptCompletion.js +3 -3
  643. package/dist/server/registerAndroidTools.js +30 -0
  644. package/dist/server/registerApplicationTools/compareExportShapes.js +7 -3
  645. package/dist/server/registerApplicationTools/compareSourceToBundle.js +9 -4
  646. package/dist/server/registerApplicationTools/compareVersions.js +7 -3
  647. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +43 -0
  648. package/dist/server/registerApplicationTools/traceFeature.js +8 -3
  649. package/dist/server/registerApplicationTools/traceSemantics.js +8 -3
  650. package/dist/server/registerApplicationTools.js +2 -0
  651. package/dist/server/registerBrowserScenarioTool.js +6 -2
  652. package/dist/server/registerBrowserTools.js +13 -2
  653. package/dist/server/registerCloseLifecycleTool.js +1 -1
  654. package/dist/server/registerElectronTools.js +21 -7
  655. package/dist/server/registerEnhancedTools.js +28 -1
  656. package/dist/server/registerFirmwareTools.js +22 -0
  657. package/dist/server/registerFunctionComparisonTool.js +1 -1
  658. package/dist/server/registerInvestigationTools/helpers.js +2 -1
  659. package/dist/server/registerJavaScriptRecoveryTool.js +17 -0
  660. package/dist/server/registerJavaScriptRuntimeObservationTools.js +9 -4
  661. package/dist/server/registerManagedTools.js +4 -4
  662. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +2 -2
  663. package/dist/server/registerManagedWorkflowTools/contract.js +1 -1
  664. package/dist/server/registerManagedWorkflowTools/evidence.js +1 -1
  665. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +1 -1
  666. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +1 -1
  667. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +2 -2
  668. package/dist/server/registerNativeTools.js +1 -1
  669. package/dist/server/registerOfficialTools.js +4 -1
  670. package/dist/server/registerProcessComparisonTool.js +5 -2
  671. package/dist/server/registerPrompts.js +5 -1
  672. package/dist/server/registerSessionTools.js +4 -2
  673. package/dist/server/registerWebModuleTool.js +17 -0
  674. package/dist/server/registerWebRuntimeTools.js +31 -0
  675. package/dist/server/registerWebScriptTool.js +18 -0
  676. package/dist/server/registerWebSourceLocationTool.js +17 -0
  677. package/dist/server/runDerivedOperation.js +1 -1
  678. package/dist/server/sessionAvailabilityPolicy.js +24 -9
  679. package/dist/server/sessionEvidence.js +1 -1
  680. package/dist/server/toolResult.js +2 -1
  681. package/dist/windows/WindowsNativeLoader.js +108 -0
  682. package/dist/windows/WindowsOwnedProcess.js +170 -0
  683. package/dist/windows/WindowsPrivateRuntime.js +137 -0
  684. package/install.sh +16 -8
  685. package/native/windows/README.md +107 -0
  686. package/native/windows/build/manifest.json +9 -0
  687. package/native/windows/build/rea-windows-x64.node +0 -0
  688. package/package.json +70 -35
  689. package/scripts/hopper-demo-x11.py +67 -8
  690. package/scripts/rea.mjs +10 -2
  691. package/scripts/verify-windows-native-artifact.mjs +39 -0
  692. package/skills/reverse-engineer-anything/SKILL.md +92 -24
  693. package/skills/reverse-engineer-anything/references/android-applications.md +31 -0
  694. package/skills/reverse-engineer-anything/references/javascript-applications.md +19 -2
  695. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +61 -4
  696. package/dist/application/JavaScriptApplicationService.js +0 -52
  697. package/dist/application/runtime.js +0 -51
  698. package/dist/browser/CdpCanonicalJsonDigest.js +0 -9
  699. package/dist/domain/appleApplication.js +0 -181
  700. package/dist/domain/errors.js +0 -324
  701. package/dist/domain/javascriptAstValues.js +0 -13
  702. package/dist/domain/javascriptSemanticTraversal.js +0 -30
  703. package/dist/native/NativeHostCapabilities.js +0 -23
  704. /package/dist/application/{BinarySessionPort.js → DirectAnalysisDependencies.js} +0 -0
  705. /package/dist/application/{ElectronActiveObservationPort.js → WebModulePorts.js} +0 -0
  706. /package/dist/application/{ElectronObservationPort.js → WebRuntimePort.js} +0 -0
  707. /package/dist/application/{JavaScriptArtifactAnalysisTypes.js → WebScriptArtifactPort.js} +0 -0
  708. /package/dist/application/{JavaScriptRuntimeObservationPort.js → WebSourceLocationPorts.js} +0 -0
  709. /package/dist/{domain/electronStaticAnalysisTypes.js → application/android/AndroidAnalysisPort.js} +0 -0
  710. /package/dist/application/{AbortablePromise.js → binary/AbortablePromise.js} +0 -0
  711. /package/dist/{domain/javascriptSemanticValueTypes.js → application/binary/BinarySessionPort.js} +0 -0
  712. /package/dist/application/{BinarySessionStatus.js → binary/BinarySessionStatus.js} +0 -0
  713. /package/dist/application/{ElectronBoundaryGraph.js → javascript/ElectronBoundaryGraph.js} +0 -0
  714. /package/dist/application/{ElectronBoundaryGraphIpc.js → javascript/ElectronBoundaryGraphIpc.js} +0 -0
  715. /package/dist/application/{ElectronBoundaryGraphNative.js → javascript/ElectronBoundaryGraphNative.js} +0 -0
  716. /package/dist/application/{ElectronBoundaryGraphWindows.js → javascript/ElectronBoundaryGraphWindows.js} +0 -0
  717. /package/dist/application/{JavaScriptArtifactGraphBundlers.js → javascript/JavaScriptArtifactGraphBundlers.js} +0 -0
  718. /package/dist/application/{JavaScriptArtifactGraphEvidence.js → javascript/JavaScriptArtifactGraphEvidence.js} +0 -0
  719. /package/dist/application/{JavaScriptArtifactReconstructionInput.js → javascript/JavaScriptArtifactReconstructionInput.js} +0 -0
  720. /package/dist/application/{JavaScriptSemanticGraphEvidence.js → javascript/JavaScriptSemanticGraphEvidence.js} +0 -0
  721. /package/dist/application/{JavaScriptSemanticGraphValueProjection.js → javascript/JavaScriptSemanticGraphValueProjection.js} +0 -0
  722. /package/dist/domain/{electronStaticAnalysis.js → javascript/electronStaticAnalysis.js} +0 -0
  723. /package/dist/domain/{javascriptExportShapeComparisonIdentity.js → javascript/javascriptExportShapeComparisonIdentity.js} +0 -0
  724. /package/dist/domain/{javascriptRuntimeReconciliation.js → javascript/javascriptRuntimeReconciliation.js} +0 -0
  725. /package/dist/domain/{javascriptRuntimeReconciliationRuntime.js → javascript/javascriptRuntimeReconciliationRuntime.js} +0 -0
  726. /package/dist/domain/{javascriptSemanticCoverage.js → javascript/javascriptSemanticCoverage.js} +0 -0
  727. /package/dist/domain/{javascriptSemanticDerivedAnalysis.js → javascript/javascriptSemanticDerivedAnalysis.js} +0 -0
  728. /package/dist/domain/{javascriptSemanticGraphSerialization.js → javascript/javascriptSemanticGraphSerialization.js} +0 -0
  729. /package/dist/domain/{javascriptSemanticIr.js → javascript/javascriptSemanticIr.js} +0 -0
  730. /package/dist/domain/{javascriptSemanticQueryRelations.js → javascript/javascriptSemanticQueryRelations.js} +0 -0
  731. /package/dist/domain/{javascriptSemanticState.js → javascript/javascriptSemanticState.js} +0 -0
  732. /package/dist/domain/{javascriptStaticAnalysisFindings.js → javascript/javascriptStaticAnalysisFindings.js} +0 -0
  733. /package/dist/domain/{javascriptStaticAnalysisState.js → javascript/javascriptStaticAnalysisState.js} +0 -0
  734. /package/dist/domain/{javascriptStaticAnalysisTypes.js → javascript/javascriptStaticAnalysisTypes.js} +0 -0
  735. /package/dist/domain/{managedApplicationGraphCoverage.js → managed/managedApplicationGraphCoverage.js} +0 -0
  736. /package/dist/domain/{managedApplicationGraphNodeCoverage.js → managed/managedApplicationGraphNodeCoverage.js} +0 -0
  737. /package/dist/domain/{nativeApiBoundary.js → native/nativeApiBoundary.js} +0 -0
  738. /package/dist/domain/{nativeInstruction.js → native/nativeInstruction.js} +0 -0
  739. /package/dist/domain/{nativeValueFlow.js → native/nativeValueFlow.js} +0 -0
  740. /package/dist/domain/{nativeValueTrace.js → native/nativeValueTrace.js} +0 -0
@@ -1,4 +1,4 @@
1
- import { allowedSanitizedUrl, numberValue, recordValue, recordsValue, requiredRecord, stringValue, } from "./CdpCaptureValues.js";
1
+ import { allowedSanitizedUrl, numberValue, recordValue, recordsValue, requiredRecord, cdpStringValue, } from "./CdpCaptureValues.js";
2
2
  import { exclusionReasonForUrl } from "./CdpCaptureEventHelpers.js";
3
3
  /** Normalize every allowed frame, optionally selecting a leading frame. */
4
4
  export const captureFrames = (result, allowedOrigins, maximum, completeness) => {
@@ -10,21 +10,21 @@ export const captureFrames = (result, allowedOrigins, maximum, completeness) =>
10
10
  const items = [];
11
11
  for (const tree of walkFrameTrees(root, () => completeness?.exclude("frames", "invalid_protocol_value"))) {
12
12
  const frame = recordValue(tree.frame);
13
- const frameId = stringValue(frame?.id);
13
+ const frameId = cdpStringValue(frame?.id);
14
14
  const sanitized = allowedSanitizedUrl(frame?.url, allowedOrigins);
15
15
  if (frame === undefined || frameId === undefined) {
16
16
  completeness?.exclude("frames", "invalid_protocol_value");
17
17
  continue;
18
18
  }
19
19
  if (sanitized === undefined || sanitized.origin === null) {
20
- completeness?.exclude("frames", exclusionReasonForUrl(stringValue(frame.url)));
20
+ completeness?.exclude("frames", exclusionReasonForUrl(cdpStringValue(frame.url)));
21
21
  continue;
22
22
  }
23
23
  if (maximum !== undefined && items.length >= maximum)
24
24
  continue;
25
25
  items.push({
26
26
  frame_id: frameId,
27
- parent_frame_id: stringValue(frame.parentId) ?? null,
27
+ parent_frame_id: cdpStringValue(frame.parentId) ?? null,
28
28
  url: sanitized.url,
29
29
  origin: sanitized.origin,
30
30
  });
@@ -32,7 +32,7 @@ export const captureFrames = (result, allowedOrigins, maximum, completeness) =>
32
32
  return { items };
33
33
  };
34
34
  /** Read the current main-frame URL from an untrusted Page.getFrameTree result. */
35
- export const mainFrameUrl = (result) => stringValue(recordValue(recordValue(requiredRecord(result).frameTree)?.frame)?.url);
35
+ export const mainFrameUrl = (result) => cdpStringValue(recordValue(recordValue(requiredRecord(result).frameTree)?.frame)?.url);
36
36
  /** Normalize every allowed resource. */
37
37
  export const captureResources = (result, allowedOrigins, completeness) => {
38
38
  const root = recordValue(recordValue(result)?.frameTree);
@@ -45,16 +45,16 @@ export const captureResources = (result, allowedOrigins, completeness) => {
45
45
  for (const resource of recordsValue(tree.resources)) {
46
46
  const url = allowedSanitizedUrl(resource.url, allowedOrigins);
47
47
  if (url === undefined || url.origin === null) {
48
- completeness?.exclude("resources", exclusionReasonForUrl(stringValue(resource.url)));
48
+ completeness?.exclude("resources", exclusionReasonForUrl(cdpStringValue(resource.url)));
49
49
  continue;
50
50
  }
51
51
  const contentSize = numberValue(resource.contentSize);
52
52
  items.push({
53
- rawUrl: stringValue(resource.url) ?? "",
53
+ rawUrl: cdpStringValue(resource.url) ?? "",
54
54
  url: url.url,
55
55
  origin: url.origin,
56
- type: stringValue(resource.type) ?? "Other",
57
- mime_type: stringValue(resource.mimeType) ?? "",
56
+ type: cdpStringValue(resource.type) ?? "Other",
57
+ mime_type: cdpStringValue(resource.mimeType) ?? "",
58
58
  content_size: contentSize === undefined ? null : Math.max(0, contentSize),
59
59
  });
60
60
  }
@@ -89,7 +89,7 @@ export const walkFrameTrees = function* (root, onMalformedChild) {
89
89
  export const captureDom = (result, allowedOrigins, input, completeness) => {
90
90
  const root = requiredRecord(result);
91
91
  const strings = Array.isArray(root.strings)
92
- ? root.strings.map((value) => stringValue(value) ?? "")
92
+ ? root.strings.map((value) => cdpStringValue(value) ?? "")
93
93
  : [];
94
94
  const nodes = [];
95
95
  const urls = [];
@@ -102,6 +102,7 @@ export const captureDom = (result, allowedOrigins, input, completeness) => {
102
102
  completeness?.exclude("dom", exclusionReasonForUrl(documentUrl));
103
103
  continue;
104
104
  }
105
+ const baseUrl = indexedString(strings, document.baseURL) || documentUrl;
105
106
  const documentNodes = recordValue(document.nodes);
106
107
  if (documentNodes === undefined)
107
108
  continue;
@@ -132,6 +133,8 @@ export const captureDom = (result, allowedOrigins, input, completeness) => {
132
133
  const metadata = domMetadata({
133
134
  strings,
134
135
  attributes: attributeIndexes,
136
+ // The BASE element itself resolves against the document fallback URL.
137
+ baseUrl: nodeName.toLowerCase() === "base" ? documentUrl : baseUrl,
135
138
  documentUrl,
136
139
  nodeIndex,
137
140
  nodeName,
@@ -160,13 +163,13 @@ export const captureDom = (result, allowedOrigins, input, completeness) => {
160
163
  export const captureAccessibility = (results, options) => {
161
164
  const all = results.flatMap((result) => recordsValue(requiredRecord(result).nodes));
162
165
  const nodeIds = new Set(all.flatMap((node) => {
163
- const nodeId = stringValue(node.nodeId);
166
+ const nodeId = cdpStringValue(node.nodeId);
164
167
  return nodeId === undefined ? [] : [nodeId];
165
168
  }));
166
169
  let excludedFields = 0;
167
170
  const nodes = all.map((node) => {
168
171
  const captureText = (value) => {
169
- const raw = stringValue(recordValue(value)?.value);
172
+ const raw = cdpStringValue(recordValue(value)?.value);
170
173
  if (raw === undefined)
171
174
  return null;
172
175
  if (!options.includeText) {
@@ -176,8 +179,8 @@ export const captureAccessibility = (results, options) => {
176
179
  return raw;
177
180
  };
178
181
  return {
179
- node_id: stringValue(node.nodeId) ?? "",
180
- parent_id: stringValue(node.parentId) ?? null,
182
+ node_id: cdpStringValue(node.nodeId) ?? "",
183
+ parent_id: cdpStringValue(node.parentId) ?? null,
181
184
  role: axText(node.role),
182
185
  name: captureText(node.name),
183
186
  description: captureText(node.description),
@@ -190,7 +193,7 @@ export const captureAccessibility = (results, options) => {
190
193
  nodes,
191
194
  treeIncomplete: all.some((node) => Array.isArray(node.childIds) &&
192
195
  node.childIds.some((childId) => {
193
- const id = stringValue(childId);
196
+ const id = cdpStringValue(childId);
194
197
  return id !== undefined && !nodeIds.has(id);
195
198
  })),
196
199
  textCapture: {
@@ -235,7 +238,7 @@ const ACCESSIBILITY_STATE_NAMES = new Set([
235
238
  const accessibilityStates = (value) => {
236
239
  const states = new Map();
237
240
  for (const property of recordsValue(value)) {
238
- const name = stringValue(property.name);
241
+ const name = cdpStringValue(property.name);
239
242
  if (name === undefined || !ACCESSIBILITY_STATE_NAMES.has(name))
240
243
  continue;
241
244
  const raw = recordValue(property.value)?.value;
@@ -253,7 +256,7 @@ const accessibilityStates = (value) => {
253
256
  .sort(([left], [right]) => left.localeCompare(right))
254
257
  .map(([name, state]) => ({ name, value: state }));
255
258
  };
256
- const axText = (value) => stringValue(recordValue(value)?.value) ?? null;
259
+ const axText = (value) => cdpStringValue(recordValue(value)?.value) ?? null;
257
260
  const indexedString = (strings, index) => {
258
261
  const integer = numberValue(index);
259
262
  return integer === undefined ? "" : (strings[Math.trunc(integer)] ?? "");
@@ -265,7 +268,7 @@ const numberArray = (value) => Array.isArray(value)
265
268
  })
266
269
  : [];
267
270
  const domMetadata = (options) => {
268
- const { strings, attributes, documentUrl, nodeIndex, nodeName, allowedOrigins, } = options;
271
+ const { strings, attributes, baseUrl, documentUrl, nodeIndex, nodeName, allowedOrigins, } = options;
269
272
  const pairs = new Map();
270
273
  for (let index = 0; index + 1 < attributes.length; index += 2) {
271
274
  const name = indexedString(strings, attributes[index]).toLowerCase();
@@ -277,7 +280,16 @@ const domMetadata = (options) => {
277
280
  const value = pairs.get(attribute);
278
281
  if (value === undefined)
279
282
  continue;
280
- const destination = domDestination(value, documentUrl, allowedOrigins);
283
+ const tagName = nodeName.toLowerCase();
284
+ // Chrome strips HTML whitespace for FORM.action, while submit controls
285
+ // use the document URL only for an exactly empty formaction attribute.
286
+ const usesDocumentUrl = (tagName === "form" &&
287
+ attribute === "action" &&
288
+ /^[\t\n\f\r ]*$/u.test(value)) ||
289
+ ((tagName === "button" || tagName === "input") &&
290
+ attribute === "formaction" &&
291
+ value === "");
292
+ const destination = domDestination(usesDocumentUrl ? documentUrl : value, baseUrl, allowedOrigins);
281
293
  urls.push({
282
294
  node_index: nodeIndex,
283
295
  attribute,
@@ -300,9 +312,9 @@ const domMetadata = (options) => {
300
312
  : [];
301
313
  return { urls, agentHints };
302
314
  };
303
- const domDestination = (value, documentUrl, allowedOrigins) => {
315
+ const domDestination = (value, baseUrl, allowedOrigins) => {
304
316
  try {
305
- const parsed = new URL(value, documentUrl);
317
+ const parsed = new URL(value, baseUrl);
306
318
  if (parsed.protocol !== "http:" && parsed.protocol !== "https:")
307
319
  return { url: null, scope: "unsupported" };
308
320
  if (!allowedOrigins.has(parsed.origin))
@@ -312,7 +324,9 @@ const domDestination = (value, documentUrl, allowedOrigins) => {
312
324
  scope: "approved",
313
325
  };
314
326
  }
315
- catch {
327
+ catch (cause) {
328
+ // Unparseable URLs are out of scope, not failures.
329
+ void cause;
316
330
  return { url: null, scope: "unsupported" };
317
331
  }
318
332
  };
@@ -1,9 +1,9 @@
1
1
  import { inferJsonShape } from "../domain/jsonShape.js";
2
- import { recordValue, stringValue, } from "./CdpCaptureValues.js";
2
+ import { recordValue, cdpStringValue, } from "./CdpCaptureValues.js";
3
3
  import { decodeBase64, isJsonContentType } from "./CdpCaptureEventHelpers.js";
4
4
  export const ingestResponseBodyShape = (state, requestId, value) => {
5
5
  const result = recordValue(value);
6
- const body = stringValue(result?.body);
6
+ const body = cdpStringValue(result?.body);
7
7
  if (body === undefined) {
8
8
  invalidResponseBodyShape(state, requestId);
9
9
  return;
@@ -21,7 +21,7 @@ export const ingestResponseBodyShape = (state, requestId, value) => {
21
21
  export const requestBodyShape = (state, request) => {
22
22
  if (!state.input.include_json_body_shapes)
23
23
  return { status: "not_approved", request: null, response: null };
24
- const body = stringValue(request.postData);
24
+ const body = cdpStringValue(request.postData);
25
25
  if (!isJsonContentType(recordValue(request.headers)) || body === undefined)
26
26
  return { status: "unavailable", request: null, response: null };
27
27
  const inferred = inferBodyShape(body);
@@ -1,12 +1,12 @@
1
1
  import { inferJsonShape } from "../domain/jsonShape.js";
2
2
  import { safeResponseMetadata } from "./CdpSafeMetadata.js";
3
- import { allowedSanitizedUrl, isHttpUrl, numberValue, recordValue, recordsValue, stringValue, } from "./CdpCaptureValues.js";
3
+ import { allowedSanitizedUrl, isHttpUrl, numberValue, recordValue, recordsValue, cdpStringValue, } from "./CdpCaptureValues.js";
4
4
  import { requestBodyShape } from "./CdpCaptureEventBodyShapes.js";
5
5
  import { consolePrimitive, decodeBase64, exclusionReasonForUrl, executionContextKey, firstCallFrame, initiatorLocation, integerOrNull, isMainFrameNavigation, } from "./CdpCaptureEventHelpers.js";
6
6
  export const handleExecutionContextCreated = (state, params) => {
7
7
  const context = recordValue(params.context);
8
8
  const identifier = numberValue(context?.id);
9
- const frameId = stringValue(recordValue(context?.auxData)?.frameId);
9
+ const frameId = cdpStringValue(recordValue(context?.auxData)?.frameId);
10
10
  if (identifier === undefined ||
11
11
  !Number.isSafeInteger(identifier) ||
12
12
  frameId === undefined)
@@ -20,8 +20,8 @@ export const handleExecutionContextDestroyed = (state, params) => {
20
20
  state.executionContextFrames.delete(key);
21
21
  };
22
22
  export const handleScriptParsed = (state, params) => {
23
- const scriptId = stringValue(params.scriptId);
24
- const rawUrl = stringValue(params.url) ?? "";
23
+ const scriptId = cdpStringValue(params.scriptId);
24
+ const rawUrl = cdpStringValue(params.url) ?? "";
25
25
  const sanitized = allowedSanitizedUrl(rawUrl, state.allowedOrigins);
26
26
  if (scriptId === undefined) {
27
27
  state.completeness.exclude("scripts", "invalid_protocol_value");
@@ -37,10 +37,10 @@ export const handleScriptParsed = (state, params) => {
37
37
  rawUrl,
38
38
  url: sanitized.url,
39
39
  origin: sanitized.origin,
40
- hash: stringValue(params.hash) ?? "",
40
+ hash: cdpStringValue(params.hash) ?? "",
41
41
  length: Math.max(0, Math.min(Number.MAX_SAFE_INTEGER, Math.trunc(numberValue(params.length) ?? 0))),
42
42
  isModule: params.isModule === true,
43
- language: stringValue(params.scriptLanguage) ?? null,
43
+ language: cdpStringValue(params.scriptLanguage) ?? null,
44
44
  sourceMapUrl: sourceMap.sanitized,
45
45
  sourceMapRawUrl: sourceMap.raw,
46
46
  executionContextKey: executionContextKey(params.executionContextId),
@@ -48,14 +48,16 @@ export const handleScriptParsed = (state, params) => {
48
48
  state.scripts.set(scriptId, script);
49
49
  };
50
50
  const sourceMapForScript = (value, scriptUrl, state) => {
51
- const declaredUrl = stringValue(value);
51
+ const declaredUrl = cdpStringValue(value);
52
52
  if (declaredUrl === undefined || declaredUrl === "")
53
53
  return { sanitized: null, raw: null };
54
54
  let rawUrl;
55
55
  try {
56
56
  rawUrl = new URL(declaredUrl, scriptUrl).href;
57
57
  }
58
- catch {
58
+ catch (cause) {
59
+ // Unparseable URLs are recorded as unsupported, not as failures.
60
+ void cause;
59
61
  state.completeness.exclude("source_maps", "unsupported_url");
60
62
  return { sanitized: null, raw: null };
61
63
  }
@@ -66,7 +68,7 @@ const sourceMapForScript = (value, scriptUrl, state) => {
66
68
  return { sanitized: null, raw: null };
67
69
  };
68
70
  export const handleRequestWillBeSent = (state, params) => {
69
- const requestId = stringValue(params.requestId);
71
+ const requestId = cdpStringValue(params.requestId);
70
72
  const request = recordValue(params.request);
71
73
  if (requestId === undefined) {
72
74
  state.completeness.exclude("network_requests", "invalid_protocol_value");
@@ -79,13 +81,13 @@ export const handleRequestWillBeSent = (state, params) => {
79
81
  }
80
82
  const sanitized = allowedSanitizedUrl(request.url, state.allowedOrigins);
81
83
  if (sanitized === undefined) {
82
- state.completeness.exclude("network_requests", exclusionReasonForUrl(stringValue(request.url)));
84
+ state.completeness.exclude("network_requests", exclusionReasonForUrl(cdpStringValue(request.url)));
83
85
  state.network.delete(requestId);
84
86
  return;
85
87
  }
86
88
  const initiator = recordValue(params.initiator);
87
89
  const initiatorFrame = initiatorLocation(initiator);
88
- const rawInitiatorUrl = stringValue(initiatorFrame?.url);
90
+ const rawInitiatorUrl = cdpStringValue(initiatorFrame?.url);
89
91
  const initiatorUrl = allowedSanitizedUrl(rawInitiatorUrl, state.allowedOrigins);
90
92
  if (rawInitiatorUrl !== undefined && initiatorUrl === undefined)
91
93
  state.completeness.exclude("network_initiators", exclusionReasonForUrl(rawInitiatorUrl));
@@ -93,13 +95,13 @@ export const handleRequestWillBeSent = (state, params) => {
93
95
  request_id: requestId,
94
96
  url: sanitized.url,
95
97
  origin: sanitized.origin ?? "",
96
- method: stringValue(request.method) ?? "GET",
97
- resource_type: stringValue(params.type) ?? null,
98
+ method: cdpStringValue(request.method) ?? "GET",
99
+ resource_type: cdpStringValue(params.type) ?? null,
98
100
  status: null,
99
101
  mime_type: null,
100
102
  encoded_data_length: null,
101
103
  initiator: {
102
- type: stringValue(initiator?.type) ?? "other",
104
+ type: cdpStringValue(initiator?.type) ?? "other",
103
105
  url: initiatorUrl?.url ?? null,
104
106
  line: integerOrNull(initiatorFrame?.lineNumber),
105
107
  column: integerOrNull(initiatorFrame?.columnNumber),
@@ -108,7 +110,7 @@ export const handleRequestWillBeSent = (state, params) => {
108
110
  });
109
111
  };
110
112
  export const handleResponseReceived = (state, params) => {
111
- const requestId = stringValue(params.requestId);
113
+ const requestId = cdpStringValue(params.requestId);
112
114
  if (requestId === undefined) {
113
115
  state.completeness.exclude("network_requests", "invalid_protocol_value");
114
116
  return;
@@ -121,21 +123,21 @@ export const handleResponseReceived = (state, params) => {
121
123
  if (response === undefined || sanitized === undefined) {
122
124
  state.completeness.exclude("network_requests", response === undefined
123
125
  ? "invalid_protocol_value"
124
- : exclusionReasonForUrl(stringValue(response.url)));
126
+ : exclusionReasonForUrl(cdpStringValue(response.url)));
125
127
  state.network.delete(requestId);
126
128
  return;
127
129
  }
128
130
  state.network.set(requestId, {
129
131
  ...current,
130
132
  status: numberValue(response.status) ?? null,
131
- mime_type: stringValue(response.mimeType) ?? null,
133
+ mime_type: cdpStringValue(response.mimeType) ?? null,
132
134
  });
133
135
  const metadata = safeResponseMetadata(requestId, sanitized.url, response, state.allowedOrigins);
134
136
  state.responseMetadata.push(metadata.response);
135
137
  state.agentHints.push(...metadata.agentHints);
136
138
  };
137
139
  export const handleLoadingFinished = (state, params) => {
138
- const requestId = stringValue(params.requestId);
140
+ const requestId = cdpStringValue(params.requestId);
139
141
  if (requestId === undefined)
140
142
  return;
141
143
  const current = state.network.get(requestId);
@@ -154,14 +156,14 @@ export const handleConsoleAPICalled = (state, params) => {
154
156
  }
155
157
  const source = allowedSanitizedUrl(frame.url, state.allowedOrigins);
156
158
  if (source === undefined) {
157
- state.completeness.exclude("console_events", exclusionReasonForUrl(stringValue(frame.url)));
159
+ state.completeness.exclude("console_events", exclusionReasonForUrl(cdpStringValue(frame.url)));
158
160
  return;
159
161
  }
160
162
  const arguments_ = recordsValue(params.args);
161
163
  state.console.push({
162
- type: stringValue(params.type) ?? "unknown",
164
+ type: cdpStringValue(params.type) ?? "unknown",
163
165
  timestamp: numberValue(params.timestamp) ?? 0,
164
- argument_types: arguments_.map((argument) => stringValue(argument.type) ?? "unknown"),
166
+ argument_types: arguments_.map((argument) => cdpStringValue(argument.type) ?? "unknown"),
165
167
  url: source.url,
166
168
  line: integerOrNull(frame.lineNumber),
167
169
  column: integerOrNull(frame.columnNumber),
@@ -196,12 +198,12 @@ const captureConsoleText = (state, arguments_) => {
196
198
  };
197
199
  };
198
200
  export const handleWebSocketFrame = (state, params, direction) => {
199
- const requestId = stringValue(params.requestId);
201
+ const requestId = cdpStringValue(params.requestId);
200
202
  if (requestId === undefined ||
201
203
  (!state.network.has(requestId) && !state.allowedWebSockets.has(requestId)))
202
204
  return;
203
205
  const response = recordValue(params.response);
204
- const payload = stringValue(response?.payloadData) ?? "";
206
+ const payload = cdpStringValue(response?.payloadData) ?? "";
205
207
  const opcode = Math.max(0, Math.trunc(numberValue(response?.opcode) ?? 0));
206
208
  const decoded = opcode === 1 ? undefined : decodeBase64(payload);
207
209
  if (opcode !== 1 && decoded === undefined)
@@ -226,8 +228,8 @@ const captureWebSocketShape = (state, payload, opcode) => {
226
228
  };
227
229
  };
228
230
  export const handleWebSocketCreated = (state, params) => {
229
- const requestId = stringValue(params.requestId);
230
- const rawUrl = stringValue(params.url);
231
+ const requestId = cdpStringValue(params.requestId);
232
+ const rawUrl = cdpStringValue(params.url);
231
233
  if (requestId === undefined) {
232
234
  state.completeness.exclude("websocket_connections", "invalid_protocol_value");
233
235
  return;
@@ -240,7 +242,9 @@ export const handleWebSocketCreated = (state, params) => {
240
242
  try {
241
243
  parsed = new URL(rawUrl);
242
244
  }
243
- catch {
245
+ catch (cause) {
246
+ // Unparseable URLs are recorded as unsupported, not as failures.
247
+ void cause;
244
248
  state.completeness.exclude("websocket_connections", "unsupported_url");
245
249
  return;
246
250
  }
@@ -264,8 +268,8 @@ export const handleFrameNavigated = (state, params) => {
264
268
  return;
265
269
  if (!isMainFrameNavigation({ method: "Page.frameNavigated", params }, state.mainFrameId))
266
270
  return;
267
- const rawUrl = stringValue(frame?.url);
268
- const loaderId = stringValue(frame?.loaderId);
271
+ const rawUrl = cdpStringValue(frame?.url);
272
+ const loaderId = cdpStringValue(frame?.loaderId);
269
273
  // `frameNavigated` re-fires for a document already reported (same URL and
270
274
  // loader). Treating that as a navigation aborted a valid capture with
271
275
  // `target_changed`, which is a false claim that the target moved.
@@ -1,14 +1,14 @@
1
- import { isHttpUrl, numberValue, recordValue, recordsValue, stringValue, } from "./CdpCaptureValues.js";
1
+ import { isHttpUrl, numberValue, recordValue, recordsValue, cdpStringValue, } from "./CdpCaptureValues.js";
2
2
  /** Identify a top-level navigation event from its untrusted CDP envelope. */
3
3
  export const isMainFrameNavigation = (event, mainFrameId) => {
4
4
  const params = recordValue(event.params);
5
5
  if (params === undefined)
6
6
  return false;
7
7
  const frameId = event.method === "Page.frameNavigated"
8
- ? stringValue(recordValue(params.frame)?.id)
8
+ ? cdpStringValue(recordValue(params.frame)?.id)
9
9
  : event.method === "Page.frameRequestedNavigation" ||
10
10
  event.method === "Page.navigatedWithinDocument"
11
- ? stringValue(params.frameId)
11
+ ? cdpStringValue(params.frameId)
12
12
  : undefined;
13
13
  return frameId === mainFrameId;
14
14
  };
@@ -21,7 +21,7 @@ export const initiatorLocation = (initiator) => {
21
21
  return frame;
22
22
  stack = recordValue(stack.parent);
23
23
  }
24
- return stringValue(initiator?.url) === undefined ? undefined : initiator;
24
+ return cdpStringValue(initiator?.url) === undefined ? undefined : initiator;
25
25
  };
26
26
  export const exclusionReasonForUrl = (value) => value === undefined || value === ""
27
27
  ? "unattributed_origin"
@@ -43,7 +43,7 @@ export const isJsonContentType = (headers) => {
43
43
  return false;
44
44
  for (const [name, value] of Object.entries(headers))
45
45
  if (name.toLowerCase() === "content-type" &&
46
- isJsonMediaType(stringValue(value)))
46
+ isJsonMediaType(cdpStringValue(value)))
47
47
  return true;
48
48
  return false;
49
49
  };
@@ -52,7 +52,7 @@ export const isJsonMediaType = (value) => {
52
52
  return (mediaType === "application/json" || mediaType?.endsWith("+json") === true);
53
53
  };
54
54
  export const consolePrimitive = (value) => {
55
- const type = stringValue(value.type);
55
+ const type = cdpStringValue(value.type);
56
56
  switch (type) {
57
57
  case "string":
58
58
  return typeof value.value === "string"
@@ -1,9 +1,10 @@
1
1
  import { CdpConnection } from "./CdpConnection.js";
2
2
  import { optionalCdpCommand } from "./CdpOptionalCommand.js";
3
3
  import { captureStorageFingerprints, } from "./CdpCaptureStorageFingerprints.js";
4
- import { numberValue, recordValue, recordsValue, stringValue, } from "./CdpCaptureValues.js";
5
- /** Capture redacted storage metadata for one authorized origin. */
6
- export const captureStorage = async (context, origin, limitations) => {
4
+ import { numberValue, recordValue, recordsValue, cdpStringValue, } from "./CdpCaptureValues.js";
5
+ /** Capture redacted storage metadata for an authorized page and its origin. */
6
+ export const captureStorage = async (context, pageUrl, limitations) => {
7
+ const origin = new URL(pageUrl).origin;
7
8
  const quota = recordValue(await optionalCdpCommand(context, "Storage.getUsageAndQuota", { origin }, limitations));
8
9
  const local = context.input.include_storage_keys
9
10
  ? await storageItems(context, origin, true, limitations)
@@ -25,6 +26,7 @@ export const captureStorage = async (context, origin, limitations) => {
25
26
  ? await captureStorageFingerprints({
26
27
  context,
27
28
  origin,
29
+ cookieUrl: pageUrl,
28
30
  local,
29
31
  session,
30
32
  indexedDbNames: indexed,
@@ -58,8 +60,8 @@ const emptyStorageItems = {
58
60
  complete: false,
59
61
  };
60
62
  const capturedCaches = (values) => values.flatMap((cache) => {
61
- const name = stringValue(cache.cacheName);
62
- const id = stringValue(cache.cacheId);
63
+ const name = cdpStringValue(cache.cacheName);
64
+ const id = cdpStringValue(cache.cacheId);
63
65
  return name === undefined || id === undefined ? [] : [{ name, id }];
64
66
  });
65
67
  const storageItems = async (context, origin, isLocalStorage, limitations) => {
@@ -70,15 +72,15 @@ const storageItems = async (context, origin, isLocalStorage, limitations) => {
70
72
  const items = entries.flatMap((entry) => {
71
73
  if (!Array.isArray(entry))
72
74
  return [];
73
- const key = stringValue(entry[0]);
74
- const value = stringValue(entry[1]);
75
+ const key = cdpStringValue(entry[0]);
76
+ const value = cdpStringValue(entry[1]);
75
77
  return key === undefined || value === undefined ? [] : [{ key, value }];
76
78
  });
77
79
  return { items, complete: items.length === entries.length };
78
80
  };
79
81
  const stringArray = (value) => Array.isArray(value)
80
82
  ? value.flatMap((item) => {
81
- const text = stringValue(item);
83
+ const text = cdpStringValue(item);
82
84
  return text === undefined ? [] : [text];
83
85
  })
84
86
  : [];
@@ -1,10 +1,11 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import canonicalize from "canonicalize";
3
+ import { compareCodePoints } from "../domain/canonicalOrdering.js";
3
4
  import { CdpConnection } from "./CdpConnection.js";
4
5
  import { optionalCdpCommand } from "./CdpOptionalCommand.js";
5
- import { recordValue, recordsValue, stringValue } from "./CdpCaptureValues.js";
6
+ import { recordValue, recordsValue, cdpStringValue, } from "./CdpCaptureValues.js";
6
7
  /** Capture stable hashes of approved storage content without returning values. */
7
- export const captureStorageFingerprints = async ({ context, origin, local, session, indexedDbNames, caches, limitations, }) => {
8
+ export const captureStorageFingerprints = async ({ context, origin, cookieUrl, local, session, indexedDbNames, caches, limitations, }) => {
8
9
  const state = {
9
10
  items: [],
10
11
  complete: local.complete && session.complete,
@@ -12,7 +13,7 @@ export const captureStorageFingerprints = async ({ context, origin, local, sessi
12
13
  const run = { context, limitations, state };
13
14
  addStorageItems(state, "local_storage", local.items);
14
15
  addStorageItems(state, "session_storage", session.items);
15
- await addCookies(run, origin);
16
+ await addCookies(run, cookieUrl);
16
17
  await addIndexedDb(run, origin, indexedDbNames);
17
18
  await addCaches(run, caches);
18
19
  state.items.sort((left, right) => compareCodePoints(`${left.scope}:${left.identity_sha256}`, `${right.scope}:${right.identity_sha256}`));
@@ -28,8 +29,9 @@ const addStorageItems = (state, scope, items) => {
28
29
  complete: true,
29
30
  });
30
31
  };
31
- const addCookies = async (run, origin) => {
32
- const raw = await optionalCdpCommand(run.context, "Network.getCookies", { urls: [origin] }, run.limitations);
32
+ const addCookies = async (run, pageUrl) => {
33
+ run.limitations.push("Cookie fingerprints cover cookies applicable to the current main-frame URL, not every path on its origin.");
34
+ const raw = await optionalCdpCommand(run.context, "Network.getCookies", { urls: [pageUrl] }, run.limitations);
33
35
  if (raw === undefined) {
34
36
  run.state.complete = false;
35
37
  return;
@@ -43,10 +45,10 @@ const addCookies = async (run, origin) => {
43
45
  if (cookies.length !== cookieValues.length)
44
46
  run.state.complete = false;
45
47
  for (const cookie of cookies) {
46
- const name = stringValue(cookie.name);
47
- const value = stringValue(cookie.value);
48
- const domain = stringValue(cookie.domain);
49
- const path = stringValue(cookie.path);
48
+ const name = cdpStringValue(cookie.name);
49
+ const value = cdpStringValue(cookie.value);
50
+ const domain = cdpStringValue(cookie.domain);
51
+ const path = cdpStringValue(cookie.path);
50
52
  if (name === undefined ||
51
53
  value === undefined ||
52
54
  domain === undefined ||
@@ -75,7 +77,7 @@ const addIndexedDb = async (run, origin, names) => {
75
77
  run.state.complete = false;
76
78
  continue;
77
79
  }
78
- if (stringValue(database.name) !== databaseName) {
80
+ if (cdpStringValue(database.name) !== databaseName) {
79
81
  run.state.complete = false;
80
82
  continue;
81
83
  }
@@ -93,7 +95,7 @@ const addIndexedDb = async (run, origin, names) => {
93
95
  complete: indexedDbSchemaComplete(stores),
94
96
  });
95
97
  for (const store of stores) {
96
- const objectStoreName = stringValue(store.name);
98
+ const objectStoreName = cdpStringValue(store.name);
97
99
  if (objectStoreName === undefined) {
98
100
  run.state.complete = false;
99
101
  continue;
@@ -107,22 +109,22 @@ const addIndexedDb = async (run, origin, names) => {
107
109
  }
108
110
  };
109
111
  const indexedDbStoreSchema = (store) => ({
110
- name: stringValue(store.name) ?? null,
112
+ name: cdpStringValue(store.name) ?? null,
111
113
  key_path: stableValue(store.keyPath),
112
114
  auto_increment: store.autoIncrement === true,
113
115
  indexes: recordsValue(store.indexes).map((index) => ({
114
- name: stringValue(index.name) ?? null,
116
+ name: cdpStringValue(index.name) ?? null,
115
117
  key_path: stableValue(index.keyPath),
116
118
  unique: index.unique === true,
117
119
  multi_entry: index.multiEntry === true,
118
120
  })),
119
121
  });
120
- const indexedDbSchemaComplete = (stores) => stores.every((store) => stringValue(store.name) !== undefined &&
122
+ const indexedDbSchemaComplete = (stores) => stores.every((store) => cdpStringValue(store.name) !== undefined &&
121
123
  stableValueComplete(store.keyPath) &&
122
124
  typeof store.autoIncrement === "boolean" &&
123
125
  Array.isArray(store.indexes) &&
124
126
  recordsValue(store.indexes).length === store.indexes.length &&
125
- recordsValue(store.indexes).every((index) => stringValue(index.name) !== undefined &&
127
+ recordsValue(store.indexes).every((index) => cdpStringValue(index.name) !== undefined &&
126
128
  stableValueComplete(index.keyPath) &&
127
129
  typeof index.unique === "boolean" &&
128
130
  typeof index.multiEntry === "boolean"));
@@ -133,7 +135,6 @@ const addIndexedDbRecords = async (run, input) => {
133
135
  securityOrigin: input.origin,
134
136
  databaseName: input.databaseName,
135
137
  objectStoreName: input.objectStoreName,
136
- indexName: "",
137
138
  skipCount,
138
139
  pageSize: STORAGE_ENTRY_PAGE_SIZE,
139
140
  }, run.limitations);
@@ -163,7 +164,9 @@ const addIndexedDbRecords = async (run, input) => {
163
164
  primaryKey,
164
165
  },
165
166
  value,
166
- complete: remoteObjectComplete(entry.value),
167
+ complete: remoteObjectComplete(entry.key) &&
168
+ remoteObjectComplete(entry.primaryKey) &&
169
+ remoteObjectComplete(entry.value),
167
170
  });
168
171
  }
169
172
  if (result.hasMore !== true)
@@ -212,8 +215,8 @@ const addCaches = async (run, caches) => {
212
215
  }
213
216
  };
214
217
  const addCacheEntry = async (run, cache, entry) => {
215
- const requestURL = stringValue(entry.requestURL);
216
- const requestMethod = stringValue(entry.requestMethod);
218
+ const requestURL = cdpStringValue(entry.requestURL);
219
+ const requestMethod = cdpStringValue(entry.requestMethod);
217
220
  if (requestURL === undefined || requestMethod === undefined) {
218
221
  run.state.complete = false;
219
222
  return;
@@ -224,8 +227,8 @@ const addCacheEntry = async (run, cache, entry) => {
224
227
  }
225
228
  const headerRecords = recordsValue(entry.requestHeaders);
226
229
  const requestHeaders = headerRecords.flatMap((header) => {
227
- const name = stringValue(header.name);
228
- const value = stringValue(header.value);
230
+ const name = cdpStringValue(header.name);
231
+ const value = cdpStringValue(header.value);
229
232
  return name === undefined || value === undefined ? [] : [{ name, value }];
230
233
  });
231
234
  if (headerRecords.length !== entry.requestHeaders.length ||
@@ -234,7 +237,7 @@ const addCacheEntry = async (run, cache, entry) => {
234
237
  return;
235
238
  }
236
239
  const raw = await optionalCdpCommand(run.context, "CacheStorage.requestCachedResponse", { cacheId: cache.id, requestURL, requestHeaders }, run.limitations);
237
- const body = stringValue(recordValue(recordValue(raw)?.response)?.body);
240
+ const body = cdpStringValue(recordValue(recordValue(raw)?.response)?.body);
238
241
  const decoded = body === undefined ? null : decodeBase64(body);
239
242
  const complete = decoded !== null;
240
243
  if (!complete)
@@ -315,4 +318,3 @@ const decodeBase64 = (value) => {
315
318
  return null;
316
319
  return Buffer.from(value, "base64");
317
320
  };
318
- const compareCodePoints = (left, right) => left < right ? -1 : left > right ? 1 : 0;