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
@@ -2,35 +2,42 @@ import { createHash } from "node:crypto";
2
2
  import canonicalize from "canonicalize";
3
3
  import { artifactInventoryResultSchema, } from "./artifactGraph.js";
4
4
  import { parseEvidence } from "./evidence.js";
5
- /** Parse, merge, and verify a bounded set of inventory Evidence pages. */
5
+ import { artifactInspectionResultSchema } from "./artifactInspection.js";
6
+ /** Parse, merge, and verify inventory Evidence pages. */
6
7
  export const parseArtifactInventoryEvidence = (input) => assembleInventorySet((Array.isArray(input) ? input : [input]).map((value) => {
7
8
  const evidence = parseEvidence(value);
8
- if (evidence.operation !== "inventory_artifact")
9
- throw new TypeError("Artifact comparison requires inventory_artifact Evidence");
10
- const inventory = artifactInventoryResultSchema.parse(evidence.normalized_result);
11
- if (evidence.subject === null ||
12
- evidence.subject.digest.sha256 !== inventory.manifest.root_sha256 ||
13
- evidence.subject.format !== inventory.manifest.root_format)
9
+ const inventoryEvidence = evidence.operation === "inventory_artifact"
10
+ ? evidence
11
+ : evidence.operation === "inspect_artifact"
12
+ ? artifactInspectionResultSchema.parse(evidence.normalized_result)
13
+ .substeps[0]?.evidence
14
+ : undefined;
15
+ if (inventoryEvidence === undefined)
16
+ throw new TypeError("Artifact comparison requires inspect_artifact Evidence");
17
+ const inventory = artifactInventoryResultSchema.parse(inventoryEvidence.normalized_result);
18
+ if (inventoryEvidence.subject === null ||
19
+ inventoryEvidence.subject.digest.sha256 !==
20
+ inventory.manifest.root_sha256 ||
21
+ inventoryEvidence.subject.format !== inventory.manifest.root_format)
14
22
  throw new TypeError("Artifact inventory Evidence subject does not match its root digest");
15
23
  validateInventoryPage(inventory);
16
24
  return { evidence, inventory };
17
25
  }));
18
26
  const validateInventoryPage = (inventory) => {
19
- assertUnique(inventory.nodes.items.map(({ artifact_id: id }) => id), "node ID");
20
- assertUnique(inventory.occurrences.items.map(({ occurrence_id: id }) => id), "occurrence ID");
21
- assertUnique(inventory.occurrences.items.map(({ logical_path: path }) => path), "logical path");
22
- assertUnique(inventory.edges.items.map(({ edge_id: id }) => id), "edge ID");
23
- for (const node of inventory.nodes.items)
24
- if (node.artifact_id !==
25
- `art_${digestCanonical({ schema_version: 1, sha256: node.sha256 })}`)
27
+ assertUnique(inventory.nodes.map(({ artifact_id: id }) => id), "node ID");
28
+ assertUnique(inventory.occurrences.map(({ occurrence_id: id }) => id), "occurrence ID");
29
+ assertUnique(inventory.occurrences.map(({ logical_path: path }) => path), "logical path");
30
+ assertUnique(inventory.edges.map(({ edge_id: id }) => id), "edge ID");
31
+ for (const node of inventory.nodes)
32
+ if (node.artifact_id !== `art_${digestCanonical({ sha256: node.sha256 })}`)
26
33
  throw new TypeError("Artifact node ID is not content-addressed");
27
34
  };
