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,1162 @@
1
+ import { AnalysisCleanupLease } from "../artifacts/AnalysisCleanupLease.js";
2
+ import { z } from "zod";
3
+ import { createAnalysisExecution, } from "../application/AnalysisProvider.js";
4
+ import { AnalysisError } from "../domain/analysisErrorBase.js";
5
+ import { AnalysisCancelledError, AnalysisCapabilityUnavailableError, AnalysisInputError, AnalysisResourceConstraintError, AnalysisTimeoutError, } from "../domain/analysisErrorCore.js";
6
+ import { analysisSearchPredicate, analysisSearchQuerySchema, } from "../domain/analysisSearch.js";
7
+ import { combineFunctionRelationshipCoverage } from "../domain/functionCallCoverage.js";
8
+ import { functionDossierSchema } from "../domain/hopperValues.js";
9
+ import { analysisInputErrorFromIssues } from "../domain/inputIssueProjection.js";
10
+ import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
11
+ import { ProviderAdapterError } from "../domain/providerAdapterError.js";
12
+ import { ProviderCleanupError } from "../domain/providerCleanupError.js";
13
+ import { err, ok } from "../domain/result.js";
14
+ import { ABORTED, waitForAbortable } from "../process/AbortablePromise.js";
15
+ import { SharedStartupAttempt } from "../process/SharedStartupAttempt.js";
16
+ import { KUNA_INVENTORY_OUTPUT_BYTES, kunaFileCleanupError, } from "./KunaCommand.js";
17
+ import { kunaFunctionDeadline } from "./KunaConfiguration.js";
18
+ import { createKunaFileCloseScope, inspectKunaInstallation, } from "./KunaInstallation.js";
19
+ import { kunaProjectKey, } from "./KunaProjectCache.js";
20
+ import { parseKunaInventory, } from "./KunaProjectFiles.js";
21
+ import { isKunaOperation, KUNA_RELATIONSHIP_LIMITATION, KUNA_SINGLE_FUNCTION_LIMITATION, kunaLimitations, } from "./KunaProviderCapabilities.js";
22
+ import { KUNA_PROVIDER_ID } from "./KunaRelease.js";
23
+ import { KunaTargetCommands } from "./KunaTargetCommands.js";
24
+ import { KunaReferenceQueries } from "./KunaReferenceQueries.js";
25
+ import { KunaQueryWork } from "./KunaQueryWork.js";
26
+ import { KunaStringQueries } from "./KunaStringQueries.js";
27
+ import { normalizeKunaAddress } from "./KunaAddress.js";
28
+ import { KUNA_FUNCTION_TEXT_BYTES } from "./KunaLimits.js";
29
+ import { KunaProjectReader, } from "./KunaProjectReader.js";
30
+ import { kunaUnavailable } from "./KunaUnavailable.js";
31
+ import { RegularFileCleanupFailure, regularFileCancellation, } from "../filesystem/OwnedRegularFile.js";
32
+ import { ArtifactResourceScope } from "../artifacts/ArtifactResourceScope.js";
33
+ import { ArtifactReaderFailure } from "../artifacts/ArtifactReader.js";
34
+ import { kunaQueryFailureForCaller } from "./KunaQueryErrors.js";
35
+ /** How often a request waiting on the project export reports that it still waits. */
36
+ const WAIT_PROGRESS_INTERVAL_MS = 10_000;
37
+ /** A queued single-function request found the export finished first. */
38
+ const EXPORT_READY = Symbol("kuna-export-ready");
39
+ /**
40
+ * Completed single-function texts a session keeps while it has no export
41
+ * reader. Each repeat would otherwise analyze the whole image again; after a
42
+ * failed export that holds for the rest of the session.
43
+ */
44
+ const SINGLE_FUNCTION_TEXT_CACHE_BYTES = 16 * 1024 * 1024;
45
+ /** Charged per kept text beside its UTF-8 bytes. */
46
+ const SINGLE_FUNCTION_TEXT_ENTRY_BYTES = 256;
47
+ /**
48
+ * Wait for work this session owns, stopping only this caller's wait when its
49
+ * signal aborts; the work itself continues for other callers.
50
+ */
51
+ const waitFor = async (work, signal, operation) => {
52
+ const result = await waitForAbortable(work, signal);
53
+ return result === ABORTED
54
+ ? err(new AnalysisCancelledError(operation, { cause: signal?.reason }))
55
+ : result;
56
+ };
57
+ /** A file the adopted export named is gone, e.g. evicted by another REA process. */
58
+ const isMissing = (cause) => cause instanceof Error &&
59
+ "code" in cause &&
60
+ (cause.code === "ENOENT" || cause.code === "ENOTDIR");
61
+ /** Read through a call so a check before an await does not narrow later ones. */
62
+ const cancelled = (signal) => signal?.aborted === true;
63
+ const message = (cause) => cause instanceof Error ? cause.message : String(cause);
64
+ const failure = (operation, cause) => cause instanceof AnalysisError
65
+ ? cause
66
+ : new ProviderAdapterError(KUNA_PROVIDER_ID, operation, {
67
+ cause,
68
+ userMessage: `Kuna ${operation} failed: ${message(cause)}`,
69
+ });
70
+ /**
71
+ * How a request that needs the export reports the export's failure. A session
72
+ * never rebuilds a failed export, so repeating the request cannot succeed; the
73
+ * error says what to change before reopening the target. Kuna settings are read
74
+ * when REA starts, so changing one also needs a restart. Cancellation and
75
+ * unproven cleanup keep their own errors, which callers must still observe.
76
+ */
77
+ const exportUnavailable = (operation, failure) => {
78
+ if (failure instanceof AnalysisCancelledError || failure.cleanupIncomplete)
79
+ return failure;
80
+ const reason = failure.userMessage ?? failure.message;
81
+ const exported = projectAnalysisError(failure);
82
+ const restart = "REA reads Kuna settings when it starts, so restart REA, then reopen the target.";
83
+ const next = failure instanceof AnalysisTimeoutError
84
+ ? `To retry, set REA_KUNA_PROJECT_TIMEOUT_MS above ${String(failure.timeoutMs)} ms or raise REA_KUNA_JOBS in the environment that starts REA. ${restart}`
85
+ : failure instanceof AnalysisResourceConstraintError &&
86
+ failure.remediationAction !== undefined
87
+ ? // A fixed buffer (`memory`) is no setting, so a restart cannot help.
88
+ `${failure.remediationAction.replace(/\.?$/u, ".")}${failure.resource === "memory" ? "" : ` ${restart}`}`
89
+ : "To retry, resolve the reported failure, then reopen the target.";
90
+ return new AnalysisCapabilityUnavailableError(KUNA_PROVIDER_ID, operation, reason, {
91
+ cause: failure,
92
+ // Callers see only the top-level projection, so the export failure's
93
+ // own projected code and details (its limits, target path, captured
94
+ // output and diagnostics) travel whole rather than field by field.
95
+ diagnostics: {
96
+ export_error: failure._tag,
97
+ export_code: exported.code,
98
+ ...(exported.details === undefined
99
+ ? {}
100
+ : { export_details: exported.details }),
101
+ },
102
+ userMessage: `Kuna's project export failed, so ${operation} is unavailable in this session: ${reason.replace(/\.?$/u, ".")} ${next}`,
103
+ });
104
+ };
105
+ /** Kuna names a procedure by its inventory entry or by an exact entry address. */
106
+ const procedureSelectorSchema = z.string().min(1);
107
+ /**
108
+ * One Kuna analysis session for one target.
109
+ *
110
+ * Reads come from the verified project export in REA's cache. Until that
111
+ * export exists, listings use the inventory the export takes first and
112
+ * pseudocode a single-function `kuna decompile`, while the export builds in
113
+ * the background; assembly waits for it. Kuna always runs on a private copy
114
+ * whose digest matches the selected target.
115
+ */
116
+ export class KunaSessionClient {
117
+ #target;
118
+ #profile;
119
+ #cache;
120
+ #environment;
121
+ #runSlots;
122
+ #fileCloseResources = new ArtifactResourceScope();
123
+ /** Single-function runs in flight, by entry address. */
124
+ #singleFunctionRuns = new Map();
125
+ /** Completed single-function texts by address, least recently used first. */
126
+ #singleFunctionTexts = new Map();
127
+ #singleFunctionTextBytes = 0;
128
+ /** Owns background work: aborting it cancels this session's export interest. */
129
+ #session = new AbortController();
130
+ /** Requests and shared readers retain their resources until their work settles. */
131
+ #active = new Set();
132
+ #commands;
133
+ #queryWork;
134
+ #references;
135
+ #strings;
136
+ #installation;
137
+ #inventory;
138
+ #project;
139
+ /** The cache lookup that decides #project, shared by concurrent first requests. */
140
+ #starting;
141
+ /** The building export's inventory; undefined when it settles without one. */
142
+ #exportInventory;
143
+ #reader;
144
+ #inventoryIndex;
145
+ #status;
146
+ #key;
147
+ #exportFailure;
148
+ #releasePin;
149
+ /** Set once close starts; new requests are refused from then on. */
150
+ #closing = false;
151
+ /** Set only when close has released every owned resource. */
152
+ #closed = false;
153
+ constructor(target, profile, dependencies) {
154
+ this.#target = target;
155
+ this.#profile = profile;
156
+ this.#cache = dependencies.cache;
157
+ this.#runSlots = dependencies.runSlots;
158
+ this.#environment = dependencies.environment;
159
+ this.#commands = new KunaTargetCommands(target, {
160
+ signal: this.#session.signal,
161
+ ...(dependencies.launcher === undefined
162
+ ? {}
163
+ : { launcher: dependencies.launcher }),
164
+ });
165
+ this.#queryWork = new KunaQueryWork(this.#commands, {
166
+ signal: this.#session.signal,
167
+ own: (work) => this.#own(work),
168
+ runSlots: dependencies.runSlots,
169
+ });
170
+ this.#references = new KunaReferenceQueries(this.#queryWork);
171
+ this.#strings = new KunaStringQueries(this.#queryWork);
172
+ }
173
+ async execute(operation, parameters, options = {}) {
174
+ if (this.#closing)
175
+ return err(kunaUnavailable(operation, "This Kuna session is closed."));
176
+ return this.#own(this.#execute(operation, parameters, {
177
+ ...options,
178
+ signal: options.signal === undefined
179
+ ? this.#session.signal
180
+ : AbortSignal.any([this.#session.signal, options.signal]),
181
+ }));
182
+ }
183
+ #own(work) {
184
+ this.#active.add(work);
185
+ const release = () => this.#active.delete(work);
186
+ void work.then(release, release);
187
+ return work;
188
+ }
189
+ async #execute(operation, parameters, options) {
190
+ if (cancelled(options.signal))
191
+ return err(new AnalysisCancelledError(operation, {
192
+ cause: options.signal?.reason,
193
+ }));
194
+ if (operation !== "health" && !isKunaOperation(operation))
195
+ return err(kunaUnavailable(operation, "Kuna answers procedure and string queries, pseudocode, assembly and references; this operation needs another provider."));
196
+ const document = parameters.document;
197
+ if (document !== undefined && document !== this.#target.path)
198
+ return err(new AnalysisInputError(operation, {
199
+ userMessage: "A Kuna session analyzes one program; omit document or pass the selected target path.",
200
+ }, [
201
+ {
202
+ path: ["document"],
203
+ reason: "invalid_value",
204
+ expected: this.#target.path,
205
+ },
206
+ ]));
207
+ const installation = await this.#ensureInstallation(operation, options.signal);
208
+ if (!installation.ok)
209
+ return installation;
210
+ try {
211
+ if (operation === "health")
212
+ return ok(this.#execution([], installation.value, {
213
+ result: {
214
+ ready: true,
215
+ kuna: {
216
+ version: installation.value.version,
217
+ verified: installation.value.verified,
218
+ sha256: installation.value.sha256,
219
+ },
220
+ },
221
+ source: null,
222
+ locations: [],
223
+ limitations: [],
224
+ }));
225
+ if (operation === "procedure_pseudo_code" ||
226
+ operation === "procedure_assembly" ||
227
+ operation === "analyze_function")
228
+ await this.#startProject(installation.value);
229
+ const answer = await this.#answer(operation, parameters, installation.value, options);
230
+ if (!answer.ok)
231
+ return err(kunaQueryFailureForCaller(answer.error, operation));
232
+ if (cancelled(options.signal))
233
+ return err(new AnalysisCancelledError(operation, {
234
+ cause: options.signal?.reason,
235
+ }));
236
+ return ok(this.#execution(kunaLimitations(operation), installation.value, answer.value));
237
+ }
238
+ catch (cause) {
239
+ if (cancelled(options.signal))
240
+ return err(new AnalysisCancelledError(operation, { cause }));
241
+ return err(failure(operation, cause));
242
+ }
243
+ }
244
+ /**
245
+ * Release everything this session owns. A failed close keeps reporting its
246
+ * failure, and each later call retries the cleanup that remains.
247
+ */
248
+ async close() {
249
+ if (this.#closed)
250
+ return ok(null);
251
+ if (!this.#closing) {
252
+ this.#closing = true;
253
+ this.#session.abort();
254
+ }
255
+ // Cancellation starts process shutdown; its completion proves whether it
256
+ // is safe to remove private copies and exposes any retained cleanup owner.
257
+ // An admitted request may create a shared reader after shutdown begins.
258
+ while (this.#active.size > 0)
259
+ await Promise.allSettled(this.#active);
260
+ this.#references.clear();
261
+ this.#strings.clear();
262
+ this.#dropSingleFunctionTexts();
263
+ await this.#project;
264
+ await this.#inventory;
265
+ const failures = [];
266
+ // Kuna runs in its own process group; an export no other session wants
267
+ // must stop before this session reports itself closed.
268
+ if (this.#key !== undefined) {
269
+ const settled = await this.#cache.settled(this.#key);
270
+ if (!settled.ok)
271
+ failures.push(settled.error);
272
+ }
273
+ const commands = await this.#commands.close();
274
+ if (!commands.ok)
275
+ failures.push(commands.error);
276
+ try {
277
+ await this.#fileCloseResources.close();
278
+ }
279
+ catch (cause) {
280
+ const observation = ArtifactReaderFailure.cleanupObservation(cause, "Kuna provider file descriptor");
281
+ failures.push(new ProviderCleanupError(KUNA_PROVIDER_ID, observation.resources, { reason: observation.reason }, { cause, operation: "close_binary" }));
282
+ }
283
+ if (failures.length > 0)
284
+ return err(new ProviderCleanupError(KUNA_PROVIDER_ID, failures.flatMap((failed) => failed.cleanupResources), {
285
+ reason: failures
286
+ .map((failed) => String(failed.diagnostics?.["reason"] ?? failed.message))
287
+ .join("; "),
288
+ }, {
289
+ cause: new AggregateError(failures, "Kuna session cleanup remains incomplete"),
290
+ operation: "close_binary",
291
+ }).bindCleanupDependencies(failures));
292
+ this.#releasePin?.();
293
+ this.#releasePin = undefined;
294
+ this.#closed = true;
295
+ return ok(null);
296
+ }
297
+ #execution(operationLimitations, installation, answer) {
298
+ const source = answer.source;
299
+ const files = source?.kind !== "project-export"
300
+ ? []
301
+ : (answer.files ?? []).map((file) => ({
302
+ facet: file.facet,
303
+ file: file.path,
304
+ file_sha256: Object.values(source.project.manifest.files).find(({ path }) => path === file.path)?.sha256 ?? null,
305
+ byte_offset: file.byteOffset,
306
+ byte_length: file.byteLength,
307
+ }));
308
+ // Preserve the direct text source shape; combined answers retain every
309
+ // component once, including its producing file digest and byte range.
310
+ const recordedFiles = files.length === 1 ? files[0] : files.length === 0 ? {} : { files };
311
+ return createAnalysisExecution(answer.result, {
312
+ id: KUNA_PROVIDER_ID,
313
+ name: "Kuna",
314
+ version: installation.version,
315
+ }, {
316
+ // Kuna's identity is in the analysis profile; the raw result records
317
+ // only where file-backed text came from.
318
+ ...(source === null &&
319
+ answer.referenceSource === undefined &&
320
+ answer.stringSource === undefined
321
+ ? {}
322
+ : {
323
+ rawResult: {
324
+ ...(source === null
325
+ ? {}
326
+ : {
327
+ source: source.kind === "single-function"
328
+ ? { kind: "single-function" }
329
+ : {
330
+ kind: "project-export",
331
+ key: source.project.key,
332
+ directory: source.project.directory,
333
+ ...recordedFiles,
334
+ },
335
+ project_export: this.#exportState(),
336
+ }),
337
+ ...(answer.referenceSource === undefined
338
+ ? {}
339
+ : { references: answer.referenceSource }),
340
+ ...(answer.stringSource === undefined
341
+ ? {}
342
+ : { strings: answer.stringSource }),
343
+ },
344
+ }),
345
+ limitations: [...operationLimitations, ...answer.limitations],
346
+ ...(answer.relationshipCoverage === undefined
347
+ ? {}
348
+ : { relationshipCoverage: answer.relationshipCoverage }),
349
+ locations: [
350
+ { kind: "artifact-path", path: this.#target.path },
351
+ ...answer.locations,
352
+ ],
353
+ ...(this.#profile === undefined
354
+ ? {}
355
+ : { analysisProfile: this.#profile }),
356
+ });
357
+ }
358
+ /** Where the background export stands, for callers deciding whether to wait. */
359
+ #exportState() {
360
+ if (this.#reader !== undefined)
361
+ return { state: "ready", key: this.#reader.project.key };
362
+ if (this.#project === undefined)
363
+ return { state: "not-started" };
364
+ if (this.#exportFailure !== undefined)
365
+ return { state: "failed", reason: this.#exportFailure };
366
+ return {
367
+ state: "building",
368
+ phase: this.#status?.phase ?? null,
369
+ inventory_functions: this.#status?.inventory?.length ?? null,
370
+ };
371
+ }
372
+ async #answer(operation, parameters, installation, options) {
373
+ if (operation === "list_documents")
374
+ return ok({
375
+ result: [this.#target.path],
376
+ source: null,
377
+ locations: [],
378
+ limitations: [],
379
+ });
380
+ if (operation === "xrefs" ||
381
+ operation === "procedure_callers" ||
382
+ operation === "procedure_callees")
383
+ return this.#referenceAnswer(operation, parameters, installation, options);
384
+ if (operation === "list_strings" || operation === "search_strings")
385
+ return this.#stringAnswer(operation, parameters, installation, options);
386
+ if (operation === "list_procedures" || operation === "search_procedures")
387
+ return this.#procedureList(operation, parameters, installation, options);
388
+ const inventory = await this.#ensureInventory(installation, options);
389
+ if (!inventory.ok)
390
+ return inventory;
391
+ if (operation === "address_name")
392
+ return this.#addressName(parameters, inventory.value, installation, options);
393
+ const entry = this.#resolve(operation, parameters.procedure, inventory.value);
394
+ if (!entry.ok) {
395
+ const selectedAddress = operation === "procedure_address"
396
+ ? normalizeKunaAddress(parameters.procedure)
397
+ : undefined;
398
+ if (selectedAddress === undefined)
399
+ return entry;
400
+ const graph = await this.#references.functionAt(installation, selectedAddress, operation, options.signal);
401
+ if (!graph.ok)
402
+ return graph;
403
+ if (graph.value === undefined)
404
+ return entry;
405
+ return ok({
406
+ result: graph.value.address,
407
+ source: null,
408
+ locations: [{ kind: "address", address: selectedAddress }],
409
+ limitations: [],
410
+ referenceSource: graph.value.source,
411
+ });
412
+ }
413
+ const locations = [
414
+ { kind: "address", address: entry.value.address },
415
+ ];
416
+ switch (operation) {
417
+ case "procedure_address":
418
+ return ok({
419
+ result: entry.value.address,
420
+ source: null,
421
+ locations,
422
+ limitations: [],
423
+ });
424
+ case "procedure_pseudo_code": {
425
+ const pseudocode = await this.#pseudocode(operation, entry.value, installation, options);
426
+ if (!pseudocode.ok)
427
+ return pseudocode;
428
+ return ok({ ...pseudocode.value, locations });
429
+ }
430
+ case "procedure_assembly": {
431
+ const assembly = await this.#assemblyText(operation, entry.value, installation, options);
432
+ if (!assembly.ok)
433
+ return assembly;
434
+ return ok({ ...assembly.value, locations });
435
+ }
436
+ case "analyze_function":
437
+ return this.#withProject(operation, installation, options, (reader) => this.#dossier(operation, entry.value, reader, installation, options.signal));
438
+ }
439
+ }
440
+ async #stringAnswer(operation, parameters, installation, options) {
441
+ const answer = await this.#own(this.#strings.execute(operation, parameters, installation, AbortSignal.any([
442
+ this.#session.signal,
443
+ ...(options.signal === undefined ? [] : [options.signal]),
444
+ ])));
445
+ return answer.ok
446
+ ? ok({
447
+ result: answer.value.result,
448
+ source: null,
449
+ stringSource: answer.value.source,
450
+ locations: [],
451
+ limitations: [],
452
+ })
453
+ : answer;
454
+ }
455
+ async #procedureList(operation, parameters, installation, options) {
456
+ const query = operation === "search_procedures"
457
+ ? analysisSearchQuerySchema.safeParse(parameters)
458
+ : undefined;
459
+ if (query !== undefined && !query.success)
460
+ return err(analysisInputErrorFromIssues(operation, query.error.issues, parameters));
461
+ const inventory = await this.#ensureInventory(installation, options);
462
+ if (!inventory.ok)
463
+ return inventory;
464
+ let selected = inventory.value;
465
+ if (query?.success === true) {
466
+ if (query.data.mode === "regex") {
467
+ const matches = await this.#queryWork.match({
468
+ operation,
469
+ pattern: query.data.pattern,
470
+ caseSensitive: query.data.case_sensitive,
471
+ values: () => inventory.value.map(({ name }) => name),
472
+ signal: options.signal,
473
+ });
474
+ if (!matches.ok)
475
+ return matches;
476
+ selected = matches.value.map((index) => inventory.value[index]);
477
+ }
478
+ else {
479
+ const matches = analysisSearchPredicate(query.data);
480
+ selected = inventory.value.filter(({ name }) => matches(name));
481
+ }
482
+ }
483
+ return ok({
484
+ result: selected.map(({ address, name }) => ({ address, value: name })),
485
+ source: null,
486
+ locations: [],
487
+ limitations: [],
488
+ });
489
+ }
490
+ async #referenceAnswer(operation, parameters, installation, options) {
491
+ const field = operation === "xrefs" ? "address" : "procedure";
492
+ const selected = await this.#referenceAddress(operation, parameters[field], field, installation, options);
493
+ if (!selected.ok)
494
+ return selected;
495
+ const address = selected.value;
496
+ const locations = [{ kind: "address", address }];
497
+ if (operation === "xrefs") {
498
+ const references = await this.#references.incoming(installation, address, options.signal);
499
+ if (!references.ok)
500
+ return references;
501
+ return ok({
502
+ result: [...references.value.addresses],
503
+ source: null,
504
+ locations,
505
+ limitations: [],
506
+ referenceSource: {
507
+ kind: "kuna-xrefs",
508
+ direction: "to",
509
+ target: address,
510
+ sha256: references.value.sha256,
511
+ bytes: references.value.bytes,
512
+ examined_rows: references.value.rows,
513
+ excluded_alias_rows: references.value.excludedAliasRows,
514
+ },
515
+ });
516
+ }
517
+ const relationships = await this.#references.relationships(installation, address, operation, options.signal);
518
+ if (!relationships.ok)
519
+ return relationships;
520
+ const entries = operation === "procedure_callers"
521
+ ? relationships.value.callers
522
+ : relationships.value.callees;
523
+ return ok({
524
+ result: entries.map(({ address }) => address),
525
+ source: null,
526
+ locations,
527
+ referenceSource: relationships.value.source,
528
+ limitations: [],
529
+ relationshipCoverage: operation === "procedure_callers"
530
+ ? relationships.value.callersCoverage
531
+ : relationships.value.calleesCoverage,
532
+ });
533
+ }
534
+ /** Exact addresses are validated by the producing graph, which also owns
535
+ * synthetic import nodes absent from the quick function inventory. */
536
+ async #referenceAddress(operation, raw, field, installation, options) {
537
+ if (typeof raw !== "string" || raw.length === 0)
538
+ return err(new AnalysisInputError(operation, { userMessage: `Kuna requires ${field}; it has no cursor.` }, [{ path: [field], reason: "missing_argument" }]));
539
+ const address = normalizeKunaAddress(raw);
540
+ if (address !== undefined)
541
+ return ok(address);
542
+ if (/^0x[0-9a-f]+$/iu.test(raw))
543
+ return err(new AnalysisInputError(operation, { userMessage: "The address exceeds Kuna's u64 address space." }, [{ path: [field], reason: "invalid_value" }]));
544
+ const inventory = await this.#ensureInventory(installation, options);
545
+ if (!inventory.ok)
546
+ return inventory;
547
+ const entry = this.#resolve(operation, raw, inventory.value, field);
548
+ return entry.ok ? ok(entry.value.address) : entry;
549
+ }
550
+ /** Resolve an exact inventory name, alias or entry address. */
551
+ #resolve(operation, raw, inventory, field = "procedure") {
552
+ const parsed = procedureSelectorSchema.safeParse(raw);
553
+ if (!parsed.success)
554
+ return err(new AnalysisInputError(operation, { userMessage: `${field} is required.` }, [{ path: [field], reason: "missing_argument" }]));
555
+ const selector = parsed.data;
556
+ const address = normalizeKunaAddress(selector);
557
+ if (address !== undefined) {
558
+ const entry = this.#index(inventory).byAddress.get(address);
559
+ return entry === undefined
560
+ ? err(new AnalysisInputError(operation, {
561
+ userMessage: `${address} is not a procedure entry Kuna found; list_procedures shows the entries it found.`,
562
+ }))
563
+ : ok(entry);
564
+ }
565
+ const matches = this.#index(inventory).byName.get(selector) ?? [];
566
+ if (matches.length === 1 && matches[0] !== undefined)
567
+ return ok(matches[0]);
568
+ return err(new AnalysisInputError(operation, {
569
+ userMessage: matches.length === 0
570
+ ? `Kuna found no procedure named ${selector}; search_procedures finds similar names.`
571
+ : `${selector} names ${String(matches.length)} Kuna entries (${matches.map(({ address }) => address).join(", ")}); select one by address.`,
572
+ }));
573
+ }
574
+ async #addressName(parameters, inventory, installation, options) {
575
+ const raw = parameters.address;
576
+ const address = normalizeKunaAddress(raw);
577
+ if (address === undefined)
578
+ return err(new AnalysisInputError("address_name", {
579
+ userMessage: "Kuna has no cursor; pass an explicit 0x-prefixed address.",
580
+ }, [{ path: ["address"], reason: "invalid_format" }]));
581
+ const locations = [{ kind: "address", address }];
582
+ const entry = this.#index(inventory).byAddress.get(address);
583
+ if (entry !== undefined)
584
+ return ok({
585
+ result: entry.name,
586
+ source: null,
587
+ locations,
588
+ limitations: [],
589
+ });
590
+ await this.#startProject(installation);
591
+ return this.#withProject("address_name", installation, options, async (reader) => {
592
+ const name = await reader.dataName(address, "address_name", options.signal);
593
+ if (!name.ok)
594
+ return name;
595
+ return ok({
596
+ result: name.value,
597
+ source: { kind: "project-export", project: reader.project },
598
+ locations,
599
+ limitations: [
600
+ "Kuna names function entries and the data its export references; null means Kuna assigned no name at this address, not that no symbol exists.",
601
+ ],
602
+ });
603
+ });
604
+ }
605
+ async #pseudocode(operation, entry, installation, options) {
606
+ for (let recovered = false;;) {
607
+ const reader = this.#reader;
608
+ if (reader !== undefined) {
609
+ try {
610
+ const text = await reader.pseudocode(entry.address, operation);
611
+ if (!text.ok)
612
+ return text;
613
+ return ok({
614
+ ...text.value,
615
+ source: { kind: "project-export", project: reader.project },
616
+ });
617
+ }
618
+ catch (cause) {
619
+ if (!isMissing(cause) || recovered)
620
+ throw cause;
621
+ recovered = true;
622
+ this.#invalidateProject(reader);
623
+ await this.#startProject(installation);
624
+ continue;
625
+ }
626
+ }
627
+ const outcome = await this.#joinSingleFunction(operation, entry.address, installation, options.signal);
628
+ if (outcome === EXPORT_READY)
629
+ continue;
630
+ if (!outcome.ok)
631
+ return outcome;
632
+ const exportFailure = await this.#settledExportFailure();
633
+ return ok({
634
+ result: outcome.value,
635
+ source: { kind: "single-function" },
636
+ limitations: [
637
+ KUNA_SINGLE_FUNCTION_LIMITATION,
638
+ ...(exportFailure === undefined
639
+ ? []
640
+ : [
641
+ `The project export failed, so later requests also use single-function runs: ${exportFailure}`,
642
+ ]),
643
+ ],
644
+ });
645
+ }
646
+ }
647
+ /**
648
+ * Wait for this address's shared single-function run, starting it when none
649
+ * is in flight. A caller's cancellation stops only its own wait while others
650
+ * still wait; the last waiter stops the run and receives how it ended,
651
+ * including cleanup it could not prove. A completed text answers repeats
652
+ * until the export can.
653
+ */
654
+ #joinSingleFunction(operation, address, installation, signal) {
655
+ if (cancelled(signal))
656
+ return Promise.resolve(err(new AnalysisCancelledError(operation, { cause: signal?.reason })));
657
+ const kept = this.#singleFunctionTexts.get(address);
658
+ if (kept !== undefined) {
659
+ this.#singleFunctionTexts.delete(address);
660
+ this.#singleFunctionTexts.set(address, kept);
661
+ return Promise.resolve(ok(kept.text));
662
+ }
663
+ let run = this.#singleFunctionRuns.get(address);
664
+ if (run === undefined) {
665
+ const controller = new AbortController();
666
+ const created = {
667
+ controller,
668
+ waiters: 0,
669
+ outcome: this.#own(this.#singleFunction(operation, address, installation, AbortSignal.any([this.#session.signal, controller.signal])).catch((cause) => err(failure(operation, cause)))),
670
+ };
671
+ this.#singleFunctionRuns.set(address, created);
672
+ void created.outcome.then((outcome) => {
673
+ // A run whose waiters all left was already replaced or removed.
674
+ if (this.#singleFunctionRuns.get(address) !== created)
675
+ return;
676
+ this.#singleFunctionRuns.delete(address);
677
+ if (outcome !== EXPORT_READY && outcome.ok)
678
+ this.#keepSingleFunctionText(address, outcome.value);
679
+ });
680
+ run = created;
681
+ }
682
+ const shared = run;
683
+ shared.waiters += 1;
684
+ return new Promise((resolve) => {
685
+ let waiting = true;
686
+ const leave = () => {
687
+ waiting = false;
688
+ shared.waiters -= 1;
689
+ };
690
+ const onAbort = () => {
691
+ if (!waiting)
692
+ return;
693
+ leave();
694
+ if (shared.waiters > 0) {
695
+ resolve(err(new AnalysisCancelledError(operation, { cause: signal?.reason })));
696
+ return;
697
+ }
698
+ // A run whose waiters all left winds down; a new request starts afresh.
699
+ if (this.#singleFunctionRuns.get(address) === shared)
700
+ this.#singleFunctionRuns.delete(address);
701
+ shared.controller.abort(signal?.reason);
702
+ };
703
+ signal?.addEventListener("abort", onAbort, { once: true });
704
+ void shared.outcome.then((outcome) => {
705
+ signal?.removeEventListener("abort", onAbort);
706
+ if (waiting)
707
+ leave();
708
+ resolve(outcome);
709
+ });
710
+ });
711
+ }
712
+ /** Keep a completed text within budget, dropping the least recently used. */
713
+ #keepSingleFunctionText(address, text) {
714
+ // The export's text supersedes it; a closing session keeps nothing.
715
+ if (this.#reader !== undefined || this.#closing)
716
+ return;
717
+ const bytes = Buffer.byteLength(text) + SINGLE_FUNCTION_TEXT_ENTRY_BYTES;
718
+ if (bytes > SINGLE_FUNCTION_TEXT_CACHE_BYTES)
719
+ return;
720
+ this.#singleFunctionTexts.set(address, { text, bytes });
721
+ this.#singleFunctionTextBytes += bytes;
722
+ while (this.#singleFunctionTextBytes > SINGLE_FUNCTION_TEXT_CACHE_BYTES) {
723
+ const oldest = this.#singleFunctionTexts.entries().next().value;
724
+ if (oldest === undefined)
725
+ break;
726
+ this.#singleFunctionTexts.delete(oldest[0]);
727
+ this.#singleFunctionTextBytes -= oldest[1].bytes;
728
+ }
729
+ }
730
+ #dropSingleFunctionTexts() {
731
+ this.#singleFunctionTexts.clear();
732
+ this.#singleFunctionTextBytes = 0;
733
+ }
734
+ /** One `kuna decompile --addr` run, admitted by the provider's run slots. */
735
+ async #singleFunction(operation, address, installation, signal) {
736
+ const prepared = await this.#commands.prepare();
737
+ if (!prepared.ok)
738
+ return prepared;
739
+ const admitted = await this.#admitSingleFunction(signal);
740
+ if (admitted === EXPORT_READY)
741
+ return admitted;
742
+ if (admitted === undefined)
743
+ return err(new AnalysisCancelledError(operation, { cause: signal.reason }));
744
+ const run = await this.#commands.run({
745
+ installation,
746
+ arguments: (input) => ["decompile", input, address, "--addr"],
747
+ operation,
748
+ deadline: kunaFunctionDeadline(installation.configuration),
749
+ outputBytes: KUNA_FUNCTION_TEXT_BYTES,
750
+ signal,
751
+ releaseRun: admitted,
752
+ });
753
+ return run.ok ? ok(run.value.stdout.text.replace(/\n+$/u, "")) : run;
754
+ }
755
+ /**
756
+ * A run slot, or EXPORT_READY when the export this session builds finishes
757
+ * first; the export then answers without another Kuna process.
758
+ */
759
+ async #admitSingleFunction(signal) {
760
+ const yielded = new AbortController();
761
+ const slot = this.#runSlots.acquire(AbortSignal.any([signal, yielded.signal]));
762
+ const project = this.#project;
763
+ const exported = project === undefined
764
+ ? undefined
765
+ : project.then((built) => built.ok && this.#reader !== undefined
766
+ ? EXPORT_READY
767
+ : new Promise(() => undefined));
768
+ const admitted = await (exported === undefined
769
+ ? slot
770
+ : Promise.race([slot, exported]));
771
+ if (admitted !== EXPORT_READY)
772
+ return admitted;
773
+ yielded.abort();
774
+ // A slot granted in the same turn is returned rather than leaked.
775
+ void slot.then((release) => release?.());
776
+ return EXPORT_READY;
777
+ }
778
+ async #assemblyText(operation, entry, installation, options) {
779
+ return this.#withProject(operation, installation, options, async (reader) => {
780
+ const text = await reader.assembly(entry.address, operation, options.signal);
781
+ return text.ok
782
+ ? ok({
783
+ ...text.value,
784
+ source: { kind: "project-export", project: reader.project },
785
+ })
786
+ : text;
787
+ });
788
+ }
789
+ async #dossier(operation, entry, reader, installation, signal) {
790
+ const assembly = await reader.assembly(entry.address, operation, signal);
791
+ if (!assembly.ok)
792
+ return assembly;
793
+ const pseudocode = await reader.pseudocode(entry.address, operation);
794
+ if (!pseudocode.ok)
795
+ return pseudocode;
796
+ const text = typeof pseudocode.value.result === "string"
797
+ ? pseudocode.value.result
798
+ : null;
799
+ const unavailable = (reason) => ({ available: false, reason });
800
+ const relationships = await this.#references.relationships(installation, entry.address, operation, signal);
801
+ if (!relationships.ok &&
802
+ (relationships.error.cleanupIncomplete || signal?.aborted === true))
803
+ return relationships;
804
+ const callAvailability = relationships.ok
805
+ ? { available: true }
806
+ : unavailable(relationships.error.userMessage ?? relationships.error.message);
807
+ const dossier = functionDossierSchema.parse({
808
+ procedure: {
809
+ address: entry.address,
810
+ name: entry.name,
811
+ classification: null,
812
+ body: unavailable("Kuna reports an inventory extent that is an upper bound, not observed body ranges."),
813
+ signature: null,
814
+ locals: [],
815
+ },
816
+ pseudocode: text ?? "",
817
+ assembly: typeof assembly.value.result === "string"
818
+ ? assembly.value.result.split("\n")
819
+ : [],
820
+ comments: [],
821
+ callers: relationships.ok ? relationships.value.callers : [],
822
+ callees: relationships.ok ? relationships.value.callees : [],
823
+ incoming_references: [],
824
+ outgoing_references: [],
825
+ referenced_strings: [],
826
+ referenced_names: [],
827
+ basic_blocks: [],
828
+ native_api: null,
829
+ native_value_flow: null,
830
+ facet_availability: {
831
+ pseudocode: text === null
832
+ ? unavailable(pseudocode.value.limitations.at(-1) ??
833
+ "Kuna did not supply pseudocode.")
834
+ : { available: true },
835
+ assembly: { available: true },
836
+ comments: unavailable("Kuna exports no analyst comments."),
837
+ callers: callAvailability,
838
+ callees: callAvailability,
839
+ references: unavailable("This provider does not report typed references."),
840
+ strings_names: unavailable("This provider does not report function-referenced strings and names."),
841
+ cfg: unavailable("Kuna exports no basic blocks."),
842
+ },
843
+ limitations: [
844
+ ...kunaLimitations("analyze_function"),
845
+ ...pseudocode.value.limitations,
846
+ KUNA_RELATIONSHIP_LIMITATION,
847
+ ...(relationships.ok
848
+ ? []
849
+ : [relationships.error.userMessage ?? relationships.error.message]),
850
+ ],
851
+ });
852
+ return ok({
853
+ result: dossier,
854
+ source: { kind: "project-export", project: reader.project },
855
+ files: [
856
+ ...(pseudocode.value.files ?? []),
857
+ ...(assembly.value.files ?? []),
858
+ ],
859
+ locations: [{ kind: "address", address: entry.address }],
860
+ limitations: [
861
+ ...pseudocode.value.limitations,
862
+ KUNA_RELATIONSHIP_LIMITATION,
863
+ ...(relationships.ok
864
+ ? []
865
+ : [relationships.error.userMessage ?? relationships.error.message]),
866
+ ],
867
+ referenceSource: relationships.ok
868
+ ? relationships.value.source
869
+ : {
870
+ available: false,
871
+ reason: relationships.error.userMessage ?? relationships.error.message,
872
+ },
873
+ relationshipCoverage: relationships.ok
874
+ ? combineFunctionRelationshipCoverage(relationships.value.callersCoverage, relationships.value.calleesCoverage)
875
+ : {
876
+ status: "unknown",
877
+ reason: relationships.error.userMessage ?? relationships.error.message,
878
+ limited_directions: ["callers", "callees"],
879
+ },
880
+ });
881
+ }
882
+ /** Address and name lookups over one inventory, built once. */
883
+ #index(inventory) {
884
+ if (this.#inventoryIndex?.inventory === inventory)
885
+ return this.#inventoryIndex;
886
+ const byAddress = new Map();
887
+ const byName = new Map();
888
+ for (const entry of inventory) {
889
+ byAddress.set(entry.address, entry);
890
+ for (const name of new Set([entry.name, ...entry.aliases])) {
891
+ const named = byName.get(name);
892
+ if (named === undefined)
893
+ byName.set(name, [entry]);
894
+ else
895
+ named.push(entry);
896
+ }
897
+ }
898
+ this.#inventoryIndex = { inventory, byAddress, byName };
899
+ return this.#inventoryIndex;
900
+ }
901
+ /** One installation producer; only the final departing caller stops it. */
902
+ async #ensureInstallation(operation, signal) {
903
+ let attempt = this.#installation;
904
+ if (attempt === undefined) {
905
+ attempt = new SharedStartupAttempt((ownerSignal) => this.#own(this.#inspectInstallation(ownerSignal)), this.#session.signal);
906
+ const owned = attempt;
907
+ this.#installation = owned;
908
+ void owned.promise.then((result) => {
909
+ // A proven cancellation has no reusable installation result. Its
910
+ // complete cleanup precedes replacement; physical failures stay cached.
911
+ if (this.#installation === owned &&
912
+ owned.signal.aborted &&
913
+ (result.ok ||
914
+ (result.error instanceof AnalysisCancelledError &&
915
+ !result.error.cleanupIncomplete)))
916
+ this.#installation = undefined;
917
+ });
918
+ }
919
+ const waited = await attempt.wait(signal);
920
+ if (waited.status === "cancelled")
921
+ return err(new AnalysisCancelledError(operation, { cause: signal?.reason }));
922
+ if (!waited.value.ok) {
923
+ // A fresh caller can arrive while the previous final waiter joins stop.
924
+ // Retry only proven cancellation, never an authored physical failure.
925
+ if (!signal?.aborted &&
926
+ attempt.signal.aborted &&
927
+ waited.value.error instanceof AnalysisCancelledError &&
928
+ !waited.value.error.cleanupIncomplete)
929
+ return this.#ensureInstallation(operation, signal);
930
+ return err(kunaQueryFailureForCaller(waited.value.error, operation));
931
+ }
932
+ if (signal?.aborted)
933
+ return err(new AnalysisCancelledError(operation, { cause: signal.reason }));
934
+ return waited.value;
935
+ }
936
+ async #inspectInstallation(signal) {
937
+ const parentFileCloseResources = {
938
+ retain: (owner, resource) => this.#fileCloseResources.retain({
939
+ kind: "lease",
940
+ resource,
941
+ lease: AnalysisCleanupLease.forCloseOwner(owner, resource),
942
+ }),
943
+ run: (operation) => this.#fileCloseResources.run(operation),
944
+ };
945
+ const fileCloseScope = createKunaFileCloseScope(parentFileCloseResources);
946
+ try {
947
+ const inspected = await inspectKunaInstallation(this.#environment, {
948
+ fileCloseResources: fileCloseScope.owner,
949
+ signal,
950
+ });
951
+ if (!inspected.ok)
952
+ return err(kunaUnavailable("health", inspected.error.reason));
953
+ const committed = this.#profile?.parameters["kuna_sha256"];
954
+ if (committed !== undefined && committed !== inspected.value.sha256)
955
+ return err(new ProviderAdapterError(KUNA_PROVIDER_ID, "health", {
956
+ userMessage: "The Kuna executable changed after this target was opened; reopen the target to analyze it with the current executable.",
957
+ diagnostics: {
958
+ committed_sha256: committed,
959
+ observed_sha256: inspected.value.sha256,
960
+ },
961
+ }));
962
+ return ok(inspected.value);
963
+ }
964
+ catch (cause) {
965
+ const cancellation = regularFileCancellation(cause);
966
+ if (!(cause instanceof RegularFileCleanupFailure) &&
967
+ cancellation !== undefined)
968
+ return err(new AnalysisCancelledError("health", {
969
+ cause: cancellation.reason,
970
+ }));
971
+ if (!(cause instanceof RegularFileCleanupFailure))
972
+ return err(failure("health", cause));
973
+ const error = kunaFileCleanupError(cause, "health");
974
+ fileCloseScope.bindFailure(cause, error);
975
+ return err(error);
976
+ }
977
+ }
978
+ /** Reuse a verified export, or start building one in the background. */
979
+ #startProject(installation) {
980
+ if (this.#project !== undefined)
981
+ return Promise.resolve();
982
+ // Concurrent first requests share one lookup, which verifies every
983
+ // export file's digest on a fresh server.
984
+ this.#starting ??= this.#lookupOrBuild(installation).finally(() => {
985
+ this.#starting = undefined;
986
+ });
987
+ return this.#starting;
988
+ }
989
+ async #lookupOrBuild(installation) {
990
+ const key = kunaProjectKey({
991
+ targetSha256: this.#target.sha256,
992
+ kunaSha256: installation.sha256,
993
+ kunaVersion: installation.version,
994
+ jobs: installation.configuration.jobs,
995
+ });
996
+ this.#key = key;
997
+ const cached = await this.#cache.lookup(key, this.#session.signal);
998
+ if (cached !== undefined) {
999
+ this.#adopt(cached);
1000
+ this.#project = Promise.resolve(ok(cached));
1001
+ return;
1002
+ }
1003
+ let listed;
1004
+ this.#exportInventory = new Promise((resolve) => {
1005
+ listed = resolve;
1006
+ });
1007
+ this.#project = this.#cache
1008
+ .build({
1009
+ installation,
1010
+ targetPath: this.#target.path,
1011
+ targetSha256: this.#target.sha256,
1012
+ signal: this.#session.signal,
1013
+ onStatus: (status) => {
1014
+ this.#status = status;
1015
+ if (status.inventory !== null)
1016
+ listed(status.inventory);
1017
+ },
1018
+ })
1019
+ .then((result) => {
1020
+ listed(result.ok ? result.value.inventory : undefined);
1021
+ if (result.ok && !this.#closing)
1022
+ this.#adopt(result.value);
1023
+ else if (!result.ok && !this.#closing)
1024
+ this.#exportFailure =
1025
+ result.error.userMessage ?? result.error.message;
1026
+ return result;
1027
+ });
1028
+ }
1029
+ /** Retry the complete read when its immutable project disappears, never just one facet. */
1030
+ async #withProject(operation, installation, options, read) {
1031
+ for (let attempt = 0;; attempt += 1) {
1032
+ const reader = await this.#awaitProject(operation, options);
1033
+ if (!reader.ok)
1034
+ return reader;
1035
+ try {
1036
+ return await read(reader.value);
1037
+ }
1038
+ catch (cause) {
1039
+ if (!isMissing(cause) || attempt !== 0)
1040
+ throw cause;
1041
+ this.#invalidateProject(reader.value);
1042
+ await this.#startProject(installation);
1043
+ }
1044
+ }
1045
+ }
1046
+ #invalidateProject(reader) {
1047
+ // Another request may already have replaced this reader and its build.
1048
+ if (this.#reader !== reader)
1049
+ return;
1050
+ this.#releasePin?.();
1051
+ this.#releasePin = undefined;
1052
+ this.#reader = undefined;
1053
+ this.#project = undefined;
1054
+ this.#status = undefined;
1055
+ this.#exportFailure = undefined;
1056
+ }
1057
+ #adopt(project) {
1058
+ this.#reader = this.#readerFor(project);
1059
+ this.#dropSingleFunctionTexts();
1060
+ this.#releasePin ??= this.#cache.pin(project.key);
1061
+ }
1062
+ #readerFor(project) {
1063
+ return this.#reader?.project === project
1064
+ ? this.#reader
1065
+ : new KunaProjectReader(project, {
1066
+ signal: this.#session.signal,
1067
+ own: (work) => this.#own(work),
1068
+ });
1069
+ }
1070
+ /** The export's failure once it has settled; undefined while it builds or after success. */
1071
+ async #settledExportFailure() {
1072
+ const settled = await Promise.race([
1073
+ this.#project,
1074
+ Promise.resolve(undefined),
1075
+ ]);
1076
+ if (settled === undefined || settled.ok)
1077
+ return undefined;
1078
+ return settled.error.userMessage ?? settled.error.message;
1079
+ }
1080
+ /** Wait for the export, reporting progress, without cancelling it for other callers. */
1081
+ async #awaitProject(operation, options) {
1082
+ if (this.#reader !== undefined)
1083
+ return ok(this.#reader);
1084
+ const project = this.#project;
1085
+ if (project === undefined)
1086
+ return err(new ProviderAdapterError(KUNA_PROVIDER_ID, operation, {
1087
+ userMessage: "The Kuna project export was never started.",
1088
+ }));
1089
+ const started = Date.now();
1090
+ const progress = options.progress;
1091
+ // Report waiting only; Kuna exposes no measure of completed export work.
1092
+ const timer = setInterval(() => {
1093
+ void progress
1094
+ ?.report({
1095
+ phase: "kuna_export",
1096
+ completed: 0,
1097
+ total: null,
1098
+ message: `Waiting for Kuna's project export (${this.#status?.phase ?? "starting"}, ${String(Math.floor((Date.now() - started) / 1000))}s elapsed); it serves this request and every later one`,
1099
+ })
1100
+ .catch(() => undefined);
1101
+ }, WAIT_PROGRESS_INTERVAL_MS);
1102
+ try {
1103
+ const built = await waitFor(project, options.signal, operation);
1104
+ if (!built.ok)
1105
+ return err(exportUnavailable(operation, built.error));
1106
+ return ok(this.#readerFor(built.value));
1107
+ }
1108
+ finally {
1109
+ clearInterval(timer);
1110
+ }
1111
+ }
1112
+ /** The published or building export's inventory, otherwise one `kuna functions` run. */
1113
+ async #ensureInventory(installation, options) {
1114
+ if (this.#reader !== undefined)
1115
+ return ok(this.#reader.project.inventory);
1116
+ const exported = this.#status?.inventory;
1117
+ if (exported !== undefined && exported !== null)
1118
+ return ok(exported);
1119
+ if (this.#inventory === undefined) {
1120
+ // The session owns the shared run; each caller only stops waiting.
1121
+ const run = this.#listInventory(installation);
1122
+ this.#inventory = run;
1123
+ void run.then((listed) => {
1124
+ // A failed listing is retried by the next request.
1125
+ if (!listed.ok && this.#inventory === run)
1126
+ this.#inventory = undefined;
1127
+ });
1128
+ }
1129
+ return waitFor(this.#inventory, options.signal, "list_procedures");
1130
+ }
1131
+ /**
1132
+ * The export lists every callable entry before it decompiles, so listings
1133
+ * wait for that inventory. Only an export that ends without one, or none at
1134
+ * all, leads to a separate `kuna functions` run.
1135
+ */
1136
+ async #listInventory(installation) {
1137
+ // A concurrent text request may still be choosing between the cache and a
1138
+ // build; its outcome decides whether an inventory already exists.
1139
+ await this.#starting?.catch(() => undefined);
1140
+ if (this.#reader !== undefined)
1141
+ return ok(this.#reader.project.inventory);
1142
+ const exported = await this.#exportInventory;
1143
+ if (exported !== undefined)
1144
+ return ok(exported);
1145
+ const run = await this.#commands.run({
1146
+ installation,
1147
+ arguments: (input) => ["functions", input, "--json"],
1148
+ operation: "list_procedures",
1149
+ deadline: kunaFunctionDeadline(installation.configuration),
1150
+ outputBytes: KUNA_INVENTORY_OUTPUT_BYTES,
1151
+ signal: this.#session.signal,
1152
+ });
1153
+ if (!run.ok)
1154
+ return run;
1155
+ const inventory = parseKunaInventory(run.value.stdout.text);
1156
+ return inventory.ok
1157
+ ? ok(inventory.value)
1158
+ : err(new ProviderAdapterError(KUNA_PROVIDER_ID, "list_procedures", {
1159
+ userMessage: `Kuna's function inventory is not usable: ${inventory.error}`,
1160
+ }));
1161
+ }
1162
+ }