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,64 +1,14 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import canonicalize from "canonicalize";
3
- import { z } from "zod";
4
- import { webPageInspectionSchema, } from "./browserObservation.js";
5
- import { webMcpDiscoverySchema, } from "./webMcpDiscovery.js";
6
- /** One normalized passive page snapshot accepted by capture comparison. */
7
- export const captureSnapshotSchema = z.object({
8
- inspection: webPageInspectionSchema,
9
- webmcp: webMcpDiscoverySchema.nullable().default(null),
10
- });
11
- /** Input for deterministic comparison of two normalized web captures. */
12
- export const compareWebCapturesInputSchema = z.object({
13
- before: captureSnapshotSchema,
14
- after: captureSnapshotSchema,
15
- max_changes: z.number().int().min(1).max(20_000).default(2_000),
16
- });
17
- const changeSchema = z.object({
18
- identity: z.string(),
19
- change: z.enum(["added", "removed", "modified"]),
20
- });
21
- const dimensionSchema = z.object({
22
- status: z.enum(["changed", "unchanged", "unknown"]),
23
- total_changes: z.number().int().min(0),
24
- changes: z.array(changeSchema),
25
- omitted_changes: z.number().int().min(0),
26
- reason: z.string().nullable(),
27
- });
28
- const legacyUnknownDimension = {
29
- status: "unknown",
30
- total_changes: 0,
31
- changes: [],
32
- omitted_changes: 0,
33
- reason: "Dimension was not recorded by this version 1 capture diff.",
34
- };
35
- /** Completeness-aware changes across stable browser evidence dimensions. */
36
- export const webCaptureDiffSchema = z.object({
37
- schema_version: z.literal(1),
38
- overall_status: z.enum(["changed", "unchanged", "unknown"]),
39
- before_target: z.object({ target_id: z.string(), url: z.string() }),
40
- after_target: z.object({ target_id: z.string(), url: z.string() }),
41
- dimensions: z.object({
42
- dom_structure: dimensionSchema,
43
- scripts: dimensionSchema,
44
- resources: dimensionSchema,
45
- network: dimensionSchema,
46
- metadata: dimensionSchema,
47
- webmcp: dimensionSchema,
48
- accessibility: dimensionSchema.default(legacyUnknownDimension),
49
- storage: dimensionSchema.default(legacyUnknownDimension),
50
- }),
51
- limitations: z.array(z.string()),
52
- });
3
+ import { webCaptureDiffSchema, } from "./webCaptureDiffSchemas.js";
4
+ export { captureSnapshotSchema, compareWebCapturesInputSchema, webCaptureDiffSchema, } from "./webCaptureDiffSchemas.js";
53
5
  /** Compare normalized observations without treating incomplete absence as proof. */
