rea-agents 3.0.0 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (628) hide show
  1. package/README.md +83 -108
  2. package/bridge/ghidra/ReaGhidraBridge.java +609 -841
  3. package/bridge/hopper_bridge.py +99 -344
  4. package/dist/application/AbortablePromise.js +6 -3
  5. package/dist/application/AnalysisContextQueries.js +21 -9
  6. package/dist/application/AnalysisSnapshotCache.js +0 -1
  7. package/dist/application/AnalysisSnapshotFiles.js +7 -7
  8. package/dist/application/AndroidApplicationService.js +1 -1
  9. package/dist/application/AppleApplicationService.js +1 -1
  10. package/dist/application/ArtifactExtraction.js +35 -54
  11. package/dist/application/ArtifactExtractionDestination.js +17 -0
  12. package/dist/application/ArtifactGraphConstruction.js +2 -17
  13. package/dist/application/ArtifactInventory/classify.js +2 -6
  14. package/dist/application/ArtifactInventory/hash.js +2 -20
  15. package/dist/application/ArtifactInventory/policy.js +17 -0
  16. package/dist/application/ArtifactInventory/reader.js +1 -4
  17. package/dist/application/ArtifactInventory/scanCanonical.js +8 -15
  18. package/dist/application/ArtifactInventory/scanReader.js +76 -58
  19. package/dist/application/ArtifactInventory/types.js +1 -5
  20. package/dist/application/ArtifactInventory.js +6 -14
  21. package/dist/application/AuthorizedArtifactInventory.js +3 -13
  22. package/dist/application/BinarySession.js +54 -28
  23. package/dist/application/BinarySessionComposition.js +0 -11
  24. package/dist/application/BinarySessionOpen.js +2 -1
  25. package/dist/application/BinarySessionRecords.js +24 -86
  26. package/dist/application/BinarySessionStatus.js +16 -21
  27. package/dist/application/BinaryTargetResolver.js +216 -0
  28. package/dist/application/BrowserEvidence.js +39 -57
  29. package/dist/application/BrowserObservationService.js +3 -6
  30. package/dist/application/BrowserScenarioCaptureService.js +3 -6
  31. package/dist/application/BrowserScenarioEvidence.js +3 -3
  32. package/dist/application/CallPathTracing.js +2 -36
  33. package/dist/application/CapabilityClientRequirements.js +26 -0
  34. package/dist/application/CapabilityInventory.js +143 -77
  35. package/dist/application/ClientConfigurationDocument.js +27 -0
  36. package/dist/application/ClientRegistrationStatus.js +16 -13
  37. package/dist/application/CommandShimReplay.js +14 -1
  38. package/dist/application/DirectAnalysis.js +22 -46
  39. package/dist/application/DirectAnalysisStatus.js +5 -61
  40. package/dist/application/Doctor.js +11 -32
  41. package/dist/application/DoctorDiagnostics.js +1 -2
  42. package/dist/application/DoctorScope.js +1 -1
  43. package/dist/application/ElectronActiveEvidence.js +50 -0
  44. package/dist/application/ElectronActiveObservationPort.js +1 -0
  45. package/dist/application/ElectronActiveObservationService.js +78 -0
  46. package/dist/application/ElectronBoundaryAnalysis.js +7 -8
  47. package/dist/application/ElectronBoundaryGraphContext.js +1 -1
  48. package/dist/application/ElectronBoundaryGraphIpc.js +3 -3
  49. package/dist/application/ElectronBoundaryGraphNative.js +1 -2
  50. package/dist/application/ElectronBoundaryGraphWindows.js +6 -8
  51. package/dist/application/ElectronEvidence.js +4 -7
  52. package/dist/application/ElectronObservationService.js +5 -9
  53. package/dist/application/EnhancedLiteralTracing.js +42 -65
  54. package/dist/application/EnhancedTools.js +98 -64
  55. package/dist/application/EvidenceBundleCommands.js +16 -12
  56. package/dist/application/EvidenceBundleFiles.js +9 -15
  57. package/dist/application/EvidenceLedger.js +14 -42
  58. package/dist/application/FilesystemSnapshot.js +2 -3
  59. package/dist/application/InterfaceBuilderAnalysis.js +266 -0
  60. package/dist/application/InventoryProjectionEvidence.js +4 -2
  61. package/dist/application/InvestigationProviders.js +1 -1
  62. package/dist/application/JavaScriptApplicationEvidence.js +2 -5
  63. package/dist/application/JavaScriptApplicationEvidenceGraph.js +6 -10
  64. package/dist/application/JavaScriptApplicationService.js +6 -29
  65. package/dist/application/JavaScriptApplicationWorkflowEvidence.js +5 -5
  66. package/dist/application/JavaScriptApplicationWorkflowService.js +0 -8
  67. package/dist/application/JavaScriptArtifactAnalysis.js +38 -127
  68. package/dist/application/JavaScriptArtifactFiles.js +67 -107
  69. package/dist/application/JavaScriptArtifactGraphAccumulator.js +0 -7
  70. package/dist/application/JavaScriptArtifactGraphBuilder.js +7 -58
  71. package/dist/application/JavaScriptArtifactGraphBundlers.js +1 -6
  72. package/dist/application/JavaScriptArtifactGraphContext.js +12 -39
  73. package/dist/application/JavaScriptArtifactGraphDocuments.js +4 -11
  74. package/dist/application/JavaScriptArtifactGraphEvidence.js +0 -14
  75. package/dist/application/JavaScriptArtifactGraphFindings.js +3 -3
  76. package/dist/application/JavaScriptArtifactGraphStructure.js +16 -17
  77. package/dist/application/JavaScriptArtifactPathResolution.js +61 -49
  78. package/dist/application/JavaScriptArtifactReconstruction.js +5 -10
  79. package/dist/application/JavaScriptArtifactReconstructionInput.js +2 -14
  80. package/dist/application/JavaScriptJsonModules.js +2 -2
  81. package/dist/application/JavaScriptModuleRelationships.js +22 -27
  82. package/dist/application/JavaScriptReplayPermission.js +1 -1
  83. package/dist/application/JavaScriptReplayPlanning.js +9 -3
  84. package/dist/application/JavaScriptReplayService.js +29 -47
  85. package/dist/application/JavaScriptReturnShapeProjection.js +12 -42
  86. package/dist/application/JavaScriptRuntimeObservationEvidence.js +7 -8
  87. package/dist/application/JavaScriptRuntimeObservationService.js +4 -8
  88. package/dist/application/JavaScriptRuntimeReconciliationEvidence.js +2 -3
  89. package/dist/application/JavaScriptSemanticGraphBuilder.js +11 -41
  90. package/dist/application/JavaScriptSemanticGraphConstruction.js +5 -29
  91. package/dist/application/JavaScriptSemanticGraphEvidence.js +1 -1
  92. package/dist/application/JavaScriptSemanticGraphFingerprintProjection.js +1 -1
  93. package/dist/application/JavaScriptSemanticGraphFlowProjection.js +0 -13
  94. package/dist/application/JavaScriptSemanticGraphProjection.js +1 -3
  95. package/dist/application/JavaScriptSemanticTraceService.js +1 -10
  96. package/dist/application/JsonFiles.js +79 -0
  97. package/dist/application/LinuxHopper.js +11 -9
  98. package/dist/application/LoopbackReplay.js +26 -23
  99. package/dist/application/LoopbackReplayRecorder.js +29 -1
  100. package/dist/application/ManagedApplicationGraphService.js +1 -2
  101. package/dist/application/ManagedMemberComparisonService.js +11 -41
  102. package/dist/application/ManagedNativeVerificationService.js +1 -2
  103. package/dist/application/ManagedReconstructionService.js +1 -1
  104. package/dist/application/ManagedRuntimeCorrelationService.js +14 -13
  105. package/dist/application/NativeApiInspection.js +2 -7
  106. package/dist/application/NativeUiActionTrace.js +394 -0
  107. package/dist/application/NodeRuntimeCharacterizationService.js +11 -16
  108. package/dist/application/PermissionAuthority.js +15 -7
  109. package/dist/application/PermissionFailure.js +5 -0
  110. package/dist/application/ProcessCaptureAuthority.js +5 -7
  111. package/dist/application/ProcessCaptureJournal.js +3 -2
  112. package/dist/application/ProcessCaptureLifecycle.js +10 -12
  113. package/dist/application/ProcessCheckpoints.js +29 -11
  114. package/dist/application/ProcessCli.js +8 -17
  115. package/dist/application/ProcessEvidence.js +5 -7
  116. package/dist/application/ProcessHarness.js +60 -20
  117. package/dist/application/ProcessNormalization.js +2 -1
  118. package/dist/application/ProcessReactiveCoordinator.js +2 -4
  119. package/dist/application/ProcessReactiveEffects.js +9 -3
  120. package/dist/application/ProcessReactiveHarness.js +13 -7
  121. package/dist/application/ProcessSampling.js +2 -4
  122. package/dist/application/ProcessTimer.js +39 -0
  123. package/dist/application/ProjectPermissionStore.js +39 -95
  124. package/dist/application/RealHopperAssertions.js +20 -66
  125. package/dist/application/ReconstructionCoverageService.js +12 -58
  126. package/dist/application/ReconstructionObligationAuthority.js +2 -2
  127. package/dist/application/ReconstructionObligationCandidates.js +4 -4
  128. package/dist/application/ReconstructionObligationLedgerEvaluation.js +8 -15
  129. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -7
  130. package/dist/application/ReconstructionObligationLedgerService.js +19 -38
  131. package/dist/application/ReferenceSourceImport.js +21 -47
  132. package/dist/application/ReferenceSourceImportEntries.js +2 -4
  133. package/dist/application/ReferenceSourceImportPolicy.js +5 -32
  134. package/dist/application/ReferenceSourceImportTypes.js +0 -16
  135. package/dist/application/RuntimeExecutableDiagnostics.js +55 -29
  136. package/dist/application/SessionProviderRouter.js +2 -2
  137. package/dist/application/Setup.js +1 -3
  138. package/dist/application/SetupClientConfiguration.js +22 -88
  139. package/dist/application/SetupRegistrationEnvironment.js +0 -7
  140. package/dist/application/StoreFileLock.js +119 -0
  141. package/dist/application/TerminalRenderer.js +2 -3
  142. package/dist/application/Uninstall.js +9 -14
  143. package/dist/application/UnknownEvidence.js +1 -1
  144. package/dist/application/WindowsCapabilities.js +5 -4
  145. package/dist/artifacts/ArtifactPaths.js +2 -5
  146. package/dist/artifacts/ArtifactProvider.js +43 -67
  147. package/dist/artifacts/DirectoryArtifactReader.js +13 -8
  148. package/dist/artifacts/MachOSliceArtifactReader.js +1 -5
  149. package/dist/artifacts/NativeDmgArtifactReader.js +11 -11
  150. package/dist/artifacts/NibArchive.js +269 -0
  151. package/dist/artifacts/SafeOutputTree.js +21 -31
  152. package/dist/browser/BrowserProcessStartup.js +1 -2
  153. package/dist/browser/CdpAuthorizedMainFrame.js +16 -0
  154. package/dist/browser/CdpBrowserProvider.js +3 -13
  155. package/dist/browser/CdpCanonicalJsonDigest.js +9 -0
  156. package/dist/browser/CdpCaptureDocuments.js +28 -76
  157. package/dist/browser/CdpCaptureEventBodyShapes.js +13 -33
  158. package/dist/browser/CdpCaptureEventHandlers.js +22 -87
  159. package/dist/browser/CdpCaptureEvents.js +2 -8
  160. package/dist/browser/CdpCaptureStorage.js +9 -20
  161. package/dist/browser/CdpCaptureStorageFingerprints.js +85 -95
  162. package/dist/browser/CdpCaptureValues.js +21 -21
  163. package/dist/browser/CdpConnection.js +10 -25
  164. package/dist/browser/CdpElectronInspection.js +29 -51
  165. package/dist/browser/CdpElectronProvider.js +10 -35
  166. package/dist/browser/CdpElectronScriptEvents.js +8 -16
  167. package/dist/browser/CdpElectronScripts.js +6 -35
  168. package/dist/browser/CdpElectronWorkers.js +6 -10
  169. package/dist/browser/CdpEndpoint.js +25 -41
  170. package/dist/browser/CdpObservationSession.js +14 -26
  171. package/dist/browser/CdpPageCapture.js +34 -48
  172. package/dist/browser/CdpPageCaptureScripts.js +1 -19
  173. package/dist/browser/CdpPageCaptureWorkers.js +6 -10
  174. package/dist/browser/CdpSafeMetadata.js +19 -22
  175. package/dist/browser/CdpScreenshot.js +3 -5
  176. package/dist/browser/CdpTargetSession.js +1 -2
  177. package/dist/browser/CdpWebMcpDiscovery.js +13 -22
  178. package/dist/browser/ElectronFileScope.js +8 -19
  179. package/dist/browser/JavaScriptRuntimeScope.js +10 -10
  180. package/dist/browser/PlaywrightBrowserScenarioProvider.js +31 -64
  181. package/dist/browser/PlaywrightElectronActiveActions.js +309 -0
  182. package/dist/browser/PlaywrightElectronActiveProvider.js +274 -0
  183. package/dist/browser/PlaywrightExecutionBoundary.js +16 -5
  184. package/dist/browser/PlaywrightScenarioActions.js +3 -7
  185. package/dist/browser/PlaywrightScenarioArtifacts.js +23 -92
  186. package/dist/browser/PlaywrightScenarioBrowser.js +7 -9
  187. package/dist/browser/PlaywrightScenarioEvents.js +45 -94
  188. package/dist/browser/PlaywrightScenarioSession.js +18 -34
  189. package/dist/browser/PngVisualDiff.js +22 -14
  190. package/dist/browser/SensitiveTextCapture.js +1 -18
  191. package/dist/browser/V8InspectorCaptureProjection.js +7 -7
  192. package/dist/browser/V8InspectorEndpoint.js +12 -14
  193. package/dist/browser/V8InspectorProvider.js +20 -61
  194. package/dist/browser/WebSourceMapFetcher.js +56 -176
  195. package/dist/catalogIdentity.js +12 -60
  196. package/dist/cli/artifactCommands.js +49 -77
  197. package/dist/cli/coreAnalysisCommands.js +83 -133
  198. package/dist/cli/javascriptApplicationAnalysis.js +1 -9
  199. package/dist/cli/managedCommands.js +6 -271
  200. package/dist/cli/setupCommands.js +3 -12
  201. package/dist/cli/utilityCommands.js +7 -41
  202. package/dist/cli.js +0 -2
  203. package/dist/cliApplicationCommands.js +44 -114
  204. package/dist/cliBrowserAdvancedCommands.js +12 -102
  205. package/dist/cliBrowserCommands.js +19 -124
  206. package/dist/cliBrowserContext.js +30 -0
  207. package/dist/cliCommandNames.js +5 -5
  208. package/dist/cliElectronCommands.js +49 -71
  209. package/dist/cliEvidenceCommands.js +8 -77
  210. package/dist/cliJavaScriptRuntimeCommands.js +18 -92
  211. package/dist/cliJsonInput.js +4 -14
  212. package/dist/cliObservationOptions.js +11 -92
  213. package/dist/cliPolicyCommands.js +2 -16
  214. package/dist/cliProcessCommands.js +3 -3
  215. package/dist/cliSetup.js +0 -13
  216. package/dist/config/browserScenario.js +77 -0
  217. package/dist/config/electronAutomation.js +35 -0
  218. package/dist/config/environment.js +6 -9
  219. package/dist/config/javascriptReplay.js +41 -0
  220. package/dist/config/managedRuntime.js +25 -0
  221. package/dist/config/parseConfig.js +56 -232
  222. package/dist/config/parsers.js +16 -28
  223. package/dist/config/passiveObservation.js +87 -0
  224. package/dist/config/permissions.js +0 -7
  225. package/dist/config/processCapture.js +47 -0
  226. package/dist/contracts/analysisSearchContract.js +2 -5
  227. package/dist/contracts/applicationToolContracts.js +58 -114
  228. package/dist/contracts/applicationWorkflowInputContracts.js +29 -114
  229. package/dist/contracts/artifactComparisonExample.js +58 -60
  230. package/dist/contracts/artifactToolContracts.js +37 -91
  231. package/dist/contracts/browserScenarioToolContracts.js +6 -51
  232. package/dist/contracts/browserToolContracts.js +10 -75
  233. package/dist/contracts/electronToolContracts.js +27 -98
  234. package/dist/contracts/enhancedInputs.js +31 -78
  235. package/dist/contracts/errorSchemas.js +0 -1
  236. package/dist/contracts/functionComparisonExample.js +10 -24
  237. package/dist/contracts/functionInstructionContract.js +1 -3
  238. package/dist/contracts/functionWorkflowToolContracts.js +4 -5
  239. package/dist/contracts/hopperMemoryContracts.js +3 -3
  240. package/dist/contracts/investigationExamples.js +14 -11
  241. package/dist/contracts/javascriptApplicationWorkflowExamples.js +12 -19
  242. package/dist/contracts/javascriptRuntimeObservationToolContracts.js +2 -20
  243. package/dist/contracts/javascriptRuntimeReconciliationExample.js +45 -12
  244. package/dist/contracts/managedToolContracts.js +10 -104
  245. package/dist/contracts/managedWorkflowExamples.js +77 -125
  246. package/dist/contracts/managedWorkflowToolContracts.js +51 -74
  247. package/dist/contracts/nativeToolContracts.js +9 -14
  248. package/dist/contracts/processCaptureExample.js +2 -69
  249. package/dist/contracts/promptContracts.js +49 -67
  250. package/dist/contracts/providerSelection.js +0 -1
  251. package/dist/contracts/reconstructionReadinessExample.js +1 -6
  252. package/dist/contracts/sessionStatusContract.js +1 -17
  253. package/dist/contracts/sessionToolSchemas.js +52 -0
  254. package/dist/contracts/toolContractExamples.js +11 -10
  255. package/dist/contracts/toolContractHelpers.js +19 -0
  256. package/dist/contracts/toolContracts.js +60 -143
  257. package/dist/contracts/toolEffects.js +16 -9
  258. package/dist/contracts/toolOutputSchemaGroups.js +47 -86
  259. package/dist/contracts/toolOutputSchemaPrimitives.js +72 -62
  260. package/dist/contracts/toolSchemaMetadata.js +117 -0
  261. package/dist/contracts/unknownContractExamples.js +0 -2
  262. package/dist/doctorRuntime.js +1 -1
  263. package/dist/domain/analysisErrorPresentation.js +46 -54
  264. package/dist/domain/analysisErrorProjection.js +28 -37
  265. package/dist/domain/analysisProfile.js +3 -31
  266. package/dist/domain/analysisSnapshot.js +3 -12
  267. package/dist/domain/androidApplication.js +15 -52
  268. package/dist/domain/appleApplication.js +24 -65
  269. package/dist/domain/artifactComparison.js +11 -29
  270. package/dist/domain/artifactGraph.js +14 -44
  271. package/dist/domain/artifactInspection.js +38 -69
  272. package/dist/domain/artifactInventoryEvidence.js +27 -21
  273. package/dist/domain/binaryTarget.js +2 -219
  274. package/dist/domain/binaryTargetTypes.js +1 -0
  275. package/dist/domain/browserCaptureComparison.js +35 -60
  276. package/dist/domain/browserObservation.js +45 -197
  277. package/dist/domain/browserObservationSchemas.js +5 -23
  278. package/dist/domain/browserScenario.js +11 -14
  279. package/dist/domain/browserScenarioCapture.js +11 -12
  280. package/dist/domain/browserScenarioCaptureValues.js +146 -84
  281. package/dist/domain/browserScenarioDiff.js +2 -59
  282. package/dist/domain/browserScenarioDiffEvidence.js +51 -0
  283. package/dist/domain/browserScenarioDiffValues.js +21 -38
  284. package/dist/domain/browserScenarioValues.js +80 -109
  285. package/dist/domain/browserSession.js +4 -7
  286. package/dist/domain/bundleComparison.js +6 -32
  287. package/dist/domain/bytecodeProvider.js +53 -54
  288. package/dist/domain/callPath.js +50 -169
  289. package/dist/domain/callPathSchemas.js +79 -0
  290. package/dist/domain/changedBehavior.js +34 -60
  291. package/dist/domain/completionLedgerGeneration.js +8 -14
  292. package/dist/domain/conformancePackage.js +126 -97
  293. package/dist/domain/conformanceReplay.js +39 -11
  294. package/dist/domain/conformanceTrustGate.js +174 -30
  295. package/dist/domain/customProtocolCapture.js +4 -4
  296. package/dist/domain/electronActiveObservation.js +244 -0
  297. package/dist/domain/electronObservation.js +21 -83
  298. package/dist/domain/electronStaticAnalysisBrowser.js +36 -46
  299. package/dist/domain/electronStaticAnalysisIpc.js +38 -14
  300. package/dist/domain/electronStaticAnalysisNative.js +1 -8
  301. package/dist/domain/electronStaticAnalysisValues.js +14 -18
  302. package/dist/domain/errors.js +33 -54
  303. package/dist/domain/eventProcessTree.js +101 -90
  304. package/dist/domain/evidence.js +2 -10
  305. package/dist/domain/evidenceBundle.js +3 -5
  306. package/dist/domain/evidenceCompletionLedger.js +6 -8
  307. package/dist/domain/functionComparison.js +4 -14
  308. package/dist/domain/functionComparisonNormalization.js +8 -8
  309. package/dist/domain/functionComparisonResults.js +25 -15
  310. package/dist/domain/functionComparisonSchemas.js +49 -33
  311. package/dist/domain/functionDossierEvidence.js +31 -151
  312. package/dist/domain/hopperStartupFailure.js +1 -1
  313. package/dist/domain/hopperValues.js +17 -141
  314. package/dist/domain/inputIssueProjection.js +4 -1
  315. package/dist/domain/interfaceBuilderGraph.js +654 -0
  316. package/dist/domain/javascriptApplicationAnalysis.js +8 -112
  317. package/dist/domain/javascriptApplicationChangeGraph.js +22 -82
  318. package/dist/domain/javascriptApplicationEvidenceSchemas.js +59 -47
  319. package/dist/domain/javascriptApplicationGraph.js +3 -13
  320. package/dist/domain/javascriptApplicationGraphSchemas.js +12 -34
  321. package/dist/domain/javascriptApplicationVersionComparison.js +26 -30
  322. package/dist/domain/javascriptApplicationVersionComparisonSchemas.js +123 -68
  323. package/dist/domain/javascriptApplicationVersionItems.js +120 -53
  324. package/dist/domain/javascriptApplicationVersionKeys.js +24 -11
  325. package/dist/domain/javascriptAstFingerprint.js +25 -58
  326. package/dist/domain/javascriptAstValues.js +9 -0
  327. package/dist/domain/javascriptExportInstrumentation.js +2 -4
  328. package/dist/domain/javascriptExportShapeComparison.js +6 -7
  329. package/dist/domain/javascriptExportShapeComparisonSchemas.js +70 -77
  330. package/dist/domain/javascriptExportShapeSelection.js +17 -19
  331. package/dist/domain/javascriptFeatureSeed.js +20 -12
  332. package/dist/domain/javascriptFeatureTrace.js +13 -67
  333. package/dist/domain/javascriptFeatureTraceSchemas.js +24 -52
  334. package/dist/domain/javascriptFeatureTraversal.js +1 -44
  335. package/dist/domain/javascriptNativeHandoff.js +1 -1
  336. package/dist/domain/javascriptReplay.js +100 -101
  337. package/dist/domain/javascriptRuntimeLoadState.js +3 -8
  338. package/dist/domain/javascriptRuntimeObservation.js +43 -103
  339. package/dist/domain/javascriptRuntimeReconciliation.js +1 -3
  340. package/dist/domain/javascriptRuntimeReconciliationActive.js +80 -0
  341. package/dist/domain/javascriptRuntimeReconciliationGraph.js +21 -33
  342. package/dist/domain/javascriptRuntimeReconciliationMatching.js +75 -61
  343. package/dist/domain/javascriptRuntimeReconciliationParsing.js +21 -46
  344. package/dist/domain/javascriptRuntimeReconciliationResult.js +25 -19
  345. package/dist/domain/javascriptRuntimeReconciliationRuntime.js +8 -12
  346. package/dist/domain/javascriptRuntimeReconciliationSchemas.js +34 -49
  347. package/dist/domain/javascriptRuntimeStaticCandidates.js +3 -3
  348. package/dist/domain/javascriptSemanticAnalysis.js +12 -45
  349. package/dist/domain/javascriptSemanticAsyncEffects.js +1 -9
  350. package/dist/domain/javascriptSemanticCallResolution.js +6 -16
  351. package/dist/domain/javascriptSemanticCalls.js +5 -32
  352. package/dist/domain/javascriptSemanticChildProcesses.js +1 -11
  353. package/dist/domain/javascriptSemanticCoverage.js +11 -0
  354. package/dist/domain/javascriptSemanticDataEffectHelpers.js +1 -8
  355. package/dist/domain/javascriptSemanticDataEffects.js +1 -11
  356. package/dist/domain/javascriptSemanticFingerprints.js +3 -5
  357. package/dist/domain/javascriptSemanticGraphSchemas.js +25 -51
  358. package/dist/domain/javascriptSemanticGraphSerialization.js +2 -13
  359. package/dist/domain/javascriptSemanticIr.js +1 -29
  360. package/dist/domain/javascriptSemanticObjects.js +1 -5
  361. package/dist/domain/javascriptSemanticPrimitives.js +2 -9
  362. package/dist/domain/javascriptSemanticProjection.js +0 -18
  363. package/dist/domain/javascriptSemanticPromises.js +9 -16
  364. package/dist/domain/javascriptSemanticProvenance.js +16 -19
  365. package/dist/domain/javascriptSemanticQuery.js +17 -139
  366. package/dist/domain/javascriptSemanticQueryAssessment.js +9 -37
  367. package/dist/domain/javascriptSemanticQueryIdentity.js +2 -23
  368. package/dist/domain/javascriptSemanticQuerySchemas.js +14 -107
  369. package/dist/domain/javascriptSemanticResources.js +1 -6
  370. package/dist/domain/javascriptSemanticReturns.js +10 -27
  371. package/dist/domain/javascriptSemanticValueTypes.js +1 -0
  372. package/dist/domain/javascriptSemanticValues.js +44 -62
  373. package/dist/domain/javascriptStaticAnalysis.js +21 -43
  374. package/dist/domain/javascriptStaticAnalysisBundler.js +34 -93
  375. package/dist/domain/javascriptStaticAnalysisCalls.js +17 -16
  376. package/dist/domain/javascriptStaticAnalysisFindings.js +3 -19
  377. package/dist/domain/javascriptStaticAnalysisHelpers.js +47 -88
  378. package/dist/domain/javascriptStaticAnalysisState.js +1 -5
  379. package/dist/domain/javascriptStaticAnalysisTypes.js +1 -0
  380. package/dist/domain/jsonShape.js +7 -33
  381. package/dist/domain/localPath.js +7 -0
  382. package/dist/domain/managedApplicationGraph.js +9 -41
  383. package/dist/domain/managedApplicationGraphCoverage.js +24 -156
  384. package/dist/domain/managedApplicationGraphNodes.js +10 -13
  385. package/dist/domain/managedArtifact.js +14 -27
  386. package/dist/domain/managedMemberComparison.js +90 -92
  387. package/dist/domain/managedMemberComparisonCoverage.js +11 -33
  388. package/dist/domain/managedMemberComparisonItems.js +221 -0
  389. package/dist/domain/managedMemberComparisonMatch.js +8 -208
  390. package/dist/domain/managedNativeVerification.js +3 -6
  391. package/dist/domain/managedNativeVerificationMatch.js +55 -59
  392. package/dist/domain/managedNativeVerificationSchemas.js +83 -47
  393. package/dist/domain/managedReconstruction.js +19 -23
  394. package/dist/domain/managedRuntimeCorrelation.js +6 -9
  395. package/dist/domain/nativeApiBoundary.js +17 -14
  396. package/dist/domain/nativeInspection.js +0 -2
  397. package/dist/domain/nativeInvestigationGraph.js +351 -0
  398. package/dist/domain/nativeValueFlow.js +61 -0
  399. package/dist/domain/nodeRuntimeCharacterization.js +15 -18
  400. package/dist/domain/objcSwiftMetadata.js +254 -0
  401. package/dist/domain/peInspection.js +1 -1
  402. package/dist/domain/permissionPolicy.js +13 -0
  403. package/dist/domain/processCapture.js +76 -113
  404. package/dist/domain/processCaptureExample.js +68 -0
  405. package/dist/domain/processCaptureParsing.js +21 -0
  406. package/dist/domain/processCaptureReactiveSchema.js +68 -0
  407. package/dist/domain/processCaptureReactiveValidation.js +8 -3
  408. package/dist/domain/processCaptureValidation.js +8 -10
  409. package/dist/domain/processComparison.js +12 -16
  410. package/dist/domain/processObservation.js +5 -6
  411. package/dist/domain/processReactiveMatching.js +32 -46
  412. package/dist/domain/processReactiveRuntime.js +4 -8
  413. package/dist/domain/processReactiveScenario.js +28 -94
  414. package/dist/domain/processReactiveScenarioPreflight.js +5 -30
  415. package/dist/domain/processReactiveTransition.js +42 -21
  416. package/dist/domain/processScenario.js +62 -93
  417. package/dist/domain/processTraceComparison.js +0 -7
  418. package/dist/domain/processTraceEvaluation.js +14 -4
  419. package/dist/domain/processTraceSpecification.js +11 -17
  420. package/dist/domain/protocolCapture.js +11 -9
  421. package/dist/domain/reconstructionCoverage.js +62 -129
  422. package/dist/domain/reconstructionCoverageEvaluation.js +17 -17
  423. package/dist/domain/reconstructionObligationLedgerSchemas.js +45 -72
  424. package/dist/domain/reconstructionReadiness.js +1 -2
  425. package/dist/domain/reconstructionReadinessSchemas.js +66 -40
  426. package/dist/domain/reconstructionUnknowns.js +3 -3
  427. package/dist/domain/reconstructionVerification.js +13 -47
  428. package/dist/domain/reconstructionVerificationSchemas.js +50 -38
  429. package/dist/domain/referenceSourceGraph.js +53 -61
  430. package/dist/domain/referenceSourceImportParsing.js +3 -7
  431. package/dist/domain/replayMachine.js +19 -31
  432. package/dist/domain/replayMachineRun.js +15 -63
  433. package/dist/domain/replayMachineRuntime.js +46 -44
  434. package/dist/domain/replayMachineValues.js +84 -0
  435. package/dist/domain/residualUnknown.js +25 -30
  436. package/dist/domain/runtimeCharacterization.js +15 -16
  437. package/dist/domain/runtimeIdentification.js +48 -47
  438. package/dist/domain/sourceToBundleComparison.js +11 -87
  439. package/dist/domain/sourceToBundleComparisonSchemas.js +25 -50
  440. package/dist/domain/sourceToBundleSignals.js +11 -16
  441. package/dist/domain/staticRuntimeCorrelation.js +44 -54
  442. package/dist/domain/symbolAnalysis.js +10 -19
  443. package/dist/domain/unicodeCodePointOrder.js +12 -0
  444. package/dist/domain/webBundleAnalysis.js +70 -99
  445. package/dist/domain/webBundleAnalyzer.js +2 -4
  446. package/dist/domain/webBundleAnalyzerAst.js +0 -13
  447. package/dist/domain/webBundleAnalyzerInspection.js +26 -52
  448. package/dist/domain/webBundleAnalyzerResult.js +7 -24
  449. package/dist/domain/webCaptureDiff.js +48 -85
  450. package/dist/domain/webCaptureDiffSchemas.js +86 -0
  451. package/dist/domain/webContentArtifact.js +1 -10
  452. package/dist/domain/webMcpDiscovery.js +3 -14
  453. package/dist/domain/webScreenshot.js +58 -34
  454. package/dist/domain/zipPackageFormat.js +7 -0
  455. package/dist/dotnet/ManagedArtifactInspector.js +17 -50
  456. package/dist/dotnet/ManagedMemberInspector.js +27 -58
  457. package/dist/dotnet/ManagedMemberInspectorCore.js +14 -51
  458. package/dist/dotnet/ManagedMemberInstructionDecoder.js +2 -2
  459. package/dist/dotnet/ManagedMemberRows.js +16 -16
  460. package/dist/dotnet/ManagedMetadataHeaps.js +26 -8
  461. package/dist/dotnet/ManagedMetadataInventory.js +21 -30
  462. package/dist/dotnet/ManagedMetadataInventoryRows.js +57 -63
  463. package/dist/dotnet/ManagedMetadataLayout.js +3 -5
  464. package/dist/dotnet/ManagedMethodBodyReader.js +5 -30
  465. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +19 -49
  466. package/dist/dotnet/ManagedNativeBoundaryInspector.js +13 -42
  467. package/dist/dotnet/ManagedPeReader.js +2 -2
  468. package/dist/dotnet/ManagedStaticProvider.js +13 -71
  469. package/dist/generatedMcpToolCatalog.js +1 -1
  470. package/dist/generatedPackageMetadata.js +1 -1
  471. package/dist/ghidra/GhidraAnalysisProfile.js +3 -8
  472. package/dist/ghidra/GhidraClient.js +5 -13
  473. package/dist/ghidra/GhidraClientStartup.js +1 -1
  474. package/dist/ghidra/GhidraClientWire.js +9 -5
  475. package/dist/ghidra/GhidraDefaults.js +0 -18
  476. package/dist/ghidra/GhidraDiagnostics.js +0 -2
  477. package/dist/ghidra/GhidraDoctor.js +16 -12
  478. package/dist/ghidra/GhidraFunctionValues.js +67 -108
  479. package/dist/ghidra/GhidraInstallation.js +98 -42
  480. package/dist/ghidra/GhidraInventoryValues.js +18 -77
  481. package/dist/ghidra/GhidraLauncher.js +0 -8
  482. package/dist/ghidra/GhidraProvider.js +32 -31
  483. package/dist/ghidra/GhidraProviderCapabilities.js +11 -48
  484. package/dist/ghidra/GhidraRequestQueue.js +6 -30
  485. package/dist/ghidra/GhidraResponseBuffer.js +1 -7
  486. package/dist/ghidra/GhidraSessionValues.js +0 -2
  487. package/dist/ghidra/GhidraSocketConnection.js +1 -1
  488. package/dist/ghidra/GhidraTransport.js +4 -7
  489. package/dist/ghidra/protocol.js +19 -42
  490. package/dist/hopper/BridgeLauncher.js +115 -37
  491. package/dist/hopper/HopperAnalysisProfile.js +3 -5
  492. package/dist/hopper/HopperCleanup.js +11 -9
  493. package/dist/hopper/HopperClient.js +5 -8
  494. package/dist/hopper/HopperProcessDiagnostic.js +2 -2
  495. package/dist/hopper/HopperProvider.js +0 -30
  496. package/dist/hopper/HopperRequestQueue.js +21 -40
  497. package/dist/hopper/HopperResponseStream.js +1 -9
  498. package/dist/hopper/HopperSessionValues.js +3 -2
  499. package/dist/hopper/HopperTargetLease.js +119 -0
  500. package/dist/hopper/LinuxPrivateDisplayDiagnostic.js +24 -31
  501. package/dist/hopper/LinuxPrivateDisplayProbe.js +21 -26
  502. package/dist/hopper/protocol.js +6 -4
  503. package/dist/main/reload.js +1 -9
  504. package/dist/main/shutdown.js +1 -1
  505. package/dist/main/state.js +0 -23
  506. package/dist/main/transport.js +27 -39
  507. package/dist/main.js +17 -15
  508. package/dist/mcpDoctor.js +27 -69
  509. package/dist/native/CommandRunner.js +18 -25
  510. package/dist/native/NativeMacOSProvider.js +13 -38
  511. package/dist/native/NativeMachoInspection.js +1 -1
  512. package/dist/process/BoundedFileBytes.js +17 -0
  513. package/dist/process/ExecFileOutput.js +11 -0
  514. package/dist/process/PendingOperations.js +8 -6
  515. package/dist/process/PrivateRuntimeRoot.js +17 -0
  516. package/dist/process/ProcessOwnership.js +67 -130
  517. package/dist/process/ProcessOwnershipIdentity.js +13 -0
  518. package/dist/process/ProcessOwnershipObservation.js +87 -0
  519. package/dist/process/ProcessOwnershipProcessTree.js +22 -0
  520. package/dist/process/ProviderDeadline.js +8 -12
  521. package/dist/process/ProviderProcess.js +7 -28
  522. package/dist/process/WindowsAuthority.js +32 -0
  523. package/dist/reference/ReferenceSourceReader.js +8 -24
  524. package/dist/reference/ReferenceSourceReaderEntries.js +11 -39
  525. package/dist/reference/ReferenceSourceReaderFile.js +13 -31
  526. package/dist/reference/ReferenceSourceReaderPaths.js +3 -18
  527. package/dist/reference/ReferenceSourceReaderValidate.js +3 -6
  528. package/dist/replay/JavaScriptReplayWorker.js +95 -13
  529. package/dist/replay/JavaScriptReplayWorkerTypes.js +1 -0
  530. package/dist/replay/LinuxJavaScriptReplayRunner.js +42 -43
  531. package/dist/replay/LinuxJavaScriptReplaySandbox.js +0 -19
  532. package/dist/replay/LinuxRuntimeClosure.js +1 -3
  533. package/dist/replay/ReplayOutcome.js +27 -18
  534. package/dist/replay/ReplayProcessLifecycle.js +32 -7
  535. package/dist/replay/ReplaySeccompFile.js +29 -0
  536. package/dist/replay/ReplayWorkerProtocol.js +33 -30
  537. package/dist/replay/SystemJavaScriptReplayHost.js +45 -74
  538. package/dist/server/ProcessCaptureElicitation.js +4 -8
  539. package/dist/server/createServer.js +145 -119
  540. package/dist/server/mcpClientMetadata.js +32 -0
  541. package/dist/server/promptCompletion.js +37 -61
  542. package/dist/server/recordDerivedEvidence.js +1 -1
  543. package/dist/server/registerApplicationTools/characterization.js +10 -21
  544. package/dist/server/registerApplicationTools/compareExportShapes.js +6 -16
  545. package/dist/server/registerApplicationTools/compareSourceToBundle.js +6 -15
  546. package/dist/server/registerApplicationTools/compareVersions.js +6 -16
  547. package/dist/server/registerApplicationTools/controlledReplay.js +8 -15
  548. package/dist/server/registerApplicationTools/coverage.js +7 -78
  549. package/dist/server/registerApplicationTools/helpers.js +1 -13
  550. package/dist/server/registerApplicationTools/obligationLedger.js +4 -8
  551. package/dist/server/registerApplicationTools/traceFeature.js +6 -15
  552. package/dist/server/registerApplicationTools/traceSemantics.js +5 -13
  553. package/dist/server/registerApplicationTools.js +0 -2
  554. package/dist/server/registerArtifactComparisonTool.js +27 -35
  555. package/dist/server/registerBrowserScenarioTool.js +3 -8
  556. package/dist/server/registerBrowserTools.js +36 -81
  557. package/dist/server/registerBundleComparisonTool.js +10 -16
  558. package/dist/server/registerCloseLifecycleTool.js +5 -27
  559. package/dist/server/registerElectronTools.js +29 -65
  560. package/dist/server/registerEnhancedTools.js +118 -127
  561. package/dist/server/registerEvidenceTools.js +19 -30
  562. package/dist/server/registerFunctionComparisonTool.js +35 -34
  563. package/dist/server/registerInvestigationTools/helpers.js +3 -32
  564. package/dist/server/registerInvestigationTools.js +36 -148
  565. package/dist/server/registerJavaScriptRuntimeObservationTools.js +15 -27
  566. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +16 -23
  567. package/dist/server/registerManagedWorkflowTools/contract.js +2 -3
  568. package/dist/server/registerManagedWorkflowTools/evidence.js +19 -35
  569. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -14
  570. package/dist/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.js +4 -14
  571. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +11 -20
  572. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +10 -21
  573. package/dist/server/registerOfficialTools.js +8 -51
  574. package/dist/server/registerProcessComparisonTool.js +43 -38
  575. package/dist/server/registerPrompts.js +19 -17
  576. package/dist/server/registerReplayMachineTool.js +4 -10
  577. package/dist/server/registerSessionRecordTools.js +36 -153
  578. package/dist/server/registerSessionStatusTool.js +18 -96
  579. package/dist/server/registerSessionTools.js +34 -91
  580. package/dist/server/sessionAvailabilityPolicy.js +2 -3
  581. package/dist/server/sessionEvidence.js +9 -15
  582. package/dist/server/sessionToolPolicies.js +1 -13
  583. package/dist/server/toolRegistrationOptions.js +4 -192
  584. package/dist/server/toolResult.js +15 -67
  585. package/dist/serverIdentity.js +0 -20
  586. package/install.sh +1 -1
  587. package/package.json +27 -15
  588. package/scripts/electron-active-hook-boundaries.cjs +394 -0
  589. package/scripts/electron-active-hook.cjs +469 -0
  590. package/scripts/hopper-demo-x11.py +13 -32
  591. package/scripts/rea.mjs +1 -11
  592. package/skills/reverse-engineer-anything/SKILL.md +46 -11
  593. package/skills/reverse-engineer-anything/references/evidence-workflows.md +6 -4
  594. package/skills/reverse-engineer-anything/references/javascript-applications.md +13 -13
  595. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +12 -8
  596. package/dist/application/ApplicationWorkflowEvidenceResolver.js +0 -180
  597. package/dist/application/BoundedJsonFiles.js +0 -86
  598. package/dist/application/CrossVersionInventory.js +0 -128
  599. package/dist/application/CrossVersionInvestigation.js +0 -301
  600. package/dist/application/CrossVersionInvestigationCollections.js +0 -23
  601. package/dist/application/CrossVersionInvestigationEvidence.js +0 -64
  602. package/dist/application/CrossVersionInvestigationReplay.js +0 -170
  603. package/dist/application/DeferredFileAuthorization.js +0 -61
  604. package/dist/application/DoctorProjection.js +0 -43
  605. package/dist/application/EnhancedToolPagination.js +0 -22
  606. package/dist/application/EvidenceReferenceResolver.js +0 -26
  607. package/dist/application/InvestigationWorkspaceStore.js +0 -204
  608. package/dist/application/ProcessPairedExperiment.js +0 -72
  609. package/dist/application/ReconstructionCoverageWorkspaceStore.js +0 -31
  610. package/dist/application/ReconstructionReadinessService.js +0 -48
  611. package/dist/cliInvestigationCommands.js +0 -173
  612. package/dist/domain/boundedCartesianProjection.js +0 -15
  613. package/dist/domain/investigationWorkspace.js +0 -346
  614. package/dist/domain/jsonLimits.js +0 -26
  615. package/dist/domain/knownPageCoverage.js +0 -21
  616. package/dist/domain/processPairedExperiment.js +0 -128
  617. package/dist/server/DynamicToolAvailability.js +0 -70
  618. package/dist/server/LazyToolCatalog.js +0 -134
  619. package/dist/server/hydrateServerTools.js +0 -191
  620. package/dist/server/javascriptApplicationResult.js +0 -106
  621. package/dist/server/permissionFailure.js +0 -12
  622. package/dist/server/registerApplicationTools/readiness.js +0 -55
  623. package/dist/server/registerEvidenceResources.js +0 -315
  624. package/dist/server/registerJavaScriptApplicationGraphResource.js +0 -65
  625. package/dist/server/registerReconstructionObligationLedgerResource.js +0 -32
  626. package/dist/server/registerReconstructionReadinessResource.js +0 -32
  627. package/dist/server/toolInputValidation.js +0 -77
  628. package/scripts/package-runner-bootstrap.mjs +0 -72
