rea-agents 6.0.0 → 6.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 (611) hide show
  1. package/README.md +26 -18
  2. package/bridge/android/ReaJadxBridge.java +14 -5
  3. package/bridge/ghidra/ReaGhidraBridge.java +205 -51
  4. package/bridge/hopper_bridge.py +314 -127
  5. package/bridge/mitmproxy/capture.py +0 -2
  6. package/bridge/native/rea_lldb_tracer.py +630 -94
  7. package/bridge/process/ProcessRunTokenReader.swift +39 -5
  8. package/bridge/pwntools/recorded_crash_impl.py +4 -0
  9. package/dist/android/JadxConfiguration.js +274 -31
  10. package/dist/android/JadxMcpTransport.js +18 -2
  11. package/dist/android/JadxProtocol.js +6 -0
  12. package/dist/android/JadxProvider.js +76 -37
  13. package/dist/android/JadxSession.js +23 -4
  14. package/dist/application/AnalysisContextQueries.js +8 -35
  15. package/dist/application/AnalysisDocument.js +32 -0
  16. package/dist/application/AppBundleExecutable.js +67 -21
  17. package/dist/application/BinaryTargetResolver.js +5 -3
  18. package/dist/application/BrowserEvidence.js +3 -8
  19. package/dist/application/BrowserScenarioEvidence.js +2 -18
  20. package/dist/application/CallPathTracing.js +19 -3
  21. package/dist/application/CapabilityInventory.js +48 -11
  22. package/dist/application/ClientConfigurationDocument.js +917 -8
  23. package/dist/application/ClientRegistrationIdentity.js +26 -5
  24. package/dist/application/ClientRegistrationStatus.js +29 -14
  25. package/dist/application/DirectAnalysis.js +56 -51
  26. package/dist/application/DirectAnalysisCleanup.js +72 -0
  27. package/dist/application/DirectAnalysisStatus.js +4 -5
  28. package/dist/application/Doctor.js +19 -21
  29. package/dist/application/DoctorDiagnostics.js +1 -2
  30. package/dist/application/DoctorScope.js +25 -13
  31. package/dist/application/EnhancedLiteralTracing.js +22 -25
  32. package/dist/application/EnhancedTools.js +64 -17
  33. package/dist/application/EvidenceBundleFiles.js +30 -13
  34. package/dist/application/FunctionAnalysisEvidence.js +2 -3
  35. package/dist/application/InventoryProjectionEvidence.js +4 -3
  36. package/dist/application/InvestigationProviders.js +11 -2
  37. package/dist/application/JsonFiles.js +83 -28
  38. package/dist/application/LinuxHopper.js +9 -6
  39. package/dist/application/MacHopper.js +15 -18
  40. package/dist/application/ProcedureAddressResolution.js +11 -0
  41. package/dist/application/RealHopperAssertions.js +0 -11
  42. package/dist/application/ReconstructionCoverageService.js +7 -4
  43. package/dist/application/ReconstructionObligationCandidates.js +1 -1
  44. package/dist/application/ReconstructionObligationLedgerService.js +4 -3
  45. package/dist/application/ReferenceSourceImportEntries.js +1 -1
  46. package/dist/application/Setup.js +21 -17
  47. package/dist/application/SetupClientConfiguration.js +10 -15
  48. package/dist/application/SetupHost.js +21 -29
  49. package/dist/application/SetupPlan.js +11 -9
  50. package/dist/application/SupportedClients.js +34 -1
  51. package/dist/application/Uninstall.js +82 -29
  52. package/dist/application/Update.js +18 -3
  53. package/dist/application/UpdateMaintenance.js +7 -5
  54. package/dist/application/UpdateRuntime.js +57 -36
  55. package/dist/application/WebModuleTraceService.js +4 -2
  56. package/dist/application/WebNetworkCaptureService.js +4 -2
  57. package/dist/application/WebRuntimeService.js +5 -3
  58. package/dist/application/WebScriptExportService.js +32 -6
  59. package/dist/application/WebSourceLocationService.js +4 -2
  60. package/dist/application/WorkflowEvidence.js +105 -0
  61. package/dist/application/XrefsAddressResolution.js +45 -0
  62. package/dist/application/analysisView/AnalysisViewService.js +76 -0
  63. package/dist/application/binary/AnalysisClientCleanup.js +30 -5
  64. package/dist/application/binary/AnalysisProviderEvaluation.js +22 -7
  65. package/dist/application/binary/AnalysisProviderRegistry.js +4 -6
  66. package/dist/application/binary/AnalysisSnapshotCache.js +13 -14
  67. package/dist/application/binary/BinarySession.js +161 -93
  68. package/dist/application/binary/BinarySessionComposition.js +1 -3
  69. package/dist/application/binary/BinarySessionExecution.js +3 -5
  70. package/dist/application/binary/BinarySessionOpen.js +4 -4
  71. package/dist/application/binary/BinarySessionRecords.js +26 -4
  72. package/dist/application/binary/BinarySessionStatus.js +18 -7
  73. package/dist/application/binary/CompositeProvider.js +16 -17
  74. package/dist/application/binary/LazyAnalysisProvider.js +8 -5
  75. package/dist/application/binary/SessionProviderRouter.js +27 -135
  76. package/dist/application/binaryDiagnostics/BinaryLayoutService.js +4 -2
  77. package/dist/application/binaryDiagnostics/RecordedCrashService.js +4 -2
  78. package/dist/application/evm/EvmInterfaceService.js +4 -2
  79. package/dist/application/homebrew.js +48 -0
  80. package/dist/application/investigation/EvidenceLedger.js +21 -7
  81. package/dist/application/investigation/InvestigationRecords.js +8 -0
  82. package/dist/application/javascript/ElectronActiveEvidence.js +9 -13
  83. package/dist/application/javascript/JavaScriptAnalysisControl.js +34 -0
  84. package/dist/application/javascript/JavaScriptApplicationEvidence.js +21 -4
  85. package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +19 -2
  86. package/dist/application/javascript/JavaScriptApplicationService.js +27 -15
  87. package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +5 -5
  88. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +10 -7
  89. package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +44 -10
  90. package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +11 -3
  91. package/dist/application/javascript/JavaScriptArtifactGraphContext.js +9 -0
  92. package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +8 -5
  93. package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +12 -3
  94. package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +0 -1
  95. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +49 -19
  96. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +56 -8
  97. package/dist/application/javascript/JavaScriptModuleRelationships.js +38 -9
  98. package/dist/application/javascript/JavaScriptRecoveryService.js +4 -2
  99. package/dist/application/javascript/JavaScriptRuntimeObservationService.js +6 -4
  100. package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +3 -3
  101. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +2 -3
  102. package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +63 -61
  103. package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +1 -2
  104. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +2 -3
  105. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +1 -5
  106. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +75 -46
  107. package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +2 -3
  108. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +64 -19
  109. package/dist/application/managed/ManagedApplicationGraphService.js +4 -3
  110. package/dist/application/managed/ManagedMemberComparisonService.js +9 -5
  111. package/dist/application/managed/ManagedNativeVerificationService.js +6 -4
  112. package/dist/application/managed/ManagedReconstructionService.js +4 -3
  113. package/dist/application/process/ProcessCli.js +25 -17
  114. package/dist/application/process/ProcessEvidence.js +4 -4
  115. package/dist/application/workflowInputError.js +18 -0
  116. package/dist/artifacts/ArtifactProvider.js +48 -13
  117. package/dist/artifacts/ArtifactReader.js +31 -0
  118. package/dist/artifacts/DirectoryArtifactReader.js +2 -1
  119. package/dist/artifacts/MachOSliceArtifactReader.js +106 -15
  120. package/dist/artifacts/NativeDmgArtifactReader.js +73 -21
  121. package/dist/artifacts/SafeOutputTree.js +16 -2
  122. package/dist/artifacts/ZipArtifactReader.js +11 -4
  123. package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +26 -5
  124. package/dist/artifacts/apple/DylibResolutionReader.js +17 -7
  125. package/dist/artifacts/apple/InterfaceBuilderAnalysis.js +176 -56
  126. package/dist/artifacts/apple/InterfaceBuilderDecodeBudget.js +195 -0
  127. package/dist/artifacts/apple/KeyedArchiveReader.js +55 -23
  128. package/dist/artifacts/apple/MachoLoadCommandReader.js +92 -31
  129. package/dist/artifacts/apple/NibArchive.js +81 -14
  130. package/dist/artifacts/apple/NibViewHierarchy.js +10 -3
  131. package/dist/artifacts/apple/PlistNumberLiterals.js +164 -0
  132. package/dist/artifacts/extraction/ArtifactExtraction.js +78 -21
  133. package/dist/artifacts/inventory/ArtifactGraphConstruction.js +79 -68
  134. package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
  135. package/dist/artifacts/inventory/reader.js +3 -3
  136. package/dist/artifacts/inventory/scanCanonical.js +59 -38
  137. package/dist/artifacts/inventory/scanReader.js +5 -9
  138. package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +6 -2
  139. package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
  140. package/dist/browser/CdpBrowserProvider.js +2 -3
  141. package/dist/browser/CdpCaptureCompleteness.js +2 -0
  142. package/dist/browser/CdpCaptureEventHandlers.js +78 -15
  143. package/dist/browser/CdpCaptureEventTypes.js +5 -1
  144. package/dist/browser/CdpCaptureEvents.js +25 -1
  145. package/dist/browser/CdpCaptureValues.js +20 -0
  146. package/dist/browser/CdpConnection.js +30 -11
  147. package/dist/browser/CdpElectronProvider.js +0 -2
  148. package/dist/browser/CdpElectronScriptEvents.js +2 -8
  149. package/dist/browser/CdpElectronScripts.js +2 -3
  150. package/dist/browser/CdpOptionalCommand.js +2 -3
  151. package/dist/browser/CdpPageCapture.js +23 -1
  152. package/dist/browser/CdpPageCaptureScripts.js +2 -3
  153. package/dist/browser/CdpSafeMetadata.js +10 -10
  154. package/dist/browser/PlaywrightBrowserScenarioProvider.js +59 -44
  155. package/dist/browser/PlaywrightElectronActiveActions.js +34 -79
  156. package/dist/browser/PlaywrightElectronActiveProjection.js +141 -0
  157. package/dist/browser/PlaywrightElectronActiveProvider.js +133 -130
  158. package/dist/browser/PlaywrightScenarioArtifacts.js +1 -1
  159. package/dist/browser/PlaywrightScenarioBrowser.js +139 -39
  160. package/dist/browser/PlaywrightScenarioEvents.js +1 -1
  161. package/dist/browser/PlaywrightScenarioSession.js +39 -22
  162. package/dist/browser/WebSourceMapFetcher.js +426 -72
  163. package/dist/browser/assets/LocalWebScriptArtifacts.js +2 -2
  164. package/dist/browser/assets/ScriptCaptureAdapters.js +1 -1
  165. package/dist/browser/history/CaptureFailures.js +41 -1
  166. package/dist/browser/history/CaptureRelease.js +5 -0
  167. package/dist/browser/history/HarCaptureAdapter.js +3 -3
  168. package/dist/browser/history/HarJson.js +3 -2
  169. package/dist/browser/history/HistoricalCaptureDecoder.js +4 -2
  170. package/dist/browser/history/MitmproxyCaptureAdapter.js +4 -2
  171. package/dist/catalogIdentity.js +0 -1
  172. package/dist/cli/analysisSelector.js +23 -0
  173. package/dist/cli/analysisViewCommands.js +36 -0
  174. package/dist/cli/applicationCommands.js +2 -3
  175. package/dist/cli/artifactCommands.js +11 -12
  176. package/dist/cli/coreAnalysisCommands.js +3 -3
  177. package/dist/cli/coreBinaryCommands.js +100 -37
  178. package/dist/cli/coreNativeCommands.js +9 -10
  179. package/dist/cli/electronCommands.js +10 -9
  180. package/dist/cli/interactiveSetup.js +6 -6
  181. package/dist/cli/javascriptApplicationAnalysis.js +7 -3
  182. package/dist/cli/jsonOutput.js +4 -99
  183. package/dist/cli/managedCommands.js +7 -8
  184. package/dist/cli/nativeCallCommands.js +3 -5
  185. package/dist/cli/omittableDefaults.js +50 -0
  186. package/dist/cli/processCommands.js +3 -2
  187. package/dist/cli/setupCommands.js +16 -15
  188. package/dist/cli/utilityCommands.js +9 -9
  189. package/dist/cli/webRuntimeCommands.js +8 -8
  190. package/dist/cli.js +18 -9
  191. package/dist/cliBrowserScenarioCommands.js +2 -2
  192. package/dist/cliCommandNames.js +1 -1
  193. package/dist/cliJsonInput.js +24 -5
  194. package/dist/cliOutput.js +0 -38
  195. package/dist/composition/auxiliaryAnalysisProviders.js +27 -23
  196. package/dist/composition/binary.js +9 -9
  197. package/dist/composition/browserScenario.js +2 -1
  198. package/dist/composition/directAnalysis.js +20 -13
  199. package/dist/composition/electronScenario.js +1 -1
  200. package/dist/composition/optionalObservationProviders.js +12 -7
  201. package/dist/config/environment.js +10 -0
  202. package/dist/config/ghidraStartupTimeout.js +12 -0
  203. package/dist/config/homeDirectory.js +12 -0
  204. package/dist/config/mcpResponseBudget.js +30 -0
  205. package/dist/config/parseConfig.js +8 -3
  206. package/dist/config/parsers.js +19 -22
  207. package/dist/contracts/analysisViewToolContracts.js +56 -0
  208. package/dist/contracts/applicationToolContracts.js +5 -4
  209. package/dist/contracts/artifactComparisonExample.js +2 -2
  210. package/dist/contracts/artifactToolContracts.js +1 -1
  211. package/dist/contracts/browserScenarioToolContracts.js +1 -1
  212. package/dist/contracts/browserToolContracts.js +19 -15
  213. package/dist/contracts/enhancedInputs.js +7 -5
  214. package/dist/contracts/enhancedToolContracts.js +7 -6
  215. package/dist/contracts/evm/evmToolContracts.js +1 -1
  216. package/dist/contracts/functionWorkflowToolContracts.js +1 -1
  217. package/dist/contracts/hopperMemoryContracts.js +2 -5
  218. package/dist/contracts/inputSchemaPresentation.js +90 -0
  219. package/dist/contracts/investigationExamples.js +4 -3
  220. package/dist/contracts/javascript/electronToolContracts.js +2 -2
  221. package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +0 -20
  222. package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +245 -0
  223. package/dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js +1 -1
  224. package/dist/contracts/managed/managedToolContracts.js +7 -14
  225. package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
  226. package/dist/contracts/mobileApplicationGraphExamples.js +3 -3
  227. package/dist/contracts/native/binaryDiagnosticsToolContracts.js +1 -1
  228. package/dist/contracts/native/nativeToolContracts.js +5 -3
  229. package/dist/contracts/officialToolContracts.js +16 -16
  230. package/dist/contracts/promptContracts.js +5 -5
  231. package/dist/contracts/providerSelection.js +1 -1
  232. package/dist/contracts/sessionLifecycleInputs.js +3 -7
  233. package/dist/contracts/sessionStatusContract.js +2 -4
  234. package/dist/contracts/sessionToolContracts.js +18 -8
  235. package/dist/contracts/sessionToolSchemas.js +3 -19
  236. package/dist/contracts/toolContractExamples.js +0 -1
  237. package/dist/contracts/toolContractHelpers.js +4 -1
  238. package/dist/contracts/toolContracts.js +2 -0
  239. package/dist/contracts/toolEffects.js +1 -1
  240. package/dist/contracts/toolOutputSchemaGroups.js +160 -115
  241. package/dist/contracts/toolOutputSchemaPrimitives.js +28 -20
  242. package/dist/contracts/toolSchemaMetadata.js +41 -33
  243. package/dist/contracts/webNetworkCaptureToolContracts.js +2 -2
  244. package/dist/contracts/webRuntimeToolContracts.js +1 -1
  245. package/dist/contracts/webScriptToolContracts.js +1 -1
  246. package/dist/doctorRuntime.js +7 -5
  247. package/dist/domain/analysisErrorBase.js +8 -3
  248. package/dist/domain/analysisErrorCore.js +6 -1
  249. package/dist/domain/analysisErrorPresentation.js +90 -20
  250. package/dist/domain/analysisErrorProjection.js +130 -32
  251. package/dist/domain/analysisSnapshot.js +29 -31
  252. package/dist/domain/analysisView/analysisView.js +243 -0
  253. package/dist/domain/analysisView/analysisViewCoverage.js +19 -0
  254. package/dist/domain/analysisView/binaryLayoutView.js +159 -0
  255. package/dist/domain/analysisView/javascriptApplicationView.js +238 -0
  256. package/dist/domain/android/androidAnalysis.js +2 -4
  257. package/dist/domain/android/androidApplication.js +18 -10
  258. package/dist/domain/apple/appleApplication.js +42 -15
  259. package/dist/domain/apple/dyldEnvironment.js +73 -0
  260. package/dist/domain/apple/dylibResolution.js +130 -12
  261. package/dist/domain/apple/dylibResolutionFindings.js +9 -7
  262. package/dist/domain/apple/interfaceBuilderGraph.js +25 -14
  263. package/dist/domain/apple/interfaceBuilderKeyedArchive.js +13 -3
  264. package/dist/domain/apple/keyedArchive.js +35 -3
  265. package/dist/domain/apple/machoContainer.js +54 -0
  266. package/dist/domain/apple/plistNumbers.js +76 -0
  267. package/dist/domain/artifactComparison.js +15 -6
  268. package/dist/domain/artifactGraph.js +16 -3
  269. package/dist/domain/artifactIdentity.js +29 -0
  270. package/dist/domain/artifactInventoryEvidence.js +28 -40
  271. package/dist/domain/artifactOperationError.js +3 -3
  272. package/dist/domain/artifactPartialObservation.js +1 -0
  273. package/dist/domain/artifactPathSyntax.js +49 -0
  274. package/dist/domain/binaryTarget.js +39 -13
  275. package/dist/domain/bridgeCandidateProjection.js +71 -0
  276. package/dist/domain/browserCaptureComparison.js +13 -49
  277. package/dist/domain/browserCompleteness.js +1 -0
  278. package/dist/domain/browserNetworkEvidence.js +10 -4
  279. package/dist/domain/browserObservation.js +0 -1
  280. package/dist/domain/browserObservationError.js +24 -5
  281. package/dist/domain/browserObservationSchemas.js +14 -3
  282. package/dist/domain/browserScenario.js +0 -1
  283. package/dist/domain/browserScenarioCapture.js +1 -2
  284. package/dist/domain/browserScenarioDiff.js +0 -2
  285. package/dist/domain/browserScenarioDiffEvidence.js +0 -12
  286. package/dist/domain/browserScenarioDiffValues.js +2 -2
  287. package/dist/domain/browserScenarioValues.js +5 -10
  288. package/dist/domain/bundleComparison.js +3 -2
  289. package/dist/domain/callPath.js +8 -9
  290. package/dist/domain/callPathSchemas.js +2 -2
  291. package/dist/domain/canonicalJsonDigestSteps.js +133 -0
  292. package/dist/domain/canonicalOrdering.js +9 -5
  293. package/dist/domain/changedBehavior.js +9 -9
  294. package/dist/domain/comparisonSourceEvidence.js +40 -0
  295. package/dist/domain/completionLedgerGeneration.js +2 -1
  296. package/dist/domain/configurationErrors.js +13 -1
  297. package/dist/domain/conformancePackage.js +4 -3
  298. package/dist/domain/evidence.js +65 -36
  299. package/dist/domain/evidenceBundle.js +47 -8
  300. package/dist/domain/evidenceCompletionLedger.js +2 -1
  301. package/dist/domain/evidenceErrors.js +12 -1
  302. package/dist/domain/explicitSensitiveFailure.js +17 -1
  303. package/dist/domain/firmware/firmwareAnalysis.js +6 -7
  304. package/dist/domain/functionComparison.js +4 -5
  305. package/dist/domain/functionComparisonDimensions.js +120 -87
  306. package/dist/domain/functionComparisonNormalization.js +23 -34
  307. package/dist/domain/functionComparisonResults.js +1 -4
  308. package/dist/domain/functionComparisonSchemas.js +2 -8
  309. package/dist/domain/functionDossierEvidence.js +2 -37
  310. package/dist/domain/hopperErrors.js +23 -2
  311. package/dist/domain/hopperValues.js +51 -8
  312. package/dist/domain/immutableJson.js +114 -0
  313. package/dist/domain/inputIssueProjection.js +3 -0
  314. package/dist/domain/javascript/electronActiveObservation.js +47 -64
  315. package/dist/domain/javascript/electronObservation.js +14 -3
  316. package/dist/domain/javascript/electronStaticAnalysisBrowser.js +10 -9
  317. package/dist/domain/javascript/electronStaticAnalysisIpc.js +2 -1
  318. package/dist/domain/javascript/electronStaticAnalysisNative.js +2 -1
  319. package/dist/domain/javascript/electronStaticAnalysisValues.js +6 -12
  320. package/dist/domain/javascript/javascriptApplicationAnalysis.js +71 -23
  321. package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +2 -0
  322. package/dist/domain/javascript/javascriptApplicationGraph.js +39 -3
  323. package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +9 -2
  324. package/dist/domain/javascript/javascriptApplicationVersionItems.js +5 -2
  325. package/dist/domain/javascript/javascriptApplicationVersionKeys.js +2 -1
  326. package/dist/domain/javascript/javascriptAstValues.js +20 -0
  327. package/dist/{application/javascript/JavaScriptReturnShapeProjection.js → domain/javascript/javascriptExportReturnShapeProjection.js} +4 -4
  328. package/dist/domain/javascript/javascriptExportShapeComparison.js +7 -1
  329. package/dist/domain/javascript/javascriptExportShapeComparisonIdentity.js +6 -1
  330. package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +29 -1
  331. package/dist/domain/javascript/javascriptExportShapeSelection.js +5 -5
  332. package/dist/domain/javascript/javascriptExportShapeVariants.js +67 -14
  333. package/dist/domain/javascript/javascriptFeatureSeed.js +20 -0
  334. package/dist/domain/javascript/javascriptFeatureTraversal.js +0 -1
  335. package/dist/domain/javascript/javascriptNativeHandoff.js +1 -1
  336. package/dist/domain/javascript/javascriptRecovery.js +3 -8
  337. package/dist/domain/javascript/javascriptRuntimeLoadState.js +0 -1
  338. package/dist/domain/javascript/javascriptRuntimeObservation.js +10 -2
  339. package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +1 -1
  340. package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +3 -2
  341. package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +0 -1
  342. package/dist/domain/javascript/javascriptSemanticAnalysis.js +106 -5
  343. package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +2 -1
  344. package/dist/domain/javascript/javascriptSemanticCalls.js +2 -1
  345. package/dist/domain/javascript/javascriptSemanticChildProcesses.js +2 -1
  346. package/dist/domain/javascript/javascriptSemanticCoverage.js +6 -5
  347. package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +9 -17
  348. package/dist/domain/javascript/javascriptSemanticDataEffects.js +23 -6
  349. package/dist/domain/javascript/javascriptSemanticGraph.js +98 -43
  350. package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +1 -0
  351. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +77 -20
  352. package/dist/domain/javascript/javascriptSemanticMutationValues.js +21 -27
  353. package/dist/domain/javascript/javascriptSemanticObjects.js +83 -42
  354. package/dist/domain/javascript/javascriptSemanticPrimitives.js +18 -21
  355. package/dist/domain/javascript/javascriptSemanticProjection.js +2 -3
  356. package/dist/domain/javascript/javascriptSemanticPromises.js +2 -1
  357. package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -4
  358. package/dist/domain/javascript/javascriptSemanticResourceLimits.js +77 -0
  359. package/dist/domain/javascript/javascriptSemanticResources.js +1 -1
  360. package/dist/domain/javascript/javascriptSemanticReturns.js +32 -17
  361. package/dist/domain/javascript/javascriptSemanticSlots.js +72 -0
  362. package/dist/domain/javascript/javascriptSemanticValues.js +126 -61
  363. package/dist/domain/javascript/javascriptSourceMapPaths.js +104 -0
  364. package/dist/domain/javascript/javascriptSourceParser.js +6 -2
  365. package/dist/domain/javascript/javascriptStaticAnalysis.js +22 -17
  366. package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +5 -3
  367. package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +16 -5
  368. package/dist/domain/javascript/javascriptStaticAnalysisFindings.js +66 -7
  369. package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +28 -17
  370. package/dist/domain/javascript/javascriptStaticAnalysisState.js +3 -2
  371. package/dist/domain/javascript/sourceToBundleComparison.js +12 -3
  372. package/dist/domain/javascript/sourceToBundleSignals.js +47 -19
  373. package/dist/domain/jsonSerialization.js +109 -0
  374. package/dist/domain/jsonValue.js +90 -6
  375. package/dist/domain/localPath.js +6 -0
  376. package/dist/domain/managed/managedApplicationGraph.js +10 -10
  377. package/dist/domain/managed/managedArtifact.js +6 -4
  378. package/dist/domain/managed/managedInspectionEvidence.js +16 -0
  379. package/dist/domain/managed/managedMemberComparison.js +2 -9
  380. package/dist/domain/managed/managedMemberComparisonMatch.js +5 -9
  381. package/dist/domain/managed/managedNativeVerification.js +3 -11
  382. package/dist/domain/managed/managedNativeVerificationMatch.js +9 -3
  383. package/dist/domain/native/binaryLayout.js +2 -3
  384. package/dist/domain/native/fileOffsetPartialObservation.js +1 -0
  385. package/dist/domain/native/nativeApiBoundary.js +1 -1
  386. package/dist/domain/native/nativeCallObservation.js +37 -13
  387. package/dist/domain/native/nativeCallPartialObservation.js +33 -0
  388. package/dist/domain/native/nativeInstruction.js +7 -0
  389. package/dist/domain/native/recordedCrash.js +2 -3
  390. package/dist/domain/offsetDateTime.js +17 -0
  391. package/dist/domain/process/processCapture.js +21 -16
  392. package/dist/domain/process/processCaptureCoverage.js +67 -0
  393. package/dist/domain/process/processCaptureExample.js +2 -1
  394. package/dist/domain/process/processCaptureParsing.js +1 -34
  395. package/dist/domain/process/processCaptureValidation.js +81 -13
  396. package/dist/domain/process/processComparison.js +79 -26
  397. package/dist/domain/process/processObservation.js +10 -2
  398. package/dist/domain/process/processScenario.js +35 -12
  399. package/dist/domain/process/processTraceComparison.js +0 -2
  400. package/dist/domain/process/processTraceDimensionProjection.js +1 -1
  401. package/dist/domain/process/processTraceEvaluation.js +15 -11
  402. package/dist/domain/process/processTraceSpecification.js +3 -4
  403. package/dist/domain/propertyListKeys.js +1 -1
  404. package/dist/domain/propertyListXmlText.js +19 -0
  405. package/dist/domain/providerAdapterError.js +3 -1
  406. package/dist/domain/providerOperationHealth.js +54 -0
  407. package/dist/domain/reconstructionCoverage.js +5 -2
  408. package/dist/domain/reconstructionObligationLedgerSchemas.js +2 -1
  409. package/dist/domain/reconstructionReadinessSchemas.js +2 -1
  410. package/dist/domain/reconstructionVerification.js +9 -46
  411. package/dist/domain/reconstructionVerificationSchemas.js +4 -3
  412. package/dist/domain/referenceSourceGraph.js +20 -21
  413. package/dist/domain/staticRuntimeCorrelation.js +8 -45
  414. package/dist/domain/stringPatterns.js +6 -0
  415. package/dist/domain/swiftSymbolClassification.js +61 -0
  416. package/dist/domain/symbolAnalysis.js +66 -18
  417. package/dist/domain/webBundleAnalysis.js +20 -8
  418. package/dist/domain/webBundleAnalyzerInspection.js +13 -8
  419. package/dist/domain/webBundleAnalyzerResult.js +41 -2
  420. package/dist/domain/webCaptureDiff.js +0 -1
  421. package/dist/domain/webCaptureDiffSchemas.js +6 -3
  422. package/dist/domain/webEventListeners.js +3 -2
  423. package/dist/domain/webExecution.js +3 -2
  424. package/dist/domain/webRuntime.js +19 -7
  425. package/dist/domain/webScriptExport.js +1 -1
  426. package/dist/domain/webSourceLocation.js +1 -0
  427. package/dist/dotnet/ManagedArtifactInspector.js +2 -19
  428. package/dist/dotnet/ManagedMemberInspector.js +12 -18
  429. package/dist/dotnet/ManagedMemberInspectorCore.js +47 -44
  430. package/dist/dotnet/ManagedMemberRows.js +75 -62
  431. package/dist/dotnet/ManagedMetadataInventory.js +16 -22
  432. package/dist/dotnet/ManagedMethodBodyReader.js +4 -0
  433. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +109 -94
  434. package/dist/dotnet/ManagedNativeBoundaryInspector.js +12 -21
  435. package/dist/dotnet/ManagedReaderFailure.js +16 -0
  436. package/dist/dotnet/ManagedStaticProvider.js +3 -5
  437. package/dist/evaluation/AgentEvaluationFixtures.js +250 -0
  438. package/dist/evaluation/AgentEvaluationReport.js +28 -0
  439. package/dist/evaluation/CodexAgentEval.js +12 -8
  440. package/dist/evaluation/KnownAnswerEvaluation.js +281 -0
  441. package/dist/evm/EvmoleInterfaceProvider.js +2 -1
  442. package/dist/firmware/FirmwareCommand.js +9 -5
  443. package/dist/firmware/FirmwareFiles.js +1 -1
  444. package/dist/firmware/FirmwareProvider.js +4 -4
  445. package/dist/generatedPackageMetadata.js +2 -2
  446. package/dist/ghidra/GhidraAnalysisProfile.js +7 -5
  447. package/dist/ghidra/GhidraClient.js +126 -34
  448. package/dist/ghidra/GhidraClientStartup.js +0 -2
  449. package/dist/ghidra/GhidraDiagnostics.js +7 -7
  450. package/dist/ghidra/GhidraDoctor.js +6 -5
  451. package/dist/ghidra/GhidraFunctionValues.js +13 -12
  452. package/dist/ghidra/GhidraInstallation.js +58 -33
  453. package/dist/ghidra/GhidraInventoryValues.js +14 -4
  454. package/dist/ghidra/GhidraJavaLaunch.js +66 -0
  455. package/dist/ghidra/GhidraLauncher.js +47 -22
  456. package/dist/ghidra/GhidraProvider.js +6 -2
  457. package/dist/ghidra/GhidraProviderCapabilities.js +20 -2
  458. package/dist/ghidra/GhidraProviderClient.js +36 -15
  459. package/dist/ghidra/GhidraSessionError.js +13 -7
  460. package/dist/ghidra/GhidraSessionRoot.js +39 -0
  461. package/dist/ghidra/GhidraTargetSnapshot.js +47 -12
  462. package/dist/ghidra/GhidraTransport.js +20 -0
  463. package/dist/ghidra/extensions/GhidraExtensions.js +17 -10
  464. package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +8 -2
  465. package/dist/hopper/BridgeLauncher.js +65 -56
  466. package/dist/hopper/HopperAnalysisProfile.js +65 -12
  467. package/dist/hopper/HopperCleanup.js +63 -22
  468. package/dist/hopper/HopperClient.js +288 -59
  469. package/dist/hopper/HopperFileOffset.js +237 -0
  470. package/dist/hopper/HopperMachOImage.js +197 -0
  471. package/dist/hopper/HopperOperationStage.js +6 -0
  472. package/dist/hopper/HopperProvider.js +71 -19
  473. package/dist/hopper/HopperProviderCapabilities.js +19 -1
  474. package/dist/hopper/HopperRegexSearch.js +134 -0
  475. package/dist/hopper/HopperRegexWorker.js +27 -0
  476. package/dist/hopper/HopperRequestQueue.js +68 -19
  477. package/dist/hopper/HopperTargetLease.js +133 -49
  478. package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -0
  479. package/dist/ida/IdaConfiguration.js +8 -3
  480. package/dist/ida/IdaInput.js +1 -7
  481. package/dist/ida/IdaMcpConnection.js +8 -4
  482. package/dist/ida/IdaOperationRunner.js +3 -3
  483. package/dist/ida/IdaProvider.js +8 -12
  484. package/dist/ida/IdaSessionClient.js +20 -18
  485. package/dist/ida/IdaWorkspace.js +12 -13
  486. package/dist/inspector/JavaScriptRuntimeScope.js +9 -1
  487. package/dist/inspector/V8InspectorCaptureProjection.js +9 -4
  488. package/dist/inspector/V8InspectorProvider.js +82 -36
  489. package/dist/javascript/recovery/WakaruCommand.js +7 -2
  490. package/dist/javascript/recovery/WakaruExecution.js +5 -2
  491. package/dist/javascript/sourceMaps/DecodedSourceMap.js +47 -0
  492. package/dist/javascript/sourceMaps/SourceMapCommand.js +16 -0
  493. package/dist/javascript/sourceMaps/SourceMapFormat.js +79 -31
  494. package/dist/javascript/sourceMaps/TraceSourceMap.js +14 -28
  495. package/dist/main/shutdown.js +11 -3
  496. package/dist/main/startup.js +9 -2
  497. package/dist/main/transport.js +22 -2
  498. package/dist/main.js +11 -18
  499. package/dist/mcpDoctor.js +62 -2
  500. package/dist/native/AppleDispatchCoverage.js +47 -6
  501. package/dist/native/AppleDispatchDecodeFacts.js +6 -0
  502. package/dist/native/AppleDispatchMetadata.js +6 -3
  503. package/dist/native/AppleMachoFixups.js +48 -24
  504. package/dist/native/AppleMachoSelection.js +48 -22
  505. package/dist/native/AppleObjcCategories.js +6 -2
  506. package/dist/native/AppleObjcDispatchFacets.js +5 -2
  507. package/dist/native/AppleObjcProperties.js +2 -1
  508. package/dist/native/AppleSwiftDispatchFacets.js +27 -21
  509. package/dist/native/AppleSwiftVtables.js +21 -15
  510. package/dist/native/CommandRunner.js +87 -88
  511. package/dist/native/LldbCallTracer.js +372 -103
  512. package/dist/native/LldbRetainedObservations.js +178 -0
  513. package/dist/native/NativeCallObservation.js +62 -3
  514. package/dist/native/NativeMacOSProvider.js +122 -31
  515. package/dist/native/NativeUiHelperRuntime.js +11 -2
  516. package/dist/native/NativeUiObservation.js +2 -2
  517. package/dist/native/SignatureTargetBinding.js +155 -0
  518. package/dist/native/parsers/lipo.js +71 -1
  519. package/dist/native/pwndbg/PwndbgCoreContext.js +25 -5
  520. package/dist/native/pwntools/PwntoolsDecoder.js +2 -1
  521. package/dist/native/pwntools/RecordedCrashStructureBindings.js +2 -0
  522. package/dist/process/DarwinProcessRunTokenReader.js +23 -10
  523. package/dist/process/ExecFileOutput.js +108 -6
  524. package/dist/process/OwnedCommand.js +7 -2
  525. package/dist/process/PrivateRuntimeRoot.js +10 -5
  526. package/dist/process/ProcessOwnership.js +204 -57
  527. package/dist/process/ProcessOwnershipObservation.js +60 -9
  528. package/dist/process/ProviderProcess.js +39 -10
  529. package/dist/process/capture/FilesystemSnapshot.js +50 -13
  530. package/dist/process/capture/ProcessCaptureError.js +15 -2
  531. package/dist/process/capture/ProcessCaptureLifecycle.js +235 -81
  532. package/dist/process/capture/ProcessFilesystemEffects.js +33 -3
  533. package/dist/process/capture/ProcessHarness.js +21 -25
  534. package/dist/process/capture/ProcessNormalization.js +20 -2
  535. package/dist/process/capture/ProcessSampling.js +25 -2
  536. package/dist/process/capture/TerminalRenderer.js +14 -0
  537. package/dist/process/snapshotEnvironment.js +14 -0
  538. package/dist/server/EvidenceMcpServer.js +157 -0
  539. package/dist/server/createServer.js +61 -41
  540. package/dist/server/mcpClientMetadata.js +12 -5
  541. package/dist/server/promptCompletion.js +3 -8
  542. package/dist/server/registerAnalysisViewTool.js +15 -0
  543. package/dist/server/registerAndroidTools.js +2 -5
  544. package/dist/server/registerApplicationTools/compareExportShapes.js +4 -5
  545. package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
  546. package/dist/server/registerApplicationTools/compareVersions.js +4 -5
  547. package/dist/server/registerApplicationTools/coverage.js +1 -2
  548. package/dist/server/registerApplicationTools/helpers.js +1 -4
  549. package/dist/server/registerApplicationTools/obligationLedger.js +4 -5
  550. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -4
  551. package/dist/server/registerApplicationTools/traceFeature.js +4 -5
  552. package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
  553. package/dist/server/registerArtifactComparisonTool.js +13 -10
  554. package/dist/server/registerBinaryDiagnosticsTools.js +2 -5
  555. package/dist/server/registerBrowserScenarioTool.js +3 -6
  556. package/dist/server/registerBrowserTools.js +13 -18
  557. package/dist/server/registerBundleComparisonTool.js +5 -7
  558. package/dist/server/registerCloseLifecycleTool.js +9 -20
  559. package/dist/server/registerElectronTools.js +10 -15
  560. package/dist/server/registerEnhancedTools.js +36 -77
  561. package/dist/server/registerEvidenceTools.js +3 -6
  562. package/dist/server/registerEvmTools.js +2 -5
  563. package/dist/server/registerFirmwareTools.js +2 -5
  564. package/dist/server/registerFunctionComparisonTool.js +15 -12
  565. package/dist/server/registerInvestigationTools.js +16 -17
  566. package/dist/server/registerJavaScriptRecoveryTool.js +2 -5
  567. package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -8
  568. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +5 -8
  569. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -7
  570. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +6 -9
  571. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +6 -9
  572. package/dist/server/registerOfficialTools.js +4 -21
  573. package/dist/server/registerProcessComparisonTool.js +74 -48
  574. package/dist/server/registerRecordedCrashTools.js +2 -5
  575. package/dist/server/registerSessionRecordTools.js +19 -24
  576. package/dist/server/registerSessionStatusTool.js +19 -6
  577. package/dist/server/registerSessionTools.js +20 -18
  578. package/dist/server/registerWebModuleTool.js +2 -5
  579. package/dist/server/registerWebNetworkCaptureTool.js +2 -5
  580. package/dist/server/registerWebRuntimeTools.js +4 -9
  581. package/dist/server/registerWebScriptTool.js +2 -5
  582. package/dist/server/registerWebSourceLocationTool.js +2 -5
  583. package/dist/server/runDerivedOperation.js +15 -3
  584. package/dist/server/sessionAvailabilityPolicy.js +0 -1
  585. package/dist/server/toolRegistrationOptions.js +2 -2
  586. package/dist/server/toolResult.js +75 -51
  587. package/dist/server/toolResultEncoding.js +34 -0
  588. package/dist/windows/WindowsNativeLoader.js +1 -0
  589. package/dist/windows/WindowsOwnedProcess.js +60 -15
  590. package/dist/windows/WindowsPrivateRuntime.js +7 -8
  591. package/install.sh +1 -1
  592. package/native/windows/README.md +3 -1
  593. package/native/windows/build/manifest.json +2 -2
  594. package/native/windows/build/rea-windows-x64.node +0 -0
  595. package/package.json +44 -30
  596. package/scripts/electron-active-hook-boundaries.cjs +18 -20
  597. package/scripts/electron-active-hook.cjs +241 -37
  598. package/scripts/rea.mjs +3 -6
  599. package/skills/reverse-engineer-anything/SKILL.md +12 -3
  600. package/skills/reverse-engineer-anything/references/android-applications.md +6 -3
  601. package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -4
  602. package/skills/reverse-engineer-anything/references/javascript-applications.md +20 -3
  603. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +9 -0
  604. package/dist/config.js +0 -1
  605. package/dist/contracts/browserCaptureToolInputSchema.js +0 -43
  606. package/dist/contracts/process/processCaptureExample.js +0 -2
  607. package/dist/contracts/toolOutputSchemas.js +0 -2
  608. package/dist/ghidra/GhidraDefaults.js +0 -2
  609. package/dist/main/reload.js +0 -12
  610. package/dist/main/state.js +0 -3
  611. package/dist/server/sessionToolPolicies.js +0 -2
