rea-agents 3.1.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 (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
@@ -4,7 +4,7 @@ import { redactSensitiveText } from "./SensitiveTextCapture.js";
4
4
  const OPERATION = "capture_electron_scenario";
5
5
  const hookEventSchema = z.strictObject({
6
6
  sequence: z.number().int().min(1),
7
- correlation_id: z.string().max(256).nullable(),
7
+ correlation_id: z.string().nullable(),
8
8
  kind: z.enum([
9
9
  "main-handler-invocation",
10
10
  "main-event-invocation",
@@ -30,10 +30,9 @@ const hookEventSchema = z.strictObject({
30
30
  "updater",
31
31
  "error",
32
32
  ]),
33
- event: z.string().max(128).nullable(),
33
+ event: z.string().nullable(),
34
34
  phase: z.enum(["attempted", "completed", "blocked", "failed", "observed"]),
35
- channel: z.string().max(1_024).nullable(),
36
- channel_truncated: z.boolean().default(false),
35
+ channel: z.string().nullable(),
37
36
  direction: z
38
37
  .enum([
39
38
  "renderer-to-main",
@@ -42,17 +41,16 @@ const hookEventSchema = z.strictObject({
42
41
  "utility-to-main",
43
42
  ])
44
43
  .nullable(),
45
- sender: z.string().max(256).nullable(),
46
- receiver: z.string().max(256).nullable(),
47
- frame: z.string().max(256).nullable(),
48
- target: z.string().max(256).nullable(),
49
- argument_shapes: z.array(z.string().max(64)).max(32),
50
- argument_shapes_truncated: z.boolean().default(false),
51
- result_shape: z.string().max(64).nullable(),
52
- process_type: z.string().max(128).nullable(),
53
- source: z.string().max(64),
44
+ sender: z.string().nullable(),
45
+ receiver: z.string().nullable(),
46
+ frame: z.string().nullable(),
47
+ target: z.string().nullable(),
48
+ argument_shapes: z.array(z.string()),
49
+ result_shape: z.string().nullable(),
50
+ process_type: z.string().nullable(),
51
+ source: z.string(),
54
52
  capture_method: z.enum(["api-wrapper", "event-emitter", "process-hook"]),
55
- artifact_path: z.string().max(16_384).nullable(),
53
+ artifact_path: z.string().nullable(),
56
54
  artifact_sha256: z
57
55
  .string()
58
56
  .regex(/^[a-f0-9]{64}$/u)
@@ -60,27 +58,26 @@ const hookEventSchema = z.strictObject({
60
58
  error: z.boolean(),
61
59
  });
62
60
  const hookSnapshotSchema = z.strictObject({
63
- events: z.array(hookEventSchema).max(20_000),
61
+ events: z.array(hookEventSchema),
64
62
  observed: z.number().int().min(0),
65
63
  observed_ipc: z.number().int().min(0),
66
64
  observed_runtime: z.number().int().min(0),
67
- truncated: z.boolean(),
68
65
  hook_error: z.boolean(),
69
66
  });
70
67
  const metricSchema = z.strictObject({
71
68
  pid: z.number().int().min(1),
72
- type: z.string().min(1).max(128),
73
- name: z.string().max(256).nullable(),
74
- service_name: z.string().max(256).nullable(),
69
+ type: z.string().min(1),
70
+ name: z.string().nullable(),
71
+ service_name: z.string().nullable(),
75
72
  });
76
73
  const windowMetadataSchema = z.strictObject({
77
- window_id: z.string().max(256),
78
- web_contents_id: z.string().max(256),
74
+ window_id: z.string(),
75
+ web_contents_id: z.string(),
79
76
  visible: z.boolean().nullable(),
80
77
  destroyed: z.boolean(),
81
78
  });
82
- /** Run bounded, explicit actions against provider-owned Electron windows. */
83
- export const runElectronActions = async (application, input, options, deadline) => {
79
+ /** Run explicit actions against provider-owned Electron windows. */
80
+ export const runElectronActions = async (application, input, options) => {
84
81
  const actions = [];
85
82
  for (const action of input.actions) {
86
83
  if (options.signal?.aborted === true)
@@ -89,18 +86,13 @@ export const runElectronActions = async (application, input, options, deadline)
89
86
  const windowIndex = actionWindowIndex(action);
90
87
  let selectedWindow;
91
88
  try {
92
- const remaining = deadline - Date.now();
93
- if (remaining <= 0)
94
- throw new BrowserObservationError(OPERATION, "timeout");
95
89
  selectedWindow =
96
90
  windowIndex === null
97
91
  ? undefined
98
92
  : await waitForWindow({
99
93
  application,
100
94
  windowIndex,
101
- timeout: input.limits.action_timeout_ms,
102
95
  signal: options.signal,
103
- deadline,
104
96
  });
105
97
  if ((action.kind === "click" ||
106
98
  action.kind === "renderer-reload" ||
@@ -111,10 +103,7 @@ export const runElectronActions = async (application, input, options, deadline)
111
103
  application,
112
104
  action,
113
105
  selectedWindow,
114
- remaining,
115
- actionTimeoutMs: input.limits.action_timeout_ms,
116
106
  options,
117
- deadline,
118
107
  });
119
108
  actions.push({
120
109
  step_id: action.step_id,
@@ -141,31 +130,29 @@ export const runElectronActions = async (application, input, options, deadline)
141
130
  }
142
131
  return actions;
143
132
  };
144
- const runAction = async ({ application, action, selectedWindow, remaining, actionTimeoutMs, options, deadline, }) => {
133
+ const runAction = async ({ application, action, selectedWindow, options, }) => {
145
134
  switch (action.kind) {
146
135
  case "click":
147
136
  if (selectedWindow === undefined)
148
137
  throw new BrowserObservationError(OPERATION, "window_not_found");
149
138
  await runWithExecutionLimits(selectedWindow.locator(action.selector).click({
150
- timeout: Math.min(actionTimeoutMs, remaining),
151
- }), options.signal, deadline);
139
+ timeout: 0,
140
+ }), options.signal);
152
141
  return;
153
142
  case "wait": {
154
143
  const page = selectedWindow ??
155
144
  (await application.firstWindow({
156
- timeout: Math.min(actionTimeoutMs, remaining),
145
+ timeout: 0,
157
146
  }));
158
- await runWithExecutionLimits(page.waitForTimeout(Math.min(action.duration_ms, remaining)), options.signal, deadline);
159
- if (action.duration_ms > remaining)
160
- throw new BrowserObservationError(OPERATION, "timeout");
147
+ await runWithExecutionLimits(page.waitForTimeout(action.duration_ms), options.signal);
161
148
  return;
162
149
  }
163
150
  case "renderer-reload":
164
151
  if (selectedWindow === undefined)
165
152
  throw new BrowserObservationError(OPERATION, "window_not_found");
166
153
  await runWithExecutionLimits(selectedWindow.reload({
167
- timeout: Math.min(actionTimeoutMs, remaining),
168
- }), options.signal, deadline);
154
+ timeout: 0,
155
+ }), options.signal);
169
156
  return;
170
157
  case "renderer-crash": {
171
158
  const crashed = await runWithExecutionLimits(application.evaluate(({ BrowserWindow }, index) => {
@@ -174,13 +161,13 @@ const runAction = async ({ application, action, selectedWindow, remaining, actio
174
161
  return false;
175
162
  candidate.webContents.forcefullyCrashRenderer();
176
163
  return true;
177
- }, action.window_index), options.signal, deadline);
164
+ }, action.window_index), options.signal);
178
165
  if (!crashed)
179
166
  throw new BrowserObservationError(OPERATION, "window_not_found");
180
167
  return;
181
168
  }
182
169
  case "deep-link":
183
- await runWithExecutionLimits(emitDeepLink(application, action), options.signal, deadline);
170
+ await runWithExecutionLimits(emitDeepLink(application, action), options.signal);
184
171
  return;
185
172
  }
186
173
  };
@@ -196,31 +183,29 @@ const actionWindowIndex = (action) => {
196
183
  return null;
197
184
  }
198
185
  };
199
- const waitForWindow = async ({ application, windowIndex, timeout, signal, deadline, }) => {
200
- const stopAt = Math.min(deadline, Date.now() + timeout);
201
- while (Date.now() < stopAt) {
186
+ const waitForWindow = async ({ application, windowIndex, signal, }) => {
187
+ while (true) {
202
188
  if (signal?.aborted === true)
203
189
  throw new BrowserObservationError(OPERATION, "cancelled");
204
190
  const window = application.windows()[windowIndex];
205
191
  if (window !== undefined)
206
192
  return window;
207
- await runWithExecutionLimits(new Promise((resolve) => setTimeout(resolve, 25)), signal, stopAt);
193
+ await runWithExecutionLimits(new Promise((resolve) => setTimeout(resolve, 25)), signal);
208
194
  }
209
- throw new BrowserObservationError(OPERATION, "window_not_found");
210
195
  };
211
196
  const emitDeepLink = (application, action) => application.evaluate(({ app }, payload) => {
212
197
  if (payload.delivery === "open-url")
213
198
  return app.emit("open-url", { preventDefault: () => undefined }, payload.url);
214
199
  return app.emit("second-instance", {}, [payload.url], "", {});
215
200
  }, { delivery: action.delivery, url: action.url });
216
- /** Read the current Electron windows, metrics, and bounded hook snapshot. */
201
+ /** Read the current Electron windows, metrics, and hook snapshot. */
217
202
  // oxlint-disable-next-line max-lines-per-function -- one state read must share one capture boundary.
218
- export const readApplicationState = async (application, maxWindows) => {
203
+ export const readApplicationState = async (application) => {
219
204
  const pages = application.windows();
220
- const pageSnapshotsPromise = Promise.all(pages.slice(0, maxWindows).map(async (page, index) => ({
205
+ const pageSnapshotsPromise = Promise.all(pages.map(async (page, index) => ({
221
206
  index,
222
- url: page.url().slice(0, 65_536),
223
- title: (await page.title()).slice(0, 16_384),
207
+ url: page.url(),
208
+ title: await page.title(),
224
209
  })));
225
210
  const windowMetadataPromise = application
226
211
  .evaluate(({ BrowserWindow }) => BrowserWindow.getAllWindows().map((window) => ({
@@ -253,7 +238,6 @@ export const readApplicationState = async (application, maxWindows) => {
253
238
  observed: 0,
254
239
  observed_ipc: 0,
255
240
  observed_runtime: 0,
256
- truncated: false,
257
241
  hook_error: true,
258
242
  };
259
243
  })
@@ -279,32 +263,33 @@ export const readApplicationState = async (application, maxWindows) => {
279
263
  destroyed: metadata.destroyed,
280
264
  };
281
265
  }),
282
- windowsTruncated: pages.length > maxWindows,
283
266
  metrics: processMetrics,
284
267
  electronVersion,
285
268
  hookSnapshot,
286
269
  };
287
270
  };
288
- /** Apply a deadline and caller cancellation to one Playwright operation. */
271
+ /** Apply an optional lifecycle deadline and caller cancellation to an operation. */
289
272
  export const runWithExecutionLimits = async (operation, signal, deadline) => {
290
273
  if (signal?.aborted === true)
291
274
  throw new BrowserObservationError(OPERATION, "cancelled");
275
+ if (signal === undefined && deadline === undefined)
276
+ return operation;
292
277
  let timer;
293
278
  let abortListener;
294
- const timeout = new Promise((_, reject) => {
295
- timer = setTimeout(() => reject(new BrowserObservationError(OPERATION, "timeout")), Math.max(1, deadline - Date.now()));
296
- });
297
- const cancellation = signal === undefined
298
- ? timeout
299
- : Promise.race([
300
- timeout,
301
- new Promise((_, reject) => {
302
- abortListener = () => reject(new BrowserObservationError(OPERATION, "cancelled"));
303
- signal.addEventListener("abort", abortListener, { once: true });
304
- }),
305
- ]);
279
+ const interruptions = [];
280
+ if (deadline !== undefined)
281
+ interruptions.push(new Promise((_, reject) => {
282
+ timer = setTimeout(() => reject(new BrowserObservationError(OPERATION, "timeout")), Math.max(1, deadline - Date.now()));
283
+ }));
284
+ if (signal !== undefined)
285
+ interruptions.push(new Promise((_, reject) => {
286
+ abortListener = () => reject(new BrowserObservationError(OPERATION, "cancelled"));
287
+ signal.addEventListener("abort", abortListener, { once: true });
288
+ }));
306
289
  try {
307
- return await Promise.race([operation, cancellation]);
290
+ return interruptions.length === 0
291
+ ? await operation
292
+ : await Promise.race([operation, ...interruptions]);
308
293
  }
309
294
  finally {
310
295
  if (timer !== undefined)
@@ -320,5 +305,5 @@ const safeActionErrorMessage = (cause, action) => {
320
305
  .sort((left, right) => right.length - left.length);
321
306
  for (const value of inputValues)
322
307
  message = message.split(value).join("<redacted-input>");
323
- return redactSensitiveText(message).slice(0, 1_024);
308
+ return redactSensitiveText(message);
324
309
  };
@@ -9,6 +9,7 @@ import { err, ok } from "../domain/result.js";
9
9
  import { cleanupOwnedProcessGroup, cleanupWindowsProcessTree, observeOwnedProcessLineage, selectCapturedProcessGroupIds, verifyNoTokenOwnedProcesses, } from "../process/ProcessOwnership.js";
10
10
  import { runElectronActions, readApplicationState, runWithExecutionLimits, } from "./PlaywrightElectronActiveActions.js";
11
11
  const OPERATION = "capture_electron_scenario";
12
+ const STARTUP_TIMEOUT_MS = 60_000;
12
13
  /** Public identity for provider-owned Electron runtime experiments. */
13
14
  export const PLAYWRIGHT_ELECTRON_ACTIVE_PROVIDER_IDENTITY = Object.freeze({
14
15
  id: "rea-playwright-electron-active",
@@ -78,11 +79,7 @@ const createCoverage = (hookSnapshot) => {
78
79
  unavailableEventFamilies.add("renderer-ipc");
79
80
  }
80
81
  return {
81
- status: hookSnapshot.hook_error
82
- ? "hook_conflict"
83
- : hookSnapshot.truncated
84
- ? "capture_truncated"
85
- : "partial_attach",
82
+ status: hookSnapshot.hook_error ? "hook_conflict" : "partial_attach",
86
83
  observed_event_families: observedEventFamilies,
87
84
  unavailable_event_families: [...unavailableEventFamilies].sort(),
88
85
  observed_roles: observedRoles,
@@ -103,14 +100,14 @@ export class PlaywrightElectronActiveProvider {
103
100
  try {
104
101
  if (options.signal?.aborted === true)
105
102
  throw new BrowserObservationError(OPERATION, "cancelled");
106
- const deadline = Date.now() + input.limits.max_duration_ms;
103
+ const startupDeadline = Date.now() + STARTUP_TIMEOUT_MS;
107
104
  const paths = await canonicalPaths(input);
108
105
  application = await electron.launch({
109
106
  executablePath: paths.executable,
110
107
  cwd: paths.root,
111
- env: safeElectronEnvironment(input.limits.max_ipc_events, input.limits.max_runtime_events, runId),
108
+ env: safeElectronEnvironment(runId),
112
109
  args: ["-r", hookPath, paths.application, ...input.args],
113
- timeout: Math.max(1, deadline - Date.now()),
110
+ timeout: Math.max(1, startupDeadline - Date.now()),
114
111
  });
115
112
  const leaderPid = application.process().pid;
116
113
  if (typeof leaderPid !== "number" ||
@@ -125,8 +122,8 @@ export class PlaywrightElectronActiveProvider {
125
122
  expectedCommand: paths.executable,
126
123
  sweepTokenOwnedProcesses: true,
127
124
  };
128
- const actions = await runElectronActions(application, input, options, deadline);
129
- const state = await runWithExecutionLimits(readApplicationState(application, input.limits.max_windows), options.signal, deadline);
125
+ const actions = await runElectronActions(application, input, options);
126
+ const state = await runWithExecutionLimits(readApplicationState(application), options.signal);
130
127
  outcome = ok(createResult(paths, input, actions, state));
131
128
  }
132
129
  catch (cause) {
@@ -211,7 +208,6 @@ const createResult = (paths, input, actions, state) => {
211
208
  const { hookSnapshot } = state;
212
209
  const ipcEvents = hookSnapshot.events.filter(({ kind }) => ipcEventKinds.has(kind));
213
210
  return electronActiveObservationResultSchema.parse({
214
- schema_version: 1,
215
211
  application: {
216
212
  executable_path: paths.executable,
217
213
  application_path: paths.application,
@@ -220,37 +216,26 @@ const createResult = (paths, input, actions, state) => {
220
216
  cleanup: "terminated-owned-process",
221
217
  },
222
218
  actions,
223
- windows: state.windows.slice(0, input.limits.max_windows),
224
- windows_truncated: state.windowsTruncated,
219
+ windows: state.windows,
225
220
  processes: {
226
- items: state.metrics.slice(0, input.limits.max_processes),
227
- truncated: state.metrics.length > input.limits.max_processes,
221
+ items: state.metrics,
228
222
  },
229
223
  ipc: {
230
- events: ipcEvents.slice(0, input.limits.max_ipc_events),
224
+ events: ipcEvents,
231
225
  observed: hookSnapshot.observed_ipc,
232
- retained: Math.min(ipcEvents.length, input.limits.max_ipc_events),
233
- truncated: hookSnapshot.truncated ||
234
- ipcEvents.length > input.limits.max_ipc_events,
235
226
  },
236
227
  timeline: {
237
- events: hookSnapshot.events.slice(0, input.limits.max_runtime_events),
228
+ events: hookSnapshot.events,
238
229
  observed: hookSnapshot.observed,
239
- retained: Math.min(hookSnapshot.events.length, input.limits.max_runtime_events),
240
- truncated: hookSnapshot.truncated ||
241
- hookSnapshot.events.length > input.limits.max_runtime_events,
242
230
  },
243
231
  coverage: createCoverage(hookSnapshot),
244
232
  limitations: [
245
- "IPC payloads are represented only by bounded value shapes; values are never retained, channels are capped at 1,024 characters, and argument-shape arrays at 32 entries.",
233
+ "IPC payloads are represented by value shapes; payload values are never retained.",
246
234
  "IPC direction and sender/receiver identifiers are observed only where Electron exposes them at the hooked boundary.",
247
- "The runtime timeline records bounded lifecycle, navigation, shell, permission, popup, download, protocol, preload, native-addon, process, and IPC events; activity before hook installation is unavailable.",
235
+ "The runtime timeline records lifecycle, navigation, shell, permission, popup, download, protocol, preload, native-addon, process, and IPC events; activity before hook installation is unavailable.",
248
236
  "The preload and renderer process contexts are not instrumented by the main-process -r hook; preload configuration and contextBridge API-shape events are main-boundary observations, not proof of renderer-side execution.",
249
237
  "Process metrics are an Electron API snapshot and do not prove hostile-local-user isolation.",
250
238
  "External shell opens, external navigation, permission grants, downloads, popup windows, updater relaunches, and OS integration are blocked and recorded by the active hook; other application filesystem and network behavior is not sandboxed by this provider.",
251
- ...(state.windowsTruncated
252
- ? ["Windows beyond max_windows were not retained."]
253
- : []),
254
239
  ...(hookSnapshot.hook_error
255
240
  ? ["The active IPC hook could not be installed."]
256
241
  : []),
@@ -267,7 +252,7 @@ const canonicalPaths = async (input) => {
267
252
  throw new BrowserObservationError(OPERATION, "target_not_allowed");
268
253
  return { executable, application, root };
269
254
  };
270
- const safeElectronEnvironment = (maxIpcEvents, maxRuntimeEvents, runId) => Object.fromEntries([
255
+ const safeElectronEnvironment = (runId) => Object.fromEntries([
271
256
  ...[
272
257
  "HOME",
273
258
  "LANG",
@@ -280,11 +265,6 @@ const safeElectronEnvironment = (maxIpcEvents, maxRuntimeEvents, runId) => Objec
280
265
  ]
281
266
  .map((name) => [name, process.env[name]])
282
267
  .filter((entry) => entry[1] !== undefined),
283
- ["REA_ELECTRON_ACTIVE_MAX_IPC_EVENTS", String(maxIpcEvents)],
284
- [
285
- "REA_ELECTRON_ACTIVE_MAX_RUNTIME_EVENTS",
286
- String(maxRuntimeEvents),
287
- ],
288
268
  ["REA_PROCESS_RUN_ID", runId],
289
269
  ]);
290
270
  const providerError = (cause) => cause instanceof AnalysisError
@@ -1,13 +1,25 @@
1
1
  import { AnalysisCancelledError, AnalysisTimeoutError, } from "../domain/errors.js";
2
2
  const OPERATION = "capture_browser_scenario";
3
- export const withPlaywrightExecutionBoundary = (work, maximumTimeoutMs, signal) => {
4
- if (maximumTimeoutMs <= 0)
5
- return Promise.reject(new AnalysisTimeoutError(OPERATION, maximumTimeoutMs));
3
+ export const withPlaywrightExecutionBoundary = (work, timeoutMs, signal) => {
4
+ if (timeoutMs !== undefined && timeoutMs <= 0)
5
+ return Promise.reject(new AnalysisTimeoutError(OPERATION, timeoutMs));
6
6
  if (signal?.aborted === true)
7
7
  return Promise.reject(new AnalysisCancelledError(OPERATION));
8
8
  return new Promise((resolve, reject) => {
9
9
  let settled = false;
10
10
  let timer;
11
+ const deadline = timeoutMs === undefined ? undefined : Date.now() + timeoutMs;
12
+ const scheduleTimeout = () => {
13
+ if (deadline === undefined)
14
+ return;
15
+ const remaining = deadline - Date.now();
16
+ if (remaining <= 0) {
17
+ fail(new AnalysisTimeoutError(OPERATION, timeoutMs ?? 0));
18
+ return;
19
+ }
20
+ timer = setTimeout(scheduleTimeout, Math.min(remaining, 2_147_483_647));
21
+ timer.unref();
22
+ };
11
23
  const cleanup = () => {
12
24
  if (timer !== undefined)
13
25
  clearTimeout(timer);
@@ -30,8 +42,7 @@ export const withPlaywrightExecutionBoundary = (work, maximumTimeoutMs, signal)
30
42
  const onAbort = () => {
31
43
  fail(new AnalysisCancelledError(OPERATION));
32
44
  };
33
- timer = setTimeout(() => fail(new AnalysisTimeoutError(OPERATION, maximumTimeoutMs)), maximumTimeoutMs);
34
- timer.unref();
45
+ scheduleTimeout();
35
46
  signal?.addEventListener("abort", onAbort, { once: true });
36
47
  if (signal?.aborted === true) {
37
48
  onAbort();
@@ -14,15 +14,13 @@ const resolveLocator = (page, locator) => {
14
14
  const resolveValue = (value, secrets) => secrets.value(value);
15
15
  /** Execute one admitted declarative action with no caller-supplied code. */
16
16
  export const performPlaywrightScenarioAction = async (input) => {
17
- const { page, action, secrets, defaultTimeoutMs, maximumTimeoutMs } = input;
17
+ const { page, action, secrets } = input;
18
18
  const timeout = "timeout_ms" in action ? action.timeout_ms : undefined;
19
- const options = {
20
- timeout: Math.min(timeout ?? defaultTimeoutMs, maximumTimeoutMs),
21
- };
19
+ const options = timeout === undefined ? {} : { timeout };
22
20
  switch (action.action) {
23
21
  case "goto":
24
22
  await page.goto(secrets.url(action.destination), {
25
- timeout: options.timeout,
23
+ ...options,
26
24
  waitUntil: action.wait_until,
27
25
  });
28
26
  return;
@@ -55,8 +53,6 @@ export const performPlaywrightScenarioAction = async (input) => {
55
53
  });
56
54
  return;
57
55
  case "wait_for_timeout":
58
- if (action.duration_ms > maximumTimeoutMs)
59
- throw new Error("Scenario duration limit reached");
60
56
  await page.waitForTimeout(action.duration_ms);
61
57
  }
62
58
  };