rea-agents 3.0.0 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (628) hide show
  1. package/README.md +83 -108
  2. package/bridge/ghidra/ReaGhidraBridge.java +609 -841
  3. package/bridge/hopper_bridge.py +99 -344
  4. package/dist/application/AbortablePromise.js +6 -3
  5. package/dist/application/AnalysisContextQueries.js +21 -9
  6. package/dist/application/AnalysisSnapshotCache.js +0 -1
  7. package/dist/application/AnalysisSnapshotFiles.js +7 -7
  8. package/dist/application/AndroidApplicationService.js +1 -1
  9. package/dist/application/AppleApplicationService.js +1 -1
  10. package/dist/application/ArtifactExtraction.js +35 -54
  11. package/dist/application/ArtifactExtractionDestination.js +17 -0
  12. package/dist/application/ArtifactGraphConstruction.js +2 -17
  13. package/dist/application/ArtifactInventory/classify.js +2 -6
  14. package/dist/application/ArtifactInventory/hash.js +2 -20
  15. package/dist/application/ArtifactInventory/policy.js +17 -0
  16. package/dist/application/ArtifactInventory/reader.js +1 -4
  17. package/dist/application/ArtifactInventory/scanCanonical.js +8 -15
  18. package/dist/application/ArtifactInventory/scanReader.js +76 -58
  19. package/dist/application/ArtifactInventory/types.js +1 -5
  20. package/dist/application/ArtifactInventory.js +6 -14
  21. package/dist/application/AuthorizedArtifactInventory.js +3 -13
  22. package/dist/application/BinarySession.js +54 -28
  23. package/dist/application/BinarySessionComposition.js +0 -11
  24. package/dist/application/BinarySessionOpen.js +2 -1
  25. package/dist/application/BinarySessionRecords.js +24 -86
  26. package/dist/application/BinarySessionStatus.js +16 -21
  27. package/dist/application/BinaryTargetResolver.js +216 -0
  28. package/dist/application/BrowserEvidence.js +39 -57
  29. package/dist/application/BrowserObservationService.js +3 -6
  30. package/dist/application/BrowserScenarioCaptureService.js +3 -6
  31. package/dist/application/BrowserScenarioEvidence.js +3 -3
  32. package/dist/application/CallPathTracing.js +2 -36
  33. package/dist/application/CapabilityClientRequirements.js +26 -0
  34. package/dist/application/CapabilityInventory.js +143 -77
  35. package/dist/application/ClientConfigurationDocument.js +27 -0
  36. package/dist/application/ClientRegistrationStatus.js +16 -13
  37. package/dist/application/CommandShimReplay.js +14 -1
  38. package/dist/application/DirectAnalysis.js +22 -46
  39. package/dist/application/DirectAnalysisStatus.js +5 -61
  40. package/dist/application/Doctor.js +11 -32
  41. package/dist/application/DoctorDiagnostics.js +1 -2
  42. package/dist/application/DoctorScope.js +1 -1
  43. package/dist/application/ElectronActiveEvidence.js +50 -0
  44. package/dist/application/ElectronActiveObservationPort.js +1 -0
  45. package/dist/application/ElectronActiveObservationService.js +78 -0
  46. package/dist/application/ElectronBoundaryAnalysis.js +7 -8
  47. package/dist/application/ElectronBoundaryGraphContext.js +1 -1
  48. package/dist/application/ElectronBoundaryGraphIpc.js +3 -3
  49. package/dist/application/ElectronBoundaryGraphNative.js +1 -2
  50. package/dist/application/ElectronBoundaryGraphWindows.js +6 -8
  51. package/dist/application/ElectronEvidence.js +4 -7
  52. package/dist/application/ElectronObservationService.js +5 -9
  53. package/dist/application/EnhancedLiteralTracing.js +42 -65
  54. package/dist/application/EnhancedTools.js +98 -64
  55. package/dist/application/EvidenceBundleCommands.js +16 -12
  56. package/dist/application/EvidenceBundleFiles.js +9 -15
  57. package/dist/application/EvidenceLedger.js +14 -42
  58. package/dist/application/FilesystemSnapshot.js +2 -3
  59. package/dist/application/InterfaceBuilderAnalysis.js +266 -0
  60. package/dist/application/InventoryProjectionEvidence.js +4 -2
  61. package/dist/application/InvestigationProviders.js +1 -1
  62. package/dist/application/JavaScriptApplicationEvidence.js +2 -5
  63. package/dist/application/JavaScriptApplicationEvidenceGraph.js +6 -10
  64. package/dist/application/JavaScriptApplicationService.js +6 -29
  65. package/dist/application/JavaScriptApplicationWorkflowEvidence.js +5 -5
  66. package/dist/application/JavaScriptApplicationWorkflowService.js +0 -8
  67. package/dist/application/JavaScriptArtifactAnalysis.js +38 -127
  68. package/dist/application/JavaScriptArtifactFiles.js +67 -107
  69. package/dist/application/JavaScriptArtifactGraphAccumulator.js +0 -7
  70. package/dist/application/JavaScriptArtifactGraphBuilder.js +7 -58
  71. package/dist/application/JavaScriptArtifactGraphBundlers.js +1 -6
  72. package/dist/application/JavaScriptArtifactGraphContext.js +12 -39
  73. package/dist/application/JavaScriptArtifactGraphDocuments.js +4 -11
  74. package/dist/application/JavaScriptArtifactGraphEvidence.js +0 -14
  75. package/dist/application/JavaScriptArtifactGraphFindings.js +3 -3
  76. package/dist/application/JavaScriptArtifactGraphStructure.js +16 -17
  77. package/dist/application/JavaScriptArtifactPathResolution.js +61 -49
  78. package/dist/application/JavaScriptArtifactReconstruction.js +5 -10
  79. package/dist/application/JavaScriptArtifactReconstructionInput.js +2 -14
  80. package/dist/application/JavaScriptJsonModules.js +2 -2
  81. package/dist/application/JavaScriptModuleRelationships.js +22 -27
  82. package/dist/application/JavaScriptReplayPermission.js +1 -1
  83. package/dist/application/JavaScriptReplayPlanning.js +9 -3
  84. package/dist/application/JavaScriptReplayService.js +29 -47
  85. package/dist/application/JavaScriptReturnShapeProjection.js +12 -42
  86. package/dist/application/JavaScriptRuntimeObservationEvidence.js +7 -8
  87. package/dist/application/JavaScriptRuntimeObservationService.js +4 -8
  88. package/dist/application/JavaScriptRuntimeReconciliationEvidence.js +2 -3
  89. package/dist/application/JavaScriptSemanticGraphBuilder.js +11 -41
  90. package/dist/application/JavaScriptSemanticGraphConstruction.js +5 -29
  91. package/dist/application/JavaScriptSemanticGraphEvidence.js +1 -1
  92. package/dist/application/JavaScriptSemanticGraphFingerprintProjection.js +1 -1
  93. package/dist/application/JavaScriptSemanticGraphFlowProjection.js +0 -13
  94. package/dist/application/JavaScriptSemanticGraphProjection.js +1 -3
  95. package/dist/application/JavaScriptSemanticTraceService.js +1 -10
  96. package/dist/application/JsonFiles.js +79 -0
  97. package/dist/application/LinuxHopper.js +11 -9
  98. package/dist/application/LoopbackReplay.js +26 -23
  99. package/dist/application/LoopbackReplayRecorder.js +29 -1
  100. package/dist/application/ManagedApplicationGraphService.js +1 -2
  101. package/dist/application/ManagedMemberComparisonService.js +11 -41
  102. package/dist/application/ManagedNativeVerificationService.js +1 -2
  103. package/dist/application/ManagedReconstructionService.js +1 -1
  104. package/dist/application/ManagedRuntimeCorrelationService.js +14 -13
  105. package/dist/application/NativeApiInspection.js +2 -7
  106. package/dist/application/NativeUiActionTrace.js +394 -0
  107. package/dist/application/NodeRuntimeCharacterizationService.js +11 -16
  108. package/dist/application/PermissionAuthority.js +15 -7
  109. package/dist/application/PermissionFailure.js +5 -0
  110. package/dist/application/ProcessCaptureAuthority.js +5 -7
  111. package/dist/application/ProcessCaptureJournal.js +3 -2
  112. package/dist/application/ProcessCaptureLifecycle.js +10 -12
  113. package/dist/application/ProcessCheckpoints.js +29 -11
  114. package/dist/application/ProcessCli.js +8 -17
  115. package/dist/application/ProcessEvidence.js +5 -7
  116. package/dist/application/ProcessHarness.js +60 -20
  117. package/dist/application/ProcessNormalization.js +2 -1
  118. package/dist/application/ProcessReactiveCoordinator.js +2 -4
  119. package/dist/application/ProcessReactiveEffects.js +9 -3
  120. package/dist/application/ProcessReactiveHarness.js +13 -7
  121. package/dist/application/ProcessSampling.js +2 -4
  122. package/dist/application/ProcessTimer.js +39 -0
  123. package/dist/application/ProjectPermissionStore.js +39 -95
  124. package/dist/application/RealHopperAssertions.js +20 -66
  125. package/dist/application/ReconstructionCoverageService.js +12 -58
  126. package/dist/application/ReconstructionObligationAuthority.js +2 -2
  127. package/dist/application/ReconstructionObligationCandidates.js +4 -4
  128. package/dist/application/ReconstructionObligationLedgerEvaluation.js +8 -15
  129. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -7
  130. package/dist/application/ReconstructionObligationLedgerService.js +19 -38
  131. package/dist/application/ReferenceSourceImport.js +21 -47
  132. package/dist/application/ReferenceSourceImportEntries.js +2 -4
  133. package/dist/application/ReferenceSourceImportPolicy.js +5 -32
  134. package/dist/application/ReferenceSourceImportTypes.js +0 -16
  135. package/dist/application/RuntimeExecutableDiagnostics.js +55 -29
  136. package/dist/application/SessionProviderRouter.js +2 -2
  137. package/dist/application/Setup.js +1 -3
  138. package/dist/application/SetupClientConfiguration.js +22 -88
  139. package/dist/application/SetupRegistrationEnvironment.js +0 -7
  140. package/dist/application/StoreFileLock.js +119 -0
  141. package/dist/application/TerminalRenderer.js +2 -3
  142. package/dist/application/Uninstall.js +9 -14
  143. package/dist/application/UnknownEvidence.js +1 -1
  144. package/dist/application/WindowsCapabilities.js +5 -4
  145. package/dist/artifacts/ArtifactPaths.js +2 -5
  146. package/dist/artifacts/ArtifactProvider.js +43 -67
  147. package/dist/artifacts/DirectoryArtifactReader.js +13 -8
  148. package/dist/artifacts/MachOSliceArtifactReader.js +1 -5
  149. package/dist/artifacts/NativeDmgArtifactReader.js +11 -11
  150. package/dist/artifacts/NibArchive.js +269 -0
  151. package/dist/artifacts/SafeOutputTree.js +21 -31
  152. package/dist/browser/BrowserProcessStartup.js +1 -2
  153. package/dist/browser/CdpAuthorizedMainFrame.js +16 -0
  154. package/dist/browser/CdpBrowserProvider.js +3 -13
  155. package/dist/browser/CdpCanonicalJsonDigest.js +9 -0
  156. package/dist/browser/CdpCaptureDocuments.js +28 -76
  157. package/dist/browser/CdpCaptureEventBodyShapes.js +13 -33
  158. package/dist/browser/CdpCaptureEventHandlers.js +22 -87
  159. package/dist/browser/CdpCaptureEvents.js +2 -8
  160. package/dist/browser/CdpCaptureStorage.js +9 -20
  161. package/dist/browser/CdpCaptureStorageFingerprints.js +85 -95
  162. package/dist/browser/CdpCaptureValues.js +21 -21
  163. package/dist/browser/CdpConnection.js +10 -25
  164. package/dist/browser/CdpElectronInspection.js +29 -51
  165. package/dist/browser/CdpElectronProvider.js +10 -35
  166. package/dist/browser/CdpElectronScriptEvents.js +8 -16
  167. package/dist/browser/CdpElectronScripts.js +6 -35
  168. package/dist/browser/CdpElectronWorkers.js +6 -10
  169. package/dist/browser/CdpEndpoint.js +25 -41
  170. package/dist/browser/CdpObservationSession.js +14 -26
  171. package/dist/browser/CdpPageCapture.js +34 -48
  172. package/dist/browser/CdpPageCaptureScripts.js +1 -19
  173. package/dist/browser/CdpPageCaptureWorkers.js +6 -10
  174. package/dist/browser/CdpSafeMetadata.js +19 -22
  175. package/dist/browser/CdpScreenshot.js +3 -5
  176. package/dist/browser/CdpTargetSession.js +1 -2
  177. package/dist/browser/CdpWebMcpDiscovery.js +13 -22
  178. package/dist/browser/ElectronFileScope.js +8 -19
  179. package/dist/browser/JavaScriptRuntimeScope.js +10 -10
  180. package/dist/browser/PlaywrightBrowserScenarioProvider.js +31 -64
  181. package/dist/browser/PlaywrightElectronActiveActions.js +309 -0
  182. package/dist/browser/PlaywrightElectronActiveProvider.js +274 -0
  183. package/dist/browser/PlaywrightExecutionBoundary.js +16 -5
  184. package/dist/browser/PlaywrightScenarioActions.js +3 -7
  185. package/dist/browser/PlaywrightScenarioArtifacts.js +23 -92
  186. package/dist/browser/PlaywrightScenarioBrowser.js +7 -9
  187. package/dist/browser/PlaywrightScenarioEvents.js +45 -94
  188. package/dist/browser/PlaywrightScenarioSession.js +18 -34
  189. package/dist/browser/PngVisualDiff.js +22 -14
  190. package/dist/browser/SensitiveTextCapture.js +1 -18
  191. package/dist/browser/V8InspectorCaptureProjection.js +7 -7
  192. package/dist/browser/V8InspectorEndpoint.js +12 -14
  193. package/dist/browser/V8InspectorProvider.js +20 -61
  194. package/dist/browser/WebSourceMapFetcher.js +56 -176
  195. package/dist/catalogIdentity.js +12 -60
  196. package/dist/cli/artifactCommands.js +49 -77
  197. package/dist/cli/coreAnalysisCommands.js +83 -133
  198. package/dist/cli/javascriptApplicationAnalysis.js +1 -9
  199. package/dist/cli/managedCommands.js +6 -271
  200. package/dist/cli/setupCommands.js +3 -12
  201. package/dist/cli/utilityCommands.js +7 -41
  202. package/dist/cli.js +0 -2
  203. package/dist/cliApplicationCommands.js +44 -114
  204. package/dist/cliBrowserAdvancedCommands.js +12 -102
  205. package/dist/cliBrowserCommands.js +19 -124
  206. package/dist/cliBrowserContext.js +30 -0
  207. package/dist/cliCommandNames.js +5 -5
  208. package/dist/cliElectronCommands.js +49 -71
  209. package/dist/cliEvidenceCommands.js +8 -77
  210. package/dist/cliJavaScriptRuntimeCommands.js +18 -92
  211. package/dist/cliJsonInput.js +4 -14
  212. package/dist/cliObservationOptions.js +11 -92
  213. package/dist/cliPolicyCommands.js +2 -16
  214. package/dist/cliProcessCommands.js +3 -3
  215. package/dist/cliSetup.js +0 -13
  216. package/dist/config/browserScenario.js +77 -0
  217. package/dist/config/electronAutomation.js +35 -0
  218. package/dist/config/environment.js +6 -9
  219. package/dist/config/javascriptReplay.js +41 -0
  220. package/dist/config/managedRuntime.js +25 -0
  221. package/dist/config/parseConfig.js +56 -232
  222. package/dist/config/parsers.js +16 -28
  223. package/dist/config/passiveObservation.js +87 -0
  224. package/dist/config/permissions.js +0 -7
  225. package/dist/config/processCapture.js +47 -0
  226. package/dist/contracts/analysisSearchContract.js +2 -5
  227. package/dist/contracts/applicationToolContracts.js +58 -114
  228. package/dist/contracts/applicationWorkflowInputContracts.js +29 -114
  229. package/dist/contracts/artifactComparisonExample.js +58 -60
  230. package/dist/contracts/artifactToolContracts.js +37 -91
  231. package/dist/contracts/browserScenarioToolContracts.js +6 -51
  232. package/dist/contracts/browserToolContracts.js +10 -75
  233. package/dist/contracts/electronToolContracts.js +27 -98
  234. package/dist/contracts/enhancedInputs.js +31 -78
  235. package/dist/contracts/errorSchemas.js +0 -1
  236. package/dist/contracts/functionComparisonExample.js +10 -24
  237. package/dist/contracts/functionInstructionContract.js +1 -3
  238. package/dist/contracts/functionWorkflowToolContracts.js +4 -5
  239. package/dist/contracts/hopperMemoryContracts.js +3 -3
  240. package/dist/contracts/investigationExamples.js +14 -11
  241. package/dist/contracts/javascriptApplicationWorkflowExamples.js +12 -19
  242. package/dist/contracts/javascriptRuntimeObservationToolContracts.js +2 -20
  243. package/dist/contracts/javascriptRuntimeReconciliationExample.js +45 -12
  244. package/dist/contracts/managedToolContracts.js +10 -104
  245. package/dist/contracts/managedWorkflowExamples.js +77 -125
  246. package/dist/contracts/managedWorkflowToolContracts.js +51 -74
  247. package/dist/contracts/nativeToolContracts.js +9 -14
  248. package/dist/contracts/processCaptureExample.js +2 -69
  249. package/dist/contracts/promptContracts.js +49 -67
  250. package/dist/contracts/providerSelection.js +0 -1
  251. package/dist/contracts/reconstructionReadinessExample.js +1 -6
  252. package/dist/contracts/sessionStatusContract.js +1 -17
  253. package/dist/contracts/sessionToolSchemas.js +52 -0
  254. package/dist/contracts/toolContractExamples.js +11 -10
  255. package/dist/contracts/toolContractHelpers.js +19 -0
  256. package/dist/contracts/toolContracts.js +60 -143
  257. package/dist/contracts/toolEffects.js +16 -9
  258. package/dist/contracts/toolOutputSchemaGroups.js +47 -86
  259. package/dist/contracts/toolOutputSchemaPrimitives.js +72 -62
  260. package/dist/contracts/toolSchemaMetadata.js +117 -0
  261. package/dist/contracts/unknownContractExamples.js +0 -2
  262. package/dist/doctorRuntime.js +1 -1
  263. package/dist/domain/analysisErrorPresentation.js +46 -54
  264. package/dist/domain/analysisErrorProjection.js +28 -37
  265. package/dist/domain/analysisProfile.js +3 -31
  266. package/dist/domain/analysisSnapshot.js +3 -12
  267. package/dist/domain/androidApplication.js +15 -52
  268. package/dist/domain/appleApplication.js +24 -65
  269. package/dist/domain/artifactComparison.js +11 -29
  270. package/dist/domain/artifactGraph.js +14 -44
  271. package/dist/domain/artifactInspection.js +38 -69
  272. package/dist/domain/artifactInventoryEvidence.js +27 -21
  273. package/dist/domain/binaryTarget.js +2 -219
  274. package/dist/domain/binaryTargetTypes.js +1 -0
  275. package/dist/domain/browserCaptureComparison.js +35 -60
  276. package/dist/domain/browserObservation.js +45 -197
  277. package/dist/domain/browserObservationSchemas.js +5 -23
  278. package/dist/domain/browserScenario.js +11 -14
  279. package/dist/domain/browserScenarioCapture.js +11 -12
  280. package/dist/domain/browserScenarioCaptureValues.js +146 -84
  281. package/dist/domain/browserScenarioDiff.js +2 -59
  282. package/dist/domain/browserScenarioDiffEvidence.js +51 -0
  283. package/dist/domain/browserScenarioDiffValues.js +21 -38
  284. package/dist/domain/browserScenarioValues.js +80 -109
  285. package/dist/domain/browserSession.js +4 -7
  286. package/dist/domain/bundleComparison.js +6 -32
  287. package/dist/domain/bytecodeProvider.js +53 -54
  288. package/dist/domain/callPath.js +50 -169
  289. package/dist/domain/callPathSchemas.js +79 -0
  290. package/dist/domain/changedBehavior.js +34 -60
  291. package/dist/domain/completionLedgerGeneration.js +8 -14
  292. package/dist/domain/conformancePackage.js +126 -97
  293. package/dist/domain/conformanceReplay.js +39 -11
  294. package/dist/domain/conformanceTrustGate.js +174 -30
  295. package/dist/domain/customProtocolCapture.js +4 -4
  296. package/dist/domain/electronActiveObservation.js +244 -0
  297. package/dist/domain/electronObservation.js +21 -83
  298. package/dist/domain/electronStaticAnalysisBrowser.js +36 -46
  299. package/dist/domain/electronStaticAnalysisIpc.js +38 -14
  300. package/dist/domain/electronStaticAnalysisNative.js +1 -8
  301. package/dist/domain/electronStaticAnalysisValues.js +14 -18
  302. package/dist/domain/errors.js +33 -54
  303. package/dist/domain/eventProcessTree.js +101 -90
  304. package/dist/domain/evidence.js +2 -10
  305. package/dist/domain/evidenceBundle.js +3 -5
  306. package/dist/domain/evidenceCompletionLedger.js +6 -8
  307. package/dist/domain/functionComparison.js +4 -14
  308. package/dist/domain/functionComparisonNormalization.js +8 -8
  309. package/dist/domain/functionComparisonResults.js +25 -15
  310. package/dist/domain/functionComparisonSchemas.js +49 -33
  311. package/dist/domain/functionDossierEvidence.js +31 -151
  312. package/dist/domain/hopperStartupFailure.js +1 -1
  313. package/dist/domain/hopperValues.js +17 -141
  314. package/dist/domain/inputIssueProjection.js +4 -1
  315. package/dist/domain/interfaceBuilderGraph.js +654 -0
  316. package/dist/domain/javascriptApplicationAnalysis.js +8 -112
  317. package/dist/domain/javascriptApplicationChangeGraph.js +22 -82
  318. package/dist/domain/javascriptApplicationEvidenceSchemas.js +59 -47
  319. package/dist/domain/javascriptApplicationGraph.js +3 -13
  320. package/dist/domain/javascriptApplicationGraphSchemas.js +12 -34
  321. package/dist/domain/javascriptApplicationVersionComparison.js +26 -30
  322. package/dist/domain/javascriptApplicationVersionComparisonSchemas.js +123 -68
  323. package/dist/domain/javascriptApplicationVersionItems.js +120 -53
  324. package/dist/domain/javascriptApplicationVersionKeys.js +24 -11
  325. package/dist/domain/javascriptAstFingerprint.js +25 -58
  326. package/dist/domain/javascriptAstValues.js +9 -0
  327. package/dist/domain/javascriptExportInstrumentation.js +2 -4
  328. package/dist/domain/javascriptExportShapeComparison.js +6 -7
  329. package/dist/domain/javascriptExportShapeComparisonSchemas.js +70 -77
  330. package/dist/domain/javascriptExportShapeSelection.js +17 -19
  331. package/dist/domain/javascriptFeatureSeed.js +20 -12
  332. package/dist/domain/javascriptFeatureTrace.js +13 -67
  333. package/dist/domain/javascriptFeatureTraceSchemas.js +24 -52
  334. package/dist/domain/javascriptFeatureTraversal.js +1 -44
  335. package/dist/domain/javascriptNativeHandoff.js +1 -1
  336. package/dist/domain/javascriptReplay.js +100 -101
  337. package/dist/domain/javascriptRuntimeLoadState.js +3 -8
  338. package/dist/domain/javascriptRuntimeObservation.js +43 -103
  339. package/dist/domain/javascriptRuntimeReconciliation.js +1 -3
  340. package/dist/domain/javascriptRuntimeReconciliationActive.js +80 -0
  341. package/dist/domain/javascriptRuntimeReconciliationGraph.js +21 -33
  342. package/dist/domain/javascriptRuntimeReconciliationMatching.js +75 -61
  343. package/dist/domain/javascriptRuntimeReconciliationParsing.js +21 -46
  344. package/dist/domain/javascriptRuntimeReconciliationResult.js +25 -19
  345. package/dist/domain/javascriptRuntimeReconciliationRuntime.js +8 -12
  346. package/dist/domain/javascriptRuntimeReconciliationSchemas.js +34 -49
  347. package/dist/domain/javascriptRuntimeStaticCandidates.js +3 -3
  348. package/dist/domain/javascriptSemanticAnalysis.js +12 -45
  349. package/dist/domain/javascriptSemanticAsyncEffects.js +1 -9
  350. package/dist/domain/javascriptSemanticCallResolution.js +6 -16
  351. package/dist/domain/javascriptSemanticCalls.js +5 -32
  352. package/dist/domain/javascriptSemanticChildProcesses.js +1 -11
  353. package/dist/domain/javascriptSemanticCoverage.js +11 -0
  354. package/dist/domain/javascriptSemanticDataEffectHelpers.js +1 -8
  355. package/dist/domain/javascriptSemanticDataEffects.js +1 -11
  356. package/dist/domain/javascriptSemanticFingerprints.js +3 -5
  357. package/dist/domain/javascriptSemanticGraphSchemas.js +25 -51
  358. package/dist/domain/javascriptSemanticGraphSerialization.js +2 -13
  359. package/dist/domain/javascriptSemanticIr.js +1 -29
  360. package/dist/domain/javascriptSemanticObjects.js +1 -5
  361. package/dist/domain/javascriptSemanticPrimitives.js +2 -9
  362. package/dist/domain/javascriptSemanticProjection.js +0 -18
  363. package/dist/domain/javascriptSemanticPromises.js +9 -16
  364. package/dist/domain/javascriptSemanticProvenance.js +16 -19
  365. package/dist/domain/javascriptSemanticQuery.js +17 -139
  366. package/dist/domain/javascriptSemanticQueryAssessment.js +9 -37
  367. package/dist/domain/javascriptSemanticQueryIdentity.js +2 -23
  368. package/dist/domain/javascriptSemanticQuerySchemas.js +14 -107
  369. package/dist/domain/javascriptSemanticResources.js +1 -6
  370. package/dist/domain/javascriptSemanticReturns.js +10 -27
  371. package/dist/domain/javascriptSemanticValueTypes.js +1 -0
  372. package/dist/domain/javascriptSemanticValues.js +44 -62
  373. package/dist/domain/javascriptStaticAnalysis.js +21 -43
  374. package/dist/domain/javascriptStaticAnalysisBundler.js +34 -93
  375. package/dist/domain/javascriptStaticAnalysisCalls.js +17 -16
  376. package/dist/domain/javascriptStaticAnalysisFindings.js +3 -19
  377. package/dist/domain/javascriptStaticAnalysisHelpers.js +47 -88
  378. package/dist/domain/javascriptStaticAnalysisState.js +1 -5
  379. package/dist/domain/javascriptStaticAnalysisTypes.js +1 -0
  380. package/dist/domain/jsonShape.js +7 -33
  381. package/dist/domain/localPath.js +7 -0
  382. package/dist/domain/managedApplicationGraph.js +9 -41
  383. package/dist/domain/managedApplicationGraphCoverage.js +24 -156
  384. package/dist/domain/managedApplicationGraphNodes.js +10 -13
  385. package/dist/domain/managedArtifact.js +14 -27
  386. package/dist/domain/managedMemberComparison.js +90 -92
  387. package/dist/domain/managedMemberComparisonCoverage.js +11 -33
  388. package/dist/domain/managedMemberComparisonItems.js +221 -0
  389. package/dist/domain/managedMemberComparisonMatch.js +8 -208
  390. package/dist/domain/managedNativeVerification.js +3 -6
  391. package/dist/domain/managedNativeVerificationMatch.js +55 -59
  392. package/dist/domain/managedNativeVerificationSchemas.js +83 -47
  393. package/dist/domain/managedReconstruction.js +19 -23
  394. package/dist/domain/managedRuntimeCorrelation.js +6 -9
  395. package/dist/domain/nativeApiBoundary.js +17 -14
  396. package/dist/domain/nativeInspection.js +0 -2
  397. package/dist/domain/nativeInvestigationGraph.js +351 -0
  398. package/dist/domain/nativeValueFlow.js +61 -0
  399. package/dist/domain/nodeRuntimeCharacterization.js +15 -18
  400. package/dist/domain/objcSwiftMetadata.js +254 -0
  401. package/dist/domain/peInspection.js +1 -1
  402. package/dist/domain/permissionPolicy.js +13 -0
  403. package/dist/domain/processCapture.js +76 -113
  404. package/dist/domain/processCaptureExample.js +68 -0
  405. package/dist/domain/processCaptureParsing.js +21 -0
  406. package/dist/domain/processCaptureReactiveSchema.js +68 -0
  407. package/dist/domain/processCaptureReactiveValidation.js +8 -3
  408. package/dist/domain/processCaptureValidation.js +8 -10
  409. package/dist/domain/processComparison.js +12 -16
  410. package/dist/domain/processObservation.js +5 -6
  411. package/dist/domain/processReactiveMatching.js +32 -46
  412. package/dist/domain/processReactiveRuntime.js +4 -8
  413. package/dist/domain/processReactiveScenario.js +28 -94
  414. package/dist/domain/processReactiveScenarioPreflight.js +5 -30
  415. package/dist/domain/processReactiveTransition.js +42 -21
  416. package/dist/domain/processScenario.js +62 -93
  417. package/dist/domain/processTraceComparison.js +0 -7
  418. package/dist/domain/processTraceEvaluation.js +14 -4
  419. package/dist/domain/processTraceSpecification.js +11 -17
  420. package/dist/domain/protocolCapture.js +11 -9
  421. package/dist/domain/reconstructionCoverage.js +62 -129
  422. package/dist/domain/reconstructionCoverageEvaluation.js +17 -17
  423. package/dist/domain/reconstructionObligationLedgerSchemas.js +45 -72
  424. package/dist/domain/reconstructionReadiness.js +1 -2
  425. package/dist/domain/reconstructionReadinessSchemas.js +66 -40
  426. package/dist/domain/reconstructionUnknowns.js +3 -3
  427. package/dist/domain/reconstructionVerification.js +13 -47
  428. package/dist/domain/reconstructionVerificationSchemas.js +50 -38
  429. package/dist/domain/referenceSourceGraph.js +53 -61
  430. package/dist/domain/referenceSourceImportParsing.js +3 -7
  431. package/dist/domain/replayMachine.js +19 -31
  432. package/dist/domain/replayMachineRun.js +15 -63
  433. package/dist/domain/replayMachineRuntime.js +46 -44
  434. package/dist/domain/replayMachineValues.js +84 -0
  435. package/dist/domain/residualUnknown.js +25 -30
  436. package/dist/domain/runtimeCharacterization.js +15 -16
  437. package/dist/domain/runtimeIdentification.js +48 -47
  438. package/dist/domain/sourceToBundleComparison.js +11 -87
  439. package/dist/domain/sourceToBundleComparisonSchemas.js +25 -50
  440. package/dist/domain/sourceToBundleSignals.js +11 -16
  441. package/dist/domain/staticRuntimeCorrelation.js +44 -54
  442. package/dist/domain/symbolAnalysis.js +10 -19
  443. package/dist/domain/unicodeCodePointOrder.js +12 -0
  444. package/dist/domain/webBundleAnalysis.js +70 -99
  445. package/dist/domain/webBundleAnalyzer.js +2 -4
  446. package/dist/domain/webBundleAnalyzerAst.js +0 -13
  447. package/dist/domain/webBundleAnalyzerInspection.js +26 -52
  448. package/dist/domain/webBundleAnalyzerResult.js +7 -24
  449. package/dist/domain/webCaptureDiff.js +48 -85
  450. package/dist/domain/webCaptureDiffSchemas.js +86 -0
  451. package/dist/domain/webContentArtifact.js +1 -10
  452. package/dist/domain/webMcpDiscovery.js +3 -14
  453. package/dist/domain/webScreenshot.js +58 -34
  454. package/dist/domain/zipPackageFormat.js +7 -0
  455. package/dist/dotnet/ManagedArtifactInspector.js +17 -50
  456. package/dist/dotnet/ManagedMemberInspector.js +27 -58
  457. package/dist/dotnet/ManagedMemberInspectorCore.js +14 -51
  458. package/dist/dotnet/ManagedMemberInstructionDecoder.js +2 -2
  459. package/dist/dotnet/ManagedMemberRows.js +16 -16
  460. package/dist/dotnet/ManagedMetadataHeaps.js +26 -8
  461. package/dist/dotnet/ManagedMetadataInventory.js +21 -30
  462. package/dist/dotnet/ManagedMetadataInventoryRows.js +57 -63
  463. package/dist/dotnet/ManagedMetadataLayout.js +3 -5
  464. package/dist/dotnet/ManagedMethodBodyReader.js +5 -30
  465. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +19 -49
  466. package/dist/dotnet/ManagedNativeBoundaryInspector.js +13 -42
  467. package/dist/dotnet/ManagedPeReader.js +2 -2
  468. package/dist/dotnet/ManagedStaticProvider.js +13 -71
  469. package/dist/generatedMcpToolCatalog.js +1 -1
  470. package/dist/generatedPackageMetadata.js +1 -1
  471. package/dist/ghidra/GhidraAnalysisProfile.js +3 -8
  472. package/dist/ghidra/GhidraClient.js +5 -13
  473. package/dist/ghidra/GhidraClientStartup.js +1 -1
  474. package/dist/ghidra/GhidraClientWire.js +9 -5
  475. package/dist/ghidra/GhidraDefaults.js +0 -18
  476. package/dist/ghidra/GhidraDiagnostics.js +0 -2
  477. package/dist/ghidra/GhidraDoctor.js +16 -12
  478. package/dist/ghidra/GhidraFunctionValues.js +67 -108
  479. package/dist/ghidra/GhidraInstallation.js +98 -42
  480. package/dist/ghidra/GhidraInventoryValues.js +18 -77
  481. package/dist/ghidra/GhidraLauncher.js +0 -8
  482. package/dist/ghidra/GhidraProvider.js +32 -31
  483. package/dist/ghidra/GhidraProviderCapabilities.js +11 -48
  484. package/dist/ghidra/GhidraRequestQueue.js +6 -30
  485. package/dist/ghidra/GhidraResponseBuffer.js +1 -7
  486. package/dist/ghidra/GhidraSessionValues.js +0 -2
  487. package/dist/ghidra/GhidraSocketConnection.js +1 -1
  488. package/dist/ghidra/GhidraTransport.js +4 -7
  489. package/dist/ghidra/protocol.js +19 -42
  490. package/dist/hopper/BridgeLauncher.js +115 -37
  491. package/dist/hopper/HopperAnalysisProfile.js +3 -5
  492. package/dist/hopper/HopperCleanup.js +11 -9
  493. package/dist/hopper/HopperClient.js +5 -8
  494. package/dist/hopper/HopperProcessDiagnostic.js +2 -2
  495. package/dist/hopper/HopperProvider.js +0 -30
  496. package/dist/hopper/HopperRequestQueue.js +21 -40
  497. package/dist/hopper/HopperResponseStream.js +1 -9
  498. package/dist/hopper/HopperSessionValues.js +3 -2
  499. package/dist/hopper/HopperTargetLease.js +119 -0
  500. package/dist/hopper/LinuxPrivateDisplayDiagnostic.js +24 -31
  501. package/dist/hopper/LinuxPrivateDisplayProbe.js +21 -26
  502. package/dist/hopper/protocol.js +6 -4
  503. package/dist/main/reload.js +1 -9
  504. package/dist/main/shutdown.js +1 -1
  505. package/dist/main/state.js +0 -23
  506. package/dist/main/transport.js +27 -39
  507. package/dist/main.js +17 -15
  508. package/dist/mcpDoctor.js +27 -69
  509. package/dist/native/CommandRunner.js +18 -25
  510. package/dist/native/NativeMacOSProvider.js +13 -38
  511. package/dist/native/NativeMachoInspection.js +1 -1
  512. package/dist/process/BoundedFileBytes.js +17 -0
  513. package/dist/process/ExecFileOutput.js +11 -0
  514. package/dist/process/PendingOperations.js +8 -6
  515. package/dist/process/PrivateRuntimeRoot.js +17 -0
  516. package/dist/process/ProcessOwnership.js +67 -130
  517. package/dist/process/ProcessOwnershipIdentity.js +13 -0
  518. package/dist/process/ProcessOwnershipObservation.js +87 -0
  519. package/dist/process/ProcessOwnershipProcessTree.js +22 -0
  520. package/dist/process/ProviderDeadline.js +8 -12
  521. package/dist/process/ProviderProcess.js +7 -28
  522. package/dist/process/WindowsAuthority.js +32 -0
  523. package/dist/reference/ReferenceSourceReader.js +8 -24
  524. package/dist/reference/ReferenceSourceReaderEntries.js +11 -39
  525. package/dist/reference/ReferenceSourceReaderFile.js +13 -31
  526. package/dist/reference/ReferenceSourceReaderPaths.js +3 -18
  527. package/dist/reference/ReferenceSourceReaderValidate.js +3 -6
  528. package/dist/replay/JavaScriptReplayWorker.js +95 -13
  529. package/dist/replay/JavaScriptReplayWorkerTypes.js +1 -0
  530. package/dist/replay/LinuxJavaScriptReplayRunner.js +42 -43
  531. package/dist/replay/LinuxJavaScriptReplaySandbox.js +0 -19
  532. package/dist/replay/LinuxRuntimeClosure.js +1 -3
  533. package/dist/replay/ReplayOutcome.js +27 -18
  534. package/dist/replay/ReplayProcessLifecycle.js +32 -7
  535. package/dist/replay/ReplaySeccompFile.js +29 -0
  536. package/dist/replay/ReplayWorkerProtocol.js +33 -30
  537. package/dist/replay/SystemJavaScriptReplayHost.js +45 -74
  538. package/dist/server/ProcessCaptureElicitation.js +4 -8
  539. package/dist/server/createServer.js +145 -119
  540. package/dist/server/mcpClientMetadata.js +32 -0
  541. package/dist/server/promptCompletion.js +37 -61
  542. package/dist/server/recordDerivedEvidence.js +1 -1
  543. package/dist/server/registerApplicationTools/characterization.js +10 -21
  544. package/dist/server/registerApplicationTools/compareExportShapes.js +6 -16
  545. package/dist/server/registerApplicationTools/compareSourceToBundle.js +6 -15
  546. package/dist/server/registerApplicationTools/compareVersions.js +6 -16
  547. package/dist/server/registerApplicationTools/controlledReplay.js +8 -15
  548. package/dist/server/registerApplicationTools/coverage.js +7 -78
  549. package/dist/server/registerApplicationTools/helpers.js +1 -13
  550. package/dist/server/registerApplicationTools/obligationLedger.js +4 -8
  551. package/dist/server/registerApplicationTools/traceFeature.js +6 -15
  552. package/dist/server/registerApplicationTools/traceSemantics.js +5 -13
  553. package/dist/server/registerApplicationTools.js +0 -2
  554. package/dist/server/registerArtifactComparisonTool.js +27 -35
  555. package/dist/server/registerBrowserScenarioTool.js +3 -8
  556. package/dist/server/registerBrowserTools.js +36 -81
  557. package/dist/server/registerBundleComparisonTool.js +10 -16
  558. package/dist/server/registerCloseLifecycleTool.js +5 -27
  559. package/dist/server/registerElectronTools.js +29 -65
  560. package/dist/server/registerEnhancedTools.js +118 -127
  561. package/dist/server/registerEvidenceTools.js +19 -30
  562. package/dist/server/registerFunctionComparisonTool.js +35 -34
  563. package/dist/server/registerInvestigationTools/helpers.js +3 -32
  564. package/dist/server/registerInvestigationTools.js +36 -148
  565. package/dist/server/registerJavaScriptRuntimeObservationTools.js +15 -27
  566. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +16 -23
  567. package/dist/server/registerManagedWorkflowTools/contract.js +2 -3
  568. package/dist/server/registerManagedWorkflowTools/evidence.js +19 -35
  569. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -14
  570. package/dist/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.js +4 -14
  571. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +11 -20
  572. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +10 -21
  573. package/dist/server/registerOfficialTools.js +8 -51
  574. package/dist/server/registerProcessComparisonTool.js +43 -38
  575. package/dist/server/registerPrompts.js +19 -17
  576. package/dist/server/registerReplayMachineTool.js +4 -10
  577. package/dist/server/registerSessionRecordTools.js +36 -153
  578. package/dist/server/registerSessionStatusTool.js +18 -96
  579. package/dist/server/registerSessionTools.js +34 -91
  580. package/dist/server/sessionAvailabilityPolicy.js +2 -3
  581. package/dist/server/sessionEvidence.js +9 -15
  582. package/dist/server/sessionToolPolicies.js +1 -13
  583. package/dist/server/toolRegistrationOptions.js +4 -192
  584. package/dist/server/toolResult.js +15 -67
  585. package/dist/serverIdentity.js +0 -20
  586. package/install.sh +1 -1
  587. package/package.json +27 -15
  588. package/scripts/electron-active-hook-boundaries.cjs +394 -0
  589. package/scripts/electron-active-hook.cjs +469 -0
  590. package/scripts/hopper-demo-x11.py +13 -32
  591. package/scripts/rea.mjs +1 -11
  592. package/skills/reverse-engineer-anything/SKILL.md +46 -11
  593. package/skills/reverse-engineer-anything/references/evidence-workflows.md +6 -4
  594. package/skills/reverse-engineer-anything/references/javascript-applications.md +13 -13
  595. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +12 -8
  596. package/dist/application/ApplicationWorkflowEvidenceResolver.js +0 -180
  597. package/dist/application/BoundedJsonFiles.js +0 -86
  598. package/dist/application/CrossVersionInventory.js +0 -128
  599. package/dist/application/CrossVersionInvestigation.js +0 -301
  600. package/dist/application/CrossVersionInvestigationCollections.js +0 -23
  601. package/dist/application/CrossVersionInvestigationEvidence.js +0 -64
  602. package/dist/application/CrossVersionInvestigationReplay.js +0 -170
  603. package/dist/application/DeferredFileAuthorization.js +0 -61
  604. package/dist/application/DoctorProjection.js +0 -43
  605. package/dist/application/EnhancedToolPagination.js +0 -22
  606. package/dist/application/EvidenceReferenceResolver.js +0 -26
  607. package/dist/application/InvestigationWorkspaceStore.js +0 -204
  608. package/dist/application/ProcessPairedExperiment.js +0 -72
  609. package/dist/application/ReconstructionCoverageWorkspaceStore.js +0 -31
  610. package/dist/application/ReconstructionReadinessService.js +0 -48
  611. package/dist/cliInvestigationCommands.js +0 -173
  612. package/dist/domain/boundedCartesianProjection.js +0 -15
  613. package/dist/domain/investigationWorkspace.js +0 -346
  614. package/dist/domain/jsonLimits.js +0 -26
  615. package/dist/domain/knownPageCoverage.js +0 -21
  616. package/dist/domain/processPairedExperiment.js +0 -128
  617. package/dist/server/DynamicToolAvailability.js +0 -70
  618. package/dist/server/LazyToolCatalog.js +0 -134
  619. package/dist/server/hydrateServerTools.js +0 -191
  620. package/dist/server/javascriptApplicationResult.js +0 -106
  621. package/dist/server/permissionFailure.js +0 -12
  622. package/dist/server/registerApplicationTools/readiness.js +0 -55
  623. package/dist/server/registerEvidenceResources.js +0 -315
  624. package/dist/server/registerJavaScriptApplicationGraphResource.js +0 -65
  625. package/dist/server/registerReconstructionObligationLedgerResource.js +0 -32
  626. package/dist/server/registerReconstructionReadinessResource.js +0 -32
  627. package/dist/server/toolInputValidation.js +0 -77
  628. package/scripts/package-runner-bootstrap.mjs +0 -72
