rea-agents 6.0.0 → 6.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 (611) hide show
  1. package/README.md +26 -18
  2. package/bridge/android/ReaJadxBridge.java +14 -5
  3. package/bridge/ghidra/ReaGhidraBridge.java +205 -51
  4. package/bridge/hopper_bridge.py +314 -127
  5. package/bridge/mitmproxy/capture.py +0 -2
  6. package/bridge/native/rea_lldb_tracer.py +630 -94
  7. package/bridge/process/ProcessRunTokenReader.swift +39 -5
  8. package/bridge/pwntools/recorded_crash_impl.py +4 -0
  9. package/dist/android/JadxConfiguration.js +274 -31
  10. package/dist/android/JadxMcpTransport.js +18 -2
  11. package/dist/android/JadxProtocol.js +6 -0
  12. package/dist/android/JadxProvider.js +76 -37
  13. package/dist/android/JadxSession.js +23 -4
  14. package/dist/application/AnalysisContextQueries.js +8 -35
  15. package/dist/application/AnalysisDocument.js +32 -0
  16. package/dist/application/AppBundleExecutable.js +67 -21
  17. package/dist/application/BinaryTargetResolver.js +5 -3
  18. package/dist/application/BrowserEvidence.js +3 -8
  19. package/dist/application/BrowserScenarioEvidence.js +2 -18
  20. package/dist/application/CallPathTracing.js +19 -3
  21. package/dist/application/CapabilityInventory.js +48 -11
  22. package/dist/application/ClientConfigurationDocument.js +917 -8
  23. package/dist/application/ClientRegistrationIdentity.js +26 -5
  24. package/dist/application/ClientRegistrationStatus.js +29 -14
  25. package/dist/application/DirectAnalysis.js +56 -51
  26. package/dist/application/DirectAnalysisCleanup.js +72 -0
  27. package/dist/application/DirectAnalysisStatus.js +4 -5
  28. package/dist/application/Doctor.js +19 -21
  29. package/dist/application/DoctorDiagnostics.js +1 -2
  30. package/dist/application/DoctorScope.js +25 -13
  31. package/dist/application/EnhancedLiteralTracing.js +22 -25
  32. package/dist/application/EnhancedTools.js +64 -17
  33. package/dist/application/EvidenceBundleFiles.js +30 -13
  34. package/dist/application/FunctionAnalysisEvidence.js +2 -3
  35. package/dist/application/InventoryProjectionEvidence.js +4 -3
  36. package/dist/application/InvestigationProviders.js +11 -2
  37. package/dist/application/JsonFiles.js +83 -28
  38. package/dist/application/LinuxHopper.js +9 -6
  39. package/dist/application/MacHopper.js +15 -18
  40. package/dist/application/ProcedureAddressResolution.js +11 -0
  41. package/dist/application/RealHopperAssertions.js +0 -11
  42. package/dist/application/ReconstructionCoverageService.js +7 -4
  43. package/dist/application/ReconstructionObligationCandidates.js +1 -1
  44. package/dist/application/ReconstructionObligationLedgerService.js +4 -3
  45. package/dist/application/ReferenceSourceImportEntries.js +1 -1
  46. package/dist/application/Setup.js +21 -17
  47. package/dist/application/SetupClientConfiguration.js +10 -15
  48. package/dist/application/SetupHost.js +21 -29
  49. package/dist/application/SetupPlan.js +11 -9
  50. package/dist/application/SupportedClients.js +34 -1
  51. package/dist/application/Uninstall.js +82 -29
  52. package/dist/application/Update.js +18 -3
  53. package/dist/application/UpdateMaintenance.js +7 -5
  54. package/dist/application/UpdateRuntime.js +57 -36
  55. package/dist/application/WebModuleTraceService.js +4 -2
  56. package/dist/application/WebNetworkCaptureService.js +4 -2
  57. package/dist/application/WebRuntimeService.js +5 -3
  58. package/dist/application/WebScriptExportService.js +32 -6
  59. package/dist/application/WebSourceLocationService.js +4 -2
  60. package/dist/application/WorkflowEvidence.js +105 -0
  61. package/dist/application/XrefsAddressResolution.js +45 -0
  62. package/dist/application/analysisView/AnalysisViewService.js +76 -0
  63. package/dist/application/binary/AnalysisClientCleanup.js +30 -5
  64. package/dist/application/binary/AnalysisProviderEvaluation.js +22 -7
  65. package/dist/application/binary/AnalysisProviderRegistry.js +4 -6
  66. package/dist/application/binary/AnalysisSnapshotCache.js +13 -14
  67. package/dist/application/binary/BinarySession.js +161 -93
  68. package/dist/application/binary/BinarySessionComposition.js +1 -3
  69. package/dist/application/binary/BinarySessionExecution.js +3 -5
  70. package/dist/application/binary/BinarySessionOpen.js +4 -4
  71. package/dist/application/binary/BinarySessionRecords.js +26 -4
  72. package/dist/application/binary/BinarySessionStatus.js +18 -7
  73. package/dist/application/binary/CompositeProvider.js +16 -17
  74. package/dist/application/binary/LazyAnalysisProvider.js +8 -5
  75. package/dist/application/binary/SessionProviderRouter.js +27 -135
  76. package/dist/application/binaryDiagnostics/BinaryLayoutService.js +4 -2
  77. package/dist/application/binaryDiagnostics/RecordedCrashService.js +4 -2
  78. package/dist/application/evm/EvmInterfaceService.js +4 -2
  79. package/dist/application/homebrew.js +48 -0
  80. package/dist/application/investigation/EvidenceLedger.js +21 -7
  81. package/dist/application/investigation/InvestigationRecords.js +8 -0
  82. package/dist/application/javascript/ElectronActiveEvidence.js +9 -13
  83. package/dist/application/javascript/JavaScriptAnalysisControl.js +34 -0
  84. package/dist/application/javascript/JavaScriptApplicationEvidence.js +21 -4
  85. package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +19 -2
  86. package/dist/application/javascript/JavaScriptApplicationService.js +27 -15
  87. package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +5 -5
  88. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +10 -7
  89. package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +44 -10
  90. package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +11 -3
  91. package/dist/application/javascript/JavaScriptArtifactGraphContext.js +9 -0
  92. package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +8 -5
  93. package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +12 -3
  94. package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +0 -1
  95. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +49 -19
  96. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +56 -8
  97. package/dist/application/javascript/JavaScriptModuleRelationships.js +38 -9
  98. package/dist/application/javascript/JavaScriptRecoveryService.js +4 -2
  99. package/dist/application/javascript/JavaScriptRuntimeObservationService.js +6 -4
  100. package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +3 -3
  101. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +2 -3
  102. package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +63 -61
  103. package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +1 -2
  104. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +2 -3
  105. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +1 -5
  106. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +75 -46
  107. package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +2 -3
  108. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +64 -19
  109. package/dist/application/managed/ManagedApplicationGraphService.js +4 -3
  110. package/dist/application/managed/ManagedMemberComparisonService.js +9 -5
  111. package/dist/application/managed/ManagedNativeVerificationService.js +6 -4
  112. package/dist/application/managed/ManagedReconstructionService.js +4 -3
  113. package/dist/application/process/ProcessCli.js +25 -17
  114. package/dist/application/process/ProcessEvidence.js +4 -4
  115. package/dist/application/workflowInputError.js +18 -0
  116. package/dist/artifacts/ArtifactProvider.js +48 -13
  117. package/dist/artifacts/ArtifactReader.js +31 -0
  118. package/dist/artifacts/DirectoryArtifactReader.js +2 -1
  119. package/dist/artifacts/MachOSliceArtifactReader.js +106 -15
  120. package/dist/artifacts/NativeDmgArtifactReader.js +73 -21
  121. package/dist/artifacts/SafeOutputTree.js +16 -2
  122. package/dist/artifacts/ZipArtifactReader.js +11 -4
  123. package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +26 -5
  124. package/dist/artifacts/apple/DylibResolutionReader.js +17 -7
  125. package/dist/artifacts/apple/InterfaceBuilderAnalysis.js +176 -56
  126. package/dist/artifacts/apple/InterfaceBuilderDecodeBudget.js +195 -0
  127. package/dist/artifacts/apple/KeyedArchiveReader.js +55 -23
  128. package/dist/artifacts/apple/MachoLoadCommandReader.js +92 -31
  129. package/dist/artifacts/apple/NibArchive.js +81 -14
  130. package/dist/artifacts/apple/NibViewHierarchy.js +10 -3
  131. package/dist/artifacts/apple/PlistNumberLiterals.js +164 -0
  132. package/dist/artifacts/extraction/ArtifactExtraction.js +78 -21
  133. package/dist/artifacts/inventory/ArtifactGraphConstruction.js +79 -68
  134. package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
  135. package/dist/artifacts/inventory/reader.js +3 -3
  136. package/dist/artifacts/inventory/scanCanonical.js +59 -38
  137. package/dist/artifacts/inventory/scanReader.js +5 -9
  138. package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +6 -2
  139. package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
  140. package/dist/browser/CdpBrowserProvider.js +2 -3
  141. package/dist/browser/CdpCaptureCompleteness.js +2 -0
  142. package/dist/browser/CdpCaptureEventHandlers.js +78 -15
  143. package/dist/browser/CdpCaptureEventTypes.js +5 -1
  144. package/dist/browser/CdpCaptureEvents.js +25 -1
  145. package/dist/browser/CdpCaptureValues.js +20 -0
  146. package/dist/browser/CdpConnection.js +30 -11
  147. package/dist/browser/CdpElectronProvider.js +0 -2
  148. package/dist/browser/CdpElectronScriptEvents.js +2 -8
  149. package/dist/browser/CdpElectronScripts.js +2 -3
  150. package/dist/browser/CdpOptionalCommand.js +2 -3
  151. package/dist/browser/CdpPageCapture.js +23 -1
  152. package/dist/browser/CdpPageCaptureScripts.js +2 -3
  153. package/dist/browser/CdpSafeMetadata.js +10 -10
  154. package/dist/browser/PlaywrightBrowserScenarioProvider.js +59 -44
  155. package/dist/browser/PlaywrightElectronActiveActions.js +34 -79
  156. package/dist/browser/PlaywrightElectronActiveProjection.js +141 -0
  157. package/dist/browser/PlaywrightElectronActiveProvider.js +133 -130
  158. package/dist/browser/PlaywrightScenarioArtifacts.js +1 -1
  159. package/dist/browser/PlaywrightScenarioBrowser.js +139 -39
  160. package/dist/browser/PlaywrightScenarioEvents.js +1 -1
  161. package/dist/browser/PlaywrightScenarioSession.js +39 -22
  162. package/dist/browser/WebSourceMapFetcher.js +426 -72
  163. package/dist/browser/assets/LocalWebScriptArtifacts.js +2 -2
  164. package/dist/browser/assets/ScriptCaptureAdapters.js +1 -1
  165. package/dist/browser/history/CaptureFailures.js +41 -1
  166. package/dist/browser/history/CaptureRelease.js +5 -0
  167. package/dist/browser/history/HarCaptureAdapter.js +3 -3
  168. package/dist/browser/history/HarJson.js +3 -2
  169. package/dist/browser/history/HistoricalCaptureDecoder.js +4 -2
  170. package/dist/browser/history/MitmproxyCaptureAdapter.js +4 -2
  171. package/dist/catalogIdentity.js +0 -1
  172. package/dist/cli/analysisSelector.js +23 -0
  173. package/dist/cli/analysisViewCommands.js +36 -0
  174. package/dist/cli/applicationCommands.js +2 -3
  175. package/dist/cli/artifactCommands.js +11 -12
  176. package/dist/cli/coreAnalysisCommands.js +3 -3
  177. package/dist/cli/coreBinaryCommands.js +100 -37
  178. package/dist/cli/coreNativeCommands.js +9 -10
  179. package/dist/cli/electronCommands.js +10 -9
  180. package/dist/cli/interactiveSetup.js +6 -6
  181. package/dist/cli/javascriptApplicationAnalysis.js +7 -3
  182. package/dist/cli/jsonOutput.js +4 -99
  183. package/dist/cli/managedCommands.js +7 -8
  184. package/dist/cli/nativeCallCommands.js +3 -5
  185. package/dist/cli/omittableDefaults.js +50 -0
  186. package/dist/cli/processCommands.js +3 -2
  187. package/dist/cli/setupCommands.js +16 -15
  188. package/dist/cli/utilityCommands.js +9 -9
  189. package/dist/cli/webRuntimeCommands.js +8 -8
  190. package/dist/cli.js +18 -9
  191. package/dist/cliBrowserScenarioCommands.js +2 -2
  192. package/dist/cliCommandNames.js +1 -1
  193. package/dist/cliJsonInput.js +24 -5
  194. package/dist/cliOutput.js +0 -38
  195. package/dist/composition/auxiliaryAnalysisProviders.js +27 -23
  196. package/dist/composition/binary.js +9 -9
  197. package/dist/composition/browserScenario.js +2 -1
  198. package/dist/composition/directAnalysis.js +20 -13
  199. package/dist/composition/electronScenario.js +1 -1
  200. package/dist/composition/optionalObservationProviders.js +12 -7
  201. package/dist/config/environment.js +10 -0
  202. package/dist/config/ghidraStartupTimeout.js +12 -0
  203. package/dist/config/homeDirectory.js +12 -0
  204. package/dist/config/mcpResponseBudget.js +30 -0
  205. package/dist/config/parseConfig.js +8 -3
  206. package/dist/config/parsers.js +19 -22
  207. package/dist/contracts/analysisViewToolContracts.js +56 -0
  208. package/dist/contracts/applicationToolContracts.js +5 -4
  209. package/dist/contracts/artifactComparisonExample.js +2 -2
  210. package/dist/contracts/artifactToolContracts.js +1 -1
  211. package/dist/contracts/browserScenarioToolContracts.js +1 -1
  212. package/dist/contracts/browserToolContracts.js +19 -15
  213. package/dist/contracts/enhancedInputs.js +7 -5
  214. package/dist/contracts/enhancedToolContracts.js +7 -6
  215. package/dist/contracts/evm/evmToolContracts.js +1 -1
  216. package/dist/contracts/functionWorkflowToolContracts.js +1 -1
  217. package/dist/contracts/hopperMemoryContracts.js +2 -5
  218. package/dist/contracts/inputSchemaPresentation.js +90 -0
  219. package/dist/contracts/investigationExamples.js +4 -3
  220. package/dist/contracts/javascript/electronToolContracts.js +2 -2
  221. package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +0 -20
  222. package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +245 -0
  223. package/dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js +1 -1
  224. package/dist/contracts/managed/managedToolContracts.js +7 -14
  225. package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
  226. package/dist/contracts/mobileApplicationGraphExamples.js +3 -3
  227. package/dist/contracts/native/binaryDiagnosticsToolContracts.js +1 -1
  228. package/dist/contracts/native/nativeToolContracts.js +5 -3
  229. package/dist/contracts/officialToolContracts.js +16 -16
  230. package/dist/contracts/promptContracts.js +5 -5
  231. package/dist/contracts/providerSelection.js +1 -1
  232. package/dist/contracts/sessionLifecycleInputs.js +3 -7
  233. package/dist/contracts/sessionStatusContract.js +2 -4
  234. package/dist/contracts/sessionToolContracts.js +18 -8
  235. package/dist/contracts/sessionToolSchemas.js +3 -19
  236. package/dist/contracts/toolContractExamples.js +0 -1
  237. package/dist/contracts/toolContractHelpers.js +4 -1
  238. package/dist/contracts/toolContracts.js +2 -0
  239. package/dist/contracts/toolEffects.js +1 -1
  240. package/dist/contracts/toolOutputSchemaGroups.js +160 -115
  241. package/dist/contracts/toolOutputSchemaPrimitives.js +28 -20
  242. package/dist/contracts/toolSchemaMetadata.js +41 -33
  243. package/dist/contracts/webNetworkCaptureToolContracts.js +2 -2
  244. package/dist/contracts/webRuntimeToolContracts.js +1 -1
  245. package/dist/contracts/webScriptToolContracts.js +1 -1
  246. package/dist/doctorRuntime.js +7 -5
  247. package/dist/domain/analysisErrorBase.js +8 -3
  248. package/dist/domain/analysisErrorCore.js +6 -1
  249. package/dist/domain/analysisErrorPresentation.js +90 -20
  250. package/dist/domain/analysisErrorProjection.js +130 -32
  251. package/dist/domain/analysisSnapshot.js +29 -31
  252. package/dist/domain/analysisView/analysisView.js +243 -0
  253. package/dist/domain/analysisView/analysisViewCoverage.js +19 -0
  254. package/dist/domain/analysisView/binaryLayoutView.js +159 -0
  255. package/dist/domain/analysisView/javascriptApplicationView.js +238 -0
  256. package/dist/domain/android/androidAnalysis.js +2 -4
  257. package/dist/domain/android/androidApplication.js +18 -10
  258. package/dist/domain/apple/appleApplication.js +42 -15
  259. package/dist/domain/apple/dyldEnvironment.js +73 -0
  260. package/dist/domain/apple/dylibResolution.js +130 -12
  261. package/dist/domain/apple/dylibResolutionFindings.js +9 -7
  262. package/dist/domain/apple/interfaceBuilderGraph.js +25 -14
  263. package/dist/domain/apple/interfaceBuilderKeyedArchive.js +13 -3
  264. package/dist/domain/apple/keyedArchive.js +35 -3
  265. package/dist/domain/apple/machoContainer.js +54 -0
  266. package/dist/domain/apple/plistNumbers.js +76 -0
  267. package/dist/domain/artifactComparison.js +15 -6
  268. package/dist/domain/artifactGraph.js +16 -3
  269. package/dist/domain/artifactIdentity.js +29 -0
  270. package/dist/domain/artifactInventoryEvidence.js +28 -40
  271. package/dist/domain/artifactOperationError.js +3 -3
  272. package/dist/domain/artifactPartialObservation.js +1 -0
  273. package/dist/domain/artifactPathSyntax.js +49 -0
  274. package/dist/domain/binaryTarget.js +39 -13
  275. package/dist/domain/bridgeCandidateProjection.js +71 -0
  276. package/dist/domain/browserCaptureComparison.js +13 -49
  277. package/dist/domain/browserCompleteness.js +1 -0
  278. package/dist/domain/browserNetworkEvidence.js +10 -4
  279. package/dist/domain/browserObservation.js +0 -1
  280. package/dist/domain/browserObservationError.js +24 -5
  281. package/dist/domain/browserObservationSchemas.js +14 -3
  282. package/dist/domain/browserScenario.js +0 -1
  283. package/dist/domain/browserScenarioCapture.js +1 -2
  284. package/dist/domain/browserScenarioDiff.js +0 -2
  285. package/dist/domain/browserScenarioDiffEvidence.js +0 -12
  286. package/dist/domain/browserScenarioDiffValues.js +2 -2
  287. package/dist/domain/browserScenarioValues.js +5 -10
  288. package/dist/domain/bundleComparison.js +3 -2
  289. package/dist/domain/callPath.js +8 -9
  290. package/dist/domain/callPathSchemas.js +2 -2
  291. package/dist/domain/canonicalJsonDigestSteps.js +133 -0
  292. package/dist/domain/canonicalOrdering.js +9 -5
  293. package/dist/domain/changedBehavior.js +9 -9
  294. package/dist/domain/comparisonSourceEvidence.js +40 -0
  295. package/dist/domain/completionLedgerGeneration.js +2 -1
  296. package/dist/domain/configurationErrors.js +13 -1
  297. package/dist/domain/conformancePackage.js +4 -3
  298. package/dist/domain/evidence.js +65 -36
  299. package/dist/domain/evidenceBundle.js +47 -8
  300. package/dist/domain/evidenceCompletionLedger.js +2 -1
  301. package/dist/domain/evidenceErrors.js +12 -1
  302. package/dist/domain/explicitSensitiveFailure.js +17 -1
  303. package/dist/domain/firmware/firmwareAnalysis.js +6 -7
  304. package/dist/domain/functionComparison.js +4 -5
  305. package/dist/domain/functionComparisonDimensions.js +120 -87
  306. package/dist/domain/functionComparisonNormalization.js +23 -34
  307. package/dist/domain/functionComparisonResults.js +1 -4
  308. package/dist/domain/functionComparisonSchemas.js +2 -8
  309. package/dist/domain/functionDossierEvidence.js +2 -37
  310. package/dist/domain/hopperErrors.js +23 -2
  311. package/dist/domain/hopperValues.js +51 -8
  312. package/dist/domain/immutableJson.js +114 -0
  313. package/dist/domain/inputIssueProjection.js +3 -0
  314. package/dist/domain/javascript/electronActiveObservation.js +47 -64
  315. package/dist/domain/javascript/electronObservation.js +14 -3
  316. package/dist/domain/javascript/electronStaticAnalysisBrowser.js +10 -9
  317. package/dist/domain/javascript/electronStaticAnalysisIpc.js +2 -1
  318. package/dist/domain/javascript/electronStaticAnalysisNative.js +2 -1
  319. package/dist/domain/javascript/electronStaticAnalysisValues.js +6 -12
  320. package/dist/domain/javascript/javascriptApplicationAnalysis.js +71 -23
  321. package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +2 -0
  322. package/dist/domain/javascript/javascriptApplicationGraph.js +39 -3
  323. package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +9 -2
  324. package/dist/domain/javascript/javascriptApplicationVersionItems.js +5 -2
  325. package/dist/domain/javascript/javascriptApplicationVersionKeys.js +2 -1
  326. package/dist/domain/javascript/javascriptAstValues.js +20 -0
  327. package/dist/{application/javascript/JavaScriptReturnShapeProjection.js → domain/javascript/javascriptExportReturnShapeProjection.js} +4 -4
  328. package/dist/domain/javascript/javascriptExportShapeComparison.js +7 -1
  329. package/dist/domain/javascript/javascriptExportShapeComparisonIdentity.js +6 -1
  330. package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +29 -1
  331. package/dist/domain/javascript/javascriptExportShapeSelection.js +5 -5
  332. package/dist/domain/javascript/javascriptExportShapeVariants.js +67 -14
  333. package/dist/domain/javascript/javascriptFeatureSeed.js +20 -0
  334. package/dist/domain/javascript/javascriptFeatureTraversal.js +0 -1
  335. package/dist/domain/javascript/javascriptNativeHandoff.js +1 -1
  336. package/dist/domain/javascript/javascriptRecovery.js +3 -8
  337. package/dist/domain/javascript/javascriptRuntimeLoadState.js +0 -1
  338. package/dist/domain/javascript/javascriptRuntimeObservation.js +10 -2
  339. package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +1 -1
  340. package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +3 -2
  341. package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +0 -1
  342. package/dist/domain/javascript/javascriptSemanticAnalysis.js +106 -5
  343. package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +2 -1
  344. package/dist/domain/javascript/javascriptSemanticCalls.js +2 -1
  345. package/dist/domain/javascript/javascriptSemanticChildProcesses.js +2 -1
  346. package/dist/domain/javascript/javascriptSemanticCoverage.js +6 -5
  347. package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +9 -17
  348. package/dist/domain/javascript/javascriptSemanticDataEffects.js +23 -6
  349. package/dist/domain/javascript/javascriptSemanticGraph.js +98 -43
  350. package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +1 -0
  351. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +77 -20
  352. package/dist/domain/javascript/javascriptSemanticMutationValues.js +21 -27
  353. package/dist/domain/javascript/javascriptSemanticObjects.js +83 -42
  354. package/dist/domain/javascript/javascriptSemanticPrimitives.js +18 -21
  355. package/dist/domain/javascript/javascriptSemanticProjection.js +2 -3
  356. package/dist/domain/javascript/javascriptSemanticPromises.js +2 -1
  357. package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -4
  358. package/dist/domain/javascript/javascriptSemanticResourceLimits.js +77 -0
  359. package/dist/domain/javascript/javascriptSemanticResources.js +1 -1
  360. package/dist/domain/javascript/javascriptSemanticReturns.js +32 -17
  361. package/dist/domain/javascript/javascriptSemanticSlots.js +72 -0
  362. package/dist/domain/javascript/javascriptSemanticValues.js +126 -61
  363. package/dist/domain/javascript/javascriptSourceMapPaths.js +104 -0
  364. package/dist/domain/javascript/javascriptSourceParser.js +6 -2
  365. package/dist/domain/javascript/javascriptStaticAnalysis.js +22 -17
  366. package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +5 -3
  367. package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +16 -5
  368. package/dist/domain/javascript/javascriptStaticAnalysisFindings.js +66 -7
  369. package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +28 -17
  370. package/dist/domain/javascript/javascriptStaticAnalysisState.js +3 -2
  371. package/dist/domain/javascript/sourceToBundleComparison.js +12 -3
  372. package/dist/domain/javascript/sourceToBundleSignals.js +47 -19
  373. package/dist/domain/jsonSerialization.js +109 -0
  374. package/dist/domain/jsonValue.js +90 -6
  375. package/dist/domain/localPath.js +6 -0
  376. package/dist/domain/managed/managedApplicationGraph.js +10 -10
  377. package/dist/domain/managed/managedArtifact.js +6 -4
  378. package/dist/domain/managed/managedInspectionEvidence.js +16 -0
  379. package/dist/domain/managed/managedMemberComparison.js +2 -9
  380. package/dist/domain/managed/managedMemberComparisonMatch.js +5 -9
  381. package/dist/domain/managed/managedNativeVerification.js +3 -11
  382. package/dist/domain/managed/managedNativeVerificationMatch.js +9 -3
  383. package/dist/domain/native/binaryLayout.js +2 -3
  384. package/dist/domain/native/fileOffsetPartialObservation.js +1 -0
  385. package/dist/domain/native/nativeApiBoundary.js +1 -1
  386. package/dist/domain/native/nativeCallObservation.js +37 -13
  387. package/dist/domain/native/nativeCallPartialObservation.js +33 -0
  388. package/dist/domain/native/nativeInstruction.js +7 -0
  389. package/dist/domain/native/recordedCrash.js +2 -3
  390. package/dist/domain/offsetDateTime.js +17 -0
  391. package/dist/domain/process/processCapture.js +21 -16
  392. package/dist/domain/process/processCaptureCoverage.js +67 -0
  393. package/dist/domain/process/processCaptureExample.js +2 -1
  394. package/dist/domain/process/processCaptureParsing.js +1 -34
  395. package/dist/domain/process/processCaptureValidation.js +81 -13
  396. package/dist/domain/process/processComparison.js +79 -26
  397. package/dist/domain/process/processObservation.js +10 -2
  398. package/dist/domain/process/processScenario.js +35 -12
  399. package/dist/domain/process/processTraceComparison.js +0 -2
  400. package/dist/domain/process/processTraceDimensionProjection.js +1 -1
  401. package/dist/domain/process/processTraceEvaluation.js +15 -11
  402. package/dist/domain/process/processTraceSpecification.js +3 -4
  403. package/dist/domain/propertyListKeys.js +1 -1
  404. package/dist/domain/propertyListXmlText.js +19 -0
  405. package/dist/domain/providerAdapterError.js +3 -1
  406. package/dist/domain/providerOperationHealth.js +54 -0
  407. package/dist/domain/reconstructionCoverage.js +5 -2
  408. package/dist/domain/reconstructionObligationLedgerSchemas.js +2 -1
  409. package/dist/domain/reconstructionReadinessSchemas.js +2 -1
  410. package/dist/domain/reconstructionVerification.js +9 -46
  411. package/dist/domain/reconstructionVerificationSchemas.js +4 -3
  412. package/dist/domain/referenceSourceGraph.js +20 -21
  413. package/dist/domain/staticRuntimeCorrelation.js +8 -45
  414. package/dist/domain/stringPatterns.js +6 -0
  415. package/dist/domain/swiftSymbolClassification.js +61 -0
  416. package/dist/domain/symbolAnalysis.js +66 -18
  417. package/dist/domain/webBundleAnalysis.js +20 -8
  418. package/dist/domain/webBundleAnalyzerInspection.js +13 -8
  419. package/dist/domain/webBundleAnalyzerResult.js +41 -2
  420. package/dist/domain/webCaptureDiff.js +0 -1
  421. package/dist/domain/webCaptureDiffSchemas.js +6 -3
  422. package/dist/domain/webEventListeners.js +3 -2
  423. package/dist/domain/webExecution.js +3 -2
  424. package/dist/domain/webRuntime.js +19 -7
  425. package/dist/domain/webScriptExport.js +1 -1
  426. package/dist/domain/webSourceLocation.js +1 -0
  427. package/dist/dotnet/ManagedArtifactInspector.js +2 -19
  428. package/dist/dotnet/ManagedMemberInspector.js +12 -18
  429. package/dist/dotnet/ManagedMemberInspectorCore.js +47 -44
  430. package/dist/dotnet/ManagedMemberRows.js +75 -62
  431. package/dist/dotnet/ManagedMetadataInventory.js +16 -22
  432. package/dist/dotnet/ManagedMethodBodyReader.js +4 -0
  433. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +109 -94
  434. package/dist/dotnet/ManagedNativeBoundaryInspector.js +12 -21
  435. package/dist/dotnet/ManagedReaderFailure.js +16 -0
  436. package/dist/dotnet/ManagedStaticProvider.js +3 -5
  437. package/dist/evaluation/AgentEvaluationFixtures.js +250 -0
  438. package/dist/evaluation/AgentEvaluationReport.js +28 -0
  439. package/dist/evaluation/CodexAgentEval.js +12 -8
  440. package/dist/evaluation/KnownAnswerEvaluation.js +281 -0
  441. package/dist/evm/EvmoleInterfaceProvider.js +2 -1
  442. package/dist/firmware/FirmwareCommand.js +9 -5
  443. package/dist/firmware/FirmwareFiles.js +1 -1
  444. package/dist/firmware/FirmwareProvider.js +4 -4
  445. package/dist/generatedPackageMetadata.js +2 -2
  446. package/dist/ghidra/GhidraAnalysisProfile.js +7 -5
  447. package/dist/ghidra/GhidraClient.js +126 -34
  448. package/dist/ghidra/GhidraClientStartup.js +0 -2
  449. package/dist/ghidra/GhidraDiagnostics.js +7 -7
  450. package/dist/ghidra/GhidraDoctor.js +6 -5
  451. package/dist/ghidra/GhidraFunctionValues.js +13 -12
  452. package/dist/ghidra/GhidraInstallation.js +58 -33
  453. package/dist/ghidra/GhidraInventoryValues.js +14 -4
  454. package/dist/ghidra/GhidraJavaLaunch.js +66 -0
  455. package/dist/ghidra/GhidraLauncher.js +47 -22
  456. package/dist/ghidra/GhidraProvider.js +6 -2
  457. package/dist/ghidra/GhidraProviderCapabilities.js +20 -2
  458. package/dist/ghidra/GhidraProviderClient.js +36 -15
  459. package/dist/ghidra/GhidraSessionError.js +13 -7
  460. package/dist/ghidra/GhidraSessionRoot.js +39 -0
  461. package/dist/ghidra/GhidraTargetSnapshot.js +47 -12
  462. package/dist/ghidra/GhidraTransport.js +20 -0
  463. package/dist/ghidra/extensions/GhidraExtensions.js +17 -10
  464. package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +8 -2
  465. package/dist/hopper/BridgeLauncher.js +65 -56
  466. package/dist/hopper/HopperAnalysisProfile.js +65 -12
  467. package/dist/hopper/HopperCleanup.js +63 -22
  468. package/dist/hopper/HopperClient.js +288 -59
  469. package/dist/hopper/HopperFileOffset.js +237 -0
  470. package/dist/hopper/HopperMachOImage.js +197 -0
  471. package/dist/hopper/HopperOperationStage.js +6 -0
  472. package/dist/hopper/HopperProvider.js +71 -19
  473. package/dist/hopper/HopperProviderCapabilities.js +19 -1
  474. package/dist/hopper/HopperRegexSearch.js +134 -0
  475. package/dist/hopper/HopperRegexWorker.js +27 -0
  476. package/dist/hopper/HopperRequestQueue.js +68 -19
  477. package/dist/hopper/HopperTargetLease.js +133 -49
  478. package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -0
  479. package/dist/ida/IdaConfiguration.js +8 -3
  480. package/dist/ida/IdaInput.js +1 -7
  481. package/dist/ida/IdaMcpConnection.js +8 -4
  482. package/dist/ida/IdaOperationRunner.js +3 -3
  483. package/dist/ida/IdaProvider.js +8 -12
  484. package/dist/ida/IdaSessionClient.js +20 -18
  485. package/dist/ida/IdaWorkspace.js +12 -13
  486. package/dist/inspector/JavaScriptRuntimeScope.js +9 -1
  487. package/dist/inspector/V8InspectorCaptureProjection.js +9 -4
  488. package/dist/inspector/V8InspectorProvider.js +82 -36
  489. package/dist/javascript/recovery/WakaruCommand.js +7 -2
  490. package/dist/javascript/recovery/WakaruExecution.js +5 -2
  491. package/dist/javascript/sourceMaps/DecodedSourceMap.js +47 -0
  492. package/dist/javascript/sourceMaps/SourceMapCommand.js +16 -0
  493. package/dist/javascript/sourceMaps/SourceMapFormat.js +79 -31
  494. package/dist/javascript/sourceMaps/TraceSourceMap.js +14 -28
  495. package/dist/main/shutdown.js +11 -3
  496. package/dist/main/startup.js +9 -2
  497. package/dist/main/transport.js +22 -2
  498. package/dist/main.js +11 -18
  499. package/dist/mcpDoctor.js +62 -2
  500. package/dist/native/AppleDispatchCoverage.js +47 -6
  501. package/dist/native/AppleDispatchDecodeFacts.js +6 -0
  502. package/dist/native/AppleDispatchMetadata.js +6 -3
  503. package/dist/native/AppleMachoFixups.js +48 -24
  504. package/dist/native/AppleMachoSelection.js +48 -22
  505. package/dist/native/AppleObjcCategories.js +6 -2
  506. package/dist/native/AppleObjcDispatchFacets.js +5 -2
  507. package/dist/native/AppleObjcProperties.js +2 -1
  508. package/dist/native/AppleSwiftDispatchFacets.js +27 -21
  509. package/dist/native/AppleSwiftVtables.js +21 -15
  510. package/dist/native/CommandRunner.js +87 -88
  511. package/dist/native/LldbCallTracer.js +372 -103
  512. package/dist/native/LldbRetainedObservations.js +178 -0
  513. package/dist/native/NativeCallObservation.js +62 -3
  514. package/dist/native/NativeMacOSProvider.js +122 -31
  515. package/dist/native/NativeUiHelperRuntime.js +11 -2
  516. package/dist/native/NativeUiObservation.js +2 -2
  517. package/dist/native/SignatureTargetBinding.js +155 -0
  518. package/dist/native/parsers/lipo.js +71 -1
  519. package/dist/native/pwndbg/PwndbgCoreContext.js +25 -5
  520. package/dist/native/pwntools/PwntoolsDecoder.js +2 -1
  521. package/dist/native/pwntools/RecordedCrashStructureBindings.js +2 -0
  522. package/dist/process/DarwinProcessRunTokenReader.js +23 -10
  523. package/dist/process/ExecFileOutput.js +108 -6
  524. package/dist/process/OwnedCommand.js +7 -2
  525. package/dist/process/PrivateRuntimeRoot.js +10 -5
  526. package/dist/process/ProcessOwnership.js +204 -57
  527. package/dist/process/ProcessOwnershipObservation.js +60 -9
  528. package/dist/process/ProviderProcess.js +39 -10
  529. package/dist/process/capture/FilesystemSnapshot.js +50 -13
  530. package/dist/process/capture/ProcessCaptureError.js +15 -2
  531. package/dist/process/capture/ProcessCaptureLifecycle.js +235 -81
  532. package/dist/process/capture/ProcessFilesystemEffects.js +33 -3
  533. package/dist/process/capture/ProcessHarness.js +21 -25
  534. package/dist/process/capture/ProcessNormalization.js +20 -2
  535. package/dist/process/capture/ProcessSampling.js +25 -2
  536. package/dist/process/capture/TerminalRenderer.js +14 -0
  537. package/dist/process/snapshotEnvironment.js +14 -0
  538. package/dist/server/EvidenceMcpServer.js +157 -0
  539. package/dist/server/createServer.js +61 -41
  540. package/dist/server/mcpClientMetadata.js +12 -5
  541. package/dist/server/promptCompletion.js +3 -8
  542. package/dist/server/registerAnalysisViewTool.js +15 -0
  543. package/dist/server/registerAndroidTools.js +2 -5
  544. package/dist/server/registerApplicationTools/compareExportShapes.js +4 -5
  545. package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
  546. package/dist/server/registerApplicationTools/compareVersions.js +4 -5
  547. package/dist/server/registerApplicationTools/coverage.js +1 -2
  548. package/dist/server/registerApplicationTools/helpers.js +1 -4
  549. package/dist/server/registerApplicationTools/obligationLedger.js +4 -5
  550. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -4
  551. package/dist/server/registerApplicationTools/traceFeature.js +4 -5
  552. package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
  553. package/dist/server/registerArtifactComparisonTool.js +13 -10
  554. package/dist/server/registerBinaryDiagnosticsTools.js +2 -5
  555. package/dist/server/registerBrowserScenarioTool.js +3 -6
  556. package/dist/server/registerBrowserTools.js +13 -18
  557. package/dist/server/registerBundleComparisonTool.js +5 -7
  558. package/dist/server/registerCloseLifecycleTool.js +9 -20
  559. package/dist/server/registerElectronTools.js +10 -15
  560. package/dist/server/registerEnhancedTools.js +36 -77
  561. package/dist/server/registerEvidenceTools.js +3 -6
  562. package/dist/server/registerEvmTools.js +2 -5
  563. package/dist/server/registerFirmwareTools.js +2 -5
  564. package/dist/server/registerFunctionComparisonTool.js +15 -12
  565. package/dist/server/registerInvestigationTools.js +16 -17
  566. package/dist/server/registerJavaScriptRecoveryTool.js +2 -5
  567. package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -8
  568. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +5 -8
  569. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -7
  570. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +6 -9
  571. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +6 -9
  572. package/dist/server/registerOfficialTools.js +4 -21
  573. package/dist/server/registerProcessComparisonTool.js +74 -48
  574. package/dist/server/registerRecordedCrashTools.js +2 -5
  575. package/dist/server/registerSessionRecordTools.js +19 -24
  576. package/dist/server/registerSessionStatusTool.js +19 -6
  577. package/dist/server/registerSessionTools.js +20 -18
  578. package/dist/server/registerWebModuleTool.js +2 -5
  579. package/dist/server/registerWebNetworkCaptureTool.js +2 -5
  580. package/dist/server/registerWebRuntimeTools.js +4 -9
  581. package/dist/server/registerWebScriptTool.js +2 -5
  582. package/dist/server/registerWebSourceLocationTool.js +2 -5
  583. package/dist/server/runDerivedOperation.js +15 -3
  584. package/dist/server/sessionAvailabilityPolicy.js +0 -1
  585. package/dist/server/toolRegistrationOptions.js +2 -2
  586. package/dist/server/toolResult.js +75 -51
  587. package/dist/server/toolResultEncoding.js +34 -0
  588. package/dist/windows/WindowsNativeLoader.js +1 -0
  589. package/dist/windows/WindowsOwnedProcess.js +60 -15
  590. package/dist/windows/WindowsPrivateRuntime.js +7 -8
  591. package/install.sh +1 -1
  592. package/native/windows/README.md +3 -1
  593. package/native/windows/build/manifest.json +2 -2
  594. package/native/windows/build/rea-windows-x64.node +0 -0
  595. package/package.json +44 -30
  596. package/scripts/electron-active-hook-boundaries.cjs +18 -20
  597. package/scripts/electron-active-hook.cjs +241 -37
  598. package/scripts/rea.mjs +3 -6
  599. package/skills/reverse-engineer-anything/SKILL.md +12 -3
  600. package/skills/reverse-engineer-anything/references/android-applications.md +6 -3
  601. package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -4
  602. package/skills/reverse-engineer-anything/references/javascript-applications.md +20 -3
  603. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +9 -0
  604. package/dist/config.js +0 -1
  605. package/dist/contracts/browserCaptureToolInputSchema.js +0 -43
  606. package/dist/contracts/process/processCaptureExample.js +0 -2
  607. package/dist/contracts/toolOutputSchemas.js +0 -2
  608. package/dist/ghidra/GhidraDefaults.js +0 -2
  609. package/dist/main/reload.js +0 -12
  610. package/dist/main/state.js +0 -3
  611. package/dist/server/sessionToolPolicies.js +0 -2
