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,14 +1,21 @@
1
1
  /** Project internal provider routing state into the caller-visible session status. */
2
- export const binarySessionStatus = ({ target, route, router, runtimeAvailability, runId, runtimeLineageSnapshots, requestActivitySnapshots, }) => {
2
+ export const binarySessionStatus = ({ target, route, router, runtimeUnavailability, runId, runtimeLineageSnapshots, requestActivitySnapshots, }) => {
3
3
  const configuredProvider = router.configuredIdentity();
4
4
  const provider = providerSummary(configuredProvider);
5
5
  const providers = router.providerIdentities(route).map(providerSummary);
6
6
  const capabilities = [...(route.capabilities?.values() ?? [])]
7
+ .filter(({ operation }) => operation !== "inventory_artifact")
7
8
  .sort((left, right) => left.operation.localeCompare(right.operation))
8
- .map((descriptor) => ({
9
- ...descriptor,
10
- ...runtimeAvailability.get(descriptor.operation),
11
- }))
9
+ .map((descriptor) => {
10
+ const unavailable = runtimeUnavailability.get(descriptor.operation);
11
+ return unavailable === undefined
12
+ ? descriptor
13
+ : {
14
+ ...descriptor,
15
+ available: false,
16
+ reason: unavailable.reason,
17
+ };
18
+ })
12
19
  .map(capabilityStatus);
13
20
  const analysisProviderBinding = route.binding === null
14
21
  ? null
@@ -26,6 +33,7 @@ export const binarySessionStatus = ({ target, route, router, runtimeAvailability
26
33
  selected: candidate.selected,
27
34
  capabilities: candidate.capabilities
28
35
  .slice()
36
+ .filter(({ operation }) => operation !== "inventory_artifact")
29
37
  .sort((left, right) => left.operation.localeCompare(right.operation))
30
38
  .map(capabilityStatus),
31
39
  }));
@@ -67,7 +75,6 @@ const requestActivityStatus = (snapshots) => {
67
75
  request_id: active.requestId,
68
76
  operation: active.operation,
69
77
  elapsed_ms: active.elapsedMs,
70
- timeout_ms: active.timeoutMs,
71
78
  caller_state: active.callerState,
72
79
  },
73
80
  queued_requests: queuedRequests,
@@ -76,11 +83,9 @@ const requestActivityStatus = (snapshots) => {
76
83
  return {
77
84
  status: snapshots.length === 0
78
85
  ? "not_observed"
79
- : active.some(({ callerState }) => callerState === "timed_out")
80
- ? "timed_out_busy"
81
- : active.length > 0
82
- ? "busy"
83
- : "idle",
86
+ : active.length > 0
87
+ ? "busy"
88
+ : "idle",
84
89
  providers,
85
90
  };
86
91
  };
@@ -105,7 +110,6 @@ const processLineageStatus = (snapshots) => snapshots.length === 0
105
110
  : {
106
111
  status: observation.status,
107
112
  observed_at: observation.observedAt,
108
- schema_version: observation.lineage.schemaVersion,
109
113
  launcher_pid: observation.lineage.launcherPid,
110
114
  launcher_parent_pid: observation.lineage.launcherParentPid,
111
115
  process_group_id: observation.lineage.processGroupId,
@@ -122,10 +126,6 @@ const capabilityStatus = (descriptor) => ({
122
126
  available: descriptor.available,
123
127
  reason: descriptor.reason,
124
128
  availability_code: descriptor.availabilityCode ?? null,
125
- input_contract_version: descriptor.inputContractVersion,
126
- output_contract_version: descriptor.outputContractVersion,
127
- pagination: descriptor.pagination,
128
- exhaustive: descriptor.exhaustive,
129
129
  effects: {
130
130
  mutates_artifact: descriptor.effects.mutatesArtifact,
131
131
  launches_process: descriptor.effects.launchesProcess,
@@ -135,10 +135,5 @@ const capabilityStatus = (descriptor) => ({
135
135
  changes_permissions: descriptor.effects.changesPermissions,
136
136
  requires_root: descriptor.effects.requiresRoot,
137
137
  },
138
- limits: {
139
- max_results: descriptor.limits.maxResults,
140
- max_payload_bytes: descriptor.limits.maxPayloadBytes,
141
- timeout_ms: descriptor.limits.timeoutMs,
142
- },
143
138
  limitations: [...descriptor.limitations],
144
139
  });
@@ -0,0 +1,216 @@
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, resolve } from "node:path";
6
+ import { promisify } from "node:util";
7
+ import { isPathWithinRoot } from "../domain/localPath.js";
8
+ import { BinaryTargetError } from "../domain/errors.js";
9
+ import { err, ok } from "../domain/result.js";
10
+ import { hasZipSignature, zipPackageFormatForPath, } from "../domain/zipPackageFormat.js";
11
+ import { parseExecutableHeader, parsePeRecord, } from "../domain/binaryTarget.js";
12
+ const execFileAsync = promisify(execFile);
13
+ /**
14
+ * Resolve and classify a readable local target before a provider is selected.
15
+ * FAT Mach-O inputs select only a host-compatible architecture so setup remains
16
+ * non-interactive; unsupported or ambiguous inputs are returned as typed errors.
17
+ */
18
+ export const parseBinaryTarget = async (input, cwd = process.cwd(), hostArchitecture = process.arch, targetKind) => {
19
+ const candidate = isAbsolute(input) ? input : resolve(cwd, input);
20
+ try {
21
+ await access(candidate, constants.R_OK);
22
+ const canonical = await realpath(candidate);
23
+ const resolved = await resolveAppBundle(canonical);
24
+ if (!resolved.ok)
25
+ return err(resolved.error);
26
+ const path = resolved.value;
27
+ const handle = await open(path, "r");
28
+ try {
29
+ if (!(await handle.stat()).isFile())
30
+ return err(new BinaryTargetError(path, "target is not a regular file"));
31
+ if (targetKind === "database" ||
32
+ (targetKind === undefined && path.toLowerCase().endsWith(".hop")))
33
+ return ok({
34
+ path,
35
+ sourcePath: canonical,
36
+ sha256: await sha256Handle(handle),
37
+ kind: "database",
38
+ format: "analysis-database",
39
+ });
40
+ const artifactFormat = await detectArtifactFormat(path, handle);
41
+ if (artifactFormat !== undefined) {
42
+ const identity = {
43
+ path,
44
+ sourcePath: canonical,
45
+ sha256: await sha256Handle(handle),
46
+ };
47
+ return isArchiveFormat(artifactFormat)
48
+ ? ok({ ...identity, kind: "archive", format: artifactFormat })
49
+ : ok({ ...identity, kind: "artifact", format: artifactFormat });
50
+ }
51
+ const detected = await readExecutableMetadata(handle, hostArchitecture);
52
+ if (!detected.ok)
53
+ return err(new BinaryTargetError(path, detected.error));
54
+ return ok({
55
+ path,
56
+ sourcePath: canonical,
57
+ sha256: await sha256Handle(handle),
58
+ kind: "executable",
59
+ ...detected.value,
60
+ });
61
+ }
62
+ finally {
63
+ await handle.close();
64
+ }
65
+ }
66
+ catch (cause) {
67
+ return err(new BinaryTargetError(candidate, "path is not readable", { cause }));
68
+ }
69
+ };
70
+ const detectArtifactFormat = async (path, handle) => {
71
+ const lower = path.toLowerCase();
72
+ const magic = Buffer.alloc(8);
73
+ const observed = await handle.read(magic, 0, magic.length, 0);
74
+ if (hasZipSignature(magic.subarray(0, observed.bytesRead))) {
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
+ if (!isPathWithinRoot(canonicalPrograms, canonicalExecutable))
148
+ return err(new BinaryTargetError(path, "app program file leaves Contents/MacOS"));
149
+ return ok(canonicalExecutable);
150
+ }
151
+ catch (cause) {
152
+ return err(new BinaryTargetError(path, "app program file is missing", { cause }));
153
+ }
154
+ };
155
+ const parseXmlPlistExecutable = (plist) => {
156
+ const match = /<key>\s*CFBundleExecutable\s*<\/key>\s*<string>([^<]+)<\/string>/u.exec(plist);
157
+ if (match?.[1] === undefined)
158
+ throw new Error("CFBundleExecutable is missing");
159
+ return decodeXml(match[1].trim());
160
+ };
161
+ const readBinaryPlistExecutable = async (plistPath) => (await execFileAsync("/usr/bin/plutil", [
162
+ "-extract",
163
+ "CFBundleExecutable",
164
+ "raw",
165
+ "-o",
166
+ "-",
167
+ plistPath,
168
+ ])).stdout.trim();
169
+ const isSafeExecutableName = (name) => name.length > 0 &&
170
+ name !== "." &&
171
+ name !== ".." &&
172
+ !name.includes("\0") &&
173
+ !/[/\\]/u.test(name);
174
+ const decodeXml = (value) => value
175
+ .replaceAll("&amp;", "&")
176
+ .replaceAll("&lt;", "<")
177
+ .replaceAll("&gt;", ">")
178
+ .replaceAll("&quot;", '"')
179
+ .replaceAll("&apos;", "'");
180
+ const readExecutableMetadata = async (handle, hostArchitecture) => {
181
+ const prefix = Buffer.alloc(4096);
182
+ const prefixRead = await handle.read(prefix, 0, prefix.length, 0);
183
+ const bytes = prefix.subarray(0, prefixRead.bytesRead);
184
+ if (bytes.length >= 64 && bytes[0] === 0x4d && bytes[1] === 0x5a) {
185
+ const offset = bytes.readUInt32LE(0x3c);
186
+ return readPeMetadata(handle, offset);
187
+ }
188
+ if (bytes.length >= 8) {
189
+ const magic = bytes.readUInt32BE(0);
190
+ if ([0xcafebabf, 0xbfbafeca].includes(magic)) {
191
+ const little = magic === 0xbfbafeca;
192
+ const count = little ? bytes.readUInt32LE(4) : bytes.readUInt32BE(4);
193
+ const required = 8 + count * 32;
194
+ if (count <= 128 && required > bytes.length) {
195
+ const header = Buffer.alloc(required);
196
+ const headerRead = await handle.read(header, 0, header.length, 0);
197
+ return parseExecutableHeader(header.subarray(0, headerRead.bytesRead), hostArchitecture);
198
+ }
199
+ }
200
+ }
201
+ return parseExecutableHeader(bytes, hostArchitecture);
202
+ };
203
+ const readPeMetadata = async (handle, offset) => {
204
+ const fileHeader = Buffer.alloc(24);
205
+ const fileHeaderRead = await handle.read(fileHeader, 0, fileHeader.length, offset);
206
+ if (fileHeaderRead.bytesRead !== fileHeader.length)
207
+ return err("invalid or truncated PE header");
208
+ const optionalHeaderSize = fileHeader.readUInt16LE(20);
209
+ if (optionalHeaderSize > 4096)
210
+ return err("invalid PE optional header size");
211
+ const record = Buffer.alloc(24 + optionalHeaderSize);
212
+ const recordRead = await handle.read(record, 0, record.length, offset);
213
+ return recordRead.bytesRead === record.length
214
+ ? parsePeRecord(record)
215
+ : err("invalid or truncated PE header");
216
+ };
@@ -1,7 +1,7 @@
1
1
  import { createEvidence, } from "../domain/evidence.js";
2
2
  import { jsonValueSchema } from "../domain/jsonValue.js";
3
3
  import { commitBrowserScenarioNormalization } from "../domain/browserScenarioNormalization.js";
4
- /** Create Evidence v2 for a policy-scoped external browser observation. */
4
+ /** Create Evidence for a policy-scoped external browser observation. */
5
5
  export const createBrowserEvidence = (operation, input, result, provider) => createEvidence(undefined, provider, {
6
6
  predicateType: browserPredicate(operation),
7
7
  operation,
@@ -30,92 +30,74 @@ const browserParameters = (input) => {
30
30
  after_browser: input.after_scenario.browser,
31
31
  before_start_origin: input.before_scenario.scenario.start_origin,
32
32
  after_start_origin: input.after_scenario.scenario.start_origin,
33
- max_changes: input.max_changes,
34
- normalization_sha256: commitBrowserScenarioNormalization(input.normalization).sha256,
33
+ normalization_sha256: commitBrowserScenarioNormalization(input.normalization ?? { rules: [] }).sha256,
35
34
  };
36
- if ("max_changes" in input)
35
+ if (input.before !== undefined &&
36
+ input.after !== undefined &&
37
+ "inspection" in input.before &&
38
+ "inspection" in input.after)
37
39
  return {
38
40
  before_target_id: input.before.inspection.target.target_id,
39
41
  before_capture_ended_at: input.before.inspection.capture_window.ended_at,
40
42
  after_target_id: input.after.inspection.target.target_id,
41
43
  after_capture_ended_at: input.after.inspection.capture_window.ended_at,
42
- max_changes: input.max_changes,
43
44
  };
44
- return {
45
- before_artifact_uri: input.before.uri,
46
- after_artifact_uri: input.after.uri,
47
- channel_threshold: input.channel_threshold,
48
- maximum_pixels: input.maximum_pixels,
49
- };
45
+ if (isScreenshotComparison(input))
46
+ return {
47
+ before_artifact_sha256: input.before.sha256,
48
+ after_artifact_sha256: input.after.sha256,
49
+ channel_threshold: input.channel_threshold,
50
+ };
51
+ throw new Error("Browser comparison input did not match a comparison type");
50
52
  }
51
53
  const scope = {
52
54
  cdp_endpoint: input.cdp_endpoint,
53
55
  allowed_origins: input.allowed_origins,
54
56
  };
55
57
  if (!("target_id" in input))
56
- return { ...scope, offset: input.offset, limit: input.limit };
57
- if ("screenshot_approved" in input)
58
- return {
59
- ...scope,
60
- target_id: input.target_id,
61
- maximum_image_bytes: input.maximum_image_bytes,
62
- };
63
- if ("max_tools" in input)
64
- return {
65
- ...scope,
66
- target_id: input.target_id,
67
- observation_ms: input.observation_ms,
68
- max_tools: input.max_tools,
69
- max_schema_bytes: input.max_schema_bytes,
70
- max_schema_nodes: input.max_schema_nodes,
71
- max_schema_depth: input.max_schema_depth,
72
- };
73
- if (!("include_accessibility_text" in input))
74
- return {
75
- ...scope,
76
- target_id: input.target_id,
77
- observation_ms: input.observation_ms,
78
- max_timeline_events: input.max_timeline_events,
79
- };
58
+ return scope;
80
59
  return {
81
60
  ...scope,
82
61
  target_id: input.target_id,
83
- observation_ms: input.observation_ms,
84
- include_accessibility_text: input.include_accessibility_text,
85
- include_console_text: input.include_console_text,
86
- include_json_body_shapes: input.include_json_body_shapes,
87
- include_websocket_shapes: input.include_websocket_shapes,
88
- include_script_sources: input.include_script_sources,
89
- include_storage_keys: input.include_storage_keys,
90
- include_storage_fingerprints: input.include_storage_fingerprints,
91
- limits: input.limits,
92
- ...(input.include_script_sources && "source_capture_approved" in input
62
+ ...("observation_ms" in input
63
+ ? { observation_ms: input.observation_ms }
64
+ : {}),
65
+ ...("include_accessibility_text" in input
93
66
  ? {
94
- source_capture_approved: input.source_capture_approved,
95
- fetch_source_maps: input.fetch_source_maps,
96
- source_map_fetch_approved: input.source_map_fetch_approved,
97
- analysis_limits: input.analysis_limits,
67
+ include_accessibility_text: input.include_accessibility_text,
68
+ include_console_text: input.include_console_text,
69
+ include_json_body_shapes: input.include_json_body_shapes,
70
+ include_websocket_shapes: input.include_websocket_shapes,
71
+ include_storage_keys: input.include_storage_keys,
72
+ include_storage_fingerprints: input.include_storage_fingerprints,
73
+ ...("include_script_sources" in input
74
+ ? { include_script_sources: input.include_script_sources }
75
+ : {}),
98
76
  }
99
77
  : {}),
78
+ ...("fetch_source_maps" in input
79
+ ? { fetch_source_maps: input.fetch_source_maps }
80
+ : {}),
100
81
  };
101
82
  };
83
+ const isScreenshotComparison = (input) => "channel_threshold" in input;
102
84
  const browserPredicate = (operation) => {
103
85
  switch (operation) {
104
86
  case "list_browser_targets":
105
- return "rea.browser-target-list/v1";
87
+ return "rea.browser-target-list";
106
88
  case "inspect_web_page":
107
- return "rea.web-page-inspection/v2";
89
+ return "rea.web-page-inspection";
108
90
  case "analyze_web_bundle":
109
- return "rea.web-bundle-analysis/v1";
91
+ return "rea.web-bundle-analysis";
110
92
  case "observe_web_session":
111
- return "rea.web-observation-session/v1";
93
+ return "rea.web-observation-session";
112
94
  case "discover_webmcp_tools":
113
- return "rea.webmcp-discovery/v1";
95
+ return "rea.webmcp-discovery";
114
96
  case "compare_web_captures":
115
- return "rea.web-capture-diff/v1";
97
+ return "rea.web-capture-diff";
116
98
  case "capture_web_screenshot":
117
- return "rea.web-screenshot/v1";
99
+ return "rea.web-screenshot";
118
100
  case "compare_web_screenshots":
119
- return "rea.web-screenshot-diff/v1";
101
+ return "rea.web-screenshot-diff";
120
102
  }
121
103
  };
@@ -1,5 +1,6 @@
1
+ import { projectPermissionFailure } from "./PermissionFailure.js";
1
2
  import { isLiteralLoopbackHostname, } from "../domain/browserObservation.js";
2
- import { AnalysisCapabilityUnavailableError, AnalysisProtocolError, PermissionRequiredError, } from "../domain/errors.js";
3
+ import { AnalysisCapabilityUnavailableError, } from "../domain/errors.js";
3
4
  import { err, ok } from "../domain/result.js";
4
5
  import { createBrowserEvidence } from "./BrowserEvidence.js";
5
6
  /** Authorize and execute one policy-scoped target discovery observation. */
@@ -96,11 +97,7 @@ const prepare = async (browser, authority, input, operation) => {
96
97
  operation_identity: `${operation}:${input.target_id ?? input.cdp_endpoint}`,
97
98
  }, "read");
98
99
  if (!authorized.ok)
99
- return err(authorized.error instanceof PermissionRequiredError
100
- ? authorized.error
101
- : new AnalysisProtocolError(authorized.error.message, {
102
- cause: authorized.error,
103
- }));
100
+ return err(projectPermissionFailure(authorized.error));
104
101
  return browser === undefined
105
102
  ? err(new AnalysisCapabilityUnavailableError("rea-cdp-browser", operation, "browser observation provider is not configured"))
106
103
  : ok(browser);
@@ -1,6 +1,7 @@
1
+ import { projectPermissionFailure } from "./PermissionFailure.js";
1
2
  import { createBrowserScenarioEvidence } from "./BrowserScenarioEvidence.js";
2
3
  import { digestJson } from "./JavaScriptReplayPlanning.js";
3
- import { AnalysisCapabilityUnavailableError, AnalysisProtocolError, PermissionRequiredError, } from "../domain/errors.js";
4
+ import { AnalysisCapabilityUnavailableError, } from "../domain/errors.js";
4
5
  import { isLiteralLoopbackHostname } from "../domain/browserObservation.js";
5
6
  import { err } from "../domain/result.js";
6
7
  const OPERATION = "capture_browser_scenario";
@@ -29,11 +30,7 @@ const authorizeScenario = async (authority, scenario) => {
29
30
  operation_identity: `${OPERATION}:${digestJson(scenario)}`,
30
31
  }, "write");
31
32
  if (!authorized.ok)
32
- return err(authorized.error instanceof PermissionRequiredError
33
- ? authorized.error
34
- : new AnalysisProtocolError(authorized.error.message, {
35
- cause: authorized.error,
36
- }));
33
+ return err(projectPermissionFailure(authorized.error));
37
34
  return { ok: true, value: true };
38
35
  };
39
36
  /** Authorize and execute one controlled browser scenario. */
@@ -11,6 +11,7 @@ const browserScenarioParameters = (scenario) => ({
11
11
  step_id,
12
12
  action,
13
13
  })),