@@ -3,10 +3,16 @@ export const buildWebBundleAnalysis = (inspection, sourceScripts, sourceMaps, ac
3
3
  const unavailable = inspection.scripts.items
4
4
  .filter((script) => !script.source.included)
5
5
  .map(({ script_key }) => script_key);
6
+ const omittedScripts = captureBudgetOmission(inspection, "scripts");
7
+ const omittedSourceMaps = sourceMaps.status === "not_requested"
8
+ ? undefined
9
+ : captureBudgetOmission(inspection, "source_maps");
6
10
  const sourceMapIncomplete = sourceMaps.status === "partial" || sourceMaps.status === "unavailable";
7
11
  const partial = accumulator.parseFailures > 0 ||
8
12
  unavailable.length > 0 ||
9
- sourceMapIncomplete;
13
+ sourceMapIncomplete ||
14
+ omittedScripts !== undefined ||
15
+ omittedSourceMaps !== undefined;
10
16
  return webBundleAnalysisSchema.parse({
11
17
  capture: buildCaptureObservation(inspection, sourceScripts),
12
18
  observations: {
@@ -25,6 +31,8 @@ export const buildWebBundleAnalysis = (inspection, sourceScripts, sourceMaps, ac
25
31
  unavailable,
26
32
  parseFailures: accumulator.parseFailures,
27
33
  sourceMaps,
34
+ omittedScripts,
35
+ omittedSourceMaps,
28
36
  }),
29
37
  completeness: buildCompleteness({
30
38
  partial,
@@ -58,6 +66,15 @@ const chunkNode = (script) => {
58
66
  };
59
67
  };
60
68
  const buildUnknowns = (input) => [
69
+ ...(input.omittedScripts === undefined
70
+ ? []
71
+ : [
72
+ {
73
+ dimension: "script_inventory",
74
+ reason: captureBudgetReason("script records", input.omittedScripts),
75
+ affected_script_keys: [],
76
+ },
77
+ ]),
61
78
  ...(input.unavailable.length === 0
62
79
  ? []
63
80
  : [
@@ -76,13 +93,23 @@ const buildUnknowns = (input) => [
76
93
  affected_script_keys: input.sourceScripts.map(({ script_key }) => script_key),
77
94
  },
78
95
  ]),
96
+ ...(input.omittedSourceMaps === undefined
97
+ ? []
98
+ : [
99
+ {
100
+ dimension: "source_maps",
101
+ reason: captureBudgetReason("source-map declarations", input.omittedSourceMaps),
102
+ affected_script_keys: [],
103
+ },
104
+ ]),
79
105
  ...(input.sourceMaps.status === "not_requested" ||
80
106
  input.sourceMaps.status === "included"
81
107
  ? []
82
108
  : [
83
109
  {
84
110
  dimension: "source_maps",
85
- reason: "One or more requested source maps were unavailable or incomplete",
111
+ reason: input.sourceMaps.limitation ??
112
+ "One or more requested source maps were unavailable or incomplete",
86
113
  affected_script_keys: input.sourceMaps.items
87
114
  .filter(({ status }) => status !== "included")
88
115
  .map(({ script_key }) => script_key)
@@ -90,6 +117,18 @@ const buildUnknowns = (input) => [
90
117
  },
91
118
  ]),
92
119
  ];
120
+ const captureBudgetOmission = (inspection, section) => {
121
+ const exclusions = inspection.completeness.excluded.filter((exclusion) => exclusion.section === section &&
122
+ exclusion.reason === "resource_budget_exhausted");
123
+ if (exclusions.length === 0)
124
+ return undefined;
125
+ if (exclusions.some(({ count }) => count === null))
126
+ return null;
127
+ return exclusions.reduce((sum, { count }) => sum + (count ?? 0), 0);
128
+ };
129
+ const captureBudgetReason = (label, count) => count === null
130
+ ? `Capture omitted an unknown number of ${label} because its resource budget was exhausted.`
131
+ : `Capture omitted ${String(count)} ${label} because its resource budget was exhausted.`;
93
132
  const buildCompleteness = (input) => ({
94
133
  status: input.partial ? "partial" : "complete",
95
134
  parsed_scripts: input.parsedScripts,
@@ -1,6 +1,5 @@
1
1
  import { canonicalDigest } from "./comparisonSemantics.js";
2
2
  import { webCaptureDiffSchema, } from "./webCaptureDiffSchemas.js";
3
- export { captureSnapshotSchema, compareWebCapturesInputSchema, webCaptureDiffSchema, } from "./webCaptureDiffSchemas.js";
4
3
  /** Compare normalized observations without treating incomplete absence as proof. */
5
4
  export const compareWebCaptures = (input) => {
6
5
  const before = input.before.inspection;
@@ -1,11 +1,14 @@
1
1
  import { z } from "zod";
2
2
  import { emptyArraySchema } from "./emptyArraySchema.js";
3
- import { webPageInspectionSchema } from "./browserObservation.js";
3
+ import { webPageInspectionSchema } from "./browserObservationSchemas.js";
4
4
  import { webMcpDiscoverySchema } from "./webMcpDiscovery.js";
5
5
  /** One normalized passive page snapshot accepted by capture comparison. */
6
6
  export const captureSnapshotSchema = z.object({
7
- inspection: webPageInspectionSchema,
8
- webmcp: webMcpDiscoverySchema.nullable().default(null),
7
+ inspection: webPageInspectionSchema.describe("Complete normalized_result from inspect_web_page, including capture identity, observations, completeness, and limitations."),
8
+ webmcp: webMcpDiscoverySchema
9
+ .nullable()
10
+ .default(null)
11
+ .describe("Complete normalized_result from discover_webmcp_tools for this capture, or null when it was not recorded."),
9
12
  });
10
13
  /** Input for deterministic comparison of two normalized web captures. */
11
14
  export const compareWebCapturesInputSchema = z.strictObject({
@@ -1,12 +1,13 @@
1
1
  import { z } from "zod";
2
- import { webRuntimeBrowserSchema, webRuntimeLocationSchema, webRuntimeScopeSchema, webRuntimeSourceSchema, webRuntimeTargetSchema, } from "./webRuntime.js";
2
+ import { webRuntimeLocationSchema, webRuntimeScopeSchema, webRuntimeSourceSchema, webRuntimeTargetSchema, } from "./webRuntime.js";
3
+ import { browserVersionSchema } from "./browserObservationSchemas.js";
3
4
  /** Inspect listeners registered directly on the first main-document CSS match. */
4
5
  export const inspectWebEventListenersInputSchema = webRuntimeScopeSchema.extend({
5
6
  selector: z.string().min(1),
6
7
  });
7
8
  /** A listener declaration and its source location do not establish that it ran. */
8
9
  export const webEventListenersSchema = z.object({
9
- browser: webRuntimeBrowserSchema,
10
+ browser: browserVersionSchema,
10
11
  target: webRuntimeTargetSchema,
11
12
  inspected_at: z.iso.datetime(),
12
13
  selected_node: z.object({
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  import { jsonObjectSchema } from "./jsonValue.js";
3
- import { webRuntimeBrowserSchema, webRuntimeLocationSchema, webRuntimeScopeSchema, webRuntimeSourceSchema, webRuntimeTargetSchema, } from "./webRuntime.js";
3
+ import { webRuntimeLocationSchema, webRuntimeScopeSchema, webRuntimeSourceSchema, webRuntimeTargetSchema, } from "./webRuntime.js";
4
+ import { browserVersionSchema } from "./browserObservationSchemas.js";
4
5
  /** Explicit instrumentation request for one finite, externally driven execution window. */
5
6
  export const observeWebExecutionInputSchema = webRuntimeScopeSchema.extend({
6
7
  observation_ms: z.number().int().min(1).max(2_147_483_647).default(10_000),
@@ -18,7 +19,7 @@ const functionSchema = z.object({
18
19
  });
19
20
  /** Precise V8 ranges retain their nested structure and counts without summing them. */
20
21
  export const webExecutionSchema = z.object({
21
- browser: webRuntimeBrowserSchema,
22
+ browser: browserVersionSchema,
22
23
  target: webRuntimeTargetSchema,
23
24
  window: z.object({
24
25
  armed_at: z.iso.datetime(),
@@ -2,6 +2,20 @@ import { z } from "zod";
2
2
  import { browserAllowedOriginsSchema, browserEndpointSchema, } from "./browserObservation.js";
3
3
  import { browserVersionSchema } from "./browserObservationSchemas.js";
4
4
  import { jsonObjectSchema } from "./jsonValue.js";
5
+ // CDP positions are zero-based and relative to the resource named by url.
6
+ // With a script ID that is the script's enclosing resource: the script file,
7
+ // or the HTML document for an inline script. An empty script ID marks a
8
+ // position a request initiator reported, such as parser markup or a module
9
+ // import in a script file; it still locates url, but has no session-script
10
+ // association to join captured source or resource_start.
11
+ // trace_web_source_location takes one-based, script-relative lines, so the
12
+ // advertised units keep callers from passing a position off by one or by an
13
+ // inline script's offset.
14
+ const SCRIPT_ID = "CDP session script ID; empty for a position a request initiator reported, which has no session-script association for joining captured source or resource_start.";
15
+ const RESOURCE_LINE = "Zero-based line in the resource named by url, as reported by CDP: the script file for an external script (including a module-import initiator), or the HTML document for an inline script or parser markup.";
16
+ const RESOURCE_COLUMN = "Zero-based UTF-16 column on that line of the resource named by url, as reported by CDP.";
17
+ const START_LINE = "Zero-based line where the script text starts in its enclosing resource (the HTML document for an inline script).";
18
+ const START_COLUMN = "Zero-based UTF-16 column where the script text starts on that line of its enclosing resource.";
5
19
  /** Scope for one externally owned page; omitted origins select its current origin. */
6
20
  export const webRuntimeScopeSchema = z.strictObject({
7
21
  cdp_endpoint: browserEndpointSchema,
@@ -22,8 +36,8 @@ export const webRuntimeSourceSchema = z.object({
22
36
  language: z.string().nullable(),
23
37
  resource_start: z
24
38
  .object({
25
- line_number: z.number().int().min(0),
26
- column_number: z.number().int().min(0),
39
+ line_number: z.number().int().min(0).describe(START_LINE),
40
+ column_number: z.number().int().min(0).describe(START_COLUMN),
27
41
  })
28
42
  .nullable(),
29
43
  source: z.discriminatedUnion("state", [
@@ -42,10 +56,10 @@ export const webRuntimeSourceSchema = z.object({
42
56
  });
43
57
  /** Producer callsite coordinates are zero-based resource lines and UTF-16 columns. */
44
58
  export const webRuntimeLocationSchema = z.object({
45
- script_id: z.string(),
59
+ script_id: z.string().describe(SCRIPT_ID),
46
60
  url: z.string().nullable(),
47
- line_number: z.number().int().min(0),
48
- column_number: z.number().int().min(0).nullable(),
61
+ line_number: z.number().int().min(0).describe(RESOURCE_LINE),
62
+ column_number: z.number().int().min(0).nullable().describe(RESOURCE_COLUMN),
49
63
  function_name: z.string().nullable(),
50
64
  source_association: z.enum(["script_id", "unknown"]),
51
65
  });
@@ -57,8 +71,6 @@ export const webRuntimeTargetSchema = z.object({
57
71
  frame_id: z.string().min(1),
58
72
  loader_id: z.string().nullable(),
59
73
  });
60
- /** Producer product identity is observed separately from the unknown host platform. */
61
- export const webRuntimeBrowserSchema = browserVersionSchema;
62
74
  /** Complete runtime evidence has explicit byte budgets rather than silent item truncation. */
63
75
  export const WEB_RUNTIME_LIMITS = {
64
76
  protocolBytes: 64 * 1024 * 1024,
@@ -18,7 +18,7 @@ const sourceSchema = z.discriminatedUnion("kind", [
18
18
  kind: z.literal("page-script"),
19
19
  script_key: z.string().min(1),
20
20
  frame_id: z.string().nullable(),
21
- is_module: z.boolean(),
21
+ is_module: z.boolean().nullable(),
22
22
  language: z.string().nullable(),
23
23
  source_map_url: z.string().nullable(),
24
24
  }),
@@ -85,6 +85,7 @@ export const WEB_SOURCE_MAP_LIMITS = {
85
85
  outputBytes: 32 * 1024 * 1024,
86
86
  decodedRows: 262144,
87
87
  decodedSegments: 262144,
88
+ decodedRecords: 262144,
88
89
  sectionDepth: 64,
89
90
  decodeTimeoutMs: 20000,
90
91
  };
@@ -1,6 +1,6 @@
1
1
  import { managedArtifactInspectionSchema, } from "../domain/managed/managedArtifact.js";
2
2
  import { readManagedPeLayout, } from "./ManagedPeReader.js";
3
- import { managedTableRowCounts, readManagedMetadataInventory, } from "./ManagedMetadataInventory.js";
3
+ import { managedTableRowCounts, readManagedMetadataInventory, readManagedResourceDirectory, } from "./ManagedMetadataInventory.js";
4
4
  import { readManagedMetadataLayout, } from "./ManagedMetadataLayout.js";
5
5
  import { ManagedReaderFailure } from "./ManagedReaderFailure.js";
6
6
  const flagNames = (flags) => {
@@ -228,23 +228,6 @@ const partialMetadataResult = ({ target, bytes, layout, issue, }) => ({
228
228
  "CLI metadata could not be read because the PE/CLI structure is malformed or unsupported.",
229
229
  ],
230
230
  });
231
- const mapResources = (bytes, layout, issues) => {
232
- const resources = layout.cli?.resources;
233
- if (resources === undefined || (resources.rva === 0 && resources.size === 0))
234
- return null;
235
- try {
236
- return {
237
- offset: layout.rvaToOffset(resources.rva, resources.size, "cli.resources"),
238
- size: resources.size,
239
- };
240
- }
241
- catch (cause) {
242
- if (!(cause instanceof ManagedReaderFailure))
243
- throw cause;
244
- issues.push(cause.issue);
245
- return null;
246
- }
247
- };
248
231
  /** Inspect PE/CLI identity directly from local bytes without CLR loading. */
249
232
  export const inspectManagedArtifactBytes = (bytes, target) => {
250
233
  const layout = readManagedPeLayout(bytes);
@@ -267,7 +250,7 @@ export const inspectManagedArtifactBytes = (bytes, target) => {
267
250
  }));
268
251
  }
269
252
  const resourceIssues = [];
270
- const resourceDirectory = mapResources(bytes, layout, resourceIssues);
253
+ const resourceDirectory = readManagedResourceDirectory(layout, resourceIssues);
271
254
  const inventory = readManagedMetadataInventory(bytes, metadata, resourceDirectory);
272
255
  const issues = [...resourceIssues, ...inventory.issues];
273
256
  const limitations = [
@@ -1,8 +1,8 @@
1
1
  import { managedMemberInspectionSchema, } from "../domain/managed/managedArtifact.js";
2
2
  import { readManagedPeLayout, } from "./ManagedPeReader.js";
3
- import { managedTableRowCounts, readManagedMetadataInventory, } from "./ManagedMetadataInventory.js";
3
+ import { readManagedResourceDirectory, managedTableRowCounts, readManagedMetadataInventory, } from "./ManagedMetadataInventory.js";
4
4
  import { readManagedMetadataLayout } from "./ManagedMetadataLayout.js";
5
- import { ManagedReaderFailure } from "./ManagedReaderFailure.js";
5
+ import { ManagedReaderFailure, uniqueManagedParseIssues, } from "./ManagedReaderFailure.js";
6
6
  import { parseTypes, typeRanges } from "./ManagedMemberInspectorCore.js";
7
7
  import { edges, parseFields, parseMemberRefs, parseMethods, } from "./ManagedMemberRows.js";
8
8
  const unavailable = (target, bytes, issue) => managedMemberInspectionSchema.parse({
@@ -39,23 +39,13 @@ const unavailable = (target, bytes, issue) => managedMemberInspectionSchema.pars
39
39
  : "The CLI metadata could not be admitted; managed member inspection is unavailable.",
40
40
  ],
41
41
  });
42
- const resourceDirectory = (pe) => {
43
- if (pe.cli === null ||
44
- pe.cli.resources.rva === 0 ||
45
- pe.cli.resources.size === 0)
46
- return null;
47
- return {
48
- offset: pe.rvaToOffset(pe.cli.resources.rva, pe.cli.resources.size, "cli.resources"),
49
- size: pe.cli.resources.size,
50
- };
51
- };
52
- const readMemberInventory = (bytes, pe) => {
42
+ const readMemberInventory = (bytes, pe, issues) => {
53
43
  const cli = pe.cli;
54
44
  if (cli === null)
55
45
  throw new TypeError("Managed inventory requires CLI metadata");
56
46
  const rootOffset = pe.rvaToOffset(cli.metadata.rva, cli.metadata.size, "cli.metadata");
57
47
  const layout = readManagedMetadataLayout(bytes, rootOffset, cli.metadata.size);
58
- const inventory = readManagedMetadataInventory(bytes, layout, resourceDirectory(pe));
48
+ const inventory = readManagedMetadataInventory(bytes, layout, readManagedResourceDirectory(pe, issues));
59
49
  return { layout, inventory };
60
50
  };
61
51
  /** Inspect metadata members and method bodies without loading target code. */
@@ -65,9 +55,9 @@ export const inspectManagedMembersBytes = (bytes, target) => {
65
55
  return unavailable(target, bytes, pe.cliIssue);
66
56
  const issues = [];
67
57
  try {
68
- const { layout, inventory } = readMemberInventory(bytes, pe);
58
+ const { layout, inventory } = readMemberInventory(bytes, pe, issues);
69
59
  issues.push(...inventory.issues);
70
- const ranges = typeRanges(bytes, layout);
60
+ const ranges = typeRanges(bytes, layout, issues);
71
61
  const parsedTypes = parseTypes(bytes, layout, ranges);
72
62
  issues.push(...parsedTypes.issues);
73
63
  const fields = parseFields(bytes, layout, ranges);
@@ -79,7 +69,11 @@ export const inspectManagedMembersBytes = (bytes, target) => {
79
69
  pe,
80
70
  ranges,
81
71
  });
82
- const coverageIssues = issues;
72
+ issues.push(...fields.issues, ...methods.issues);
73
+ const coverageIssues = uniqueManagedParseIssues(issues);
74
+ const incompleteMembers = [...fields.fields, ...memberRefs.refs, ...methods.methods].some((member) => member.signature.parse_status !== "decoded") ||
75
+ methods.methods.some((method) => method.body.status === "partial" ||
76
+ method.body.status === "malformed");
83
77
  const related = edges(methods.methods, methods.core, fields.core, memberRefs.core);
84
78
  return managedMemberInspectionSchema.parse({
85
79
  artifact: {
@@ -106,7 +100,7 @@ export const inspectManagedMembersBytes = (bytes, target) => {
106
100
  call_edges: related.callEdges,
107
101
  field_accesses: related.fieldAccesses,
108
102
  coverage: {
109
- state: coverageIssues.length === 0 ? "complete" : "partial",
103
+ state: issues.length === 0 && !incompleteMembers ? "complete" : "partial",
110
104
  issues: coverageIssues,
111
105
  },
112
106
  limitations: [
@@ -1,4 +1,4 @@
1
- import { managedFailure, ManagedReaderFailure, } from "./ManagedReaderFailure.js";
1
+ import { managedFailure, ManagedReaderFailure, readManagedValue, } from "./ManagedReaderFailure.js";
2
2
  import {} from "./ManagedMetadataLayout.js";
3
3
  import { metadataRowCursor, metadataCodedToken, metadataCodedTokenInvalidReason, metadataToken, readMetadataString, sha256Bytes, } from "./ManagedMetadataHeaps.js";
4
4
  const rowRange = (table, start, nextStart) => {
@@ -11,13 +11,14 @@ const rowRange = (table, start, nextStart) => {
11
11
  return { first: start, last: end - 1, count: end - start };
12
12
  };
13
13
  const fullName = (namespace, name) => namespace.length === 0 ? name : `${namespace}.${name}`;
14
- const readTypeRange = (bytes, layout, row) => {
14
+ const readTypeRange = (bytes, layout, row, issues) => {
15
15
  const methods = layout.table(6);
16
16
  const fields = layout.table(4);
17
17
  const cursor = metadataRowCursor(bytes, layout, 2, row);
18
18
  cursor.readUInt32();
19
- const name = readMetadataString(bytes, layout, cursor.readIndex(layout.stringIndexSize), layout.strings.size);
20
- const namespace = readMetadataString(bytes, layout, cursor.readIndex(layout.stringIndexSize), layout.strings.size);
19
+ const nameIndex = cursor.readIndex(layout.stringIndexSize);
20
+ const namespaceIndex = cursor.readIndex(layout.stringIndexSize);
21
+ const declaredName = readManagedValue(() => fullName(readMetadataString(bytes, layout, namespaceIndex, layout.strings.size), readMetadataString(bytes, layout, nameIndex, layout.strings.size)), issues) ?? null;
21
22
  cursor.readIndex(layout.codedIndexSize("TypeDefOrRef"));
22
23
  const fieldStart = cursor.readIndex(layout.tableIndexSize(4));
23
24
  const methodStart = cursor.readIndex(layout.tableIndexSize(6));
@@ -35,18 +36,18 @@ const readTypeRange = (bytes, layout, row) => {
35
36
  }
36
37
  return {
37
38
  token: metadataToken(2, row),
38
- fullName: fullName(namespace, name),
39
+ fullName: declaredName,
39
40
  fieldStart,
40
41
  fieldEnd: nextField,
41
42
  methodStart,
42
43
  methodEnd: nextMethod,
43
44
  };
44
45
  };
45
- export const typeRanges = (bytes, layout) => {
46
+ export const typeRanges = (bytes, layout, issues) => {
46
47
  const typeTable = layout.table(2);
47
48
  const ranges = [];
48
49
  for (let row = 1; row <= (typeTable?.rowCount ?? 0); row += 1)
49
- ranges.push(readTypeRange(bytes, layout, row));
50
+ ranges.push(readTypeRange(bytes, layout, row, issues));
50
51
  return ranges;
51
52
  };
52
53
  export const declaringType = (ranges, table, row) => {
@@ -99,44 +100,46 @@ export const parseTypes = (bytes, layout, ranges) => {
99
100
  const items = [];
100
101
  const issues = [];
101
102
  for (let row = 1; row <= (typeTable?.rowCount ?? 0); row += 1) {
102
- const cursor = metadataRowCursor(bytes, layout, 2, row);
103
- const flags = cursor.readUInt32();
104
- const name = readMetadataString(bytes, layout, cursor.readIndex(layout.stringIndexSize), layout.strings.size);
105
- const namespace = readMetadataString(bytes, layout, cursor.readIndex(layout.stringIndexSize), layout.strings.size);
106
- const extendsOffset = cursor.offset;
107
- const extendsRaw = cursor.readIndex(layout.codedIndexSize("TypeDefOrRef"));
108
- const fieldStart = cursor.readIndex(layout.tableIndexSize(4));
109
- const methodStart = cursor.readIndex(layout.tableIndexSize(6));
110
- const nextRange = ranges[row] ?? null;
111
- const fieldRange = rowRange(fields, fieldStart, nextRange?.fieldStart ?? 0);
112
- const methodRange = rowRange(methods, methodStart, nextRange?.methodStart ?? 0);
113
- const extendsReason = metadataCodedTokenInvalidReason(extendsRaw, 2, [2, 1, 27], layout.rowCounts);
114
- if (extendsReason !== null)
115
- issues.push({
116
- code: "invalid-row",
117
- scope: `metadata.TypeDef:${metadataToken(2, row)}`,
118
- offset: extendsOffset,
119
- detail: `TypeDef Extends coded index 0x${extendsRaw.toString(16)} is invalid: ${extendsReason}`,
103
+ readManagedValue(() => {
104
+ const cursor = metadataRowCursor(bytes, layout, 2, row);
105
+ const flags = cursor.readUInt32();
106
+ const name = readMetadataString(bytes, layout, cursor.readIndex(layout.stringIndexSize), layout.strings.size);
107
+ const namespace = readMetadataString(bytes, layout, cursor.readIndex(layout.stringIndexSize), layout.strings.size);
108
+ const extendsOffset = cursor.offset;
109
+ const extendsRaw = cursor.readIndex(layout.codedIndexSize("TypeDefOrRef"));
110
+ const fieldStart = cursor.readIndex(layout.tableIndexSize(4));
111
+ const methodStart = cursor.readIndex(layout.tableIndexSize(6));
112
+ const nextRange = ranges[row] ?? null;
113
+ const fieldRange = rowRange(fields, fieldStart, nextRange?.fieldStart ?? 0);
114
+ const methodRange = rowRange(methods, methodStart, nextRange?.methodStart ?? 0);
115
+ const extendsReason = metadataCodedTokenInvalidReason(extendsRaw, 2, [2, 1, 27], layout.rowCounts);
116
+ if (extendsReason !== null)
117
+ issues.push({
118
+ code: "invalid-row",
119
+ scope: `metadata.TypeDef:${metadataToken(2, row)}`,
120
+ offset: extendsOffset,
121
+ detail: `TypeDef Extends coded index 0x${extendsRaw.toString(16)} is invalid: ${extendsReason}`,
122
+ });
123
+ items.push({
124
+ token: metadataToken(2, row),
125
+ row_offset: cursor.start,
126
+ namespace,
127
+ name,
128
+ full_name: fullName(namespace, name),
129
+ flags,
130
+ extends_token: metadataCodedToken(extendsRaw, 2, [2, 1, 27], layout.rowCounts),
131
+ field_list: {
132
+ first_row: fieldRange.first,
133
+ last_row: fieldRange.last,
134
+ count: fieldRange.count,
135
+ },
136
+ method_list: {
137
+ first_row: methodRange.first,
138
+ last_row: methodRange.last,
139
+ count: methodRange.count,
140
+ },
120
141
  });
121
- items.push({
122
- token: metadataToken(2, row),
123
- row_offset: cursor.start,
124
- namespace,
125
- name,
126
- full_name: fullName(namespace, name),
127
- flags,
128
- extends_token: metadataCodedToken(extendsRaw, 2, [2, 1, 27], layout.rowCounts),
129
- field_list: {
130
- first_row: fieldRange.first,
131
- last_row: fieldRange.last,
132
- count: fieldRange.count,
133
- },
134
- method_list: {
135
- first_row: methodRange.first,
136
- last_row: methodRange.last,
137
- count: methodRange.count,
138
- },
139
- });
142
+ }, issues);
140
143
  }
141
144
  return { types: items, issues };
142
145
  };
@@ -1,30 +1,34 @@
1
1
  import { createDeclaringTypeLookup, signature, } from "./ManagedMemberInspectorCore.js";
2
2
  import { metadataToken, metadataRowCursor, metadataCodedToken, metadataCodedTokenInvalidReason, readMetadataBlob, readMetadataString, } from "./ManagedMetadataHeaps.js";
3
+ import { readManagedValue } from "./ManagedReaderFailure.js";
3
4
  import { methodBody } from "./ManagedMethodBodyReader.js";
4
5
  export const parseFields = (bytes, layout, ranges) => {
5
6
  const fields = [];
6
7
  const core = new Map();
8
+ const issues = [];
7
9
  const table = layout.table(4);
8
10
  const declaringType = createDeclaringTypeLookup(ranges, "field");
9
11
  for (let row = 1; row <= (table?.rowCount ?? 0); row += 1) {
10
- const cursor = metadataRowCursor(bytes, layout, 4, row);
11
- const flags = cursor.readUInt16();
12
- const name = readMetadataString(bytes, layout, cursor.readIndex(layout.stringIndexSize), layout.strings.size);
13
- const sig = readMetadataBlob(bytes, layout, cursor.readIndex(layout.blobIndexSize), layout.blob.size);
14
- const declared = declaringType(row);
15
- const token = metadataToken(4, row);
16
- fields.push({
17
- token,
18
- row_offset: cursor.start,
19
- declaring_type_token: declared?.token ?? null,
20
- declaring_type: declared?.fullName ?? null,
21
- name,
22
- flags,
23
- signature: signature(sig),
24
- });
25
- core.set(token, { token, name });
12
+ readManagedValue(() => {
13
+ const cursor = metadataRowCursor(bytes, layout, 4, row);
14
+ const flags = cursor.readUInt16();
15
+ const name = readMetadataString(bytes, layout, cursor.readIndex(layout.stringIndexSize), layout.strings.size);
16
+ const sig = readMetadataBlob(bytes, layout, cursor.readIndex(layout.blobIndexSize), layout.blob.size);
17
+ const declared = declaringType(row);
18
+ const token = metadataToken(4, row);
19
+ fields.push({
20
+ token,
21
+ row_offset: cursor.start,
22
+ declaring_type_token: declared?.token ?? null,
23
+ declaring_type: declared?.fullName ?? null,
24
+ name,
25
+ flags,
26
+ signature: signature(sig),
27
+ });
28
+ core.set(token, { token, name });
29
+ }, issues);
26
30
  }
27
- return { fields, core };
31
+ return { fields, core, issues };
28
32
  };
29
33
  export const parseMemberRefs = (bytes, layout) => {
30
34
  const refs = [];
@@ -32,62 +36,71 @@ export const parseMemberRefs = (bytes, layout) => {
32
36
  const issues = [];
33
37
  const table = layout.table(10);
34
38
  for (let row = 1; row <= (table?.rowCount ?? 0); row += 1) {
35
- const cursor = metadataRowCursor(bytes, layout, 10, row);
36
- const parentRaw = cursor.readIndex(layout.codedIndexSize("MemberRefParent"));
37
- const name = readMetadataString(bytes, layout, cursor.readIndex(layout.stringIndexSize), layout.strings.size);
38
- const sig = readMetadataBlob(bytes, layout, cursor.readIndex(layout.blobIndexSize), layout.blob.size);
39
- const token = metadataToken(10, row);
40
- const parentReason = metadataCodedTokenInvalidReason(parentRaw, 3, [2, 1, 26, 6, 27], layout.rowCounts);
41
- if (parentReason !== null || parentRaw === 0)
42
- issues.push({
43
- code: "invalid-row",
44
- scope: `metadata.MemberRef:${token}`,
45
- offset: cursor.start,
46
- detail: parentReason === null
47
- ? "MemberRef parent coded index 0x0 is null, but the Class column must reference a row"
48
- : `MemberRef parent coded index 0x${parentRaw.toString(16)} is invalid: ${parentReason}`,
39
+ readManagedValue(() => {
40
+ const cursor = metadataRowCursor(bytes, layout, 10, row);
41
+ const parentRaw = cursor.readIndex(layout.codedIndexSize("MemberRefParent"));
42
+ const name = readMetadataString(bytes, layout, cursor.readIndex(layout.stringIndexSize), layout.strings.size);
43
+ const sig = readMetadataBlob(bytes, layout, cursor.readIndex(layout.blobIndexSize), layout.blob.size);
44
+ const token = metadataToken(10, row);
45
+ const parentReason = metadataCodedTokenInvalidReason(parentRaw, 3, [2, 1, 26, 6, 27], layout.rowCounts);
46
+ if (parentReason !== null || parentRaw === 0)
47
+ issues.push({
48
+ code: "invalid-row",
49
+ scope: `metadata.MemberRef:${token}`,
50
+ offset: cursor.start,
51
+ detail: parentReason === null
52
+ ? "MemberRef parent coded index 0x0 is null, but the Class column must reference a row"
53
+ : `MemberRef parent coded index 0x${parentRaw.toString(16)} is invalid: ${parentReason}`,
54
+ });
55
+ refs.push({
56
+ token,
57
+ row_offset: cursor.start,
58
+ parent_token: metadataCodedToken(parentRaw, 3, [2, 1, 26, 6, 27], layout.rowCounts),
59
+ name,
60
+ signature: signature(sig),
49
61
  });
50
- refs.push({
51
- token,
52
- row_offset: cursor.start,
53
- parent_token: metadataCodedToken(parentRaw, 3, [2, 1, 26, 6, 27], layout.rowCounts),
54
- name,
55
- signature: signature(sig),
56
- });
57
- core.set(token, { token, name });
62
+ core.set(token, { token, name });
63
+ }, issues);
58
64
  }
59
65
  return { refs, core, issues };
60
66
  };
61
67
  export const parseMethods = ({ bytes, layout, pe, ranges, }) => {
62
68
  const methods = [];
63
69
  const core = new Map();
70
+ const issues = [];
64
71
  const table = layout.table(6);
65
72
  const declaringType = createDeclaringTypeLookup(ranges, "method");
66
73
  for (let row = 1; row <= (table?.rowCount ?? 0); row += 1) {
67
- const cursor = metadataRowCursor(bytes, layout, 6, row);
68
- const rva = cursor.readUInt32();
69
- const implFlags = cursor.readUInt16();
70
- const flags = cursor.readUInt16();
71
- const name = readMetadataString(bytes, layout, cursor.readIndex(layout.stringIndexSize), layout.strings.size);
72
- const sig = readMetadataBlob(bytes, layout, cursor.readIndex(layout.blobIndexSize), layout.blob.size);
73
- cursor.readIndex(layout.tableIndexSize(8));
74
- const declared = declaringType(row);
75
- const token = metadataToken(6, row);
76
- methods.push({
77
- token,
78
- row_offset: cursor.start,
79
- declaring_type_token: declared?.token ?? null,
80
- declaring_type: declared?.fullName ?? null,
81
- name,
82
- rva,
83
- impl_flags: implFlags,
84
- flags,
85
- signature: signature(sig),
86
- body: methodBody(bytes, pe, rva, { implFlags, flags }),
87
- });
88
- core.set(token, { token, name, declaringType: declared?.fullName ?? null });
74
+ readManagedValue(() => {
75
+ const cursor = metadataRowCursor(bytes, layout, 6, row);
76
+ const rva = cursor.readUInt32();
77
+ const implFlags = cursor.readUInt16();
78
+ const flags = cursor.readUInt16();
79
+ const name = readMetadataString(bytes, layout, cursor.readIndex(layout.stringIndexSize), layout.strings.size);
80
+ const sig = readMetadataBlob(bytes, layout, cursor.readIndex(layout.blobIndexSize), layout.blob.size);
81
+ cursor.readIndex(layout.tableIndexSize(8));
82
+ const declared = declaringType(row);
83
+ const token = metadataToken(6, row);
84
+ methods.push({
85
+ token,
86
+ row_offset: cursor.start,
87
+ declaring_type_token: declared?.token ?? null,
88
+ declaring_type: declared?.fullName ?? null,
89
+ name,
90
+ rva,
91
+ impl_flags: implFlags,
92
+ flags,
93
+ signature: signature(sig),
94
+ body: methodBody(bytes, pe, rva, { implFlags, flags }),
95
+ });
96
+ core.set(token, {
97
+ token,
98
+ name,
99
+ declaringType: declared?.fullName ?? null,
100
+ });
101
+ }, issues);
89
102
  }
90
- return { methods, core };
103
+ return { methods, core, issues };
91
104
  };
92
105
  const targetKind = (token) => token.startsWith("0x06")
93
106
  ? "method-def"