rea-agents 6.5.0 → 6.7.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 (921) hide show
  1. package/README.md +12 -3
  2. package/THIRD_PARTY_NOTICES.md +1 -0
  3. package/bridge/android/ReaJadxBridge.java +167 -23
  4. package/bridge/cutter/rea_bridge.py +19 -10
  5. package/bridge/ghidra/ReaGhidraBridge.java +98 -66
  6. package/bridge/hopper_bridge.py +9 -1
  7. package/bridge/native/rea_lldb_tracer.py +48 -4
  8. package/bridge/pwndbg/core_context.py +15 -2
  9. package/dist/adb/AdbCommand.js +148 -0
  10. package/dist/adb/AdbConfiguration.js +26 -4
  11. package/dist/adb/AdbInputSnapshot.js +126 -0
  12. package/dist/adb/AdbProvider.js +765 -248
  13. package/dist/adb/AdbShellOutput.js +92 -21
  14. package/dist/android/AndroidTargetSnapshot.js +7 -7
  15. package/dist/android/JadxAnalysis.js +27 -32
  16. package/dist/android/JadxConfiguration.js +173 -125
  17. package/dist/android/JadxDoctor.js +11 -3
  18. package/dist/android/JadxFailure.js +154 -0
  19. package/dist/android/JadxInterruption.js +13 -0
  20. package/dist/android/JadxJavaProbe.js +246 -0
  21. package/dist/android/JadxMcpTransport.js +48 -15
  22. package/dist/android/JadxProtocol.js +29 -2
  23. package/dist/android/JadxProvider.js +171 -96
  24. package/dist/android/JadxRelease.js +5 -1
  25. package/dist/android/JadxSession.js +35 -14
  26. package/dist/apktool/ApktoolCommandCleanup.js +134 -0
  27. package/dist/apktool/ApktoolCommandOutput.js +22 -0
  28. package/dist/apktool/ApktoolConfiguration.js +162 -44
  29. package/dist/apktool/ApktoolDecodeOutput.js +29 -23
  30. package/dist/apktool/ApktoolDecodedInventory.js +52 -0
  31. package/dist/apktool/ApktoolProvider.js +254 -335
  32. package/dist/apktool/ApktoolStringTables.js +178 -0
  33. package/dist/apktool/ApktoolWorkspace.js +162 -0
  34. package/dist/application/AnalysisDocument.js +19 -4
  35. package/dist/application/AnalysisProvider.js +15 -1
  36. package/dist/application/AppBundleExecutable.js +11 -4
  37. package/dist/application/BinaryTargetResolver.js +9 -2
  38. package/dist/application/BrowserObservationService.js +54 -20
  39. package/dist/application/BrowserScenarioCaptureService.js +26 -6
  40. package/dist/application/CapabilityInventory.js +14 -8
  41. package/dist/application/ClaudeDesktopConfigLocation.js +5 -5
  42. package/dist/application/ClientConfigurationCleanup.js +73 -0
  43. package/dist/application/ClientConfigurationDocument.js +170 -128
  44. package/dist/application/ClientConfigurationPublication.js +167 -0
  45. package/dist/application/ClientRegistrationEnvironment.js +31 -1
  46. package/dist/application/ClientRegistrationIdentity.js +54 -39
  47. package/dist/application/ClientRegistrationStatus.js +123 -48
  48. package/dist/application/DirectAnalysis.js +15 -2
  49. package/dist/application/DirectAnalysisCleanup.js +5 -1
  50. package/dist/application/DirectAnalysisStatus.js +1 -1
  51. package/dist/application/Doctor.js +83 -9
  52. package/dist/application/DoctorDiagnostics.js +25 -4
  53. package/dist/application/DoctorProviderIds.js +7 -1
  54. package/dist/application/DshCordisPatch.js +1 -1
  55. package/dist/application/EnhancedTools.js +9 -21
  56. package/dist/application/HermesClientHome.js +20 -0
  57. package/dist/application/HermesConfigurationYaml.js +43 -3
  58. package/dist/application/HopperDownload.js +11 -3
  59. package/dist/application/HopperReleaseFeed.js +71 -0
  60. package/dist/application/InvestigationProviders.js +4 -3
  61. package/dist/application/JsonFiles.js +1 -1
  62. package/dist/application/LinuxHopper.js +96 -71
  63. package/dist/application/LinuxHopperPublisher.js +656 -0
  64. package/dist/application/MacHopper.js +182 -66
  65. package/dist/application/MipsElfMetadata.js +1 -1
  66. package/dist/application/MsixPackageStorage.js +13 -6
  67. package/dist/application/ProviderOperationExecution.js +13 -20
  68. package/dist/application/ReconstructionObligationCandidates.js +17 -2
  69. package/dist/application/ReconstructionObligationLedgerEvaluation.js +4 -0
  70. package/dist/application/ReconstructionObligationLedgerService.js +5 -3
  71. package/dist/application/ReconstructionObligationOriginalCases.js +8 -0
  72. package/dist/application/ReferenceSourceImportEntries.js +160 -18
  73. package/dist/application/ReferenceSourceImportPolicy.js +5 -3
  74. package/dist/application/ReferenceSourceVcsAdapter.js +3 -1
  75. package/dist/application/RegularFileRead.js +107 -88
  76. package/dist/application/Setup.js +23 -11
  77. package/dist/application/SetupClientConfiguration.js +155 -89
  78. package/dist/application/SetupClients.js +22 -13
  79. package/dist/application/SetupHost.js +90 -34
  80. package/dist/application/SetupInstallFailure.js +18 -3
  81. package/dist/application/SetupPlan.js +15 -5
  82. package/dist/application/SetupRecoveryBackup.js +40 -13
  83. package/dist/application/SetupRegistrationEnvironment.js +12 -0
  84. package/dist/application/SetupSkill.js +10 -30
  85. package/dist/application/SourceLimitations.js +35 -0
  86. package/dist/application/SupportedClients.js +4 -4
  87. package/dist/application/Uninstall.js +91 -36
  88. package/dist/application/UpdateCommandProgress.js +66 -0
  89. package/dist/application/UpdateMaintenance.js +7 -2
  90. package/dist/application/UpdateRuntime.js +60 -30
  91. package/dist/application/WebModuleTraceService.js +35 -22
  92. package/dist/application/WebNetworkCaptureService.js +8 -5
  93. package/dist/application/WebRuntimeService.js +41 -8
  94. package/dist/application/WebScriptExportService.js +6 -4
  95. package/dist/application/WebSourceLocationService.js +3 -4
  96. package/dist/application/WorkflowEvidence.js +11 -4
  97. package/dist/application/analysisView/AnalysisViewService.js +9 -52
  98. package/dist/application/android/AndroidAnalysisService.js +5 -4
  99. package/dist/application/android/AndroidSearchEvidenceSummary.js +6 -8
  100. package/dist/application/artifacts/ArtifactComparisonEvidence.js +32 -0
  101. package/dist/application/binary/AnalysisProviderEvaluation.js +14 -11
  102. package/dist/application/binary/AnalysisProviderRegistry.js +340 -50
  103. package/dist/application/binary/BinarySession.js +73 -34
  104. package/dist/application/binary/BinarySessionRecords.js +3 -0
  105. package/dist/application/binary/BinarySessionStatus.js +3 -4
  106. package/dist/application/binary/CompositeProvider.js +75 -30
  107. package/dist/application/binary/LazyAnalysisProvider.js +6 -68
  108. package/dist/application/binary/SessionProviderRouter.js +11 -2
  109. package/dist/application/binaryDiagnostics/BinaryLayoutService.js +3 -4
  110. package/dist/application/binaryDiagnostics/PeResourcesService.js +22 -5
  111. package/dist/application/binaryDiagnostics/RecordedCrashService.js +3 -4
  112. package/dist/application/captures/PacketCaptureService.js +3 -2
  113. package/dist/application/closeOwnedWebResources.js +32 -2
  114. package/dist/application/electron/ElectronFuseService.js +8 -43
  115. package/dist/application/evm/EvmInterfaceEvidence.js +11 -0
  116. package/dist/application/evm/EvmInterfaceService.js +4 -15
  117. package/dist/application/firmware/FirmwareAnalysisService.js +4 -3
  118. package/dist/application/go/GoBinaryService.js +4 -5
  119. package/dist/application/investigation/EvidenceLedger.js +3 -4
  120. package/dist/application/javascript/ElectronBoundaryGraphWindows.js +14 -2
  121. package/dist/application/javascript/ElectronEvidence.js +1 -2
  122. package/dist/application/javascript/ElectronObservationService.js +41 -7
  123. package/dist/application/javascript/JavaScriptApplicationEvidence.js +6 -0
  124. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +35 -17
  125. package/dist/application/javascript/JavaScriptArtifactAnalysisTypes.js +30 -1
  126. package/dist/application/javascript/JavaScriptArtifactGraphContext.js +3 -2
  127. package/dist/application/javascript/JavaScriptArtifactGraphEvidence.js +3 -3
  128. package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +41 -11
  129. package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +18 -8
  130. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +84 -24
  131. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +15 -3
  132. package/dist/application/javascript/JavaScriptModuleRelationships.js +1 -1
  133. package/dist/application/javascript/JavaScriptRuntimeObservationEvidence.js +1 -2
  134. package/dist/application/javascript/JavaScriptRuntimeObservationService.js +33 -10
  135. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +4 -5
  136. package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +103 -24
  137. package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +13 -4
  138. package/dist/application/javascript/JavaScriptSemanticGraphConstruction.js +23 -3
  139. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +18 -5
  140. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +4 -6
  141. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +2 -3
  142. package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +2 -3
  143. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +5 -8
  144. package/dist/application/native/NativeCallRoutes.js +40 -23
  145. package/dist/application/native/NativeUiActionTrace.js +8 -0
  146. package/dist/application/native/NativeValueTrace.js +8 -0
  147. package/dist/application/reverse/ReverseEngineeringService.js +2 -2
  148. package/dist/application/rust/RustBinaryService.js +6 -4
  149. package/dist/application/signals/SignalRecordingService.js +3 -2
  150. package/dist/application/wasm/WasmArtifactService.js +4 -5
  151. package/dist/artifacts/AnalysisCleanupLease.js +119 -0
  152. package/dist/artifacts/ArtifactFileOperation.js +150 -0
  153. package/dist/artifacts/ArtifactHash.js +2 -1
  154. package/dist/artifacts/ArtifactProvider.js +16 -5
  155. package/dist/artifacts/ArtifactReader.js +50 -4
  156. package/dist/artifacts/ArtifactResourceScope.js +80 -6
  157. package/dist/artifacts/AsarArtifactReader.js +12 -11
  158. package/dist/artifacts/AsarEntryStream.js +49 -17
  159. package/dist/artifacts/DirectoryArtifactReader.js +28 -7
  160. package/dist/artifacts/MachOSliceArtifactReader.js +70 -13
  161. package/dist/artifacts/NativeDmgArtifactReader.js +112 -13
  162. package/dist/artifacts/SafeOutputTree.js +5 -3
  163. package/dist/artifacts/SafeOutputTreeCreationFailure.js +1 -0
  164. package/dist/artifacts/SafeOutputTreeReadback.js +10 -16
  165. package/dist/artifacts/ZipArtifactReader.js +34 -14
  166. package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +3 -1
  167. package/dist/artifacts/apple/DylibFileAccess.js +106 -0
  168. package/dist/artifacts/apple/DylibResolutionReader.js +64 -155
  169. package/dist/artifacts/apple/InterfaceBuilderAnalysis.js +52 -9
  170. package/dist/artifacts/apple/InterfaceBuilderDecodeBudget.js +25 -24
  171. package/dist/artifacts/apple/KeyedArchiveReader.js +20 -11
  172. package/dist/artifacts/apple/MachoLoadCommandReader.js +17 -2
  173. package/dist/artifacts/apple/PlistNumberLiterals.js +104 -116
  174. package/dist/artifacts/extraction/ArtifactExtraction.js +15 -12
  175. package/dist/artifacts/inventory/ArtifactGraphConstruction.js +9 -11
  176. package/dist/artifacts/inventory/ArtifactInventory.js +2 -2
  177. package/dist/artifacts/inventory/classify.js +4 -2
  178. package/dist/artifacts/inventory/hashStableRootArtifact.js +14 -7
  179. package/dist/artifacts/inventory/scanCanonical.js +3 -4
  180. package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +3 -1
  181. package/dist/artifacts/readArtifactFileChunks.js +9 -0
  182. package/dist/artifacts/readStableArtifact.js +12 -34
  183. package/dist/browser/BrowserScenarioPartialObservation.js +14 -48
  184. package/dist/browser/CdpBrowserProvider.js +81 -30
  185. package/dist/browser/CdpCaptureDocuments.js +99 -131
  186. package/dist/browser/CdpCaptureDomSvg.js +31 -60
  187. package/dist/browser/CdpCaptureValues.js +12 -0
  188. package/dist/browser/CdpConnection.js +133 -27
  189. package/dist/browser/CdpElectronInspection.js +60 -60
  190. package/dist/browser/CdpElectronProvider.js +56 -4
  191. package/dist/browser/CdpElectronScriptEvents.js +4 -1
  192. package/dist/browser/CdpElectronScripts.js +2 -5
  193. package/dist/browser/CdpElectronWorkers.js +13 -2
  194. package/dist/browser/CdpPageCapture.js +2 -1
  195. package/dist/browser/CdpPageCaptureScripts.js +14 -10
  196. package/dist/browser/CdpPageCaptureWorkers.js +45 -14
  197. package/dist/browser/CdpSafeMetadata.js +23 -19
  198. package/dist/browser/CdpSnapshotNodes.js +103 -0
  199. package/dist/browser/CdpSnapshotStrings.js +0 -6
  200. package/dist/browser/CdpTargetSession.js +52 -10
  201. package/dist/browser/CdpTargetSessionOwner.js +198 -0
  202. package/dist/browser/ElectronCaptureCleanup.js +82 -0
  203. package/dist/browser/ElectronProcessCleanup.js +91 -0
  204. package/dist/browser/PlaywrightBrowserScenarioProvider.js +71 -16
  205. package/dist/browser/PlaywrightElectronActiveActions.js +53 -5
  206. package/dist/browser/PlaywrightElectronActiveFuses.js +86 -0
  207. package/dist/browser/PlaywrightElectronActiveProjection.js +5 -0
  208. package/dist/browser/PlaywrightElectronActiveProvider.js +140 -151
  209. package/dist/browser/PlaywrightExecutionBoundary.js +4 -2
  210. package/dist/browser/PlaywrightScenarioBrowser.js +236 -90
  211. package/dist/browser/PlaywrightScenarioEvents.js +135 -48
  212. package/dist/browser/PlaywrightScenarioServiceWorkers.js +121 -34
  213. package/dist/browser/PlaywrightScenarioSession.js +95 -22
  214. package/dist/browser/PlaywrightScenarioStorage.js +15 -7
  215. package/dist/browser/StructuredFieldToken.js +53 -0
  216. package/dist/browser/WebArtifactCleanup.js +53 -0
  217. package/dist/browser/WebSourceMapFetcher.js +19 -10
  218. package/dist/browser/assets/WebArtifactReads.js +6 -2
  219. package/dist/browser/assets/WebSourceLocationArtifacts.js +12 -3
  220. package/dist/browser/execution/CdpRuntimeSession.js +36 -7
  221. package/dist/browser/execution/CdpWebRuntimeProvider.js +22 -4
  222. package/dist/browser/history/CaptureFailures.js +7 -2
  223. package/dist/browser/history/HarCapture.js +42 -11
  224. package/dist/browser/history/SazMetadata.js +10 -47
  225. package/dist/browser/modules/NativeModuleResolver.js +108 -58
  226. package/dist/browser/modules/WebModuleArtifacts.js +12 -3
  227. package/dist/browser/network/PlaywrightNetworkContent.js +40 -17
  228. package/dist/browser/network/PlaywrightScenarioNetwork.js +182 -73
  229. package/dist/captures/TsharkCaptureProvider.js +13 -6
  230. package/dist/catalogIdentity.js +19 -14
  231. package/dist/cli/adbCommands.js +18 -19
  232. package/dist/cli/androidCommands.js +2 -14
  233. package/dist/cli/apktoolCommands.js +4 -14
  234. package/dist/cli/binaryDiagnosticsCommands.js +5 -5
  235. package/dist/cli/browserAdvancedCommands.js +11 -4
  236. package/dist/cli/browserCommands.js +21 -12
  237. package/dist/cli/captureCommands.js +4 -4
  238. package/dist/cli/cliResultOutput.js +175 -89
  239. package/dist/cli/coreBinaryCommands.js +4 -3
  240. package/dist/cli/cutterCommands.js +51 -13
  241. package/dist/cli/electronCommands.js +34 -13
  242. package/dist/cli/evmCommands.js +6 -15
  243. package/dist/cli/finishAnalysisCommand.js +10 -2
  244. package/dist/cli/firmwareCommands.js +6 -14
  245. package/dist/cli/flutterCommands.js +2 -18
  246. package/dist/cli/fridaCommands.js +8 -0
  247. package/dist/cli/goCommands.js +2 -2
  248. package/dist/cli/javascriptRecoveryCommands.js +14 -26
  249. package/dist/cli/jebCommands.js +2 -14
  250. package/dist/cli/options.js +6 -0
  251. package/dist/cli/pcapCommands.js +2 -20
  252. package/dist/cli/rustCommands.js +6 -7
  253. package/dist/cli/setupCommands.js +4 -3
  254. package/dist/cli/signalCommands.js +4 -4
  255. package/dist/cli/sqliteCommands.js +17 -44
  256. package/dist/cli/wasmCommands.js +7 -18
  257. package/dist/cli/webModuleCommands.js +19 -34
  258. package/dist/cli/webNetworkCaptureCommands.js +3 -2
  259. package/dist/cli/webRuntimeCommands.js +15 -6
  260. package/dist/cli/webSourceLocationCommands.js +14 -33
  261. package/dist/cli-runtime/AnalysisCleanupLease-CWfTGYKd.js +103 -0
  262. package/dist/cli-runtime/{AnalysisProvider-D0Us2OTk.js → AnalysisProvider-BGrYaMVo.js} +14 -3
  263. package/dist/cli-runtime/{AnalysisSnapshotCache-BXS0wRd2.js → AnalysisSnapshotCache-BjRlXeUS.js} +14 -13
  264. package/dist/cli-runtime/ArtifactFileOperation-Dg4BcoEM.js +122 -0
  265. package/dist/cli-runtime/{ArtifactReader-BXkffc1D.js → ArtifactReader-DMwm42bk.js} +29 -6
  266. package/dist/cli-runtime/ArtifactResourceScope-CokZGcII.js +175 -0
  267. package/dist/cli-runtime/{AsarHeader-CnzOzYEH.js → AsarHeader-BxwU17DJ.js} +1 -1
  268. package/dist/cli-runtime/{BinarySessionStatus-DnMxMk-r.js → BinarySessionStatus-DRhjr7Vb.js} +4 -3
  269. package/dist/cli-runtime/{BinaryTargetResolver-CVIJ_s1A.js → BinaryTargetResolver-tuCTjBlQ.js} +38 -108
  270. package/dist/cli-runtime/{BoundedFileBytes-BU30odTm.js → BoundedFileBytes-DRtiQNAQ.js} +7 -3
  271. package/dist/cli-runtime/{CdpTargetSession-DGX5pV9w.js → CdpTargetSession-CQ08KHbh.js} +318 -43
  272. package/dist/cli-runtime/ClientConfigPath-Dn-V_GUf.js +255 -0
  273. package/dist/cli-runtime/{ClientConfigurationDocument-ffQ9X0Se.js → ClientConfigurationDocument-C9T8MNGc.js} +206 -142
  274. package/dist/cli-runtime/{ClientRegistrationStatus-DszCyPEU.js → ClientRegistrationStatus-PnD29RTX.js} +112 -36
  275. package/dist/cli-runtime/{CurrentEntrypointPath-D5FRNdkq.js → CurrentEntrypointPath-m7QCIVN0.js} +1 -1
  276. package/dist/cli-runtime/{DirectAnalysis-BgvAtpN3.js → DirectAnalysis-C5NyUryV.js} +76 -23
  277. package/dist/cli-runtime/DirectoryArtifactReader-CokAJ8vo.js +448 -0
  278. package/dist/cli-runtime/{Doctor-DIpf_I7N.js → Doctor-DrkWsav4.js} +105 -25
  279. package/dist/cli-runtime/{ElectronFileScope-dpHm2nrS.js → ElectronFileScope-AP7VoVr7.js} +204 -149
  280. package/dist/cli-runtime/ElectronFuseFailures-DsjXR7Xp.js +609 -0
  281. package/dist/cli-runtime/{ExecFileOutput-BEQs-lDD.js → ExecFileOutput-D6KLYTve.js} +11 -9
  282. package/dist/cli-runtime/{InterfaceBuilderDecodeBudget-D4omRUe4.js → InterfaceBuilderDecodeBudget-CW1IO3dG.js} +40 -21
  283. package/dist/cli-runtime/{InventoryProjectionEvidence-DIsI4DJ6.js → InventoryProjectionEvidence-DTH5QAqL.js} +3 -3
  284. package/dist/cli-runtime/{InvestigationProviders-DoQRIHii.js → InvestigationProviders-CFh4a64d.js} +3 -2
  285. package/dist/cli-runtime/{JavaScriptApplicationEvidenceGraph-D5aI_FSJ.js → JavaScriptApplicationEvidenceGraph-gOmPB2L6.js} +6 -6
  286. package/dist/cli-runtime/{JavaScriptApplicationWorkflowEvidence-Bz4-V0Ct.js → JavaScriptApplicationWorkflowEvidence-WZgtK_Ok.js} +2 -2
  287. package/dist/cli-runtime/JebMcpEndpoint-BEalGZh9.js +710 -0
  288. package/dist/cli-runtime/{JsonFiles-DQa1PRKy.js → JsonFiles-uvd6ZyQi.js} +10 -118
  289. package/dist/cli-runtime/KunaInstallation-P0j3x851.js +1781 -0
  290. package/dist/cli-runtime/MacHopperPaths-bGzqjF1Z.js +34 -0
  291. package/dist/cli-runtime/{MachoLoadCommandReader-C7e074Ze.js → MachoLoadCommandReader-CZm6N5vF.js} +12 -192
  292. package/dist/cli-runtime/{ManagedSnapshot-rqyBHcdL.js → ManagedSnapshot-CPE9C3OD.js} +406 -110
  293. package/dist/cli-runtime/OwnedCommandCleanup-BN_V6Erc.js +187 -0
  294. package/dist/cli-runtime/OwnedRegularFile-D1f5nUCx.js +256 -0
  295. package/dist/cli-runtime/OwnedStagedOutput-D31dOozz.js +126 -0
  296. package/dist/cli-runtime/{PrivateRuntimeRoot-DAy0PiBM.js → PrivateRuntimeRoot-Cd23u6jd.js} +39 -6
  297. package/dist/cli-runtime/ProcessOwnership-CtrNr6ee.js +545 -0
  298. package/dist/cli-runtime/{ProcessOwnership-DXC5-UWt.js → ProcessOwnershipObservation-C006iCtZ.js} +149 -607
  299. package/dist/cli-runtime/{ProviderDeadline-8m2pFRDc.js → ProviderDeadline-rSuH4Pm8.js} +27 -1
  300. package/dist/cli-runtime/ProviderOperationExecution-CmU-XrQr.js +38 -0
  301. package/dist/cli-runtime/{snapshotEnvironment-D_tWyOub.js → ProviderProcess-D87A7ctp.js} +117 -160
  302. package/dist/cli-runtime/RegularFileRead-mbgGYtxe.js +125 -0
  303. package/dist/cli-runtime/{SafeOutputTree-D6U15GXd.js → SafeOutputTree-i904hd_2.js} +21 -20
  304. package/dist/cli-runtime/{SetupHost-FkYWswsq.js → SetupHost-CMPmPraB.js} +365 -195
  305. package/dist/cli-runtime/SharedStartupAttempt-BxKyf3Uv.js +1424 -0
  306. package/dist/cli-runtime/StableFileHash-Ame_h3lY.js +61 -0
  307. package/dist/cli-runtime/{SupportedClients-DaX6Lt2d.js → SupportedClients-DMafjitv.js} +89 -72
  308. package/dist/cli-runtime/{Update-CbTC_eg1.js → Update-DAsASWlE.js} +1 -1
  309. package/dist/cli-runtime/{AbortablePromise-BVBemxbD.js → WindowsBatchCommand-Cx9kaVNf.js} +2 -28
  310. package/dist/cli-runtime/WindowsNativeLoader-BqyZO0ZD.js +142 -0
  311. package/dist/cli-runtime/{ZipArtifactReader-B8ZgNe4D.js → ZipArtifactReader-Jed69LEL.js} +20 -16
  312. package/dist/cli-runtime/{analysisErrorCleanup-Do6YeeoD.js → analysisErrorCleanup-COdAmDsb.js} +4 -3
  313. package/dist/cli-runtime/{appleArchiveFormat-tVoI2ykA.js → appleArchiveFormat-Bb3G5CCI.js} +13 -7
  314. package/dist/cli-runtime/{application__DirectAnalysisStatus-DpOejOf0.js → application__DirectAnalysisStatus-F74bu9oy.js} +10 -10
  315. package/dist/cli-runtime/{application__EnhancedTools-oFE2bOjs.js → application__EnhancedTools-Bg51b0Yp.js} +84 -51
  316. package/dist/cli-runtime/{application__FunctionAnalysisEvidence-B6osuhvW.js → application__FunctionAnalysisEvidence-DBWIaYCh.js} +3 -3
  317. package/dist/cli-runtime/{application__ReconstructionCoverageService-DN3wTFQj.js → application__ReconstructionCoverageService-AEPNpZqJ.js} +3 -3
  318. package/dist/cli-runtime/{application__ReconstructionObligationLedgerService-CKcTppX9.js → application__ReconstructionObligationLedgerService-Cl9cPEZf.js} +22 -9
  319. package/dist/cli-runtime/{application__Setup-XpMaRNjy.js → application__Setup-DwQzEewK.js} +30 -18
  320. package/dist/cli-runtime/{application__Uninstall-_23pU2yB.js → application__Uninstall-BOf9oyvQ.js} +78 -37
  321. package/dist/cli-runtime/{application__UpdateRuntime-DPvY8ohd.js → application__UpdateRuntime-CzWkRJHa.js} +119 -29
  322. package/dist/cli-runtime/{application__android__AndroidApplicationService-CFgIFPM4.js → application__android__AndroidApplicationService-shW_aKlj.js} +3 -3
  323. package/dist/cli-runtime/{application__apple__AppleApplicationService-Db6QCsun.js → application__apple__AppleApplicationService-DIv6d3wB.js} +3 -3
  324. package/dist/cli-runtime/{application__harmony__HarmonyApplicationService-CFjocHoK.js → application__harmony__HarmonyApplicationService-OIUFVQFV.js} +3 -3
  325. package/dist/cli-runtime/{application__javascript__ElectronActiveObservationService-CmVDUI_Z.js → application__javascript__ElectronActiveObservationService-wvCh72hK.js} +3 -3
  326. package/dist/cli-runtime/application__javascript__ElectronObservationService-SydXPCwM.js +88 -0
  327. package/dist/cli-runtime/{application__javascript__JavaScriptApplicationService-CCkp8KBh.js → application__javascript__JavaScriptApplicationService-o0uEsjEc.js} +1120 -316
  328. package/dist/cli-runtime/{application__javascript__JavaScriptApplicationWorkflowService-lPy0tzr3.js → application__javascript__JavaScriptApplicationWorkflowService-BAheG_71.js} +51 -44
  329. package/dist/cli-runtime/{application__javascript__JavaScriptRuntimeReconciliationService-DWleA8K9.js → application__javascript__JavaScriptRuntimeReconciliationService-Cnn4GP8q.js} +5 -5
  330. package/dist/cli-runtime/{application__javascript__JavaScriptSemanticTraceService-DkALH4rL.js → application__javascript__JavaScriptSemanticTraceService-CmvLfV1A.js} +6 -6
  331. package/dist/cli-runtime/{artifacts__ArtifactProvider-zXI0QjSL.js → artifacts__ArtifactProvider-wx2K0F2I.js} +377 -359
  332. package/dist/cli-runtime/{binary-BVOr2mgE.js → binary-CWVNJhAC.js} +8561 -3159
  333. package/dist/cli-runtime/{catalogIdentity-DLoXgfIR.js → catalogIdentity-DAEEsOdX.js} +260 -81
  334. package/dist/cli-runtime/cli.js +6177 -3556
  335. package/dist/cli-runtime/{cliOutput-BC1BdAcB.js → cliOutput-CgSuw782.js} +47 -6
  336. package/dist/cli-runtime/cliOutput.js +2 -2
  337. package/dist/cli-runtime/cliResultOutput-10sd6xGx.js +1453 -0
  338. package/dist/cli-runtime/cliResultOutput.js +2 -1
  339. package/dist/cli-runtime/{composition__browserScenario-DHXC1a8n.js → composition__browserScenario-BtPb1c1y.js} +843 -356
  340. package/dist/cli-runtime/{composition__electronObservation-GecK2EID.js → composition__electronObservation-Bk8R6DJo.js} +128 -69
  341. package/dist/cli-runtime/{composition__electronScenario-CEZnVrAL.js → composition__electronScenario-BVF0qStH.js} +398 -135
  342. package/dist/cli-runtime/{cutterToolContracts-TZH9EHr5.js → cutterToolContracts-BQtG_Nzo.js} +195 -62
  343. package/dist/cli-runtime/{doctorRuntime-BE5ZX8it.js → doctorRuntime-B__SIpm-.js} +241 -21
  344. package/dist/cli-runtime/{dotnet__ManagedStaticProvider-C8_yZCDc.js → dotnet__ManagedStaticProvider-DO5Yzcp4.js} +1 -1
  345. package/dist/cli-runtime/{errorSchemas-CTRmvMl3.js → errorSchemas-Ixz_q7qt.js} +58 -4
  346. package/dist/cli-runtime/homeDirectory-DC_DeJIg.js +18 -0
  347. package/dist/cli-runtime/{javascriptApplicationAnalysis-HgMzVMQw.js → javascriptApplicationAnalysis-Dk6yBV8g.js} +688 -668
  348. package/dist/cli-runtime/{javascriptExportReturnShapeProjection-Dg00g35t.js → javascriptExportReturnShapeProjection-CObOIiQ6.js} +3 -3
  349. package/dist/cli-runtime/{javascriptExportShapeComparisonSchemas-BYnoIqIk.js → javascriptExportShapeComparisonSchemas-DpwuBenh.js} +5 -3
  350. package/dist/cli-runtime/{javascriptRuntimeReconciliation-DNjDoL3S.js → javascriptRuntimeReconciliation-C6ZgWMys.js} +61 -59
  351. package/dist/cli-runtime/{javascriptRuntimeReconciliationSchemas-BWpGWNcI.js → javascriptRuntimeReconciliationSchemas-D6tZKUQs.js} +2 -2
  352. package/dist/cli-runtime/{javascriptSemanticTraceSchemas-BTCNcvbc.js → javascriptSemanticTraceSchemas-C7m0b6_w.js} +3 -3
  353. package/dist/cli-runtime/{lipo-DSWP6fv-.js → lipo-DPQ6qurH.js} +9 -11
  354. package/dist/cli-runtime/{logger-CQQCI4a2.js → logger-BuDJ9xxO.js} +2 -2
  355. package/dist/cli-runtime/{machoContainer-C8BIkkq3.js → machoContainer-Cy98bkFm.js} +180 -0
  356. package/dist/cli-runtime/{managedApplicationGraph-B08jb3jq.js → managedApplicationGraph-BazVqpJv.js} +16 -10
  357. package/dist/cli-runtime/{managedToolContracts-D60QmIYj.js → managedToolContracts-BuFkMBH5.js} +2 -2
  358. package/dist/cli-runtime/mcpDoctor.js +8 -6
  359. package/dist/cli-runtime/mcpStartupPolicy-imCbM3qo.js +28 -0
  360. package/dist/cli-runtime/{native__NativeMacOSProvider-YBTvUeJO.js → native__NativeMacOSProvider-DTcRhuGA.js} +1384 -757
  361. package/dist/cli-runtime/{officialToolContracts-CCFF0an9.js → officialToolContracts-CzzVLx8I.js} +74 -53
  362. package/dist/cli-runtime/peMachine-B9ggfSJJ.js +95 -0
  363. package/dist/cli-runtime/propertyListKeys-D5dSASEy.js +355 -0
  364. package/dist/cli-runtime/{providerCleanupError-Ceq8f0wK.js → providerCleanupError-BhsJyAhk.js} +3 -5
  365. package/dist/cli-runtime/readArtifactFileChunks-BbTL_PtB.js +129 -0
  366. package/dist/cli-runtime/{reconstructionObligationLedgerSchemas-Bao0xMr-.js → reconstructionObligationLedgerSchemas-Bi6sect1.js} +6329 -3651
  367. package/dist/cli-runtime/{scanCanonical-KP4T9jSl.js → scanCanonical-CcDFUr-w.js} +233 -363
  368. package/dist/cli-runtime/snapshotEnvironment-Yvx5qwsl.js +196 -0
  369. package/dist/cli-runtime/{toolContracts-D2FOG_Nb.js → toolContracts-CJzEyZ38.js} +126 -52
  370. package/dist/cli-runtime/{toolOutputSchemaGroups-DRiYs1je.js → toolOutputSchemaGroups-BqdSzySu.js} +768 -589
  371. package/dist/cli-runtime/{workflowInputError-n8Oo-bLA.js → workflowInputError-BP8z9Wxl.js} +2 -2
  372. package/dist/cli.js +10 -0
  373. package/dist/cliBrowserScenarioCommands.js +2 -3
  374. package/dist/cliLogging.js +22 -7
  375. package/dist/cliObservationOptions.js +3 -0
  376. package/dist/cliOutput.js +68 -3
  377. package/dist/composition/binary.js +15 -2
  378. package/dist/composition/directAnalysis.js +8 -0
  379. package/dist/composition/javascriptAnalysisWorkerProcess.js +4 -5
  380. package/dist/composition/jeb.js +32 -21
  381. package/dist/config/environment.js +36 -2
  382. package/dist/config/mcpInputSchemaProfile.js +1 -1
  383. package/dist/config/parseConfig.js +7 -3
  384. package/dist/contracts/adb/adbToolContracts.js +2 -2
  385. package/dist/contracts/analysisViewApiSurfaceExample.js +4 -4
  386. package/dist/contracts/analysisViewToolContracts.js +42 -1
  387. package/dist/contracts/android/androidToolContracts.js +1 -1
  388. package/dist/contracts/apktool/apktoolToolContracts.js +5 -1
  389. package/dist/contracts/artifactComparisonExample.js +18 -14
  390. package/dist/contracts/artifactToolContracts.js +2 -1
  391. package/dist/contracts/browserScenarioToolContracts.js +1 -1
  392. package/dist/contracts/browserToolContracts.js +12 -1
  393. package/dist/contracts/compactInputSchema.js +13 -6
  394. package/dist/contracts/fridaToolContracts.js +5 -4
  395. package/dist/contracts/gdbToolContracts.js +2 -3
  396. package/dist/contracts/inputSchemaPresentation.js +173 -79
  397. package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +1 -0
  398. package/dist/contracts/javascript/javascriptRuntimeReconciliationExample.js +1 -0
  399. package/dist/contracts/jsonSchemaKeywords.js +29 -0
  400. package/dist/contracts/managed/managedWorkflowExamples.js +3 -0
  401. package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
  402. package/dist/contracts/mobileApplicationGraphExamples.js +15 -12
  403. package/dist/contracts/officialToolContracts.js +2 -2
  404. package/dist/contracts/rizinDebugToolContracts.js +3 -2
  405. package/dist/contracts/sessionToolContracts.js +3 -3
  406. package/dist/contracts/toolEffects.js +6 -2
  407. package/dist/contracts/toolOutputSchemaGroups.js +7 -4
  408. package/dist/contracts/toolOutputSchemaPrimitives.js +7 -0
  409. package/dist/contracts/toolSchemaMetadata.js +99 -27
  410. package/dist/cutter/CutterBridgeClient.js +206 -67
  411. package/dist/cutter/CutterBridgeService.js +52 -4
  412. package/dist/doctorRuntime.js +25 -4
  413. package/dist/domain/adb/adbDeviceAnalysis.js +19 -1
  414. package/dist/domain/analysisErrorBase.js +59 -2
  415. package/dist/domain/analysisErrorCleanup.js +3 -1
  416. package/dist/domain/analysisErrorCore.js +13 -0
  417. package/dist/domain/analysisErrorPresentation.js +23 -4
  418. package/dist/domain/analysisErrorProjection.js +44 -28
  419. package/dist/domain/analysisSearch.js +26 -0
  420. package/dist/domain/analysisSnapshot.js +11 -11
  421. package/dist/domain/analysisView/WebNetworkApiSurfaceAccumulator.js +4 -65
  422. package/dist/domain/analysisView/analysisView.js +25 -0
  423. package/dist/domain/analysisView/analysisViewDataAdmission.js +86 -0
  424. package/dist/domain/analysisView/artifactInventoryView.js +4 -18
  425. package/dist/domain/analysisView/javascriptApplicationCoverage.js +27 -0
  426. package/dist/domain/analysisView/javascriptApplicationView.js +100 -27
  427. package/dist/domain/analysisView/javascriptFactsView.js +92 -0
  428. package/dist/domain/analysisView/javascriptModuleReferences.js +37 -0
  429. package/dist/domain/analysisView/managedMemberView.js +6 -0
  430. package/dist/domain/android/androidApplication.js +8 -7
  431. package/dist/domain/apktool/apktoolResourceAnalysis.js +52 -2
  432. package/dist/domain/apple/appleApplication.js +41 -60
  433. package/dist/domain/apple/appleBundleAnatomy.js +56 -68
  434. package/dist/domain/apple/dylibResolution.js +5 -1
  435. package/dist/domain/apple/interfaceBuilderGraph.js +29 -8
  436. package/dist/domain/apple/interfaceBuilderKeyedArchive.js +11 -4
  437. package/dist/domain/apple/jvmClassFile.js +226 -0
  438. package/dist/domain/apple/keyedArchive.js +39 -17
  439. package/dist/domain/apple/machoContainer.js +3 -0
  440. package/dist/domain/apple/plistNumbers.js +67 -5
  441. package/dist/domain/apple/plistValue.js +89 -18
  442. package/dist/domain/artifactComparison.js +7 -5
  443. package/dist/domain/artifactGraph.js +4 -12
  444. package/dist/domain/artifactInspection.js +6 -17
  445. package/dist/domain/artifactInventoryEvidence.js +68 -60
  446. package/dist/domain/binaryTarget.js +11 -26
  447. package/dist/domain/binaryTargetTypes.js +10 -0
  448. package/dist/domain/browserNetworkEvidence.js +20 -3
  449. package/dist/domain/browserObservation.js +5 -28
  450. package/dist/domain/browserObservationError.js +4 -4
  451. package/dist/domain/browserScenarioCapture.js +11 -2
  452. package/dist/domain/browserScenarioCaptureLimits.js +34 -0
  453. package/dist/domain/browserScenarioCaptureValues.js +50 -0
  454. package/dist/domain/browserScenarioDiffEvidence.js +1 -3
  455. package/dist/domain/browserScenarioValues.js +5 -1
  456. package/dist/domain/captures/packetCapture.js +2 -1
  457. package/dist/domain/dosMz.js +14 -5
  458. package/dist/domain/electron/electronFuseEvidence.js +42 -0
  459. package/dist/domain/elfFixedHeader.js +24 -0
  460. package/dist/domain/evidence.js +7 -6
  461. package/dist/domain/evidenceBundle.js +9 -2
  462. package/dist/domain/explicitSensitiveFailure.js +3 -0
  463. package/dist/domain/fileSnapshotObservation.js +25 -0
  464. package/dist/domain/fixedTupleSchema.js +9 -0
  465. package/dist/domain/functionCallCoverage.js +6 -6
  466. package/dist/domain/functionComparisonDimensions.js +38 -11
  467. package/dist/domain/functionComparisonNormalization.js +17 -9
  468. package/dist/domain/functionDossierEvidence.js +4 -3
  469. package/dist/domain/harmony/harmonyApplication.js +8 -8
  470. package/dist/domain/hopperErrors.js +4 -2
  471. package/dist/domain/hopperValues.js +27 -4
  472. package/dist/domain/javascript/electronActiveObservation.js +1 -0
  473. package/dist/domain/javascript/electronStaticAnalysisBrowser.js +80 -20
  474. package/dist/domain/javascript/electronStaticAnalysisValues.js +0 -20
  475. package/dist/domain/javascript/electronStaticOptionObjects.js +45 -0
  476. package/dist/domain/javascript/electronWrappedCallPaths.js +70 -17
  477. package/dist/domain/javascript/javascriptAnalysisResourceControls.js +20 -4
  478. package/dist/domain/javascript/javascriptApplicationAnalysis.js +4 -0
  479. package/dist/domain/javascript/javascriptApplicationChangeGraph.js +3 -0
  480. package/dist/domain/javascript/javascriptApplicationVersionComparisonSchemas.js +3 -1
  481. package/dist/domain/javascript/javascriptApplicationVersionItems.js +49 -21
  482. package/dist/domain/javascript/javascriptAstFingerprint.js +41 -10
  483. package/dist/domain/javascript/javascriptAstValues.js +83 -5
  484. package/dist/domain/javascript/javascriptBundledRequireOrigin.js +23 -36
  485. package/dist/domain/javascript/javascriptCommonJsExportReceivers.js +231 -0
  486. package/dist/domain/javascript/javascriptElectronMemberWrites.js +14 -4
  487. package/dist/domain/javascript/javascriptFeatureSeed.js +1 -1
  488. package/dist/domain/javascript/javascriptGraphqlOperations.js +382 -0
  489. package/dist/domain/javascript/javascriptModuleDeclaration.js +20 -0
  490. package/dist/domain/javascript/javascriptNativeHandoff.js +7 -11
  491. package/dist/domain/javascript/javascriptRpcEndpoints.js +7 -171
  492. package/dist/domain/javascript/javascriptRuntimeLoadState.js +9 -4
  493. package/dist/domain/javascript/javascriptRuntimeReconciliationCaptureParsing.js +35 -12
  494. package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +50 -45
  495. package/dist/domain/javascript/javascriptSemanticAmbientWrites.js +284 -24
  496. package/dist/domain/javascript/javascriptSemanticAnalysis.js +452 -182
  497. package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +37 -20
  498. package/dist/domain/javascript/javascriptSemanticCallResolution.js +55 -27
  499. package/dist/domain/javascript/javascriptSemanticCalls.js +4 -4
  500. package/dist/domain/javascript/javascriptSemanticChildProcesses.js +134 -50
  501. package/dist/domain/javascript/javascriptSemanticCoverage.js +5 -1
  502. package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +7 -13
  503. package/dist/domain/javascript/javascriptSemanticDataEffects.js +33 -10
  504. package/dist/domain/javascript/javascriptSemanticDerivedAnalysis.js +1 -1
  505. package/dist/domain/javascript/javascriptSemanticEvaluationOrder.js +126 -0
  506. package/dist/domain/javascript/javascriptSemanticExpressionShapes.js +111 -0
  507. package/dist/domain/javascript/javascriptSemanticGetterQueries.js +147 -0
  508. package/dist/domain/javascript/javascriptSemanticGetterResults.js +264 -0
  509. package/dist/domain/javascript/javascriptSemanticGraph.js +18 -1
  510. package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +13 -0
  511. package/dist/domain/javascript/javascriptSemanticIterationSources.js +3 -2
  512. package/dist/domain/javascript/javascriptSemanticMapOperations.js +51 -0
  513. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +215 -81
  514. package/dist/domain/javascript/javascriptSemanticMutationInitializers.js +395 -118
  515. package/dist/domain/javascript/javascriptSemanticObjectReferences.js +241 -328
  516. package/dist/domain/javascript/javascriptSemanticObjects.js +33 -27
  517. package/dist/domain/javascript/javascriptSemanticOpaqueEffects.js +163 -0
  518. package/dist/domain/javascript/javascriptSemanticPrimitives.js +11 -1
  519. package/dist/domain/javascript/javascriptSemanticProjection.js +44 -67
  520. package/dist/domain/javascript/javascriptSemanticQueryIdentity.js +2 -1
  521. package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +1 -1
  522. package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +45 -7
  523. package/dist/domain/javascript/javascriptSemanticResourceLimits.js +3 -19
  524. package/dist/domain/javascript/javascriptSemanticResources.js +27 -4
  525. package/dist/domain/javascript/javascriptSemanticReturnedReferences.js +78 -37
  526. package/dist/domain/javascript/javascriptSemanticReturns.js +2 -2
  527. package/dist/domain/javascript/javascriptSemanticState.js +191 -42
  528. package/dist/domain/javascript/javascriptSemanticValues.js +167 -41
  529. package/dist/domain/javascript/javascriptSourceParser.js +54 -9
  530. package/dist/domain/javascript/javascriptStaticAnalysis.js +24 -13
  531. package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +276 -16
  532. package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +33 -25
  533. package/dist/domain/javascript/javascriptStaticAnalysisState.js +3 -0
  534. package/dist/domain/javascript/javascriptStaticAnalysisTypes.js +1 -1
  535. package/dist/domain/javascript/javascriptSymbolicBindings.js +424 -142
  536. package/dist/domain/javascript/javascriptSymbolicControlFlow.js +4 -0
  537. package/dist/domain/javascript/javascriptSymbolicValues.js +12 -1
  538. package/dist/domain/javascript/sourceToBundleSignals.js +3 -0
  539. package/dist/domain/managed/managedApplicationGraphNodes.js +14 -9
  540. package/dist/domain/managed/managedArtifact.js +26 -0
  541. package/dist/domain/managed/managedMemberComparison.js +3 -0
  542. package/dist/domain/managed/managedMemberComparisonCoverage.js +14 -1
  543. package/dist/domain/managed/managedMemberComparisonItems.js +124 -52
  544. package/dist/domain/managed/managedMemberComparisonMatch.js +76 -72
  545. package/dist/domain/managed/managedMemberSignatureIdentity.js +40 -0
  546. package/dist/domain/managed/managedNativeVerificationMatch.js +5 -5
  547. package/dist/domain/managed/managedNativeVerificationSchemas.js +2 -2
  548. package/dist/domain/mobileApplicationGraphProjection.js +33 -18
  549. package/dist/domain/native/bytePattern.js +21 -0
  550. package/dist/domain/native/nativeAotPe.js +29 -2
  551. package/dist/domain/native/nativeAotSnapshotObservation.js +18 -0
  552. package/dist/domain/native/nativeCallPartialObservation.js +14 -12
  553. package/dist/domain/native/nativeLoadImage.js +13 -0
  554. package/dist/domain/native/objcSwiftMetadata.js +15 -8
  555. package/dist/domain/native/peResources.js +6 -2
  556. package/dist/domain/peMachine.js +2 -0
  557. package/dist/domain/process/processComparison.js +3 -3
  558. package/dist/domain/process/processTraceDimensionProjection.js +1 -1
  559. package/dist/domain/process/processTraceEvaluation.js +65 -24
  560. package/dist/domain/propertyListKeys.js +84 -69
  561. package/dist/domain/propertyListXml.js +149 -0
  562. package/dist/domain/providerAdapterError.js +2 -0
  563. package/dist/domain/providerCleanupError.js +2 -4
  564. package/dist/domain/rawBinary.js +11 -2
  565. package/dist/domain/reconstructionCoverage.js +35 -23
  566. package/dist/domain/reconstructionCoverageEvaluation.js +36 -36
  567. package/dist/domain/reconstructionCoverageEvidence.js +26 -0
  568. package/dist/domain/reconstructionVerification.js +40 -26
  569. package/dist/domain/referenceSourceImportParsing.js +4 -0
  570. package/dist/domain/referenceSourcePathIdentity.js +2 -0
  571. package/dist/domain/referenceSourceRequireBindings.js +40 -101
  572. package/dist/domain/relationshipCoverage.js +4 -5
  573. package/dist/domain/sqlite/sqliteDatabase.js +2 -1
  574. package/dist/domain/symbolAnalysis.js +9 -8
  575. package/dist/domain/webBundleAnalyzerInspection.js +65 -25
  576. package/dist/domain/webCaptureDiff.js +124 -41
  577. package/dist/domain/webInventory.js +28 -14
  578. package/dist/domain/webModuleTrace.js +22 -0
  579. package/dist/domain/webScriptExportError.js +2 -3
  580. package/dist/domain/xmlDocument.js +41 -0
  581. package/dist/domain/zipPackageFormat.js +0 -4
  582. package/dist/dotnet/ManagedArtifactInspector.js +2 -4
  583. package/dist/dotnet/ManagedDecodeBudget.js +21 -1
  584. package/dist/dotnet/ManagedMemberInspector.js +31 -6
  585. package/dist/dotnet/ManagedMemberInspectorCore.js +63 -12
  586. package/dist/dotnet/ManagedMemberRows.js +8 -8
  587. package/dist/dotnet/ManagedMetadataHeaps.js +0 -1
  588. package/dist/dotnet/ManagedMetadataLayout.js +17 -15
  589. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +20 -19
  590. package/dist/dotnet/ManagedNativeBoundaryInspector.js +7 -8
  591. package/dist/dotnet/ManagedPeReader.js +5 -0
  592. package/dist/dotnet/ManagedSnapshot.js +25 -20
  593. package/dist/dotnet/ManagedTypeNameDigests.js +177 -0
  594. package/dist/dotnet/ManagedTypeNames.js +6 -46
  595. package/dist/dotnet/ManagedTypeNesting.js +25 -0
  596. package/dist/dotnet/ManagedTypeReferences.js +94 -0
  597. package/dist/electron/ElectronFuseFailures.js +105 -0
  598. package/dist/electron/ElectronFusePath.js +4 -3
  599. package/dist/electron/ElectronFuseProvider.js +67 -92
  600. package/dist/electron/ElectronFuseReader.js +46 -30
  601. package/dist/evm/EvmoleFailures.js +1 -0
  602. package/dist/evm/EvmoleInterfaceProvider.js +13 -16
  603. package/dist/filesystem/OwnedRegularFile.js +116 -0
  604. package/dist/filesystem/OwnedStagedOutput.js +28 -11
  605. package/dist/filesystem/RegularFile.js +20 -8
  606. package/dist/filesystem/StableFileHash.js +56 -38
  607. package/dist/filesystem/callerPath.js +26 -0
  608. package/dist/filesystem/readFileHandleChunks.js +55 -5
  609. package/dist/filesystem/readStableFileBytes.js +85 -0
  610. package/dist/firmware/FirmwareCommand.js +13 -7
  611. package/dist/firmware/FirmwareFailures.js +56 -0
  612. package/dist/firmware/FirmwareFiles.js +128 -98
  613. package/dist/firmware/FirmwareProvider.js +120 -65
  614. package/dist/firmware/FirmwarePublication.js +26 -11
  615. package/dist/flutter/DartElf.js +27 -0
  616. package/dist/flutter/FlutterBuildProvider.js +44 -4
  617. package/dist/gdb/GdbSessionManager.js +202 -14
  618. package/dist/generatedPackageMetadata.js +1 -1
  619. package/dist/ghidra/GhidraAnalysisProfile.js +24 -10
  620. package/dist/ghidra/GhidraAnalysisSeeds.js +39 -55
  621. package/dist/ghidra/GhidraBridgeSources.js +12 -0
  622. package/dist/ghidra/GhidraClient.js +362 -148
  623. package/dist/ghidra/GhidraClientStartup.js +5 -3
  624. package/dist/ghidra/GhidraClientWire.js +5 -2
  625. package/dist/ghidra/GhidraDiagnostics.js +16 -5
  626. package/dist/ghidra/GhidraDoctor.js +45 -14
  627. package/dist/ghidra/GhidraDosSnapshot.js +83 -0
  628. package/dist/ghidra/GhidraExecutableHeader.js +54 -0
  629. package/dist/ghidra/GhidraFileArtifacts.js +93 -0
  630. package/dist/ghidra/GhidraFunctionValues.js +1 -0
  631. package/dist/ghidra/GhidraInstallation.js +143 -142
  632. package/dist/ghidra/GhidraInstallationPolicy.js +20 -79
  633. package/dist/ghidra/GhidraInstallationProperties.js +57 -0
  634. package/dist/ghidra/GhidraInventoryValues.js +22 -6
  635. package/dist/ghidra/GhidraJavaLaunch.js +11 -4
  636. package/dist/ghidra/GhidraJavaProbe.js +267 -0
  637. package/dist/ghidra/GhidraJavaProperties.js +9 -7
  638. package/dist/ghidra/GhidraLanguageCatalog.js +12 -7
  639. package/dist/ghidra/GhidraLauncher.js +128 -65
  640. package/dist/ghidra/GhidraLoadImageAttest.js +75 -78
  641. package/dist/ghidra/GhidraLoadImageValues.js +39 -29
  642. package/dist/ghidra/GhidraMipsProfile.js +13 -5
  643. package/dist/ghidra/GhidraNativeAotSnapshotOwner.js +221 -0
  644. package/dist/ghidra/GhidraPeProfile.js +88 -18
  645. package/dist/ghidra/GhidraProvider.js +219 -32
  646. package/dist/ghidra/GhidraProviderCapabilities.js +17 -4
  647. package/dist/ghidra/GhidraProviderClient.js +199 -239
  648. package/dist/ghidra/GhidraPspExtension.js +104 -34
  649. package/dist/ghidra/GhidraPspProfile.js +4 -1
  650. package/dist/ghidra/GhidraRawBinaryLanguage.js +13 -4
  651. package/dist/ghidra/GhidraReleasePolicy.js +93 -0
  652. package/dist/ghidra/GhidraRequestQueue.js +64 -40
  653. package/dist/ghidra/GhidraSessionError.js +152 -19
  654. package/dist/ghidra/GhidraSessionValues.js +13 -3
  655. package/dist/ghidra/GhidraSocketConnection.js +25 -11
  656. package/dist/ghidra/GhidraTargetSnapshot.js +67 -50
  657. package/dist/ghidra/GhidraTransport.js +86 -63
  658. package/dist/ghidra/extensions/GhidraExtensions.js +30 -45
  659. package/dist/go/GoBinaryProvider.js +89 -60
  660. package/dist/go/GoElfImage.js +3 -3
  661. package/dist/hopper/BridgeLauncher.js +43 -4
  662. package/dist/hopper/HopperAnalysisProfile.js +4 -2
  663. package/dist/hopper/HopperCleanup.js +14 -1
  664. package/dist/hopper/HopperClient.js +135 -63
  665. package/dist/hopper/HopperProvider.js +4 -7
  666. package/dist/hopper/HopperProviderCapabilities.js +2 -1
  667. package/dist/hopper/HopperRegexSearch.js +21 -60
  668. package/dist/ida/IdaBusyHealth.js +36 -2
  669. package/dist/ida/IdaMcpConnection.js +17 -11
  670. package/dist/ida/IdaNativeProtocol.js +1 -9
  671. package/dist/ida/IdaOperationRunner.js +8 -26
  672. package/dist/ida/IdaProtocolValues.js +2 -1
  673. package/dist/ida/IdaProvider.js +18 -2
  674. package/dist/ida/IdaSessionClient.js +54 -12
  675. package/dist/inspector/V8InspectorCaptureProjection.js +7 -0
  676. package/dist/inspector/V8InspectorProvider.js +2 -0
  677. package/dist/javascript/analysis/JavaScriptAnalysisTransfer.js +25 -4
  678. package/dist/javascript/analysis/JavaScriptAnalysisWorker.js +4 -3
  679. package/dist/javascript/analysis/JavaScriptAnalysisWorkerProtocol.js +3 -2
  680. package/dist/javascript/analysis/JavaScriptAnalysisWorkerSchemas.js +7 -1
  681. package/dist/javascript/analysis/JavaScriptAnalysisWorkerServer.js +1 -1
  682. package/dist/javascript/recovery/RecoveryFiles.js +57 -8
  683. package/dist/jeb/JebMcpConnection.js +129 -70
  684. package/dist/jeb/JebMcpConnectionOwner.js +116 -0
  685. package/dist/jeb/JebMcpDeadline.js +46 -0
  686. package/dist/jeb/JebProvider.js +77 -51
  687. package/dist/kuna/KunaAddress.js +11 -0
  688. package/dist/kuna/KunaCommand.js +217 -0
  689. package/dist/kuna/KunaConfiguration.js +90 -0
  690. package/dist/kuna/KunaDoctor.js +198 -0
  691. package/dist/kuna/KunaInstallation.js +137 -0
  692. package/dist/kuna/KunaJson.js +23 -0
  693. package/dist/kuna/KunaJsonStream.js +433 -0
  694. package/dist/kuna/KunaLimits.js +5 -0
  695. package/dist/kuna/KunaProjectCache.js +804 -0
  696. package/dist/kuna/KunaProjectExport.js +202 -0
  697. package/dist/kuna/KunaProjectFiles.js +191 -0
  698. package/dist/kuna/KunaProjectReader.js +115 -0
  699. package/dist/kuna/KunaProvider.js +217 -0
  700. package/dist/kuna/KunaProviderCapabilities.js +102 -0
  701. package/dist/kuna/KunaQueryErrors.js +12 -0
  702. package/dist/kuna/KunaQueryWork.js +113 -0
  703. package/dist/kuna/KunaReferenceFiles.js +258 -0
  704. package/dist/kuna/KunaReferenceQueries.js +211 -0
  705. package/dist/kuna/KunaRelease.js +10 -0
  706. package/dist/kuna/KunaRunSlots.js +56 -0
  707. package/dist/kuna/KunaSessionClient.js +1162 -0
  708. package/dist/kuna/KunaStringInventory.js +145 -0
  709. package/dist/kuna/KunaStringQueries.js +133 -0
  710. package/dist/kuna/KunaTargetCommands.js +205 -0
  711. package/dist/kuna/KunaUnavailable.js +11 -0
  712. package/dist/main/processShutdown.js +17 -0
  713. package/dist/main/transport.js +21 -1
  714. package/dist/main.js +2 -12
  715. package/dist/mcp/AnalysisProvider-BABWbLoM.js +38 -0
  716. package/dist/mcp/{AnalysisSnapshotFiles-BAbiJQOc.js → AnalysisSnapshotFiles-BXz0c37-.js} +39 -28
  717. package/dist/mcp/{ProcessOwnership-Bl_3ejLe.js → ArtifactFileOperation-64cQKI7B.js} +274 -72
  718. package/dist/mcp/{ArtifactProvider-DViCU_rn.js → ArtifactProvider-Dx6pmil1.js} +371 -354
  719. package/dist/mcp/ArtifactProviderMetadata-UCJr2oZW.js +167 -0
  720. package/dist/mcp/{ArtifactReader-OyM03Gjn.js → ArtifactReader-BrnwNaKY.js} +29 -6
  721. package/dist/mcp/ArtifactResourceScope-zi3Dkqzy.js +175 -0
  722. package/dist/mcp/{AsarHeader-WsPgoooH.js → AsarHeader-B_IbppTz.js} +1 -1
  723. package/dist/mcp/{BinarySessionStatus-B4P9gf-S.js → BinarySessionStatus-CZ9nnXMt.js} +5 -4
  724. package/dist/mcp/{BinaryTargetResolver-BMaE_0H1.js → BinaryTargetResolver-BUncASDP.js} +146 -215
  725. package/dist/mcp/BoundedFileBytes-DYt5q9G2.js +43 -0
  726. package/dist/mcp/{CdpCaptureDocuments-HDiF2O7k.js → CdpCaptureDocuments-Y2uFcBpl.js} +194 -145
  727. package/dist/mcp/{CdpCaptureValues-M-j6CIh1.js → CdpCaptureValues-tNIg-gQK.js} +12 -5
  728. package/dist/mcp/{CdpConnection-BpDfz4MK.js → CdpEndpoint-BrhMhpSi.js} +352 -281
  729. package/dist/mcp/{CdpOptionalCommand-BPjRD9Kz.js → CdpOptionalCommand-PZZhlqxv.js} +2 -2
  730. package/dist/mcp/CdpTargetSession-BmmDC3XO.js +290 -0
  731. package/dist/mcp/{DirectAnalysis-DrafbXke.js → DirectAnalysis-B9KuCHTG.js} +29 -21
  732. package/dist/mcp/{DirectAnalysisStatus-CjjeDLzW.js → DirectAnalysisStatus-BgzopkIt.js} +7 -7
  733. package/dist/mcp/{ElectronFileScope-BPG_YoyU.js → ElectronFileScope-FXtK0d6I.js} +1 -1
  734. package/dist/mcp/ElectronFuseFailures-uZ_wOV6T.js +610 -0
  735. package/dist/mcp/MachoLoadCommandReader-C2VGgHA3.js +330 -0
  736. package/dist/mcp/{ManagedStaticProvider-BthZbKyZ.js → ManagedStaticProvider-CZuoPme2.js} +429 -131
  737. package/dist/mcp/{NativeMacOSProvider-Bh79k8dI.js → NativeMacOSProvider-CMguKrvN.js} +1376 -748
  738. package/dist/mcp/{NativeMacOSProviderMetadata-N1lPOaY_.js → NativeMacOSProviderMetadata-B_RH4KXF.js} +97 -7
  739. package/dist/mcp/{ProviderDeadline-DskQ94YD.js → OwnedCommand-BW1jBSt9.js} +436 -127
  740. package/dist/mcp/ProcedureAddressResolution-H6Qwpb_Y.js +59 -0
  741. package/dist/mcp/{WorkflowEvidence-umWrB_wm.js → WorkflowEvidence-CO4C7ALz.js} +16 -9
  742. package/dist/mcp/analysisErrorCleanup-Q344SnTO.js +34 -0
  743. package/dist/mcp/analysisErrorCore-BIEP7tvF.js +509 -0
  744. package/dist/mcp/{analysisErrorProjection-BN0EPM-3.js → analysisErrorProjection-B8teQwwD.js} +80 -30
  745. package/dist/mcp/{artifactToolContracts-Di4qZlEt.js → artifactToolContracts-C9dRDo-D.js} +6 -4
  746. package/dist/mcp/{browserObservation-C0s4i8UI.js → browserObservation-DUraZs62.js} +272 -107
  747. package/dist/mcp/{browserObservationError-CyLugqX4.js → browserObservationError-C5okJ5el.js} +27 -4
  748. package/dist/mcp/{browserObservationSchemas-tgqjH7aA.js → browserObservationSchemas-DwGGxBpu.js} +3 -3
  749. package/dist/mcp/{browserScenario-CAQ8Fns9.js → browserScenario-BRUz7yN0.js} +844 -358
  750. package/dist/mcp/{browserScenarioCapture-CTNFN-FI.js → browserScenarioCapture-CiMAsMx8.js} +127 -11
  751. package/dist/mcp/{InterfaceBuilderDecodeBudget-5F2AkxJT.js → callerPath-CpPnMZyN.js} +91 -65
  752. package/dist/mcp/{electronActiveObservation-lDvQTMR0.js → electronActiveObservation-DV0Ffy9X.js} +1 -0
  753. package/dist/mcp/electronFuses-D5SS7XXw.js +367 -0
  754. package/dist/mcp/{electronObservation-i7LcILQ-.js → electronObservation-DsN-NqY1.js} +134 -75
  755. package/dist/mcp/{electronObservation-DFOFEood.js → electronObservation-wOYWwqgF.js} +3 -3
  756. package/dist/mcp/{electronScenario-nCzE6IfJ.js → electronScenario-CYrt2zBK.js} +395 -135
  757. package/dist/mcp/{emptyArraySchema-tL6Qymyd.js → emptyArraySchema-C0o2Sxwp.js} +2 -2
  758. package/dist/mcp/{enhancedInputs-DgdEnzHy.js → enhancedInputs-6CCgB3VB.js} +1 -1
  759. package/dist/mcp/{javascriptRuntimeObservation-61NhCf7H.js → javascriptRuntimeObservation-BVbhkO2-.js} +12 -9
  760. package/dist/mcp/{javascriptRuntimeObservation-PIUoLfX6.js → javascriptRuntimeObservation-Cu0Yedqq.js} +2 -2
  761. package/dist/mcp/{lipo-Bnkoq_6W.js → lipo-DSTgUqL1.js} +11 -118
  762. package/dist/mcp/{logger-BQY5ulYv.js → logger-BGdGHadX.js} +2 -2
  763. package/dist/mcp/machoContainer-CMSxUBlK.js +605 -0
  764. package/dist/mcp/{main-kBXHZ8S5.js → main-Cx-Z7m_n.js} +16788 -5902
  765. package/dist/mcp/main.js +1 -1
  766. package/dist/mcp/{managedToolContracts-CK--I_s7.js → managedToolContracts-CSlbKJP-.js} +3 -3
  767. package/dist/mcp/{nativeValueTrace-DR9UE62L.js → nativeValueTrace-BEZbDieM.js} +2630 -2468
  768. package/dist/mcp/{officialToolContracts-B67NJ2tC.js → officialToolContracts-CauCcSsc.js} +74 -55
  769. package/dist/mcp/peMachine-aP1iYnHq.js +95 -0
  770. package/dist/mcp/propertyListKeys-BfCo0k4w.js +356 -0
  771. package/dist/mcp/providerCleanupError-DIRHxzWo.js +125 -0
  772. package/dist/mcp/{providerOperationHealth-CTYa3iLf.js → providerOperationHealth-9DRSGM8N.js} +24 -1
  773. package/dist/mcp/{scanCanonical-CRXSpule.js → scanCanonical-CF3ATd1V.js} +269 -463
  774. package/dist/mcp/{serverIdentity-Cio4iFV3.js → serverIdentity-BK0Ejd_Y.js} +262 -83
  775. package/dist/mcp/{sourceMapEnvelope-C0uJlrOh.js → sourceMapEnvelope-DAaRUIGj.js} +4 -4
  776. package/dist/mcp/{toolContracts-BW05wpcr.js → toolContracts-BPoHQdlC.js} +541 -327
  777. package/dist/mcp/{toolOutputSchemaGroups-ColvNZ1r.js → toolOutputSchemaGroups-MJ_f-PMK.js} +2551 -2354
  778. package/dist/mcp/{webContentArtifact-Dzjc1z-R.js → webContentArtifact-DfGkgDcI.js} +2 -17
  779. package/dist/mcp/{webRuntime-K__NYzXm.js → webRuntime-ccyhkRru.js} +2 -2
  780. package/dist/mcp/{webSourceLocation-DbMAT2J9.js → webSourceLocation-DKIum0vJ.js} +6451 -4414
  781. package/dist/mcpDoctor.js +4 -2
  782. package/dist/mcpStartupPolicy.js +18 -3
  783. package/dist/native/AppleDispatchMetadata.js +76 -27
  784. package/dist/native/AppleMachoFixups.js +20 -10
  785. package/dist/native/AppleObjcCategories.js +12 -1
  786. package/dist/native/AppleObjcDispatchFacets.js +21 -12
  787. package/dist/native/AppleObjcProperties.js +61 -17
  788. package/dist/native/AppleObjcProtocols.js +25 -7
  789. package/dist/native/AppleSwiftVtables.js +2 -0
  790. package/dist/native/CommandRunner.js +13 -9
  791. package/dist/native/LldbCallTracer.js +232 -178
  792. package/dist/native/LldbReadbackFiles.js +70 -0
  793. package/dist/native/LldbRetainedObservations.js +28 -56
  794. package/dist/native/NativeCallObservation.js +53 -52
  795. package/dist/native/NativeCallTarget.js +95 -0
  796. package/dist/native/NativeMacOSProvider.js +240 -171
  797. package/dist/native/NativeMachoInspection.js +21 -7
  798. package/dist/native/NativePlistSource.js +179 -0
  799. package/dist/native/NativeUiCleanupError.js +30 -0
  800. package/dist/native/NativeUiHelperRuntime.js +48 -35
  801. package/dist/native/NativeUiObservation.js +67 -45
  802. package/dist/native/SignatureTargetBinding.js +72 -53
  803. package/dist/native/parsers/demangle.js +16 -12
  804. package/dist/native/parsers/machoUuid.js +4 -4
  805. package/dist/native/parsers/otool.js +57 -17
  806. package/dist/native/parsers/plist.js +40 -25
  807. package/dist/native/pe/PeResourceLayout.js +22 -7
  808. package/dist/native/pe/PeResourceParser.js +10 -9
  809. package/dist/native/pe/PeResourcesProvider.js +63 -16
  810. package/dist/native/pwndbg/CoreFileMappingAuthority.js +51 -0
  811. package/dist/native/pwndbg/PwndbgCoreContext.js +26 -15
  812. package/dist/native/pwntools/PwntoolsDecoder.js +116 -53
  813. package/dist/native/pwntools/PwntoolsFailures.js +17 -3
  814. package/dist/native/pwntools/PwntoolsRecordedCrashProvider.js +11 -1
  815. package/dist/objdump/ObjdumpCommand.js +5 -2
  816. package/dist/pcap/PcapOutput.js +38 -2
  817. package/dist/pcap/PcapProvider.js +45 -15
  818. package/dist/pcap/PcapSnapshot.js +24 -4
  819. package/dist/process/ArtifactAnalysisResources.js +145 -52
  820. package/dist/process/BoundedFileBytes.js +8 -3
  821. package/dist/process/CurrentEntrypointPath.js +3 -1
  822. package/dist/process/DarwinProcessRunTokenReader.js +174 -63
  823. package/dist/process/DetachedPgpSignature.js +57 -0
  824. package/dist/process/ExecFileOutput.js +14 -11
  825. package/dist/{hopper/HopperTargetLease.js → process/HopperLease.js} +10 -0
  826. package/dist/process/LinuxResourceLimits.js +4 -24
  827. package/dist/process/OwnedCommand.js +109 -14
  828. package/dist/process/ProviderProcess.js +129 -10
  829. package/dist/process/RegexMatcher.js +96 -0
  830. package/dist/process/SharedStartupAttempt.js +59 -0
  831. package/dist/process/WindowsAuthority.js +1 -1
  832. package/dist/process/capture/FilesystemSnapshot.js +3 -2
  833. package/dist/process/capture/ProcessCaptureError.js +55 -17
  834. package/dist/process/capture/ProcessCaptureLifecycle.js +17 -20
  835. package/dist/process/capture/ProcessCaptureProgress.js +5 -3
  836. package/dist/process/capture/ProcessHarness.js +17 -3
  837. package/dist/process/snapshotEnvironment.js +8 -8
  838. package/dist/{application/binary → providers}/AnalysisClientCleanup.js +3 -3
  839. package/dist/providers/AnalysisClientCreation.js +193 -0
  840. package/dist/providers/AnalysisClientFailure.js +191 -0
  841. package/dist/providers/DeferredAnalysisClient.js +48 -0
  842. package/dist/providers/OwnedCommandCleanup.js +65 -0
  843. package/dist/providers/ProviderInspectionScope.js +10 -0
  844. package/dist/recordedCatalogDigests.js +2 -0
  845. package/dist/reference/ReferenceSourceReader.js +64 -0
  846. package/dist/reference/ReferenceSourceReaderEntries.js +12 -3
  847. package/dist/reference/ReferenceSourceReaderFile.js +2 -1
  848. package/dist/rizin/RizinCommand.js +2 -2
  849. package/dist/rizin/RizinDebugSessionManager.js +249 -210
  850. package/dist/rust/RustBinaryProvider.js +55 -23
  851. package/dist/server/EvidenceMcpServer.js +2 -2
  852. package/dist/server/contractToolHandler.js +17 -11
  853. package/dist/server/createServer.js +27 -8
  854. package/dist/server/promptCompletion.js +24 -22
  855. package/dist/server/registerArtifactComparisonTool.js +13 -2
  856. package/dist/server/registerBrowserScenarioTool.js +7 -5
  857. package/dist/server/registerBrowserTools.js +2 -4
  858. package/dist/server/registerCutterTools.js +2 -3
  859. package/dist/server/registerElectronTools.js +2 -13
  860. package/dist/server/registerFridaTools.js +8 -12
  861. package/dist/server/registerInvestigationTools.js +20 -20
  862. package/dist/server/registerJavaScriptRuntimeObservationTools.js +2 -4
  863. package/dist/server/registerManagedWorkflowTools/evidence.js +14 -7
  864. package/dist/server/registerProcessComparisonTool.js +3 -0
  865. package/dist/server/registerSessionStatusTool.js +13 -6
  866. package/dist/server/registerSessionTools.js +16 -29
  867. package/dist/server/runDerivedOperation.js +2 -0
  868. package/dist/signals/SigrokRecordingProvider.js +13 -6
  869. package/dist/sqlite/SqliteDatabaseFailures.js +25 -12
  870. package/dist/sqlite/SqliteDatabaseInspection.js +27 -12
  871. package/dist/sqlite/SqliteDatabaseSnapshot.js +58 -32
  872. package/dist/sqlite/SqliteDatabaseWorkerExecution.js +18 -3
  873. package/dist/wasm/WabtArtifactProvider.js +64 -42
  874. package/dist/wasm/WabtFailures.js +19 -1
  875. package/dist/wasm/WabtRuntime.js +58 -0
  876. package/dist/wasm/WasmGlueAdapter.js +20 -7
  877. package/dist/windows/WindowsNativeLoader.js +16 -2
  878. package/dist/windows/WindowsPrivateRuntime.js +44 -1
  879. package/licenses/npm-dependencies.txt +146 -1
  880. package/licenses/npm-runtime-notices.txt +175 -1
  881. package/native/windows/README.md +44 -7
  882. package/native/windows/build/manifest.json +2 -2
  883. package/native/windows/build/rea-windows-x64.node +0 -0
  884. package/package.json +11 -3
  885. package/scripts/electron-active-hook-boundaries.cjs +15 -2
  886. package/scripts/electron-active-hook.cjs +408 -46
  887. package/scripts/hopper-demo-x11.py +12 -10
  888. package/scripts/rea.mjs +62 -15
  889. package/skills/reverse-engineer-anything/SKILL.md +21 -7
  890. package/skills/reverse-engineer-anything/references/android-applications.md +3 -1
  891. package/skills/reverse-engineer-anything/references/javascript-applications.md +44 -1
  892. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +30 -10
  893. package/dist/cli-runtime/ArtifactResourceScope-DQWTcUwE.js +0 -114
  894. package/dist/cli-runtime/ClientConfigPath-c6jr6INc.js +0 -36
  895. package/dist/cli-runtime/IdaConfiguration-CtGP7EKo.js +0 -1094
  896. package/dist/cli-runtime/JebMcpEndpoint-DUytrn5G.js +0 -428
  897. package/dist/cli-runtime/MacHopperPaths-CwL5lYPX.js +0 -434
  898. package/dist/cli-runtime/OwnedCommand-Cj9GhmPR.js +0 -112
  899. package/dist/cli-runtime/RegularFile-B_6KPCNQ.js +0 -139
  900. package/dist/cli-runtime/RegularFileRead-DVlC5faM.js +0 -125
  901. package/dist/cli-runtime/analysisErrorPresentation-DGt7TdsH.js +0 -497
  902. package/dist/cli-runtime/application__javascript__ElectronObservationService-DEsR8KDN.js +0 -63
  903. package/dist/cli-runtime/artifactOperationError-B7n03FbD.js +0 -27
  904. package/dist/cli-runtime/browserObservationError-Dx6xRTjb.js +0 -40
  905. package/dist/cli-runtime/cliResultOutput-DsRMI8CJ.js +0 -780
  906. package/dist/cli-runtime/mcpStartupPolicy-CVVSOmRc.js +0 -21
  907. package/dist/cli-runtime/propertyListKeys-G8e74YWb.js +0 -248
  908. package/dist/cli-runtime/providerAdapterError-DAjhICdr.js +0 -25
  909. package/dist/cli-runtime/readFileHandleChunks-dp60iZ6v.js +0 -38
  910. package/dist/hopper/HopperRegexWorker.js +0 -27
  911. package/dist/mcp/ArtifactProviderMetadata-b7pOK5_t.js +0 -76
  912. package/dist/mcp/ArtifactResourceScope-P3tq5z8Z.js +0 -162
  913. package/dist/mcp/BoundedFileBytes-DuczXiQZ.js +0 -68
  914. package/dist/mcp/CdpTargetSession-BsPoKhEU.js +0 -86
  915. package/dist/mcp/ProcedureAddressResolution-CQpuwm1h.js +0 -19
  916. package/dist/mcp/analysisErrorCore-DXRTvF_m.js +0 -235
  917. package/dist/mcp/artifactOperationError-CkHMMaf7.js +0 -27
  918. package/dist/mcp/digests-BFoWUT_-.js +0 -223
  919. package/dist/mcp/propertyListKeys-DD25WsjI.js +0 -553
  920. package/dist/mcp/providerAdapterError-sDxToNal.js +0 -25
  921. package/dist/mcp/unicodeCodePointOrder-BezCbTpg.js +0 -26
