rea-agents 6.1.0 → 6.3.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 (573) hide show
  1. package/README.md +24 -24
  2. package/bridge/ghidra/ReaGhidraBridge.java +32 -4
  3. package/bridge/hopper_bridge.py +8 -1
  4. package/dist/android/JadxConfiguration.js +87 -7
  5. package/dist/android/JadxMcpTransport.js +14 -2
  6. package/dist/android/JadxProvider.js +64 -36
  7. package/dist/android/JadxSession.js +51 -9
  8. package/dist/application/BinaryTargetResolver.js +68 -20
  9. package/dist/application/BrowserEvidence.js +3 -8
  10. package/dist/application/BrowserScenarioEvidence.js +4 -20
  11. package/dist/application/CapabilityInventory.js +43 -9
  12. package/dist/application/ClientConfigurationDocument.js +97 -25
  13. package/dist/application/ClientRegistrationStatus.js +19 -6
  14. package/dist/application/DirectAnalysis.js +41 -20
  15. package/dist/application/DirectAnalysisCleanup.js +71 -0
  16. package/dist/application/DirectAnalysisStatus.js +3 -7
  17. package/dist/application/Doctor.js +40 -53
  18. package/dist/application/DoctorDiagnostics.js +2 -3
  19. package/dist/application/EnhancedTools.js +51 -6
  20. package/dist/application/EvidenceBundleFiles.js +8 -3
  21. package/dist/application/InvestigationProviders.js +13 -5
  22. package/dist/application/JsonFiles.js +56 -23
  23. package/dist/application/LinuxHopper.js +11 -7
  24. package/dist/application/MacHopper.js +15 -18
  25. package/dist/application/RealHopperAssertions.js +0 -11
  26. package/dist/application/ReconstructionObligationCandidates.js +10 -3
  27. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -1
  28. package/dist/application/ReferenceSourceImportEntries.js +1 -1
  29. package/dist/application/RegularFileRead.js +17 -0
  30. package/dist/application/Setup.js +26 -23
  31. package/dist/application/SetupClientConfiguration.js +18 -7
  32. package/dist/application/SetupHost.js +20 -29
  33. package/dist/application/SetupPlan.js +24 -20
  34. package/dist/application/SetupSkill.js +57 -8
  35. package/dist/application/SupportedClients.js +43 -0
  36. package/dist/application/Uninstall.js +98 -30
  37. package/dist/application/UpdateMaintenance.js +13 -7
  38. package/dist/application/UpdateRuntime.js +12 -12
  39. package/dist/application/Utf8JsonInput.js +64 -0
  40. package/dist/application/WebScriptExportService.js +38 -5
  41. package/dist/application/WorkflowEvidence.js +25 -2
  42. package/dist/application/XrefsAddressResolution.js +45 -0
  43. package/dist/application/analysisView/AnalysisViewService.js +76 -0
  44. package/dist/application/android/AndroidAnalysisService.js +1 -1
  45. package/dist/application/binary/AnalysisClientCleanup.js +30 -5
  46. package/dist/application/binary/AnalysisProviderEvaluation.js +1 -2
  47. package/dist/application/binary/AnalysisProviderRegistry.js +2 -6
  48. package/dist/application/binary/AnalysisSnapshotCache.js +13 -10
  49. package/dist/application/binary/BinarySession.js +86 -29
  50. package/dist/application/binary/BinarySessionComposition.js +1 -3
  51. package/dist/application/binary/BinarySessionExecution.js +3 -5
  52. package/dist/application/binary/BinarySessionOpen.js +10 -2
  53. package/dist/application/binary/BinarySessionRecords.js +1 -1
  54. package/dist/application/binary/BinarySessionStatus.js +1 -6
  55. package/dist/application/binary/CompositeProvider.js +4 -18
  56. package/dist/application/binary/LazyAnalysisProvider.js +5 -5
  57. package/dist/application/binary/SessionProviderRouter.js +27 -135
  58. package/dist/application/homebrew.js +48 -0
  59. package/dist/application/javascript/ElectronActiveEvidence.js +10 -14
  60. package/dist/application/javascript/ElectronBoundaryAnalysis.js +2 -2
  61. package/dist/application/javascript/ElectronBoundaryGraphNative.js +5 -1
  62. package/dist/application/javascript/JavaScriptApplicationEvidence.js +3 -6
  63. package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +107 -46
  64. package/dist/application/javascript/JavaScriptApplicationService.js +7 -1
  65. package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +59 -45
  66. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +5 -9
  67. package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +19 -27
  68. package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +11 -3
  69. package/dist/application/javascript/JavaScriptArtifactGraphContext.js +9 -0
  70. package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +8 -5
  71. package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +46 -29
  72. package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +0 -1
  73. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +86 -27
  74. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +52 -9
  75. package/dist/application/javascript/JavaScriptArtifactReconstructionInput.js +1 -0
  76. package/dist/application/javascript/JavaScriptJsonModules.js +2 -2
  77. package/dist/application/javascript/JavaScriptModuleRelationships.js +6 -18
  78. package/dist/application/javascript/JavaScriptRuntimeObservationService.js +3 -3
  79. package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +11 -27
  80. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +4 -5
  81. package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +8 -6
  82. package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +2 -3
  83. package/dist/application/javascript/JavaScriptSemanticGraphConstruction.js +7 -5
  84. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +3 -4
  85. package/dist/application/javascript/JavaScriptSemanticGraphEvidence.js +1 -1
  86. package/dist/application/javascript/JavaScriptSemanticGraphFingerprintProjection.js +2 -2
  87. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +3 -7
  88. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +76 -47
  89. package/dist/application/javascript/JavaScriptSemanticGraphProjection.js +4 -4
  90. package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +3 -4
  91. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +51 -25
  92. package/dist/application/javascript/JavaScriptSemanticTraceService.js +15 -10
  93. package/dist/application/managed/ManagedMemberComparisonService.js +2 -1
  94. package/dist/application/managed/ManagedNativeVerificationService.js +2 -1
  95. package/dist/application/native/NativeCallRoutes.js +2 -4
  96. package/dist/application/process/ProcessCli.js +11 -11
  97. package/dist/application/process/ProcessEvidence.js +0 -1
  98. package/dist/artifacts/ArtifactProvider.js +53 -30
  99. package/dist/artifacts/ArtifactProviderMetadata.js +1 -4
  100. package/dist/artifacts/ArtifactReader.js +31 -0
  101. package/dist/artifacts/AsarArtifactReader.js +81 -17
  102. package/dist/artifacts/DirectoryArtifactReader.js +2 -1
  103. package/dist/artifacts/MachOSliceArtifactReader.js +9 -2
  104. package/dist/artifacts/NativeDmgArtifactReader.js +207 -77
  105. package/dist/artifacts/NativeDmgOwnership.js +109 -0
  106. package/dist/artifacts/SafeOutputTree.js +16 -2
  107. package/dist/artifacts/ZipArtifactReader.js +11 -4
  108. package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +4 -2
  109. package/dist/artifacts/apple/DylibResolutionReader.js +17 -7
  110. package/dist/artifacts/apple/KeyedArchiveReader.js +68 -42
  111. package/dist/artifacts/apple/MachoLoadCommandReader.js +36 -6
  112. package/dist/artifacts/extraction/ArtifactExtraction.js +104 -29
  113. package/dist/artifacts/inventory/ArtifactGraphConstruction.js +71 -66
  114. package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
  115. package/dist/artifacts/inventory/classify.js +33 -14
  116. package/dist/artifacts/inventory/hashStableRootArtifact.js +37 -0
  117. package/dist/artifacts/inventory/reader.js +3 -3
  118. package/dist/artifacts/inventory/scanCanonical.js +64 -34
  119. package/dist/artifacts/inventory/scanReader.js +12 -20
  120. package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +65 -27
  121. package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
  122. package/dist/browser/CdpBrowserProvider.js +6 -6
  123. package/dist/browser/CdpCaptureEventHandlers.js +2 -4
  124. package/dist/browser/CdpCaptureEvents.js +0 -1
  125. package/dist/browser/CdpCaptureStorageFingerprints.js +3 -3
  126. package/dist/browser/CdpCaptureValues.js +20 -0
  127. package/dist/browser/CdpElectronInspection.js +2 -2
  128. package/dist/browser/CdpElectronProvider.js +4 -5
  129. package/dist/browser/CdpElectronScriptEvents.js +2 -8
  130. package/dist/browser/CdpElectronScripts.js +4 -5
  131. package/dist/browser/CdpPageCaptureScripts.js +2 -3
  132. package/dist/browser/CdpSafeMetadata.js +10 -10
  133. package/dist/browser/CdpWebMcpDiscovery.js +16 -13
  134. package/dist/browser/PlaywrightBrowserScenarioProvider.js +64 -49
  135. package/dist/browser/PlaywrightElectronActiveActions.js +2 -56
  136. package/dist/browser/PlaywrightElectronActiveProvider.js +10 -6
  137. package/dist/browser/PlaywrightScenarioArtifacts.js +1 -1
  138. package/dist/browser/PlaywrightScenarioBrowser.js +269 -66
  139. package/dist/browser/PlaywrightScenarioEvents.js +1 -1
  140. package/dist/browser/PlaywrightScenarioSession.js +41 -32
  141. package/dist/browser/WebSourceMapFetcher.js +32 -6
  142. package/dist/browser/assets/ScenarioScriptCapture.js +8 -12
  143. package/dist/browser/assets/ScriptCaptureAdapters.js +1 -1
  144. package/dist/browser/history/CaptureFailures.js +6 -2
  145. package/dist/browser/history/MitmproxyCaptureAdapter.js +4 -2
  146. package/dist/catalogIdentity.js +0 -1
  147. package/dist/cli/analysisViewCommands.js +36 -0
  148. package/dist/cli/artifactCommands.js +11 -12
  149. package/dist/cli/coreAnalysisCommands.js +3 -3
  150. package/dist/cli/coreBinaryCommands.js +37 -28
  151. package/dist/cli/coreNativeCommands.js +9 -10
  152. package/dist/cli/electronCommands.js +12 -13
  153. package/dist/cli/interactiveSetup.js +6 -6
  154. package/dist/cli/javascriptApplicationAnalysis.js +2 -12
  155. package/dist/cli/jsonOutput.js +3 -2
  156. package/dist/cli/managedCommands.js +7 -8
  157. package/dist/cli/nativeCallCommands.js +1 -2
  158. package/dist/cli/omittableDefaults.js +50 -0
  159. package/dist/cli/processCommands.js +3 -2
  160. package/dist/cli/setupCommands.js +16 -15
  161. package/dist/cli/streamedJsonOutput.js +83 -4
  162. package/dist/cli/utilityCommands.js +10 -12
  163. package/dist/cli.js +19 -8
  164. package/dist/cliBrowserScenarioCommands.js +2 -2
  165. package/dist/cliCommandNames.js +1 -0
  166. package/dist/cliJsonFile.js +179 -0
  167. package/dist/cliJsonInput.js +60 -33
  168. package/dist/cliObservationOptions.js +4 -0
  169. package/dist/cliOutput.js +0 -38
  170. package/dist/composition/auxiliaryAnalysisProviders.js +30 -25
  171. package/dist/composition/binary.js +9 -9
  172. package/dist/composition/browserScenario.js +2 -1
  173. package/dist/composition/directAnalysis.js +20 -14
  174. package/dist/composition/electronScenario.js +1 -1
  175. package/dist/composition/optionalObservationProviders.js +12 -7
  176. package/dist/config/environment.js +6 -0
  177. package/dist/config/ghidraStartupTimeout.js +4 -9
  178. package/dist/config/homeDirectory.js +12 -0
  179. package/dist/config/mcpResponseBudget.js +9 -1
  180. package/dist/config/parseConfig.js +7 -3
  181. package/dist/config/parsers.js +19 -22
  182. package/dist/contracts/analysisViewToolContracts.js +56 -0
  183. package/dist/contracts/applicationToolContracts.js +5 -4
  184. package/dist/contracts/artifactComparisonExample.js +7 -7
  185. package/dist/contracts/artifactToolContracts.js +1 -1
  186. package/dist/contracts/browserScenarioToolContracts.js +1 -1
  187. package/dist/contracts/browserToolContracts.js +19 -15
  188. package/dist/contracts/enhancedInputs.js +2 -2
  189. package/dist/contracts/enhancedToolContracts.js +4 -3
  190. package/dist/contracts/errorSchemas.js +3 -1
  191. package/dist/contracts/evm/evmToolContracts.js +1 -1
  192. package/dist/contracts/functionComparisonExample.js +8 -0
  193. package/dist/contracts/functionWorkflowToolContracts.js +1 -1
  194. package/dist/contracts/inputSchemaPresentation.js +181 -0
  195. package/dist/contracts/investigationExamples.js +4 -3
  196. package/dist/contracts/javascript/electronToolContracts.js +3 -2
  197. package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +3 -22
  198. package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +248 -0
  199. package/dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js +1 -1
  200. package/dist/contracts/javascript/javascriptRuntimeReconciliationExample.js +8 -7
  201. package/dist/contracts/managed/managedToolContracts.js +8 -12
  202. package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
  203. package/dist/contracts/mobileApplicationGraphExamples.js +8 -8
  204. package/dist/contracts/native/binaryDiagnosticsToolContracts.js +1 -1
  205. package/dist/contracts/native/nativeToolContracts.js +2 -2
  206. package/dist/contracts/officialToolContracts.js +2 -1
  207. package/dist/contracts/promptContracts.js +2 -2
  208. package/dist/contracts/providerSelection.js +1 -1
  209. package/dist/contracts/sessionLifecycleInputs.js +4 -3
  210. package/dist/contracts/sessionStatusContract.js +3 -2
  211. package/dist/contracts/sessionToolContracts.js +17 -4
  212. package/dist/contracts/sessionToolSchemas.js +4 -16
  213. package/dist/contracts/toolContracts.js +2 -0
  214. package/dist/contracts/toolEffects.js +1 -0
  215. package/dist/contracts/toolOutputSchemaGroups.js +138 -94
  216. package/dist/contracts/toolOutputSchemaPrimitives.js +13 -26
  217. package/dist/contracts/toolSchemaMetadata.js +18 -69
  218. package/dist/contracts/webNetworkCaptureToolContracts.js +1 -1
  219. package/dist/contracts/webRuntimeToolContracts.js +1 -1
  220. package/dist/contracts/webScriptToolContracts.js +1 -1
  221. package/dist/doctorRuntime.js +7 -5
  222. package/dist/domain/analysisErrorBase.js +5 -0
  223. package/dist/domain/analysisErrorCore.js +3 -0
  224. package/dist/domain/analysisErrorPresentation.js +22 -5
  225. package/dist/domain/analysisErrorProjection.js +24 -5
  226. package/dist/domain/analysisSnapshot.js +31 -31
  227. package/dist/domain/analysisView/analysisView.js +241 -0
  228. package/dist/domain/analysisView/analysisViewCoverage.js +19 -0
  229. package/dist/domain/analysisView/binaryLayoutView.js +159 -0
  230. package/dist/domain/analysisView/javascriptApplicationView.js +238 -0
  231. package/dist/domain/android/androidApplication.js +1 -1
  232. package/dist/domain/android/androidPartialObservation.js +36 -0
  233. package/dist/domain/apple/appleApplication.js +1 -1
  234. package/dist/domain/apple/dylibResolution.js +10 -3
  235. package/dist/domain/apple/interfaceBuilderGraph.js +0 -1
  236. package/dist/domain/apple/keyedArchive.js +26 -2
  237. package/dist/domain/artifactComparison.js +15 -6
  238. package/dist/domain/artifactGraph.js +17 -4
  239. package/dist/domain/artifactIdentity.js +8 -8
  240. package/dist/domain/artifactInspection.js +8 -8
  241. package/dist/domain/artifactInventoryEvidence.js +9 -16
  242. package/dist/domain/artifactOperationError.js +3 -3
  243. package/dist/domain/artifactPartialObservation.js +1 -0
  244. package/dist/domain/artifactPathSyntax.js +49 -0
  245. package/dist/domain/binaryTarget.js +39 -13
  246. package/dist/domain/browserCaptureComparison.js +13 -49
  247. package/dist/domain/browserCompleteness.js +3 -2
  248. package/dist/domain/browserNetworkEvidence.js +10 -4
  249. package/dist/domain/browserObservation.js +0 -1
  250. package/dist/domain/browserObservationSchemas.js +14 -3
  251. package/dist/domain/browserScenario.js +0 -1
  252. package/dist/domain/browserScenarioCapture.js +1 -2
  253. package/dist/domain/browserScenarioCaptureValues.js +2 -2
  254. package/dist/domain/browserScenarioDiff.js +0 -2
  255. package/dist/domain/browserScenarioDiffEvidence.js +0 -12
  256. package/dist/domain/browserScenarioDiffValues.js +2 -2
  257. package/dist/domain/browserScenarioNormalization.js +3 -3
  258. package/dist/domain/browserScenarioValues.js +6 -6
  259. package/dist/domain/callPath.js +15 -18
  260. package/dist/domain/callPathSchemas.js +2 -2
  261. package/dist/domain/canonicalDigest.js +7 -1
  262. package/dist/domain/canonicalOrdering.js +1 -13
  263. package/dist/domain/changedBehavior.js +5 -6
  264. package/dist/domain/comparisonSemantics.js +0 -5
  265. package/dist/domain/completionLedgerGeneration.js +2 -1
  266. package/dist/domain/configurationErrors.js +12 -0
  267. package/dist/domain/conformancePackage.js +4 -3
  268. package/dist/domain/digests.js +0 -3
  269. package/dist/domain/evidence.js +19 -40
  270. package/dist/domain/evidenceBundle.js +58 -42
  271. package/dist/domain/evidenceCompletionLedger.js +2 -1
  272. package/dist/domain/firmware/firmwareAnalysis.js +4 -3
  273. package/dist/domain/functionComparison.js +6 -6
  274. package/dist/domain/functionComparisonDimensions.js +120 -87
  275. package/dist/domain/functionComparisonNormalization.js +26 -36
  276. package/dist/domain/functionComparisonResults.js +3 -6
  277. package/dist/domain/functionComparisonSchemas.js +2 -8
  278. package/dist/domain/functionDossierEvidence.js +4 -38
  279. package/dist/domain/hopperValues.js +11 -15
  280. package/dist/domain/javascript/electronActiveObservation.js +29 -71
  281. package/dist/domain/javascript/electronObservation.js +14 -3
  282. package/dist/domain/javascript/electronStaticAnalysisBrowser.js +12 -11
  283. package/dist/domain/javascript/electronStaticAnalysisIpc.js +11 -2
  284. package/dist/domain/javascript/electronStaticAnalysisNative.js +7 -4
  285. package/dist/domain/javascript/electronStaticAnalysisValues.js +8 -4
  286. package/dist/domain/javascript/javascriptApplicationAnalysis.js +3 -1
  287. package/dist/domain/javascript/javascriptApplicationChangeGraph.js +12 -8
  288. package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +6 -0
  289. package/dist/domain/javascript/javascriptApplicationGraph.js +41 -16
  290. package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +9 -2
  291. package/dist/domain/javascript/javascriptApplicationVersionComparison.js +4 -4
  292. package/dist/domain/javascript/javascriptApplicationVersionComparisonSchemas.js +37 -22
  293. package/dist/domain/javascript/javascriptApplicationVersionItems.js +50 -36
  294. package/dist/domain/javascript/javascriptApplicationVersionKeys.js +9 -8
  295. package/dist/domain/javascript/javascriptAstFingerprint.js +2 -2
  296. package/dist/domain/javascript/javascriptAstValues.js +22 -0
  297. package/dist/{application/javascript/JavaScriptReturnShapeProjection.js → domain/javascript/javascriptExportReturnShapeProjection.js} +4 -4
  298. package/dist/domain/javascript/javascriptExportShapeComparison.js +10 -3
  299. package/dist/domain/javascript/javascriptExportShapeComparisonIdentity.js +6 -1
  300. package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +58 -22
  301. package/dist/domain/javascript/javascriptExportShapeSelection.js +7 -7
  302. package/dist/domain/javascript/javascriptExportShapeVariants.js +70 -16
  303. package/dist/domain/javascript/javascriptFeatureSeed.js +25 -3
  304. package/dist/domain/javascript/javascriptFeatureTrace.js +7 -6
  305. package/dist/domain/javascript/javascriptFeatureTraceSchemas.js +17 -9
  306. package/dist/domain/javascript/javascriptFeatureTraversal.js +4 -5
  307. package/dist/domain/javascript/javascriptNativeHandoff.js +7 -7
  308. package/dist/domain/javascript/javascriptRuntimeLoadState.js +0 -1
  309. package/dist/domain/javascript/javascriptRuntimeObservation.js +18 -7
  310. package/dist/domain/javascript/javascriptRuntimeReconciliation.js +12 -6
  311. package/dist/domain/javascript/javascriptRuntimeReconciliationActive.js +9 -8
  312. package/dist/domain/javascript/javascriptRuntimeReconciliationCaptureParsing.js +212 -0
  313. package/dist/domain/javascript/javascriptRuntimeReconciliationGraph.js +5 -4
  314. package/dist/domain/javascript/javascriptRuntimeReconciliationInputValidation.js +28 -0
  315. package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +6 -6
  316. package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +12 -222
  317. package/dist/domain/javascript/javascriptRuntimeReconciliationResult.js +2 -2
  318. package/dist/domain/javascript/javascriptRuntimeReconciliationRuntime.js +15 -4
  319. package/dist/domain/javascript/javascriptRuntimeReconciliationSchemas.js +2 -2
  320. package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +7 -7
  321. package/dist/domain/javascript/javascriptSemanticAnalysis.js +209 -11
  322. package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +2 -1
  323. package/dist/domain/javascript/javascriptSemanticCallResolution.js +9 -7
  324. package/dist/domain/javascript/javascriptSemanticCalls.js +2 -1
  325. package/dist/domain/javascript/javascriptSemanticChildProcesses.js +4 -3
  326. package/dist/domain/javascript/javascriptSemanticCoverage.js +20 -0
  327. package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +7 -9
  328. package/dist/domain/javascript/javascriptSemanticDataEffects.js +4 -11
  329. package/dist/domain/javascript/javascriptSemanticFingerprints.js +2 -2
  330. package/dist/domain/javascript/javascriptSemanticGraph.js +220 -71
  331. package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +19 -1
  332. package/dist/domain/javascript/javascriptSemanticIr.js +0 -4
  333. package/dist/domain/javascript/javascriptSemanticIterationSources.js +106 -0
  334. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +515 -74
  335. package/dist/domain/javascript/javascriptSemanticMutationInitializers.js +190 -0
  336. package/dist/domain/javascript/javascriptSemanticMutationValues.js +44 -36
  337. package/dist/domain/javascript/javascriptSemanticObjects.js +79 -42
  338. package/dist/domain/javascript/javascriptSemanticPrimitives.js +8 -14
  339. package/dist/domain/javascript/javascriptSemanticProjection.js +21 -16
  340. package/dist/domain/javascript/javascriptSemanticPromises.js +16 -21
  341. package/dist/domain/javascript/javascriptSemanticPropertyPaths.js +23 -0
  342. package/dist/domain/javascript/javascriptSemanticProvenance.js +3 -3
  343. package/dist/domain/javascript/javascriptSemanticQuery.js +8 -2
  344. package/dist/domain/javascript/javascriptSemanticQueryIdentity.js +3 -2
  345. package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -9
  346. package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +16 -10
  347. package/dist/domain/javascript/javascriptSemanticResourceLimits.js +1 -1
  348. package/dist/domain/javascript/javascriptSemanticResources.js +1 -1
  349. package/dist/domain/javascript/javascriptSemanticReturns.js +55 -44
  350. package/dist/domain/javascript/javascriptSemanticSlots.js +72 -0
  351. package/dist/domain/javascript/javascriptSemanticTraversal.js +6 -1
  352. package/dist/domain/javascript/javascriptSemanticValues.js +180 -76
  353. package/dist/domain/javascript/javascriptSourceMapPaths.js +114 -0
  354. package/dist/domain/javascript/javascriptSourceParser.js +34 -9
  355. package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +5 -6
  356. package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +2 -1
  357. package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +26 -16
  358. package/dist/domain/javascript/sourceToBundleComparison.js +19 -8
  359. package/dist/domain/javascript/sourceToBundleSignals.js +53 -25
  360. package/dist/domain/jsonSerialization.js +109 -55
  361. package/dist/domain/jsonShape.js +46 -19
  362. package/dist/domain/localPath.js +10 -4
  363. package/dist/domain/managed/managedApplicationGraph.js +10 -6
  364. package/dist/domain/managed/managedApplicationGraphNodes.js +82 -57
  365. package/dist/domain/managed/managedArtifact.js +6 -4
  366. package/dist/domain/managed/managedMemberComparison.js +2 -9
  367. package/dist/domain/managed/managedMemberComparisonMatch.js +6 -7
  368. package/dist/domain/managed/managedNativeVerification.js +0 -2
  369. package/dist/domain/managed/managedNativeVerificationMatch.js +9 -3
  370. package/dist/domain/native/binaryLayout.js +2 -3
  371. package/dist/domain/native/nativeApiBoundary.js +1 -1
  372. package/dist/domain/native/nativeCallObservation.js +3 -3
  373. package/dist/domain/native/nativeInstruction.js +7 -0
  374. package/dist/domain/native/nativeValueFlow.js +5 -11
  375. package/dist/domain/native/objcSwiftMetadata.js +15 -17
  376. package/dist/domain/native/recordedCrash.js +2 -3
  377. package/dist/domain/offsetDateTime.js +17 -0
  378. package/dist/domain/process/processCapture.js +22 -20
  379. package/dist/domain/process/processCaptureCoverage.js +70 -0
  380. package/dist/domain/process/processCaptureExample.js +45 -1
  381. package/dist/domain/process/processCaptureParsing.js +1 -34
  382. package/dist/domain/process/processCaptureValidation.js +82 -13
  383. package/dist/domain/process/processComparison.js +39 -43
  384. package/dist/domain/process/processObservation.js +10 -2
  385. package/dist/domain/process/processScenario.js +24 -2
  386. package/dist/domain/process/processTraceComparison.js +0 -2
  387. package/dist/domain/process/processTraceDimensionProjection.js +1 -1
  388. package/dist/domain/process/processTraceEvaluation.js +19 -15
  389. package/dist/domain/process/processTraceSpecification.js +4 -7
  390. package/dist/domain/providerAdapterError.js +2 -0
  391. package/dist/domain/providerCleanupError.js +6 -2
  392. package/dist/domain/reconstructionCoverage.js +7 -3
  393. package/dist/domain/reconstructionObligationLedgerSchemas.js +2 -1
  394. package/dist/domain/reconstructionReadinessSchemas.js +2 -1
  395. package/dist/domain/reconstructionUnknowns.js +4 -3
  396. package/dist/domain/reconstructionVerification.js +6 -5
  397. package/dist/domain/reconstructionVerificationSchemas.js +2 -1
  398. package/dist/domain/referenceSourceGraph.js +27 -28
  399. package/dist/domain/referenceSourceImportParsing.js +34 -45
  400. package/dist/domain/residualUnknown.js +3 -2
  401. package/dist/domain/staticRuntimeCorrelation.js +4 -3
  402. package/dist/domain/stringPatterns.js +6 -0
  403. package/dist/domain/swiftSymbolClassification.js +66 -0
  404. package/dist/domain/symbolAnalysis.js +83 -20
  405. package/dist/domain/unicodeCodePointOrder.js +6 -0
  406. package/dist/domain/webBundleAnalyzerInspection.js +9 -1
  407. package/dist/domain/webCaptureDiff.js +71 -30
  408. package/dist/domain/webCaptureDiffSchemas.js +8 -11
  409. package/dist/domain/webEventListeners.js +3 -2
  410. package/dist/domain/webExecution.js +3 -2
  411. package/dist/domain/webInventory.js +3 -2
  412. package/dist/domain/webMcpDiscovery.js +4 -3
  413. package/dist/domain/webRuntime.js +0 -2
  414. package/dist/domain/webScriptExport.js +2 -2
  415. package/dist/dotnet/ManagedArtifactInspector.js +2 -19
  416. package/dist/dotnet/ManagedMemberInspector.js +12 -18
  417. package/dist/dotnet/ManagedMemberInspectorCore.js +47 -44
  418. package/dist/dotnet/ManagedMemberInstructionDecoder.js +1 -2
  419. package/dist/dotnet/ManagedMemberRows.js +75 -62
  420. package/dist/dotnet/ManagedMetadataInventory.js +16 -22
  421. package/dist/dotnet/ManagedMethodBodyReader.js +4 -0
  422. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +109 -94
  423. package/dist/dotnet/ManagedNativeBoundaryInspector.js +12 -21
  424. package/dist/dotnet/ManagedReaderFailure.js +16 -0
  425. package/dist/dotnet/ManagedStaticProvider.js +13 -12
  426. package/dist/dotnet/ManagedStaticProviderMetadata.js +1 -4
  427. package/dist/evaluation/AgentEvaluationFixtures.js +250 -0
  428. package/dist/evaluation/AgentEvaluationReport.js +28 -0
  429. package/dist/evaluation/CodexAgentEval.js +12 -8
  430. package/dist/evaluation/KnownAnswerEvaluation.js +281 -0
  431. package/dist/evm/EvmoleInterfaceProvider.js +2 -1
  432. package/dist/filesystem/RegularFile.js +41 -0
  433. package/dist/firmware/FirmwareCommand.js +9 -5
  434. package/dist/firmware/FirmwareProvider.js +4 -4
  435. package/dist/generatedPackageMetadata.js +2 -2
  436. package/dist/ghidra/GhidraAnalysisProfile.js +3 -6
  437. package/dist/ghidra/GhidraClient.js +105 -36
  438. package/dist/ghidra/GhidraClientStartup.js +0 -2
  439. package/dist/ghidra/GhidraDoctor.js +6 -5
  440. package/dist/ghidra/GhidraFunctionValues.js +3 -5
  441. package/dist/ghidra/GhidraInstallation.js +151 -22
  442. package/dist/ghidra/GhidraJavaLaunch.js +6 -2
  443. package/dist/ghidra/GhidraLauncher.js +58 -26
  444. package/dist/ghidra/GhidraProvider.js +6 -2
  445. package/dist/ghidra/GhidraProviderCapabilities.js +6 -0
  446. package/dist/ghidra/GhidraProviderClient.js +13 -3
  447. package/dist/ghidra/GhidraSessionError.js +2 -0
  448. package/dist/ghidra/GhidraSessionRoot.js +39 -0
  449. package/dist/ghidra/extensions/GhidraExtensions.js +17 -10
  450. package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +8 -2
  451. package/dist/hopper/BridgeLauncher.js +34 -45
  452. package/dist/hopper/HopperAnalysisProfile.js +3 -8
  453. package/dist/hopper/HopperCleanup.js +56 -27
  454. package/dist/hopper/HopperClient.js +86 -65
  455. package/dist/hopper/HopperMachOImage.js +3 -2
  456. package/dist/hopper/HopperProvider.js +16 -18
  457. package/dist/hopper/HopperRegexSearch.js +3 -6
  458. package/dist/hopper/HopperTargetLease.js +132 -49
  459. package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -0
  460. package/dist/ida/IdaConfiguration.js +8 -3
  461. package/dist/ida/IdaInput.js +1 -7
  462. package/dist/ida/IdaMcpConnection.js +8 -4
  463. package/dist/ida/IdaOperationRunner.js +5 -3
  464. package/dist/ida/IdaProvider.js +8 -12
  465. package/dist/ida/IdaSessionClient.js +24 -20
  466. package/dist/ida/IdaWorkspace.js +12 -13
  467. package/dist/inspector/JavaScriptRuntimeScope.js +9 -5
  468. package/dist/inspector/V8InspectorCaptureProjection.js +47 -14
  469. package/dist/inspector/V8InspectorProvider.js +97 -35
  470. package/dist/javascript/recovery/WakaruCommand.js +7 -2
  471. package/dist/javascript/recovery/WakaruExecution.js +5 -2
  472. package/dist/main/shutdown.js +81 -29
  473. package/dist/main/startup.js +9 -2
  474. package/dist/main/transport.js +23 -3
  475. package/dist/main.js +11 -18
  476. package/dist/native/AppleMachoSelection.js +16 -6
  477. package/dist/native/AppleObjcDispatchFacets.js +3 -3
  478. package/dist/native/AppleObjcProperties.js +17 -7
  479. package/dist/native/CommandRunner.js +9 -7
  480. package/dist/native/LldbCallTracer.js +249 -77
  481. package/dist/native/NativeMacOSProvider.js +32 -17
  482. package/dist/native/NativeMacOSProviderMetadata.js +1 -2
  483. package/dist/native/NativeUiHelperRuntime.js +11 -2
  484. package/dist/native/NativeUiObservation.js +2 -2
  485. package/dist/native/pwntools/PwntoolsDecoder.js +2 -1
  486. package/dist/process/DarwinProcessRunTokenReader.js +16 -2
  487. package/dist/process/ExecFileOutput.js +88 -6
  488. package/dist/process/PrivateRuntimeRoot.js +10 -5
  489. package/dist/process/ProcessOwnership.js +1 -4
  490. package/dist/process/ProcessOwnershipObservation.js +18 -16
  491. package/dist/process/ProviderProcess.js +1 -3
  492. package/dist/process/capture/FilesystemSnapshot.js +131 -24
  493. package/dist/process/capture/ProcessCaptureError.js +13 -0
  494. package/dist/process/capture/ProcessCaptureLifecycle.js +148 -74
  495. package/dist/process/capture/ProcessFilesystemEffects.js +51 -6
  496. package/dist/process/capture/ProcessHarness.js +16 -33
  497. package/dist/process/capture/ProcessNormalization.js +20 -2
  498. package/dist/process/capture/ProcessSampling.js +25 -2
  499. package/dist/process/capture/TerminalRenderer.js +14 -0
  500. package/dist/process/snapshotEnvironment.js +14 -0
  501. package/dist/server/EvidenceMcpServer.js +25 -14
  502. package/dist/server/analysisAdmission.js +8 -0
  503. package/dist/server/createServer.js +71 -59
  504. package/dist/server/mcpClientMetadata.js +12 -5
  505. package/dist/server/promptCompletion.js +3 -8
  506. package/dist/server/registerAnalysisViewTool.js +15 -0
  507. package/dist/server/registerAndroidTools.js +2 -3
  508. package/dist/server/registerApplicationTools/compareExportShapes.js +6 -6
  509. package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
  510. package/dist/server/registerApplicationTools/compareVersions.js +4 -5
  511. package/dist/server/registerApplicationTools/coverage.js +1 -2
  512. package/dist/server/registerApplicationTools/helpers.js +4 -4
  513. package/dist/server/registerApplicationTools/obligationLedger.js +4 -5
  514. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -4
  515. package/dist/server/registerApplicationTools/traceFeature.js +4 -5
  516. package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
  517. package/dist/server/registerArtifactComparisonTool.js +4 -5
  518. package/dist/server/registerArtifactTools.js +2 -2
  519. package/dist/server/registerBinaryDiagnosticsTools.js +2 -3
  520. package/dist/server/registerBrowserScenarioTool.js +3 -4
  521. package/dist/server/registerBrowserTools.js +13 -16
  522. package/dist/server/registerBundleComparisonTool.js +5 -6
  523. package/dist/server/registerCloseLifecycleTool.js +8 -7
  524. package/dist/server/registerElectronTools.js +10 -13
  525. package/dist/server/registerEnhancedTools.js +82 -77
  526. package/dist/server/registerEvidenceTools.js +54 -47
  527. package/dist/server/registerEvmTools.js +2 -3
  528. package/dist/server/registerFirmwareTools.js +2 -3
  529. package/dist/server/registerFunctionComparisonTool.js +7 -8
  530. package/dist/server/registerInvestigationTools.js +14 -15
  531. package/dist/server/registerJavaScriptRecoveryTool.js +2 -3
  532. package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -6
  533. package/dist/server/registerManagedTools.js +7 -4
  534. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +5 -6
  535. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -5
  536. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +6 -7
  537. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +6 -7
  538. package/dist/server/registerOfficialTools.js +32 -41
  539. package/dist/server/registerProcessComparisonTool.js +8 -8
  540. package/dist/server/registerRecordedCrashTools.js +2 -3
  541. package/dist/server/registerSessionRecordTools.js +15 -19
  542. package/dist/server/registerSessionStatusTool.js +3 -4
  543. package/dist/server/registerSessionTools.js +19 -19
  544. package/dist/server/registerWebModuleTool.js +2 -3
  545. package/dist/server/registerWebNetworkCaptureTool.js +2 -3
  546. package/dist/server/registerWebRuntimeTools.js +4 -5
  547. package/dist/server/registerWebScriptTool.js +2 -3
  548. package/dist/server/registerWebSourceLocationTool.js +2 -3
  549. package/dist/server/toolResult.js +66 -94
  550. package/dist/server/toolResultEncoding.js +11 -10
  551. package/dist/windows/WindowsNativeLoader.js +1 -0
  552. package/dist/windows/WindowsOwnedProcess.js +60 -15
  553. package/dist/windows/WindowsPrivateRuntime.js +7 -8
  554. package/native/windows/README.md +3 -1
  555. package/native/windows/build/manifest.json +2 -2
  556. package/native/windows/build/rea-windows-x64.node +0 -0
  557. package/package.json +42 -30
  558. package/scripts/rea.mjs +3 -6
  559. package/skills/reverse-engineer-anything/SKILL.md +14 -13
  560. package/skills/reverse-engineer-anything/references/android-applications.md +6 -3
  561. package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -4
  562. package/skills/reverse-engineer-anything/references/javascript-applications.md +16 -6
  563. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +18 -0
  564. package/dist/artifacts/inventory/policy.js +0 -2
  565. package/dist/config.js +0 -1
  566. package/dist/contracts/browserCaptureToolInputSchema.js +0 -43
  567. package/dist/contracts/process/processCaptureExample.js +0 -2
  568. package/dist/contracts/toolOutputSchemas.js +0 -2
  569. package/dist/domain/managed/managedApplicationGraphNodeCoverage.js +0 -6
  570. package/dist/main/reload.js +0 -12
  571. package/dist/main/state.js +0 -3
  572. package/dist/server/registerNativeTools.js +0 -6
  573. package/dist/server/sessionToolPolicies.js +0 -2