@@ -2,9 +2,8 @@ import { constants } from "node:fs";
2
2
  import { access, readFile, readdir } from "node:fs/promises";
3
3
  import { homedir } from "node:os";
4
4
  import { delimiter, join } from "node:path";
5
- import { execFile } from "node:child_process";
6
- import { promisify } from "node:util";
7
- import { parseBinaryTarget } from "../domain/binaryTarget.js";
5
+ import { parseBinaryTarget } from "./BinaryTargetResolver.js";
6
+ import { execFileOutput } from "../process/ExecFileOutput.js";
8
7
  import { probeHomebrew } from "./homebrew.js";
9
8
  import { linuxHopperBinarySupported, linuxSharedLibrariesAvailable, readLinuxDistribution, } from "./LinuxHopper.js";
10
9
  import { CATALOG_IDENTITY } from "../catalogIdentity.js";
@@ -13,7 +12,6 @@ import { readClientRegistrationStatuses, } from "./ClientRegistrationStatus.js";
13
12
  import { inspectRuntimeExecutables, } from "./RuntimeExecutableDiagnostics.js";
14
13
  import { collectDoctorDiagnostics, doctorHealthy, } from "./DoctorDiagnostics.js";
15
14
  import { normalizeDoctorScope, scopeDoctorChecks, } from "./DoctorScope.js";
