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,13 +1,38 @@
1
+ import { temporaryFilterHandle } from "./ReplaySeccompFile.js";
1
2
  import { constants } from "node:fs";
2
- import { mkdtemp, open, readFile, realpath, rm, stat, writeFile, } from "node:fs/promises";
3
- import { tmpdir } from "node:os";
4
- import { join } from "node:path";
3
+ import { open, readFile, realpath, stat } from "node:fs/promises";
5
4
  import { fileURLToPath } from "node:url";
6
5
  import { spawn } from "node:child_process";
7
6
  import { digestBytes } from "../application/JavaScriptReplayPlanning.js";
8
- import { buildLinuxX64ReplaySeccomp, linuxX64ReplaySeccompDigest, } from "./LinuxSeccompPolicy.js";
7
+ import { linuxX64ReplaySeccompDigest } from "./LinuxSeccompPolicy.js";
9
8
  import { resolveLinuxRuntimeClosure } from "./LinuxRuntimeClosure.js";
10
- const VERSION_OUTPUT_LIMIT = 16 * 1024;
9
+ import { readBoundedFileBytes } from "../process/BoundedFileBytes.js";
10
+ const bubblewrapProbeArguments = (command) => [
11
+ "--unshare-all",
12
+ "--unshare-user",
13
+ "--disable-userns",
14
+ "--new-session",
15
+ "--die-with-parent",
16
+ "--cap-drop",
17
+ "ALL",
18
+ "--ro-bind",
19
+ "/usr",
20
+ "/usr",
21
+ "--ro-bind",
22
+ "/lib",
23
+ "/lib",
24
+ "--ro-bind-try",
25
+ "/lib64",
26
+ "/lib64",
27
+ "--proc",
28
+ "/proc",
29
+ "--dev",
30
+ "/dev",
31
+ "--seccomp",
32
+ "3",
33
+ "--",
34
+ ...command,
35
+ ];
11
36
  /** Production planning host for descriptor-backed reads and fail-closed probes. */
