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
@@ -1,40 +1,16 @@
1
1
  import { sanitizeBrowserUrl } from "../domain/browserObservation.js";
2
2
  import { browserScenarioEventSchema, } from "../domain/browserScenarioCapture.js";
3
- /** Bounded, arrival-ordered Playwright event capture with current-step attribution. */
3
+ /** Arrival-ordered Playwright event capture with current-step attribution. */
4
4
  export class PlaywrightScenarioEvents {
5
5
  items = [];
6
- truncated = new Set();
7
- admitted = {
8
- frames: new WeakSet(),
9
- workers: new WeakSet(),
10
- popups: new WeakSet(),
11
- websockets: new WeakSet(),
12
- };
13
- rejected = {
14
- frames: new WeakSet(),
15
- workers: new WeakSet(),
16
- popups: new WeakSet(),
17
- websockets: new WeakSet(),
18
- };
19
- counts = {
20
- frames: 0,
21
- workers: 0,
22
- popups: 0,
23
- websockets: 0,
24
- };
25
- dropped = 0;
26
6
  stepIndex = 0;
27
7
  sequence = 0;
28
8
  enabled;
29
- limits;
30
9
  secrets;
31
- budget;
32
10
  allowedOrigins;
33
11
  constructor(options) {
34
12
  this.enabled = options.enabled;
35
- this.limits = options.limits;
36
13
  this.secrets = options.secrets;
37
- this.budget = options.budget;
38
14
  this.allowedOrigins = new Set(options.allowedOrigins);
39
15
  this.observePage(options.page);
40
16
  }
@@ -50,49 +26,19 @@ export class PlaywrightScenarioEvents {
50
26
  result() {
51
27
  return {
52
28
  retained: this.items.length,
53
- dropped: this.dropped,
29
+ dropped: 0,
54
30
  items: this.items,
55
31
  };
56
32
  }
57
- truncationSections() {
58
- return [...this.truncated].sort();
59
- }
60
33
  push(event) {
61
34
  this.sequence += 1;
62
- if (this.items.length >= this.limits.max_events) {
63
- this.dropped += 1;
64
- this.truncated.add("events");
65
- return;
66
- }
67
35
  const parsed = browserScenarioEventSchema.parse({
68
36
  ...event,
69
37
  sequence: this.sequence,
70
38
  step_index: this.stepIndex,
71
39
  });
72
- if (!this.budget.claimMetadata(Buffer.byteLength(JSON.stringify(parsed)))) {
73
- this.dropped += 1;
74
- this.truncated.add("events");
75
- return;
76
- }
77
40
  this.items.push(parsed);
78
41
  }
79
- admit(section, value, maximum) {
80
- if (this.admitted[section].has(value))
81
- return true;
82
- if (this.rejected[section].has(value))
83
- return false;
84
- if (this.counts[section] >= maximum) {
85
- this.rejected[section].add(value);
86
- this.sequence += 1;
87
- this.dropped += 1;
88
- this.truncated.add("events");
89
- this.truncated.add(section);
90
- return false;
91
- }
92
- this.admitted[section].add(value);
93
- this.counts[section] += 1;
94
- return true;
95
- }
96
42
  observePage(page) {
97
43
  if (this.enabled.has("console"))
98
44
  page.on("console", (message) => {
@@ -104,10 +50,10 @@ export class PlaywrightScenarioEvents {
104
50
  if (this.pageInScope(page))
105
51
  this.push({
106
52
  kind: "page-error",
107
- message: this.secrets.redact(error.message).slice(0, 65_536),
53
+ message: this.secrets.redact(error.message),
108
54
  stack: error.stack === undefined
109
55
  ? null
110
- : this.secrets.redact(error.stack).slice(0, 262_144),
56
+ : this.secrets.redact(error.stack),
111
57
  });
112
58
  });
113
59
  if (this.enabled.has("network")) {
@@ -174,47 +120,51 @@ export class PlaywrightScenarioEvents {
174
120
  const location = message.location();
175
121
  this.push({
176
122
  kind: "console",
177
- level: this.secrets.redact(message.type()).slice(0, 64),
178
- text: this.secrets.redact(message.text()).slice(0, 65_536),
123
+ level: this.secrets.redact(message.type()),
124
+ text: this.secrets.redact(message.text()),
179
125
  url: location.url === "" ? null : this.safeUrl(location.url),
180
126
  });
181
127
  }
182
128
  request(kind, request) {
129
+ const observation = {
130
+ method: this.secrets.redact(request.method()),
131
+ url: this.safeUrl(request.url()),
132
+ resource_type: this.secrets.redact(request.resourceType()),
133
+ header_names: Object.keys(request.headers())
134
+ .map((name) => this.secrets.redact(name))
135
+ .sort(),
136
+ };
137
+ if (kind === "request-failed") {
138
+ this.push({
139
+ ...observation,
140
+ kind,
141
+ status: null,
142
+ failure: this.secrets.redact(request.failure()?.errorText ?? "unknown"),
143
+ });
144
+ return;
145
+ }
183
146
  this.push({
147
+ ...observation,
184
148
  kind,
185
- method: this.secrets.redact(request.method()).slice(0, 32),
186
- url: this.safeUrl(request.url()),
187
- resource_type: this.secrets.redact(request.resourceType()).slice(0, 64),
188
149
  status: null,
189
- header_names: Object.keys(request.headers())
190
- .map((name) => this.secrets.redact(name).slice(0, 256))
191
- .sort()
192
- .slice(0, 256),
193
- failure: kind === "request-failed"
194
- ? this.secrets
195
- .redact(request.failure()?.errorText ?? "unknown")
196
- .slice(0, 1_024)
197
- : null,
150
+ failure: null,
198
151
  });
199
152
  }
200
153
  response(response) {
201
154
  const request = response.request();
202
155
  this.push({
203
156
  kind: "response",
204
- method: this.secrets.redact(request.method()).slice(0, 32),
157
+ method: this.secrets.redact(request.method()),
205
158
  url: this.safeUrl(response.url()),
206
- resource_type: this.secrets.redact(request.resourceType()).slice(0, 64),
159
+ resource_type: this.secrets.redact(request.resourceType()),
207
160
  status: response.status(),
208
161
  header_names: Object.keys(response.headers())
209
- .map((name) => this.secrets.redact(name).slice(0, 256))
210
- .sort()
211
- .slice(0, 256),
162
+ .map((name) => this.secrets.redact(name))
163
+ .sort(),
212
164
  failure: null,
213
165
  });
214
166
  }
215
167
  webSocket(page, socket) {
216
- if (!this.admit("websockets", socket, this.limits.max_websockets))
217
- return;
218
168
  const url = this.safeUrl(socket.url());
219
169
  this.push({ kind: "websocket-opened", url });
220
170
  socket.on("framesent", ({ payload }) => {
@@ -233,30 +183,35 @@ export class PlaywrightScenarioEvents {
233
183
  webSocketFrame(kind, url, payload) {
234
184
  const bytes = Buffer.byteLength(payload);
235
185
  const isText = typeof payload === "string";
236
- const text = isText ? this.secrets.redact(payload).slice(0, 65_536) : null;
186
+ if (!isText) {
187
+ this.push({
188
+ kind,
189
+ url,
190
+ payload_type: "binary",
191
+ payload_bytes: bytes,
192
+ payload_text: null,
193
+ truncated: false,
194
+ });
195
+ return;
196
+ }
197
+ const text = this.secrets.redact(payload);
237
198
  this.push({
238
199
  kind,
239
200
  url,
240
- payload_type: isText ? "text" : "binary",
201
+ payload_type: "text",
241
202
  payload_bytes: bytes,
242
203
  payload_text: text,
243
- truncated: isText && text !== null && text.length < payload.length,
204
+ truncated: false,
244
205
  });
245
206
  }
246
207
  frame(kind, frame) {
247
- if (!this.admit("frames", frame, this.limits.max_frames))
248
- return;
249
208
  this.push({
250
209
  kind,
251
210
  url: frame.url() === "" ? null : this.safeUrl(frame.url()),
252
- name: frame.name() === ""
253
- ? null
254
- : this.secrets.redact(frame.name()).slice(0, 1_024),
211
+ name: frame.name() === "" ? null : this.secrets.redact(frame.name()),
255
212
  });
256
213
  }
257
214
  worker(page, worker) {
258
- if (!this.admit("workers", worker, this.limits.max_workers))
259
- return;
260
215
  const details = {
261
216
  url: this.safeUrl(worker.url()),
262
217
  name: null,
@@ -272,8 +227,6 @@ export class PlaywrightScenarioEvents {
272
227
  void page.close().catch(() => undefined);
273
228
  return;
274
229
  }
275
- if (!this.admit("popups", page, this.limits.max_popups))
276
- return;
277
230
  const opened = {
278
231
  url: page.url() === "" ? null : this.safeUrl(page.url()),
279
232
  name: null,
@@ -291,9 +244,7 @@ export class PlaywrightScenarioEvents {
291
244
  download(download) {
292
245
  this.push({
293
246
  kind: "download-cancelled",
294
- suggested_filename: this.secrets
295
- .redact(download.suggestedFilename())
296
- .slice(0, 1_024),
247
+ suggested_filename: this.secrets.redact(download.suggestedFilename()),
297
248
  url: this.safeUrl(download.url()),
298
249
  });
299
250
  void download.cancel().catch(() => undefined);
@@ -3,7 +3,7 @@ import { BrowserObservationError } from "../domain/errors.js";
3
3
  import { BrowserScenarioSecrets } from "./BrowserScenarioSecrets.js";
4
4
  import { closePlaywrightScenarioBrowser, openPlaywrightScenarioBrowser, } from "./PlaywrightScenarioBrowser.js";
5
5
  import { performPlaywrightScenarioAction } from "./PlaywrightScenarioActions.js";
6
- import { BrowserScenarioCaptureBudget, capturePlaywrightStepArtifacts, } from "./PlaywrightScenarioArtifacts.js";
6
+ import { capturePlaywrightStepArtifacts } from "./PlaywrightScenarioArtifacts.js";
7
7
  import { PlaywrightScenarioEvents } from "./PlaywrightScenarioEvents.js";
8
8
  import { withPlaywrightExecutionBoundary } from "./PlaywrightExecutionBoundary.js";
9
9
  const OPERATION = "capture_browser_scenario";
@@ -133,8 +133,8 @@ const blockAttachedServiceWorkers = async (page) => {
133
133
  await page.evaluate(blockRegistration);
134
134
  };
135
135
  const initializePage = async (context, page, scenario, secrets) => {
136
- context.setDefaultTimeout(scenario.limits.action_timeout_ms);
137
- context.setDefaultNavigationTimeout(scenario.limits.navigation_timeout_ms);
136
+ context.setDefaultTimeout(0);
137
+ context.setDefaultNavigationTimeout(0);
138
138
  const ownedPages = new Set([page]);
139
139
  if (scenario.browser.mode === "connect")
140
140
  await blockAttachedServiceWorkers(page);
@@ -190,43 +190,40 @@ export class PlaywrightScenarioSession {
190
190
  this.initialUrl = opened.page.url();
191
191
  }
192
192
  static async open(scenario, environment, options) {
193
- const remaining = () => options.deadlineAt - Date.now();
194
193
  if (options.signal?.aborted === true)
195
194
  throw new BrowserObservationError(OPERATION, "cancelled");
196
195
  const secrets = BrowserScenarioSecrets.resolve(scenario, environment);
197
196
  if (secrets === undefined)
198
197
  throw new BrowserObservationError(OPERATION, "secret_unavailable");
199
- const opening = openPlaywrightScenarioBrowser(scenario, environment, remaining());
198
+ const opening = openPlaywrightScenarioBrowser(scenario, environment);
200
199
  let opened;
201
200
  try {
202
- opened = await withPlaywrightExecutionBoundary(() => opening, remaining(), options.signal);
201
+ opened = await withPlaywrightExecutionBoundary(() => opening, undefined, options.signal);
203
202
  }
204
- catch (error) {
203
+ catch (cause) {
205
204
  void opening
206
205
  .then((lateOpened) => closePlaywrightScenarioBrowser(lateOpened))
207
206
  .catch(() => undefined);
208
- throw error;
207
+ throw cause;
209
208
  }
210
209
  try {
211
- await withPlaywrightExecutionBoundary(() => initializePage(opened.context, opened.page, scenario, secrets), remaining(), options.signal);
210
+ await withPlaywrightExecutionBoundary(() => initializePage(opened.context, opened.page, scenario, secrets), undefined, options.signal);
212
211
  const events = new PlaywrightScenarioEvents({
213
212
  page: opened.page,
214
213
  enabled: new Set(scenario.capture.events),
215
- limits: scenario.limits,
216
214
  secrets,
217
- budget: options.budget,
218
215
  allowedOrigins: scenario.allowed_origins,
219
216
  });
220
217
  const session = new PlaywrightScenarioSession(opened, scenario, secrets, events);
221
218
  await withPlaywrightExecutionBoundary(() => opened.page.goto(secrets.url(scenario.start_url), {
222
219
  waitUntil: "load",
223
- timeout: Math.min(scenario.limits.navigation_timeout_ms, remaining()),
224
- }), remaining(), options.signal);
220
+ timeout: 0,
221
+ }), undefined, options.signal);
225
222
  return session;
226
223
  }
227
- catch (error) {
224
+ catch (cause) {
228
225
  await closePlaywrightScenarioBrowser(opened);
229
- throw error;
226
+ throw cause;
230
227
  }
231
228
  }
232
229
  currentUrl() {
@@ -244,27 +241,21 @@ export class PlaywrightScenarioSession {
244
241
  events() {
245
242
  return this.eventCapture.result();
246
243
  }
247
- eventTruncationSections() {
248
- return this.eventCapture.truncationSections();
249
- }
250
- async perform(action, maximumTimeoutMs, signal) {
244
+ async perform(action, signal) {
251
245
  await withPlaywrightExecutionBoundary(() => performPlaywrightScenarioAction({
252
246
  page: this.opened.page,
253
247
  action,
254
248
  secrets: this.secrets,
255
- defaultTimeoutMs: this.scenario.limits.action_timeout_ms,
256
- maximumTimeoutMs,
257
- }), maximumTimeoutMs, signal);
249
+ }), "timeout_ms" in action ? action.timeout_ms : undefined, signal);
258
250
  }
259
- async capture(requested, budget, maximumTimeoutMs, signal) {
251
+ async capture(requested, signal) {
260
252
  return withPlaywrightExecutionBoundary(() => capturePlaywrightStepArtifacts({
261
253
  context: this.opened.context,
262
254
  page: this.opened.page,
263
255
  scenario: this.scenario,
264
256
  secrets: this.secrets,
265
257
  requested,
266
- budget,
267
- }), maximumTimeoutMs, signal);
258
+ }), undefined, signal);
268
259
  }
269
260
  async close() {
270
261
  if (this.closed)
@@ -278,9 +269,7 @@ export class PlaywrightScenarioSession {
278
269
  : "disconnected-external";
279
270
  }
280
271
  redactError(error) {
281
- return this.secrets
282
- .redact(error instanceof Error ? error.message : "browser action failed")
283
- .slice(0, 4_096);
272
+ return this.secrets.redact(error instanceof Error ? error.message : "browser action failed");
284
273
  }
285
274
  }
286
275
  /** Production Playwright/CDP session factory. */
@@ -290,11 +279,6 @@ export class PlaywrightScenarioSessionFactory {
290
279
  this.environment = environment;
291
280
  }
292
281
  open(scenario, options = {}) {
293
- return PlaywrightScenarioSession.open(scenario, this.environment, {
294
- ...(options.signal === undefined ? {} : { signal: options.signal }),
295
- budget: options.budget ??
296
- new BrowserScenarioCaptureBudget(scenario.limits.max_screenshots, scenario.limits.max_total_metadata_bytes),
297
- deadlineAt: options.deadlineAt ?? Date.now() + scenario.limits.max_duration_ms,
298
- });
282
+ return PlaywrightScenarioSession.open(scenario, this.environment, options);
299
283
  }
300
284
  }
@@ -1,12 +1,11 @@
1
1
  import { inflateSync } from "node:zlib";
2
2
  import { decodeCanonicalBase64 } from "../domain/webScreenshot.js";
3
- /** Compare two validated screenshots using bounded, deterministic RGBA metrics. */
3
+ /** Compare two validated screenshots using deterministic RGBA metrics. */
4
4
  export const comparePngScreenshots = (input) => {
5
- const before = decodePng(input.before, input.maximum_pixels);
6
- const after = decodePng(input.after, input.maximum_pixels);
5
+ const before = decodePng(input.before);
6
+ const after = decodePng(input.after);
7
7
  if (before.width !== after.width || before.height !== after.height)
8
8
  return {
9
- schema_version: 1,
10
9
  status: "dimension_mismatch",
11
10
  before: dimensions(before),
12
11
  after: dimensions(after),
@@ -35,21 +34,30 @@ export const comparePngScreenshots = (input) => {
35
34
  changedPixels += 1;
36
35
  }
37
36
  const pixels = before.width * before.height;
38
- return {
39
- schema_version: 1,
40
- status: changedPixels === 0 ? "identical" : "different",
37
+ const context = {
41
38
  before: dimensions(before),
42
39
  after: dimensions(after),
43
40
  channel_threshold: input.channel_threshold,
44
41
  compared_pixels: pixels,
45
- changed_pixels: changedPixels,
46
- changed_ratio: changedPixels / pixels,
47
42
  maximum_channel_delta: maximumDelta,
48
43
  mean_absolute_channel_delta: totalDelta / (pixels * 4),
49
44
  limitations: limitations(),
50
45
  };
46
+ if (changedPixels === 0)
47
+ return {
48
+ ...context,
49
+ status: "identical",
50
+ changed_pixels: 0,
51
+ changed_ratio: 0,
52
+ };
53
+ return {
54
+ ...context,
55
+ status: "different",
56
+ changed_pixels: changedPixels,
57
+ changed_ratio: changedPixels / pixels,
58
+ };
51
59
  };
52
- const decodePng = (artifact, maximumPixels) => {
60
+ const decodePng = (artifact) => {
53
61
  const bytes = decodeCanonicalBase64(artifact.data_base64);
54
62
  if (bytes === undefined || !bytes.subarray(0, 8).equals(PNG_SIGNATURE))
55
63
  throw new TypeError("Invalid PNG signature");
@@ -68,7 +76,7 @@ const decodePng = (artifact, maximumPixels) => {
68
76
  throw new TypeError("Truncated PNG data");
69
77
  const data = bytes.subarray(dataStart, dataEnd);
70
78
  if (type === "IHDR")
71
- header = parseHeader(data, maximumPixels);
79
+ header = parseHeader(data);
72
80
  else if (type === "IDAT")
73
81
  compressed.push(data);
74
82
  else if (type === "IEND") {
@@ -92,7 +100,7 @@ const decodePng = (artifact, maximumPixels) => {
92
100
  rgba: unfilter(raw, header.width, header.height, header.channels),
93
101
  };
94
102
  };
95
- const parseHeader = (data, maximumPixels) => {
103
+ const parseHeader = (data) => {
96
104
  if (data.byteLength !== 13)
97
105
  throw new TypeError("Invalid PNG header");
98
106
  const width = data.readUInt32BE(0);
@@ -101,13 +109,13 @@ const parseHeader = (data, maximumPixels) => {
101
109
  const colorType = data[9];
102
110
  if (width === 0 ||
103
111
  height === 0 ||
104
- width * height > maximumPixels ||
112
+ !Number.isSafeInteger(width * height) ||
105
113
  bitDepth !== 8 ||
106
114
  (colorType !== 2 && colorType !== 6) ||
107
115
  data[10] !== 0 ||
108
116
  data[11] !== 0 ||
109
117
  data[12] !== 0)
110
- throw new TypeError("Unsupported or oversized PNG");
118
+ throw new TypeError("Unsupported PNG");
111
119
  return { width, height, channels: colorType === 6 ? 4 : 3 };
112
120
  };
113
121
  const unfilter = (raw, width, height, channels) => {
@@ -1,4 +1,4 @@
1
- const SECRET_ASSIGNMENT = /\b(authorization|api[_-]?key|access[_-]?token|refresh[_-]?token|password|passwd|secret|cookie|session)\b\s*[:=]\s*(?:Bearer\s+[A-Za-z0-9._~+/=-]+|"[^"]*"|'[^']*'|[^\s,;]+)/giu;
1
+ const SECRET_ASSIGNMENT = /\b(authorization|api[_-]?key|access[_-]?token|refresh[_-]?token|token|password|passwd|secret|cookie|session)\b\s*[:=]\s*(?:Bearer\s+[A-Za-z0-9._~+/=-]+|"[^"]*"|'[^']*'|[^\s,;]+)/giu;
2
2
  const BEARER = /\bBearer\s+[A-Za-z0-9._~+/=-]+/giu;
3
3
  const JWT = /\beyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\b/gu;
4
4
  /** Redact credential-shaped substrings before approved console text is retained. */
@@ -6,20 +6,3 @@ export const redactSensitiveText = (value) => value
6
6
  .replace(SECRET_ASSIGNMENT, (_match, name) => `${name}=[REDACTED]`)
7
7
  .replace(BEARER, "Bearer [REDACTED]")
8
8
  .replace(JWT, "[REDACTED_JWT]");
9
- /** Return a UTF-8-bounded prefix without splitting a code point. */
10
- export const boundedSensitiveText = (value, maximumBytes) => {
11
- const redacted = redactSensitiveText(value);
12
- const total = Buffer.byteLength(redacted);
13
- if (total <= maximumBytes)
14
- return { text: redacted, bytes: total, truncated: false };
15
- let text = "";
16
- let bytes = 0;
17
- for (const character of redacted) {
18
- const size = Buffer.byteLength(character);
19
- if (bytes + size > maximumBytes)
20
- break;
21
- text += character;
22
- bytes += size;
23
- }
24
- return { text, bytes, truncated: true };
25
- };
@@ -2,8 +2,6 @@ import { createHash } from "node:crypto";
2
2
  import { authorizeRuntimeLocation } from "./JavaScriptRuntimeScope.js";
3
3
  /** Empty durable-location exclusion counters. */
4
4
  export const createInspectorExclusionCounts = () => ({
5
- outside_file_roots: 0,
6
- outside_origins: 0,
7
5
  unsupported_location: 0,
8
6
  });
9
7
  /** Stable safety and protocol limitations shared by target-list Evidence. */
@@ -11,14 +9,15 @@ export const describeInspectorTargetLimitations = () => [
11
9
  "REA attaches to an already-running exact target and never launches, resumes, evaluates, pauses, or mutates it.",
12
10
  "Only Runtime.enable and Debugger.enable are sent; source text, object values, EventEmitter activity, and Electron IPC are not inspected.",
13
11
  "Target IDs and locations are authorized, but the Inspector protocol does not authenticate an operating-system process ID or Electron role.",
12
+ "Every target exposed by the selected Inspector endpoint is eligible for observation; target IDs and locations are not authenticated as operating-system process identity.",
14
13
  "No runtime graph depth is traversed because passive Inspector events do not establish require/import caller edges.",
15
14
  ];
16
15
  /** Canonically authorize, deduplicate, and sort one bounded raw capture. */
17
- export const finalizeInspectorCapture = async ({ input, runtime, target, roots, state, }) => {
16
+ export const finalizeInspectorCapture = async ({ input, runtime, target, state, }) => {
18
17
  const exclusions = createInspectorExclusionCounts();
19
18
  const scripts = new Map();
20
19
  for (const draft of state.scripts) {
21
- const decision = await authorizeRuntimeLocation(draft.rawUrl, roots, input.allowed_origins);
20
+ const decision = await authorizeRuntimeLocation(draft.rawUrl);
22
21
  if (!decision.allowed) {
23
22
  exclusions[decision.reason] += 1;
24
23
  continue;
@@ -44,15 +43,16 @@ export const finalizeInspectorCapture = async ({ input, runtime, target, roots,
44
43
  ? 1
45
44
  : 0);
46
45
  return {
47
- schema_version: 1,
48
46
  runtime,
49
47
  target: {
50
48
  target_id: target.id,
51
49
  protocol_type: target.type,
52
50
  attached: target.attached,
53
51
  location: target.location,
54
- runtime_kind: input.runtime_kind,
55
- runtime_kind_authority: "caller-declared-unverified",
52
+ runtime_kind: input.runtime_kind ?? "unknown",
53
+ runtime_kind_authority: input.runtime_kind === undefined
54
+ ? "not-declared"
55
+ : "caller-declared-unverified",
56
56
  },
57
57
  capture: {
58
58
  observation_ms: input.observation_ms,
@@ -1,30 +1,28 @@
1
1
  import { z } from "zod";
2
2
  import { BrowserObservationError, } from "../domain/errors.js";
3
- import { parseCdpEndpointValue, readBoundedCdpJson } from "./CdpEndpoint.js";
4
- const MAX_VERSION_BYTES = 64 * 1_024;
5
- const MAX_TARGET_LIST_BYTES = 2 * 1_024 * 1_024;
3
+ import { parseCdpEndpointValue, readCdpJson } from "./CdpEndpoint.js";
6
4
  const versionSchema = z
7
5
  .object({
8
- Browser: z.string().min(1).max(1_024),
9
- "Protocol-Version": z.string().min(1).max(100),
10
- "V8-Version": z.string().max(1_024).optional(),
6
+ Browser: z.string().min(1),
7
+ "Protocol-Version": z.string().min(1),
8
+ "V8-Version": z.string().optional(),
11
9
  })
12
10
  .passthrough();
13
11
  const targetSchema = z
14
12
  .object({
15
- id: z.string().min(1).max(256),
16
- type: z.string().min(1).max(100),
17
- url: z.string().max(65_536),
13
+ id: z.string().min(1),
14
+ type: z.string().min(1),
15
+ url: z.string(),
18
16
  attached: z.boolean().default(false),
19
- webSocketDebuggerUrl: z.string().min(1).max(2_048),
17
+ webSocketDebuggerUrl: z.string().min(1),
20
18
  })
21
19
  .passthrough();
22
- const targetsSchema = z.array(targetSchema).max(1_000);
23
- /** Discover bounded Node/Electron Inspector targets from one loopback endpoint. */
20
+ const targetsSchema = z.array(targetSchema);
21
+ /** Discover Node/Electron Inspector targets from one loopback endpoint. */
24
22
  export const discoverV8Inspector = async (endpoint, operation, signal) => {
25
23
  const [versionInput, targetsInput] = await Promise.all([
26
- readBoundedCdpJson(new URL("/json/version", endpoint), MAX_VERSION_BYTES, operation, signal),
27
- readBoundedCdpJson(new URL("/json/list", endpoint), MAX_TARGET_LIST_BYTES, operation, signal),
24
+ readCdpJson(new URL("/json/version", endpoint), operation, signal),
25
+ readCdpJson(new URL("/json/list", endpoint), operation, signal),
28
26
  ]);
29
27
  const version = parseCdpEndpointValue(versionSchema, versionInput, operation);
30
28
  const targets = parseCdpEndpointValue(targetsSchema, targetsInput, operation);