16
- const execFileAsync = promisify(execFile);
17
15
  /** Deep provider IDs whose readiness can be selected explicitly by doctor. */
18
16
  export const DOCTOR_PROVIDER_IDS = ["hopper", "ghidra"];
19
17
  /**
@@ -56,14 +54,14 @@ export const runDoctor = async (target, host = systemDoctorHost(), requestedScop
56
54
  };
57
55
  const collectDoctorIdentity = async (host, runtimeExecutables) => {
58
56
  const installationPaths = (await host.installationPaths?.()) ?? [];
59
- const installedSkillIdentity = await readInstalledSkillIdentity(host);
57
+ const installedSkillIdentity = await host.installedSkillIdentity?.();
60
58
  const skillAligned = skillIdentityAligned(installedSkillIdentity);
61
59
  const registrations = (await host.clientRegistrations?.()) ?? [];
62
60
  return {
63
61
  checks: [
64
62
  ...(skillAligned ? [] : [skillIdentityCheck(installedSkillIdentity)]),
65
63
  ...registrations
66
- .filter(({ state }) => state !== "aligned")
64
+ .filter((registration) => registration.state !== "aligned")
67
65
  .map(registrationCheck),
68
66
  ],
69
67
  value: {
@@ -73,7 +71,7 @@ const collectDoctorIdentity = async (host, runtimeExecutables) => {
73
71
  catalog: CATALOG_IDENTITY,
74
72
  live_server: {
75
73
  state: "unknown",
76
- remediation: "Compare rea://server/identity or binary_session from the active client; an on-disk registration cannot prove the running server version.",
74
+ remediation: "Call binary_session in the active client to inspect the running server identity.",
77
75
  },
78
76
  installations: {
79
77
  paths: installationPaths,
@@ -97,15 +95,6 @@ const collectDoctorIdentity = async (host, runtimeExecutables) => {
97
95
  },
98
96
  };
99
97
  };
100
- const readInstalledSkillIdentity = async (host) => {
101
- const observed = await host.installedSkillIdentity?.();
102
- if (observed !== undefined)
103
- return observed;
104
- const legacyVersion = await host.installedSkillVersion?.();
105
- return legacyVersion === undefined
106
- ? undefined
107
- : { version: legacyVersion, toolCount: null, catalogDigest: null };
108
- };
109
98
  const skillIdentityAligned = (identity) => identity?.version === PRODUCT_IDENTITY.skillVersion &&
110
99
  identity.toolCount === CATALOG_IDENTITY.counts.mcp_tools &&
111
100
  identity.catalogDigest === CATALOG_IDENTITY.digests.combined_sha256;
@@ -123,8 +112,7 @@ const registrationCheck = (registration) => ({
123
112
  ok: false,
124
113
  classification: "config_drift",
125
114
  detail: registration.config_path,
126
- remediation: registration.remediation ??
127
- "Run rea setup, then restart the affected client.",
115
+ remediation: registration.remediation,
128
116
  });
129
117
  const installationState = (paths) => paths.length === 0 ? "unknown" : paths.length === 1 ? "single" : "multiple";
130
118
  /** Create diagnostics backed by the current process and host commands. */
