rea-agents 6.4.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 (1420) hide show
  1. package/DISCLAIMER.md +136 -0
  2. package/README.md +76 -16
  3. package/THIRD_PARTY_NOTICES.md +135 -0
  4. package/bridge/android/ReaJadxBridge.java +281 -25
  5. package/bridge/cutter/rea_bridge.py +825 -0
  6. package/bridge/ghidra/ReaGhidraAnalysisOptions.java +38 -0
  7. package/bridge/ghidra/ReaGhidraBridge.java +1232 -142
  8. package/bridge/ghidra/ReaGhidraBundleActivator.java +14 -0
  9. package/bridge/ghidra/ReaGhidraMipsSoftFloat.java +176 -0
  10. package/bridge/ghidra/ReaGhidraPrepareRaw.java +49 -0
  11. package/bridge/hopper_bridge.py +111 -69
  12. package/bridge/mitmproxy/capture.py +189 -13
  13. package/bridge/native/rea_lldb_tracer.py +88 -10
  14. package/bridge/process/ProcessRunTokenReader.swift +76 -34
  15. package/bridge/pwndbg/core_context.py +15 -2
  16. package/bridge/pwntools/layout_impl.py +5 -0
  17. package/bridge/pwntools/recorded_crash_impl.py +31 -10
  18. package/dist/adb/AdbCommand.js +148 -0
  19. package/dist/adb/AdbConfiguration.js +41 -7
  20. package/dist/adb/AdbDeviceOutput.js +59 -37
  21. package/dist/adb/AdbDirectoryListing.js +80 -0
  22. package/dist/adb/AdbHostFileName.js +34 -0
  23. package/dist/adb/AdbInputSnapshot.js +126 -0
  24. package/dist/adb/AdbProvider.js +1106 -346
  25. package/dist/adb/AdbShellOutput.js +146 -77
  26. package/dist/android/AndroidTargetSnapshot.js +7 -7
  27. package/dist/android/JadxAnalysis.js +53 -33
  28. package/dist/android/JadxConfiguration.js +283 -145
  29. package/dist/android/JadxDoctor.js +123 -0
  30. package/dist/android/JadxFailure.js +154 -0
  31. package/dist/android/JadxInterruption.js +13 -0
  32. package/dist/android/JadxJavaProbe.js +246 -0
  33. package/dist/android/JadxMcpTransport.js +53 -18
  34. package/dist/android/JadxProtocol.js +43 -2
  35. package/dist/android/JadxProvider.js +183 -102
  36. package/dist/android/JadxRelease.js +17 -2
  37. package/dist/android/JadxSession.js +35 -14
  38. package/dist/android/JadxWorkspaceRoot.js +157 -0
  39. package/dist/apktool/ApktoolCommandCleanup.js +134 -0
  40. package/dist/apktool/ApktoolCommandOutput.js +22 -0
  41. package/dist/apktool/ApktoolConfiguration.js +306 -45
  42. package/dist/apktool/ApktoolDecodeOutput.js +131 -42
  43. package/dist/apktool/ApktoolDecodedInventory.js +52 -0
  44. package/dist/apktool/ApktoolProvider.js +296 -340
  45. package/dist/apktool/ApktoolStringTables.js +178 -0
  46. package/dist/apktool/ApktoolWorkspace.js +162 -0
  47. package/dist/application/AnalysisContextQueries.js +5 -8
  48. package/dist/application/AnalysisDocument.js +19 -4
  49. package/dist/application/AnalysisProvider.js +36 -18
  50. package/dist/application/AppBundleExecutable.js +16 -9
  51. package/dist/application/BinaryTargetResolver.js +204 -40
  52. package/dist/application/BrowserEvidence.js +1 -1
  53. package/dist/application/BrowserObservationService.js +54 -9
  54. package/dist/application/BrowserScenarioCaptureService.js +26 -7
  55. package/dist/application/CallPathTracing.js +52 -13
  56. package/dist/application/CapabilityInventory.js +182 -36
  57. package/dist/application/ClaudeDesktopConfigLocation.js +152 -0
  58. package/dist/application/ClientConfigurationCleanup.js +73 -0
  59. package/dist/application/ClientConfigurationDocument.js +270 -151
  60. package/dist/application/ClientConfigurationFiles.js +51 -14
  61. package/dist/application/ClientConfigurationPublication.js +167 -0
  62. package/dist/application/ClientRegistrationEnvironment.js +40 -4
  63. package/dist/application/ClientRegistrationIdentity.js +112 -32
  64. package/dist/application/ClientRegistrationStatus.js +280 -84
  65. package/dist/application/DirectAnalysis.js +98 -30
  66. package/dist/application/DirectAnalysisCleanup.js +5 -1
  67. package/dist/application/DirectAnalysisStatus.js +13 -1
  68. package/dist/application/Doctor.js +192 -37
  69. package/dist/application/DoctorDiagnostics.js +59 -16
  70. package/dist/application/DoctorProviderIds.js +8 -0
  71. package/dist/application/DoctorScope.js +11 -2
  72. package/dist/application/DshCordisPatch.js +355 -0
  73. package/dist/application/DshCordisYaml.js +155 -0
  74. package/dist/application/EnhancedLiteralTracing.js +30 -16
  75. package/dist/application/EnhancedToolTypes.js +0 -1
  76. package/dist/application/EnhancedTools.js +154 -56
  77. package/dist/application/EvidenceBundleCommands.js +30 -7
  78. package/dist/application/EvidenceBundleFiles.js +29 -7
  79. package/dist/application/FunctionAnalysisEvidence.js +3 -0
  80. package/dist/application/GeminiClientSettings.js +25 -13
  81. package/dist/application/HermesClientHome.js +20 -0
  82. package/dist/application/HermesConfigurationYaml.js +312 -0
  83. package/dist/application/HopperDownload.js +11 -3
  84. package/dist/application/HopperReleaseFeed.js +71 -0
  85. package/dist/application/InventoryProjectionEvidence.js +0 -1
  86. package/dist/application/InvestigationProviders.js +14 -3
  87. package/dist/application/JsonFiles.js +110 -20
  88. package/dist/application/JsonInputFile.js +220 -62
  89. package/dist/application/LinuxHopper.js +218 -115
  90. package/dist/application/LinuxHopperPublisher.js +656 -0
  91. package/dist/application/MacHopper.js +203 -83
  92. package/dist/application/MacHopperPaths.js +40 -0
  93. package/dist/application/{MipsElfAbiFlags.js → MipsElfMetadata.js} +71 -10
  94. package/dist/application/MipsElfSharedLoad.js +164 -0
  95. package/dist/application/MipsGnuAttributes.js +90 -0
  96. package/dist/application/MsixPackageStorage.js +140 -0
  97. package/dist/application/ProgressReporter.js +1 -1
  98. package/dist/application/ProviderOperationExecution.js +15 -14
  99. package/dist/application/ReconstructionCoverageService.js +0 -1
  100. package/dist/application/ReconstructionObligationCandidates.js +20 -4
  101. package/dist/application/ReconstructionObligationLedgerDiagnostics.js +2 -2
  102. package/dist/application/ReconstructionObligationLedgerEvaluation.js +19 -33
  103. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -72
  104. package/dist/application/ReconstructionObligationLedgerService.js +6 -2
  105. package/dist/application/ReconstructionObligationOriginalCases.js +10 -1
  106. package/dist/application/ReferenceSourceImport.js +24 -8
  107. package/dist/application/ReferenceSourceImportEntries.js +180 -37
  108. package/dist/application/ReferenceSourceImportPolicy.js +5 -3
  109. package/dist/application/ReferenceSourceImportTypes.js +0 -1
  110. package/dist/application/ReferenceSourceVcsAdapter.js +36 -17
  111. package/dist/application/RegularFileRead.js +117 -70
  112. package/dist/application/Setup.js +59 -21
  113. package/dist/application/SetupClientConfiguration.js +301 -66
  114. package/dist/application/SetupClients.js +25 -10
  115. package/dist/application/SetupHost.js +149 -51
  116. package/dist/application/SetupInstallFailure.js +58 -3
  117. package/dist/application/SetupPlan.js +94 -55
  118. package/dist/application/SetupRecoveryBackup.js +93 -0
  119. package/dist/application/SetupRegistrationEnvironment.js +14 -1
  120. package/dist/application/SetupSkill.js +303 -76
  121. package/dist/application/SourceLimitations.js +35 -0
  122. package/dist/application/SupportedClients.js +166 -32
  123. package/dist/application/TypeScriptEmittedSourceCandidates.js +26 -0
  124. package/dist/application/Uninstall.js +356 -110
  125. package/dist/application/UninstallFailure.js +14 -0
  126. package/dist/application/Update.js +54 -25
  127. package/dist/application/UpdateCommandProgress.js +66 -0
  128. package/dist/application/UpdateFailure.js +17 -0
  129. package/dist/application/UpdateMaintenance.js +18 -31
  130. package/dist/application/UpdateRuntime.js +198 -54
  131. package/dist/application/WebModuleTraceService.js +42 -22
  132. package/dist/application/WebNetworkCaptureService.js +24 -12
  133. package/dist/application/WebRuntimeService.js +41 -8
  134. package/dist/application/WebScriptExportService.js +6 -4
  135. package/dist/application/WebSourceLocationService.js +23 -8
  136. package/dist/application/WindowsCapabilities.js +18 -15
  137. package/dist/application/WorkflowEvidence.js +31 -1
  138. package/dist/application/analysisView/AnalysisViewService.js +46 -11
  139. package/dist/application/android/AndroidAnalysisService.js +5 -4
  140. package/dist/application/android/AndroidPackageInspection.js +25 -0
  141. package/dist/application/android/AndroidSearchEvidenceSummary.js +98 -0
  142. package/dist/application/artifacts/ArtifactComparisonEvidence.js +32 -0
  143. package/dist/application/binary/AnalysisProviderEvaluation.js +14 -11
  144. package/dist/application/binary/AnalysisProviderRegistry.js +365 -60
  145. package/dist/application/binary/AnalysisSnapshotCache.js +41 -20
  146. package/dist/application/binary/AnalysisSnapshotFiles.js +75 -9
  147. package/dist/application/binary/BinarySession.js +308 -117
  148. package/dist/application/binary/BinarySessionExecution.js +5 -4
  149. package/dist/application/binary/BinarySessionOpen.js +13 -6
  150. package/dist/application/binary/BinarySessionRecords.js +36 -7
  151. package/dist/application/binary/BinarySessionStatus.js +96 -27
  152. package/dist/application/binary/BinaryTargetSummary.js +9 -0
  153. package/dist/application/binary/CompositeProvider.js +116 -28
  154. package/dist/application/binary/LazyAnalysisProvider.js +6 -66
  155. package/dist/application/binary/SessionProviderRouter.js +16 -4
  156. package/dist/application/binaryDiagnostics/BinaryLayoutService.js +14 -5
  157. package/dist/application/binaryDiagnostics/PeResourcesService.js +25 -5
  158. package/dist/application/binaryDiagnostics/RecordedCrashService.js +17 -7
  159. package/dist/application/captures/PacketCaptureService.js +84 -0
  160. package/dist/application/closeOwnedWebResources.js +37 -0
  161. package/dist/application/electron/ElectronFusePort.js +1 -0
  162. package/dist/application/electron/ElectronFuseService.js +45 -0
  163. package/dist/application/evm/EvmInterfaceEvidence.js +11 -0
  164. package/dist/application/evm/EvmInterfaceService.js +5 -15
  165. package/dist/application/firmware/FirmwareAnalysisService.js +4 -3
  166. package/dist/application/flutter/DartAotInspection.js +26 -0
  167. package/dist/application/flutter/FlutterBuildAnalysisPort.js +1 -0
  168. package/dist/application/flutter/FlutterBuildAnalysisService.js +13 -0
  169. package/dist/application/frida/FridaInstrumentationPort.js +8 -0
  170. package/dist/application/frida/FridaInstrumentationService.js +310 -0
  171. package/dist/application/frida/fridaInputErrors.js +17 -0
  172. package/dist/application/go/GoBinaryPort.js +1 -0
  173. package/dist/application/go/GoBinaryService.js +79 -0
  174. package/dist/application/harmony/HarmonyApplicationService.js +17 -0
  175. package/dist/application/investigation/EvidenceLedger.js +43 -18
  176. package/dist/application/investigation/InvestigationRecords.js +12 -21
  177. package/dist/application/investigation/UnknownEvidence.js +22 -18
  178. package/dist/application/javascript/ElectronActiveObservationService.js +55 -25
  179. package/dist/application/javascript/ElectronBoundaryAnalysis.js +17 -3
  180. package/dist/application/javascript/ElectronBoundaryGraph.js +2 -0
  181. package/dist/application/javascript/ElectronBoundaryGraphCallPaths.js +144 -0
  182. package/dist/application/javascript/ElectronBoundaryGraphIpc.js +26 -7
  183. package/dist/application/javascript/ElectronBoundaryGraphNative.js +1 -1
  184. package/dist/application/javascript/ElectronBoundaryGraphWindows.js +61 -11
  185. package/dist/application/javascript/ElectronEvidence.js +1 -2
  186. package/dist/application/javascript/ElectronObservationService.js +41 -8
  187. package/dist/application/javascript/JavaScriptApplicationEvidence.js +21 -0
  188. package/dist/application/javascript/JavaScriptApplicationService.js +29 -14
  189. package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +0 -1
  190. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +119 -49
  191. package/dist/application/javascript/JavaScriptArtifactAnalysisTypes.js +30 -1
  192. package/dist/application/javascript/JavaScriptArtifactGraphAccumulator.js +51 -21
  193. package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +31 -7
  194. package/dist/application/javascript/JavaScriptArtifactGraphContext.js +28 -6
  195. package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +25 -14
  196. package/dist/application/javascript/JavaScriptArtifactGraphEvidence.js +3 -3
  197. package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +186 -50
  198. package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +173 -14
  199. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +959 -188
  200. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +57 -32
  201. package/dist/application/javascript/JavaScriptArtifactReconstructionInput.js +2 -0
  202. package/dist/application/javascript/JavaScriptModuleRelationships.js +34 -12
  203. package/dist/application/javascript/JavaScriptRecoveryService.js +29 -9
  204. package/dist/application/javascript/JavaScriptRuntimeObservationEvidence.js +1 -2
  205. package/dist/application/javascript/JavaScriptRuntimeObservationService.js +33 -9
  206. package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +0 -1
  207. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +4 -5
  208. package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +138 -43
  209. package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +13 -4
  210. package/dist/application/javascript/JavaScriptSemanticGraphConstruction.js +23 -3
  211. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +18 -5
  212. package/dist/application/javascript/JavaScriptSemanticGraphElectronProjection.js +67 -0
  213. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +4 -6
  214. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +2 -3
  215. package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +2 -3
  216. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +5 -8
  217. package/dist/application/javascript/JavaScriptSemanticTraceService.js +0 -1
  218. package/dist/application/managed/ManagedApplicationGraphService.js +0 -1
  219. package/dist/application/managed/ManagedMemberComparisonService.js +72 -54
  220. package/dist/application/managed/ManagedNativeVerificationService.js +0 -1
  221. package/dist/application/managed/ManagedReconstructionService.js +0 -1
  222. package/dist/application/native/NativeCallRoutes.js +78 -41
  223. package/dist/application/native/NativeDispatchMetadataInspection.js +6 -2
  224. package/dist/application/native/NativeUiActionTrace.js +43 -22
  225. package/dist/application/native/NativeValueTrace.js +65 -23
  226. package/dist/application/pcap/PcapAnalysisPort.js +1 -0
  227. package/dist/application/pcap/PcapAnalysisService.js +24 -0
  228. package/dist/application/process/ProcessCli.js +33 -13
  229. package/dist/application/reverse/ReverseEngineeringCommandPort.js +1 -0
  230. package/dist/application/reverse/ReverseEngineeringService.js +688 -0
  231. package/dist/application/rust/RustBinaryPort.js +1 -0
  232. package/dist/application/rust/RustBinaryService.js +82 -0
  233. package/dist/application/signals/SignalRecordingService.js +84 -0
  234. package/dist/application/sqlite/SqliteDatabaseCapability.js +30 -0
  235. package/dist/application/sqlite/SqliteDatabasePort.js +1 -0
  236. package/dist/application/sqlite/SqliteDatabaseService.js +76 -0
  237. package/dist/application/wasm/WasmArtifactPort.js +1 -0
  238. package/dist/application/wasm/WasmArtifactService.js +76 -0
  239. package/dist/application/wasm/WasmInterfaceComparisonService.js +188 -0
  240. package/dist/artifacts/AnalysisCleanupLease.js +119 -0
  241. package/dist/artifacts/ArtifactFileOperation.js +150 -0
  242. package/dist/artifacts/ArtifactHash.js +15 -3
  243. package/dist/artifacts/ArtifactPaths.js +4 -7
  244. package/dist/artifacts/ArtifactProvider.js +24 -9
  245. package/dist/artifacts/ArtifactReader.js +63 -5
  246. package/dist/artifacts/ArtifactResourceScope.js +92 -9
  247. package/dist/artifacts/AsarArtifactReader.js +186 -120
  248. package/dist/artifacts/AsarEntryStream.js +49 -17
  249. package/dist/artifacts/AsarListing.js +78 -0
  250. package/dist/artifacts/DirectoryArtifactReader.js +119 -28
  251. package/dist/artifacts/MachOSliceArtifactReader.js +153 -23
  252. package/dist/artifacts/NativeDmgArtifactReader.js +264 -62
  253. package/dist/artifacts/OrderedReads.js +57 -0
  254. package/dist/artifacts/SafeOutputTree.js +24 -7
  255. package/dist/artifacts/SafeOutputTreeCreationFailure.js +1 -0
  256. package/dist/artifacts/SafeOutputTreeReadback.js +10 -16
  257. package/dist/artifacts/ZipArtifactReader.js +150 -25
  258. package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +79 -68
  259. package/dist/artifacts/apple/DylibFileAccess.js +106 -0
  260. package/dist/artifacts/apple/DylibResolutionReader.js +72 -157
  261. package/dist/artifacts/apple/InterfaceBuilderAnalysis.js +108 -29
  262. package/dist/artifacts/apple/InterfaceBuilderDecodeBudget.js +81 -28
  263. package/dist/artifacts/apple/KeyedArchiveReader.js +23 -13
  264. package/dist/artifacts/apple/MachoLoadCommandReader.js +77 -61
  265. package/dist/artifacts/apple/NibArchive.js +11 -4
  266. package/dist/artifacts/apple/PlistNumberLiterals.js +106 -118
  267. package/dist/artifacts/extraction/ArtifactExtraction.js +21 -19
  268. package/dist/artifacts/hostExecutableMarking.js +16 -0
  269. package/dist/artifacts/inventory/ArtifactGraphConstruction.js +139 -41
  270. package/dist/artifacts/inventory/classify.js +36 -17
  271. package/dist/artifacts/inventory/hashStableRootArtifact.js +14 -7
  272. package/dist/artifacts/inventory/reader.js +36 -21
  273. package/dist/artifacts/inventory/scanCanonical.js +27 -21
  274. package/dist/artifacts/inventory/scanReader.js +36 -10
  275. package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +166 -8
  276. package/dist/artifacts/readArtifactFileChunks.js +9 -0
  277. package/dist/artifacts/readStableArtifact.js +13 -11
  278. package/dist/browser/BrowserProcessStartup.js +20 -9
  279. package/dist/browser/BrowserScenarioPartialObservation.js +74 -92
  280. package/dist/browser/BrowserScenarioSecrets.js +176 -46
  281. package/dist/browser/CdpBrowserProvider.js +124 -102
  282. package/dist/browser/CdpCaptureDocuments.js +232 -102
  283. package/dist/browser/CdpCaptureDomSvg.js +80 -76
  284. package/dist/browser/CdpCaptureEventBodyShapes.js +9 -5
  285. package/dist/browser/CdpCaptureEventHandlers.js +23 -12
  286. package/dist/browser/CdpCaptureEvents.js +49 -10
  287. package/dist/browser/CdpCaptureStorage.js +22 -5
  288. package/dist/browser/CdpCaptureStorageFingerprints.js +54 -11
  289. package/dist/browser/CdpCaptureValues.js +12 -1
  290. package/dist/browser/CdpConnection.js +135 -30
  291. package/dist/browser/CdpElectronInspection.js +74 -64
  292. package/dist/browser/CdpElectronProvider.js +63 -6
  293. package/dist/browser/CdpElectronScriptEvents.js +4 -1
  294. package/dist/browser/CdpElectronScripts.js +4 -6
  295. package/dist/browser/CdpElectronWorkers.js +20 -4
  296. package/dist/browser/CdpEndpoint.js +143 -17
  297. package/dist/browser/CdpObservationSession.js +24 -8
  298. package/dist/browser/CdpPageCapture.js +68 -17
  299. package/dist/browser/CdpPageCaptureScripts.js +18 -13
  300. package/dist/browser/CdpPageCaptureWorkers.js +46 -11
  301. package/dist/browser/CdpSafeMetadata.js +32 -24
  302. package/dist/browser/CdpScreenshot.js +5 -14
  303. package/dist/browser/CdpSnapshotNodes.js +103 -0
  304. package/dist/browser/CdpSnapshotStrings.js +15 -0
  305. package/dist/browser/CdpTargetSession.js +76 -7
  306. package/dist/browser/CdpTargetSessionOwner.js +198 -0
  307. package/dist/browser/CdpWebMcpDiscovery.js +23 -6
  308. package/dist/browser/ElectronCaptureCleanup.js +82 -0
  309. package/dist/browser/ElectronProcessCleanup.js +91 -0
  310. package/dist/browser/PlaywrightBrowserScenarioProvider.js +75 -20
  311. package/dist/browser/PlaywrightElectronActiveActions.js +57 -9
  312. package/dist/browser/PlaywrightElectronActiveFuses.js +86 -0
  313. package/dist/browser/PlaywrightElectronActiveProjection.js +21 -4
  314. package/dist/browser/PlaywrightElectronActiveProvider.js +237 -175
  315. package/dist/browser/PlaywrightExecutionBoundary.js +6 -4
  316. package/dist/browser/PlaywrightScenarioBrowser.js +240 -91
  317. package/dist/browser/PlaywrightScenarioEvents.js +287 -38
  318. package/dist/browser/PlaywrightScenarioServiceWorkers.js +336 -0
  319. package/dist/browser/PlaywrightScenarioSession.js +151 -46
  320. package/dist/browser/PlaywrightScenarioStorage.js +15 -7
  321. package/dist/browser/StructuredFieldToken.js +53 -0
  322. package/dist/browser/WebArtifactCleanup.js +53 -0
  323. package/dist/browser/WebSourceMapFetcher.js +181 -89
  324. package/dist/browser/assets/LocalWebScriptArtifacts.js +24 -3
  325. package/dist/browser/assets/PublishWebScripts.js +13 -2
  326. package/dist/browser/assets/ScenarioScriptCapture.js +2 -1
  327. package/dist/browser/assets/WebArtifactReads.js +15 -3
  328. package/dist/browser/assets/WebSourceLocationArtifacts.js +47 -3
  329. package/dist/browser/execution/CdpRuntimeSession.js +36 -7
  330. package/dist/browser/execution/CdpWebRuntimeProvider.js +22 -4
  331. package/dist/browser/history/CaptureFailures.js +29 -10
  332. package/dist/browser/history/CaptureFormatError.js +2 -2
  333. package/dist/browser/history/{HarJson.js → CaptureJson.js} +14 -4
  334. package/dist/browser/history/CaptureRedaction.js +16 -3
  335. package/dist/browser/history/CaptureRelease.js +20 -2
  336. package/dist/browser/history/HarCapture.js +54 -30
  337. package/dist/browser/history/HarSchema.js +36 -36
  338. package/dist/browser/history/HistoricalCaptureDecoder.js +93 -25
  339. package/dist/browser/history/NodeCaptureAdapter.js +48 -0
  340. package/dist/browser/history/{HarCaptureProcess.js → NodeCaptureProcess.js} +18 -9
  341. package/dist/browser/history/QlogCapture.js +385 -0
  342. package/dist/browser/history/SazCapture.js +130 -0
  343. package/dist/browser/history/SazHttp.js +61 -0
  344. package/dist/browser/history/SazMetadata.js +55 -0
  345. package/dist/browser/history/SazProjection.js +90 -0
  346. package/dist/browser/modules/NativeModuleResolver.js +248 -131
  347. package/dist/browser/modules/WebModuleArtifacts.js +49 -3
  348. package/dist/browser/network/PlaywrightNetworkContent.js +67 -9
  349. package/dist/browser/network/PlaywrightScenarioNetwork.js +249 -26
  350. package/dist/captures/TsharkCaptureProvider.js +377 -0
  351. package/dist/captures/parseFieldDiscovery.js +66 -0
  352. package/dist/captures/parsePacketOutput.js +21 -0
  353. package/dist/catalogIdentity.js +58 -42
  354. package/dist/cli/adbCommands.js +20 -21
  355. package/dist/cli/analysisViewCommands.js +1 -1
  356. package/dist/cli/androidCommands.js +13 -16
  357. package/dist/cli/apktoolCommands.js +14 -25
  358. package/dist/cli/applicationCommands.js +44 -17
  359. package/dist/cli/artifactCommands.js +1 -1
  360. package/dist/cli/binaryDiagnosticsCommands.js +17 -13
  361. package/dist/cli/browserAdvancedCommands.js +46 -26
  362. package/dist/cli/browserCommands.js +59 -33
  363. package/dist/cli/captureCommands.js +72 -0
  364. package/dist/cli/cliResultOutput.js +274 -0
  365. package/dist/cli/coreBinaryCommands.js +77 -30
  366. package/dist/cli/coreNativeCommands.js +53 -31
  367. package/dist/cli/cutterCommands.js +88 -0
  368. package/dist/cli/electronCommands.js +76 -13
  369. package/dist/cli/evmCommands.js +9 -19
  370. package/dist/cli/finishAnalysisCommand.js +52 -0
  371. package/dist/cli/firmwareCommands.js +20 -50
  372. package/dist/cli/flutterCommands.js +53 -0
  373. package/dist/cli/fridaCommands.js +219 -0
  374. package/dist/cli/goCommands.js +20 -0
  375. package/dist/cli/interactiveSetup.js +11 -1
  376. package/dist/cli/javascriptApplicationAnalysis.js +1 -1
  377. package/dist/cli/javascriptRecoveryCommands.js +18 -23
  378. package/dist/cli/jebCommands.js +2 -14
  379. package/dist/cli/jsonOutput.js +2 -2
  380. package/dist/cli/managedCommands.js +31 -3
  381. package/dist/cli/options.js +26 -2
  382. package/dist/cli/pcapCommands.js +29 -0
  383. package/dist/cli/processCommands.js +1 -1
  384. package/dist/cli/reverseEngineeringCommands.js +268 -0
  385. package/dist/cli/rustCommands.js +20 -0
  386. package/dist/cli/setupCommands.js +41 -12
  387. package/dist/cli/signalCommands.js +72 -0
  388. package/dist/cli/sqliteCommands.js +52 -0
  389. package/dist/cli/utilityCommands.js +116 -74
  390. package/dist/cli/wasmCommands.js +50 -0
  391. package/dist/cli/webModuleCommands.js +27 -38
  392. package/dist/cli/webNetworkCaptureCommands.js +10 -9
  393. package/dist/cli/webRuntimeCommands.js +15 -6
  394. package/dist/cli/webSourceLocationCommands.js +14 -33
  395. package/dist/cli-runtime/AnalysisCleanupLease-CWfTGYKd.js +103 -0
  396. package/dist/cli-runtime/AnalysisProvider-BGrYaMVo.js +38 -0
  397. package/dist/cli-runtime/AnalysisSnapshotCache-BjRlXeUS.js +711 -0
  398. package/dist/cli-runtime/ArtifactFileOperation-Dg4BcoEM.js +122 -0
  399. package/dist/cli-runtime/ArtifactReader-DMwm42bk.js +78 -0
  400. package/dist/cli-runtime/ArtifactResourceScope-CokZGcII.js +175 -0
  401. package/dist/cli-runtime/AsarHeader-BxwU17DJ.js +31 -0
  402. package/dist/cli-runtime/BinarySessionStatus-DRhjr7Vb.js +212 -0
  403. package/dist/cli-runtime/BinaryTargetResolver-tuCTjBlQ.js +1238 -0
  404. package/dist/cli-runtime/BoundedFileBytes-DRtiQNAQ.js +43 -0
  405. package/dist/cli-runtime/CdpTargetSession-CQ08KHbh.js +925 -0
  406. package/dist/cli-runtime/ClientConfigPath-Dn-V_GUf.js +255 -0
  407. package/dist/cli-runtime/ClientConfigurationDocument-C9T8MNGc.js +2021 -0
  408. package/dist/cli-runtime/ClientRegistrationStatus-PnD29RTX.js +585 -0
  409. package/dist/cli-runtime/CurrentEntrypointPath-m7QCIVN0.js +14 -0
  410. package/dist/cli-runtime/DirectAnalysis-C5NyUryV.js +581 -0
  411. package/dist/cli-runtime/DirectoryArtifactReader-CokAJ8vo.js +448 -0
  412. package/dist/cli-runtime/Doctor-DrkWsav4.js +668 -0
  413. package/dist/cli-runtime/ElectronFileScope-AP7VoVr7.js +1109 -0
  414. package/dist/cli-runtime/ElectronFuseFailures-DsjXR7Xp.js +609 -0
  415. package/dist/cli-runtime/ExecFileOutput-D6KLYTve.js +119 -0
  416. package/dist/cli-runtime/InterfaceBuilderDecodeBudget-CW1IO3dG.js +298 -0
  417. package/dist/cli-runtime/InventoryProjectionEvidence-DTH5QAqL.js +49 -0
  418. package/dist/cli-runtime/InvestigationProviders-CFh4a64d.js +118 -0
  419. package/dist/cli-runtime/JavaScriptApplicationEvidenceGraph-gOmPB2L6.js +160 -0
  420. package/dist/cli-runtime/JavaScriptApplicationWorkflowEvidence-WZgtK_Ok.js +75 -0
  421. package/dist/cli-runtime/JavaScriptWorkerMemoryLimit-B1bwMM1a.js +86 -0
  422. package/dist/cli-runtime/JebMcpEndpoint-BEalGZh9.js +710 -0
  423. package/dist/cli-runtime/JsonFiles-uvd6ZyQi.js +600 -0
  424. package/dist/cli-runtime/KunaInstallation-P0j3x851.js +1781 -0
  425. package/dist/cli-runtime/MacCodeSignature-MgYbRK_H.js +24 -0
  426. package/dist/cli-runtime/MacHopperPaths-bGzqjF1Z.js +34 -0
  427. package/dist/cli-runtime/MachoLoadCommandReader-CZm6N5vF.js +330 -0
  428. package/dist/cli-runtime/ManagedSnapshot-CPE9C3OD.js +4481 -0
  429. package/dist/cli-runtime/OwnedCommandCleanup-BN_V6Erc.js +187 -0
  430. package/dist/cli-runtime/OwnedRegularFile-D1f5nUCx.js +256 -0
  431. package/dist/cli-runtime/OwnedStagedOutput-D31dOozz.js +126 -0
  432. package/dist/cli-runtime/PrivateRuntimeRoot-Cd23u6jd.js +296 -0
  433. package/dist/cli-runtime/ProcessOwnership-CtrNr6ee.js +545 -0
  434. package/dist/cli-runtime/ProcessOwnershipObservation-C006iCtZ.js +920 -0
  435. package/dist/cli-runtime/ProviderDeadline-rSuH4Pm8.js +148 -0
  436. package/dist/cli-runtime/ProviderOperationExecution-CmU-XrQr.js +38 -0
  437. package/dist/cli-runtime/ProviderProcess-D87A7ctp.js +770 -0
  438. package/dist/cli-runtime/RegularFileRead-mbgGYtxe.js +125 -0
  439. package/dist/cli-runtime/SafeOutputTree-i904hd_2.js +525 -0
  440. package/dist/cli-runtime/SetupHost-CMPmPraB.js +1268 -0
  441. package/dist/cli-runtime/SharedStartupAttempt-BxKyf3Uv.js +1424 -0
  442. package/dist/cli-runtime/StableFileHash-Ame_h3lY.js +61 -0
  443. package/dist/cli-runtime/SupportedClients-DMafjitv.js +1066 -0
  444. package/dist/cli-runtime/UninstallFailure-1blyKXHE.js +22 -0
  445. package/dist/cli-runtime/Update-DAsASWlE.js +143 -0
  446. package/dist/cli-runtime/UpdateFailure-BcFNxEZZ.js +24 -0
  447. package/dist/cli-runtime/WindowsBatchCommand-Cx9kaVNf.js +97 -0
  448. package/dist/cli-runtime/WindowsNativeLoader-BqyZO0ZD.js +142 -0
  449. package/dist/cli-runtime/ZipArtifactReader-Jed69LEL.js +252 -0
  450. package/dist/cli-runtime/analysisErrorCleanup-COdAmDsb.js +33 -0
  451. package/dist/cli-runtime/appleArchiveFormat-Bb3G5CCI.js +269 -0
  452. package/dist/cli-runtime/application__DirectAnalysisStatus-F74bu9oy.js +150 -0
  453. package/dist/cli-runtime/application__EnhancedTools-Bg51b0Yp.js +1820 -0
  454. package/dist/cli-runtime/application__FunctionAnalysisEvidence-DBWIaYCh.js +41 -0
  455. package/dist/cli-runtime/application__ReconstructionCoverageService-AEPNpZqJ.js +32 -0
  456. package/dist/cli-runtime/application__ReconstructionObligationLedgerService-Cl9cPEZf.js +828 -0
  457. package/dist/cli-runtime/application__Setup-DwQzEewK.js +526 -0
  458. package/dist/cli-runtime/application__Uninstall-BOf9oyvQ.js +468 -0
  459. package/dist/cli-runtime/application__UpdateRuntime-CzWkRJHa.js +435 -0
  460. package/dist/cli-runtime/application__android__AndroidApplicationService-shW_aKlj.js +31 -0
  461. package/dist/cli-runtime/application__apple__AppleApplicationService-DIv6d3wB.js +31 -0
  462. package/dist/cli-runtime/application__harmony__HarmonyApplicationService-OIUFVQFV.js +31 -0
  463. package/dist/cli-runtime/application__javascript__ElectronActiveObservationService-wvCh72hK.js +118 -0
  464. package/dist/cli-runtime/application__javascript__ElectronObservationService-SydXPCwM.js +88 -0
  465. package/dist/cli-runtime/application__javascript__JavaScriptApplicationService-o0uEsjEc.js +12254 -0
  466. package/dist/cli-runtime/application__javascript__JavaScriptApplicationWorkflowService-BAheG_71.js +2336 -0
  467. package/dist/cli-runtime/application__javascript__JavaScriptRuntimeReconciliationService-Cnn4GP8q.js +88 -0
  468. package/dist/cli-runtime/application__javascript__JavaScriptSemanticTraceService-CmvLfV1A.js +299 -0
  469. package/dist/cli-runtime/artifacts__ArtifactProvider-wx2K0F2I.js +2205 -0
  470. package/dist/cli-runtime/binary-CWVNJhAC.js +19608 -0
  471. package/dist/cli-runtime/catalogIdentity-DAEEsOdX.js +1112 -0
  472. package/dist/cli-runtime/cli.js +44469 -0
  473. package/dist/cli-runtime/cliOutput-CgSuw782.js +163 -0
  474. package/dist/cli-runtime/cliOutput.js +5 -0
  475. package/dist/cli-runtime/cliResultOutput-10sd6xGx.js +1453 -0
  476. package/dist/cli-runtime/cliResultOutput.js +6 -0
  477. package/dist/cli-runtime/composition__browserScenario-BtPb1c1y.js +3414 -0
  478. package/dist/cli-runtime/composition__electronObservation-Bk8R6DJo.js +614 -0
  479. package/dist/cli-runtime/composition__electronScenario-BVF0qStH.js +916 -0
  480. package/dist/cli-runtime/cutterToolContracts-BQtG_Nzo.js +5267 -0
  481. package/dist/cli-runtime/doctorRuntime-B__SIpm-.js +478 -0
  482. package/dist/cli-runtime/dotnet__ManagedStaticProvider-DO5Yzcp4.js +5 -0
  483. package/dist/cli-runtime/errorSchemas-Ixz_q7qt.js +655 -0
  484. package/dist/cli-runtime/homeDirectory-DC_DeJIg.js +18 -0
  485. package/dist/cli-runtime/javascriptApplicationAnalysis-Dk6yBV8g.js +2088 -0
  486. package/dist/cli-runtime/javascriptExportReturnShapeProjection-CObOIiQ6.js +78 -0
  487. package/dist/cli-runtime/javascriptExportShapeComparisonSchemas-DpwuBenh.js +1244 -0
  488. package/dist/cli-runtime/javascriptRuntimeReconciliation-C6ZgWMys.js +1509 -0
  489. package/dist/cli-runtime/javascriptRuntimeReconciliationSchemas-D6tZKUQs.js +247 -0
  490. package/dist/cli-runtime/javascriptSemanticTraceSchemas-C7m0b6_w.js +126 -0
  491. package/dist/cli-runtime/lipo-DPQ6qurH.js +394 -0
  492. package/dist/cli-runtime/logger-BuDJ9xxO.js +48 -0
  493. package/dist/cli-runtime/machoContainer-Cy98bkFm.js +352 -0
  494. package/dist/cli-runtime/managedApplicationGraph-BazVqpJv.js +1136 -0
  495. package/dist/cli-runtime/managedToolContracts-BuFkMBH5.js +99 -0
  496. package/dist/cli-runtime/mcpDoctor.js +361 -0
  497. package/dist/cli-runtime/mcpStartupPolicy-imCbM3qo.js +28 -0
  498. package/dist/cli-runtime/native__NativeMacOSProvider-DTcRhuGA.js +5502 -0
  499. package/dist/cli-runtime/officialToolContracts-CzzVLx8I.js +1522 -0
  500. package/dist/cli-runtime/peMachine-B9ggfSJJ.js +95 -0
  501. package/dist/cli-runtime/propertyListKeys-D5dSASEy.js +355 -0
  502. package/dist/cli-runtime/providerCleanupError-BhsJyAhk.js +25 -0
  503. package/dist/cli-runtime/providerIdentities-Ao1XTvwx.js +31 -0
  504. package/dist/cli-runtime/providerStartupTimeout-B2tF2LtZ.js +17 -0
  505. package/dist/cli-runtime/readArtifactFileChunks-BbTL_PtB.js +129 -0
  506. package/dist/cli-runtime/reconstructionObligationLedgerSchemas-Bi6sect1.js +22156 -0
  507. package/dist/cli-runtime/rolldown-runtime-DXoylpqc.js +121 -0
  508. package/dist/cli-runtime/runtimeVersion-CMGd0bDu.js +23 -0
  509. package/dist/cli-runtime/safeJson-DKKACtdy.js +25 -0
  510. package/dist/cli-runtime/scanCanonical-CcDFUr-w.js +2594 -0
  511. package/dist/cli-runtime/snapshotEnvironment-Yvx5qwsl.js +196 -0
  512. package/dist/cli-runtime/toolContracts-CJzEyZ38.js +3795 -0
  513. package/dist/cli-runtime/toolOutputSchemaGroups-BqdSzySu.js +12249 -0
  514. package/dist/cli-runtime/workflowInputError-BP8z9Wxl.js +26 -0
  515. package/dist/cli.js +48 -5
  516. package/dist/cliBrowserScenarioCommands.js +41 -7
  517. package/dist/cliCommandNames.js +48 -0
  518. package/dist/cliEvidenceCommands.js +0 -1
  519. package/dist/cliJavaScriptRuntimeCommands.js +16 -14
  520. package/dist/cliJsonInput.js +12 -4
  521. package/dist/cliLogging.js +66 -15
  522. package/dist/cliObservationOptions.js +9 -0
  523. package/dist/cliOutput.js +105 -7
  524. package/dist/composition/binary.js +19 -2
  525. package/dist/composition/captures.js +3 -0
  526. package/dist/composition/directAnalysis.js +36 -11
  527. package/dist/composition/electronFuses.js +4 -0
  528. package/dist/composition/evm.js +12 -0
  529. package/dist/composition/flutter.js +3 -0
  530. package/dist/composition/go.js +4 -0
  531. package/dist/composition/javascriptAnalysisWorkerProcess.js +8 -8
  532. package/dist/composition/jeb.js +45 -5
  533. package/dist/composition/pcap.js +3 -0
  534. package/dist/composition/resolveWindowsProviderExecutable.js +61 -0
  535. package/dist/composition/reverseEngineering.js +29 -0
  536. package/dist/composition/rust.js +4 -0
  537. package/dist/composition/signals.js +3 -0
  538. package/dist/composition/sqlite.js +4 -0
  539. package/dist/composition/wasm.js +22 -0
  540. package/dist/composition/webNetworkCaptures.js +7 -2
  541. package/dist/config/environment.js +79 -4
  542. package/dist/config/ghidraDisabledAnalyzers.js +25 -0
  543. package/dist/config/homeDirectory.js +9 -6
  544. package/dist/config/mcpInputSchemaProfile.js +5 -1
  545. package/dist/config/mcpOutputSchemaProfile.js +22 -0
  546. package/dist/config/parseConfig.js +28 -34
  547. package/dist/config/parsers.js +4 -3
  548. package/dist/config/{ghidraStartupTimeout.js → providerStartupTimeout.js} +7 -3
  549. package/dist/contracts/adb/adbToolContracts.js +8 -8
  550. package/dist/contracts/analysisDetail.js +6 -3
  551. package/dist/contracts/analysisViewApiSurfaceExample.js +68 -0
  552. package/dist/contracts/analysisViewToolContracts.js +65 -3
  553. package/dist/contracts/android/androidToolContracts.js +17 -8
  554. package/dist/contracts/apktool/apktoolToolContracts.js +5 -1
  555. package/dist/contracts/applicationToolContracts.js +17 -2
  556. package/dist/contracts/artifactComparisonExample.js +18 -14
  557. package/dist/contracts/artifactToolContracts.js +16 -3
  558. package/dist/contracts/browserScenarioToolContracts.js +1 -1
  559. package/dist/contracts/browserToolContracts.js +13 -1
  560. package/dist/contracts/captures/captureToolContracts.js +42 -0
  561. package/dist/contracts/compactInputSchema.js +39 -12
  562. package/dist/contracts/cutterToolContracts.js +84 -0
  563. package/dist/contracts/enhancedToolContracts.js +2 -2
  564. package/dist/contracts/evm/evmToolContracts.js +30 -15
  565. package/dist/contracts/firmware/firmwareToolContracts.js +1 -1
  566. package/dist/contracts/flutter/flutterToolContracts.js +47 -0
  567. package/dist/contracts/fridaRemoteAddress.js +23 -0
  568. package/dist/contracts/fridaToolContracts.js +274 -0
  569. package/dist/contracts/functionComparisonExample.js +12 -1
  570. package/dist/contracts/gdbToolContracts.js +102 -0
  571. package/dist/contracts/go/goToolContracts.js +20 -0
  572. package/dist/contracts/hopperMemoryContracts.js +15 -0
  573. package/dist/contracts/inputSchemaPresentation.js +199 -38
  574. package/dist/contracts/investigationExamples.js +1 -0
  575. package/dist/contracts/javascript/electronToolContracts.js +27 -2
  576. package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +1 -0
  577. package/dist/contracts/javascript/javascriptRecoveryToolContracts.js +13 -1
  578. package/dist/contracts/javascript/javascriptRuntimeReconciliationExample.js +1 -0
  579. package/dist/contracts/jsonSchemaKeywords.js +29 -0
  580. package/dist/contracts/managed/managedToolContracts.js +43 -4
  581. package/dist/contracts/managed/managedWorkflowExamples.js +10 -1
  582. package/dist/contracts/managed/managedWorkflowToolContracts.js +4 -30
  583. package/dist/contracts/mobileApplicationGraphExamples.js +27 -12
  584. package/dist/contracts/native/binaryDiagnosticsToolContracts.js +3 -2
  585. package/dist/contracts/native/nativeToolContracts.js +10 -6
  586. package/dist/contracts/officialToolContracts.js +7 -7
  587. package/dist/contracts/pcap/pcapToolContracts.js +33 -0
  588. package/dist/contracts/providerSelection.js +1 -0
  589. package/dist/contracts/reconstructionReadinessExample.js +126 -119
  590. package/dist/contracts/reverseEngineeringToolContracts.js +52 -0
  591. package/dist/contracts/rizinDebugToolContracts.js +97 -0
  592. package/dist/contracts/rust/rustToolContracts.js +20 -0
  593. package/dist/contracts/sessionLifecycleInputs.js +34 -2
  594. package/dist/contracts/sessionToolContracts.js +4 -4
  595. package/dist/contracts/sessionToolSchemas.js +14 -0
  596. package/dist/contracts/signals/signalToolContracts.js +40 -0
  597. package/dist/contracts/sqlite/sqliteToolContracts.js +36 -0
  598. package/dist/contracts/toolContractExamples.js +29 -0
  599. package/dist/contracts/toolContractTypes.js +2 -0
  600. package/dist/contracts/toolContracts.js +26 -0
  601. package/dist/contracts/toolEffects.js +252 -9
  602. package/dist/contracts/toolOutputSchemaGroups.js +78 -32
  603. package/dist/contracts/toolOutputSchemaPrimitives.js +118 -10
  604. package/dist/contracts/toolSchemaMetadata.js +102 -16
  605. package/dist/contracts/unknownContractExamples.js +1 -1
  606. package/dist/contracts/wasm/wasmComparisonContracts.js +52 -0
  607. package/dist/contracts/wasm/wasmToolContracts.js +33 -0
  608. package/dist/contracts/webNetworkCaptureToolContracts.js +15 -4
  609. package/dist/cutter/CutterBridgeClient.js +760 -0
  610. package/dist/cutter/CutterBridgeService.js +187 -0
  611. package/dist/doctorRuntime.js +41 -8
  612. package/dist/domain/adb/adbDeviceAnalysis.js +45 -5
  613. package/dist/domain/analysisErrorBase.js +79 -2
  614. package/dist/domain/analysisErrorCleanup.js +4 -2
  615. package/dist/domain/analysisErrorCore.js +32 -0
  616. package/dist/domain/analysisErrorPresentation.js +80 -20
  617. package/dist/domain/analysisErrorProjection.js +72 -37
  618. package/dist/domain/analysisProfile.js +7 -3
  619. package/dist/domain/analysisSearch.js +26 -0
  620. package/dist/domain/analysisSnapshot.js +312 -185
  621. package/dist/domain/analysisView/WebNetworkApiSurfaceAccumulator.js +353 -0
  622. package/dist/domain/analysisView/analysisView.js +391 -44
  623. package/dist/domain/analysisView/analysisViewCoverage.js +32 -0
  624. package/dist/domain/analysisView/analysisViewDataAdmission.js +86 -0
  625. package/dist/domain/analysisView/analysisViewErrors.js +4 -0
  626. package/dist/domain/analysisView/analysisViewParent.js +12 -0
  627. package/dist/domain/analysisView/analysisViewText.js +29 -0
  628. package/dist/domain/analysisView/androidPackageView.js +102 -0
  629. package/dist/domain/analysisView/artifactInventoryView.js +126 -0
  630. package/dist/domain/analysisView/binaryLayoutView.js +11 -4
  631. package/dist/domain/analysisView/dartAotView.js +93 -0
  632. package/dist/domain/analysisView/evmInterfaceView.js +105 -0
  633. package/dist/domain/analysisView/interfaceBuilderView.js +182 -0
  634. package/dist/domain/analysisView/javascriptApplicationCoverage.js +27 -0
  635. package/dist/domain/analysisView/javascriptApplicationView.js +123 -49
  636. package/dist/domain/analysisView/javascriptFactsView.js +92 -0
  637. package/dist/domain/analysisView/javascriptModuleReferences.js +37 -0
  638. package/dist/domain/analysisView/machoView.js +186 -0
  639. package/dist/domain/analysisView/managedArtifactView.js +108 -0
  640. package/dist/domain/analysisView/managedMemberView.js +215 -0
  641. package/dist/domain/analysisView/nativeFunctionView.js +20 -25
  642. package/dist/domain/analysisView/pcapCaptureView.js +264 -0
  643. package/dist/domain/analysisView/qlogCaptureView.js +198 -0
  644. package/dist/domain/analysisView/wasmArtifactView.js +162 -0
  645. package/dist/domain/analysisView/webNetworkApiSurfaceView.js +123 -0
  646. package/dist/domain/analysisView/webNetworkCaptureView.js +388 -0
  647. package/dist/domain/android/androidAnalysis.js +36 -2
  648. package/dist/domain/android/androidApplication.js +37 -64
  649. package/dist/domain/apktool/apktoolResourceAnalysis.js +70 -8
  650. package/dist/domain/apple/appleApplication.js +70 -87
  651. package/dist/domain/apple/appleArchiveFormat.js +184 -0
  652. package/dist/domain/apple/appleAssetCatalog.js +15 -0
  653. package/dist/domain/apple/appleBundleAnatomy.js +57 -69
  654. package/dist/domain/apple/dyldPaths.js +9 -2
  655. package/dist/domain/apple/dylibResolution.js +24 -10
  656. package/dist/domain/apple/dylibResolutionFindings.js +8 -9
  657. package/dist/domain/apple/interfaceBuilderGraph.js +78 -33
  658. package/dist/domain/apple/interfaceBuilderKeyedArchive.js +39 -12
  659. package/dist/domain/apple/jvmClassFile.js +226 -0
  660. package/dist/domain/apple/keyedArchive.js +39 -17
  661. package/dist/domain/apple/machoContainer.js +123 -8
  662. package/dist/domain/apple/machoCpuIdentity.js +4 -0
  663. package/dist/domain/apple/plistNumbers.js +67 -5
  664. package/dist/domain/apple/plistValue.js +95 -19
  665. package/dist/domain/artifactComparison.js +116 -37
  666. package/dist/domain/artifactDecompressionBudget.js +26 -0
  667. package/dist/domain/artifactGraph.js +18 -9
  668. package/dist/domain/artifactIdentity.js +4 -1
  669. package/dist/domain/artifactInspection.js +34 -3
  670. package/dist/domain/artifactInventoryEvidence.js +146 -40
  671. package/dist/domain/binaryTarget.js +251 -109
  672. package/dist/domain/binaryTargetTypes.js +24 -1
  673. package/dist/domain/browserNetworkEvidence.js +24 -3
  674. package/dist/domain/browserObservation.js +92 -56
  675. package/dist/domain/browserObservationError.js +4 -4
  676. package/dist/domain/browserObservationSchemas.js +4 -1
  677. package/dist/domain/browserScenarioCapture.js +11 -1
  678. package/dist/domain/browserScenarioCaptureLimits.js +34 -0
  679. package/dist/domain/browserScenarioCaptureValues.js +76 -2
  680. package/dist/domain/browserScenarioDiff.js +120 -11
  681. package/dist/domain/browserScenarioDiffEvidence.js +44 -13
  682. package/dist/domain/browserScenarioDiffValues.js +10 -3
  683. package/dist/domain/browserScenarioNetworkComparison.js +158 -0
  684. package/dist/domain/browserScenarioNormalization.js +10 -13
  685. package/dist/domain/browserScenarioValues.js +7 -13
  686. package/dist/domain/browserSession.js +2 -2
  687. package/dist/domain/bundleComparison.js +1 -5
  688. package/dist/domain/callPath.js +40 -3
  689. package/dist/domain/captures/packetCapture.js +139 -0
  690. package/dist/domain/captures/packetFields.js +81 -0
  691. package/dist/domain/changedBehavior.js +43 -41
  692. package/dist/domain/comparisonSourceEvidence.js +6 -0
  693. package/dist/domain/dosCom.js +2 -2
  694. package/dist/domain/dosMz.js +66 -19
  695. package/dist/domain/electron/electronFuseEvidence.js +42 -0
  696. package/dist/domain/electron/electronFuses.js +360 -0
  697. package/dist/domain/elfFixedHeader.js +66 -0
  698. package/dist/domain/evidence.js +105 -39
  699. package/dist/domain/evidenceBundle.js +67 -22
  700. package/dist/domain/evidenceErrors.js +5 -0
  701. package/dist/domain/evm/evmInterface.js +18 -4
  702. package/dist/domain/evm/solidityMetadata.js +70 -0
  703. package/dist/domain/explicitSensitiveFailure.js +44 -23
  704. package/dist/domain/fileSnapshotObservation.js +25 -0
  705. package/dist/domain/firmware/firmwareAnalysis.js +29 -0
  706. package/dist/domain/fixedTupleSchema.js +9 -0
  707. package/dist/domain/flutter/flutterBuildAnalysis.js +141 -0
  708. package/dist/domain/functionCallCoverage.js +60 -0
  709. package/dist/domain/functionComparisonDimensions.js +136 -18
  710. package/dist/domain/functionComparisonNormalization.js +83 -19
  711. package/dist/domain/functionComparisonResults.js +7 -6
  712. package/dist/domain/functionComparisonSchemas.js +14 -3
  713. package/dist/domain/functionDossierEvidence.js +4 -0
  714. package/dist/domain/go/goBinary.js +96 -0
  715. package/dist/domain/harmony/harmonyApplication.js +156 -0
  716. package/dist/domain/hopperErrors.js +19 -18
  717. package/dist/domain/hopperPublisher.js +12 -0
  718. package/dist/domain/hopperValues.js +135 -34
  719. package/dist/domain/javascript/electronActiveObservation.js +1 -0
  720. package/dist/domain/javascript/electronObservation.js +4 -1
  721. package/dist/domain/javascript/electronStaticAnalysisBrowser.js +94 -33
  722. package/dist/domain/javascript/electronStaticAnalysisIpc.js +3 -1
  723. package/dist/domain/javascript/electronStaticAnalysisNative.js +19 -5
  724. package/dist/domain/javascript/electronStaticAnalysisValues.js +14 -28
  725. package/dist/domain/javascript/electronStaticOptionObjects.js +45 -0
  726. package/dist/domain/javascript/electronWrappedCallPaths.js +551 -0
  727. package/dist/domain/javascript/htmlArtifactReferences.js +94 -4
  728. package/dist/domain/javascript/javascriptAnalysisResourceControls.js +37 -1
  729. package/dist/domain/javascript/javascriptApplicationAnalysis.js +7 -0
  730. package/dist/domain/javascript/javascriptApplicationChangeGraph.js +10 -2
  731. package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +1 -1
  732. package/dist/domain/javascript/javascriptApplicationGraph.js +17 -1
  733. package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +1 -0
  734. package/dist/domain/javascript/javascriptApplicationProjectionResources.js +8 -0
  735. package/dist/domain/javascript/javascriptApplicationVersionComparisonSchemas.js +3 -1
  736. package/dist/domain/javascript/javascriptApplicationVersionItems.js +49 -21
  737. package/dist/domain/javascript/javascriptApplicationVersionKeys.js +31 -18
  738. package/dist/domain/javascript/javascriptArtifactFiles.js +2 -1
  739. package/dist/domain/javascript/javascriptAstFingerprint.js +89 -24
  740. package/dist/domain/javascript/javascriptAstValues.js +132 -5
  741. package/dist/domain/javascript/javascriptBootstrap.js +94 -0
  742. package/dist/domain/javascript/javascriptBootstrapIntegrity.js +372 -0
  743. package/dist/domain/javascript/javascriptBuiltinResourceMethods.js +8 -0
  744. package/dist/domain/javascript/javascriptBundledRequireOrigin.js +278 -0
  745. package/dist/domain/javascript/javascriptCommonJsExportReceivers.js +231 -0
  746. package/dist/domain/javascript/javascriptContextBridgeExposure.js +23 -0
  747. package/dist/domain/javascript/javascriptElectronMemberWrites.js +96 -22
  748. package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +6 -5
  749. package/dist/domain/javascript/javascriptExportShapeVariants.js +1 -1
  750. package/dist/domain/javascript/javascriptFeatureSeed.js +34 -17
  751. package/dist/domain/javascript/javascriptFeatureTrace.js +9 -3
  752. package/dist/domain/javascript/javascriptFeatureTraceSchemas.js +42 -11
  753. package/dist/domain/javascript/javascriptGraphqlOperations.js +382 -0
  754. package/dist/domain/javascript/javascriptIntrinsicInvocation.js +132 -0
  755. package/dist/domain/javascript/javascriptModuleDeclaration.js +48 -0
  756. package/dist/domain/javascript/javascriptModuleInterop.js +618 -0
  757. package/dist/domain/javascript/javascriptModuleResolutionMode.js +18 -0
  758. package/dist/domain/javascript/javascriptModuleSpecifier.js +5 -0
  759. package/dist/domain/javascript/javascriptNativeHandoff.js +7 -12
  760. package/dist/domain/javascript/javascriptPackageImportAliases.js +58 -0
  761. package/dist/domain/javascript/javascriptRecovery.js +12 -5
  762. package/dist/domain/javascript/javascriptRpcEndpoints.js +7 -93
  763. package/dist/domain/javascript/javascriptRuntimeLoadState.js +16 -0
  764. package/dist/domain/javascript/javascriptRuntimeObservation.js +4 -1
  765. package/dist/domain/javascript/javascriptRuntimeReconciliationCaptureParsing.js +45 -16
  766. package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +65 -47
  767. package/dist/domain/javascript/javascriptRuntimeReconciliationResult.js +0 -1
  768. package/dist/domain/javascript/javascriptRuntimeReconciliationSchemas.js +5 -4
  769. package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +113 -11
  770. package/dist/domain/javascript/javascriptSemanticAmbientWrites.js +511 -0
  771. package/dist/domain/javascript/javascriptSemanticAnalysis.js +706 -204
  772. package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +54 -54
  773. package/dist/domain/javascript/javascriptSemanticCallResolution.js +59 -30
  774. package/dist/domain/javascript/javascriptSemanticCallableStack.js +52 -0
  775. package/dist/domain/javascript/javascriptSemanticCalls.js +10 -15
  776. package/dist/domain/javascript/javascriptSemanticChildProcesses.js +163 -92
  777. package/dist/domain/javascript/javascriptSemanticCoverage.js +5 -1
  778. package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +435 -45
  779. package/dist/domain/javascript/javascriptSemanticDataEffects.js +46 -29
  780. package/dist/domain/javascript/javascriptSemanticDependencies.js +69 -0
  781. package/dist/domain/javascript/javascriptSemanticDerivedAnalysis.js +1 -1
  782. package/dist/domain/javascript/javascriptSemanticEvaluationOrder.js +126 -0
  783. package/dist/domain/javascript/javascriptSemanticExpressionShapes.js +111 -0
  784. package/dist/domain/javascript/javascriptSemanticFingerprints.js +11 -14
  785. package/dist/domain/javascript/javascriptSemanticGetterQueries.js +147 -0
  786. package/dist/domain/javascript/javascriptSemanticGetterResults.js +264 -0
  787. package/dist/domain/javascript/javascriptSemanticGraph.js +22 -1
  788. package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +13 -1
  789. package/dist/domain/javascript/javascriptSemanticIterationSources.js +5 -4
  790. package/dist/domain/javascript/javascriptSemanticMapOperations.js +51 -0
  791. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +421 -154
  792. package/dist/domain/javascript/javascriptSemanticMutationInitializers.js +500 -27
  793. package/dist/domain/javascript/javascriptSemanticObjectReferences.js +377 -174
  794. package/dist/domain/javascript/javascriptSemanticObjects.js +53 -43
  795. package/dist/domain/javascript/javascriptSemanticOpaqueEffects.js +163 -0
  796. package/dist/domain/javascript/javascriptSemanticPrimitives.js +11 -1
  797. package/dist/domain/javascript/javascriptSemanticProjection.js +180 -95
  798. package/dist/domain/javascript/javascriptSemanticPromises.js +6 -9
  799. package/dist/domain/javascript/javascriptSemanticProvenance.js +5 -1
  800. package/dist/domain/javascript/javascriptSemanticQuery.js +7 -2
  801. package/dist/domain/javascript/javascriptSemanticQueryIdentity.js +2 -1
  802. package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +1 -1
  803. package/dist/domain/javascript/javascriptSemanticReferenceSources.js +25 -0
  804. package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +369 -8
  805. package/dist/domain/javascript/javascriptSemanticResourceLimits.js +3 -19
  806. package/dist/domain/javascript/javascriptSemanticResources.js +33 -44
  807. package/dist/domain/javascript/javascriptSemanticReturnedReferences.js +81 -26
  808. package/dist/domain/javascript/javascriptSemanticReturns.js +37 -30
  809. package/dist/domain/javascript/javascriptSemanticState.js +225 -39
  810. package/dist/domain/javascript/javascriptSemanticTraversal.js +6 -4
  811. package/dist/domain/javascript/javascriptSemanticValues.js +379 -56
  812. package/dist/domain/javascript/javascriptSourceMapPaths.js +44 -17
  813. package/dist/domain/javascript/javascriptSourceParser.js +121 -7
  814. package/dist/domain/javascript/javascriptSourceSelection.js +11 -0
  815. package/dist/domain/javascript/javascriptStaticAnalysis.js +69 -24
  816. package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +97 -23
  817. package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +488 -48
  818. package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +196 -78
  819. package/dist/domain/javascript/javascriptStaticAnalysisState.js +4 -0
  820. package/dist/domain/javascript/javascriptStaticAnalysisTypes.js +2 -1
  821. package/dist/domain/javascript/javascriptSymbolicBindings.js +1118 -0
  822. package/dist/domain/javascript/javascriptSymbolicControlFlow.js +44 -0
  823. package/dist/domain/javascript/javascriptSymbolicValues.js +45 -0
  824. package/dist/domain/javascript/sourceToBundleComparison.js +3 -1
  825. package/dist/domain/javascript/sourceToBundleComparisonSchemas.js +2 -0
  826. package/dist/domain/javascript/sourceToBundleSignals.js +50 -13
  827. package/dist/domain/jsonValue.js +37 -12
  828. package/dist/domain/localPath.js +6 -3
  829. package/dist/domain/managed/managedApplicationGraph.js +5 -0
  830. package/dist/domain/managed/managedApplicationGraphCoverage.js +6 -2
  831. package/dist/domain/managed/managedApplicationGraphNodes.js +14 -10
  832. package/dist/domain/managed/managedArtifact.js +77 -1
  833. package/dist/domain/managed/managedInspectionEvidence.js +5 -6
  834. package/dist/domain/managed/managedMemberComparison.js +6 -0
  835. package/dist/domain/managed/managedMemberComparisonCoverage.js +36 -3
  836. package/dist/domain/managed/managedMemberComparisonItems.js +135 -59
  837. package/dist/domain/managed/managedMemberComparisonMatch.js +237 -42
  838. package/dist/domain/managed/managedMemberSignatureIdentity.js +40 -0
  839. package/dist/domain/managed/managedNativeVerificationMatch.js +54 -31
  840. package/dist/domain/managed/managedNativeVerificationSchemas.js +15 -4
  841. package/dist/domain/managed/managedReconstruction.js +5 -8
  842. package/dist/domain/mobileApplicationGraphProjection.js +95 -0
  843. package/dist/domain/native/addressCoordinate.js +11 -0
  844. package/dist/domain/native/binaryLayout.js +2 -4
  845. package/dist/domain/native/bytePattern.js +121 -0
  846. package/dist/domain/native/nativeAotPe.js +31 -4
  847. package/dist/domain/native/nativeAotSnapshotObservation.js +18 -0
  848. package/dist/domain/native/nativeCallPartialObservation.js +14 -12
  849. package/dist/domain/native/nativeInspection.js +38 -4
  850. package/dist/domain/native/nativeInstruction.js +17 -2
  851. package/dist/domain/native/nativeInvestigationGraph.js +9 -5
  852. package/dist/domain/native/nativeLoadImage.js +32 -1
  853. package/dist/domain/native/nativeUiObservation.js +5 -6
  854. package/dist/domain/native/objcSwiftMetadata.js +19 -9
  855. package/dist/domain/native/peResources.js +14 -4
  856. package/dist/domain/native/recordedCrash.js +79 -10
  857. package/dist/domain/offsetDateTime.js +60 -0
  858. package/dist/domain/pcap/pcapAnalysis.js +91 -0
  859. package/dist/domain/pcap/pcapEvidence.js +15 -0
  860. package/dist/domain/peMachine.js +38 -0
  861. package/dist/domain/pngHeader.js +18 -0
  862. package/dist/domain/process/processCaptureCoverage.js +26 -3
  863. package/dist/domain/process/processCaptureExample.js +2 -0
  864. package/dist/domain/process/processCaptureValidation.js +33 -8
  865. package/dist/domain/process/processComparison.js +41 -13
  866. package/dist/domain/process/processScenario.js +7 -0
  867. package/dist/domain/process/processTraceDimensionProjection.js +1 -1
  868. package/dist/domain/process/processTraceEvaluation.js +119 -74
  869. package/dist/domain/process/processTraceSpecification.js +243 -89
  870. package/dist/domain/propertyListKeys.js +238 -23
  871. package/dist/domain/propertyListXml.js +149 -0
  872. package/dist/domain/propertyListXmlText.js +20 -4
  873. package/dist/domain/providerAdapterError.js +2 -5
  874. package/dist/domain/providerCleanupError.js +2 -4
  875. package/dist/domain/providerConfigurationRefusal.js +12 -0
  876. package/dist/domain/providerSelectionError.js +2 -1
  877. package/dist/domain/qlogCapture.js +62 -0
  878. package/dist/domain/rawBinary.js +105 -0
  879. package/dist/domain/reconstructionCoverage.js +40 -24
  880. package/dist/domain/reconstructionCoverageEvaluation.js +50 -47
  881. package/dist/domain/reconstructionCoverageEvidence.js +26 -0
  882. package/dist/domain/reconstructionCoverageVerifierResults.js +35 -0
  883. package/dist/domain/reconstructionObligationLedgerIntegrity.js +114 -0
  884. package/dist/domain/reconstructionObligationLedgerSchemas.js +104 -1
  885. package/dist/domain/reconstructionReadiness.js +4 -8
  886. package/dist/domain/reconstructionReadinessJourneyFindings.js +4 -1
  887. package/dist/domain/reconstructionUnknowns.js +9 -1
  888. package/dist/domain/reconstructionVerification.js +86 -43
  889. package/dist/domain/recordedTransportUrl.js +59 -0
  890. package/dist/domain/referenceSourceClassification.js +27 -23
  891. package/dist/domain/referenceSourceGraph.js +51 -13
  892. package/dist/domain/referenceSourceImportParsing.js +27 -13
  893. package/dist/domain/referenceSourcePathIdentity.js +13 -1
  894. package/dist/domain/referenceSourceRequireBindings.js +40 -108
  895. package/dist/domain/referenceSourceSummary.js +92 -0
  896. package/dist/domain/relationshipCoverage.js +43 -0
  897. package/dist/domain/residualUnknown.js +93 -26
  898. package/dist/domain/reverseEngineering.js +31 -0
  899. package/dist/domain/runtimeVersion.js +8 -0
  900. package/dist/domain/rust/rustBinary.js +200 -0
  901. package/dist/domain/signals/annotationTextWindow.js +31 -0
  902. package/dist/domain/signals/signalDecoders.js +69 -0
  903. package/dist/domain/signals/signalRecording.js +115 -0
  904. package/dist/domain/sourceMapContents.js +10 -3
  905. package/dist/domain/sourceMapEnvelope.js +17 -11
  906. package/dist/domain/sqlite/sqliteDatabase.js +189 -0
  907. package/dist/domain/staticRuntimeCorrelation.js +7 -9
  908. package/dist/domain/swiftSymbolClassification.js +17 -0
  909. package/dist/domain/symbolAnalysis.js +20 -7
  910. package/dist/domain/urlComponents.js +6 -0
  911. package/dist/domain/wasm/wasmArtifact.js +119 -0
  912. package/dist/domain/wasm/wasmInterface.js +89 -0
  913. package/dist/domain/webBundleAnalysis.js +14 -3
  914. package/dist/domain/webBundleAnalyzerAst.js +7 -2
  915. package/dist/domain/webBundleAnalyzerInspection.js +113 -57
  916. package/dist/domain/webBundleAnalyzerResult.js +18 -6
  917. package/dist/domain/webCaptureDiff.js +235 -51
  918. package/dist/domain/webCaptureFrameComparison.js +49 -0
  919. package/dist/domain/webInventory.js +28 -14
  920. package/dist/domain/webMcpDiscovery.js +5 -2
  921. package/dist/domain/webModuleImports.js +22 -27
  922. package/dist/domain/webModuleTrace.js +25 -8
  923. package/dist/domain/webNetworkCapture.js +101 -39
  924. package/dist/domain/webNetworkCaptureCoordinates.js +21 -0
  925. package/dist/domain/webRuntime.js +0 -1
  926. package/dist/domain/webScreenshot.js +2 -2
  927. package/dist/domain/webScriptArtifacts.js +2 -4
  928. package/dist/domain/webScriptExport.js +6 -8
  929. package/dist/domain/webScriptExportError.js +2 -3
  930. package/dist/domain/webScriptExportPlan.js +2 -2
  931. package/dist/domain/webSourceLocation.js +20 -9
  932. package/dist/domain/xmlDocument.js +41 -0
  933. package/dist/domain/zipPackageFormat.js +25 -3
  934. package/dist/dotnet/ManagedArtifactInspector.js +25 -12
  935. package/dist/dotnet/ManagedDecodeBudget.js +87 -9
  936. package/dist/dotnet/ManagedMemberInspector.js +127 -22
  937. package/dist/dotnet/ManagedMemberInspectorCore.js +408 -141
  938. package/dist/dotnet/ManagedMemberInstructionDecoder.js +109 -37
  939. package/dist/dotnet/ManagedMemberOwnership.js +65 -0
  940. package/dist/dotnet/ManagedMemberPointers.js +69 -0
  941. package/dist/dotnet/ManagedMemberRows.js +181 -48
  942. package/dist/dotnet/ManagedMetadataHeaps.js +110 -25
  943. package/dist/dotnet/ManagedMetadataInventory.js +5 -5
  944. package/dist/dotnet/ManagedMetadataInventoryRows.js +36 -52
  945. package/dist/dotnet/ManagedMetadataLayout.js +26 -16
  946. package/dist/dotnet/ManagedMetadataRowSizes.js +1 -1
  947. package/dist/dotnet/ManagedMethodBodyReader.js +29 -11
  948. package/dist/dotnet/ManagedMethodSpecs.js +78 -0
  949. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +20 -19
  950. package/dist/dotnet/ManagedNativeBoundaryInspector.js +13 -21
  951. package/dist/dotnet/ManagedPeReader.js +60 -27
  952. package/dist/dotnet/ManagedReaderFailure.js +9 -0
  953. package/dist/dotnet/ManagedSnapshot.js +93 -0
  954. package/dist/dotnet/ManagedStaticProvider.js +55 -64
  955. package/dist/dotnet/ManagedTypeMemberLists.js +105 -0
  956. package/dist/dotnet/ManagedTypeNameDigests.js +177 -0
  957. package/dist/dotnet/ManagedTypeNames.js +58 -0
  958. package/dist/dotnet/ManagedTypeNesting.js +25 -0
  959. package/dist/dotnet/ManagedTypeReferences.js +94 -0
  960. package/dist/dotnet/ManagedUserStrings.js +75 -0
  961. package/dist/electron/ElectronFuseFailures.js +105 -0
  962. package/dist/electron/ElectronFusePath.js +248 -0
  963. package/dist/electron/ElectronFuseProvider.js +88 -0
  964. package/dist/electron/ElectronFuseReader.js +333 -0
  965. package/dist/evaluation/AgentEvaluationFixtures.js +194 -11
  966. package/dist/evaluation/CodexAgentEval.js +19 -40
  967. package/dist/evaluation/KnownAnswerEvaluation.js +126 -57
  968. package/dist/evm/EvmoleFailures.js +20 -14
  969. package/dist/evm/EvmoleInterfaceAdapter.js +5 -1
  970. package/dist/evm/EvmoleInterfaceProvider.js +142 -35
  971. package/dist/evm/EvmoleInterfaceWorker.js +2 -0
  972. package/dist/evm/SolidityMetadata.js +139 -0
  973. package/dist/filesystem/OwnedRegularFile.js +116 -0
  974. package/dist/filesystem/OwnedStagedOutput.js +155 -0
  975. package/dist/filesystem/RegularFile.js +65 -9
  976. package/dist/filesystem/StableFileHash.js +56 -38
  977. package/dist/filesystem/callerPath.js +26 -0
  978. package/dist/filesystem/readFileHandleChunks.js +72 -13
  979. package/dist/filesystem/readStableFileBytes.js +85 -0
  980. package/dist/firmware/FirmwareCommand.js +15 -9
  981. package/dist/firmware/FirmwareFailures.js +56 -0
  982. package/dist/firmware/FirmwareFiles.js +136 -110
  983. package/dist/firmware/FirmwareProvider.js +122 -65
  984. package/dist/firmware/FirmwarePublication.js +244 -12
  985. package/dist/firmware/FirmwareReports.js +202 -12
  986. package/dist/flutter/DartElf.js +445 -0
  987. package/dist/flutter/ElfBuildId.js +137 -0
  988. package/dist/flutter/ElfLoadMap.js +91 -0
  989. package/dist/flutter/FlutterBuildProvider.js +866 -0
  990. package/dist/flutter/FlutterPayloadScan.js +180 -0
  991. package/dist/frida/FridaInstrumentationManager.js +1104 -0
  992. package/dist/gdb/GdbSessionManager.js +1639 -0
  993. package/dist/generatedPackageMetadata.js +2 -2
  994. package/dist/ghidra/GhidraAnalysisProfile.js +146 -14
  995. package/dist/ghidra/GhidraAnalysisSeeds.js +39 -55
  996. package/dist/ghidra/GhidraBridgeSources.js +12 -0
  997. package/dist/ghidra/GhidraClient.js +501 -180
  998. package/dist/ghidra/GhidraClientStartup.js +5 -3
  999. package/dist/ghidra/GhidraClientWire.js +5 -2
  1000. package/dist/ghidra/GhidraDiagnostics.js +23 -5
  1001. package/dist/ghidra/GhidraDoctor.js +60 -26
  1002. package/dist/ghidra/GhidraDosSnapshot.js +83 -0
  1003. package/dist/ghidra/GhidraExecutableHeader.js +54 -0
  1004. package/dist/ghidra/GhidraFileArtifacts.js +93 -0
  1005. package/dist/ghidra/GhidraFunctionValues.js +50 -2
  1006. package/dist/ghidra/GhidraInstallation.js +305 -108
  1007. package/dist/ghidra/GhidraInstallationPolicy.js +94 -103
  1008. package/dist/ghidra/GhidraInstallationProperties.js +57 -0
  1009. package/dist/ghidra/GhidraInventoryValues.js +52 -6
  1010. package/dist/ghidra/GhidraJavaLaunch.js +99 -11
  1011. package/dist/ghidra/GhidraJavaProbe.js +267 -0
  1012. package/dist/ghidra/GhidraJavaProperties.js +119 -0
  1013. package/dist/ghidra/GhidraLanguageCatalog.js +83 -8
  1014. package/dist/ghidra/GhidraLauncher.js +325 -85
  1015. package/dist/ghidra/GhidraLoadImageAttest.js +82 -65
  1016. package/dist/ghidra/GhidraLoadImageValues.js +109 -27
  1017. package/dist/ghidra/GhidraMipsProfile.js +258 -14
  1018. package/dist/ghidra/GhidraNativeAotSnapshotOwner.js +221 -0
  1019. package/dist/ghidra/GhidraPeProfile.js +91 -0
  1020. package/dist/ghidra/GhidraPowerPcProfile.js +51 -0
  1021. package/dist/ghidra/GhidraProvider.js +267 -42
  1022. package/dist/ghidra/GhidraProviderCapabilities.js +29 -15
  1023. package/dist/ghidra/GhidraProviderClient.js +439 -276
  1024. package/dist/ghidra/GhidraPspExtension.js +210 -0
  1025. package/dist/ghidra/GhidraPspProfile.js +62 -0
  1026. package/dist/ghidra/GhidraRawBinaryLanguage.js +49 -0
  1027. package/dist/ghidra/GhidraReleasePolicy.js +93 -0
  1028. package/dist/ghidra/GhidraRequestQueue.js +64 -40
  1029. package/dist/ghidra/GhidraRiscvProfile.js +100 -0
  1030. package/dist/ghidra/GhidraSessionError.js +301 -24
  1031. package/dist/ghidra/GhidraSessionValues.js +76 -0
  1032. package/dist/ghidra/GhidraSocketConnection.js +25 -11
  1033. package/dist/ghidra/GhidraTargetSnapshot.js +67 -50
  1034. package/dist/ghidra/GhidraTransport.js +86 -62
  1035. package/dist/ghidra/extensions/GhidraExtensions.js +30 -45
  1036. package/dist/go/GoBinaryContainer.js +140 -0
  1037. package/dist/go/GoBinaryImage.js +210 -0
  1038. package/dist/go/GoBinaryProvider.js +180 -0
  1039. package/dist/go/GoElfImage.js +211 -0
  1040. package/dist/go/GoMachoImage.js +164 -0
  1041. package/dist/go/GoModuleText.js +217 -0
  1042. package/dist/go/GoPeImage.js +124 -0
  1043. package/dist/hopper/BridgeLauncher.js +78 -6
  1044. package/dist/hopper/HopperAnalysisProfile.js +23 -11
  1045. package/dist/hopper/HopperCleanup.js +29 -4
  1046. package/dist/hopper/HopperClient.js +317 -93
  1047. package/dist/hopper/HopperMacPublisher.js +29 -0
  1048. package/dist/hopper/HopperMachOImage.js +61 -29
  1049. package/dist/hopper/HopperProcessDiagnostic.js +27 -0
  1050. package/dist/hopper/HopperProvider.js +57 -29
  1051. package/dist/hopper/HopperProviderCapabilities.js +9 -4
  1052. package/dist/hopper/HopperRegexSearch.js +21 -60
  1053. package/dist/hopper/HopperRequestQueue.js +17 -5
  1054. package/dist/hopper/HopperSessionValues.js +10 -1
  1055. package/dist/ida/IdaBusyHealth.js +78 -0
  1056. package/dist/ida/IdaCallGraph.js +134 -0
  1057. package/dist/ida/IdaConfiguration.js +7 -2
  1058. package/dist/ida/IdaDiagnosticRedactor.js +199 -0
  1059. package/dist/ida/IdaDiagnosticWriter.js +62 -0
  1060. package/dist/ida/IdaDoctor.js +7 -5
  1061. package/dist/ida/IdaJsonDiagnostic.js +138 -0
  1062. package/dist/ida/IdaMcpConnection.js +308 -32
  1063. package/dist/ida/IdaNativeProtocol.js +85 -0
  1064. package/dist/ida/IdaOperationRunner.js +246 -61
  1065. package/dist/ida/IdaProtocolValues.js +88 -5
  1066. package/dist/ida/IdaProvider.js +45 -10
  1067. package/dist/ida/IdaProviderCapabilities.js +37 -8
  1068. package/dist/ida/IdaSessionClient.js +379 -60
  1069. package/dist/ida/IdaWorkspace.js +54 -6
  1070. package/dist/inspector/V8InspectorCaptureProjection.js +14 -2
  1071. package/dist/inspector/V8InspectorEndpoint.js +15 -13
  1072. package/dist/inspector/V8InspectorProvider.js +43 -7
  1073. package/dist/javascript/analysis/JavaScriptAnalysisTransfer.js +44 -12
  1074. package/dist/javascript/analysis/JavaScriptAnalysisWorker.js +107 -32
  1075. package/dist/javascript/analysis/JavaScriptAnalysisWorkerProtocol.js +7 -4
  1076. package/dist/javascript/analysis/JavaScriptAnalysisWorkerSchemas.js +85 -10
  1077. package/dist/javascript/analysis/JavaScriptAnalysisWorkerServer.js +16 -6
  1078. package/dist/javascript/recovery/RecoveryFiles.js +107 -13
  1079. package/dist/javascript/recovery/WakaruExecution.js +19 -11
  1080. package/dist/javascript/recovery/WakaruProvider.js +12 -9
  1081. package/dist/javascript/recovery/WakaruPublication.js +24 -10
  1082. package/dist/javascript/recovery/WakaruRelease.js +1 -1
  1083. package/dist/javascript/recovery/WakaruReport.js +3 -2
  1084. package/dist/javascript/sourceMaps/DecodedSourceMap.js +2 -16
  1085. package/dist/javascript/sourceMaps/SourceMapCommand.js +22 -4
  1086. package/dist/javascript/sourceMaps/SourceMapDecoder.js +22 -4
  1087. package/dist/javascript/sourceMaps/SourceMapFormat.js +25 -38
  1088. package/dist/javascript/sourceMaps/TraceSourceMap.js +34 -6
  1089. package/dist/jeb/JebMcpConnection.js +148 -82
  1090. package/dist/jeb/JebMcpConnectionOwner.js +116 -0
  1091. package/dist/jeb/JebMcpDeadline.js +46 -0
  1092. package/dist/jeb/JebMcpEndpoint.js +6 -1
  1093. package/dist/jeb/JebProvider.js +82 -58
  1094. package/dist/kuna/KunaAddress.js +11 -0
  1095. package/dist/kuna/KunaCommand.js +217 -0
  1096. package/dist/kuna/KunaConfiguration.js +90 -0
  1097. package/dist/kuna/KunaDoctor.js +198 -0
  1098. package/dist/kuna/KunaInstallation.js +137 -0
  1099. package/dist/kuna/KunaJson.js +23 -0
  1100. package/dist/kuna/KunaJsonStream.js +433 -0
  1101. package/dist/kuna/KunaLimits.js +5 -0
  1102. package/dist/kuna/KunaProjectCache.js +804 -0
  1103. package/dist/kuna/KunaProjectExport.js +202 -0
  1104. package/dist/kuna/KunaProjectFiles.js +191 -0
  1105. package/dist/kuna/KunaProjectReader.js +115 -0
  1106. package/dist/kuna/KunaProvider.js +217 -0
  1107. package/dist/kuna/KunaProviderCapabilities.js +102 -0
  1108. package/dist/kuna/KunaQueryErrors.js +12 -0
  1109. package/dist/kuna/KunaQueryWork.js +113 -0
  1110. package/dist/kuna/KunaReferenceFiles.js +258 -0
  1111. package/dist/kuna/KunaReferenceQueries.js +211 -0
  1112. package/dist/kuna/KunaRelease.js +10 -0
  1113. package/dist/kuna/KunaRunSlots.js +56 -0
  1114. package/dist/kuna/KunaSessionClient.js +1162 -0
  1115. package/dist/kuna/KunaStringInventory.js +145 -0
  1116. package/dist/kuna/KunaStringQueries.js +133 -0
  1117. package/dist/kuna/KunaTargetCommands.js +205 -0
  1118. package/dist/kuna/KunaUnavailable.js +11 -0
  1119. package/dist/logger.js +14 -1
  1120. package/dist/main/processShutdown.js +17 -0
  1121. package/dist/main/shutdown.js +3 -0
  1122. package/dist/main/transport.js +68 -4
  1123. package/dist/main.js +16 -15
  1124. package/dist/mcp/AnalysisProvider-BABWbLoM.js +38 -0
  1125. package/dist/mcp/AnalysisSnapshotFiles-BXz0c37-.js +1423 -0
  1126. package/dist/mcp/ArtifactFileOperation-64cQKI7B.js +1704 -0
  1127. package/dist/mcp/ArtifactProvider-Dx6pmil1.js +2200 -0
  1128. package/dist/mcp/ArtifactProviderMetadata-UCJr2oZW.js +167 -0
  1129. package/dist/mcp/ArtifactReader-BrnwNaKY.js +78 -0
  1130. package/dist/mcp/ArtifactResourceScope-zi3Dkqzy.js +175 -0
  1131. package/dist/mcp/AsarHeader-B_IbppTz.js +31 -0
  1132. package/dist/mcp/BinarySessionStatus-CZ9nnXMt.js +213 -0
  1133. package/dist/mcp/BinaryTargetResolver-BUncASDP.js +1358 -0
  1134. package/dist/mcp/BoundedFileBytes-DYt5q9G2.js +43 -0
  1135. package/dist/mcp/CdpCaptureDocuments-Y2uFcBpl.js +795 -0
  1136. package/dist/mcp/CdpCaptureValues-tNIg-gQK.js +97 -0
  1137. package/dist/mcp/CdpEndpoint-BrhMhpSi.js +641 -0
  1138. package/dist/mcp/CdpOptionalCommand-PZZhlqxv.js +120 -0
  1139. package/dist/mcp/CdpTargetSession-BmmDC3XO.js +290 -0
  1140. package/dist/mcp/DirectAnalysis-B9KuCHTG.js +417 -0
  1141. package/dist/mcp/DirectAnalysisStatus-BgzopkIt.js +44 -0
  1142. package/dist/mcp/ElectronFileScope-FXtK0d6I.js +110 -0
  1143. package/dist/mcp/ElectronFuseFailures-uZ_wOV6T.js +610 -0
  1144. package/dist/mcp/MachoLoadCommandReader-C2VGgHA3.js +330 -0
  1145. package/dist/mcp/ManagedStaticProvider-CZuoPme2.js +5326 -0
  1146. package/dist/mcp/NativeMacOSProvider-CMguKrvN.js +5495 -0
  1147. package/dist/mcp/NativeMacOSProviderMetadata-B_RH4KXF.js +397 -0
  1148. package/dist/mcp/OwnedCommand-BW1jBSt9.js +1241 -0
  1149. package/dist/mcp/ProcedureAddressResolution-H6Qwpb_Y.js +59 -0
  1150. package/dist/mcp/WorkflowEvidence-CO4C7ALz.js +118 -0
  1151. package/dist/mcp/analysisErrorCleanup-Q344SnTO.js +34 -0
  1152. package/dist/mcp/analysisErrorCore-BIEP7tvF.js +509 -0
  1153. package/dist/mcp/analysisErrorProjection-B8teQwwD.js +942 -0
  1154. package/dist/mcp/artifactToolContracts-C9dRDo-D.js +74 -0
  1155. package/dist/mcp/browserObservation-DUraZs62.js +4633 -0
  1156. package/dist/mcp/browserObservationError-C5okJ5el.js +63 -0
  1157. package/dist/mcp/browserObservationSchemas-DwGGxBpu.js +573 -0
  1158. package/dist/mcp/browserScenario-BRUz7yN0.js +3415 -0
  1159. package/dist/mcp/browserScenarioCapture-CiMAsMx8.js +595 -0
  1160. package/dist/mcp/callerPath-CpPnMZyN.js +678 -0
  1161. package/dist/mcp/canonicalDigest-Bi_0_zGi.js +71 -0
  1162. package/dist/mcp/electronActiveObservation-DV0Ffy9X.js +227 -0
  1163. package/dist/mcp/electronFuses-D5SS7XXw.js +367 -0
  1164. package/dist/mcp/electronObservation-DsN-NqY1.js +621 -0
  1165. package/dist/mcp/electronObservation-wOYWwqgF.js +112 -0
  1166. package/dist/mcp/electronScenario-CYrt2zBK.js +913 -0
  1167. package/dist/mcp/emptyArraySchema-C0o2Sxwp.js +140 -0
  1168. package/dist/mcp/enhancedInputs-6CCgB3VB.js +56 -0
  1169. package/dist/mcp/javascriptRuntimeObservation-BVbhkO2-.js +693 -0
  1170. package/dist/mcp/javascriptRuntimeObservation-Cu0Yedqq.js +121 -0
  1171. package/dist/mcp/jsonSerialization-V-wWiFRE.js +152 -0
  1172. package/dist/mcp/lipo-DSTgUqL1.js +395 -0
  1173. package/dist/mcp/localPath-AxvW9aPe.js +19 -0
  1174. package/dist/mcp/logger-BGdGHadX.js +48 -0
  1175. package/dist/mcp/machoContainer-CMSxUBlK.js +605 -0
  1176. package/dist/mcp/main-Cx-Z7m_n.js +80276 -0
  1177. package/dist/mcp/main.js +6 -0
  1178. package/dist/mcp/managedToolContracts-CSlbKJP-.js +101 -0
  1179. package/dist/mcp/nativeValueTrace-BEZbDieM.js +3601 -0
  1180. package/dist/mcp/officialToolContracts-CauCcSsc.js +1432 -0
  1181. package/dist/mcp/peMachine-aP1iYnHq.js +95 -0
  1182. package/dist/mcp/pngHeader-DQ-ObyY2.js +147 -0
  1183. package/dist/mcp/propertyListKeys-BfCo0k4w.js +356 -0
  1184. package/dist/mcp/providerCleanupError-DIRHxzWo.js +125 -0
  1185. package/dist/mcp/providerIdentities--ptAh481.js +31 -0
  1186. package/dist/mcp/providerIdentity-BCQ5n5tw.js +16 -0
  1187. package/dist/mcp/providerOperationHealth-9DRSGM8N.js +71 -0
  1188. package/dist/mcp/rolldown-runtime-BjeaiXFo.js +121 -0
  1189. package/dist/mcp/safeJson-NeGfpkrI.js +25 -0
  1190. package/dist/mcp/scanCanonical-CF3ATd1V.js +3788 -0
  1191. package/dist/mcp/serverIdentity-BK0Ejd_Y.js +1507 -0
  1192. package/dist/mcp/sourceMapEnvelope-DAaRUIGj.js +94 -0
  1193. package/dist/mcp/toolContracts-BPoHQdlC.js +12414 -0
  1194. package/dist/mcp/toolOutputSchemaGroups-MJ_f-PMK.js +17730 -0
  1195. package/dist/mcp/webContentArtifact-DfGkgDcI.js +269 -0
  1196. package/dist/mcp/webRuntime-ccyhkRru.js +74 -0
  1197. package/dist/mcp/webSourceLocation-DKIum0vJ.js +13167 -0
  1198. package/dist/mcpDoctor.js +95 -70
  1199. package/dist/mcpStartupPolicy.js +20 -2
  1200. package/dist/native/AppleDispatchCoverage.js +57 -17
  1201. package/dist/native/AppleDispatchMetadata.js +82 -29
  1202. package/dist/native/AppleMachoFixups.js +208 -35
  1203. package/dist/native/AppleMachoSelection.js +30 -23
  1204. package/dist/native/AppleObjcCategories.js +13 -3
  1205. package/dist/native/AppleObjcDispatchFacets.js +95 -17
  1206. package/dist/native/AppleObjcProperties.js +61 -17
  1207. package/dist/native/AppleObjcProtocols.js +25 -7
  1208. package/dist/native/AppleSwiftVtables.js +2 -0
  1209. package/dist/native/CommandRunner.js +146 -32
  1210. package/dist/native/LldbCallTracer.js +235 -179
  1211. package/dist/native/LldbReadbackFiles.js +70 -0
  1212. package/dist/native/LldbRetainedObservations.js +28 -56
  1213. package/dist/native/MachoArchitectureSelection.js +50 -0
  1214. package/dist/native/NativeCallObservation.js +55 -53
  1215. package/dist/native/NativeCallTarget.js +95 -0
  1216. package/dist/native/NativeMacOSProvider.js +318 -188
  1217. package/dist/native/NativeMachoInspection.js +155 -81
  1218. package/dist/native/NativePlistSource.js +179 -0
  1219. package/dist/native/NativeUiCleanupError.js +30 -0
  1220. package/dist/native/NativeUiHelperRuntime.js +48 -35
  1221. package/dist/native/NativeUiObservation.js +69 -47
  1222. package/dist/native/SignatureTargetBinding.js +147 -65
  1223. package/dist/native/parsers/codesign.js +27 -10
  1224. package/dist/native/parsers/demangle.js +22 -12
  1225. package/dist/native/parsers/dyldInfo.js +73 -4
  1226. package/dist/native/parsers/lipo.js +53 -19
  1227. package/dist/native/parsers/machoUuid.js +150 -0
  1228. package/dist/native/parsers/otool.js +275 -32
  1229. package/dist/native/parsers/plist.js +40 -25
  1230. package/dist/native/pe/PeResourceLayout.js +22 -7
  1231. package/dist/native/pe/PeResourceParser.js +10 -9
  1232. package/dist/native/pe/PeResourcesProvider.js +76 -15
  1233. package/dist/native/pwndbg/CoreFileMappingAuthority.js +51 -0
  1234. package/dist/native/pwndbg/PwndbgCoreContext.js +39 -28
  1235. package/dist/native/pwntools/PwntoolsDecoder.js +339 -52
  1236. package/dist/native/pwntools/PwntoolsFailures.js +19 -4
  1237. package/dist/native/pwntools/PwntoolsInputLimit.js +27 -0
  1238. package/dist/native/pwntools/PwntoolsRecordedCrashProvider.js +38 -16
  1239. package/dist/native/pwntools/PwntoolsResourceLimits.js +3 -3
  1240. package/dist/native/pwntools/RecordedCrashSourceBindings.js +12 -8
  1241. package/dist/native/pwntools/RecordedCrashStructureBindings.js +3 -1
  1242. package/dist/objdump/ObjdumpCommand.js +24 -0
  1243. package/dist/pcap/PcapCommand.js +146 -0
  1244. package/dist/pcap/PcapConfiguration.js +93 -0
  1245. package/dist/pcap/PcapNativeBound.js +58 -0
  1246. package/dist/pcap/PcapOutput.js +276 -0
  1247. package/dist/pcap/PcapProvider.js +454 -0
  1248. package/dist/pcap/PcapSnapshot.js +191 -0
  1249. package/dist/process/ArtifactAnalysisResources.js +306 -0
  1250. package/dist/process/BoundedFileBytes.js +8 -3
  1251. package/dist/process/CurrentEntrypointPath.js +8 -0
  1252. package/dist/process/DarwinProcessRunTokenReader.js +276 -61
  1253. package/dist/process/DetachedPgpSignature.js +57 -0
  1254. package/dist/process/ExecFileBoundedOutput.js +44 -0
  1255. package/dist/process/ExecFileOutput.js +44 -17
  1256. package/dist/{hopper/HopperTargetLease.js → process/HopperLease.js} +76 -19
  1257. package/dist/process/JavaScriptWorkerMemoryLimit.js +25 -0
  1258. package/dist/process/LinuxResourceLimits.js +60 -0
  1259. package/dist/process/MacCodeSignature.js +3 -0
  1260. package/dist/process/OwnedCommand.js +144 -25
  1261. package/dist/process/PrivateRuntimeRoot.js +9 -19
  1262. package/dist/process/PrivateRuntimeRootUnavailableError.js +10 -0
  1263. package/dist/process/ProcessOwnership.js +70 -17
  1264. package/dist/process/ProcessOwnershipObservation.js +35 -4
  1265. package/dist/process/ProviderDeadline.js +58 -12
  1266. package/dist/process/ProviderProcess.js +233 -17
  1267. package/dist/process/RegexMatcher.js +96 -0
  1268. package/dist/process/SharedStartupAttempt.js +59 -0
  1269. package/dist/process/WindowsAuthority.js +48 -39
  1270. package/dist/process/WindowsBatchCommand.js +46 -0
  1271. package/dist/process/boundedUtf8Text.js +13 -0
  1272. package/dist/process/capture/FilesystemSnapshot.js +63 -11
  1273. package/dist/process/capture/ProcessCaptureClock.js +2 -0
  1274. package/dist/process/capture/ProcessCaptureError.js +64 -7
  1275. package/dist/process/capture/ProcessCaptureJournal.js +2 -1
  1276. package/dist/process/capture/ProcessCaptureLifecycle.js +104 -56
  1277. package/dist/process/capture/ProcessCaptureProgress.js +7 -4
  1278. package/dist/process/capture/ProcessHarness.js +34 -17
  1279. package/dist/process/capture/ProcessNormalization.js +278 -36
  1280. package/dist/process/capture/ProcessSampling.js +3 -2
  1281. package/dist/process/capture/ProcessScenarioRuntimeValidation.js +13 -13
  1282. package/dist/process/capture/TerminalRenderer.js +31 -10
  1283. package/dist/process/ownedDebuggerSession.js +203 -0
  1284. package/dist/process/snapshotEnvironment.js +8 -8
  1285. package/dist/{application/binary → providers}/AnalysisClientCleanup.js +3 -3
  1286. package/dist/providers/AnalysisClientCreation.js +193 -0
  1287. package/dist/providers/AnalysisClientFailure.js +191 -0
  1288. package/dist/providers/DeferredAnalysisClient.js +48 -0
  1289. package/dist/providers/OwnedCommandCleanup.js +65 -0
  1290. package/dist/providers/ProviderInspectionScope.js +10 -0
  1291. package/dist/recordedCatalogDigests.js +2 -0
  1292. package/dist/reference/ReferenceSourceReader.js +64 -1
  1293. package/dist/reference/ReferenceSourceReaderEntries.js +79 -56
  1294. package/dist/reference/ReferenceSourceReaderErrors.js +5 -1
  1295. package/dist/reference/ReferenceSourceReaderFile.js +2 -2
  1296. package/dist/reference/ReferenceSourceReaderTypes.js +1 -2
  1297. package/dist/reference/ReferenceSourceReaderValidate.js +0 -1
  1298. package/dist/rizin/RizinCommand.js +14 -0
  1299. package/dist/rizin/RizinDebugSessionManager.js +1111 -0
  1300. package/dist/rust/RustAuditableReader.js +309 -0
  1301. package/dist/rust/RustBinaryImage.js +116 -0
  1302. package/dist/rust/RustBinaryProvider.js +194 -0
  1303. package/dist/server/EvidenceMcpServer.js +160 -37
  1304. package/dist/server/admittedToolOperation.js +7 -2
  1305. package/dist/server/contractToolHandler.js +17 -4
  1306. package/dist/server/createServer.js +179 -30
  1307. package/dist/server/externalMutationAdmission.js +50 -0
  1308. package/dist/server/mcpProgress.js +4 -2
  1309. package/dist/server/promptCompletion.js +43 -28
  1310. package/dist/server/providerEnvironment.js +3 -0
  1311. package/dist/server/registerAnalysisViewTool.js +6 -2
  1312. package/dist/server/registerAndroidTools.js +22 -4
  1313. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +8 -1
  1314. package/dist/server/registerArtifactComparisonTool.js +13 -2
  1315. package/dist/server/registerArtifactTools.js +21 -1
  1316. package/dist/server/registerBrowserScenarioTool.js +7 -5
  1317. package/dist/server/registerBrowserTools.js +4 -8
  1318. package/dist/server/registerBundleComparisonTool.js +4 -4
  1319. package/dist/server/registerCaptureTools.js +12 -0
  1320. package/dist/server/registerCutterTools.js +32 -0
  1321. package/dist/server/registerElectronTools.js +13 -21
  1322. package/dist/server/registerEnhancedTools.js +7 -6
  1323. package/dist/server/registerEvidenceTools.js +14 -10
  1324. package/dist/server/registerEvmTools.js +22 -4
  1325. package/dist/server/registerFlutterTools.js +17 -0
  1326. package/dist/server/registerFridaTools.js +201 -0
  1327. package/dist/server/registerFunctionComparisonTool.js +29 -9
  1328. package/dist/server/registerGdbTools.js +64 -0
  1329. package/dist/server/registerGoTools.js +9 -0
  1330. package/dist/server/registerInvestigationTools/helpers.js +2 -2
  1331. package/dist/server/registerInvestigationTools.js +31 -27
  1332. package/dist/server/registerJavaScriptRuntimeObservationTools.js +3 -9
  1333. package/dist/server/registerManagedTools.js +11 -1
  1334. package/dist/server/registerManagedWorkflowTools/evidence.js +14 -7
  1335. package/dist/server/registerNativeTools.js +14 -0
  1336. package/dist/server/registerOfficialTools.js +5 -0
  1337. package/dist/server/registerPcapTools.js +35 -0
  1338. package/dist/server/registerProcessComparisonTool.js +12 -2
  1339. package/dist/server/registerReverseEngineeringTools.js +86 -0
  1340. package/dist/server/registerRizinDebugTools.js +53 -0
  1341. package/dist/server/registerRustTools.js +9 -0
  1342. package/dist/server/registerSessionRecordTools.js +19 -13
  1343. package/dist/server/registerSessionStatusTool.js +33 -8
  1344. package/dist/server/registerSessionTools.js +31 -31
  1345. package/dist/server/registerSignalTools.js +12 -0
  1346. package/dist/server/registerSqliteTools.js +9 -0
  1347. package/dist/server/registerWasmTools.js +46 -0
  1348. package/dist/server/registerWebNetworkCaptureTool.js +24 -10
  1349. package/dist/server/retainedSummaryDelivery.js +28 -0
  1350. package/dist/server/runDerivedOperation.js +2 -0
  1351. package/dist/server/sessionAvailabilityPolicy.js +3 -0
  1352. package/dist/server/toolRegistrationOptions.js +8 -0
  1353. package/dist/server/toolResult.js +52 -19
  1354. package/dist/server/toolResultEncoding.js +36 -3
  1355. package/dist/serverIdentity.js +17 -8
  1356. package/dist/signals/SigrokRecordingProvider.js +346 -0
  1357. package/dist/signals/parseDecoderDiscovery.js +65 -0
  1358. package/dist/sqlite/SqliteDatabaseFailures.js +147 -0
  1359. package/dist/sqlite/SqliteDatabaseInspection.js +436 -0
  1360. package/dist/sqlite/SqliteDatabaseLimits.js +16 -0
  1361. package/dist/sqlite/SqliteDatabaseProvider.js +295 -0
  1362. package/dist/sqlite/SqliteDatabaseSnapshot.js +182 -0
  1363. package/dist/sqlite/SqliteDatabaseWorker.js +46 -0
  1364. package/dist/sqlite/SqliteDatabaseWorkerExecution.js +127 -0
  1365. package/dist/wasm/WabtArtifactProvider.js +358 -0
  1366. package/dist/wasm/WabtFailures.js +119 -0
  1367. package/dist/wasm/WabtInterface.js +309 -0
  1368. package/dist/wasm/WabtOutput.js +60 -0
  1369. package/dist/wasm/WabtRelease.js +12 -0
  1370. package/dist/wasm/WabtRuntime.js +58 -0
  1371. package/dist/wasm/WabtString.js +48 -0
  1372. package/dist/wasm/WabtWat.js +147 -0
  1373. package/dist/wasm/WasmGlueAdapter.js +66 -0
  1374. package/dist/wasm/WasmInterfaceBudget.js +11 -0
  1375. package/dist/windows/WindowsNativeLoader.js +53 -9
  1376. package/dist/windows/WindowsOwnedProcess.js +150 -17
  1377. package/dist/windows/WindowsPrivateRuntime.js +66 -2
  1378. package/install.sh +157 -98
  1379. package/licenses/Apache-2.0.txt +202 -0
  1380. package/licenses/GCC-Runtime-Library-Exception-3.1.txt +73 -0
  1381. package/licenses/GPL-3.0.txt +674 -0
  1382. package/licenses/LGPL-2.0.txt +480 -0
  1383. package/licenses/MIT-template.txt +18 -0
  1384. package/licenses/MinGW-w64-runtime.txt +240 -0
  1385. package/licenses/Node-22.19.0-LICENSE.txt +2666 -0
  1386. package/licenses/README.md +68 -0
  1387. package/licenses/cfworker-MIT.txt +21 -0
  1388. package/licenses/dotnet-runtime-MIT.txt +23 -0
  1389. package/licenses/frida-17.23.2-COPYING.txt +50 -0
  1390. package/licenses/ghidra-12.1.4-DISCLAIMER.txt +13 -0
  1391. package/licenses/ghidra-12.1.4-LICENSE.txt +201 -0
  1392. package/licenses/ghidra-12.1.4-NOTICE.txt +49 -0
  1393. package/licenses/npm-dependencies.txt +3757 -0
  1394. package/licenses/npm-runtime-notices.txt +8722 -0
  1395. package/licenses/upstream-sources.json +72 -0
  1396. package/licenses/xterm-MIT.txt +21 -0
  1397. package/native/windows/README.md +130 -12
  1398. package/native/windows/build/manifest.json +2 -2
  1399. package/native/windows/build/rea-windows-x64.node +0 -0
  1400. package/package.json +97 -22
  1401. package/scripts/electron-active-hook-boundaries.cjs +15 -2
  1402. package/scripts/electron-active-hook.cjs +412 -47
  1403. package/scripts/hopper-demo-x11.py +65 -13
  1404. package/scripts/prepack.mjs +5 -0
  1405. package/scripts/rea-android-workspace-guardian.mjs +46 -0
  1406. package/scripts/rea.mjs +89 -26
  1407. package/scripts/verify-windows-native-artifact.mjs +2 -2
  1408. package/skills/reverse-engineer-anything/SKILL.md +146 -11
  1409. package/skills/reverse-engineer-anything/references/android-applications.md +3 -1
  1410. package/skills/reverse-engineer-anything/references/connection-and-recovery.md +10 -10
  1411. package/skills/reverse-engineer-anything/references/evidence-workflows.md +23 -0
  1412. package/skills/reverse-engineer-anything/references/javascript-applications.md +72 -3
  1413. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +149 -19
  1414. package/skills/reverse-engineer-anything/references/runtime-observation.md +57 -7
  1415. package/third_party/README.md +1 -1
  1416. package/third_party/wabt/README.md +24 -0
  1417. package/dist/browser/history/HarCaptureAdapter.js +0 -20
  1418. package/dist/cli/streamedJsonOutput.js +0 -135
  1419. package/dist/hopper/HopperRegexWorker.js +0 -27
  1420. /package/dist/{application/binary → process}/AbortablePromise.js +0 -0
