rea-agents 3.1.0 → 3.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (590) hide show
  1. package/README.md +72 -95
  2. package/bridge/ghidra/ReaGhidraBridge.java +609 -841
  3. package/bridge/hopper_bridge.py +99 -344
  4. package/dist/application/AbortablePromise.js +6 -3
  5. package/dist/application/AnalysisSnapshotCache.js +0 -1
  6. package/dist/application/AnalysisSnapshotFiles.js +7 -7
  7. package/dist/application/AndroidApplicationService.js +1 -1
  8. package/dist/application/AppleApplicationService.js +1 -1
  9. package/dist/application/ArtifactExtraction.js +35 -54
  10. package/dist/application/ArtifactExtractionDestination.js +17 -0
  11. package/dist/application/ArtifactGraphConstruction.js +2 -17
  12. package/dist/application/ArtifactInventory/classify.js +2 -6
  13. package/dist/application/ArtifactInventory/hash.js +2 -20
  14. package/dist/application/ArtifactInventory/scanCanonical.js +8 -12
  15. package/dist/application/ArtifactInventory/scanReader.js +69 -51
  16. package/dist/application/ArtifactInventory.js +6 -14
  17. package/dist/application/AuthorizedArtifactInventory.js +3 -13
  18. package/dist/application/BinarySession.js +41 -13
  19. package/dist/application/BinarySessionComposition.js +0 -11
  20. package/dist/application/BinarySessionOpen.js +2 -1
  21. package/dist/application/BinarySessionRecords.js +5 -93
  22. package/dist/application/BinarySessionStatus.js +5 -16
  23. package/dist/application/BinaryTargetResolver.js +216 -0
  24. package/dist/application/BrowserEvidence.js +42 -58
  25. package/dist/application/BrowserObservationService.js +3 -6
  26. package/dist/application/BrowserScenarioCaptureService.js +3 -6
  27. package/dist/application/BrowserScenarioEvidence.js +3 -3
  28. package/dist/application/CallPathTracing.js +2 -36
  29. package/dist/application/CapabilityInventory.js +10 -15
  30. package/dist/application/ClientConfigurationDocument.js +27 -0
  31. package/dist/application/ClientRegistrationStatus.js +16 -13
  32. package/dist/application/CommandShimReplay.js +14 -1
  33. package/dist/application/DirectAnalysis.js +22 -46
  34. package/dist/application/DirectAnalysisStatus.js +5 -61
  35. package/dist/application/Doctor.js +11 -32
  36. package/dist/application/DoctorDiagnostics.js +1 -2
  37. package/dist/application/DoctorScope.js +1 -1
  38. package/dist/application/ElectronActiveEvidence.js +3 -8
  39. package/dist/application/ElectronActiveObservationService.js +3 -6
  40. package/dist/application/ElectronBoundaryAnalysis.js +7 -8
  41. package/dist/application/ElectronBoundaryGraphContext.js +1 -1
  42. package/dist/application/ElectronBoundaryGraphIpc.js +3 -3
  43. package/dist/application/ElectronBoundaryGraphNative.js +1 -2
  44. package/dist/application/ElectronBoundaryGraphWindows.js +6 -8
  45. package/dist/application/ElectronEvidence.js +4 -7
  46. package/dist/application/ElectronObservationService.js +5 -9
  47. package/dist/application/EnhancedLiteralTracing.js +42 -65
  48. package/dist/application/EnhancedTools.js +76 -44
  49. package/dist/application/EvidenceBundleCommands.js +11 -11
  50. package/dist/application/EvidenceBundleFiles.js +9 -15
  51. package/dist/application/EvidenceLedger.js +6 -41
  52. package/dist/application/FilesystemSnapshot.js +2 -3
  53. package/dist/application/InterfaceBuilderAnalysis.js +266 -0
  54. package/dist/application/InventoryProjectionEvidence.js +4 -2
  55. package/dist/application/InvestigationProviders.js +1 -1
  56. package/dist/application/JavaScriptApplicationEvidence.js +2 -5
  57. package/dist/application/JavaScriptApplicationEvidenceGraph.js +6 -10
  58. package/dist/application/JavaScriptApplicationService.js +6 -29
  59. package/dist/application/JavaScriptApplicationWorkflowEvidence.js +5 -5
  60. package/dist/application/JavaScriptApplicationWorkflowService.js +0 -8
  61. package/dist/application/JavaScriptArtifactAnalysis.js +38 -127
  62. package/dist/application/JavaScriptArtifactFiles.js +67 -107
  63. package/dist/application/JavaScriptArtifactGraphAccumulator.js +0 -7
  64. package/dist/application/JavaScriptArtifactGraphBuilder.js +7 -58
  65. package/dist/application/JavaScriptArtifactGraphBundlers.js +1 -6
  66. package/dist/application/JavaScriptArtifactGraphContext.js +12 -39
  67. package/dist/application/JavaScriptArtifactGraphDocuments.js +4 -11
  68. package/dist/application/JavaScriptArtifactGraphEvidence.js +0 -14
  69. package/dist/application/JavaScriptArtifactGraphFindings.js +3 -3
  70. package/dist/application/JavaScriptArtifactGraphStructure.js +16 -17
  71. package/dist/application/JavaScriptArtifactPathResolution.js +61 -49
  72. package/dist/application/JavaScriptArtifactReconstruction.js +5 -10
  73. package/dist/application/JavaScriptArtifactReconstructionInput.js +2 -14
  74. package/dist/application/JavaScriptJsonModules.js +2 -2
  75. package/dist/application/JavaScriptModuleRelationships.js +22 -27
  76. package/dist/application/JavaScriptReplayPlanning.js +9 -3
  77. package/dist/application/JavaScriptReplayService.js +6 -32
  78. package/dist/application/JavaScriptReturnShapeProjection.js +12 -42
  79. package/dist/application/JavaScriptRuntimeObservationEvidence.js +7 -8
  80. package/dist/application/JavaScriptRuntimeObservationService.js +4 -8
  81. package/dist/application/JavaScriptRuntimeReconciliationEvidence.js +2 -3
  82. package/dist/application/JavaScriptSemanticGraphBuilder.js +11 -41
  83. package/dist/application/JavaScriptSemanticGraphConstruction.js +5 -29
  84. package/dist/application/JavaScriptSemanticGraphEvidence.js +1 -1
  85. package/dist/application/JavaScriptSemanticGraphFingerprintProjection.js +1 -1
  86. package/dist/application/JavaScriptSemanticGraphFlowProjection.js +0 -13
  87. package/dist/application/JavaScriptSemanticGraphProjection.js +1 -3
  88. package/dist/application/JavaScriptSemanticTraceService.js +1 -10
  89. package/dist/application/JsonFiles.js +79 -0
  90. package/dist/application/LinuxHopper.js +11 -9
  91. package/dist/application/LoopbackReplay.js +26 -23
  92. package/dist/application/LoopbackReplayRecorder.js +29 -1
  93. package/dist/application/ManagedApplicationGraphService.js +1 -2
  94. package/dist/application/ManagedMemberComparisonService.js +11 -41
  95. package/dist/application/ManagedNativeVerificationService.js +1 -2
  96. package/dist/application/ManagedReconstructionService.js +1 -1
  97. package/dist/application/ManagedRuntimeCorrelationService.js +5 -8
  98. package/dist/application/NativeApiInspection.js +2 -7
  99. package/dist/application/NativeUiActionTrace.js +394 -0
  100. package/dist/application/NodeRuntimeCharacterizationService.js +3 -7
  101. package/dist/application/PermissionAuthority.js +15 -7
  102. package/dist/application/PermissionFailure.js +5 -0
  103. package/dist/application/ProcessCaptureAuthority.js +5 -7
  104. package/dist/application/ProcessCaptureJournal.js +3 -2
  105. package/dist/application/ProcessCaptureLifecycle.js +5 -12
  106. package/dist/application/ProcessCheckpoints.js +29 -11
  107. package/dist/application/ProcessCli.js +6 -16
  108. package/dist/application/ProcessEvidence.js +5 -7
  109. package/dist/application/ProcessHarness.js +52 -17
  110. package/dist/application/ProcessReactiveCoordinator.js +2 -4
  111. package/dist/application/ProcessReactiveEffects.js +9 -3
  112. package/dist/application/ProcessReactiveHarness.js +13 -7
  113. package/dist/application/ProcessSampling.js +2 -4
  114. package/dist/application/ProcessTimer.js +39 -0
  115. package/dist/application/ProjectPermissionStore.js +39 -96
  116. package/dist/application/RealHopperAssertions.js +20 -66
  117. package/dist/application/ReconstructionCoverageService.js +12 -58
  118. package/dist/application/ReconstructionObligationAuthority.js +2 -2
  119. package/dist/application/ReconstructionObligationCandidates.js +4 -4
  120. package/dist/application/ReconstructionObligationLedgerEvaluation.js +8 -15
  121. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -7
  122. package/dist/application/ReconstructionObligationLedgerService.js +19 -38
  123. package/dist/application/ReferenceSourceImport.js +19 -45
  124. package/dist/application/ReferenceSourceImportEntries.js +2 -4
  125. package/dist/application/ReferenceSourceImportPolicy.js +5 -32
  126. package/dist/application/ReferenceSourceImportTypes.js +0 -16
  127. package/dist/application/RuntimeExecutableDiagnostics.js +55 -29
  128. package/dist/application/SessionProviderRouter.js +2 -2
  129. package/dist/application/Setup.js +1 -3
  130. package/dist/application/SetupClientConfiguration.js +22 -93
  131. package/dist/application/SetupRegistrationEnvironment.js +0 -7
  132. package/dist/application/StoreFileLock.js +119 -0
  133. package/dist/application/TerminalRenderer.js +2 -3
  134. package/dist/application/Uninstall.js +9 -14
  135. package/dist/application/UnknownEvidence.js +1 -1
  136. package/dist/artifacts/ArtifactPaths.js +2 -5
  137. package/dist/artifacts/ArtifactProvider.js +36 -58
  138. package/dist/artifacts/DirectoryArtifactReader.js +13 -8
  139. package/dist/artifacts/MachOSliceArtifactReader.js +1 -5
  140. package/dist/artifacts/NativeDmgArtifactReader.js +11 -11
  141. package/dist/artifacts/NibArchive.js +269 -0
  142. package/dist/artifacts/SafeOutputTree.js +15 -24
  143. package/dist/browser/BrowserProcessStartup.js +1 -2
  144. package/dist/browser/CdpAuthorizedMainFrame.js +16 -0
  145. package/dist/browser/CdpBrowserProvider.js +3 -13
  146. package/dist/browser/CdpCanonicalJsonDigest.js +9 -0
  147. package/dist/browser/CdpCaptureDocuments.js +28 -76
  148. package/dist/browser/CdpCaptureEventBodyShapes.js +13 -33
  149. package/dist/browser/CdpCaptureEventHandlers.js +22 -87
  150. package/dist/browser/CdpCaptureEvents.js +2 -8
  151. package/dist/browser/CdpCaptureStorage.js +9 -20
  152. package/dist/browser/CdpCaptureStorageFingerprints.js +85 -98
  153. package/dist/browser/CdpCaptureValues.js +21 -21
  154. package/dist/browser/CdpConnection.js +10 -25
  155. package/dist/browser/CdpElectronInspection.js +26 -50
  156. package/dist/browser/CdpElectronProvider.js +10 -35
  157. package/dist/browser/CdpElectronScriptEvents.js +8 -16
  158. package/dist/browser/CdpElectronScripts.js +6 -35
  159. package/dist/browser/CdpElectronWorkers.js +6 -10
  160. package/dist/browser/CdpEndpoint.js +25 -41
  161. package/dist/browser/CdpObservationSession.js +14 -26
  162. package/dist/browser/CdpPageCapture.js +34 -48
  163. package/dist/browser/CdpPageCaptureScripts.js +1 -19
  164. package/dist/browser/CdpPageCaptureWorkers.js +6 -10
  165. package/dist/browser/CdpSafeMetadata.js +19 -22
  166. package/dist/browser/CdpScreenshot.js +3 -5
  167. package/dist/browser/CdpTargetSession.js +1 -2
  168. package/dist/browser/CdpWebMcpDiscovery.js +13 -22
  169. package/dist/browser/ElectronFileScope.js +8 -19
  170. package/dist/browser/JavaScriptRuntimeScope.js +9 -14
  171. package/dist/browser/PlaywrightBrowserScenarioProvider.js +31 -64
  172. package/dist/browser/PlaywrightElectronActiveActions.js +54 -69
  173. package/dist/browser/PlaywrightElectronActiveProvider.js +14 -34
  174. package/dist/browser/PlaywrightExecutionBoundary.js +16 -5
  175. package/dist/browser/PlaywrightScenarioActions.js +3 -7
  176. package/dist/browser/PlaywrightScenarioArtifacts.js +23 -92
  177. package/dist/browser/PlaywrightScenarioBrowser.js +3 -5
  178. package/dist/browser/PlaywrightScenarioEvents.js +45 -94
  179. package/dist/browser/PlaywrightScenarioSession.js +14 -30
  180. package/dist/browser/PngVisualDiff.js +22 -14
  181. package/dist/browser/SensitiveTextCapture.js +0 -17
  182. package/dist/browser/V8InspectorCaptureProjection.js +7 -8
  183. package/dist/browser/V8InspectorEndpoint.js +12 -14
  184. package/dist/browser/V8InspectorProvider.js +20 -61
  185. package/dist/browser/WebSourceMapFetcher.js +56 -176
  186. package/dist/catalogIdentity.js +0 -54
  187. package/dist/cli/artifactCommands.js +49 -77
  188. package/dist/cli/coreAnalysisCommands.js +83 -133
  189. package/dist/cli/javascriptApplicationAnalysis.js +1 -9
  190. package/dist/cli/managedCommands.js +5 -270
  191. package/dist/cli/setupCommands.js +3 -12
  192. package/dist/cli/utilityCommands.js +7 -41
  193. package/dist/cli.js +0 -2
  194. package/dist/cliApplicationCommands.js +42 -112
  195. package/dist/cliBrowserAdvancedCommands.js +10 -106
  196. package/dist/cliBrowserCommands.js +15 -127
  197. package/dist/cliBrowserContext.js +30 -0
  198. package/dist/cliCommandNames.js +4 -5
  199. package/dist/cliElectronCommands.js +8 -72
  200. package/dist/cliEvidenceCommands.js +8 -77
  201. package/dist/cliJavaScriptRuntimeCommands.js +9 -91
  202. package/dist/cliJsonInput.js +4 -14
  203. package/dist/cliObservationOptions.js +11 -96
  204. package/dist/cliPolicyCommands.js +2 -17
  205. package/dist/cliProcessCommands.js +3 -3
  206. package/dist/cliSetup.js +0 -13
  207. package/dist/config/browserScenario.js +2 -2
  208. package/dist/config/environment.js +0 -9
  209. package/dist/config/parseConfig.js +1 -33
  210. package/dist/config/parsers.js +6 -27
  211. package/dist/config/passiveObservation.js +7 -77
  212. package/dist/config/permissions.js +0 -7
  213. package/dist/contracts/analysisSearchContract.js +2 -5
  214. package/dist/contracts/applicationToolContracts.js +56 -109
  215. package/dist/contracts/applicationWorkflowInputContracts.js +27 -102
  216. package/dist/contracts/artifactComparisonExample.js +58 -60
  217. package/dist/contracts/artifactToolContracts.js +20 -67
  218. package/dist/contracts/browserScenarioToolContracts.js +6 -51
  219. package/dist/contracts/browserToolContracts.js +8 -73
  220. package/dist/contracts/electronToolContracts.js +8 -108
  221. package/dist/contracts/enhancedInputs.js +23 -54
  222. package/dist/contracts/errorSchemas.js +0 -1
  223. package/dist/contracts/functionComparisonExample.js +10 -24
  224. package/dist/contracts/functionInstructionContract.js +1 -3
  225. package/dist/contracts/functionWorkflowToolContracts.js +2 -2
  226. package/dist/contracts/hopperMemoryContracts.js +3 -3
  227. package/dist/contracts/investigationExamples.js +14 -11
  228. package/dist/contracts/javascriptApplicationWorkflowExamples.js +12 -19
  229. package/dist/contracts/javascriptRuntimeObservationToolContracts.js +2 -20
  230. package/dist/contracts/javascriptRuntimeReconciliationExample.js +45 -12
  231. package/dist/contracts/managedToolContracts.js +6 -95
  232. package/dist/contracts/managedWorkflowExamples.js +77 -128
  233. package/dist/contracts/managedWorkflowToolContracts.js +51 -77
  234. package/dist/contracts/nativeToolContracts.js +7 -11
  235. package/dist/contracts/processCaptureExample.js +2 -69
  236. package/dist/contracts/promptContracts.js +49 -67
  237. package/dist/contracts/providerSelection.js +0 -1
  238. package/dist/contracts/reconstructionReadinessExample.js +1 -6
  239. package/dist/contracts/sessionStatusContract.js +1 -17
  240. package/dist/contracts/sessionToolSchemas.js +6 -15
  241. package/dist/contracts/toolContractExamples.js +11 -11
  242. package/dist/contracts/toolContractHelpers.js +0 -4
  243. package/dist/contracts/toolContracts.js +60 -71
  244. package/dist/contracts/toolEffects.js +5 -13
  245. package/dist/contracts/toolOutputSchemaGroups.js +37 -91
  246. package/dist/contracts/toolOutputSchemaPrimitives.js +16 -56
  247. package/dist/contracts/toolSchemaMetadata.js +8 -19
  248. package/dist/contracts/unknownContractExamples.js +0 -2
  249. package/dist/domain/analysisErrorPresentation.js +46 -54
  250. package/dist/domain/analysisErrorProjection.js +28 -37
  251. package/dist/domain/analysisProfile.js +3 -31
  252. package/dist/domain/analysisSnapshot.js +3 -12
  253. package/dist/domain/androidApplication.js +15 -54
  254. package/dist/domain/appleApplication.js +24 -67
  255. package/dist/domain/artifactComparison.js +11 -29
  256. package/dist/domain/artifactGraph.js +14 -44
  257. package/dist/domain/artifactInspection.js +38 -69
  258. package/dist/domain/artifactInventoryEvidence.js +27 -21
  259. package/dist/domain/binaryTarget.js +2 -221
  260. package/dist/domain/browserCaptureComparison.js +47 -24
  261. package/dist/domain/browserObservation.js +28 -193
  262. package/dist/domain/browserObservationSchemas.js +5 -23
  263. package/dist/domain/browserScenario.js +11 -14
  264. package/dist/domain/browserScenarioCapture.js +11 -12
  265. package/dist/domain/browserScenarioCaptureValues.js +146 -84
  266. package/dist/domain/browserScenarioDiff.js +2 -59
  267. package/dist/domain/browserScenarioDiffEvidence.js +51 -0
  268. package/dist/domain/browserScenarioDiffValues.js +21 -38
  269. package/dist/domain/browserScenarioValues.js +80 -109
  270. package/dist/domain/browserSession.js +4 -7
  271. package/dist/domain/bundleComparison.js +6 -32
  272. package/dist/domain/bytecodeProvider.js +20 -19
  273. package/dist/domain/callPath.js +47 -167
  274. package/dist/domain/callPathSchemas.js +79 -0
  275. package/dist/domain/changedBehavior.js +34 -60
  276. package/dist/domain/completionLedgerGeneration.js +8 -14
  277. package/dist/domain/conformancePackage.js +126 -97
  278. package/dist/domain/conformanceReplay.js +36 -8
  279. package/dist/domain/conformanceTrustGate.js +23 -14
  280. package/dist/domain/customProtocolCapture.js +1 -1
  281. package/dist/domain/electronActiveObservation.js +70 -103
  282. package/dist/domain/electronObservation.js +14 -80
  283. package/dist/domain/electronStaticAnalysisBrowser.js +36 -46
  284. package/dist/domain/electronStaticAnalysisIpc.js +38 -14
  285. package/dist/domain/electronStaticAnalysisNative.js +1 -8
  286. package/dist/domain/electronStaticAnalysisValues.js +10 -17
  287. package/dist/domain/errors.js +33 -54
  288. package/dist/domain/eventProcessTree.js +20 -12
  289. package/dist/domain/evidence.js +2 -10
  290. package/dist/domain/evidenceBundle.js +3 -5
  291. package/dist/domain/evidenceCompletionLedger.js +6 -8
  292. package/dist/domain/functionComparison.js +4 -14
  293. package/dist/domain/functionComparisonNormalization.js +4 -11
  294. package/dist/domain/functionComparisonResults.js +25 -15
  295. package/dist/domain/functionComparisonSchemas.js +49 -33
  296. package/dist/domain/functionDossierEvidence.js +31 -156
  297. package/dist/domain/hopperStartupFailure.js +1 -1
  298. package/dist/domain/hopperValues.js +15 -136
  299. package/dist/domain/interfaceBuilderGraph.js +654 -0
  300. package/dist/domain/javascriptApplicationAnalysis.js +8 -112
  301. package/dist/domain/javascriptApplicationChangeGraph.js +22 -82
  302. package/dist/domain/javascriptApplicationEvidenceSchemas.js +59 -47
  303. package/dist/domain/javascriptApplicationGraph.js +3 -13
  304. package/dist/domain/javascriptApplicationGraphSchemas.js +12 -34
  305. package/dist/domain/javascriptApplicationVersionComparison.js +26 -30
  306. package/dist/domain/javascriptApplicationVersionComparisonSchemas.js +123 -68
  307. package/dist/domain/javascriptApplicationVersionItems.js +120 -53
  308. package/dist/domain/javascriptApplicationVersionKeys.js +24 -11
  309. package/dist/domain/javascriptAstFingerprint.js +25 -58
  310. package/dist/domain/javascriptAstValues.js +9 -0
  311. package/dist/domain/javascriptExportInstrumentation.js +2 -4
  312. package/dist/domain/javascriptExportShapeComparison.js +6 -7
  313. package/dist/domain/javascriptExportShapeComparisonSchemas.js +68 -75
  314. package/dist/domain/javascriptExportShapeSelection.js +17 -19
  315. package/dist/domain/javascriptFeatureSeed.js +20 -12
  316. package/dist/domain/javascriptFeatureTrace.js +13 -67
  317. package/dist/domain/javascriptFeatureTraceSchemas.js +24 -52
  318. package/dist/domain/javascriptFeatureTraversal.js +1 -44
  319. package/dist/domain/javascriptNativeHandoff.js +1 -1
  320. package/dist/domain/javascriptReplay.js +24 -41
  321. package/dist/domain/javascriptRuntimeLoadState.js +3 -8
  322. package/dist/domain/javascriptRuntimeObservation.js +42 -103
  323. package/dist/domain/javascriptRuntimeReconciliation.js +1 -3
  324. package/dist/domain/javascriptRuntimeReconciliationActive.js +8 -17
  325. package/dist/domain/javascriptRuntimeReconciliationGraph.js +10 -23
  326. package/dist/domain/javascriptRuntimeReconciliationMatching.js +18 -12
  327. package/dist/domain/javascriptRuntimeReconciliationParsing.js +16 -45
  328. package/dist/domain/javascriptRuntimeReconciliationResult.js +4 -5
  329. package/dist/domain/javascriptRuntimeReconciliationRuntime.js +8 -12
  330. package/dist/domain/javascriptRuntimeReconciliationSchemas.js +33 -48
  331. package/dist/domain/javascriptRuntimeStaticCandidates.js +3 -3
  332. package/dist/domain/javascriptSemanticAnalysis.js +12 -45
  333. package/dist/domain/javascriptSemanticAsyncEffects.js +1 -9
  334. package/dist/domain/javascriptSemanticCallResolution.js +6 -16
  335. package/dist/domain/javascriptSemanticCalls.js +5 -32
  336. package/dist/domain/javascriptSemanticChildProcesses.js +1 -11
  337. package/dist/domain/javascriptSemanticCoverage.js +11 -0
  338. package/dist/domain/javascriptSemanticDataEffectHelpers.js +1 -8
  339. package/dist/domain/javascriptSemanticDataEffects.js +1 -11
  340. package/dist/domain/javascriptSemanticFingerprints.js +3 -5
  341. package/dist/domain/javascriptSemanticGraphSchemas.js +25 -51
  342. package/dist/domain/javascriptSemanticGraphSerialization.js +2 -13
  343. package/dist/domain/javascriptSemanticIr.js +1 -29
  344. package/dist/domain/javascriptSemanticObjects.js +1 -5
  345. package/dist/domain/javascriptSemanticPrimitives.js +2 -9
  346. package/dist/domain/javascriptSemanticProjection.js +0 -18
  347. package/dist/domain/javascriptSemanticPromises.js +9 -16
  348. package/dist/domain/javascriptSemanticProvenance.js +16 -19
  349. package/dist/domain/javascriptSemanticQuery.js +17 -139
  350. package/dist/domain/javascriptSemanticQueryAssessment.js +9 -37
  351. package/dist/domain/javascriptSemanticQueryIdentity.js +2 -23
  352. package/dist/domain/javascriptSemanticQuerySchemas.js +14 -107
  353. package/dist/domain/javascriptSemanticResources.js +1 -6
  354. package/dist/domain/javascriptSemanticReturns.js +10 -27
  355. package/dist/domain/javascriptSemanticValueTypes.js +1 -0
  356. package/dist/domain/javascriptSemanticValues.js +44 -62
  357. package/dist/domain/javascriptStaticAnalysis.js +21 -43
  358. package/dist/domain/javascriptStaticAnalysisBundler.js +34 -93
  359. package/dist/domain/javascriptStaticAnalysisCalls.js +17 -16
  360. package/dist/domain/javascriptStaticAnalysisFindings.js +3 -19
  361. package/dist/domain/javascriptStaticAnalysisHelpers.js +47 -88
  362. package/dist/domain/javascriptStaticAnalysisState.js +1 -5
  363. package/dist/domain/javascriptStaticAnalysisTypes.js +1 -0
  364. package/dist/domain/jsonShape.js +7 -33
  365. package/dist/domain/localPath.js +7 -0
  366. package/dist/domain/managedApplicationGraph.js +9 -41
  367. package/dist/domain/managedApplicationGraphCoverage.js +24 -156
  368. package/dist/domain/managedApplicationGraphNodes.js +10 -13
  369. package/dist/domain/managedArtifact.js +14 -27
  370. package/dist/domain/managedMemberComparison.js +90 -92
  371. package/dist/domain/managedMemberComparisonCoverage.js +11 -33
  372. package/dist/domain/managedMemberComparisonItems.js +221 -0
  373. package/dist/domain/managedMemberComparisonMatch.js +8 -208
  374. package/dist/domain/managedNativeVerification.js +3 -6
  375. package/dist/domain/managedNativeVerificationMatch.js +55 -59
  376. package/dist/domain/managedNativeVerificationSchemas.js +83 -47
  377. package/dist/domain/managedReconstruction.js +19 -23
  378. package/dist/domain/managedRuntimeCorrelation.js +6 -9
  379. package/dist/domain/nativeApiBoundary.js +2 -7
  380. package/dist/domain/nativeInspection.js +0 -2
  381. package/dist/domain/nativeInvestigationGraph.js +351 -0
  382. package/dist/domain/nativeValueFlow.js +61 -0
  383. package/dist/domain/nodeRuntimeCharacterization.js +1 -5
  384. package/dist/domain/objcSwiftMetadata.js +254 -0
  385. package/dist/domain/peInspection.js +1 -1
  386. package/dist/domain/permissionPolicy.js +13 -0
  387. package/dist/domain/processCapture.js +76 -113
  388. package/dist/domain/processCaptureExample.js +68 -0
  389. package/dist/domain/processCaptureParsing.js +21 -0
  390. package/dist/domain/processCaptureReactiveSchema.js +68 -0
  391. package/dist/domain/processCaptureValidation.js +1 -7
  392. package/dist/domain/processComparison.js +3 -12
  393. package/dist/domain/processReactiveMatching.js +29 -50
  394. package/dist/domain/processReactiveRuntime.js +4 -8
  395. package/dist/domain/processReactiveScenario.js +28 -94
  396. package/dist/domain/processReactiveScenarioPreflight.js +5 -30
  397. package/dist/domain/processReactiveTransition.js +33 -18
  398. package/dist/domain/processScenario.js +56 -90
  399. package/dist/domain/processTraceComparison.js +0 -8
  400. package/dist/domain/processTraceEvaluation.js +14 -4
  401. package/dist/domain/processTraceSpecification.js +11 -17
  402. package/dist/domain/protocolCapture.js +3 -3
  403. package/dist/domain/reconstructionCoverage.js +62 -129
  404. package/dist/domain/reconstructionCoverageEvaluation.js +17 -17
  405. package/dist/domain/reconstructionObligationLedgerSchemas.js +45 -72
  406. package/dist/domain/reconstructionReadiness.js +1 -2
  407. package/dist/domain/reconstructionReadinessSchemas.js +36 -38
  408. package/dist/domain/reconstructionUnknowns.js +3 -3
  409. package/dist/domain/reconstructionVerification.js +13 -47
  410. package/dist/domain/reconstructionVerificationSchemas.js +50 -38
  411. package/dist/domain/referenceSourceGraph.js +53 -61
  412. package/dist/domain/referenceSourceImportParsing.js +1 -5
  413. package/dist/domain/replayMachine.js +19 -31
  414. package/dist/domain/replayMachineRun.js +15 -63
  415. package/dist/domain/replayMachineRuntime.js +41 -41
  416. package/dist/domain/replayMachineValues.js +84 -0
  417. package/dist/domain/residualUnknown.js +25 -30
  418. package/dist/domain/runtimeCharacterization.js +15 -16
  419. package/dist/domain/runtimeIdentification.js +48 -47
  420. package/dist/domain/sourceToBundleComparison.js +9 -85
  421. package/dist/domain/sourceToBundleComparisonSchemas.js +17 -42
  422. package/dist/domain/sourceToBundleSignals.js +4 -15
  423. package/dist/domain/staticRuntimeCorrelation.js +37 -49
  424. package/dist/domain/symbolAnalysis.js +10 -19
  425. package/dist/domain/unicodeCodePointOrder.js +12 -0
  426. package/dist/domain/webBundleAnalysis.js +70 -99
  427. package/dist/domain/webBundleAnalyzer.js +2 -4
  428. package/dist/domain/webBundleAnalyzerAst.js +0 -13
  429. package/dist/domain/webBundleAnalyzerInspection.js +26 -52
  430. package/dist/domain/webBundleAnalyzerResult.js +7 -24
  431. package/dist/domain/webCaptureDiff.js +33 -73
  432. package/dist/domain/webCaptureDiffSchemas.js +86 -0
  433. package/dist/domain/webContentArtifact.js +1 -10
  434. package/dist/domain/webMcpDiscovery.js +3 -14
  435. package/dist/domain/webScreenshot.js +58 -34
  436. package/dist/domain/zipPackageFormat.js +7 -0
  437. package/dist/dotnet/ManagedArtifactInspector.js +17 -50
  438. package/dist/dotnet/ManagedMemberInspector.js +27 -58
  439. package/dist/dotnet/ManagedMemberInspectorCore.js +14 -51
  440. package/dist/dotnet/ManagedMemberInstructionDecoder.js +2 -2
  441. package/dist/dotnet/ManagedMemberRows.js +16 -16
  442. package/dist/dotnet/ManagedMetadataHeaps.js +26 -8
  443. package/dist/dotnet/ManagedMetadataInventory.js +21 -30
  444. package/dist/dotnet/ManagedMetadataInventoryRows.js +57 -63
  445. package/dist/dotnet/ManagedMetadataLayout.js +3 -5
  446. package/dist/dotnet/ManagedMethodBodyReader.js +5 -30
  447. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +19 -49
  448. package/dist/dotnet/ManagedNativeBoundaryInspector.js +13 -41
  449. package/dist/dotnet/ManagedPeReader.js +2 -2
  450. package/dist/dotnet/ManagedStaticProvider.js +13 -71
  451. package/dist/generatedMcpToolCatalog.js +1 -1
  452. package/dist/generatedPackageMetadata.js +1 -1
  453. package/dist/ghidra/GhidraAnalysisProfile.js +3 -8
  454. package/dist/ghidra/GhidraClient.js +4 -12
  455. package/dist/ghidra/GhidraClientWire.js +9 -5
  456. package/dist/ghidra/GhidraDefaults.js +0 -18
  457. package/dist/ghidra/GhidraDiagnostics.js +0 -2
  458. package/dist/ghidra/GhidraDoctor.js +16 -12
  459. package/dist/ghidra/GhidraFunctionValues.js +65 -108
  460. package/dist/ghidra/GhidraInstallation.js +98 -42
  461. package/dist/ghidra/GhidraInventoryValues.js +16 -85
  462. package/dist/ghidra/GhidraLauncher.js +0 -8
  463. package/dist/ghidra/GhidraProvider.js +15 -22
  464. package/dist/ghidra/GhidraProviderCapabilities.js +6 -47
  465. package/dist/ghidra/GhidraRequestQueue.js +6 -30
  466. package/dist/ghidra/GhidraResponseBuffer.js +1 -7
  467. package/dist/ghidra/GhidraSessionValues.js +0 -2
  468. package/dist/ghidra/GhidraTransport.js +4 -7
  469. package/dist/ghidra/protocol.js +2 -2
  470. package/dist/hopper/BridgeLauncher.js +112 -36
  471. package/dist/hopper/HopperAnalysisProfile.js +1 -1
  472. package/dist/hopper/HopperCleanup.js +6 -3
  473. package/dist/hopper/HopperClient.js +4 -7
  474. package/dist/hopper/HopperProcessDiagnostic.js +2 -2
  475. package/dist/hopper/HopperProvider.js +0 -16
  476. package/dist/hopper/HopperRequestQueue.js +21 -40
  477. package/dist/hopper/HopperResponseStream.js +1 -9
  478. package/dist/hopper/HopperSessionValues.js +3 -2
  479. package/dist/hopper/HopperTargetLease.js +119 -0
  480. package/dist/hopper/LinuxPrivateDisplayDiagnostic.js +24 -31
  481. package/dist/hopper/LinuxPrivateDisplayProbe.js +5 -16
  482. package/dist/hopper/protocol.js +6 -4
  483. package/dist/main/reload.js +0 -3
  484. package/dist/main/shutdown.js +1 -1
  485. package/dist/main/state.js +0 -9
  486. package/dist/main/transport.js +0 -5
  487. package/dist/mcpDoctor.js +25 -45
  488. package/dist/native/CommandRunner.js +18 -25
  489. package/dist/native/NativeMacOSProvider.js +13 -38
  490. package/dist/native/NativeMachoInspection.js +1 -1
  491. package/dist/process/BoundedFileBytes.js +17 -0
  492. package/dist/process/ExecFileOutput.js +11 -0
  493. package/dist/process/PendingOperations.js +8 -6
  494. package/dist/process/ProcessOwnership.js +3 -2
  495. package/dist/process/ProcessOwnershipObservation.js +0 -1
  496. package/dist/process/ProviderProcess.js +7 -28
  497. package/dist/reference/ReferenceSourceReader.js +8 -24
  498. package/dist/reference/ReferenceSourceReaderEntries.js +11 -39
  499. package/dist/reference/ReferenceSourceReaderFile.js +13 -31
  500. package/dist/reference/ReferenceSourceReaderPaths.js +3 -18
  501. package/dist/reference/ReferenceSourceReaderValidate.js +3 -6
  502. package/dist/replay/JavaScriptReplayWorker.js +3 -5
  503. package/dist/replay/LinuxJavaScriptReplayRunner.js +33 -29
  504. package/dist/replay/LinuxJavaScriptReplaySandbox.js +0 -19
  505. package/dist/replay/LinuxRuntimeClosure.js +1 -3
  506. package/dist/replay/ReplayOutcome.js +1 -3
  507. package/dist/replay/ReplayProcessLifecycle.js +32 -7
  508. package/dist/replay/ReplaySeccompFile.js +29 -0
  509. package/dist/replay/ReplayWorkerProtocol.js +0 -2
  510. package/dist/replay/SystemJavaScriptReplayHost.js +45 -74
  511. package/dist/server/ProcessCaptureElicitation.js +4 -8
  512. package/dist/server/createServer.js +6 -44
  513. package/dist/server/promptCompletion.js +37 -61
  514. package/dist/server/recordDerivedEvidence.js +1 -1
  515. package/dist/server/registerApplicationTools/characterization.js +4 -8
  516. package/dist/server/registerApplicationTools/compareExportShapes.js +5 -10
  517. package/dist/server/registerApplicationTools/compareSourceToBundle.js +6 -10
  518. package/dist/server/registerApplicationTools/compareVersions.js +5 -10
  519. package/dist/server/registerApplicationTools/controlledReplay.js +3 -5
  520. package/dist/server/registerApplicationTools/coverage.js +6 -71
  521. package/dist/server/registerApplicationTools/helpers.js +1 -13
  522. package/dist/server/registerApplicationTools/obligationLedger.js +3 -2
  523. package/dist/server/registerApplicationTools/traceFeature.js +5 -9
  524. package/dist/server/registerApplicationTools/traceSemantics.js +5 -8
  525. package/dist/server/registerApplicationTools.js +0 -2
  526. package/dist/server/registerArtifactComparisonTool.js +23 -27
  527. package/dist/server/registerBrowserScenarioTool.js +4 -4
  528. package/dist/server/registerBrowserTools.js +5 -8
  529. package/dist/server/registerBundleComparisonTool.js +5 -7
  530. package/dist/server/registerCloseLifecycleTool.js +2 -16
  531. package/dist/server/registerElectronTools.js +10 -29
  532. package/dist/server/registerEnhancedTools.js +10 -11
  533. package/dist/server/registerEvidenceTools.js +15 -22
  534. package/dist/server/registerFunctionComparisonTool.js +30 -25
  535. package/dist/server/registerInvestigationTools/helpers.js +3 -32
  536. package/dist/server/registerInvestigationTools.js +20 -116
  537. package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -4
  538. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +15 -17
  539. package/dist/server/registerManagedWorkflowTools/evidence.js +19 -35
  540. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +3 -8
  541. package/dist/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.js +3 -8
  542. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +10 -14
  543. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +9 -15
  544. package/dist/server/registerOfficialTools.js +1 -43
  545. package/dist/server/registerProcessComparisonTool.js +33 -23
  546. package/dist/server/registerPrompts.js +19 -17
  547. package/dist/server/registerSessionRecordTools.js +10 -156
  548. package/dist/server/registerSessionStatusTool.js +6 -69
  549. package/dist/server/registerSessionTools.js +10 -51
  550. package/dist/server/sessionAvailabilityPolicy.js +0 -2
  551. package/dist/server/sessionEvidence.js +9 -15
  552. package/dist/server/sessionToolPolicies.js +0 -8
  553. package/dist/server/toolResult.js +14 -50
  554. package/dist/serverIdentity.js +0 -20
  555. package/install.sh +1 -1
  556. package/package.json +11 -7
  557. package/scripts/electron-active-hook.cjs +23 -55
  558. package/scripts/hopper-demo-x11.py +13 -32
  559. package/skills/reverse-engineer-anything/SKILL.md +47 -12
  560. package/skills/reverse-engineer-anything/references/evidence-workflows.md +6 -4
  561. package/skills/reverse-engineer-anything/references/javascript-applications.md +13 -13
  562. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +12 -8
  563. package/dist/application/ApplicationWorkflowEvidenceResolver.js +0 -188
  564. package/dist/application/BoundedJsonFiles.js +0 -86
  565. package/dist/application/CrossVersionInventory.js +0 -129
  566. package/dist/application/CrossVersionInvestigation.js +0 -301
  567. package/dist/application/CrossVersionInvestigationCollections.js +0 -23
  568. package/dist/application/CrossVersionInvestigationEvidence.js +0 -64
  569. package/dist/application/CrossVersionInvestigationReplay.js +0 -170
  570. package/dist/application/DeferredFileAuthorization.js +0 -61
  571. package/dist/application/DoctorProjection.js +0 -43
  572. package/dist/application/EnhancedToolPagination.js +0 -22
  573. package/dist/application/EvidenceReferenceResolver.js +0 -26
  574. package/dist/application/InvestigationWorkspaceStore.js +0 -204
  575. package/dist/application/ProcessPairedExperiment.js +0 -72
  576. package/dist/application/ReconstructionCoverageWorkspaceStore.js +0 -31
  577. package/dist/application/ReconstructionReadinessService.js +0 -48
  578. package/dist/cliInvestigationCommands.js +0 -173
  579. package/dist/domain/boundedCartesianProjection.js +0 -15
  580. package/dist/domain/investigationWorkspace.js +0 -347
  581. package/dist/domain/jsonLimits.js +0 -26
  582. package/dist/domain/knownPageCoverage.js +0 -29
  583. package/dist/domain/processPairedExperiment.js +0 -128
  584. package/dist/server/javascriptApplicationResult.js +0 -106
  585. package/dist/server/permissionFailure.js +0 -12
  586. package/dist/server/registerApplicationTools/readiness.js +0 -50
  587. package/dist/server/registerEvidenceResources.js +0 -315
  588. package/dist/server/registerJavaScriptApplicationGraphResource.js +0 -65
  589. package/dist/server/registerReconstructionObligationLedgerResource.js +0 -32
  590. package/dist/server/registerReconstructionReadinessResource.js +0 -32
