rea-agents 3.1.0 → 3.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (590) hide show
  1. package/README.md +72 -95
  2. package/bridge/ghidra/ReaGhidraBridge.java +609 -841
  3. package/bridge/hopper_bridge.py +99 -344
  4. package/dist/application/AbortablePromise.js +6 -3
  5. package/dist/application/AnalysisSnapshotCache.js +0 -1
  6. package/dist/application/AnalysisSnapshotFiles.js +7 -7
  7. package/dist/application/AndroidApplicationService.js +1 -1
  8. package/dist/application/AppleApplicationService.js +1 -1
  9. package/dist/application/ArtifactExtraction.js +35 -54
  10. package/dist/application/ArtifactExtractionDestination.js +17 -0
  11. package/dist/application/ArtifactGraphConstruction.js +2 -17
  12. package/dist/application/ArtifactInventory/classify.js +2 -6
  13. package/dist/application/ArtifactInventory/hash.js +2 -20
  14. package/dist/application/ArtifactInventory/scanCanonical.js +8 -12
  15. package/dist/application/ArtifactInventory/scanReader.js +69 -51
  16. package/dist/application/ArtifactInventory.js +6 -14
  17. package/dist/application/AuthorizedArtifactInventory.js +3 -13
  18. package/dist/application/BinarySession.js +41 -13
  19. package/dist/application/BinarySessionComposition.js +0 -11
  20. package/dist/application/BinarySessionOpen.js +2 -1
  21. package/dist/application/BinarySessionRecords.js +5 -93
  22. package/dist/application/BinarySessionStatus.js +5 -16
  23. package/dist/application/BinaryTargetResolver.js +216 -0
  24. package/dist/application/BrowserEvidence.js +42 -58
  25. package/dist/application/BrowserObservationService.js +3 -6
  26. package/dist/application/BrowserScenarioCaptureService.js +3 -6
  27. package/dist/application/BrowserScenarioEvidence.js +3 -3
  28. package/dist/application/CallPathTracing.js +2 -36
  29. package/dist/application/CapabilityInventory.js +10 -15
  30. package/dist/application/ClientConfigurationDocument.js +27 -0
  31. package/dist/application/ClientRegistrationStatus.js +16 -13
  32. package/dist/application/CommandShimReplay.js +14 -1
  33. package/dist/application/DirectAnalysis.js +22 -46
  34. package/dist/application/DirectAnalysisStatus.js +5 -61
  35. package/dist/application/Doctor.js +11 -32
  36. package/dist/application/DoctorDiagnostics.js +1 -2
  37. package/dist/application/DoctorScope.js +1 -1
  38. package/dist/application/ElectronActiveEvidence.js +3 -8
  39. package/dist/application/ElectronActiveObservationService.js +3 -6
  40. package/dist/application/ElectronBoundaryAnalysis.js +7 -8
  41. package/dist/application/ElectronBoundaryGraphContext.js +1 -1
  42. package/dist/application/ElectronBoundaryGraphIpc.js +3 -3
  43. package/dist/application/ElectronBoundaryGraphNative.js +1 -2
  44. package/dist/application/ElectronBoundaryGraphWindows.js +6 -8
  45. package/dist/application/ElectronEvidence.js +4 -7
  46. package/dist/application/ElectronObservationService.js +5 -9
  47. package/dist/application/EnhancedLiteralTracing.js +42 -65
  48. package/dist/application/EnhancedTools.js +76 -44
  49. package/dist/application/EvidenceBundleCommands.js +11 -11
  50. package/dist/application/EvidenceBundleFiles.js +9 -15
  51. package/dist/application/EvidenceLedger.js +6 -41
  52. package/dist/application/FilesystemSnapshot.js +2 -3
  53. package/dist/application/InterfaceBuilderAnalysis.js +266 -0
  54. package/dist/application/InventoryProjectionEvidence.js +4 -2
  55. package/dist/application/InvestigationProviders.js +1 -1
  56. package/dist/application/JavaScriptApplicationEvidence.js +2 -5
  57. package/dist/application/JavaScriptApplicationEvidenceGraph.js +6 -10
  58. package/dist/application/JavaScriptApplicationService.js +6 -29
  59. package/dist/application/JavaScriptApplicationWorkflowEvidence.js +5 -5
  60. package/dist/application/JavaScriptApplicationWorkflowService.js +0 -8
  61. package/dist/application/JavaScriptArtifactAnalysis.js +38 -127
  62. package/dist/application/JavaScriptArtifactFiles.js +67 -107
  63. package/dist/application/JavaScriptArtifactGraphAccumulator.js +0 -7
  64. package/dist/application/JavaScriptArtifactGraphBuilder.js +7 -58
  65. package/dist/application/JavaScriptArtifactGraphBundlers.js +1 -6
  66. package/dist/application/JavaScriptArtifactGraphContext.js +12 -39
  67. package/dist/application/JavaScriptArtifactGraphDocuments.js +4 -11
  68. package/dist/application/JavaScriptArtifactGraphEvidence.js +0 -14
  69. package/dist/application/JavaScriptArtifactGraphFindings.js +3 -3
  70. package/dist/application/JavaScriptArtifactGraphStructure.js +16 -17
  71. package/dist/application/JavaScriptArtifactPathResolution.js +61 -49
  72. package/dist/application/JavaScriptArtifactReconstruction.js +5 -10
  73. package/dist/application/JavaScriptArtifactReconstructionInput.js +2 -14
  74. package/dist/application/JavaScriptJsonModules.js +2 -2
  75. package/dist/application/JavaScriptModuleRelationships.js +22 -27
  76. package/dist/application/JavaScriptReplayPlanning.js +9 -3
  77. package/dist/application/JavaScriptReplayService.js +6 -32
  78. package/dist/application/JavaScriptReturnShapeProjection.js +12 -42
  79. package/dist/application/JavaScriptRuntimeObservationEvidence.js +7 -8
  80. package/dist/application/JavaScriptRuntimeObservationService.js +4 -8
  81. package/dist/application/JavaScriptRuntimeReconciliationEvidence.js +2 -3
  82. package/dist/application/JavaScriptSemanticGraphBuilder.js +11 -41
  83. package/dist/application/JavaScriptSemanticGraphConstruction.js +5 -29
  84. package/dist/application/JavaScriptSemanticGraphEvidence.js +1 -1
  85. package/dist/application/JavaScriptSemanticGraphFingerprintProjection.js +1 -1
  86. package/dist/application/JavaScriptSemanticGraphFlowProjection.js +0 -13
  87. package/dist/application/JavaScriptSemanticGraphProjection.js +1 -3
  88. package/dist/application/JavaScriptSemanticTraceService.js +1 -10
  89. package/dist/application/JsonFiles.js +79 -0
  90. package/dist/application/LinuxHopper.js +11 -9
  91. package/dist/application/LoopbackReplay.js +26 -23
  92. package/dist/application/LoopbackReplayRecorder.js +29 -1
  93. package/dist/application/ManagedApplicationGraphService.js +1 -2
  94. package/dist/application/ManagedMemberComparisonService.js +11 -41
  95. package/dist/application/ManagedNativeVerificationService.js +1 -2
  96. package/dist/application/ManagedReconstructionService.js +1 -1
  97. package/dist/application/ManagedRuntimeCorrelationService.js +5 -8
  98. package/dist/application/NativeApiInspection.js +2 -7
  99. package/dist/application/NativeUiActionTrace.js +394 -0
  100. package/dist/application/NodeRuntimeCharacterizationService.js +3 -7
  101. package/dist/application/PermissionAuthority.js +15 -7
  102. package/dist/application/PermissionFailure.js +5 -0
  103. package/dist/application/ProcessCaptureAuthority.js +5 -7
  104. package/dist/application/ProcessCaptureJournal.js +3 -2
  105. package/dist/application/ProcessCaptureLifecycle.js +5 -12
  106. package/dist/application/ProcessCheckpoints.js +29 -11
  107. package/dist/application/ProcessCli.js +6 -16
  108. package/dist/application/ProcessEvidence.js +5 -7
  109. package/dist/application/ProcessHarness.js +52 -17
  110. package/dist/application/ProcessReactiveCoordinator.js +2 -4
  111. package/dist/application/ProcessReactiveEffects.js +9 -3
  112. package/dist/application/ProcessReactiveHarness.js +13 -7
  113. package/dist/application/ProcessSampling.js +2 -4
  114. package/dist/application/ProcessTimer.js +39 -0
  115. package/dist/application/ProjectPermissionStore.js +39 -96
  116. package/dist/application/RealHopperAssertions.js +20 -66
  117. package/dist/application/ReconstructionCoverageService.js +12 -58
  118. package/dist/application/ReconstructionObligationAuthority.js +2 -2
  119. package/dist/application/ReconstructionObligationCandidates.js +4 -4
  120. package/dist/application/ReconstructionObligationLedgerEvaluation.js +8 -15
  121. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -7
  122. package/dist/application/ReconstructionObligationLedgerService.js +19 -38
  123. package/dist/application/ReferenceSourceImport.js +19 -45
  124. package/dist/application/ReferenceSourceImportEntries.js +2 -4
  125. package/dist/application/ReferenceSourceImportPolicy.js +5 -32
  126. package/dist/application/ReferenceSourceImportTypes.js +0 -16
  127. package/dist/application/RuntimeExecutableDiagnostics.js +55 -29
  128. package/dist/application/SessionProviderRouter.js +2 -2
  129. package/dist/application/Setup.js +1 -3
  130. package/dist/application/SetupClientConfiguration.js +22 -93
  131. package/dist/application/SetupRegistrationEnvironment.js +0 -7
  132. package/dist/application/StoreFileLock.js +119 -0
  133. package/dist/application/TerminalRenderer.js +2 -3
  134. package/dist/application/Uninstall.js +9 -14
  135. package/dist/application/UnknownEvidence.js +1 -1
  136. package/dist/artifacts/ArtifactPaths.js +2 -5
  137. package/dist/artifacts/ArtifactProvider.js +36 -58
  138. package/dist/artifacts/DirectoryArtifactReader.js +13 -8
  139. package/dist/artifacts/MachOSliceArtifactReader.js +1 -5
  140. package/dist/artifacts/NativeDmgArtifactReader.js +11 -11
  141. package/dist/artifacts/NibArchive.js +269 -0
  142. package/dist/artifacts/SafeOutputTree.js +15 -24
  143. package/dist/browser/BrowserProcessStartup.js +1 -2
  144. package/dist/browser/CdpAuthorizedMainFrame.js +16 -0
  145. package/dist/browser/CdpBrowserProvider.js +3 -13
  146. package/dist/browser/CdpCanonicalJsonDigest.js +9 -0
  147. package/dist/browser/CdpCaptureDocuments.js +28 -76
  148. package/dist/browser/CdpCaptureEventBodyShapes.js +13 -33
  149. package/dist/browser/CdpCaptureEventHandlers.js +22 -87
  150. package/dist/browser/CdpCaptureEvents.js +2 -8
  151. package/dist/browser/CdpCaptureStorage.js +9 -20
  152. package/dist/browser/CdpCaptureStorageFingerprints.js +85 -98
  153. package/dist/browser/CdpCaptureValues.js +21 -21
  154. package/dist/browser/CdpConnection.js +10 -25
  155. package/dist/browser/CdpElectronInspection.js +26 -50
  156. package/dist/browser/CdpElectronProvider.js +10 -35
  157. package/dist/browser/CdpElectronScriptEvents.js +8 -16
  158. package/dist/browser/CdpElectronScripts.js +6 -35
  159. package/dist/browser/CdpElectronWorkers.js +6 -10
  160. package/dist/browser/CdpEndpoint.js +25 -41
  161. package/dist/browser/CdpObservationSession.js +14 -26
  162. package/dist/browser/CdpPageCapture.js +34 -48
  163. package/dist/browser/CdpPageCaptureScripts.js +1 -19
  164. package/dist/browser/CdpPageCaptureWorkers.js +6 -10
  165. package/dist/browser/CdpSafeMetadata.js +19 -22
  166. package/dist/browser/CdpScreenshot.js +3 -5
  167. package/dist/browser/CdpTargetSession.js +1 -2
  168. package/dist/browser/CdpWebMcpDiscovery.js +13 -22
  169. package/dist/browser/ElectronFileScope.js +8 -19
  170. package/dist/browser/JavaScriptRuntimeScope.js +9 -14
  171. package/dist/browser/PlaywrightBrowserScenarioProvider.js +31 -64
  172. package/dist/browser/PlaywrightElectronActiveActions.js +54 -69
  173. package/dist/browser/PlaywrightElectronActiveProvider.js +14 -34
  174. package/dist/browser/PlaywrightExecutionBoundary.js +16 -5
  175. package/dist/browser/PlaywrightScenarioActions.js +3 -7
  176. package/dist/browser/PlaywrightScenarioArtifacts.js +23 -92
  177. package/dist/browser/PlaywrightScenarioBrowser.js +3 -5
  178. package/dist/browser/PlaywrightScenarioEvents.js +45 -94
  179. package/dist/browser/PlaywrightScenarioSession.js +14 -30
  180. package/dist/browser/PngVisualDiff.js +22 -14
  181. package/dist/browser/SensitiveTextCapture.js +0 -17
  182. package/dist/browser/V8InspectorCaptureProjection.js +7 -8
  183. package/dist/browser/V8InspectorEndpoint.js +12 -14
  184. package/dist/browser/V8InspectorProvider.js +20 -61
  185. package/dist/browser/WebSourceMapFetcher.js +56 -176
  186. package/dist/catalogIdentity.js +0 -54
  187. package/dist/cli/artifactCommands.js +49 -77
  188. package/dist/cli/coreAnalysisCommands.js +83 -133
  189. package/dist/cli/javascriptApplicationAnalysis.js +1 -9
  190. package/dist/cli/managedCommands.js +5 -270
  191. package/dist/cli/setupCommands.js +3 -12
  192. package/dist/cli/utilityCommands.js +7 -41
  193. package/dist/cli.js +0 -2
  194. package/dist/cliApplicationCommands.js +42 -112
  195. package/dist/cliBrowserAdvancedCommands.js +10 -106
  196. package/dist/cliBrowserCommands.js +15 -127
  197. package/dist/cliBrowserContext.js +30 -0
  198. package/dist/cliCommandNames.js +4 -5
  199. package/dist/cliElectronCommands.js +8 -72
  200. package/dist/cliEvidenceCommands.js +8 -77
  201. package/dist/cliJavaScriptRuntimeCommands.js +9 -91
  202. package/dist/cliJsonInput.js +4 -14
  203. package/dist/cliObservationOptions.js +11 -96
  204. package/dist/cliPolicyCommands.js +2 -17
  205. package/dist/cliProcessCommands.js +3 -3
  206. package/dist/cliSetup.js +0 -13
  207. package/dist/config/browserScenario.js +2 -2
  208. package/dist/config/environment.js +0 -9
  209. package/dist/config/parseConfig.js +1 -33
  210. package/dist/config/parsers.js +6 -27
  211. package/dist/config/passiveObservation.js +7 -77
  212. package/dist/config/permissions.js +0 -7
  213. package/dist/contracts/analysisSearchContract.js +2 -5
  214. package/dist/contracts/applicationToolContracts.js +56 -109
  215. package/dist/contracts/applicationWorkflowInputContracts.js +27 -102
  216. package/dist/contracts/artifactComparisonExample.js +58 -60
  217. package/dist/contracts/artifactToolContracts.js +20 -67
  218. package/dist/contracts/browserScenarioToolContracts.js +6 -51
  219. package/dist/contracts/browserToolContracts.js +8 -73
  220. package/dist/contracts/electronToolContracts.js +8 -108
  221. package/dist/contracts/enhancedInputs.js +23 -54
  222. package/dist/contracts/errorSchemas.js +0 -1
  223. package/dist/contracts/functionComparisonExample.js +10 -24
  224. package/dist/contracts/functionInstructionContract.js +1 -3
  225. package/dist/contracts/functionWorkflowToolContracts.js +2 -2
  226. package/dist/contracts/hopperMemoryContracts.js +3 -3
  227. package/dist/contracts/investigationExamples.js +14 -11
  228. package/dist/contracts/javascriptApplicationWorkflowExamples.js +12 -19
  229. package/dist/contracts/javascriptRuntimeObservationToolContracts.js +2 -20
  230. package/dist/contracts/javascriptRuntimeReconciliationExample.js +45 -12
  231. package/dist/contracts/managedToolContracts.js +6 -95
  232. package/dist/contracts/managedWorkflowExamples.js +77 -128
  233. package/dist/contracts/managedWorkflowToolContracts.js +51 -77
  234. package/dist/contracts/nativeToolContracts.js +7 -11
  235. package/dist/contracts/processCaptureExample.js +2 -69
  236. package/dist/contracts/promptContracts.js +49 -67
  237. package/dist/contracts/providerSelection.js +0 -1
  238. package/dist/contracts/reconstructionReadinessExample.js +1 -6
  239. package/dist/contracts/sessionStatusContract.js +1 -17
  240. package/dist/contracts/sessionToolSchemas.js +6 -15
  241. package/dist/contracts/toolContractExamples.js +11 -11
  242. package/dist/contracts/toolContractHelpers.js +0 -4
  243. package/dist/contracts/toolContracts.js +60 -71
  244. package/dist/contracts/toolEffects.js +5 -13
  245. package/dist/contracts/toolOutputSchemaGroups.js +37 -91
  246. package/dist/contracts/toolOutputSchemaPrimitives.js +16 -56
  247. package/dist/contracts/toolSchemaMetadata.js +8 -19
  248. package/dist/contracts/unknownContractExamples.js +0 -2
  249. package/dist/domain/analysisErrorPresentation.js +46 -54
  250. package/dist/domain/analysisErrorProjection.js +28 -37
  251. package/dist/domain/analysisProfile.js +3 -31
  252. package/dist/domain/analysisSnapshot.js +3 -12
  253. package/dist/domain/androidApplication.js +15 -54
  254. package/dist/domain/appleApplication.js +24 -67
  255. package/dist/domain/artifactComparison.js +11 -29
  256. package/dist/domain/artifactGraph.js +14 -44
  257. package/dist/domain/artifactInspection.js +38 -69
  258. package/dist/domain/artifactInventoryEvidence.js +27 -21
  259. package/dist/domain/binaryTarget.js +2 -221
  260. package/dist/domain/browserCaptureComparison.js +47 -24
  261. package/dist/domain/browserObservation.js +28 -193
  262. package/dist/domain/browserObservationSchemas.js +5 -23
  263. package/dist/domain/browserScenario.js +11 -14
  264. package/dist/domain/browserScenarioCapture.js +11 -12
  265. package/dist/domain/browserScenarioCaptureValues.js +146 -84
  266. package/dist/domain/browserScenarioDiff.js +2 -59
  267. package/dist/domain/browserScenarioDiffEvidence.js +51 -0
  268. package/dist/domain/browserScenarioDiffValues.js +21 -38
  269. package/dist/domain/browserScenarioValues.js +80 -109
  270. package/dist/domain/browserSession.js +4 -7
  271. package/dist/domain/bundleComparison.js +6 -32
  272. package/dist/domain/bytecodeProvider.js +20 -19
  273. package/dist/domain/callPath.js +47 -167
  274. package/dist/domain/callPathSchemas.js +79 -0
  275. package/dist/domain/changedBehavior.js +34 -60
  276. package/dist/domain/completionLedgerGeneration.js +8 -14
  277. package/dist/domain/conformancePackage.js +126 -97
  278. package/dist/domain/conformanceReplay.js +36 -8
  279. package/dist/domain/conformanceTrustGate.js +23 -14
  280. package/dist/domain/customProtocolCapture.js +1 -1
  281. package/dist/domain/electronActiveObservation.js +70 -103
  282. package/dist/domain/electronObservation.js +14 -80
  283. package/dist/domain/electronStaticAnalysisBrowser.js +36 -46
  284. package/dist/domain/electronStaticAnalysisIpc.js +38 -14
  285. package/dist/domain/electronStaticAnalysisNative.js +1 -8
  286. package/dist/domain/electronStaticAnalysisValues.js +10 -17
  287. package/dist/domain/errors.js +33 -54
  288. package/dist/domain/eventProcessTree.js +20 -12
  289. package/dist/domain/evidence.js +2 -10
  290. package/dist/domain/evidenceBundle.js +3 -5
  291. package/dist/domain/evidenceCompletionLedger.js +6 -8
  292. package/dist/domain/functionComparison.js +4 -14
  293. package/dist/domain/functionComparisonNormalization.js +4 -11
  294. package/dist/domain/functionComparisonResults.js +25 -15
  295. package/dist/domain/functionComparisonSchemas.js +49 -33
  296. package/dist/domain/functionDossierEvidence.js +31 -156
  297. package/dist/domain/hopperStartupFailure.js +1 -1
  298. package/dist/domain/hopperValues.js +15 -136
  299. package/dist/domain/interfaceBuilderGraph.js +654 -0
  300. package/dist/domain/javascriptApplicationAnalysis.js +8 -112
  301. package/dist/domain/javascriptApplicationChangeGraph.js +22 -82
  302. package/dist/domain/javascriptApplicationEvidenceSchemas.js +59 -47
  303. package/dist/domain/javascriptApplicationGraph.js +3 -13
  304. package/dist/domain/javascriptApplicationGraphSchemas.js +12 -34
  305. package/dist/domain/javascriptApplicationVersionComparison.js +26 -30
  306. package/dist/domain/javascriptApplicationVersionComparisonSchemas.js +123 -68
  307. package/dist/domain/javascriptApplicationVersionItems.js +120 -53
  308. package/dist/domain/javascriptApplicationVersionKeys.js +24 -11
  309. package/dist/domain/javascriptAstFingerprint.js +25 -58
  310. package/dist/domain/javascriptAstValues.js +9 -0
  311. package/dist/domain/javascriptExportInstrumentation.js +2 -4
  312. package/dist/domain/javascriptExportShapeComparison.js +6 -7
  313. package/dist/domain/javascriptExportShapeComparisonSchemas.js +68 -75
  314. package/dist/domain/javascriptExportShapeSelection.js +17 -19
  315. package/dist/domain/javascriptFeatureSeed.js +20 -12
  316. package/dist/domain/javascriptFeatureTrace.js +13 -67
  317. package/dist/domain/javascriptFeatureTraceSchemas.js +24 -52
  318. package/dist/domain/javascriptFeatureTraversal.js +1 -44
  319. package/dist/domain/javascriptNativeHandoff.js +1 -1
  320. package/dist/domain/javascriptReplay.js +24 -41
  321. package/dist/domain/javascriptRuntimeLoadState.js +3 -8
  322. package/dist/domain/javascriptRuntimeObservation.js +42 -103
  323. package/dist/domain/javascriptRuntimeReconciliation.js +1 -3
  324. package/dist/domain/javascriptRuntimeReconciliationActive.js +8 -17
  325. package/dist/domain/javascriptRuntimeReconciliationGraph.js +10 -23
  326. package/dist/domain/javascriptRuntimeReconciliationMatching.js +18 -12
  327. package/dist/domain/javascriptRuntimeReconciliationParsing.js +16 -45
  328. package/dist/domain/javascriptRuntimeReconciliationResult.js +4 -5
  329. package/dist/domain/javascriptRuntimeReconciliationRuntime.js +8 -12
  330. package/dist/domain/javascriptRuntimeReconciliationSchemas.js +33 -48
  331. package/dist/domain/javascriptRuntimeStaticCandidates.js +3 -3
  332. package/dist/domain/javascriptSemanticAnalysis.js +12 -45
  333. package/dist/domain/javascriptSemanticAsyncEffects.js +1 -9
  334. package/dist/domain/javascriptSemanticCallResolution.js +6 -16
  335. package/dist/domain/javascriptSemanticCalls.js +5 -32
  336. package/dist/domain/javascriptSemanticChildProcesses.js +1 -11
  337. package/dist/domain/javascriptSemanticCoverage.js +11 -0
  338. package/dist/domain/javascriptSemanticDataEffectHelpers.js +1 -8
  339. package/dist/domain/javascriptSemanticDataEffects.js +1 -11
  340. package/dist/domain/javascriptSemanticFingerprints.js +3 -5
  341. package/dist/domain/javascriptSemanticGraphSchemas.js +25 -51
  342. package/dist/domain/javascriptSemanticGraphSerialization.js +2 -13
  343. package/dist/domain/javascriptSemanticIr.js +1 -29
  344. package/dist/domain/javascriptSemanticObjects.js +1 -5
  345. package/dist/domain/javascriptSemanticPrimitives.js +2 -9
  346. package/dist/domain/javascriptSemanticProjection.js +0 -18
  347. package/dist/domain/javascriptSemanticPromises.js +9 -16
  348. package/dist/domain/javascriptSemanticProvenance.js +16 -19
  349. package/dist/domain/javascriptSemanticQuery.js +17 -139
  350. package/dist/domain/javascriptSemanticQueryAssessment.js +9 -37
  351. package/dist/domain/javascriptSemanticQueryIdentity.js +2 -23
  352. package/dist/domain/javascriptSemanticQuerySchemas.js +14 -107
  353. package/dist/domain/javascriptSemanticResources.js +1 -6
  354. package/dist/domain/javascriptSemanticReturns.js +10 -27
  355. package/dist/domain/javascriptSemanticValueTypes.js +1 -0
  356. package/dist/domain/javascriptSemanticValues.js +44 -62
  357. package/dist/domain/javascriptStaticAnalysis.js +21 -43
  358. package/dist/domain/javascriptStaticAnalysisBundler.js +34 -93
  359. package/dist/domain/javascriptStaticAnalysisCalls.js +17 -16
  360. package/dist/domain/javascriptStaticAnalysisFindings.js +3 -19
  361. package/dist/domain/javascriptStaticAnalysisHelpers.js +47 -88
  362. package/dist/domain/javascriptStaticAnalysisState.js +1 -5
  363. package/dist/domain/javascriptStaticAnalysisTypes.js +1 -0
  364. package/dist/domain/jsonShape.js +7 -33
  365. package/dist/domain/localPath.js +7 -0
  366. package/dist/domain/managedApplicationGraph.js +9 -41
  367. package/dist/domain/managedApplicationGraphCoverage.js +24 -156
  368. package/dist/domain/managedApplicationGraphNodes.js +10 -13
  369. package/dist/domain/managedArtifact.js +14 -27
  370. package/dist/domain/managedMemberComparison.js +90 -92
  371. package/dist/domain/managedMemberComparisonCoverage.js +11 -33
  372. package/dist/domain/managedMemberComparisonItems.js +221 -0
  373. package/dist/domain/managedMemberComparisonMatch.js +8 -208
  374. package/dist/domain/managedNativeVerification.js +3 -6
  375. package/dist/domain/managedNativeVerificationMatch.js +55 -59
  376. package/dist/domain/managedNativeVerificationSchemas.js +83 -47
  377. package/dist/domain/managedReconstruction.js +19 -23
  378. package/dist/domain/managedRuntimeCorrelation.js +6 -9
  379. package/dist/domain/nativeApiBoundary.js +2 -7
  380. package/dist/domain/nativeInspection.js +0 -2
  381. package/dist/domain/nativeInvestigationGraph.js +351 -0
  382. package/dist/domain/nativeValueFlow.js +61 -0
  383. package/dist/domain/nodeRuntimeCharacterization.js +1 -5
  384. package/dist/domain/objcSwiftMetadata.js +254 -0
  385. package/dist/domain/peInspection.js +1 -1
  386. package/dist/domain/permissionPolicy.js +13 -0
  387. package/dist/domain/processCapture.js +76 -113
  388. package/dist/domain/processCaptureExample.js +68 -0
  389. package/dist/domain/processCaptureParsing.js +21 -0
  390. package/dist/domain/processCaptureReactiveSchema.js +68 -0
  391. package/dist/domain/processCaptureValidation.js +1 -7
  392. package/dist/domain/processComparison.js +3 -12
  393. package/dist/domain/processReactiveMatching.js +29 -50
  394. package/dist/domain/processReactiveRuntime.js +4 -8
  395. package/dist/domain/processReactiveScenario.js +28 -94
  396. package/dist/domain/processReactiveScenarioPreflight.js +5 -30
  397. package/dist/domain/processReactiveTransition.js +33 -18
  398. package/dist/domain/processScenario.js +56 -90
  399. package/dist/domain/processTraceComparison.js +0 -8
  400. package/dist/domain/processTraceEvaluation.js +14 -4
  401. package/dist/domain/processTraceSpecification.js +11 -17
  402. package/dist/domain/protocolCapture.js +3 -3
  403. package/dist/domain/reconstructionCoverage.js +62 -129
  404. package/dist/domain/reconstructionCoverageEvaluation.js +17 -17
  405. package/dist/domain/reconstructionObligationLedgerSchemas.js +45 -72
  406. package/dist/domain/reconstructionReadiness.js +1 -2
  407. package/dist/domain/reconstructionReadinessSchemas.js +36 -38
  408. package/dist/domain/reconstructionUnknowns.js +3 -3
  409. package/dist/domain/reconstructionVerification.js +13 -47
  410. package/dist/domain/reconstructionVerificationSchemas.js +50 -38
  411. package/dist/domain/referenceSourceGraph.js +53 -61
  412. package/dist/domain/referenceSourceImportParsing.js +1 -5
  413. package/dist/domain/replayMachine.js +19 -31
  414. package/dist/domain/replayMachineRun.js +15 -63
  415. package/dist/domain/replayMachineRuntime.js +41 -41
  416. package/dist/domain/replayMachineValues.js +84 -0
  417. package/dist/domain/residualUnknown.js +25 -30
  418. package/dist/domain/runtimeCharacterization.js +15 -16
  419. package/dist/domain/runtimeIdentification.js +48 -47
  420. package/dist/domain/sourceToBundleComparison.js +9 -85
  421. package/dist/domain/sourceToBundleComparisonSchemas.js +17 -42
  422. package/dist/domain/sourceToBundleSignals.js +4 -15
  423. package/dist/domain/staticRuntimeCorrelation.js +37 -49
  424. package/dist/domain/symbolAnalysis.js +10 -19
  425. package/dist/domain/unicodeCodePointOrder.js +12 -0
  426. package/dist/domain/webBundleAnalysis.js +70 -99
  427. package/dist/domain/webBundleAnalyzer.js +2 -4
  428. package/dist/domain/webBundleAnalyzerAst.js +0 -13
  429. package/dist/domain/webBundleAnalyzerInspection.js +26 -52
  430. package/dist/domain/webBundleAnalyzerResult.js +7 -24
  431. package/dist/domain/webCaptureDiff.js +33 -73
  432. package/dist/domain/webCaptureDiffSchemas.js +86 -0
  433. package/dist/domain/webContentArtifact.js +1 -10
  434. package/dist/domain/webMcpDiscovery.js +3 -14
  435. package/dist/domain/webScreenshot.js +58 -34
  436. package/dist/domain/zipPackageFormat.js +7 -0
  437. package/dist/dotnet/ManagedArtifactInspector.js +17 -50
  438. package/dist/dotnet/ManagedMemberInspector.js +27 -58
  439. package/dist/dotnet/ManagedMemberInspectorCore.js +14 -51
  440. package/dist/dotnet/ManagedMemberInstructionDecoder.js +2 -2
  441. package/dist/dotnet/ManagedMemberRows.js +16 -16
  442. package/dist/dotnet/ManagedMetadataHeaps.js +26 -8
  443. package/dist/dotnet/ManagedMetadataInventory.js +21 -30
  444. package/dist/dotnet/ManagedMetadataInventoryRows.js +57 -63
  445. package/dist/dotnet/ManagedMetadataLayout.js +3 -5
  446. package/dist/dotnet/ManagedMethodBodyReader.js +5 -30
  447. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +19 -49
  448. package/dist/dotnet/ManagedNativeBoundaryInspector.js +13 -41
  449. package/dist/dotnet/ManagedPeReader.js +2 -2
  450. package/dist/dotnet/ManagedStaticProvider.js +13 -71
  451. package/dist/generatedMcpToolCatalog.js +1 -1
  452. package/dist/generatedPackageMetadata.js +1 -1
  453. package/dist/ghidra/GhidraAnalysisProfile.js +3 -8
  454. package/dist/ghidra/GhidraClient.js +4 -12
  455. package/dist/ghidra/GhidraClientWire.js +9 -5
  456. package/dist/ghidra/GhidraDefaults.js +0 -18
  457. package/dist/ghidra/GhidraDiagnostics.js +0 -2
  458. package/dist/ghidra/GhidraDoctor.js +16 -12
  459. package/dist/ghidra/GhidraFunctionValues.js +65 -108
  460. package/dist/ghidra/GhidraInstallation.js +98 -42
  461. package/dist/ghidra/GhidraInventoryValues.js +16 -85
  462. package/dist/ghidra/GhidraLauncher.js +0 -8
  463. package/dist/ghidra/GhidraProvider.js +15 -22
  464. package/dist/ghidra/GhidraProviderCapabilities.js +6 -47
  465. package/dist/ghidra/GhidraRequestQueue.js +6 -30
  466. package/dist/ghidra/GhidraResponseBuffer.js +1 -7
  467. package/dist/ghidra/GhidraSessionValues.js +0 -2
  468. package/dist/ghidra/GhidraTransport.js +4 -7
  469. package/dist/ghidra/protocol.js +2 -2
  470. package/dist/hopper/BridgeLauncher.js +112 -36
  471. package/dist/hopper/HopperAnalysisProfile.js +1 -1
  472. package/dist/hopper/HopperCleanup.js +6 -3
  473. package/dist/hopper/HopperClient.js +4 -7
  474. package/dist/hopper/HopperProcessDiagnostic.js +2 -2
  475. package/dist/hopper/HopperProvider.js +0 -16
  476. package/dist/hopper/HopperRequestQueue.js +21 -40
  477. package/dist/hopper/HopperResponseStream.js +1 -9
  478. package/dist/hopper/HopperSessionValues.js +3 -2
  479. package/dist/hopper/HopperTargetLease.js +119 -0
  480. package/dist/hopper/LinuxPrivateDisplayDiagnostic.js +24 -31
  481. package/dist/hopper/LinuxPrivateDisplayProbe.js +5 -16
  482. package/dist/hopper/protocol.js +6 -4
  483. package/dist/main/reload.js +0 -3
  484. package/dist/main/shutdown.js +1 -1
  485. package/dist/main/state.js +0 -9
  486. package/dist/main/transport.js +0 -5
  487. package/dist/mcpDoctor.js +25 -45
  488. package/dist/native/CommandRunner.js +18 -25
  489. package/dist/native/NativeMacOSProvider.js +13 -38
  490. package/dist/native/NativeMachoInspection.js +1 -1
  491. package/dist/process/BoundedFileBytes.js +17 -0
  492. package/dist/process/ExecFileOutput.js +11 -0
  493. package/dist/process/PendingOperations.js +8 -6
  494. package/dist/process/ProcessOwnership.js +3 -2
  495. package/dist/process/ProcessOwnershipObservation.js +0 -1
  496. package/dist/process/ProviderProcess.js +7 -28
  497. package/dist/reference/ReferenceSourceReader.js +8 -24
  498. package/dist/reference/ReferenceSourceReaderEntries.js +11 -39
  499. package/dist/reference/ReferenceSourceReaderFile.js +13 -31
  500. package/dist/reference/ReferenceSourceReaderPaths.js +3 -18
  501. package/dist/reference/ReferenceSourceReaderValidate.js +3 -6
  502. package/dist/replay/JavaScriptReplayWorker.js +3 -5
  503. package/dist/replay/LinuxJavaScriptReplayRunner.js +33 -29
  504. package/dist/replay/LinuxJavaScriptReplaySandbox.js +0 -19
  505. package/dist/replay/LinuxRuntimeClosure.js +1 -3
  506. package/dist/replay/ReplayOutcome.js +1 -3
  507. package/dist/replay/ReplayProcessLifecycle.js +32 -7
  508. package/dist/replay/ReplaySeccompFile.js +29 -0
  509. package/dist/replay/ReplayWorkerProtocol.js +0 -2
  510. package/dist/replay/SystemJavaScriptReplayHost.js +45 -74
  511. package/dist/server/ProcessCaptureElicitation.js +4 -8
  512. package/dist/server/createServer.js +6 -44
  513. package/dist/server/promptCompletion.js +37 -61
  514. package/dist/server/recordDerivedEvidence.js +1 -1
  515. package/dist/server/registerApplicationTools/characterization.js +4 -8
  516. package/dist/server/registerApplicationTools/compareExportShapes.js +5 -10
  517. package/dist/server/registerApplicationTools/compareSourceToBundle.js +6 -10
  518. package/dist/server/registerApplicationTools/compareVersions.js +5 -10
  519. package/dist/server/registerApplicationTools/controlledReplay.js +3 -5
  520. package/dist/server/registerApplicationTools/coverage.js +6 -71
  521. package/dist/server/registerApplicationTools/helpers.js +1 -13
  522. package/dist/server/registerApplicationTools/obligationLedger.js +3 -2
  523. package/dist/server/registerApplicationTools/traceFeature.js +5 -9
  524. package/dist/server/registerApplicationTools/traceSemantics.js +5 -8
  525. package/dist/server/registerApplicationTools.js +0 -2
  526. package/dist/server/registerArtifactComparisonTool.js +23 -27
  527. package/dist/server/registerBrowserScenarioTool.js +4 -4
  528. package/dist/server/registerBrowserTools.js +5 -8
  529. package/dist/server/registerBundleComparisonTool.js +5 -7
  530. package/dist/server/registerCloseLifecycleTool.js +2 -16
  531. package/dist/server/registerElectronTools.js +10 -29
  532. package/dist/server/registerEnhancedTools.js +10 -11
  533. package/dist/server/registerEvidenceTools.js +15 -22
  534. package/dist/server/registerFunctionComparisonTool.js +30 -25
  535. package/dist/server/registerInvestigationTools/helpers.js +3 -32
  536. package/dist/server/registerInvestigationTools.js +20 -116
  537. package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -4
  538. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +15 -17
  539. package/dist/server/registerManagedWorkflowTools/evidence.js +19 -35
  540. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +3 -8
  541. package/dist/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.js +3 -8
  542. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +10 -14
  543. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +9 -15
  544. package/dist/server/registerOfficialTools.js +1 -43
  545. package/dist/server/registerProcessComparisonTool.js +33 -23
  546. package/dist/server/registerPrompts.js +19 -17
  547. package/dist/server/registerSessionRecordTools.js +10 -156
  548. package/dist/server/registerSessionStatusTool.js +6 -69
  549. package/dist/server/registerSessionTools.js +10 -51
  550. package/dist/server/sessionAvailabilityPolicy.js +0 -2
  551. package/dist/server/sessionEvidence.js +9 -15
  552. package/dist/server/sessionToolPolicies.js +0 -8
  553. package/dist/server/toolResult.js +14 -50
  554. package/dist/serverIdentity.js +0 -20
  555. package/install.sh +1 -1
  556. package/package.json +11 -7
  557. package/scripts/electron-active-hook.cjs +23 -55
  558. package/scripts/hopper-demo-x11.py +13 -32
  559. package/skills/reverse-engineer-anything/SKILL.md +47 -12
  560. package/skills/reverse-engineer-anything/references/evidence-workflows.md +6 -4
  561. package/skills/reverse-engineer-anything/references/javascript-applications.md +13 -13
  562. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +12 -8
  563. package/dist/application/ApplicationWorkflowEvidenceResolver.js +0 -188
  564. package/dist/application/BoundedJsonFiles.js +0 -86
  565. package/dist/application/CrossVersionInventory.js +0 -129
  566. package/dist/application/CrossVersionInvestigation.js +0 -301
  567. package/dist/application/CrossVersionInvestigationCollections.js +0 -23
  568. package/dist/application/CrossVersionInvestigationEvidence.js +0 -64
  569. package/dist/application/CrossVersionInvestigationReplay.js +0 -170
  570. package/dist/application/DeferredFileAuthorization.js +0 -61
  571. package/dist/application/DoctorProjection.js +0 -43
  572. package/dist/application/EnhancedToolPagination.js +0 -22
  573. package/dist/application/EvidenceReferenceResolver.js +0 -26
  574. package/dist/application/InvestigationWorkspaceStore.js +0 -204
  575. package/dist/application/ProcessPairedExperiment.js +0 -72
  576. package/dist/application/ReconstructionCoverageWorkspaceStore.js +0 -31
  577. package/dist/application/ReconstructionReadinessService.js +0 -48
  578. package/dist/cliInvestigationCommands.js +0 -173
  579. package/dist/domain/boundedCartesianProjection.js +0 -15
  580. package/dist/domain/investigationWorkspace.js +0 -347
  581. package/dist/domain/jsonLimits.js +0 -26
  582. package/dist/domain/knownPageCoverage.js +0 -29
  583. package/dist/domain/processPairedExperiment.js +0 -128
  584. package/dist/server/javascriptApplicationResult.js +0 -106
  585. package/dist/server/permissionFailure.js +0 -12
  586. package/dist/server/registerApplicationTools/readiness.js +0 -50
  587. package/dist/server/registerEvidenceResources.js +0 -315
  588. package/dist/server/registerJavaScriptApplicationGraphResource.js +0 -65
  589. package/dist/server/registerReconstructionObligationLedgerResource.js +0 -32
  590. package/dist/server/registerReconstructionReadinessResource.js +0 -32
