rea-agents 6.1.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 (453) hide show
  1. package/README.md +7 -5
  2. package/bridge/ghidra/ReaGhidraBridge.java +32 -4
  3. package/bridge/hopper_bridge.py +6 -1
  4. package/dist/android/JadxConfiguration.js +87 -7
  5. package/dist/android/JadxMcpTransport.js +14 -2
  6. package/dist/android/JadxProvider.js +57 -35
  7. package/dist/application/BinaryTargetResolver.js +5 -3
  8. package/dist/application/BrowserEvidence.js +3 -8
  9. package/dist/application/BrowserScenarioEvidence.js +2 -18
  10. package/dist/application/CapabilityInventory.js +43 -9
  11. package/dist/application/ClientConfigurationDocument.js +69 -25
  12. package/dist/application/DirectAnalysis.js +29 -14
  13. package/dist/application/DirectAnalysisCleanup.js +72 -0
  14. package/dist/application/DirectAnalysisStatus.js +4 -5
  15. package/dist/application/Doctor.js +15 -19
  16. package/dist/application/DoctorDiagnostics.js +1 -2
  17. package/dist/application/EnhancedTools.js +51 -6
  18. package/dist/application/EvidenceBundleFiles.js +8 -3
  19. package/dist/application/InvestigationProviders.js +9 -1
  20. package/dist/application/JsonFiles.js +42 -9
  21. package/dist/application/LinuxHopper.js +9 -6
  22. package/dist/application/MacHopper.js +15 -18
  23. package/dist/application/RealHopperAssertions.js +0 -11
  24. package/dist/application/ReconstructionObligationCandidates.js +1 -1
  25. package/dist/application/ReferenceSourceImportEntries.js +1 -1
  26. package/dist/application/Setup.js +8 -16
  27. package/dist/application/SetupHost.js +16 -27
  28. package/dist/application/SetupPlan.js +6 -6
  29. package/dist/application/Uninstall.js +81 -29
  30. package/dist/application/UpdateMaintenance.js +7 -5
  31. package/dist/application/UpdateRuntime.js +12 -12
  32. package/dist/application/WebScriptExportService.js +30 -4
  33. package/dist/application/WorkflowEvidence.js +25 -2
  34. package/dist/application/XrefsAddressResolution.js +45 -0
  35. package/dist/application/analysisView/AnalysisViewService.js +76 -0
  36. package/dist/application/binary/AnalysisClientCleanup.js +30 -5
  37. package/dist/application/binary/AnalysisProviderEvaluation.js +1 -2
  38. package/dist/application/binary/AnalysisProviderRegistry.js +2 -6
  39. package/dist/application/binary/AnalysisSnapshotCache.js +10 -8
  40. package/dist/application/binary/BinarySession.js +70 -29
  41. package/dist/application/binary/BinarySessionComposition.js +1 -3
  42. package/dist/application/binary/BinarySessionExecution.js +3 -5
  43. package/dist/application/binary/BinarySessionOpen.js +1 -1
  44. package/dist/application/binary/BinarySessionRecords.js +1 -1
  45. package/dist/application/binary/BinarySessionStatus.js +1 -6
  46. package/dist/application/binary/CompositeProvider.js +4 -18
  47. package/dist/application/binary/LazyAnalysisProvider.js +5 -5
  48. package/dist/application/binary/SessionProviderRouter.js +27 -135
  49. package/dist/application/homebrew.js +48 -0
  50. package/dist/application/javascript/ElectronActiveEvidence.js +9 -13
  51. package/dist/application/javascript/JavaScriptApplicationEvidence.js +2 -6
  52. package/dist/application/javascript/JavaScriptApplicationService.js +6 -1
  53. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +5 -3
  54. package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +11 -9
  55. package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +11 -3
  56. package/dist/application/javascript/JavaScriptArtifactGraphContext.js +9 -0
  57. package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +8 -5
  58. package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +12 -3
  59. package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +0 -1
  60. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +43 -16
  61. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +46 -6
  62. package/dist/application/javascript/JavaScriptModuleRelationships.js +1 -1
  63. package/dist/application/javascript/JavaScriptRuntimeObservationService.js +3 -3
  64. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +2 -3
  65. package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +1 -2
  66. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +2 -3
  67. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +1 -5
  68. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +75 -46
  69. package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +2 -3
  70. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +42 -19
  71. package/dist/application/managed/ManagedMemberComparisonService.js +2 -1
  72. package/dist/application/managed/ManagedNativeVerificationService.js +2 -1
  73. package/dist/application/process/ProcessCli.js +11 -11
  74. package/dist/application/process/ProcessEvidence.js +0 -1
  75. package/dist/artifacts/ArtifactProvider.js +39 -14
  76. package/dist/artifacts/ArtifactReader.js +31 -0
  77. package/dist/artifacts/DirectoryArtifactReader.js +2 -1
  78. package/dist/artifacts/MachOSliceArtifactReader.js +9 -2
  79. package/dist/artifacts/NativeDmgArtifactReader.js +65 -20
  80. package/dist/artifacts/SafeOutputTree.js +16 -2
  81. package/dist/artifacts/ZipArtifactReader.js +11 -4
  82. package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +4 -2
  83. package/dist/artifacts/apple/DylibResolutionReader.js +17 -7
  84. package/dist/artifacts/apple/KeyedArchiveReader.js +21 -3
  85. package/dist/artifacts/extraction/ArtifactExtraction.js +78 -21
  86. package/dist/artifacts/inventory/ArtifactGraphConstruction.js +67 -61
  87. package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
  88. package/dist/artifacts/inventory/reader.js +3 -3
  89. package/dist/artifacts/inventory/scanCanonical.js +48 -24
  90. package/dist/artifacts/inventory/scanReader.js +5 -9
  91. package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
  92. package/dist/browser/CdpBrowserProvider.js +2 -3
  93. package/dist/browser/CdpCaptureEventHandlers.js +2 -4
  94. package/dist/browser/CdpCaptureEvents.js +0 -1
  95. package/dist/browser/CdpCaptureValues.js +20 -0
  96. package/dist/browser/CdpElectronProvider.js +0 -2
  97. package/dist/browser/CdpElectronScriptEvents.js +2 -8
  98. package/dist/browser/CdpElectronScripts.js +2 -3
  99. package/dist/browser/CdpPageCaptureScripts.js +2 -3
  100. package/dist/browser/CdpSafeMetadata.js +10 -10
  101. package/dist/browser/PlaywrightBrowserScenarioProvider.js +59 -44
  102. package/dist/browser/PlaywrightElectronActiveActions.js +2 -56
  103. package/dist/browser/PlaywrightElectronActiveProvider.js +10 -6
  104. package/dist/browser/PlaywrightScenarioArtifacts.js +1 -1
  105. package/dist/browser/PlaywrightScenarioBrowser.js +139 -39
  106. package/dist/browser/PlaywrightScenarioEvents.js +1 -1
  107. package/dist/browser/PlaywrightScenarioSession.js +39 -22
  108. package/dist/browser/assets/ScriptCaptureAdapters.js +1 -1
  109. package/dist/browser/history/CaptureFailures.js +6 -2
  110. package/dist/browser/history/MitmproxyCaptureAdapter.js +4 -2
  111. package/dist/catalogIdentity.js +0 -1
  112. package/dist/cli/analysisViewCommands.js +36 -0
  113. package/dist/cli/artifactCommands.js +11 -12
  114. package/dist/cli/coreAnalysisCommands.js +3 -3
  115. package/dist/cli/coreBinaryCommands.js +32 -27
  116. package/dist/cli/coreNativeCommands.js +9 -10
  117. package/dist/cli/electronCommands.js +4 -4
  118. package/dist/cli/interactiveSetup.js +6 -6
  119. package/dist/cli/managedCommands.js +7 -8
  120. package/dist/cli/nativeCallCommands.js +1 -2
  121. package/dist/cli/omittableDefaults.js +50 -0
  122. package/dist/cli/processCommands.js +3 -2
  123. package/dist/cli/setupCommands.js +16 -15
  124. package/dist/cli/utilityCommands.js +9 -9
  125. package/dist/cli.js +16 -8
  126. package/dist/cliBrowserScenarioCommands.js +2 -2
  127. package/dist/cliCommandNames.js +1 -0
  128. package/dist/cliJsonInput.js +15 -1
  129. package/dist/cliOutput.js +0 -38
  130. package/dist/composition/auxiliaryAnalysisProviders.js +27 -23
  131. package/dist/composition/binary.js +9 -9
  132. package/dist/composition/browserScenario.js +2 -1
  133. package/dist/composition/directAnalysis.js +20 -13
  134. package/dist/composition/electronScenario.js +1 -1
  135. package/dist/composition/optionalObservationProviders.js +12 -7
  136. package/dist/config/environment.js +6 -0
  137. package/dist/config/ghidraStartupTimeout.js +4 -9
  138. package/dist/config/homeDirectory.js +12 -0
  139. package/dist/config/mcpResponseBudget.js +9 -1
  140. package/dist/config/parseConfig.js +7 -3
  141. package/dist/config/parsers.js +19 -22
  142. package/dist/contracts/analysisViewToolContracts.js +56 -0
  143. package/dist/contracts/applicationToolContracts.js +5 -4
  144. package/dist/contracts/artifactComparisonExample.js +2 -2
  145. package/dist/contracts/artifactToolContracts.js +1 -1
  146. package/dist/contracts/browserScenarioToolContracts.js +1 -1
  147. package/dist/contracts/browserToolContracts.js +19 -15
  148. package/dist/contracts/enhancedInputs.js +2 -2
  149. package/dist/contracts/enhancedToolContracts.js +4 -3
  150. package/dist/contracts/evm/evmToolContracts.js +1 -1
  151. package/dist/contracts/functionWorkflowToolContracts.js +1 -1
  152. package/dist/contracts/inputSchemaPresentation.js +90 -0
  153. package/dist/contracts/investigationExamples.js +4 -3
  154. package/dist/contracts/javascript/electronToolContracts.js +1 -1
  155. package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +0 -20
  156. package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +245 -0
  157. package/dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js +1 -1
  158. package/dist/contracts/managed/managedToolContracts.js +5 -10
  159. package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
  160. package/dist/contracts/mobileApplicationGraphExamples.js +3 -3
  161. package/dist/contracts/native/binaryDiagnosticsToolContracts.js +1 -1
  162. package/dist/contracts/native/nativeToolContracts.js +2 -2
  163. package/dist/contracts/officialToolContracts.js +2 -1
  164. package/dist/contracts/promptContracts.js +2 -2
  165. package/dist/contracts/providerSelection.js +1 -1
  166. package/dist/contracts/sessionToolContracts.js +14 -2
  167. package/dist/contracts/sessionToolSchemas.js +1 -14
  168. package/dist/contracts/toolContracts.js +2 -0
  169. package/dist/contracts/toolEffects.js +1 -0
  170. package/dist/contracts/toolOutputSchemaGroups.js +136 -92
  171. package/dist/contracts/toolOutputSchemaPrimitives.js +11 -21
  172. package/dist/contracts/toolSchemaMetadata.js +18 -69
  173. package/dist/contracts/webNetworkCaptureToolContracts.js +1 -1
  174. package/dist/contracts/webRuntimeToolContracts.js +1 -1
  175. package/dist/contracts/webScriptToolContracts.js +1 -1
  176. package/dist/doctorRuntime.js +7 -5
  177. package/dist/domain/analysisErrorCore.js +3 -0
  178. package/dist/domain/analysisErrorPresentation.js +18 -3
  179. package/dist/domain/analysisErrorProjection.js +24 -5
  180. package/dist/domain/analysisSnapshot.js +29 -31
  181. package/dist/domain/analysisView/analysisView.js +243 -0
  182. package/dist/domain/analysisView/analysisViewCoverage.js +19 -0
  183. package/dist/domain/analysisView/binaryLayoutView.js +159 -0
  184. package/dist/domain/analysisView/javascriptApplicationView.js +238 -0
  185. package/dist/domain/android/androidApplication.js +1 -1
  186. package/dist/domain/apple/appleApplication.js +1 -1
  187. package/dist/domain/apple/dylibResolution.js +10 -3
  188. package/dist/domain/apple/interfaceBuilderGraph.js +0 -1
  189. package/dist/domain/apple/keyedArchive.js +26 -2
  190. package/dist/domain/artifactComparison.js +15 -6
  191. package/dist/domain/artifactGraph.js +16 -3
  192. package/dist/domain/artifactInventoryEvidence.js +9 -16
  193. package/dist/domain/artifactOperationError.js +3 -3
  194. package/dist/domain/artifactPartialObservation.js +1 -0
  195. package/dist/domain/artifactPathSyntax.js +49 -0
  196. package/dist/domain/binaryTarget.js +39 -13
  197. package/dist/domain/browserCaptureComparison.js +13 -49
  198. package/dist/domain/browserNetworkEvidence.js +10 -4
  199. package/dist/domain/browserObservation.js +0 -1
  200. package/dist/domain/browserObservationSchemas.js +14 -3
  201. package/dist/domain/browserScenario.js +0 -1
  202. package/dist/domain/browserScenarioCapture.js +1 -2
  203. package/dist/domain/browserScenarioDiff.js +0 -2
  204. package/dist/domain/browserScenarioDiffEvidence.js +0 -12
  205. package/dist/domain/browserScenarioDiffValues.js +2 -2
  206. package/dist/domain/browserScenarioValues.js +3 -4
  207. package/dist/domain/callPath.js +8 -9
  208. package/dist/domain/callPathSchemas.js +2 -2
  209. package/dist/domain/changedBehavior.js +3 -3
  210. package/dist/domain/completionLedgerGeneration.js +2 -1
  211. package/dist/domain/configurationErrors.js +12 -0
  212. package/dist/domain/conformancePackage.js +4 -3
  213. package/dist/domain/evidence.js +10 -36
  214. package/dist/domain/evidenceBundle.js +7 -9
  215. package/dist/domain/evidenceCompletionLedger.js +2 -1
  216. package/dist/domain/functionComparison.js +4 -5
  217. package/dist/domain/functionComparisonDimensions.js +120 -87
  218. package/dist/domain/functionComparisonNormalization.js +23 -34
  219. package/dist/domain/functionComparisonResults.js +1 -4
  220. package/dist/domain/functionComparisonSchemas.js +2 -8
  221. package/dist/domain/functionDossierEvidence.js +2 -37
  222. package/dist/domain/javascript/electronActiveObservation.js +26 -69
  223. package/dist/domain/javascript/electronObservation.js +14 -3
  224. package/dist/domain/javascript/electronStaticAnalysisBrowser.js +10 -9
  225. package/dist/domain/javascript/electronStaticAnalysisIpc.js +2 -1
  226. package/dist/domain/javascript/electronStaticAnalysisNative.js +2 -1
  227. package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +2 -0
  228. package/dist/domain/javascript/javascriptApplicationGraph.js +26 -3
  229. package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +9 -2
  230. package/dist/domain/javascript/javascriptApplicationVersionItems.js +5 -2
  231. package/dist/domain/javascript/javascriptApplicationVersionKeys.js +2 -1
  232. package/dist/{application/javascript/JavaScriptReturnShapeProjection.js → domain/javascript/javascriptExportReturnShapeProjection.js} +4 -4
  233. package/dist/domain/javascript/javascriptExportShapeComparison.js +7 -1
  234. package/dist/domain/javascript/javascriptExportShapeComparisonIdentity.js +6 -1
  235. package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +29 -1
  236. package/dist/domain/javascript/javascriptExportShapeSelection.js +5 -5
  237. package/dist/domain/javascript/javascriptExportShapeVariants.js +67 -14
  238. package/dist/domain/javascript/javascriptFeatureSeed.js +20 -0
  239. package/dist/domain/javascript/javascriptFeatureTraversal.js +0 -1
  240. package/dist/domain/javascript/javascriptNativeHandoff.js +1 -1
  241. package/dist/domain/javascript/javascriptRuntimeLoadState.js +0 -1
  242. package/dist/domain/javascript/javascriptRuntimeObservation.js +10 -2
  243. package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +1 -1
  244. package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +3 -2
  245. package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +0 -1
  246. package/dist/domain/javascript/javascriptSemanticAnalysis.js +9 -3
  247. package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +2 -1
  248. package/dist/domain/javascript/javascriptSemanticCalls.js +2 -1
  249. package/dist/domain/javascript/javascriptSemanticChildProcesses.js +2 -1
  250. package/dist/domain/javascript/javascriptSemanticDataEffects.js +1 -1
  251. package/dist/domain/javascript/javascriptSemanticGraph.js +88 -46
  252. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +77 -20
  253. package/dist/domain/javascript/javascriptSemanticMutationValues.js +21 -27
  254. package/dist/domain/javascript/javascriptSemanticObjects.js +83 -42
  255. package/dist/domain/javascript/javascriptSemanticPrimitives.js +1 -12
  256. package/dist/domain/javascript/javascriptSemanticProjection.js +2 -3
  257. package/dist/domain/javascript/javascriptSemanticPromises.js +2 -1
  258. package/dist/domain/javascript/javascriptSemanticResourceLimits.js +1 -1
  259. package/dist/domain/javascript/javascriptSemanticResources.js +1 -1
  260. package/dist/domain/javascript/javascriptSemanticReturns.js +32 -17
  261. package/dist/domain/javascript/javascriptSemanticSlots.js +72 -0
  262. package/dist/domain/javascript/javascriptSemanticValues.js +47 -54
  263. package/dist/domain/javascript/javascriptSourceMapPaths.js +104 -0
  264. package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +2 -1
  265. package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +0 -1
  266. package/dist/domain/javascript/sourceToBundleComparison.js +12 -3
  267. package/dist/domain/javascript/sourceToBundleSignals.js +47 -19
  268. package/dist/domain/localPath.js +1 -1
  269. package/dist/domain/managed/managedArtifact.js +6 -4
  270. package/dist/domain/managed/managedMemberComparison.js +2 -9
  271. package/dist/domain/managed/managedNativeVerification.js +0 -2
  272. package/dist/domain/managed/managedNativeVerificationMatch.js +9 -3
  273. package/dist/domain/native/binaryLayout.js +2 -3
  274. package/dist/domain/native/nativeApiBoundary.js +1 -1
  275. package/dist/domain/native/nativeCallObservation.js +5 -3
  276. package/dist/domain/native/nativeInstruction.js +7 -0
  277. package/dist/domain/native/recordedCrash.js +2 -3
  278. package/dist/domain/offsetDateTime.js +17 -0
  279. package/dist/domain/process/processCapture.js +13 -12
  280. package/dist/domain/process/processCaptureCoverage.js +67 -0
  281. package/dist/domain/process/processCaptureExample.js +2 -1
  282. package/dist/domain/process/processCaptureParsing.js +1 -34
  283. package/dist/domain/process/processCaptureValidation.js +81 -13
  284. package/dist/domain/process/processComparison.js +41 -22
  285. package/dist/domain/process/processObservation.js +10 -2
  286. package/dist/domain/process/processScenario.js +24 -2
  287. package/dist/domain/process/processTraceComparison.js +0 -2
  288. package/dist/domain/process/processTraceDimensionProjection.js +1 -1
  289. package/dist/domain/process/processTraceEvaluation.js +15 -11
  290. package/dist/domain/process/processTraceSpecification.js +3 -4
  291. package/dist/domain/providerAdapterError.js +2 -0
  292. package/dist/domain/reconstructionCoverage.js +5 -2
  293. package/dist/domain/reconstructionObligationLedgerSchemas.js +2 -1
  294. package/dist/domain/reconstructionReadinessSchemas.js +2 -1
  295. package/dist/domain/reconstructionVerification.js +3 -3
  296. package/dist/domain/reconstructionVerificationSchemas.js +2 -1
  297. package/dist/domain/referenceSourceGraph.js +20 -21
  298. package/dist/domain/staticRuntimeCorrelation.js +2 -2
  299. package/dist/domain/stringPatterns.js +6 -0
  300. package/dist/domain/swiftSymbolClassification.js +61 -0
  301. package/dist/domain/symbolAnalysis.js +66 -18
  302. package/dist/domain/webCaptureDiff.js +0 -1
  303. package/dist/domain/webCaptureDiffSchemas.js +6 -3
  304. package/dist/domain/webEventListeners.js +3 -2
  305. package/dist/domain/webExecution.js +3 -2
  306. package/dist/domain/webRuntime.js +0 -2
  307. package/dist/domain/webScriptExport.js +1 -1
  308. package/dist/dotnet/ManagedArtifactInspector.js +2 -19
  309. package/dist/dotnet/ManagedMemberInspector.js +12 -18
  310. package/dist/dotnet/ManagedMemberInspectorCore.js +47 -44
  311. package/dist/dotnet/ManagedMemberRows.js +75 -62
  312. package/dist/dotnet/ManagedMetadataInventory.js +16 -22
  313. package/dist/dotnet/ManagedMethodBodyReader.js +4 -0
  314. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +109 -94
  315. package/dist/dotnet/ManagedNativeBoundaryInspector.js +12 -21
  316. package/dist/dotnet/ManagedReaderFailure.js +16 -0
  317. package/dist/dotnet/ManagedStaticProvider.js +3 -5
  318. package/dist/evaluation/AgentEvaluationFixtures.js +250 -0
  319. package/dist/evaluation/AgentEvaluationReport.js +28 -0
  320. package/dist/evaluation/CodexAgentEval.js +12 -8
  321. package/dist/evaluation/KnownAnswerEvaluation.js +281 -0
  322. package/dist/evm/EvmoleInterfaceProvider.js +2 -1
  323. package/dist/firmware/FirmwareCommand.js +9 -5
  324. package/dist/firmware/FirmwareProvider.js +4 -4
  325. package/dist/generatedPackageMetadata.js +2 -2
  326. package/dist/ghidra/GhidraAnalysisProfile.js +3 -6
  327. package/dist/ghidra/GhidraClient.js +91 -32
  328. package/dist/ghidra/GhidraClientStartup.js +0 -2
  329. package/dist/ghidra/GhidraDoctor.js +6 -5
  330. package/dist/ghidra/GhidraFunctionValues.js +3 -5
  331. package/dist/ghidra/GhidraInstallation.js +40 -12
  332. package/dist/ghidra/GhidraJavaLaunch.js +6 -2
  333. package/dist/ghidra/GhidraLauncher.js +15 -7
  334. package/dist/ghidra/GhidraProvider.js +6 -2
  335. package/dist/ghidra/GhidraProviderCapabilities.js +6 -0
  336. package/dist/ghidra/GhidraProviderClient.js +13 -3
  337. package/dist/ghidra/GhidraSessionError.js +2 -0
  338. package/dist/ghidra/GhidraSessionRoot.js +39 -0
  339. package/dist/ghidra/extensions/GhidraExtensions.js +17 -10
  340. package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +8 -2
  341. package/dist/hopper/BridgeLauncher.js +34 -45
  342. package/dist/hopper/HopperAnalysisProfile.js +3 -8
  343. package/dist/hopper/HopperCleanup.js +56 -27
  344. package/dist/hopper/HopperClient.js +86 -65
  345. package/dist/hopper/HopperMachOImage.js +3 -2
  346. package/dist/hopper/HopperProvider.js +16 -18
  347. package/dist/hopper/HopperRegexSearch.js +3 -6
  348. package/dist/hopper/HopperTargetLease.js +132 -49
  349. package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -0
  350. package/dist/ida/IdaConfiguration.js +8 -3
  351. package/dist/ida/IdaInput.js +1 -7
  352. package/dist/ida/IdaMcpConnection.js +8 -4
  353. package/dist/ida/IdaOperationRunner.js +3 -3
  354. package/dist/ida/IdaProvider.js +8 -12
  355. package/dist/ida/IdaSessionClient.js +20 -18
  356. package/dist/ida/IdaWorkspace.js +12 -13
  357. package/dist/inspector/V8InspectorCaptureProjection.js +1 -1
  358. package/dist/inspector/V8InspectorProvider.js +38 -28
  359. package/dist/javascript/recovery/WakaruCommand.js +7 -2
  360. package/dist/javascript/recovery/WakaruExecution.js +5 -2
  361. package/dist/main/shutdown.js +11 -3
  362. package/dist/main/startup.js +9 -2
  363. package/dist/main/transport.js +22 -2
  364. package/dist/main.js +11 -18
  365. package/dist/native/AppleMachoSelection.js +16 -6
  366. package/dist/native/CommandRunner.js +9 -7
  367. package/dist/native/LldbCallTracer.js +8 -2
  368. package/dist/native/NativeMacOSProvider.js +25 -15
  369. package/dist/native/NativeUiHelperRuntime.js +11 -2
  370. package/dist/native/NativeUiObservation.js +2 -2
  371. package/dist/native/pwntools/PwntoolsDecoder.js +2 -1
  372. package/dist/process/DarwinProcessRunTokenReader.js +16 -2
  373. package/dist/process/ExecFileOutput.js +88 -6
  374. package/dist/process/PrivateRuntimeRoot.js +10 -5
  375. package/dist/process/ProcessOwnership.js +1 -4
  376. package/dist/process/ProcessOwnershipObservation.js +11 -5
  377. package/dist/process/ProviderProcess.js +1 -3
  378. package/dist/process/capture/FilesystemSnapshot.js +50 -13
  379. package/dist/process/capture/ProcessCaptureError.js +13 -0
  380. package/dist/process/capture/ProcessCaptureLifecycle.js +158 -70
  381. package/dist/process/capture/ProcessFilesystemEffects.js +33 -3
  382. package/dist/process/capture/ProcessHarness.js +21 -25
  383. package/dist/process/capture/ProcessNormalization.js +20 -2
  384. package/dist/process/capture/ProcessSampling.js +25 -2
  385. package/dist/process/capture/TerminalRenderer.js +14 -0
  386. package/dist/process/snapshotEnvironment.js +14 -0
  387. package/dist/server/EvidenceMcpServer.js +25 -14
  388. package/dist/server/createServer.js +49 -36
  389. package/dist/server/mcpClientMetadata.js +12 -5
  390. package/dist/server/promptCompletion.js +3 -8
  391. package/dist/server/registerAnalysisViewTool.js +15 -0
  392. package/dist/server/registerAndroidTools.js +2 -3
  393. package/dist/server/registerApplicationTools/compareExportShapes.js +4 -5
  394. package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
  395. package/dist/server/registerApplicationTools/compareVersions.js +4 -5
  396. package/dist/server/registerApplicationTools/coverage.js +1 -2
  397. package/dist/server/registerApplicationTools/helpers.js +1 -2
  398. package/dist/server/registerApplicationTools/obligationLedger.js +4 -5
  399. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -4
  400. package/dist/server/registerApplicationTools/traceFeature.js +4 -5
  401. package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
  402. package/dist/server/registerArtifactComparisonTool.js +4 -5
  403. package/dist/server/registerBinaryDiagnosticsTools.js +2 -3
  404. package/dist/server/registerBrowserScenarioTool.js +3 -4
  405. package/dist/server/registerBrowserTools.js +13 -16
  406. package/dist/server/registerBundleComparisonTool.js +5 -6
  407. package/dist/server/registerCloseLifecycleTool.js +2 -3
  408. package/dist/server/registerElectronTools.js +10 -13
  409. package/dist/server/registerEnhancedTools.js +23 -23
  410. package/dist/server/registerEvidenceTools.js +3 -4
  411. package/dist/server/registerEvmTools.js +2 -3
  412. package/dist/server/registerFirmwareTools.js +2 -3
  413. package/dist/server/registerFunctionComparisonTool.js +7 -8
  414. package/dist/server/registerInvestigationTools.js +14 -15
  415. package/dist/server/registerJavaScriptRecoveryTool.js +2 -3
  416. package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -6
  417. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +5 -6
  418. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -5
  419. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +6 -7
  420. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +6 -7
  421. package/dist/server/registerOfficialTools.js +4 -19
  422. package/dist/server/registerProcessComparisonTool.js +8 -8
  423. package/dist/server/registerRecordedCrashTools.js +2 -3
  424. package/dist/server/registerSessionRecordTools.js +15 -19
  425. package/dist/server/registerSessionStatusTool.js +3 -4
  426. package/dist/server/registerSessionTools.js +12 -18
  427. package/dist/server/registerWebModuleTool.js +2 -3
  428. package/dist/server/registerWebNetworkCaptureTool.js +2 -3
  429. package/dist/server/registerWebRuntimeTools.js +4 -5
  430. package/dist/server/registerWebScriptTool.js +2 -3
  431. package/dist/server/registerWebSourceLocationTool.js +2 -3
  432. package/dist/server/toolResult.js +66 -94
  433. package/dist/server/toolResultEncoding.js +11 -10
  434. package/dist/windows/WindowsNativeLoader.js +1 -0
  435. package/dist/windows/WindowsOwnedProcess.js +60 -15
  436. package/dist/windows/WindowsPrivateRuntime.js +7 -8
  437. package/native/windows/README.md +3 -1
  438. package/native/windows/build/manifest.json +2 -2
  439. package/native/windows/build/rea-windows-x64.node +0 -0
  440. package/package.json +39 -30
  441. package/scripts/rea.mjs +3 -6
  442. package/skills/reverse-engineer-anything/SKILL.md +9 -8
  443. package/skills/reverse-engineer-anything/references/android-applications.md +6 -3
  444. package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -4
  445. package/skills/reverse-engineer-anything/references/javascript-applications.md +16 -6
  446. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +9 -0
  447. package/dist/config.js +0 -1
  448. package/dist/contracts/browserCaptureToolInputSchema.js +0 -43
  449. package/dist/contracts/process/processCaptureExample.js +0 -2
  450. package/dist/contracts/toolOutputSchemas.js +0 -2
  451. package/dist/main/reload.js +0 -12
  452. package/dist/main/state.js +0 -3
  453. package/dist/server/sessionToolPolicies.js +0 -2