@@ -0,0 +1,1639 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { constants as fsConstants } from "node:fs";
3
+ import { isUtf8 } from "node:buffer";
4
+ import { readFile, readlink, realpath, stat } from "node:fs/promises";
5
+ import { AnalysisCapabilityUnavailableError, AnalysisCancelledError, AnalysisInputError, AnalysisResourceConstraintError, AnalysisTimeoutError, } from "../domain/analysisErrorCore.js";
6
+ import { AnalysisError, } from "../domain/analysisErrorBase.js";
7
+ import { createEvidence } from "../domain/evidence.js";
8
+ import { err, ok } from "../domain/result.js";
9
+ import { ProviderProcessSupervisor, spawnOwnedProviderProcess, } from "../process/ProviderProcess.js";
10
+ import { closeOwnedDebuggerSessions, stopOwnedDebuggerProcess, verifyOwnedInferiorsEnded, } from "../process/ownedDebuggerSession.js";
11
+ import { parseLinuxProcessStartTime } from "../process/ProcessOwnershipObservation.js";
12
+ const STARTUP_TIMEOUT_MS = 10_000;
13
+ const COMMAND_TIMEOUT_MS = 120_000;
14
+ const MAX_COMMAND_OUTPUT_BYTES = 16 * 1024 * 1024;
15
+ const MAX_COMMAND_OUTPUT_RECORDS = 16_384;
16
+ const MAX_MI_LINE_BYTES = 16 * 1024 * 1024;
17
+ const MAX_RECENT_MI_LINE_BYTES = 64 * 1024;
18
+ const MAX_DIAGNOSTIC_BYTES = 64 * 1024;
19
+ const DEFAULT_MAX_SESSIONS = 8;
20
+ const MAX_PENDING_GDB_COMMANDS = 16;
21
+ const RECENT_RECORD_TRUNCATION_MARKER = "[recent record truncated]";
22
+ export const GDB_PROVIDER_IDENTITY = {
23
+ id: "gnu.gdb",
24
+ name: "GNU GDB",
25
+ version: null,
26
+ };
27
+ class GdbCommandTimeoutError extends AnalysisTimeoutError {
28
+ partial;
29
+ evidence;
30
+ constructor(partial, evidence, timeoutMs) {
31
+ super("gdb_console", timeoutMs);
32
+ this.partial = partial;
33
+ this.evidence = evidence;
34
+ }
35
+ }
36
+ const truncateUtf8RecordPrefix = (line) => {
37
+ const budget = MAX_RECENT_MI_LINE_BYTES -
38
+ Buffer.byteLength(RECENT_RECORD_TRUNCATION_MARKER, "utf8");
39
+ let prefix = "";
40
+ let retainedBytes = 0;
41
+ for (const codePoint of line) {
42
+ const codePointBytes = Buffer.byteLength(codePoint, "utf8");
43
+ if (retainedBytes + codePointBytes > budget)
44
+ break;
45
+ prefix += codePoint;
46
+ retainedBytes += codePointBytes;
47
+ }
48
+ return `${prefix}${RECENT_RECORD_TRUNCATION_MARKER}`;
49
+ };
50
+ /** Bound parser memory when a capped MI record contains extreme nesting. */
51
+ const MAX_GDB_MI_NESTED_VALUE_FRAMES = 256;
52
+ /** Parse a complete MI result record and retain the unique top-level groups list span. */
53
+ const gdbMiGroupsListSpan = (mi) => {
54
+ const prefix = /^(?:\d+)?\^done/u.exec(mi)?.[0];
55
+ if (prefix === undefined)
56
+ return undefined;
57
+ const isNameCharacter = (character) => character !== undefined &&
58
+ !/[=,{}[\]"\s]/u.test(character) &&
59
+ character.charCodeAt(0) >= 0x20;
60
+ const readName = (start) => {
61
+ if (!isNameCharacter(mi[start]))
62
+ return start;
63
+ let cursor = start;
64
+ while (isNameCharacter(mi[cursor]))
65
+ cursor += 1;
66
+ return cursor;
67
+ };
68
+ const readString = (start) => {
69
+ for (let cursor = start + 1; cursor < mi.length; cursor += 1) {
70
+ const character = mi[cursor];
71
+ if (character === '"')
72
+ return cursor + 1;
73
+ if (character === "\\") {
74
+ cursor += 1;
75
+ const escaped = mi[cursor];
76
+ if (escaped === undefined)
77
+ return undefined;
78
+ if (escaped === "x") {
79
+ const startHex = cursor + 1;
80
+ cursor = startHex;
81
+ while (/[0-9a-f]/iu.test(mi[cursor] ?? ""))
82
+ cursor += 1;
83
+ if (cursor === startHex)
84
+ return undefined;
85
+ cursor -= 1;
86
+ }
87
+ else if (/[0-7]/u.test(escaped)) {
88
+ let digits = 1;
89
+ while (digits < 3 && /[0-7]/u.test(mi[cursor + 1] ?? "")) {
90
+ cursor += 1;
91
+ digits += 1;
92
+ }
93
+ }
94
+ else if (!/^[abfnrtv\\'"?]$/u.test(escaped))
95
+ return undefined;
96
+ }
97
+ else if (mi.charCodeAt(cursor) < 0x20)
98
+ return undefined;
99
+ }
100
+ return undefined;
101
+ };
102
+ const stack = [];
103
+ let groupSpan;
104
+ let groupSeen = false;
105
+ let cursor = prefix.length;
106
+ let valueStart = -1;
107
+ let pendingGroupList = false;
108
+ const completeValue = () => {
109
+ const parent = stack.at(-1);
110
+ if (parent !== undefined)
111
+ parent.phase = "afterItem";
112
+ };
113
+ const beginValue = () => {
114
+ const character = mi[cursor];
115
+ if (pendingGroupList && character !== "[")
116
+ return false;
117
+ if (character === '"') {
118
+ const end = readString(cursor);
119
+ if (end === undefined)
120
+ return false;
121
+ cursor = end;
122
+ completeValue();
123
+ return true;
124
+ }
125
+ if (character === "[" || character === "{") {
126
+ const kind = character === "[" ? "list" : "tuple";
127
+ const groupInventory = pendingGroupList;
128
+ if (groupInventory && kind !== "list")
129
+ return false;
130
+ if (stack.length >= MAX_GDB_MI_NESTED_VALUE_FRAMES)
131
+ return false;
132
+ const parent = stack.at(-1);
133
+ const groupTuple = kind === "tuple" && parent?.groupInventory === true;
134
+ pendingGroupList = false;
135
+ cursor += 1;
136
+ stack.push({
137
+ kind,
138
+ close: kind === "list" ? "]" : "}",
139
+ groupInventory,
140
+ groupStart: groupInventory ? valueStart : undefined,
141
+ groupTuple,
142
+ phase: "first",
143
+ listItems: undefined,
144
+ groupIdSeen: false,
145
+ });
146
+ return true;
147
+ }
148
+ return false;
149
+ };
150
+ while (true) {
151
+ const frame = stack.at(-1);
152
+ if (frame === undefined) {
153
+ if (cursor === mi.length)
154
+ break;
155
+ if (mi[cursor] !== ",")
156
+ return undefined;
157
+ cursor += 1;
158
+ const nameEnd = readName(cursor);
159
+ if (nameEnd === cursor || mi[nameEnd] !== "=")
160
+ return undefined;
161
+ const name = mi.slice(cursor, nameEnd);
162
+ if (name === "groups") {
163
+ if (groupSeen)
164
+ return undefined;
165
+ groupSeen = true;
166
+ valueStart = nameEnd + 1;
167
+ pendingGroupList = true;
168
+ }
169
+ cursor = nameEnd + 1;
170
+ if (!beginValue())
171
+ return undefined;
172
+ continue;
173
+ }
174
+ if (frame.phase === "afterItem") {
175
+ if (mi[cursor] === ",") {
176
+ cursor += 1;
177
+ frame.phase = "afterComma";
178
+ continue;
179
+ }
180
+ if (mi[cursor] !== frame.close)
181
+ return undefined;
182
+ if (frame.groupTuple && !frame.groupIdSeen)
183
+ return undefined;
184
+ cursor += 1;
185
+ stack.pop();
186
+ if (frame.groupInventory) {
187
+ if (frame.groupStart === undefined)
188
+ return undefined;
189
+ groupSpan = { start: frame.groupStart, end: cursor };
190
+ }
191
+ completeValue();
192
+ continue;
193
+ }
194
+ if (frame.phase === "first" && mi[cursor] === frame.close) {
195
+ if (frame.groupTuple && !frame.groupIdSeen)
196
+ return undefined;
197
+ cursor += 1;
198
+ stack.pop();
199
+ if (frame.groupInventory) {
200
+ if (frame.groupStart === undefined)
201
+ return undefined;
202
+ groupSpan = { start: frame.groupStart, end: cursor };
203
+ }
204
+ completeValue();
205
+ continue;
206
+ }
207
+ if (frame.phase === "first" || frame.phase === "afterComma") {
208
+ if (frame.kind === "tuple") {
209
+ const nameEnd = readName(cursor);
210
+ if (nameEnd === cursor || mi[nameEnd] !== "=")
211
+ return undefined;
212
+ if (frame.groupTuple && mi.slice(cursor, nameEnd) === "id") {
213
+ if (frame.groupIdSeen || mi[nameEnd + 1] !== '"')
214
+ return undefined;
215
+ frame.groupIdSeen = true;
216
+ }
217
+ cursor = nameEnd + 1;
218
+ if (!beginValue())
219
+ return undefined;
220
+ continue;
221
+ }
222
+ const nameEnd = readName(cursor);
223
+ const itemIsResult = nameEnd > cursor && mi[nameEnd] === "=";
224
+ const itemKind = itemIsResult ? "result" : "value";
225
+ if (frame.listItems !== undefined && frame.listItems !== itemKind)
226
+ return undefined;
227
+ frame.listItems = itemKind;
228
+ if (frame.groupInventory && (itemIsResult || mi[cursor] !== "{"))
229
+ return undefined;
230
+ if (itemIsResult)
231
+ cursor = nameEnd + 1;
232
+ if (!beginValue())
233
+ return undefined;
234
+ continue;
235
+ }
236
+ return undefined;
237
+ }
238
+ return groupSpan;
239
+ };
240
+ /** @internal Pure parser for live PIDs in recursive GDB MI thread groups. */
241
+ export const gdbThreadGroupPids = (mi) => {
242
+ const groupsSpan = gdbMiGroupsListSpan(mi);
243
+ if (groupsSpan === undefined)
244
+ return undefined;
245
+ const start = groupsSpan.start + 1;
246
+ let squareDepth = 1;
247
+ let objectDepth = 0;
248
+ let quoted = false;
249
+ let escaped = false;
250
+ const pids = [];
251
+ let fieldStart = start;
252
+ let pidStart;
253
+ let hasLivePid = false;
254
+ let currentPid;
255
+ for (let index = start; index < mi.length; index += 1) {
256
+ const character = mi[index];
257
+ if (quoted) {
258
+ if (escaped)
259
+ escaped = false;
260
+ else if (character === "\\")
261
+ escaped = true;
262
+ else if (character === '"') {
263
+ quoted = false;
264
+ if (pidStart !== undefined) {
265
+ const pid = mi.slice(pidStart, index);
266
+ if (!/^[1-9]\d*$/u.test(pid))
267
+ return undefined;
268
+ hasLivePid = true;
269
+ currentPid = pid;
270
+ pidStart = undefined;
271
+ }
272
+ }
273
+ continue;
274
+ }
275
+ if ((mi[index - 1] === "{" || mi[index - 1] === ",") &&
276
+ mi.startsWith("groups=", index))
277
+ return undefined;
278
+ if (character === '"') {
279
+ if (squareDepth === 1 &&
280
+ objectDepth === 1 &&
281
+ mi.slice(fieldStart, index) === "pid=") {
282
+ if (hasLivePid)
283
+ return undefined;
284
+ pidStart = index + 1;
285
+ }
286
+ quoted = true;
287
+ continue;
288
+ }
289
+ if (character === "[")
290
+ squareDepth += 1;
291
+ else if (character === "]") {
292
+ squareDepth -= 1;
293
+ if (squareDepth === 0) {
294
+ if (objectDepth !== 0 || index + 1 !== groupsSpan.end)
295
+ return undefined;
296
+ return pids;
297
+ }
298
+ }
299
+ else if (character === "{") {
300
+ if (squareDepth === 1 && objectDepth === 0) {
301
+ hasLivePid = false;
302
+ currentPid = undefined;
303
+ fieldStart = index + 1;
304
+ }
305
+ objectDepth += 1;
306
+ }
307
+ else if (character === "}") {
308
+ if (squareDepth === 1 && objectDepth === 1) {
309
+ const field = mi.slice(fieldStart, index);
310
+ if (field.startsWith("pid=") && !/^pid="[1-9]\d*"$/u.test(field))
311
+ return undefined;
312
+ }
313
+ objectDepth -= 1;
314
+ if (objectDepth < 0)
315
+ return undefined;
316
+ if (squareDepth === 1 && objectDepth === 0 && hasLivePid) {
317
+ if (currentPid === undefined)
318
+ return undefined;
319
+ pids.push(currentPid);
320
+ }
321
+ }
322
+ else if (character === "," && squareDepth === 1 && objectDepth === 1) {
323
+ const field = mi.slice(fieldStart, index);
324
+ if (field.startsWith("pid=") && !/^pid="[1-9]\d*"$/u.test(field))
325
+ return undefined;
326
+ fieldStart = index + 1;
327
+ }
328
+ }
329
+ return undefined;
330
+ };
331
+ /** @internal Pure count of recursive GDB MI groups with live PIDs. */
332
+ export const gdbThreadGroupCount = (mi) => {
333
+ const pids = gdbThreadGroupPids(mi);
334
+ return pids?.length;
335
+ };
336
+ const verifyGdbInferiorOutputSink = async (pid, selectedTty, rememberIdentity) => {
337
+ if (process.platform !== "linux")
338
+ throw new Error("GDB cannot confirm live inferior output descriptors outside Linux /proc.");
339
+ const statPath = `/proc/${pid}/stat`;
340
+ const before = parseLinuxProcessStartTime(await readFile(statPath, "utf8"));
341
+ if (before === undefined)
342
+ throw new Error("GDB could not establish the live inferior identity.");
343
+ const ttyPath = await realpath(selectedTty);
344
+ const tty = await stat(ttyPath);
345
+ if ((tty.mode & fsConstants.S_IFMT) !== fsConstants.S_IFCHR)
346
+ throw new Error("The selected GDB output sink is not a character device.");
347
+ for (const descriptor of ["1", "2"]) {
348
+ const descriptorPath = `/proc/${pid}/fd/${descriptor}`;
349
+ const destination = await readlink(descriptorPath);
350
+ const observed = await stat(descriptorPath);
351
+ if (observed.dev !== tty.dev ||
352
+ observed.ino !== tty.ino ||
353
+ (observed.mode & fsConstants.S_IFMT) !== fsConstants.S_IFCHR ||
354
+ (await realpath(destination)) !== ttyPath)
355
+ throw new Error(`GDB inferior descriptor ${descriptor} no longer points to the selected TTY.`);
356
+ }
357
+ const after = parseLinuxProcessStartTime(await readFile(statPath, "utf8"));
358
+ if (after !== before)
359
+ throw new Error("The GDB inferior identity changed during descriptor readback.");
360
+ rememberIdentity({ pid, startTime: before });
361
+ };
362
+ class GdbCommandProcessExitError extends Error {
363
+ partial;
364
+ constructor(partial) {
365
+ super(`GDB exited before returning the active MI command result (exit code ${String(partial.process_exit_code)}, signal ${String(partial.process_exit_signal)}).`);
366
+ this.partial = partial;
367
+ }
368
+ }
369
+ class GdbProtocolFailureError extends Error {
370
+ partial;
371
+ constructor(message, partial) {
372
+ super(message);
373
+ this.partial = partial;
374
+ }
375
+ }
376
+ /** @internal Convert an unknown boundary failure without dropping non-Error values. */
377
+ export const gdbErrorMessage = (cause) => cause instanceof Error ? cause.message : String(cause);
378
+ /** Owns persistent GDB/MI sessions independently from the active binary target. */
379
+ export class GdbSessionManager {
380
+ #sessions = new Map();
381
+ #activeStarts = new Map();
382
+ #command;
383
+ #environment;
384
+ #commandTimeoutMs;
385
+ #startupTimeoutMs;
386
+ #platform;
387
+ #stopProcess;
388
+ #spawnProcess;
389
+ #verifyInferiorOutputSink;
390
+ #readInferiorProcessStartTime;
391
+ #maxSessions;
392
+ #maxCommandOutputBytes;
393
+ #sessionReservations = 0;
394
+ #closing = false;
395
+ #closePromise;
396
+ constructor(options = {}) {
397
+ this.#environment = { ...(options.environment ?? process.env) };
398
+ this.#command = this.#environment.REA_GDB_COMMAND ?? "gdb";
399
+ this.#commandTimeoutMs = options.commandTimeoutMs ?? COMMAND_TIMEOUT_MS;
400
+ this.#startupTimeoutMs = options.startupTimeoutMs ?? STARTUP_TIMEOUT_MS;
401
+ this.#platform = options.platform ?? process.platform;
402
+ this.#stopProcess = options.stopProcess ?? stopOwnedDebuggerProcess;
403
+ this.#spawnProcess = options.spawnProcess ?? spawnOwnedProviderProcess;
404
+ this.#verifyInferiorOutputSink =
405
+ options.verifyInferiorOutputSink ?? verifyGdbInferiorOutputSink;
406
+ this.#readInferiorProcessStartTime = options.readInferiorProcessStartTime;
407
+ this.#maxSessions = options.maxSessions ?? DEFAULT_MAX_SESSIONS;
408
+ this.#maxCommandOutputBytes =
409
+ options.maxCommandOutputBytes ?? MAX_COMMAND_OUTPUT_BYTES;
410
+ }
411
+ async start(signal, options = {}) {
412
+ if (options.inferiorTty !== undefined &&
413
+ (options.inferiorTty.length === 0 || options.inferiorTty.includes("\0")))
414
+ return err(new AnalysisInputError("start_gdb_session", undefined, [
415
+ {
416
+ path: ["inferior_tty"],
417
+ reason: "invalid_value",
418
+ message: "The inferior TTY path must be non-empty and must not contain NUL.",
419
+ },
420
+ ]));
421
+ if (this.#closing || signal?.aborted)
422
+ return err(new AnalysisCancelledError("start_gdb_session"));
423
+ if (this.#platform !== "linux")
424
+ return err(new AnalysisCapabilityUnavailableError("gdb", "start_gdb_session", this.#platform === "win32"
425
+ ? "Persistent Windows GDB sessions are unavailable because owned Job Object cleanup can terminate debugger inferiors."
426
+ : "Persistent GDB sessions are available only on Linux because REA verifies live inferior output descriptors through /proc."));
427
+ const controller = new AbortController();
428
+ const relayAbort = () => controller.abort(signal?.reason);
429
+ signal?.addEventListener("abort", relayAbort, { once: true });
430
+ if (signal?.aborted)
431
+ relayAbort();
432
+ const tracked = Promise.resolve()
433
+ .then(() => this.#startWithReservation(controller.signal, options))
434
+ .finally(() => {
435
+ signal?.removeEventListener("abort", relayAbort);
436
+ this.#activeStarts.delete(controller);
437
+ });
438
+ this.#activeStarts.set(controller, tracked);
439
+ return tracked;
440
+ }
441
+ async #startWithReservation(signal, options = {}) {
442
+ if (signal?.aborted)
443
+ return err(new AnalysisCancelledError("start_gdb_session"));
444
+ const occupied = this.#sessions.size + this.#sessionReservations;
445
+ if (occupied >= this.#maxSessions)
446
+ return err(new AnalysisResourceConstraintError("start_gdb_session", "memory", "GDB session capacity reached.", {
447
+ max_sessions: this.#maxSessions,
448
+ active_or_reserved_sessions: occupied,
449
+ }));
450
+ this.#sessionReservations += 1;
451
+ let reservationHeld = true;
452
+ const releaseReservation = () => {
453
+ if (!reservationHeld)
454
+ return;
455
+ reservationHeld = false;
456
+ this.#sessionReservations -= 1;
457
+ };
458
+ try {
459
+ return await this.#startReserved(releaseReservation, signal, options);
460
+ }
461
+ finally {
462
+ releaseReservation();
463
+ }
464
+ }
465
+ async #startReserved(releaseReservation, signal, options = {}) {
466
+ const id = randomUUID();
467
+ const mi3 = await this.#startProtocol(id, "mi3", releaseReservation, signal, options.inferiorTty);
468
+ return mi3.ok || signal.aborted || this.#sessions.has(id)
469
+ ? mi3
470
+ : this.#startProtocol(id, "mi2", releaseReservation, signal, options.inferiorTty);
471
+ }
472
+ async #startProtocol(id, miVersion, releaseReservation, signal, inferiorTty) {
473
+ let launched;
474
+ try {
475
+ const spawnOptions = {
476
+ command: this.#command,
477
+ arguments: ["--nx", "--quiet", `--interpreter=${miVersion}`],
478
+ runId: randomUUID(),
479
+ stdin: "pipe",
480
+ hostEnvironment: this.#environment,
481
+ signal,
482
+ };
483
+ launched = await this.#spawnProcess(spawnOptions);
484
+ }
485
+ catch (cause) {
486
+ if (signal?.aborted || cause instanceof AnalysisCancelledError)
487
+ return err(new AnalysisCancelledError("start_gdb_session", { cause }));
488
+ return err(new AnalysisCapabilityUnavailableError("gdb", "start_gdb_session", cause instanceof Error ? cause.message : "Unable to start GDB"));
489
+ }
490
+ const supervisor = new ProviderProcessSupervisor({ process: launched.process, ownsProcessLifetime: false }, { captureStdout: false, maxDiagnosticBytes: MAX_DIAGNOSTIC_BYTES });
491
+ let settleStdout;
492
+ const stdoutSettled = new Promise((resolve) => {
493
+ settleStdout = resolve;
494
+ });
495
+ const session = {
496
+ id,
497
+ miVersion,
498
+ launched,
499
+ supervisor,
500
+ detachInferior: () => this.#detachInferior(session),
501
+ inferiorStateUnknown: () => !session.noInferiorVerified,
502
+ verifyInferiorsEndedAfterExit: async () => {
503
+ const ended = await verifyOwnedInferiorsEnded(session.knownInferiorIdentities.values(), this.#readInferiorProcessStartTime);
504
+ if (ended)
505
+ session.knownInferiorIdentities.clear();
506
+ return ended;
507
+ },
508
+ knownInferiorIdentities: new Map(),
509
+ inferiorTty,
510
+ maxCommandOutputBytes: this.#maxCommandOutputBytes,
511
+ stdoutSettled,
512
+ settleStdout,
513
+ inferiorTtyVerified: false,
514
+ // GDB is launched with --nx and receives no target-execution commands
515
+ // during startup, so no inferior can exist until execute() is called.
516
+ noInferiorVerified: true,
517
+ stopAttempt: undefined,
518
+ pending: new Map(),
519
+ cleanupFailures: new Set(),
520
+ lines: [],
521
+ bufferChunks: [],
522
+ bufferTail: undefined,
523
+ bufferTailBytes: 0,
524
+ bufferBytes: 0,
525
+ invalidUtf8Observed: false,
526
+ promptTail: "",
527
+ ready: false,
528
+ exited: false,
529
+ exitCode: null,
530
+ exitSignal: null,
531
+ nextToken: 1,
532
+ startupResolve: undefined,
533
+ startupReject: undefined,
534
+ commandTail: Promise.resolve(),
535
+ pendingCommandCount: 0,
536
+ protocolError: undefined,
537
+ recentRecordsTruncated: false,
538
+ };
539
+ launched.process.stdout?.on("data", (chunk) => this.#receive(session, typeof chunk === "string" ? Buffer.from(chunk, "utf8") : chunk));
540
+ if (launched.process.stdout === null)
541
+ settleStdout();
542
+ else
543
+ launched.process.stdout.once("end", settleStdout);
544
+ launched.process.stdin?.on("error", (cause) => this.#failProtocol(session, `GDB stdin stream failed: ${cause.message}`));
545
+ launched.process.stdin?.once("close", () => this.#failProtocol(session, "GDB stdin stream closed unexpectedly."));
546
+ launched.process.once("exit", (code, signalCode) => {
547
+ session.exited = true;
548
+ session.exitCode = code;
549
+ session.exitSignal = signalCode;
550
+ void this.#waitForStdoutSettlement(session).then(() => session.startupReject?.(new Error(`GDB exited during startup (exit code ${String(code)}, signal ${String(signalCode)}).`)));
551
+ void this.#settleExitedCommands(session, code, signalCode);
552
+ });
553
+ let startupTimer;
554
+ let startupAbortListener;
555
+ try {
556
+ await new Promise((resolve, reject) => {
557
+ session.startupResolve = resolve;
558
+ session.startupReject = reject;
559
+ startupAbortListener = () => reject(new AnalysisCancelledError("start_gdb_session"));
560
+ signal?.addEventListener("abort", startupAbortListener, {
561
+ once: true,
562
+ });
563
+ if (signal?.aborted)
564
+ startupAbortListener();
565
+ startupTimer = setTimeout(() => reject(new AnalysisTimeoutError("start_gdb_session", this.#startupTimeoutMs, {
566
+ cause: new Error("GDB did not emit the MI prompt before the startup deadline"),
567
+ })), this.#startupTimeoutMs);
568
+ startupTimer.unref();
569
+ });
570
+ session.ready = true;
571
+ if (signal?.aborted)
572
+ throw new AnalysisCancelledError("start_gdb_session");
573
+ const autoLoad = await this.#request(session, "-gdb-set auto-load off", signal, "start_gdb_session");
574
+ if (!/^\d+\^done(?:,|$)/u.test(autoLoad.mi)) {
575
+ throw new AnalysisCapabilityUnavailableError("gdb", "start_gdb_session", `GDB rejected the required automatic-loading disable command (${autoLoad.mi}); the session was not started.`);
576
+ }
577
+ if (inferiorTty !== undefined) {
578
+ const configured = await this.#request(session, `-inferior-tty-set ${miQuote(inferiorTty)}`, signal, "start_gdb_session");
579
+ if (configured.completion_status !== "complete" ||
580
+ configured.output_truncated ||
581
+ !/^\d+\^done(?:,|$)/u.test(configured.mi))
582
+ throw new AnalysisCapabilityUnavailableError("gdb", "start_gdb_session", "GDB did not confirm the inferior TTY configuration.");
583
+ const observed = await this.#request(session, "-inferior-tty-show", signal, "start_gdb_session");
584
+ const reportedTty = observed.completion_status === "complete" &&
585
+ !observed.output_truncated
586
+ ? miStringField(observed.mi, "inferior_tty_terminal")
587
+ : undefined;
588
+ if (!/^\d+\^done(?:,|$)/u.test(observed.mi) ||
589
+ reportedTty !== inferiorTty)
590
+ throw new AnalysisCapabilityUnavailableError("gdb", "start_gdb_session", "GDB did not report the exact caller-selected inferior TTY after configuration.");
591
+ session.inferiorTtyVerified = true;
592
+ }
593
+ if (signal?.aborted)
594
+ throw new AnalysisCancelledError("start_gdb_session");
595
+ // Give queued exit notifications a turn before publishing startup.
596
+ await new Promise((resolve) => setImmediate(resolve));
597
+ if (signal?.aborted)
598
+ throw new AnalysisCancelledError("start_gdb_session");
599
+ if (session.exited || session.protocolError !== undefined)
600
+ throw new Error(session.protocolError ?? "GDB exited during startup readiness.");
601
+ // Before this point no target command can run. Once a usable session is
602
+ // published, the inferior state is no longer inferred from startup phase.
603
+ session.noInferiorVerified = false;
604
+ this.#sessions.set(id, session);
605
+ releaseReservation();
606
+ return ok({ session_id: id, mi_version: miVersion });
607
+ }
608
+ catch (cause) {
609
+ const startupExited = cause instanceof GdbCommandProcessExitError || session.exited;
610
+ const processExit = cause instanceof GdbCommandProcessExitError
611
+ ? cause.partial
612
+ : startupExited
613
+ ? {
614
+ command: "GDB startup",
615
+ mi: "",
616
+ records: [...session.lines],
617
+ console: session.lines
618
+ .filter((line) => line.startsWith("~"))
619
+ .join("\n"),
620
+ target: session.lines
621
+ .filter((line) => line.startsWith("@"))
622
+ .join("\n"),
623
+ log: session.lines
624
+ .filter((line) => line.startsWith("&"))
625
+ .join("\n"),
626
+ process_exit_observed: true,
627
+ process_exit_code: session.exitCode,
628
+ process_exit_signal: session.exitSignal,
629
+ output_truncated: session.recentRecordsTruncated,
630
+ completion_status: "unknown",
631
+ }
632
+ : undefined;
633
+ const startupEvidenceResult = processExit ??
634
+ (session.lines.length > 0
635
+ ? {
636
+ command: "GDB startup",
637
+ mi: "",
638
+ records: [...session.lines],
639
+ console: session.lines
640
+ .filter((line) => line.startsWith("~"))
641
+ .join("\n"),
642
+ target: session.lines
643
+ .filter((line) => line.startsWith("@"))
644
+ .join("\n"),
645
+ log: session.lines
646
+ .filter((line) => line.startsWith("&"))
647
+ .join("\n"),
648
+ output_truncated: session.recentRecordsTruncated,
649
+ completion_status: "unknown",
650
+ }
651
+ : undefined);
652
+ const startupEvidencePayload = startupEvidenceResult === undefined
653
+ ? undefined
654
+ : {
655
+ ...startupEvidenceResult,
656
+ ...(session.invalidUtf8Observed
657
+ ? { output_invalid_utf8: true }
658
+ : {}),
659
+ };
660
+ const startupEvidence = startupEvidencePayload === undefined
661
+ ? undefined
662
+ : createEvidence(undefined, GDB_PROVIDER_IDENTITY, {
663
+ predicateType: "rea.debugger.startup-observation",
664
+ operation: "start_gdb_session",
665
+ parameters: {
666
+ mi_version: miVersion,
667
+ command: startupEvidencePayload.command,
668
+ },
669
+ result: {
670
+ ...startupEvidencePayload,
671
+ records: [...startupEvidencePayload.records],
672
+ },
673
+ rawResult: {
674
+ ...startupEvidencePayload,
675
+ records: [...startupEvidencePayload.records],
676
+ },
677
+ subjectUnavailableReason: "No usable debugger session became ready during GDB startup.",
678
+ limitations: [
679
+ "GDB startup failed before a usable session could be established; captured startup records are incomplete.",
680
+ ...(session.invalidUtf8Observed
681
+ ? [
682
+ "GDB startup output contained invalid UTF-8 bytes; decoded records contain replacement characters.",
683
+ ]
684
+ : []),
685
+ ],
686
+ });
687
+ const processOutput = session.supervisor.snapshot();
688
+ const capturedOutput = {
689
+ stdout: processOutput.stdout.text,
690
+ stderr: processOutput.stderr.text,
691
+ truncated: processOutput.diagnosticTruncated === true ||
692
+ processOutput.stdout.observedBytes > processOutput.stdout.bytes ||
693
+ processOutput.stderr.observedBytes > processOutput.stderr.bytes,
694
+ stdout_bytes: processOutput.stdout.observedBytes,
695
+ stderr_bytes: processOutput.stderr.observedBytes,
696
+ exit_code: processOutput.exitCode ?? null,
697
+ signal: processOutput.signal ?? null,
698
+ };
699
+ const stopped = await this.#stopDebuggerOnly(session);
700
+ if (stopped.status === "incomplete") {
701
+ this.#sessions.set(id, session);
702
+ releaseReservation();
703
+ const cleanup = { reason: stopped.reason, resources: [session.id] };
704
+ const details = {
705
+ cause,
706
+ capturedOutput,
707
+ cleanup,
708
+ ...(startupEvidence === undefined
709
+ ? {}
710
+ : { partialObservation: startupEvidence }),
711
+ };
712
+ if (cause instanceof AnalysisTimeoutError)
713
+ return err(new AnalysisTimeoutError(cause.operation, cause.timeoutMs, details));
714
+ if (cause instanceof AnalysisCancelledError)
715
+ return err(new AnalysisCancelledError(cause.operation, details));
716
+ const startupFailureMessage = gdbErrorMessage(cause);
717
+ return err(new AnalysisCapabilityUnavailableError("gdb", "start_gdb_session", `GDB startup failed (${startupFailureMessage}) and its owned process could not be confirmed stopped: ${stopped.reason}`, details));
718
+ }
719
+ const errorDetails = {
720
+ cause,
721
+ capturedOutput,
722
+ ...(startupEvidence === undefined
723
+ ? {}
724
+ : { partialObservation: startupEvidence }),
725
+ };
726
+ const error = signal?.aborted || cause instanceof AnalysisCancelledError
727
+ ? new AnalysisCancelledError("start_gdb_session", errorDetails)
728
+ : cause instanceof AnalysisTimeoutError
729
+ ? new AnalysisTimeoutError(cause instanceof GdbCommandTimeoutError
730
+ ? "start_gdb_session"
731
+ : cause.operation, cause.timeoutMs, errorDetails)
732
+ : cause instanceof AnalysisCapabilityUnavailableError
733
+ ? new AnalysisCapabilityUnavailableError("gdb", "start_gdb_session", cause.message, errorDetails)
734
+ : session.protocolError !== undefined
735
+ ? new AnalysisCapabilityUnavailableError("gdb", "start_gdb_session", session.protocolError, errorDetails)
736
+ : new AnalysisCapabilityUnavailableError("gdb", "start_gdb_session", `GDB startup failed (${gdbErrorMessage(cause)}).`, errorDetails);
737
+ return err(error);
738
+ }
739
+ finally {
740
+ clearTimeout(startupTimer);
741
+ signal?.removeEventListener("abort", startupAbortListener);
742
+ }
743
+ }
744
+ async execute(sessionId, command, signal) {
745
+ const session = this.#sessions.get(sessionId);
746
+ if (this.#closing ||
747
+ session === undefined ||
748
+ !session.ready ||
749
+ session.exited ||
750
+ session.protocolError !== undefined)
751
+ return err(new AnalysisInputError("gdb_console", undefined, [
752
+ {
753
+ path: ["session_id"],
754
+ reason: "invalid_value",
755
+ message: "GDB session is unavailable or closed.",
756
+ },
757
+ ]));
758
+ if (signal?.aborted)
759
+ return err(new AnalysisCancelledError("gdb_console"));
760
+ try {
761
+ const completed = await this.#serialize(session, async () => {
762
+ if (session.exited || session.protocolError !== undefined)
763
+ return err(new AnalysisInputError("gdb_console"));
764
+ session.noInferiorVerified = false;
765
+ session.knownInferiorIdentities.clear();
766
+ if (commandMayChangeInferiorOutput(command))
767
+ session.inferiorTtyVerified = false;
768
+ try {
769
+ const result = await this.#request(session, `-interpreter-exec console ${miQuote(command)}`, signal, "gdb_console", command);
770
+ const evidence = createEvidence(undefined, { id: "gnu.gdb", name: "GNU GDB", version: null }, {
771
+ predicateType: "rea.debugger.console-observation",
772
+ operation: "gdb_console",
773
+ parameters: { session_id: sessionId, command },
774
+ result: {
775
+ command,
776
+ mi: result.mi,
777
+ records: [...result.records],
778
+ console: result.console,
779
+ target: result.target,
780
+ log: result.log,
781
+ output_truncated: result.output_truncated,
782
+ ...(result.output_invalid_utf8
783
+ ? { output_invalid_utf8: true }
784
+ : {}),
785
+ completion_status: result.completion_status,
786
+ },
787
+ rawResult: {
788
+ command,
789
+ mi: result.mi,
790
+ records: [...result.records],
791
+ console: result.console,
792
+ target: result.target,
793
+ log: result.log,
794
+ output_truncated: result.output_truncated,
795
+ ...(result.output_invalid_utf8
796
+ ? { output_invalid_utf8: true }
797
+ : {}),
798
+ completion_status: result.completion_status,
799
+ },
800
+ subjectUnavailableReason: "The active GDB inferior identity is not established by the debugger session identifier.",
801
+ limitations: [
802
+ "MI records are returned as decoded text; their semantics depend on GDB version and target.",
803
+ ...(result.output_invalid_utf8
804
+ ? [
805
+ "MI stream bytes were not valid UTF-8; returned text contains replacement characters.",
806
+ ]
807
+ : []),
808
+ "The unrestricted GDB console can access local shell, filesystem, network, and target controls.",
809
+ ],
810
+ });
811
+ return ok({ result, evidence });
812
+ }
813
+ catch (cause) {
814
+ if (cause instanceof AnalysisCancelledError)
815
+ return err(cause);
816
+ if (cause instanceof AnalysisCapabilityUnavailableError)
817
+ return err(cause);
818
+ if (cause instanceof GdbCommandTimeoutError) {
819
+ const result = cause.partial;
820
+ return ok({ result, evidence: cause.evidence });
821
+ }
822
+ if (session.protocolError !== undefined)
823
+ return err(await this.#stopAfterProtocolFailure(session, cause));
824
+ if (cause instanceof GdbCommandProcessExitError) {
825
+ const processExit = cause;
826
+ const result = {
827
+ ...processExit.partial,
828
+ command,
829
+ };
830
+ const evidence = createEvidence(undefined, { id: "gnu.gdb", name: "GNU GDB", version: null }, {
831
+ predicateType: "rea.debugger.console-observation",
832
+ operation: "gdb_console",
833
+ parameters: { session_id: sessionId, command },
834
+ result: { ...result, records: [...result.records] },
835
+ rawResult: { ...result, records: [...result.records] },
836
+ subjectUnavailableReason: "The active GDB inferior identity is not established by the debugger session identifier.",
837
+ limitations: [
838
+ "GDB exited before returning a correlated MI result record; only records retained for the active command are returned raw.",
839
+ ...(result.output_truncated
840
+ ? [
841
+ "Retained MI records are a truncated prefix; output completeness is unknown.",
842
+ ]
843
+ : []),
844
+ ],
845
+ });
846
+ const stopped = await this.#stopDebuggerOnly(session);
847
+ if (stopped.status === "incomplete")
848
+ return err(this.#retainCleanupFailure(session, "gdb_console", stopped.reason, { cause, partialObservation: evidence }));
849
+ return ok({ result, evidence });
850
+ }
851
+ return err(new AnalysisTimeoutError("gdb_console", this.#commandTimeoutMs, {
852
+ cause,
853
+ }));
854
+ }
855
+ }, signal, "gdb_console");
856
+ if (!completed.ok && completed.error.cleanupIncomplete)
857
+ session.cleanupFailures.add(completed.error);
858
+ return completed;
859
+ }
860
+ catch (cause) {
861
+ const error = cause instanceof AnalysisError
862
+ ? cause
863
+ : new AnalysisCancelledError("gdb_console", { cause });
864
+ if (error.cleanupIncomplete)
865
+ session.cleanupFailures.add(error);
866
+ return err(error);
867
+ }
868
+ }
869
+ status(sessionId) {
870
+ const session = this.#sessions.get(sessionId);
871
+ if (session === undefined)
872
+ return undefined;
873
+ const diagnostics = session.supervisor.snapshot();
874
+ return {
875
+ session_id: session.id,
876
+ mi_version: session.miVersion,
877
+ state: session.exited || session.protocolError !== undefined || !session.ready
878
+ ? "closed"
879
+ : "ready",
880
+ recent_mi_records: [...session.lines],
881
+ recent_mi_records_truncated: session.recentRecordsTruncated,
882
+ mi_invalid_utf8: session.invalidUtf8Observed,
883
+ stderr: diagnostics.stderr.text,
884
+ stderr_observed_bytes: diagnostics.stderr.observedBytes,
885
+ stderr_truncated: diagnostics.stderr.observedBytes > diagnostics.stderr.bytes,
886
+ stderr_invalid_utf8: diagnostics.stderr.invalidUtf8 === true,
887
+ diagnostics_truncated: diagnostics.diagnosticTruncated === true,
888
+ inferior_tty: session.inferiorTty ?? null,
889
+ inferior_tty_verified: session.inferiorTtyVerified,
890
+ };
891
+ }
892
+ async close(sessionId) {
893
+ if (this.#closing)
894
+ return err(new AnalysisCancelledError("close_gdb_session"));
895
+ const session = this.#sessions.get(sessionId);
896
+ if (session === undefined)
897
+ return err(new AnalysisInputError("close_gdb_session"));
898
+ if (session.exited) {
899
+ const stopped = await this.#stopDebuggerOnly(session);
900
+ if (stopped.status === "incomplete")
901
+ return err(this.#retainCleanupFailure(session, "close_gdb_session", stopped.reason));
902
+ this.#sessions.delete(sessionId);
903
+ return ok({ target_state: "unknown" });
904
+ }
905
+ try {
906
+ return await this.#serialize(session, async () => {
907
+ if (session.exited) {
908
+ const stopped = await this.#stopDebuggerOnly(session);
909
+ if (stopped.status === "incomplete")
910
+ return err(this.#retainCleanupFailure(session, "close_gdb_session", stopped.reason));
911
+ this.#sessions.delete(sessionId);
912
+ return ok({ target_state: "unknown" });
913
+ }
914
+ let targetState = "unknown";
915
+ try {
916
+ const groups = await this.#request(session, "-list-thread-groups --recurse 1");
917
+ if (groups.completion_status !== "complete" ||
918
+ groups.output_truncated ||
919
+ !/^\d+\^done(?:,|$)/u.test(groups.mi))
920
+ throw new Error("GDB could not confirm its complete, untruncated inferior list before shutdown.");
921
+ const groupCount = gdbThreadGroupCount(groups.mi);
922
+ if (groupCount === undefined)
923
+ throw new Error("GDB returned an unknown inferior list before shutdown.");
924
+ if (groupCount > 0 && !session.inferiorTtyVerified)
925
+ return err(new AnalysisCapabilityUnavailableError(GDB_PROVIDER_IDENTITY.id, "close_gdb_session", "Live GDB inferiors require an explicit disposition because no durable inferior TTY is verified.", {
926
+ retryable: true,
927
+ userMessage: "Close requires an explicit inferior disposition.",
928
+ remediationAction: "Use gdb_console with this session_id to explicitly detach or terminate each remaining inferior, then retry close_gdb_session.",
929
+ }));
930
+ if (groupCount === 0) {
931
+ session.noInferiorVerified = true;
932
+ targetState = "none_observed";
933
+ await this.#request(session, "-gdb-exit");
934
+ }
935
+ else {
936
+ session.noInferiorVerified = false;
937
+ const disposition = await this.#detachInferior(session);
938
+ targetState =
939
+ disposition.status === "no-inferior"
940
+ ? "none_observed"
941
+ : "unknown";
942
+ }
943
+ }
944
+ catch {
945
+ // If MI synchronization is lost, stop only the owned debugger process.
946
+ }
947
+ const stopped = await this.#stopDebuggerOnly(session);
948
+ if (stopped.status === "incomplete")
949
+ return err(this.#retainCleanupFailure(session, "close_gdb_session", stopped.reason));
950
+ this.#sessions.delete(sessionId);
951
+ return ok({ target_state: targetState });
952
+ }, undefined, "close_gdb_session");
953
+ }
954
+ catch (cause) {
955
+ if (cause instanceof AnalysisError)
956
+ return err(cause);
957
+ throw cause;
958
+ }
959
+ }
960
+ async retryCleanupFailures() {
961
+ for (const session of this.#sessions.values()) {
962
+ if (session.cleanupFailures.size === 0)
963
+ continue;
964
+ const stopped = await this.#stopDebuggerOnly(session);
965
+ if (stopped.status === "incomplete")
966
+ return err([...session.cleanupFailures].at(-1) ??
967
+ this.#retainCleanupFailure(session, "close_gdb_session", stopped.reason));
968
+ this.#sessions.delete(session.id);
969
+ }
970
+ return ok(null);
971
+ }
972
+ async closeAll() {
973
+ this.#closing = true;
974
+ this.#closePromise ??= this.#drainStartsAndCloseSessions().catch((cause) => {
975
+ this.#closePromise = undefined;
976
+ throw cause;
977
+ });
978
+ return this.#closePromise;
979
+ }
980
+ async #drainStartsAndCloseSessions() {
981
+ const active = [...this.#activeStarts.entries()];
982
+ for (const [controller] of active)
983
+ controller.abort();
984
+ await Promise.allSettled(active.map(([, start]) => start));
985
+ await Promise.all([...this.#sessions.values()].map((session) => session.commandTail));
986
+ await closeOwnedDebuggerSessions(this.#sessions, (session) => this.#stopDebuggerOnly(session), "GDB");
987
+ }
988
+ async #serialize(session, operation, signal, operationName = "gdb_console") {
989
+ if (session.pendingCommandCount >= MAX_PENDING_GDB_COMMANDS)
990
+ throw new AnalysisResourceConstraintError(operationName, "transport", "GDB command queue capacity reached.", {
991
+ max_pending_commands: MAX_PENDING_GDB_COMMANDS,
992
+ active_or_queued_commands: session.pendingCommandCount,
993
+ });
994
+ session.pendingCommandCount += 1;
995
+ const previous = session.commandTail;
996
+ let release;
997
+ let acquired = false;
998
+ session.commandTail = new Promise((resolve) => {
999
+ release = resolve;
1000
+ });
1001
+ try {
1002
+ await waitForGdbCommandTurn(previous, signal);
1003
+ acquired = true;
1004
+ return await operation();
1005
+ }
1006
+ finally {
1007
+ if (acquired) {
1008
+ session.pendingCommandCount -= 1;
1009
+ release?.();
1010
+ }
1011
+ else {
1012
+ // The cancelled placeholder still occupies commandTail until its turn.
1013
+ // Keep its reservation until then so repeated cancellations cannot
1014
+ // bypass the per-session queue bound while an earlier command stalls.
1015
+ void previous.then(() => {
1016
+ session.pendingCommandCount -= 1;
1017
+ release?.();
1018
+ });
1019
+ }
1020
+ }
1021
+ }
1022
+ #receive(session, data) {
1023
+ if (session.startupResolve !== undefined) {
1024
+ const prompt = session.promptTail + data.toString("utf8");
1025
+ if (prompt.includes("(gdb)")) {
1026
+ const resolve = session.startupResolve;
1027
+ session.startupResolve = undefined;
1028
+ resolve();
1029
+ }
1030
+ session.promptTail = prompt.slice(-4);
1031
+ }
1032
+ const lines = [];
1033
+ let offset = 0;
1034
+ while (offset < data.byteLength) {
1035
+ const newline = data.indexOf(0x0a, offset);
1036
+ const piece = data.subarray(offset, newline < 0 ? data.byteLength : newline);
1037
+ session.bufferBytes += piece.byteLength;
1038
+ const lineBytes = session.bufferBytes - (newline >= 0 && piece.at(-1) === 0x0d ? 1 : 0);
1039
+ if (lineBytes > MAX_MI_LINE_BYTES) {
1040
+ this.#failProtocol(session, "GDB emitted an MI line exceeding the 16 MiB protocol limit.");
1041
+ return;
1042
+ }
1043
+ this.#appendLineBytes(session, piece);
1044
+ if (newline < 0)
1045
+ break;
1046
+ const record = Buffer.concat([
1047
+ ...session.bufferChunks,
1048
+ ...(session.bufferTail === undefined
1049
+ ? []
1050
+ : [session.bufferTail.subarray(0, session.bufferTailBytes)]),
1051
+ ], session.bufferBytes);
1052
+ const withoutCarriageReturn = record.at(-1) === 0x0d ? record.subarray(0, -1) : record;
1053
+ const invalidUtf8 = !isUtf8(withoutCarriageReturn);
1054
+ const line = withoutCarriageReturn.toString("utf8");
1055
+ session.bufferChunks.length = 0;
1056
+ session.bufferTail = undefined;
1057
+ session.bufferTailBytes = 0;
1058
+ session.bufferBytes = 0;
1059
+ if (invalidUtf8)
1060
+ session.invalidUtf8Observed = true;
1061
+ if (line.length > 0)
1062
+ lines.push({ value: line, invalidUtf8 });
1063
+ offset = newline + 1;
1064
+ }
1065
+ for (const { value: line } of lines) {
1066
+ if (Buffer.byteLength(line, "utf8") > MAX_RECENT_MI_LINE_BYTES) {
1067
+ session.lines.push(truncateUtf8RecordPrefix(line));
1068
+ session.recentRecordsTruncated = true;
1069
+ }
1070
+ else
1071
+ session.lines.push(line);
1072
+ }
1073
+ if (session.lines.length > 256) {
1074
+ session.lines.splice(0, session.lines.length - 256);
1075
+ session.recentRecordsTruncated = true;
1076
+ }
1077
+ for (const { value: line, invalidUtf8 } of lines) {
1078
+ for (const pending of session.pending.values()) {
1079
+ const lineBytes = Buffer.byteLength(line, "utf8") + 1;
1080
+ if (pending.outputBytes + lineBytes <= session.maxCommandOutputBytes &&
1081
+ pending.outputBytes + lineBytes <= MAX_COMMAND_OUTPUT_BYTES &&
1082
+ pending.lines.length < MAX_COMMAND_OUTPUT_RECORDS) {
1083
+ pending.lines.push(line);
1084
+ pending.outputBytes += lineBytes;
1085
+ pending.outputInvalidUtf8 ||= invalidUtf8;
1086
+ }
1087
+ else
1088
+ pending.outputTruncated = true;
1089
+ }
1090
+ if (line.startsWith("*stopped")) {
1091
+ for (const [token, pending] of session.pending) {
1092
+ if (!pending.awaitingInferiorStop)
1093
+ continue;
1094
+ clearTimeout(pending.timer);
1095
+ session.pending.delete(token);
1096
+ pending.cleanup();
1097
+ const records = [...pending.lines];
1098
+ pending.resolve({
1099
+ command: "",
1100
+ mi: pending.terminalRecord ?? "",
1101
+ records,
1102
+ console: records
1103
+ .filter((record) => record.startsWith("~"))
1104
+ .join("\n"),
1105
+ target: records
1106
+ .filter((record) => record.startsWith("@"))
1107
+ .join("\n"),
1108
+ log: records.filter((record) => record.startsWith("&")).join("\n"),
1109
+ output_truncated: pending.outputTruncated,
1110
+ ...(pending.outputInvalidUtf8
1111
+ ? { output_invalid_utf8: true }
1112
+ : {}),
1113
+ completion_status: "complete",
1114
+ });
1115
+ }
1116
+ continue;
1117
+ }
1118
+ const match = /^(\d+)\^(done|running|connected|error|exit)(?:,|$)/u.exec(line);
1119
+ if (match === null)
1120
+ continue;
1121
+ const token = Number(match[1]);
1122
+ const pending = session.pending.get(token);
1123
+ if (pending === undefined)
1124
+ continue;
1125
+ if (match[2] === "running") {
1126
+ pending.terminalRecord = line;
1127
+ pending.awaitingInferiorStop = true;
1128
+ continue;
1129
+ }
1130
+ clearTimeout(pending.timer);
1131
+ session.pending.delete(token);
1132
+ pending.cleanup();
1133
+ const records = [...pending.lines];
1134
+ pending.resolve({
1135
+ command: "",
1136
+ mi: line,
1137
+ records,
1138
+ console: records.filter((record) => record.startsWith("~")).join("\n"),
1139
+ target: records.filter((record) => record.startsWith("@")).join("\n"),
1140
+ log: records.filter((record) => record.startsWith("&")).join("\n"),
1141
+ output_truncated: pending.outputTruncated,
1142
+ ...(pending.outputInvalidUtf8
1143
+ ? { output_invalid_utf8: true }
1144
+ : {}),
1145
+ completion_status: "complete",
1146
+ });
1147
+ }
1148
+ }
1149
+ #appendLineBytes(session, piece) {
1150
+ const slabBytes = 64 * 1024;
1151
+ let offset = 0;
1152
+ while (offset < piece.length) {
1153
+ session.bufferTail ??= Buffer.allocUnsafe(slabBytes);
1154
+ const remaining = slabBytes - session.bufferTailBytes;
1155
+ const copied = Math.min(remaining, piece.length - offset);
1156
+ piece.copy(session.bufferTail, session.bufferTailBytes, offset, offset + copied);
1157
+ session.bufferTailBytes += copied;
1158
+ offset += copied;
1159
+ if (session.bufferTailBytes === slabBytes) {
1160
+ session.bufferChunks.push(session.bufferTail);
1161
+ session.bufferTail = undefined;
1162
+ session.bufferTailBytes = 0;
1163
+ }
1164
+ }
1165
+ }
1166
+ #failProtocol(session, message) {
1167
+ if (session.exited || session.protocolError !== undefined)
1168
+ return;
1169
+ session.protocolError = message;
1170
+ for (const pending of session.pending.values()) {
1171
+ clearTimeout(pending.timer);
1172
+ pending.cleanup();
1173
+ const records = [...pending.lines];
1174
+ pending.reject(new GdbProtocolFailureError(message, {
1175
+ command: pending.command,
1176
+ mi: "",
1177
+ records,
1178
+ console: records.filter((line) => line.startsWith("~")).join("\n"),
1179
+ target: records.filter((line) => line.startsWith("@")).join("\n"),
1180
+ log: records.filter((line) => line.startsWith("&")).join("\n"),
1181
+ output_truncated: pending.outputTruncated,
1182
+ ...(pending.outputInvalidUtf8
1183
+ ? { output_invalid_utf8: true }
1184
+ : {}),
1185
+ completion_status: "unknown",
1186
+ }));
1187
+ }
1188
+ session.pending.clear();
1189
+ session.startupReject?.(new Error(message));
1190
+ }
1191
+ async #stopAfterProtocolFailure(session, cause) {
1192
+ const stopped = await this.#stopDebuggerOnly(session);
1193
+ const partial = cause instanceof GdbProtocolFailureError ? cause.partial : undefined;
1194
+ const partialObservation = partial === undefined
1195
+ ? undefined
1196
+ : createEvidence(undefined, GDB_PROVIDER_IDENTITY, {
1197
+ predicateType: "rea.debugger.console-observation",
1198
+ operation: "gdb_console",
1199
+ parameters: {
1200
+ session_id: session.id,
1201
+ command: partial.command,
1202
+ },
1203
+ result: { ...partial, records: [...partial.records] },
1204
+ rawResult: { ...partial, records: [...partial.records] },
1205
+ subjectUnavailableReason: "The active GDB inferior identity is not established by the debugger session identifier.",
1206
+ limitations: [
1207
+ "The GDB MI protocol failed; retained records are partial and command completion is unknown.",
1208
+ "The unrestricted GDB console can access local shell, filesystem, network, and target controls.",
1209
+ ],
1210
+ });
1211
+ return new AnalysisCapabilityUnavailableError("gdb", "gdb_console", stopped.status === "incomplete"
1212
+ ? `${session.protocolError} The owned process could not be confirmed stopped: ${stopped.reason}`
1213
+ : session.protocolError, {
1214
+ cause,
1215
+ ...(stopped.status === "incomplete"
1216
+ ? {
1217
+ cleanup: {
1218
+ reason: stopped.reason,
1219
+ resources: [session.id],
1220
+ },
1221
+ }
1222
+ : {}),
1223
+ ...(partialObservation === undefined ? {} : { partialObservation }),
1224
+ });
1225
+ }
1226
+ #stopDebuggerOnly(session) {
1227
+ if (session.stopAttempt !== undefined)
1228
+ return session.stopAttempt;
1229
+ const attempt = this.#stopProcess(session, "GDB")
1230
+ .then((stopped) => {
1231
+ if (stopped.status !== "incomplete") {
1232
+ for (const failure of session.cleanupFailures)
1233
+ failure.resolveCleanup();
1234
+ session.cleanupFailures.clear();
1235
+ }
1236
+ return stopped;
1237
+ })
1238
+ .finally(() => {
1239
+ if (session.stopAttempt === attempt)
1240
+ session.stopAttempt = undefined;
1241
+ });
1242
+ session.stopAttempt = attempt;
1243
+ return attempt;
1244
+ }
1245
+ #retainCleanupFailure(session, operation, reason, options = {}) {
1246
+ const failure = new AnalysisCapabilityUnavailableError("gdb", operation, `The owned GDB process could not be confirmed stopped: ${reason}`, { ...options, cleanup: { reason, resources: [session.id] } });
1247
+ session.cleanupFailures.add(failure);
1248
+ return failure;
1249
+ }
1250
+ async #detachInferior(session) {
1251
+ if (session.noInferiorVerified)
1252
+ return { status: "no-inferior" };
1253
+ if (session.exited)
1254
+ throw new Error("GDB exited before inferior state could be verified.");
1255
+ // A new MI inspection replaces the old snapshot. If this read is
1256
+ // incomplete, malformed, or reports multiple inferiors, no earlier PID
1257
+ // can stand in for the current unknown inventory.
1258
+ session.knownInferiorIdentities.clear();
1259
+ if (session.protocolError !== undefined ||
1260
+ session.pending.size > 0 ||
1261
+ session.pendingCommandCount > 1)
1262
+ throw new Error("GDB MI state is not synchronized; inferior state is unknown.");
1263
+ const groups = await this.#request(session, "-list-thread-groups --recurse 1");
1264
+ if (groups.completion_status !== "complete" ||
1265
+ groups.output_truncated ||
1266
+ !/^\d+\^done(?:,|$)/u.test(groups.mi))
1267
+ throw new Error("GDB could not confirm its inferior state.");
1268
+ const inferiorPids = gdbThreadGroupPids(groups.mi);
1269
+ if (inferiorPids?.length === 0) {
1270
+ session.knownInferiorIdentities.clear();
1271
+ session.noInferiorVerified = true;
1272
+ return { status: "no-inferior" };
1273
+ }
1274
+ session.noInferiorVerified = false;
1275
+ if (inferiorPids?.length !== 1)
1276
+ throw new Error(inferiorPids === undefined
1277
+ ? "GDB returned an unknown recursive inferior list."
1278
+ : "GDB reports multiple inferiors; automatic detach cannot be confirmed safely.");
1279
+ if (!session.inferiorTtyVerified)
1280
+ throw new Error("GDB cannot detach the live inferior because no durable output sink was verified at session startup.");
1281
+ const observedTty = await this.#request(session, "-inferior-tty-show");
1282
+ if (observedTty.completion_status !== "complete" ||
1283
+ observedTty.output_truncated ||
1284
+ !/^\d+\^done(?:,|$)/u.test(observedTty.mi) ||
1285
+ miStringField(observedTty.mi, "inferior_tty_terminal") !==
1286
+ session.inferiorTty)
1287
+ throw new Error("GDB no longer reports the caller-selected inferior TTY; detachment cannot be confirmed safely.");
1288
+ await this.#verifyInferiorOutputSink(inferiorPids[0], session.inferiorTty, (identity) => session.knownInferiorIdentities.set(`${identity.pid}:${identity.startTime}`, identity));
1289
+ const detached = await this.#request(session, "-target-detach");
1290
+ if (detached.completion_status !== "complete" ||
1291
+ detached.output_truncated ||
1292
+ !/^\d+\^done(?:,|$)/u.test(detached.mi))
1293
+ throw new Error("GDB did not confirm inferior detachment.");
1294
+ session.knownInferiorIdentities.clear();
1295
+ return { status: "detached", outputSink: "durable" };
1296
+ }
1297
+ async #settleExitedCommands(session, code, signalCode) {
1298
+ await this.#waitForStdoutSettlement(session);
1299
+ for (const pending of session.pending.values()) {
1300
+ clearTimeout(pending.timer);
1301
+ pending.reject(new GdbCommandProcessExitError({
1302
+ command: pending.command,
1303
+ mi: "",
1304
+ records: [...pending.lines],
1305
+ console: pending.lines
1306
+ .filter((line) => line.startsWith("~"))
1307
+ .join("\n"),
1308
+ target: pending.lines
1309
+ .filter((line) => line.startsWith("@"))
1310
+ .join("\n"),
1311
+ log: pending.lines.filter((line) => line.startsWith("&")).join("\n"),
1312
+ process_exit_observed: true,
1313
+ process_exit_code: code,
1314
+ process_exit_signal: signalCode,
1315
+ output_truncated: pending.outputTruncated,
1316
+ ...(pending.outputInvalidUtf8
1317
+ ? { output_invalid_utf8: true }
1318
+ : {}),
1319
+ completion_status: "unknown",
1320
+ }));
1321
+ }
1322
+ session.pending.clear();
1323
+ }
1324
+ async #waitForStdoutSettlement(session) {
1325
+ let timer;
1326
+ try {
1327
+ await Promise.race([
1328
+ session.stdoutSettled,
1329
+ new Promise((resolve) => {
1330
+ timer = setTimeout(resolve, 1_000);
1331
+ timer.unref?.();
1332
+ }),
1333
+ ]);
1334
+ }
1335
+ finally {
1336
+ clearTimeout(timer);
1337
+ }
1338
+ }
1339
+ #request(session, command, signal, operation = "gdb_console", evidenceCommand = command) {
1340
+ const stdin = session.launched.process.stdin;
1341
+ if (session.exited)
1342
+ return Promise.reject(new Error(`GDB MI process has exited (exit code ${String(session.exitCode)}, signal ${String(session.exitSignal)}).`));
1343
+ if (stdin === null ||
1344
+ stdin === undefined ||
1345
+ stdin.destroyed ||
1346
+ !stdin.writable) {
1347
+ const message = "GDB MI input stream is closed";
1348
+ this.#failProtocol(session, message);
1349
+ return Promise.reject(new Error(message));
1350
+ }
1351
+ const token = session.nextToken++;
1352
+ return new Promise((resolve, reject) => {
1353
+ let abortListener;
1354
+ const cleanup = () => {
1355
+ signal?.removeEventListener("abort", abortListener);
1356
+ };
1357
+ let pending;
1358
+ const timer = setTimeout(() => {
1359
+ session.pending.delete(token);
1360
+ session.protocolError =
1361
+ "A GDB MI command timed out; untagged stream output can no longer be safely correlated with later commands.";
1362
+ pending.cleanup();
1363
+ const partial = {
1364
+ command: pending.evidenceCommand,
1365
+ mi: "",
1366
+ records: [...pending.lines],
1367
+ console: pending.lines
1368
+ .filter((line) => line.startsWith("~"))
1369
+ .join("\n"),
1370
+ target: pending.lines
1371
+ .filter((line) => line.startsWith("@"))
1372
+ .join("\n"),
1373
+ log: pending.lines.filter((line) => line.startsWith("&")).join("\n"),
1374
+ output_truncated: pending.outputTruncated,
1375
+ ...(pending.outputInvalidUtf8
1376
+ ? { output_invalid_utf8: true }
1377
+ : {}),
1378
+ completion_status: "unknown",
1379
+ };
1380
+ const timeout = new AnalysisTimeoutError(operation, this.#commandTimeoutMs, { cause: new Error(`GDB MI command timed out: ${command}`) });
1381
+ const evidence = createEvidence(undefined, GDB_PROVIDER_IDENTITY, {
1382
+ predicateType: operation === "start_gdb_session"
1383
+ ? "rea.debugger.startup-observation"
1384
+ : "rea.debugger.console-observation",
1385
+ operation,
1386
+ parameters: {
1387
+ session_id: session.id,
1388
+ command: pending.evidenceCommand,
1389
+ },
1390
+ result: { ...partial, records: [...partial.records] },
1391
+ rawResult: { ...partial, records: [...partial.records] },
1392
+ subjectUnavailableReason: "The active GDB inferior identity is not established by the debugger session identifier.",
1393
+ limitations: [
1394
+ "The GDB command exceeded its deadline; retained MI and stream records are partial and command completion is unknown.",
1395
+ "Cleanup of the owned GDB process was requested because output correlation could no longer be guaranteed.",
1396
+ "The unrestricted GDB console can access local shell, filesystem, network, and target controls.",
1397
+ ],
1398
+ });
1399
+ void this.#stopDebuggerOnly(session).then((stopped) => {
1400
+ if (stopped.status === "incomplete" &&
1401
+ operation === "start_gdb_session") {
1402
+ pending.reject(new AnalysisTimeoutError(operation, this.#commandTimeoutMs, {
1403
+ cause: timeout,
1404
+ cleanup: { reason: stopped.reason, resources: [session.id] },
1405
+ partialObservation: evidence,
1406
+ }));
1407
+ return;
1408
+ }
1409
+ pending.reject(stopped.status === "incomplete"
1410
+ ? new AnalysisCapabilityUnavailableError("gdb", "gdb_console", `GDB command output could not be correlated and its owned process could not be confirmed stopped: ${stopped.reason}`, {
1411
+ cause: timeout,
1412
+ cleanup: {
1413
+ reason: stopped.reason,
1414
+ resources: [session.id],
1415
+ },
1416
+ partialObservation: evidence,
1417
+ })
1418
+ : new GdbCommandTimeoutError(partial, evidence, this.#commandTimeoutMs));
1419
+ }, (cause) => pending.reject(new AnalysisCapabilityUnavailableError("gdb", "gdb_console", "GDB command output could not be correlated and owned process shutdown failed.", {
1420
+ cause: new AggregateError([timeout, cause], "GDB timeout and cleanup both failed."),
1421
+ cleanup: {
1422
+ reason: gdbErrorMessage(cause),
1423
+ resources: [session.id],
1424
+ },
1425
+ partialObservation: evidence,
1426
+ })));
1427
+ }, this.#commandTimeoutMs);
1428
+ pending = {
1429
+ token,
1430
+ command,
1431
+ evidenceCommand,
1432
+ lines: [],
1433
+ resolve: (result) => {
1434
+ cleanup();
1435
+ resolve(result);
1436
+ },
1437
+ reject: (error) => {
1438
+ cleanup();
1439
+ reject(error);
1440
+ },
1441
+ cleanup,
1442
+ timer,
1443
+ outputBytes: 0,
1444
+ outputTruncated: false,
1445
+ outputInvalidUtf8: false,
1446
+ terminalRecord: undefined,
1447
+ awaitingInferiorStop: false,
1448
+ };
1449
+ session.pending.set(token, pending);
1450
+ abortListener = () => {
1451
+ clearTimeout(pending.timer);
1452
+ const partial = {
1453
+ command: pending.evidenceCommand,
1454
+ mi: "",
1455
+ records: [...pending.lines],
1456
+ console: pending.lines
1457
+ .filter((line) => line.startsWith("~"))
1458
+ .join("\n"),
1459
+ target: pending.lines
1460
+ .filter((line) => line.startsWith("@"))
1461
+ .join("\n"),
1462
+ log: pending.lines.filter((line) => line.startsWith("&")).join("\n"),
1463
+ output_truncated: pending.outputTruncated,
1464
+ ...(pending.outputInvalidUtf8
1465
+ ? { output_invalid_utf8: true }
1466
+ : {}),
1467
+ completion_status: "unknown",
1468
+ };
1469
+ const evidence = createEvidence(undefined, GDB_PROVIDER_IDENTITY, {
1470
+ predicateType: "rea.debugger.console-observation",
1471
+ operation: "gdb_console",
1472
+ parameters: {
1473
+ session_id: session.id,
1474
+ command: pending.evidenceCommand,
1475
+ },
1476
+ result: { ...partial, records: [...partial.records] },
1477
+ rawResult: { ...partial, records: [...partial.records] },
1478
+ subjectUnavailableReason: "The active GDB inferior identity is not established by the debugger session identifier.",
1479
+ limitations: [
1480
+ "The GDB command was cancelled; retained MI records are partial and command completion is unknown.",
1481
+ "Shutdown of the owned GDB process was requested because output correlation could no longer be guaranteed.",
1482
+ "The unrestricted GDB console can access local shell, filesystem, network, and target controls.",
1483
+ ],
1484
+ });
1485
+ session.pending.delete(token);
1486
+ session.protocolError =
1487
+ "A GDB MI command was cancelled; owned-session shutdown was requested because output correlation can no longer be guaranteed.";
1488
+ void this.#stopDebuggerOnly(session).then((stopped) => {
1489
+ pending.reject(stopped.status === "incomplete"
1490
+ ? new AnalysisCancelledError("gdb_console", {
1491
+ cause: new Error(stopped.reason),
1492
+ cleanup: {
1493
+ reason: stopped.reason,
1494
+ resources: [session.id],
1495
+ },
1496
+ partialObservation: evidence,
1497
+ })
1498
+ : new AnalysisCancelledError("gdb_console", {
1499
+ partialObservation: evidence,
1500
+ }));
1501
+ }, (cause) => pending.reject(new AnalysisCancelledError("gdb_console", {
1502
+ cause,
1503
+ partialObservation: evidence,
1504
+ })));
1505
+ };
1506
+ signal?.addEventListener("abort", abortListener, { once: true });
1507
+ if (signal?.aborted) {
1508
+ abortListener();
1509
+ return;
1510
+ }
1511
+ try {
1512
+ session.launched.process.stdin?.write(`${token}${command}\n`, "utf8", (cause) => {
1513
+ if (cause)
1514
+ this.#failProtocol(session, `GDB stdin write failed: ${cause.message}`);
1515
+ });
1516
+ }
1517
+ catch (cause) {
1518
+ this.#failProtocol(session, `GDB stdin write failed: ${cause instanceof Error ? cause.message : "unknown error"}`);
1519
+ }
1520
+ }).then((result) => ({ ...result, command }));
1521
+ }
1522
+ }
1523
+ const miQuote = (value) => `"${value.replaceAll("\\", "\\\\").replaceAll('"', '\\"').replaceAll("\r", "\\r").replaceAll("\n", "\\n").replaceAll("\t", "\\t")}"`;
1524
+ /** @internal Decode one unambiguous GDB MI C-string field. */
1525
+ export const miStringField = (record, field) => {
1526
+ const escapedField = field.replace(/[.*+?^${}()|[\]\\]/gu, "\\$&");
1527
+ const valuePattern = `((?:\\\\.|[^"\\\\])*)`;
1528
+ const fieldPattern = new RegExp(`(?:^|,)${escapedField}="${valuePattern}"`, "gu");
1529
+ const matches = [...record.matchAll(fieldPattern)];
1530
+ if (matches.length !== 1)
1531
+ return undefined;
1532
+ const match = new RegExp(`^\\d+\\^done,${escapedField}="${valuePattern}"$`, "u").exec(record);
1533
+ const raw = match?.[1];
1534
+ if (raw === undefined)
1535
+ return undefined;
1536
+ const bytes = [];
1537
+ for (let index = 0; index < raw.length;) {
1538
+ const character = raw[index];
1539
+ if (character !== "\\") {
1540
+ const codePoint = raw.codePointAt(index);
1541
+ if (codePoint === undefined ||
1542
+ (codePoint >= 0xd800 && codePoint <= 0xdfff))
1543
+ return undefined;
1544
+ const value = String.fromCodePoint(codePoint);
1545
+ bytes.push(...Buffer.from(value, "utf8"));
1546
+ index += value.length;
1547
+ continue;
1548
+ }
1549
+ const escaped = raw[++index];
1550
+ const simple = {
1551
+ a: 7,
1552
+ b: 8,
1553
+ f: 12,
1554
+ n: 10,
1555
+ r: 13,
1556
+ t: 9,
1557
+ v: 11,
1558
+ "\\": 92,
1559
+ '"': 34,
1560
+ "'": 39,
1561
+ "?": 63,
1562
+ };
1563
+ const simpleByte = simple[escaped];
1564
+ if (simpleByte !== undefined) {
1565
+ bytes.push(simpleByte);
1566
+ index += 1;
1567
+ continue;
1568
+ }
1569
+ if (escaped === "x") {
1570
+ const hex = /^[0-9a-f]+/iu.exec(raw.slice(index + 1))?.[0];
1571
+ if (hex === undefined)
1572
+ return undefined;
1573
+ bytes.push(Number.parseInt(hex, 16) & 0xff);
1574
+ index += hex.length;
1575
+ index += 1;
1576
+ continue;
1577
+ }
1578
+ if (/[0-7]/u.test(escaped)) {
1579
+ const octal = `${escaped}${/^[0-7]{0,2}/u.exec(raw.slice(index + 1))[0]}`;
1580
+ bytes.push(Number.parseInt(octal, 8) & 0xff);
1581
+ index += octal.length;
1582
+ continue;
1583
+ }
1584
+ return undefined;
1585
+ }
1586
+ const decoded = Buffer.from(bytes).toString("utf8");
1587
+ return Buffer.from(decoded, "utf8").equals(Buffer.from(bytes))
1588
+ ? decoded
1589
+ : undefined;
1590
+ };
1591
+ /** @internal Classify commands that can invalidate the configured output sink. */
1592
+ export const gdbOneShotCommandMayInvalidateDetachProof = (command) => {
1593
+ if (commandMayChangeInferiorOutput(command))
1594
+ return true;
1595
+ const firstToken = /^\s*([^\s;]+)/u.exec(command)?.[1]?.toLowerCase();
1596
+ if (firstToken !== undefined &&
1597
+ (["source", "define", "alias"].some((name) => name.startsWith(firstToken)) ||
1598
+ firstToken === "py" ||
1599
+ "python".startsWith(firstToken)))
1600
+ return true;
1601
+ // One-shot execution cannot establish which shell/GDB context interprets
1602
+ // redirections, nor safely track multiline command definitions.
1603
+ return /[<>]{1,2}|&>|[\r\n;]/u.test(command);
1604
+ };
1605
+ /** @internal Classify commands that can invalidate the configured output sink. */
1606
+ export const commandMayChangeInferiorOutput = (command) => {
1607
+ const setting = /^\s*(?:set|with)\s+(\S+)/iu.exec(command)?.[1];
1608
+ const maySetInferiorTty = setting !== undefined && "inferior-tty".startsWith(setting.toLowerCase());
1609
+ const firstToken = /^\s*([^\s;]+)/u.exec(command)?.[1]?.toLowerCase();
1610
+ const mayBeTtyCommand = firstToken !== undefined && "tty".startsWith(firstToken);
1611
+ const mayDefineAlias = firstToken !== undefined && "alias".startsWith(firstToken);
1612
+ const mayRunWithOutputRedirection = firstToken !== undefined &&
1613
+ ["run", "start", "starti"].some((name) => name.startsWith(firstToken)) &&
1614
+ /[<>]{1,2}|&>/u.test(command.slice(firstToken.length));
1615
+ return (maySetInferiorTty ||
1616
+ mayBeTtyCommand ||
1617
+ mayDefineAlias ||
1618
+ /\binferior-tty\b/iu.test(command) ||
1619
+ /^\s*(?:wit(?:h)?(?:\s|$)|tty(?:\s|$)|source\b|py\w*|define\b)/iu.test(command) ||
1620
+ mayRunWithOutputRedirection);
1621
+ };
1622
+ /** Terminate only the directly owned debugger process, never its process group or inferiors. */
1623
+ export const waitForGdbCommandTurn = (previous, signal) => {
1624
+ if (signal === undefined)
1625
+ return previous;
1626
+ if (signal.aborted)
1627
+ return Promise.reject(new AnalysisCancelledError("gdb_console"));
1628
+ return new Promise((resolve, reject) => {
1629
+ const onAbort = () => reject(new AnalysisCancelledError("gdb_console"));
1630
+ signal.addEventListener("abort", onAbort, { once: true });
1631
+ previous.then(() => {
1632
+ signal.removeEventListener("abort", onAbort);
1633
+ resolve();
1634
+ }, (cause) => {
1635
+ signal.removeEventListener("abort", onAbort);
1636
+ reject(cause);
1637
+ });
1638
+ });
1639
+ };