@@ -2,57 +2,21 @@ import { createHash } from "node:crypto";
2
2
  import { z } from "zod";
3
3
  import { sanitizeBrowserUrl } from "../domain/browserObservation.js";
4
4
  import { browserStepArtifactsSchema, } from "../domain/browserScenarioCapture.js";
5
- const TEXT_ARTIFACT_MAX_BYTES = 1_048_576;
6
5
  const historyValueSchema = z.strictObject({
7
6
  length: z.number().int().min(0),
8
- navigation_entries: z
9
- .array(z.strictObject({
7
+ navigation_entries: z.array(z.strictObject({
10
8
  type: z.string(),
11
9
  name: z.string(),
12
- }))
13
- .max(10_000),
10
+ })),
14
11
  });
15
12
  const storageValueSchema = z.strictObject({
16
- local_storage: z.array(z.tuple([z.string(), z.string()])).max(10_000),
17
- session_storage: z.array(z.tuple([z.string(), z.string()])).max(10_000),
13
+ local_storage: z.array(z.tuple([z.string(), z.string()])),
14
+ session_storage: z.array(z.tuple([z.string(), z.string()])),
18
15
  });
19
- /** Shared retained-count budget for one scenario's screenshot artifacts. */
20
- export class BrowserScenarioCaptureBudget {
21
- maximumScreenshots;
22
- maximumMetadataBytes;
23
- screenshotCount = 0;
24
- metadataBytes = 0;
25
- constructor(maximumScreenshots, maximumMetadataBytes) {
26
- this.maximumScreenshots = maximumScreenshots;
27
- this.maximumMetadataBytes = maximumMetadataBytes;
28
- }
29
- claimScreenshot() {
30
- if (this.screenshotCount >= this.maximumScreenshots)
31
- return false;
32
- this.screenshotCount += 1;
33
- return true;
34
- }
35
- claimMetadata(bytes) {
36
- if (this.metadataBytes + bytes > this.maximumMetadataBytes)
37
- return false;
38
- this.metadataBytes += bytes;
39
- return true;
40
- }
41
- }
42
16
  const notRequested = () => ({ state: "not_requested" });