14
+ action_timeouts_ms: scenario.actions.map((item) => "timeout_ms" in item ? (item.timeout_ms ?? null) : null),
14
15
  secret_declarations: scenario.secrets.map(({ secret_id, environment_variable, purpose, redaction }) => ({
15
16
  secret_id,
16
17
  environment_variable,
@@ -18,11 +19,10 @@ const browserScenarioParameters = (scenario) => ({
18
19
  redaction,
19
20
  })),
20
21
  capture: scenario.capture,
21
- limits: scenario.limits,
22
22
  });
23
- /** Create Evidence v2 without retaining resolved scenario secret values. */
23
+ /** Create Evidence without retaining resolved scenario secret values. */
24
24
  export const createBrowserScenarioEvidence = (scenario, capture, provider) => createEvidence(undefined, provider, {
25
- predicateType: "rea.browser-scenario-capture/v1",
25
+ predicateType: "rea.browser-scenario-capture",
26
26
  operation: "capture_browser_scenario",
27
27
  parameters: browserScenarioParameters(scenario),
28
28
  result: jsonValueSchema.parse(capture),
@@ -1,7 +1,7 @@
1
1
  import { projectAnalysisError } from "../domain/errors.js";
2
2
  import { parseRelatedAddresses } from "../domain/hopperValues.js";
3
3
  import { ok } from "../domain/result.js";
4
- /** Trace one deterministic bounded direct caller/callee path. */
4
+ /** Trace direct caller/callee relationships until the graph is exhausted or the goal is reached. */
5
5
  export const traceCallPath = async (call, input, signal) => {
6
6
  const state = createTraceState(input);
7
7
  while (state.queueIndex < state.queue.length &&
@@ -12,17 +12,6 @@ export const traceCallPath = async (call, input, signal) => {
12
12
  const current = state.visited.get(address);
13
13
  if (current === undefined)
14
14
  continue;
15
- if (current.depth >= input.max_depth) {
16
- state.frontier.add(address);
17
- state.residual.add("Call-path traversal reached the depth limit.");
18
- continue;
19
- }
20
- if (state.operations >= input.max_operations) {
21
- recordPendingFrontier(state, input);
22
- state.residual.add("Call-path traversal reached the operation budget.");
23
- break;
24
- }
25
- state.operations += 1;
26
15
  const found = await expandAddress(call, {
27
16
  input,
28
17
  state,
@@ -40,9 +29,7 @@ const createTraceState = (input) => ({
40
29
  queue: [input.start],
41
30
  edges: new Map(),
42
31
  failures: [],
43
- frontier: new Set(),
44
32
  residual: new Set(),
45
- operations: 0,
46
33
  queueIndex: 0,
47
34
  traversalPath: input.goal === input.start ? [input.start] : [],
48
35
  });
@@ -85,12 +72,6 @@ const expandAddress = async (call, expansion) => {
85
72
  }
86
73
  continue;
87
74
  }
88
- if (state.visited.size >= input.max_nodes) {
89
- if (state.frontier.size < input.max_nodes)
90
- state.frontier.add(relatedAddress);
91
- state.residual.add("Call-path traversal reached the node limit.");
92
- continue;
93
- }
94
75
  state.visited.set(relatedAddress, {
95
76
  depth: current.depth + 1,
96
77
  path,
@@ -109,21 +90,12 @@ const recordEdge = (input, state, edge) => {
109
90
  const edgeKey = `${sourceAddress}\u0000${targetAddress}`;
110
91
  if (state.edges.has(edgeKey))
111
92
  return;
112
- if (state.edges.size >= input.max_nodes) {
113
- state.residual.add("Call-path traversal reached the edge limit.");
114
- return;
115
- }
116
93
  state.edges.set(edgeKey, {
117
94
  source_address: sourceAddress,
118
95
  target_address: targetAddress,
119
96
  discovery_depth: edge.discoveryDepth,
120
97
  });
121
98
  };
122
- const recordPendingFrontier = (state, input) => {
123
- for (const pending of state.queue.slice(state.queueIndex - 1))
124
- if (state.frontier.size < input.max_nodes)
125
- state.frontier.add(pending);
126
- };
127
99
  const projectTrace = (input, state) => ({
128
100
  start: input.start,
129
101
  goal: input.goal ?? null,
@@ -141,19 +113,13 @@ const projectTrace = (input, state) => ({
141
113
  compareAddress(left.target_address, right.target_address)),
142
114
  traversal_path: state.traversalPath,
143
115
  failures: state.failures,
144
- frontier: [...state.frontier].sort(compareAddress),
145
- limits: {
146
- max_depth: input.max_depth,
147
- max_nodes: input.max_nodes,
148
- max_operations: input.max_operations,
116
+ traversal: {
149
117
  nodes_visited: state.visited.size,
150
- operations_used: state.operations,
151
118
  },
152
119
  truncated: state.residual.size > 0,
153
120
  residual_unknowns: [...state.residual],
154
121
  limitations: [
155
122
  "Direct provider call relationships may omit unresolved indirect calls.",
156
- "A not_reached goal is only absent from this bounded traversal, not from the complete program.",
157
123
  ],
158
124
  });
159
125
  const compareAddress = (left, right) => left < right ? -1 : left > right ? 1 : 0;
@@ -0,0 +1,26 @@
1
+ /** Empty MCP client feature declaration used when the caller supplies none. */
2
+ export const NO_CLIENT_FEATURES = {
3
+ elicitation_form: false,
4
+ elicitation_url: false,
5
+ roots: false,
6
+ sampling: false,
7
+ };
8
+ const CLIENT_FEATURE_REQUIREMENTS = {
9
+ capture_process_scenario: {
10
+ required: [],
11
+ optional: ["elicitation_form"],
12
+ },
13
+ };
14
+ /** Project a tool's client requirements against the negotiated feature set. */
15
+ export const clientRequirementsFor = (name, clientFeatures) => {
16
+ const requirements = CLIENT_FEATURE_REQUIREMENTS[name] ?? {
17
+ required: [],
18
+ optional: [],
19
+ };
20
+ return {
21
+ required: [...requirements.required],
22
+ optional: [...requirements.optional],
23
+ missing_required: requirements.required.filter((feature) => !clientFeatures[feature]),
24
+ missing_optional: requirements.optional.filter((feature) => !clientFeatures[feature]),
25
+ };
26
+ };