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
@@ -38,8 +38,7 @@ export const captureCdpScreenshot = async (context) => {
38
38
  }
39
39
  const encoded = stringValue(result?.data);
40
40
  const bytes = encoded === undefined ? undefined : decodeCanonicalBase64(encoded);
41
- if (bytes === undefined ||
42
- bytes.byteLength > context.input.maximum_image_bytes)
41
+ if (bytes === undefined)
43
42
  throw new BrowserObservationError("inspect_web_page", "payload_limit");
44
43
  const dimensions = pngDimensions(bytes);
45
44
  if (navigation.leftScope)
@@ -57,7 +56,6 @@ export const captureCdpScreenshot = async (context) => {
57
56
  terminal: true,
58
57
  });
59
58
  return {
60
- schema_version: 1,
61
59
  browser: context.discovery.version,
62
60
  target: {
63
61
  target_id: context.target.id,
@@ -94,8 +92,8 @@ const pngDimensions = (bytes) => {
94
92
  throw new BrowserObservationError("inspect_web_page", "protocol_error");
95
93
  const width = bytes.readUInt32BE(16);
96
94
  const height = bytes.readUInt32BE(20);
97
- if (width === 0 || height === 0 || width * height > 32_000_000)
98
- throw new BrowserObservationError("inspect_web_page", "payload_limit");
95
+ if (width === 0 || height === 0)
96
+ throw new BrowserObservationError("inspect_web_page", "protocol_error");
99
97
  return { width, height };
100
98
  };
101
99
  const PNG_SIGNATURE = Buffer.from([137, 80, 78, 71, 13, 10, 26, 10]);
@@ -40,8 +40,7 @@ const attachedSessionId = (value, operation) => {
40
40
  value === null ||
41
41
  !("sessionId" in value) ||
42
42
  typeof value.sessionId !== "string" ||
43
- value.sessionId.length === 0 ||
44
- value.sessionId.length > 256)
43
+ value.sessionId.length === 0)
45
44
  throw new BrowserObservationError(operation, "protocol_error");
46
45
  return value.sessionId;
47
46
  };
@@ -5,7 +5,7 @@ import { BrowserObservationError } from "../domain/errors.js";
5
5
  import { allowedSanitizedUrl, delayWithCancellation, numberValue, recordValue, recordsValue, stringValue, } from "./CdpCaptureValues.js";
6
6
  import { captureFrames, mainFrameUrl } from "./CdpCaptureDocuments.js";
7
7
  import { optionalCdpCommand } from "./CdpOptionalCommand.js";
8
- import { boundedSensitiveText } from "./SensitiveTextCapture.js";
8
+ import { redactSensitiveText } from "./SensitiveTextCapture.js";
9
9
  /** Discover WebMCP registrations without evaluating or invoking page code. */