12
37
  export class SystemJavaScriptReplayHost {
13
38
  async readSource(path, maximumBytes) {
@@ -17,7 +42,9 @@ export class SystemJavaScriptReplayHost {
17
42
  const metadata = await handle.stat();
18
43
  if (!metadata.isFile() || metadata.size > maximumBytes)
19
44
  throw new RangeError(`Replay source exceeds its declared limit: ${canonicalPath}`);
20
- const bytes = await handle.readFile();
45
+ const bytes = await readBoundedFileBytes(handle, maximumBytes);
46
+ if (bytes === undefined)
47
+ throw new RangeError(`Replay source exceeds its declared limit: ${canonicalPath}`);
21
48
  return { canonicalPath, bytes };
22
49
  }
23
50
  finally {
@@ -31,7 +58,7 @@ export class SystemJavaScriptReplayHost {
31
58
  throw new TypeError(`Replay executable is not a file: ${canonicalPath}`);
32
59
  const [bytes, version] = await Promise.all([
33
60
  readFile(canonicalPath),
34
- capture(canonicalPath, versionArguments, VERSION_OUTPUT_LIMIT),
61
+ capture(canonicalPath, versionArguments),
35
62
  ]);
36
63
  return {
37
64
  path: canonicalPath,
@@ -57,65 +84,14 @@ export class SystemJavaScriptReplayHost {
57
84
  if ((await readFile("/sys/fs/cgroup/cgroup.controllers", "utf8")).trim()
58
85
  .length === 0)
59
86
  throw new TypeError("Controlled replay requires delegated cgroup v2");
60
- const directory = await mkdtemp(join(tmpdir(), "rea-replay-probe-"));
61
- const filterPath = join(directory, "seccomp.bpf");
62
- await writeFile(filterPath, buildLinuxX64ReplaySeccomp(), { mode: 0o600 });
63
- const filter = await open(filterPath, "r");
87
+ const filter = await temporaryFilterHandle();
64
88
  try {
65
- await run(policy.bubblewrapPath, [
66
- "--unshare-all",
67
- "--unshare-user",
68
- "--disable-userns",
69
- "--new-session",
70
- "--die-with-parent",
71
- "--cap-drop",
72
- "ALL",
73
- "--ro-bind",
74
- "/usr",
75
- "/usr",
76
- "--ro-bind",
77
- "/lib",
78
- "/lib",
79
- "--ro-bind-try",
80
- "/lib64",
81
- "/lib64",
82
- "--proc",
83
- "/proc",
84
- "--dev",
85
- "/dev",
86
- "--seccomp",
87
- "3",
88
- "--",
89
- "/usr/bin/true",
90
- ], ["ignore", "pipe", "pipe", filter.fd]);
91
- await runExpectFailure(policy.bubblewrapPath, [
92
- "--unshare-all",
93
- "--unshare-user",
94
- "--disable-userns",
95
- "--new-session",
96
- "--die-with-parent",
97
- "--cap-drop",
98
- "ALL",
99
- "--ro-bind",
100
- "/usr",
101
- "/usr",
102
- "--ro-bind",
103
- "/lib",
104
- "/lib",
105
- "--ro-bind-try",
106
- "/lib64",
107
- "/lib64",
108
- "--proc",
109
- "/proc",
110
- "--dev",
111
- "/dev",
112
- "--seccomp",
113
- "3",
114
- "--",
89
+ await run(policy.bubblewrapPath, bubblewrapProbeArguments(["/usr/bin/true"]), ["ignore", "pipe", "pipe", filter.handle.fd]);
90
+ await runExpectFailure(policy.bubblewrapPath, bubblewrapProbeArguments([
115
91
  "/usr/bin/unshare",
116
92
  "--mount",
117
93
  "/usr/bin/true",
118
- ], ["ignore", "pipe", "pipe", filter.fd]);
94
+ ]), ["ignore", "pipe", "pipe", filter.handle.fd]);
119
95
  await run(policy.systemdRunPath, [
120
96
  "--user",
121
97
  "--pipe",
@@ -131,45 +107,40 @@ export class SystemJavaScriptReplayHost {
131
107
  }
132
108
  finally {
133
109
  await filter.close();
134
- await rm(directory, { recursive: true, force: true });
135
110
  }
136
111
  }
137
112
  }
138
- const capture = async (executable, arguments_, maximumBytes) => {
113
+ const capture = async (executable, arguments_) => {
139
114
  if (arguments_.length === 0)
140
115
  return "content-addressed-worker-v1";
141
- const result = await collect(executable, arguments_, maximumBytes);
116
+ const result = await collect(executable, arguments_);
142
117
  if (result.code !== 0)
143
118
  throw new TypeError(`Replay executable probe failed: ${executable}`);
144
119
  return result.stdout.length > 0 ? result.stdout : result.stderr;
145
120
  };
146
121
  const run = async (executable, arguments_, stdio) => {
147
- const result = await collect(executable, arguments_, VERSION_OUTPUT_LIMIT, stdio);
122
+ const result = await collect(executable, arguments_, stdio);
148
123
  if (result.code !== 0)
149
124
  throw new TypeError(`Replay feature probe failed (${String(result.code)}): ${executable}: ${result.stderr.trim()}`);
150
125
  };
151
126
  const runExpectFailure = async (executable, arguments_, stdio) => {
152
- const result = await collect(executable, arguments_, VERSION_OUTPUT_LIMIT, stdio);
127
+ const result = await collect(executable, arguments_, stdio);
153
128
  if (result.code === 0)
154
129
  throw new TypeError(`Replay denial probe unexpectedly succeeded: ${executable}`);
155
130
  };
156
- const collect = async (executable, arguments_, maximumBytes, stdio = ["ignore", "pipe", "pipe"]) => new Promise((resolve, reject) => {
131
+ const collect = async (executable, arguments_, stdio = ["ignore", "pipe", "pipe"]) => new Promise((resolve, reject) => {
157
132
  const child = spawn(executable, [...arguments_], { stdio });
158
133
  const timeout = setTimeout(() => child.kill("SIGKILL"), 5_000);
159
134
  timeout.unref();
160
135
  let stdout = "";
161
136
  let stderr = "";
162
- const retain = (current, chunk) => {
163
- const remaining = Math.max(0, maximumBytes - Buffer.byteLength(current));
164
- return current + chunk.subarray(0, remaining).toString("utf8");
165
- };
166
137
  if (child.stdout !== null)
167
138
  child.stdout.on("data", (chunk) => {
168
- stdout = retain(stdout, chunk);
139
+ stdout += chunk.toString("utf8");
169
140
  });
170
141
  if (child.stderr !== null)
171
142
  child.stderr.on("data", (chunk) => {
172
- stderr = retain(stderr, chunk);
143
+ stderr += chunk.toString("utf8");
173
144
  });
174
145
  child.once("error", (error) => {
175
146
  clearTimeout(timeout);
@@ -4,7 +4,6 @@ import { z } from "zod";
4
4
  import { PermissionRequiredError } from "../domain/errors.js";
5
5
  import { isPermissionRequestWithinCeiling, } from "../domain/permissionPolicy.js";
6
6
  const RESPONSE_KEY = "process_capture_grant";
7
- const STATE_VERSION = 1;
8
7
  /** Shared continuation, replay, and round limits for process capture consent. */
9
8
  export const PROCESS_CAPTURE_ELICITATION_POLICY = {
10
9
  protocolVersions: ["2026-07-28"],
@@ -22,7 +21,6 @@ const grantResponseJsonSchema = { ...z.toJSONSchema(grantResponseSchema) };
22
21
  Reflect.deleteProperty(grantResponseJsonSchema, "$schema");
23
22
  Reflect.deleteProperty(grantResponseJsonSchema, "additionalProperties");
24
23
  const stateSchema = z.strictObject({
25
- version: z.literal(STATE_VERSION),
26
24
  nonce: z.string().uuid(),
27
25
  request: z.strictObject({
28
26
  capability: z.literal("process_capture"),
@@ -37,14 +35,13 @@ const stateSchema = z.strictObject({
37
35
  });
38
36
  /** Authorize capture or return a signed MCP input-required continuation. */
39
37
  export const authorizeProcessCaptureWithElicitation = async (authority, request, context, elicitation) => {
40
- const supported = elicitation.supported(context);
41
38
  const initial = await authority.authorize(request, "read", {
42
- elicitationSupported: supported,
39
+ remediation: elicitation.supported(context) ? "elicit" : "configure",
43
40
  });
44
41
  if (initial.ok || !(initial.error instanceof PermissionRequiredError))
45
42
  return initial;
46
43
  const denied = initial.error;
47
- if (!supported ||
44
+ if (denied.remediation !== "elicit" ||
48
45
  denied.requested.capability !== "process_capture" ||
49
46
  denied.ceiling === null ||
50
47
  !isPermissionRequestWithinCeiling(denied.requested, denied.ceiling))
@@ -70,7 +67,6 @@ export const authorizeProcessCaptureWithElicitation = async (authority, request,
70
67
  return initial;
71
68
  }
72
69
  const state = await elicitation.stateCodec.mint({
73
- version: STATE_VERSION,
74
70
  nonce: randomUUID(),
75
71
  request: {
76
72
  capability: "process_capture",
@@ -106,12 +102,12 @@ const grantAndAuthorize = async (authority, request, lifetime) => {
106
102
  const granted = authority.grant(grant);
107
103
  if (!granted.ok)
108
104
  return authority.authorize(request, "read", {
109
- elicitationSupported: true,
105
+ remediation: "elicit",
110
106
  });
111
107
  let authorized;
112
108
  try {
113
109
  authorized = await authority.authorize(request, "read", {
114
- elicitationSupported: true,
110
+ remediation: "elicit",
115
111
  });
116
112
  }
117
113
  catch (cause) {
@@ -1,37 +1,77 @@
1
1
  import { randomBytes } from "node:crypto";
2
2
  import { CLIENT_CAPABILITIES_META_KEY, createRequestStateCodec, McpServer, PROTOCOL_VERSION_META_KEY, } from "@modelcontextprotocol/server";
3
+ import { MANAGED_RUNTIME_DISABLED } from "../application/ManagedRuntimeCorrelationService.js";
3
4
  import { PRODUCT_IDENTITY } from "../identity.js";
4
5
  import { silentLogger } from "../logger.js";
6
+ import { LinuxJavaScriptReplayRunner } from "../replay/LinuxJavaScriptReplayRunner.js";
7
+ import { SystemJavaScriptReplayHost } from "../replay/SystemJavaScriptReplayHost.js";
8
+ import { mcpEnvelopeValue } from "./mcpClientMetadata.js";
9
+ import { PROCESS_CAPTURE_ELICITATION_POLICY, } from "./ProcessCaptureElicitation.js";
10
+ import { registerApplicationTools } from "./registerApplicationTools.js";
11
+ import { registerArtifactTools } from "./registerArtifactTools.js";
12
+ import { registerBrowserScenarioTool } from "./registerBrowserScenarioTool.js";
13
+ import { registerBrowserTools } from "./registerBrowserTools.js";
14
+ import { registerElectronTools } from "./registerElectronTools.js";
15
+ import { registerEnhancedTools } from "./registerEnhancedTools.js";
16
+ import { registerJavaScriptRuntimeObservationTools } from "./registerJavaScriptRuntimeObservationTools.js";
17
+ import { registerManagedTools } from "./registerManagedTools.js";
18
+ import { registerManagedWorkflowTools } from "./registerManagedWorkflowTools.js";
19
+ import { registerNativeTools } from "./registerNativeTools.js";
20
+ import { registerOfficialTools } from "./registerOfficialTools.js";
5
21
  import { registerGuidedPrompts } from "./registerPrompts.js";
6
- import { registerEvidenceResources } from "./registerEvidenceResources.js";
22
+ import { registerSessionTools } from "./registerSessionTools.js";
7
23
  import { sessionAvailabilityPolicy } from "./sessionAvailabilityPolicy.js";
8
- import { DENY_EVIDENCE_FILE_POLICY, DENY_PROCESS_POLICY, } from "./sessionToolPolicies.js";
9
- import { installDynamicToolAvailability } from "./DynamicToolAvailability.js";
10
- const TARGET_FREE_INSTRUCTIONS = "ASAR/JavaScript -> analyze_javascript_application; archive/package -> open_binary(path), then inspect_artifact/inventory_artifact (active target); managed PE/CLI -> inspect_managed_artifact; passive browser/Electron -> list_browser_targets/list_electron_targets; approved browser interaction -> capture_browser_scenario; Node/Electron Inspector -> list_javascript_runtime_targets; native binary/database -> open_binary, then binary_overview. Start with binary_session; call only tools in tools/list. Hidden routes: binary_session detail=capabilities. Use summaries, cite Evidence IDs. Never repeat identical analysis or read full Evidence.";
11
- const ACTIVE_TARGET_INSTRUCTIONS = "REA analyzes the active reverse-engineering target. Start native analysis with binary_overview, then narrow with analyze_function, literal search, callers, callees, and xrefs. Prefer summary views, never repeat an identical call, and read full Evidence only when the task requires it.";
12
- import { PROCESS_CAPTURE_ELICITATION_POLICY, } from "./ProcessCaptureElicitation.js";
13
- import { LazyToolCatalog } from "./LazyToolCatalog.js";
24
+ import { DENY_PROCESS_POLICY } from "./sessionToolPolicies.js";
25
+ const TARGET_FREE_INSTRUCTIONS = "REA provides reverse-engineering tools for local artifacts, native binaries, managed code, browser pages, and runtimes. Use the tool that directly answers the question; discover targets or inspect inventory only when needed. Tool results include inline Evidence and report their coverage and limitations.";
26
+ const ACTIVE_TARGET_INSTRUCTIONS = "REA analyzes the active reverse-engineering target. Use the analysis tool that answers the question directly. Search or list symbols when discovery is needed; analyze_function provides a function dossier, and focused procedure tools return individual facets.";
14
27
  const installSessionToolAvailability = (server, session, options) => {
15
28
  if (session === undefined)
16
29
  return undefined;
17
30
  const policy = sessionAvailabilityPolicy(options.availabilityPolicy, {
18
- processPolicy: options.processPolicy ?? DENY_PROCESS_POLICY,
19
- evidenceFilePolicy: options.evidenceFilePolicy ?? DENY_EVIDENCE_FILE_POLICY,
20
- investigationInputRoots: options.investigationInputRoots ?? [],
31
+ processPolicy: options.processPolicy?.() ?? DENY_PROCESS_POLICY,
21
32
  optionalFeatures: {
22
33
  browserObservationEnabled: options.browserObservation !== undefined,
23
34
  browserScenarioEnabled: options.browserScenarioCapture !== undefined,
24
35
  electronObservationEnabled: options.electronObservation !== undefined,
36
+ electronAutomationEnabled: options.electronActiveObservation !== undefined &&
37
+ options.permissionAuthority !== undefined,
25
38
  v8InspectorObservationEnabled: options.javascriptRuntimeObservation !== undefined,
26
- javascriptReplayEnabled: options.javascriptReplayPolicy?.enabled ?? false,
27
- managedRuntimeEnabled: options.managedRuntimePolicy?.enabled ?? false,
39
+ javascriptReplayEnabled: options.javascriptReplayPolicy?.().status === "enabled",
40
+ managedRuntimeEnabled: options.managedRuntimePolicy?.().status === "enabled",
28
41
  },
29
42
  });
30
43
  return {
31
44
  policy,
32
- controller: installDynamicToolAvailability(server, session, policy),
33
45
  };
34
46
  };
47
+ const createProcessCaptureElicitation = (stateCodec) => ({
48
+ stateCodec,
49
+ supported: (context) => {
50
+ const envelope = context.mcpReq.envelope;
51
+ const version = mcpEnvelopeValue(envelope, PROTOCOL_VERSION_META_KEY);
52
+ const capabilities = mcpEnvelopeValue(envelope, CLIENT_CAPABILITIES_META_KEY);
53
+ return (typeof version === "string" &&
54
+ PROCESS_CAPTURE_ELICITATION_POLICY.protocolVersions.some((supported) => supported === version) &&
55
+ isRecord(capabilities) &&
56
+ isRecord(capabilities.elicitation) &&
57
+ capabilities.elicitation.form !== undefined);
58
+ },
59
+ now: Date.now,
60
+ consumedNonces: new Map(),
61
+ });
62
+ const createMcpServer = (processCaptureStateCodec, session) => new McpServer({
63
+ name: PRODUCT_IDENTITY.mcpServerKey,
64
+ version: PRODUCT_IDENTITY.packageVersion,
65
+ }, {
66
+ capabilities: {},
67
+ inputRequired: {
68
+ roundTimeoutMs: PROCESS_CAPTURE_ELICITATION_POLICY.roundTimeoutMs,
69
+ },
70
+ requestState: { verify: processCaptureStateCodec.verify },
71
+ instructions: session === undefined
72
+ ? ACTIVE_TARGET_INSTRUCTIONS
73
+ : TARGET_FREE_INSTRUCTIONS,
74
+ });
35
75
  /**
36
76
  * Construct one MCP server without acquiring subprocess resources.
37
77
  * Supplying a session adds target lifecycle tools; omitting it retains the
@@ -45,100 +85,42 @@ export const createServer = (analysis, session, options = {}) => {
45
85
  key: randomBytes(32),
46
86
  ttlSeconds: PROCESS_CAPTURE_ELICITATION_POLICY.stateTtlSeconds,
47
87
  });
48
- const server = new McpServer({
49
- name: PRODUCT_IDENTITY.mcpServerKey,
50
- version: PRODUCT_IDENTITY.packageVersion,
51
- }, {
52
- capabilities: {
53
- tools: { listChanged: true },
54
- resources: { listChanged: true, subscribe: true },
55
- },
56
- inputRequired: {
57
- maxRounds: 3,
58
- roundTimeoutMs: PROCESS_CAPTURE_ELICITATION_POLICY.roundTimeoutMs,
59
- },
60
- requestState: { verify: processCaptureStateCodec.verify },
61
- instructions: session === undefined
62
- ? ACTIVE_TARGET_INSTRUCTIONS
63
- : TARGET_FREE_INSTRUCTIONS,
64
- });
65
- const dynamicTools = installSessionToolAvailability(server, session, options);
88
+ const server = createMcpServer(processCaptureStateCodec, session);
89
+ const availability = installSessionToolAvailability(server, session, options);
66
90
  server.server.onclose = () => {
67
91
  permissionAuthority?.clearSessionGrants();
68
92
  };
69
- if (dynamicTools !== undefined)
70
- server.server.oninitialized = () => server.sendToolListChanged();
71
- session?.onAvailabilityChanged?.(() => server.sendToolListChanged());
72
- registerServerIdentityResource(server, startedAt);
73
93
  const toolLogger = logger.child({ layer: "server" });
74
94
  const { activeTarget, recordEvidence, recordEvidenceWithUnknown } = createSessionRecorders(server, session);
75
- const processCaptureElicitation = {
76
- stateCodec: processCaptureStateCodec,
77
- supported: (context) => {
78
- const envelope = context.mcpReq.envelope;
79
- const version = envelope?.[PROTOCOL_VERSION_META_KEY];
80
- const capabilities = envelope?.[CLIENT_CAPABILITIES_META_KEY];
81
- return (typeof version === "string" &&
82
- PROCESS_CAPTURE_ELICITATION_POLICY.protocolVersions.some((supported) => supported === version) &&
83
- isRecord(capabilities) &&
84
- isRecord(capabilities.elicitation) &&
85
- capabilities.elicitation.form !== undefined);
86
- },
87
- now: Date.now,
88
- consumedNonces: new Map(),
95
+ const processCaptureElicitation = createProcessCaptureElicitation(processCaptureStateCodec);
96
+ const toolContext = {
97
+ server,
98
+ analysis,
99
+ session,
100
+ options,
101
+ logger: toolLogger,
102
+ permissionAuthority,
103
+ activeTarget,
104
+ recordEvidence,
105
+ recordEvidenceWithUnknown,
89
106
  };
90
- let optionalProviders;
91
- const loadOptionalProviders = () => {
92
- optionalProviders ??= options
93
- .loadOptionalProviders?.()
94
- .catch((cause) => {
95
- optionalProviders = undefined;
96
- throw cause;
97
- });
98
- return optionalProviders;
99
- };
100
- const lazyTools = new LazyToolCatalog(server, async (kind) => {
101
- const needsObservationProviders = kind === "browser-provider" ||
102
- kind === "electron-provider" ||
103
- kind === "runtime-provider";
104
- const [{ hydrateServerToolFamily }, loadedOptionalProviders] = await Promise.all([
105
- import("./hydrateServerTools.js"),
106
- needsObservationProviders ? loadOptionalProviders() : undefined,
107
- ]);
108
- const hydratedOptions = loadedOptionalProviders === undefined
109
- ? options
110
- : { ...options, ...loadedOptionalProviders };
111
- await hydrateServerToolFamily({
112
- kind,
113
- server,
114
- analysis,
115
- session,
116
- options: hydratedOptions,
117
- context: {
118
- logger: toolLogger,
119
- permissionAuthority,
120
- activeTarget,
121
- recordEvidence,
122
- recordEvidenceWithUnknown,
123
- availabilityPolicy: dynamicTools?.policy,
124
- startedAt,
125
- processCaptureElicitation,
126
- },
127
- });
128
- }, session !== undefined);
129
- lazyTools.register();
107
+ registerBinaryAnalysisTools(toolContext);
108
+ registerObservationTools(toolContext);
130
109
  registerGuidedPrompts(server, analysis, session);
131
110
  if (session !== undefined) {
132
- registerEvidenceResources(server, session);
111
+ registerSessionTools(server, session, toolLogger, {
112
+ ...options,
113
+ ...(availability === undefined
114
+ ? {}
115
+ : { availabilityPolicy: availability.policy }),
116
+ ...(permissionAuthority === undefined ? {} : { permissionAuthority }),
117
+ startedAt,
118
+ processCaptureElicitation,
119
+ });
133
120
  }
134
- dynamicTools?.controller.synchronize();
135
- const close = server.close.bind(server);
136
- server.close = async () => {
137
- await lazyTools.close();
138
- await close();
139
- };
140
121
  return server;
141
122
  };
123
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
142
124
  const createSessionRecorders = (server, session) => ({
143
125
  activeTarget: session === undefined ? undefined : () => session.activeTarget(),
144
126
  recordEvidence: session === undefined
@@ -154,28 +136,72 @@ const createSessionRecorders = (server, session) => ({
154
136
  return recorded;
155
137
  },
156
138
  });
157
- const registerServerIdentityResource = (server, startedAt) => {
158
- server.registerResource("server-identity", "rea://server/identity", {
159
- title: "REA server identity",
160
- description: "Live package, SDK, protocol, and catalog identity.",
161
- mimeType: "application/json",
162
- }, async (uri) => {
163
- const { createServerIdentity } = await import("../serverIdentity.js");
164
- const client = server.server.getClientVersion();
165
- const protocolVersion = server.server.getNegotiatedProtocolVersion();
166
- return {
167
- contents: [
168
- {
169
- uri: uri.href,
170
- mimeType: "application/json",
171
- text: JSON.stringify(createServerIdentity({
172
- startedAt,
173
- ...(client === undefined ? {} : { client }),
174
- ...(protocolVersion === undefined ? {} : { protocolVersion }),
175
- }), null, 2),
176
- },
177
- ],
178
- };
139
+ const registerBinaryAnalysisTools = ({ server, analysis, session, options, logger, permissionAuthority, activeTarget, recordEvidence, recordEvidenceWithUnknown, }) => {
140
+ const recordUnknown = session === undefined
141
+ ? undefined
142
+ : (input) => session.recordUnknown(input);
143
+ const analysisOptions = {
144
+ logger,
145
+ activeTarget,
146
+ recordEvidence,
147
+ recordUnknown,
148
+ };
149
+ registerOfficialTools(server, analysis, analysisOptions);
150
+ registerEnhancedTools(server, analysis, {
151
+ ...analysisOptions,
152
+ analysisProfile: session === undefined ? undefined : () => session.analysisProfile(),
153
+ });
154
+ const evidenceOptions = { logger, activeTarget, recordEvidence };
155
+ registerNativeTools(server, analysis, evidenceOptions);
156
+ registerArtifactTools(server, analysis, {
157
+ ...evidenceOptions,
158
+ ...(permissionAuthority === undefined ? {} : { permissionAuthority }),
159
+ });
160
+ registerManagedTools(server, analysis, {
161
+ ...evidenceOptions,
162
+ session,
163
+ });
164
+ if (session !== undefined)
165
+ registerManagedWorkflowTools(server, {
166
+ logger,
167
+ recordEvidence,
168
+ recordEvidenceWithUnknown,
169
+ session,
170
+ runtime: {
171
+ policy: options.managedRuntimePolicy ?? (() => MANAGED_RUNTIME_DISABLED),
172
+ authority: permissionAuthority,
173
+ },
174
+ });
175
+ };
176
+ const registerObservationTools = ({ server, options, logger, permissionAuthority, recordEvidence, recordEvidenceWithUnknown, }) => {
177
+ const common = { logger, permissionAuthority, recordEvidence };
178
+ registerBrowserTools(server, {
179
+ ...common,
180
+ browser: options.browserObservation,
181
+ });
182
+ registerBrowserScenarioTool(server, {
183
+ ...common,
184
+ provider: options.browserScenarioCapture,
185
+ });
186
+ registerElectronTools(server, {
187
+ ...common,
188
+ electron: options.electronObservation,
189
+ electronActive: options.electronActiveObservation,
190
+ });
191
+ registerJavaScriptRuntimeObservationTools(server, {
192
+ ...common,
193
+ runtime: options.javascriptRuntimeObservation,
194
+ });
195
+ registerApplicationTools(server, {
196
+ logger,
197
+ recordEvidence,
198
+ recordEvidenceWithUnknown,
199
+ permissionAuthority,
200
+ replay: {
201
+ policy: options.javascriptReplayPolicy ?? (() => ({ status: "disabled" })),
202
+ host: options.javascriptReplayHost ?? new SystemJavaScriptReplayHost(),
203
+ runner: options.javascriptReplayRunner ?? new LinuxJavaScriptReplayRunner(),
204
+ authority: permissionAuthority,
205
+ },
179
206
  });
180
207
  };
181
- const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
@@ -0,0 +1,32 @@
1
+ import { CLIENT_CAPABILITIES_META_KEY, CLIENT_INFO_META_KEY, PROTOCOL_VERSION_META_KEY, } from "@modelcontextprotocol/server";
2
+ /** Client metadata bound to the current SDK request rather than server-global state. */
3
+ export const mcpClientMetadata = (context) => {
4
+ const envelope = context.mcpReq.envelope;
5
+ const client = implementation(mcpEnvelopeValue(envelope, CLIENT_INFO_META_KEY));
6
+ const protocolVersion = mcpEnvelopeValue(envelope, PROTOCOL_VERSION_META_KEY);
7
+ return {
8
+ ...(client === undefined ? {} : { client }),
9
+ clientFeatures: capabilityFeatures(mcpEnvelopeValue(envelope, CLIENT_CAPABILITIES_META_KEY)),
10
+ ...(typeof protocolVersion === "string" ? { protocolVersion } : {}),
11
+ };
12
+ };
13
+ /** Read an SDK-defined metadata key from the SDK's currently opaque envelope type. */
14
+ export const mcpEnvelopeValue = (envelope, key) => (envelope === undefined ? undefined : Reflect.get(envelope, key));
15
+ const implementation = (value) => isRecord(value) &&
16
+ typeof value.name === "string" &&
17
+ typeof value.version === "string"
18
+ ? { name: value.name, version: value.version }
19
+ : undefined;
20
+ const capabilityFeatures = (value) => {
21
+ const capabilities = isRecord(value) ? value : {};
22
+ const elicitation = isRecord(capabilities.elicitation)
23
+ ? capabilities.elicitation
24
+ : {};
25
+ return {
26
+ elicitation_form: elicitation.form !== undefined,
27
+ elicitation_url: elicitation.url !== undefined,
28
+ roots: capabilities.roots !== undefined,
29
+ sampling: capabilities.sampling !== undefined,
30
+ };
31
+ };
32
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);