54
6
  export const compareWebCaptures = (input) => {
55
- const remaining = { value: input.max_changes };
56
7
  const before = input.before.inspection;
57
8
  const after = input.after.inspection;
58
- const dimensions = compareWebCaptureDimensions(input, remaining);
9
+ const dimensions = compareWebCaptureDimensions(input);
59
10
  const statuses = Object.values(dimensions).map(({ status }) => status);
60
11
  return webCaptureDiffSchema.parse({
61
- schema_version: 1,
62
12
  overall_status: statuses.includes("changed")
63
13
  ? "changed"
64
14
  : statuses.includes("unknown")
@@ -96,38 +46,49 @@ const compareIdentities = (before, after) => {
96
46
  return changes.sort((left, right) => left.identity.localeCompare(right.identity) ||
97
47
  left.change.localeCompare(right.change));
98
48
  };
99
- const compareDimension = (remaining) => (before, after, complete, reason) => {
49
+ const compareDimension = (before, after, complete, reason) => {
100
50
  const all = compareIdentities(before, after);
101
- const retained = all.slice(0, remaining.value);
102
- remaining.value -= retained.length;
103
- return {
104
- status: all.length > 0 ? "changed" : complete ? "unchanged" : "unknown",
105
- total_changes: all.length,
106
- changes: retained,
107
- omitted_changes: all.length - retained.length,
108
- reason: all.length === 0 && !complete ? reason : null,
109
- };
51
+ if (all.length > 0)
52
+ return {
53
+ status: "changed",
54
+ total_changes: all.length,
55
+ changes: all,
56
+ reason: null,
57
+ };
58
+ return complete
59
+ ? {
60
+ status: "unchanged",
61
+ total_changes: 0,
62
+ changes: [],
63
+ reason: null,
64
+ }
65
+ : {
66
+ status: "unknown",
67
+ total_changes: 0,
68
+ changes: [],
69
+ reason,
70
+ };
110
71
  };
111
- const accessibilityDimension = (before, after, remaining) => {
72
+ const accessibilityDimension = (before, after) => {
112
73
  const beforeAccess = accessibilityComparable(before);
113
74
  const afterAccess = accessibilityComparable(after);
114
75
  const textComparable = beforeAccess.text && afterAccess.text;
115
76
  const nodesComparable = beforeAccess.nodes && afterAccess.nodes;
116
- return compareDimension(remaining)(singleton("accessibility_tree", digest(accessibilityProjection(before.accessibility, textComparable, nodesComparable))), singleton("accessibility_tree", digest(accessibilityProjection(after.accessibility, textComparable, nodesComparable))), beforeAccess.complete && afterAccess.complete, "Accessibility tree or text capture was incomplete in at least one observation.");
77
+ return compareDimension(singleton("accessibility_tree", digest(accessibilityProjection(before.accessibility, textComparable, nodesComparable))), singleton("accessibility_tree", digest(accessibilityProjection(after.accessibility, textComparable, nodesComparable))), beforeAccess.complete && afterAccess.complete, "Accessibility tree or text capture was incomplete in at least one observation.");
117
78
  };
118
- const storageDimension = (before, after, remaining) => {
79
+ const storageDimension = (before, after) => {
119
80
  const keysComplete = storageKeysComparable(before) && storageKeysComparable(after);
120
81
  const usageComplete = before.storage.usage_bytes !== null &&
121
82
  after.storage.usage_bytes !== null &&
122
83
  before.storage.quota_bytes !== null &&
123
84
  after.storage.quota_bytes !== null;
124
85
  const comparableFingerprints = storageFingerprintIdentities(before.storage, after.storage);
125
- return compareDimension(remaining)(storageMap(before.storage, keysComplete, usageComplete, comparableFingerprints), storageMap(after.storage, keysComplete, usageComplete, comparableFingerprints), storageComparable(before, after, keysComplete, usageComplete), "Storage fingerprints, inventories, usage, or quota were unavailable or truncated in at least one observation.");
86
+ return compareDimension(storageMap(before.storage, keysComplete, usageComplete, comparableFingerprints), storageMap(after.storage, keysComplete, usageComplete, comparableFingerprints), storageComparable(before, after, keysComplete, usageComplete), "Storage fingerprints, inventories, usage, or quota were unavailable or truncated in at least one observation.");
126
87
  };
127
- const compareWebCaptureDimensions = (input, remaining) => {
88
+ const compareWebCaptureDimensions = (input) => {
128
89
  const before = input.before.inspection;
129
90
  const after = input.after.inspection;
130
- const dimension = compareDimension(remaining);
91
+ const dimension = compareDimension;
131
92
  return {
132
93
  dom_structure: dimension(singleton("document", digest(domProjection(before))), singleton("document", digest(domProjection(after))), sectionsComplete(before, ["frames", "dom"]) &&
133
94
  sectionsComplete(after, ["frames", "dom"]), "DOM or frame capture was incomplete in at least one observation."),
@@ -140,8 +101,8 @@ const compareWebCaptureDimensions = (input, remaining) => {
140
101
  metadata: dimension(singleton("metadata", digest(metadataProjection(before))), singleton("metadata", digest(metadataProjection(after))), sectionsComplete(before, ["metadata"]) &&
141
102
  sectionsComplete(after, ["metadata"]), "Safe metadata capture was incomplete in at least one observation."),
142
103
  webmcp: dimension(webMcpMap(input.before.webmcp), webMcpMap(input.after.webmcp), webMcpComplete(input.before.webmcp) && webMcpComplete(input.after.webmcp), "WebMCP discovery was unavailable or incomplete in at least one capture."),
143
- accessibility: accessibilityDimension(before, after, remaining),
144
- storage: storageDimension(before, after, remaining),
104
+ accessibility: accessibilityDimension(before, after),
105
+ storage: storageDimension(before, after),
145
106
  };
146
107
  };
147
108
  const keyed = (values, identity) => new Map(values.map((value) => [identity(value), digest(value)]));
@@ -220,28 +181,30 @@ const digest = (value) => {
220
181
  };
221
182
  const accessibilityComparable = (inspection) => {
222
183
  const text = inspection.accessibility.text_capture.status === "included" &&
223
- inspection.accessibility.text_capture.excluded_fields === 0 &&
224
- inspection.accessibility.text_capture.truncated_fields === 0;
184
+ inspection.accessibility.text_capture.excluded_fields === 0;
225
185
  const nodes = inspection.accessibility.total_nodes ===
226
186
  inspection.accessibility.nodes.length;
227
187
  const complete = text && nodes && sectionsComplete(inspection, ["accessibility"]);
228
188
  return { text, nodes, complete };
229
189
  };
230
190
  const accessibilityProjection = (accessibility, includeText, includeNodes) => {
231
- const result = {
232
- total_nodes: accessibility.total_nodes,
233
- };
234
191
  if (!includeNodes)
235
- return result;
192
+ return { total_nodes: accessibility.total_nodes };
236
193
  const nodeIndexes = new Map(accessibility.nodes.map((node, index) => [node.node_id, index]));
237
- result.nodes = accessibility.nodes.map((node) => ({
238
- parent_index: node.parent_id === null ? null : (nodeIndexes.get(node.parent_id) ?? -1),
239
- role: node.role,
240
- ignored: node.ignored,
241
- states: node.states,
242
- ...(includeText ? { name: node.name, description: node.description } : {}),
243
- }));
244
- return result;
194
+ return {
195
+ total_nodes: accessibility.total_nodes,
196
+ nodes: accessibility.nodes.map((node) => ({
197
+ parent_index: node.parent_id === null
198
+ ? null
199
+ : (nodeIndexes.get(node.parent_id) ?? -1),
200
+ role: node.role,
201
+ ignored: node.ignored,
202
+ states: node.states,
203
+ ...(includeText
204
+ ? { name: node.name, description: node.description }
205
+ : {}),
206
+ })),
207
+ };
245
208
  };
246
209
  const storageKeysComparable = (inspection) => sectionsComplete(inspection, ["storage_keys"]);
247
210
  const storageComparable = (before, after, keysComplete, usageComplete) => keysComplete &&
@@ -0,0 +1,86 @@
1
+ import { z } from "zod";
2
+ import { webPageInspectionSchema } from "./browserObservation.js";
3
+ import { webMcpDiscoverySchema } from "./webMcpDiscovery.js";
4
+ /** One normalized passive page snapshot accepted by capture comparison. */
5
+ export const captureSnapshotSchema = z.object({
6
+ inspection: webPageInspectionSchema,
7
+ webmcp: webMcpDiscoverySchema.nullable().default(null),
8
+ });
9
+ /** Input for deterministic comparison of two normalized web captures. */
10
+ export const compareWebCapturesInputSchema = z.strictObject({
11
+ before: captureSnapshotSchema,
12
+ after: captureSnapshotSchema,
13
+ });
14
+ const changeSchema = z.object({
15
+ identity: z.string(),
16
+ change: z.enum(["added", "removed", "modified"]),
17
+ });
18
+ const emptyDimensionShape = {
19
+ total_changes: z.literal(0),
20
+ changes: z.tuple([]),
21
+ };
22
+ const dimensionSchema = z.union([
23
+ z
24
+ .object({
25
+ status: z.literal("changed"),
26
+ total_changes: z.number().int().min(1),
27
+ changes: z.array(changeSchema),
28
+ reason: z.null(),
29
+ })
30
+ .superRefine((dimension, context) => {
31
+ if (dimension.changes.length !== dimension.total_changes)
32
+ context.addIssue({
33
+ code: "custom",
34
+ message: "Inline changes must equal total changes",
35
+ path: ["total_changes"],
36
+ });
37
+ }),
38
+ z.object({
39
+ ...emptyDimensionShape,
40
+ status: z.literal("unchanged"),
41
+ reason: z.null(),
42
+ }),
43
+ z.object({
44
+ ...emptyDimensionShape,
45
+ status: z.literal("unknown"),
46
+ reason: z.string(),
47
+ }),
48
+ ]);
49
+ const legacyUnknownDimension = {
50
+ status: "unknown",
51
+ total_changes: 0,
52
+ changes: [],
53
+ reason: "Dimension was not recorded by this version 1 capture diff.",
54
+ };
55
+ /** Completeness-aware changes across stable browser evidence dimensions. */
56
+ export const webCaptureDiffSchema = z
57
+ .object({
58
+ overall_status: z.enum(["changed", "unchanged", "unknown"]),
59
+ before_target: z.object({ target_id: z.string(), url: z.string() }),
60
+ after_target: z.object({ target_id: z.string(), url: z.string() }),
61
+ dimensions: z.object({
62
+ dom_structure: dimensionSchema,
63
+ scripts: dimensionSchema,
64
+ resources: dimensionSchema,
65
+ network: dimensionSchema,
66
+ metadata: dimensionSchema,
67
+ webmcp: dimensionSchema,
68
+ accessibility: dimensionSchema.default(legacyUnknownDimension),
69
+ storage: dimensionSchema.default(legacyUnknownDimension),
70
+ }),
71
+ limitations: z.array(z.string()),
72
+ })
73
+ .superRefine((comparison, context) => {
74
+ const statuses = Object.values(comparison.dimensions).map(({ status }) => status);
75
+ const expected = statuses.includes("changed")
76
+ ? "changed"
77
+ : statuses.includes("unknown")
78
+ ? "unknown"
79
+ : "unchanged";
80
+ if (comparison.overall_status !== expected)
81
+ context.addIssue({
82
+ code: "custom",
83
+ message: "Overall status must summarize dimension statuses",
84
+ path: ["overall_status"],
85
+ });
86
+ });
@@ -3,10 +3,9 @@ import { z } from "zod";
3
3
  /** Self-verifying text artifact used by web-source analysis boundaries. */
4
4
  export const webTextArtifactSchema = z
5
5
  .object({
6
- uri: z.string().regex(/^rea:\/\/web-content\/sha256\/[a-f0-9]{64}$/u),
7
6
  sha256: z.string().regex(/^[a-f0-9]{64}$/u),
8
7
  bytes: z.number().int().min(0),
9
- media_type: z.string().min(1).max(256),
8
+ media_type: z.string().min(1),
10
9
  charset: z.literal("utf-8"),
11
10
  text: z.string(),
12
11
  })
@@ -25,18 +24,11 @@ export const webTextArtifactSchema = z
25
24
  path: ["sha256"],
26
25
  message: "Digest mismatch",
27
26
  });
28
- if (artifact.uri !== webContentUri(digest))
29
- context.addIssue({
30
- code: "custom",
31
- path: ["uri"],
32
- message: "Content URI mismatch",
33
- });
34
27
  });
35
28
  /** Build an immutable content-addressed UTF-8 text artifact. */
36
29
  export const createWebTextArtifact = (text, mediaType) => {
37
30
  const sha256 = createHash("sha256").update(text).digest("hex");
38
31
  return {
39
- uri: webContentUri(sha256),
40
32
  sha256,
41
33
  bytes: Buffer.byteLength(text),
42
34
  media_type: mediaType,
@@ -44,4 +36,3 @@ export const createWebTextArtifact = (text, mediaType) => {
44
36
  text,
45
37
  };
46
38
  };
47
- const webContentUri = (sha256) => `rea://web-content/sha256/${sha256}`;
@@ -3,21 +3,11 @@ import { browserCompletenessSchema } from "./browserCompleteness.js";
3
3
  import { browserAllowedOriginsSchema, browserEndpointSchema, } from "./browserObservation.js";
4
4
  import { jsonShapeSchema } from "./jsonShape.js";
5
5
  /** Input for passive discovery of page-registered WebMCP tools. */
6
- export const discoverWebMcpToolsInputSchema = z.object({
6
+ export const discoverWebMcpToolsInputSchema = z.strictObject({
7
7
  cdp_endpoint: browserEndpointSchema,
8
8
  allowed_origins: browserAllowedOriginsSchema,
9
- target_id: z.string().trim().min(1).max(256),
10
- approved: z.literal(true),
11
- observation_ms: z.number().int().min(0).max(10_000).default(100),
12
- max_tools: z.number().int().min(1).max(5_000).default(500),
13
- max_schema_bytes: z
14
- .number()
15
- .int()
16
- .min(1)
17
- .max(1_024 * 1_024)
18
- .default(256 * 1_024),
19
- max_schema_nodes: z.number().int().min(1).max(100_000).default(5_000),
20
- max_schema_depth: z.number().int().min(1).max(100).default(20),
9
+ target_id: z.string().trim().min(1),
10
+ observation_ms: z.number().int().min(0).default(100),
21
11
  });
22
12
  const browserVersionSchema = z.object({
23
13
  product: z.string(),
@@ -51,7 +41,6 @@ const webMcpToolSchema = z.object({
51
41
  });
52
42
  /** Passive WebMCP inventory; it intentionally has no invocation surface. */
53
43
  export const webMcpDiscoverySchema = z.object({
54
- schema_version: z.literal(1),
55
44
  browser: browserVersionSchema,
56
45
  target: z.object({
57
46
  target_id: z.string(),
@@ -2,15 +2,13 @@ import { createHash } from "node:crypto";
2
2
  import { z } from "zod";
3
3
  import { browserCompletenessSchema } from "./browserCompleteness.js";
4
4
  import { browserAllowedOriginsSchema, browserEndpointSchema, } from "./browserObservation.js";
5
- const MAX_SCREENSHOT_BYTES = 8 * 1_024 * 1_024;
6
5
  /** Self-verifying inline PNG artifact for CLI/MCP parity. */
7
6
  export const webScreenshotArtifactSchema = z
8
7
  .object({
9
- uri: z.string().regex(/^rea:\/\/web-screenshot\/sha256\/[a-f0-9]{64}$/u),
10
8
  sha256: z.string().regex(/^[a-f0-9]{64}$/u),
11
- bytes: z.number().int().min(1).max(MAX_SCREENSHOT_BYTES),
9
+ bytes: z.number().int().min(1),
12
10
  media_type: z.literal("image/png"),
13
- data_base64: z.string().max(Math.ceil((MAX_SCREENSHOT_BYTES * 4) / 3) + 4),
11
+ data_base64: z.string(),
14
12
  })
15
13
  .superRefine((artifact, context) => {
16
14
  const bytes = decodeCanonicalBase64(artifact.data_base64);
@@ -19,27 +17,17 @@ export const webScreenshotArtifactSchema = z
19
17
  return;
20
18
  }
21
19
  const sha256 = createHash("sha256").update(bytes).digest("hex");
22
- if (bytes.byteLength !== artifact.bytes ||
23
- sha256 !== artifact.sha256 ||
24
- artifact.uri !== `rea://web-screenshot/sha256/${sha256}`)
20
+ if (bytes.byteLength !== artifact.bytes || sha256 !== artifact.sha256)
25
21
  context.addIssue({
26
22
  code: "custom",
27
23
  message: "Screenshot artifact digest or size mismatch",
28
24
  });
29
25
  });
30
26
  /** Input for one read-only visible-viewport screenshot. */
31
- export const captureWebScreenshotInputSchema = z.object({
27
+ export const captureWebScreenshotInputSchema = z.strictObject({
32
28
  cdp_endpoint: browserEndpointSchema,
33
29
  allowed_origins: browserAllowedOriginsSchema,
34
- target_id: z.string().trim().min(1).max(256),
35
- approved: z.literal(true),
36
- screenshot_approved: z.literal(true),
37
- maximum_image_bytes: z
38
- .number()
39
- .int()
40
- .min(1)
41
- .max(MAX_SCREENSHOT_BYTES)
42
- .default(4 * 1_024 * 1_024),
30
+ target_id: z.string().trim().min(1),
43
31
  });
44
32
  const browserVersionSchema = z.object({
45
33
  product: z.string(),
@@ -48,9 +36,8 @@ const browserVersionSchema = z.object({
48
36
  user_agent: z.string(),
49
37
  js_version: z.string(),
50
38
  });
51
- /** Bounded screenshot observation with embedded immutable artifact bytes. */
39
+ /** Screenshot observation with embedded immutable artifact bytes. */
52
40
  export const webScreenshotSchema = z.object({
53
- schema_version: z.literal(1),
54
41
  browser: browserVersionSchema,
55
42
  target: z.object({
56
43
  target_id: z.string(),
@@ -66,17 +53,14 @@ export const webScreenshotSchema = z.object({
66
53
  completeness: browserCompletenessSchema,
67
54
  limitations: z.array(z.string()),
68
55
  });
69
- /** Input for bounded local pixel comparison of two screenshot artifacts. */
70
- export const compareWebScreenshotsInputSchema = z.object({
56
+ /** Input for local pixel comparison of two screenshot artifacts. */
57
+ export const compareWebScreenshotsInputSchema = z.strictObject({
71
58
  before: webScreenshotArtifactSchema,
72
59
  after: webScreenshotArtifactSchema,
73
60
  channel_threshold: z.number().int().min(0).max(255).default(0),
74
- maximum_pixels: z.number().int().min(1).max(32_000_000).default(16_000_000),
75
61
  });
76
62
  /** Value-only visual difference metrics; no OCR or image mutation. */
77
- export const webScreenshotDiffSchema = z.object({
78
- schema_version: z.literal(1),
79
- status: z.enum(["identical", "different", "dimension_mismatch"]),
63
+ const webScreenshotDiffContextShape = {
80
64
  before: z.object({
81
65
  width: z.number().int().min(1),
82
66
  height: z.number().int().min(1),
@@ -86,18 +70,59 @@ export const webScreenshotDiffSchema = z.object({
86
70
  height: z.number().int().min(1),
87
71
  }),
88
72
  channel_threshold: z.number().int().min(0).max(255),
89
- compared_pixels: z.number().int().min(0),
90
- changed_pixels: z.number().int().min(0).nullable(),
91
- changed_ratio: z.number().min(0).max(1).nullable(),
92
- maximum_channel_delta: z.number().int().min(0).max(255).nullable(),
93
- mean_absolute_channel_delta: z.number().min(0).max(255).nullable(),
94
73
  limitations: z.array(z.string()),
74
+ };
75
+ export const webScreenshotDiffSchema = z
76
+ .discriminatedUnion("status", [
77
+ z.object({
78
+ ...webScreenshotDiffContextShape,
79
+ status: z.literal("identical"),
80
+ compared_pixels: z.number().int().positive(),
81
+ changed_pixels: z.literal(0),
82
+ changed_ratio: z.literal(0),
83
+ maximum_channel_delta: z.number().int().min(0).max(255),
84
+ mean_absolute_channel_delta: z.number().min(0).max(255),
85
+ }),
86
+ z.object({
87
+ ...webScreenshotDiffContextShape,
88
+ status: z.literal("different"),
89
+ compared_pixels: z.number().int().positive(),
90
+ changed_pixels: z.number().int().positive(),
91
+ changed_ratio: z.number().positive().max(1),
92
+ maximum_channel_delta: z.number().int().positive().max(255),
93
+ mean_absolute_channel_delta: z.number().positive().max(255),
94
+ }),
95
+ z.object({
96
+ ...webScreenshotDiffContextShape,
97
+ status: z.literal("dimension_mismatch"),
98
+ compared_pixels: z.literal(0),
99
+ changed_pixels: z.null(),
100
+ changed_ratio: z.null(),
101
+ maximum_channel_delta: z.null(),
102
+ mean_absolute_channel_delta: z.null(),
103
+ }),
104
+ ])
105
+ .superRefine((diff, context) => {
106
+ const sameDimensions = diff.before.width === diff.after.width &&
107
+ diff.before.height === diff.after.height;
108
+ if (sameDimensions !== (diff.status !== "dimension_mismatch"))
109
+ context.addIssue({
110
+ code: "custom",
111
+ path: ["status"],
112
+ message: "Screenshot comparison status must match viewport dimensions",
113
+ });
114
+ if (diff.status !== "dimension_mismatch" &&
115
+ diff.compared_pixels !== diff.before.width * diff.before.height)
116
+ context.addIssue({
117
+ code: "custom",
118
+ path: ["compared_pixels"],
119
+ message: "Compared pixel count must match the shared dimensions",
120
+ });
95
121
  });
96
- /** Create a content-addressed PNG artifact from already bounded bytes. */
122
+ /** Create a content-addressed PNG artifact from captured bytes. */
97
123
  export const createWebScreenshotArtifact = (bytes) => {
98
124
  const sha256 = createHash("sha256").update(bytes).digest("hex");
99
125
  return webScreenshotArtifactSchema.parse({
100
- uri: `rea://web-screenshot/sha256/${sha256}`,
101
126
  sha256,
102
127
  bytes: bytes.byteLength,
103
128
  media_type: "image/png",
@@ -106,9 +131,8 @@ export const createWebScreenshotArtifact = (bytes) => {
106
131
  };
107
132
  /** Strict canonical base64 decoder used before digest validation. */
108
133
  export const decodeCanonicalBase64 = (value) => {
109
- if (value.length === 0 || value.length % 4 !== 0 || !BASE64.test(value))
134
+ if (value.length === 0 || value.length % 4 !== 0)
110
135
  return undefined;
111
136
  const decoded = Buffer.from(value, "base64");
112
137
  return decoded.toString("base64") === value ? decoded : undefined;
113
138
  };
114
- const BASE64 = /^(?:[A-Za-z\d+/]{4})*(?:[A-Za-z\d+/]{2}==|[A-Za-z\d+/]{3}=)?$/u;
@@ -1,3 +1,10 @@
1
+ /** Recognize local-header, empty-archive, or split-archive ZIP signatures, not archive validity. */
2
+ export const hasZipSignature = (bytes) => bytes.length >= 4 &&
3
+ bytes[0] === 0x50 &&
4
+ bytes[1] === 0x4b &&
5
+ ((bytes[2] === 0x03 && bytes[3] === 0x04) ||
6
+ (bytes[2] === 0x05 && bytes[3] === 0x06) ||
7
+ (bytes[2] === 0x07 && bytes[3] === 0x08));
1
8
  /**
2
9
  * Classify a ZIP-backed package by its complete lower-cased path suffix.
3
10
  *
@@ -3,15 +3,6 @@ import { readManagedPeLayout, } from "./ManagedPeReader.js";
3
3
  import { managedTableRowCounts, readManagedMetadataInventory, } from "./ManagedMetadataInventory.js";
4
4
  import { readManagedMetadataLayout, } from "./ManagedMetadataLayout.js";
5
5
  import { ManagedReaderFailure } from "./ManagedReaderFailure.js";
6
- const emptyPage = (offset, limit) => ({
7
- items: [],
8
- offset,
9
- limit,
10
- total: 0,
11
- returned: 0,
12
- dropped: 0,
13
- complete: offset === 0,
14
- });
15
6
  const flagNames = (flags) => {
16
7
  const names = [];
17
8
  for (const [mask, name] of [
@@ -64,7 +55,6 @@ const peProjection = (layout) => ({
64
55
  cli: layout.cli === null ? null : cliProjection(layout.cli),
65
56
  });
66
57
  const base = (target, bytes, layout) => ({
67
- schema_version: 1,
68
58
  artifact: {
69
59
  path: target.path,
70
60
  sha256: target.sha256,
@@ -73,7 +63,7 @@ const base = (target, bytes, layout) => ({
73
63
  },
74
64
  pe: peProjection(layout),
75
65
  });
76
- const unavailableResult = (target, bytes, layout, limits) => {
66
+ const unavailableResult = (target, bytes, layout) => {
77
67
  const malformed = layout.cliDirectoryPresent;
78
68
  const issues = layout.cliIssue === null ? [] : [layout.cliIssue];
79
69
  const limitations = malformed
@@ -108,9 +98,9 @@ const unavailableResult = (target, bytes, layout, limits) => {
108
98
  module: null,
109
99
  assembly: null,
110
100
  target_frameworks: [],
111
- references: emptyPage(limits.referenceOffset, limits.referenceLimit),
112
- resources: emptyPage(limits.resourceOffset, limits.resourceLimit),
113
- attributes: emptyPage(limits.attributeOffset, limits.attributeLimit),
101
+ references: [],
102
+ resources: [],
103
+ attributes: [],
114
104
  coverage: {
115
105
  state: malformed ? "partial" : "unavailable",
116
106
  issues,
@@ -205,7 +195,7 @@ const runtimeClassification = ({ layout, metadata, inventory, }) => {
205
195
  evidence,
206
196
  };
207
197
  };
208
- const partialMetadataResult = ({ target, bytes, layout, limits, issue, }) => ({
198
+ const partialMetadataResult = ({ target, bytes, layout, issue, }) => ({
209
199
  ...base(target, bytes, layout),
210
200
  classification: {
211
201
  status: "malformed",
@@ -222,7 +212,7 @@ const partialMetadataResult = ({ target, bytes, layout, limits, issue, }) => ({
222
212
  ],
223
213
  },
224
214
  metadata: {
225
- status: issue.code === "limit-exceeded" ? "partial" : "malformed",
215
+ status: "malformed",
226
216
  version: null,
227
217
  stream_names: [],
228
218
  table_row_counts: {},
@@ -230,12 +220,12 @@ const partialMetadataResult = ({ target, bytes, layout, limits, issue, }) => ({
230
220
  module: null,
231
221
  assembly: null,
232
222
  target_frameworks: [],
233
- references: emptyPage(limits.referenceOffset, limits.referenceLimit),
234
- resources: emptyPage(limits.resourceOffset, limits.resourceLimit),
235
- attributes: emptyPage(limits.attributeOffset, limits.attributeLimit),
223
+ references: [],
224
+ resources: [],
225
+ attributes: [],
236
226
  coverage: { state: "partial", issues: [issue] },
237
227
  limitations: [
238
- "CLI metadata triage stopped at the reported bounded format or resource limit.",
228
+ "CLI metadata could not be read because the PE/CLI structure is malformed or unsupported.",
239
229
  ],
240
230
  });
241
231
  const mapResources = (bytes, layout, issues) => {
@@ -255,32 +245,16 @@ const mapResources = (bytes, layout, issues) => {
255
245
  return null;
256
246
  }
257
247
  };
258
- const inventoryPagesComplete = (inventory) => inventory.references.complete &&
259
- inventory.resources.complete &&
260
- inventory.attributes.complete;
261
- /** Inspect PE/CLI identity directly from bounded bytes without CLR loading. */
262
- export const inspectManagedArtifactBytes = (bytes, target, limits) => {
248
+ /** Inspect PE/CLI identity directly from local bytes without CLR loading. */
249
+ export const inspectManagedArtifactBytes = (bytes, target) => {
263
250
  const layout = readManagedPeLayout(bytes);
264
251
  if (layout.cli === null)
265
- return unavailableResult(target, bytes, layout, limits);
252
+ return unavailableResult(target, bytes, layout);
266
253
  const cli = layout.cli;
267
- if (cli.metadata.size > limits.maxMetadataBytes)
268
- return managedArtifactInspectionSchema.parse(partialMetadataResult({
269
- target,
270
- bytes,
271
- layout,
272
- limits,
273
- issue: {
274
- code: "limit-exceeded",
275
- scope: "cli.metadata",
276
- offset: cli.headerOffset + 8,
277
- detail: `CLI metadata size exceeds max_metadata_bytes ${String(limits.maxMetadataBytes)}`,
278
- },
279
- }));
280
254
  let metadata;
281
255
  try {
282
256
  const metadataOffset = layout.rvaToOffset(cli.metadata.rva, cli.metadata.size, "cli.metadata");
283
- metadata = readManagedMetadataLayout(bytes, metadataOffset, cli.metadata.size, limits.maxTableRows);
257
+ metadata = readManagedMetadataLayout(bytes, metadataOffset, cli.metadata.size);
284
258
  }
285
259
  catch (cause) {
286
260
  if (!(cause instanceof ManagedReaderFailure))
@@ -289,25 +263,18 @@ export const inspectManagedArtifactBytes = (bytes, target, limits) => {
289
263
  target,
290
264
  bytes,
291
265
  layout,
292
- limits,
293
266
  issue: cause.issue,
294
267
  }));
295
268
  }
296
269
  const resourceIssues = [];
297
270
  const resourceDirectory = mapResources(bytes, layout, resourceIssues);
298
- const inventory = readManagedMetadataInventory(bytes, metadata, limits, resourceDirectory);
271
+ const inventory = readManagedMetadataInventory(bytes, metadata, resourceDirectory);
299
272
  const issues = [...resourceIssues, ...inventory.issues];
300
- const pagesComplete = inventoryPagesComplete(inventory);
301
273
  const limitations = [
302
- ...(pagesComplete
303
- ? []
304
- : [
305
- "At least one caller-selected metadata page omits rows; use its offset and total to continue.",
306
- ]),
307
274
  ...(issues.length === 0
308
275
  ? []
309
276
  : [
310
- "At least one bounded metadata or resource item was unavailable; coverage is partial.",
277
+ "At least one metadata or resource item could not be read; coverage is partial.",
311
278
  ]),
312
279
  "Static inspection did not load the assembly, resolve dependencies through a CLR, decompile C#, or execute target code.",
313
280
  ];
@@ -331,7 +298,7 @@ export const inspectManagedArtifactBytes = (bytes, target, limits) => {
331
298
  resources: inventory.resources,
332
299
  attributes: inventory.attributes,
333
300
  coverage: {
334
- state: pagesComplete && issues.length === 0 ? "complete" : "partial",
301
+ state: issues.length === 0 ? "complete" : "partial",
335
302
  issues,
336
303
  },
337
304
  limitations,