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
@@ -1,8 +1,8 @@
1
1
  import { AnalysisCapabilityUnavailableError } from "../../domain/analysisErrorCore.js";
2
2
  import { err, ok } from "../../domain/result.js";
3
3
  import { closeAnalysisClient } from "./AnalysisClientCleanup.js";
4
- /** Synthetic compatibility identity for a deterministic provider set. */
5
- export const compositeProviderIdentity = (identities) => ({
4
+ /** Synthetic identity for a deterministic provider set. */
5
+ const compositeProviderIdentity = (identities) => ({
6
6
  id: `composite:${identities
7
7
  .map(({ id }) => id)
8
8
  .sort()
@@ -16,15 +16,10 @@ export class CompositeProvider {
16
16
  #identity;
17
17
  #capabilities;
18
18
  #providerByOperation;
19
- #profileProvider;
20
19
  constructor(providers) {
21
20
  this.providers = providers;
22
21
  if (providers.length === 0)
23
22
  throw new RangeError("CompositeProvider requires at least one provider");
24
- const profileProviders = providers.filter(({ resolveAnalysisProfile }) => resolveAnalysisProfile !== undefined);
25
- if (profileProviders.length > 1)
26
- throw new TypeError("CompositeProvider supports at most one target-bound analysis profile");
27
- this.#profileProvider = profileProviders[0];
28
23
  this.#identity = Object.freeze(compositeProviderIdentity(providers.map((provider) => provider.identity())));
29
24
  const routes = new Map();
30
25
  const capabilities = [];
@@ -46,12 +41,6 @@ export class CompositeProvider {
46
41
  capabilities() {
47
42
  return this.#capabilities;
48
43
  }
49
- resolveAnalysisProfile(target, options) {
50
- const resolve = this.#profileProvider?.resolveAnalysisProfile;
51
- return resolve === undefined
52
- ? Promise.resolve(ok({ profile: null, compatibility: {} }))
53
- : resolve.call(this.#profileProvider, target, options);
54
- }
55
44
  createClient(target, profile, context) {
56
45
  const clients = new Map();
57
46
  const clientFor = (provider) => {
@@ -62,7 +51,7 @@ export class CompositeProvider {
62
51
  clients.set(provider, created);
63
52
  return created;
64
53
  };
65
- const closeWithOutcome = async (options) => {
54
+ const close = async (options) => {
66
55
  const outcomes = await Promise.all([...clients.entries()].map(([provider, client]) => closeAnalysisClient(client, provider.identity().id, options)));
67
56
  return outcomes.find((outcome) => !outcome.ok) ?? ok(null);
68
57
  };
@@ -101,10 +90,7 @@ export class CompositeProvider {
101
90
  }
102
91
  return undefined;
103
92
  },
104
- closeWithOutcome,
105
- close: async () => {
106
- await closeWithOutcome();
107
- },
93
+ close,
108
94
  };
109
95
  }
110
96
  }
@@ -1,7 +1,7 @@
1
1
  import { AnalysisCancelledError } from "../../domain/analysisErrorCore.js";
2
2
  import { AnalysisError } from "../../domain/analysisErrorBase.js";
3
3
  import { ProviderAdapterError } from "../../domain/providerAdapterError.js";
4
- import { err } from "../../domain/result.js";
4
+ import { err, ok } from "../../domain/result.js";
5
5
  import { ABORTED, waitForAbortable } from "./AbortablePromise.js";
6
6
  const isAborted = (signal) => signal?.aborted === true;
7
7
  /**
@@ -77,13 +77,13 @@ class LazyAnalysisClient {
77
77
  operationHealthSnapshot() {
78
78
  return this.#client?.operationHealthSnapshot?.();
79
79
  }
80
- async close() {
80
+ close = async (options) => {
81
81
  this.#closed = true;
82
82
  if (this.#loading === undefined)
83
- return;
83
+ return ok(null);
84
84
  const client = await this.#loading;
85
- await client.close();
86
- }
85
+ return client.close(options);
86
+ };
87
87
  async #load(operation) {
88
88
  if (this.#closed)
89
89
  throw new ProviderAdapterError(this.#providerId, operation, {
@@ -1,40 +1,18 @@
1
- import { analysisProfileSchema, } from "../../domain/analysisProfile.js";
2
- import { AnalysisCancelledError, AnalysisCapabilityUnavailableError, } from "../../domain/analysisErrorCore.js";
3
- import { ProviderAdapterError } from "../../domain/providerAdapterError.js";
1
+ import { AnalysisCapabilityUnavailableError } from "../../domain/analysisErrorCore.js";
4
2
  import { ProviderSelectionError } from "../../domain/providerSelectionError.js";
5
3
  import {} from "../../domain/analysisErrorBase.js";
6
- import { jsonObjectSchema } from "../../domain/jsonValue.js";
7
4
  import { err, ok } from "../../domain/result.js";
8
5
  import { AnalysisProviderRegistry, } from "./AnalysisProviderRegistry.js";
9
- import { ABORTED, waitForAbortable } from "./AbortablePromise.js";
10
- import { CompositeProvider, compositeProviderIdentity, } from "./CompositeProvider.js";
11
- /** Resolve either the compatibility single-provider seam or a selectable set. */
6
+ import { CompositeProvider } from "./CompositeProvider.js";
7
+ /** Resolve one registry-selected deep provider and disjoint auxiliary families. */
12
8
  export class SessionProviderRouter {
13
- runtime;
14
- constructor(runtime) {
15
- this.runtime = runtime;
16
- }
17
- /** Create routing for an embedding backed by one fixed provider or factory. */
18
- static single(provider, options = {}) {
19
- const identity = typeof provider === "function"
20
- ? { id: "unidentified", name: "Unidentified provider", version: null }
21
- : provider.identity();
22
- const capabilities = typeof provider === "function"
23
- ? undefined
24
- : capabilityMap(provider.capabilities());
25
- const resolveProfile = options.resolveAnalysisProfile ??
26
- (typeof provider === "function" ||
27
- provider.resolveAnalysisProfile === undefined
28
- ? () => Promise.resolve(ok({ profile: null, compatibility: {} }))
29
- : (target, resolutionOptions) => provider.resolveAnalysisProfile?.(target, resolutionOptions) ??
30
- Promise.resolve(ok({ profile: null, compatibility: {} })));
31
- return new SessionProviderRouter({
32
- kind: "single",
33
- provider,
34
- identity,
35
- capabilities,
36
- resolveProfile,
37
- });
9
+ registry;
10
+ auxiliaryProviders;
11
+ route;
12
+ constructor(registry, auxiliaryProviders, route) {
13
+ this.registry = registry;
14
+ this.auxiliaryProviders = auxiliaryProviders;
15
+ this.route = route;
38
16
  }
39
17
  /** Create selection-aware routing while keeping auxiliary families disjoint. */
40
18
  static selectable(registry, auxiliaryProviders) {
@@ -48,99 +26,31 @@ export class SessionProviderRouter {
48
26
  if (auxiliaryOperations.has(operation))
49
27
  throw new TypeError(`Deep and auxiliary providers both declare operation ${operation}`);
50
28
  const initialRoute = selectableRoute(auxiliaryProviders, undefined);
51
- return new SessionProviderRouter({
52
- kind: "selectable",
53
- registry,
54
- auxiliaryProviders: [...auxiliaryProviders],
55
- identity: identities.length === 0
56
- ? emptyProviderIdentity()
57
- : compositeProviderIdentity(identities),
58
- initialRoute,
59
- });
60
- }
61
- /** Compatibility identity covering every configured provider. */
62
- configuredIdentity() {
63
- return structuredClone(this.runtime.identity);
64
- }
65
- /** Provider identities exposed through the flat 1.x compatibility field. */
66
- providerIdentities(route) {
67
- if (this.runtime.kind === "single") {
68
- if (route.capabilities === undefined)
69
- return [route.identity];
70
- return uniqueProviderIdentities([...route.capabilities.values()].map(({ provider }) => provider));
71
- }
72
- const selected = route.binding?.identity;
73
- return uniqueProviderIdentities([
74
- ...this.runtime.auxiliaryProviders.map((provider) => provider.identity()),
75
- ...this.runtime.registry
76
- .identities()
77
- .map((identity) => identity.id === selected?.id ? selected : identity),
78
- ]);
29
+ return new SessionProviderRouter(registry, [...auxiliaryProviders], initialRoute);
79
30
  }
80
31
  /** Target-free routes and discovery metadata. */
81
32
  initialRoute() {
82
- if (this.runtime.kind === "selectable")
83
- return this.runtime.initialRoute;
84
- const runtime = this.runtime;
85
- return {
86
- identity: structuredClone(runtime.identity),
87
- capabilities: runtime.capabilities,
88
- profile: null,
89
- compatibility: {},
90
- binding: null,
91
- selection: undefined,
92
- createClient: (target, context) => createSingleProviderClient(runtime, target, undefined, context),
93
- };
33
+ return this.route;
94
34
  }
95
35
  /** Resolve target routes before any provider client is created. */
96
36
  async resolve(target, providerId, signal) {
97
37
  const resolutionOptions = signal === undefined ? undefined : { signal };
98
- if (this.runtime.kind === "selectable") {
99
- const selected = await this.runtime.registry.select(target, providerId, resolutionOptions);
100
- return selected.ok
101
- ? ok(selectableRoute(this.runtime.auxiliaryProviders, selected.value))
102
- : selected;
103
- }
104
- const runtime = this.runtime;
105
- if (providerId !== undefined &&
106
- providerId !== "auto" &&
107
- providerId !== runtime.identity.id)
108
- return err(new ProviderSelectionError({
109
- reason: "unknown_provider",
110
- requestedProviderId: providerId,
111
- candidateIds: [runtime.identity.id],
112
- }));
113
- const resolved = await waitForAbortable(runtime.resolveProfile(target, resolutionOptions), signal);
114
- if (resolved === ABORTED)
115
- return err(new AnalysisCancelledError("open_binary"));
116
- if (!resolved.ok)
117
- return resolved;
118
- const normalized = normalizeProfileResolution(resolved.value, runtime.identity.id);
119
- if (!normalized.ok)
120
- return normalized;
121
- return ok({
122
- identity: structuredClone(runtime.identity),
123
- capabilities: runtime.capabilities,
124
- profile: normalized.value.profile,
125
- compatibility: normalized.value.compatibility,
126
- binding: null,
127
- selection: undefined,
128
- createClient: (openedTarget, context) => createSingleProviderClient(runtime, openedTarget, normalized.value.profile ?? undefined, context),
129
- });
38
+ const selected = await this.registry.select(target, providerId, resolutionOptions);
39
+ return selected.ok
40
+ ? ok(selectableRoute(this.auxiliaryProviders, selected.value))
41
+ : selected;
130
42
  }
131
43
  /** Candidate status authoritative for the active or target-free route. */
132
44
  candidateStatuses(route) {
133
- if (this.runtime.kind === "single")
134
- return [];
135
- return route.selection?.candidates ?? this.runtime.registry.candidates();
45
+ return route.selection?.candidates ?? this.registry.candidates();
136
46
  }
137
47
  /** Produce exact candidate rejections for an intentionally unbound route. */
138
48
  unboundOperationError(operation, route) {
139
- if (this.runtime.kind !== "selectable" ||
140
- route.binding !== null ||
141
- route.selection === undefined)
49
+ if (route.binding !== null ||
50
+ route.selection === undefined ||
51
+ !this.registry.declaredOperations().includes(operation))
142
52
  return undefined;
143
- return this.runtime.registry.unboundOperationError(operation, route.selection);
53
+ return this.registry.unboundOperationError(operation, route.selection);
144
54
  }
145
55
  }
146
56
  const selectableRoute = (auxiliaryProviders, selection) => {
@@ -149,23 +59,23 @@ const selectableRoute = (auxiliaryProviders, selection) => {
149
59
  ...auxiliaryProviders,
150
60
  ...(binding === null ? [] : [binding.provider]),
151
61
  ];
152
- const provider = providers.length === 0 ? undefined : new CompositeProvider(providers);
62
+ const provider = binding === null && providers.length === 1
63
+ ? providers[0]
64
+ : providers.length === 0
65
+ ? undefined
66
+ : new CompositeProvider(providers);
153
67
  const identity = provider?.identity() ?? emptyProviderIdentity();
154
68
  const capabilities = capabilityMap(provider?.capabilities() ?? []);
155
69
  return {
156
70
  identity,
157
71
  capabilities,
158
72
  profile: binding?.profile ?? null,
159
- compatibility: structuredClone(binding?.compatibility ?? {}),
160
73
  binding,
161
74
  selection,
162
75
  createClient: (target, context) => provider?.createClient(target, binding?.profile, context) ??
163
76
  emptyClient(identity),
164
77
  };
165
78
  };
166
- const createSingleProviderClient = (runtime, target, profile, context) => typeof runtime.provider === "function"
167
- ? runtime.provider(target, profile, context)
168
- : runtime.provider.createClient(target, profile, context);
169
79
  const emptyClient = (identity) => ({
170
80
  execute: (operation) => operation === "health"
171
81
  ? Promise.resolve(ok({
@@ -177,7 +87,7 @@ const emptyClient = (identity) => ({
177
87
  subject: null,
178
88
  }))
179
89
  : Promise.resolve(err(new AnalysisCapabilityUnavailableError(identity.id, operation, "operation is not declared by this provider set"))),
180
- close: () => Promise.resolve(),
90
+ close: () => Promise.resolve(ok(null)),
181
91
  });
182
92
  const emptyProviderIdentity = () => ({
183
93
  id: "composite:none",
@@ -185,9 +95,6 @@ const emptyProviderIdentity = () => ({
185
95
  version: null,
186
96
  });
187
97
  const capabilityMap = (capabilities) => new Map(capabilities.map((descriptor) => [descriptor.operation, descriptor]));
188
- const uniqueProviderIdentities = (identities) => [...new Map(identities.map((identity) => [identity.id, identity])).values()]
189
- .sort((left, right) => left.id.localeCompare(right.id))
190
- .map((identity) => structuredClone(identity));
191
98
  const assertDisjoint = (providers) => {
192
99
  const routes = new Set();
193
100
  for (const provider of providers)
@@ -206,18 +113,3 @@ const assertUniqueProviderIds = (identities) => {
206
113
  ids.add(identity.id);
207
114
  }
208
115
  };
209
- const normalizeProfileResolution = (resolution, providerId) => {
210
- try {
211
- return ok({
212
- profile: resolution.profile === null
213
- ? null
214
- : analysisProfileSchema.parse(resolution.profile),
215
- compatibility: jsonObjectSchema.parse(resolution.compatibility),
216
- });
217
- }
218
- catch (cause) {
219
- return err(new ProviderAdapterError(providerId, "resolve_analysis_profile", {
220
- cause,
221
- }));
222
- }
223
- };
@@ -1,3 +1,6 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { z } from "zod";
1
4
  /** Standard executable names and locations used to discover Homebrew. */
2
5
  const HOMEBREW_COMMANDS = [
3
6
  "brew",
@@ -17,3 +20,48 @@ export const probeHomebrew = async (probe) => {
17
20
  }
18
21
  return undefined;
19
22
  };
23
+ const caskDirectoriesSchema = z
24
+ .object({ appdir: z.string().min(1).optional() })
25
+ .loose();
26
+ const caskConfigSchema = z
27
+ .object({
28
+ default: caskDirectoriesSchema.optional(),
29
+ env: caskDirectoriesSchema.optional(),
30
+ explicit: caskDirectoriesSchema.optional(),
31
+ })
32
+ .loose();
33
+ /**
34
+ * Read the application directory Homebrew recorded when it installed a cask,
35
+ * in Homebrew's precedence: explicit option, then environment, then default.
36
+ * Reading the Caskroom avoids `brew` cask commands, which refresh Homebrew's
37
+ * API and bootsnap caches.
38
+ */
39
+ export const installedCaskAppdir = async (caskroom, token, home) => {
40
+ let text;
41
+ try {
42
+ text = await readFile(join(caskroom, token, ".metadata", "config.json"), "utf8");
43
+ }
44
+ catch (cause) {
45
+ // An absent or unreadable receipt means the cask is not installed here.
46
+ void cause;
47
+ return undefined;
48
+ }
49
+ let parsed;
50
+ try {
51
+ parsed = JSON.parse(text);
52
+ }
53
+ catch (cause) {
54
+ // A malformed receipt does not identify an application directory.
55
+ void cause;
56
+ return undefined;
57
+ }
58
+ const config = caskConfigSchema.safeParse(parsed);
59
+ if (!config.success)
60
+ return undefined;
61
+ const appdir = config.data.explicit?.appdir ??
62
+ config.data.env?.appdir ??
63
+ config.data.default?.appdir;
64
+ if (appdir === undefined)
65
+ return undefined;
66
+ return appdir.startsWith("~/") ? join(home, appdir.slice(2)) : appdir;
67
+ };
@@ -1,7 +1,7 @@
1
- import { canonicalDigest } from "../../domain/comparisonSemantics.js";
1
+ import { digestCanonicalValue } from "../../domain/canonicalDigest.js";
2
2
  import { createEvidence } from "../../domain/evidence.js";
3
- import { jsonValueSchema } from "../../domain/jsonValue.js";
4
- /** Create Evidence without retaining arbitrary runtime argument values. */
3
+ import { jsonObjectSchema, jsonValueSchema } from "../../domain/jsonValue.js";
4
+ /** Commit the selected Electron experiment and its observed result. */
5
5
  export const createElectronActiveEvidence = (input, result, provider) => createEvidence(undefined, provider, {
6
6
  predicateType: "rea.electron-active-scenario",
7
7
  operation: "capture_electron_scenario",
@@ -20,14 +20,10 @@ export const createElectronActiveEvidence = (input, result, provider) => createE
20
20
  "Application host platform and architecture were not observed.",
21
21
  ],
22
22
  });
23
- const scenarioProjection = (input) => ({
24
- executable_path: input.executable_path,
25
- application_path: input.application_path,
26
- application_root: input.application_root,
27
- args: [...input.args],
28
- actions: input.actions.map(({ step_id, kind }) => ({ step_id, kind })),
29
- });
30
- const parameters = (input) => ({
31
- ...scenarioProjection(input),
32
- scenario_sha256: canonicalDigest(scenarioProjection(input), "Browser scenario"),
33
- });
23
+ const parameters = (input) => {
24
+ const scenario = jsonObjectSchema.parse(input);
25
+ return {
26
+ ...scenario,
27
+ scenario_sha256: digestCanonicalValue(scenario, "Electron scenario"),
28
+ };
29
+ };
@@ -1,4 +1,4 @@
1
- import { compareCodePoints } from "../../domain/canonicalOrdering.js";
1
+ import { compareUnicodeCodePoints } from "../../domain/unicodeCodePointOrder.js";
2
2
  import { resolveArtifactPathByContext } from "./JavaScriptArtifactPathResolution.js";
3
3
  /** Flatten all per-file IPC facts into deterministic application records. */
4
4
  export const collectElectronIpcRecords = (analysis) => analysis.files
@@ -7,7 +7,7 @@ export const collectElectronIpcRecords = (analysis) => analysis.files
7
7
  file,
8
8
  finding,
9
9
  })))
10
- .sort((left, right) => compareCodePoints(left.key, right.key));
10
+ .sort((left, right) => compareUnicodeCodePoints(left.key, right.key));
11
11
  /** Match only exact literal channels and retain ambiguous matches separately. */
12
12
  export const classifyElectronIpcPairings = (records) => {
13
13
  const handlers = records.filter(isMainHandler);
@@ -1,5 +1,6 @@
1
1
  import { javascriptAnalysisCoverage, resolveArtifactPath, } from "./JavaScriptArtifactGraphContext.js";
2
2
  import { astObservationEvidence } from "./JavaScriptArtifactGraphEvidence.js";
3
+ import { compositeKey } from "../../domain/unicodeCodePointOrder.js";
3
4
  import { addElectronInferenceEdge, electronFindingSourceNode, electronObservationIdentity, electronRangeKey, } from "./ElectronBoundaryGraphContext.js";
4
5
  /** Project JavaScript-requested native addon binding and re-export surfaces. */
5
6
  export const addElectronNativeBoundaries = (context) => {
@@ -21,7 +22,10 @@ const addNativeBinding = (input) => {
21
22
  const addon = resolved === null ? undefined : context.fileNodes.get(resolved);
22
23
  const binding = context.accumulator.addNode({
23
24
  kind: "native-export",
24
- identity: electronObservationIdentity(context, "javascript-requested-native-export", `${file.path}:${value.specifier}:${value.binding_kind}:${value.members.join("\0")}:${electronRangeKey(value.location)}`),
25
+ identity: electronObservationIdentity(context, "javascript-requested-native-export",
26
+ // Members are a variable-length source-derived list: compositeKey keeps
27
+ // ["a\0b"] distinct from ["a", "b"] inside the digested identity.
28
+ `${file.path}:${value.specifier}:${value.binding_kind}:${compositeKey(value.members)}:${electronRangeKey(value.location)}`),
25
29
  observations: [
26
30
  {
27
31
  label: value.members.join(", "),
@@ -1,11 +1,9 @@
1
- import { createEvidence, createImmutableEvidenceSteps, } from "../../domain/evidence.js";
1
+ import { createImmutableEvidenceSteps, } from "../../domain/evidence.js";
2
2
  import { JAVASCRIPT_APPLICATION_PROVIDER } from "../InvestigationProviders.js";
3
- import { freezeJsonSnapshot, freezeOwnedJsonSnapshotSteps, } from "../../domain/immutableJson.js";
3
+ import { freezeOwnedJsonSnapshotSteps } from "../../domain/immutableJson.js";
4
4
  import { rememberOwnedApplicationGraphEvidence } from "./JavaScriptApplicationEvidenceGraph.js";
5
5
  import { completeJavaScriptAnalysisSteps } from "./JavaScriptAnalysisControl.js";
6
6
  import { jsonValueValidationSteps } from "../../domain/jsonValue.js";
7
- /** Transfer an already validated, application-owned result into immutable analysis Evidence. */
8
- export const createOwnedJavaScriptApplicationEvidence = (input, result) => rememberOwnedApplicationGraphEvidence(createJavaScriptApplicationEvidence(input, freezeJsonSnapshot(result)), result);
9
7
  /** Create owned analysis Evidence while allowing request cancellation during sealing and hashing. */
10
8
  export const createOwnedJavaScriptApplicationEvidenceCooperatively = async (input, result, signal, progress) => {
11
9
  await reportEvidencePhase(progress, "seal_javascript_application_result", "Sealing the complete application analysis result");
@@ -19,8 +17,6 @@ export const createOwnedJavaScriptApplicationEvidenceCooperatively = async (inpu
19
17
  };
20
18
  const reportEvidencePhase = (progress, phase, message) => progress?.report({ phase, completed: 0, total: 1, message }) ??
21
19
  Promise.resolve();
22
- /** Create Evidence for one deterministic local JavaScript application graph. */
23
- export const createJavaScriptApplicationEvidence = (input, result) => createEvidence(applicationSubject(result), JAVASCRIPT_APPLICATION_PROVIDER, applicationObservation(input, result));
24
20
  const applicationSubject = (result) => ({
25
21
  path: result.input_path,
26
22
  sha256: result.root_artifact_sha256,
@@ -40,4 +36,5 @@ const applicationObservation = (input, result) => ({
40
36
  });
41
37
  const parameters = (input) => ({
42
38
  format: input.format,
39
+ integrity_policy: input.integrity_policy,
43
40
  });