43
17
  const missing = (reason) => ({ state: "missing", reason });
44
- const truncated = (observed, retained, reason) => ({
45
- state: "truncated",
46
- observed,
47
- retained,
48
- reason,
49
- });
50
- const textArtifact = (text, maximumBytes, budget) => {
18
+ const textArtifact = (text) => {
51
19
  const bytes = Buffer.from(text);
52
- if (bytes.byteLength > maximumBytes)
53
- return truncated(bytes.byteLength, 0, `artifact exceeds ${maximumBytes} bytes`);
54
- if (!budget.claimMetadata(bytes.byteLength))
55
- return truncated(bytes.byteLength, 0, "scenario metadata byte limit reached");
56
20
  return {
57
21
  state: "captured",
58
22
  value: {
@@ -62,15 +26,7 @@ const textArtifact = (text, maximumBytes, budget) => {
62
26
  },
63
27
  };
64
28
  };
65
- const metadataArtifact = (value, budget) => {
66
- const bytes = Buffer.byteLength(JSON.stringify(value));
67
- return budget.claimMetadata(bytes)
68
- ? { state: "captured", value }
69
- : truncated(bytes, 0, "scenario metadata byte limit reached");
70
- };
71
- const captureScreenshot = async (page, scenario, budget) => {
72
- if (!budget.claimScreenshot())
73
- return truncated(1, 0, "scenario screenshot count limit reached");
29
+ const captureScreenshot = async (page) => {
74
30
  try {
75
31
  const bytes = await page.screenshot({
76
32
  type: "png",
@@ -78,13 +34,10 @@ const captureScreenshot = async (page, scenario, budget) => {
78
34
  animations: "disabled",
79
35
  caret: "hide",
80
36
  });
81
- if (bytes.byteLength > scenario.limits.max_screenshot_bytes)
82
- return truncated(bytes.byteLength, 0, "screenshot byte limit reached");
83
37
  const sha256 = createHash("sha256").update(bytes).digest("hex");
84
38
  return {
85
39
  state: "captured",
86
40
  value: {
87
- uri: `rea://web-screenshot/sha256/${sha256}`,
88
41
  sha256,
89
42
  bytes: bytes.byteLength,
90
43
  media_type: "image/png",
@@ -97,25 +50,19 @@ const captureScreenshot = async (page, scenario, budget) => {
97
50
  }
98
51
  };
99
52
  const captureDom = async (input) => {
100
- const { page, secrets, maximumBytes, maximumNodes, budget } = input;
53
+ const { page, secrets } = input;
101
54
  try {
102
- const nodes = await page.locator("*").count();
103
- if (nodes > maximumNodes)
104
- return truncated(nodes, 0, "DOM node limit reached");
105
- return textArtifact(secrets.redact(await page.content()), Math.min(maximumBytes, TEXT_ARTIFACT_MAX_BYTES), budget);
55
+ return textArtifact(secrets.redact(await page.content()));
106
56
  }
107
57
  catch {
108
58
  return missing("DOM capture failed");
109
59
  }
110
60
  };
111
61
  const captureAccessibility = async (input) => {
112
- const { page, secrets, maximumBytes, maximumNodes, budget } = input;
62
+ const { page, secrets } = input;
113
63
  try {
114
64
  const text = await page.locator("html").ariaSnapshot();
115
- const nodes = text.split("\n").filter((line) => line.trim() !== "").length;
116
- if (nodes > maximumNodes)
117
- return truncated(nodes, 0, "accessibility node limit reached");
118
- return textArtifact(secrets.redact(text), Math.min(maximumBytes, TEXT_ARTIFACT_MAX_BYTES), budget);
65
+ return textArtifact(secrets.redact(text));
119
66
  }
120
67
  catch {
121
68
  return missing("accessibility capture failed");
@@ -132,7 +79,7 @@ const navigationType = (value) => {
132
79
  return "unknown";
133
80
  }
134
81
  };
135
- const captureHistory = async (page, budget) => {
82
+ const captureHistory = async (page) => {
136
83
  try {
137
84
  const raw = historyValueSchema.parse(await page.evaluate(`(() => ({
138
85
  length: window.history.length,
@@ -143,8 +90,6 @@ const captureHistory = async (page, budget) => {
143
90
  })
144
91
  )
145
92
  }))()`));
146
- if (raw.navigation_entries.length > 256)
147
- return truncated(raw.navigation_entries.length, 0, "navigation history entry limit reached");
148
93
  const value = {
149
94
  length: raw.length,
150
95
  current_url: sanitizeBrowserUrl(page.url()),
@@ -153,25 +98,20 @@ const captureHistory = async (page, budget) => {
153
98
  name: sanitizeBrowserUrl(name),
154
99
  })),
155
100
  };
156
- return metadataArtifact(value, budget);
101
+ return { state: "captured", value };
157
102
  }
158
103
  catch {
159
104
  return missing("history capture failed");
160
105
  }
161
106
  };
162
107
  const captureStorage = async (input) => {
163
- const { context, page, scenario, secrets, budget } = input;
108
+ const { context, page, scenario, secrets } = input;
164
109
  try {
165
110
  const cookies = await context.cookies(scenario.allowed_origins);
166
111
  const pageStorage = storageValueSchema.parse(await page.evaluate(`(() => ({
167
112
  local_storage: Object.entries(window.localStorage),
168
113
  session_storage: Object.entries(window.sessionStorage)
169
114
  }))()`));
170
- const observed = cookies.length +
171
- pageStorage.local_storage.length +
172
- pageStorage.session_storage.length;
173
- if (observed > scenario.limits.max_storage_entries)
174
- return truncated(observed, 0, "storage entry limit reached");
175
115
  const value = {
176
116
  cookies: cookies.map((cookie) => ({
177
117
  name: cookie.name,
@@ -191,7 +131,7 @@ const captureStorage = async (input) => {
191
131
  ...secrets.fingerprint(value),
192
132
  })),
193
133
  };
194
- return metadataArtifact(value, budget);
134
+ return { state: "captured", value };
195
135
  }
196
136
  catch {
197
137
  return missing("storage capture failed");
@@ -207,7 +147,7 @@ const isAllowedPage = (page, allowedOrigins) => {
207
147
  };
208
148
  /** Capture selected step artifacts without retaining data after scope loss. */
209
149
  export const capturePlaywrightStepArtifacts = async (input) => {
210
- const { context, page, scenario, secrets, requested, budget } = input;
150
+ const { context, page, scenario, secrets, requested } = input;
211
151
  const allowed = isAllowedPage(page, new Set(scenario.allowed_origins));
212
152
  const denied = () => missing("current page is outside approved origins");
213
153
  const state = (kind, capture) => !requested.has(kind)
@@ -216,23 +156,14 @@ export const capturePlaywrightStepArtifacts = async (input) => {
216
156
  ? capture()
217
157
  : Promise.resolve(denied());
218
158
  return browserStepArtifactsSchema.parse({
219
- screenshot: await state("screenshot", () => captureScreenshot(page, scenario, budget)),
220
- dom: await state("dom", () => captureDom({
221
- page,
222
- secrets,
223
- maximumBytes: scenario.limits.max_total_metadata_bytes,
224
- maximumNodes: scenario.limits.max_dom_nodes,
225
- budget,
226
- })),
227
- accessibility: await state("accessibility", () => captureAccessibility({
228
- page,
229
- secrets,
230
- maximumBytes: scenario.limits.max_total_metadata_bytes,
231
- maximumNodes: scenario.limits.max_accessibility_nodes,
232
- budget,
159
+ screenshot: await state("screenshot", () => captureScreenshot(page)),
160
+ dom: await state("dom", () => captureDom({ page, secrets })),
161
+ accessibility: await state("accessibility", () => captureAccessibility({ page, secrets })),
162
+ url: await state("url", async () => ({
163
+ state: "captured",
164
+ value: sanitizeBrowserUrl(page.url()),
233
165
  })),
234
- url: await state("url", async () => metadataArtifact(sanitizeBrowserUrl(page.url()), budget)),
235
- history: await state("history", () => captureHistory(page, budget)),
236
- storage: await state("storage", () => captureStorage({ context, page, scenario, secrets, budget })),
166
+ history: await state("history", () => captureHistory(page)),
167
+ storage: await state("storage", () => captureStorage({ context, page, scenario, secrets })),
237
168
  });
238
169
  };
@@ -79,11 +79,9 @@ const configureAttachedEnvironment = async (context, page, scenario) => {
79
79
  await session.detach();
80
80
  }
81
81
  };
82
- export const openPlaywrightScenarioBrowser = async (scenario, environment, maximumTimeoutMs) => {
82
+ export const openPlaywrightScenarioBrowser = async (scenario, environment) => {
83
83
  if (scenario.browser.mode === "connect") {
84
- const browser = await chromium.connectOverCDP(scenario.browser.cdp_endpoint, {
85
- timeout: Math.min(scenario.limits.navigation_timeout_ms, maximumTimeoutMs),
86
- });
84
+ const browser = await chromium.connectOverCDP(scenario.browser.cdp_endpoint, { timeout: 0 });
87
85
  try {
88
86
  const target = await findConnectedPage(browser, scenario.browser.target_id, new Set(scenario.allowed_origins));
89
87
  await configureAttachedEnvironment(target.context, target.page, scenario);
@@ -115,7 +113,7 @@ export const openPlaywrightScenarioBrowser = async (scenario, environment, maxim
115
113
  handleSIGHUP: false,
116
114
  handleSIGINT: false,
117
115
  handleSIGTERM: false,
118
- timeout: maximumTimeoutMs,
116
+ timeout: 0,
119
117
  });
120
118
  const browser = context.browser();
121
119
  if (browser === null) {
@@ -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,16 +190,15 @@ 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
203
  catch (cause) {
205
204
  void opening
@@ -208,20 +207,18 @@ export class PlaywrightScenarioSession {
208
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
224
  catch (cause) {
@@ -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
  }