@@ -1,17 +1,15 @@
1
1
  import { analyzeScript, emptyAccumulator, isIncludedScript, } from "./webBundleAnalyzerInspection.js";
2
2
  import { buildWebBundleAnalysis } from "./webBundleAnalyzerResult.js";
3
3
  /** Analyze captured, explicitly approved JavaScript source without execution. */
4
- export const analyzeCapturedWebBundle = (inspection, input, sourceMaps = {
4
+ export const analyzeCapturedWebBundle = (inspection, sourceMaps = {
5
5
  status: "not_requested",
6
6
  requested: 0,
7
7
  processed: 0,
8
- dropped: 0,
9
- dropped_script_keys: [],
10
8
  items: [],
11
9
  }) => {
12
10
  const accumulator = emptyAccumulator();
13
11
  const sourceScripts = inspection.scripts.items.filter(isIncludedScript);
14
12
  for (const script of sourceScripts)
15
- analyzeScript(script, input, accumulator);
13
+ analyzeScript(script, accumulator);
16
14
  return buildWebBundleAnalysis(inspection, sourceScripts, sourceMaps, accumulator);
17
15
  };
@@ -44,19 +44,6 @@ export const resolveSpecifier = (specifier, base) => {
44
44
  return null;
45
45
  }
46
46
  };
47
- export const sanitizeCandidate = (value) => {
48
- const bounded = value.slice(0, 4_096);
49
- try {
50
- const parsed = new URL(bounded, "https://rea.invalid");
51
- const sanitized = sanitizeBrowserUrl(parsed.href).url;
52
- return parsed.origin === "https://rea.invalid"
53
- ? sanitized.replace("https://rea.invalid", "")
54
- : sanitized;
55
- }
56
- catch {
57
- return bounded.split("#", 1)[0]?.split("?", 1)[0] ?? "";
58
- }
59
- };
60
47
  export const location = (scriptKey, node) => ({
61
48
  script_key: scriptKey,
62
49
  ...locationFields(node),
@@ -1,7 +1,8 @@
1
1
  import { parse } from "@babel/parser";
2
2
  import * as t from "@babel/types";
3
- import { calleeName, endpointArgument, location, locationFields, objectString, objectValue, propertyName, resolveSpecifier, sanitizeCandidate, stringArgument, } from "./webBundleAnalyzerAst.js";
4
- export const analyzeScript = (script, input, accumulator) => {
3
+ import { sanitizeEndpointCandidate } from "./browserObservation.js";
4
+ import { calleeName, endpointArgument, location, locationFields, objectString, objectValue, propertyName, resolveSpecifier, stringArgument, } from "./webBundleAnalyzerAst.js";
5
+ export const analyzeScript = (script, accumulator) => {
5
6
  let file;
6
7
  try {
7
8
  file = parse(script.source.artifact.text, {
@@ -15,18 +16,14 @@ export const analyzeScript = (script, input, accumulator) => {
15
16
  return;
16
17
  }
17
18
  accumulator.parsedScripts += 1;
18
- detectVendorFingerprints(script, accumulator, input.analysis_limits.max_findings);
19
+ detectVendorFingerprints(script, accumulator);
19
20
  t.traverseFast(file, (node) => {
20
21
  accumulator.visitedNodes += 1;
21
- if (accumulator.visitedNodes > input.analysis_limits.max_ast_nodes) {
22
- accumulator.astLimitReached = true;
23
- return t.traverseFast.stop;
24
- }
25
- inspectNode(script, node, accumulator, input.analysis_limits.max_findings);
22
+ inspectNode(script, node, accumulator);
26
23
  return undefined;
27
24
  });
28
25
  };
29
- const inspectNode = (script, node, accumulator, maximumFindings) => {
26
+ const inspectNode = (script, node, accumulator) => {
30
27
  if ((t.isImportDeclaration(node) || t.isExportAllDeclaration(node)) &&
31
28
  node.source !== undefined)
32
29
  addEdge({
@@ -35,7 +32,6 @@ const inspectNode = (script, node, accumulator, maximumFindings) => {
35
32
  kind: "static_import",
36
33
  node,
37
34
  accumulator,
38
- maximumFindings,
39
35
  });
40
36
  else if (t.isExportNamedDeclaration(node) && node.source != null)
41
37
  addEdge({
@@ -44,7 +40,6 @@ const inspectNode = (script, node, accumulator, maximumFindings) => {
44
40
  kind: "static_import",
45
41
  node,
46
42
  accumulator,
47
- maximumFindings,
48
43
  });
49
44
  else if (t.isImportExpression(node) && t.isStringLiteral(node.source))
50
45
  addEdge({
@@ -53,14 +48,13 @@ const inspectNode = (script, node, accumulator, maximumFindings) => {
53
48
  kind: "dynamic_import",
54
49
  node,
55
50
  accumulator,
56
- maximumFindings,
57
51
  });
58
52
  if (t.isObjectProperty(node))
59
- inspectRouteProperty(script, node, accumulator, maximumFindings);
53
+ inspectRouteProperty(script, node, accumulator);
60
54
  if (t.isCallExpression(node) || t.isNewExpression(node))
61
- inspectCall(script, node, accumulator, maximumFindings);
55
+ inspectCall(script, node, accumulator);
62
56
  };
63
- const inspectCall = (script, node, accumulator, maximumFindings) => {
57
+ const inspectCall = (script, node, accumulator) => {
64
58
  const name = calleeName(node.callee);
65
59
  const first = stringArgument(node.arguments[0]);
66
60
  if ((name === "require" || name.endsWith(".require")) && first !== undefined)
@@ -70,7 +64,6 @@ const inspectCall = (script, node, accumulator, maximumFindings) => {
70
64
  kind: "require",
71
65
  node,
72
66
  accumulator,
73
- maximumFindings,
74
67
  });
75
68
  if ((name === "importScripts" || name.endsWith(".importScripts")) &&
76
69
  first !== undefined)
@@ -80,7 +73,6 @@ const inspectCall = (script, node, accumulator, maximumFindings) => {
80
73
  kind: "worker_import",
81
74
  node,
82
75
  accumulator,
83
- maximumFindings,
84
76
  });
85
77
  if (routeCallNames.some((candidate) => name === candidate || name.endsWith(`.${candidate}`))) {
86
78
  if (first !== undefined)
@@ -91,14 +83,12 @@ const inspectCall = (script, node, accumulator, maximumFindings) => {
91
83
  mechanism: `call:${name}`,
92
84
  node,
93
85
  accumulator,
94
- maximumFindings,
95
86
  });
96
87
  addRouteFrameworkInference({
97
88
  script,
98
89
  name,
99
90
  node,
100
91
  accumulator,
101
- maximumFindings,
102
92
  });
103
93
  }
104
94
  const endpoint = endpointArgument(name, node.arguments);
@@ -110,13 +100,12 @@ const inspectCall = (script, node, accumulator, maximumFindings) => {
110
100
  mechanism: `call:${name}`,
111
101
  node,
112
102
  accumulator,
113
- maximumFindings,
114
103
  });
115
104
  if (name.endsWith("modelContext.registerTool") ||
116
105
  name === "modelContext.registerTool")
117
- addWebMcpDeclaration(script, node, accumulator, maximumFindings);
106
+ addWebMcpDeclaration(script, node, accumulator);
118
107
  };
119
- const inspectRouteProperty = (script, node, accumulator, maximumFindings) => {
108
+ const inspectRouteProperty = (script, node, accumulator) => {
120
109
  const key = propertyName(node.key);
121
110
  if ((key === "path" || key === "route") && t.isStringLiteral(node.value))
122
111
  addFinding({
@@ -126,30 +115,28 @@ const inspectRouteProperty = (script, node, accumulator, maximumFindings) => {
126
115
  mechanism: `property:${key}`,
127
116
  node,
128
117
  accumulator,
129
- maximumFindings,
130
118
  });
131
119
  };
132
120
  const addEdge = (context) => {
133
- const bounded = context.specifier.slice(0, 4_096);
134
- const key = `edge\0${context.script.script_key}\0${context.kind}\0${bounded}`;
135
- addBounded(context.accumulator, key, context.maximumFindings, () => context.accumulator.edges.push({
121
+ const key = `edge\0${context.script.script_key}\0${context.kind}\0${context.specifier}`;
122
+ addUnique(context.accumulator, key, () => context.accumulator.edges.push({
136
123
  from_script_key: context.script.script_key,
137
124
  kind: context.kind,
138
- specifier: bounded,
139
- resolved_url: resolveSpecifier(bounded, context.script.url),
125
+ specifier: context.specifier,
126
+ resolved_url: resolveSpecifier(context.specifier, context.script.url),
140
127
  location: location(context.script.script_key, context.node),
141
128
  }));
142
129
  };
143
130
  const addFinding = (context) => {
144
- const value = sanitizeCandidate(context.rawValue);
131
+ const value = sanitizeEndpointCandidate(context.rawValue);
145
132
  const key = `finding\0${context.mechanism}\0${context.script.script_key}\0${value}`;
146
- addBounded(context.accumulator, key, context.maximumFindings, () => context.collection.push({
133
+ addUnique(context.accumulator, key, () => context.collection.push({
147
134
  value,
148
135
  mechanism: context.mechanism,
149
136
  location: location(context.script.script_key, context.node),
150
137
  }));
151
138
  };
152
- const addWebMcpDeclaration = (script, node, accumulator, maximumFindings) => {
139
+ const addWebMcpDeclaration = (script, node, accumulator) => {
153
140
  const declaration = node.arguments[0];
154
141
  if (!t.isObjectExpression(declaration))
155
142
  return;
@@ -169,23 +156,21 @@ const addWebMcpDeclaration = (script, node, accumulator, maximumFindings) => {
169
156
  : [])
170
157
  : [];
171
158
  const key = `webmcp\0${script.script_key}\0${name ?? ""}\0${schemaPropertyNames.join("\0")}`;
172
- addBounded(accumulator, key, maximumFindings, () => accumulator.webMcp.push({
173
- name: name?.slice(0, 256) ?? null,
174
- description: description?.slice(0, 2_048) ?? null,
175
- schema_property_names: [...new Set(schemaPropertyNames)]
176
- .sort()
177
- .slice(0, 256),
159
+ addUnique(accumulator, key, () => accumulator.webMcp.push({
160
+ name: name ?? null,
161
+ description: description ?? null,
162
+ schema_property_names: [...new Set(schemaPropertyNames)].sort(),
178
163
  trust: "page-declared-untrusted",
179
164
  location: location(script.script_key, node),
180
165
  }));
181
166
  };
182
- const detectVendorFingerprints = (script, accumulator, maximumFindings) => {
167
+ const detectVendorFingerprints = (script, accumulator) => {
183
168
  const text = script.source.artifact.text;
184
169
  for (const detector of vendorDetectors) {
185
170
  if (!detector.patterns.some((pattern) => text.includes(pattern)))
186
171
  continue;
187
172
  const key = `vendor\0${script.script_key}\0${detector.value}`;
188
- addBounded(accumulator, key, maximumFindings, () => accumulator.inferences.push({
173
+ addUnique(accumulator, key, () => accumulator.inferences.push({
189
174
  kind: detector.kind,
190
175
  value: detector.value,
191
176
  confidence: detector.confidence,
@@ -199,7 +184,7 @@ const addRouteFrameworkInference = (context) => {
199
184
  ? "React Router-compatible route API"
200
185
  : "Generic route registration API";
201
186
  const key = `route-framework\0${context.script.script_key}\0${value}`;
202
- addBounded(context.accumulator, key, context.maximumFindings, () => context.accumulator.inferences.push({
187
+ addUnique(context.accumulator, key, () => context.accumulator.inferences.push({
203
188
  kind: "route_framework",
204
189
  value,
205
190
  confidence: "medium",
@@ -211,18 +196,9 @@ const addRouteFrameworkInference = (context) => {
211
196
  ],
212
197
  }));
213
198
  };
214
- const addBounded = (accumulator, key, maximum, add) => {
199
+ const addUnique = (accumulator, key, add) => {
215
200
  if (accumulator.seen.has(key))
216
201
  return;
217
- const findings = accumulator.edges.length +
218
- accumulator.routes.length +
219
- accumulator.endpoints.length +
220
- accumulator.webMcp.length +
221
- accumulator.inferences.length;
222
- if (findings >= maximum) {
223
- accumulator.droppedFindings += 1;
224
- return;
225
- }
226
202
  accumulator.seen.add(key);
227
203
  add();
228
204
  };
@@ -243,8 +219,6 @@ export const emptyAccumulator = () => ({
243
219
  visitedNodes: 0,
244
220
  parsedScripts: 0,
245
221
  parseFailures: 0,
246
- droppedFindings: 0,
247
- astLimitReached: false,
248
222
  });
249
223
  export const isIncludedScript = (script) => script.source.included;
250
224
  const routeCallNames = [
@@ -7,11 +7,7 @@ export const buildWebBundleAnalysis = (inspection, sourceScripts, sourceMaps, ac
7
7
  const partial = accumulator.parseFailures > 0 ||
8
8
  unavailable.length > 0 ||
9
9
  sourceMapIncomplete;
10
- const truncated = accumulator.astLimitReached ||
11
- accumulator.droppedFindings > 0 ||
12
- sourceMaps.status === "truncated";
13
10
  return webBundleAnalysisSchema.parse({
14
- schema_version: 1,
15
11
  capture: buildCaptureObservation(inspection, sourceScripts),
16
12
  observations: {
17
13
  chunks: {
@@ -31,12 +27,10 @@ export const buildWebBundleAnalysis = (inspection, sourceScripts, sourceMaps, ac
31
27
  sourceMaps,
32
28
  }),
33
29
  completeness: buildCompleteness({
34
- truncated,
35
30
  partial,
36
31
  parsedScripts: accumulator.parsedScripts,
37
32
  parseFailures: accumulator.parseFailures,
38
33
  visitedNodes: accumulator.visitedNodes,
39
- droppedFindings: accumulator.droppedFindings,
40
34
  }),
41
35
  limitations: bundleLimitations(),
42
36
  });
@@ -69,7 +63,7 @@ const buildUnknowns = (input) => [
69
63
  : [
70
64
  {
71
65
  dimension: "script_source",
72
- reason: "Source artifact was not captured within approved limits",
66
+ reason: "Source artifact was not captured",
73
67
  affected_script_keys: input.unavailable,
74
68
  },
75
69
  ]),
@@ -88,30 +82,19 @@ const buildUnknowns = (input) => [
88
82
  : [
89
83
  {
90
84
  dimension: "source_maps",
91
- reason: input.sourceMaps.status === "truncated"
92
- ? "Source-map evidence was truncated by approved limits"
93
- : "One or more requested source maps were unavailable or incomplete",
94
- affected_script_keys: [
95
- ...new Set([
96
- ...input.sourceMaps.items
97
- .filter(({ status }) => status !== "included")
98
- .map(({ script_key }) => script_key),
99
- ...input.sourceMaps.dropped_script_keys,
100
- ]),
101
- ].sort(),
85
+ reason: "One or more requested source maps were unavailable or incomplete",
86
+ affected_script_keys: input.sourceMaps.items
87
+ .filter(({ status }) => status !== "included")
88
+ .map(({ script_key }) => script_key)
89
+ .sort(),
102
90
  },
103
91
  ]),
104
92
  ];
105
93
  const buildCompleteness = (input) => ({
106
- status: input.truncated
107
- ? "truncated"
108
- : input.partial
109
- ? "partial"
110
- : "complete_within_limits",
94
+ status: input.partial ? "partial" : "complete",
111
95
  parsed_scripts: input.parsedScripts,
112
96
  parse_failures: input.parseFailures,
113
97
  visited_ast_nodes: input.visitedNodes,
114
- dropped_findings: input.droppedFindings,
115
98
  });
116
99
  const bundleLimitations = () => [
117
100
  "Static bundle findings are observations or bounded inferences; REA does not execute captured JavaScript.",
@@ -1,64 +1,14 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import canonicalize from "canonicalize";
3
- import { z } from "zod";
4
- import { webPageInspectionSchema, } from "./browserObservation.js";
5
- import { webMcpDiscoverySchema, } from "./webMcpDiscovery.js";
6
- /** One normalized passive page snapshot accepted by capture comparison. */
7
- export const captureSnapshotSchema = z.object({
8
- inspection: webPageInspectionSchema,
9
- webmcp: webMcpDiscoverySchema.nullable().default(null),
10
- });
11
- /** Input for deterministic comparison of two normalized web captures. */
12
- export const compareWebCapturesInputSchema = z.object({
13
- before: captureSnapshotSchema,
14
- after: captureSnapshotSchema,
15
- max_changes: z.number().int().min(1).max(20_000).default(2_000),
16
- });
17
- const changeSchema = z.object({
18
- identity: z.string(),
19
- change: z.enum(["added", "removed", "modified"]),
20
- });
21
- const dimensionSchema = z.object({
22
- status: z.enum(["changed", "unchanged", "unknown"]),
23
- total_changes: z.number().int().min(0),
24
- changes: z.array(changeSchema),
25
- omitted_changes: z.number().int().min(0),
26
- reason: z.string().nullable(),
27
- });
28
- const legacyUnknownDimension = {
29
- status: "unknown",
30
- total_changes: 0,
31
- changes: [],
32
- omitted_changes: 0,
33
- reason: "Dimension was not recorded by this version 1 capture diff.",
34
- };
35
- /** Completeness-aware changes across stable browser evidence dimensions. */
36
- export const webCaptureDiffSchema = z.object({
37
- schema_version: z.literal(1),
38
- overall_status: z.enum(["changed", "unchanged", "unknown"]),
39
- before_target: z.object({ target_id: z.string(), url: z.string() }),
40
- after_target: z.object({ target_id: z.string(), url: z.string() }),
41
- dimensions: z.object({
42
- dom_structure: dimensionSchema,
43
- scripts: dimensionSchema,
44
- resources: dimensionSchema,
45
- network: dimensionSchema,
46
- metadata: dimensionSchema,
47
- webmcp: dimensionSchema,
48
- accessibility: dimensionSchema.default(legacyUnknownDimension),
49
- storage: dimensionSchema.default(legacyUnknownDimension),
50
- }),
51
- limitations: z.array(z.string()),
52
- });
3
+ import { webCaptureDiffSchema, } from "./webCaptureDiffSchemas.js";
4
+ export { captureSnapshotSchema, compareWebCapturesInputSchema, webCaptureDiffSchema, } from "./webCaptureDiffSchemas.js";
53
5
  /** Compare normalized observations without treating incomplete absence as proof. */
54
6
  export const compareWebCaptures = (input) => {
55
- const remaining = { value: input.max_changes };
56
7
  const before = input.before.inspection;
57
8
  const after = input.after.inspection;
58
- const dimensions = compareWebCaptureDimensions(input, remaining);
9
+ const dimensions = compareWebCaptureDimensions(input);
59
10
  const statuses = Object.values(dimensions).map(({ status }) => status);
60
11
  return webCaptureDiffSchema.parse({
61
- schema_version: 1,
62
12
  overall_status: statuses.includes("changed")
63
13
  ? "changed"
64
14
  : statuses.includes("unknown")
@@ -96,38 +46,49 @@ const compareIdentities = (before, after) => {
96
46
  return changes.sort((left, right) => left.identity.localeCompare(right.identity) ||
97
47
  left.change.localeCompare(right.change));
98
48
  };
99
- const compareDimension = (remaining) => (before, after, complete, reason) => {
49
+ const compareDimension = (before, after, complete, reason) => {
100
50
  const all = compareIdentities(before, after);
101
- const retained = all.slice(0, remaining.value);
102
- remaining.value -= retained.length;
103
- return {
104
- status: all.length > 0 ? "changed" : complete ? "unchanged" : "unknown",
105
- total_changes: all.length,
106
- changes: retained,
107
- omitted_changes: all.length - retained.length,
108
- reason: all.length === 0 && !complete ? reason : null,
109
- };
51
+ if (all.length > 0)
52
+ return {
53
+ status: "changed",
54
+ total_changes: all.length,
55
+ changes: all,
56
+ reason: null,
57
+ };
58
+ return complete
59
+ ? {
60
+ status: "unchanged",
61
+ total_changes: 0,
62
+ changes: [],
63
+ reason: null,
64
+ }
65
+ : {
66
+ status: "unknown",
67
+ total_changes: 0,
68
+ changes: [],
69
+ reason,
70
+ };
110
71
  };
111
- const accessibilityDimension = (before, after, remaining) => {
72
+ const accessibilityDimension = (before, after) => {
112
73
  const beforeAccess = accessibilityComparable(before);
113
74
  const afterAccess = accessibilityComparable(after);
114
75
  const textComparable = beforeAccess.text && afterAccess.text;
115
76
  const nodesComparable = beforeAccess.nodes && afterAccess.nodes;
116
- return compareDimension(remaining)(singleton("accessibility_tree", digest(accessibilityProjection(before.accessibility, textComparable, nodesComparable))), singleton("accessibility_tree", digest(accessibilityProjection(after.accessibility, textComparable, nodesComparable))), beforeAccess.complete && afterAccess.complete, "Accessibility tree or text capture was incomplete in at least one observation.");
77
+ return compareDimension(singleton("accessibility_tree", digest(accessibilityProjection(before.accessibility, textComparable, nodesComparable))), singleton("accessibility_tree", digest(accessibilityProjection(after.accessibility, textComparable, nodesComparable))), beforeAccess.complete && afterAccess.complete, "Accessibility tree or text capture was incomplete in at least one observation.");
117
78
  };
118
- const storageDimension = (before, after, remaining) => {
79
+ const storageDimension = (before, after) => {
119
80
  const keysComplete = storageKeysComparable(before) && storageKeysComparable(after);
120
81
  const usageComplete = before.storage.usage_bytes !== null &&
121
82
  after.storage.usage_bytes !== null &&
122
83
  before.storage.quota_bytes !== null &&
123
84
  after.storage.quota_bytes !== null;
124
85
  const comparableFingerprints = storageFingerprintIdentities(before.storage, after.storage);
125
- return compareDimension(remaining)(storageMap(before.storage, keysComplete, usageComplete, comparableFingerprints), storageMap(after.storage, keysComplete, usageComplete, comparableFingerprints), storageComparable(before, after, keysComplete, usageComplete), "Storage fingerprints, inventories, usage, or quota were unavailable or truncated in at least one observation.");
86
+ return compareDimension(storageMap(before.storage, keysComplete, usageComplete, comparableFingerprints), storageMap(after.storage, keysComplete, usageComplete, comparableFingerprints), storageComparable(before, after, keysComplete, usageComplete), "Storage fingerprints, inventories, usage, or quota were unavailable or truncated in at least one observation.");
126
87
  };
127
- const compareWebCaptureDimensions = (input, remaining) => {
88
+ const compareWebCaptureDimensions = (input) => {
128
89
  const before = input.before.inspection;
129
90
  const after = input.after.inspection;
130
- const dimension = compareDimension(remaining);
91
+ const dimension = compareDimension;
131
92
  return {
132
93
  dom_structure: dimension(singleton("document", digest(domProjection(before))), singleton("document", digest(domProjection(after))), sectionsComplete(before, ["frames", "dom"]) &&
133
94
  sectionsComplete(after, ["frames", "dom"]), "DOM or frame capture was incomplete in at least one observation."),
@@ -140,8 +101,8 @@ const compareWebCaptureDimensions = (input, remaining) => {
140
101
  metadata: dimension(singleton("metadata", digest(metadataProjection(before))), singleton("metadata", digest(metadataProjection(after))), sectionsComplete(before, ["metadata"]) &&
141
102
  sectionsComplete(after, ["metadata"]), "Safe metadata capture was incomplete in at least one observation."),
142
103
  webmcp: dimension(webMcpMap(input.before.webmcp), webMcpMap(input.after.webmcp), webMcpComplete(input.before.webmcp) && webMcpComplete(input.after.webmcp), "WebMCP discovery was unavailable or incomplete in at least one capture."),
143
- accessibility: accessibilityDimension(before, after, remaining),
144
- storage: storageDimension(before, after, remaining),
104
+ accessibility: accessibilityDimension(before, after),
105
+ storage: storageDimension(before, after),
145
106
  };
146
107
  };
147
108
  const keyed = (values, identity) => new Map(values.map((value) => [identity(value), digest(value)]));
@@ -220,8 +181,7 @@ const digest = (value) => {
220
181
  };
221
182
  const accessibilityComparable = (inspection) => {
222
183
  const text = inspection.accessibility.text_capture.status === "included" &&
223
- inspection.accessibility.text_capture.excluded_fields === 0 &&
224
- inspection.accessibility.text_capture.truncated_fields === 0;
184
+ inspection.accessibility.text_capture.excluded_fields === 0;
225
185
  const nodes = inspection.accessibility.total_nodes ===
226
186
  inspection.accessibility.nodes.length;
227
187
  const complete = text && nodes && sectionsComplete(inspection, ["accessibility"]);
@@ -0,0 +1,86 @@
1
+ import { z } from "zod";
2
+ import { webPageInspectionSchema } from "./browserObservation.js";
3
+ import { webMcpDiscoverySchema } from "./webMcpDiscovery.js";
4
+ /** One normalized passive page snapshot accepted by capture comparison. */
5
+ export const captureSnapshotSchema = z.object({
6
+ inspection: webPageInspectionSchema,
7
+ webmcp: webMcpDiscoverySchema.nullable().default(null),
8
+ });
9
+ /** Input for deterministic comparison of two normalized web captures. */
10
+ export const compareWebCapturesInputSchema = z.strictObject({
11
+ before: captureSnapshotSchema,
12
+ after: captureSnapshotSchema,
13
+ });
14
+ const changeSchema = z.object({
15
+ identity: z.string(),
16
+ change: z.enum(["added", "removed", "modified"]),
17
+ });
18
+ const emptyDimensionShape = {
19
+ total_changes: z.literal(0),
20
+ changes: z.tuple([]),
21
+ };
22
+ const dimensionSchema = z.union([
23
+ z
24
+ .object({
25
+ status: z.literal("changed"),
26
+ total_changes: z.number().int().min(1),
27
+ changes: z.array(changeSchema),
28
+ reason: z.null(),
29
+ })
30
+ .superRefine((dimension, context) => {
31
+ if (dimension.changes.length !== dimension.total_changes)
32
+ context.addIssue({
33
+ code: "custom",
34
+ message: "Inline changes must equal total changes",
35
+ path: ["total_changes"],
36
+ });
37
+ }),
38
+ z.object({
39
+ ...emptyDimensionShape,
40
+ status: z.literal("unchanged"),
41
+ reason: z.null(),
42
+ }),
43
+ z.object({
44
+ ...emptyDimensionShape,
45
+ status: z.literal("unknown"),
46
+ reason: z.string(),
47
+ }),
48
+ ]);
49
+ const legacyUnknownDimension = {
50
+ status: "unknown",
51
+ total_changes: 0,
52
+ changes: [],
53
+ reason: "Dimension was not recorded by this version 1 capture diff.",
54
+ };
55
+ /** Completeness-aware changes across stable browser evidence dimensions. */
56
+ export const webCaptureDiffSchema = z
57
+ .object({
58
+ overall_status: z.enum(["changed", "unchanged", "unknown"]),
59
+ before_target: z.object({ target_id: z.string(), url: z.string() }),
60
+ after_target: z.object({ target_id: z.string(), url: z.string() }),
61
+ dimensions: z.object({
62
+ dom_structure: dimensionSchema,
63
+ scripts: dimensionSchema,
64
+ resources: dimensionSchema,
65
+ network: dimensionSchema,
66
+ metadata: dimensionSchema,
67
+ webmcp: dimensionSchema,
68
+ accessibility: dimensionSchema.default(legacyUnknownDimension),
69
+ storage: dimensionSchema.default(legacyUnknownDimension),
70
+ }),
71
+ limitations: z.array(z.string()),
72
+ })
73
+ .superRefine((comparison, context) => {
74
+ const statuses = Object.values(comparison.dimensions).map(({ status }) => status);
75
+ const expected = statuses.includes("changed")
76
+ ? "changed"
77
+ : statuses.includes("unknown")
78
+ ? "unknown"
79
+ : "unchanged";
80
+ if (comparison.overall_status !== expected)
81
+ context.addIssue({
82
+ code: "custom",
83
+ message: "Overall status must summarize dimension statuses",
84
+ path: ["overall_status"],
85
+ });
86
+ });
@@ -3,10 +3,9 @@ import { z } from "zod";
3
3
  /** Self-verifying text artifact used by web-source analysis boundaries. */
4
4
  export const webTextArtifactSchema = z
5
5
  .object({
6
- uri: z.string().regex(/^rea:\/\/web-content\/sha256\/[a-f0-9]{64}$/u),
7
6
  sha256: z.string().regex(/^[a-f0-9]{64}$/u),
8
7
  bytes: z.number().int().min(0),
9
- media_type: z.string().min(1).max(256),
8
+ media_type: z.string().min(1),
10
9
  charset: z.literal("utf-8"),
11
10
  text: z.string(),
12
11
  })
@@ -25,18 +24,11 @@ export const webTextArtifactSchema = z
25
24
  path: ["sha256"],
26
25
  message: "Digest mismatch",
27
26
  });
28
- if (artifact.uri !== webContentUri(digest))
29
- context.addIssue({
30
- code: "custom",
31
- path: ["uri"],
32
- message: "Content URI mismatch",
33
- });
34
27
  });
35
28
  /** Build an immutable content-addressed UTF-8 text artifact. */
36
29
  export const createWebTextArtifact = (text, mediaType) => {
37
30
  const sha256 = createHash("sha256").update(text).digest("hex");
38
31
  return {
39
- uri: webContentUri(sha256),
40
32
  sha256,
41
33
  bytes: Buffer.byteLength(text),
42
34
  media_type: mediaType,
@@ -44,4 +36,3 @@ export const createWebTextArtifact = (text, mediaType) => {
44
36
  text,
45
37
  };
46
38
  };
47
- const webContentUri = (sha256) => `rea://web-content/sha256/${sha256}`;
@@ -3,21 +3,11 @@ import { browserCompletenessSchema } from "./browserCompleteness.js";
3
3
  import { browserAllowedOriginsSchema, browserEndpointSchema, } from "./browserObservation.js";
4
4
  import { jsonShapeSchema } from "./jsonShape.js";
5
5
  /** Input for passive discovery of page-registered WebMCP tools. */
6
- export const discoverWebMcpToolsInputSchema = z.object({
6
+ export const discoverWebMcpToolsInputSchema = z.strictObject({
7
7
  cdp_endpoint: browserEndpointSchema,
8
8
  allowed_origins: browserAllowedOriginsSchema,
9
- target_id: z.string().trim().min(1).max(256),
10
- approved: z.literal(true),
11
- observation_ms: z.number().int().min(0).max(10_000).default(100),
12
- max_tools: z.number().int().min(1).max(5_000).default(500),
13
- max_schema_bytes: z
14
- .number()
15
- .int()
16
- .min(1)
17
- .max(1_024 * 1_024)
18
- .default(256 * 1_024),
19
- max_schema_nodes: z.number().int().min(1).max(100_000).default(5_000),
20
- max_schema_depth: z.number().int().min(1).max(100).default(20),
9
+ target_id: z.string().trim().min(1),
10
+ observation_ms: z.number().int().min(0).default(100),
21
11
  });
22
12
  const browserVersionSchema = z.object({
23
13
  product: z.string(),
@@ -51,7 +41,6 @@ const webMcpToolSchema = z.object({
51
41
  });
52
42
  /** Passive WebMCP inventory; it intentionally has no invocation surface. */
53
43
  export const webMcpDiscoverySchema = z.object({
54
- schema_version: z.literal(1),
55
44
  browser: browserVersionSchema,
56
45
  target: z.object({
57
46
  target_id: z.string(),