@@ -149,7 +137,7 @@ export const systemDoctorHost = (options = {}) => ({
149
137
  async brewHopperPath() {
150
138
  return probeHomebrew(async (command) => {
151
139
  try {
152
- const prefix = (await execFileAsync(command, [
140
+ const prefix = (await execFileOutput(command, [
153
141
  "--prefix",
154
142
  "--cask",
155
143
  "hopper-disassembler",
@@ -171,7 +159,7 @@ export const systemDoctorHost = (options = {}) => ({
171
159
  async ilspyCmdVersion(path) {
172
160
  try {
173
161
  await access(path, constants.X_OK);
174
- return firstIlspyVersionLine((await execFileAsync(path, ["--version"], { timeout: 10_000 })).stdout);
162
+ return firstIlspyVersionLine((await execFileOutput(path, ["--version"], { timeout: 10_000 })).stdout);
175
163
  }
176
164
  catch {
177
165
  return undefined;
@@ -189,19 +177,18 @@ export const systemDoctorHost = (options = {}) => ({
189
177
  try {
190
178
  const command = process.platform === "win32" ? "where" : "which";
191
179
  const arguments_ = process.platform === "win32" ? ["rea"] : ["-a", "rea"];
192
- return uniqueLines((await execFileAsync(command, arguments_)).stdout);
180
+ return uniqueLines((await execFileOutput(command, arguments_)).stdout);
193
181
  }
194
182
  catch {
195
183
  return [];
196
184
  }
197
185
  },
198
- installedSkillVersion,
199
186
  installedSkillIdentity,
200
187
  clientRegistrations: () => readClientRegistrationStatuses(homedir()),
201
188
  });
202
189
  const readMacosVersion = async () => {
203
190
  try {
204
- return (await execFileAsync("sw_vers", ["-productVersion"])).stdout.trim();
191
+ return (await execFileOutput("sw_vers", ["-productVersion"])).stdout.trim();
205
192
  }
206
193
  catch {
207
194
  return undefined;
@@ -212,7 +199,7 @@ const executableAvailable = async (path) => {
212
199
  await access(path, constants.X_OK);
213
200
  if (process.platform !== "linux")
214
201
  return true;
215
- const linked = await execFileAsync("ldd", [path]);
202
+ const linked = await execFileOutput("ldd", [path]);
216
203
  return linuxSharedLibrariesAvailable(`${linked.stdout}\n${linked.stderr}`);
217
204
  }
218
205
  catch {
@@ -242,14 +229,6 @@ const manualHopperPaths = async () => {
242
229
  return paths;
243
230
  };
244
231
  const readInstalledSkill = () => readFile(join(homedir(), ".agents/skills", PRODUCT_IDENTITY.skillName, "SKILL.md"), "utf8");
245
- const installedSkillVersion = async () => {
246
- try {
247
- return /^\s{2}version:\s*"([^"]+)"\s*$/mu.exec(await readInstalledSkill())?.[1];
248
- }
249
- catch {
250
- return undefined;
251
- }
252
- };
253
232
  const installedSkillIdentity = async () => {
254
233
  try {
255
234
  const content = await readInstalledSkill();
@@ -70,9 +70,8 @@ const runtimeChecks = (inventory) => {
70
70
  const detail = broken.length === 0
71
71
  ? `${String(inventory.candidates.length)} runtime executable candidates passed bounded version probes.`
72
72
  : `${String(broken.length)} of ${String(inventory.candidates.length)} runtime executable candidates failed bounded version probes: ${broken
73
- .slice(0, 5)
74
73
  .map(({ lexical_path: path }) => path)
75
- .join(", ")}${broken.length > 5 ? ", …" : ""}`;
74
+ .join(", ")}`;
76
75
  return [
77
76
  check("node-toolchains", broken.length === 0, detail, {
78
77
  remediation: "Select a verified healthy Node toolchain or repair the failing installation, then rerun rea doctor. Do not create compatibility-library symlinks.",
@@ -88,7 +88,7 @@ const registrationCheck = (status) => ({
88
88
  ok: false,
89
89
  classification: "config_drift",
90
90
  detail: status.config_path,
91
- remediation: status.remediation ?? "Run rea setup, then restart the affected client.",
91
+ remediation: status.remediation,
92
92
  });
93
93
  const selectedSkillCheck = (state, checks) => checks.find(({ name }) => name === "skill:identity") ?? {
94
94
  name: "skill:identity",
@@ -0,0 +1,50 @@
1
+ import { createEvidence } from "../domain/evidence.js";
2
+ import { jsonValueSchema } from "../domain/jsonValue.js";
3
+ import { digestJson } from "./JavaScriptReplayPlanning.js";
4
+ /** Create Evidence without retaining arbitrary runtime argument values. */
5
+ export const createElectronActiveEvidence = (input, result, provider) => createEvidence(undefined, provider, {
6
+ predicateType: "rea.electron-active-scenario",
7
+ operation: "capture_electron_scenario",
8
+ parameters: parameters(input),
9
+ result: jsonValueSchema.parse(result),
10
+ confidence: "observed",
11
+ authority: "controlled-replay",
12
+ environment: {
13
+ id: `${result.application.electron_version}@${process.platform}`,
14
+ platform: process.platform,
15
+ architecture: process.arch,
16
+ isolation: "none",
17
+ },
18
+ limitations: result.limitations,
19
+ });
20
+ const scenarioProjection = (input) => ({
21
+ executable_path: input.executable_path,
22
+ application_path: input.application_path,
23
+ application_root: input.application_root,
24
+ args: redactArguments(input.args),
25
+ actions: input.actions.map(({ step_id, kind }) => ({ step_id, kind })),
26
+ });
27
+ const parameters = (input) => ({
28
+ ...scenarioProjection(input),
29
+ scenario_sha256: digestJson(scenarioProjection(input)),
30
+ });
31
+ const redactArguments = (arguments_) => {
32
+ let redactNext = false;
33
+ return arguments_.map((argument) => {
34
+ if (redactNext) {
35
+ redactNext = false;
36
+ return "<redacted>";
37
+ }
38
+ if (sensitiveFlag.test(argument)) {
39
+ redactNext = true;
40
+ return argument;
41
+ }
42
+ return redactArgument(argument);
43
+ });
44
+ };
45
+ const sensitiveFlag = /^--?(?:password|token|secret|api[-_]?key|authorization|cookie)$/iu;
46
+ const redactArgument = (argument) => {
47
+ if (/^--?(?:password|token|secret|api[-_]?key|authorization|cookie)=/iu.test(argument))
48
+ return `${argument.slice(0, argument.indexOf("=") + 1)}<redacted>`;
49
+ return argument;
50
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,78 @@
1
+ import { projectPermissionFailure } from "./PermissionFailure.js";
2
+ import { realpath } from "node:fs/promises";
3
+ import { digestJson } from "./JavaScriptReplayPlanning.js";
4
+ import { AnalysisCapabilityUnavailableError, AnalysisInputError, } from "../domain/errors.js";
5
+ import { isPathContained } from "../domain/permissionPolicy.js";
6
+ import { err } from "../domain/result.js";
7
+ import { createElectronActiveEvidence } from "./ElectronActiveEvidence.js";
8
+ const OPERATION = "capture_electron_scenario";
9
+ const PROVIDER_ID = "rea-playwright-electron-active";
10
+ const canonicalizeInput = async (input) => {
11
+ try {
12
+ const [executablePath, applicationPath, applicationRoot] = await Promise.all([
13
+ realpath(input.executable_path),
14
+ realpath(input.application_path),
15
+ realpath(input.application_root),
16
+ ]);
17
+ if (!isPathContained(applicationRoot, applicationPath))
18
+ return err(new AnalysisInputError(OPERATION, undefined, [
19
+ {
20
+ path: ["application_path"],
21
+ reason: "invalid_value",
22
+ message: "application_path must remain beneath application_root after symlink resolution",
23
+ },
24
+ ]));
25
+ return {
26
+ ok: true,
27
+ value: {
28
+ ...input,
29
+ executable_path: executablePath,
30
+ application_path: applicationPath,
31
+ application_root: applicationRoot,
32
+ },
33
+ };
34
+ }
35
+ catch (cause) {
36
+ return err(new AnalysisInputError(OPERATION, { cause }, [
37
+ {
38
+ path: ["application_path"],
39
+ reason: "invalid_format",
40
+ message: "Electron executable, application, and root must resolve to existing paths",
41
+ },
42
+ ]));
43
+ }
44
+ };
45
+ const authorize = async (authority, input) => {
46
+ const canonical = await canonicalizeInput(input);
47
+ if (!canonical.ok)
48
+ return canonical;
49
+ if (authority === undefined)
50
+ return err(new AnalysisCapabilityUnavailableError(PROVIDER_ID, OPERATION, "active Electron observation permission policy is not configured"));
51
+ const authorized = await authority.authorize({
52
+ capability: "electron_automate",
53
+ roots: [canonical.value.application_root],
54
+ executables: [canonical.value.executable_path],
55
+ environment_names: [],
56
+ network: "external",
57
+ mount: false,
58
+ operation_identity: `${OPERATION}:${digestJson(canonical.value)}`,
59
+ }, "write");
60
+ if (!authorized.ok)
61
+ return err(projectPermissionFailure(authorized.error));
62
+ return canonical;
63
+ };
64
+ /** Authorize and execute one bounded, provider-owned Electron experiment. */
65
+ export const captureElectronScenario = async (provider, authority, input, options = {}) => {
66
+ const authorized = await authorize(authority, input);
67
+ if (!authorized.ok)
68
+ return authorized;
69
+ if (provider === undefined)
70
+ return err(new AnalysisCapabilityUnavailableError(PROVIDER_ID, OPERATION, "active Electron observation provider is not configured"));
71
+ const captured = await provider.capture(authorized.value, options);
72
+ return captured.ok
73
+ ? {
74
+ ok: true,
75
+ value: createElectronActiveEvidence(authorized.value, captured.value, provider.identity()),
76
+ }
77
+ : captured;
78
+ };
@@ -70,12 +70,13 @@ export const summarizeElectronBoundaries = (analysis) => {
70
70
  },
71
71
  sender_validation_observations: validations.length,
72
72
  utility_processes: utilities.length,
73
- resolved_utility_entrypoints: utilities.filter(({ file, finding }) => resolvesToFile({
74
- file,
75
- specifier: finding.module_path,
76
- context: finding.module_resolution_context ?? "module-specifier",
77
- files,
78
- })).length,
73
+ resolved_utility_entrypoints: utilities.filter(({ file, finding }) => finding.module_path !== null &&
74
+ resolvesToFile({
75
+ file,
76
+ specifier: finding.module_path,
77
+ context: finding.module_resolution_context,
78
+ files,
79
+ })).length,
79
80
  native_addon_bindings: nativeBindings.length,
80
81
  resolved_native_addon_bindings: nativeBindings.filter(({ file, finding }) => resolvesToFile({
81
82
  file,
@@ -97,8 +98,6 @@ const isPairableRendererTransmission = (record) => isRendererTransmission(record
97
98
  const isMainHandler = ({ finding }) => finding.side === "main" &&
98
99
  (finding.mode === "listen" || finding.mode === "handle");
99
100
  const resolvesToFile = (input) => {
100
- if (input.specifier === null)
101
- return false;
102
101
  const resolved = resolveArtifactPathByContext({
103
102
  declaredPath: input.specifier,
104
103
  sourcePath: input.file.path,
@@ -9,7 +9,7 @@ export const electronObservationIdentity = (context, scope, key) => ({
9
9
  strategy: "observation-fingerprint",
10
10
  stability: "observation-only",
11
11
  observation_sha256: sha256Text(`${context.snapshot.manifest.root_sha256}\0${scope}\0${key}`),
12
- scope: scope.slice(0, 4_096),
12
+ scope,
13
13
  });
14
14
  /** Add a direct AST syntax relationship. */
15
15
  export const addElectronAstEdge = (context, input) => {
@@ -96,7 +96,7 @@ const addHandlerNode = (input) => {
96
96
  const handlerRange = finding.handler_location ?? finding.location;
97
97
  const handler = context.accumulator.addNode({
98
98
  kind: "ipc-handler",
99
- identity: artifactLocalIdentity(file.sha256, "electron-ipc-handler", `${finding.side}:${finding.operation}:${finding.channel ?? finding.channel_expression ?? "[missing]"}:${electronRangeKey(handlerRange)}`),
99
+ identity: artifactLocalIdentity(file.sha256, "electron-ipc-handler", `${finding.side}:${finding.operation}:${finding.channel ?? finding.channel_expression}:${electronRangeKey(handlerRange)}`),
100
100
  observations: [
101
101
  {
102
102
  label: finding.channel,
@@ -177,7 +177,7 @@ const addValidationObservations = (state) => {
177
177
  const { file, javascript } = analyzed;
178
178
  if (javascript === null)
179
179
  continue;
180
- const coverage = javascriptAnalysisCoverage(javascript, state.context.input);
180
+ const coverage = javascriptAnalysisCoverage(javascript);
181
181
  for (const validation of javascript.electron.sender_validations) {
182
182
  const handlerRecord = containingHandler(state.records, file, validation);
183
183
  const target = handlerRecord === undefined
@@ -238,5 +238,5 @@ const coverageFor = (context, file) => {
238
238
  const javascript = context.analysis.files.find(({ file: candidate }) => candidate.path === file.path)?.javascript;
239
239
  return javascript === null || javascript === undefined
240
240
  ? undefined
241
- : javascriptAnalysisCoverage(javascript, context.input);
241
+ : javascriptAnalysisCoverage(javascript);
242
242
  };
@@ -7,7 +7,7 @@ export const addElectronNativeBoundaries = (context) => {
7
7
  const { file, javascript } = analyzed;
8
8
  if (javascript === null)
9
9
  continue;
10
- const coverage = javascriptAnalysisCoverage(javascript, context.input);
10
+ const coverage = javascriptAnalysisCoverage(javascript);
11
11
  for (const value of javascript.electron.native_addon_bindings)
12
12
  addNativeBinding({ context, file, value, coverage });
13
13
  }
@@ -29,7 +29,6 @@ const addNativeBinding = (input) => {
29
29
  specifier: value.specifier,
30
30
  binding_kind: value.binding_kind,
31
31
  requested_members: value.members,
32
- members_truncated: value.members_truncated,
33
32
  resolved_path: resolved,
34
33
  native_export_verification: "not-performed",
35
34
  },
@@ -8,7 +8,7 @@ export const addElectronWindowBoundaries = (context) => {
8
8
  const { file, javascript } = analyzed;
9
9
  if (javascript === null)
10
10
  continue;
11
- const coverage = javascriptAnalysisCoverage(javascript, context.input);
11
+ const coverage = javascriptAnalysisCoverage(javascript);
12
12
  for (const value of javascript.electron.browser_windows) {
13
13
  const source = electronFindingSourceNode(context, file, value.module_key);
14
14
  if (source !== undefined)
@@ -39,7 +39,6 @@ const addBrowserWindow = (input) => {
39
39
  options_status: value.options_status,
40
40
  web_preferences_status: value.web_preferences_status,
41
41
  web_preferences: value.web_preferences,
42
- omitted_web_preferences: value.omitted_web_preferences,
43
42
  preload_path: value.preload_path,
44
43
  preload_resolution_context: value.preload_resolution_context,
45
44
  absence_means_default: false,
@@ -70,13 +69,13 @@ const addBrowserWindow = (input) => {
70
69
  addWindowPreload(input, window);
71
70
  };
72
71
  const addWindowPreload = (input, window) => {
73
- const declared = input.value.preload_path;
74
- if (declared === null)
72
+ if (input.value.preload_path === null)
75
73
  return;
74
+ const { preload_path: declared, preload_resolution_context: resolutionContext, } = input.value;
76
75
  const resolution = resolveArtifactPathByContext({
77
76
  declaredPath: declared,
78
77
  sourcePath: input.file.path,
79
- context: input.value.preload_resolution_context ?? "module-specifier",
78
+ context: resolutionContext,
80
79
  files: input.context.filesByPath,
81
80
  });
82
81
  const role = createElectronRoleNode(input.context, {
@@ -127,7 +126,6 @@ const addContextBridge = (input) => {
127
126
  api_status: value.api_status,
128
127
  members: value.members,
129
128
  unknown_members: value.unknown_members,
130
- omitted_members: value.omitted_members,
131
129
  },
132
130
  evidence: astObservationEvidence({
133
131
  sha256: file.sha256,
@@ -158,7 +156,7 @@ const addUtilityProcess = (input) => {
158
156
  const { context, file, value, coverage } = input;
159
157
  const utility = context.accumulator.addNode({
160
158
  kind: "electron-utility",
161
- identity: artifactLocalIdentity(file.sha256, "electron-utility-process", `${value.module_path ?? value.module_expression ?? "[missing]"}:${electronRangeKey(value.location)}`),
159
+ identity: artifactLocalIdentity(file.sha256, "electron-utility-process", `${value.module_path ?? value.module_expression}:${electronRangeKey(value.location)}`),
162
160
  observations: [
163
161
  {
164
162
  label: value.service_name ?? value.module_path,
@@ -196,7 +194,7 @@ const addUtilityProcess = (input) => {
196
194
  const resolution = resolveArtifactPathByContext({
197
195
  declaredPath: value.module_path,
198
196
  sourcePath: file.path,
199
- context: value.module_resolution_context ?? "module-specifier",
197
+ context: value.module_resolution_context,
200
198
  files: context.filesByPath,
201
199
  });
202
200
  const resolved = resolution.resolved_path;
@@ -1,10 +1,10 @@
1
1
  import { createEvidence, } from "../domain/evidence.js";
2
2
  import { jsonValueSchema } from "../domain/jsonValue.js";
3
- /** Create Evidence v2 for one root-confined Electron observation. */
3
+ /** Create Evidence for one Electron observation. */
4
4
  export const createElectronEvidence = (operation, input, result, provider) => createEvidence(undefined, provider, {
5
5
  predicateType: operation === "list_electron_targets"
6
- ? "rea.electron-target-list/v1"
7
- : "rea.electron-page-inspection/v1",
6
+ ? "rea.electron-target-list"
7
+ : "rea.electron-page-inspection",
8
8
  operation,
9
9
  parameters: parameters(input),
10
10
  result: jsonValueSchema.parse(result),
@@ -22,14 +22,11 @@ export const createElectronEvidence = (operation, input, result, provider) => cr
22
22
  });
23
23
  const parameters = (input) => ({
24
24
  cdp_endpoint: input.cdp_endpoint,
25
- allowed_file_roots: input.allowed_file_roots,
26
25
  ...("target_id" in input
27
26
  ? {
28
27
  target_id: input.target_id,
29
28
  observation_ms: input.observation_ms,
30
29
  include_script_sources: input.include_script_sources,
31
- source_capture_approved: input.source_capture_approved,
32
- limits: input.limits,
33
30
  }
34
- : { offset: input.offset, limit: input.limit }),
31
+ : {}),
35
32
  });
@@ -1,7 +1,8 @@
1
- import { AnalysisCapabilityUnavailableError, AnalysisProtocolError, PermissionRequiredError, } from "../domain/errors.js";
1
+ import { projectPermissionFailure } from "./PermissionFailure.js";
2
+ import { AnalysisCapabilityUnavailableError, } from "../domain/errors.js";
2
3
  import { err, ok } from "../domain/result.js";
3
4
  import { createElectronEvidence } from "./ElectronEvidence.js";
4
- /** Authorize and list root-confined Electron page targets. */
5
+ /** Authorize and list Electron file pages exposed by the selected endpoint. */
5
6
  export const listElectronTargets = async (provider, authority, input, options = {}) => {
6
7
  const ready = await prepare(provider, authority, input, "list_electron_targets");
7
8
  if (!ready.ok)
@@ -26,20 +27,15 @@ const prepare = async (provider, authority, input, operation) => {
26
27
  return err(new AnalysisCapabilityUnavailableError("rea-cdp-electron", operation, "Electron observation permission policy is not configured"));
27
28
  const authorized = await authority.authorize({
28
29
  capability: "electron_observe",
29
- roots: input.allowed_file_roots,
30
+ roots: [],
30
31
  executables: [],
31
32
  environment_names: [],
32
- origins: [input.cdp_endpoint],
33
33
  network: "loopback",
34
34
  mount: false,
35
35
  operation_identity: `${operation}:${"target_id" in input ? input.target_id : input.cdp_endpoint}`,
36
36
  }, "read");
37
37
  if (!authorized.ok)
38
- return err(authorized.error instanceof PermissionRequiredError
39
- ? authorized.error
40
- : new AnalysisProtocolError(authorized.error.message, {
41
- cause: authorized.error,
42
- }));
38
+ return err(projectPermissionFailure(authorized.error));
43
39
  return provider === undefined
44
40
  ? err(new AnalysisCapabilityUnavailableError("rea-cdp-electron", operation, "Electron observation provider is not configured"))
45
41
  : ok(provider);
@@ -1,86 +1,78 @@
1
+ import { z } from "zod";
1
2
  import { AnalysisOutputError } from "../domain/errors.js";
2
- import { parseAddressedPage } from "../domain/hopperValues.js";
3
3
  import { err, ok } from "../domain/result.js";
4
4
  const FEATURE_SEARCH_SOURCES = [
5
- ["list_strings", "string"],
6
- ["list_procedures", "procedure"],
5
+ ["search_strings", "string"],
6
+ ["search_procedures", "procedure"],
7
7
  ];
8
8
  const STRING_SEARCH_SOURCES = [
9
- ["list_strings", "string"],
9
+ ["search_strings", "string"],
10
10
  ];
11
- /** Trace a bounded feature or string literal through provider xrefs. */
11
+ /** Trace every matching feature or string literal through provider xrefs. */
12
12
  export const traceLiteralFeature = async (call, input, scope, signal) => {
13
13
  const sources = scope === "feature" ? FEATURE_SEARCH_SOURCES : STRING_SEARCH_SOURCES;
14
14
  const searched = await literalMatches(call, input, sources, signal);
15
15
  if (!searched.ok)
16
16
  return searched;
17
- const residual = new Set();
18
17
  const traced = await traceReferences(call, {
19
18
  matches: searched.value.matches,
20
- limit: input.limit,
21
- operationBudget: input.max_operations - searched.value.operations,
22
19
  ...(signal === undefined ? {} : { signal }),
23
20
  });
24
21
  if (!traced.ok)
25
22
  return traced;
26
- for (const reason of traced.value.residual)
27
- residual.add(reason);
28
- const operations = searched.value.operations + traced.value.operations;
29
- if (operations >= input.max_operations)
30
- residual.add("Investigation reached the operation budget.");
31
- if (searched.value.matches.length >= input.limit)
32
- residual.add("Literal matches reached the configured limit.");
33
23
  return ok({
34
24
  query: input.query,
35
25
  search_mode: "literal",
36
- operations_used: operations,
37
- operation_budget: input.max_operations,
38
26
  matches: searched.value.matches,
39
27
  references: traced.value.references,
40
- truncated: residual.size > 0,
41
- residual_unknowns: [...residual],
28
+ truncated: false,
29
+ residual_unknowns: [],
42
30
  });
43
31
  };
44
32
  const literalMatches = async (call, input, sources, signal) => {
45
- let operations = 0;
46
33
  const matches = [];
47
- const needle = input.case_sensitive ? input.query : input.query.toLowerCase();
48
- for (const [tool, type] of sources) {
49
- let offset = 0;
50
- while (operations < input.max_operations && matches.length < input.limit) {
51
- operations += 1;
52
- const result = await call(tool, { offset, limit: 500 }, signal);
34
+ const needles = [...new Set(input.query.trim().split(/\s+/u))];
35
+ const matched = new Set();
36
+ for (const needle of needles) {
37
+ for (const [tool, type] of sources) {
38
+ const result = await call(tool, {
39
+ pattern: needle,
40
+ mode: "literal",
41
+ case_sensitive: input.case_sensitive,
42
+ }, signal);
53
43
  if (!result.ok)
54
44
  return result;
55
- const page = parseAddressedPage(result.value);
56
- if (!page.ok)
57
- return page;
58
- for (const item of page.value.items) {
59
- const haystack = input.case_sensitive
60
- ? item.name
61
- : item.name.toLowerCase();
62
- if (haystack.includes(needle))
63
- matches.push({ type, address: item.address, value: item.name });
64
- if (matches.length >= input.limit)
65
- break;
66
- }
67
- if (!page.value.hasMore || page.value.nextOffset === null)
68
- break;
69
- offset = page.value.nextOffset;
45
+ const items = z
46
+ .array(z.object({ address: z.string(), value: z.string() }))
47
+ .safeParse(result.value);
48
+ if (!items.success)
49
+ return err(new AnalysisOutputError(tool, "provider returned an invalid search result"));
50
+ addPageMatches({
51
+ items: items.data.map(({ address, value: name }) => ({
52
+ address,
53
+ name,
54
+ })),
55
+ type,
56
+ matches,
57
+ matched,
58
+ });
70
59
  }
71
60
  }
72
- return ok({ matches, operations });
61
+ return ok({ matches });
62
+ };
63
+ const addPageMatches = (input) => {
64
+ const { items, type, matches, matched } = input;
65
+ for (const item of items) {
66
+ const key = `${type}\u0000${item.address}`;
67
+ if (matched.has(key))
68
+ continue;
69
+ matches.push({ type, address: item.address, value: item.name });
70
+ matched.add(key);
71
+ }
73
72
  };
74
73
  const traceReferences = async (call, request) => {
75
- let operations = 0;
76
74
  const references = [];
77
- const residual = new Set();
78
75
  for (const match of request.matches) {
79
- if (operations >= request.operationBudget) {
80
- residual.add("Reference traversal stopped at the operation budget.");
81
- break;
82
- }
83
- operations += 1;
84
76
  const xrefs = await call("xrefs", { address: match.address }, request.signal);
85
77
  if (!xrefs.ok)
86
78
  return xrefs;
@@ -89,11 +81,6 @@ const traceReferences = async (call, request) => {
89
81
  for (const source of xrefs.value) {
90
82
  if (typeof source !== "string")
91
83
  return err(new AnalysisOutputError("xrefs", "provider returned a non-address value"));
92
- if (operations >= request.operationBudget) {
93
- residual.add("Containing-procedure resolution stopped at the operation budget.");
94
- break;
95
- }
96
- operations += 1;
97
84
  const resolved = await call("resolve_containing_procedure", { address: source }, request.signal);
98
85
  if (!resolved.ok)
99
86
  return resolved;
@@ -102,17 +89,7 @@ const traceReferences = async (call, request) => {
102
89
  source_address: source,
103
90
  containing_procedure: resolved.value,
104
91
  });
105
- if (references.length >= request.limit) {
106
- residual.add("Reference results reached the configured limit.");
107
- break;
108
- }
109
92
  }
110
- if (references.length >= request.limit)
111
- break;
112
93
  }
113
- return ok({
114
- references,
115
- operations,
116
- residual: [...residual],
117
- });
94
+ return ok({ references });
118
95
  };