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,9 +1,6 @@
1
1
  import { jsonObjectSchema, jsonValueSchema } from "../domain/jsonValue.js";
2
+ import { partialApplicationCoverage, truncatedApplicationCoverage, } from "../domain/javascriptApplicationEvidenceSchemas.js";
2
3
  import { flattenSemanticReturnValue } from "../domain/javascriptSemanticReturns.js";
3
- import { partialReconstructionCoverage } from "./JavaScriptArtifactGraphEvidence.js";
4
- const MAX_PROJECTED_RETURN_SHAPES = 32;
5
- const MAX_PROJECTED_RETURN_FIELDS = 64;
6
- const MAX_PROJECTED_PROPERTY_COVERAGE = 64;
7
4
  /** Project one exact export/callable link into shallow bounded graph values. */
8
5
  export const projectJavaScriptExportReturnShapes = (input) => {
9
6
  if (input.link.callableId === null || input.link.exportedName === null)
@@ -19,26 +16,13 @@ export const projectJavaScriptExportReturnShapes = (input) => {
19
16
  const complete = input.baseCoverage.status === "complete" &&
20
17
  callable.returnCoverage.status === "complete" &&
21
18
  projectionOmitted === 0;
19
+ const limits = input.baseCoverage.limits;
20
+ const omitted = semanticOmitted === null ? null : semanticOmitted + projectionOmitted;
22
21
  const coverage = complete
23
22
  ? input.baseCoverage
24
- : partialReconstructionCoverage([
25
- ...input.baseCoverage.limits,
26
- {
27
- name: "return-shape-sites",
28
- value: MAX_PROJECTED_RETURN_SHAPES,
29
- unit: "items",
30
- },
31
- {
32
- name: "return-shape-fields",
33
- value: MAX_PROJECTED_RETURN_FIELDS,
34
- unit: "items",
35
- },
36
- {
37
- name: "return-shape-property-coverage",
38
- value: MAX_PROJECTED_PROPERTY_COVERAGE,
39
- unit: "items",
40
- },
41
- ], semanticOmitted === null ? null : semanticOmitted + projectionOmitted, callable.returnCoverage.status === "truncated" || projectionOmitted > 0);
23
+ : projectionOmitted > 0
24
+ ? truncatedApplicationCoverage(limits, omitted)
25
+ : partialApplicationCoverage(limits, omitted);
42
26
  const limitations = [
43
27
  ...input.ir.limitations,
44
28
  "Return shapes are inferred from inert syntax and do not prove runtime behavior.",
@@ -47,9 +31,6 @@ export const projectJavaScriptExportReturnShapes = (input) => {
47
31
  "No direct return value was retained; runtime return behavior remains unknown.",
48
32
  ]
49
33
  : []),
50
- ...(projectionOmitted > 0
51
- ? ["Return-shape graph projection reached explicit retention limits."]
52
- : []),
53
34
  ];
54
35
  return {
55
36
  properties: jsonObjectSchema.parse({
@@ -76,25 +57,14 @@ export const projectJavaScriptExportReturnShapes = (input) => {
76
57
  };
77
58
  };
78
59
  const projectReturnSites = (callable) => {
79
- let retainedFields = 0;
80
- let retainedCoverage = 0;
81
- let omittedFields = 0;
82
- let omittedCoverage = 0;
83
- const retainedSites = callable.returnSites.slice(0, MAX_PROJECTED_RETURN_SHAPES);
60
+ const retainedSites = callable.returnSites;
84
61
  const shapes = retainedSites.map((site) => {
85
62
  const flattened = flattenSemanticReturnValue(site.value);
86
- const remainingFields = Math.max(0, MAX_PROJECTED_RETURN_FIELDS - retainedFields);
87
- const fields = flattened.fields.slice(0, remainingFields).map((field) => ({
63
+ const fields = flattened.fields.map((field) => ({
88
64
  ...field,
89
65
  value: jsonValueSchema.parse(field.value),
90
66
  }));
91
- retainedFields += fields.length;
92
- omittedFields += flattened.fields.length - fields.length;
93
- const remainingCoverage = Math.max(0, MAX_PROJECTED_PROPERTY_COVERAGE - retainedCoverage);
94
- const propertyCoverage = flattened.propertyCoverage.slice(0, remainingCoverage);
95
- retainedCoverage += propertyCoverage.length;
96
- omittedCoverage +=
97
- flattened.propertyCoverage.length - propertyCoverage.length;
67
+ const propertyCoverage = flattened.propertyCoverage;
98
68
  return {
99
69
  source_range: site.location,
100
70
  value_status: site.value.status,
@@ -104,8 +74,8 @@ const projectReturnSites = (callable) => {
104
74
  });
105
75
  return {
106
76
  shapes,
107
- omittedSites: callable.returnSites.length - retainedSites.length,
108
- omittedFields,
109
- omittedCoverage,
77
+ omittedSites: 0,
78
+ omittedFields: 0,
79
+ omittedCoverage: 0,
110
80
  };
111
81
  };
@@ -1,10 +1,10 @@
1
1
  import { createEvidence, } from "../domain/evidence.js";
2
2
  import { jsonValueSchema } from "../domain/jsonValue.js";
3
- /** Create deterministic Evidence v2 for one passive Inspector operation. */
3
+ /** Create deterministic Evidence for one passive Inspector operation. */
4
4
  export const createJavaScriptRuntimeObservationEvidence = (operation, input, result, provider) => createEvidence(undefined, provider, {
5
5
  predicateType: operation === "list_javascript_runtime_targets"
6
- ? "rea.javascript-runtime-target-list/v1"
7
- : "rea.javascript-runtime-observation/v1",
6
+ ? "rea.javascript-runtime-target-list"
7
+ : "rea.javascript-runtime-observation",
8
8
  operation,
9
9
  parameters: parameters(input),
10
10
  result: jsonValueSchema.parse(result),
@@ -21,14 +21,13 @@ export const createJavaScriptRuntimeObservationEvidence = (operation, input, res
21
21
  });
22
22
  const parameters = (input) => ({
23
23
  inspector_endpoint: input.inspector_endpoint,
24
- allowed_file_roots: input.allowed_file_roots,
25
- allowed_origins: input.allowed_origins,
26
24
  ...("target_id" in input
27
25
  ? {
28
26
  target_id: input.target_id,
29
- runtime_kind: input.runtime_kind,
27
+ ...(input.runtime_kind === undefined
28
+ ? {}
29
+ : { runtime_kind: input.runtime_kind }),
30
30
  observation_ms: input.observation_ms,
31
- limits: input.limits,
32
31
  }
33
- : { offset: input.offset, limit: input.limit }),
32
+ : {}),
34
33
  });
@@ -1,5 +1,6 @@
1
+ import { projectPermissionFailure } from "./PermissionFailure.js";
1
2
  import { createJavaScriptRuntimeObservationEvidence } from "./JavaScriptRuntimeObservationEvidence.js";
2
- import { AnalysisCapabilityUnavailableError, AnalysisProtocolError, PermissionRequiredError, } from "../domain/errors.js";
3
+ import { AnalysisCapabilityUnavailableError, } from "../domain/errors.js";
3
4
  import { err, ok } from "../domain/result.js";
4
5
  /** Authorize and list attachable Node/Electron Inspector targets. */
5
6
  export const listJavaScriptRuntimeTargets = async (provider, authority, input, options = {}) => {
@@ -26,20 +27,15 @@ const prepare = async (provider, authority, input, operation) => {
26
27
  return err(new AnalysisCapabilityUnavailableError("rea-v8-inspector", operation, "V8 Inspector observation permission policy is not configured"));
27
28
  const authorized = await authority.authorize({
28
29
  capability: "v8_inspector_observe",
29
- roots: input.allowed_file_roots,
30
+ roots: [],
30
31
  executables: [],
31
32
  environment_names: [],
32
- origins: [input.inspector_endpoint, ...input.allowed_origins],
33
33
  network: "loopback",
34
34
  mount: false,
35
35
  operation_identity: `${operation}:${"target_id" in input ? input.target_id : input.inspector_endpoint}`,
36
36
  }, "read");
37
37
  if (!authorized.ok)
38
- return err(authorized.error instanceof PermissionRequiredError
39
- ? authorized.error
40
- : new AnalysisProtocolError(authorized.error.message, {
41
- cause: authorized.error,
42
- }));
38
+ return err(projectPermissionFailure(authorized.error));
43
39
  return provider === undefined
44
40
  ? err(new AnalysisCapabilityUnavailableError("rea-v8-inspector", operation, "V8 Inspector observation provider is not configured"))
45
41
  : ok(provider);
@@ -1,9 +1,9 @@
1
1
  import { createEvidence, } from "../domain/evidence.js";
2
2
  import { jsonValueSchema } from "../domain/jsonValue.js";
3
3
  import { JAVASCRIPT_RUNTIME_RECONCILIATION_PROVIDER } from "./InvestigationProviders.js";
4
- /** Create derived Evidence v2 for one exact set of static/runtime inputs. */
4
+ /** Create derived Evidence for one exact set of static/runtime inputs. */
5
5
  export const createJavaScriptRuntimeReconciliationEvidence = (input, result) => createEvidence(undefined, JAVASCRIPT_RUNTIME_RECONCILIATION_PROVIDER, {
6
- predicateType: "rea.javascript-runtime-reconciliation/v1",
6
+ predicateType: "rea.javascript-runtime-reconciliation",
7
7
  operation: "reconcile_javascript_runtime",
8
8
  parameters: parameters(input),
9
9
  result: jsonValueSchema.parse(result),
@@ -21,5 +21,4 @@ const parameters = (input) => ({
21
21
  runtime_mappings: layer.runtime_mappings,
22
22
  })),
23
23
  runtime_evidence_ids: input.runtime_observations.map(({ evidence_id: id }) => id),
24
- limits: input.limits,
25
24
  });
@@ -9,10 +9,10 @@ import { projectSemanticObjects } from "./JavaScriptSemanticGraphObjectProjectio
9
9
  import { projectSemanticValues } from "./JavaScriptSemanticGraphValueProjection.js";
10
10
  import { inferredSemanticEvidenceAt } from "./JavaScriptSemanticGraphEvidence.js";
11
11
  import { projectSemanticFunctionFingerprints } from "./JavaScriptSemanticGraphFingerprintProjection.js";
12
- import { projectSemanticClosureCaptures, projectSemanticFrontiers, projectSemanticPromises, projectSemanticReturnValues, semanticRecoveryLimits, } from "./JavaScriptSemanticGraphFlowProjection.js";
12
+ import { projectSemanticClosureCaptures, projectSemanticFrontiers, projectSemanticPromises, projectSemanticReturnValues, } from "./JavaScriptSemanticGraphFlowProjection.js";
13
13
  import { owningSemanticCallableNode, semanticFamilyStatus, semanticNodesWithinRange, } from "./JavaScriptSemanticGraphProjection.js";
14
- import { addSemanticFallbackRoot as addFallbackRoot, addSemanticGraphNode as addNode, addSemanticGraphRelation as addRelation, constructSemanticGraphNode as semanticNode, createSemanticGraphProjectionState as emptyState, MAX_APPLICATION_NODE_IDS_PER_SEMANTIC_NODE, MAX_SEMANTIC_GRAPH_NODES, MAX_SEMANTIC_GRAPH_RELATIONS, MAX_SEMANTIC_GRAPH_UNKNOWNS, } from "./JavaScriptSemanticGraphConstruction.js";
15
- /** Project bounded per-file semantic IR into an artifact-bound companion graph. */
14
+ import { addSemanticFallbackRoot as addFallbackRoot, addSemanticGraphNode as addNode, addSemanticGraphRelation as addRelation, constructSemanticGraphNode as semanticNode, createSemanticGraphProjectionState as emptyState, } from "./JavaScriptSemanticGraphConstruction.js";
15
+ /** Project per-file semantic IR into an artifact-bound companion graph. */
16
16
  export const buildJavaScriptSemanticGraph = ({ rootArtifactSha256, applicationGraph, analysis, }) => {
17
17
  const state = emptyState(applicationGraph);
18
18
  const fingerprints = [];
@@ -23,12 +23,9 @@ export const buildJavaScriptSemanticGraph = ({ rootArtifactSha256, applicationGr
23
23
  }
24
24
  if (state.roots.size === 0)
25
25
  addFallbackRoot(rootArtifactSha256, state);
26
- const semanticTruncated = analysis.files.some(({ semantic }) => semantic?.ir.coverage.status === "truncated");
27
- const truncated = state.limitsReached.size > 0 || semanticTruncated;
28
26
  const unknowns = [...state.unknowns.values()];
29
27
  return createJavaScriptSemanticGraph({
30
28
  schema: "JavaScriptSemanticRelationGraph",
31
- schema_version: 1,
32
29
  root_artifact_sha256: rootArtifactSha256,
33
30
  application_graph_id: applicationGraph.graph_id,
34
31
  root_node_ids: [...state.roots],
@@ -37,38 +34,16 @@ export const buildJavaScriptSemanticGraph = ({ rootArtifactSha256, applicationGr
37
34
  fingerprints,
38
35
  unknowns,
39
36
  coverage: {
40
- status: truncated ? "partial" : "unknown",
41
- truncated,
42
- omitted_nodes: truncated ? null : 0,
43
- omitted_relations: truncated ? null : 0,
44
- limits: [
45
- {
46
- name: "max_nodes",
47
- value: MAX_SEMANTIC_GRAPH_NODES,
48
- unit: "items",
49
- },
50
- {
51
- name: "max_relations",
52
- value: MAX_SEMANTIC_GRAPH_RELATIONS,
53
- unit: "items",
54
- },
55
- {
56
- name: "max_unknowns",
57
- value: MAX_SEMANTIC_GRAPH_UNKNOWNS,
58
- unit: "items",
59
- },
60
- {
61
- name: "max_application_node_ids_per_semantic_node",
62
- value: MAX_APPLICATION_NODE_IDS_PER_SEMANTIC_NODE,
63
- unit: "items",
64
- },
65
- ...semanticRecoveryLimits(analysis),
66
- ],
37
+ status: "unknown",
38
+ truncated: false,
39
+ omitted_nodes: 0,
40
+ omitted_relations: 0,
41
+ limits: [],
67
42
  families: JAVASCRIPT_SEMANTIC_RELATION_FAMILIES.map((family) => ({
68
43
  family,
69
- status: semanticFamilyStatus(family, analysis, truncated),
44
+ status: semanticFamilyStatus(family, analysis),
70
45
  retained_relations: [...state.relations.values()].filter((relation) => JAVASCRIPT_SEMANTIC_RELATION_FAMILY[relation.relation] === family).length,
71
- omitted_relations: truncated ? null : 0,
46
+ omitted_relations: 0,
72
47
  unknown_ids: unknowns
73
48
  .filter((unknown) => unknown.family === family)
74
49
  .map(({ unknown_id: identifier }) => identifier),
@@ -78,7 +53,7 @@ export const buildJavaScriptSemanticGraph = ({ rootArtifactSha256, applicationGr
78
53
  "The semantic graph contains static syntax observations and conservative relationship candidates; it does not claim runtime execution.",
79
54
  "Local data flow does not claim control-flow-sensitive reaching definitions or arbitrary dynamic property resolution.",
80
55
  "Promise ownership covers explicit unshadowed Promise construction, static factories, aggregation, chaining, and await syntax only.",
81
- "Function fingerprints are bounded static candidates; equal digests can remain ambiguous and do not prove behavioral equivalence.",
56
+ "Function fingerprints are static candidates; equal digests can remain ambiguous and do not prove behavioral equivalence.",
82
57
  "Event extraction covers EventEmitter-style literal registrations, removals, and dispatch candidates; dynamic names remain unknown.",
83
58
  "Timer extraction covers global or node:timers scheduling and exact local-handle cancellation.",
84
59
  "Child-process extraction covers asynchronous node:child_process creation, literal argv/env/stdio options, exit/error listeners, and kill signals.",
@@ -86,11 +61,6 @@ export const buildJavaScriptSemanticGraph = ({ rootArtifactSha256, applicationGr
86
61
  "Request extraction covers fetch, WebSocket, node:http/node:https construction, direct option fields, and exact local response consumers.",
87
62
  "Boundary extraction covers unshadowed JSON/global coercions plus parse and validation method candidates.",
88
63
  "Resource extraction covers built-in filesystem/network acquisition and exact local close/destroy/end handles.",
89
- ...(truncated
90
- ? [
91
- "Semantic graph projection reached one or more explicit hard limits.",
92
- ]
93
- : []),
94
64
  ],
95
65
  });
96
66
  };
@@ -1,13 +1,5 @@
1
1
  import { createJavaScriptSemanticGraphNode, createJavaScriptSemanticGraphRelation, } from "../domain/javascriptSemanticGraph.js";
2
2
  import { inferredSemanticEvidence, observedSemanticEvidence, unavailableSemanticRootEvidence, } from "./JavaScriptSemanticGraphEvidence.js";
3
- /** Hard semantic graph node bound enforced during artifact projection. */
4
- export const MAX_SEMANTIC_GRAPH_NODES = 100_000;
5
- /** Hard semantic graph relation bound enforced during artifact projection. */
6
- export const MAX_SEMANTIC_GRAPH_RELATIONS = 200_000;
7
- /** Hard unresolved-frontier bound enforced across all analyzed files. */
8
- export const MAX_SEMANTIC_GRAPH_UNKNOWNS = 100_000;
9
- /** Maximum structural nodes linked to one exact semantic location. */
10
- export const MAX_APPLICATION_NODE_IDS_PER_SEMANTIC_NODE = 64;
11
3
  /** Create empty projection state with structural application-node mappings. */
12
4
  export const createSemanticGraphProjectionState = (applicationGraph) => {
13
5
  const index = indexApplicationNodes(applicationGraph.nodes);
@@ -16,7 +8,6 @@ export const createSemanticGraphProjectionState = (applicationGraph) => {
16
8
  relations: new Map(),
17
9
  unknowns: new Map(),
18
10
  roots: new Set(),
19
- limitsReached: new Set(index.truncated ? ["max_application_node_ids_per_semantic_node"] : []),
20
11
  applicationNodeIdsByLocation: index.identifiers,
21
12
  };
22
13
  };
@@ -35,19 +26,15 @@ export const constructSemanticGraphNode = (file, input, state) => createJavaScri
35
26
  properties: input.properties ?? {},
36
27
  evidence: observedSemanticEvidence(file, input.location),
37
28
  });
38
- /** Retain one canonical node unless the hard graph bound was reached. */
29
+ /** Retain one canonical semantic node. */
39
30
  export const addSemanticGraphNode = (state, node) => {
40
31
  const existing = state.nodes.get(node.node_id);
41
32
  if (existing !== undefined)
42
33
  return existing;
43
- if (state.nodes.size >= MAX_SEMANTIC_GRAPH_NODES) {
44
- state.limitsReached.add("max_nodes");
45
- return null;
46
- }
47
34
  state.nodes.set(node.node_id, node);
48
35
  return node;
49
36
  };
50
- /** Retain one non-self semantic relationship unless its hard bound was reached. */
37
+ /** Retain one non-self semantic relationship. */
51
38
  export const addSemanticGraphRelation = (state, input) => {
52
39
  if (input.source === undefined ||
53
40
  input.source === null ||
@@ -65,20 +52,12 @@ export const addSemanticGraphRelation = (state, input) => {
65
52
  });
66
53
  if (state.relations.has(value.relation_id))
67
54
  return;
68
- if (state.relations.size >= MAX_SEMANTIC_GRAPH_RELATIONS) {
69
- state.limitsReached.add("max_relations");
70
- return;
71
- }
72
55
  state.relations.set(value.relation_id, value);
73
56
  };
74
- /** Retain one unresolved frontier unless the global graph bound was reached. */
57
+ /** Retain one unresolved frontier. */
75
58
  export const addSemanticGraphUnknown = (state, unknown) => {
76
59
  if (state.unknowns.has(unknown.unknown_id))
77
60
  return;
78
- if (state.unknowns.size >= MAX_SEMANTIC_GRAPH_UNKNOWNS) {
79
- state.limitsReached.add("max_unknowns");
80
- return;
81
- }
82
61
  state.unknowns.set(unknown.unknown_id, unknown);
83
62
  };
84
63
  /** Add a truthful root when no source file could produce semantic IR. */
@@ -118,14 +97,11 @@ const indexApplicationNodes = (nodes) => {
118
97
  }
119
98
  }
120
99
  }
121
- let truncated = false;
122
100
  const indexed = new Map([...identifiers].map(([key, values]) => {
123
101
  const sorted = [...values].sort();
124
- if (sorted.length > MAX_APPLICATION_NODE_IDS_PER_SEMANTIC_NODE)
125
- truncated = true;
126
- return [key, sorted.slice(0, MAX_APPLICATION_NODE_IDS_PER_SEMANTIC_NODE)];
102
+ return [key, sorted];
127
103
  }));
128
- return { identifiers: indexed, truncated };
104
+ return { identifiers: indexed };
129
105
  };
130
106
  const matchingApplicationNodeIds = (file, input, state) => [
131
107
  ...(state.applicationNodeIdsByLocation.get(applicationLocationKey(file.sha256, file.path, input.location)) ?? []),
@@ -1,4 +1,4 @@
1
- const INFERENCE_LIMITATION = "This relationship is a bounded static candidate; it does not prove runtime execution or causal flow.";
1
+ const INFERENCE_LIMITATION = "This relationship is a conservative static candidate; it does not prove runtime execution or causal flow.";
2
2
  /** Exact artifact-backed syntax evidence for one semantic graph node. */
3
3
  export const observedSemanticEvidence = (file, location) => ({
4
4
  authority: "ast-static-analysis",
@@ -8,7 +8,7 @@ export const projectSemanticFunctionFingerprints = (file, ir, callableNodes) =>
8
8
  return [
9
9
  createJavaScriptSemanticFingerprint({
10
10
  function_node_id: callable.node_id,
11
- algorithm: "rea.javascript-semantic-function/v1",
11
+ algorithm: "rea.javascript-semantic-function",
12
12
  status: fingerprint.status,
13
13
  components: {
14
14
  parameter_arity: fingerprint.components.parameterArity,
@@ -178,16 +178,3 @@ export const projectSemanticFrontiers = (context) => {
178
178
  addSemanticGraphUnknown(context.state, unknown);
179
179
  }
180
180
  };
181
- /** Publish exact semantic analyzer limits reached by any admitted source file. */
182
- export const semanticRecoveryLimits = (analysis) => {
183
- const limits = new Map();
184
- for (const { semantic } of analysis.files) {
185
- if (semantic === null)
186
- continue;
187
- for (const name of semantic.ir.coverage.limitsReached)
188
- limits.set(`semantic.${name}`, semantic.limits[name]);
189
- }
190
- return [...limits]
191
- .sort(([left], [right]) => left.localeCompare(right))
192
- .map(([name, value]) => ({ name, value, unit: "items" }));
193
- };
@@ -14,7 +14,7 @@ export const owningSemanticCallableNode = (location, ir, nodes) => {
14
14
  export const semanticNodesWithinRange = (nodes, range) => nodes.filter((node) => node.identity.source_range !== null &&
15
15
  contains(range, node.identity.source_range));
16
16
  /** Report extractor support without treating missing families as absence. */
17
- export const semanticFamilyStatus = (family, analysis, truncated) => {
17
+ export const semanticFamilyStatus = (family, analysis) => {
18
18
  if (![
19
19
  "call-flow",
20
20
  "boundary",
@@ -30,8 +30,6 @@ export const semanticFamilyStatus = (family, analysis, truncated) => {
30
30
  "timer",
31
31
  ].includes(family))
32
32
  return "unsupported";
33
- if (truncated)
34
- return "unknown";
35
33
  return analysis.truncated_scopes === 0 ? "partial" : "unknown";
36
34
  };
37
35
  const contains = (outer, inner) => pointCompare(outer.start, inner.start) <= 0 &&
@@ -2,7 +2,6 @@ import { z } from "zod";
2
2
  import { AnalysisInputError, AnalysisProtocolError, } from "../domain/errors.js";
3
3
  import { jsonValueSchema } from "../domain/jsonValue.js";
4
4
  import { queryJavaScriptSemanticGraph } from "../domain/javascriptSemanticQuery.js";
5
- import { JavaScriptSemanticQueryCursorError } from "../domain/javascriptSemanticQueryIdentity.js";
6
5
  import { javaScriptSemanticTraceResultSchema, traceJavaScriptSemanticsInputSchema, } from "../domain/javascriptSemanticTraceSchemas.js";
7
6
  import { err, ok } from "../domain/result.js";
8
7
  import { parseApplicationGraphEvidence } from "./JavaScriptApplicationEvidenceGraph.js";
@@ -17,7 +16,7 @@ export const traceJavaScriptSemanticsEvidenceValidated = (input) => {
17
16
  {
18
17
  path: ["application"],
19
18
  reason: "invalid_value",
20
- expected: "analyze_javascript_application v2 Evidence; reanalyze the artifact with the current REA version",
19
+ expected: "inline Evidence from analyze_javascript_application with a semantic graph",
21
20
  },
22
21
  ]));
23
22
  const query = queryJavaScriptSemanticGraph(source.semanticGraph, input.query);
@@ -32,14 +31,6 @@ export const traceJavaScriptSemanticsEvidenceValidated = (input) => {
32
31
  }, result));
33
32
  }
34
33
  catch (cause) {
35
- if (cause instanceof JavaScriptSemanticQueryCursorError)
36
- return err(new AnalysisInputError(OPERATION, undefined, [
37
- {
38
- path: ["query", "cursor"],
39
- reason: "invalid_value",
40
- expected: "a cursor returned by the same graph, query, and limits",
41
- },
42
- ]));
43
34
  return err(new AnalysisProtocolError("JavaScript semantic trace failed", { cause }));
44
35
  }
45
36
  };
@@ -0,0 +1,79 @@
1
+ import { link, lstat, mkdtemp, readFile, realpath, rm } from "node:fs/promises";
2
+ import { basename, dirname, resolve } from "node:path";
3
+ import writeFileAtomic from "write-file-atomic";
4
+ import { EvidenceFileError } from "../domain/errors.js";
5
+ import { err, ok } from "../domain/result.js";
6
+ /** Read JSON data from a regular file at the caller-supplied path. */
7
+ export const readJsonFile = async (path) => {
8
+ try {
9
+ const canonicalPath = await realpath(resolve(path));
10
+ const stats = await lstat(canonicalPath);
11
+ if (!stats.isFile())
12
+ return err(new EvidenceFileError("read", "not-file"));
13
+ const encoded = await readFile(canonicalPath);
14
+ let decoded;
15
+ try {
16
+ decoded = JSON.parse(encoded.toString("utf8"));
17
+ }
18
+ catch (cause) {
19
+ return err(new EvidenceFileError("read", "invalid-json", { cause }));
20
+ }
21
+ return ok(decoded);
22
+ }
23
+ catch (cause) {
24
+ return err(new EvidenceFileError("read", "io", { cause }));
25
+ }
26
+ };
27
+ /** Atomically write text to the caller-supplied path. */
28
+ export const writeTextFile = async (encoded, path, overwrite) => {
29
+ const bytes = Buffer.byteLength(encoded, "utf8");
30
+ try {
31
+ const requestedPath = resolve(path);
32
+ const canonicalParent = await realpath(dirname(requestedPath));
33
+ const destination = resolve(canonicalParent, basename(requestedPath));
34
+ const existing = await lstat(destination).catch((cause) => {
35
+ if (fileErrorCode(cause) === "ENOENT")
36
+ return undefined;
37
+ throw cause;
38
+ });
39
+ if (existing !== undefined) {
40
+ if (!overwrite)
41
+ return err(new EvidenceFileError("write", "exists"));
42
+ if (!existing.isFile() || existing.isSymbolicLink())
43
+ return err(new EvidenceFileError("write", "not-file"));
44
+ }
45
+ if (overwrite)
46
+ await writeFileAtomic(destination, encoded, {
47
+ encoding: "utf8",
48
+ mode: 0o600,
49
+ fsync: true,
50
+ });
51
+ else
52
+ await publishNewFile(destination, encoded);
53
+ return ok({ path: requestedPath, bytes });
54
+ }
55
+ catch (cause) {
56
+ if (!overwrite && fileErrorCode(cause) === "EEXIST")
57
+ return err(new EvidenceFileError("write", "exists", { cause }));
58
+ return err(new EvidenceFileError("write", "io", { cause }));
59
+ }
60
+ };
61
+ const publishNewFile = async (destination, encoded) => {
62
+ const stagingDirectory = await mkdtemp(resolve(dirname(destination), ".rea-write-"));
63
+ try {
64
+ const staged = resolve(stagingDirectory, "content");
65
+ await writeFileAtomic(staged, encoded, {
66
+ encoding: "utf8",
67
+ mode: 0o600,
68
+ fsync: true,
69
+ });
70
+ // A hard link publishes complete bytes atomically and cannot replace an existing name.
71
+ await link(staged, destination);
72
+ }
73
+ finally {
74
+ await rm(stagingDirectory, { recursive: true, force: true });
75
+ }
76
+ };
77
+ const fileErrorCode = (cause) => typeof cause === "object" && cause !== null && "code" in cause
78
+ ? cause.code
79
+ : undefined;
@@ -5,6 +5,7 @@ import { access, mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
5
5
  import { tmpdir } from "node:os";
6
6
  import { join } from "node:path";
7
7
  import { promisify } from "node:util";
8
+ import { execFileOutput } from "../process/ExecFileOutput.js";
8
9
  const execFileAsync = promisify(execFile);
9
10
  const DOWNLOAD_PREFIX = "https://www.hopperapp.com:443/downloader/public/";
10
11
  const MAX_PACKAGE_BYTES = 100_000_000;
@@ -55,15 +56,17 @@ export const parseLinuxDistribution = (text) => {
55
56
  const id = (fields.get("ID") ?? "unknown").toLowerCase();
56
57
  const versionId = fields.get("VERSION_ID");
57
58
  const packageFamily = packageFamilyFor(id, fields.get("ID_LIKE"));
58
- const supported = id === "arch" ||
59
- (id === "ubuntu" && versionAtLeast(versionId, 24)) ||
60
- (id === "fedora" && versionAtLeast(versionId, 41));
61
- return {
59
+ const supported = packageFamily !== undefined &&
60
+ (id === "arch" ||
61
+ (id === "ubuntu" && versionAtLeast(versionId, 24)) ||
62
+ (id === "fedora" && versionAtLeast(versionId, 41)));
63
+ const identity = {
62
64
  id,
63
65
  ...(versionId === undefined ? {} : { versionId }),
64
- packageFamily,
65
- supported,
66
66
  };
67
+ return supported
68
+ ? { ...identity, packageFamily, supported: true }
69
+ : { ...identity, packageFamily, supported: false };
67
70
  };
68
71
  /** Read and classify the current Linux distribution. */
69
72
  export const readLinuxDistribution = async () => {
@@ -79,8 +82,7 @@ export const installLinuxHopper = async (host = systemLinuxHopperInstallHost(),
79
82
  if (options.signal?.aborted === true)
80
83
  return { status: "failed", reason: "cancelled" };
81
84
  const distribution = await host.distribution();
82
- if (distribution?.supported !== true ||
83
- distribution.packageFamily === undefined)
85
+ if (distribution?.supported !== true)
84
86
  return { status: "failed", reason: "unsupported_host" };
85
87
  let temporary;
86
88
  try {
@@ -134,7 +136,7 @@ const systemLinuxHopperInstallHost = () => ({
134
136
  async launcherStatus(path) {
135
137
  try {
136
138
  await access(path);
137
- const linked = await execFileAsync("ldd", [path]);
139
+ const linked = await execFileOutput("ldd", [path]);
138
140
  if (!linuxSharedLibrariesAvailable(`${linked.stdout}\n${linked.stderr}`))
139
141
  return "runtime_dependencies";
140
142
  return (await linuxHopperBinarySupported(path))