@@ -1,17 +1,33 @@
1
- import { AnalysisInputError, ArtifactOperationError, BinaryTargetError, BrowserObservationError, ConfigurationError, EvidenceFileError, EvidenceIntegrityError, EvidenceLimitError, HopperRemoteError, InvestigationWorkspaceError, NoBinaryOpenError, PermissionRequiredError, ProviderSelectionError, ReplayPlanStaleError, UnknownRegistryError, } from "./errors.js";
1
+ import { AnalysisInputError, ArtifactOperationError, BinaryTargetError, BrowserObservationError, ConfigurationError, EvidenceFileError, EvidenceIntegrityError, HopperRemoteError, HopperProcessError, HopperStartError, HopperTimeoutError, NoBinaryOpenError, PermissionRequiredError, ProviderSelectionError, ReplayPlanStaleError, UnknownRegistryError, } from "./errors.js";
2
2
  export const analysisErrorRemediationAction = (error) => {
3
+ if (error instanceof HopperTimeoutError)
4
+ return error.providerState === "busy"
5
+ ? "Check binary_session.analysis_activity, wait for the active Hopper request to finish, then retry."
6
+ : "Check binary_session for Hopper health, then retry the operation.";
7
+ if (error instanceof HopperProcessError)
8
+ return "Check binary_session provider health. Restart the owned Hopper process only when it has stopped.";
9
+ if (error instanceof HopperStartError)
10
+ return error.ownerRunId === undefined
11
+ ? "Check the Hopper launcher and target details, then retry opening the target."
12
+ : `Use the active REA session ${error.ownerRunId} or close it before opening this target again.`;
13
+ if (error instanceof HopperRemoteError)
14
+ return "Review the Hopper diagnostic details; correct the request or retry if the failure was transient.";
3
15
  if (error instanceof AnalysisInputError)
4
16
  return "Correct the listed arguments and retry.";
5
17
  if (error instanceof UnknownRegistryError && error.reason === "not-found")
6
18
  return "Check that the unknown_id belongs to this session, then retry.";
7
19
  if (error instanceof ReplayPlanStaleError)
8
20
  return "Review the rebuilt replay plan and explicitly approve its new digest.";
9
- if (error instanceof PermissionRequiredError)
10
- return error.restartRequired
11
- ? "Add the exact missing scope to the administrator configuration, then restart the registered MCP server or client."
12
- : error.elicitationSupported
13
- ? "Approve the exact missing scope, then retry the operation."
14
- : "Add the exact missing scope beneath the administrator ceiling, then retry.";
21
+ if (error instanceof PermissionRequiredError) {
22
+ switch (error.remediation) {
23
+ case "configure":
24
+ return "Add the exact missing scope beneath the administrator ceiling, then retry.";
25
+ case "elicit":
26
+ return "Approve the exact missing scope, then retry the operation.";
27
+ case "restart":
28
+ return "Add the exact missing scope to the administrator configuration, then restart the registered MCP server or client.";
29
+ }
30
+ }
15
31
  return analysisErrorUserMessage(error);
16
32
  };
