rea-agents 3.0.0 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (628) hide show
  1. package/README.md +83 -108
  2. package/bridge/ghidra/ReaGhidraBridge.java +609 -841
  3. package/bridge/hopper_bridge.py +99 -344
  4. package/dist/application/AbortablePromise.js +6 -3
  5. package/dist/application/AnalysisContextQueries.js +21 -9
  6. package/dist/application/AnalysisSnapshotCache.js +0 -1
  7. package/dist/application/AnalysisSnapshotFiles.js +7 -7
  8. package/dist/application/AndroidApplicationService.js +1 -1
  9. package/dist/application/AppleApplicationService.js +1 -1
  10. package/dist/application/ArtifactExtraction.js +35 -54
  11. package/dist/application/ArtifactExtractionDestination.js +17 -0
  12. package/dist/application/ArtifactGraphConstruction.js +2 -17
  13. package/dist/application/ArtifactInventory/classify.js +2 -6
  14. package/dist/application/ArtifactInventory/hash.js +2 -20
  15. package/dist/application/ArtifactInventory/policy.js +17 -0
  16. package/dist/application/ArtifactInventory/reader.js +1 -4
  17. package/dist/application/ArtifactInventory/scanCanonical.js +8 -15
  18. package/dist/application/ArtifactInventory/scanReader.js +76 -58
  19. package/dist/application/ArtifactInventory/types.js +1 -5
  20. package/dist/application/ArtifactInventory.js +6 -14
  21. package/dist/application/AuthorizedArtifactInventory.js +3 -13
  22. package/dist/application/BinarySession.js +54 -28
  23. package/dist/application/BinarySessionComposition.js +0 -11
  24. package/dist/application/BinarySessionOpen.js +2 -1
  25. package/dist/application/BinarySessionRecords.js +24 -86
  26. package/dist/application/BinarySessionStatus.js +16 -21
  27. package/dist/application/BinaryTargetResolver.js +216 -0
  28. package/dist/application/BrowserEvidence.js +39 -57
  29. package/dist/application/BrowserObservationService.js +3 -6
  30. package/dist/application/BrowserScenarioCaptureService.js +3 -6
  31. package/dist/application/BrowserScenarioEvidence.js +3 -3
  32. package/dist/application/CallPathTracing.js +2 -36
  33. package/dist/application/CapabilityClientRequirements.js +26 -0
  34. package/dist/application/CapabilityInventory.js +143 -77
  35. package/dist/application/ClientConfigurationDocument.js +27 -0
  36. package/dist/application/ClientRegistrationStatus.js +16 -13
  37. package/dist/application/CommandShimReplay.js +14 -1
  38. package/dist/application/DirectAnalysis.js +22 -46
  39. package/dist/application/DirectAnalysisStatus.js +5 -61
  40. package/dist/application/Doctor.js +11 -32
  41. package/dist/application/DoctorDiagnostics.js +1 -2
  42. package/dist/application/DoctorScope.js +1 -1
  43. package/dist/application/ElectronActiveEvidence.js +50 -0
  44. package/dist/application/ElectronActiveObservationPort.js +1 -0
  45. package/dist/application/ElectronActiveObservationService.js +78 -0
  46. package/dist/application/ElectronBoundaryAnalysis.js +7 -8
  47. package/dist/application/ElectronBoundaryGraphContext.js +1 -1
  48. package/dist/application/ElectronBoundaryGraphIpc.js +3 -3
  49. package/dist/application/ElectronBoundaryGraphNative.js +1 -2
  50. package/dist/application/ElectronBoundaryGraphWindows.js +6 -8
  51. package/dist/application/ElectronEvidence.js +4 -7
  52. package/dist/application/ElectronObservationService.js +5 -9
  53. package/dist/application/EnhancedLiteralTracing.js +42 -65
  54. package/dist/application/EnhancedTools.js +98 -64
  55. package/dist/application/EvidenceBundleCommands.js +16 -12
  56. package/dist/application/EvidenceBundleFiles.js +9 -15
  57. package/dist/application/EvidenceLedger.js +14 -42
  58. package/dist/application/FilesystemSnapshot.js +2 -3
  59. package/dist/application/InterfaceBuilderAnalysis.js +266 -0
  60. package/dist/application/InventoryProjectionEvidence.js +4 -2
  61. package/dist/application/InvestigationProviders.js +1 -1
  62. package/dist/application/JavaScriptApplicationEvidence.js +2 -5
  63. package/dist/application/JavaScriptApplicationEvidenceGraph.js +6 -10
  64. package/dist/application/JavaScriptApplicationService.js +6 -29
  65. package/dist/application/JavaScriptApplicationWorkflowEvidence.js +5 -5
  66. package/dist/application/JavaScriptApplicationWorkflowService.js +0 -8
  67. package/dist/application/JavaScriptArtifactAnalysis.js +38 -127
  68. package/dist/application/JavaScriptArtifactFiles.js +67 -107
  69. package/dist/application/JavaScriptArtifactGraphAccumulator.js +0 -7
  70. package/dist/application/JavaScriptArtifactGraphBuilder.js +7 -58
  71. package/dist/application/JavaScriptArtifactGraphBundlers.js +1 -6
  72. package/dist/application/JavaScriptArtifactGraphContext.js +12 -39
  73. package/dist/application/JavaScriptArtifactGraphDocuments.js +4 -11
  74. package/dist/application/JavaScriptArtifactGraphEvidence.js +0 -14
  75. package/dist/application/JavaScriptArtifactGraphFindings.js +3 -3
  76. package/dist/application/JavaScriptArtifactGraphStructure.js +16 -17
  77. package/dist/application/JavaScriptArtifactPathResolution.js +61 -49
  78. package/dist/application/JavaScriptArtifactReconstruction.js +5 -10
  79. package/dist/application/JavaScriptArtifactReconstructionInput.js +2 -14
  80. package/dist/application/JavaScriptJsonModules.js +2 -2
  81. package/dist/application/JavaScriptModuleRelationships.js +22 -27
  82. package/dist/application/JavaScriptReplayPermission.js +1 -1
  83. package/dist/application/JavaScriptReplayPlanning.js +9 -3
  84. package/dist/application/JavaScriptReplayService.js +29 -47
  85. package/dist/application/JavaScriptReturnShapeProjection.js +12 -42
  86. package/dist/application/JavaScriptRuntimeObservationEvidence.js +7 -8
  87. package/dist/application/JavaScriptRuntimeObservationService.js +4 -8
  88. package/dist/application/JavaScriptRuntimeReconciliationEvidence.js +2 -3
  89. package/dist/application/JavaScriptSemanticGraphBuilder.js +11 -41
  90. package/dist/application/JavaScriptSemanticGraphConstruction.js +5 -29
  91. package/dist/application/JavaScriptSemanticGraphEvidence.js +1 -1
  92. package/dist/application/JavaScriptSemanticGraphFingerprintProjection.js +1 -1
  93. package/dist/application/JavaScriptSemanticGraphFlowProjection.js +0 -13
  94. package/dist/application/JavaScriptSemanticGraphProjection.js +1 -3
  95. package/dist/application/JavaScriptSemanticTraceService.js +1 -10
  96. package/dist/application/JsonFiles.js +79 -0
  97. package/dist/application/LinuxHopper.js +11 -9
  98. package/dist/application/LoopbackReplay.js +26 -23
  99. package/dist/application/LoopbackReplayRecorder.js +29 -1
  100. package/dist/application/ManagedApplicationGraphService.js +1 -2
  101. package/dist/application/ManagedMemberComparisonService.js +11 -41
  102. package/dist/application/ManagedNativeVerificationService.js +1 -2
  103. package/dist/application/ManagedReconstructionService.js +1 -1
  104. package/dist/application/ManagedRuntimeCorrelationService.js +14 -13
  105. package/dist/application/NativeApiInspection.js +2 -7
  106. package/dist/application/NativeUiActionTrace.js +394 -0
  107. package/dist/application/NodeRuntimeCharacterizationService.js +11 -16
  108. package/dist/application/PermissionAuthority.js +15 -7
  109. package/dist/application/PermissionFailure.js +5 -0
  110. package/dist/application/ProcessCaptureAuthority.js +5 -7
  111. package/dist/application/ProcessCaptureJournal.js +3 -2
  112. package/dist/application/ProcessCaptureLifecycle.js +10 -12
  113. package/dist/application/ProcessCheckpoints.js +29 -11
  114. package/dist/application/ProcessCli.js +8 -17
  115. package/dist/application/ProcessEvidence.js +5 -7
  116. package/dist/application/ProcessHarness.js +60 -20
  117. package/dist/application/ProcessNormalization.js +2 -1
  118. package/dist/application/ProcessReactiveCoordinator.js +2 -4
  119. package/dist/application/ProcessReactiveEffects.js +9 -3
  120. package/dist/application/ProcessReactiveHarness.js +13 -7
  121. package/dist/application/ProcessSampling.js +2 -4
  122. package/dist/application/ProcessTimer.js +39 -0
  123. package/dist/application/ProjectPermissionStore.js +39 -95
  124. package/dist/application/RealHopperAssertions.js +20 -66
  125. package/dist/application/ReconstructionCoverageService.js +12 -58
  126. package/dist/application/ReconstructionObligationAuthority.js +2 -2
  127. package/dist/application/ReconstructionObligationCandidates.js +4 -4
  128. package/dist/application/ReconstructionObligationLedgerEvaluation.js +8 -15
  129. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -7
  130. package/dist/application/ReconstructionObligationLedgerService.js +19 -38
  131. package/dist/application/ReferenceSourceImport.js +21 -47
  132. package/dist/application/ReferenceSourceImportEntries.js +2 -4
  133. package/dist/application/ReferenceSourceImportPolicy.js +5 -32
  134. package/dist/application/ReferenceSourceImportTypes.js +0 -16
  135. package/dist/application/RuntimeExecutableDiagnostics.js +55 -29
  136. package/dist/application/SessionProviderRouter.js +2 -2
  137. package/dist/application/Setup.js +1 -3
  138. package/dist/application/SetupClientConfiguration.js +22 -88
  139. package/dist/application/SetupRegistrationEnvironment.js +0 -7
  140. package/dist/application/StoreFileLock.js +119 -0
  141. package/dist/application/TerminalRenderer.js +2 -3
  142. package/dist/application/Uninstall.js +9 -14
  143. package/dist/application/UnknownEvidence.js +1 -1
  144. package/dist/application/WindowsCapabilities.js +5 -4
  145. package/dist/artifacts/ArtifactPaths.js +2 -5
  146. package/dist/artifacts/ArtifactProvider.js +43 -67
  147. package/dist/artifacts/DirectoryArtifactReader.js +13 -8
  148. package/dist/artifacts/MachOSliceArtifactReader.js +1 -5
  149. package/dist/artifacts/NativeDmgArtifactReader.js +11 -11
  150. package/dist/artifacts/NibArchive.js +269 -0
  151. package/dist/artifacts/SafeOutputTree.js +21 -31
  152. package/dist/browser/BrowserProcessStartup.js +1 -2
  153. package/dist/browser/CdpAuthorizedMainFrame.js +16 -0
  154. package/dist/browser/CdpBrowserProvider.js +3 -13
  155. package/dist/browser/CdpCanonicalJsonDigest.js +9 -0
  156. package/dist/browser/CdpCaptureDocuments.js +28 -76
  157. package/dist/browser/CdpCaptureEventBodyShapes.js +13 -33
  158. package/dist/browser/CdpCaptureEventHandlers.js +22 -87
  159. package/dist/browser/CdpCaptureEvents.js +2 -8
  160. package/dist/browser/CdpCaptureStorage.js +9 -20
  161. package/dist/browser/CdpCaptureStorageFingerprints.js +85 -95
  162. package/dist/browser/CdpCaptureValues.js +21 -21
  163. package/dist/browser/CdpConnection.js +10 -25
  164. package/dist/browser/CdpElectronInspection.js +29 -51
  165. package/dist/browser/CdpElectronProvider.js +10 -35
  166. package/dist/browser/CdpElectronScriptEvents.js +8 -16
  167. package/dist/browser/CdpElectronScripts.js +6 -35
  168. package/dist/browser/CdpElectronWorkers.js +6 -10
  169. package/dist/browser/CdpEndpoint.js +25 -41
  170. package/dist/browser/CdpObservationSession.js +14 -26
  171. package/dist/browser/CdpPageCapture.js +34 -48
  172. package/dist/browser/CdpPageCaptureScripts.js +1 -19
  173. package/dist/browser/CdpPageCaptureWorkers.js +6 -10
  174. package/dist/browser/CdpSafeMetadata.js +19 -22
  175. package/dist/browser/CdpScreenshot.js +3 -5
  176. package/dist/browser/CdpTargetSession.js +1 -2
  177. package/dist/browser/CdpWebMcpDiscovery.js +13 -22
  178. package/dist/browser/ElectronFileScope.js +8 -19
  179. package/dist/browser/JavaScriptRuntimeScope.js +10 -10
  180. package/dist/browser/PlaywrightBrowserScenarioProvider.js +31 -64
  181. package/dist/browser/PlaywrightElectronActiveActions.js +309 -0
  182. package/dist/browser/PlaywrightElectronActiveProvider.js +274 -0
  183. package/dist/browser/PlaywrightExecutionBoundary.js +16 -5
  184. package/dist/browser/PlaywrightScenarioActions.js +3 -7
  185. package/dist/browser/PlaywrightScenarioArtifacts.js +23 -92
  186. package/dist/browser/PlaywrightScenarioBrowser.js +7 -9
  187. package/dist/browser/PlaywrightScenarioEvents.js +45 -94
  188. package/dist/browser/PlaywrightScenarioSession.js +18 -34
  189. package/dist/browser/PngVisualDiff.js +22 -14
  190. package/dist/browser/SensitiveTextCapture.js +1 -18
  191. package/dist/browser/V8InspectorCaptureProjection.js +7 -7
  192. package/dist/browser/V8InspectorEndpoint.js +12 -14
  193. package/dist/browser/V8InspectorProvider.js +20 -61
  194. package/dist/browser/WebSourceMapFetcher.js +56 -176
  195. package/dist/catalogIdentity.js +12 -60
  196. package/dist/cli/artifactCommands.js +49 -77
  197. package/dist/cli/coreAnalysisCommands.js +83 -133
  198. package/dist/cli/javascriptApplicationAnalysis.js +1 -9
  199. package/dist/cli/managedCommands.js +6 -271
  200. package/dist/cli/setupCommands.js +3 -12
  201. package/dist/cli/utilityCommands.js +7 -41
  202. package/dist/cli.js +0 -2
  203. package/dist/cliApplicationCommands.js +44 -114
  204. package/dist/cliBrowserAdvancedCommands.js +12 -102
  205. package/dist/cliBrowserCommands.js +19 -124
  206. package/dist/cliBrowserContext.js +30 -0
  207. package/dist/cliCommandNames.js +5 -5
  208. package/dist/cliElectronCommands.js +49 -71
  209. package/dist/cliEvidenceCommands.js +8 -77
  210. package/dist/cliJavaScriptRuntimeCommands.js +18 -92
  211. package/dist/cliJsonInput.js +4 -14
  212. package/dist/cliObservationOptions.js +11 -92
  213. package/dist/cliPolicyCommands.js +2 -16
  214. package/dist/cliProcessCommands.js +3 -3
  215. package/dist/cliSetup.js +0 -13
  216. package/dist/config/browserScenario.js +77 -0
  217. package/dist/config/electronAutomation.js +35 -0
  218. package/dist/config/environment.js +6 -9
  219. package/dist/config/javascriptReplay.js +41 -0
  220. package/dist/config/managedRuntime.js +25 -0
  221. package/dist/config/parseConfig.js +56 -232
  222. package/dist/config/parsers.js +16 -28
  223. package/dist/config/passiveObservation.js +87 -0
  224. package/dist/config/permissions.js +0 -7
  225. package/dist/config/processCapture.js +47 -0
  226. package/dist/contracts/analysisSearchContract.js +2 -5
  227. package/dist/contracts/applicationToolContracts.js +58 -114
  228. package/dist/contracts/applicationWorkflowInputContracts.js +29 -114
  229. package/dist/contracts/artifactComparisonExample.js +58 -60
  230. package/dist/contracts/artifactToolContracts.js +37 -91
  231. package/dist/contracts/browserScenarioToolContracts.js +6 -51
  232. package/dist/contracts/browserToolContracts.js +10 -75
  233. package/dist/contracts/electronToolContracts.js +27 -98
  234. package/dist/contracts/enhancedInputs.js +31 -78
  235. package/dist/contracts/errorSchemas.js +0 -1
  236. package/dist/contracts/functionComparisonExample.js +10 -24
  237. package/dist/contracts/functionInstructionContract.js +1 -3
  238. package/dist/contracts/functionWorkflowToolContracts.js +4 -5
  239. package/dist/contracts/hopperMemoryContracts.js +3 -3
  240. package/dist/contracts/investigationExamples.js +14 -11
  241. package/dist/contracts/javascriptApplicationWorkflowExamples.js +12 -19
  242. package/dist/contracts/javascriptRuntimeObservationToolContracts.js +2 -20
  243. package/dist/contracts/javascriptRuntimeReconciliationExample.js +45 -12
  244. package/dist/contracts/managedToolContracts.js +10 -104
  245. package/dist/contracts/managedWorkflowExamples.js +77 -125
  246. package/dist/contracts/managedWorkflowToolContracts.js +51 -74
  247. package/dist/contracts/nativeToolContracts.js +9 -14
  248. package/dist/contracts/processCaptureExample.js +2 -69
  249. package/dist/contracts/promptContracts.js +49 -67
  250. package/dist/contracts/providerSelection.js +0 -1
  251. package/dist/contracts/reconstructionReadinessExample.js +1 -6
  252. package/dist/contracts/sessionStatusContract.js +1 -17
  253. package/dist/contracts/sessionToolSchemas.js +52 -0
  254. package/dist/contracts/toolContractExamples.js +11 -10
  255. package/dist/contracts/toolContractHelpers.js +19 -0
  256. package/dist/contracts/toolContracts.js +60 -143
  257. package/dist/contracts/toolEffects.js +16 -9
  258. package/dist/contracts/toolOutputSchemaGroups.js +47 -86
  259. package/dist/contracts/toolOutputSchemaPrimitives.js +72 -62
  260. package/dist/contracts/toolSchemaMetadata.js +117 -0
  261. package/dist/contracts/unknownContractExamples.js +0 -2
  262. package/dist/doctorRuntime.js +1 -1
  263. package/dist/domain/analysisErrorPresentation.js +46 -54
  264. package/dist/domain/analysisErrorProjection.js +28 -37
  265. package/dist/domain/analysisProfile.js +3 -31
  266. package/dist/domain/analysisSnapshot.js +3 -12
  267. package/dist/domain/androidApplication.js +15 -52
  268. package/dist/domain/appleApplication.js +24 -65
  269. package/dist/domain/artifactComparison.js +11 -29
  270. package/dist/domain/artifactGraph.js +14 -44
  271. package/dist/domain/artifactInspection.js +38 -69
  272. package/dist/domain/artifactInventoryEvidence.js +27 -21
  273. package/dist/domain/binaryTarget.js +2 -219
  274. package/dist/domain/binaryTargetTypes.js +1 -0
  275. package/dist/domain/browserCaptureComparison.js +35 -60
  276. package/dist/domain/browserObservation.js +45 -197
  277. package/dist/domain/browserObservationSchemas.js +5 -23
  278. package/dist/domain/browserScenario.js +11 -14
  279. package/dist/domain/browserScenarioCapture.js +11 -12
  280. package/dist/domain/browserScenarioCaptureValues.js +146 -84
  281. package/dist/domain/browserScenarioDiff.js +2 -59
  282. package/dist/domain/browserScenarioDiffEvidence.js +51 -0
  283. package/dist/domain/browserScenarioDiffValues.js +21 -38
  284. package/dist/domain/browserScenarioValues.js +80 -109
  285. package/dist/domain/browserSession.js +4 -7
  286. package/dist/domain/bundleComparison.js +6 -32
  287. package/dist/domain/bytecodeProvider.js +53 -54
  288. package/dist/domain/callPath.js +50 -169
  289. package/dist/domain/callPathSchemas.js +79 -0
  290. package/dist/domain/changedBehavior.js +34 -60
  291. package/dist/domain/completionLedgerGeneration.js +8 -14
  292. package/dist/domain/conformancePackage.js +126 -97
  293. package/dist/domain/conformanceReplay.js +39 -11
  294. package/dist/domain/conformanceTrustGate.js +174 -30
  295. package/dist/domain/customProtocolCapture.js +4 -4
  296. package/dist/domain/electronActiveObservation.js +244 -0
  297. package/dist/domain/electronObservation.js +21 -83
  298. package/dist/domain/electronStaticAnalysisBrowser.js +36 -46
  299. package/dist/domain/electronStaticAnalysisIpc.js +38 -14
  300. package/dist/domain/electronStaticAnalysisNative.js +1 -8
  301. package/dist/domain/electronStaticAnalysisValues.js +14 -18
  302. package/dist/domain/errors.js +33 -54
  303. package/dist/domain/eventProcessTree.js +101 -90
  304. package/dist/domain/evidence.js +2 -10
  305. package/dist/domain/evidenceBundle.js +3 -5
  306. package/dist/domain/evidenceCompletionLedger.js +6 -8
  307. package/dist/domain/functionComparison.js +4 -14
  308. package/dist/domain/functionComparisonNormalization.js +8 -8
  309. package/dist/domain/functionComparisonResults.js +25 -15
  310. package/dist/domain/functionComparisonSchemas.js +49 -33
  311. package/dist/domain/functionDossierEvidence.js +31 -151
  312. package/dist/domain/hopperStartupFailure.js +1 -1
  313. package/dist/domain/hopperValues.js +17 -141
  314. package/dist/domain/inputIssueProjection.js +4 -1
  315. package/dist/domain/interfaceBuilderGraph.js +654 -0
  316. package/dist/domain/javascriptApplicationAnalysis.js +8 -112
  317. package/dist/domain/javascriptApplicationChangeGraph.js +22 -82
  318. package/dist/domain/javascriptApplicationEvidenceSchemas.js +59 -47
  319. package/dist/domain/javascriptApplicationGraph.js +3 -13
  320. package/dist/domain/javascriptApplicationGraphSchemas.js +12 -34
  321. package/dist/domain/javascriptApplicationVersionComparison.js +26 -30
  322. package/dist/domain/javascriptApplicationVersionComparisonSchemas.js +123 -68
  323. package/dist/domain/javascriptApplicationVersionItems.js +120 -53
  324. package/dist/domain/javascriptApplicationVersionKeys.js +24 -11
  325. package/dist/domain/javascriptAstFingerprint.js +25 -58
  326. package/dist/domain/javascriptAstValues.js +9 -0
  327. package/dist/domain/javascriptExportInstrumentation.js +2 -4
  328. package/dist/domain/javascriptExportShapeComparison.js +6 -7
  329. package/dist/domain/javascriptExportShapeComparisonSchemas.js +70 -77
  330. package/dist/domain/javascriptExportShapeSelection.js +17 -19
  331. package/dist/domain/javascriptFeatureSeed.js +20 -12
  332. package/dist/domain/javascriptFeatureTrace.js +13 -67
  333. package/dist/domain/javascriptFeatureTraceSchemas.js +24 -52
  334. package/dist/domain/javascriptFeatureTraversal.js +1 -44
  335. package/dist/domain/javascriptNativeHandoff.js +1 -1
  336. package/dist/domain/javascriptReplay.js +100 -101
  337. package/dist/domain/javascriptRuntimeLoadState.js +3 -8
  338. package/dist/domain/javascriptRuntimeObservation.js +43 -103
  339. package/dist/domain/javascriptRuntimeReconciliation.js +1 -3
  340. package/dist/domain/javascriptRuntimeReconciliationActive.js +80 -0
  341. package/dist/domain/javascriptRuntimeReconciliationGraph.js +21 -33
  342. package/dist/domain/javascriptRuntimeReconciliationMatching.js +75 -61
  343. package/dist/domain/javascriptRuntimeReconciliationParsing.js +21 -46
  344. package/dist/domain/javascriptRuntimeReconciliationResult.js +25 -19
  345. package/dist/domain/javascriptRuntimeReconciliationRuntime.js +8 -12
  346. package/dist/domain/javascriptRuntimeReconciliationSchemas.js +34 -49
  347. package/dist/domain/javascriptRuntimeStaticCandidates.js +3 -3
  348. package/dist/domain/javascriptSemanticAnalysis.js +12 -45
  349. package/dist/domain/javascriptSemanticAsyncEffects.js +1 -9
  350. package/dist/domain/javascriptSemanticCallResolution.js +6 -16
  351. package/dist/domain/javascriptSemanticCalls.js +5 -32
  352. package/dist/domain/javascriptSemanticChildProcesses.js +1 -11
  353. package/dist/domain/javascriptSemanticCoverage.js +11 -0
  354. package/dist/domain/javascriptSemanticDataEffectHelpers.js +1 -8
  355. package/dist/domain/javascriptSemanticDataEffects.js +1 -11
  356. package/dist/domain/javascriptSemanticFingerprints.js +3 -5
  357. package/dist/domain/javascriptSemanticGraphSchemas.js +25 -51
  358. package/dist/domain/javascriptSemanticGraphSerialization.js +2 -13
  359. package/dist/domain/javascriptSemanticIr.js +1 -29
  360. package/dist/domain/javascriptSemanticObjects.js +1 -5
  361. package/dist/domain/javascriptSemanticPrimitives.js +2 -9
  362. package/dist/domain/javascriptSemanticProjection.js +0 -18
  363. package/dist/domain/javascriptSemanticPromises.js +9 -16
  364. package/dist/domain/javascriptSemanticProvenance.js +16 -19
  365. package/dist/domain/javascriptSemanticQuery.js +17 -139
  366. package/dist/domain/javascriptSemanticQueryAssessment.js +9 -37
  367. package/dist/domain/javascriptSemanticQueryIdentity.js +2 -23
  368. package/dist/domain/javascriptSemanticQuerySchemas.js +14 -107
  369. package/dist/domain/javascriptSemanticResources.js +1 -6
  370. package/dist/domain/javascriptSemanticReturns.js +10 -27
  371. package/dist/domain/javascriptSemanticValueTypes.js +1 -0
  372. package/dist/domain/javascriptSemanticValues.js +44 -62
  373. package/dist/domain/javascriptStaticAnalysis.js +21 -43
  374. package/dist/domain/javascriptStaticAnalysisBundler.js +34 -93
  375. package/dist/domain/javascriptStaticAnalysisCalls.js +17 -16
  376. package/dist/domain/javascriptStaticAnalysisFindings.js +3 -19
  377. package/dist/domain/javascriptStaticAnalysisHelpers.js +47 -88
  378. package/dist/domain/javascriptStaticAnalysisState.js +1 -5
  379. package/dist/domain/javascriptStaticAnalysisTypes.js +1 -0
  380. package/dist/domain/jsonShape.js +7 -33
  381. package/dist/domain/localPath.js +7 -0
  382. package/dist/domain/managedApplicationGraph.js +9 -41
  383. package/dist/domain/managedApplicationGraphCoverage.js +24 -156
  384. package/dist/domain/managedApplicationGraphNodes.js +10 -13
  385. package/dist/domain/managedArtifact.js +14 -27
  386. package/dist/domain/managedMemberComparison.js +90 -92
  387. package/dist/domain/managedMemberComparisonCoverage.js +11 -33
  388. package/dist/domain/managedMemberComparisonItems.js +221 -0
  389. package/dist/domain/managedMemberComparisonMatch.js +8 -208
  390. package/dist/domain/managedNativeVerification.js +3 -6
  391. package/dist/domain/managedNativeVerificationMatch.js +55 -59
  392. package/dist/domain/managedNativeVerificationSchemas.js +83 -47
  393. package/dist/domain/managedReconstruction.js +19 -23
  394. package/dist/domain/managedRuntimeCorrelation.js +6 -9
  395. package/dist/domain/nativeApiBoundary.js +17 -14
  396. package/dist/domain/nativeInspection.js +0 -2
  397. package/dist/domain/nativeInvestigationGraph.js +351 -0
  398. package/dist/domain/nativeValueFlow.js +61 -0
  399. package/dist/domain/nodeRuntimeCharacterization.js +15 -18
  400. package/dist/domain/objcSwiftMetadata.js +254 -0
  401. package/dist/domain/peInspection.js +1 -1
  402. package/dist/domain/permissionPolicy.js +13 -0
  403. package/dist/domain/processCapture.js +76 -113
  404. package/dist/domain/processCaptureExample.js +68 -0
  405. package/dist/domain/processCaptureParsing.js +21 -0
  406. package/dist/domain/processCaptureReactiveSchema.js +68 -0
  407. package/dist/domain/processCaptureReactiveValidation.js +8 -3
  408. package/dist/domain/processCaptureValidation.js +8 -10
  409. package/dist/domain/processComparison.js +12 -16
  410. package/dist/domain/processObservation.js +5 -6
  411. package/dist/domain/processReactiveMatching.js +32 -46
  412. package/dist/domain/processReactiveRuntime.js +4 -8
  413. package/dist/domain/processReactiveScenario.js +28 -94
  414. package/dist/domain/processReactiveScenarioPreflight.js +5 -30
  415. package/dist/domain/processReactiveTransition.js +42 -21
  416. package/dist/domain/processScenario.js +62 -93
  417. package/dist/domain/processTraceComparison.js +0 -7
  418. package/dist/domain/processTraceEvaluation.js +14 -4
  419. package/dist/domain/processTraceSpecification.js +11 -17
  420. package/dist/domain/protocolCapture.js +11 -9
  421. package/dist/domain/reconstructionCoverage.js +62 -129
  422. package/dist/domain/reconstructionCoverageEvaluation.js +17 -17
  423. package/dist/domain/reconstructionObligationLedgerSchemas.js +45 -72
  424. package/dist/domain/reconstructionReadiness.js +1 -2
  425. package/dist/domain/reconstructionReadinessSchemas.js +66 -40
  426. package/dist/domain/reconstructionUnknowns.js +3 -3
  427. package/dist/domain/reconstructionVerification.js +13 -47
  428. package/dist/domain/reconstructionVerificationSchemas.js +50 -38
  429. package/dist/domain/referenceSourceGraph.js +53 -61
  430. package/dist/domain/referenceSourceImportParsing.js +3 -7
  431. package/dist/domain/replayMachine.js +19 -31
  432. package/dist/domain/replayMachineRun.js +15 -63
  433. package/dist/domain/replayMachineRuntime.js +46 -44
  434. package/dist/domain/replayMachineValues.js +84 -0
  435. package/dist/domain/residualUnknown.js +25 -30
  436. package/dist/domain/runtimeCharacterization.js +15 -16
  437. package/dist/domain/runtimeIdentification.js +48 -47
  438. package/dist/domain/sourceToBundleComparison.js +11 -87
  439. package/dist/domain/sourceToBundleComparisonSchemas.js +25 -50
  440. package/dist/domain/sourceToBundleSignals.js +11 -16
  441. package/dist/domain/staticRuntimeCorrelation.js +44 -54
  442. package/dist/domain/symbolAnalysis.js +10 -19
  443. package/dist/domain/unicodeCodePointOrder.js +12 -0
  444. package/dist/domain/webBundleAnalysis.js +70 -99
  445. package/dist/domain/webBundleAnalyzer.js +2 -4
  446. package/dist/domain/webBundleAnalyzerAst.js +0 -13
  447. package/dist/domain/webBundleAnalyzerInspection.js +26 -52
  448. package/dist/domain/webBundleAnalyzerResult.js +7 -24
  449. package/dist/domain/webCaptureDiff.js +48 -85
  450. package/dist/domain/webCaptureDiffSchemas.js +86 -0
  451. package/dist/domain/webContentArtifact.js +1 -10
  452. package/dist/domain/webMcpDiscovery.js +3 -14
  453. package/dist/domain/webScreenshot.js +58 -34
  454. package/dist/domain/zipPackageFormat.js +7 -0
  455. package/dist/dotnet/ManagedArtifactInspector.js +17 -50
  456. package/dist/dotnet/ManagedMemberInspector.js +27 -58
  457. package/dist/dotnet/ManagedMemberInspectorCore.js +14 -51
  458. package/dist/dotnet/ManagedMemberInstructionDecoder.js +2 -2
  459. package/dist/dotnet/ManagedMemberRows.js +16 -16
  460. package/dist/dotnet/ManagedMetadataHeaps.js +26 -8
  461. package/dist/dotnet/ManagedMetadataInventory.js +21 -30
  462. package/dist/dotnet/ManagedMetadataInventoryRows.js +57 -63
  463. package/dist/dotnet/ManagedMetadataLayout.js +3 -5
  464. package/dist/dotnet/ManagedMethodBodyReader.js +5 -30
  465. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +19 -49
  466. package/dist/dotnet/ManagedNativeBoundaryInspector.js +13 -42
  467. package/dist/dotnet/ManagedPeReader.js +2 -2
  468. package/dist/dotnet/ManagedStaticProvider.js +13 -71
  469. package/dist/generatedMcpToolCatalog.js +1 -1
  470. package/dist/generatedPackageMetadata.js +1 -1
  471. package/dist/ghidra/GhidraAnalysisProfile.js +3 -8
  472. package/dist/ghidra/GhidraClient.js +5 -13
  473. package/dist/ghidra/GhidraClientStartup.js +1 -1
  474. package/dist/ghidra/GhidraClientWire.js +9 -5
  475. package/dist/ghidra/GhidraDefaults.js +0 -18
  476. package/dist/ghidra/GhidraDiagnostics.js +0 -2
  477. package/dist/ghidra/GhidraDoctor.js +16 -12
  478. package/dist/ghidra/GhidraFunctionValues.js +67 -108
  479. package/dist/ghidra/GhidraInstallation.js +98 -42
  480. package/dist/ghidra/GhidraInventoryValues.js +18 -77
  481. package/dist/ghidra/GhidraLauncher.js +0 -8
  482. package/dist/ghidra/GhidraProvider.js +32 -31
  483. package/dist/ghidra/GhidraProviderCapabilities.js +11 -48
  484. package/dist/ghidra/GhidraRequestQueue.js +6 -30
  485. package/dist/ghidra/GhidraResponseBuffer.js +1 -7
  486. package/dist/ghidra/GhidraSessionValues.js +0 -2
  487. package/dist/ghidra/GhidraSocketConnection.js +1 -1
  488. package/dist/ghidra/GhidraTransport.js +4 -7
  489. package/dist/ghidra/protocol.js +19 -42
  490. package/dist/hopper/BridgeLauncher.js +115 -37
  491. package/dist/hopper/HopperAnalysisProfile.js +3 -5
  492. package/dist/hopper/HopperCleanup.js +11 -9
  493. package/dist/hopper/HopperClient.js +5 -8
  494. package/dist/hopper/HopperProcessDiagnostic.js +2 -2
  495. package/dist/hopper/HopperProvider.js +0 -30
  496. package/dist/hopper/HopperRequestQueue.js +21 -40
  497. package/dist/hopper/HopperResponseStream.js +1 -9
  498. package/dist/hopper/HopperSessionValues.js +3 -2
  499. package/dist/hopper/HopperTargetLease.js +119 -0
  500. package/dist/hopper/LinuxPrivateDisplayDiagnostic.js +24 -31
  501. package/dist/hopper/LinuxPrivateDisplayProbe.js +21 -26
  502. package/dist/hopper/protocol.js +6 -4
  503. package/dist/main/reload.js +1 -9
  504. package/dist/main/shutdown.js +1 -1
  505. package/dist/main/state.js +0 -23
  506. package/dist/main/transport.js +27 -39
  507. package/dist/main.js +17 -15
  508. package/dist/mcpDoctor.js +27 -69
  509. package/dist/native/CommandRunner.js +18 -25
  510. package/dist/native/NativeMacOSProvider.js +13 -38
  511. package/dist/native/NativeMachoInspection.js +1 -1
  512. package/dist/process/BoundedFileBytes.js +17 -0
  513. package/dist/process/ExecFileOutput.js +11 -0
  514. package/dist/process/PendingOperations.js +8 -6
  515. package/dist/process/PrivateRuntimeRoot.js +17 -0
  516. package/dist/process/ProcessOwnership.js +67 -130
  517. package/dist/process/ProcessOwnershipIdentity.js +13 -0
  518. package/dist/process/ProcessOwnershipObservation.js +87 -0
  519. package/dist/process/ProcessOwnershipProcessTree.js +22 -0
  520. package/dist/process/ProviderDeadline.js +8 -12
  521. package/dist/process/ProviderProcess.js +7 -28
  522. package/dist/process/WindowsAuthority.js +32 -0
  523. package/dist/reference/ReferenceSourceReader.js +8 -24
  524. package/dist/reference/ReferenceSourceReaderEntries.js +11 -39
  525. package/dist/reference/ReferenceSourceReaderFile.js +13 -31
  526. package/dist/reference/ReferenceSourceReaderPaths.js +3 -18
  527. package/dist/reference/ReferenceSourceReaderValidate.js +3 -6
  528. package/dist/replay/JavaScriptReplayWorker.js +95 -13
  529. package/dist/replay/JavaScriptReplayWorkerTypes.js +1 -0
  530. package/dist/replay/LinuxJavaScriptReplayRunner.js +42 -43
  531. package/dist/replay/LinuxJavaScriptReplaySandbox.js +0 -19
  532. package/dist/replay/LinuxRuntimeClosure.js +1 -3
  533. package/dist/replay/ReplayOutcome.js +27 -18
  534. package/dist/replay/ReplayProcessLifecycle.js +32 -7
  535. package/dist/replay/ReplaySeccompFile.js +29 -0
  536. package/dist/replay/ReplayWorkerProtocol.js +33 -30
  537. package/dist/replay/SystemJavaScriptReplayHost.js +45 -74
  538. package/dist/server/ProcessCaptureElicitation.js +4 -8
  539. package/dist/server/createServer.js +145 -119
  540. package/dist/server/mcpClientMetadata.js +32 -0
  541. package/dist/server/promptCompletion.js +37 -61
  542. package/dist/server/recordDerivedEvidence.js +1 -1
  543. package/dist/server/registerApplicationTools/characterization.js +10 -21
  544. package/dist/server/registerApplicationTools/compareExportShapes.js +6 -16
  545. package/dist/server/registerApplicationTools/compareSourceToBundle.js +6 -15
  546. package/dist/server/registerApplicationTools/compareVersions.js +6 -16
  547. package/dist/server/registerApplicationTools/controlledReplay.js +8 -15
  548. package/dist/server/registerApplicationTools/coverage.js +7 -78
  549. package/dist/server/registerApplicationTools/helpers.js +1 -13
  550. package/dist/server/registerApplicationTools/obligationLedger.js +4 -8
  551. package/dist/server/registerApplicationTools/traceFeature.js +6 -15
  552. package/dist/server/registerApplicationTools/traceSemantics.js +5 -13
  553. package/dist/server/registerApplicationTools.js +0 -2
  554. package/dist/server/registerArtifactComparisonTool.js +27 -35
  555. package/dist/server/registerBrowserScenarioTool.js +3 -8
  556. package/dist/server/registerBrowserTools.js +36 -81
  557. package/dist/server/registerBundleComparisonTool.js +10 -16
  558. package/dist/server/registerCloseLifecycleTool.js +5 -27
  559. package/dist/server/registerElectronTools.js +29 -65
  560. package/dist/server/registerEnhancedTools.js +118 -127
  561. package/dist/server/registerEvidenceTools.js +19 -30
  562. package/dist/server/registerFunctionComparisonTool.js +35 -34
  563. package/dist/server/registerInvestigationTools/helpers.js +3 -32
  564. package/dist/server/registerInvestigationTools.js +36 -148
  565. package/dist/server/registerJavaScriptRuntimeObservationTools.js +15 -27
  566. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +16 -23
  567. package/dist/server/registerManagedWorkflowTools/contract.js +2 -3
  568. package/dist/server/registerManagedWorkflowTools/evidence.js +19 -35
  569. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -14
  570. package/dist/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.js +4 -14
  571. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +11 -20
  572. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +10 -21
  573. package/dist/server/registerOfficialTools.js +8 -51
  574. package/dist/server/registerProcessComparisonTool.js +43 -38
  575. package/dist/server/registerPrompts.js +19 -17
  576. package/dist/server/registerReplayMachineTool.js +4 -10
  577. package/dist/server/registerSessionRecordTools.js +36 -153
  578. package/dist/server/registerSessionStatusTool.js +18 -96
  579. package/dist/server/registerSessionTools.js +34 -91
  580. package/dist/server/sessionAvailabilityPolicy.js +2 -3
  581. package/dist/server/sessionEvidence.js +9 -15
  582. package/dist/server/sessionToolPolicies.js +1 -13
  583. package/dist/server/toolRegistrationOptions.js +4 -192
  584. package/dist/server/toolResult.js +15 -67
  585. package/dist/serverIdentity.js +0 -20
  586. package/install.sh +1 -1
  587. package/package.json +27 -15
  588. package/scripts/electron-active-hook-boundaries.cjs +394 -0
  589. package/scripts/electron-active-hook.cjs +469 -0
  590. package/scripts/hopper-demo-x11.py +13 -32
  591. package/scripts/rea.mjs +1 -11
  592. package/skills/reverse-engineer-anything/SKILL.md +46 -11
  593. package/skills/reverse-engineer-anything/references/evidence-workflows.md +6 -4
  594. package/skills/reverse-engineer-anything/references/javascript-applications.md +13 -13
  595. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +12 -8
  596. package/dist/application/ApplicationWorkflowEvidenceResolver.js +0 -180
  597. package/dist/application/BoundedJsonFiles.js +0 -86
  598. package/dist/application/CrossVersionInventory.js +0 -128
  599. package/dist/application/CrossVersionInvestigation.js +0 -301
  600. package/dist/application/CrossVersionInvestigationCollections.js +0 -23
  601. package/dist/application/CrossVersionInvestigationEvidence.js +0 -64
  602. package/dist/application/CrossVersionInvestigationReplay.js +0 -170
  603. package/dist/application/DeferredFileAuthorization.js +0 -61
  604. package/dist/application/DoctorProjection.js +0 -43
  605. package/dist/application/EnhancedToolPagination.js +0 -22
  606. package/dist/application/EvidenceReferenceResolver.js +0 -26
  607. package/dist/application/InvestigationWorkspaceStore.js +0 -204
  608. package/dist/application/ProcessPairedExperiment.js +0 -72
  609. package/dist/application/ReconstructionCoverageWorkspaceStore.js +0 -31
  610. package/dist/application/ReconstructionReadinessService.js +0 -48
  611. package/dist/cliInvestigationCommands.js +0 -173
  612. package/dist/domain/boundedCartesianProjection.js +0 -15
  613. package/dist/domain/investigationWorkspace.js +0 -346
  614. package/dist/domain/jsonLimits.js +0 -26
  615. package/dist/domain/knownPageCoverage.js +0 -21
  616. package/dist/domain/processPairedExperiment.js +0 -128
  617. package/dist/server/DynamicToolAvailability.js +0 -70
  618. package/dist/server/LazyToolCatalog.js +0 -134
  619. package/dist/server/hydrateServerTools.js +0 -191
  620. package/dist/server/javascriptApplicationResult.js +0 -106
  621. package/dist/server/permissionFailure.js +0 -12
  622. package/dist/server/registerApplicationTools/readiness.js +0 -55
  623. package/dist/server/registerEvidenceResources.js +0 -315
  624. package/dist/server/registerJavaScriptApplicationGraphResource.js +0 -65
  625. package/dist/server/registerReconstructionObligationLedgerResource.js +0 -32
  626. package/dist/server/registerReconstructionReadinessResource.js +0 -32
  627. package/dist/server/toolInputValidation.js +0 -77
  628. package/scripts/package-runner-bootstrap.mjs +0 -72
