rea-agents 3.0.0 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (628) hide show
  1. package/README.md +83 -108
  2. package/bridge/ghidra/ReaGhidraBridge.java +609 -841
  3. package/bridge/hopper_bridge.py +99 -344
  4. package/dist/application/AbortablePromise.js +6 -3
  5. package/dist/application/AnalysisContextQueries.js +21 -9
  6. package/dist/application/AnalysisSnapshotCache.js +0 -1
  7. package/dist/application/AnalysisSnapshotFiles.js +7 -7
  8. package/dist/application/AndroidApplicationService.js +1 -1
  9. package/dist/application/AppleApplicationService.js +1 -1
  10. package/dist/application/ArtifactExtraction.js +35 -54
  11. package/dist/application/ArtifactExtractionDestination.js +17 -0
  12. package/dist/application/ArtifactGraphConstruction.js +2 -17
  13. package/dist/application/ArtifactInventory/classify.js +2 -6
  14. package/dist/application/ArtifactInventory/hash.js +2 -20
  15. package/dist/application/ArtifactInventory/policy.js +17 -0
  16. package/dist/application/ArtifactInventory/reader.js +1 -4
  17. package/dist/application/ArtifactInventory/scanCanonical.js +8 -15
  18. package/dist/application/ArtifactInventory/scanReader.js +76 -58
  19. package/dist/application/ArtifactInventory/types.js +1 -5
  20. package/dist/application/ArtifactInventory.js +6 -14
  21. package/dist/application/AuthorizedArtifactInventory.js +3 -13
  22. package/dist/application/BinarySession.js +54 -28
  23. package/dist/application/BinarySessionComposition.js +0 -11
  24. package/dist/application/BinarySessionOpen.js +2 -1
  25. package/dist/application/BinarySessionRecords.js +24 -86
  26. package/dist/application/BinarySessionStatus.js +16 -21
  27. package/dist/application/BinaryTargetResolver.js +216 -0
  28. package/dist/application/BrowserEvidence.js +39 -57
  29. package/dist/application/BrowserObservationService.js +3 -6
  30. package/dist/application/BrowserScenarioCaptureService.js +3 -6
  31. package/dist/application/BrowserScenarioEvidence.js +3 -3
  32. package/dist/application/CallPathTracing.js +2 -36
  33. package/dist/application/CapabilityClientRequirements.js +26 -0
  34. package/dist/application/CapabilityInventory.js +143 -77
  35. package/dist/application/ClientConfigurationDocument.js +27 -0
  36. package/dist/application/ClientRegistrationStatus.js +16 -13
  37. package/dist/application/CommandShimReplay.js +14 -1
  38. package/dist/application/DirectAnalysis.js +22 -46
  39. package/dist/application/DirectAnalysisStatus.js +5 -61
  40. package/dist/application/Doctor.js +11 -32
  41. package/dist/application/DoctorDiagnostics.js +1 -2
  42. package/dist/application/DoctorScope.js +1 -1
  43. package/dist/application/ElectronActiveEvidence.js +50 -0
  44. package/dist/application/ElectronActiveObservationPort.js +1 -0
  45. package/dist/application/ElectronActiveObservationService.js +78 -0
  46. package/dist/application/ElectronBoundaryAnalysis.js +7 -8
  47. package/dist/application/ElectronBoundaryGraphContext.js +1 -1
  48. package/dist/application/ElectronBoundaryGraphIpc.js +3 -3
  49. package/dist/application/ElectronBoundaryGraphNative.js +1 -2
  50. package/dist/application/ElectronBoundaryGraphWindows.js +6 -8
  51. package/dist/application/ElectronEvidence.js +4 -7
  52. package/dist/application/ElectronObservationService.js +5 -9
  53. package/dist/application/EnhancedLiteralTracing.js +42 -65
  54. package/dist/application/EnhancedTools.js +98 -64
  55. package/dist/application/EvidenceBundleCommands.js +16 -12
  56. package/dist/application/EvidenceBundleFiles.js +9 -15
  57. package/dist/application/EvidenceLedger.js +14 -42
  58. package/dist/application/FilesystemSnapshot.js +2 -3
  59. package/dist/application/InterfaceBuilderAnalysis.js +266 -0
  60. package/dist/application/InventoryProjectionEvidence.js +4 -2
  61. package/dist/application/InvestigationProviders.js +1 -1
  62. package/dist/application/JavaScriptApplicationEvidence.js +2 -5
  63. package/dist/application/JavaScriptApplicationEvidenceGraph.js +6 -10
  64. package/dist/application/JavaScriptApplicationService.js +6 -29
  65. package/dist/application/JavaScriptApplicationWorkflowEvidence.js +5 -5
  66. package/dist/application/JavaScriptApplicationWorkflowService.js +0 -8
  67. package/dist/application/JavaScriptArtifactAnalysis.js +38 -127
  68. package/dist/application/JavaScriptArtifactFiles.js +67 -107
  69. package/dist/application/JavaScriptArtifactGraphAccumulator.js +0 -7
  70. package/dist/application/JavaScriptArtifactGraphBuilder.js +7 -58
  71. package/dist/application/JavaScriptArtifactGraphBundlers.js +1 -6
  72. package/dist/application/JavaScriptArtifactGraphContext.js +12 -39
  73. package/dist/application/JavaScriptArtifactGraphDocuments.js +4 -11
  74. package/dist/application/JavaScriptArtifactGraphEvidence.js +0 -14
  75. package/dist/application/JavaScriptArtifactGraphFindings.js +3 -3
  76. package/dist/application/JavaScriptArtifactGraphStructure.js +16 -17
  77. package/dist/application/JavaScriptArtifactPathResolution.js +61 -49
  78. package/dist/application/JavaScriptArtifactReconstruction.js +5 -10
  79. package/dist/application/JavaScriptArtifactReconstructionInput.js +2 -14
  80. package/dist/application/JavaScriptJsonModules.js +2 -2
  81. package/dist/application/JavaScriptModuleRelationships.js +22 -27
  82. package/dist/application/JavaScriptReplayPermission.js +1 -1
  83. package/dist/application/JavaScriptReplayPlanning.js +9 -3
  84. package/dist/application/JavaScriptReplayService.js +29 -47
  85. package/dist/application/JavaScriptReturnShapeProjection.js +12 -42
  86. package/dist/application/JavaScriptRuntimeObservationEvidence.js +7 -8
  87. package/dist/application/JavaScriptRuntimeObservationService.js +4 -8
  88. package/dist/application/JavaScriptRuntimeReconciliationEvidence.js +2 -3
  89. package/dist/application/JavaScriptSemanticGraphBuilder.js +11 -41
  90. package/dist/application/JavaScriptSemanticGraphConstruction.js +5 -29
  91. package/dist/application/JavaScriptSemanticGraphEvidence.js +1 -1
  92. package/dist/application/JavaScriptSemanticGraphFingerprintProjection.js +1 -1
  93. package/dist/application/JavaScriptSemanticGraphFlowProjection.js +0 -13
  94. package/dist/application/JavaScriptSemanticGraphProjection.js +1 -3
  95. package/dist/application/JavaScriptSemanticTraceService.js +1 -10
  96. package/dist/application/JsonFiles.js +79 -0
  97. package/dist/application/LinuxHopper.js +11 -9
  98. package/dist/application/LoopbackReplay.js +26 -23
  99. package/dist/application/LoopbackReplayRecorder.js +29 -1
  100. package/dist/application/ManagedApplicationGraphService.js +1 -2
  101. package/dist/application/ManagedMemberComparisonService.js +11 -41
  102. package/dist/application/ManagedNativeVerificationService.js +1 -2
  103. package/dist/application/ManagedReconstructionService.js +1 -1
  104. package/dist/application/ManagedRuntimeCorrelationService.js +14 -13
  105. package/dist/application/NativeApiInspection.js +2 -7
  106. package/dist/application/NativeUiActionTrace.js +394 -0
  107. package/dist/application/NodeRuntimeCharacterizationService.js +11 -16
  108. package/dist/application/PermissionAuthority.js +15 -7
  109. package/dist/application/PermissionFailure.js +5 -0
  110. package/dist/application/ProcessCaptureAuthority.js +5 -7
  111. package/dist/application/ProcessCaptureJournal.js +3 -2
  112. package/dist/application/ProcessCaptureLifecycle.js +10 -12
  113. package/dist/application/ProcessCheckpoints.js +29 -11
  114. package/dist/application/ProcessCli.js +8 -17
  115. package/dist/application/ProcessEvidence.js +5 -7
  116. package/dist/application/ProcessHarness.js +60 -20
  117. package/dist/application/ProcessNormalization.js +2 -1
  118. package/dist/application/ProcessReactiveCoordinator.js +2 -4
  119. package/dist/application/ProcessReactiveEffects.js +9 -3
  120. package/dist/application/ProcessReactiveHarness.js +13 -7
  121. package/dist/application/ProcessSampling.js +2 -4
  122. package/dist/application/ProcessTimer.js +39 -0
  123. package/dist/application/ProjectPermissionStore.js +39 -95
  124. package/dist/application/RealHopperAssertions.js +20 -66
  125. package/dist/application/ReconstructionCoverageService.js +12 -58
  126. package/dist/application/ReconstructionObligationAuthority.js +2 -2
  127. package/dist/application/ReconstructionObligationCandidates.js +4 -4
  128. package/dist/application/ReconstructionObligationLedgerEvaluation.js +8 -15
  129. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -7
  130. package/dist/application/ReconstructionObligationLedgerService.js +19 -38
  131. package/dist/application/ReferenceSourceImport.js +21 -47
  132. package/dist/application/ReferenceSourceImportEntries.js +2 -4
  133. package/dist/application/ReferenceSourceImportPolicy.js +5 -32
  134. package/dist/application/ReferenceSourceImportTypes.js +0 -16
  135. package/dist/application/RuntimeExecutableDiagnostics.js +55 -29
  136. package/dist/application/SessionProviderRouter.js +2 -2
  137. package/dist/application/Setup.js +1 -3
  138. package/dist/application/SetupClientConfiguration.js +22 -88
  139. package/dist/application/SetupRegistrationEnvironment.js +0 -7
  140. package/dist/application/StoreFileLock.js +119 -0
  141. package/dist/application/TerminalRenderer.js +2 -3
  142. package/dist/application/Uninstall.js +9 -14
  143. package/dist/application/UnknownEvidence.js +1 -1
  144. package/dist/application/WindowsCapabilities.js +5 -4
  145. package/dist/artifacts/ArtifactPaths.js +2 -5
  146. package/dist/artifacts/ArtifactProvider.js +43 -67
  147. package/dist/artifacts/DirectoryArtifactReader.js +13 -8
  148. package/dist/artifacts/MachOSliceArtifactReader.js +1 -5
  149. package/dist/artifacts/NativeDmgArtifactReader.js +11 -11
  150. package/dist/artifacts/NibArchive.js +269 -0
  151. package/dist/artifacts/SafeOutputTree.js +21 -31
  152. package/dist/browser/BrowserProcessStartup.js +1 -2
  153. package/dist/browser/CdpAuthorizedMainFrame.js +16 -0
  154. package/dist/browser/CdpBrowserProvider.js +3 -13
  155. package/dist/browser/CdpCanonicalJsonDigest.js +9 -0
  156. package/dist/browser/CdpCaptureDocuments.js +28 -76
  157. package/dist/browser/CdpCaptureEventBodyShapes.js +13 -33
  158. package/dist/browser/CdpCaptureEventHandlers.js +22 -87
  159. package/dist/browser/CdpCaptureEvents.js +2 -8
  160. package/dist/browser/CdpCaptureStorage.js +9 -20
  161. package/dist/browser/CdpCaptureStorageFingerprints.js +85 -95
  162. package/dist/browser/CdpCaptureValues.js +21 -21
  163. package/dist/browser/CdpConnection.js +10 -25
  164. package/dist/browser/CdpElectronInspection.js +29 -51
  165. package/dist/browser/CdpElectronProvider.js +10 -35
  166. package/dist/browser/CdpElectronScriptEvents.js +8 -16
  167. package/dist/browser/CdpElectronScripts.js +6 -35
  168. package/dist/browser/CdpElectronWorkers.js +6 -10
  169. package/dist/browser/CdpEndpoint.js +25 -41
  170. package/dist/browser/CdpObservationSession.js +14 -26
  171. package/dist/browser/CdpPageCapture.js +34 -48
  172. package/dist/browser/CdpPageCaptureScripts.js +1 -19
  173. package/dist/browser/CdpPageCaptureWorkers.js +6 -10
  174. package/dist/browser/CdpSafeMetadata.js +19 -22
  175. package/dist/browser/CdpScreenshot.js +3 -5
  176. package/dist/browser/CdpTargetSession.js +1 -2
  177. package/dist/browser/CdpWebMcpDiscovery.js +13 -22
  178. package/dist/browser/ElectronFileScope.js +8 -19
  179. package/dist/browser/JavaScriptRuntimeScope.js +10 -10
  180. package/dist/browser/PlaywrightBrowserScenarioProvider.js +31 -64
  181. package/dist/browser/PlaywrightElectronActiveActions.js +309 -0
  182. package/dist/browser/PlaywrightElectronActiveProvider.js +274 -0
  183. package/dist/browser/PlaywrightExecutionBoundary.js +16 -5
  184. package/dist/browser/PlaywrightScenarioActions.js +3 -7
  185. package/dist/browser/PlaywrightScenarioArtifacts.js +23 -92
  186. package/dist/browser/PlaywrightScenarioBrowser.js +7 -9
  187. package/dist/browser/PlaywrightScenarioEvents.js +45 -94
  188. package/dist/browser/PlaywrightScenarioSession.js +18 -34
  189. package/dist/browser/PngVisualDiff.js +22 -14
  190. package/dist/browser/SensitiveTextCapture.js +1 -18
  191. package/dist/browser/V8InspectorCaptureProjection.js +7 -7
  192. package/dist/browser/V8InspectorEndpoint.js +12 -14
  193. package/dist/browser/V8InspectorProvider.js +20 -61
  194. package/dist/browser/WebSourceMapFetcher.js +56 -176
  195. package/dist/catalogIdentity.js +12 -60
  196. package/dist/cli/artifactCommands.js +49 -77
  197. package/dist/cli/coreAnalysisCommands.js +83 -133
  198. package/dist/cli/javascriptApplicationAnalysis.js +1 -9
  199. package/dist/cli/managedCommands.js +6 -271
  200. package/dist/cli/setupCommands.js +3 -12
  201. package/dist/cli/utilityCommands.js +7 -41
  202. package/dist/cli.js +0 -2
  203. package/dist/cliApplicationCommands.js +44 -114
  204. package/dist/cliBrowserAdvancedCommands.js +12 -102
  205. package/dist/cliBrowserCommands.js +19 -124
  206. package/dist/cliBrowserContext.js +30 -0
  207. package/dist/cliCommandNames.js +5 -5
  208. package/dist/cliElectronCommands.js +49 -71
  209. package/dist/cliEvidenceCommands.js +8 -77
  210. package/dist/cliJavaScriptRuntimeCommands.js +18 -92
  211. package/dist/cliJsonInput.js +4 -14
  212. package/dist/cliObservationOptions.js +11 -92
  213. package/dist/cliPolicyCommands.js +2 -16
  214. package/dist/cliProcessCommands.js +3 -3
  215. package/dist/cliSetup.js +0 -13
  216. package/dist/config/browserScenario.js +77 -0
  217. package/dist/config/electronAutomation.js +35 -0
  218. package/dist/config/environment.js +6 -9
  219. package/dist/config/javascriptReplay.js +41 -0
  220. package/dist/config/managedRuntime.js +25 -0
  221. package/dist/config/parseConfig.js +56 -232
  222. package/dist/config/parsers.js +16 -28
  223. package/dist/config/passiveObservation.js +87 -0
  224. package/dist/config/permissions.js +0 -7
  225. package/dist/config/processCapture.js +47 -0
  226. package/dist/contracts/analysisSearchContract.js +2 -5
  227. package/dist/contracts/applicationToolContracts.js +58 -114
  228. package/dist/contracts/applicationWorkflowInputContracts.js +29 -114
  229. package/dist/contracts/artifactComparisonExample.js +58 -60
  230. package/dist/contracts/artifactToolContracts.js +37 -91
  231. package/dist/contracts/browserScenarioToolContracts.js +6 -51
  232. package/dist/contracts/browserToolContracts.js +10 -75
  233. package/dist/contracts/electronToolContracts.js +27 -98
  234. package/dist/contracts/enhancedInputs.js +31 -78
  235. package/dist/contracts/errorSchemas.js +0 -1
  236. package/dist/contracts/functionComparisonExample.js +10 -24
  237. package/dist/contracts/functionInstructionContract.js +1 -3
  238. package/dist/contracts/functionWorkflowToolContracts.js +4 -5
  239. package/dist/contracts/hopperMemoryContracts.js +3 -3
  240. package/dist/contracts/investigationExamples.js +14 -11
  241. package/dist/contracts/javascriptApplicationWorkflowExamples.js +12 -19
  242. package/dist/contracts/javascriptRuntimeObservationToolContracts.js +2 -20
  243. package/dist/contracts/javascriptRuntimeReconciliationExample.js +45 -12
  244. package/dist/contracts/managedToolContracts.js +10 -104
  245. package/dist/contracts/managedWorkflowExamples.js +77 -125
  246. package/dist/contracts/managedWorkflowToolContracts.js +51 -74
  247. package/dist/contracts/nativeToolContracts.js +9 -14
  248. package/dist/contracts/processCaptureExample.js +2 -69
  249. package/dist/contracts/promptContracts.js +49 -67
  250. package/dist/contracts/providerSelection.js +0 -1
  251. package/dist/contracts/reconstructionReadinessExample.js +1 -6
  252. package/dist/contracts/sessionStatusContract.js +1 -17
  253. package/dist/contracts/sessionToolSchemas.js +52 -0
  254. package/dist/contracts/toolContractExamples.js +11 -10
  255. package/dist/contracts/toolContractHelpers.js +19 -0
  256. package/dist/contracts/toolContracts.js +60 -143
  257. package/dist/contracts/toolEffects.js +16 -9
  258. package/dist/contracts/toolOutputSchemaGroups.js +47 -86
  259. package/dist/contracts/toolOutputSchemaPrimitives.js +72 -62
  260. package/dist/contracts/toolSchemaMetadata.js +117 -0
  261. package/dist/contracts/unknownContractExamples.js +0 -2
  262. package/dist/doctorRuntime.js +1 -1
  263. package/dist/domain/analysisErrorPresentation.js +46 -54
  264. package/dist/domain/analysisErrorProjection.js +28 -37
  265. package/dist/domain/analysisProfile.js +3 -31
  266. package/dist/domain/analysisSnapshot.js +3 -12
  267. package/dist/domain/androidApplication.js +15 -52
  268. package/dist/domain/appleApplication.js +24 -65
  269. package/dist/domain/artifactComparison.js +11 -29
  270. package/dist/domain/artifactGraph.js +14 -44
  271. package/dist/domain/artifactInspection.js +38 -69
  272. package/dist/domain/artifactInventoryEvidence.js +27 -21
  273. package/dist/domain/binaryTarget.js +2 -219
  274. package/dist/domain/binaryTargetTypes.js +1 -0
  275. package/dist/domain/browserCaptureComparison.js +35 -60
  276. package/dist/domain/browserObservation.js +45 -197
  277. package/dist/domain/browserObservationSchemas.js +5 -23
  278. package/dist/domain/browserScenario.js +11 -14
  279. package/dist/domain/browserScenarioCapture.js +11 -12
  280. package/dist/domain/browserScenarioCaptureValues.js +146 -84
  281. package/dist/domain/browserScenarioDiff.js +2 -59
  282. package/dist/domain/browserScenarioDiffEvidence.js +51 -0
  283. package/dist/domain/browserScenarioDiffValues.js +21 -38
  284. package/dist/domain/browserScenarioValues.js +80 -109
  285. package/dist/domain/browserSession.js +4 -7
  286. package/dist/domain/bundleComparison.js +6 -32
  287. package/dist/domain/bytecodeProvider.js +53 -54
  288. package/dist/domain/callPath.js +50 -169
  289. package/dist/domain/callPathSchemas.js +79 -0
  290. package/dist/domain/changedBehavior.js +34 -60
  291. package/dist/domain/completionLedgerGeneration.js +8 -14
  292. package/dist/domain/conformancePackage.js +126 -97
  293. package/dist/domain/conformanceReplay.js +39 -11
  294. package/dist/domain/conformanceTrustGate.js +174 -30
  295. package/dist/domain/customProtocolCapture.js +4 -4
  296. package/dist/domain/electronActiveObservation.js +244 -0
  297. package/dist/domain/electronObservation.js +21 -83
  298. package/dist/domain/electronStaticAnalysisBrowser.js +36 -46
  299. package/dist/domain/electronStaticAnalysisIpc.js +38 -14
  300. package/dist/domain/electronStaticAnalysisNative.js +1 -8
  301. package/dist/domain/electronStaticAnalysisValues.js +14 -18
  302. package/dist/domain/errors.js +33 -54
  303. package/dist/domain/eventProcessTree.js +101 -90
  304. package/dist/domain/evidence.js +2 -10
  305. package/dist/domain/evidenceBundle.js +3 -5
  306. package/dist/domain/evidenceCompletionLedger.js +6 -8
  307. package/dist/domain/functionComparison.js +4 -14
  308. package/dist/domain/functionComparisonNormalization.js +8 -8
  309. package/dist/domain/functionComparisonResults.js +25 -15
  310. package/dist/domain/functionComparisonSchemas.js +49 -33
  311. package/dist/domain/functionDossierEvidence.js +31 -151
  312. package/dist/domain/hopperStartupFailure.js +1 -1
  313. package/dist/domain/hopperValues.js +17 -141
  314. package/dist/domain/inputIssueProjection.js +4 -1
  315. package/dist/domain/interfaceBuilderGraph.js +654 -0
  316. package/dist/domain/javascriptApplicationAnalysis.js +8 -112
  317. package/dist/domain/javascriptApplicationChangeGraph.js +22 -82
  318. package/dist/domain/javascriptApplicationEvidenceSchemas.js +59 -47
  319. package/dist/domain/javascriptApplicationGraph.js +3 -13
  320. package/dist/domain/javascriptApplicationGraphSchemas.js +12 -34
  321. package/dist/domain/javascriptApplicationVersionComparison.js +26 -30
  322. package/dist/domain/javascriptApplicationVersionComparisonSchemas.js +123 -68
  323. package/dist/domain/javascriptApplicationVersionItems.js +120 -53
  324. package/dist/domain/javascriptApplicationVersionKeys.js +24 -11
  325. package/dist/domain/javascriptAstFingerprint.js +25 -58
  326. package/dist/domain/javascriptAstValues.js +9 -0
  327. package/dist/domain/javascriptExportInstrumentation.js +2 -4
  328. package/dist/domain/javascriptExportShapeComparison.js +6 -7
  329. package/dist/domain/javascriptExportShapeComparisonSchemas.js +70 -77
  330. package/dist/domain/javascriptExportShapeSelection.js +17 -19
  331. package/dist/domain/javascriptFeatureSeed.js +20 -12
  332. package/dist/domain/javascriptFeatureTrace.js +13 -67
  333. package/dist/domain/javascriptFeatureTraceSchemas.js +24 -52
  334. package/dist/domain/javascriptFeatureTraversal.js +1 -44
  335. package/dist/domain/javascriptNativeHandoff.js +1 -1
  336. package/dist/domain/javascriptReplay.js +100 -101
  337. package/dist/domain/javascriptRuntimeLoadState.js +3 -8
  338. package/dist/domain/javascriptRuntimeObservation.js +43 -103
  339. package/dist/domain/javascriptRuntimeReconciliation.js +1 -3
  340. package/dist/domain/javascriptRuntimeReconciliationActive.js +80 -0
  341. package/dist/domain/javascriptRuntimeReconciliationGraph.js +21 -33
  342. package/dist/domain/javascriptRuntimeReconciliationMatching.js +75 -61
  343. package/dist/domain/javascriptRuntimeReconciliationParsing.js +21 -46
  344. package/dist/domain/javascriptRuntimeReconciliationResult.js +25 -19
  345. package/dist/domain/javascriptRuntimeReconciliationRuntime.js +8 -12
  346. package/dist/domain/javascriptRuntimeReconciliationSchemas.js +34 -49
  347. package/dist/domain/javascriptRuntimeStaticCandidates.js +3 -3
  348. package/dist/domain/javascriptSemanticAnalysis.js +12 -45
  349. package/dist/domain/javascriptSemanticAsyncEffects.js +1 -9
  350. package/dist/domain/javascriptSemanticCallResolution.js +6 -16
  351. package/dist/domain/javascriptSemanticCalls.js +5 -32
  352. package/dist/domain/javascriptSemanticChildProcesses.js +1 -11
  353. package/dist/domain/javascriptSemanticCoverage.js +11 -0
  354. package/dist/domain/javascriptSemanticDataEffectHelpers.js +1 -8
  355. package/dist/domain/javascriptSemanticDataEffects.js +1 -11
  356. package/dist/domain/javascriptSemanticFingerprints.js +3 -5
  357. package/dist/domain/javascriptSemanticGraphSchemas.js +25 -51
  358. package/dist/domain/javascriptSemanticGraphSerialization.js +2 -13
  359. package/dist/domain/javascriptSemanticIr.js +1 -29
  360. package/dist/domain/javascriptSemanticObjects.js +1 -5
  361. package/dist/domain/javascriptSemanticPrimitives.js +2 -9
  362. package/dist/domain/javascriptSemanticProjection.js +0 -18
  363. package/dist/domain/javascriptSemanticPromises.js +9 -16
  364. package/dist/domain/javascriptSemanticProvenance.js +16 -19
  365. package/dist/domain/javascriptSemanticQuery.js +17 -139
  366. package/dist/domain/javascriptSemanticQueryAssessment.js +9 -37
  367. package/dist/domain/javascriptSemanticQueryIdentity.js +2 -23
  368. package/dist/domain/javascriptSemanticQuerySchemas.js +14 -107
  369. package/dist/domain/javascriptSemanticResources.js +1 -6
  370. package/dist/domain/javascriptSemanticReturns.js +10 -27
  371. package/dist/domain/javascriptSemanticValueTypes.js +1 -0
  372. package/dist/domain/javascriptSemanticValues.js +44 -62
  373. package/dist/domain/javascriptStaticAnalysis.js +21 -43
  374. package/dist/domain/javascriptStaticAnalysisBundler.js +34 -93
  375. package/dist/domain/javascriptStaticAnalysisCalls.js +17 -16
  376. package/dist/domain/javascriptStaticAnalysisFindings.js +3 -19
  377. package/dist/domain/javascriptStaticAnalysisHelpers.js +47 -88
  378. package/dist/domain/javascriptStaticAnalysisState.js +1 -5
  379. package/dist/domain/javascriptStaticAnalysisTypes.js +1 -0
  380. package/dist/domain/jsonShape.js +7 -33
  381. package/dist/domain/localPath.js +7 -0
  382. package/dist/domain/managedApplicationGraph.js +9 -41
  383. package/dist/domain/managedApplicationGraphCoverage.js +24 -156
  384. package/dist/domain/managedApplicationGraphNodes.js +10 -13
  385. package/dist/domain/managedArtifact.js +14 -27
  386. package/dist/domain/managedMemberComparison.js +90 -92
  387. package/dist/domain/managedMemberComparisonCoverage.js +11 -33
  388. package/dist/domain/managedMemberComparisonItems.js +221 -0
  389. package/dist/domain/managedMemberComparisonMatch.js +8 -208
  390. package/dist/domain/managedNativeVerification.js +3 -6
  391. package/dist/domain/managedNativeVerificationMatch.js +55 -59
  392. package/dist/domain/managedNativeVerificationSchemas.js +83 -47
  393. package/dist/domain/managedReconstruction.js +19 -23
  394. package/dist/domain/managedRuntimeCorrelation.js +6 -9
  395. package/dist/domain/nativeApiBoundary.js +17 -14
  396. package/dist/domain/nativeInspection.js +0 -2
  397. package/dist/domain/nativeInvestigationGraph.js +351 -0
  398. package/dist/domain/nativeValueFlow.js +61 -0
  399. package/dist/domain/nodeRuntimeCharacterization.js +15 -18
  400. package/dist/domain/objcSwiftMetadata.js +254 -0
  401. package/dist/domain/peInspection.js +1 -1
  402. package/dist/domain/permissionPolicy.js +13 -0
  403. package/dist/domain/processCapture.js +76 -113
  404. package/dist/domain/processCaptureExample.js +68 -0
  405. package/dist/domain/processCaptureParsing.js +21 -0
  406. package/dist/domain/processCaptureReactiveSchema.js +68 -0
  407. package/dist/domain/processCaptureReactiveValidation.js +8 -3
  408. package/dist/domain/processCaptureValidation.js +8 -10
  409. package/dist/domain/processComparison.js +12 -16
  410. package/dist/domain/processObservation.js +5 -6
  411. package/dist/domain/processReactiveMatching.js +32 -46
  412. package/dist/domain/processReactiveRuntime.js +4 -8
  413. package/dist/domain/processReactiveScenario.js +28 -94
  414. package/dist/domain/processReactiveScenarioPreflight.js +5 -30
  415. package/dist/domain/processReactiveTransition.js +42 -21
  416. package/dist/domain/processScenario.js +62 -93
  417. package/dist/domain/processTraceComparison.js +0 -7
  418. package/dist/domain/processTraceEvaluation.js +14 -4
  419. package/dist/domain/processTraceSpecification.js +11 -17
  420. package/dist/domain/protocolCapture.js +11 -9
  421. package/dist/domain/reconstructionCoverage.js +62 -129
  422. package/dist/domain/reconstructionCoverageEvaluation.js +17 -17
  423. package/dist/domain/reconstructionObligationLedgerSchemas.js +45 -72
  424. package/dist/domain/reconstructionReadiness.js +1 -2
  425. package/dist/domain/reconstructionReadinessSchemas.js +66 -40
  426. package/dist/domain/reconstructionUnknowns.js +3 -3
  427. package/dist/domain/reconstructionVerification.js +13 -47
  428. package/dist/domain/reconstructionVerificationSchemas.js +50 -38
  429. package/dist/domain/referenceSourceGraph.js +53 -61
  430. package/dist/domain/referenceSourceImportParsing.js +3 -7
  431. package/dist/domain/replayMachine.js +19 -31
  432. package/dist/domain/replayMachineRun.js +15 -63
  433. package/dist/domain/replayMachineRuntime.js +46 -44
  434. package/dist/domain/replayMachineValues.js +84 -0
  435. package/dist/domain/residualUnknown.js +25 -30
  436. package/dist/domain/runtimeCharacterization.js +15 -16
  437. package/dist/domain/runtimeIdentification.js +48 -47
  438. package/dist/domain/sourceToBundleComparison.js +11 -87
  439. package/dist/domain/sourceToBundleComparisonSchemas.js +25 -50
  440. package/dist/domain/sourceToBundleSignals.js +11 -16
  441. package/dist/domain/staticRuntimeCorrelation.js +44 -54
  442. package/dist/domain/symbolAnalysis.js +10 -19
  443. package/dist/domain/unicodeCodePointOrder.js +12 -0
  444. package/dist/domain/webBundleAnalysis.js +70 -99
  445. package/dist/domain/webBundleAnalyzer.js +2 -4
  446. package/dist/domain/webBundleAnalyzerAst.js +0 -13
  447. package/dist/domain/webBundleAnalyzerInspection.js +26 -52
  448. package/dist/domain/webBundleAnalyzerResult.js +7 -24
  449. package/dist/domain/webCaptureDiff.js +48 -85
  450. package/dist/domain/webCaptureDiffSchemas.js +86 -0
  451. package/dist/domain/webContentArtifact.js +1 -10
  452. package/dist/domain/webMcpDiscovery.js +3 -14
  453. package/dist/domain/webScreenshot.js +58 -34
  454. package/dist/domain/zipPackageFormat.js +7 -0
  455. package/dist/dotnet/ManagedArtifactInspector.js +17 -50
  456. package/dist/dotnet/ManagedMemberInspector.js +27 -58
  457. package/dist/dotnet/ManagedMemberInspectorCore.js +14 -51
  458. package/dist/dotnet/ManagedMemberInstructionDecoder.js +2 -2
  459. package/dist/dotnet/ManagedMemberRows.js +16 -16
  460. package/dist/dotnet/ManagedMetadataHeaps.js +26 -8
  461. package/dist/dotnet/ManagedMetadataInventory.js +21 -30
  462. package/dist/dotnet/ManagedMetadataInventoryRows.js +57 -63
  463. package/dist/dotnet/ManagedMetadataLayout.js +3 -5
  464. package/dist/dotnet/ManagedMethodBodyReader.js +5 -30
  465. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +19 -49
  466. package/dist/dotnet/ManagedNativeBoundaryInspector.js +13 -42
  467. package/dist/dotnet/ManagedPeReader.js +2 -2
  468. package/dist/dotnet/ManagedStaticProvider.js +13 -71
  469. package/dist/generatedMcpToolCatalog.js +1 -1
  470. package/dist/generatedPackageMetadata.js +1 -1
  471. package/dist/ghidra/GhidraAnalysisProfile.js +3 -8
  472. package/dist/ghidra/GhidraClient.js +5 -13
  473. package/dist/ghidra/GhidraClientStartup.js +1 -1
  474. package/dist/ghidra/GhidraClientWire.js +9 -5
  475. package/dist/ghidra/GhidraDefaults.js +0 -18
  476. package/dist/ghidra/GhidraDiagnostics.js +0 -2
  477. package/dist/ghidra/GhidraDoctor.js +16 -12
  478. package/dist/ghidra/GhidraFunctionValues.js +67 -108
  479. package/dist/ghidra/GhidraInstallation.js +98 -42
  480. package/dist/ghidra/GhidraInventoryValues.js +18 -77
  481. package/dist/ghidra/GhidraLauncher.js +0 -8
  482. package/dist/ghidra/GhidraProvider.js +32 -31
  483. package/dist/ghidra/GhidraProviderCapabilities.js +11 -48
  484. package/dist/ghidra/GhidraRequestQueue.js +6 -30
  485. package/dist/ghidra/GhidraResponseBuffer.js +1 -7
  486. package/dist/ghidra/GhidraSessionValues.js +0 -2
  487. package/dist/ghidra/GhidraSocketConnection.js +1 -1
  488. package/dist/ghidra/GhidraTransport.js +4 -7
  489. package/dist/ghidra/protocol.js +19 -42
  490. package/dist/hopper/BridgeLauncher.js +115 -37
  491. package/dist/hopper/HopperAnalysisProfile.js +3 -5
  492. package/dist/hopper/HopperCleanup.js +11 -9
  493. package/dist/hopper/HopperClient.js +5 -8
  494. package/dist/hopper/HopperProcessDiagnostic.js +2 -2
  495. package/dist/hopper/HopperProvider.js +0 -30
  496. package/dist/hopper/HopperRequestQueue.js +21 -40
  497. package/dist/hopper/HopperResponseStream.js +1 -9
  498. package/dist/hopper/HopperSessionValues.js +3 -2
  499. package/dist/hopper/HopperTargetLease.js +119 -0
  500. package/dist/hopper/LinuxPrivateDisplayDiagnostic.js +24 -31
  501. package/dist/hopper/LinuxPrivateDisplayProbe.js +21 -26
  502. package/dist/hopper/protocol.js +6 -4
  503. package/dist/main/reload.js +1 -9
  504. package/dist/main/shutdown.js +1 -1
  505. package/dist/main/state.js +0 -23
  506. package/dist/main/transport.js +27 -39
  507. package/dist/main.js +17 -15
  508. package/dist/mcpDoctor.js +27 -69
  509. package/dist/native/CommandRunner.js +18 -25
  510. package/dist/native/NativeMacOSProvider.js +13 -38
  511. package/dist/native/NativeMachoInspection.js +1 -1
  512. package/dist/process/BoundedFileBytes.js +17 -0
  513. package/dist/process/ExecFileOutput.js +11 -0
  514. package/dist/process/PendingOperations.js +8 -6
  515. package/dist/process/PrivateRuntimeRoot.js +17 -0
  516. package/dist/process/ProcessOwnership.js +67 -130
  517. package/dist/process/ProcessOwnershipIdentity.js +13 -0
  518. package/dist/process/ProcessOwnershipObservation.js +87 -0
  519. package/dist/process/ProcessOwnershipProcessTree.js +22 -0
  520. package/dist/process/ProviderDeadline.js +8 -12
  521. package/dist/process/ProviderProcess.js +7 -28
  522. package/dist/process/WindowsAuthority.js +32 -0
  523. package/dist/reference/ReferenceSourceReader.js +8 -24
  524. package/dist/reference/ReferenceSourceReaderEntries.js +11 -39
  525. package/dist/reference/ReferenceSourceReaderFile.js +13 -31
  526. package/dist/reference/ReferenceSourceReaderPaths.js +3 -18
  527. package/dist/reference/ReferenceSourceReaderValidate.js +3 -6
  528. package/dist/replay/JavaScriptReplayWorker.js +95 -13
  529. package/dist/replay/JavaScriptReplayWorkerTypes.js +1 -0
  530. package/dist/replay/LinuxJavaScriptReplayRunner.js +42 -43
  531. package/dist/replay/LinuxJavaScriptReplaySandbox.js +0 -19
  532. package/dist/replay/LinuxRuntimeClosure.js +1 -3
  533. package/dist/replay/ReplayOutcome.js +27 -18
  534. package/dist/replay/ReplayProcessLifecycle.js +32 -7
  535. package/dist/replay/ReplaySeccompFile.js +29 -0
  536. package/dist/replay/ReplayWorkerProtocol.js +33 -30
  537. package/dist/replay/SystemJavaScriptReplayHost.js +45 -74
  538. package/dist/server/ProcessCaptureElicitation.js +4 -8
  539. package/dist/server/createServer.js +145 -119
  540. package/dist/server/mcpClientMetadata.js +32 -0
  541. package/dist/server/promptCompletion.js +37 -61
  542. package/dist/server/recordDerivedEvidence.js +1 -1
  543. package/dist/server/registerApplicationTools/characterization.js +10 -21
  544. package/dist/server/registerApplicationTools/compareExportShapes.js +6 -16
  545. package/dist/server/registerApplicationTools/compareSourceToBundle.js +6 -15
  546. package/dist/server/registerApplicationTools/compareVersions.js +6 -16
  547. package/dist/server/registerApplicationTools/controlledReplay.js +8 -15
  548. package/dist/server/registerApplicationTools/coverage.js +7 -78
  549. package/dist/server/registerApplicationTools/helpers.js +1 -13
  550. package/dist/server/registerApplicationTools/obligationLedger.js +4 -8
  551. package/dist/server/registerApplicationTools/traceFeature.js +6 -15
  552. package/dist/server/registerApplicationTools/traceSemantics.js +5 -13
  553. package/dist/server/registerApplicationTools.js +0 -2
  554. package/dist/server/registerArtifactComparisonTool.js +27 -35
  555. package/dist/server/registerBrowserScenarioTool.js +3 -8
  556. package/dist/server/registerBrowserTools.js +36 -81
  557. package/dist/server/registerBundleComparisonTool.js +10 -16
  558. package/dist/server/registerCloseLifecycleTool.js +5 -27
  559. package/dist/server/registerElectronTools.js +29 -65
  560. package/dist/server/registerEnhancedTools.js +118 -127
  561. package/dist/server/registerEvidenceTools.js +19 -30
  562. package/dist/server/registerFunctionComparisonTool.js +35 -34
  563. package/dist/server/registerInvestigationTools/helpers.js +3 -32
  564. package/dist/server/registerInvestigationTools.js +36 -148
  565. package/dist/server/registerJavaScriptRuntimeObservationTools.js +15 -27
  566. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +16 -23
  567. package/dist/server/registerManagedWorkflowTools/contract.js +2 -3
  568. package/dist/server/registerManagedWorkflowTools/evidence.js +19 -35
  569. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -14
  570. package/dist/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.js +4 -14
  571. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +11 -20
  572. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +10 -21
  573. package/dist/server/registerOfficialTools.js +8 -51
  574. package/dist/server/registerProcessComparisonTool.js +43 -38
  575. package/dist/server/registerPrompts.js +19 -17
  576. package/dist/server/registerReplayMachineTool.js +4 -10
  577. package/dist/server/registerSessionRecordTools.js +36 -153
  578. package/dist/server/registerSessionStatusTool.js +18 -96
  579. package/dist/server/registerSessionTools.js +34 -91
  580. package/dist/server/sessionAvailabilityPolicy.js +2 -3
  581. package/dist/server/sessionEvidence.js +9 -15
  582. package/dist/server/sessionToolPolicies.js +1 -13
  583. package/dist/server/toolRegistrationOptions.js +4 -192
  584. package/dist/server/toolResult.js +15 -67
  585. package/dist/serverIdentity.js +0 -20
  586. package/install.sh +1 -1
  587. package/package.json +27 -15
  588. package/scripts/electron-active-hook-boundaries.cjs +394 -0
  589. package/scripts/electron-active-hook.cjs +469 -0
  590. package/scripts/hopper-demo-x11.py +13 -32
  591. package/scripts/rea.mjs +1 -11
  592. package/skills/reverse-engineer-anything/SKILL.md +46 -11
  593. package/skills/reverse-engineer-anything/references/evidence-workflows.md +6 -4
  594. package/skills/reverse-engineer-anything/references/javascript-applications.md +13 -13
  595. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +12 -8
  596. package/dist/application/ApplicationWorkflowEvidenceResolver.js +0 -180
  597. package/dist/application/BoundedJsonFiles.js +0 -86
  598. package/dist/application/CrossVersionInventory.js +0 -128
  599. package/dist/application/CrossVersionInvestigation.js +0 -301
  600. package/dist/application/CrossVersionInvestigationCollections.js +0 -23
  601. package/dist/application/CrossVersionInvestigationEvidence.js +0 -64
  602. package/dist/application/CrossVersionInvestigationReplay.js +0 -170
  603. package/dist/application/DeferredFileAuthorization.js +0 -61
  604. package/dist/application/DoctorProjection.js +0 -43
  605. package/dist/application/EnhancedToolPagination.js +0 -22
  606. package/dist/application/EvidenceReferenceResolver.js +0 -26
  607. package/dist/application/InvestigationWorkspaceStore.js +0 -204
  608. package/dist/application/ProcessPairedExperiment.js +0 -72
  609. package/dist/application/ReconstructionCoverageWorkspaceStore.js +0 -31
  610. package/dist/application/ReconstructionReadinessService.js +0 -48
  611. package/dist/cliInvestigationCommands.js +0 -173
  612. package/dist/domain/boundedCartesianProjection.js +0 -15
  613. package/dist/domain/investigationWorkspace.js +0 -346
  614. package/dist/domain/jsonLimits.js +0 -26
  615. package/dist/domain/knownPageCoverage.js +0 -21
  616. package/dist/domain/processPairedExperiment.js +0 -128
  617. package/dist/server/DynamicToolAvailability.js +0 -70
  618. package/dist/server/LazyToolCatalog.js +0 -134
  619. package/dist/server/hydrateServerTools.js +0 -191
  620. package/dist/server/javascriptApplicationResult.js +0 -106
  621. package/dist/server/permissionFailure.js +0 -12
  622. package/dist/server/registerApplicationTools/readiness.js +0 -55
  623. package/dist/server/registerEvidenceResources.js +0 -315
  624. package/dist/server/registerJavaScriptApplicationGraphResource.js +0 -65
  625. package/dist/server/registerReconstructionObligationLedgerResource.js +0 -32
  626. package/dist/server/registerReconstructionReadinessResource.js +0 -32
  627. package/dist/server/toolInputValidation.js +0 -77
  628. package/scripts/package-runner-bootstrap.mjs +0 -72