17
33
  export const analysisErrorCategory = (error) => {
@@ -29,12 +45,10 @@ export const analysisErrorCategory = (error) => {
29
45
  if (error instanceof HopperRemoteError &&
30
46
  error.diagnosticType === "authorization")
31
47
  return "permission_required";
48
+ if (error instanceof HopperProcessError || error instanceof HopperStartError)
49
+ return "unavailable";
32
50
  if (error instanceof ArtifactOperationError)
33
51
  return artifactErrorCategory(error.reason);
34
- if (error instanceof EvidenceFileError && error.reason === "disabled")
35
- return "unavailable";
36
- if (error instanceof InvestigationWorkspaceError)
37
- return investigationWorkspaceCategory(error.reason);
38
52
  return STATIC_ERROR_CATEGORIES[error._tag] ?? "execution_failure";
39
53
  };
40
54
  const browserErrorCategory = (reason) => {
@@ -48,17 +62,6 @@ const browserErrorCategory = (reason) => {
48
62
  return "unavailable";
49
63
  return "execution_failure";
50
64
  };
51
- const investigationWorkspaceCategory = (reason) => {
52
- if (reason === "disabled" ||
53
- reason === "outside-root" ||
54
- reason === "not-file")
55
- return "unavailable";
56
- if (reason === "too-large")
57
- return "truncated";
58
- if (reason === "invalid-json" || reason === "integrity")
59
- return "integrity_mismatch";
60
- return "execution_failure";
61
- };
62
65
  const artifactErrorCategory = (reason) => {
63
66
  if (reason === "integrity")
64
67
  return "integrity_mismatch";
@@ -75,7 +78,6 @@ const STATIC_ERROR_CATEGORIES = {
75
78
  AnalysisCapabilityUnavailableError: "unsupported_provider",
76
79
  ProviderSelectionError: "unsupported_provider",
77
80
  EvidenceIntegrityError: "integrity_mismatch",
78
- EvidenceLimitError: "truncated",
79
81
  AnalysisCancelledError: "cancelled",
80
82
  HopperCancelledError: "cancelled",
81
83
  AnalysisTimeoutError: "timeout",
@@ -90,6 +92,9 @@ export const analysisErrorUserMessage = (error) => {
90
92
  return "This operation needs additional local permission. Review the requested scope and remediation.";
91
93
  if (error instanceof AnalysisInputError)
92
94
  return "Analysis input is invalid. Check the arguments and try again.";
95
+ const hopperMessage = hopperErrorUserMessage(error);
96
+ if (hopperMessage !== undefined)
97
+ return hopperMessage;
93
98
  if (error.userMessage !== undefined)
94
99
  return error.userMessage;
95
100
  const standardMessage = standardErrorMessage(error._tag);
@@ -99,12 +104,8 @@ export const analysisErrorUserMessage = (error) => {
99
104
  return artifactMessage(error.reason);
100
105
  if (error instanceof EvidenceIntegrityError)
101
106
  return "Evidence is invalid or has changed. Recreate or re-import it, then try again.";
102
- if (error instanceof EvidenceLimitError)
103
- return "Evidence is too large for this session. Reduce the evidence set and try again.";
104
107
  if (error instanceof EvidenceFileError)
105
108
  return evidenceFileMessage(error.reason);
106
- if (error instanceof InvestigationWorkspaceError)
107
- return investigationWorkspaceMessage(error.reason);
108
109
  if (error instanceof UnknownRegistryError && error.reason === "not-found")
109
110
  return "The requested residual unknown does not exist in this session. Check the unknown_id and try again.";
110
111
  if (error instanceof UnknownRegistryError)
@@ -120,6 +121,22 @@ export const analysisErrorUserMessage = (error) => {
120
121
  "Process capture could not complete. Run `rea doctor`, then review capture policy and try again.");
121
122
  return "Analysis could not complete. Run `rea doctor`, then try again.";
122
123
  };
124
+ const hopperErrorUserMessage = (error) => {
125
+ if (error instanceof HopperTimeoutError) {
126
+ const request = error.operation ?? "startup";
127
+ return error.providerState === "busy"
128
+ ? `Hopper timed out during ${request} while the provider remained busy. Check binary_session.analysis_activity, wait for the active request to finish, then retry.`
129
+ : `Hopper timed out during ${request} before it started. Check binary_session for provider health, then retry.`;
130
+ }
131
+ if (error instanceof HopperProcessError)
132
+ return `Hopper stopped during ${error.operation ?? "connection"}${error.exitCode === null ? "; its exit was not observed" : ` with exit code ${String(error.exitCode)}`}.${error.userMessage === undefined ? "" : ` ${error.userMessage}`} Check binary_session provider health before retrying.`;
133
+ if (error instanceof HopperStartError)
134
+ return (error.userMessage ??
135
+ "Hopper could not start. Check the launcher and target details, then retry opening the target.");
136
+ if (error instanceof HopperRemoteError)
137
+ return `Hopper ${error.operation ?? "analysis"} failed (${String(error.code)}, ${error.diagnosticType}): ${error.safeMessage}`;
138
+ return undefined;
139
+ };
123
140
  const standardErrorMessage = (tag) => {
124
141
  if (UNREADABLE_OUTPUT_TAGS.has(tag))
125
142
  return "Analysis returned an unreadable result. Retry once; if it continues, run `rea doctor`.";
@@ -166,7 +183,7 @@ const artifactMessage = (reason) => {
166
183
  if (reason === "limit")
167
184
  return "Artifact is too large to process safely. Narrow the requested path or use a smaller artifact.";
168
185
  if (reason === "path")
169
- return "Artifact path is not allowed. Choose a path inside the artifact and try again.";
186
+ return "Artifact contains an unsafe or conflicting internal path. Inspect the reported path and correct the artifact before retrying.";
170
187
  if (reason === "policy")
171
188
  return "Artifact integrity continuation is disabled by policy. Configure REA_ARTIFACT_INTEGRITY_CONTINUE_ENABLED=true and retry only if continuing after mismatches is approved.";
172
189
  if (reason === "unavailable")
@@ -176,37 +193,14 @@ const artifactMessage = (reason) => {
176
193
  return "Artifact could not be read or written. Check file access and try again.";
177
194
  };
178
195
  const evidenceFileMessage = (reason) => {
179
- if (reason === "disabled")
180
- return "Evidence file access is disabled. Enable an evidence directory or use inline evidence.";
181
- if (reason === "outside-root")
182
- return "Evidence path is outside the allowed directory. Choose a path inside the configured evidence directory.";
183
196
  if (reason === "not-file")
184
- return "Evidence path does not point to a file. Choose an evidence file and try again.";
185
- if (reason === "too-large")
186
- return "Evidence file is too large. Reduce its size and try again.";
197
+ return "Evidence path does not point to a regular file. Choose a file and try again.";
187
198
  if (reason === "exists")
188
199
  return "Evidence file already exists. Choose another path or allow overwrite.";
189
200
  if (reason === "invalid-json")
190
201
  return "Evidence file is not valid JSON. Repair or recreate the file and try again.";
191
202
  return "Evidence file could not be accessed. Check file permissions and try again.";
192
203
  };
193
- const investigationWorkspaceMessage = (reason) => {
194
- if (reason === "disabled")
195
- return "Investigation workspace access is disabled. Configure a workspace directory and try again.";
196
- if (reason === "outside-root")
197
- return "Investigation workspace is outside the allowed directory. Choose a configured workspace directory and try again.";
198
- if (reason === "not-file")
199
- return "Investigation workspace path is not a file. Choose a workspace file and try again.";
200
- if (reason === "too-large")
201
- return "Investigation workspace is too large. Reduce its size and try again.";
202
- if (reason === "invalid-json" || reason === "integrity")
203
- return "Investigation workspace is invalid or has changed. Recreate or repair it, then try again.";
204
- if (reason === "locked")
205
- return "Another investigation update is in progress. Try again when it finishes.";
206
- if (reason === "revision-conflict" || reason === "name-conflict")
207
- return "Investigation workspace state changed. Refresh the current state and try again.";
208
- return "Investigation workspace could not be accessed. Check file permissions and try again.";
209
- };
210
204
  const KNOWN_ERROR_TAGS = {
211
205
  AnalysisProtocolError: true,
212
206
  AnalysisInputError: true,
@@ -220,9 +214,7 @@ const KNOWN_ERROR_TAGS = {
220
214
  ArtifactOperationError: true,
221
215
  ProcessCaptureError: true,
222
216
  EvidenceIntegrityError: true,
223
- EvidenceLimitError: true,
224
217
  EvidenceFileError: true,
225
- InvestigationWorkspaceError: true,
226
218
  UnknownRegistryError: true,
227
219
  HopperTimeoutError: true,
228
220
  HopperCancelledError: true,
@@ -1,4 +1,4 @@
1
- import { AnalysisCancelledError, AnalysisCapabilityUnavailableError, AnalysisInputError, AnalysisTimeoutError, ArtifactOperationError, BinaryTargetError, BrowserObservationError, EvidenceFileError, EvidenceLimitError, EvidenceReferenceError, HopperCancelledError, HopperProcessError, HopperRemoteError, HopperTimeoutError, InvestigationWorkspaceError, PermissionRequiredError, ProviderAdapterError, ProviderSelectionError, ReplayPlanStaleError, UnknownRegistryError, } from "./errors.js";
1
+ import { AnalysisCancelledError, AnalysisCapabilityUnavailableError, AnalysisInputError, AnalysisTimeoutError, ArtifactOperationError, BinaryTargetError, BrowserObservationError, EvidenceFileError, EvidenceReferenceError, HopperCancelledError, HopperProcessError, HopperRemoteError, HopperTimeoutError, PermissionRequiredError, ProviderAdapterError, ProviderSelectionError, ReplayPlanStaleError, UnknownRegistryError, } from "./errors.js";
2
2
  import { analysisErrorCategory, analysisErrorRemediationAction, analysisErrorUserMessage, assertKnownAnalysisErrorTag, } from "./analysisErrorPresentation.js";
3
3
  /** Project expected failures into exhaustive, secret-safe caller fields. */
4
4
  export const projectAnalysisError = (error) => {
@@ -12,9 +12,10 @@ export const projectAnalysisError = (error) => {
12
12
  retryable: RETRYABLE_CODES.has(code),
13
13
  remediation: {
14
14
  action: analysisErrorRemediationAction(error),
15
- restart_required: error instanceof PermissionRequiredError && error.restartRequired,
15
+ restart_required: error instanceof PermissionRequiredError &&
16
+ error.remediation === "restart",
16
17
  ...(error instanceof PermissionRequiredError
17
- ? { elicitation_supported: error.elicitationSupported }
18
+ ? { elicitation_supported: error.remediation === "elicit" }
18
19
  : {}),
19
20
  },
20
21
  ...(details === undefined ? {} : { details }),
@@ -37,8 +38,6 @@ const errorCode = (error) => {
37
38
  return artifactOperationCode(error);
38
39
  if (error instanceof EvidenceFileError)
39
40
  return evidenceFileCode(error.reason);
40
- if (error instanceof InvestigationWorkspaceError)
41
- return investigationWorkspaceCode(error.reason);
42
41
  if (error instanceof UnknownRegistryError)
43
42
  return unknownRegistryCode(error.reason);
44
43
  if (error._tag === "ProcessCaptureError")
@@ -65,28 +64,9 @@ const artifactOperationCode = (error) => {
65
64
  return "cancelled";
66
65
  return "artifact_operation_failed";
67
66
  };
68
- const evidenceFileCode = (reason) => {
69
- if (reason === "outside-root")
70
- return "outside_approved_root";
71
- if (reason === "too-large")
72
- return "truncated";
73
- if (reason === "disabled")
74
- return "capability_unavailable";
75
- return "execution_failure";
76
- };
77
- const investigationWorkspaceCode = (reason) => {
78
- if (reason === "revision-conflict" || reason === "name-conflict")
79
- return "revision_conflict";
80
- if (reason === "too-large")
81
- return "truncated";
82
- if (reason === "disabled")
83
- return "capability_unavailable";
84
- if (reason === "outside-root")
85
- return "outside_approved_root";
86
- if (reason === "integrity" || reason === "invalid-json")
87
- return "evidence_integrity_mismatch";
88
- return "execution_failure";
89
- };
67
+ const evidenceFileCode = (reason) => reason === "invalid-json"
68
+ ? "evidence_integrity_mismatch"
69
+ : "execution_failure";
90
70
  const unknownRegistryCode = (reason) => {
91
71
  if (reason === "revision-conflict" || reason === "already-exists")
92
72
  return "revision_conflict";
@@ -121,7 +101,6 @@ const STATIC_ERROR_CODES = {
121
101
  NoBinaryOpenError: "target_unavailable",
122
102
  BinaryTargetError: "target_unavailable",
123
103
  EvidenceIntegrityError: "evidence_integrity_mismatch",
124
- EvidenceLimitError: "truncated",
125
104
  ProviderAdapterError: "execution_failure",
126
105
  HopperRemoteError: "execution_failure",
127
106
  };
@@ -130,7 +109,6 @@ const staticErrorCode = (tag) => {
130
109
  case "ArtifactOperationError":
131
110
  case "BrowserObservationError":
132
111
  case "EvidenceFileError":
133
- case "InvestigationWorkspaceError":
134
112
  case "PermissionRequiredError":
135
113
  case "ProcessCaptureError":
136
114
  case "ProviderSelectionError":
@@ -194,10 +172,6 @@ const artifactStateErrorDetails = (error) => {
194
172
  reason: error.reason,
195
173
  ...(error.reason === "limit" ? { truncated: true } : {}),
196
174
  };
197
- if (error instanceof EvidenceLimitError)
198
- return { limit: error.limit, maximum: error.maximum, truncated: true };
199
- if (error instanceof InvestigationWorkspaceError)
200
- return { operation: error.operation, reason: error.reason };
201
175
  if (error instanceof UnknownRegistryError)
202
176
  return { reason: error.reason };
203
177
  if (error instanceof EvidenceFileError)
@@ -237,11 +211,22 @@ const providerErrorDetails = (error) => {
237
211
  if (error instanceof BrowserObservationError)
238
212
  return { operation: error.operation, reason: error.reason };
239
213
  if (error instanceof HopperRemoteError)
240
- return { provider_code: error.code, diagnostic_type: error.diagnosticType };
241
- if (error instanceof HopperProcessError && error.failureCode !== undefined)
242
214
  return {
243
- failure_code: error.failureCode,
215
+ stage: "analysis",
216
+ provider_code: error.code,
217
+ diagnostic_type: error.diagnosticType,
218
+ ...(error.operation === undefined ? {} : { operation: error.operation }),
219
+ ...(error.requestId === undefined ? {} : { request_id: error.requestId }),
220
+ };
221
+ if (error instanceof HopperProcessError)
222
+ return {
244
223
  exit_code: error.exitCode,
224
+ stage: error.operation === undefined ? "connection" : "analysis",
225
+ ...(error.failureCode === undefined
226
+ ? {}
227
+ : { failure_code: error.failureCode }),
228
+ ...(error.operation === undefined ? {} : { operation: error.operation }),
229
+ ...(error.requestId === undefined ? {} : { request_id: error.requestId }),
245
230
  ...(error.diagnostic === undefined
246
231
  ? {}
247
232
  : { diagnostics: { ...error.diagnostic } }),
@@ -256,7 +241,13 @@ const lifecycleErrorDetails = (error) => {
256
241
  if (error instanceof AnalysisTimeoutError)
257
242
  return { operation: error.operation, timeout_ms: error.timeoutMs };
258
243
  if (error instanceof HopperTimeoutError)
259
- return { operation: "hopper", timeout_ms: error.timeoutMs };
244
+ return {
245
+ stage: error.operation === undefined ? "startup" : "analysis",
246
+ timeout_ms: error.timeoutMs,
247
+ provider_state: error.providerState,
248
+ ...(error.operation === undefined ? {} : { operation: error.operation }),
249
+ ...(error.requestId === undefined ? {} : { request_id: error.requestId }),
250
+ };
260
251
  if (error._tag === "ProcessCaptureError" && error.cleanupIncomplete)
261
252
  return {
262
253
  cleanup: "incomplete",
@@ -1,14 +1,7 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import canonicalize from "canonicalize";
3
3
  import { z } from "zod";
4
- import { isJsonWithinLimits } from "./jsonLimits.js";
5
4
  import { jsonObjectSchema } from "./jsonValue.js";
6
- const PROFILE_MAX_BYTES = 64 * 1024;
7
- const PROFILE_JSON_LIMITS = Object.freeze({
8
- maxDepth: 16,
9
- maxStringLength: 16 * 1024,
10
- maxNodes: 4_096,
11
- });
12
5
  const digestSchema = z.string().regex(/^[a-f0-9]{64}$/u);
13
6
  /** Concrete provider identity committed by an analysis profile. */
14
7
  export const committedProviderSchema = z.object({
@@ -16,25 +9,9 @@ export const committedProviderSchema = z.object({
16
9
  name: z.string().min(1),
17
10
  version: z.string().min(1),
18
11
  });
19
- const boundedParametersSchema = jsonObjectSchema.superRefine((parameters, context) => {
20
- if (!isJsonWithinLimits(parameters, PROFILE_JSON_LIMITS)) {
21
- context.addIssue({
22
- code: "custom",
23
- message: "Analysis profile parameters exceed structural limits",
24
- });
25
- return;
26
- }
27
- if (Buffer.byteLength(canonicalJson(parameters), "utf8") > PROFILE_MAX_BYTES)
28
- context.addIssue({
29
- code: "custom",
30
- message: "Analysis profile parameters exceed the byte limit",
31
- });
32
- });
33
12
  const unsignedAnalysisProfileSchema = z.object({
34
- schema_version: z.literal(1),
35
13
  provider: committedProviderSchema,
36
- provider_profile_schema_version: z.number().int().min(1),
37
- parameters: boundedParametersSchema,
14
+ parameters: jsonObjectSchema,
38
15
  });
39
16
  /** Canonical, provider-neutral commitment to analysis-affecting semantics. */
40
17
  export const analysisProfileSchema = unsignedAnalysisProfileSchema
@@ -49,11 +26,9 @@ export const analysisProfileSchema = unsignedAnalysisProfileSchema
49
26
  });
50
27
  });
51
28
  /** Create a validated RFC 8785 profile commitment at a provider boundary. */
52
- export const createAnalysisProfile = (provider, providerProfileSchemaVersion, parameters) => {
29
+ export const createAnalysisProfile = (provider, parameters) => {
53
30
  const unsigned = unsignedAnalysisProfileSchema.parse({
54
- schema_version: 1,
55
31
  provider,
56
- provider_profile_schema_version: providerProfileSchemaVersion,
57
32
  parameters,
58
33
  });
59
34
  return analysisProfileSchema.parse({
@@ -65,10 +40,7 @@ export const createAnalysisProfile = (provider, providerProfileSchemaVersion, pa
65
40
  export const analysisProfilesEqual = (left, right) => left.digest === right.digest &&
66
41
  left.provider.id === right.provider.id &&
67
42
  left.provider.name === right.provider.name &&
68
- left.provider.version === right.provider.version &&
69
- left.schema_version === right.schema_version &&
70
- left.provider_profile_schema_version ===
71
- right.provider_profile_schema_version;
43
+ left.provider.version === right.provider.version;
72
44
  const profileDigest = (profile) => createHash("sha256").update(canonicalJson(profile)).digest("hex");
73
45
  const canonicalJson = (value) => {
74
46
  const encoded = canonicalize(value);
@@ -76,10 +76,9 @@ const entrySchema = z.object({
76
76
  });
77
77
  /** Provider- and profile-exact cache of successful immutable analysis calls. */
78
78
  export const analysisSnapshotSchema = z.object({
79
- snapshot_version: z.literal(2),
80
79
  target: targetSchema,
81
80
  binding: bindingSchema,
82
- entries: z.array(entrySchema).max(10_000),
81
+ entries: z.array(entrySchema),
83
82
  evidence_bundle: evidenceBundleSchema,
84
83
  });
85
84
  const canonicalJson = (value) => {
@@ -96,7 +95,7 @@ export const snapshotTarget = (target) => ({
96
95
  format: target.format,
97
96
  architecture: target.architecture ?? null,
98
97
  });
99
- /** Build the immutable provider/profile binding used by snapshot v2. */
98
+ /** Build the immutable provider/profile binding used by a cached snapshot. */
100
99
  export const snapshotBinding = (profile) => bindingSchema.parse({
101
100
  provider: profile.provider,
102
101
  analysis_profile: profile,
@@ -161,9 +160,8 @@ export const createAnalysisSnapshotEntry = (input) => {
161
160
  },
162
161
  };
163
162
  };
164
- /** Parse v2 and reject legacy snapshots, altered query IDs, or non-canonical order. */
163
+ /** Parse a provider/profile-exact snapshot and verify its entries and evidence. */
165
164
  export const parseAnalysisSnapshot = (input) => {
166
- rejectLegacySnapshot(input);
167
165
  const parsed = analysisSnapshotSchema.parse(input);
168
166
  parseEvidenceBundle(parsed.evidence_bundle);
169
167
  if (JSON.stringify(evidenceBundleForTarget(parsed.evidence_bundle, parsed.target.sha256)) !== JSON.stringify(parsed.evidence_bundle))
@@ -188,10 +186,3 @@ export const parseAnalysisSnapshot = (input) => {
188
186
  };
189
187
  /** Serialize a validated snapshot with byte-stable canonical entry ordering. */
190
188
  export const serializeAnalysisSnapshot = (snapshot) => `${canonicalJson(parseAnalysisSnapshot(snapshot))}\n`;
191
- const rejectLegacySnapshot = (input) => {
192
- if (typeof input === "object" &&
193
- input !== null &&
194
- "snapshot_version" in input &&
195
- input.snapshot_version === 1)
196
- throw new TypeError("Analysis snapshot v1 is incompatible with profile-exact replay; recapture it as snapshot v2. Its Evidence bundle may be imported separately.");
197
- };
@@ -2,33 +2,26 @@ import { createHash } from "node:crypto";
2
2
  import canonicalize from "canonicalize";
3
3
  import { z } from "zod";
4
4
  import { parseArtifactInventoryEvidence } from "./artifactInventoryEvidence.js";
5
- import { projectBoundedCartesian } from "./boundedCartesianProjection.js";
6
5
  import { evidenceSchema } from "./evidence.js";
7
6
  const digestSchema = z.string().regex(/^[a-f0-9]{64}$/u);
8
7
  const evidenceIdSchema = z.string().regex(/^ev_[a-f0-9]{64}$/u);
9
- const pathSchema = z.string().min(1).max(4_096);
8
+ const pathSchema = z.string().min(1);
10
9
  const componentSchema = z.strictObject({
11
10
  path: pathSchema,
12
11
  artifact_id: z.string().regex(/^art_[a-f0-9]{64}$/u),
13
12
  sha256: digestSchema,
14
- format: z.string().min(1).max(100),
13
+ format: z.string().min(1),
15
14
  });
16
15
  /** Authenticated APK inventory pages projected as one Android application. */
17
16
  export const androidApplicationProjectionInputSchema = z.strictObject({
18
- inventory_evidence: z.array(evidenceSchema).min(1).max(100),
19
- limits: z
20
- .strictObject({
21
- max_components: z.number().int().min(1).max(10_000).default(1_000),
22
- })
23
- .default({ max_components: 1_000 }),
17
+ inventory_evidence: z.array(evidenceSchema).min(1),
24
18
  });
25
19
  /** Deterministic, execution-free Android application inventory projection. */
26
20
  export const androidApplicationProjectionResultSchema = z.strictObject({
27
- schema_version: z.literal(1),
28
21
  projection_id: z.string().regex(/^adp_[a-f0-9]{64}$/u),
29
22
  root_sha256: digestSchema,
30
23
  root_format: z.literal("apk"),
31
- source_evidence_ids: z.array(evidenceIdSchema).min(1).max(100),
24
+ source_evidence_ids: z.array(evidenceIdSchema).min(1),
32
25
  components: z.strictObject({
33
26
  manifests: z.array(componentSchema),
34
27
  resources: z.array(componentSchema),
@@ -59,12 +52,10 @@ export const androidApplicationProjectionResultSchema = z.strictObject({
59
52
  ]),
60
53
  })),
61
54
  coverage: z.strictObject({
62
- status: z.enum(["complete-within-inventory", "partial", "truncated"]),
55
+ status: z.enum(["complete-within-inventory", "partial"]),
63
56
  inventory_complete: z.boolean(),
64
- omitted_components: z.number().int().min(0),
65
- omitted_bridge_candidates: z.number().int().min(0),
66
57
  }),
67
- limitations: z.array(z.string().min(1).max(4_096)).max(100),
58
+ limitations: z.array(z.string().min(1)),
68
59
  });
69
60
  /** Project exact APK paths and hashes without decoding or executing target code. */
70
61
  export const projectAndroidApplication = (input) => {
@@ -87,28 +78,16 @@ export const projectAndroidApplication = (input) => {
87
78
  };
88
79
  });
89
80
  const classified = classify(all);
90
- const components = retain(classified, parsed.limits.max_components);
91
- const omittedComponents = count(classified) - count(components);
92
- const bridgeProjection = bridgeCandidates([...components.dex, ...components.jvm_classes], components.native_libraries, parsed.limits.max_components);
81
+ const bridgeProjection = bridgeCandidates([...classified.dex, ...classified.jvm_classes], classified.native_libraries);
82
+ const components = classified;
93
83
  const limitations = [
94
84
  ...(!inventory.complete
95
85
  ? ["Source inventory pages are incomplete; absence is unknown."]
96
86
  : []),
97
- ...(omittedComponents > 0
98
- ? [
99
- `${String(omittedComponents)} component observations were omitted by the projection limit.`,
100
- ]
101
- : []),
102
- ...(bridgeProjection.omitted > 0
103
- ? [
104
- `${String(bridgeProjection.omitted)} bridge hypotheses were omitted by the projection limit.`,
105
- ]
106
- : []),
107
87
  "Manifest, resource, signing, and bytecode semantics require a dedicated Android provider; this projection reports exact inventory paths and hashes only.",
108
88
  "Bridge candidates are path-based hypotheses, not decoded JNI declarations or observed runtime calls.",
109
89
  ];
110
90
  const withoutId = {
111
- schema_version: 1,
112
91
  root_sha256: inventory.manifest.root_sha256,
113
92
  root_format: "apk",
114
93
  source_evidence_ids: evidence
@@ -118,14 +97,10 @@ export const projectAndroidApplication = (input) => {
118
97
  runtime_families: runtimeFamilies(all),
119
98
  bridge_candidates: bridgeProjection.candidates,
120
99
  coverage: {
121
- status: omittedComponents > 0 || bridgeProjection.omitted > 0
122
- ? "truncated"
123
- : inventory.complete
124
- ? "complete-within-inventory"
125
- : "partial",
100
+ status: inventory.complete
101
+ ? "complete-within-inventory"
102
+ : "partial",
126
103
  inventory_complete: inventory.complete,
127
- omitted_components: omittedComponents,
128
- omitted_bridge_candidates: bridgeProjection.omitted,
129
104
  },
130
105
  limitations,
131
106
  };
@@ -144,17 +119,6 @@ const classify = (all) => ({
144
119
  javascript: all.filter(({ format }) => format === "javascript-bundle"),
145
120
  signing: all.filter(({ path }) => /^META-INF\/[^/]+\.(?:MF|RSA|DSA|EC|SF)$/iu.test(path)),
146
121
  });
147
- const retain = (groups, maximum) => {
148
- let remaining = maximum;
149
- return Object.fromEntries(Object.entries(groups).map(([key, values]) => {
150
- const selected = [...values]
151
- .sort((left, right) => compare(left.path, right.path))
152
- .slice(0, remaining);
153
- remaining -= selected.length;
154
- return [key, selected];
155
- }));
156
- };
157
- const count = (groups) => Object.values(groups).reduce((total, values) => total + values.length, 0);
158
122
  const runtimeFamilies = (all) => {
159
123
  const paths = all.map(({ path }) => path.toLowerCase());
160
124
  const families = new Set();
@@ -174,15 +138,14 @@ const runtimeFamilies = (all) => {
174
138
  families.add("unity");
175
139
  return [...families].sort(compare);
176
140
  };
177
- const bridgeCandidates = (managed, native, maximum) => {
178
- const projection = projectBoundedCartesian(managed, native, maximum, (source, target) => ({
141
+ const bridgeCandidates = (managed, native) => {
142
+ const candidates = managed.flatMap((source) => native.map((target) => ({
179
143
  managed_path: source.path,
180
144
  native_path: target.path,
181
145
  basis: bridgeBasis(target.path),
182
- }));
146
+ })));
183
147
  return {
184
- candidates: projection.values,
185
- omitted: projection.omitted,
148
+ candidates,
186
149
  };
187
150
  };
188
151
  const bridgeBasis = (path) => {