10
10
  export const discoverWebMcp = async (context) => {
11
11
  const origins = new Set(context.input.allowed_origins);
@@ -19,7 +19,7 @@ export const discoverWebMcp = async (context) => {
19
19
  const initialUrl = mainFrameUrl(frameTree);
20
20
  if (allowedSanitizedUrl(initialUrl, origins) === undefined)
21
21
  throw new BrowserObservationError("inspect_web_page", "target_not_allowed");
22
- const frames = captureFrames(frameTree, origins, 1_000, completeness).items;
22
+ const frames = captureFrames(frameTree, origins, undefined, completeness).items;
23
23
  const frameUrls = new Map(frames.map((frame) => [
24
24
  frame.frame_id,
25
25
  {
@@ -57,7 +57,7 @@ export const discoverWebMcp = async (context) => {
57
57
  }
58
58
  else
59
59
  // CDP sends the enable response before the required toolsAdded replay.
60
- await delayWithCancellation(Math.max(context.input.observation_ms, 25), "discover_webmcp_tools", context.signal);
60
+ await delayWithCancellation(context.input.observation_ms, "discover_webmcp_tools", context.signal);
61
61
  await assertStableAuthorizedFrame(context, initialUrl, origins);
62
62
  return buildWebMcpResult({
63
63
  context,
@@ -96,7 +96,7 @@ const ingestFrameScopeEvent = (event, state) => {
96
96
  };
97
97
  const handleFrameDetached = (params, state) => {
98
98
  const frameId = stringValue(params.frameId);
99
- if (frameId === undefined || frameId.length > 256) {
99
+ if (frameId === undefined) {
100
100
  state.completeness.exclude("webmcp_tools", "invalid_protocol_value");
101
101
  return true;
102
102
  }
@@ -105,7 +105,7 @@ const handleFrameDetached = (params, state) => {
105
105
  };
106
106
  const handleFrameUpdate = (frame, state) => {
107
107
  const frameId = stringValue(frame?.id) ?? stringValue(frame?.frameId);
108
- if (frameId === undefined || frameId.length > 256) {
108
+ if (frameId === undefined) {
109
109
  state.completeness.exclude("webmcp_tools", "invalid_protocol_value");
110
110
  return true;
111
111
  }
@@ -173,10 +173,6 @@ const ingestWebMcpEvent = (options) => {
173
173
  const normalized = normalizeTool(declared, input, frames, completeness);
174
174
  if (normalized === undefined)
175
175
  continue;
176
- if (!tools.has(normalized.tool_key) && tools.size >= input.max_tools) {
177
- completeness.drop("webmcp_tools");
178
- continue;
179
- }
180
176
  tools.set(normalized.tool_key, normalized);
181
177
  }
182
178
  };
@@ -191,19 +187,19 @@ const normalizeTool = (value, input, frames, completeness) => {
191
187
  completeness.exclude("webmcp_tools", "out_of_target_scope");
192
188
  return undefined;
193
189
  }
194
- const description = boundedSensitiveText(stringValue(value.description) ?? "", 4_096).text;
190
+ const description = redactSensitiveText(stringValue(value.description) ?? "");
195
191
  const annotations = recordValue(value.annotations);
196
192
  return {
197
193
  tool_key: toolKey(frame.url, name),
198
- name: boundedSensitiveText(name, 512).text,
194
+ name: redactSensitiveText(name),
199
195
  description,
200
- frame_id: frameId.slice(0, 256),
196
+ frame_id: frameId,
201
197
  frame_url: frame.url,
202
198
  owner_origin: frame.origin,
203
199
  declaration_kind: numberValue(value.backendNodeId) === undefined
204
200
  ? "imperative"
205
201
  : "declarative",
206
- input_schema_shape: schemaShape(value.inputSchema, input, completeness),
202
+ input_schema_shape: schemaShape(value.inputSchema),
207
203
  annotations: {
208
204
  read_only: booleanOrNull(annotations?.readOnly),
209
205
  untrusted_content: booleanOrNull(annotations?.untrustedContent),
@@ -213,17 +209,13 @@ const normalizeTool = (value, input, frames, completeness) => {
213
209
  trust: "page-declared-untrusted",
214
210
  };
215
211
  };
216
- const schemaShape = (value, input, completeness) => {
212
+ const schemaShape = (value) => {
217
213
  if (recordValue(value) === undefined)
218
214
  return null;
219
215
  const encoded = JSON.stringify(value);
220
- const shape = inferJsonShape(encoded, {
221
- maximumBytes: input.max_schema_bytes,
222
- maximumNodes: input.max_schema_nodes,
223
- maximumDepth: input.max_schema_depth,
224
- });
225
- if (shape === null || shape.truncated)
226
- completeness.truncate("webmcp_tools");
216
+ const shape = inferJsonShape(encoded);
217
+ if (shape === null)
218
+ throw new BrowserObservationError("inspect_web_page", "protocol_error");
227
219
  return shape;
228
220
  };
229
221
  const registrationSource = (stack, allowedOrigins) => {
@@ -242,7 +234,6 @@ const buildWebMcpResult = (options) => {
242
234
  const targetUrl = mainFrameUrl(frameTree) ?? context.target.url;
243
235
  const sanitized = allowedSanitizedUrl(targetUrl, new Set(context.input.allowed_origins));
244
236
  return {
245
- schema_version: 1,
246
237
  browser: context.discovery.version,
247
238
  target: {
248
239
  target_id: context.target.id,
@@ -1,16 +1,9 @@
1
- import { realpath } from "node:fs/promises";
2
- import { isAbsolute, relative } from "node:path";
1
+ import { realpath, stat } from "node:fs/promises";
2
+ import { isAbsolute } from "node:path";
3
3
  import { fileURLToPath } from "node:url";
4
- /** Canonicalize operator roots before evaluating any Electron file target. */
5
- export const canonicalElectronRoots = async (roots) => {
6
- const canonical = [];
7
- for (const root of roots)
8
- canonical.push(await realpath(root));
9
- return [...new Set(canonical)].sort();
10
- };
11
- /** Resolve one file URL and reject host, encoding, and symlink root escapes. */
12
- export const authorizedElectronFile = async (value, roots) => {
13
- if (value.length > 65_536 || /%(?:2f|5c)/iu.test(value))
4
+ /** Resolve one local file URL while rejecting remote hosts and encoded separators. */
5
+ export const authorizedElectronFile = async (value) => {
6
+ if (/%(?:2f|5c)/iu.test(value))
14
7
  return undefined;
15
8
  let url;
16
9
  try {
@@ -35,16 +28,12 @@ export const authorizedElectronFile = async (value, roots) => {
35
28
  return undefined;
36
29
  let canonical;
37
30
  try {
31
+ if (!(await stat(path)).isFile())
32
+ return undefined;
38
33
  canonical = await realpath(path);
39
34
  }
40
35
  catch {
41
36
  return undefined;
42
37
  }
43
- return roots.some((root) => withinRoot(root, canonical))
44
- ? canonical
45
- : undefined;
46
- };
47
- const withinRoot = (root, path) => {
48
- const remainder = relative(root, path);
49
- return (remainder === "" || (!remainder.startsWith("..") && !isAbsolute(remainder)));
38
+ return canonical;
50
39
  };
@@ -1,18 +1,16 @@
1
1
  import { browserOriginSchema, sanitizeBrowserUrl, } from "../domain/browserObservation.js";
2
- import { authorizedElectronFile, canonicalElectronRoots, } from "./ElectronFileScope.js";
3
- /** Canonicalize exact filesystem scopes before Inspector attachment. */
4
- export const canonicalRuntimeRoots = canonicalElectronRoots;
5
- /** Authorize one protocol URL without retaining an out-of-scope value. */
6
- export const authorizeRuntimeLocation = async (value, roots, origins) => {
7
- if (value.startsWith("node:") && value.length <= 4_096)
2
+ import { authorizedElectronFile } from "./ElectronFileScope.js";
3
+ /** Resolve a protocol location exposed by the explicitly selected Inspector endpoint. */
4
+ export const authorizeRuntimeLocation = async (value) => {
5
+ if (value.startsWith("node:") && value.length > 0)
8
6
  return {
9
7
  allowed: true,
10
8
  location: { kind: "builtin", specifier: value },
11
9
  };
12
10
  if (value.startsWith("file:")) {
13
- const filePath = await authorizedElectronFile(value, roots);
11
+ const filePath = await authorizedElectronFile(value);
14
12
  return filePath === undefined
15
- ? { allowed: false, reason: "outside_file_roots" }
13
+ ? { allowed: false, reason: "unsupported_location" }
16
14
  : { allowed: true, location: { kind: "file", file_path: filePath } };
17
15
  }
18
16
  let url;
@@ -25,8 +23,8 @@ export const authorizeRuntimeLocation = async (value, roots, origins) => {
25
23
  if (!["http:", "https:"].includes(url.protocol))
26
24
  return { allowed: false, reason: "unsupported_location" };
27
25
  const parsedOrigin = browserOriginSchema.safeParse(url.origin);
28
- if (!parsedOrigin.success || !origins.includes(parsedOrigin.data))
29
- return { allowed: false, reason: "outside_origins" };
26
+ if (!parsedOrigin.success)
27
+ return { allowed: false, reason: "unsupported_location" };
30
28
  return {
31
29
  allowed: true,
32
30
  location: {
@@ -37,7 +35,4 @@ export const authorizeRuntimeLocation = async (value, roots, origins) => {
37
35
  };
38
36
  };
39
37
  /** Authorize a target whose Node Inspector URL omits its main entry path. */
40
- export const authorizeRuntimeTargetLocation = async (value, targetType, roots, origins) =>
41
- // A bare file:// URL contains no source identity. Do not attach to the
42
- // first configured root merely because the target happens to be Node.
43
- authorizeRuntimeLocation(value, roots, origins);
38
+ export const authorizeRuntimeTargetLocation = async (value) => authorizeRuntimeLocation(value);
@@ -1,8 +1,7 @@
1
1
  import { sanitizeBrowserUrl } from "../domain/browserObservation.js";
2
- import { browserScenarioCaptureSchema, browserScenarioCompletenessSchema, browserScenarioStepSchema, browserStepArtifactsSchema, } from "../domain/browserScenarioCapture.js";
2
+ import { browserScenarioCaptureSchema, classifyBrowserScenarioCompleteness, browserScenarioStepSchema, browserStepArtifactsSchema, } from "../domain/browserScenarioCapture.js";
3
3
  import { AnalysisError, BrowserObservationError, ProviderAdapterError, } from "../domain/errors.js";
4
4
  import { err, ok } from "../domain/result.js";
5
- import { BrowserScenarioCaptureBudget } from "./PlaywrightScenarioArtifacts.js";
6
5
  const OPERATION = "capture_browser_scenario";
7
6
  let defaultFactory;
8
7
  const lazyPlaywrightFactory = {
@@ -16,6 +15,14 @@ export const PLAYWRIGHT_BROWSER_SCENARIO_PROVIDER_IDENTITY = Object.freeze({
16
15
  name: "REA Playwright browser scenario capture provider",
17
16
  version: "1",
18
17
  });
18
+ const SNAPSHOT_KINDS = [
19
+ "screenshot",
20
+ "dom",
21
+ "accessibility",
22
+ "url",
23
+ "history",
24
+ "storage",
25
+ ];
19
26
  const requestedForStep = (scenario, stepIndex) => new Set([
20
27
  ...scenario.capture.after_each_step,
21
28
  ...(stepIndex === scenario.actions.length ? scenario.capture.at_end : []),
@@ -34,25 +41,11 @@ const unavailableArtifacts = (requested, reason) => {
34
41
  });
35
42
  };
36
43
  const stepCompleteness = (artifacts, status) => {
37
- const missing = Object.entries(artifacts)
38
- .filter(([, state]) => state.state === "missing")
39
- .map(([section]) => section);
40
- const truncated = Object.entries(artifacts)
41
- .filter(([, state]) => state.state === "truncated")
42
- .map(([section]) => section);
44
+ const missing = SNAPSHOT_KINDS.filter((section) => artifacts[section].state === "missing");
45
+ const truncated = SNAPSHOT_KINDS.filter((section) => artifacts[section].state === "truncated");
43
46
  if (status !== "completed")
44
47
  missing.push("action");
45
- const condition = truncated.length > 0
46
- ? "truncated"
47
- : missing.length > 0
48
- ? "incomplete"
49
- : "complete";
50
- return browserScenarioCompletenessSchema.parse({
51
- status: condition,
52
- equality_eligible: condition === "complete",
53
- missing_sections: [...new Set(missing)].sort(),
54
- truncated_sections: [...new Set(truncated)].sort(),
55
- });
48
+ return classifyBrowserScenarioCompleteness(missing, truncated);
56
49
  };
57
50
  const createStep = (input) => browserScenarioStepSchema.parse({
58
51
  step_index: input.stepIndex,
@@ -69,8 +62,8 @@ const createStep = (input) => browserScenarioStepSchema.parse({
69
62
  completeness: stepCompleteness(input.artifacts, input.status),
70
63
  });
71
64
  const initialStep = async (input) => {
72
- const { session, scenario, budget, elapsedMs, maximumTimeoutMs, signal } = input;
73
- const artifacts = await session.capture(requestedForStep(scenario, 0), budget, maximumTimeoutMs, signal);
65
+ const { session, scenario, elapsedMs, signal } = input;
66
+ const artifacts = await session.capture(requestedForStep(scenario, 0), signal);
74
67
  return createStep({
75
68
  stepIndex: 0,
76
69
  stepId: "scenario_start",
@@ -86,7 +79,7 @@ const initialStep = async (input) => {
86
79
  });
87
80
  };
88
81
  const executeStep = async (input) => {
89
- const { session, scenario, budget, action, stepIndex, startedAt, priorFailure, signal, } = input;
82
+ const { session, scenario, action, stepIndex, priorFailure, signal } = input;
90
83
  const beforeUrl = session.currentUrl();
91
84
  const eventStart = session.nextEventSequence();
92
85
  const requested = requestedForStep(scenario, stepIndex);
@@ -107,40 +100,35 @@ const executeStep = async (input) => {
107
100
  const actionStartedAt = Date.now();
108
101
  session.setStep(stepIndex);
109
102
  const requestCancelled = () => signal?.aborted === true;
110
- let status = "completed";
111
- let error = null;
103
+ let outcome = {
104
+ status: "completed",
105
+ error: null,
106
+ };
112
107
  if (requestCancelled()) {
113
- status = "cancelled";
114
- error = "scenario request cancelled";
108
+ outcome = { status: "cancelled", error: "scenario request cancelled" };
115
109
  }
116
110
  else {
117
111
  try {
118
- const elapsed = Date.now() - startedAt;
119
- const remaining = scenario.limits.max_duration_ms - elapsed;
120
- if (remaining <= 0)
121
- throw new Error("Scenario duration limit reached");
122
- await session.perform(action, remaining, signal);
112
+ await session.perform(action, signal);
123
113
  }
124
114
  catch (cause) {
125
- status = requestCancelled() ? "cancelled" : "failed";
126
- error = session.redactError(cause);
115
+ outcome = {
116
+ status: requestCancelled() ? "cancelled" : "failed",
117
+ error: session.redactError(cause),
118
+ };
127
119
  }
128
120
  }
129
- const remaining = scenario.limits.max_duration_ms - (Date.now() - startedAt);
130
- const artifacts = status === "cancelled" || remaining <= 0
131
- ? unavailableArtifacts(requested, status === "cancelled"
132
- ? "scenario request cancelled"
133
- : "scenario duration limit reached")
134
- : await session.capture(requested, budget, remaining, signal);
121
+ const artifacts = outcome.status === "cancelled"
122
+ ? unavailableArtifacts(requested, "scenario request cancelled")
123
+ : await session.capture(requested, signal);
135
124
  return createStep({
136
125
  stepIndex,
137
126
  stepId: action.step_id,
138
127
  action: action.action,
139
- status,
128
+ ...outcome,
140
129
  elapsedMs: Date.now() - actionStartedAt,
141
130
  beforeUrl,
142
131
  afterUrl: session.currentUrl(),
143
- error,
144
132
  eventStart,
145
133
  eventEnd: session.lastEventSequence(),
146
134
  artifacts,
@@ -149,40 +137,22 @@ const executeStep = async (input) => {
149
137
  const globalCompleteness = (scenario, session, steps) => {
150
138
  const missing = steps.flatMap(({ completeness }) => completeness.missing_sections);
151
139
  const truncated = steps.flatMap(({ completeness }) => completeness.truncated_sections);
152
- truncated.push(...session.eventTruncationSections());
153
140
  if (session.mode === "connect")
154
141
  missing.push("events");
155
- const status = truncated.length > 0
156
- ? "truncated"
157
- : missing.length > 0
158
- ? "incomplete"
159
- : "complete";
160
- return browserScenarioCompletenessSchema.parse({
161
- status,
162
- equality_eligible: status === "complete",
163
- missing_sections: [...new Set(missing)].sort(),
164
- truncated_sections: [...new Set(truncated)].sort(),
165
- });
142
+ return classifyBrowserScenarioCompleteness(missing, truncated);
166
143
  };
167
144
  const runScenario = async (factory, scenario, options) => {
168
145
  if (options.signal?.aborted === true)
169
146
  throw new BrowserObservationError(OPERATION, "cancelled");
170
147
  const startedAt = Date.now();
171
- const budget = new BrowserScenarioCaptureBudget(scenario.limits.max_screenshots, scenario.limits.max_total_metadata_bytes);
172
- const session = await factory.open(scenario, {
173
- ...(options.signal === undefined ? {} : { signal: options.signal }),
174
- budget,
175
- deadlineAt: startedAt + scenario.limits.max_duration_ms,
176
- });
148
+ const session = await factory.open(scenario, options.signal === undefined ? {} : { signal: options.signal });
177
149
  const steps = [];
178
150
  let cleanup;
179
151
  try {
180
152
  steps.push(await initialStep({
181
153
  session,
182
154
  scenario,
183
- budget,
184
155
  elapsedMs: Date.now() - startedAt,
185
- maximumTimeoutMs: scenario.limits.max_duration_ms - (Date.now() - startedAt),
186
156
  signal: options.signal,
187
157
  }));
188
158
  let failed = false;
@@ -190,10 +160,8 @@ const runScenario = async (factory, scenario, options) => {
190
160
  const step = await executeStep({
191
161
  session,
192
162
  scenario,
193
- budget,
194
163
  action,
195
164
  stepIndex: offset + 1,
196
- startedAt,
197
165
  priorFailure: failed,
198
166
  signal: options.signal,
199
167
  });
@@ -207,7 +175,6 @@ const runScenario = async (factory, scenario, options) => {
207
175
  const events = session.events();
208
176
  const completeness = globalCompleteness(scenario, session, steps);
209
177
  return browserScenarioCaptureSchema.parse({
210
- schema_version: 1,
211
178
  browser: {
212
179
  mode: session.mode,
213
180
  process_ownership: session.processOwnership,