@@ -4,7 +4,7 @@ import { err, ok } from "../domain/result.js";
4
4
  import { discoverCdpEndpoint, hasCdpTargetWebSocket, } from "./CdpEndpoint.js";
5
5
  import { closeCdpTargetSession, openCdpTargetSession, } from "./CdpTargetSession.js";
6
6
  import { inspectCdpElectronPage } from "./CdpElectronInspection.js";
7
- import { authorizedElectronFile, canonicalElectronRoots, } from "./ElectronFileScope.js";
7
+ import { authorizedElectronFile } from "./ElectronFileScope.js";
8
8
  /** Public identity committed by passive Electron observations. */
9
9
  export const CDP_ELECTRON_PROVIDER_IDENTITY = Object.freeze({
10
10
  id: "rea-cdp-electron",
@@ -12,17 +12,15 @@ export const CDP_ELECTRON_PROVIDER_IDENTITY = Object.freeze({
12
12
  version: "1",
13
13
  });
14
14
  const IDENTITY = CDP_ELECTRON_PROVIDER_IDENTITY;
15
- /** Passive Electron provider with canonical file-root confinement. */
15
+ /** Passive Electron provider for local file pages exposed by loopback CDP. */
16
16
  export class CdpElectronProvider {
17
17
  identity() {
18
18
  return IDENTITY;
19
19
  }
20
20
  async listTargets(input, options = {}) {
21
21
  try {
22
- const roots = await canonicalElectronRoots(input.allowed_file_roots);
23
22
  const discovery = await discoverCdpEndpoint(input.cdp_endpoint, "list_electron_targets", options.signal);
24
23
  const allowed = [];
25
- let outsideRoot = 0;
26
24
  let unsupportedUrl = 0;
27
25
  let nonPage = 0;
28
26
  let unconnectable = 0;
@@ -31,12 +29,9 @@ export class CdpElectronProvider {
31
29
  nonPage += 1;
32
30
  continue;
33
31
  }
34
- const path = await authorizedElectronFile(target.url, roots);
32
+ const path = await authorizedElectronFile(target.url);
35
33
  if (path === undefined) {
36
- if (isFileUrl(target.url))
37
- outsideRoot += 1;
38
- else
39
- unsupportedUrl += 1;
34
+ unsupportedUrl += 1;
40
35
  continue;
41
36
  }
42
37
  if (!hasCdpTargetWebSocket(discovery, target)) {
@@ -46,32 +41,21 @@ export class CdpElectronProvider {
46
41
  allowed.push({
47
42
  target_id: target.id,
48
43
  type: target.type,
49
- title: target.title.slice(0, 16_384),
44
+ title: target.title,
50
45
  file_path: path,
51
46
  attached: target.attached,
52
47
  });
53
48
  }
54
49
  allowed.sort((left, right) => left.target_id.localeCompare(right.target_id));
55
- const items = allowed.slice(input.offset, input.offset + input.limit);
56
- const next = input.offset + items.length;
57
50
  return ok(electronTargetListSchema.parse({
58
- schema_version: 1,
59
51
  browser: discovery.version,
60
- targets: {
61
- items,
62
- offset: input.offset,
63
- limit: input.limit,
64
- total: allowed.length,
65
- next_offset: next < allowed.length ? next : null,
66
- has_more: next < allowed.length,
67
- },
52
+ targets: allowed,
68
53
  excluded: {
69
- outside_root: outsideRoot,
70
54
  unsupported_url: unsupportedUrl,
71
55
  non_page: nonPage,
72
56
  },
73
57
  limitations: [
74
- "Only page targets whose canonical file path is contained by an approved root are listed.",
58
+ "Every local file page exposed by the selected loopback CDP endpoint is eligible for listing.",
75
59
  ...(unconnectable === 0
76
60
  ? []
77
61
  : [
@@ -87,9 +71,8 @@ export class CdpElectronProvider {
87
71
  async inspectPage(input, options = {}) {
88
72
  let targetSession;
89
73
  try {
90
- const roots = await canonicalElectronRoots(input.allowed_file_roots);
91
74
  const discovery = await discoverCdpEndpoint(input.cdp_endpoint, "inspect_electron_page", options.signal);
92
- const target = await authorizeTarget(discovery.targets, input.target_id, roots);
75
+ const target = await authorizeTarget(discovery.targets, input.target_id);
93
76
  targetSession = await openCdpTargetSession(discovery, target, "inspect_electron_page", options.signal);
94
77
  return ok(electronPageInspectionSchema.parse(await inspectCdpElectronPage({
95
78
  connection: targetSession.connection,
@@ -116,23 +99,15 @@ export class CdpElectronProvider {
116
99
  }
117
100
  }
118
101
  }
119
- const authorizeTarget = async (targets, targetId, roots) => {
102
+ const authorizeTarget = async (targets, targetId) => {
120
103
  const target = targets.find(({ id }) => id === targetId);
121
104
  if (target === undefined)
122
105
  throw new BrowserObservationError("inspect_web_page", "target_not_found");
123
106
  if (target.type !== "page" ||
124
- (await authorizedElectronFile(target.url, roots)) === undefined)
107
+ (await authorizedElectronFile(target.url)) === undefined)
125
108
  throw new BrowserObservationError("inspect_web_page", "target_not_allowed");
126
109
  return target;
127
110
  };
128
- const isFileUrl = (value) => {
129
- try {
130
- return new URL(value).protocol === "file:";
131
- }
132
- catch {
133
- return false;
134
- }
135
- };
136
111
  const providerError = (cause, operation) => cause instanceof BrowserObservationError && cause.operation !== operation
137
112
  ? new BrowserObservationError(operation, cause.reason, { cause })
138
113
  : cause instanceof AnalysisError
@@ -1,6 +1,6 @@
1
1
  import { CdpCaptureCompleteness } from "./CdpCaptureCompleteness.js";
2
- import { boundedText, numberValue, recordValue, stringValue, } from "./CdpCaptureValues.js";
3
- /** Retain only bounded script/frame metadata from passive Electron events. */
2
+ import { numberValue, recordValue, stringValue } from "./CdpCaptureValues.js";
3
+ /** Retain script/frame metadata from passive Electron events. */
4
4
  export const ingestElectronScriptEvent = (input) => {
5
5
  if (input.event.method === "Runtime.executionContextsCleared") {
6
6
  input.executionContextFrames.clear();
@@ -14,7 +14,7 @@ export const ingestElectronScriptEvent = (input) => {
14
14
  return;
15
15
  }
16
16
  if (input.event.method === "Runtime.executionContextCreated") {
17
- retainExecutionContext(input.event, input.executionContextFrames, input.completeness);
17
+ retainExecutionContext(input.event, input.executionContextFrames);
18
18
  return;
19
19
  }
20
20
  if (input.event.method !== "Debugger.scriptParsed")
@@ -22,7 +22,7 @@ export const ingestElectronScriptEvent = (input) => {
22
22
  const value = recordValue(input.event.params);
23
23
  const scriptId = stringValue(value?.scriptId);
24
24
  const rawUrl = stringValue(value?.url);
25
- if (scriptId === undefined || scriptId.length > 256) {
25
+ if (scriptId === undefined) {
26
26
  input.completeness.exclude("scripts", "invalid_protocol_value");
27
27
  return;
28
28
  }
@@ -30,31 +30,23 @@ export const ingestElectronScriptEvent = (input) => {
30
30
  input.completeness.exclude("scripts", "unattributed_origin");
31
31
  return;
32
32
  }
33
- if (input.scripts.length >= 2_000) {
34
- input.completeness.drop("scripts");
35
- return;
36
- }
37
33
  input.scripts.push({
38
34
  scriptId,
39
35
  rawUrl,
40
- hash: (stringValue(value?.hash) ?? "").slice(0, 512),
36
+ hash: stringValue(value?.hash) ?? "",
41
37
  length: nonnegativeInteger(value?.length),
42
38
  isModule: value?.isModule === true,
43
- language: boundedText(value?.scriptLanguage, 100),
39
+ language: stringValue(value?.scriptLanguage) ?? null,
44
40
  executionContextKey: executionContextKey(value?.executionContextId),
45
41
  });
46
42
  };
47
- const retainExecutionContext = (event, frames, completeness) => {
43
+ const retainExecutionContext = (event, frames) => {
48
44
  const parameters = recordValue(event.params);
49
45
  const runtimeContext = recordValue(parameters?.context);
50
46
  const contextKey = executionContextKey(runtimeContext?.id);
51
47
  const frameId = stringValue(recordValue(runtimeContext?.auxData)?.frameId);
52
- if (contextKey === null || frameId === undefined || frameId.length > 256)
48
+ if (contextKey === null || frameId === undefined)
53
49
  return;
54
- if (frames.size >= 2_000 && !frames.has(contextKey)) {
55
- completeness.truncate("scripts");
56
- return;
57
- }
58
50
  frames.set(contextKey, frameId);
59
51
  };
60
52
  const nonnegativeInteger = (value) => {
@@ -1,17 +1,15 @@
1
- import { createHash } from "node:crypto";
2
- import canonicalize from "canonicalize";
3
1
  import { createWebTextArtifact } from "../domain/webContentArtifact.js";
4
2
  import { CdpCaptureCompleteness } from "./CdpCaptureCompleteness.js";
3
+ import { canonicalJsonDigest } from "./CdpCanonicalJsonDigest.js";
5
4
  import { requiredRecord, stringValue } from "./CdpCaptureValues.js";
6
5
  import { authorizedElectronFile } from "./ElectronFileScope.js";
7
- /** Normalize root-confined script metadata and optionally approved source. */
6
+ /** Normalize local script metadata and optionally approved source. */
8
7
  export const captureElectronScripts = async (input) => {
9
8
  let total = 0;
10
- let sourceBytes = 0;
11
9
  const items = [];
12
10
  const seen = new Set();
13
11
  for (const script of input.scripts) {
14
- const path = await authorizedElectronFile(script.rawUrl, input.roots);
12
+ const path = await authorizedElectronFile(script.rawUrl);
15
13
  if (path === undefined) {
16
14
  input.completeness.exclude("scripts", "out_of_target_scope");
17
15
  continue;
@@ -29,17 +27,12 @@ export const captureElectronScripts = async (input) => {
29
27
  is_module: script.isModule,
30
28
  language: script.language,
31
29
  };
32
- const scriptKey = `electron_script_${digest(identity)}`;
30
+ const scriptKey = `electron_script_${canonicalJsonDigest(identity)}`;
33
31
  if (seen.has(scriptKey))
34
32
  continue;
35
33
  seen.add(scriptKey);
36
34
  total += 1;
37
- if (items.length >= input.request.limits.max_scripts) {
38
- input.completeness.drop("scripts");
39
- continue;
40
- }
41
- const capturedSource = await captureScriptSource(input, script, sourceBytes);
42
- sourceBytes += capturedSource.bytes;
35
+ const capturedSource = await captureScriptSource(input, script);
43
36
  items.push({
44
37
  script_key: scriptKey,
45
38
  ...identity,
@@ -53,42 +46,20 @@ export const captureElectronScripts = async (input) => {
53
46
  items: items.sort((left, right) => left.script_key.localeCompare(right.script_key)),
54
47
  };
55
48
  };
56
- const captureScriptSource = async (input, script, sourceBytes) => {
49
+ const captureScriptSource = async (input, script) => {
57
50
  if (!input.request.include_script_sources)
58
51
  return {
59
52
  source: {
60
53
  included: false,
61
54
  reason: "source capture was not approved",
62
55
  },
63
- bytes: 0,
64
56
  };
65
- if (sourceLimitReached(input.request.limits, script.length, sourceBytes))
66
- return sourceLimitResult(input.completeness);
67
57
  const result = requiredRecord(await input.connection.send("Debugger.getScriptSource", { scriptId: script.scriptId }, input.sessionId, input.signal));
68
58
  const text = stringValue(result.scriptSource) ?? "";
69
- const bytes = Buffer.byteLength(text);
70
- if (sourceLimitReached(input.request.limits, bytes, sourceBytes))
71
- return sourceLimitResult(input.completeness);
72
59
  return {
73
60
  source: {
74
61
  included: true,
75
62
  artifact: createWebTextArtifact(text, "text/javascript"),
76
63
  },
77
- bytes,
78
- };
79
- };
80
- const sourceLimitReached = (limits, bytes, previousBytes) => bytes > limits.max_script_source_bytes ||
81
- previousBytes + bytes > limits.max_total_script_source_bytes;
82
- const sourceLimitResult = (completeness) => {
83
- completeness.truncate("script_sources");
84
- return {
85
- source: { included: false, reason: "script source byte limit reached" },
86
- bytes: 0,
87
64
  };
88
65
  };
89
- const digest = (value) => {
90
- const encoded = canonicalize(value);
91
- if (encoded === undefined)
92
- throw new TypeError("Expected canonical JSON");
93
- return createHash("sha256").update(encoded).digest("hex");
94
- };
@@ -1,8 +1,8 @@
1
1
  import { CdpCaptureCompleteness } from "./CdpCaptureCompleteness.js";
2
- import { boundedText, recordValue, recordsValue, stringValue, } from "./CdpCaptureValues.js";
2
+ import { recordValue, recordsValue, stringValue } from "./CdpCaptureValues.js";
3
3
  import { optionalCdpCommand } from "./CdpOptionalCommand.js";
4
4
  import { authorizedElectronFile } from "./ElectronFileScope.js";
5
- /** Inventory root-confined worker targets without attaching to them. */
5
+ /** Inventory local worker targets without attaching to them. */
6
6
  export const captureElectronWorkers = async (input) => {
7
7
  const result = await optionalCdpCommand({
8
8
  connection: input.connection,
@@ -25,15 +25,11 @@ export const captureElectronWorkers = async (input) => {
25
25
  input.completeness.exclude("workers", "out_of_target_scope");
26
26
  continue;
27
27
  }
28
- const path = await authorizedElectronFile(stringValue(target.url) ?? "", input.roots);
28
+ const path = await authorizedElectronFile(stringValue(target.url) ?? "");
29
29
  if (path === undefined) {
30
30
  input.completeness.exclude("workers", "out_of_target_scope");
31
31
  continue;
32
32
  }
33
- if (workers.length >= input.request.limits.max_workers) {
34
- input.completeness.truncate("workers");
35
- continue;
36
- }
37
33
  const targetId = boundedTargetField(target.targetId);
38
34
  if (targetId === null) {
39
35
  input.completeness.exclude("workers", "invalid_protocol_value");
@@ -41,7 +37,7 @@ export const captureElectronWorkers = async (input) => {
41
37
  }
42
38
  workers.push({
43
39
  target_id: targetId,
44
- type: type.slice(0, 100),
40
+ type,
45
41
  file_path: path,
46
42
  attached: target.attached === true,
47
43
  opener_target_id: openerTargetId,
@@ -51,6 +47,6 @@ export const captureElectronWorkers = async (input) => {
51
47
  return workers.sort((left, right) => left.target_id.localeCompare(right.target_id));
52
48
  };
53
49
  const boundedTargetField = (value) => {
54
- const field = boundedText(value, 256);
55
- return field === null || field === "" ? null : field;
50
+ const field = stringValue(value);
51
+ return field === undefined || field === "" ? null : field;
56
52
  };
@@ -1,31 +1,28 @@
1
1
  import { request } from "node:http";
2
2
  import { z } from "zod";
3
- import { AnalysisCancelledError, AnalysisError, AnalysisTimeoutError, BrowserObservationError, } from "../domain/errors.js";
3
+ import { AnalysisCancelledError, AnalysisError, BrowserObservationError, } from "../domain/errors.js";
4
4
  import { sanitizeBrowserUrl } from "../domain/browserObservation.js";
5
- const HTTP_TIMEOUT_MS = 5_000;
6
- const MAX_VERSION_BYTES = 64 * 1_024;
7
- const MAX_TARGET_LIST_BYTES = 2 * 1_024 * 1_024;
8
5
  const endpointVersionSchema = z.object({
9
- Browser: z.string().min(1).max(1_024),
10
- "Protocol-Version": z.string().min(1).max(100),
11
- "User-Agent": z.string().max(16_384),
12
- "V8-Version": z.string().max(1_024),
13
- "WebKit-Version": z.string().max(1_024),
14
- webSocketDebuggerUrl: z.string().min(1).max(2_048),
6
+ Browser: z.string().min(1),
7
+ "Protocol-Version": z.string().min(1),
8
+ "User-Agent": z.string(),
9
+ "V8-Version": z.string(),
10
+ "WebKit-Version": z.string(),
11
+ webSocketDebuggerUrl: z.string().min(1),
15
12
  });
16
13
  const endpointTargetSchema = z.object({
17
- id: z.string().min(1).max(256),
18
- type: z.string().min(1).max(100),
19
- title: z.string().max(16_384).default(""),
20
- url: z.string().max(65_536),
14
+ id: z.string().min(1),
15
+ type: z.string().min(1),
16
+ title: z.string().default(""),
17
+ url: z.string(),
21
18
  attached: z.boolean().default(false),
22
- webSocketDebuggerUrl: z.string().min(1).max(2_048).optional(),
19
+ webSocketDebuggerUrl: z.string().min(1).optional(),
23
20
  });
24
- const endpointTargetsSchema = z.array(endpointTargetSchema).max(1_000);
25
- /** Read bounded CDP discovery endpoints without following redirects. */
21
+ const endpointTargetsSchema = z.array(endpointTargetSchema);
22
+ /** Read CDP discovery endpoints without following redirects. */
26
23
  export const discoverCdpEndpoint = async (endpoint, operation, signal) => {
27
- const versionInput = await readBoundedCdpJson(new URL("/json/version", endpoint), MAX_VERSION_BYTES, operation, signal);
28
- const targetsInput = await readBoundedCdpJson(new URL("/json/list", endpoint), MAX_TARGET_LIST_BYTES, operation, signal);
24
+ const versionInput = await readCdpJson(new URL("/json/version", endpoint), operation, signal);
25
+ const targetsInput = await readCdpJson(new URL("/json/list", endpoint), operation, signal);
29
26
  const version = parseCdpEndpointValue(endpointVersionSchema, versionInput, operation);
30
27
  const targets = parseCdpEndpointValue(endpointTargetsSchema, targetsInput, operation);
31
28
  return {
@@ -56,7 +53,7 @@ const sanitizeTargetTitle = (value, targetUrl) => {
56
53
  return sanitizeTargetUrlAlias(value, targetUrl);
57
54
  }
58
55
  return url.protocol === "http:" || url.protocol === "https:"
59
- ? sanitizeBrowserUrl(value).url.slice(0, 16_384)
56
+ ? sanitizeBrowserUrl(value).url
60
57
  : sanitizeTargetUrlAlias(value, targetUrl);
61
58
  };
62
59
  const sanitizeTargetUrlAlias = (value, targetUrl) => {
@@ -71,9 +68,7 @@ const sanitizeTargetUrlAlias = (value, targetUrl) => {
71
68
  if (parsed.pathname !== "/")
72
69
  markers.push(parsed.pathname);
73
70
  const candidatePattern = new RegExp(`(?:${markers.map(escapeRegExp).join("|")})[^\\s<>"']*`, "gu");
74
- return value
75
- .replace(candidatePattern, (candidate) => sanitizeSameOriginTitleUrl(candidate, parsed))
76
- .slice(0, 16_384);
71
+ return value.replace(candidatePattern, (candidate) => sanitizeSameOriginTitleUrl(candidate, parsed));
77
72
  };
78
73
  const sanitizeSameOriginTitleUrl = (candidate, target) => {
79
74
  let parsed;
@@ -145,19 +140,17 @@ const safeCdpWebSocketEndpoint = (endpoint, reported, operation) => {
145
140
  : { scope: "page", targetId: path.targetId, url: parsed.href };
146
141
  };
147
142
  const cdpWebSocketPath = (pathname) => {
148
- const browserId = pathIdentifier(pathname, "/devtools/browser/", 1_024);
143
+ const browserId = pathIdentifier(pathname, "/devtools/browser/");
149
144
  if (browserId !== undefined)
150
145
  return { scope: "browser" };
151
- const targetId = pathIdentifier(pathname, "/devtools/page/", 256);
146
+ const targetId = pathIdentifier(pathname, "/devtools/page/");
152
147
  return targetId === undefined ? undefined : { scope: "page", targetId };
153
148
  };
154
- const pathIdentifier = (pathname, prefix, maximumLength) => {
149
+ const pathIdentifier = (pathname, prefix) => {
155
150
  if (!pathname.startsWith(prefix))
156
151
  return undefined;
157
152
  const identifier = pathname.slice(prefix.length);
158
- return identifier.length > 0 &&
159
- identifier.length <= maximumLength &&
160
- !identifier.includes("/")
153
+ return identifier.length > 0 && !identifier.includes("/")
161
154
  ? identifier
162
155
  : undefined;
163
156
  };
@@ -174,8 +167,8 @@ const targetWebSocket = (endpoint, target, operation) => {
174
167
  return {};
175
168
  }
176
169
  };
177
- /** Read one bounded loopback CDP discovery document without redirects. */
178
- export const readBoundedCdpJson = async (url, maximumBytes, operation, signal) => await new Promise((resolve, reject) => {
170
+ /** Read one loopback CDP discovery document without redirects. */
171
+ export const readCdpJson = async (url, operation, signal) => await new Promise((resolve, reject) => {
179
172
  if (signal?.aborted === true) {
180
173
  reject(new AnalysisCancelledError(operation));
181
174
  return;
@@ -187,15 +180,7 @@ export const readBoundedCdpJson = async (url, maximumBytes, operation, signal) =
187
180
  return;
188
181
  }
189
182
  const chunks = [];
190
- let bytes = 0;
191
- response.on("data", (chunk) => {
192
- bytes += chunk.length;
193
- if (bytes > maximumBytes) {
194
- response.destroy(new BrowserObservationError(operation, "payload_limit"));
195
- return;
196
- }
197
- chunks.push(chunk);
198
- });
183
+ response.on("data", (chunk) => chunks.push(chunk));
199
184
  response.on("end", () => {
200
185
  try {
201
186
  resolve(JSON.parse(Buffer.concat(chunks).toString("utf8")));
@@ -206,7 +191,6 @@ export const readBoundedCdpJson = async (url, maximumBytes, operation, signal) =
206
191
  });
207
192
  response.on("error", (cause) => reject(endpointFailure(cause, operation, signal)));
208
193
  });
209
- request_.setTimeout(HTTP_TIMEOUT_MS, () => request_.destroy(new AnalysisTimeoutError(operation, HTTP_TIMEOUT_MS)));
210
194
  request_.on("error", (cause) => reject(endpointFailure(cause, operation, signal)));
211
195
  request_.end();
212
196
  });
@@ -1,17 +1,24 @@
1
1
  import { AnalysisCancelledError, BrowserObservationError, } from "../domain/errors.js";
2
2
  import { CdpConnection } from "./CdpConnection.js";
3
3
  import { CdpCaptureCompleteness } from "./CdpCaptureCompleteness.js";
4
- import { allowedSanitizedUrl, delayWithCancellation, isHttpUrl, numberValue, recordValue, stringValue, } from "./CdpCaptureValues.js";
4
+ import { authorizedMainFrame } from "./CdpAuthorizedMainFrame.js";
5
+ import { allowedSanitizedUrl, isHttpUrl, numberValue, recordValue, stringValue, } from "./CdpCaptureValues.js";
5
6
  import { mainFrameUrl } from "./CdpCaptureDocuments.js";
6
7
  /** Observe external user actions without rejecting approved same-origin navigation. */
7
8
  export const observeCdpSession = async (context) => {
8
9
  const allowedOrigins = new Set(context.input.allowed_origins);
9
- const initial = await authorizedFrame(context, allowedOrigins);
10
+ const initial = await authorizedMainFrame({
11
+ connection: context.connection,
12
+ sessionId: context.sessionId,
13
+ signal: context.signal,
14
+ allowedOrigins,
15
+ delayOperation: "observe_web_session",
16
+ });
10
17
  const initialUrl = mainFrameUrl(initial) ?? "";
11
18
  const mainFrameId = frameId(initial);
12
19
  if (mainFrameId === undefined)
13
20
  throw new BrowserObservationError("inspect_web_page", "protocol_error");
14
- const capture = new TimelineCapture(context.input.max_timeline_events, allowedOrigins, mainFrameId, initialUrl);
21
+ const capture = new TimelineCapture(allowedOrigins, mainFrameId, initialUrl);
15
22
  const removeListener = context.connection.onEvent((event) => {
16
23
  if (observationEventMatches(event, context.sessionId))
17
24
  capture.ingest(event);
@@ -19,7 +26,7 @@ export const observeCdpSession = async (context) => {
19
26
  const removeDisconnectListener = context.connection.onDisconnect(() => capture.targetTerminated());
20
27
  try {
21
28
  await context.connection.send("Page.enable", {}, context.sessionId, context.signal);
22
- await context.connection.send("Network.enable", { maxTotalBufferSize: 1_024 * 1_024 }, context.sessionId, context.signal);
29
+ await context.connection.send("Network.enable", {}, context.sessionId, context.signal);
23
30
  await context.connection.send("Page.setLifecycleEventsEnabled", { enabled: true }, context.sessionId, context.signal);
24
31
  const armedAt = new Date().toISOString();
25
32
  await context.progress?.report({
@@ -39,7 +46,6 @@ export const observeCdpSession = async (context) => {
39
46
  terminal: true,
40
47
  });
41
48
  return {
42
- schema_version: 1,
43
49
  browser: context.discovery.version,
44
50
  target: {
45
51
  target_id: context.target.id,
@@ -67,7 +73,6 @@ export const observeCdpSession = async (context) => {
67
73
  }
68
74
  };
69
75
  class TimelineCapture {
70
- maximum;
71
76
  allowedOrigins;
72
77
  mainFrameId;
73
78
  timeline = [];
@@ -77,8 +82,7 @@ class TimelineCapture {
77
82
  #pendingReload = false;
78
83
  #endReason;
79
84
  #listeners = new Set();
80
- constructor(maximum, allowedOrigins, mainFrameId, initialUrl) {
81
- this.maximum = maximum;
85
+ constructor(allowedOrigins, mainFrameId, initialUrl) {
82
86
  this.allowedOrigins = allowedOrigins;
83
87
  this.mainFrameId = mainFrameId;
84
88
  this.finalUrl =
@@ -246,10 +250,6 @@ class TimelineCapture {
246
250
  #add(options) {
247
251
  const { type, params, rawUrl = null, requestId = null, detail = null, } = options;
248
252
  const destination = rawUrl == null ? null : scopedUrl(rawUrl, this.allowedOrigins);
249
- if (this.timeline.length >= this.maximum) {
250
- this.completeness.drop("timeline_events");
251
- return;
252
- }
253
253
  this.#sequence += 1;
254
254
  this.timeline.push({
255
255
  sequence: this.#sequence,
@@ -257,7 +257,7 @@ class TimelineCapture {
257
257
  timestamp: Math.max(0, numberValue(params.timestamp) ?? 0),
258
258
  frame_id: boundedId(params.frameId),
259
259
  loader_id: boundedId(params.loaderId),
260
- request_id: requestId?.slice(0, 256) ?? null,
260
+ request_id: requestId ?? null,
261
261
  url: destination?.scope === "approved" ? destination.url : null,
262
262
  destination_scope: destination?.scope ?? null,
263
263
  detail,
@@ -296,18 +296,6 @@ const waitForWindow = async (durationMs, capture, signal) => await new Promise((
296
296
  if (signal?.aborted === true)
297
297
  onAbort();
298
298
  });
299
- const authorizedFrame = async (context, allowedOrigins) => {
300
- for (let attempt = 0; attempt < 80; attempt += 1) {
301
- const result = await context.connection.send("Page.getFrameTree", {}, context.sessionId, context.signal);
302
- const url = mainFrameUrl(result);
303
- if (allowedSanitizedUrl(url, allowedOrigins) !== undefined)
304
- return result;
305
- if (isHttpUrl(url))
306
- throw new BrowserObservationError("inspect_web_page", "target_not_allowed");
307
- await delayWithCancellation(25, "observe_web_session", context.signal);
308
- }
309
- throw new BrowserObservationError("inspect_web_page", "target_not_allowed");
310
- };
311
299
  const captureFinalUrl = async (context, capture, allowedOrigins) => {
312
300
  const result = await context.connection.send("Page.getFrameTree", {}, context.sessionId, context.signal);
313
301
  const url = mainFrameUrl(result);
@@ -329,7 +317,7 @@ const scopedUrl = (value, allowedOrigins) => {
329
317
  ? { url: null, scope: "outside_policy" }
330
318
  : { url: null, scope: "unsupported" };
331
319
  };
332
- const boundedId = (value) => stringValue(value)?.slice(0, 256) ?? null;
320
+ const boundedId = (value) => stringValue(value) ?? null;
333
321
  const safeDetail = (value) => {
334
322
  const detail = stringValue(value)?.toLowerCase();
335
323
  return detail !== undefined && /^[a-z0-9_.:-]{1,100}$/u.test(detail)