@@ -0,0 +1,28 @@
1
+ /** Require configured facts to pass while preserving workflow and execution gates. */
2
+ export const agentEvaluationPassed = (result) => result.exitCode === 0 &&
3
+ result.naturalUse &&
4
+ result.correctFirstTool &&
5
+ result.repeatedCallCount === 0 &&
6
+ result.inputValidationFailureCount === 0 &&
7
+ result.requiredToolSubsequenceMet &&
8
+ result.inputTokens > 0 &&
9
+ (result.factualCorrectness === "passed" ||
10
+ (result.factualCorrectness === "not_assessed" &&
11
+ result.answerHeuristicsMet &&
12
+ result.epistemicCuePresent));
13
+ /** Keep assessed fixture outcomes and scenarios without truth oracles distinct. */
14
+ export const summarizeFactualCorrectness = (results) => {
15
+ const passed = results.filter(({ factualCorrectness }) => factualCorrectness === "passed").length;
16
+ const failed = results.filter(({ factualCorrectness }) => factualCorrectness === "failed").length;
17
+ const status = failed > 0 ? "failed" : passed > 0 ? "passed" : "not_assessed";
18
+ return {
19
+ status,
20
+ scope: "configured_fixture_claims",
21
+ counts: {
22
+ assessed: passed + failed,
23
+ passed,
24
+ failed,
25
+ notAssessed: results.length - passed - failed,
26
+ },
27
+ };
28
+ };
@@ -1,3 +1,4 @@
1
+ import { evaluateKnownAnswers, } from "./KnownAnswerEvaluation.js";
1
2
  import { compareUnicodeCodePoints } from "../domain/unicodeCodePointOrder.js";