28
35
  const assembleInventorySet = (pages) => {
29
- if (pages.length === 0 || pages.length > 100)
30
- throw new TypeError("Artifact comparison requires 1 to 100 Evidence pages");
36
+ if (pages.length === 0)
37
+ throw new TypeError("Artifact inventory requires Evidence pages");
31
38
  const first = pages[0];
32
39
  if (first === undefined)
33
- throw new TypeError("Artifact comparison requires Evidence pages");
40
+ throw new TypeError("Artifact inventory requires Evidence pages");
34
41
  const manifestJson = canonicalJson(first.inventory.manifest);
35
42
  const nodes = new Map();
36
43
  const occurrences = new Map();
@@ -42,13 +49,13 @@ const assembleInventorySet = (pages) => {
42
49
  if (canonicalJson(page.inventory.integrity_contradictions) !==
43
50
  canonicalJson(first.inventory.integrity_contradictions))
44
51
  throw new TypeError("Artifact inventory pages do not share integrity contradictions");
45
- for (const node of page.inventory.nodes.items)
52
+ for (const node of page.inventory.nodes)
46
53
  mergeExact(nodes, node.artifact_id, node, "node");
47
- for (const occurrence of page.inventory.occurrences.items) {
54
+ for (const occurrence of page.inventory.occurrences) {
48
55
  mergeExact(occurrences, occurrence.occurrence_id, occurrence, "occurrence");
49
56
  mergeExact(paths, occurrence.logical_path, occurrence, "logical path");
50
57
  }
51
- for (const edge of page.inventory.edges.items)
58
+ for (const edge of page.inventory.edges)
52
59
  mergeExact(edges, edge.edge_id, edge, "edge");
53
60
  }
54
61
  const inventory = orderedInventory(first.inventory, pages, {
@@ -110,7 +117,6 @@ const validateCompleteInventory = (inventory) => {
110
117
  if (graphSha256 !== inventory.manifest.graph_sha256)
111
118
  throw new TypeError("Artifact graph commitment does not match its members");
112
119
  const manifestId = `agm_${digestCanonical({
113
- schema_version: 1,
114
120
  root_artifact_id: inventory.manifest.root_artifact_id,
115
121
  graph_sha256: graphSha256,
116
122
  })}`;
@@ -1,222 +1,4 @@
1
- import { constants } from "node:fs";
2
- import { createHash } from "node:crypto";
3
- import { access, open, readFile, realpath, stat, } from "node:fs/promises";
4
- import { execFile } from "node:child_process";
5
- import { extname, isAbsolute, join, relative, resolve, sep } from "node:path";
6
- import { promisify } from "node:util";
7
- import { BinaryTargetError } from "./errors.js";
8
1
  import { err, ok } from "./result.js";
9
- import { zipPackageFormatForPath } from "./zipPackageFormat.js";
10
- const execFileAsync = promisify(execFile);
11
- /**
12
- * Resolve and classify a readable local target before a provider is selected.
13
- * FAT Mach-O inputs select only a host-compatible architecture so setup remains
14
- * non-interactive; unsupported or ambiguous inputs are returned as typed errors.
15
- */
16
- export const parseBinaryTarget = async (input, cwd = process.cwd(), hostArchitecture = process.arch, targetKind) => {
17
- const candidate = isAbsolute(input) ? input : resolve(cwd, input);
18
- try {
19
- await access(candidate, constants.R_OK);
20
- const canonical = await realpath(candidate);
21
- const resolved = await resolveAppBundle(canonical);
22
- if (!resolved.ok)
23
- return err(resolved.error);
24
- const path = resolved.value;
25
- const handle = await open(path, "r");
26
- try {
27
- if (!(await handle.stat()).isFile())
28
- return err(new BinaryTargetError(path, "target is not a regular file"));
29
- if (targetKind === "database" ||
30
- (targetKind === undefined && path.toLowerCase().endsWith(".hop")))
31
- return ok({
32
- path,
33
- sourcePath: canonical,
34
- sha256: await sha256Handle(handle),
35
- kind: "database",
36
- format: "analysis-database",
37
- });
38
- const artifactFormat = await detectArtifactFormat(path, handle);
39
- if (artifactFormat !== undefined)
40
- return ok({
41
- path,
42
- sourcePath: canonical,
43
- sha256: await sha256Handle(handle),
44
- kind: isArchiveFormat(artifactFormat) ? "archive" : "artifact",
45
- format: artifactFormat,
46
- });
47
- const detected = await readExecutableMetadata(handle, hostArchitecture);
48
- if (!detected.ok)
49
- return err(new BinaryTargetError(path, detected.error));
50
- return ok({
51
- path,
52
- sourcePath: canonical,
53
- sha256: await sha256Handle(handle),
54
- kind: "executable",
55
- ...detected.value,
56
- });
57
- }
58
- finally {
59
- await handle.close();
60
- }
61
- }
62
- catch (cause) {
63
- return err(new BinaryTargetError(candidate, "path is not readable", { cause }));
64
- }
65
- };
66
- const detectArtifactFormat = async (path, handle) => {
67
- const lower = path.toLowerCase();
68
- const magic = Buffer.alloc(8);
69
- const observed = await handle.read(magic, 0, magic.length, 0);
70
- if (observed.bytesRead >= 4 &&
71
- magic[0] === 0x50 &&
72
- magic[1] === 0x4b &&
73
- [0x03, 0x05, 0x07].includes(magic[2] ?? -1) &&
74
- [0x04, 0x06, 0x08].includes(magic[3] ?? -1)) {
75
- return zipPackageFormatForPath(lower) ?? "zip";
76
- }
77
- const named = namedArtifactFormat(lower);
78
- if (named !== undefined)
79
- return named;
80
- if (lower.endsWith(".pkg") &&
81
- observed.bytesRead >= 4 &&
82
- magic.subarray(0, 4).toString("ascii") === "xar!")
83
- return "pkg";
84
- if (lower.endsWith(".dmg")) {
85
- const size = (await handle.stat()).size;
86
- if (size >= 512) {
87
- const trailer = Buffer.alloc(4);
88
- const read = await handle.read(trailer, 0, trailer.length, size - 512);
89
- if (read.bytesRead === 4 && trailer.toString("ascii") === "koly")
90
- return "dmg";
91
- }
92
- }
93
- return undefined;
94
- };
95
- const namedArtifactFormat = (lowerPath) => {
96
- if (lowerPath.endsWith(".asar"))
97
- return "asar";
98
- if (lowerPath.endsWith(".plist"))
99
- return "plist";
100
- if (lowerPath.endsWith(".map"))
101
- return "source-map";
102
- return /\.(?:m?js|cjs)$/u.test(lowerPath) ? "javascript" : undefined;
103
- };
104
- const isArchiveFormat = (format) => ["zip", "ipa", "apk", "msix", "appx", "asar", "dmg", "pkg"].includes(format);
105
- const sha256Handle = async (handle) => {
106
- const hash = createHash("sha256");
107
- const chunk = Buffer.allocUnsafe(64 * 1024);
108
- let position = 0;
109
- while (true) {
110
- const observed = await handle.read(chunk, 0, chunk.length, position);
111
- if (observed.bytesRead === 0)
112
- break;
113
- hash.update(chunk.subarray(0, observed.bytesRead));
114
- position += observed.bytesRead;
115
- }
116
- return hash.digest("hex");
117
- };
118
- const resolveAppBundle = async (path) => {
119
- const metadata = await stat(path);
120
- if (!metadata.isDirectory())
121
- return ok(path);
122
- if (extname(path).toLowerCase() !== ".app")
123
- return err(new BinaryTargetError(path, "target is not an app or file"));
124
- const plistPath = join(path, "Contents", "Info.plist");
125
- let name;
126
- try {
127
- const plist = await readFile(plistPath);
128
- name =
129
- plist.subarray(0, 6).toString("ascii") === "bplist"
130
- ? await readBinaryPlistExecutable(plistPath)
131
- : parseXmlPlistExecutable(plist.toString("utf8"));
132
- }
133
- catch (cause) {
134
- return err(new BinaryTargetError(path, "app has no readable CFBundleExecutable", {
135
- cause,
136
- }));
137
- }
138
- if (!isSafeExecutableName(name))
139
- return err(new BinaryTargetError(path, "app has an unsafe CFBundleExecutable"));
140
- const programs = join(path, "Contents", "MacOS");
141
- const executable = join(programs, name);
142
- try {
143
- const [canonicalPrograms, canonicalExecutable] = await Promise.all([
144
- realpath(programs),
145
- realpath(executable),
146
- ]);
147
- const location = relative(canonicalPrograms, canonicalExecutable);
148
- if (location === ".." ||
149
- location.startsWith(`..${sep}`) ||
150
- isAbsolute(location))
151
- return err(new BinaryTargetError(path, "app program file leaves Contents/MacOS"));
152
- return ok(canonicalExecutable);
153
- }
154
- catch (cause) {
155
- return err(new BinaryTargetError(path, "app program file is missing", { cause }));
156
- }
157
- };
158
- const parseXmlPlistExecutable = (plist) => {
159
- const match = /<key>\s*CFBundleExecutable\s*<\/key>\s*<string>([^<]+)<\/string>/u.exec(plist);
160
- if (match?.[1] === undefined)
161
- throw new Error("CFBundleExecutable is missing");
162
- return decodeXml(match[1].trim());
163
- };
164
- const readBinaryPlistExecutable = async (plistPath) => (await execFileAsync("/usr/bin/plutil", [
165
- "-extract",
166
- "CFBundleExecutable",
167
- "raw",
168
- "-o",
169
- "-",
170
- plistPath,
171
- ])).stdout.trim();
172
- const isSafeExecutableName = (name) => name.length > 0 &&
173
- name !== "." &&
174
- name !== ".." &&
175
- !name.includes("\0") &&
176
- !/[/\\]/u.test(name);
177
- const decodeXml = (value) => value
178
- .replaceAll("&amp;", "&")
179
- .replaceAll("&lt;", "<")
180
- .replaceAll("&gt;", ">")
181
- .replaceAll("&quot;", '"')
182
- .replaceAll("&apos;", "'");
183
- const readExecutableMetadata = async (handle, hostArchitecture) => {
184
- const prefix = Buffer.alloc(4096);
185
- const prefixRead = await handle.read(prefix, 0, prefix.length, 0);
186
- const bytes = prefix.subarray(0, prefixRead.bytesRead);
187
- if (bytes.length >= 64 && bytes[0] === 0x4d && bytes[1] === 0x5a) {
188
- const offset = bytes.readUInt32LE(0x3c);
189
- return readPeMetadata(handle, offset);
190
- }
191
- if (bytes.length >= 8) {
192
- const magic = bytes.readUInt32BE(0);
193
- if ([0xcafebabf, 0xbfbafeca].includes(magic)) {
194
- const little = magic === 0xbfbafeca;
195
- const count = little ? bytes.readUInt32LE(4) : bytes.readUInt32BE(4);
196
- const required = 8 + count * 32;
197
- if (count <= 128 && required > bytes.length) {
198
- const header = Buffer.alloc(required);
199
- const headerRead = await handle.read(header, 0, header.length, 0);
200
- return parseExecutableHeader(header.subarray(0, headerRead.bytesRead), hostArchitecture);
201
- }
202
- }
203
- }
204
- return parseExecutableHeader(bytes, hostArchitecture);
205
- };
206
- const readPeMetadata = async (handle, offset) => {
207
- const fileHeader = Buffer.alloc(24);
208
- const fileHeaderRead = await handle.read(fileHeader, 0, fileHeader.length, offset);
209
- if (fileHeaderRead.bytesRead !== fileHeader.length)
210
- return err("invalid or truncated PE header");
211
- const optionalHeaderSize = fileHeader.readUInt16LE(20);
212
- if (optionalHeaderSize > 4096)
213
- return err("invalid PE optional header size");
214
- const record = Buffer.alloc(24 + optionalHeaderSize);
215
- const recordRead = await handle.read(record, 0, record.length, offset);
216
- return recordRead.bytesRead === record.length
217
- ? parsePeRecord(record)
218
- : err("invalid or truncated PE header");
219
- };
220
2
  /**
221
3
  * Parse supported executable headers without I/O. The caller supplies the host
222
4
  * architecture used for deterministic FAT Mach-O slice selection.
@@ -308,7 +90,8 @@ const parsePe = (bytes) => {
308
90
  return err("invalid or truncated PE header");
309
91
  return parsePeRecord(bytes.subarray(offset));
310
92
  };
311
- const parsePeRecord = (record) => {
93
+ /** Parse a bounded PE signature, COFF record, and optional header without I/O. */
94
+ export const parsePeRecord = (record) => {
312
95
  if (record.length < 24 ||
313
96
  record.toString("binary", 0, 4) !== "PE\u0000\u0000")
314
97
  return err("invalid or truncated PE header");
@@ -0,0 +1 @@
1
+ export {};
@@ -1,74 +1,41 @@
1
1
  import { z } from "zod";
2
2
  import { browserScenarioDiffSchema, compareBrowserScenarios, compareBrowserScenariosInputSchema, } from "./browserScenarioDiff.js";
3
3
  import { compareWebCaptures, captureSnapshotSchema, webCaptureDiffSchema, } from "./webCaptureDiff.js";
4
- /** Top-level MCP shape for legacy page or step-indexed scenario comparison. */
5
- export const browserCaptureComparisonWireSchema = z
4
+ /** Caller-visible object schema for passive and scenario capture comparisons. */
5
+ export const browserCaptureComparisonInputSchema = z
6
6
  .strictObject({
7
7
  before: captureSnapshotSchema
8
8
  .optional()
9
- .describe("Earlier passive web-page capture; pair with after."),
9
+ .describe("Earlier passive web-page capture."),
10
10
  after: captureSnapshotSchema
11
11
  .optional()
12
- .describe("Later passive web-page capture; pair with before."),
12
+ .describe("Later passive web-page capture."),
13
13
  before_scenario: compareBrowserScenariosInputSchema.shape.before_scenario
14
14
  .optional()
15
- .describe("Earlier browser scenario capture; pair with after_scenario."),
15
+ .describe("Earlier browser scenario capture."),
16
16
  after_scenario: compareBrowserScenariosInputSchema.shape.after_scenario
17
17
  .optional()
18
- .describe("Later browser scenario capture; pair with before_scenario."),
19
- normalization: compareBrowserScenariosInputSchema.shape.normalization.describe("Scenario-only exact-literal normalization policy."),
20
- max_changes: z
21
- .number()
22
- .int()
23
- .min(1)
24
- .max(20_000)
25
- .default(2_000)
26
- .describe("Maximum normalized change records to retain."),
18
+ .describe("Later browser scenario capture."),
19
+ normalization: compareBrowserScenariosInputSchema.shape.normalization
20
+ .unwrap()
21
+ .optional()
22
+ .describe("Exact-literal normalization policy."),
27
23
  })
28
24
  .superRefine((input, context) => {
29
- const hasPassive = input.before !== undefined || input.after !== undefined;
30
- const hasScenario = input.before_scenario !== undefined || input.after_scenario !== undefined;
31
- if (hasPassive === hasScenario)
32
- context.addIssue({
33
- code: "custom",
34
- message: "Provide exactly one complete pair: before/after or before_scenario/after_scenario",
35
- });
36
- if (hasPassive && (input.before === undefined || input.after === undefined))
37
- context.addIssue({
38
- code: "custom",
39
- message: "Passive comparison requires both before and after",
40
- });
41
- if (hasScenario &&
42
- (input.before_scenario === undefined ||
43
- input.after_scenario === undefined))
44
- context.addIssue({
45
- code: "custom",
46
- message: "Browser scenario comparison requires both before_scenario and after_scenario",
47
- });
48
- if (hasPassive && input.normalization.rules.length > 0)
49
- context.addIssue({
50
- code: "custom",
51
- path: ["normalization"],
52
- message: "Literal normalization rules apply only to browser scenario captures",
53
- });
54
- });
55
- /** Parsed legacy page snapshots or step-indexed browser scenarios. */
56
- export const browserCaptureComparisonInputSchema = browserCaptureComparisonWireSchema.transform((input) => {
57
- if (input.before_scenario !== undefined &&
58
- input.after_scenario !== undefined)
59
- return {
60
- before_scenario: input.before_scenario,
61
- after_scenario: input.after_scenario,
62
- normalization: input.normalization,
63
- max_changes: input.max_changes,
64
- };
65
- if (input.before !== undefined && input.after !== undefined)
66
- return {
67
- before: input.before,
68
- after: input.after,
69
- max_changes: input.max_changes,
70
- };
71
- throw new TypeError("Capture comparison pair refinement failed");
25
+ const passive = input.before !== undefined && input.after !== undefined;
26
+ const scenario = input.before_scenario !== undefined && input.after_scenario !== undefined;
27
+ const passiveFieldsPresent = input.before !== undefined || input.after !== undefined;
28
+ const scenarioFieldsPresent = input.before_scenario !== undefined ||
29
+ input.after_scenario !== undefined ||
30
+ input.normalization !== undefined;
31
+ if (passive && !scenarioFieldsPresent)
32
+ return;
33
+ if (scenario && !passiveFieldsPresent)
34
+ return;
35
+ context.addIssue({
36
+ code: "custom",
37
+ message: "Provide before and after passive captures, or before_scenario, after_scenario, and normalization; do not mix comparison types.",
38
+ });
72
39
  });
73
40
  /** Result from passive page or browser scenario comparison. */
74
41
  export const browserCaptureComparisonSchema = z.union([
@@ -77,6 +44,14 @@ export const browserCaptureComparisonSchema = z.union([
77
44
  ]);
78
45
  /** Dispatch a parsed capture comparison to its pure domain comparator. */
79
46
  export const compareBrowserCaptures = (input) => isScenarioComparison(input)
80
- ? compareBrowserScenarios(input)
81
- : compareWebCaptures(input);
82
- const isScenarioComparison = (input) => "before_scenario" in input;
47
+ ? compareBrowserScenarios({
48
+ ...input,
49
+ normalization: input.normalization ?? { rules: [] },
50
+ })
51
+ : compareWebCaptures(toPassiveComparison(input));
52
+ const isScenarioComparison = (input) => input.before_scenario !== undefined && input.after_scenario !== undefined;
53
+ const toPassiveComparison = (input) => {
54
+ if (input.before === undefined || input.after === undefined)
55
+ throw new Error("Validated passive comparison is missing a capture");
56
+ return { before: input.before, after: input.after };
57
+ };