@@ -0,0 +1,1424 @@
1
+ import { __esmMin } from "./rolldown-runtime-DXoylpqc.js";
2
+ import { err, init_result, ok } from "./reconstructionObligationLedgerSchemas-Bi6sect1.js";
3
+ import { RegularFileCancelled, RegularFileCleanupFailure, init_OwnedRegularFile, regularFileCancellation } from "./OwnedRegularFile-D1f5nUCx.js";
4
+ import { ArtifactReaderFailure, init_ArtifactReader } from "./ArtifactReader-DMwm42bk.js";
5
+ import { ArtifactResourceScope, init_ArtifactResourceScope } from "./ArtifactResourceScope-CokZGcII.js";
6
+ import { HopperStartError, init_hopperErrors } from "./cliResultOutput-10sd6xGx.js";
7
+ import { execFileOutput, init_ExecFileOutput } from "./ExecFileOutput-D6KLYTve.js";
8
+ import { init_safeJson, safeParseJson } from "./safeJson-DKKACtdy.js";
9
+ import { ABORTED, init_AbortablePromise, init_ProviderDeadline, waitForAbortable, waitForAbortableDelay } from "./ProviderDeadline-rSuH4Pm8.js";
10
+ import { PrivateRuntimeRoot, init_PrivateRuntimeRoot } from "./PrivateRuntimeRoot-Cd23u6jd.js";
11
+ import { init_BoundedFileBytes, readBoundedFileBytes } from "./BoundedFileBytes-DRtiQNAQ.js";
12
+ import { init_RegularFileRead, withRegularFile } from "./RegularFileRead-mbgGYtxe.js";
13
+ import { homeDirectoryFromEnvironment, init_homeDirectory } from "./homeDirectory-DC_DeJIg.js";
14
+ import { StableFileHashFailure, hashStableFile, init_StableFileHash } from "./StableFileHash-Ame_h3lY.js";
15
+ import { z } from "zod";
16
+ import { isAbsolute, join } from "node:path";
17
+ import { createHash, randomUUID } from "node:crypto";
18
+ import { constants } from "node:fs";
19
+ import { tmpdir } from "node:os";
20
+ import { access, chmod, copyFile, lstat, mkdir, mkdtemp, open, readFile, realpath, rename, rm, rmdir, writeFile } from "node:fs/promises";
21
+ import { spawn } from "node:child_process";
22
+ import { createConnection, createServer } from "node:net";
23
+
24
+ //#region dist/process/ExecFileBoundedOutput.js
25
+ var execFileBoundedOutput, retainedOutput;
26
+ function init_ExecFileBoundedOutput() {
27
+ return (init_ExecFileBoundedOutput = __esmMin((() => {
28
+ execFileBoundedOutput = (executable, args, options) => new Promise((resolve) => {
29
+ const child = spawn(executable, [...args], {
30
+ env: options.env,
31
+ stdio: [
32
+ "ignore",
33
+ "pipe",
34
+ "pipe"
35
+ ]
36
+ });
37
+ const headLimit = Math.ceil(options.limit / 2);
38
+ const tailLimit = options.limit - headLimit;
39
+ const stdout = {
40
+ head: Buffer.alloc(0),
41
+ tail: Buffer.alloc(0),
42
+ total: 0
43
+ };
44
+ const stderr = {
45
+ head: Buffer.alloc(0),
46
+ tail: Buffer.alloc(0),
47
+ total: 0
48
+ };
49
+ let outputTruncated = false;
50
+ const capture = (stream) => (chunk) => {
51
+ stream.total += chunk.length;
52
+ const headCount = Math.min(chunk.length, Math.max(0, headLimit - stream.head.length));
53
+ if (headCount > 0) stream.head = Buffer.concat([stream.head, chunk.subarray(0, headCount)]);
54
+ const rest = chunk.subarray(headCount);
55
+ if (rest.length > 0 && tailLimit > 0) stream.tail = Buffer.concat([stream.tail, rest]).subarray(-tailLimit);
56
+ if (stream.total > options.limit) outputTruncated = true;
57
+ };
58
+ child.stdout.on("data", capture(stdout));
59
+ child.stderr.on("data", capture(stderr));
60
+ let spawnError;
61
+ child.on("error", (error) => {
62
+ spawnError = error;
63
+ });
64
+ child.on("close", (code, signal) => {
65
+ resolve({
66
+ exitCode: spawnError?.code ?? code ?? signal,
67
+ stdout: retainedOutput(stdout, options.limit),
68
+ stderr: retainedOutput(stderr, options.limit),
69
+ outputTruncated
70
+ });
71
+ });
72
+ });
73
+ retainedOutput = (stream, limit) => stream.total > limit ? `${stream.head.toString("utf8")} … [output omitted] … ${stream.tail.toString("utf8")}` : Buffer.concat([stream.head, stream.tail]).toString("utf8");
74
+ })))();
75
+ }
76
+
77
+ //#endregion
78
+ //#region dist/application/HopperDownload.js
79
+ var HOPPER_DOWNLOAD_BYTES, downloadHopperPackage;
80
+ function init_HopperDownload() {
81
+ return (init_HopperDownload = __esmMin((() => {
82
+ HOPPER_DOWNLOAD_BYTES = 1e8;
83
+ downloadHopperPackage = async (url, options = {}) => {
84
+ const timeoutMs = options.timeoutMs ?? 12e4;
85
+ if (!Number.isSafeInteger(timeoutMs) || timeoutMs < 1 || timeoutMs > 12e4) throw new RangeError("Invalid Hopper response time budget");
86
+ const deadline = AbortSignal.timeout(timeoutMs);
87
+ const maxBytes = options.maxBytes ?? 1e8;
88
+ if (!Number.isSafeInteger(maxBytes) || maxBytes < 1 || maxBytes > 1e8) throw new RangeError("Invalid Hopper response byte budget");
89
+ const response = await fetch(url, {
90
+ headers: {
91
+ accept: "application/json",
92
+ "user-agent": "rea-installer"
93
+ },
94
+ signal: options.signal === undefined ? deadline : AbortSignal.any([options.signal, deadline])
95
+ });
96
+ const refused = {
97
+ ok: false,
98
+ bytes: new Uint8Array()
99
+ };
100
+ if (!response.ok || Number(response.headers.get("content-length")) > maxBytes) {
101
+ await response.body?.cancel();
102
+ return refused;
103
+ }
104
+ if (response.body === null) return {
105
+ ok: true,
106
+ bytes: new Uint8Array()
107
+ };
108
+ const reader = response.body.getReader();
109
+ const chunks = [];
110
+ let bytes = 0;
111
+ try {
112
+ while (true) {
113
+ const chunk = await reader.read();
114
+ if (chunk.done) return {
115
+ ok: true,
116
+ bytes: Buffer.concat(chunks, bytes)
117
+ };
118
+ if (chunk.value.byteLength > maxBytes - bytes) {
119
+ await reader.cancel();
120
+ return refused;
121
+ }
122
+ chunks.push(chunk.value);
123
+ bytes += chunk.value.byteLength;
124
+ }
125
+ } finally {
126
+ reader.releaseLock();
127
+ }
128
+ };
129
+ })))();
130
+ }
131
+
132
+ //#endregion
133
+ //#region dist/application/HopperReleaseFeed.js
134
+ var HOPPER_RELEASES_URL, HOPPER_PUBLIC_KEY_URL, HOPPER_DOWNLOAD_PREFIX, HOPPER_LINUX_PRIMARY_FINGERPRINT, platforms, suffixes, HopperReleaseError, sha256, releaseSchema, parseLinuxHopperRelease, parseLinuxHopperReleases;
135
+ function init_HopperReleaseFeed() {
136
+ return (init_HopperReleaseFeed = __esmMin((() => {
137
+ init_result();
138
+ init_HopperDownload();
139
+ HOPPER_RELEASES_URL = "https://www.hopperapp.com/include/files-api.php?request=releases&public=true";
140
+ HOPPER_PUBLIC_KEY_URL = "https://www.hopperapp.com/hopper-public-key.asc";
141
+ HOPPER_DOWNLOAD_PREFIX = "https://www.hopperapp.com:443/downloader/public/";
142
+ HOPPER_LINUX_PRIMARY_FINGERPRINT = "7C2D73BAFAF5B9A710A69DA1A26DF815099B1BCD";
143
+ platforms = {
144
+ deb: "Ubuntu / Mint",
145
+ rpm: "Fedora",
146
+ arch: "Arch"
147
+ };
148
+ suffixes = {
149
+ deb: ".deb",
150
+ rpm: ".rpm",
151
+ arch: ".pkg.tar.xz"
152
+ };
153
+ HopperReleaseError = class extends Error {
154
+ reason;
155
+ _tag = "HopperReleaseError";
156
+ constructor(reason, message, options) {
157
+ super(message, options);
158
+ this.reason = reason;
159
+ this.name = this._tag;
160
+ }
161
+ };
162
+ sha256 = z.string().regex(/^[a-f0-9]{64}$/u);
163
+ releaseSchema = z.object({
164
+ version: z.string().min(1),
165
+ filename: z.string().url(),
166
+ file_length: z.string().regex(/^[1-9]\d*$/u).refine((text) => {
167
+ const count = Number(text);
168
+ return Number.isSafeInteger(count) && count <= 1e8;
169
+ }),
170
+ file_hash: z.string().regex(/^[a-f0-9]{40}$/u),
171
+ main_exe_hash: sha256,
172
+ signature: z.string().min(1).refine((text) => Buffer.from(text, "base64").toString("base64") === text),
173
+ public: z.literal("1"),
174
+ beta: z.literal("0")
175
+ }).passthrough();
176
+ parseLinuxHopperRelease = (raw, family) => {
177
+ const parsed = releaseSchema.safeParse(raw);
178
+ if (!parsed.success) return err(new HopperReleaseError("release_metadata", "The Hopper release omitted valid package identity or signature metadata."));
179
+ const url = new URL(parsed.data.filename);
180
+ if (url.origin !== "https://www.hopperapp.com" || url.username !== "" || url.password !== "" || url.search !== "" || url.hash !== "" || !url.pathname.startsWith("/downloader/public/Hopper-") || !url.pathname.endsWith(`-Linux-demo${suffixes[family]}`)) return err(new HopperReleaseError("release_metadata", "The Hopper release is outside the official public Linux demo channel."));
181
+ return ok(parsed.data);
182
+ };
183
+ parseLinuxHopperReleases = (raw) => {
184
+ const feed = z.record(z.string(), z.unknown()).safeParse(raw);
185
+ if (!feed.success) return err(new HopperReleaseError("release_metadata", "The Hopper releases response is not an object."));
186
+ return ok({
187
+ deb: parseLinuxHopperRelease(feed.data[platforms.deb], "deb"),
188
+ rpm: parseLinuxHopperRelease(feed.data[platforms.rpm], "rpm"),
189
+ arch: parseLinuxHopperRelease(feed.data[platforms.arch], "arch")
190
+ });
191
+ };
192
+ })))();
193
+ }
194
+
195
+ //#endregion
196
+ //#region dist/process/DetachedPgpSignature.js
197
+ var DetachedPgpSignatureError, verifyDetachedPgpSignature;
198
+ function init_DetachedPgpSignature() {
199
+ return (init_DetachedPgpSignature = __esmMin((() => {
200
+ init_result();
201
+ DetachedPgpSignatureError = class extends Error {
202
+ reason;
203
+ _tag = "DetachedPgpSignatureError";
204
+ constructor(reason, message, options) {
205
+ super(message, options);
206
+ this.reason = reason;
207
+ this.name = this._tag;
208
+ }
209
+ };
210
+ verifyDetachedPgpSignature = async (bytes, detachedSignature, armoredPublicKey, primaryFingerprint, signal) => {
211
+ const cancelled = () => err(new DetachedPgpSignatureError("cancelled", "Package verification was cancelled."));
212
+ const isAborted = () => signal?.aborted === true;
213
+ if (isAborted()) return cancelled();
214
+ try {
215
+ const pgp = await import("openpgp");
216
+ const key = await pgp.readKey({ armoredKey: armoredPublicKey });
217
+ if (isAborted()) return cancelled();
218
+ const fingerprint = key.getFingerprint().toUpperCase();
219
+ if (fingerprint !== primaryFingerprint) return err(new DetachedPgpSignatureError("wrong_publisher", "The package signing key does not belong to the pinned publisher."));
220
+ const signature = await pgp.readSignature({ binarySignature: detachedSignature });
221
+ if (isAborted()) return cancelled();
222
+ if (signature.packets.length !== 1 || signature.packets[0]?.signatureType !== pgp.enums.signature.binary) return err(new DetachedPgpSignatureError("invalid_signature", "Expected one detached binary package signature."));
223
+ const verified = await pgp.verify({
224
+ message: await pgp.createMessage({ binary: bytes }),
225
+ signature,
226
+ verificationKeys: key,
227
+ format: "binary"
228
+ });
229
+ const signed = verified.signatures[0];
230
+ if (signed === undefined || verified.signatures.length !== 1) return err(new DetachedPgpSignatureError("invalid_signature", "The package has no unique verified signature."));
231
+ await signed.verified;
232
+ const signingKey = await key.getSigningKey(signed.keyID, signature.packets[0].created);
233
+ if (isAborted()) return cancelled();
234
+ return ok({
235
+ primaryFingerprint: fingerprint,
236
+ signingFingerprint: signingKey.getFingerprint().toUpperCase()
237
+ });
238
+ } catch (cause) {
239
+ if (isAborted()) return cancelled();
240
+ return err(new DetachedPgpSignatureError("invalid_signature", "The package signature could not be verified.", { cause }));
241
+ }
242
+ };
243
+ })))();
244
+ }
245
+
246
+ //#endregion
247
+ //#region dist/process/HopperLease.js
248
+ var HOPPER_TARGET_LEASE_DIRECTORY, acquireHopperTargetLease, acquireLinuxHopperApplicationLease, acquireHopperReleaseCacheLease, acquireLease, reserveRecovery, tryAcquireLease, ensureLeaseDirectory, bind, sendOwner, readOwner, closeServer;
249
+ function init_HopperLease() {
250
+ return (init_HopperLease = __esmMin((() => {
251
+ init_hopperErrors();
252
+ init_safeJson();
253
+ HOPPER_TARGET_LEASE_DIRECTORY = join("/tmp", `rea-hopper-${process.getuid?.() ?? 0}`);
254
+ acquireHopperTargetLease = async (input) => {
255
+ let targetPath;
256
+ try {
257
+ targetPath = await realpath(input.targetPath);
258
+ } catch (cause) {
259
+ throw new HopperStartError({
260
+ cause,
261
+ userMessage: `REA could not resolve Hopper target ${JSON.stringify(input.targetPath)} to a canonical path before reserving the document. Confirm that the target exists and its path is accessible.`
262
+ });
263
+ }
264
+ return acquireLease({
265
+ ...input,
266
+ identity: {
267
+ targetPath,
268
+ targetKind: input.targetKind,
269
+ loaderArgs: input.loaderArgs
270
+ }
271
+ });
272
+ };
273
+ acquireLinuxHopperApplicationLease = (input) => acquireLease({
274
+ ...input,
275
+ identity: { application: "linux-hopper-demo" }
276
+ });
277
+ acquireHopperReleaseCacheLease = async (input) => acquireLease({
278
+ runId: input.runId,
279
+ identity: {
280
+ cacheDirectory: await realpath(input.cacheDirectory),
281
+ launcherSha256: input.launcherSha256,
282
+ operation: "signed-package-retention"
283
+ }
284
+ });
285
+ acquireLease = async (input) => {
286
+ const directory = input.directory ?? HOPPER_TARGET_LEASE_DIRECTORY;
287
+ await ensureLeaseDirectory(directory);
288
+ const key = createHash("sha256").update(JSON.stringify(input.identity)).digest("hex").slice(0, 32);
289
+ const socketPath = join(directory, `${key}.sock`);
290
+ const owner = {
291
+ runId: input.runId,
292
+ processId: process.pid
293
+ };
294
+ const acquisition = await tryAcquireLease(socketPath, owner);
295
+ if (typeof acquisition !== "string") return acquisition;
296
+ const recoveryPath = `${socketPath}.recovery`;
297
+ await reserveRecovery(recoveryPath);
298
+ let recovered;
299
+ try {
300
+ recovered = await tryAcquireLease(socketPath, owner);
301
+ if (recovered === "stale") await rm(socketPath, { force: true });
302
+ if (typeof recovered === "string") recovered = await tryAcquireLease(socketPath, owner);
303
+ if (typeof recovered !== "string") return recovered;
304
+ throw new HopperStartError({ userMessage: "REA could not reserve Hopper for this request. Close competing REA sessions and retry." });
305
+ } finally {
306
+ try {
307
+ await rmdir(recoveryPath);
308
+ } catch (cause) {
309
+ if (typeof recovered !== "string" && recovered?.acquired) await recovered.lease.release();
310
+ throw new HopperStartError({
311
+ cause,
312
+ userMessage: `REA could not remove its Hopper recovery directory at ${JSON.stringify(recoveryPath)}. Check this directory's write access before retrying.`
313
+ });
314
+ }
315
+ }
316
+ };
317
+ reserveRecovery = async (recoveryPath) => {
318
+ try {
319
+ await mkdir(recoveryPath, { mode: 448 });
320
+ } catch (cause) {
321
+ const busy = typeof cause === "object" && cause !== null && Reflect.get(cause, "code") === "EEXIST";
322
+ throw new HopperStartError({
323
+ cause,
324
+ userMessage: busy ? `REA could not reserve Hopper lease recovery at ${JSON.stringify(recoveryPath)}; the existing socket was left unchanged. Retry after concurrent startup finishes. If recovery was interrupted, stop REA sessions and remove this recovery directory before retrying.` : `REA could not create its Hopper recovery directory at ${JSON.stringify(recoveryPath)}; the existing socket was left unchanged. Check the parent directory's write access before retrying.`
325
+ });
326
+ }
327
+ };
328
+ tryAcquireLease = async (socketPath, owner) => {
329
+ const server = createServer((socket) => sendOwner(socket, owner));
330
+ server.unref();
331
+ if (!await bind(server, socketPath)) {
332
+ const existingOwner = await readOwner(socketPath);
333
+ return typeof existingOwner === "string" ? existingOwner : {
334
+ acquired: false,
335
+ owner: existingOwner
336
+ };
337
+ }
338
+ try {
339
+ await chmod(socketPath, 384);
340
+ } catch (cause) {
341
+ await closeServer(server);
342
+ throw cause;
343
+ }
344
+ let released = false;
345
+ return {
346
+ acquired: true,
347
+ lease: {
348
+ socketPath,
349
+ release: async () => {
350
+ if (released) return;
351
+ await closeServer(server);
352
+ released = true;
353
+ }
354
+ }
355
+ };
356
+ };
357
+ ensureLeaseDirectory = async (directory) => {
358
+ try {
359
+ await mkdir(directory, {
360
+ recursive: true,
361
+ mode: 448
362
+ });
363
+ } catch (cause) {
364
+ throw new HopperStartError({
365
+ cause,
366
+ userMessage: "REA could not create its private Hopper lease directory."
367
+ });
368
+ }
369
+ let handle;
370
+ try {
371
+ handle = await open(directory, constants.O_RDONLY | (constants.O_DIRECTORY ?? 0) | (constants.O_NOFOLLOW ?? 0));
372
+ const directoryStat = await handle.stat();
373
+ if (directoryStat.isSymbolicLink() || directoryStat.isDirectory() === false || process.getuid !== undefined && directoryStat.uid !== process.getuid()) throw new HopperStartError({ userMessage: "REA's Hopper lease directory is not a private directory owned by this user." });
374
+ const posixPermissionsApply = process.getuid !== undefined;
375
+ if (posixPermissionsApply && (directoryStat.mode & 63) !== 0) {
376
+ await handle.chmod(448);
377
+ const afterChmod = await handle.stat();
378
+ if (afterChmod.isSymbolicLink() || afterChmod.isDirectory() === false || (afterChmod.mode & 63) !== 0) throw new HopperStartError({ userMessage: "REA's Hopper lease directory permissions could not be secured." });
379
+ }
380
+ } catch (cause) {
381
+ if (cause instanceof HopperStartError) throw cause;
382
+ const accessDenied = process.getuid !== undefined && cause instanceof Error && "code" in cause && cause.code === "EACCES";
383
+ throw new HopperStartError({
384
+ cause,
385
+ userMessage: accessDenied ? `REA could not access its Hopper lease directory at ${JSON.stringify(directory)}. Check its ownership and parent-directory access. For a directory you own, restore owner-only read, write, and search permissions (0700), then retry.` : "REA could not inspect its private Hopper lease directory."
386
+ });
387
+ } finally {
388
+ await handle?.close();
389
+ }
390
+ };
391
+ bind = (server, socketPath) => new Promise((resolveBind, reject) => {
392
+ const onError = (error) => {
393
+ server.removeListener("listening", onListening);
394
+ if (error.code === "EADDRINUSE") resolveBind(false);
395
+ else reject(error);
396
+ };
397
+ const onListening = () => {
398
+ server.removeListener("error", onError);
399
+ resolveBind(true);
400
+ };
401
+ server.once("error", onError);
402
+ server.once("listening", onListening);
403
+ server.listen(socketPath);
404
+ });
405
+ sendOwner = (socket, owner) => {
406
+ socket.end(`${JSON.stringify(owner)}\n`);
407
+ };
408
+ readOwner = (socketPath) => new Promise((resolveOwner, rejectOwner) => {
409
+ const socket = createConnection(socketPath);
410
+ let response = "";
411
+ let settled = false;
412
+ const fail = (reason, cause) => {
413
+ if (settled) return;
414
+ settled = true;
415
+ clearTimeout(timer);
416
+ socket.destroy();
417
+ rejectOwner(new HopperStartError({
418
+ cause,
419
+ userMessage: `REA could not verify the existing Hopper lease (${reason}); it was left unchanged. Retry when the owning REA session is responsive.`
420
+ }));
421
+ };
422
+ const timer = setTimeout(() => fail("owner response timed out"), 250);
423
+ const finish = (owner) => {
424
+ if (settled) return;
425
+ settled = true;
426
+ clearTimeout(timer);
427
+ socket.destroy();
428
+ resolveOwner(owner);
429
+ };
430
+ socket.on("data", (chunk) => {
431
+ response += chunk.toString("utf8");
432
+ const newline = response.indexOf("\n");
433
+ if (newline < 0) return;
434
+ const parsed = safeParseJson(response.slice(0, newline));
435
+ if (!parsed.ok) {
436
+ fail("malformed owner response");
437
+ return;
438
+ }
439
+ const value = parsed.value;
440
+ const runId = typeof value === "object" && value !== null ? Reflect.get(value, "runId") : undefined;
441
+ const processId = typeof value === "object" && value !== null ? Reflect.get(value, "processId") : undefined;
442
+ if (typeof runId === "string" && runId.length > 0 && typeof processId === "number" && Number.isSafeInteger(processId) && processId > 0) finish({
443
+ runId,
444
+ processId
445
+ });
446
+ else fail("invalid owner identity");
447
+ });
448
+ socket.on("error", (cause) => {
449
+ if (cause.code === "ENOENT") finish("missing");
450
+ else if (cause.code === "ECONNREFUSED") finish("stale");
451
+ else fail(cause.code ?? "owner connection failed", cause);
452
+ });
453
+ socket.on("end", () => fail("owner closed without a complete response"));
454
+ });
455
+ closeServer = (server) => new Promise((resolveClose, reject) => {
456
+ if (!server.listening) {
457
+ resolveClose();
458
+ return;
459
+ }
460
+ server.close((error) => error ? reject(error) : resolveClose());
461
+ });
462
+ })))();
463
+ }
464
+
465
+ //#endregion
466
+ //#region dist/application/LinuxHopperPublisher.js
467
+ var RELEASE_METADATA_BYTES, RELEASE_METADATA_TIMEOUT_MS, cacheRecordSchema, pendingCleanup, packageProofs, liveLauncherProofs, retainProof, linuxHopperReleaseCacheDirectory, LinuxHopperPublisher, retryLinuxHopperPublisherCleanup, decodeUtf8, releaseFailure, launcherIdentity;
468
+ function init_LinuxHopperPublisher() {
469
+ return (init_LinuxHopperPublisher = __esmMin((() => {
470
+ init_ArtifactResourceScope();
471
+ init_ArtifactReader();
472
+ init_homeDirectory();
473
+ init_result();
474
+ init_StableFileHash();
475
+ init_OwnedRegularFile();
476
+ init_BoundedFileBytes();
477
+ init_DetachedPgpSignature();
478
+ init_ExecFileOutput();
479
+ init_PrivateRuntimeRoot();
480
+ init_ProviderDeadline();
481
+ init_HopperLease();
482
+ init_HopperDownload();
483
+ init_HopperReleaseFeed();
484
+ init_RegularFileRead();
485
+ RELEASE_METADATA_BYTES = 1024 * 1024;
486
+ RELEASE_METADATA_TIMEOUT_MS = 1e4;
487
+ cacheRecordSchema = z.object({
488
+ format: z.literal("rea-signed-hopper-release-v1"),
489
+ family: z.enum([
490
+ "deb",
491
+ "rpm",
492
+ "arch"
493
+ ]),
494
+ release: z.unknown()
495
+ });
496
+ pendingCleanup = new Set();
497
+ packageProofs = new Map();
498
+ liveLauncherProofs = new Map();
499
+ retainProof = (cache, key, proof) => {
500
+ cache.delete(key);
501
+ cache.set(key, proof);
502
+ const oldest = cache.keys().next().value;
503
+ if (cache.size > 8 && oldest !== undefined) cache.delete(oldest);
504
+ };
505
+ linuxHopperReleaseCacheDirectory = (environment) => {
506
+ try {
507
+ const supplied = environment.XDG_CACHE_HOME || undefined;
508
+ if (supplied !== undefined && !isAbsolute(supplied)) return err(new HopperReleaseError("verification_unavailable", "XDG_CACHE_HOME must be an absolute filesystem path."));
509
+ return ok(join(supplied ?? join(homeDirectoryFromEnvironment(environment, "linux"), ".cache"), "rea", "hopper-releases"));
510
+ } catch (cause) {
511
+ return err(new HopperReleaseError("verification_unavailable", "The Hopper release cache location could not be resolved.", { cause }));
512
+ }
513
+ };
514
+ LinuxHopperPublisher = class {
515
+ environment;
516
+ packageFamily;
517
+ #resources = new ArtifactResourceScope();
518
+ #feed;
519
+ constructor(environment, packageFamily) {
520
+ this.environment = environment;
521
+ this.packageFamily = packageFamily;
522
+ }
523
+ get cacheRoot() {
524
+ const location = linuxHopperReleaseCacheDirectory(this.environment);
525
+ if (!location.ok) throw location.error;
526
+ return location.value;
527
+ }
528
+ async currentRelease(family, signal) {
529
+ try {
530
+ signal?.throwIfAborted();
531
+ if (this.#feed === undefined) {
532
+ const response = await downloadHopperPackage(HOPPER_RELEASES_URL, {
533
+ ...signal === undefined ? {} : { signal },
534
+ maxBytes: RELEASE_METADATA_BYTES,
535
+ timeoutMs: RELEASE_METADATA_TIMEOUT_MS
536
+ });
537
+ if (!response.ok) throw new HopperReleaseError("release_metadata", "The official Hopper release feed is unavailable.");
538
+ this.#feed = parseLinuxHopperReleases(JSON.parse(decodeUtf8(response.bytes)));
539
+ }
540
+ if (!this.#feed.ok) return this.#feed;
541
+ return this.#feed.value[family];
542
+ } catch (cause) {
543
+ return err(releaseFailure(cause, signal, "release_metadata"));
544
+ }
545
+ }
546
+ async verifyArchive(family, release, archive, signal, suppliedPublicKey) {
547
+ return this.#runOperation(signal, (resources) => this.#verifyArchive(family, release, archive, signal, suppliedPublicKey, resources));
548
+ }
549
+ async #verifyArchive(family, release, archive, signal, suppliedPublicKey, resources) {
550
+ try {
551
+ const bytes = await this.#read(archive, HOPPER_DOWNLOAD_BYTES, signal, resources);
552
+ if (bytes.length !== Number(release.file_length) || createHash("sha1").update(bytes).digest("hex") !== release.file_hash) return err(new HopperReleaseError("integrity", "The Hopper package does not match the selected release bytes."));
553
+ let publicKey = suppliedPublicKey;
554
+ if (publicKey === undefined) {
555
+ const response = await downloadHopperPackage(HOPPER_PUBLIC_KEY_URL, {
556
+ ...signal === undefined ? {} : { signal },
557
+ maxBytes: RELEASE_METADATA_BYTES,
558
+ timeoutMs: RELEASE_METADATA_TIMEOUT_MS
559
+ });
560
+ if (!response.ok) throw new HopperReleaseError("verification_unavailable", "The official Hopper public key is unavailable.");
561
+ publicKey = decodeUtf8(response.bytes);
562
+ }
563
+ const packageSha256 = createHash("sha256").update(bytes).digest("hex");
564
+ const proofKey = createHash("sha256").update(JSON.stringify([
565
+ family,
566
+ packageSha256,
567
+ publicKey,
568
+ release.signature,
569
+ release.main_exe_hash
570
+ ])).digest("hex");
571
+ signal?.throwIfAborted();
572
+ const existingProof = packageProofs.get(proofKey);
573
+ if (existingProof !== undefined) return ok({
574
+ release,
575
+ family,
576
+ packageSha256,
577
+ publicKey,
578
+ ...existingProof
579
+ });
580
+ const verified = await verifyDetachedPgpSignature(bytes, Buffer.from(release.signature, "base64"), publicKey, HOPPER_LINUX_PRIMARY_FINGERPRINT, signal);
581
+ if (!verified.ok) return err(new HopperReleaseError(verified.error.reason === "cancelled" ? "cancelled" : "publisher_verification_failed", verified.error.message, { cause: verified.error }));
582
+ const mainExeHash = await this.#withTemporary(async (root, temporaryResources) => {
583
+ const snapshot = join(root, "package");
584
+ await writeFile(snapshot, bytes, {
585
+ flag: "wx",
586
+ mode: 384
587
+ });
588
+ return this.#packageLauncherHash(family, snapshot, root, signal, temporaryResources);
589
+ });
590
+ if (mainExeHash !== release.main_exe_hash) return err(new HopperReleaseError("integrity", `The signed ${family} package launcher SHA-256 ${mainExeHash} differs from the release main_exe_hash ${release.main_exe_hash}.`));
591
+ retainProof(packageProofs, proofKey, verified.value);
592
+ return ok({
593
+ release,
594
+ family,
595
+ packageSha256,
596
+ publicKey,
597
+ ...verified.value
598
+ });
599
+ } catch (cause) {
600
+ return err(releaseFailure(cause, signal, "verification_unavailable"));
601
+ }
602
+ }
603
+ /** Durable evidence contains the signed bytes; an editable digest receipt cannot authorize a build. */
604
+ async retainVerifiedArchive(verified, archive, signal) {
605
+ return this.#runOperation(signal, (resources) => this.#retainVerifiedArchive(verified, archive, signal, resources));
606
+ }
607
+ async #retainVerifiedArchive(verified, archive, signal, resources) {
608
+ try {
609
+ signal?.throwIfAborted();
610
+ await mkdir(this.cacheRoot, {
611
+ recursive: true,
612
+ mode: 448
613
+ });
614
+ const parent = await lstat(this.cacheRoot);
615
+ if (!parent.isDirectory() || parent.isSymbolicLink() || parent.uid !== process.getuid?.()) throw new HopperReleaseError("verification_unavailable", "The Hopper release cache is not a caller-owned directory.");
616
+ const target = join(this.cacheRoot, verified.release.main_exe_hash);
617
+ const lease = await this.#acquireCacheLease(verified.release.main_exe_hash, signal);
618
+ await this.#withOwnedResource({
619
+ kind: "lease",
620
+ resource: lease.socketPath ?? "hopper-release-cache-lease",
621
+ lease
622
+ }, async () => {
623
+ signal?.throwIfAborted();
624
+ await this.#withTemporary(async (stage, temporaryResources) => {
625
+ await copyFile(archive, join(stage, "archive"));
626
+ if ((await this.#hashFileWithResources(join(stage, "archive"), signal, temporaryResources)).sha256 !== verified.packageSha256) throw new HopperReleaseError("integrity", "The verified package changed before cache retention.");
627
+ await writeFile(join(stage, "public-key.asc"), verified.publicKey, {
628
+ flag: "wx",
629
+ mode: 384
630
+ });
631
+ await writeFile(join(stage, "release.json"), JSON.stringify({
632
+ format: "rea-signed-hopper-release-v1",
633
+ family: verified.family,
634
+ release: verified.release
635
+ }) + "\n", {
636
+ flag: "wx",
637
+ mode: 384
638
+ });
639
+ await this.#publishCacheStage(stage, target, verified.release.main_exe_hash, signal, resources);
640
+ }, this.cacheRoot);
641
+ });
642
+ return ok(undefined);
643
+ } catch (cause) {
644
+ return err(releaseFailure(cause, signal, "verification_unavailable"));
645
+ }
646
+ }
647
+ async #publishCacheStage(stage, target, digest, signal, resources) {
648
+ const existing = await this.#cachedPackage(digest, signal, resources);
649
+ if (existing.ok) return;
650
+ if (existing.error.reason === "cache_missing") {
651
+ await rename(stage, target);
652
+ return;
653
+ }
654
+ if (![
655
+ "integrity",
656
+ "release_metadata",
657
+ "publisher_verification_failed"
658
+ ].includes(existing.error.reason)) throw existing.error;
659
+ signal?.throwIfAborted();
660
+ const previous = await lstat(target);
661
+ if (!previous.isDirectory() || previous.isSymbolicLink() || previous.uid !== process.getuid?.()) throw existing.error;
662
+ const backup = `${target}.backup-${randomUUID()}`;
663
+ await rename(target, backup);
664
+ try {
665
+ const moved = await lstat(backup);
666
+ if (moved.dev !== previous.dev || moved.ino !== previous.ino) throw new Error("The Hopper cache entry changed during repair.");
667
+ await rename(stage, target);
668
+ } catch (cause) {
669
+ const replacement = await this.#cachedPackage(digest, signal, resources);
670
+ if (replacement.ok) return;
671
+ await this.#failedCachePublication(target, backup, [cause, replacement.error], replacement.error.reason === "cleanup_failed");
672
+ }
673
+ }
674
+ async #acquireCacheLease(digest, signal) {
675
+ const deadline = performance.now() + 12e4;
676
+ const runId = randomUUID();
677
+ let delay = 25;
678
+ while (true) {
679
+ signal?.throwIfAborted();
680
+ const acquired = await acquireHopperReleaseCacheLease({
681
+ cacheDirectory: this.cacheRoot,
682
+ launcherSha256: digest,
683
+ runId
684
+ });
685
+ if (acquired.acquired) return acquired.lease;
686
+ const remaining = deadline - performance.now();
687
+ if (remaining <= 0) throw new HopperReleaseError("verification_unavailable", "Another approved Hopper setup still owns this release cache. Retry after it finishes.");
688
+ await waitForAbortableDelay(Math.min(delay, remaining), signal);
689
+ delay = Math.min(delay * 2, 200);
690
+ }
691
+ }
692
+ async #failedCachePublication(target, backup, causes, cleanupFailed = false) {
693
+ let preserved = backup;
694
+ try {
695
+ await rename(backup, target);
696
+ preserved = target;
697
+ } catch (cause) {
698
+ causes.push(cause);
699
+ }
700
+ throw new HopperReleaseError(cleanupFailed ? "cleanup_failed" : "verification_unavailable", `The Hopper cache repair did not finish; previous evidence is preserved at ${preserved}. Retry approved setup.`, { cause: new AggregateError(causes, "Hopper cache publication and recovery outcomes") });
701
+ }
702
+ async inspectLauncher(path, signal) {
703
+ return this.#runOperation(signal, (resources) => this.#inspectLauncher(path, signal, resources));
704
+ }
705
+ async #inspectLauncher(path, signal, resources) {
706
+ try {
707
+ const observed = await this.#hashFileWithResources(path, signal, resources);
708
+ const cached = await this.#cachedPackage(observed.sha256, signal, resources);
709
+ if (cached.ok) {
710
+ if ((await this.#hashFileWithResources(path, signal, resources)).sha256 !== observed.sha256) return err(new HopperReleaseError("integrity", "The Hopper launcher changed during publisher verification."));
711
+ return ok(launcherIdentity(cached.value, "signed_package_cache"));
712
+ }
713
+ if (cached.error.reason !== "cache_missing") return cached;
714
+ signal?.throwIfAborted();
715
+ const processProof = liveLauncherProofs.get(observed.sha256);
716
+ if (processProof !== undefined) return ok({
717
+ ...processProof,
718
+ source: "verified_process_cache"
719
+ });
720
+ const family = await this.packageFamily();
721
+ if (family === undefined) return err(new HopperReleaseError("verification_unavailable", "No native Linux package family is available for Hopper publisher verification."));
722
+ const selected = await this.currentRelease(family, signal);
723
+ if (!selected.ok) return selected;
724
+ if (selected.value.main_exe_hash !== observed.sha256) return err(new HopperReleaseError("unsupported_hopper_build", "The selected Hopper launcher does not match an authenticated cached release or the official current Linux demo."));
725
+ const verified = await this.#withTemporary(async (root, temporaryResources) => {
726
+ const response = await downloadHopperPackage(selected.value.filename, signal === undefined ? {} : { signal });
727
+ if (!response.ok) throw new HopperReleaseError("download", "The official Hopper package is unavailable for publisher verification.");
728
+ const archive = join(root, "archive");
729
+ await writeFile(archive, response.bytes, {
730
+ flag: "wx",
731
+ mode: 384
732
+ });
733
+ const verified = await this.#verifyArchive(family, selected.value, archive, signal, undefined, temporaryResources);
734
+ if (!verified.ok) throw verified.error;
735
+ return verified.value;
736
+ });
737
+ if ((await this.#hashFileWithResources(path, signal, resources)).sha256 !== observed.sha256) return err(new HopperReleaseError("integrity", "The Hopper launcher changed during publisher verification."));
738
+ const identity = launcherIdentity(verified, "signed_vendor_release");
739
+ retainProof(liveLauncherProofs, observed.sha256, identity);
740
+ return ok(identity);
741
+ } catch (cause) {
742
+ return err(releaseFailure(cause, signal, "verification_unavailable"));
743
+ }
744
+ }
745
+ async close() {
746
+ try {
747
+ await this.#resources.close();
748
+ pendingCleanup.delete(this.#resources);
749
+ } catch (cause) {
750
+ pendingCleanup.add(this.#resources);
751
+ throw cause;
752
+ }
753
+ }
754
+ /** Admit once at the publisher boundary; file reads use this operation's child scope. */
755
+ async #runOperation(signal, operation) {
756
+ try {
757
+ return await this.#resources.run(async () => {
758
+ const resources = new ArtifactResourceScope();
759
+ let result;
760
+ try {
761
+ result = await operation(resources);
762
+ } catch (cause) {
763
+ result = err(releaseFailure(cause, signal, "verification_unavailable"));
764
+ }
765
+ const cleanup = await resources.close().then(() => ({ ok: true }), (cause) => ({
766
+ ok: false,
767
+ cause
768
+ }));
769
+ if (!cleanup.ok) {
770
+ const owner = {
771
+ kind: "lease",
772
+ resource: "hopper-publisher-operation-resources",
773
+ lease: { release: () => resources.close() }
774
+ };
775
+ this.#resources.retain(owner);
776
+ pendingCleanup.add(this.#resources);
777
+ throw new HopperReleaseError("cleanup_failed", "Hopper publisher retained operation resource cleanup.", { cause: new AggregateError(result.ok ? [cleanup.cause] : [result.error, cleanup.cause], "Publisher operation and resource cleanup outcomes") });
778
+ }
779
+ return result;
780
+ });
781
+ } catch (cause) {
782
+ return err(releaseFailure(cause, signal, "verification_unavailable"));
783
+ }
784
+ }
785
+ /** Hash an installed launcher under this publisher's cleanup lifetime. */
786
+ async hashLauncher(path) {
787
+ const result = await this.#runOperation(undefined, async (resources) => ok((await this.#hashFileWithResources(path, undefined, resources)).sha256));
788
+ if (!result.ok) throw result.error;
789
+ return result.value;
790
+ }
791
+ async #hashFileWithResources(path, signal, resources) {
792
+ let retainedOwner;
793
+ try {
794
+ return await hashStableFile(path, {
795
+ ...signal === undefined ? {} : { signal },
796
+ retainFailedClose: (handle) => {
797
+ retainedOwner = {
798
+ kind: "file-handle",
799
+ resource: path,
800
+ handle
801
+ };
802
+ resources.retain(retainedOwner);
803
+ if (resources === this.#resources) pendingCleanup.add(resources);
804
+ }
805
+ });
806
+ } catch (cause) {
807
+ if (!(cause instanceof RegularFileCleanupFailure)) throw cause;
808
+ const hashFailure = cause;
809
+ const owner = retainedOwner ?? {
810
+ kind: "file-handle",
811
+ resource: path,
812
+ handle: hashFailure.owner
813
+ };
814
+ const released = await resources.release(owner);
815
+ if (released.kind === "failed") {
816
+ if (resources === this.#resources) pendingCleanup.add(resources);
817
+ throw new HopperReleaseError("cleanup_failed", `Hopper publisher retained file descriptor cleanup for ${path}.`, { cause: new AggregateError([cause, released.cause], "Stable file hash and descriptor cleanup failed", { cause }) });
818
+ }
819
+ if (hashFailure.outcome.kind === "failed") {
820
+ if (regularFileCancellation(hashFailure) !== undefined) throw hashFailure.outcome.cause;
821
+ throw new StableFileHashFailure(path, hashFailure.outcome.cause);
822
+ }
823
+ const cancellation = regularFileCancellation(hashFailure);
824
+ if (cancellation !== undefined) throw new RegularFileCancelled(path, hashFailure.owner, {
825
+ outcome: hashFailure.outcome,
826
+ reason: cancellation.reason
827
+ });
828
+ return hashFailure.outcome.value;
829
+ }
830
+ }
831
+ async #cachedPackage(digest, signal, resources) {
832
+ try {
833
+ const root = join(this.cacheRoot, digest);
834
+ try {
835
+ const directory = await lstat(root);
836
+ if (!directory.isDirectory() || directory.isSymbolicLink()) throw new HopperReleaseError("integrity", "The retained Hopper cache entry is not a regular directory.");
837
+ } catch (cause) {
838
+ if (cause instanceof Error && Reflect.get(cause, "code") === "ENOENT") {
839
+ return err(new HopperReleaseError("cache_missing", "No retained signed Hopper package identifies this launcher.", { cause }));
840
+ }
841
+ throw cause;
842
+ }
843
+ for (const name of [
844
+ "release.json",
845
+ "public-key.asc",
846
+ "archive"
847
+ ]) await this.#assertCacheFile(join(root, name));
848
+ const metadata = await this.#read(join(root, "release.json"), RELEASE_METADATA_BYTES, signal, resources);
849
+ let value;
850
+ try {
851
+ value = JSON.parse(decodeUtf8(metadata));
852
+ } catch (cause) {
853
+ throw new HopperReleaseError("release_metadata", "The retained Hopper package metadata is malformed.", { cause });
854
+ }
855
+ const parsed = cacheRecordSchema.safeParse(value);
856
+ if (!parsed.success) throw new HopperReleaseError("release_metadata", "The retained Hopper package metadata is malformed.");
857
+ const release = parseLinuxHopperRelease(parsed.data.release, parsed.data.family);
858
+ if (!release.ok) return release;
859
+ if (release.value.main_exe_hash !== digest) throw new HopperReleaseError("integrity", "The retained Hopper metadata does not identify this launcher.");
860
+ const keyBytes = await this.#read(join(root, "public-key.asc"), RELEASE_METADATA_BYTES, signal, resources);
861
+ let key;
862
+ try {
863
+ key = decodeUtf8(keyBytes);
864
+ } catch (cause) {
865
+ throw new HopperReleaseError("publisher_verification_failed", "The retained Hopper public key is malformed.", { cause });
866
+ }
867
+ return this.#verifyArchive(parsed.data.family, release.value, join(root, "archive"), signal, key, resources);
868
+ } catch (cause) {
869
+ return err(releaseFailure(cause, signal, "verification_unavailable"));
870
+ }
871
+ }
872
+ async #assertCacheFile(path) {
873
+ try {
874
+ const stats = await lstat(path);
875
+ if (!stats.isFile() || stats.isSymbolicLink()) throw new HopperReleaseError("integrity", `Required Hopper evidence is not a regular file: ${path}.`);
876
+ } catch (cause) {
877
+ if (cause instanceof Error && Reflect.get(cause, "code") === "ENOENT") throw new HopperReleaseError("integrity", `Required Hopper evidence is missing: ${path}.`, { cause });
878
+ throw cause;
879
+ }
880
+ }
881
+ async #packageLauncherHash(family, archive, root, signal, resources) {
882
+ const commandOptions = {
883
+ env: this.environment,
884
+ signal,
885
+ timeout: 12e4,
886
+ stopSignal: "SIGKILL",
887
+ maxBuffer: RELEASE_METADATA_BYTES
888
+ };
889
+ if (family === "rpm") {
890
+ const output = await execFileOutput("rpm", [
891
+ "-qp",
892
+ "--nosignature",
893
+ "--nodigest",
894
+ "--qf",
895
+ "%{FILEDIGESTALGO}\n[%{FILENAMES} %{FILEDIGESTS}\n]",
896
+ archive
897
+ ], commandOptions);
898
+ const rows = output.stdout.split("\n");
899
+ if (rows.shift() !== "8") throw new HopperReleaseError("integrity", "The signed RPM header does not use SHA-256 file digests.");
900
+ const matches = rows.filter((row) => row.startsWith("/opt/hopper/bin/Hopper "));
901
+ const digest = matches[0]?.split(" ")[1];
902
+ if (matches.length !== 1 || digest === undefined || !/^[a-f0-9]{64}$/u.test(digest)) throw new HopperReleaseError("integrity", "The signed RPM header has no unique Hopper launcher digest.");
903
+ return digest;
904
+ }
905
+ const extracted = join(root, "extracted");
906
+ await mkdir(extracted, { mode: 448 });
907
+ if (family === "deb") await execFileOutput("dpkg-deb", [
908
+ "--extract",
909
+ archive,
910
+ extracted
911
+ ], commandOptions);
912
+ else await execFileOutput("tar", [
913
+ "-xf",
914
+ archive,
915
+ "-C",
916
+ extracted,
917
+ "--",
918
+ "opt/hopper/bin/Hopper"
919
+ ], commandOptions);
920
+ return (await this.#hashFileWithResources(join(extracted, "opt", "hopper", "bin", "Hopper"), signal, resources)).sha256;
921
+ }
922
+ #read(path, limit, signal, resources) {
923
+ return withRegularFile(path, async (handle, stats) => {
924
+ if (stats.size > limit) throw new HopperReleaseError("integrity", "Retained Hopper evidence exceeds its resource byte budget.");
925
+ const bytes = await readBoundedFileBytes(handle, stats.size, signal);
926
+ if (bytes === undefined) throw new HopperReleaseError("integrity", "Retained Hopper evidence changed during inspection.");
927
+ return bytes;
928
+ }, {
929
+ signal,
930
+ symlinks: "reject",
931
+ resources
932
+ }).catch((cause) => {
933
+ if (resources === this.#resources && cause instanceof RegularFileCleanupFailure) pendingCleanup.add(resources);
934
+ throw cause;
935
+ });
936
+ }
937
+ async #withTemporary(operation, parent) {
938
+ const root = await PrivateRuntimeRoot.create({
939
+ prefix: "rea-hopper-publisher-",
940
+ ...parent === undefined ? {} : { parent }
941
+ });
942
+ const temporaryResources = new ArtifactResourceScope();
943
+ const dependency = {
944
+ kind: "lease",
945
+ resource: root.path,
946
+ lease: { release: async () => {
947
+ await temporaryResources.close();
948
+ await root.close();
949
+ } }
950
+ };
951
+ let outcome;
952
+ try {
953
+ outcome = {
954
+ ok: true,
955
+ value: await operation(root.path, temporaryResources)
956
+ };
957
+ } catch (cause) {
958
+ outcome = {
959
+ ok: false,
960
+ cause
961
+ };
962
+ }
963
+ const released = await temporaryResources.close().then(() => ({ ok: true }), (cause) => ({
964
+ ok: false,
965
+ cause
966
+ }));
967
+ if (!released.ok) {
968
+ this.#resources.retain(dependency);
969
+ pendingCleanup.add(this.#resources);
970
+ throw new HopperReleaseError("cleanup_failed", `Hopper publisher verification retained temporary cleanup ownership for ${root.path}.`, { cause: new AggregateError(outcome.ok ? [released.cause] : [outcome.cause, released.cause], "Temporary operation and descendant cleanup outcomes") });
971
+ }
972
+ try {
973
+ await root.close();
974
+ } catch (cleanupCause) {
975
+ this.#resources.retain(dependency);
976
+ pendingCleanup.add(this.#resources);
977
+ throw new HopperReleaseError("cleanup_failed", `Hopper publisher verification retained temporary cleanup ownership for ${root.path}.`, { cause: new AggregateError(outcome.ok ? [cleanupCause] : [outcome.cause, cleanupCause], "Temporary operation and cleanup outcomes") });
978
+ }
979
+ if (!outcome.ok) throw outcome.cause;
980
+ return outcome.value;
981
+ }
982
+ async #withOwnedResource(owner, operation) {
983
+ let outcome;
984
+ try {
985
+ outcome = {
986
+ ok: true,
987
+ value: await operation()
988
+ };
989
+ } catch (cause) {
990
+ outcome = {
991
+ ok: false,
992
+ cause
993
+ };
994
+ }
995
+ if (this.#resources.hasPending) {
996
+ this.#resources.retain(owner);
997
+ pendingCleanup.add(this.#resources);
998
+ throw new HopperReleaseError("cleanup_failed", `Hopper publisher verification retained cleanup ownership for ${owner.resource}.`, { cause: new AggregateError(outcome.ok ? [] : [outcome.cause], "Publisher operation and descendant cleanup outcomes") });
999
+ }
1000
+ const cleanup = await this.#resources.release(owner);
1001
+ if (cleanup.kind === "failed") {
1002
+ pendingCleanup.add(this.#resources);
1003
+ const causes = outcome.ok ? [cleanup.cause] : [outcome.cause, cleanup.cause];
1004
+ throw new HopperReleaseError("cleanup_failed", `Hopper publisher verification retained cleanup ownership for ${owner.resource}.`, { cause: new AggregateError(causes, "Publisher inspection and cleanup outcomes") });
1005
+ }
1006
+ if (!outcome.ok) throw outcome.cause;
1007
+ return outcome.value;
1008
+ }
1009
+ };
1010
+ retryLinuxHopperPublisherCleanup = async () => {
1011
+ const causes = [];
1012
+ const observations = [];
1013
+ for (const scope of pendingCleanup) {
1014
+ try {
1015
+ await scope.close();
1016
+ pendingCleanup.delete(scope);
1017
+ } catch (cause) {
1018
+ causes.push(cause);
1019
+ observations.push(ArtifactReaderFailure.cleanupObservation(cause, "hopper-publisher-verification"));
1020
+ }
1021
+ }
1022
+ if (causes.length > 0) {
1023
+ const cleanup = {
1024
+ reason: observations.map(({ reason }) => reason).join("; "),
1025
+ resources: [...new Set(observations.flatMap(({ resources }) => resources))]
1026
+ };
1027
+ throw new ArtifactReaderFailure("unavailable", `Hopper publisher cleanup remains incomplete: ${cleanup.resources.join(", ")}`, {
1028
+ cause: new AggregateError(causes, "Hopper publisher cleanup failures"),
1029
+ cleanup
1030
+ });
1031
+ }
1032
+ };
1033
+ decodeUtf8 = (bytes) => new TextDecoder("utf-8", { fatal: true }).decode(bytes);
1034
+ releaseFailure = (cause, signal, fallback) => {
1035
+ if (cause instanceof HopperReleaseError) return cause;
1036
+ if (cause instanceof ArtifactReaderFailure && cause.cleanup !== undefined) return new HopperReleaseError("cleanup_failed", "Hopper publisher cleanup remains incomplete.", { cause });
1037
+ const cancellation = regularFileCancellation(cause);
1038
+ if (cancellation !== undefined) return new HopperReleaseError("cancelled", "Hopper publisher verification was cancelled.", { cause: cancellation.reason });
1039
+ if (!(cause instanceof StableFileHashFailure) && signal?.aborted === true) return new HopperReleaseError("cancelled", "Hopper publisher verification was cancelled.", { cause });
1040
+ return new HopperReleaseError(fallback, "Hopper publisher verification could not complete.", { cause });
1041
+ };
1042
+ launcherIdentity = (verified, source) => ({
1043
+ sha256: verified.release.main_exe_hash,
1044
+ version: verified.release.version,
1045
+ primaryFingerprint: verified.primaryFingerprint,
1046
+ signingFingerprint: verified.signingFingerprint,
1047
+ source
1048
+ });
1049
+ })))();
1050
+ }
1051
+
1052
+ //#endregion
1053
+ //#region dist/application/LinuxHopper.js
1054
+ var PACKAGE_MANAGER_OUTPUT_BYTES, linuxHopperInstallDisclosure, supportsReaHost, LinuxHopperTemporaryCleanupOwner, parseLinuxDistribution, readLinuxDistribution, installLinuxHopper, linuxHopperLauncherPath, REA_MANAGED_LINUX_HOPPER_LAUNCHER, systemLinuxHopperLauncherCandidates, linuxHopperLauncherCandidates, systemLinuxHopperInstallHost, systemLinuxHopperPublisher, inspectLinuxHopperLauncher, linuxSharedLibrariesAvailable, installSystemPackage, formatCommandForDisplay, linuxPackageManagerCommands, packageFamilyFor, versionAtLeast, isAbortCause;
1055
+ function init_LinuxHopper() {
1056
+ return (init_LinuxHopper = __esmMin((() => {
1057
+ init_ExecFileBoundedOutput();
1058
+ init_ExecFileOutput();
1059
+ init_ArtifactReader();
1060
+ init_HopperDownload();
1061
+ init_OwnedRegularFile();
1062
+ init_result();
1063
+ init_HopperReleaseFeed();
1064
+ init_LinuxHopperPublisher();
1065
+ PACKAGE_MANAGER_OUTPUT_BYTES = 64 * 1024;
1066
+ linuxHopperInstallDisclosure = (family, isRoot) => {
1067
+ return {
1068
+ networkOrigins: [
1069
+ HOPPER_RELEASES_URL,
1070
+ HOPPER_PUBLIC_KEY_URL,
1071
+ HOPPER_DOWNLOAD_PREFIX
1072
+ ],
1073
+ integrity: `Detached PGP signature · primary ${HOPPER_LINUX_PRIMARY_FINGERPRINT} · package byte identity and installed launcher SHA-256 from the official feed`,
1074
+ commands: linuxPackageManagerCommands(family, `<verified-hopper.${family}>`, isRoot).map(({ executable, args }) => formatCommandForDisplay(executable, args))
1075
+ };
1076
+ };
1077
+ supportsReaHost = (distribution) => distribution?.packageFamily !== undefined;
1078
+ LinuxHopperTemporaryCleanupOwner = class {
1079
+ pending = new Map();
1080
+ retain(failure) {
1081
+ this.pending.set(failure.path, failure);
1082
+ }
1083
+ async retry(cleanup) {
1084
+ const failures = [];
1085
+ for (const path of this.pending.keys()) {
1086
+ try {
1087
+ await cleanup(path);
1088
+ this.pending.delete(path);
1089
+ } catch (cause) {
1090
+ const reason = cause instanceof Error ? cause.message : String(cause);
1091
+ failures.push(`Linux Hopper temporary cleanup failed for ${path}: ${reason}`);
1092
+ }
1093
+ }
1094
+ return failures.length === 0 ? undefined : failures.join("; ");
1095
+ }
1096
+ };
1097
+ parseLinuxDistribution = (text) => {
1098
+ const fields = new Map();
1099
+ for (const line of text.split("\n")) {
1100
+ const match = /^([A-Z_]+)=(.*)$/u.exec(line.trim());
1101
+ if (match === null) continue;
1102
+ const key = match[1];
1103
+ const encoded = match[2];
1104
+ if (key === undefined || encoded === undefined) continue;
1105
+ const quote = encoded[0];
1106
+ const quoted = (quote === "'" || quote === "\"") && encoded.endsWith(quote);
1107
+ const value = !quoted ? encoded : quote === "'" ? encoded.slice(1, -1) : encoded.slice(1, -1).replace(/\\(["\\$`])/gu, "$1");
1108
+ fields.set(key, value);
1109
+ }
1110
+ const id = (fields.get("ID") ?? "unknown").toLowerCase();
1111
+ const versionId = fields.get("VERSION_ID");
1112
+ const packageFamily = packageFamilyFor(id, fields.get("ID_LIKE"));
1113
+ const hopperSetupSupported = packageFamily !== undefined && (id === "arch" || id === "cachyos" || id === "omarchy" && packageFamily === "arch" || id === "ubuntu" && versionAtLeast(versionId, 24) || id === "fedora" && versionAtLeast(versionId, 41) || id === "nobara" && versionAtLeast(versionId, 44));
1114
+ const identity = {
1115
+ id,
1116
+ ...versionId === undefined ? {} : { versionId }
1117
+ };
1118
+ return hopperSetupSupported ? {
1119
+ ...identity,
1120
+ packageFamily,
1121
+ hopperSetupSupported: true
1122
+ } : {
1123
+ ...identity,
1124
+ packageFamily,
1125
+ hopperSetupSupported: false
1126
+ };
1127
+ };
1128
+ readLinuxDistribution = async () => {
1129
+ try {
1130
+ return parseLinuxDistribution(await readFile("/etc/os-release", "utf8"));
1131
+ } catch (cause) {
1132
+ void cause;
1133
+ return undefined;
1134
+ }
1135
+ };
1136
+ installLinuxHopper = async (host = systemLinuxHopperInstallHost(process.env), options = {}) => {
1137
+ if (options.signal?.aborted === true) return {
1138
+ status: "failed",
1139
+ reason: "cancelled"
1140
+ };
1141
+ const distribution = await host.distribution();
1142
+ if (distribution?.hopperSetupSupported !== true) return {
1143
+ status: "failed",
1144
+ reason: "unsupported_host"
1145
+ };
1146
+ let temporary;
1147
+ let result;
1148
+ try {
1149
+ result = await (async () => {
1150
+ const selected = await host.release(distribution.packageFamily, options.signal);
1151
+ if (!selected.ok) return {
1152
+ status: "failed",
1153
+ verificationFailure: selected.error,
1154
+ reason: selected.error.reason === "cancelled" ? "cancelled" : "release_metadata"
1155
+ };
1156
+ const release = selected.value;
1157
+ const archiveDownload = await host.download(release.filename, options);
1158
+ if (!archiveDownload.ok) return {
1159
+ status: "failed",
1160
+ reason: "download"
1161
+ };
1162
+ temporary = await host.createTemporaryDirectory();
1163
+ const archive = join(temporary, `hopper.${distribution.packageFamily}`);
1164
+ await host.writeArchive(archive, archiveDownload.bytes);
1165
+ const verified = await host.verifyArchive(distribution.packageFamily, release, archive, options.signal);
1166
+ if (!verified.ok) return {
1167
+ status: "failed",
1168
+ verificationFailure: verified.error,
1169
+ reason: verified.error.reason === "cache_missing" ? "verification_unavailable" : verified.error.reason
1170
+ };
1171
+ const retained = await host.retainVerifiedArchive(verified.value, archive, options.signal);
1172
+ if (!retained.ok) return {
1173
+ status: "failed",
1174
+ verificationFailure: retained.error,
1175
+ reason: retained.error.reason === "cache_missing" ? "verification_unavailable" : retained.error.reason
1176
+ };
1177
+ if (options.signal?.aborted === true) return {
1178
+ status: "failed",
1179
+ reason: "cancelled"
1180
+ };
1181
+ const install = await host.installPackage(distribution.packageFamily, archive);
1182
+ if (install.status === "failed") return {
1183
+ status: "failed",
1184
+ reason: "authorization_or_package_manager",
1185
+ packageFailure: install.failure
1186
+ };
1187
+ const launcherPath = "/opt/hopper/bin/Hopper";
1188
+ const launcherStatus = await host.launcherStatus(launcherPath, release.main_exe_hash);
1189
+ if (launcherStatus !== "ready") return {
1190
+ status: "failed",
1191
+ reason: launcherStatus === "missing" ? "launcher_missing" : launcherStatus
1192
+ };
1193
+ return {
1194
+ status: "installed",
1195
+ launcherPath
1196
+ };
1197
+ })();
1198
+ } catch (cause) {
1199
+ result = {
1200
+ status: "failed",
1201
+ reason: isAbortCause(cause) ? "cancelled" : "download"
1202
+ };
1203
+ }
1204
+ if (temporary === undefined) return result;
1205
+ try {
1206
+ await host.cleanup(temporary);
1207
+ return result;
1208
+ } catch (cause) {
1209
+ return {
1210
+ ...result,
1211
+ cleanupFailure: {
1212
+ path: temporary,
1213
+ reason: cause instanceof Error ? cause.message : String(cause)
1214
+ }
1215
+ };
1216
+ }
1217
+ };
1218
+ linuxHopperLauncherPath = (home) => join(home, ".local/share/rea/hopper/bin/Hopper");
1219
+ REA_MANAGED_LINUX_HOPPER_LAUNCHER = "/opt/hopper/bin/Hopper";
1220
+ systemLinuxHopperLauncherCandidates = ["/opt/hopper-v4/bin/hopper", "/usr/bin/hopper"];
1221
+ linuxHopperLauncherCandidates = (home) => [
1222
+ REA_MANAGED_LINUX_HOPPER_LAUNCHER,
1223
+ linuxHopperLauncherPath(home),
1224
+ ...systemLinuxHopperLauncherCandidates
1225
+ ];
1226
+ systemLinuxHopperInstallHost = (environment) => {
1227
+ const publisher = systemLinuxHopperPublisher(environment);
1228
+ return {
1229
+ distribution: readLinuxDistribution,
1230
+ release: (family, signal) => publisher.currentRelease(family, signal),
1231
+ download: downloadHopperPackage,
1232
+ createTemporaryDirectory: () => mkdtemp(join(tmpdir(), "rea-hopper-")),
1233
+ writeArchive: (path, bytes) => writeFile(path, bytes, { mode: 384 }),
1234
+ installPackage: (family, archive) => installSystemPackage(family, archive, environment),
1235
+ verifyArchive: (family, release, archive, signal) => publisher.verifyArchive(family, release, archive, signal),
1236
+ retainVerifiedArchive: (verified, archive, signal) => publisher.retainVerifiedArchive(verified, archive, signal),
1237
+ async launcherStatus(path, expectedSha256) {
1238
+ try {
1239
+ await access(path);
1240
+ const linked = await execFileOutput("ldd", [path], { env: environment });
1241
+ if (!linuxSharedLibrariesAvailable(`${linked.stdout}\n${linked.stderr}`)) return "runtime_dependencies";
1242
+ return await publisher.hashLauncher(path) === expectedSha256 ? "ready" : "unsupported_hopper_build";
1243
+ } catch (cause) {
1244
+ if (cause instanceof RegularFileCleanupFailure || cause instanceof HopperReleaseError && cause.reason === "cleanup_failed" || cause instanceof ArtifactReaderFailure && cause.cleanup !== undefined) return "cleanup_failed";
1245
+ void cause;
1246
+ return "missing";
1247
+ }
1248
+ },
1249
+ cleanup: (path) => rm(path, {
1250
+ recursive: true,
1251
+ force: true
1252
+ }),
1253
+ close: async () => {
1254
+ await publisher.close();
1255
+ await retryLinuxHopperPublisherCleanup();
1256
+ }
1257
+ };
1258
+ };
1259
+ systemLinuxHopperPublisher = (environment) => new LinuxHopperPublisher(environment, async () => (await readLinuxDistribution())?.packageFamily);
1260
+ inspectLinuxHopperLauncher = async (path, environment, signal) => {
1261
+ const publisher = systemLinuxHopperPublisher(environment);
1262
+ const result = await publisher.inspectLauncher(path, signal);
1263
+ try {
1264
+ await publisher.close();
1265
+ await retryLinuxHopperPublisherCleanup();
1266
+ return result;
1267
+ } catch (cause) {
1268
+ return err(new HopperReleaseError("cleanup_failed", "Hopper publisher verification retains incomplete cleanup.", { cause: new AggregateError(result.ok ? [cause] : [result.error, cause], "Publisher verification outcomes") }));
1269
+ }
1270
+ };
1271
+ linuxSharedLibrariesAvailable = (output) => !/(?:=>\s+not found|error while loading shared libraries)/iu.test(output);
1272
+ installSystemPackage = async (family, archive, environment) => {
1273
+ for (const command of linuxPackageManagerCommands(family, archive, process.getuid?.() === 0)) {
1274
+ const output = await execFileBoundedOutput(command.executable, command.args, {
1275
+ env: environment,
1276
+ limit: PACKAGE_MANAGER_OUTPUT_BYTES
1277
+ });
1278
+ if (output.exitCode !== 0) {
1279
+ return {
1280
+ status: "failed",
1281
+ failure: {
1282
+ command: formatCommandForDisplay(command.executable, command.args),
1283
+ exitCode: output.exitCode,
1284
+ stdout: output.stdout,
1285
+ stderr: output.stderr,
1286
+ outputTruncated: output.outputTruncated
1287
+ }
1288
+ };
1289
+ }
1290
+ }
1291
+ return { status: "installed" };
1292
+ };
1293
+ formatCommandForDisplay = (executable, args) => [executable, ...args].map((part) => /^[A-Za-z0-9_./:@%+=,-]+$/u.test(part) ? part : JSON.stringify(part)).join(" ");
1294
+ linuxPackageManagerCommands = (family, archive, isRoot) => {
1295
+ const runtimeDependencies = family === "deb" ? [
1296
+ "xvfb",
1297
+ "xauth",
1298
+ "python3",
1299
+ "libx11-6",
1300
+ "libxtst6"
1301
+ ] : family === "rpm" ? [
1302
+ "xorg-x11-server-Xvfb",
1303
+ "xorg-x11-xauth",
1304
+ "python3",
1305
+ "libX11",
1306
+ "libXtst"
1307
+ ] : [
1308
+ "xorg-server-xvfb",
1309
+ "xorg-xauth",
1310
+ "python",
1311
+ "libx11",
1312
+ "libxtst"
1313
+ ];
1314
+ const commands = family === "deb" ? [[
1315
+ "apt-get",
1316
+ "install",
1317
+ "-y",
1318
+ archive,
1319
+ ...runtimeDependencies
1320
+ ]] : family === "rpm" ? [[
1321
+ "dnf",
1322
+ "install",
1323
+ "-y",
1324
+ archive,
1325
+ ...runtimeDependencies
1326
+ ]] : [[
1327
+ "pacman",
1328
+ "-S",
1329
+ "--needed",
1330
+ "--noconfirm",
1331
+ ...runtimeDependencies
1332
+ ], [
1333
+ "pacman",
1334
+ "-U",
1335
+ "--noconfirm",
1336
+ archive
1337
+ ]];
1338
+ return commands.map((command) => {
1339
+ const executable = isRoot ? command[0] : "pkexec";
1340
+ if (executable === undefined) throw new Error("package command is empty");
1341
+ return {
1342
+ executable,
1343
+ args: isRoot ? command.slice(1) : command
1344
+ };
1345
+ });
1346
+ };
1347
+ packageFamilyFor = (id, idLike) => {
1348
+ const identities = new Set([id, ...idLike?.toLowerCase().split(/\s+/u) ?? []]);
1349
+ if (identities.has("ubuntu") || identities.has("debian")) return "deb";
1350
+ if (identities.has("fedora") || identities.has("rhel")) return "rpm";
1351
+ if (identities.has("arch")) return "arch";
1352
+ return undefined;
1353
+ };
1354
+ versionAtLeast = (version, minimum) => version !== undefined && Number.parseInt(version.split(".")[0] ?? "0", 10) >= minimum;
1355
+ isAbortCause = (cause) => cause instanceof Error && cause.name === "AbortError";
1356
+ })))();
1357
+ }
1358
+
1359
+ //#endregion
1360
+ //#region dist/process/SharedStartupAttempt.js
1361
+ var STARTUP_OWNER_CLOSED, SharedStartupAttempt;
1362
+ function init_SharedStartupAttempt() {
1363
+ return (init_SharedStartupAttempt = __esmMin((() => {
1364
+ init_AbortablePromise();
1365
+ STARTUP_OWNER_CLOSED = Symbol("provider startup owner closed");
1366
+ SharedStartupAttempt = class {
1367
+ #controller = new AbortController();
1368
+ promise;
1369
+ #signal;
1370
+ #waiters = 0;
1371
+ #settlement = { status: "pending" };
1372
+ constructor(start, ownerSignal) {
1373
+ this.#signal = ownerSignal === undefined ? this.#controller.signal : AbortSignal.any([ownerSignal, this.#controller.signal]);
1374
+ this.promise = start(this.#signal);
1375
+ void this.promise.then((value) => {
1376
+ this.#settlement = {
1377
+ status: "completed",
1378
+ value
1379
+ };
1380
+ }, () => {
1381
+ this.#settlement = { status: "rejected" };
1382
+ });
1383
+ }
1384
+ /** Signal consumed by the startup producer, never by an individual waiter. */
1385
+ get signal() {
1386
+ return this.#signal;
1387
+ }
1388
+ /** Completion includes the producer's final cleanup, not just its abort. */
1389
+ get settled() {
1390
+ return this.#settlement.status !== "pending";
1391
+ }
1392
+ /** Parsed completion facts are owned here, rather than copied into adapters. */
1393
+ get settlement() {
1394
+ return this.#settlement;
1395
+ }
1396
+ /** Stop startup when its owning provider closes, regardless of active waits. */
1397
+ close() {
1398
+ if (!this.settled) this.#controller.abort(STARTUP_OWNER_CLOSED);
1399
+ }
1400
+ /** A peer's departure leaves the producer running; final departure joins cleanup. */
1401
+ async wait(signal) {
1402
+ this.#waiters += 1;
1403
+ try {
1404
+ const waited = await waitForAbortable(this.promise, signal);
1405
+ if (waited !== ABORTED) return {
1406
+ status: "completed",
1407
+ value: waited
1408
+ };
1409
+ if (this.#waiters > 1) return { status: "cancelled" };
1410
+ if (!this.settled) this.#controller.abort(signal?.reason);
1411
+ return {
1412
+ status: "stopped",
1413
+ value: await this.promise
1414
+ };
1415
+ } finally {
1416
+ this.#waiters -= 1;
1417
+ }
1418
+ }
1419
+ };
1420
+ })))();
1421
+ }
1422
+
1423
+ //#endregion
1424
+ export { HOPPER_DOWNLOAD_BYTES, HOPPER_LINUX_PRIMARY_FINGERPRINT, LinuxHopperTemporaryCleanupOwner, REA_MANAGED_LINUX_HOPPER_LAUNCHER, STARTUP_OWNER_CLOSED, SharedStartupAttempt, acquireHopperTargetLease, acquireLinuxHopperApplicationLease, downloadHopperPackage, init_HopperDownload, init_HopperLease, init_HopperReleaseFeed, init_LinuxHopper, init_LinuxHopperPublisher, init_SharedStartupAttempt, inspectLinuxHopperLauncher, installLinuxHopper, linuxHopperInstallDisclosure, linuxHopperLauncherCandidates, linuxHopperReleaseCacheDirectory, linuxSharedLibrariesAvailable, readLinuxDistribution, retryLinuxHopperPublisherCleanup, supportsReaHost, systemLinuxHopperInstallHost, systemLinuxHopperLauncherCandidates };