2
3
  const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
3
4
  const record = (value) => isRecord(value) ? value : undefined;
@@ -91,7 +92,7 @@ const consumeEvent = (state, value) => {
91
92
  state.cachedInputTokens = Math.max(state.cachedInputTokens, numberValue(usage?.cached_input_tokens));
92
93
  state.outputTokens = Math.max(state.outputTokens, numberValue(usage?.output_tokens));
93
94
  };
94
- /** Score agent routing, repetition, model usage, and epistemic completion. */
95
+ /** Measure agent routing, repetition, model usage, and explicitly limited answer heuristics. */
95
96
  export const evaluateCodexEvents = (events, expectedFirstTool, options = {}) => {
96
97
  const state = {
97
98
  calls: [],
@@ -118,8 +119,9 @@ export const evaluateCodexEvents = (events, expectedFirstTool, options = {}) =>
118
119
  ];
119
120
  const finalCitesEvidence = evidenceIds.some((evidenceId) => finalMessage.includes(evidenceId));
120
121
  const normalizedFinalMessage = finalMessage.toLocaleLowerCase("en-US");
121
- const contentCriteriaMet = (options.requiredAnswerTermGroups ?? []).every((terms) => terms.some((term) => normalizedFinalMessage.includes(term.toLocaleLowerCase("en-US"))));
122
- const authorityHonesty = /\b(evidence|observed|inferred|unknown|unavailable|limitation|authority|not configured|could not|requires approval)\b/iu.test(finalMessage);
122
+ const answerTermCoverageMet = (options.requiredAnswerTermGroups ?? []).every((terms) => terms.some((term) => normalizedFinalMessage.includes(term.toLocaleLowerCase("en-US"))));
123
+ const epistemicCuePresent = /\b(evidence|observed|inferred|unknown|unavailable|limitation|authority|not configured|could not|requires approval)\b/iu.test(finalMessage);
124
+ const factualAssessment = evaluateKnownAnswers(events, finalMessage, options.fixtureClaims);
123
125
  return {
124
126
  naturalUse: reaCalls.length > 0,
125
127
  correctFirstTool: reaCalls[0]?.tool === expectedFirstTool,
@@ -134,15 +136,17 @@ export const evaluateCodexEvents = (events, expectedFirstTool, options = {}) =>
134
136
  finalMessage,
135
137
  evidenceIds,
136
138
  finalCitesEvidence,
137
- contentCriteriaMet,
138
- completionQuality: finalMessage.trim().length >= 80 &&
139
- authorityHonesty &&
140
- contentCriteriaMet &&
139
+ answerTermCoverageMet,
140
+ answerHeuristicsMet: finalMessage.trim().length >= 80 &&
141
+ epistemicCuePresent &&
142
+ answerTermCoverageMet &&
141
143
  requiredToolSubsequenceMet &&
142
144
  (options.forbidInputValidationFailures !== true ||
143
145
  inputValidationFailureCount === 0) &&
144
146
  (options.requireEvidence !== true || finalCitesEvidence),
145
- authorityHonesty,
147
+ epistemicCuePresent,
148
+ factualCorrectness: factualAssessment.status,
149
+ factualAssessment,
146
150
  };
147
151
  };