@@ -1,9 +1,9 @@
1
1
  import { javascriptRuntimeObservationSchema, javascriptRuntimeTargetListSchema, } from "../domain/javascriptRuntimeObservation.js";
2
2
  import { AnalysisError, BrowserObservationError, ProviderAdapterError, } from "../domain/errors.js";
3
3
  import { err, ok } from "../domain/result.js";
4
- import { boundedText, numberValue, recordValue, stringValue, delayWithCancellation, } from "./CdpCaptureValues.js";
4
+ import { numberValue, recordValue, stringValue, delayWithCancellation, } from "./CdpCaptureValues.js";
5
5
  import { CdpConnection } from "./CdpConnection.js";
6
- import { authorizeRuntimeLocation, canonicalRuntimeRoots, } from "./JavaScriptRuntimeScope.js";
6
+ import { authorizeRuntimeTargetLocation } from "./JavaScriptRuntimeScope.js";
7
7
  import { createInspectorExclusionCounts, describeInspectorTargetLimitations, finalizeInspectorCapture, } from "./V8InspectorCaptureProjection.js";
8
8
  import { discoverV8Inspector, } from "./V8InspectorEndpoint.js";
9
9
  /** Public identity committed by passive V8 Inspector observations. */
@@ -19,12 +19,11 @@ export class V8InspectorProvider {
19
19
  }