@@ -0,0 +1,45 @@
1
+ import { addressedValue } from "../contracts/toolOutputSchemaPrimitives.js";
2
+ import { AnalysisCapabilityUnavailableError, AnalysisInputError, AnalysisOutputError, } from "../domain/analysisErrorCore.js";
3
+ import { err, ok } from "../domain/result.js";
4
+ import { resolveProcedureAddress } from "./ProcedureAddressResolution.js";
5
+ /** Resolve a CLI symbol selector without changing existing address spellings. */
6
+ export const resolveXrefsAddress = async (analysis, selector, signal) => {
7
+ if (selector.length === 0 ||
8
+ /^[0-9a-f]+$/iu.test(selector) ||
9
+ /^0x/iu.test(selector) ||
10
+ /:0x/iu.test(selector))
11
+ return ok(selector);
12
+ const inventory = await analysis.execute("list_names", {}, { signal });
13
+ if (!inventory.ok) {
14
+ if (inventory.error instanceof AnalysisCapabilityUnavailableError &&
15
+ inventory.error.operation === "list_names" &&
16
+ !inventory.error.cleanupIncomplete)
17
+ return resolveProcedureAddress(async (operation, parameters, signal) => {
18
+ const result = await analysis.execute(operation, parameters, signal === undefined ? {} : { signal });
19
+ return result.ok ? ok(result.value.result) : result;
20
+ }, selector, signal);
21
+ return inventory;
22
+ }
23
+ if (!Array.isArray(inventory.value.result))
24
+ return err(new AnalysisOutputError("list_names", "Expected a symbol inventory array"));
25
+ const addresses = new Set();
26
+ for (const [index, item] of inventory.value.result.entries()) {
27
+ const parsed = addressedValue.safeParse(item);
28
+ if (!parsed.success || parsed.data.address.length === 0)
29
+ return err(new AnalysisOutputError("list_names", `Invalid symbol inventory entry at index ${index}`));
30
+ if (parsed.data.value === selector)
31
+ addresses.add(parsed.data.address);
32
+ }
33
+ const [address] = addresses;
34
+ if (addresses.size === 1 && address !== undefined)
35
+ return ok(address);
36
+ return err(new AnalysisInputError("xrefs", undefined, [
37
+ {
38
+ path: ["address"],
39
+ reason: "invalid_value",
40
+ message: addresses.size === 0
41
+ ? `Unknown analyzed symbol name ${JSON.stringify(selector)}. Use an exact analyzed name or a hexadecimal address.`
42
+ : `Analyzed symbol name ${JSON.stringify(selector)} is ambiguous at ${[...addresses].join(", ")}. Select an exact address.`,
43
+ },
44
+ ]));
45
+ };
@@ -0,0 +1,76 @@
1
+ import { z } from "zod";
2
+ import { ANALYSIS_VIEW_PROVIDER } from "../InvestigationProviders.js";
3
+ import { resolveEvidenceInput } from "../EvidenceInputResolver.js";
4
+ import { analysisInputErrorFromIssues } from "../../domain/inputIssueProjection.js";
5
+ import { EvidenceIntegrityError } from "../../domain/evidenceErrors.js";
6
+ import { createEvidence, parseEvidence, } from "../../domain/evidence.js";
7
+ import { INSPECT_ANALYSIS_VIEW_OPERATION, inspectAnalysisViewInputSchema, projectAnalysisView, } from "../../domain/analysisView/analysisView.js";
8
+ import { jsonValueSchema } from "../../domain/jsonValue.js";
9
+ import { err, ok } from "../../domain/result.js";
10
+ /** Authenticate a selected-view request and project already completed Evidence. */
11
+ export const inspectAnalysisView = (rawInput, lookup) => {
12
+ const parsed = inspectAnalysisViewInputSchema.safeParse(rawInput);
13
+ if (!parsed.success)
14
+ return err(analysisInputErrorFromIssues(INSPECT_ANALYSIS_VIEW_OPERATION, parsed.error.issues, rawInput, { cause: parsed.error }));
15
+ return inspectAnalysisViewValidated(parsed.data, lookup);
16
+ };
17
+ /** Project a view from input already parsed by a trusted adapter. */
18
+ export const inspectAnalysisViewValidated = (input, lookup) => {
19
+ const resolved = resolveAnalysisViewSource(input.source, lookup);
20
+ if (!resolved.ok)
21
+ return resolved;
22
+ const parent = resolved.value;
23
+ const projected = projectAnalysisView({
24
+ evidenceId: parent.evidence_id,
25
+ operation: parent.operation,
26
+ normalizedResult: parent.normalized_result,
27
+ limitations: parent.limitations,
28
+ }, input.view);
29
+ if (!projected.ok)
30
+ return projected;
31
+ if (parent.subject !== null &&
32
+ parent.subject.digest.sha256 !== projected.value.artifact.sha256)
33
+ return err(new EvidenceIntegrityError(`Parent subject SHA-256 ${parent.subject.digest.sha256} differs from analysis artifact SHA-256 ${projected.value.artifact.sha256}.`));
34
+ return ok(createAnalysisViewEvidence(input, parent, projected.value));
35
+ };
36
+ const resolveAnalysisViewSource = (source, lookup) => {
37
+ if (source.kind === "retained-evidence")
38
+ return resolveEvidenceInput(source, lookup);
39
+ try {
40
+ return ok(parseEvidence(source.evidence));
41
+ }
42
+ catch (cause) {
43
+ if (cause instanceof z.ZodError)
44
+ return err(analysisInputErrorFromIssues(INSPECT_ANALYSIS_VIEW_OPERATION, cause.issues, source.evidence, { cause }));
45
+ if (cause instanceof TypeError)
46
+ return err(new EvidenceIntegrityError(cause.message, cause.message.length > 0 ? { userMessage: cause.message } : undefined));
47
+ throw cause;
48
+ }
49
+ };
50
+ const createAnalysisViewEvidence = (input, parent, result) => {
51
+ const target = parent.subject === null
52
+ ? undefined
53
+ : {
54
+ path: parent.subject.local_path,
55
+ sha256: parent.subject.digest.sha256,
56
+ format: parent.subject.format,
57
+ ...(parent.subject.architecture === null
58
+ ? {}
59
+ : { architecture: parent.subject.architecture }),
60
+ };
61
+ return createEvidence(target, ANALYSIS_VIEW_PROVIDER, {
62
+ predicateType: "rea.analysis-view",
63
+ operation: INSPECT_ANALYSIS_VIEW_OPERATION,
64
+ parameters: {
65
+ parent_evidence_id: parent.evidence_id,
66
+ view: jsonValueSchema.parse(input.view),
67
+ },
68
+ result: jsonValueSchema.parse(result),
69
+ rawResult: null,
70
+ confidence: "derived",
71
+ authority: parent.authority,
72
+ limitations: result.limitations,
73
+ locations: [{ kind: "artifact-path", path: result.artifact.path }],
74
+ evidenceLinks: [parent.evidence_id],
75
+ });
76
+ };
@@ -17,7 +17,7 @@ export class AndroidAnalysisService {
17
17
  const request = androidRequestSchema.safeParse({ operation, input });
18
18
  if (!request.success)
19
19
  return err(new AnalysisInputError(operation, { cause: request.error }));
20
- const target = await parseBinaryTarget(request.data.input.path);
20
+ const target = await parseBinaryTarget(request.data.input.path, options?.signal === undefined ? {} : { signal: options.signal });
21
21
  if (!target.ok)
22
22
  return target;
23
23
  const executed = await this.provider.execute(target.value, request.data, options);
@@ -1,14 +1,39 @@
1
1
  import { ProviderCleanupError } from "../../domain/providerCleanupError.js";
2
- import { err, ok } from "../../domain/result.js";
2
+ import { ProviderAdapterError } from "../../domain/providerAdapterError.js";
3
+ import { projectAnalysisError } from "../../domain/analysisErrorProjection.js";
4
+ import { err } from "../../domain/result.js";
5
+ import { AnalysisError } from "../../domain/analysisErrorBase.js";
3
6
  /** Close one provider client and normalize unexpected adapter rejection. */
4
7
  export const closeAnalysisClient = async (client, providerId, options = {}) => {
5
8
  try {
6
- if (client.closeWithOutcome !== undefined)
7
- return await client.closeWithOutcome(options);
8
- await client.close();
9
- return ok(null);
9
+ return await client.close(options);
10
10
  }
11
11
  catch (cause) {
12
+ // A typed cleanup failure already names its leftover resources.
13
+ if (cause instanceof AnalysisError && cause.cleanupIncomplete)
14
+ return err(cause);
12
15
  return err(new ProviderCleanupError(providerId, ["provider-client"], { reason: "provider client close rejected unexpectedly" }, { cause }));
13
16
  }
14
17
  };
18
+ /** Preserve the original lifecycle failure alongside incomplete cleanup. */
19
+ export const analysisErrorWithCleanupFailure = (primary, cleanup, operation = "close_binary") => {
20
+ const projected = projectAnalysisError(cleanup);
21
+ return new ProviderAdapterError(cleanup instanceof ProviderAdapterError ? cleanup.providerId : "rea", operation, {
22
+ cause: primary,
23
+ userMessage: projectAnalysisError(primary).message,
24
+ ...(primary.capturedOutput === undefined
25
+ ? {}
26
+ : { capturedOutput: primary.capturedOutput }),
27
+ ...(primary.partialObservation === undefined
28
+ ? {}
29
+ : { partialObservation: primary.partialObservation }),
30
+ cleanup: {
31
+ reason: projected.message,
32
+ resources: cleanup.cleanupResources,
33
+ },
34
+ diagnostics: {
35
+ primary_error: projectAnalysisError(primary),
36
+ cleanup_error: projected,
37
+ },
38
+ });
39
+ };
@@ -46,14 +46,13 @@ export const evaluateAnalysisProviderCandidate = async (candidate, status, targe
46
46
  if (resolved.value.profile === null)
47
47
  return ok(rejectedProfile(candidate, status, "Provider version or analysis profile could not be resolved"));
48
48
  const profile = analysisProfileSchema.parse(resolved.value.profile);
49
- const compatibility = jsonObjectSchema.parse(resolved.value.compatibility);
50
49
  const identity = candidate.identity();
51
50
  if (profile.provider.id !== identity.id ||
52
51
  profile.provider.name !== identity.name ||
53
52
  (identity.version !== null &&
54
53
  profile.provider.version !== identity.version))
55
54
  return ok(rejectedProfile(candidate, status, "Resolved analysis profile has mismatched provider identity"));
56
- return ok({ candidate, status, profile, compatibility });
55
+ return ok({ candidate, status, profile });
57
56
  }
58
57
  catch (cause) {
59
58
  void cause;
@@ -117,13 +117,11 @@ export class AnalysisProviderRegistry {
117
117
  if (evaluated.profileError !== undefined)
118
118
  return err(evaluated.profileError);
119
119
  const statuses = replaceCandidate(baseline, evaluated.status);
120
- if (evaluated.profile === undefined ||
121
- evaluated.compatibility === undefined)
120
+ if (evaluated.profile === undefined)
122
121
  return err(selectionError("provider_unavailable", providerId, statuses));
123
122
  return ok(selectedResult(providerId, source, {
124
123
  ...evaluated,
125
124
  profile: evaluated.profile,
126
- compatibility: evaluated.compatibility,
127
125
  }, statuses));
128
126
  }
129
127
  async #selectAutomatically(context) {
@@ -149,8 +147,7 @@ export class AnalysisProviderRegistry {
149
147
  return result.value;
150
148
  });
151
149
  const statuses = evaluations.map(({ status }) => status);
152
- const usable = evaluations.filter((evaluation) => evaluation.profile !== undefined &&
153
- evaluation.compatibility !== undefined);
150
+ const usable = evaluations.filter((evaluation) => evaluation.profile !== undefined);
154
151
  if (usable.length === 0)
155
152
  return ok({
156
153
  requestedProviderId: "auto",
@@ -195,7 +192,6 @@ const selectedResult = (requestedProviderId, source, evaluated, statuses) => {
195
192
  identity: structuredClone(evaluated.profile.provider),
196
193
  selectionSource: source,
197
194
  profile: structuredClone(evaluated.profile),
198
- compatibility: structuredClone(evaluated.compatibility),
199
195
  },
200
196
  candidates: replaceCandidate(statuses, selectedStatus),
201
197
  };
@@ -4,6 +4,7 @@ import {} from "../../domain/analysisErrorBase.js";
4
4
  import { err, ok } from "../../domain/result.js";
5
5
  import { analysisQueryId, createAnalysisSnapshotEntry, createAnalysisSnapshotWorkflowEntry, snapshotBinding, snapshotMatchesProfile, snapshotMatchesTarget, snapshotTarget, parseAnalysisSnapshot, } from "../../domain/analysisSnapshot.js";
6
6
  import { OFFICIAL_TOOL_CONTRACTS } from "../../contracts/officialToolContracts.js";
7
+ import { compareUnicodeCodePoints } from "../../domain/unicodeCodePointOrder.js";
7
8
  const STATEFUL_OPERATIONS = new Set([
8
9
  "health",
9
10
  "current_address",
@@ -31,7 +32,8 @@ export const isSnapshotCacheable = (operation, descriptor, parameters) => !STATE
31
32
  typeof parameters.address === "string") &&
32
33
  descriptor?.effects.mutatesArtifact === false &&
33
34
  descriptor.cachePolicy !== "live" &&
34
- descriptor.effects.mayWriteFilesystem === false &&
35
+ (descriptor.cachePolicy === "snapshot" ||
36
+ descriptor.effects.mayWriteFilesystem === false) &&
35
37
  descriptor.effects.changesPermissions === false;
36
38
  /** Bounded in-memory cache for one immutable binary identity. */
37
39
  export class AnalysisSnapshotCache {
@@ -72,7 +74,7 @@ export class AnalysisSnapshotCache {
72
74
  imported += 1;
73
75
  this.#entries.set(entry.query_id, structuredClone(entry));
74
76
  }
75
- for (const entry of snapshot.workflow_entries ?? []) {
77
+ for (const entry of snapshot.workflow_entries) {
76
78
  if (!this.#workflowEntries.has(entry.query_id) && !this.#hasCapacity())
77
79
  continue;
78
80
  this.#workflowEntries.set(entry.query_id, structuredClone(entry));
@@ -86,15 +88,16 @@ export class AnalysisSnapshotCache {
86
88
  try {
87
89
  const snapshotTargetIdentity = snapshotTarget(target);
88
90
  const binding = snapshotBinding(profile);
89
- const retainedEvidence = structuredClone(evidenceBundle);
91
+ const entries = [...this.#entries.values()].sort((left, right) => compareUnicodeCodePoints(left.query_id, right.query_id));
92
+ const workflows = [...this.#workflowEntries.values()].sort((left, right) => compareUnicodeCodePoints(left.query_id, right.query_id));
93
+ // Parsing owns the returned JSON and metadata; pre-cloning the same
94
+ // payloads here only adds another full materialization.
90
95
  return ok(parseAnalysisSnapshot({
91
96
  target: snapshotTargetIdentity,
92
97
  binding,
93
- entries: this.entries(),
94
- ...(this.workflowEntries().length === 0
95
- ? {}
96
- : { workflow_entries: this.workflowEntries() }),
97
- evidence_bundle: retainedEvidence,
98
+ entries,
99
+ workflow_entries: workflows,
100
+ evidence_bundle: evidenceBundle,
98
101
  }));
99
102
  }
100
103
  catch (cause) {
@@ -124,13 +127,13 @@ export class AnalysisSnapshotCache {
124
127
  /** Return canonical entries for persistence. */
125
128
  entries() {
126
129
  return [...this.#entries.values()]
127
- .sort((left, right) => left.query_id.localeCompare(right.query_id))
130
+ .sort((left, right) => compareUnicodeCodePoints(left.query_id, right.query_id))
128
131
  .map((entry) => structuredClone(entry));
129
132
  }
130
133
  /** Return canonical composed-workflow entries for persistence. */
131
134
  workflowEntries() {
132
135
  return [...this.#workflowEntries.values()]
133
- .sort((left, right) => left.query_id.localeCompare(right.query_id))
136
+ .sort((left, right) => compareUnicodeCodePoints(left.query_id, right.query_id))
134
137
  .map((entry) => structuredClone(entry));
135
138
  }
136
139
  /** Record one exact derived workflow result unless the shared cache is full. */
@@ -13,7 +13,7 @@ import { BinarySessionRecords } from "./BinarySessionRecords.js";
13
13
  import { binarySessionStatus } from "./BinarySessionStatus.js";
14
14
  import { resolveSessionOpen, resolveSessionTarget, validateResolvedSessionTarget, } from "./BinarySessionOpen.js";
15
15
  import { bindExecutionTarget, commitExecutionProfile, prepareSessionExecution, } from "./BinarySessionExecution.js";
16
- import { closeAnalysisClient } from "./AnalysisClientCleanup.js";
16
+ import { analysisErrorWithCleanupFailure, closeAnalysisClient, } from "./AnalysisClientCleanup.js";
17
17
  const OFFICIAL_OPERATIONS = new Set(OFFICIAL_TOOL_CONTRACTS.map(({ name }) => name));
18
18
  const ENHANCED_OPERATIONS = new Set(ENHANCED_TOOL_CONTRACTS.map(({ name }) => name));
19
19
  /**
@@ -25,6 +25,7 @@ const ENHANCED_OPERATIONS = new Set(ENHANCED_TOOL_CONTRACTS.map(({ name }) => na
25
25
  */
26
26
  export class BinarySession extends BinarySessionRecords {
27
27
  #active;
28
+ #pendingCleanup;
28
29
  #transition = Promise.resolve();
29
30
  #transitionGeneration = 0;
30
31
  #calls = new Map();
@@ -38,14 +39,14 @@ export class BinarySession extends BinarySessionRecords {
38
39
  /** Identify the provider producing evidence for this session. */
39
40
  providerIdentity(operation) {
40
41
  const route = this.#currentRoute();
41
- let selected = route.identity;
42
+ let selected = route.binding?.identity ?? route.identity;
42
43
  if (operation !== undefined) {
43
- const exact = route.capabilities?.get(operation)?.provider;
44
+ const exact = route.capabilities.get(operation)?.provider;
44
45
  if (exact !== undefined)
45
46
  selected = exact;
46
47
  else if (ENHANCED_OPERATIONS.has(operation)) {
47
48
  const providers = new Map();
48
- for (const descriptor of route.capabilities?.values() ?? [])
49
+ for (const descriptor of route.capabilities.values())
49
50
  if (descriptor.available &&
50
51
  OFFICIAL_OPERATIONS.has(descriptor.operation))
51
52
  providers.set(descriptor.provider.id, descriptor.provider);
@@ -81,10 +82,6 @@ export class BinarySession extends BinarySessionRecords {
81
82
  return undefined;
82
83
  return structuredClone(profile);
83
84
  }
84
- /** Return opaque adapter metadata retained for legacy open_binary output. */
85
- openCompatibility() {
86
- return structuredClone(this.#active?.compatibility ?? {});
87
- }
88
85
  /** Observe runtime provider-health changes that affect discovery metadata. */
89
86
  onAvailabilityChanged(listener) {
90
87
  this.#availabilityListeners.add(listener);
@@ -134,7 +131,7 @@ export class BinarySession extends BinarySessionRecords {
134
131
  if (!resolved.ok)
135
132
  return resolved;
136
133
  const { target, route, sameTarget } = resolved.value;
137
- const { profile, compatibility } = route;
134
+ const { profile } = route;
138
135
  if (isAborted(options.signal))
139
136
  return err(new AnalysisCancelledError("open_binary"));
140
137
  const activeProfile = this.#active?.profile;
@@ -142,6 +139,11 @@ export class BinarySession extends BinarySessionRecords {
142
139
  ? profile === null
143
140
  : profile !== null && analysisProfilesEqual(activeProfile, profile);
144
141
  await this.#drainCalls(admittedThrough);
142
+ if (isAborted(options.signal))
143
+ return err(new AnalysisCancelledError("open_binary"));
144
+ const pendingClosed = await this.#retryPendingCleanup();
145
+ if (!pendingClosed.ok)
146
+ return pendingClosed;
145
147
  if (isAborted(options.signal))
146
148
  return err(new AnalysisCancelledError("open_binary"));
147
149
  if (sameTarget && sameProfile) {
@@ -155,31 +157,28 @@ export class BinarySession extends BinarySessionRecords {
155
157
  const previous = this.#active;
156
158
  this.#active = undefined;
157
159
  if (previous !== undefined) {
158
- const closed = await closeAnalysisClient(previous.client, previous.route.identity.id);
160
+ const closed = await this.#retireClient(previous.client, previous.route.identity.id);
159
161
  if (!closed.ok) {
160
162
  this.clearSessionRecords();
161
163
  this.#clearRuntimeAvailability();
162
164
  return closed;
163
165
  }
164
166
  }
167
+ if (isAborted(options.signal))
168
+ return err(await this.#restoreAfterFailedOpen(previous, new AnalysisCancelledError("open_binary")));
165
169
  const runId = randomUUID();
166
170
  const client = route.createClient(target, { runId });
167
171
  const started = await client.execute("health", {}, options);
168
172
  if (!started.ok) {
169
- await client.close();
170
- await this.#restore(previous);
171
- return started;
173
+ return err(await this.#failedOpen(client, route.identity.id, previous, started.error));
172
174
  }
173
175
  if (isAborted(options.signal)) {
174
- await client.close();
175
- await this.#restore(previous);
176
- return err(new AnalysisCancelledError("open_binary"));
176
+ return err(await this.#failedOpen(client, route.identity.id, previous, new AnalysisCancelledError("open_binary")));
177
177
  }
178
178
  this.#active = {
179
179
  target,
180
180
  client,
181
181
  profile,
182
- compatibility: structuredClone(compatibility),
183
182
  route,
184
183
  runId,
185
184
  };
@@ -195,9 +194,7 @@ export class BinarySession extends BinarySessionRecords {
195
194
  const imported = this.importAnalysisSnapshot(options.snapshot);
196
195
  if (!imported.ok) {
197
196
  this.#active = undefined;
198
- await client.close();
199
- await this.#restore(previous);
200
- return imported;
197
+ return err(await this.#failedOpen(client, route.identity.id, previous, imported.error));
201
198
  }
202
199
  }
203
200
  return ok(target);
@@ -222,7 +219,12 @@ export class BinarySession extends BinarySessionRecords {
222
219
  return written;
223
220
  const closed = await this.#closeActive(options);
224
221
  return closed.ok
225
- ? ok({ ...written.value, entries: snapshot.value.entries.length })
222
+ ? ok({
223
+ ...written.value,
224
+ primitive_entries: snapshot.value.entries.length,
225
+ workflow_entries: snapshot.value.workflow_entries.length,
226
+ evidence_records: snapshot.value.evidence_bundle.records.length,
227
+ })
226
228
  : closed;
227
229
  });
228
230
  }
@@ -230,8 +232,8 @@ export class BinarySession extends BinarySessionRecords {
230
232
  const previous = this.#active;
231
233
  this.#active = undefined;
232
234
  const closed = previous === undefined
233
- ? ok(null)
234
- : await closeAnalysisClient(previous.client, previous.route.identity.id, {
235
+ ? await this.#retryPendingCleanup(options.progress, options.retainProviderDocuments)
236
+ : await this.#retireClient(previous.client, previous.route.identity.id, {
235
237
  ...(options.progress === undefined
236
238
  ? {}
237
239
  : { progress: options.progress }),
@@ -243,6 +245,42 @@ export class BinarySession extends BinarySessionRecords {
243
245
  this.#clearRuntimeAvailability();
244
246
  return closed;
245
247
  }
248
+ async #retireClient(client, providerId, options = {}) {
249
+ this.#pendingCleanup = {
250
+ client,
251
+ providerId,
252
+ retainDocument: options.retainDocument === true,
253
+ };
254
+ return this.#retryPendingCleanup(options.progress);
255
+ }
256
+ async #retryPendingCleanup(progress, retainDocument) {
257
+ let pending = this.#pendingCleanup;
258
+ if (pending === undefined)
259
+ return ok(null);
260
+ if (retainDocument !== undefined) {
261
+ pending = { ...pending, retainDocument };
262
+ this.#pendingCleanup = pending;
263
+ }
264
+ const closed = await closeAnalysisClient(pending.client, pending.providerId, {
265
+ ...(progress === undefined ? {} : { progress }),
266
+ ...(pending.retainDocument ? { retainDocument: true } : {}),
267
+ });
268
+ if (closed.ok)
269
+ this.#pendingCleanup = undefined;
270
+ return closed;
271
+ }
272
+ async #failedOpen(client, providerId, previous, primary) {
273
+ const closed = await this.#retireClient(client, providerId);
274
+ if (!closed.ok)
275
+ return analysisErrorWithCleanupFailure(primary, closed.error, "open_binary");
276
+ return this.#restoreAfterFailedOpen(previous, primary);
277
+ }
278
+ async #restoreAfterFailedOpen(previous, primary) {
279
+ const restored = await this.#restore(previous);
280
+ return restored.ok
281
+ ? primary
282
+ : analysisErrorWithCleanupFailure(primary, restored.error, "open_binary");
283
+ }
246
284
  /** Describe the active binary session. */
247
285
  status() {
248
286
  return binarySessionStatus({
@@ -276,6 +314,22 @@ export class BinarySession extends BinarySessionRecords {
276
314
  this.#calls.set(call, generation);
277
315
  return call.finally(() => this.#calls.delete(call));
278
316
  }
317
+ /** Admit one composed request until its result and session bookkeeping settle. */
318
+ withAdmittedAnalysis(operationName, signal, operation) {
319
+ const generation = this.#transitionGeneration;
320
+ const transition = this.#transition;
321
+ const call = (async () => {
322
+ const admission = await this.#waitForTransition(operationName, signal, transition);
323
+ if (!admission.ok)
324
+ return admission;
325
+ return ok(await operation({
326
+ execute: (name, arguments_, options) => this.#execute(name, arguments_, options, Promise.resolve()),
327
+ }));
328
+ })();
329
+ // Register synchronously before a lifecycle transition can snapshot calls.
330
+ this.#calls.set(call, generation);
331
+ return call.finally(() => this.#calls.delete(call));
332
+ }
279
333
  async #execute(name, arguments_, options, transition) {
280
334
  const transitioned = await this.#waitForTransition(name, options?.signal, transition);
281
335
  if (!transitioned.ok)
@@ -328,7 +382,7 @@ export class BinarySession extends BinarySessionRecords {
328
382
  execution: profiled.value,
329
383
  });
330
384
  }
331
- else if (profiled.ok && capability?.effects.mutatesArtifact === true) {
385
+ else if (profiled.ok && capability.effects.mutatesArtifact) {
332
386
  this.invalidateSnapshot();
333
387
  }
334
388
  return profiled;
@@ -410,21 +464,24 @@ export class BinarySession extends BinarySessionRecords {
410
464
  }
411
465
  async #restore(previous) {
412
466
  if (previous === undefined)
413
- return;
467
+ return ok(null);
414
468
  const runId = randomUUID();
415
469
  const client = previous.route.createClient(previous.target, { runId });
416
470
  const started = await client.execute("health", {});
417
- if (started.ok)
471
+ if (started.ok) {
418
472
  this.#active = {
419
473
  target: previous.target,
420
474
  client,
421
475
  profile: previous.profile,
422
- compatibility: previous.compatibility,
423
476
  route: previous.route,
424
477
  runId,
425
478
  };
426
- else
427
- await client.close();
479
+ return ok(null);
480
+ }
481
+ const closed = await this.#retireClient(client, previous.route.identity.id);
482
+ return closed.ok
483
+ ? ok(null)
484
+ : err(analysisErrorWithCleanupFailure(started.error, closed.error, "open_binary"));
428
485
  }
429
486
  async #waitForTransition(operation, signal, transition) {
430
487
  if (signal?.aborted === true)
@@ -6,6 +6,4 @@ import { SessionProviderRouter } from "./SessionProviderRouter.js";
6
6
  * Compose one provider-neutral session from deep-provider selection and
7
7
  * disjoint auxiliary operation families.
8
8
  */
9
- export const composeBinarySession = (registry, auxiliaryProviders = []) => new BinarySession(registry instanceof SessionProviderRouter
10
- ? registry
11
- : SessionProviderRouter.selectable(registry, auxiliaryProviders), new InvestigationRecords());
9
+ export const composeBinarySession = (registry, auxiliaryProviders = []) => new BinarySession(SessionProviderRouter.selectable(registry, auxiliaryProviders), new InvestigationRecords());
@@ -9,17 +9,15 @@ export const prepareSessionExecution = (input) => {
9
9
  const { active, operation, parameters, unboundOperationError, lookupSnapshot, } = input;
10
10
  if (active === undefined)
11
11
  return err(new NoBinaryOpenError());
12
- const capability = active.route.capabilities?.get(operation);
13
- if (active.route.capabilities !== undefined &&
14
- capability?.available !== true) {
12
+ const capability = active.route.capabilities.get(operation);
13
+ if (capability?.available !== true) {
15
14
  const selectionError = unboundOperationError(operation, active.route);
16
15
  if (selectionError !== undefined)
17
16
  return err(selectionError);
18
17
  return err(new AnalysisCapabilityUnavailableError(active.route.binding?.identity.id ?? active.route.identity.id, operation, capability?.reason ?? "operation is not declared by this provider"));
19
18
  }
20
19
  const profile = active.profile !== null &&
21
- (capability === undefined ||
22
- capability.provider.id === active.profile.provider.id)
20
+ capability.provider.id === active.profile.provider.id
23
21
  ? active.profile
24
22
  : undefined;
25
23
  const cacheable = profile !== undefined &&
@@ -1,6 +1,6 @@
1
1
  import { snapshotMatchesBinding, snapshotMatchesTarget, snapshotTarget, } from "../../domain/analysisSnapshot.js";
2
2
  import { parseBinaryTarget } from "../BinaryTargetResolver.js";
3
- import {} from "../../domain/binaryTarget.js";
3
+ import {} from "../../domain/binaryTargetTypes.js";
4
4
  import { EvidenceIntegrityError, AnalysisSnapshotMismatchError, } from "../../domain/evidenceErrors.js";
5
5
  import {} from "../../domain/analysisErrorBase.js";
6
6
  import { err } from "../../domain/result.js";
@@ -8,7 +8,15 @@ import { SessionProviderRouter } from "./SessionProviderRouter.js";
8
8
  /** Parse a target, resolve its provider route, and validate snapshot binding. */
9
9
  export const resolveSessionOpen = async (input) => {
10
10
  const { path, options } = input;
11
- const parsed = await parseBinaryTarget(path, process.cwd(), process.arch, options.targetKind, options.formatHint);
11
+ const parsed = await parseBinaryTarget(path, {
12
+ ...(options.targetKind === undefined
13
+ ? {}
14
+ : { targetKind: options.targetKind }),
15
+ ...(options.formatHint === undefined
16
+ ? {}
17
+ : { formatHint: options.formatHint }),
18
+ ...(options.signal === undefined ? {} : { signal: options.signal }),
19
+ });
12
20
  if (!parsed.ok)
13
21
  return parsed;
14
22
  return resolveSessionTarget({ ...input, target: parsed.value });
@@ -6,7 +6,7 @@ import { err, ok } from "../../domain/result.js";
6
6
  import { AnalysisSnapshotCache } from "./AnalysisSnapshotCache.js";
7
7
  import { InvestigationRecords } from "../investigation/InvestigationRecords.js";
8
8
  const SNAPSHOT_MUTATION_RECOVERY = "Export session observations through export_evidence_bundle if needed. Close the active target without saving a snapshot, then reopen it before importing or saving a snapshot.";
9
- /** Binary snapshot owner and compatibility facade for composed investigation records. */
9
+ /** Own binary snapshots and coordinate the composed investigation records. */
10
10
  export class BinarySessionRecords {
11
11
  #records;
12
12
  #snapshot = new AnalysisSnapshotCache();
@@ -1,9 +1,6 @@
1
1
  /** Project internal provider routing state into the caller-visible session status. */
2
2
  export const binarySessionStatus = ({ target, route, router, runtimeUnavailability, runId, runtimeLineageSnapshots, requestActivitySnapshots, providerOperationHealth, }) => {
3
- const configuredProvider = router.configuredIdentity();
4
- const provider = providerSummary(configuredProvider);
5
- const providers = router.providerIdentities(route).map(providerSummary);
6
- const capabilities = [...(route.capabilities?.values() ?? [])]
3
+ const capabilities = [...route.capabilities.values()]
7
4
  .filter(({ operation }) => operation !== "inventory_artifact")
8
5
  .sort((left, right) => left.operation.localeCompare(right.operation))
9
6
  .map((descriptor) => {
@@ -38,8 +35,6 @@ export const binarySessionStatus = ({ target, route, router, runtimeUnavailabili
38
35
  .map(capabilityStatus),
39
36
  }));
40
37
  const common = {
41
- provider,
42
- providers,
43
38
  capabilities,
44
39
  analysis_provider_binding: analysisProviderBinding,
45
40
  analysis_provider_candidates: analysisProviderCandidates,