@@ -28,32 +28,29 @@ export const traceLiteralFeature = async (call, input, signal) => {
28
28
  };
29
29
  const literalMatches = async (call, input, sources, signal) => {
30
30
  const matches = [];
31
- const needles = [...new Set(input.query.trim().split(/\s+/u))];
32
31
  const matched = new Set();
33
- for (const needle of needles) {
34
- for (const [tool, type] of sources) {
35
- const result = await call(tool, {
36
- pattern: needle,
37
- mode: "literal",
38
- case_sensitive: input.case_sensitive,
39
- }, signal);
40
- if (!result.ok)
41
- return result;
42
- const items = z
43
- .array(z.object({ address: z.string(), value: z.string() }))
44
- .safeParse(result.value);
45
- if (!items.success)
46
- return err(new AnalysisOutputError(tool, "provider returned an invalid search result"));
47
- addPageMatches({
48
- items: items.data.map(({ address, value: name }) => ({
49
- address,
50
- name,
51
- })),
52
- type,
53
- matches,
54
- matched,
55
- });
56
- }
32
+ for (const [tool, type] of sources) {
33
+ const result = await call(tool, {
34
+ pattern: input.query,
35
+ mode: "literal",
36
+ case_sensitive: input.case_sensitive,
37
+ }, signal);
38
+ if (!result.ok)
39
+ return result;
40
+ const items = z
41
+ .array(z.object({ address: z.string(), value: z.string() }))
42
+ .safeParse(result.value);
43
+ if (!items.success)
44
+ return err(new AnalysisOutputError(tool, "provider returned an invalid search result"));
45
+ addPageMatches({
46
+ items: items.data.map(({ address, value: name }) => ({
47
+ address,
48
+ name,
49
+ })),
50
+ type,
51
+ matches,
52
+ matched,
53
+ });
57
54
  }
58
55
  return ok({ matches });
59
56
  };
@@ -1,9 +1,9 @@
1
1
  import { z } from "zod";
2
2
  import { enhancedInputSchemas } from "../contracts/enhancedInputs.js";
3
- import { AnalysisCancelledError, AnalysisOutputError, } from "../domain/analysisErrorCore.js";
3
+ import { AnalysisCancelledError, AnalysisCapabilityUnavailableError, AnalysisOutputError, } from "../domain/analysisErrorCore.js";
4
4
  import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
5
5
  import {} from "../domain/analysisErrorBase.js";
6
- import { addressDistance, functionDossierSchema, parseDocuments, parseFunctionDossier, parseListCount, parseRelatedAddresses, parseSegments, } from "../domain/hopperValues.js";
6
+ import { addressDistance, functionDossierSchema, parseFunctionDossier, parseListCount, parseRelatedAddresses, parseSegments, } from "../domain/hopperValues.js";
7
7
  import { err, ok } from "../domain/result.js";
8
8
  import { categorizeSwiftTypes, discoverObjcClasses, discoverObjcProtocols, } from "../domain/symbolAnalysis.js";
9
9
  import { inspectNativeDispatch } from "./native/NativeDispatchMetadataInspection.js";
@@ -11,7 +11,9 @@ import { traceNativeValues } from "./native/NativeValueTrace.js";
11
11
  import { traceNativeUiAction } from "./native/NativeUiActionTrace.js";
12
12
  import { jsonValueSchema } from "../domain/jsonValue.js";
13
13
  import { invalidEnhancedInput, } from "./EnhancedToolTypes.js";
14
+ import { resolveAnalysisDocument } from "./AnalysisDocument.js";
14
15
  import { traceCallPath } from "./CallPathTracing.js";
16
+ import { resolveProcedureAddress } from "./ProcedureAddressResolution.js";
15
17
  import { traceLiteralFeature } from "./EnhancedLiteralTracing.js";
16
18
  import { projectNativeApiInspection } from "./native/NativeApiInspection.js";
17
19
  /**
@@ -177,20 +179,34 @@ export class EnhancedTools {
177
179
  }
178
180
  async #batchDecompile(addresses, signal) {
179
181
  const items = await Promise.all(addresses.map(async (address) => {
180
- const result = await this.#call("procedure_pseudo_code", { procedure: address }, signal);
182
+ const resolved = await resolveProcedureAddress(this.#call.bind(this), address, signal);
183
+ const procedure = resolved.ok
184
+ ? await this.#batchProcedureIdentity(resolved.value, signal)
185
+ : {
186
+ status: "unknown",
187
+ error: projectAnalysisError(resolved.error),
188
+ };
189
+ const result = await this.#call("procedure_pseudo_code", { procedure: resolved.ok ? resolved.value : address }, signal);
181
190
  if (!result.ok)
182
191
  return {
183
192
  address,
193
+ procedure,
184
194
  status: "error",
185
195
  error: projectAnalysisError(result.error),
186
196
  };
187
197
  if (typeof result.value !== "string" || result.value.length === 0)
188
198
  return {
189
199
  address,
200
+ procedure,
190
201
  status: "error",
191
202
  error: projectAnalysisError(new AnalysisOutputError("procedure_pseudo_code", "provider returned empty pseudocode")),
192
203
  };
193
- return { address, status: "ok", pseudocode: result.value };
204
+ return {
205
+ address,
206
+ procedure,
207
+ status: "ok",
208
+ pseudocode: result.value,
209
+ };
194
210
  }));
195
211
  const succeeded = items.filter(({ status }) => status === "ok").length;
196
212
  return ok({
@@ -200,12 +216,32 @@ export class EnhancedTools {
200
216
  failed: items.length - succeeded,
201
217
  });
202
218
  }
219
+ async #batchProcedureIdentity(address, signal) {
220
+ const observed = await this.#call("address_name", { address }, signal);
221
+ const named = observed.ok &&
222
+ (typeof observed.value === "string" || observed.value === null);
223
+ return {
224
+ status: "resolved",
225
+ address,
226
+ name: named ? observed.value : null,
227
+ ...(named
228
+ ? {}
229
+ : {
230
+ name_error: projectAnalysisError(observed.ok
231
+ ? new AnalysisOutputError("address_name", "provider returned an invalid entry label")
232
+ : observed.error),
233
+ }),
234
+ };
235
+ }
203
236
  async #callGraph(input, signal) {
204
237
  const relation = input.direction === "forward" ? "callees" : "callers";
205
238
  const tool = input.direction === "forward" ? "procedure_callees" : "procedure_callers";
206
- const discovered = new Set([input.address]);
239
+ const resolved = await resolveProcedureAddress(this.#call.bind(this), input.address, signal);
240
+ if (!resolved.ok)
241
+ return resolved;
242
+ const discovered = new Set([resolved.value]);
207
243
  const queue = [
208
- { address: input.address, depth: 0 },
244
+ { address: resolved.value, depth: 0 },
209
245
  ];
210
246
  let queueIndex = 0;
211
247
  const graph = {};
@@ -249,9 +285,23 @@ export class EnhancedTools {
249
285
  }
250
286
  async #analyzeSwiftTypes(input, signal) {
251
287
  const procedures = await this.#allAddressed("list_procedures", signal);
252
- return procedures.ok
253
- ? ok(categorizeSwiftTypes(procedures.value, input))
254
- : procedures;
288
+ if (!procedures.ok)
289
+ return procedures;
290
+ const symbols = await this.#allAddressed("list_names", signal);
291
+ if (!symbols.ok &&
292
+ !(symbols.error instanceof AnalysisCapabilityUnavailableError))
293
+ return symbols;
294
+ const result = categorizeSwiftTypes(procedures.value, input, symbols.ok ? symbols.value : []);
295
+ return ok(symbols.ok
296
+ ? result
297
+ : {
298
+ ...result,
299
+ symbol_inventory_error: projectAnalysisError(symbols.error),
300
+ limitations: [
301
+ ...result.limitations,
302
+ "The provider's symbol inventory is unavailable; demangled procedures could not be joined to their Swift aliases.",
303
+ ],
304
+ });
255
305
  }
256
306
  async #findXrefs(name, signal) {
257
307
  const names = await this.#allAddressed("list_names", signal);
@@ -274,16 +324,16 @@ export class EnhancedTools {
274
324
  });
275
325
  }
276
326
  async #binaryOverview(signal) {
277
- const [segmentsResult, documentsResult, proceduresResult, stringsResult] = await Promise.all([
327
+ const document = await resolveAnalysisDocument(this.analysis, undefined, signal);
328
+ if (!document.ok)
329
+ return document;
330
+ const [segmentsResult, proceduresResult, stringsResult] = await Promise.all([
278
331
  this.#call("list_segments", {}, signal),
279
- this.#call("list_documents", {}, signal),
280
332
  this.#call("list_procedures", {}, signal),
281
333
  this.#call("list_strings", {}, signal),
282
334
  ]);
283
335
  if (!segmentsResult.ok)
284
336
  return segmentsResult;
285
- if (!documentsResult.ok)
286
- return documentsResult;
287
337
  if (!proceduresResult.ok)
288
338
  return proceduresResult;
289
339
  if (!stringsResult.ok)
@@ -291,9 +341,6 @@ export class EnhancedTools {
291
341
  const segments = parseSegments(segmentsResult.value);
292
342
  if (!segments.ok)
293
343
  return segments;
294
- const documents = parseDocuments(documentsResult.value);
295
- if (!documents.ok)
296
- return documents;
297
344
  const procedureCount = parseListCount(proceduresResult.value, "procedures");
298
345
  if (!procedureCount.ok)
299
346
  return procedureCount;
@@ -301,7 +348,7 @@ export class EnhancedTools {
301
348
  if (!stringCount.ok)
302
349
  return stringCount;
303
350
  return ok({
304
- document: documents.value[0] ?? "unknown",
351
+ document: document.value,
305
352
  segments: segments.value.map(({ name, start, end }) => ({
306
353
  name,
307
354
  start,
@@ -1,37 +1,54 @@
1
- import { parseEvidenceBundle, serializeEvidenceBundle, } from "../domain/evidenceBundle.js";
1
+ import { describeEvidenceBundleFailure, describeValidationFailure, parseEvidenceBundle, } from "../domain/evidenceBundle.js";
2
2
  import { EvidenceFileError, EvidenceIntegrityError, } from "../domain/evidenceErrors.js";
3
3
  import { err, ok } from "../domain/result.js";
4
- import { parseProcessCapture } from "../domain/process/processCapture.js";
5
- import { readJsonFile, writeTextFile } from "./JsonFiles.js";
4
+ import { AnalysisCancelledError } from "../domain/analysisErrorCore.js";
5
+ import { parseProcessCapture } from "../domain/process/processCaptureParsing.js";
6
+ import { bufferedJsonParts, canonicalJsonParts, } from "../domain/jsonSerialization.js";
7
+ import { readJsonFile, writeTextParts } from "./JsonFiles.js";
6
8
  /** Read and validate an evidence bundle at the caller-supplied path. */
7
9
  export const readEvidenceBundle = async (path) => {
8
10
  const loaded = await readJsonFile(path);
9
11
  if (!loaded.ok)
10
12
  return loaded;
13
+ let bundle;
11
14
  try {
12
- const bundle = parseEvidenceBundle(loaded.value);
13
- for (const record of bundle.records) {
14
- if (record.predicate_type === "rea.process-capture")
15
- parseProcessCapture(record.normalized_result);
16
- }
17
- return ok(bundle);
15
+ bundle = parseEvidenceBundle(loaded.value);
18
16
  }
19
17
  catch (cause) {
20
18
  return err(new EvidenceIntegrityError("Evidence bundle validation failed", {
21
19
  cause,
20
+ userMessage: describeEvidenceBundleFailure(loaded.value, cause),
22
21
  }));
23
22
  }
23
+ for (const record of bundle.records) {
24
+ if (record.predicate_type !== "rea.process-capture")
25
+ continue;
26
+ try {
27
+ parseProcessCapture(record.normalized_result);
28
+ }
29
+ catch (cause) {
30
+ return err(new EvidenceIntegrityError("Evidence bundle validation failed", {
31
+ cause,
32
+ userMessage: `Process capture record ${record.evidence_id} has an invalid normalized_result (${describeValidationFailure(cause)}). Recreate or re-export the bundle, then try again.`,
33
+ }));
34
+ }
35
+ }
36
+ return ok(bundle);
24
37
  };
25
38
  /** Atomically write deterministic evidence JSON at the caller-supplied path. */
26
- export const writeEvidenceBundle = async (bundle, path, overwrite) => {
27
- let encoded;
39
+ export const writeEvidenceBundle = async (bundle, path, overwrite, signal) => {
40
+ if (signal?.aborted === true)
41
+ return err(new AnalysisCancelledError("export_evidence_bundle"));
42
+ let checked;
28
43
  try {
29
- encoded = serializeEvidenceBundle(bundle);
44
+ checked = parseEvidenceBundle(bundle);
30
45
  }
31
46
  catch (cause) {
32
47
  return err(new EvidenceIntegrityError("Evidence bundle validation failed", {
33
48
  cause,
34
49
  }));
35
50
  }
36
- return writeTextFile(encoded, path, overwrite);
51
+ return writeTextParts(bufferedJsonParts(canonicalJsonParts(checked)), path, overwrite, signal === undefined
52
+ ? undefined
53
+ : { signal, operation: "export_evidence_bundle" });
37
54
  };
@@ -1,15 +1,14 @@
1
1
  import { toolContract } from "../contracts/toolContracts.js";
2
- import { AnalysisInputError } from "../domain/analysisErrorCore.js";
3
2
  import { createEvidence } from "../domain/evidence.js";
4
3
  import { parseFunctionDossier } from "../domain/hopperValues.js";
5
4
  import { jsonObjectSchema } from "../domain/jsonValue.js";
6
5
  import { err, ok } from "../domain/result.js";
7
- import { projectInputIssues } from "../domain/inputIssueProjection.js";
6
+ import { analysisInputErrorFromIssues } from "../domain/inputIssueProjection.js";
8
7
  /** Preserve the provider's observations when presenting a validated function dossier. */
9
8
  export const executeFunctionAnalysisEvidence = async (analysis, parameters, target, options) => {
10
9
  const input = toolContract("analyze_function").inputSchema.safeParse(parameters);
11
10
  if (!input.success)
12
- return err(new AnalysisInputError("analyze_function", { cause: input.error }, projectInputIssues(input.error.issues, parameters)));
11
+ return err(analysisInputErrorFromIssues("analyze_function", input.error.issues, parameters, { cause: input.error }));
13
12
  const arguments_ = jsonObjectSchema.parse(input.data);
14
13
  const execution = await analysis.execute("analyze_function", arguments_, options);
15
14
  if (!execution.ok)
@@ -1,14 +1,15 @@
1
1
  import { z } from "zod";
2
- import { AnalysisInputError, AnalysisProtocolError, } from "../domain/analysisErrorCore.js";
2
+ import { AnalysisProtocolError } from "../domain/analysisErrorCore.js";
3
3
  import {} from "../domain/analysisErrorBase.js";
4
4
  import { createEvidence, } from "../domain/evidence.js";
5
5
  import { jsonValueSchema } from "../domain/jsonValue.js";
6
6
  import { err, ok } from "../domain/result.js";
7
+ import { requestInputError, workflowInputError } from "./workflowInputError.js";
7
8
  /** Parse one inventory projection and wrap its deterministic result in Evidence. */
8
9
  export const projectInventoryEvidence = (options) => {
9
10
  const parsed = options.schema.safeParse(options.rawInput);
10
11
  if (!parsed.success)
11
- return err(new AnalysisInputError(options.operation, { cause: parsed.error }));
12
+ return err(requestInputError(options.operation, parsed.error, options.rawInput));
12
13
  try {
13
14
  const result = options.project(parsed.data);
14
15
  const first = parsed.data.inventory_evidence[0];
@@ -38,7 +39,7 @@ export const projectInventoryEvidence = (options) => {
38
39
  }
39
40
  catch (cause) {
40
41
  return err(cause instanceof TypeError || cause instanceof z.ZodError
41
- ? new AnalysisInputError(options.operation, { cause })
42
+ ? workflowInputError(options.operation, cause)
42
43
  : new AnalysisProtocolError(options.protocolError, { cause }));
43
44
  }
44
45
  };
@@ -5,9 +5,12 @@ export const REA_WORKFLOW_PROVIDER = {
5
5
  name: "REA composed investigation workflow",
6
6
  version: "1",
7
7
  };
8
- /** Commit a workflow result to the exact upstream deep-analysis profile. */
9
- export const workflowAnalysisProfile = (upstream) => createAnalysisProfile(REA_WORKFLOW_PROVIDER, {
8
+ /** Commit a workflow result to its upstream profile and applicable semantic revision. */
9
+ export const workflowAnalysisProfile = (upstream, operation) => createAnalysisProfile(REA_WORKFLOW_PROVIDER, {
10
10
  upstream_analysis_profile: upstream,
11
+ ...(operation === "binary_overview" || operation === "batch_decompile"
12
+ ? { workflow_revision: 2 }
13
+ : {}),
11
14
  });
12
15
  /** Provider identity for deterministic artifact inventories. */
13
16
  export const ARTIFACT_GRAPH_PROVIDER = {
@@ -57,6 +60,12 @@ export const JAVASCRIPT_RUNTIME_RECONCILIATION_PROVIDER = {
57
60
  name: "REA JavaScript runtime reconciliation",
58
61
  version: "1",
59
62
  };
63
+ /** Provider identity for selected views of retained analysis Evidence. */
64
+ export const ANALYSIS_VIEW_PROVIDER = {
65
+ id: "rea-analysis-view",
66
+ name: "REA analysis view projection",
67
+ version: "1",
68
+ };
60
69
  /** Provider identity for graph-native feature tracing and version comparison. */
61
70
  export const JAVASCRIPT_APPLICATION_WORKFLOW_PROVIDER = {
62
71
  id: "rea-javascript-application-workflows",
@@ -1,34 +1,42 @@
1
- import { link, lstat, mkdtemp, readFile, realpath, rm } from "node:fs/promises";
1
+ import { link, lstat, mkdtemp, open, readFile, realpath, rename, rm, } from "node:fs/promises";
2
2
  import { basename, dirname, resolve } from "node:path";
3
- import writeFileAtomic from "write-file-atomic";
4
3
  import { EvidenceFileError } from "../domain/evidenceErrors.js";
4
+ import { AnalysisCancelledError } from "../domain/analysisErrorCore.js";
5
5
  import { err, ok } from "../domain/result.js";
6
6
  /** Read JSON data from a regular file at the caller-supplied path. */
7
7
  export const readJsonFile = async (path) => {
8
+ const requestedPath = resolve(path);
8
9
  try {
9
- const canonicalPath = await realpath(resolve(path));
10
+ const canonicalPath = await realpath(requestedPath);
10
11
  const stats = await lstat(canonicalPath);
11
12
  if (!stats.isFile())
12
- return err(new EvidenceFileError("read", "not-file"));
13
+ return err(new EvidenceFileError("read", "not-file", { path: requestedPath }));
13
14
  const encoded = await readFile(canonicalPath);
14
15
  let decoded;
15
16
  try {
16
17
  decoded = JSON.parse(new TextDecoder("utf-8", { fatal: true, ignoreBOM: true }).decode(encoded));
17
18
  }
18
19
  catch (cause) {
19
- return err(new EvidenceFileError("read", "invalid-json", { cause }));
20
+ return err(new EvidenceFileError("read", "invalid-json", {
21
+ cause,
22
+ path: requestedPath,
23
+ }));
20
24
  }
21
25
  return ok(decoded);
22
26
  }
23
27
  catch (cause) {
24
- return err(new EvidenceFileError("read", "io", { cause }));
28
+ return err(new EvidenceFileError("read", missingOrIo(cause), {
29
+ cause,
30
+ path: requestedPath,
31
+ }));
25
32
  }
26
33
  };
27
34
  /** Atomically write text to the caller-supplied path. */
28
- export const writeTextFile = async (encoded, path, overwrite) => {
29
- const bytes = Buffer.byteLength(encoded, "utf8");
35
+ export const writeTextFile = async (encoded, path, overwrite) => writeTextParts([encoded], path, overwrite);
36
+ export async function writeTextParts(parts, path, overwrite, cancellation) {
37
+ const requestedPath = resolve(path);
30
38
  try {
31
- const requestedPath = resolve(path);
39
+ assertWriteActive(cancellation);
32
40
  const canonicalParent = await realpath(dirname(requestedPath));
33
41
  const destination = resolve(canonicalParent, basename(requestedPath));
34
42
  const existing = await lstat(destination).catch((cause) => {
@@ -38,42 +46,89 @@ export const writeTextFile = async (encoded, path, overwrite) => {
38
46
  });
39
47
  if (existing !== undefined) {
40
48
  if (!overwrite)
41
- return err(new EvidenceFileError("write", "exists"));
49
+ return err(new EvidenceFileError("write", "exists", { path: requestedPath }));
42
50
  if (!existing.isFile() || existing.isSymbolicLink())
43
- return err(new EvidenceFileError("write", "not-file"));
51
+ return err(new EvidenceFileError("write", "not-file", { path: requestedPath }));
44
52
  }
45
- if (overwrite)
46
- await writeFileAtomic(destination, encoded, {
47
- encoding: "utf8",
48
- mode: 0o600,
49
- fsync: true,
50
- });
51
- else
52
- await publishNewFile(destination, encoded);
53
+ assertWriteActive(cancellation);
54
+ const bytes = await publishFile(destination, parts, overwrite, cancellation);
53
55
  return ok({ path: requestedPath, bytes });
54
56
  }
55
57
  catch (cause) {
58
+ if (cancellation?.signal.aborted === true &&
59
+ cause instanceof AnalysisCancelledError &&
60
+ cause.operation === cancellation.operation)
61
+ return err(cause);
56
62
  if (!overwrite && fileErrorCode(cause) === "EEXIST")
57
- return err(new EvidenceFileError("write", "exists", { cause }));
58
- return err(new EvidenceFileError("write", "io", { cause }));
63
+ return err(new EvidenceFileError("write", "exists", {
64
+ cause,
65
+ path: requestedPath,
66
+ }));
67
+ return err(new EvidenceFileError("write", missingOrIo(cause), {
68
+ cause,
69
+ path: requestedPath,
70
+ }));
59
71
  }
72
+ }
73
+ /** A missing path or parent is a selection error, not a permission failure. */
74
+ const missingOrIo = (cause) => {
75
+ const code = fileErrorCode(cause);
76
+ return code === "ENOENT" || code === "ENOTDIR" ? "missing" : "io";
60
77
  };
61
- const publishNewFile = async (destination, encoded) => {
78
+ const publishFile = async (destination, parts, overwrite, cancellation) => {
62
79
  const stagingDirectory = await mkdtemp(resolve(dirname(destination), ".rea-write-"));
63
80
  try {
64
81
  const staged = resolve(stagingDirectory, "content");
65
- await writeFileAtomic(staged, encoded, {
66
- encoding: "utf8",
67
- mode: 0o600,
68
- fsync: true,
69
- });
82
+ const file = await open(staged, "wx", 0o600);
83
+ let bytes = 0;
84
+ try {
85
+ bytes = await writeStagedParts(file, parts, cancellation);
86
+ assertWriteActive(cancellation);
87
+ await file.sync();
88
+ }
89
+ finally {
90
+ await file.close();
91
+ }
92
+ // Once submitted, the atomic publication can win a later cancellation race.
93
+ assertWriteActive(cancellation);
94
+ if (overwrite)
95
+ await rename(staged, destination);
70
96
  // A hard link publishes complete bytes atomically and cannot replace an existing name.
71
- await link(staged, destination);
97
+ else
98
+ await link(staged, destination);
99
+ return bytes;
72
100
  }
73
101
  finally {
74
102
  await rm(stagingDirectory, { recursive: true, force: true });
75
103
  }
76
104
  };
105
+ const writeStagedParts = async (file, parts, cancellation) => {
106
+ assertWriteActive(cancellation);
107
+ const iterator = parts[Symbol.iterator]();
108
+ let exhausted = false;
109
+ let bytes = 0;
110
+ try {
111
+ for (;;) {
112
+ assertWriteActive(cancellation);
113
+ const part = iterator.next();
114
+ if (part.done)
115
+ exhausted = true;
116
+ assertWriteActive(cancellation);
117
+ if (part.done)
118
+ return bytes;
119
+ await file.writeFile(part.value, { encoding: "utf8" });
120
+ bytes += Buffer.byteLength(part.value, "utf8");
121
+ }
122
+ }
123
+ finally {
124
+ if (!exhausted)
125
+ iterator.return?.();
126
+ }
127
+ };
128
+ const assertWriteActive = (cancellation) => {
129
+ if (cancellation?.signal.aborted === true)
130
+ throw new AnalysisCancelledError(cancellation.operation);
131
+ };
77
132
  const fileErrorCode = (cause) => typeof cause === "object" && cause !== null && "code" in cause
78
133
  ? cause.code
79
134
  : undefined;
@@ -84,7 +84,7 @@ export const readLinuxDistribution = async () => {
84
84
  }
85
85
  };
86
86
  /** Download, verify, install, and read back the official Hopper Linux package. */
87
- export const installLinuxHopper = async (host = systemLinuxHopperInstallHost(), options = {}) => {
87
+ export const installLinuxHopper = async (host = systemLinuxHopperInstallHost(process.env), options = {}) => {
88
88
  if (options.signal?.aborted === true)
89
89
  return { status: "failed", reason: "cancelled" };
90
90
  const distribution = await host.distribution();
@@ -124,7 +124,8 @@ export const installLinuxHopper = async (host = systemLinuxHopperInstallHost(),
124
124
  };
125
125
  /** Canonical launcher path for a legacy user-local Linux Hopper installation. */
126
126
  export const linuxHopperLauncherPath = (home) => join(home, ".local/share/rea/hopper/bin/Hopper");
127
- const systemLinuxHopperInstallHost = () => ({
127
+ /** Compose package-manager and linker checks from the selected caller environment. */
128
+ export const systemLinuxHopperInstallHost = (environment) => ({
128
129
  distribution: readLinuxDistribution,
129
130
  async download(url, options) {
130
131
  const response = await fetch(url, {
@@ -138,11 +139,11 @@ const systemLinuxHopperInstallHost = () => ({
138
139
  },
139
140
  createTemporaryDirectory: () => mkdtemp(join(tmpdir(), "rea-hopper-")),
140
141
  writeArchive: (path, bytes) => writeFile(path, bytes, { mode: 0o600 }),
141
- installPackage: installSystemPackage,
142
+ installPackage: (family, archive) => installSystemPackage(family, archive, environment),
142
143
  async launcherStatus(path) {
143
144
  try {
144
145
  await access(path);
145
- const linked = await execFileOutput("ldd", [path]);
146
+ const linked = await execFileOutput("ldd", [path], { env: environment });
146
147
  if (!linuxSharedLibrariesAvailable(`${linked.stdout}\n${linked.stderr}`))
147
148
  return "runtime_dependencies";
148
149
  return (await linuxHopperBinarySupported(path))
@@ -175,10 +176,12 @@ export const linuxHopperBinarySupported = async (path) => {
175
176
  export const linuxHopperLauncherDigestSupported = (digest) => SUPPORTED_HOPPER_SHA256.has(digest);
176
177
  /** Interpret ldd output conservatively so a present but broken launcher is unhealthy. */
177
178
  export const linuxSharedLibrariesAvailable = (output) => !/(?:=>\s+not found|error while loading shared libraries)/iu.test(output);
178
- const installSystemPackage = async (family, archive) => {
179
+ const installSystemPackage = async (family, archive, environment) => {
179
180
  try {
180
181
  for (const command of linuxPackageManagerCommands(family, archive, process.getuid?.() === 0))
181
- await execFileAsync(command.executable, command.args);
182
+ await execFileAsync(command.executable, command.args, {
183
+ env: environment,
184
+ });
182
185
  return true;
183
186
  }
184
187
  catch (cause) {