148
152
  const containsOrderedSubsequence = (values, required) => {
@@ -0,0 +1,281 @@
1
+ import { visit } from "jsonc-parser";
2
+ import { z } from "zod";
3
+ import { parseEvidence } from "../domain/evidence.js";
4
+ import { jsonValueSchema } from "../domain/jsonValue.js";
5
+ import { compareUnicodeCodePoints } from "../domain/unicodeCodePointOrder.js";
6
+ const authoritySchema = z.enum([
7
+ "shipped-artifact",
8
+ "controlled-replay",
9
+ "historical-reference",
10
+ "external-service",
11
+ "analyst-inference",
12
+ ]);
13
+ const confidenceSchema = z.enum(["observed", "derived", "inferred"]);
14
+ const subjectSchema = z.strictObject({
15
+ path: z.string().min(1),
16
+ sha256: z
17
+ .string()
18
+ .regex(/^[a-f0-9]{64}$/u)
19
+ .optional(),
20
+ });
21
+ const expectationSchema = z.strictObject({
22
+ id: z.string().min(1),
23
+ expectedValue: jsonValueSchema,
24
+ source: z.strictObject({
25
+ operation: z.string().min(1),
26
+ authority: authoritySchema,
27
+ confidence: confidenceSchema,
28
+ subject: subjectSchema.optional(),
29
+ parameters: z.record(z.string(), jsonValueSchema).optional(),
30
+ linkedSubjects: z
31
+ .array(subjectSchema.extend({ operation: z.string().min(1) }))
32
+ .optional(),
33
+ select: z.custom((value) => typeof value === "function"),
34
+ }),
35
+ });
36
+ const finalAnswerSchema = z.strictObject({
37
+ claims: z.array(z.strictObject({
38
+ id: z.string().min(1),
39
+ value: jsonValueSchema,
40
+ evidence_id: z.string().regex(/^ev_[a-f0-9]{64}$/u),
41
+ confidence: confidenceSchema,
42
+ authority: authoritySchema,
43
+ })),
44
+ });
45
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
46
+ const record = (value) => isRecord(value) ? value : undefined;
47
+ const canonicalValue = (value) => {
48
+ if (Array.isArray(value))
49
+ return value.map(canonicalValue);
50
+ if (value === null || typeof value !== "object")
51
+ return value;
52
+ return Object.fromEntries(Object.entries(value)
53
+ .sort(([left], [right]) => compareUnicodeCodePoints(left, right))
54
+ .map(([key, child]) => [key, canonicalValue(child)]));
55
+ };
56
+ const sameJson = (left, right) => {
57
+ const parsedLeft = jsonValueSchema.safeParse(left);
58
+ const parsedRight = jsonValueSchema.safeParse(right);
59
+ return (parsedLeft.success &&
60
+ parsedRight.success &&
61
+ JSON.stringify(canonicalValue(parsedLeft.data)) ===
62
+ JSON.stringify(canonicalValue(parsedRight.data)));
63
+ };
64
+ const parseClosedAnswer = (text) => {
65
+ const objects = [];
66
+ let invalid = false;
67
+ try {
68
+ visit(text, {
69
+ onObjectBegin: () => {
70
+ objects.push(new Set());
71
+ },
72
+ onObjectProperty: (key) => {
73
+ const keys = objects.at(-1);
74
+ if (keys === undefined || keys.has(key))
75
+ invalid = true;
76
+ keys?.add(key);
77
+ },
78
+ onObjectEnd: () => {
79
+ objects.pop();
80
+ },
81
+ onError: () => {
82
+ invalid = true;
83
+ },
84
+ }, {
85
+ disallowComments: true,
86
+ allowTrailingComma: false,
87
+ allowEmptyContent: false,
88
+ });
89
+ if (invalid)
90
+ return undefined;
91
+ // The JSON visitor checked syntax and duplicate members before JSON.parse can fold them.
92
+ return JSON.parse(text);
93
+ }
94
+ catch (error) {
95
+ // Syntax and nesting failures are malformed final-answer input, not an evaluation crash.
96
+ if (error instanceof SyntaxError || error instanceof RangeError)
97
+ return undefined;
98
+ throw error;
99
+ }
100
+ };
101
+ const consistentAliases = (value, left, right) => value[left] === undefined ||
102
+ value[right] === undefined ||
103
+ value[left] === value[right];
104
+ const completedCall = (event) => {
105
+ const value = record(event);
106
+ const item = value?.type === "item.completed"
107
+ ? record(value.item)
108
+ : value?.type === "mcp_tool_call" && value.status === "completed"
109
+ ? value
110
+ : undefined;
111
+ if (item?.type !== "mcp_tool_call")
112
+ return undefined;
113
+ const server = item.server ?? item.server_name;
114
+ if (typeof server !== "string" ||
115
+ server.toLowerCase() !== "rea" ||
116
+ (item.status !== undefined && item.status !== "completed") ||
117
+ (item.error !== undefined && item.error !== null))
118
+ return undefined;
119
+ if (!consistentAliases(item, "server", "server_name") ||
120
+ !consistentAliases(item, "tool", "name"))
121
+ return undefined;
122
+ return item;
123
+ };
124
+ const consistentJsonAliases = (value, left, right) => value[left] === undefined ||
125
+ value[left] === null ||
126
+ value[right] === undefined ||
127
+ value[right] === null ||
128
+ sameJson(value[left], value[right]);
129
+ const evidenceFromCall = (item) => {
130
+ if (!consistentJsonAliases(item, "result", "output"))
131
+ return undefined;
132
+ const result = record(item.result ?? item.output);
133
+ if (result === undefined ||
134
+ result.isError === true ||
135
+ (result.error !== undefined && result.error !== null))
136
+ return undefined;
137
+ const structured = record(result.structuredContent ?? result.structured_content);
138
+ if (structured === undefined ||
139
+ (structured.error !== undefined && structured.error !== null))
140
+ return undefined;
141
+ if (result.structuredContent !== undefined &&
142
+ result.structured_content !== undefined &&
143
+ !sameJson(result.structuredContent, result.structured_content))
144
+ return undefined;
145
+ let evidence;
146
+ try {
147
+ evidence = parseEvidence(structured);
148
+ }
149
+ catch {
150
+ // Transcript output is untrusted; invalid Evidence cannot support a claim.
151
+ return undefined;
152
+ }
153
+ if ((item.tool ?? item.name) !== evidence.operation)
154
+ return undefined;
155
+ return evidence;
156
+ };
157
+ const collectDeliveredEvidence = (events) => {
158
+ const records = new Map();
159
+ const conflicts = new Set();
160
+ for (const event of events) {
161
+ const item = completedCall(event);
162
+ if (item === undefined)
163
+ continue;
164
+ const evidence = evidenceFromCall(item);
165
+ if (evidence === undefined)
166
+ continue;
167
+ const previous = records.get(evidence.evidence_id);
168
+ if (previous !== undefined && !sameJson(previous, evidence))
169
+ conflicts.add(evidence.evidence_id);
170
+ else
171
+ records.set(evidence.evidence_id, evidence);
172
+ }
173
+ return { records, conflicts };
174
+ };
175
+ const matchesSubject = (evidence, expected) => evidence.subject?.local_path === expected.path &&
176
+ (expected.sha256 === undefined ||
177
+ evidence.subject.digest.sha256 === expected.sha256);
178
+ const matchesParameters = (evidence, expected) => expected === undefined ||
179
+ Object.entries(expected).every(([key, value]) => Object.hasOwn(evidence.parameters, key) &&
180
+ sameJson(evidence.parameters[key], value));
181
+ const matchesLinks = (evidence, source, delivered) => (source.linkedSubjects ?? []).every((expected) => evidence.evidence_links.some((id) => {
182
+ const linked = delivered.records.get(id);
183
+ return (linked !== undefined &&
184
+ !delivered.conflicts.has(id) &&
185
+ linked.operation === expected.operation &&
186
+ matchesSubject(linked, expected));
187
+ }));
188
+ const assessClaim = (expected, claim, delivered) => {
189
+ const failures = [];
190
+ if (claim === undefined)
191
+ return { id: expected.id, status: "failed", failures: ["claim_missing"] };
192
+ if (!sameJson(claim.value, expected.expectedValue))
193
+ failures.push("value_mismatch");
194
+ if (claim.confidence !== expected.source.confidence)
195
+ failures.push("claim_confidence_mismatch");
196
+ if (claim.authority !== expected.source.authority)
197
+ failures.push("claim_authority_mismatch");
198
+ const evidence = delivered.records.get(claim.evidence_id);
199
+ if (evidence === undefined)
200
+ failures.push("unknown_evidence");
201
+ else if (delivered.conflicts.has(claim.evidence_id))
202
+ failures.push("conflicting_evidence");
203
+ else {
204
+ if (evidence.operation !== expected.source.operation)
205
+ failures.push("source_operation_mismatch");
206
+ if (evidence.confidence !== expected.source.confidence)
207
+ failures.push("source_confidence_mismatch");
208
+ if (evidence.authority !== expected.source.authority)
209
+ failures.push("source_authority_mismatch");
210
+ if (expected.source.subject !== undefined &&
211
+ !matchesSubject(evidence, expected.source.subject))
212
+ failures.push("source_subject_mismatch");
213
+ if (!matchesParameters(evidence, expected.source.parameters))
214
+ failures.push("source_parameters_mismatch");
215
+ if (!matchesLinks(evidence, expected.source, delivered))
216
+ failures.push("source_links_mismatch");
217
+ try {
218
+ if (!sameJson(expected.source.select(evidence.normalized_result), expected.expectedValue))
219
+ failures.push("source_assertion_mismatch");
220
+ }
221
+ catch {
222
+ // Producer-specific selectors may reject malformed representations; preserve a failed assessment.
223
+ failures.push("selector_failed");
224
+ }
225
+ }
226
+ return {
227
+ id: expected.id,
228
+ status: failures.length === 0 ? "passed" : "failed",
229
+ failures,
230
+ };
231
+ };
232
+ /** Grade closed answers only against configured fixture truth and delivered authenticated Evidence. */
233
+ export const evaluateKnownAnswers = (events, finalMessage, expectations) => {
234
+ const scope = "configured_fixture_claims";
235
+ if (expectations === undefined)
236
+ return { scope, status: "not_assessed", manifestFailures: [], claims: [] };
237
+ const rubric = z.array(expectationSchema).min(1).safeParse(expectations);
238
+ if (!rubric.success)
239
+ return {
240
+ scope,
241
+ status: "failed",
242
+ manifestFailures: ["invalid_fixture_rubric"],
243
+ claims: [],
244
+ };
245
+ const expectedIds = new Set(expectations.map(({ id }) => id));
246
+ if (expectedIds.size !== expectations.length)
247
+ return {
248
+ scope,
249
+ status: "failed",
250
+ manifestFailures: ["duplicate_fixture_claim_ids"],
251
+ claims: [],
252
+ };
253
+ const manifest = finalAnswerSchema.safeParse(parseClosedAnswer(finalMessage));
254
+ if (!manifest.success)
255
+ return {
256
+ scope,
257
+ status: "failed",
258
+ manifestFailures: ["invalid_final_claim_manifest"],
259
+ claims: [],
260
+ };
261
+ const manifestFailures = [];
262
+ const submitted = new Map();
263
+ for (const claim of manifest.data.claims) {
264
+ if (submitted.has(claim.id))
265
+ manifestFailures.push(`duplicate_claim:${claim.id}`);
266
+ if (!expectedIds.has(claim.id))
267
+ manifestFailures.push(`unknown_claim:${claim.id}`);
268
+ submitted.set(claim.id, claim);
269
+ }
270
+ const delivered = collectDeliveredEvidence(events);
271
+ const claims = expectations.map((expected) => assessClaim(expected, submitted.get(expected.id), delivered));
272
+ return {
273
+ scope,
274
+ status: manifestFailures.length === 0 &&
275
+ claims.every(({ status }) => status === "passed")
276
+ ? "passed"
277
+ : "failed",
278
+ manifestFailures,
279
+ claims,
280
+ };
281
+ };
@@ -21,6 +21,7 @@ import { EVMOLE_PROVIDER_IDENTITY, EVM_INTERFACE_LIMITS, EVM_FILE_SIZE_FAILURE_E
21
21
  import { decodeEvmBytecodeCarrier } from "./EvmBytecodeCarrier.js";
22
22
  import { selectEvmWorkerLimits, } from "./EvmWorkerLimits.js";
23
23
  const OPERATION = "inspect_evm_interface";
24
+ const HOST_REQUIREMENT = "Initial real-verified offline EVM interface profile supports Linux x64 only.";
24
25
  const replySchema = z.discriminatedUnion("ok", [
25
26
  z.strictObject({
26
27
  ok: z.literal(true),
@@ -60,7 +61,7 @@ export class EvmoleInterfaceProvider {
60
61
  if (options?.signal?.aborted)
61
62
  throw new AnalysisCancelledError(OPERATION);
62
63
  if (process.platform !== "linux" || process.arch !== "x64")
63
- throw new AnalysisCapabilityUnavailableError(EVMOLE_PROVIDER_IDENTITY.id, OPERATION, "Initial real-verified offline EVM interface profile supports Linux x64 only.");
64
+ throw new AnalysisCapabilityUnavailableError(EVMOLE_PROVIDER_IDENTITY.id, OPERATION, HOST_REQUIREMENT, { userMessage: HOST_REQUIREMENT });
64
65
  try {
65
66
  if (!isAbsolute(limiter))
66
67
  throw new Error("REA_EVM_PRLIMIT_COMMAND must be an absolute executable path.");
@@ -9,6 +9,10 @@ import { spawnOwnedProviderProcess, ProviderProcessSupervisor, } from "../proces
9
9
  import { cleanupOwnedProcessGroup } from "../process/ProcessOwnership.js";
10
10
  import { FIRMWARE_LIMITS } from "./FirmwareRelease.js";
11
11
  import { hashFirmwareFile, inventoryFirmwareOutput, readFirmwareReport, } from "./FirmwareFiles.js";
12
+ /** Refuse an unmet host or tool requirement, which another target cannot satisfy. */
13
+ export const firmwareToolUnavailable = (engine, operation, reason) => new AnalysisCapabilityUnavailableError(engine, operation, reason, {
14
+ userMessage: reason,
15
+ });
12
16
  /** Resolve explicitly supplied executable paths; never install or search for engines. */
13
17
  export const resolveFirmwareCommand = async (environment, engine, operation) => {
14
18
  const variable = engine === "binwalk" ? "REA_BINWALK_COMMAND" : "REA_UNBLOB_COMMAND";
@@ -16,9 +20,9 @@ export const resolveFirmwareCommand = async (environment, engine, operation) =>
16
20
  if (process.platform !== "linux" ||
17
21
  configured === undefined ||
18
22
  !isAbsolute(configured))
19
- throw new AnalysisCapabilityUnavailableError(engine, operation, `This integration requires Linux and an absolute ${variable} path to the caller-supplied tool`);
23
+ throw firmwareToolUnavailable(engine, operation, `This integration requires Linux and an absolute ${variable} path to the caller-supplied tool`);
20
24
  const command = await realpath(configured).catch((cause) => {
21
- throw new AnalysisCapabilityUnavailableError(engine, operation, `${variable} is unavailable: ${cause instanceof Error ? cause.message : String(cause)}`);
25
+ throw firmwareToolUnavailable(engine, operation, `${variable} is unavailable: ${cause instanceof Error ? cause.message : String(cause)}`);
22
26
  });
23
27
  let sha256;
24
28
  try {
@@ -28,18 +32,18 @@ export const resolveFirmwareCommand = async (environment, engine, operation) =>
28
32
  sha256 = await hashFirmwareFile(command);
29
33
  }
30
34
  catch (cause) {
31
- throw new AnalysisCapabilityUnavailableError(engine, operation, `${variable} is not a readable executable regular file: ${command}: ${cause instanceof Error ? cause.message : String(cause)}`);
35
+ throw firmwareToolUnavailable(engine, operation, `${variable} is not a readable executable regular file: ${command}: ${cause instanceof Error ? cause.message : String(cause)}`);
32
36
  }
33
37
  const limiter = environment.REA_FIRMWARE_PRLIMIT_COMMAND ?? "/usr/bin/prlimit";
34
38
  if (!isAbsolute(limiter))
35
- throw new AnalysisCapabilityUnavailableError(engine, operation, "REA_FIRMWARE_PRLIMIT_COMMAND must be absolute");
39
+ throw firmwareToolUnavailable(engine, operation, "REA_FIRMWARE_PRLIMIT_COMMAND must be absolute");
36
40
  try {
37
41
  await access(limiter, constants.X_OK);
38
42
  if (!(await stat(limiter)).isFile())
39
43
  throw new TypeError("Configured path is not a regular file");
40
44
  }
41
45
  catch (cause) {
42
- throw new AnalysisCapabilityUnavailableError(engine, operation, `Resource limiter is not an executable regular file: ${limiter}: ${cause instanceof Error ? cause.message : String(cause)}; provide util-linux prlimit`);
46
+ throw firmwareToolUnavailable(engine, operation, `Resource limiter is not an executable regular file: ${limiter}: ${cause instanceof Error ? cause.message : String(cause)}; provide util-linux prlimit`);
43
47
  }
44
48
  return { command, limiter, sha256 };
45
49
  };
@@ -3,7 +3,7 @@ import { z } from "zod";
3
3
  import { createAnalysisExecution, } from "../application/AnalysisProvider.js";
4
4
  import { firmwareResultSchemas, } from "../domain/firmware/firmwareAnalysis.js";
5
5
  import { AnalysisError } from "../domain/analysisErrorBase.js";
6
- import { AnalysisCancelledError, AnalysisCapabilityUnavailableError, AnalysisInputError, AnalysisOutputError, AnalysisTimeoutError, } from "../domain/analysisErrorCore.js";
6
+ import { AnalysisCancelledError, AnalysisInputError, AnalysisOutputError, AnalysisTimeoutError, } from "../domain/analysisErrorCore.js";
7
7
  import { ProviderAdapterError } from "../domain/providerAdapterError.js";
8
8
  import { ProviderCleanupError } from "../domain/providerCleanupError.js";
9
9
  import { err, ok } from "../domain/result.js";
@@ -11,7 +11,7 @@ import { PrivateRuntimeRoot } from "../process/PrivateRuntimeRoot.js";
11
11
  import { publishFirmwareExtraction } from "./FirmwarePublication.js";
12
12
  import { FIRMWARE_LIMITS, BINWALK_PROVIDER_IDENTITY, UNBLOB_PROVIDER_IDENTITY, } from "./FirmwareRelease.js";
13
13
  import { admitFirmwareVersion } from "./FirmwareVersion.js";
14
- import { resolveFirmwareCommand, runFirmwareCommand, readFirmwareCommandReport, } from "./FirmwareCommand.js";
14
+ import { firmwareToolUnavailable, resolveFirmwareCommand, runFirmwareCommand, readFirmwareCommandReport, } from "./FirmwareCommand.js";
15
15
  import { inventoryFirmwareOutput, snapshotFirmware } from "./FirmwareFiles.js";
16
16
  import { normalizeBinwalkReport, normalizeUnblobReport, } from "./FirmwareReports.js";
17
17
  const waitForPredecessor = (predecessor, operation, signal) => new Promise((resolve, reject) => {
@@ -96,10 +96,10 @@ export class FirmwareProvider {
96
96
  const versionRun = await run(["--version"]);
97
97
  const version = versionRun.stdout.text.trim();
98
98
  if (versionRun.stdout.bytes > 1024)
99
- throw new AnalysisCapabilityUnavailableError(engineName, request.operation, `Tool version banner is ${String(versionRun.stdout.bytes)} bytes; expected a short ${engineName} version line.`);
99
+ throw firmwareToolUnavailable(engineName, request.operation, `Tool version banner is ${String(versionRun.stdout.bytes)} bytes; expected a short ${engineName} version line.`);
100
100
  const admitted = admitFirmwareVersion(engineName, version);
101
101
  if (admitted.status === "unsupported" || admitted.status === "unresolved")
102
- throw new AnalysisCapabilityUnavailableError(engineName, request.operation, admitted.message);
102
+ throw firmwareToolUnavailable(engineName, request.operation, admitted.message);
103
103
  const engine = {
104
104
  name: engineName,
105
105
  version: admitted.version,
@@ -1,9 +1,9 @@
1
1
  /** Generated from package.json and package-lock.json; do not edit. */
2
2
  export const PACKAGE_METADATA = {
3
3
  name: "rea-agents",
4
- version: "6.1.0", // x-release-please-version
4
+ version: "6.2.0", // x-release-please-version
5
5
  serverSdkVersion: "2.3.1",
6
6
  clientSdkVersion: "2.3.1",
7
7
  coreSdkVersion: "2.3.1",
8
- skillVersion: "33",
8
+ skillVersion: "34",
9
9
  };
@@ -8,7 +8,7 @@ export const resolveGhidraAnalysisProfile = (target, identity, installation, sig
8
8
  if (signal?.aborted === true)
9
9
  return Promise.resolve(err(new AnalysisCancelledError("open_binary")));
10
10
  if (target.kind !== "executable")
11
- return Promise.resolve(ok({ profile: null, compatibility: {} }));
11
+ return Promise.resolve(ok({ profile: null }));
12
12
  if (installation.status === "unavailable")
13
13
  return Promise.resolve(err(new ProviderAdapterError(identity.id, "resolve_analysis_profile")));
14
14
  const provider = { ...identity, version: installation.providerVersion };
@@ -28,7 +28,8 @@ export const resolveGhidraAnalysisProfile = (target, identity, installation, sig
28
28
  load_image_observations: "source-mappings-entry-context-v2",
29
29
  function_body_evidence: "complete-inclusive-ranges-v1",
30
30
  function_references: "complete-body-and-entry-reference-manager-v2",
31
- location_resolution: "explicit-address-exact-name-first-v2",
31
+ location_resolution: "explicit-address-exact-entry-symbol-first-v3",
32
+ instruction_flow_evidence: "decoded-return-pcode-v1",
32
33
  process_launch: installation.platform === "win32"
33
34
  ? "official-headless-script-v1"
34
35
  : "inspected-jvm-launch-support-v1",
@@ -68,9 +69,5 @@ export const resolveGhidraAnalysisProfile = (target, identity, installation, sig
68
69
  : {}),
69
70
  analyzer_preset: "ghidra-default",
70
71
  }),
71
- compatibility: {
72
- languageId: dos ? "x86:LE:16:Real Mode" : "auto",
73
- compilerSpecId: dos ? "default" : "auto",
74
- },
75
72
  }));
76
73
  };