20
20
  async listTargets(input, options = {}) {
21
21
  try {
22
- const roots = await canonicalRuntimeRoots(input.allowed_file_roots);
23
22
  const discovery = await discoverV8Inspector(input.inspector_endpoint, "list_javascript_runtime_targets", options.signal);
24
23
  const allowed = [];
25
24
  const excluded = createInspectorExclusionCounts();
26
25
  for (const target of discovery.targets) {
27
- const decision = await authorizeRuntimeLocation(target.url, roots, input.allowed_origins);
26
+ const decision = await authorizeRuntimeTargetLocation(target.url);
28
27
  if (!decision.allowed) {
29
28
  excluded[decision.reason] += 1;
30
29
  continue;
@@ -36,21 +35,9 @@ export class V8InspectorProvider {
36
35
  allowed.push({ ...target, location: decision.location });
37
36
  }
38
37
  allowed.sort((left, right) => left.id < right.id ? -1 : left.id > right.id ? 1 : 0);
39
- const items = allowed
40
- .slice(input.offset, input.offset + input.limit)
41
- .map(projectTarget);
42
- const nextOffset = input.offset + items.length;
43
38
  return ok(javascriptRuntimeTargetListSchema.parse({
44
- schema_version: 1,
45
39
  runtime: discovery.runtime,
46
- targets: {
47
- items,
48
- offset: input.offset,
49
- limit: input.limit,
50
- total: allowed.length,
51
- next_offset: nextOffset < allowed.length ? nextOffset : null,
52
- has_more: nextOffset < allowed.length,
53
- },
40
+ targets: allowed.map(projectTarget),
54
41
  excluded: { ...excluded, unconnectable: 0 },
55
42
  limitations: describeInspectorTargetLimitations(),
56
43
  }));
@@ -62,10 +49,10 @@ export class V8InspectorProvider {
62
49
  async observe(input, options = {}) {
63
50
  let connection;
64
51
  try {
65
- const roots = await canonicalRuntimeRoots(input.allowed_file_roots);
66
52
  const discovery = await discoverV8Inspector(input.inspector_endpoint, "observe_javascript_runtime", options.signal);
67
- const target = await authorizedTarget(discovery.targets, input, roots);
68
- assertRuntimeKind(target, input.runtime_kind);
53
+ const target = await authorizedTarget(discovery.targets, input);
54
+ if (input.runtime_kind !== undefined)
55
+ assertRuntimeKind(target, input.runtime_kind);
69
56
  connection = await CdpConnection.connect(target.webSocketUrl, "observe_javascript_runtime", options.signal);
70
57
  const state = emptyCaptureState();
71
58
  const removeListener = connection.onEvent((event) => ingestEvent(event, input, state));
@@ -81,7 +68,6 @@ export class V8InspectorProvider {
81
68
  input,
82
69
  runtime: discovery.runtime,
83
70
  target,
84
- roots,
85
71
  state,
86
72
  });
87
73
  return ok(javascriptRuntimeObservationSchema.parse(result));
@@ -100,11 +86,11 @@ const projectTarget = (target) => ({
100
86
  attached: target.attached,
101
87
  location: target.location,
102
88
  });
103
- const authorizedTarget = async (targets, input, roots) => {
89
+ const authorizedTarget = async (targets, input) => {
104
90
  const target = targets.find(({ id }) => id === input.target_id);
105
91
  if (target === undefined)
106
92
  throw new BrowserObservationError("observe_javascript_runtime", "target_not_found");
107
- const decision = await authorizeRuntimeLocation(target.url, roots, input.allowed_origins);
93
+ const decision = await authorizeRuntimeTargetLocation(target.url);
108
94
  if (target.attached ||
109
95
  !decision.allowed ||
110
96
  decision.location.kind === "builtin")
@@ -138,17 +124,13 @@ const ingestEvent = (event, input, state) => {
138
124
  event.method !== "Runtime.executionContextsCleared")
139
125
  return;
140
126
  state.eventsObserved += 1;
141
- if (state.eventsObserved > input.limits.max_events) {
142
- drop(state, "max_events");
143
- return;
144
- }
145
127
  if (event.method === "Debugger.scriptParsed") {
146
128
  ingestScript(event, input, state);
147
129
  return;
148
130
  }
149
131
  if (event.method === "Debugger.scriptFailedToParse") {
150
132
  state.invalidScripts += 1;
151
- retainEvent(state, 0, input);
133
+ retainEvent(state, 0);
152
134
  return;
153
135
  }
154
136
  ingestContext(event, input, state);
@@ -157,34 +139,27 @@ const ingestScript = (event, input, state) => {
157
139
  state.scriptsObserved += 1;
158
140
  const value = recordValue(event.params);
159
141
  const rawUrl = stringValue(value?.url);
160
- if (rawUrl === undefined ||
161
- rawUrl === "" ||
162
- Buffer.byteLength(rawUrl) > input.limits.max_location_bytes) {
142
+ if (rawUrl === undefined || rawUrl === "") {
163
143
  state.invalidScripts += 1;
164
- retainEvent(state, 0, input);
165
- return;
166
- }
167
- if (state.scripts.length >= input.limits.max_scripts) {
168
- drop(state, "max_scripts");
144
+ retainEvent(state, 0);
169
145
  return;
170
146
  }
171
147
  const draft = {
172
148
  rawUrl,
173
149
  executionContextKey: contextKey(value?.executionContextId),
174
- cdpHash: boundedText(value?.hash, 512),
150
+ cdpHash: stringValue(value?.hash) ?? null,
175
151
  length: nonnegativeInteger(value?.length),
176
152
  isModule: value?.isModule === true,
177
153
  };
178
154
  const bytes = metadataBytes(draft);
179
- if (!retainEvent(state, bytes, input))
180
- return;
155
+ retainEvent(state, bytes);
181
156
  state.scripts.push(draft);
182
157
  };
183
158
  const ingestContext = (event, input, state) => {
184
159
  if (event.method === "Runtime.executionContextsCleared") {
185
160
  for (const context of state.contexts.values())
186
161
  context.state = "cleared";
187
- retainEvent(state, 0, input);
162
+ retainEvent(state, 0);
188
163
  return;
189
164
  }
190
165
  const parameters = recordValue(event.params);
@@ -195,42 +170,26 @@ const ingestContext = (event, input, state) => {
195
170
  ? runtimeContext?.id
196
171
  : runtimeContext?.executionContextId);
197
172
  if (key === null) {
198
- retainEvent(state, 0, input);
199
- return;
200
- }
201
- if (state.contexts.size >= input.limits.max_execution_contexts &&
202
- !state.contexts.has(key)) {
203
- drop(state, "max_execution_contexts");
173
+ retainEvent(state, 0);
204
174
  return;
205
175
  }
206
176
  const origin = event.method === "Runtime.executionContextCreated"
207
- ? boundedText(runtimeContext?.origin, 4_096)
177
+ ? (stringValue(runtimeContext?.origin) ?? null)
208
178
  : null;
209
179
  const draft = {
210
180
  contextKey: key,
211
181
  state: event.method === "Runtime.executionContextCreated"
212
182
  ? "created"
213
183
  : "destroyed",
214
- origin: origin !== null && input.allowed_origins.includes(origin) ? origin : null,
184
+ origin: origin === "" ? null : origin,
215
185
  };
216
186
  const bytes = metadataBytes(draft);
217
- if (!retainEvent(state, bytes, input))
218
- return;
187
+ retainEvent(state, bytes);
219
188
  state.contexts.set(key, draft);
220
189
  };
221
- const retainEvent = (state, bytes, input) => {
222
- if (state.metadataBytes + bytes > input.limits.max_total_metadata_bytes) {
223
- drop(state, "max_total_metadata_bytes");
224
- return false;
225
- }
190
+ const retainEvent = (state, bytes) => {
226
191
  state.metadataBytes += bytes;
227
192
  state.eventsRetained += 1;
228
- return true;
229
- };
230
- const drop = (state, reason) => {
231
- state.eventsDropped += 1;
232
- state.truncated = true;
233
- state.truncationReasons.add(reason);
234
193
  };
235
194
  const waitForCapture = async (connection, observationMs, signal) => {
236
195
  let removeDisconnect = () => undefined;
@@ -1,105 +1,65 @@
1
1
  import { AnyMap, eachMapping } from "@jridgewell/trace-mapping";
2
2
  import { sanitizeBrowserUrl } from "../domain/browserObservation.js";
3
+ import { webSourceMapsSchema } from "../domain/webBundleAnalysis.js";
3
4
  import { createWebTextArtifact } from "../domain/webContentArtifact.js";
4
5
  /** Fetch and validate approved source maps without browser credentials. */
5
6
  export const fetchWebSourceMaps = async (requests, input, signal, host = { fetch: globalThis.fetch }) => {
6
7
  const items = [];
7
- let remainingBytes = input.analysis_limits.max_total_source_map_bytes;
8
- for (const request of requests.slice(0, input.analysis_limits.max_source_maps)) {
8
+ for (const request of requests) {
9
9
  if (signal?.aborted === true)
10
10
  throw signal.reason;
11
- if (remainingBytes === 0)
12
- break;
13
- const fetched = await fetchOne(request, {
14
- input,
15
- maximumBytes: Math.min(input.analysis_limits.max_source_map_bytes, remainingBytes),
16
- signal,
17
- host,
18
- });
19
- items.push(fetched.item);
20
- remainingBytes = Math.max(0, remainingBytes - fetched.bytesRead);
11
+ items.push(await fetchOne(request, input, signal, host));
21
12
  }
22
13
  const included = items.filter(({ status }) => status === "included").length;
23
- const dropped = requests.length - items.length;
24
- const truncated = dropped > 0 || items.some(({ status }) => status === "truncated");
25
- return {
26
- status: truncated
27
- ? "truncated"
28
- : items.length === 0
29
- ? "unavailable"
30
- : included === items.length
31
- ? "included"
32
- : included > 0
33
- ? "partial"
34
- : "unavailable",
14
+ return webSourceMapsSchema.parse({
15
+ status: items.length === 0
16
+ ? "unavailable"
17
+ : included === items.length
18
+ ? "included"
19
+ : included > 0
20
+ ? "partial"
21
+ : "unavailable",
35
22
  requested: requests.length,
36
23
  processed: items.length,
37
- dropped,
38
- dropped_script_keys: requests
39
- .slice(items.length)
40
- .map(({ scriptKey }) => scriptKey),
41
24
  items,
42
- };
25
+ });
43
26
  };
44
- const fetchOne = async (request, context) => {
45
- const { input, maximumBytes, signal, host } = context;
46
- const base = emptyItem(request);
27
+ const fetchOne = async (request, input, signal, host) => {
47
28
  if (!approvedUrl(request.fetchUrl, input.allowed_origins))
48
- return {
49
- item: {
50
- ...base,
51
- status: "policy_filtered",
52
- limitation: "Declared source-map URL is outside the approved exact origins.",
53
- },
54
- bytesRead: 0,
55
- };
29
+ return emptySourceMapItem(request, "policy_filtered", "Declared source-map URL is outside the approved exact origins.");
56
30
  try {
57
31
  const response = await fetchFollowingApprovedRedirects(request.fetchUrl, input.allowed_origins, signal, host);
58
32
  if (response === undefined)
59
- return {
60
- item: {
61
- ...base,
62
- status: "policy_filtered",
63
- limitation: "A source-map redirect left the approved exact origins.",
64
- },
65
- bytesRead: 0,
66
- };
33
+ return emptySourceMapItem(request, "policy_filtered", "A source-map redirect left the approved exact origins.");
67
34
  if (!response.ok)
68
- return {
69
- item: {
70
- ...base,
71
- status: "fetch_failed",
72
- limitation: `Source-map server returned HTTP ${String(response.status)}.`,
73
- },
74
- bytesRead: 0,
75
- };
76
- const body = await boundedResponseText(response, maximumBytes);
77
- return {
78
- item: normalizeSourceMap(request, body.text, input),
79
- bytesRead: body.bytes,
80
- };
35
+ return emptySourceMapItem(request, "fetch_failed", `Source-map server returned HTTP ${String(response.status)}.`);
36
+ return normalizeSourceMap(request, await response.text());
81
37
  }
82
38
  catch (cause) {
83
39
  if (signal?.aborted === true)
84
40
  throw cause;
85
- return {
86
- item: {
87
- ...base,
88
- status: isLimitError(cause) ? "truncated" : "fetch_failed",
89
- limitation: isLimitError(cause)
90
- ? "Source-map response exceeded the remaining approved byte budget."
91
- : "Source-map fetch or validation failed.",
92
- },
93
- bytesRead: cause instanceof SourceMapByteLimitError ? cause.bytesRead : 0,
94
- };
41
+ return emptySourceMapItem(request, "fetch_failed", "Source-map fetch or validation failed.");
95
42
  }
96
43
  };
97
44
  const fetchFollowingApprovedRedirects = async (initialUrl, allowedOrigins, signal, host) => {
98
45
  let current = initialUrl;
99
- for (let redirect = 0; redirect <= 5; redirect += 1) {
46
+ const visited = new Set();
47
+ for (;;) {
100
48
  if (!approvedUrl(current, allowedOrigins))
101
49
  return undefined;
102
- const response = await timedFetch(current, signal, host);
50
+ if (visited.has(current))
51
+ throw new Error("source_map_redirect_loop");
52
+ visited.add(current);
53
+ const response = await host.fetch(current, {
54
+ method: "GET",
55
+ headers: {
56
+ Accept: "application/json, application/source-map+json;q=0.9",
57
+ },
58
+ redirect: "manual",
59
+ credentials: "omit",
60
+ referrerPolicy: "no-referrer",
61
+ ...(signal === undefined ? {} : { signal }),
62
+ });
103
63
  if (response.status < 300 || response.status >= 400)
104
64
  return response;
105
65
  const location = response.headers.get("location");
@@ -107,66 +67,12 @@ const fetchFollowingApprovedRedirects = async (initialUrl, allowedOrigins, signa
107
67
  return response;
108
68
  current = new URL(location, current).href;
109
69
  }
110
- throw new Error("source_map_redirect_limit");
111
70
  };
112
- const timedFetch = async (url, signal, host) => {
113
- const timeout = AbortSignal.timeout(5_000);
114
- return await host.fetch(url, {
115
- method: "GET",
116
- headers: { Accept: "application/json, application/source-map+json;q=0.9" },
117
- redirect: "manual",
118
- credentials: "omit",
119
- referrerPolicy: "no-referrer",
120
- signal: signal === undefined ? timeout : AbortSignal.any([signal, timeout]),
121
- });
122
- };
123
- const boundedResponseText = async (response, maximumBytes) => {
124
- const declared = Number(response.headers.get("content-length"));
125
- if (Number.isFinite(declared) && declared > maximumBytes)
126
- throw new SourceMapByteLimitError(0);
127
- if (response.body === null)
128
- return { text: "", bytes: 0 };
129
- const reader = response.body.getReader();
130
- const decoder = new TextDecoder("utf-8", { fatal: true });
131
- let bytes = 0;
132
- let text = "";
133
- for (;;) {
134
- const chunk = await reader.read();
135
- if (chunk.done)
136
- break;
137
- bytes += chunk.value.byteLength;
138
- if (bytes > maximumBytes) {
139
- await reader.cancel();
140
- throw new SourceMapByteLimitError(bytes);
141
- }
142
- text += decoder.decode(chunk.value, { stream: true });
143
- }
144
- text += decoder.decode();
145
- return { text, bytes };
146
- };
147
- class SourceMapByteLimitError extends RangeError {
148
- bytesRead;
149
- constructor(bytesRead) {
150
- super("source_map_bytes");
151
- this.bytesRead = bytesRead;
152
- }
153
- }
154
- const normalizeSourceMap = (request, text, input) => {
155
- const base = emptyItem(request);
71
+ const normalizeSourceMap = (request, text) => {
156
72
  if (!validSourceMapEnvelope(text))
157
- return {
158
- ...base,
159
- status: "invalid",
160
- limitation: "Source-map JSON is not a bounded version 3 map.",
161
- };
73
+ return emptySourceMapItem(request, "invalid", "Source-map JSON is not a version 3 map.");
162
74
  try {
163
75
  const map = new AnyMap(text, request.fetchUrl);
164
- if (map.sources.length > input.analysis_limits.max_original_sources)
165
- return {
166
- ...base,
167
- status: "truncated",
168
- limitation: "Source map exceeds the original-source inventory limit.",
169
- };
170
76
  const resolvedBySource = new Map();
171
77
  const originalSources = map.sources.map((source, index) => {
172
78
  const content = map.sourcesContent?.[index];
@@ -181,57 +87,35 @@ const normalizeSourceMap = (request, text, input) => {
181
87
  };
182
88
  });
183
89
  const mappings = [];
184
- let totalMappings = 0;
185
90
  eachMapping(map, (mapping) => {
186
91
  if (mapping.source === null ||
187
92
  mapping.originalLine === null ||
188
93
  mapping.originalColumn === null)
189
94
  return;
190
- totalMappings += 1;
191
- if (mappings.length >= input.analysis_limits.max_source_map_mappings)
192
- return;
193
95
  mappings.push({
194
96
  generated_line: mapping.generatedLine,
195
97
  generated_column: mapping.generatedColumn,
196
98
  source: sanitizeSource(resolvedBySource.get(mapping.source) ?? mapping.source),
197
99
  original_line: mapping.originalLine,
198
100
  original_column: mapping.originalColumn,
199
- name: mapping.name?.slice(0, 1_024) ?? null,
101
+ name: mapping.name ?? null,
200
102
  });
201
103
  });
202
- const modules = originalModuleEdges(originalSources, input.analysis_limits.max_findings);
203
- const mappingTruncated = totalMappings > mappings.length;
204
- const limitations = [
205
- ...(mappingTruncated
206
- ? [
207
- `Mappings were truncated from ${String(totalMappings)} to ${String(mappings.length)}.`,
208
- ]
209
- : []),
210
- ...(modules.truncated
211
- ? [
212
- `Original module edges were truncated to ${String(modules.edges.length)}.`,
213
- ]
214
- : []),
215
- ];
216
- return {
217
- ...base,
218
- status: mappingTruncated || modules.truncated ? "truncated" : "included",
104
+ const modules = originalModuleEdges(originalSources);
105
+ const parsed = {
106
+ ...sourceMapContext(request),
219
107
  artifact: createWebTextArtifact(text, "application/source-map+json"),
220
108
  original_sources: originalSources,
221
- original_module_edges: modules.edges,
109
+ original_module_edges: modules,
222
110
  mappings,
223
- limitation: limitations.length === 0 ? null : limitations.join(" "),
224
111
  };
112
+ return { ...parsed, status: "included", limitation: null };
225
113
  }
226
114
  catch {
227
- return {
228
- ...base,
229
- status: "invalid",
230
- limitation: "Source-map mappings could not be decoded safely.",
231
- };
115
+ return emptySourceMapItem(request, "invalid", "Source-map mappings could not be decoded safely.");
232
116
  }
233
117
  };
234
- const originalModuleEdges = (sources, maximum) => {
118
+ const originalModuleEdges = (sources) => {
235
119
  const edges = [];
236
120
  const seen = new Set();
237
121
  for (const source of sources) {
@@ -239,15 +123,13 @@ const originalModuleEdges = (sources, maximum) => {
239
123
  continue;
240
124
  for (const detector of originalImportDetectors) {
241
125
  for (const match of source.artifact.text.matchAll(detector.pattern)) {
242
- const specifier = match[1]?.slice(0, 4_096);
126
+ const specifier = match[1];
243
127
  if (specifier === undefined)
244
128
  continue;
245
129
  const key = `${source.source}\0${detector.kind}\0${specifier}`;
246
130
  if (seen.has(key))
247
131
  continue;
248
132
  seen.add(key);
249
- if (edges.length >= maximum)
250
- return { edges, truncated: true };
251
133
  edges.push({
252
134
  from_source: source.source,
253
135
  kind: detector.kind,
@@ -257,7 +139,7 @@ const originalModuleEdges = (sources, maximum) => {
257
139
  }
258
140
  }
259
141
  }
260
- return { edges, truncated: false };
142
+ return edges;
261
143
  };
262
144
  const validSourceMapEnvelope = (text) => {
263
145
  let parsed;
@@ -271,22 +153,19 @@ const validSourceMapEnvelope = (text) => {
271
153
  return false;
272
154
  if (typeof parsed.mappings === "string")
273
155
  return Array.isArray(parsed.sources) && Array.isArray(parsed.names);
274
- if (!Array.isArray(parsed.sections) || parsed.sections.length > 10_000)
156
+ if (!Array.isArray(parsed.sections))
275
157
  return false;
276
158
  const pending = [...parsed.sections];
277
- let visited = 0;
278
159
  while (pending.length > 0) {
279
160
  const section = pending.pop();
280
161
  if (!isRecord(section) || !isRecord(section.offset) || !("map" in section))
281
162
  return false;
282
- visited += 1;
283
- if (visited > 10_000)
284
- return false;
285
163
  const map = section.map;
286
164
  if (!isRecord(map) || map.version !== 3)
287
165
  return false;
288
166
  if (Array.isArray(map.sections))
289
- pending.push(...map.sections);
167
+ for (const child of map.sections)
168
+ pending.push(child);
290
169
  else if (typeof map.mappings !== "string" ||
291
170
  !Array.isArray(map.sources) ||
292
171
  !Array.isArray(map.names))
@@ -306,26 +185,28 @@ const approvedUrl = (value, allowedOrigins) => {
306
185
  return false;
307
186
  }
308
187
  };
309
- const emptyItem = (request) => ({
188
+ const sourceMapContext = (request) => ({
310
189
  script_key: request.scriptKey,
311
190
  declared_url: request.declaredUrl,
312
- status: "fetch_failed",
191
+ });
192
+ const emptySourceMapItem = (request, status, limitation) => ({
193
+ ...sourceMapContext(request),
194
+ status,
313
195
  artifact: null,
314
196
  original_sources: [],
315
197
  original_module_edges: [],
316
198
  mappings: [],
317
- limitation: null,
199
+ limitation,
318
200
  });
319
201
  const sanitizeSource = (value) => {
320
- const bounded = value.slice(0, 4_096);
321
202
  try {
322
- const parsed = new URL(bounded);
203
+ const parsed = new URL(value);
323
204
  return parsed.protocol === "http:" || parsed.protocol === "https:"
324
205
  ? sanitizeBrowserUrl(parsed.href).url
325
206
  : `${parsed.protocol}//${parsed.host}${parsed.pathname}`;
326
207
  }
327
208
  catch {
328
- return bounded.split("#", 1)[0]?.split("?", 1)[0] ?? "";
209
+ return value.split("#", 1)[0]?.split("?", 1)[0] ?? "";
329
210
  }
330
211
  };
331
212
  const resolveOriginalSource = (specifier, base) => {
@@ -340,7 +221,6 @@ const sourceMediaType = (source) => source?.endsWith(".ts") || source?.endsWith(
340
221
  ? "text/typescript"
341
222
  : "text/javascript";
342
223
  const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
343
- const isLimitError = (value) => value instanceof RangeError;
344
224
  const originalImportDetectors = [
345
225
  {
346
226
  kind: "static_import",
@@ -12,12 +12,18 @@ const toolCatalog = TOOL_CONTRACTS.map((contract) => ({
12
12
  description: contract.description,
13
13
  effects: { ...contract.effects },
14
14
  annotations: contract.annotations,
15
- input_schema: z.toJSONSchema(contract.inputSchema, {
16
- unrepresentable: "any",
17
- }),
18
- output_schema: z.toJSONSchema(contract.outputSchema, {
19
- unrepresentable: "any",
20
- }),
15
+ input_schema: {
16
+ type: "object",
17
+ ...z.toJSONSchema(contract.inputSchema, {
18
+ unrepresentable: "any",
19
+ }),
20
+ },
21
+ output_schema: {
22
+ type: "object",
23
+ ...z.toJSONSchema(contract.outputSchema, {
24
+ unrepresentable: "any",
25
+ }),
26
+ },
21
27
  })).sort((left, right) => left.name.localeCompare(right.name));
22
28
  const promptCatalog = PROMPT_CONTRACTS.map((contract) => ({
23
29
  name: contract.name,
@@ -26,52 +32,6 @@ const promptCatalog = PROMPT_CONTRACTS.map((contract) => ({
26
32
  arguments: contract.arguments,
27
33
  steps: contract.steps,
28
34
  })).sort((left, right) => left.name.localeCompare(right.name));
29
- /** Canonical fixed resources exposed by every target-free MCP session. */
30
- export const MCP_RESOURCE_CATALOG = [
31
- { name: "server-identity", uri: "rea://server/identity" },
32
- { name: "analysis-snapshot", uri: "rea://snapshot/current" },
33
- ];
34
- /** Canonical resource templates exposed by every target-free MCP session. */
35
- export const MCP_RESOURCE_TEMPLATE_CATALOG = [
36
- { name: "session-evidence", uri_template: "rea://evidence/{evidenceId}" },
37
- {
38
- name: "evidence-section",
39
- uri_template: "rea://evidence/{evidenceId}/section/{section}",
40
- },
41
- { name: "residual-unknown", uri_template: "rea://unknown/{unknownId}" },
42
- {
43
- name: "evidence-bundle",
44
- uri_template: "rea://evidence-bundle/{bundleDigest}",
45
- },
46
- {
47
- name: "artifact-page",
48
- uri_template: "rea://artifact/{manifestId}/{collection}",
49
- },
50
- {
51
- name: "function-dossier",
52
- uri_template: "rea://function/{targetSha256}/{address}",
53
- },
54
- {
55
- name: "investigation-workspace-revision",
56
- uri_template: "rea://workspace/{workspaceId}/revision/{revision}",
57
- },
58
- {
59
- name: "reconstruction-coverage-revision",
60
- uri_template: "rea://reconstruction-coverage/{workspaceId}/revision/{revision}",
61
- },
62
- {
63
- name: "reconstruction-obligation-ledger-page",
64
- uri_template: "rea://evidence/{evidenceId}/reconstruction-obligation-ledger",
65
- },
66
- {
67
- name: "reconstruction-readiness-report",
68
- uri_template: "rea://evidence/{evidenceId}/reconstruction-readiness-report",
69
- },
70
- {
71
- name: "javascript-application-graph-page",
72
- uri_template: "rea://evidence/{evidenceId}/application-graph/{collection}/offset/{offset}/limit/{limit}",
73
- },
74
- ];
75
35
  const digest = (value) => {
76
36
  const encoded = canonicalize(value);
77
37
  if (encoded === undefined)
@@ -84,22 +44,14 @@ export const CATALOG_IDENTITY = {
84
44
  cli_commands: CLI_COMMAND_NAMES.length,
85
45
  mcp_tools: toolCatalog.length,
86
46
  mcp_prompts: promptCatalog.length,
87
- mcp_resources: MCP_RESOURCE_CATALOG.length,
88
- mcp_resource_templates: MCP_RESOURCE_TEMPLATE_CATALOG.length,
89
47
  },
90
48
  digests: {
91
49
  tools_sha256: digest(toolCatalog),
92
50
  prompts_sha256: digest(promptCatalog),
93
- resources_sha256: digest({
94
- resourceCatalog: MCP_RESOURCE_CATALOG,
95
- resourceTemplateCatalog: MCP_RESOURCE_TEMPLATE_CATALOG,
96
- }),
97
51
  combined_sha256: digest({
98
52
  cli: CLI_COMMAND_NAMES,
99
53
  tools: toolCatalog,
100
54
  prompts: promptCatalog,
101
- resources: MCP_RESOURCE_CATALOG,
102
- resource_templates: MCP_RESOURCE_TEMPLATE_CATALOG,
103
55
  }),
104
56
  },
105
57
  tools: toolCatalog.map(({ name, surface, effects, annotations }) => ({