rea-agents 6.3.0 → 6.5.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 (1332) hide show
  1. package/DISCLAIMER.md +136 -0
  2. package/README.md +72 -18
  3. package/THIRD_PARTY_NOTICES.md +134 -0
  4. package/bridge/android/ReaJadxBridge.java +123 -11
  5. package/bridge/cutter/rea_bridge.py +816 -0
  6. package/bridge/ghidra/ReaGhidraAnalysisOptions.java +38 -0
  7. package/bridge/ghidra/ReaGhidraApplySeeds.java +151 -0
  8. package/bridge/ghidra/ReaGhidraBridge.java +1729 -283
  9. package/bridge/ghidra/ReaGhidraBundleActivator.java +14 -0
  10. package/bridge/ghidra/ReaGhidraMipsSoftFloat.java +176 -0
  11. package/bridge/ghidra/ReaGhidraNoReturnFix.java +123 -0
  12. package/bridge/ghidra/ReaGhidraPrepareRaw.java +49 -0
  13. package/bridge/hopper_bridge.py +103 -69
  14. package/bridge/mitmproxy/capture.py +189 -13
  15. package/bridge/native/rea_lldb_tracer.py +40 -6
  16. package/bridge/process/ProcessRunTokenReader.swift +76 -34
  17. package/bridge/pwntools/layout_impl.py +5 -0
  18. package/bridge/pwntools/recorded_crash_impl.py +31 -10
  19. package/dist/adb/AdbConfiguration.js +100 -0
  20. package/dist/adb/AdbDeviceOutput.js +208 -0
  21. package/dist/adb/AdbDirectoryListing.js +80 -0
  22. package/dist/adb/AdbHostFileName.js +34 -0
  23. package/dist/adb/AdbProvider.js +1433 -0
  24. package/dist/adb/AdbShellOutput.js +307 -0
  25. package/dist/android/AndroidTargetSnapshot.js +104 -22
  26. package/dist/android/JadxAnalysis.js +32 -7
  27. package/dist/android/JadxConfiguration.js +163 -53
  28. package/dist/android/JadxDoctor.js +115 -0
  29. package/dist/android/JadxMcpTransport.js +5 -3
  30. package/dist/android/JadxProtocol.js +14 -0
  31. package/dist/android/JadxProvider.js +63 -25
  32. package/dist/android/JadxRelease.js +12 -1
  33. package/dist/android/JadxWorkspaceRoot.js +157 -0
  34. package/dist/apktool/ApktoolConfiguration.js +227 -0
  35. package/dist/apktool/ApktoolDecodeOutput.js +142 -0
  36. package/dist/apktool/ApktoolProvider.js +543 -0
  37. package/dist/application/AnalysisContextQueries.js +5 -8
  38. package/dist/application/AnalysisProvider.js +24 -14
  39. package/dist/application/AppBundleExecutable.js +30 -25
  40. package/dist/application/BinaryTargetResolver.js +210 -33
  41. package/dist/application/BrowserEvidence.js +1 -1
  42. package/dist/application/BrowserObservationService.js +13 -2
  43. package/dist/application/BrowserScenarioCaptureService.js +0 -1
  44. package/dist/application/CallPathTracing.js +52 -13
  45. package/dist/application/CapabilityInventory.js +179 -29
  46. package/dist/application/ClaudeDesktopConfigLocation.js +152 -0
  47. package/dist/application/ClientConfigurationDocument.js +154 -7
  48. package/dist/application/ClientConfigurationFiles.js +128 -0
  49. package/dist/application/ClientRegistrationEnvironment.js +41 -0
  50. package/dist/application/ClientRegistrationIdentity.js +94 -29
  51. package/dist/application/ClientRegistrationStatus.js +223 -67
  52. package/dist/application/DirectAnalysis.js +86 -31
  53. package/dist/application/DirectAnalysisCleanup.js +1 -1
  54. package/dist/application/DirectAnalysisStatus.js +14 -2
  55. package/dist/application/Doctor.js +117 -34
  56. package/dist/application/DoctorDiagnostics.js +34 -12
  57. package/dist/application/DoctorProviderIds.js +2 -0
  58. package/dist/application/DoctorScope.js +11 -2
  59. package/dist/application/DshCordisPatch.js +355 -0
  60. package/dist/application/DshCordisYaml.js +155 -0
  61. package/dist/application/EnhancedLiteralTracing.js +30 -16
  62. package/dist/application/EnhancedToolTypes.js +0 -1
  63. package/dist/application/EnhancedTools.js +164 -54
  64. package/dist/application/EvidenceBundleCommands.js +36 -19
  65. package/dist/application/EvidenceBundleFiles.js +29 -7
  66. package/dist/application/FunctionAnalysisEvidence.js +3 -0
  67. package/dist/application/GeminiClientSettings.js +151 -0
  68. package/dist/application/HermesClientHome.js +115 -0
  69. package/dist/application/HermesConfigurationYaml.js +272 -0
  70. package/dist/application/HopperDownload.js +39 -0
  71. package/dist/application/InventoryProjectionEvidence.js +0 -1
  72. package/dist/application/InvestigationProviders.js +19 -3
  73. package/dist/application/JsonFiles.js +114 -23
  74. package/dist/application/JsonInputFile.js +410 -0
  75. package/dist/application/LinuxHopper.js +130 -60
  76. package/dist/application/MacHopper.js +177 -150
  77. package/dist/application/MacHopperPaths.js +40 -0
  78. package/dist/application/MipsElfMetadata.js +201 -0
  79. package/dist/application/MipsElfSharedLoad.js +164 -0
  80. package/dist/application/MipsGnuAttributes.js +90 -0
  81. package/dist/application/MsixPackageStorage.js +133 -0
  82. package/dist/application/ProgressReporter.js +1 -1
  83. package/dist/application/ProviderOperationExecution.js +39 -0
  84. package/dist/application/ReconstructionCoverageService.js +0 -1
  85. package/dist/application/ReconstructionObligationCandidates.js +12 -5
  86. package/dist/application/ReconstructionObligationLedgerDiagnostics.js +2 -2
  87. package/dist/application/ReconstructionObligationLedgerEvaluation.js +15 -33
  88. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -72
  89. package/dist/application/ReconstructionObligationLedgerService.js +3 -1
  90. package/dist/application/ReconstructionObligationOriginalCases.js +2 -1
  91. package/dist/application/ReferenceSourceImport.js +94 -31
  92. package/dist/application/ReferenceSourceImportEntries.js +40 -30
  93. package/dist/application/ReferenceSourceImportPolicy.js +99 -23
  94. package/dist/application/ReferenceSourceImportTypes.js +30 -23
  95. package/dist/application/ReferenceSourceVcsAdapter.js +163 -31
  96. package/dist/application/RegularFileRead.js +121 -7
  97. package/dist/application/Setup.js +88 -14
  98. package/dist/application/SetupClientConfiguration.js +307 -38
  99. package/dist/application/SetupClients.js +12 -6
  100. package/dist/application/SetupHost.js +158 -38
  101. package/dist/application/SetupInstallFailure.js +42 -2
  102. package/dist/application/SetupPlan.js +83 -57
  103. package/dist/application/SetupRecoveryBackup.js +66 -0
  104. package/dist/application/SetupRegistrationEnvironment.js +2 -1
  105. package/dist/application/SetupSkill.js +354 -88
  106. package/dist/application/SupportedClients.js +429 -70
  107. package/dist/application/TypeScriptEmittedSourceCandidates.js +26 -0
  108. package/dist/application/Uninstall.js +412 -73
  109. package/dist/application/UninstallFailure.js +14 -0
  110. package/dist/application/Update.js +54 -25
  111. package/dist/application/UpdateFailure.js +17 -0
  112. package/dist/application/UpdateMaintenance.js +25 -47
  113. package/dist/application/UpdateRuntime.js +141 -27
  114. package/dist/application/Utf8JsonInput.js +7 -0
  115. package/dist/application/WebModuleTraceService.js +7 -0
  116. package/dist/application/WebNetworkCaptureService.js +16 -7
  117. package/dist/application/WebScriptExportService.js +131 -65
  118. package/dist/application/WebSourceLocationService.js +22 -3
  119. package/dist/application/WindowsCapabilities.js +18 -15
  120. package/dist/application/WorkflowEvidence.js +24 -1
  121. package/dist/application/adb/AdbDeviceAnalysisPort.js +1 -0
  122. package/dist/application/adb/AdbDeviceAnalysisService.js +13 -0
  123. package/dist/application/analysisView/AnalysisViewService.js +122 -6
  124. package/dist/application/android/AndroidPackageInspection.js +25 -0
  125. package/dist/application/android/AndroidSearchEvidenceSummary.js +100 -0
  126. package/dist/application/apktool/ApktoolResourceAnalysisPort.js +1 -0
  127. package/dist/application/apktool/ApktoolResourceAnalysisService.js +13 -0
  128. package/dist/application/binary/AnalysisClientCleanup.js +0 -24
  129. package/dist/application/binary/AnalysisProviderEvaluation.js +1 -1
  130. package/dist/application/binary/AnalysisProviderRegistry.js +36 -21
  131. package/dist/application/binary/AnalysisSnapshotCache.js +41 -20
  132. package/dist/application/binary/AnalysisSnapshotFiles.js +75 -9
  133. package/dist/application/binary/BinarySession.js +250 -97
  134. package/dist/application/binary/BinarySessionExecution.js +5 -4
  135. package/dist/application/binary/BinarySessionOpen.js +13 -6
  136. package/dist/application/binary/BinarySessionRecords.js +33 -7
  137. package/dist/application/binary/BinarySessionStatus.js +93 -23
  138. package/dist/application/binary/BinaryTargetSummary.js +9 -0
  139. package/dist/application/binary/CompositeProvider.js +71 -28
  140. package/dist/application/binary/LazyAnalysisProvider.js +3 -1
  141. package/dist/application/binary/SessionProviderRouter.js +5 -2
  142. package/dist/application/binaryDiagnostics/BinaryLayoutService.js +13 -2
  143. package/dist/application/binaryDiagnostics/PeResourcesPort.js +1 -0
  144. package/dist/application/binaryDiagnostics/PeResourcesService.js +114 -0
  145. package/dist/application/binaryDiagnostics/RecordedCrashService.js +16 -4
  146. package/dist/application/captures/PacketCaptureService.js +83 -0
  147. package/dist/application/closeOwnedWebResources.js +7 -0
  148. package/dist/application/electron/ElectronFusePort.js +1 -0
  149. package/dist/application/electron/ElectronFuseService.js +80 -0
  150. package/dist/application/evm/EvmInterfaceService.js +4 -0
  151. package/dist/application/firmware/FirmwareAnalysisService.js +3 -0
  152. package/dist/application/flutter/DartAotInspection.js +26 -0
  153. package/dist/application/flutter/FlutterBuildAnalysisPort.js +1 -0
  154. package/dist/application/flutter/FlutterBuildAnalysisService.js +13 -0
  155. package/dist/application/frida/FridaInstrumentationPort.js +8 -0
  156. package/dist/application/frida/FridaInstrumentationService.js +310 -0
  157. package/dist/application/frida/fridaInputErrors.js +17 -0
  158. package/dist/application/go/GoBinaryPort.js +1 -0
  159. package/dist/application/go/GoBinaryService.js +80 -0
  160. package/dist/application/harmony/HarmonyApplicationService.js +17 -0
  161. package/dist/application/investigation/EvidenceLedger.js +40 -14
  162. package/dist/application/investigation/InspectEvidenceBundle.js +18 -0
  163. package/dist/application/investigation/InvestigationRecords.js +12 -21
  164. package/dist/application/investigation/UnknownEvidence.js +22 -18
  165. package/dist/application/javascript/ElectronActiveObservationService.js +55 -25
  166. package/dist/application/javascript/ElectronBoundaryAnalysis.js +17 -3
  167. package/dist/application/javascript/ElectronBoundaryGraph.js +2 -0
  168. package/dist/application/javascript/ElectronBoundaryGraphCallPaths.js +144 -0
  169. package/dist/application/javascript/ElectronBoundaryGraphContext.js +3 -2
  170. package/dist/application/javascript/ElectronBoundaryGraphIpc.js +28 -9
  171. package/dist/application/javascript/ElectronBoundaryGraphNative.js +20 -7
  172. package/dist/application/javascript/ElectronBoundaryGraphWindows.js +50 -12
  173. package/dist/application/javascript/ElectronObservationService.js +0 -1
  174. package/dist/application/javascript/JavaScriptApplicationEvidence.js +15 -0
  175. package/dist/application/javascript/JavaScriptApplicationService.js +44 -18
  176. package/dist/application/javascript/JavaScriptApplicationWorkflowEvidence.js +5 -6
  177. package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +0 -1
  178. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +253 -60
  179. package/dist/application/javascript/JavaScriptArtifactGraphAccumulator.js +51 -23
  180. package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +93 -21
  181. package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +4 -3
  182. package/dist/application/javascript/JavaScriptArtifactGraphContext.js +35 -8
  183. package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +25 -14
  184. package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +163 -54
  185. package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +246 -15
  186. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +1057 -323
  187. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +134 -32
  188. package/dist/application/javascript/JavaScriptArtifactReconstructionInput.js +6 -1
  189. package/dist/application/javascript/JavaScriptModuleRelationships.js +39 -15
  190. package/dist/application/javascript/JavaScriptRecoveryService.js +32 -9
  191. package/dist/application/javascript/JavaScriptRuntimeObservationService.js +2 -1
  192. package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +0 -1
  193. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +9 -3
  194. package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +228 -74
  195. package/dist/application/javascript/JavaScriptSemanticGraphConstruction.js +12 -19
  196. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +4 -1
  197. package/dist/application/javascript/JavaScriptSemanticGraphElectronProjection.js +67 -0
  198. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +5 -3
  199. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +5 -3
  200. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +19 -8
  201. package/dist/application/javascript/JavaScriptSemanticTraceService.js +0 -1
  202. package/dist/application/jeb/JebAnalysisPort.js +1 -0
  203. package/dist/application/jeb/JebAnalysisService.js +13 -0
  204. package/dist/application/managed/ManagedApplicationGraphService.js +1 -2
  205. package/dist/application/managed/ManagedMemberComparisonService.js +72 -54
  206. package/dist/application/managed/ManagedNativeVerificationService.js +0 -1
  207. package/dist/application/managed/ManagedReconstructionService.js +0 -1
  208. package/dist/application/native/NativeCallRoutes.js +54 -34
  209. package/dist/application/native/NativeDispatchMetadataInspection.js +6 -2
  210. package/dist/application/native/NativeUiActionTrace.js +51 -30
  211. package/dist/application/native/NativeValueTrace.js +75 -24
  212. package/dist/application/pcap/PcapAnalysisPort.js +1 -0
  213. package/dist/application/pcap/PcapAnalysisService.js +24 -0
  214. package/dist/application/process/ProcessCli.js +57 -32
  215. package/dist/application/reverse/ReverseEngineeringCommandPort.js +1 -0
  216. package/dist/application/reverse/ReverseEngineeringService.js +688 -0
  217. package/dist/application/rust/RustBinaryPort.js +1 -0
  218. package/dist/application/rust/RustBinaryService.js +80 -0
  219. package/dist/application/signals/SignalRecordingService.js +83 -0
  220. package/dist/application/sqlite/SqliteDatabaseCapability.js +30 -0
  221. package/dist/application/sqlite/SqliteDatabasePort.js +1 -0
  222. package/dist/application/sqlite/SqliteDatabaseService.js +76 -0
  223. package/dist/application/wasm/WasmArtifactPort.js +1 -0
  224. package/dist/application/wasm/WasmArtifactService.js +77 -0
  225. package/dist/application/wasm/WasmInterfaceComparisonService.js +188 -0
  226. package/dist/artifacts/ArtifactHash.js +13 -2
  227. package/dist/artifacts/ArtifactPaths.js +133 -15
  228. package/dist/artifacts/ArtifactProvider.js +28 -19
  229. package/dist/artifacts/ArtifactReader.js +35 -0
  230. package/dist/artifacts/ArtifactResourceScope.js +109 -0
  231. package/dist/artifacts/AsarArtifactReader.js +295 -156
  232. package/dist/artifacts/AsarHeader.js +24 -0
  233. package/dist/artifacts/AsarListing.js +78 -0
  234. package/dist/artifacts/DirectoryArtifactReader.js +247 -74
  235. package/dist/artifacts/MachOSliceArtifactReader.js +198 -48
  236. package/dist/artifacts/NativeDmgArtifactReader.js +188 -78
  237. package/dist/artifacts/OrderedReads.js +57 -0
  238. package/dist/artifacts/SafeOutputTree.js +261 -71
  239. package/dist/artifacts/SafeOutputTreeCleanup.js +45 -0
  240. package/dist/artifacts/SafeOutputTreeCreationFailure.js +20 -0
  241. package/dist/artifacts/SafeOutputTreeIdentity.js +42 -0
  242. package/dist/artifacts/SafeOutputTreeReadback.js +33 -0
  243. package/dist/artifacts/ZipArtifactReader.js +186 -31
  244. package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +77 -68
  245. package/dist/artifacts/apple/DylibResolutionReader.js +11 -5
  246. package/dist/artifacts/apple/InterfaceBuilderAnalysis.js +114 -38
  247. package/dist/artifacts/apple/InterfaceBuilderDecodeBudget.js +125 -35
  248. package/dist/artifacts/apple/KeyedArchiveReader.js +35 -15
  249. package/dist/artifacts/apple/MachoLoadCommandReader.js +62 -61
  250. package/dist/artifacts/apple/NibArchive.js +11 -4
  251. package/dist/artifacts/apple/PlistNumberLiterals.js +2 -2
  252. package/dist/artifacts/extraction/ArtifactExtraction.js +115 -92
  253. package/dist/artifacts/hostExecutableMarking.js +16 -0
  254. package/dist/artifacts/inventory/ArtifactGraphConstruction.js +236 -69
  255. package/dist/artifacts/inventory/ArtifactInventory.js +7 -6
  256. package/dist/artifacts/inventory/classify.js +95 -35
  257. package/dist/artifacts/inventory/hashStableRootArtifact.js +48 -15
  258. package/dist/artifacts/inventory/reader.js +40 -17
  259. package/dist/artifacts/inventory/scanCanonical.js +84 -40
  260. package/dist/artifacts/inventory/scanReader.js +72 -19
  261. package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +177 -15
  262. package/dist/artifacts/javascript/JavaScriptSourceAnalysis.js +3 -0
  263. package/dist/artifacts/readStableArtifact.js +28 -4
  264. package/dist/browser/BrowserProcessStartup.js +20 -9
  265. package/dist/browser/BrowserScenarioPartialObservation.js +60 -38
  266. package/dist/browser/BrowserScenarioSecrets.js +193 -48
  267. package/dist/browser/CdpBrowserProvider.js +74 -98
  268. package/dist/browser/CdpCaptureDocuments.js +261 -65
  269. package/dist/browser/CdpCaptureDomSvg.js +243 -0
  270. package/dist/browser/CdpCaptureEventBodyShapes.js +12 -12
  271. package/dist/browser/CdpCaptureEventHandlers.js +49 -21
  272. package/dist/browser/CdpCaptureEvents.js +53 -19
  273. package/dist/browser/CdpCaptureStorage.js +22 -5
  274. package/dist/browser/CdpCaptureStorageFingerprints.js +54 -11
  275. package/dist/browser/CdpCaptureValues.js +0 -1
  276. package/dist/browser/CdpConnection.js +25 -9
  277. package/dist/browser/CdpElectronInspection.js +14 -4
  278. package/dist/browser/CdpElectronProvider.js +7 -2
  279. package/dist/browser/CdpElectronScripts.js +2 -1
  280. package/dist/browser/CdpElectronWorkers.js +7 -2
  281. package/dist/browser/CdpEndpoint.js +143 -17
  282. package/dist/browser/CdpObservationSession.js +24 -8
  283. package/dist/browser/CdpPageCapture.js +67 -17
  284. package/dist/browser/CdpPageCaptureScripts.js +4 -3
  285. package/dist/browser/CdpPageCaptureWorkers.js +5 -1
  286. package/dist/browser/CdpSafeMetadata.js +9 -5
  287. package/dist/browser/CdpScreenshot.js +5 -14
  288. package/dist/browser/CdpSnapshotStrings.js +21 -0
  289. package/dist/browser/CdpTargetSession.js +59 -36
  290. package/dist/browser/CdpWebMcpDiscovery.js +55 -16
  291. package/dist/browser/ElectronFileScope.js +99 -9
  292. package/dist/browser/PlaywrightBrowserScenarioProvider.js +64 -8
  293. package/dist/browser/PlaywrightElectronActiveActions.js +4 -4
  294. package/dist/browser/PlaywrightElectronActiveProjection.js +16 -4
  295. package/dist/browser/PlaywrightElectronActiveProvider.js +114 -36
  296. package/dist/browser/PlaywrightExecutionBoundary.js +2 -2
  297. package/dist/browser/PlaywrightScenarioArtifacts.js +5 -5
  298. package/dist/browser/PlaywrightScenarioBrowser.js +78 -13
  299. package/dist/browser/PlaywrightScenarioEvents.js +198 -36
  300. package/dist/browser/PlaywrightScenarioServiceWorkers.js +249 -0
  301. package/dist/browser/PlaywrightScenarioSession.js +180 -75
  302. package/dist/browser/PlaywrightScenarioStorage.js +507 -0
  303. package/dist/browser/PngVisualDiff.js +198 -29
  304. package/dist/browser/WebSourceMapFetcher.js +164 -81
  305. package/dist/browser/assets/LocalWebScriptArtifacts.js +27 -4
  306. package/dist/browser/assets/PublishWebScripts.js +88 -22
  307. package/dist/browser/assets/ScenarioScriptCapture.js +2 -1
  308. package/dist/browser/assets/WebArtifactReads.js +34 -4
  309. package/dist/browser/assets/WebSourceLocationArtifacts.js +39 -3
  310. package/dist/browser/execution/CdpExecutionCapture.js +3 -3
  311. package/dist/browser/execution/CdpPreciseCoverage.js +5 -8
  312. package/dist/browser/history/CaptureFailures.js +22 -8
  313. package/dist/browser/history/CaptureFormatError.js +2 -2
  314. package/dist/browser/history/{HarJson.js → CaptureJson.js} +14 -4
  315. package/dist/browser/history/CaptureRedaction.js +16 -3
  316. package/dist/browser/history/CaptureRelease.js +20 -2
  317. package/dist/browser/history/HarCapture.js +16 -9
  318. package/dist/browser/history/HarSchema.js +36 -36
  319. package/dist/browser/history/HistoricalCaptureDecoder.js +93 -25
  320. package/dist/browser/history/MitmproxyCaptureAdapter.js +3 -1
  321. package/dist/browser/history/NodeCaptureAdapter.js +48 -0
  322. package/dist/browser/history/{HarCaptureProcess.js → NodeCaptureProcess.js} +16 -15
  323. package/dist/browser/history/QlogCapture.js +385 -0
  324. package/dist/browser/history/SazCapture.js +130 -0
  325. package/dist/browser/history/SazHttp.js +61 -0
  326. package/dist/browser/history/SazMetadata.js +92 -0
  327. package/dist/browser/history/SazProjection.js +90 -0
  328. package/dist/browser/modules/NativeModuleResolver.js +177 -110
  329. package/dist/browser/modules/WebModuleArtifacts.js +41 -3
  330. package/dist/browser/network/PlaywrightNetworkContent.js +40 -5
  331. package/dist/browser/network/PlaywrightScenarioNetwork.js +125 -11
  332. package/dist/captures/TsharkCaptureProvider.js +370 -0
  333. package/dist/captures/parseFieldDiscovery.js +66 -0
  334. package/dist/captures/parsePacketOutput.js +21 -0
  335. package/dist/catalogIdentity.js +46 -35
  336. package/dist/cli/adbCommands.js +337 -0
  337. package/dist/cli/analysisViewCommands.js +39 -1
  338. package/dist/cli/androidCommands.js +11 -2
  339. package/dist/cli/apktoolCommands.js +52 -0
  340. package/dist/cli/applicationCommands.js +44 -17
  341. package/dist/cli/artifactCommands.js +9 -12
  342. package/dist/cli/binaryDiagnosticsCommands.js +27 -5
  343. package/dist/cli/browserAdvancedCommands.js +97 -55
  344. package/dist/cli/browserCommands.js +46 -29
  345. package/dist/cli/captureCommands.js +72 -0
  346. package/dist/cli/cliResultOutput.js +188 -0
  347. package/dist/cli/coreBinaryCommands.js +73 -32
  348. package/dist/cli/coreNativeCommands.js +54 -45
  349. package/dist/cli/cutterCommands.js +50 -0
  350. package/dist/cli/electronCommands.js +51 -4
  351. package/dist/cli/evmCommands.js +16 -8
  352. package/dist/cli/finishAnalysisCommand.js +44 -0
  353. package/dist/cli/firmwareCommands.js +21 -38
  354. package/dist/cli/flutterCommands.js +69 -0
  355. package/dist/cli/fridaCommands.js +211 -0
  356. package/dist/cli/goCommands.js +20 -0
  357. package/dist/cli/interactiveSetup.js +11 -1
  358. package/dist/cli/javascriptApplicationAnalysis.js +18 -2
  359. package/dist/cli/javascriptRecoveryCommands.js +29 -15
  360. package/dist/cli/jebCommands.js +99 -0
  361. package/dist/cli/jsonOutput.js +13 -6
  362. package/dist/cli/managedCommands.js +31 -3
  363. package/dist/cli/options.js +20 -2
  364. package/dist/cli/pcapCommands.js +47 -0
  365. package/dist/cli/processCommands.js +1 -1
  366. package/dist/cli/referenceSourceImportStatus.js +7 -0
  367. package/dist/cli/reverseEngineeringCommands.js +268 -0
  368. package/dist/cli/rustCommands.js +21 -0
  369. package/dist/cli/setupCommands.js +55 -15
  370. package/dist/cli/signalCommands.js +72 -0
  371. package/dist/cli/sqliteCommands.js +79 -0
  372. package/dist/cli/utilityCommands.js +179 -89
  373. package/dist/cli/wasmCommands.js +61 -0
  374. package/dist/cli/webModuleCommands.js +36 -32
  375. package/dist/cli/webNetworkCaptureCommands.js +8 -8
  376. package/dist/cli/webScriptCommands.js +20 -1
  377. package/dist/cli/webSourceLocationCommands.js +21 -9
  378. package/dist/cli-runtime/AbortablePromise-BVBemxbD.js +123 -0
  379. package/dist/cli-runtime/AnalysisProvider-D0Us2OTk.js +27 -0
  380. package/dist/cli-runtime/AnalysisSnapshotCache-BXS0wRd2.js +710 -0
  381. package/dist/cli-runtime/ArtifactReader-BXkffc1D.js +55 -0
  382. package/dist/cli-runtime/ArtifactResourceScope-DQWTcUwE.js +114 -0
  383. package/dist/cli-runtime/AsarHeader-CnzOzYEH.js +31 -0
  384. package/dist/cli-runtime/BinarySessionStatus-DnMxMk-r.js +211 -0
  385. package/dist/cli-runtime/BinaryTargetResolver-CVIJ_s1A.js +1308 -0
  386. package/dist/cli-runtime/BoundedFileBytes-BU30odTm.js +39 -0
  387. package/dist/cli-runtime/CdpTargetSession-DGX5pV9w.js +650 -0
  388. package/dist/cli-runtime/ClientConfigPath-c6jr6INc.js +36 -0
  389. package/dist/cli-runtime/ClientConfigurationDocument-ffQ9X0Se.js +1957 -0
  390. package/dist/cli-runtime/ClientRegistrationStatus-DszCyPEU.js +509 -0
  391. package/dist/cli-runtime/CurrentEntrypointPath-D5FRNdkq.js +14 -0
  392. package/dist/cli-runtime/DirectAnalysis-BgvAtpN3.js +528 -0
  393. package/dist/cli-runtime/Doctor-DIpf_I7N.js +588 -0
  394. package/dist/cli-runtime/ElectronFileScope-dpHm2nrS.js +1054 -0
  395. package/dist/cli-runtime/ExecFileOutput-BEQs-lDD.js +117 -0
  396. package/dist/cli-runtime/IdaConfiguration-CtGP7EKo.js +1094 -0
  397. package/dist/cli-runtime/InterfaceBuilderDecodeBudget-D4omRUe4.js +279 -0
  398. package/dist/cli-runtime/InventoryProjectionEvidence-DIsI4DJ6.js +49 -0
  399. package/dist/cli-runtime/InvestigationProviders-DoQRIHii.js +117 -0
  400. package/dist/cli-runtime/JavaScriptApplicationEvidenceGraph-D5aI_FSJ.js +160 -0
  401. package/dist/cli-runtime/JavaScriptApplicationWorkflowEvidence-Bz4-V0Ct.js +75 -0
  402. package/dist/cli-runtime/JavaScriptWorkerMemoryLimit-B1bwMM1a.js +86 -0
  403. package/dist/cli-runtime/JebMcpEndpoint-DUytrn5G.js +428 -0
  404. package/dist/cli-runtime/JsonFiles-DQa1PRKy.js +708 -0
  405. package/dist/cli-runtime/MacCodeSignature-MgYbRK_H.js +24 -0
  406. package/dist/cli-runtime/MacHopperPaths-CwL5lYPX.js +434 -0
  407. package/dist/cli-runtime/MachoLoadCommandReader-C7e074Ze.js +510 -0
  408. package/dist/cli-runtime/ManagedSnapshot-rqyBHcdL.js +4185 -0
  409. package/dist/cli-runtime/OwnedCommand-Cj9GhmPR.js +112 -0
  410. package/dist/cli-runtime/PrivateRuntimeRoot-DAy0PiBM.js +263 -0
  411. package/dist/cli-runtime/ProcessOwnership-DXC5-UWt.js +1378 -0
  412. package/dist/cli-runtime/ProviderDeadline-8m2pFRDc.js +122 -0
  413. package/dist/cli-runtime/RegularFile-B_6KPCNQ.js +139 -0
  414. package/dist/cli-runtime/RegularFileRead-DVlC5faM.js +125 -0
  415. package/dist/cli-runtime/SafeOutputTree-D6U15GXd.js +524 -0
  416. package/dist/cli-runtime/SetupHost-FkYWswsq.js +1098 -0
  417. package/dist/cli-runtime/SupportedClients-DaX6Lt2d.js +1049 -0
  418. package/dist/cli-runtime/UninstallFailure-1blyKXHE.js +22 -0
  419. package/dist/cli-runtime/Update-CbTC_eg1.js +143 -0
  420. package/dist/cli-runtime/UpdateFailure-BcFNxEZZ.js +24 -0
  421. package/dist/cli-runtime/ZipArtifactReader-B8ZgNe4D.js +248 -0
  422. package/dist/cli-runtime/analysisErrorCleanup-Do6YeeoD.js +32 -0
  423. package/dist/cli-runtime/analysisErrorPresentation-DGt7TdsH.js +497 -0
  424. package/dist/cli-runtime/appleArchiveFormat-tVoI2ykA.js +263 -0
  425. package/dist/cli-runtime/application__DirectAnalysisStatus-DpOejOf0.js +150 -0
  426. package/dist/cli-runtime/application__EnhancedTools-oFE2bOjs.js +1787 -0
  427. package/dist/cli-runtime/application__FunctionAnalysisEvidence-B6osuhvW.js +41 -0
  428. package/dist/cli-runtime/application__ReconstructionCoverageService-DN3wTFQj.js +32 -0
  429. package/dist/cli-runtime/application__ReconstructionObligationLedgerService-CKcTppX9.js +815 -0
  430. package/dist/cli-runtime/application__Setup-XpMaRNjy.js +514 -0
  431. package/dist/cli-runtime/application__Uninstall-_23pU2yB.js +427 -0
  432. package/dist/cli-runtime/application__UpdateRuntime-DPvY8ohd.js +345 -0
  433. package/dist/cli-runtime/application__android__AndroidApplicationService-CFgIFPM4.js +31 -0
  434. package/dist/cli-runtime/application__apple__AppleApplicationService-Db6QCsun.js +31 -0
  435. package/dist/cli-runtime/application__harmony__HarmonyApplicationService-CFjocHoK.js +31 -0
  436. package/dist/cli-runtime/application__javascript__ElectronActiveObservationService-CmVDUI_Z.js +118 -0
  437. package/dist/cli-runtime/application__javascript__ElectronObservationService-DEsR8KDN.js +63 -0
  438. package/dist/cli-runtime/application__javascript__JavaScriptApplicationService-CCkp8KBh.js +11450 -0
  439. package/dist/cli-runtime/application__javascript__JavaScriptApplicationWorkflowService-lPy0tzr3.js +2329 -0
  440. package/dist/cli-runtime/application__javascript__JavaScriptRuntimeReconciliationService-DWleA8K9.js +88 -0
  441. package/dist/cli-runtime/application__javascript__JavaScriptSemanticTraceService-DkALH4rL.js +299 -0
  442. package/dist/cli-runtime/artifactOperationError-B7n03FbD.js +27 -0
  443. package/dist/cli-runtime/artifacts__ArtifactProvider-zXI0QjSL.js +2187 -0
  444. package/dist/cli-runtime/binary-BVOr2mgE.js +14206 -0
  445. package/dist/cli-runtime/browserObservationError-Dx6xRTjb.js +40 -0
  446. package/dist/cli-runtime/catalogIdentity-DLoXgfIR.js +933 -0
  447. package/dist/cli-runtime/cli.js +41848 -0
  448. package/dist/cli-runtime/cliOutput-BC1BdAcB.js +122 -0
  449. package/dist/cli-runtime/cliOutput.js +5 -0
  450. package/dist/cli-runtime/cliResultOutput-DsRMI8CJ.js +780 -0
  451. package/dist/cli-runtime/cliResultOutput.js +5 -0
  452. package/dist/cli-runtime/composition__browserScenario-DHXC1a8n.js +2927 -0
  453. package/dist/cli-runtime/composition__electronObservation-GecK2EID.js +555 -0
  454. package/dist/cli-runtime/composition__electronScenario-CEZnVrAL.js +653 -0
  455. package/dist/cli-runtime/cutterToolContracts-TZH9EHr5.js +5134 -0
  456. package/dist/cli-runtime/doctorRuntime-BE5ZX8it.js +258 -0
  457. package/dist/cli-runtime/dotnet__ManagedStaticProvider-C8_yZCDc.js +5 -0
  458. package/dist/cli-runtime/errorSchemas-CTRmvMl3.js +601 -0
  459. package/dist/cli-runtime/javascriptApplicationAnalysis-HgMzVMQw.js +2068 -0
  460. package/dist/cli-runtime/javascriptExportReturnShapeProjection-Dg00g35t.js +78 -0
  461. package/dist/cli-runtime/javascriptExportShapeComparisonSchemas-BYnoIqIk.js +1242 -0
  462. package/dist/cli-runtime/javascriptRuntimeReconciliation-DNjDoL3S.js +1507 -0
  463. package/dist/cli-runtime/javascriptRuntimeReconciliationSchemas-BWpGWNcI.js +247 -0
  464. package/dist/cli-runtime/javascriptSemanticTraceSchemas-BTCNcvbc.js +126 -0
  465. package/dist/cli-runtime/lipo-DSWP6fv-.js +396 -0
  466. package/dist/cli-runtime/logger-CQQCI4a2.js +48 -0
  467. package/dist/cli-runtime/machoContainer-C8BIkkq3.js +172 -0
  468. package/dist/cli-runtime/managedApplicationGraph-B08jb3jq.js +1130 -0
  469. package/dist/cli-runtime/managedToolContracts-D60QmIYj.js +99 -0
  470. package/dist/cli-runtime/mcpDoctor.js +359 -0
  471. package/dist/cli-runtime/mcpStartupPolicy-CVVSOmRc.js +21 -0
  472. package/dist/cli-runtime/native__NativeMacOSProvider-YBTvUeJO.js +4875 -0
  473. package/dist/cli-runtime/officialToolContracts-CCFF0an9.js +1501 -0
  474. package/dist/cli-runtime/propertyListKeys-G8e74YWb.js +248 -0
  475. package/dist/cli-runtime/providerAdapterError-DAjhICdr.js +25 -0
  476. package/dist/cli-runtime/providerCleanupError-Ceq8f0wK.js +27 -0
  477. package/dist/cli-runtime/providerIdentities-Ao1XTvwx.js +31 -0
  478. package/dist/cli-runtime/providerStartupTimeout-B2tF2LtZ.js +17 -0
  479. package/dist/cli-runtime/readFileHandleChunks-dp60iZ6v.js +38 -0
  480. package/dist/cli-runtime/reconstructionObligationLedgerSchemas-Bao0xMr-.js +19478 -0
  481. package/dist/cli-runtime/rolldown-runtime-DXoylpqc.js +121 -0
  482. package/dist/cli-runtime/runtimeVersion-CMGd0bDu.js +23 -0
  483. package/dist/cli-runtime/safeJson-DKKACtdy.js +25 -0
  484. package/dist/cli-runtime/scanCanonical-KP4T9jSl.js +2724 -0
  485. package/dist/cli-runtime/snapshotEnvironment-D_tWyOub.js +813 -0
  486. package/dist/cli-runtime/toolContracts-D2FOG_Nb.js +3721 -0
  487. package/dist/cli-runtime/toolOutputSchemaGroups-DRiYs1je.js +12070 -0
  488. package/dist/cli-runtime/workflowInputError-n8Oo-bLA.js +26 -0
  489. package/dist/cli.js +44 -5
  490. package/dist/cliBrowserScenarioCommands.js +41 -5
  491. package/dist/cliCommandNames.js +80 -0
  492. package/dist/cliEvidenceCommands.js +0 -1
  493. package/dist/cliJavaScriptRuntimeCommands.js +16 -14
  494. package/dist/cliJsonInput.js +14 -6
  495. package/dist/cliLogging.js +50 -14
  496. package/dist/cliObservationOptions.js +9 -0
  497. package/dist/cliOutput.js +38 -5
  498. package/dist/composition/adb.js +3 -0
  499. package/dist/composition/apktool.js +3 -0
  500. package/dist/composition/binary.js +4 -0
  501. package/dist/composition/binaryDiagnostics.js +4 -0
  502. package/dist/composition/captures.js +3 -0
  503. package/dist/composition/directAnalysis.js +36 -11
  504. package/dist/composition/electronFuses.js +4 -0
  505. package/dist/composition/evm.js +12 -0
  506. package/dist/composition/flutter.js +3 -0
  507. package/dist/composition/go.js +4 -0
  508. package/dist/composition/javascriptAnalysisWorkerProcess.js +49 -0
  509. package/dist/composition/jeb.js +35 -0
  510. package/dist/composition/pcap.js +3 -0
  511. package/dist/composition/resolveWindowsProviderExecutable.js +61 -0
  512. package/dist/composition/reverseEngineering.js +29 -0
  513. package/dist/composition/rust.js +4 -0
  514. package/dist/composition/signals.js +3 -0
  515. package/dist/composition/sqlite.js +4 -0
  516. package/dist/composition/wasm.js +22 -0
  517. package/dist/composition/webNetworkCaptures.js +7 -2
  518. package/dist/config/environment.js +55 -4
  519. package/dist/config/ghidraDisabledAnalyzers.js +25 -0
  520. package/dist/config/ghidraLanguageOverride.js +9 -0
  521. package/dist/config/homeDirectory.js +9 -6
  522. package/dist/config/mcpInputSchemaProfile.js +31 -0
  523. package/dist/config/mcpOutputSchemaProfile.js +22 -0
  524. package/dist/config/parseConfig.js +36 -19
  525. package/dist/config/parsers.js +4 -3
  526. package/dist/config/{ghidraStartupTimeout.js → providerStartupTimeout.js} +7 -3
  527. package/dist/contracts/adb/adbToolContracts.js +353 -0
  528. package/dist/contracts/advertisedInputExamples.js +48 -0
  529. package/dist/contracts/analysisDetail.js +13 -0
  530. package/dist/contracts/analysisViewApiSurfaceExample.js +68 -0
  531. package/dist/contracts/analysisViewToolContracts.js +39 -3
  532. package/dist/contracts/android/androidToolContracts.js +17 -8
  533. package/dist/contracts/apktool/apktoolToolContracts.js +33 -0
  534. package/dist/contracts/applicationToolContracts.js +17 -2
  535. package/dist/contracts/artifactToolContracts.js +21 -6
  536. package/dist/contracts/browserToolContracts.js +2 -1
  537. package/dist/contracts/captures/captureToolContracts.js +42 -0
  538. package/dist/contracts/compactInputSchema.js +276 -0
  539. package/dist/contracts/cutterToolContracts.js +84 -0
  540. package/dist/contracts/enhancedToolContracts.js +2 -2
  541. package/dist/contracts/evm/evmToolContracts.js +30 -15
  542. package/dist/contracts/firmware/firmwareToolContracts.js +1 -1
  543. package/dist/contracts/flutter/flutterToolContracts.js +47 -0
  544. package/dist/contracts/fridaRemoteAddress.js +23 -0
  545. package/dist/contracts/fridaToolContracts.js +273 -0
  546. package/dist/contracts/functionComparisonExample.js +12 -1
  547. package/dist/contracts/functionWorkflowToolContracts.js +1 -1
  548. package/dist/contracts/gdbToolContracts.js +103 -0
  549. package/dist/contracts/go/goToolContracts.js +20 -0
  550. package/dist/contracts/hopperMemoryContracts.js +15 -0
  551. package/dist/contracts/inputSchemaPresentation.js +91 -24
  552. package/dist/contracts/investigationExamples.js +1 -0
  553. package/dist/contracts/javascript/electronToolContracts.js +40 -3
  554. package/dist/contracts/javascript/javascriptRecoveryToolContracts.js +13 -1
  555. package/dist/contracts/jeb/jebToolContracts.js +64 -0
  556. package/dist/contracts/managed/managedToolContracts.js +43 -4
  557. package/dist/contracts/managed/managedWorkflowExamples.js +7 -1
  558. package/dist/contracts/managed/managedWorkflowToolContracts.js +4 -30
  559. package/dist/contracts/mobileApplicationGraphExamples.js +12 -0
  560. package/dist/contracts/native/binaryDiagnosticsToolContracts.js +27 -4
  561. package/dist/contracts/native/nativeToolContracts.js +10 -6
  562. package/dist/contracts/officialToolContracts.js +9 -9
  563. package/dist/contracts/pcap/pcapToolContracts.js +33 -0
  564. package/dist/contracts/providerSelection.js +1 -0
  565. package/dist/contracts/reconstructionReadinessExample.js +126 -119
  566. package/dist/contracts/reverseEngineeringToolContracts.js +52 -0
  567. package/dist/contracts/rizinDebugToolContracts.js +96 -0
  568. package/dist/contracts/rust/rustToolContracts.js +20 -0
  569. package/dist/contracts/sessionLifecycleInputs.js +34 -2
  570. package/dist/contracts/sessionToolContracts.js +4 -4
  571. package/dist/contracts/sessionToolSchemas.js +20 -2
  572. package/dist/contracts/signals/signalToolContracts.js +40 -0
  573. package/dist/contracts/sqlite/sqliteToolContracts.js +36 -0
  574. package/dist/contracts/toolContractExamples.js +35 -0
  575. package/dist/contracts/toolContractTypes.js +5 -0
  576. package/dist/contracts/toolContracts.js +32 -0
  577. package/dist/contracts/toolEffects.js +414 -8
  578. package/dist/contracts/toolOutputSchemaGroups.js +78 -33
  579. package/dist/contracts/toolOutputSchemaPrimitives.js +111 -10
  580. package/dist/contracts/toolSchemaMetadata.js +98 -9
  581. package/dist/contracts/unknownContractExamples.js +1 -1
  582. package/dist/contracts/wasm/wasmComparisonContracts.js +52 -0
  583. package/dist/contracts/wasm/wasmToolContracts.js +33 -0
  584. package/dist/contracts/webNetworkCaptureToolContracts.js +15 -4
  585. package/dist/cutter/CutterBridgeClient.js +621 -0
  586. package/dist/cutter/CutterBridgeService.js +139 -0
  587. package/dist/doctorRuntime.js +20 -8
  588. package/dist/domain/adb/adbDeviceAnalysis.js +605 -0
  589. package/dist/domain/analysisErrorBase.js +20 -0
  590. package/dist/domain/analysisErrorCleanup.js +29 -0
  591. package/dist/domain/analysisErrorCore.js +19 -0
  592. package/dist/domain/analysisErrorPresentation.js +75 -22
  593. package/dist/domain/analysisErrorProjection.js +35 -13
  594. package/dist/domain/analysisProfile.js +7 -3
  595. package/dist/domain/analysisSnapshot.js +313 -185
  596. package/dist/domain/analysisView/WebNetworkApiSurfaceAccumulator.js +414 -0
  597. package/dist/domain/analysisView/analysisView.js +417 -45
  598. package/dist/domain/analysisView/analysisViewCoverage.js +32 -0
  599. package/dist/domain/analysisView/analysisViewErrors.js +4 -0
  600. package/dist/domain/analysisView/analysisViewParent.js +12 -0
  601. package/dist/domain/analysisView/analysisViewText.js +29 -0
  602. package/dist/domain/analysisView/androidPackageView.js +102 -0
  603. package/dist/domain/analysisView/artifactInventoryView.js +140 -0
  604. package/dist/domain/analysisView/binaryLayoutView.js +13 -4
  605. package/dist/domain/analysisView/dartAotView.js +93 -0
  606. package/dist/domain/analysisView/evmInterfaceView.js +105 -0
  607. package/dist/domain/analysisView/interfaceBuilderView.js +182 -0
  608. package/dist/domain/analysisView/javascriptApplicationView.js +29 -26
  609. package/dist/domain/analysisView/machoView.js +186 -0
  610. package/dist/domain/analysisView/managedArtifactView.js +108 -0
  611. package/dist/domain/analysisView/managedMemberView.js +209 -0
  612. package/dist/domain/analysisView/nativeFunctionView.js +150 -0
  613. package/dist/domain/analysisView/pcapCaptureView.js +264 -0
  614. package/dist/domain/analysisView/qlogCaptureView.js +198 -0
  615. package/dist/domain/analysisView/wasmArtifactView.js +162 -0
  616. package/dist/domain/analysisView/webNetworkApiSurfaceView.js +123 -0
  617. package/dist/domain/analysisView/webNetworkCaptureView.js +388 -0
  618. package/dist/domain/android/androidAnalysis.js +36 -2
  619. package/dist/domain/android/androidApplication.js +57 -80
  620. package/dist/domain/apktool/apktoolResourceAnalysis.js +89 -0
  621. package/dist/domain/apple/appleApplication.js +71 -52
  622. package/dist/domain/apple/appleArchiveFormat.js +184 -0
  623. package/dist/domain/apple/appleAssetCatalog.js +15 -0
  624. package/dist/domain/apple/appleBundleAnatomy.js +96 -29
  625. package/dist/domain/apple/dyldPaths.js +18 -3
  626. package/dist/domain/apple/dylibResolution.js +21 -11
  627. package/dist/domain/apple/dylibResolutionFindings.js +8 -9
  628. package/dist/domain/apple/interfaceBuilderGraph.js +72 -45
  629. package/dist/domain/apple/interfaceBuilderKeyedArchive.js +38 -9
  630. package/dist/domain/apple/machoContainer.js +120 -8
  631. package/dist/domain/apple/machoCpuIdentity.js +4 -0
  632. package/dist/domain/apple/plistValue.js +6 -1
  633. package/dist/domain/artifactComparison.js +130 -25
  634. package/dist/domain/artifactDecompressionBudget.js +26 -0
  635. package/dist/domain/artifactGraph.js +28 -9
  636. package/dist/domain/artifactIdentity.js +33 -2
  637. package/dist/domain/artifactInspection.js +47 -45
  638. package/dist/domain/artifactIntegrityPolicy.js +10 -0
  639. package/dist/domain/artifactInventoryEvidence.js +148 -51
  640. package/dist/domain/artifactPathSyntax.js +1 -1
  641. package/dist/domain/binaryTarget.js +253 -80
  642. package/dist/domain/binaryTargetTypes.js +21 -1
  643. package/dist/domain/browserNetworkEvidence.js +4 -0
  644. package/dist/domain/browserObservation.js +88 -29
  645. package/dist/domain/browserObservationSchemas.js +12 -5
  646. package/dist/domain/browserScenarioCapture.js +2 -1
  647. package/dist/domain/browserScenarioCaptureValues.js +26 -2
  648. package/dist/domain/browserScenarioDiff.js +120 -11
  649. package/dist/domain/browserScenarioDiffEvidence.js +46 -13
  650. package/dist/domain/browserScenarioDiffValues.js +10 -3
  651. package/dist/domain/browserScenarioNetworkComparison.js +158 -0
  652. package/dist/domain/browserScenarioNormalization.js +10 -13
  653. package/dist/domain/browserScenarioValues.js +2 -12
  654. package/dist/domain/browserSession.js +2 -2
  655. package/dist/domain/bundleComparison.js +1 -5
  656. package/dist/domain/callPath.js +40 -3
  657. package/dist/domain/canonicalJsonDigestSteps.js +34 -12
  658. package/dist/domain/captures/packetCapture.js +138 -0
  659. package/dist/domain/captures/packetFields.js +81 -0
  660. package/dist/domain/changedBehavior.js +43 -41
  661. package/dist/domain/compactStringIdentity.js +9 -0
  662. package/dist/domain/comparisonSourceEvidence.js +6 -0
  663. package/dist/domain/dosCom.js +2 -2
  664. package/dist/domain/dosMz.js +52 -14
  665. package/dist/domain/electron/electronFuses.js +360 -0
  666. package/dist/domain/elfFixedHeader.js +42 -0
  667. package/dist/domain/evidence.js +104 -38
  668. package/dist/domain/evidenceBundle.js +58 -20
  669. package/dist/domain/evidenceErrors.js +5 -0
  670. package/dist/domain/evidenceRecordSummary.js +144 -0
  671. package/dist/domain/evm/evmInterface.js +18 -4
  672. package/dist/domain/evm/solidityMetadata.js +70 -0
  673. package/dist/domain/explicitSensitiveFailure.js +42 -24
  674. package/dist/domain/firmware/firmwareAnalysis.js +29 -0
  675. package/dist/domain/flutter/flutterBuildAnalysis.js +141 -0
  676. package/dist/domain/functionCallCoverage.js +60 -0
  677. package/dist/domain/functionComparisonDimensions.js +101 -10
  678. package/dist/domain/functionComparisonNormalization.js +66 -10
  679. package/dist/domain/functionComparisonResults.js +7 -6
  680. package/dist/domain/functionComparisonSchemas.js +14 -3
  681. package/dist/domain/functionDossierEvidence.js +3 -0
  682. package/dist/domain/go/goBinary.js +96 -0
  683. package/dist/domain/harmony/harmonyApplication.js +156 -0
  684. package/dist/domain/hopperErrors.js +15 -16
  685. package/dist/domain/hopperPublisher.js +12 -0
  686. package/dist/domain/hopperValues.js +112 -34
  687. package/dist/domain/inputIssueProjection.js +16 -1
  688. package/dist/domain/javascript/electronObservation.js +4 -1
  689. package/dist/domain/javascript/electronStaticAnalysisBrowser.js +24 -24
  690. package/dist/domain/javascript/electronStaticAnalysisIpc.js +13 -20
  691. package/dist/domain/javascript/electronStaticAnalysisNative.js +85 -41
  692. package/dist/domain/javascript/electronStaticAnalysisValues.js +30 -8
  693. package/dist/domain/javascript/electronWrappedCallPaths.js +498 -0
  694. package/dist/domain/javascript/htmlArtifactReferences.js +94 -4
  695. package/dist/domain/javascript/javascriptAnalysisResourceControls.js +65 -0
  696. package/dist/domain/javascript/javascriptApplicationAnalysis.js +7 -1
  697. package/dist/domain/javascript/javascriptApplicationChangeGraph.js +13 -8
  698. package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +1 -1
  699. package/dist/domain/javascript/javascriptApplicationGraph.js +96 -19
  700. package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +1 -0
  701. package/dist/domain/javascript/javascriptApplicationProjectionResources.js +43 -0
  702. package/dist/domain/javascript/javascriptApplicationVersionItems.js +28 -12
  703. package/dist/domain/javascript/javascriptApplicationVersionKeys.js +40 -19
  704. package/dist/domain/javascript/javascriptArtifactFiles.js +2 -1
  705. package/dist/domain/javascript/javascriptAstFingerprint.js +100 -39
  706. package/dist/domain/javascript/javascriptAstValues.js +81 -0
  707. package/dist/domain/javascript/javascriptBootstrap.js +94 -0
  708. package/dist/domain/javascript/javascriptBootstrapIntegrity.js +372 -0
  709. package/dist/domain/javascript/javascriptBuiltinResourceMethods.js +8 -0
  710. package/dist/domain/javascript/javascriptBundledRequireOrigin.js +291 -0
  711. package/dist/domain/javascript/javascriptContextBridgeExposure.js +23 -0
  712. package/dist/domain/javascript/javascriptElectronMemberWrites.js +114 -0
  713. package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +6 -5
  714. package/dist/domain/javascript/javascriptExportShapeVariants.js +1 -1
  715. package/dist/domain/javascript/javascriptFeatureSeed.js +33 -16
  716. package/dist/domain/javascript/javascriptFeatureTrace.js +9 -3
  717. package/dist/domain/javascript/javascriptFeatureTraceSchemas.js +42 -11
  718. package/dist/domain/javascript/javascriptIntrinsicInvocation.js +132 -0
  719. package/dist/domain/javascript/javascriptModuleDeclaration.js +28 -0
  720. package/dist/domain/javascript/javascriptModuleInterop.js +618 -0
  721. package/dist/domain/javascript/javascriptModuleResolutionMode.js +18 -0
  722. package/dist/domain/javascript/javascriptModuleSemanticIr.js +15 -0
  723. package/dist/domain/javascript/javascriptModuleSpecifier.js +5 -0
  724. package/dist/domain/javascript/javascriptNativeHandoff.js +6 -2
  725. package/dist/domain/javascript/javascriptPackageImportAliases.js +58 -0
  726. package/dist/domain/javascript/javascriptRecovery.js +12 -5
  727. package/dist/domain/javascript/javascriptRpcEndpoints.js +331 -0
  728. package/dist/domain/javascript/javascriptRuntimeLoadState.js +12 -3
  729. package/dist/domain/javascript/javascriptRuntimeObservation.js +4 -1
  730. package/dist/domain/javascript/javascriptRuntimeReconciliationCaptureParsing.js +10 -4
  731. package/dist/domain/javascript/javascriptRuntimeReconciliationGraph.js +7 -2
  732. package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +15 -2
  733. package/dist/domain/javascript/javascriptRuntimeReconciliationResult.js +0 -1
  734. package/dist/domain/javascript/javascriptRuntimeReconciliationSchemas.js +5 -4
  735. package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +121 -22
  736. package/dist/domain/javascript/javascriptSemanticAmbientWrites.js +251 -0
  737. package/dist/domain/javascript/javascriptSemanticAnalysis.js +493 -104
  738. package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +17 -34
  739. package/dist/domain/javascript/javascriptSemanticCallResolution.js +4 -3
  740. package/dist/domain/javascript/javascriptSemanticCallableResults.js +42 -0
  741. package/dist/domain/javascript/javascriptSemanticCallableStack.js +52 -0
  742. package/dist/domain/javascript/javascriptSemanticCalls.js +14 -12
  743. package/dist/domain/javascript/javascriptSemanticChildProcesses.js +42 -55
  744. package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +428 -32
  745. package/dist/domain/javascript/javascriptSemanticDataEffects.js +14 -20
  746. package/dist/domain/javascript/javascriptSemanticDependencies.js +69 -0
  747. package/dist/domain/javascript/javascriptSemanticDerivedAnalysis.js +15 -4
  748. package/dist/domain/javascript/javascriptSemanticFileProjection.js +1 -0
  749. package/dist/domain/javascript/javascriptSemanticFingerprints.js +51 -53
  750. package/dist/domain/javascript/javascriptSemanticGraph.js +74 -24
  751. package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +2 -11
  752. package/dist/domain/javascript/javascriptSemanticIterationSources.js +41 -8
  753. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +538 -151
  754. package/dist/domain/javascript/javascriptSemanticMutationInitializers.js +199 -3
  755. package/dist/domain/javascript/javascriptSemanticMutationValues.js +78 -35
  756. package/dist/domain/javascript/javascriptSemanticObjectReferences.js +671 -0
  757. package/dist/domain/javascript/javascriptSemanticObjects.js +27 -17
  758. package/dist/domain/javascript/javascriptSemanticProjection.js +202 -56
  759. package/dist/domain/javascript/javascriptSemanticPromises.js +6 -9
  760. package/dist/domain/javascript/javascriptSemanticPropertyPaths.js +77 -0
  761. package/dist/domain/javascript/javascriptSemanticProvenance.js +5 -1
  762. package/dist/domain/javascript/javascriptSemanticQuery.js +34 -31
  763. package/dist/domain/javascript/javascriptSemanticQueryIdentity.js +1 -3
  764. package/dist/domain/javascript/javascriptSemanticReferenceSources.js +25 -0
  765. package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +331 -8
  766. package/dist/domain/javascript/javascriptSemanticResources.js +6 -40
  767. package/dist/domain/javascript/javascriptSemanticReturnedReferences.js +233 -0
  768. package/dist/domain/javascript/javascriptSemanticReturns.js +49 -52
  769. package/dist/domain/javascript/javascriptSemanticState.js +61 -4
  770. package/dist/domain/javascript/javascriptSemanticTraversal.js +25 -5
  771. package/dist/domain/javascript/javascriptSemanticValues.js +260 -35
  772. package/dist/domain/javascript/javascriptSourceAnalysis.js +1 -0
  773. package/dist/domain/javascript/javascriptSourceMapPaths.js +44 -17
  774. package/dist/domain/javascript/javascriptSourceParser.js +72 -3
  775. package/dist/domain/javascript/javascriptSourceSelection.js +11 -0
  776. package/dist/domain/javascript/javascriptStaticAnalysis.js +72 -26
  777. package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +100 -24
  778. package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +271 -47
  779. package/dist/domain/javascript/javascriptStaticAnalysisFindings.js +8 -4
  780. package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +166 -56
  781. package/dist/domain/javascript/javascriptStaticAnalysisState.js +2 -0
  782. package/dist/domain/javascript/javascriptStaticAnalysisTypes.js +2 -1
  783. package/dist/domain/javascript/javascriptSymbolicBindings.js +836 -0
  784. package/dist/domain/javascript/javascriptSymbolicControlFlow.js +40 -0
  785. package/dist/domain/javascript/javascriptSymbolicValues.js +34 -0
  786. package/dist/domain/javascript/sourceToBundleComparison.js +3 -1
  787. package/dist/domain/javascript/sourceToBundleComparisonSchemas.js +2 -0
  788. package/dist/domain/javascript/sourceToBundleSignals.js +47 -13
  789. package/dist/domain/jeb/jebAnalysis.js +114 -0
  790. package/dist/domain/jsonShape.js +63 -52
  791. package/dist/domain/jsonValue.js +40 -12
  792. package/dist/domain/localPath.js +6 -3
  793. package/dist/domain/managed/managedApplicationGraph.js +42 -0
  794. package/dist/domain/managed/managedApplicationGraphCoverage.js +12 -2
  795. package/dist/domain/managed/managedApplicationGraphNodes.js +32 -23
  796. package/dist/domain/managed/managedArtifact.js +52 -1
  797. package/dist/domain/managed/managedInspectionEvidence.js +12 -0
  798. package/dist/domain/managed/managedMemberComparison.js +3 -0
  799. package/dist/domain/managed/managedMemberComparisonCoverage.js +23 -3
  800. package/dist/domain/managed/managedMemberComparisonItems.js +23 -19
  801. package/dist/domain/managed/managedMemberComparisonMatch.js +209 -18
  802. package/dist/domain/managed/managedNativeVerificationMatch.js +49 -26
  803. package/dist/domain/managed/managedNativeVerificationSchemas.js +13 -2
  804. package/dist/domain/managed/managedReconstruction.js +5 -8
  805. package/dist/domain/mobileApplicationGraphProjection.js +80 -0
  806. package/dist/domain/native/addressCoordinate.js +11 -0
  807. package/dist/domain/native/binaryLayout.js +2 -4
  808. package/dist/domain/native/bytePattern.js +100 -0
  809. package/dist/domain/native/nativeAotPe.js +1408 -0
  810. package/dist/domain/native/nativeInspection.js +38 -4
  811. package/dist/domain/native/nativeInstruction.js +38 -2
  812. package/dist/domain/native/nativeInvestigationGraph.js +9 -5
  813. package/dist/domain/native/nativeLoadImage.js +19 -1
  814. package/dist/domain/native/nativeMetadataRecovery.js +79 -6
  815. package/dist/domain/native/nativeUiObservation.js +5 -6
  816. package/dist/domain/native/objcSwiftMetadata.js +4 -1
  817. package/dist/domain/native/peResources.js +100 -0
  818. package/dist/domain/native/recordedCrash.js +79 -10
  819. package/dist/domain/nativeConvention.js +33 -0
  820. package/dist/domain/offsetDateTime.js +60 -0
  821. package/dist/domain/pcap/pcapAnalysis.js +91 -0
  822. package/dist/domain/pcap/pcapEvidence.js +15 -0
  823. package/dist/domain/peMachine.js +36 -0
  824. package/dist/domain/pngHeader.js +18 -0
  825. package/dist/domain/process/processCapture.js +91 -1
  826. package/dist/domain/process/processCaptureCoverage.js +26 -3
  827. package/dist/domain/process/processCaptureExample.js +26 -0
  828. package/dist/domain/process/processCaptureValidation.js +112 -8
  829. package/dist/domain/process/processComparison.js +41 -13
  830. package/dist/domain/process/processScenario.js +66 -7
  831. package/dist/domain/process/processTraceEvaluation.js +54 -50
  832. package/dist/domain/process/processTraceSpecification.js +243 -89
  833. package/dist/domain/propertyListKeys.js +214 -12
  834. package/dist/domain/propertyListXmlText.js +20 -4
  835. package/dist/domain/providerAdapterError.js +0 -5
  836. package/dist/domain/providerConfigurationRefusal.js +12 -0
  837. package/dist/domain/providerSelectionError.js +2 -1
  838. package/dist/domain/qlogCapture.js +62 -0
  839. package/dist/domain/rawBinary.js +96 -0
  840. package/dist/domain/reconstructionCoverage.js +5 -1
  841. package/dist/domain/reconstructionCoverageEvaluation.js +18 -15
  842. package/dist/domain/reconstructionCoverageVerifierResults.js +35 -0
  843. package/dist/domain/reconstructionObligationLedgerIntegrity.js +114 -0
  844. package/dist/domain/reconstructionObligationLedgerSchemas.js +104 -1
  845. package/dist/domain/reconstructionReadiness.js +4 -8
  846. package/dist/domain/reconstructionReadinessJourneyFindings.js +4 -1
  847. package/dist/domain/reconstructionUnknowns.js +9 -1
  848. package/dist/domain/reconstructionVerification.js +54 -25
  849. package/dist/domain/recordedTransportUrl.js +59 -0
  850. package/dist/domain/referenceSourceClassification.js +27 -23
  851. package/dist/domain/referenceSourceGraph.js +70 -23
  852. package/dist/domain/referenceSourceImportParsing.js +29 -16
  853. package/dist/domain/referenceSourcePathIdentity.js +32 -0
  854. package/dist/domain/referenceSourceRequireBindings.js +130 -0
  855. package/dist/domain/referenceSourceSummary.js +92 -0
  856. package/dist/domain/relationshipCoverage.js +44 -0
  857. package/dist/domain/residualUnknown.js +93 -26
  858. package/dist/domain/reverseEngineering.js +31 -0
  859. package/dist/domain/runtimeVersion.js +8 -0
  860. package/dist/domain/rust/rustBinary.js +200 -0
  861. package/dist/domain/signals/annotationTextWindow.js +31 -0
  862. package/dist/domain/signals/signalDecoders.js +69 -0
  863. package/dist/domain/signals/signalRecording.js +115 -0
  864. package/dist/domain/sourceMapContents.js +10 -3
  865. package/dist/domain/sourceMapEnvelope.js +17 -11
  866. package/dist/domain/sqlite/sqliteDatabase.js +188 -0
  867. package/dist/domain/staticRuntimeCorrelation.js +7 -9
  868. package/dist/domain/swiftSymbolClassification.js +17 -0
  869. package/dist/domain/symbolAnalysis.js +16 -4
  870. package/dist/domain/urlComponents.js +6 -0
  871. package/dist/domain/wasm/wasmArtifact.js +119 -0
  872. package/dist/domain/wasm/wasmInterface.js +89 -0
  873. package/dist/domain/webBundleAnalysis.js +14 -3
  874. package/dist/domain/webBundleAnalyzerAst.js +7 -2
  875. package/dist/domain/webBundleAnalyzerInspection.js +68 -40
  876. package/dist/domain/webBundleAnalyzerResult.js +18 -6
  877. package/dist/domain/webCaptureDiff.js +233 -34
  878. package/dist/domain/webCaptureFrameComparison.js +49 -0
  879. package/dist/domain/webMcpDiscovery.js +5 -2
  880. package/dist/domain/webModuleImports.js +22 -27
  881. package/dist/domain/webModuleTrace.js +3 -8
  882. package/dist/domain/webNetworkCapture.js +101 -39
  883. package/dist/domain/webNetworkCaptureCoordinates.js +21 -0
  884. package/dist/domain/webRuntime.js +0 -1
  885. package/dist/domain/webScreenshot.js +2 -2
  886. package/dist/domain/webScriptArtifacts.js +2 -4
  887. package/dist/domain/webScriptExport.js +6 -8
  888. package/dist/domain/webScriptExportError.js +10 -4
  889. package/dist/domain/webScriptExportPlan.js +9 -15
  890. package/dist/domain/webSourceLocation.js +20 -9
  891. package/dist/domain/zipPackageFormat.js +31 -2
  892. package/dist/domain/zodCollectionSteps.js +24 -0
  893. package/dist/dotnet/ManagedArtifactInspector.js +81 -54
  894. package/dist/dotnet/ManagedDecodeBudget.js +138 -0
  895. package/dist/dotnet/ManagedMemberInspector.js +113 -26
  896. package/dist/dotnet/ManagedMemberInspectorCore.js +356 -140
  897. package/dist/dotnet/ManagedMemberInstructionDecoder.js +112 -38
  898. package/dist/dotnet/ManagedMemberOwnership.js +65 -0
  899. package/dist/dotnet/ManagedMemberPointers.js +69 -0
  900. package/dist/dotnet/ManagedMemberRows.js +182 -44
  901. package/dist/dotnet/ManagedMetadataHeaps.js +123 -27
  902. package/dist/dotnet/ManagedMetadataInventory.js +5 -5
  903. package/dist/dotnet/ManagedMetadataInventoryRows.js +56 -63
  904. package/dist/dotnet/ManagedMetadataLayout.js +19 -5
  905. package/dist/dotnet/ManagedMetadataRowSizes.js +1 -1
  906. package/dist/dotnet/ManagedMethodBodyReader.js +34 -11
  907. package/dist/dotnet/ManagedMethodSpecs.js +78 -0
  908. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +5 -4
  909. package/dist/dotnet/ManagedNativeBoundaryInspector.js +52 -44
  910. package/dist/dotnet/ManagedPeReader.js +96 -52
  911. package/dist/dotnet/ManagedReaderFailure.js +11 -1
  912. package/dist/dotnet/ManagedSnapshot.js +88 -0
  913. package/dist/dotnet/ManagedStaticProvider.js +57 -35
  914. package/dist/dotnet/ManagedTypeMemberLists.js +105 -0
  915. package/dist/dotnet/ManagedTypeNames.js +98 -0
  916. package/dist/dotnet/ManagedUserStrings.js +75 -0
  917. package/dist/electron/ElectronFusePath.js +247 -0
  918. package/dist/electron/ElectronFuseProvider.js +113 -0
  919. package/dist/electron/ElectronFuseReader.js +317 -0
  920. package/dist/evaluation/AgentEvaluationFixtures.js +194 -11
  921. package/dist/evaluation/AgentEvaluationReport.js +9 -5
  922. package/dist/evaluation/CodexAgentEval.js +58 -49
  923. package/dist/evaluation/KnownAnswerEvaluation.js +126 -57
  924. package/dist/evm/EvmoleFailures.js +19 -16
  925. package/dist/evm/EvmoleInterfaceAdapter.js +5 -1
  926. package/dist/evm/EvmoleInterfaceProvider.js +198 -23
  927. package/dist/evm/EvmoleInterfaceWorker.js +2 -0
  928. package/dist/evm/SolidityMetadata.js +139 -0
  929. package/dist/filesystem/OwnedDirectoryHandle.js +29 -0
  930. package/dist/filesystem/OwnedFileHandle.js +36 -0
  931. package/dist/filesystem/OwnedStagedOutput.js +138 -0
  932. package/dist/filesystem/RegularFile.js +81 -5
  933. package/dist/filesystem/StableFileHash.js +46 -0
  934. package/dist/filesystem/readFileHandleChunks.js +35 -0
  935. package/dist/firmware/FirmwareCommand.js +27 -5
  936. package/dist/firmware/FirmwareFiles.js +18 -7
  937. package/dist/firmware/FirmwareProvider.js +158 -32
  938. package/dist/firmware/FirmwarePublication.js +242 -4
  939. package/dist/firmware/FirmwareRelease.js +1 -0
  940. package/dist/firmware/FirmwareReports.js +202 -12
  941. package/dist/flutter/DartElf.js +418 -0
  942. package/dist/flutter/ElfBuildId.js +137 -0
  943. package/dist/flutter/ElfLoadMap.js +91 -0
  944. package/dist/flutter/FlutterBuildProvider.js +826 -0
  945. package/dist/flutter/FlutterPayloadScan.js +180 -0
  946. package/dist/frida/FridaInstrumentationManager.js +1104 -0
  947. package/dist/gdb/GdbSessionManager.js +1451 -0
  948. package/dist/generatedPackageMetadata.js +2 -2
  949. package/dist/ghidra/GhidraAnalysisProfile.js +175 -6
  950. package/dist/ghidra/GhidraAnalysisSeeds.js +211 -0
  951. package/dist/ghidra/GhidraClient.js +208 -29
  952. package/dist/ghidra/GhidraDiagnostics.js +18 -8
  953. package/dist/ghidra/GhidraDoctor.js +15 -12
  954. package/dist/ghidra/GhidraFunctionValues.js +73 -2
  955. package/dist/ghidra/GhidraInstallation.js +216 -20
  956. package/dist/ghidra/GhidraInstallationPolicy.js +79 -29
  957. package/dist/ghidra/GhidraInventoryValues.js +53 -1
  958. package/dist/ghidra/GhidraJavaLaunch.js +91 -10
  959. package/dist/ghidra/GhidraJavaProperties.js +117 -0
  960. package/dist/ghidra/GhidraLanguageCatalog.js +169 -0
  961. package/dist/ghidra/GhidraLauncher.js +306 -88
  962. package/dist/ghidra/GhidraLoadImageAttest.js +74 -7
  963. package/dist/ghidra/GhidraLoadImageValues.js +72 -0
  964. package/dist/ghidra/GhidraMipsProfile.js +315 -0
  965. package/dist/ghidra/GhidraPeProfile.js +21 -0
  966. package/dist/ghidra/GhidraPowerPcProfile.js +51 -0
  967. package/dist/ghidra/GhidraProvider.js +106 -20
  968. package/dist/ghidra/GhidraProviderCapabilities.js +30 -19
  969. package/dist/ghidra/GhidraProviderClient.js +520 -56
  970. package/dist/ghidra/GhidraPspExtension.js +140 -0
  971. package/dist/ghidra/GhidraPspProfile.js +59 -0
  972. package/dist/ghidra/GhidraRawBinaryLanguage.js +40 -0
  973. package/dist/ghidra/GhidraRiscvProfile.js +100 -0
  974. package/dist/ghidra/GhidraSessionError.js +155 -11
  975. package/dist/ghidra/GhidraSessionValues.js +75 -2
  976. package/dist/ghidra/GhidraTransport.js +2 -1
  977. package/dist/go/GoBinaryContainer.js +140 -0
  978. package/dist/go/GoBinaryImage.js +210 -0
  979. package/dist/go/GoBinaryProvider.js +151 -0
  980. package/dist/go/GoElfImage.js +211 -0
  981. package/dist/go/GoMachoImage.js +164 -0
  982. package/dist/go/GoModuleText.js +217 -0
  983. package/dist/go/GoPeImage.js +124 -0
  984. package/dist/hopper/BridgeLauncher.js +35 -2
  985. package/dist/hopper/HopperAnalysisProfile.js +21 -9
  986. package/dist/hopper/HopperCleanup.js +15 -3
  987. package/dist/hopper/HopperClient.js +203 -42
  988. package/dist/hopper/HopperMacPublisher.js +29 -0
  989. package/dist/hopper/HopperMachOImage.js +61 -27
  990. package/dist/hopper/HopperProcessDiagnostic.js +27 -0
  991. package/dist/hopper/HopperProvider.js +68 -26
  992. package/dist/hopper/HopperProviderCapabilities.js +7 -3
  993. package/dist/hopper/HopperRequestQueue.js +17 -5
  994. package/dist/hopper/HopperSessionValues.js +10 -1
  995. package/dist/hopper/HopperTargetLease.js +66 -19
  996. package/dist/ida/IdaBusyHealth.js +44 -0
  997. package/dist/ida/IdaCallGraph.js +134 -0
  998. package/dist/ida/IdaConfiguration.js +7 -2
  999. package/dist/ida/IdaDiagnosticRedactor.js +199 -0
  1000. package/dist/ida/IdaDiagnosticWriter.js +62 -0
  1001. package/dist/ida/IdaDoctor.js +7 -5
  1002. package/dist/ida/IdaJsonDiagnostic.js +138 -0
  1003. package/dist/ida/IdaMcpConnection.js +297 -27
  1004. package/dist/ida/IdaNativeProtocol.js +93 -0
  1005. package/dist/ida/IdaOperationRunner.js +249 -40
  1006. package/dist/ida/IdaProtocolValues.js +86 -4
  1007. package/dist/ida/IdaProvider.js +34 -8
  1008. package/dist/ida/IdaProviderCapabilities.js +37 -8
  1009. package/dist/ida/IdaSessionClient.js +332 -53
  1010. package/dist/ida/IdaWorkspace.js +57 -7
  1011. package/dist/inspector/V8InspectorCaptureProjection.js +7 -2
  1012. package/dist/inspector/V8InspectorEndpoint.js +15 -13
  1013. package/dist/inspector/V8InspectorProvider.js +41 -7
  1014. package/dist/javascript/analysis/JavaScriptAnalysisTransfer.js +337 -0
  1015. package/dist/javascript/analysis/JavaScriptAnalysisWorker.js +594 -0
  1016. package/dist/javascript/analysis/JavaScriptAnalysisWorkerProtocol.js +65 -0
  1017. package/dist/javascript/analysis/JavaScriptAnalysisWorkerSchemas.js +590 -0
  1018. package/dist/javascript/analysis/JavaScriptAnalysisWorkerServer.js +126 -0
  1019. package/dist/javascript/recovery/RecoveryFiles.js +68 -12
  1020. package/dist/javascript/recovery/WakaruCommand.js +22 -9
  1021. package/dist/javascript/recovery/WakaruExecution.js +30 -18
  1022. package/dist/javascript/recovery/WakaruProvider.js +150 -24
  1023. package/dist/javascript/recovery/WakaruPublication.js +38 -14
  1024. package/dist/javascript/recovery/WakaruRelease.js +11 -4
  1025. package/dist/javascript/recovery/WakaruReport.js +15 -9
  1026. package/dist/javascript/recovery/WakaruVersion.js +24 -0
  1027. package/dist/javascript/sourceMaps/DecodedSourceMap.js +2 -16
  1028. package/dist/javascript/sourceMaps/SourceMapCommand.js +38 -7
  1029. package/dist/javascript/sourceMaps/SourceMapDecoder.js +84 -10
  1030. package/dist/javascript/sourceMaps/SourceMapFormat.js +26 -28
  1031. package/dist/javascript/sourceMaps/TraceSourceMap.js +34 -6
  1032. package/dist/jeb/JebMcpConnection.js +186 -0
  1033. package/dist/jeb/JebMcpEndpoint.js +45 -0
  1034. package/dist/jeb/JebProvider.js +297 -0
  1035. package/dist/logger.js +14 -1
  1036. package/dist/main/shutdown.js +3 -0
  1037. package/dist/main/transport.js +48 -4
  1038. package/dist/main.js +14 -3
  1039. package/dist/mcp/AnalysisSnapshotFiles-BAbiJQOc.js +1412 -0
  1040. package/dist/mcp/ArtifactProvider-DViCU_rn.js +2183 -0
  1041. package/dist/mcp/ArtifactProviderMetadata-b7pOK5_t.js +76 -0
  1042. package/dist/mcp/ArtifactReader-OyM03Gjn.js +55 -0
  1043. package/dist/mcp/ArtifactResourceScope-P3tq5z8Z.js +162 -0
  1044. package/dist/mcp/AsarHeader-WsPgoooH.js +31 -0
  1045. package/dist/mcp/BinarySessionStatus-B4P9gf-S.js +212 -0
  1046. package/dist/mcp/BinaryTargetResolver-BMaE_0H1.js +1427 -0
  1047. package/dist/mcp/BoundedFileBytes-DuczXiQZ.js +68 -0
  1048. package/dist/mcp/CdpCaptureDocuments-HDiF2O7k.js +746 -0
  1049. package/dist/mcp/CdpCaptureValues-M-j6CIh1.js +90 -0
  1050. package/dist/mcp/CdpConnection-BpDfz4MK.js +570 -0
  1051. package/dist/mcp/CdpOptionalCommand-BPjRD9Kz.js +120 -0
  1052. package/dist/mcp/CdpTargetSession-BsPoKhEU.js +86 -0
  1053. package/dist/mcp/DirectAnalysis-DrafbXke.js +409 -0
  1054. package/dist/mcp/DirectAnalysisStatus-CjjeDLzW.js +44 -0
  1055. package/dist/mcp/ElectronFileScope-BPG_YoyU.js +110 -0
  1056. package/dist/mcp/InterfaceBuilderDecodeBudget-5F2AkxJT.js +652 -0
  1057. package/dist/mcp/ManagedStaticProvider-BthZbKyZ.js +5028 -0
  1058. package/dist/mcp/NativeMacOSProvider-Bh79k8dI.js +4867 -0
  1059. package/dist/mcp/NativeMacOSProviderMetadata-N1lPOaY_.js +307 -0
  1060. package/dist/mcp/ProcedureAddressResolution-CQpuwm1h.js +19 -0
  1061. package/dist/mcp/ProcessOwnership-Bl_3ejLe.js +1502 -0
  1062. package/dist/mcp/ProviderDeadline-DskQ94YD.js +932 -0
  1063. package/dist/mcp/WorkflowEvidence-umWrB_wm.js +111 -0
  1064. package/dist/mcp/analysisErrorCore-DXRTvF_m.js +235 -0
  1065. package/dist/mcp/analysisErrorProjection-BN0EPM-3.js +892 -0
  1066. package/dist/mcp/artifactOperationError-CkHMMaf7.js +27 -0
  1067. package/dist/mcp/artifactToolContracts-Di4qZlEt.js +72 -0
  1068. package/dist/mcp/browserObservation-C0s4i8UI.js +4468 -0
  1069. package/dist/mcp/browserObservationError-CyLugqX4.js +40 -0
  1070. package/dist/mcp/browserObservationSchemas-tgqjH7aA.js +573 -0
  1071. package/dist/mcp/browserScenario-CAQ8Fns9.js +2929 -0
  1072. package/dist/mcp/browserScenarioCapture-CTNFN-FI.js +479 -0
  1073. package/dist/mcp/canonicalDigest-Bi_0_zGi.js +71 -0
  1074. package/dist/mcp/digests-BFoWUT_-.js +223 -0
  1075. package/dist/mcp/electronActiveObservation-lDvQTMR0.js +226 -0
  1076. package/dist/mcp/electronObservation-DFOFEood.js +112 -0
  1077. package/dist/mcp/electronObservation-i7LcILQ-.js +562 -0
  1078. package/dist/mcp/electronScenario-nCzE6IfJ.js +653 -0
  1079. package/dist/mcp/emptyArraySchema-tL6Qymyd.js +140 -0
  1080. package/dist/mcp/enhancedInputs-DgdEnzHy.js +56 -0
  1081. package/dist/mcp/javascriptRuntimeObservation-61NhCf7H.js +690 -0
  1082. package/dist/mcp/javascriptRuntimeObservation-PIUoLfX6.js +121 -0
  1083. package/dist/mcp/jsonSerialization-V-wWiFRE.js +152 -0
  1084. package/dist/mcp/lipo-Bnkoq_6W.js +502 -0
  1085. package/dist/mcp/localPath-AxvW9aPe.js +19 -0
  1086. package/dist/mcp/logger-BQY5ulYv.js +48 -0
  1087. package/dist/mcp/main-kBXHZ8S5.js +69390 -0
  1088. package/dist/mcp/main.js +6 -0
  1089. package/dist/mcp/managedToolContracts-CK--I_s7.js +101 -0
  1090. package/dist/mcp/nativeValueTrace-DR9UE62L.js +3439 -0
  1091. package/dist/mcp/officialToolContracts-B67NJ2tC.js +1413 -0
  1092. package/dist/mcp/pngHeader-DQ-ObyY2.js +147 -0
  1093. package/dist/mcp/propertyListKeys-DD25WsjI.js +553 -0
  1094. package/dist/mcp/providerAdapterError-sDxToNal.js +25 -0
  1095. package/dist/mcp/providerIdentities--ptAh481.js +31 -0
  1096. package/dist/mcp/providerIdentity-BCQ5n5tw.js +16 -0
  1097. package/dist/mcp/providerOperationHealth-CTYa3iLf.js +48 -0
  1098. package/dist/mcp/rolldown-runtime-BjeaiXFo.js +121 -0
  1099. package/dist/mcp/safeJson-NeGfpkrI.js +25 -0
  1100. package/dist/mcp/scanCanonical-CRXSpule.js +3982 -0
  1101. package/dist/mcp/serverIdentity-Cio4iFV3.js +1328 -0
  1102. package/dist/mcp/sourceMapEnvelope-C0uJlrOh.js +94 -0
  1103. package/dist/mcp/toolContracts-BW05wpcr.js +12200 -0
  1104. package/dist/mcp/toolOutputSchemaGroups-ColvNZ1r.js +17533 -0
  1105. package/dist/mcp/unicodeCodePointOrder-BezCbTpg.js +26 -0
  1106. package/dist/mcp/webContentArtifact-Dzjc1z-R.js +284 -0
  1107. package/dist/mcp/webRuntime-K__NYzXm.js +74 -0
  1108. package/dist/mcp/webSourceLocation-DbMAT2J9.js +11130 -0
  1109. package/dist/mcpDoctor.js +108 -76
  1110. package/dist/mcpStartupPolicy.js +3 -0
  1111. package/dist/native/AppleDispatchCoverage.js +81 -28
  1112. package/dist/native/AppleDispatchMetadata.js +20 -9
  1113. package/dist/native/AppleMachoFixups.js +253 -34
  1114. package/dist/native/AppleMachoSelection.js +44 -17
  1115. package/dist/native/AppleObjcCategories.js +1 -2
  1116. package/dist/native/AppleObjcDispatchFacets.js +76 -7
  1117. package/dist/native/CommandRunner.js +142 -32
  1118. package/dist/native/LldbCallTracer.js +5 -3
  1119. package/dist/native/MachoArchitectureSelection.js +50 -0
  1120. package/dist/native/NativeCallObservation.js +2 -1
  1121. package/dist/native/NativeMacOSProvider.js +173 -37
  1122. package/dist/native/NativeMachoInspection.js +142 -78
  1123. package/dist/native/NativeUiHelperRuntime.js +6 -1
  1124. package/dist/native/NativeUiObservation.js +6 -5
  1125. package/dist/native/SignatureTargetBinding.js +118 -55
  1126. package/dist/native/parsers/codesign.js +27 -10
  1127. package/dist/native/parsers/demangle.js +7 -1
  1128. package/dist/native/parsers/dyldInfo.js +73 -4
  1129. package/dist/native/parsers/lipo.js +53 -19
  1130. package/dist/native/parsers/machoUuid.js +150 -0
  1131. package/dist/native/parsers/otool.js +232 -29
  1132. package/dist/native/pe/PeResourceLayout.js +120 -0
  1133. package/dist/native/pe/PeResourceParser.js +286 -0
  1134. package/dist/native/pe/PeResourcesProvider.js +77 -0
  1135. package/dist/native/pwndbg/PwndbgCoreContext.js +20 -20
  1136. package/dist/native/pwntools/PwntoolsDecoder.js +264 -40
  1137. package/dist/native/pwntools/PwntoolsFailures.js +2 -1
  1138. package/dist/native/pwntools/PwntoolsInputLimit.js +27 -0
  1139. package/dist/native/pwntools/PwntoolsRecordedCrashProvider.js +27 -15
  1140. package/dist/native/pwntools/PwntoolsResourceLimits.js +3 -3
  1141. package/dist/native/pwntools/RecordedCrashSourceBindings.js +12 -8
  1142. package/dist/native/pwntools/RecordedCrashStructureBindings.js +3 -1
  1143. package/dist/objdump/ObjdumpCommand.js +21 -0
  1144. package/dist/pcap/PcapCommand.js +146 -0
  1145. package/dist/pcap/PcapConfiguration.js +93 -0
  1146. package/dist/pcap/PcapNativeBound.js +58 -0
  1147. package/dist/pcap/PcapOutput.js +240 -0
  1148. package/dist/pcap/PcapProvider.js +424 -0
  1149. package/dist/pcap/PcapSnapshot.js +171 -0
  1150. package/dist/process/ArtifactAnalysisResources.js +213 -0
  1151. package/dist/process/BoundedFileBytes.js +30 -7
  1152. package/dist/process/CurrentEntrypointPath.js +6 -0
  1153. package/dist/process/DarwinProcessRunTokenReader.js +125 -16
  1154. package/dist/process/ExecFileBoundedOutput.js +44 -0
  1155. package/dist/process/ExecFileOutput.js +30 -6
  1156. package/dist/process/JavaScriptWorkerMemoryLimit.js +25 -0
  1157. package/dist/process/LinuxResourceLimits.js +80 -0
  1158. package/dist/process/MacCodeSignature.js +3 -0
  1159. package/dist/process/OwnedCommand.js +40 -15
  1160. package/dist/process/PrivateRuntimeRoot.js +9 -19
  1161. package/dist/process/PrivateRuntimeRootUnavailableError.js +10 -0
  1162. package/dist/process/ProcessOwnership.js +173 -128
  1163. package/dist/process/ProcessOwnershipObservation.js +131 -43
  1164. package/dist/process/ProcessOwnershipProcessTree.js +4 -4
  1165. package/dist/process/ProcessRunTokenObservations.js +48 -0
  1166. package/dist/process/ProviderDeadline.js +58 -12
  1167. package/dist/process/ProviderDiagnosticRedaction.js +17 -0
  1168. package/dist/process/ProviderProcess.js +112 -14
  1169. package/dist/process/WindowsAuthority.js +48 -39
  1170. package/dist/process/WindowsBatchCommand.js +46 -0
  1171. package/dist/process/boundedUtf8Text.js +13 -0
  1172. package/dist/process/capture/FilesystemSnapshot.js +87 -12
  1173. package/dist/process/capture/ProcessCaptureClock.js +2 -0
  1174. package/dist/process/capture/ProcessCaptureError.js +22 -3
  1175. package/dist/process/capture/ProcessCaptureJournal.js +2 -1
  1176. package/dist/process/capture/ProcessCaptureLifecycle.js +433 -91
  1177. package/dist/process/capture/ProcessCaptureProgress.js +63 -0
  1178. package/dist/process/capture/ProcessHarness.js +209 -38
  1179. package/dist/process/capture/ProcessNormalization.js +278 -34
  1180. package/dist/process/capture/ProcessSampling.js +3 -2
  1181. package/dist/process/capture/ProcessScenarioRuntimeValidation.js +18 -15
  1182. package/dist/process/capture/TerminalRenderer.js +52 -14
  1183. package/dist/process/ownedDebuggerSession.js +203 -0
  1184. package/dist/reference/ReferenceSourceReader.js +22 -6
  1185. package/dist/reference/ReferenceSourceReaderEntries.js +182 -105
  1186. package/dist/reference/ReferenceSourceReaderErrors.js +17 -1
  1187. package/dist/reference/ReferenceSourceReaderFile.js +50 -11
  1188. package/dist/reference/ReferenceSourceReaderTypes.js +1 -2
  1189. package/dist/reference/ReferenceSourceReaderValidate.js +4 -5
  1190. package/dist/rizin/RizinCommand.js +14 -0
  1191. package/dist/rizin/RizinDebugSessionManager.js +1072 -0
  1192. package/dist/rust/RustAuditableReader.js +309 -0
  1193. package/dist/rust/RustBinaryImage.js +116 -0
  1194. package/dist/rust/RustBinaryProvider.js +162 -0
  1195. package/dist/server/EvidenceMcpServer.js +185 -27
  1196. package/dist/server/admittedToolOperation.js +14 -0
  1197. package/dist/server/contractToolHandler.js +28 -0
  1198. package/dist/server/createServer.js +238 -36
  1199. package/dist/server/externalMutationAdmission.js +50 -0
  1200. package/dist/server/mcpProgress.js +4 -2
  1201. package/dist/server/promptCompletion.js +19 -6
  1202. package/dist/server/providerEnvironment.js +3 -0
  1203. package/dist/server/registerAdbTools.js +36 -0
  1204. package/dist/server/registerAnalysisViewTool.js +9 -10
  1205. package/dist/server/registerAndroidTools.js +22 -13
  1206. package/dist/server/registerApktoolTools.js +14 -0
  1207. package/dist/server/registerApplicationTools/compareExportShapes.js +4 -6
  1208. package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
  1209. package/dist/server/registerApplicationTools/compareVersions.js +3 -2
  1210. package/dist/server/registerApplicationTools/coverage.js +3 -2
  1211. package/dist/server/registerApplicationTools/obligationLedger.js +3 -2
  1212. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +11 -3
  1213. package/dist/server/registerApplicationTools/traceFeature.js +3 -2
  1214. package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
  1215. package/dist/server/registerArtifactComparisonTool.js +5 -2
  1216. package/dist/server/registerArtifactTools.js +21 -1
  1217. package/dist/server/registerBinaryDiagnosticsTools.js +16 -4
  1218. package/dist/server/registerBrowserScenarioTool.js +10 -7
  1219. package/dist/server/registerBrowserTools.js +14 -13
  1220. package/dist/server/registerBundleComparisonTool.js +20 -6
  1221. package/dist/server/registerCaptureTools.js +12 -0
  1222. package/dist/server/registerCloseLifecycleTool.js +32 -3
  1223. package/dist/server/registerCutterTools.js +33 -0
  1224. package/dist/server/registerElectronTools.js +38 -17
  1225. package/dist/server/registerEnhancedTools.js +7 -6
  1226. package/dist/server/registerEvidenceTools.js +14 -10
  1227. package/dist/server/registerEvmTools.js +24 -11
  1228. package/dist/server/registerFirmwareTools.js +3 -11
  1229. package/dist/server/registerFlutterTools.js +17 -0
  1230. package/dist/server/registerFridaTools.js +205 -0
  1231. package/dist/server/registerFunctionComparisonTool.js +34 -11
  1232. package/dist/server/registerGdbTools.js +64 -0
  1233. package/dist/server/registerGoTools.js +9 -0
  1234. package/dist/server/registerInvestigationTools/helpers.js +2 -2
  1235. package/dist/server/registerInvestigationTools.js +12 -8
  1236. package/dist/server/registerJavaScriptRecoveryTool.js +4 -9
  1237. package/dist/server/registerJavaScriptRuntimeObservationTools.js +10 -11
  1238. package/dist/server/registerJebTools.js +16 -0
  1239. package/dist/server/registerManagedTools.js +11 -1
  1240. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +4 -6
  1241. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +3 -2
  1242. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +3 -2
  1243. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +3 -2
  1244. package/dist/server/registerNativeTools.js +14 -0
  1245. package/dist/server/registerOfficialTools.js +5 -0
  1246. package/dist/server/registerPcapTools.js +35 -0
  1247. package/dist/server/registerPeResourcesTool.js +9 -0
  1248. package/dist/server/registerProcessComparisonTool.js +14 -4
  1249. package/dist/server/registerRecordedCrashTools.js +4 -9
  1250. package/dist/server/registerReverseEngineeringTools.js +86 -0
  1251. package/dist/server/registerRizinDebugTools.js +53 -0
  1252. package/dist/server/registerRustTools.js +9 -0
  1253. package/dist/server/registerSessionRecordTools.js +21 -14
  1254. package/dist/server/registerSessionStatusTool.js +22 -4
  1255. package/dist/server/registerSessionTools.js +78 -34
  1256. package/dist/server/registerSignalTools.js +12 -0
  1257. package/dist/server/registerSqliteTools.js +9 -0
  1258. package/dist/server/registerWasmTools.js +46 -0
  1259. package/dist/server/registerWebModuleTool.js +4 -9
  1260. package/dist/server/registerWebNetworkCaptureTool.js +26 -17
  1261. package/dist/server/registerWebRuntimeTools.js +6 -5
  1262. package/dist/server/registerWebScriptTool.js +6 -3
  1263. package/dist/server/registerWebSourceLocationTool.js +4 -9
  1264. package/dist/server/retainedSummaryDelivery.js +28 -0
  1265. package/dist/server/sessionAvailabilityPolicy.js +3 -0
  1266. package/dist/server/toolRegistrationOptions.js +8 -0
  1267. package/dist/server/toolResult.js +68 -16
  1268. package/dist/server/toolResultEncoding.js +36 -3
  1269. package/dist/serverIdentity.js +17 -8
  1270. package/dist/signals/SigrokRecordingProvider.js +339 -0
  1271. package/dist/signals/parseDecoderDiscovery.js +65 -0
  1272. package/dist/sqlite/SqliteDatabaseFailures.js +134 -0
  1273. package/dist/sqlite/SqliteDatabaseInspection.js +421 -0
  1274. package/dist/sqlite/SqliteDatabaseLimits.js +16 -0
  1275. package/dist/sqlite/SqliteDatabaseProvider.js +295 -0
  1276. package/dist/sqlite/SqliteDatabaseSnapshot.js +156 -0
  1277. package/dist/sqlite/SqliteDatabaseWorker.js +46 -0
  1278. package/dist/sqlite/SqliteDatabaseWorkerExecution.js +112 -0
  1279. package/dist/wasm/WabtArtifactProvider.js +336 -0
  1280. package/dist/wasm/WabtFailures.js +101 -0
  1281. package/dist/wasm/WabtInterface.js +309 -0
  1282. package/dist/wasm/WabtOutput.js +60 -0
  1283. package/dist/wasm/WabtRelease.js +12 -0
  1284. package/dist/wasm/WabtString.js +48 -0
  1285. package/dist/wasm/WabtWat.js +147 -0
  1286. package/dist/wasm/WasmGlueAdapter.js +53 -0
  1287. package/dist/wasm/WasmInterfaceBudget.js +11 -0
  1288. package/dist/windows/WindowsNativeLoader.js +37 -7
  1289. package/dist/windows/WindowsOwnedProcess.js +150 -17
  1290. package/dist/windows/WindowsPrivateRuntime.js +34 -6
  1291. package/install.sh +157 -95
  1292. package/licenses/Apache-2.0.txt +202 -0
  1293. package/licenses/GCC-Runtime-Library-Exception-3.1.txt +73 -0
  1294. package/licenses/GPL-3.0.txt +674 -0
  1295. package/licenses/LGPL-2.0.txt +480 -0
  1296. package/licenses/MIT-template.txt +18 -0
  1297. package/licenses/MinGW-w64-runtime.txt +240 -0
  1298. package/licenses/Node-22.19.0-LICENSE.txt +2666 -0
  1299. package/licenses/README.md +68 -0
  1300. package/licenses/cfworker-MIT.txt +21 -0
  1301. package/licenses/dotnet-runtime-MIT.txt +23 -0
  1302. package/licenses/frida-17.23.2-COPYING.txt +50 -0
  1303. package/licenses/ghidra-12.1.4-DISCLAIMER.txt +13 -0
  1304. package/licenses/ghidra-12.1.4-LICENSE.txt +201 -0
  1305. package/licenses/ghidra-12.1.4-NOTICE.txt +49 -0
  1306. package/licenses/nativeaot-parser-MIT.txt +28 -0
  1307. package/licenses/npm-dependencies.txt +3612 -0
  1308. package/licenses/npm-runtime-notices.txt +8548 -0
  1309. package/licenses/upstream-sources.json +72 -0
  1310. package/licenses/xterm-MIT.txt +21 -0
  1311. package/native/windows/README.md +92 -11
  1312. package/native/windows/build/manifest.json +2 -2
  1313. package/native/windows/build/rea-windows-x64.node +0 -0
  1314. package/package.json +117 -22
  1315. package/scripts/electron-active-hook.cjs +4 -1
  1316. package/scripts/hopper-demo-x11.py +53 -3
  1317. package/scripts/prepack.mjs +5 -0
  1318. package/scripts/rea-android-workspace-guardian.mjs +46 -0
  1319. package/scripts/rea.mjs +44 -13
  1320. package/scripts/verify-windows-native-artifact.mjs +2 -2
  1321. package/skills/reverse-engineer-anything/SKILL.md +142 -20
  1322. package/skills/reverse-engineer-anything/references/connection-and-recovery.md +127 -0
  1323. package/skills/reverse-engineer-anything/references/evidence-workflows.md +31 -0
  1324. package/skills/reverse-engineer-anything/references/javascript-applications.md +118 -13
  1325. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +147 -16
  1326. package/skills/reverse-engineer-anything/references/runtime-observation.md +57 -7
  1327. package/third_party/README.md +1 -1
  1328. package/third_party/wabt/README.md +24 -0
  1329. package/dist/browser/history/HarCaptureAdapter.js +0 -20
  1330. package/dist/cli/streamedJsonOutput.js +0 -135
  1331. package/dist/cliJsonFile.js +0 -179
  1332. /package/dist/{application/binary → process}/AbortablePromise.js +0 -0
@@ -0,0 +1,1451 @@
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
+ /** @internal Pure parser for live PIDs in recursive GDB MI thread groups. */
51
+ export const gdbThreadGroupPids = (mi) => {
52
+ const marker = mi.indexOf("groups=[");
53
+ if (marker < 0)
54
+ return undefined;
55
+ const start = marker + "groups=[".length;
56
+ let squareDepth = 1;
57
+ let objectDepth = 0;
58
+ let quoted = false;
59
+ let escaped = false;
60
+ const pids = [];
61
+ let fieldStart = start;
62
+ let pidStart;
63
+ let hasLivePid = false;
64
+ let currentPid;
65
+ for (let index = start; index < mi.length; index += 1) {
66
+ const character = mi[index];
67
+ if (quoted) {
68
+ if (escaped)
69
+ escaped = false;
70
+ else if (character === "\\")
71
+ escaped = true;
72
+ else if (character === '"') {
73
+ quoted = false;
74
+ if (pidStart !== undefined) {
75
+ const pid = mi.slice(pidStart, index);
76
+ if (!/^[1-9]\d*$/u.test(pid))
77
+ return undefined;
78
+ hasLivePid = true;
79
+ currentPid = pid;
80
+ pidStart = undefined;
81
+ }
82
+ }
83
+ continue;
84
+ }
85
+ if (character === '"') {
86
+ if (squareDepth === 1 &&
87
+ objectDepth === 1 &&
88
+ mi.slice(fieldStart, index) === "pid=") {
89
+ if (hasLivePid)
90
+ return undefined;
91
+ pidStart = index + 1;
92
+ }
93
+ quoted = true;
94
+ continue;
95
+ }
96
+ if (character === "[")
97
+ squareDepth += 1;
98
+ else if (character === "]") {
99
+ squareDepth -= 1;
100
+ if (squareDepth === 0) {
101
+ if (objectDepth !== 0)
102
+ return undefined;
103
+ const body = mi.slice(start, index);
104
+ if (body.includes("groups=["))
105
+ return undefined;
106
+ return pids;
107
+ }
108
+ }
109
+ else if (character === "{") {
110
+ if (squareDepth === 1 && objectDepth === 0) {
111
+ hasLivePid = false;
112
+ currentPid = undefined;
113
+ fieldStart = index + 1;
114
+ }
115
+ objectDepth += 1;
116
+ }
117
+ else if (character === "}") {
118
+ if (squareDepth === 1 && objectDepth === 1) {
119
+ const field = mi.slice(fieldStart, index);
120
+ if (field.startsWith("pid=") && !/^pid="[1-9]\d*"$/u.test(field))
121
+ return undefined;
122
+ }
123
+ objectDepth -= 1;
124
+ if (objectDepth < 0)
125
+ return undefined;
126
+ if (squareDepth === 1 && objectDepth === 0 && hasLivePid) {
127
+ if (currentPid === undefined)
128
+ return undefined;
129
+ pids.push(currentPid);
130
+ }
131
+ }
132
+ else if (character === "," && squareDepth === 1 && objectDepth === 1) {
133
+ const field = mi.slice(fieldStart, index);
134
+ if (field.startsWith("pid=") && !/^pid="[1-9]\d*"$/u.test(field))
135
+ return undefined;
136
+ fieldStart = index + 1;
137
+ }
138
+ }
139
+ return undefined;
140
+ };
141
+ /** @internal Pure count of recursive GDB MI groups with live PIDs. */
142
+ export const gdbThreadGroupCount = (mi) => {
143
+ const pids = gdbThreadGroupPids(mi);
144
+ return pids?.length;
145
+ };
146
+ const verifyGdbInferiorOutputSink = async (pid, selectedTty, rememberIdentity) => {
147
+ if (process.platform !== "linux")
148
+ throw new Error("GDB cannot confirm live inferior output descriptors outside Linux /proc.");
149
+ const statPath = `/proc/${pid}/stat`;
150
+ const before = parseLinuxProcessStartTime(await readFile(statPath, "utf8"));
151
+ if (before === undefined)
152
+ throw new Error("GDB could not establish the live inferior identity.");
153
+ const ttyPath = await realpath(selectedTty);
154
+ const tty = await stat(ttyPath);
155
+ if ((tty.mode & fsConstants.S_IFMT) !== fsConstants.S_IFCHR)
156
+ throw new Error("The selected GDB output sink is not a character device.");
157
+ for (const descriptor of ["1", "2"]) {
158
+ const descriptorPath = `/proc/${pid}/fd/${descriptor}`;
159
+ const destination = await readlink(descriptorPath);
160
+ const observed = await stat(descriptorPath);
161
+ if (observed.dev !== tty.dev ||
162
+ observed.ino !== tty.ino ||
163
+ (observed.mode & fsConstants.S_IFMT) !== fsConstants.S_IFCHR ||
164
+ (await realpath(destination)) !== ttyPath)
165
+ throw new Error(`GDB inferior descriptor ${descriptor} no longer points to the selected TTY.`);
166
+ }
167
+ const after = parseLinuxProcessStartTime(await readFile(statPath, "utf8"));
168
+ if (after !== before)
169
+ throw new Error("The GDB inferior identity changed during descriptor readback.");
170
+ rememberIdentity({ pid, startTime: before });
171
+ };
172
+ class GdbCommandProcessExitError extends Error {
173
+ partial;
174
+ constructor(partial) {
175
+ super(`GDB exited before returning the active MI command result (exit code ${String(partial.process_exit_code)}, signal ${String(partial.process_exit_signal)}).`);
176
+ this.partial = partial;
177
+ }
178
+ }
179
+ class GdbProtocolFailureError extends Error {
180
+ partial;
181
+ constructor(message, partial) {
182
+ super(message);
183
+ this.partial = partial;
184
+ }
185
+ }
186
+ /** @internal Convert an unknown boundary failure without dropping non-Error values. */
187
+ export const gdbErrorMessage = (cause) => cause instanceof Error ? cause.message : String(cause);
188
+ /** Owns persistent GDB/MI sessions independently from the active binary target. */
189
+ export class GdbSessionManager {
190
+ #sessions = new Map();
191
+ #activeStarts = new Map();
192
+ #command;
193
+ #environment;
194
+ #commandTimeoutMs;
195
+ #startupTimeoutMs;
196
+ #platform;
197
+ #stopProcess;
198
+ #spawnProcess;
199
+ #verifyInferiorOutputSink;
200
+ #readInferiorProcessStartTime;
201
+ #maxSessions;
202
+ #maxCommandOutputBytes;
203
+ #sessionReservations = 0;
204
+ #closing = false;
205
+ #closePromise;
206
+ constructor(options = {}) {
207
+ this.#environment = { ...(options.environment ?? process.env) };
208
+ this.#command = this.#environment.REA_GDB_COMMAND ?? "gdb";
209
+ this.#commandTimeoutMs = options.commandTimeoutMs ?? COMMAND_TIMEOUT_MS;
210
+ this.#startupTimeoutMs = options.startupTimeoutMs ?? STARTUP_TIMEOUT_MS;
211
+ this.#platform = options.platform ?? process.platform;
212
+ this.#stopProcess = options.stopProcess ?? stopOwnedDebuggerProcess;
213
+ this.#spawnProcess = options.spawnProcess ?? spawnOwnedProviderProcess;
214
+ this.#verifyInferiorOutputSink =
215
+ options.verifyInferiorOutputSink ?? verifyGdbInferiorOutputSink;
216
+ this.#readInferiorProcessStartTime = options.readInferiorProcessStartTime;
217
+ this.#maxSessions = options.maxSessions ?? DEFAULT_MAX_SESSIONS;
218
+ this.#maxCommandOutputBytes =
219
+ options.maxCommandOutputBytes ?? MAX_COMMAND_OUTPUT_BYTES;
220
+ }
221
+ async start(signal, options = {}) {
222
+ if (options.inferiorTty !== undefined &&
223
+ (options.inferiorTty.length === 0 || options.inferiorTty.includes("\0")))
224
+ return err(new AnalysisInputError("start_gdb_session", undefined, [
225
+ {
226
+ path: ["inferior_tty"],
227
+ reason: "invalid_value",
228
+ message: "The inferior TTY path must be non-empty and must not contain NUL.",
229
+ },
230
+ ]));
231
+ if (this.#closing || signal?.aborted)
232
+ return err(new AnalysisCancelledError("start_gdb_session"));
233
+ if (this.#platform !== "linux")
234
+ return err(new AnalysisCapabilityUnavailableError("gdb", "start_gdb_session", this.#platform === "win32"
235
+ ? "Persistent Windows GDB sessions are unavailable because owned Job Object cleanup can terminate debugger inferiors."
236
+ : "Persistent GDB sessions are available only on Linux because REA verifies live inferior output descriptors through /proc."));
237
+ const controller = new AbortController();
238
+ const relayAbort = () => controller.abort(signal?.reason);
239
+ signal?.addEventListener("abort", relayAbort, { once: true });
240
+ if (signal?.aborted)
241
+ relayAbort();
242
+ const tracked = Promise.resolve()
243
+ .then(() => this.#startWithReservation(controller.signal, options))
244
+ .finally(() => {
245
+ signal?.removeEventListener("abort", relayAbort);
246
+ this.#activeStarts.delete(controller);
247
+ });
248
+ this.#activeStarts.set(controller, tracked);
249
+ return tracked;
250
+ }
251
+ async #startWithReservation(signal, options = {}) {
252
+ if (signal?.aborted)
253
+ return err(new AnalysisCancelledError("start_gdb_session"));
254
+ const occupied = this.#sessions.size + this.#sessionReservations;
255
+ if (occupied >= this.#maxSessions)
256
+ return err(new AnalysisResourceConstraintError("start_gdb_session", "memory", "GDB session capacity reached.", {
257
+ max_sessions: this.#maxSessions,
258
+ active_or_reserved_sessions: occupied,
259
+ }));
260
+ this.#sessionReservations += 1;
261
+ let reservationHeld = true;
262
+ const releaseReservation = () => {
263
+ if (!reservationHeld)
264
+ return;
265
+ reservationHeld = false;
266
+ this.#sessionReservations -= 1;
267
+ };
268
+ try {
269
+ return await this.#startReserved(releaseReservation, signal, options);
270
+ }
271
+ finally {
272
+ releaseReservation();
273
+ }
274
+ }
275
+ async #startReserved(releaseReservation, signal, options = {}) {
276
+ const id = randomUUID();
277
+ const mi3 = await this.#startProtocol(id, "mi3", releaseReservation, signal, options.inferiorTty);
278
+ return mi3.ok || signal.aborted || this.#sessions.has(id)
279
+ ? mi3
280
+ : this.#startProtocol(id, "mi2", releaseReservation, signal, options.inferiorTty);
281
+ }
282
+ async #startProtocol(id, miVersion, releaseReservation, signal, inferiorTty) {
283
+ let launched;
284
+ try {
285
+ const spawnOptions = {
286
+ command: this.#command,
287
+ arguments: ["--nx", "--quiet", `--interpreter=${miVersion}`],
288
+ runId: randomUUID(),
289
+ stdin: "pipe",
290
+ hostEnvironment: this.#environment,
291
+ signal,
292
+ };
293
+ launched = await this.#spawnProcess(spawnOptions);
294
+ }
295
+ catch (cause) {
296
+ if (signal?.aborted || cause instanceof AnalysisCancelledError)
297
+ return err(new AnalysisCancelledError("start_gdb_session", { cause }));
298
+ return err(new AnalysisCapabilityUnavailableError("gdb", "start_gdb_session", cause instanceof Error ? cause.message : "Unable to start GDB"));
299
+ }
300
+ const supervisor = new ProviderProcessSupervisor({ process: launched.process, ownsProcessLifetime: false }, { captureStdout: false, maxDiagnosticBytes: MAX_DIAGNOSTIC_BYTES });
301
+ let settleStdout;
302
+ const stdoutSettled = new Promise((resolve) => {
303
+ settleStdout = resolve;
304
+ });
305
+ const session = {
306
+ id,
307
+ miVersion,
308
+ launched,
309
+ supervisor,
310
+ detachInferior: () => this.#detachInferior(session),
311
+ inferiorStateUnknown: () => !session.noInferiorVerified,
312
+ verifyInferiorsEndedAfterExit: async () => {
313
+ const ended = await verifyOwnedInferiorsEnded(session.knownInferiorIdentities.values(), this.#readInferiorProcessStartTime);
314
+ if (ended)
315
+ session.knownInferiorIdentities.clear();
316
+ return ended;
317
+ },
318
+ knownInferiorIdentities: new Map(),
319
+ inferiorTty,
320
+ maxCommandOutputBytes: this.#maxCommandOutputBytes,
321
+ stdoutSettled,
322
+ settleStdout,
323
+ inferiorTtyVerified: false,
324
+ // GDB is launched with --nx and receives no target-execution commands
325
+ // during startup, so no inferior can exist until execute() is called.
326
+ noInferiorVerified: true,
327
+ stopAttempt: undefined,
328
+ pending: new Map(),
329
+ cleanupFailures: new Set(),
330
+ lines: [],
331
+ bufferChunks: [],
332
+ bufferTail: undefined,
333
+ bufferTailBytes: 0,
334
+ bufferBytes: 0,
335
+ invalidUtf8Observed: false,
336
+ promptTail: "",
337
+ ready: false,
338
+ exited: false,
339
+ exitCode: null,
340
+ exitSignal: null,
341
+ nextToken: 1,
342
+ startupResolve: undefined,
343
+ startupReject: undefined,
344
+ commandTail: Promise.resolve(),
345
+ pendingCommandCount: 0,
346
+ protocolError: undefined,
347
+ recentRecordsTruncated: false,
348
+ };
349
+ launched.process.stdout?.on("data", (chunk) => this.#receive(session, typeof chunk === "string" ? Buffer.from(chunk, "utf8") : chunk));
350
+ if (launched.process.stdout === null)
351
+ settleStdout();
352
+ else
353
+ launched.process.stdout.once("end", settleStdout);
354
+ launched.process.stdin?.on("error", (cause) => this.#failProtocol(session, `GDB stdin stream failed: ${cause.message}`));
355
+ launched.process.stdin?.once("close", () => this.#failProtocol(session, "GDB stdin stream closed unexpectedly."));
356
+ launched.process.once("exit", (code, signalCode) => {
357
+ session.exited = true;
358
+ session.exitCode = code;
359
+ session.exitSignal = signalCode;
360
+ void this.#waitForStdoutSettlement(session).then(() => session.startupReject?.(new Error(`GDB exited during startup (exit code ${String(code)}, signal ${String(signalCode)}).`)));
361
+ void this.#settleExitedCommands(session, code, signalCode);
362
+ });
363
+ let startupTimer;
364
+ let startupAbortListener;
365
+ try {
366
+ await new Promise((resolve, reject) => {
367
+ session.startupResolve = resolve;
368
+ session.startupReject = reject;
369
+ startupAbortListener = () => reject(new AnalysisCancelledError("start_gdb_session"));
370
+ signal?.addEventListener("abort", startupAbortListener, {
371
+ once: true,
372
+ });
373
+ if (signal?.aborted)
374
+ startupAbortListener();
375
+ startupTimer = setTimeout(() => reject(new AnalysisTimeoutError("start_gdb_session", this.#startupTimeoutMs, {
376
+ cause: new Error("GDB did not emit the MI prompt before the startup deadline"),
377
+ })), this.#startupTimeoutMs);
378
+ startupTimer.unref();
379
+ });
380
+ session.ready = true;
381
+ if (signal?.aborted)
382
+ throw new AnalysisCancelledError("start_gdb_session");
383
+ const autoLoad = await this.#request(session, "-gdb-set auto-load off", signal, "start_gdb_session");
384
+ if (!/^\d+\^done(?:,|$)/u.test(autoLoad.mi)) {
385
+ throw new AnalysisCapabilityUnavailableError("gdb", "start_gdb_session", `GDB rejected the required automatic-loading disable command (${autoLoad.mi}); the session was not started.`);
386
+ }
387
+ if (inferiorTty !== undefined) {
388
+ const configured = await this.#request(session, `-inferior-tty-set ${miQuote(inferiorTty)}`, signal, "start_gdb_session");
389
+ if (configured.completion_status !== "complete" ||
390
+ configured.output_truncated ||
391
+ !/^\d+\^done(?:,|$)/u.test(configured.mi))
392
+ throw new AnalysisCapabilityUnavailableError("gdb", "start_gdb_session", "GDB did not confirm the inferior TTY configuration.");
393
+ const observed = await this.#request(session, "-inferior-tty-show", signal, "start_gdb_session");
394
+ const reportedTty = observed.completion_status === "complete" &&
395
+ !observed.output_truncated
396
+ ? miStringField(observed.mi, "inferior_tty_terminal")
397
+ : undefined;
398
+ if (!/^\d+\^done(?:,|$)/u.test(observed.mi) ||
399
+ reportedTty !== inferiorTty)
400
+ throw new AnalysisCapabilityUnavailableError("gdb", "start_gdb_session", "GDB did not report the exact caller-selected inferior TTY after configuration.");
401
+ session.inferiorTtyVerified = true;
402
+ }
403
+ if (signal?.aborted)
404
+ throw new AnalysisCancelledError("start_gdb_session");
405
+ // Give queued exit notifications a turn before publishing startup.
406
+ await new Promise((resolve) => setImmediate(resolve));
407
+ if (signal?.aborted)
408
+ throw new AnalysisCancelledError("start_gdb_session");
409
+ if (session.exited || session.protocolError !== undefined)
410
+ throw new Error(session.protocolError ?? "GDB exited during startup readiness.");
411
+ // Before this point no target command can run. Once a usable session is
412
+ // published, the inferior state is no longer inferred from startup phase.
413
+ session.noInferiorVerified = false;
414
+ this.#sessions.set(id, session);
415
+ releaseReservation();
416
+ return ok({ session_id: id, mi_version: miVersion });
417
+ }
418
+ catch (cause) {
419
+ const startupExited = cause instanceof GdbCommandProcessExitError || session.exited;
420
+ const processExit = cause instanceof GdbCommandProcessExitError
421
+ ? cause.partial
422
+ : startupExited
423
+ ? {
424
+ command: "GDB startup",
425
+ mi: "",
426
+ records: [...session.lines],
427
+ console: session.lines
428
+ .filter((line) => line.startsWith("~"))
429
+ .join("\n"),
430
+ target: session.lines
431
+ .filter((line) => line.startsWith("@"))
432
+ .join("\n"),
433
+ log: session.lines
434
+ .filter((line) => line.startsWith("&"))
435
+ .join("\n"),
436
+ process_exit_observed: true,
437
+ process_exit_code: session.exitCode,
438
+ process_exit_signal: session.exitSignal,
439
+ output_truncated: session.recentRecordsTruncated,
440
+ completion_status: "unknown",
441
+ }
442
+ : undefined;
443
+ const startupEvidenceResult = processExit ??
444
+ (session.lines.length > 0
445
+ ? {
446
+ command: "GDB startup",
447
+ mi: "",
448
+ records: [...session.lines],
449
+ console: session.lines
450
+ .filter((line) => line.startsWith("~"))
451
+ .join("\n"),
452
+ target: session.lines
453
+ .filter((line) => line.startsWith("@"))
454
+ .join("\n"),
455
+ log: session.lines
456
+ .filter((line) => line.startsWith("&"))
457
+ .join("\n"),
458
+ output_truncated: session.recentRecordsTruncated,
459
+ completion_status: "unknown",
460
+ }
461
+ : undefined);
462
+ const startupEvidencePayload = startupEvidenceResult === undefined
463
+ ? undefined
464
+ : {
465
+ ...startupEvidenceResult,
466
+ ...(session.invalidUtf8Observed
467
+ ? { output_invalid_utf8: true }
468
+ : {}),
469
+ };
470
+ const startupEvidence = startupEvidencePayload === undefined
471
+ ? undefined
472
+ : createEvidence(undefined, GDB_PROVIDER_IDENTITY, {
473
+ predicateType: "rea.debugger.startup-observation",
474
+ operation: "start_gdb_session",
475
+ parameters: {
476
+ mi_version: miVersion,
477
+ command: startupEvidencePayload.command,
478
+ },
479
+ result: {
480
+ ...startupEvidencePayload,
481
+ records: [...startupEvidencePayload.records],
482
+ },
483
+ rawResult: {
484
+ ...startupEvidencePayload,
485
+ records: [...startupEvidencePayload.records],
486
+ },
487
+ subjectUnavailableReason: "No usable debugger session became ready during GDB startup.",
488
+ limitations: [
489
+ "GDB startup failed before a usable session could be established; captured startup records are incomplete.",
490
+ ...(session.invalidUtf8Observed
491
+ ? [
492
+ "GDB startup output contained invalid UTF-8 bytes; decoded records contain replacement characters.",
493
+ ]
494
+ : []),
495
+ ],
496
+ });
497
+ const processOutput = session.supervisor.snapshot();
498
+ const capturedOutput = {
499
+ stdout: processOutput.stdout.text,
500
+ stderr: processOutput.stderr.text,
501
+ truncated: processOutput.diagnosticTruncated === true ||
502
+ processOutput.stdout.observedBytes > processOutput.stdout.bytes ||
503
+ processOutput.stderr.observedBytes > processOutput.stderr.bytes,
504
+ stdout_bytes: processOutput.stdout.observedBytes,
505
+ stderr_bytes: processOutput.stderr.observedBytes,
506
+ exit_code: processOutput.exitCode ?? null,
507
+ signal: processOutput.signal ?? null,
508
+ };
509
+ const stopped = await this.#stopDebuggerOnly(session);
510
+ if (stopped.status === "incomplete") {
511
+ this.#sessions.set(id, session);
512
+ releaseReservation();
513
+ const cleanup = { reason: stopped.reason, resources: [session.id] };
514
+ const details = {
515
+ cause,
516
+ capturedOutput,
517
+ cleanup,
518
+ ...(startupEvidence === undefined
519
+ ? {}
520
+ : { partialObservation: startupEvidence }),
521
+ };
522
+ if (cause instanceof AnalysisTimeoutError)
523
+ return err(new AnalysisTimeoutError(cause.operation, cause.timeoutMs, details));
524
+ if (cause instanceof AnalysisCancelledError)
525
+ return err(new AnalysisCancelledError(cause.operation, details));
526
+ const startupFailureMessage = gdbErrorMessage(cause);
527
+ return err(new AnalysisCapabilityUnavailableError("gdb", "start_gdb_session", `GDB startup failed (${startupFailureMessage}) and its owned process could not be confirmed stopped: ${stopped.reason}`, details));
528
+ }
529
+ const errorDetails = {
530
+ cause,
531
+ capturedOutput,
532
+ ...(startupEvidence === undefined
533
+ ? {}
534
+ : { partialObservation: startupEvidence }),
535
+ };
536
+ const error = signal?.aborted || cause instanceof AnalysisCancelledError
537
+ ? new AnalysisCancelledError("start_gdb_session", errorDetails)
538
+ : cause instanceof AnalysisTimeoutError
539
+ ? new AnalysisTimeoutError(cause instanceof GdbCommandTimeoutError
540
+ ? "start_gdb_session"
541
+ : cause.operation, cause.timeoutMs, errorDetails)
542
+ : cause instanceof AnalysisCapabilityUnavailableError
543
+ ? new AnalysisCapabilityUnavailableError("gdb", "start_gdb_session", cause.message, errorDetails)
544
+ : session.protocolError !== undefined
545
+ ? new AnalysisCapabilityUnavailableError("gdb", "start_gdb_session", session.protocolError, errorDetails)
546
+ : new AnalysisCapabilityUnavailableError("gdb", "start_gdb_session", `GDB startup failed (${gdbErrorMessage(cause)}).`, errorDetails);
547
+ return err(error);
548
+ }
549
+ finally {
550
+ clearTimeout(startupTimer);
551
+ signal?.removeEventListener("abort", startupAbortListener);
552
+ }
553
+ }
554
+ async execute(sessionId, command, signal) {
555
+ const session = this.#sessions.get(sessionId);
556
+ if (this.#closing ||
557
+ session === undefined ||
558
+ !session.ready ||
559
+ session.exited ||
560
+ session.protocolError !== undefined)
561
+ return err(new AnalysisInputError("gdb_console", undefined, [
562
+ {
563
+ path: ["session_id"],
564
+ reason: "invalid_value",
565
+ message: "GDB session is unavailable or closed.",
566
+ },
567
+ ]));
568
+ if (signal?.aborted)
569
+ return err(new AnalysisCancelledError("gdb_console"));
570
+ try {
571
+ const completed = await this.#serialize(session, async () => {
572
+ if (session.exited || session.protocolError !== undefined)
573
+ return err(new AnalysisInputError("gdb_console"));
574
+ session.noInferiorVerified = false;
575
+ session.knownInferiorIdentities.clear();
576
+ if (commandMayChangeInferiorOutput(command))
577
+ session.inferiorTtyVerified = false;
578
+ try {
579
+ const result = await this.#request(session, `-interpreter-exec console ${miQuote(command)}`, signal, "gdb_console", command);
580
+ const evidence = createEvidence(undefined, { id: "gnu.gdb", name: "GNU GDB", version: null }, {
581
+ predicateType: "rea.debugger.console-observation",
582
+ operation: "gdb_console",
583
+ parameters: { session_id: sessionId, command },
584
+ result: {
585
+ command,
586
+ mi: result.mi,
587
+ records: [...result.records],
588
+ console: result.console,
589
+ target: result.target,
590
+ log: result.log,
591
+ output_truncated: result.output_truncated,
592
+ ...(result.output_invalid_utf8
593
+ ? { output_invalid_utf8: true }
594
+ : {}),
595
+ completion_status: result.completion_status,
596
+ },
597
+ rawResult: {
598
+ command,
599
+ mi: result.mi,
600
+ records: [...result.records],
601
+ console: result.console,
602
+ target: result.target,
603
+ log: result.log,
604
+ output_truncated: result.output_truncated,
605
+ ...(result.output_invalid_utf8
606
+ ? { output_invalid_utf8: true }
607
+ : {}),
608
+ completion_status: result.completion_status,
609
+ },
610
+ subjectUnavailableReason: "The active GDB inferior identity is not established by the debugger session identifier.",
611
+ limitations: [
612
+ "MI records are returned as decoded text; their semantics depend on GDB version and target.",
613
+ ...(result.output_invalid_utf8
614
+ ? [
615
+ "MI stream bytes were not valid UTF-8; returned text contains replacement characters.",
616
+ ]
617
+ : []),
618
+ "The unrestricted GDB console can access local shell, filesystem, network, and target controls.",
619
+ ],
620
+ });
621
+ return ok({ result, evidence });
622
+ }
623
+ catch (cause) {
624
+ if (cause instanceof AnalysisCancelledError)
625
+ return err(cause);
626
+ if (cause instanceof AnalysisCapabilityUnavailableError)
627
+ return err(cause);
628
+ if (cause instanceof GdbCommandTimeoutError) {
629
+ const result = cause.partial;
630
+ return ok({ result, evidence: cause.evidence });
631
+ }
632
+ if (session.protocolError !== undefined)
633
+ return err(await this.#stopAfterProtocolFailure(session, cause));
634
+ if (cause instanceof GdbCommandProcessExitError) {
635
+ const processExit = cause;
636
+ const result = {
637
+ ...processExit.partial,
638
+ command,
639
+ };
640
+ const evidence = createEvidence(undefined, { id: "gnu.gdb", name: "GNU GDB", version: null }, {
641
+ predicateType: "rea.debugger.console-observation",
642
+ operation: "gdb_console",
643
+ parameters: { session_id: sessionId, command },
644
+ result: { ...result, records: [...result.records] },
645
+ rawResult: { ...result, records: [...result.records] },
646
+ subjectUnavailableReason: "The active GDB inferior identity is not established by the debugger session identifier.",
647
+ limitations: [
648
+ "GDB exited before returning a correlated MI result record; only records retained for the active command are returned raw.",
649
+ ...(result.output_truncated
650
+ ? [
651
+ "Retained MI records are a truncated prefix; output completeness is unknown.",
652
+ ]
653
+ : []),
654
+ ],
655
+ });
656
+ const stopped = await this.#stopDebuggerOnly(session);
657
+ if (stopped.status === "incomplete")
658
+ return err(this.#retainCleanupFailure(session, "gdb_console", stopped.reason, { cause, partialObservation: evidence }));
659
+ return ok({ result, evidence });
660
+ }
661
+ return err(new AnalysisTimeoutError("gdb_console", this.#commandTimeoutMs, {
662
+ cause,
663
+ }));
664
+ }
665
+ }, signal, "gdb_console");
666
+ if (!completed.ok && completed.error.cleanupIncomplete)
667
+ session.cleanupFailures.add(completed.error);
668
+ return completed;
669
+ }
670
+ catch (cause) {
671
+ const error = cause instanceof AnalysisError
672
+ ? cause
673
+ : new AnalysisCancelledError("gdb_console", { cause });
674
+ if (error.cleanupIncomplete)
675
+ session.cleanupFailures.add(error);
676
+ return err(error);
677
+ }
678
+ }
679
+ status(sessionId) {
680
+ const session = this.#sessions.get(sessionId);
681
+ if (session === undefined)
682
+ return undefined;
683
+ const diagnostics = session.supervisor.snapshot();
684
+ return {
685
+ session_id: session.id,
686
+ mi_version: session.miVersion,
687
+ state: session.exited || session.protocolError !== undefined || !session.ready
688
+ ? "closed"
689
+ : "ready",
690
+ recent_mi_records: [...session.lines],
691
+ recent_mi_records_truncated: session.recentRecordsTruncated,
692
+ mi_invalid_utf8: session.invalidUtf8Observed,
693
+ stderr: diagnostics.stderr.text,
694
+ stderr_observed_bytes: diagnostics.stderr.observedBytes,
695
+ stderr_truncated: diagnostics.stderr.observedBytes > diagnostics.stderr.bytes,
696
+ stderr_invalid_utf8: diagnostics.stderr.invalidUtf8 === true,
697
+ diagnostics_truncated: diagnostics.diagnosticTruncated === true,
698
+ inferior_tty: session.inferiorTty ?? null,
699
+ inferior_tty_verified: session.inferiorTtyVerified,
700
+ };
701
+ }
702
+ async close(sessionId) {
703
+ if (this.#closing)
704
+ return err(new AnalysisCancelledError("close_gdb_session"));
705
+ const session = this.#sessions.get(sessionId);
706
+ if (session === undefined)
707
+ return err(new AnalysisInputError("close_gdb_session"));
708
+ if (session.exited) {
709
+ const stopped = await this.#stopDebuggerOnly(session);
710
+ if (stopped.status === "incomplete")
711
+ return err(this.#retainCleanupFailure(session, "close_gdb_session", stopped.reason));
712
+ this.#sessions.delete(sessionId);
713
+ return ok({ target_state: "unknown" });
714
+ }
715
+ try {
716
+ return await this.#serialize(session, async () => {
717
+ if (session.exited) {
718
+ const stopped = await this.#stopDebuggerOnly(session);
719
+ if (stopped.status === "incomplete")
720
+ return err(this.#retainCleanupFailure(session, "close_gdb_session", stopped.reason));
721
+ this.#sessions.delete(sessionId);
722
+ return ok({ target_state: "unknown" });
723
+ }
724
+ let targetState = "unknown";
725
+ try {
726
+ const groups = await this.#request(session, "-list-thread-groups --recurse 1");
727
+ if (groups.completion_status !== "complete" ||
728
+ groups.output_truncated ||
729
+ !/^\d+\^done(?:,|$)/u.test(groups.mi))
730
+ throw new Error("GDB could not confirm its complete, untruncated inferior list before shutdown.");
731
+ const groupCount = gdbThreadGroupCount(groups.mi);
732
+ if (groupCount === undefined)
733
+ throw new Error("GDB returned an unknown inferior list before shutdown.");
734
+ if (groupCount > 0 && !session.inferiorTtyVerified)
735
+ return err(new AnalysisInputError("close_gdb_session", undefined, [
736
+ {
737
+ path: ["session_id"],
738
+ reason: "invalid_value",
739
+ message: "Live GDB thread groups remain and no verified durable inferior TTY is configured. Select a safe disposition through the GDB console or restart with inferior_tty before closing.",
740
+ },
741
+ ]));
742
+ if (groupCount === 0) {
743
+ session.noInferiorVerified = true;
744
+ targetState = "none_observed";
745
+ await this.#request(session, "-gdb-exit");
746
+ }
747
+ else {
748
+ session.noInferiorVerified = false;
749
+ const disposition = await this.#detachInferior(session);
750
+ targetState =
751
+ disposition.status === "no-inferior"
752
+ ? "none_observed"
753
+ : "unknown";
754
+ }
755
+ }
756
+ catch {
757
+ // If MI synchronization is lost, stop only the owned debugger process.
758
+ }
759
+ const stopped = await this.#stopDebuggerOnly(session);
760
+ if (stopped.status === "incomplete")
761
+ return err(this.#retainCleanupFailure(session, "close_gdb_session", stopped.reason));
762
+ this.#sessions.delete(sessionId);
763
+ return ok({ target_state: targetState });
764
+ }, undefined, "close_gdb_session");
765
+ }
766
+ catch (cause) {
767
+ if (cause instanceof AnalysisError)
768
+ return err(cause);
769
+ throw cause;
770
+ }
771
+ }
772
+ async retryCleanupFailures() {
773
+ for (const session of this.#sessions.values()) {
774
+ if (session.cleanupFailures.size === 0)
775
+ continue;
776
+ const stopped = await this.#stopDebuggerOnly(session);
777
+ if (stopped.status === "incomplete")
778
+ return err([...session.cleanupFailures].at(-1) ??
779
+ this.#retainCleanupFailure(session, "close_gdb_session", stopped.reason));
780
+ this.#sessions.delete(session.id);
781
+ }
782
+ return ok(null);
783
+ }
784
+ async closeAll() {
785
+ this.#closing = true;
786
+ this.#closePromise ??= this.#drainStartsAndCloseSessions().catch((cause) => {
787
+ this.#closePromise = undefined;
788
+ throw cause;
789
+ });
790
+ return this.#closePromise;
791
+ }
792
+ async #drainStartsAndCloseSessions() {
793
+ const active = [...this.#activeStarts.entries()];
794
+ for (const [controller] of active)
795
+ controller.abort();
796
+ await Promise.allSettled(active.map(([, start]) => start));
797
+ await Promise.all([...this.#sessions.values()].map((session) => session.commandTail));
798
+ await closeOwnedDebuggerSessions(this.#sessions, (session) => this.#stopDebuggerOnly(session), "GDB");
799
+ }
800
+ async #serialize(session, operation, signal, operationName = "gdb_console") {
801
+ if (session.pendingCommandCount >= MAX_PENDING_GDB_COMMANDS)
802
+ throw new AnalysisResourceConstraintError(operationName, "transport", "GDB command queue capacity reached.", {
803
+ max_pending_commands: MAX_PENDING_GDB_COMMANDS,
804
+ active_or_queued_commands: session.pendingCommandCount,
805
+ });
806
+ session.pendingCommandCount += 1;
807
+ const previous = session.commandTail;
808
+ let release;
809
+ let acquired = false;
810
+ session.commandTail = new Promise((resolve) => {
811
+ release = resolve;
812
+ });
813
+ try {
814
+ await waitForGdbCommandTurn(previous, signal);
815
+ acquired = true;
816
+ return await operation();
817
+ }
818
+ finally {
819
+ if (acquired) {
820
+ session.pendingCommandCount -= 1;
821
+ release?.();
822
+ }
823
+ else {
824
+ // The cancelled placeholder still occupies commandTail until its turn.
825
+ // Keep its reservation until then so repeated cancellations cannot
826
+ // bypass the per-session queue bound while an earlier command stalls.
827
+ void previous.then(() => {
828
+ session.pendingCommandCount -= 1;
829
+ release?.();
830
+ });
831
+ }
832
+ }
833
+ }
834
+ #receive(session, data) {
835
+ if (session.startupResolve !== undefined) {
836
+ const prompt = session.promptTail + data.toString("utf8");
837
+ if (prompt.includes("(gdb)")) {
838
+ const resolve = session.startupResolve;
839
+ session.startupResolve = undefined;
840
+ resolve();
841
+ }
842
+ session.promptTail = prompt.slice(-4);
843
+ }
844
+ const lines = [];
845
+ let offset = 0;
846
+ while (offset < data.byteLength) {
847
+ const newline = data.indexOf(0x0a, offset);
848
+ const piece = data.subarray(offset, newline < 0 ? data.byteLength : newline);
849
+ session.bufferBytes += piece.byteLength;
850
+ const lineBytes = session.bufferBytes - (newline >= 0 && piece.at(-1) === 0x0d ? 1 : 0);
851
+ if (lineBytes > MAX_MI_LINE_BYTES) {
852
+ this.#failProtocol(session, "GDB emitted an MI line exceeding the 16 MiB protocol limit.");
853
+ return;
854
+ }
855
+ this.#appendLineBytes(session, piece);
856
+ if (newline < 0)
857
+ break;
858
+ const record = Buffer.concat([
859
+ ...session.bufferChunks,
860
+ ...(session.bufferTail === undefined
861
+ ? []
862
+ : [session.bufferTail.subarray(0, session.bufferTailBytes)]),
863
+ ], session.bufferBytes);
864
+ const withoutCarriageReturn = record.at(-1) === 0x0d ? record.subarray(0, -1) : record;
865
+ const invalidUtf8 = !isUtf8(withoutCarriageReturn);
866
+ const line = withoutCarriageReturn.toString("utf8");
867
+ session.bufferChunks.length = 0;
868
+ session.bufferTail = undefined;
869
+ session.bufferTailBytes = 0;
870
+ session.bufferBytes = 0;
871
+ if (invalidUtf8)
872
+ session.invalidUtf8Observed = true;
873
+ if (line.length > 0)
874
+ lines.push({ value: line, invalidUtf8 });
875
+ offset = newline + 1;
876
+ }
877
+ for (const { value: line } of lines) {
878
+ if (Buffer.byteLength(line, "utf8") > MAX_RECENT_MI_LINE_BYTES) {
879
+ session.lines.push(truncateUtf8RecordPrefix(line));
880
+ session.recentRecordsTruncated = true;
881
+ }
882
+ else
883
+ session.lines.push(line);
884
+ }
885
+ if (session.lines.length > 256) {
886
+ session.lines.splice(0, session.lines.length - 256);
887
+ session.recentRecordsTruncated = true;
888
+ }
889
+ for (const { value: line, invalidUtf8 } of lines) {
890
+ for (const pending of session.pending.values()) {
891
+ const lineBytes = Buffer.byteLength(line, "utf8") + 1;
892
+ if (pending.outputBytes + lineBytes <= session.maxCommandOutputBytes &&
893
+ pending.outputBytes + lineBytes <= MAX_COMMAND_OUTPUT_BYTES &&
894
+ pending.lines.length < MAX_COMMAND_OUTPUT_RECORDS) {
895
+ pending.lines.push(line);
896
+ pending.outputBytes += lineBytes;
897
+ pending.outputInvalidUtf8 ||= invalidUtf8;
898
+ }
899
+ else
900
+ pending.outputTruncated = true;
901
+ }
902
+ if (line.startsWith("*stopped")) {
903
+ for (const [token, pending] of session.pending) {
904
+ if (!pending.awaitingInferiorStop)
905
+ continue;
906
+ clearTimeout(pending.timer);
907
+ session.pending.delete(token);
908
+ pending.cleanup();
909
+ const records = [...pending.lines];
910
+ pending.resolve({
911
+ command: "",
912
+ mi: pending.terminalRecord ?? "",
913
+ records,
914
+ console: records
915
+ .filter((record) => record.startsWith("~"))
916
+ .join("\n"),
917
+ target: records
918
+ .filter((record) => record.startsWith("@"))
919
+ .join("\n"),
920
+ log: records.filter((record) => record.startsWith("&")).join("\n"),
921
+ output_truncated: pending.outputTruncated,
922
+ ...(pending.outputInvalidUtf8
923
+ ? { output_invalid_utf8: true }
924
+ : {}),
925
+ completion_status: "complete",
926
+ });
927
+ }
928
+ continue;
929
+ }
930
+ const match = /^(\d+)\^(done|running|connected|error|exit)(?:,|$)/u.exec(line);
931
+ if (match === null)
932
+ continue;
933
+ const token = Number(match[1]);
934
+ const pending = session.pending.get(token);
935
+ if (pending === undefined)
936
+ continue;
937
+ if (match[2] === "running") {
938
+ pending.terminalRecord = line;
939
+ pending.awaitingInferiorStop = true;
940
+ continue;
941
+ }
942
+ clearTimeout(pending.timer);
943
+ session.pending.delete(token);
944
+ pending.cleanup();
945
+ const records = [...pending.lines];
946
+ pending.resolve({
947
+ command: "",
948
+ mi: line,
949
+ records,
950
+ console: records.filter((record) => record.startsWith("~")).join("\n"),
951
+ target: records.filter((record) => record.startsWith("@")).join("\n"),
952
+ log: records.filter((record) => record.startsWith("&")).join("\n"),
953
+ output_truncated: pending.outputTruncated,
954
+ ...(pending.outputInvalidUtf8
955
+ ? { output_invalid_utf8: true }
956
+ : {}),
957
+ completion_status: "complete",
958
+ });
959
+ }
960
+ }
961
+ #appendLineBytes(session, piece) {
962
+ const slabBytes = 64 * 1024;
963
+ let offset = 0;
964
+ while (offset < piece.length) {
965
+ session.bufferTail ??= Buffer.allocUnsafe(slabBytes);
966
+ const remaining = slabBytes - session.bufferTailBytes;
967
+ const copied = Math.min(remaining, piece.length - offset);
968
+ piece.copy(session.bufferTail, session.bufferTailBytes, offset, offset + copied);
969
+ session.bufferTailBytes += copied;
970
+ offset += copied;
971
+ if (session.bufferTailBytes === slabBytes) {
972
+ session.bufferChunks.push(session.bufferTail);
973
+ session.bufferTail = undefined;
974
+ session.bufferTailBytes = 0;
975
+ }
976
+ }
977
+ }
978
+ #failProtocol(session, message) {
979
+ if (session.exited || session.protocolError !== undefined)
980
+ return;
981
+ session.protocolError = message;
982
+ for (const pending of session.pending.values()) {
983
+ clearTimeout(pending.timer);
984
+ pending.cleanup();
985
+ const records = [...pending.lines];
986
+ pending.reject(new GdbProtocolFailureError(message, {
987
+ command: pending.command,
988
+ mi: "",
989
+ records,
990
+ console: records.filter((line) => line.startsWith("~")).join("\n"),
991
+ target: records.filter((line) => line.startsWith("@")).join("\n"),
992
+ log: records.filter((line) => line.startsWith("&")).join("\n"),
993
+ output_truncated: pending.outputTruncated,
994
+ ...(pending.outputInvalidUtf8
995
+ ? { output_invalid_utf8: true }
996
+ : {}),
997
+ completion_status: "unknown",
998
+ }));
999
+ }
1000
+ session.pending.clear();
1001
+ session.startupReject?.(new Error(message));
1002
+ }
1003
+ async #stopAfterProtocolFailure(session, cause) {
1004
+ const stopped = await this.#stopDebuggerOnly(session);
1005
+ const partial = cause instanceof GdbProtocolFailureError ? cause.partial : undefined;
1006
+ const partialObservation = partial === undefined
1007
+ ? undefined
1008
+ : createEvidence(undefined, GDB_PROVIDER_IDENTITY, {
1009
+ predicateType: "rea.debugger.console-observation",
1010
+ operation: "gdb_console",
1011
+ parameters: {
1012
+ session_id: session.id,
1013
+ command: partial.command,
1014
+ },
1015
+ result: { ...partial, records: [...partial.records] },
1016
+ rawResult: { ...partial, records: [...partial.records] },
1017
+ subjectUnavailableReason: "The active GDB inferior identity is not established by the debugger session identifier.",
1018
+ limitations: [
1019
+ "The GDB MI protocol failed; retained records are partial and command completion is unknown.",
1020
+ "The unrestricted GDB console can access local shell, filesystem, network, and target controls.",
1021
+ ],
1022
+ });
1023
+ return new AnalysisCapabilityUnavailableError("gdb", "gdb_console", stopped.status === "incomplete"
1024
+ ? `${session.protocolError} The owned process could not be confirmed stopped: ${stopped.reason}`
1025
+ : session.protocolError, {
1026
+ cause,
1027
+ ...(stopped.status === "incomplete"
1028
+ ? {
1029
+ cleanup: {
1030
+ reason: stopped.reason,
1031
+ resources: [session.id],
1032
+ },
1033
+ }
1034
+ : {}),
1035
+ ...(partialObservation === undefined ? {} : { partialObservation }),
1036
+ });
1037
+ }
1038
+ #stopDebuggerOnly(session) {
1039
+ if (session.stopAttempt !== undefined)
1040
+ return session.stopAttempt;
1041
+ const attempt = this.#stopProcess(session, "GDB")
1042
+ .then((stopped) => {
1043
+ if (stopped.status !== "incomplete") {
1044
+ for (const failure of session.cleanupFailures)
1045
+ failure.resolveCleanup();
1046
+ session.cleanupFailures.clear();
1047
+ }
1048
+ return stopped;
1049
+ })
1050
+ .finally(() => {
1051
+ if (session.stopAttempt === attempt)
1052
+ session.stopAttempt = undefined;
1053
+ });
1054
+ session.stopAttempt = attempt;
1055
+ return attempt;
1056
+ }
1057
+ #retainCleanupFailure(session, operation, reason, options = {}) {
1058
+ const failure = new AnalysisCapabilityUnavailableError("gdb", operation, `The owned GDB process could not be confirmed stopped: ${reason}`, { ...options, cleanup: { reason, resources: [session.id] } });
1059
+ session.cleanupFailures.add(failure);
1060
+ return failure;
1061
+ }
1062
+ async #detachInferior(session) {
1063
+ if (session.noInferiorVerified)
1064
+ return { status: "no-inferior" };
1065
+ if (session.exited)
1066
+ throw new Error("GDB exited before inferior state could be verified.");
1067
+ // A new MI inspection replaces the old snapshot. If this read is
1068
+ // incomplete, malformed, or reports multiple inferiors, no earlier PID
1069
+ // can stand in for the current unknown inventory.
1070
+ session.knownInferiorIdentities.clear();
1071
+ if (session.protocolError !== undefined ||
1072
+ session.pending.size > 0 ||
1073
+ session.pendingCommandCount > 1)
1074
+ throw new Error("GDB MI state is not synchronized; inferior state is unknown.");
1075
+ const groups = await this.#request(session, "-list-thread-groups --recurse 1");
1076
+ if (groups.completion_status !== "complete" ||
1077
+ groups.output_truncated ||
1078
+ !/^\d+\^done(?:,|$)/u.test(groups.mi))
1079
+ throw new Error("GDB could not confirm its inferior state.");
1080
+ const inferiorPids = gdbThreadGroupPids(groups.mi);
1081
+ if (inferiorPids?.length === 0) {
1082
+ session.knownInferiorIdentities.clear();
1083
+ session.noInferiorVerified = true;
1084
+ return { status: "no-inferior" };
1085
+ }
1086
+ session.noInferiorVerified = false;
1087
+ if (inferiorPids?.length !== 1)
1088
+ throw new Error(inferiorPids === undefined
1089
+ ? "GDB returned an unknown recursive inferior list."
1090
+ : "GDB reports multiple inferiors; automatic detach cannot be confirmed safely.");
1091
+ if (!session.inferiorTtyVerified)
1092
+ throw new Error("GDB cannot detach the live inferior because no durable output sink was verified at session startup.");
1093
+ const observedTty = await this.#request(session, "-inferior-tty-show");
1094
+ if (observedTty.completion_status !== "complete" ||
1095
+ observedTty.output_truncated ||
1096
+ !/^\d+\^done(?:,|$)/u.test(observedTty.mi) ||
1097
+ miStringField(observedTty.mi, "inferior_tty_terminal") !==
1098
+ session.inferiorTty)
1099
+ throw new Error("GDB no longer reports the caller-selected inferior TTY; detachment cannot be confirmed safely.");
1100
+ await this.#verifyInferiorOutputSink(inferiorPids[0], session.inferiorTty, (identity) => session.knownInferiorIdentities.set(`${identity.pid}:${identity.startTime}`, identity));
1101
+ const detached = await this.#request(session, "-target-detach");
1102
+ if (detached.completion_status !== "complete" ||
1103
+ detached.output_truncated ||
1104
+ !/^\d+\^done(?:,|$)/u.test(detached.mi))
1105
+ throw new Error("GDB did not confirm inferior detachment.");
1106
+ session.knownInferiorIdentities.clear();
1107
+ return { status: "detached", outputSink: "durable" };
1108
+ }
1109
+ async #settleExitedCommands(session, code, signalCode) {
1110
+ await this.#waitForStdoutSettlement(session);
1111
+ for (const pending of session.pending.values()) {
1112
+ clearTimeout(pending.timer);
1113
+ pending.reject(new GdbCommandProcessExitError({
1114
+ command: pending.command,
1115
+ mi: "",
1116
+ records: [...pending.lines],
1117
+ console: pending.lines
1118
+ .filter((line) => line.startsWith("~"))
1119
+ .join("\n"),
1120
+ target: pending.lines
1121
+ .filter((line) => line.startsWith("@"))
1122
+ .join("\n"),
1123
+ log: pending.lines.filter((line) => line.startsWith("&")).join("\n"),
1124
+ process_exit_observed: true,
1125
+ process_exit_code: code,
1126
+ process_exit_signal: signalCode,
1127
+ output_truncated: pending.outputTruncated,
1128
+ ...(pending.outputInvalidUtf8
1129
+ ? { output_invalid_utf8: true }
1130
+ : {}),
1131
+ completion_status: "unknown",
1132
+ }));
1133
+ }
1134
+ session.pending.clear();
1135
+ }
1136
+ async #waitForStdoutSettlement(session) {
1137
+ let timer;
1138
+ try {
1139
+ await Promise.race([
1140
+ session.stdoutSettled,
1141
+ new Promise((resolve) => {
1142
+ timer = setTimeout(resolve, 1_000);
1143
+ timer.unref?.();
1144
+ }),
1145
+ ]);
1146
+ }
1147
+ finally {
1148
+ clearTimeout(timer);
1149
+ }
1150
+ }
1151
+ #request(session, command, signal, operation = "gdb_console", evidenceCommand = command) {
1152
+ const stdin = session.launched.process.stdin;
1153
+ if (session.exited)
1154
+ return Promise.reject(new Error(`GDB MI process has exited (exit code ${String(session.exitCode)}, signal ${String(session.exitSignal)}).`));
1155
+ if (stdin === null ||
1156
+ stdin === undefined ||
1157
+ stdin.destroyed ||
1158
+ !stdin.writable) {
1159
+ const message = "GDB MI input stream is closed";
1160
+ this.#failProtocol(session, message);
1161
+ return Promise.reject(new Error(message));
1162
+ }
1163
+ const token = session.nextToken++;
1164
+ return new Promise((resolve, reject) => {
1165
+ let abortListener;
1166
+ const cleanup = () => {
1167
+ signal?.removeEventListener("abort", abortListener);
1168
+ };
1169
+ let pending;
1170
+ const timer = setTimeout(() => {
1171
+ session.pending.delete(token);
1172
+ session.protocolError =
1173
+ "A GDB MI command timed out; untagged stream output can no longer be safely correlated with later commands.";
1174
+ pending.cleanup();
1175
+ const partial = {
1176
+ command: pending.evidenceCommand,
1177
+ mi: "",
1178
+ records: [...pending.lines],
1179
+ console: pending.lines
1180
+ .filter((line) => line.startsWith("~"))
1181
+ .join("\n"),
1182
+ target: pending.lines
1183
+ .filter((line) => line.startsWith("@"))
1184
+ .join("\n"),
1185
+ log: pending.lines.filter((line) => line.startsWith("&")).join("\n"),
1186
+ output_truncated: pending.outputTruncated,
1187
+ ...(pending.outputInvalidUtf8
1188
+ ? { output_invalid_utf8: true }
1189
+ : {}),
1190
+ completion_status: "unknown",
1191
+ };
1192
+ const timeout = new AnalysisTimeoutError(operation, this.#commandTimeoutMs, { cause: new Error(`GDB MI command timed out: ${command}`) });
1193
+ const evidence = createEvidence(undefined, GDB_PROVIDER_IDENTITY, {
1194
+ predicateType: operation === "start_gdb_session"
1195
+ ? "rea.debugger.startup-observation"
1196
+ : "rea.debugger.console-observation",
1197
+ operation,
1198
+ parameters: {
1199
+ session_id: session.id,
1200
+ command: pending.evidenceCommand,
1201
+ },
1202
+ result: { ...partial, records: [...partial.records] },
1203
+ rawResult: { ...partial, records: [...partial.records] },
1204
+ subjectUnavailableReason: "The active GDB inferior identity is not established by the debugger session identifier.",
1205
+ limitations: [
1206
+ "The GDB command exceeded its deadline; retained MI and stream records are partial and command completion is unknown.",
1207
+ "Cleanup of the owned GDB process was requested because output correlation could no longer be guaranteed.",
1208
+ "The unrestricted GDB console can access local shell, filesystem, network, and target controls.",
1209
+ ],
1210
+ });
1211
+ void this.#stopDebuggerOnly(session).then((stopped) => {
1212
+ if (stopped.status === "incomplete" &&
1213
+ operation === "start_gdb_session") {
1214
+ pending.reject(new AnalysisTimeoutError(operation, this.#commandTimeoutMs, {
1215
+ cause: timeout,
1216
+ cleanup: { reason: stopped.reason, resources: [session.id] },
1217
+ partialObservation: evidence,
1218
+ }));
1219
+ return;
1220
+ }
1221
+ pending.reject(stopped.status === "incomplete"
1222
+ ? new AnalysisCapabilityUnavailableError("gdb", "gdb_console", `GDB command output could not be correlated and its owned process could not be confirmed stopped: ${stopped.reason}`, {
1223
+ cause: timeout,
1224
+ cleanup: {
1225
+ reason: stopped.reason,
1226
+ resources: [session.id],
1227
+ },
1228
+ partialObservation: evidence,
1229
+ })
1230
+ : new GdbCommandTimeoutError(partial, evidence, this.#commandTimeoutMs));
1231
+ }, (cause) => pending.reject(new AnalysisCapabilityUnavailableError("gdb", "gdb_console", "GDB command output could not be correlated and owned process shutdown failed.", {
1232
+ cause: new AggregateError([timeout, cause], "GDB timeout and cleanup both failed."),
1233
+ cleanup: {
1234
+ reason: gdbErrorMessage(cause),
1235
+ resources: [session.id],
1236
+ },
1237
+ partialObservation: evidence,
1238
+ })));
1239
+ }, this.#commandTimeoutMs);
1240
+ pending = {
1241
+ token,
1242
+ command,
1243
+ evidenceCommand,
1244
+ lines: [],
1245
+ resolve: (result) => {
1246
+ cleanup();
1247
+ resolve(result);
1248
+ },
1249
+ reject: (error) => {
1250
+ cleanup();
1251
+ reject(error);
1252
+ },
1253
+ cleanup,
1254
+ timer,
1255
+ outputBytes: 0,
1256
+ outputTruncated: false,
1257
+ outputInvalidUtf8: false,
1258
+ terminalRecord: undefined,
1259
+ awaitingInferiorStop: false,
1260
+ };
1261
+ session.pending.set(token, pending);
1262
+ abortListener = () => {
1263
+ clearTimeout(pending.timer);
1264
+ const partial = {
1265
+ command: pending.evidenceCommand,
1266
+ mi: "",
1267
+ records: [...pending.lines],
1268
+ console: pending.lines
1269
+ .filter((line) => line.startsWith("~"))
1270
+ .join("\n"),
1271
+ target: pending.lines
1272
+ .filter((line) => line.startsWith("@"))
1273
+ .join("\n"),
1274
+ log: pending.lines.filter((line) => line.startsWith("&")).join("\n"),
1275
+ output_truncated: pending.outputTruncated,
1276
+ ...(pending.outputInvalidUtf8
1277
+ ? { output_invalid_utf8: true }
1278
+ : {}),
1279
+ completion_status: "unknown",
1280
+ };
1281
+ const evidence = createEvidence(undefined, GDB_PROVIDER_IDENTITY, {
1282
+ predicateType: "rea.debugger.console-observation",
1283
+ operation: "gdb_console",
1284
+ parameters: {
1285
+ session_id: session.id,
1286
+ command: pending.evidenceCommand,
1287
+ },
1288
+ result: { ...partial, records: [...partial.records] },
1289
+ rawResult: { ...partial, records: [...partial.records] },
1290
+ subjectUnavailableReason: "The active GDB inferior identity is not established by the debugger session identifier.",
1291
+ limitations: [
1292
+ "The GDB command was cancelled; retained MI records are partial and command completion is unknown.",
1293
+ "Shutdown of the owned GDB process was requested because output correlation could no longer be guaranteed.",
1294
+ "The unrestricted GDB console can access local shell, filesystem, network, and target controls.",
1295
+ ],
1296
+ });
1297
+ session.pending.delete(token);
1298
+ session.protocolError =
1299
+ "A GDB MI command was cancelled; owned-session shutdown was requested because output correlation can no longer be guaranteed.";
1300
+ void this.#stopDebuggerOnly(session).then((stopped) => {
1301
+ pending.reject(stopped.status === "incomplete"
1302
+ ? new AnalysisCancelledError("gdb_console", {
1303
+ cause: new Error(stopped.reason),
1304
+ cleanup: {
1305
+ reason: stopped.reason,
1306
+ resources: [session.id],
1307
+ },
1308
+ partialObservation: evidence,
1309
+ })
1310
+ : new AnalysisCancelledError("gdb_console", {
1311
+ partialObservation: evidence,
1312
+ }));
1313
+ }, (cause) => pending.reject(new AnalysisCancelledError("gdb_console", {
1314
+ cause,
1315
+ partialObservation: evidence,
1316
+ })));
1317
+ };
1318
+ signal?.addEventListener("abort", abortListener, { once: true });
1319
+ if (signal?.aborted) {
1320
+ abortListener();
1321
+ return;
1322
+ }
1323
+ try {
1324
+ session.launched.process.stdin?.write(`${token}${command}\n`, "utf8", (cause) => {
1325
+ if (cause)
1326
+ this.#failProtocol(session, `GDB stdin write failed: ${cause.message}`);
1327
+ });
1328
+ }
1329
+ catch (cause) {
1330
+ this.#failProtocol(session, `GDB stdin write failed: ${cause instanceof Error ? cause.message : "unknown error"}`);
1331
+ }
1332
+ }).then((result) => ({ ...result, command }));
1333
+ }
1334
+ }
1335
+ const miQuote = (value) => `"${value.replaceAll("\\", "\\\\").replaceAll('"', '\\"').replaceAll("\r", "\\r").replaceAll("\n", "\\n").replaceAll("\t", "\\t")}"`;
1336
+ /** @internal Decode one unambiguous GDB MI C-string field. */
1337
+ export const miStringField = (record, field) => {
1338
+ const escapedField = field.replace(/[.*+?^${}()|[\]\\]/gu, "\\$&");
1339
+ const valuePattern = `((?:\\\\.|[^"\\\\])*)`;
1340
+ const fieldPattern = new RegExp(`(?:^|,)${escapedField}="${valuePattern}"`, "gu");
1341
+ const matches = [...record.matchAll(fieldPattern)];
1342
+ if (matches.length !== 1)
1343
+ return undefined;
1344
+ const match = new RegExp(`^\\d+\\^done,${escapedField}="${valuePattern}"$`, "u").exec(record);
1345
+ const raw = match?.[1];
1346
+ if (raw === undefined)
1347
+ return undefined;
1348
+ const bytes = [];
1349
+ for (let index = 0; index < raw.length;) {
1350
+ const character = raw[index];
1351
+ if (character !== "\\") {
1352
+ const codePoint = raw.codePointAt(index);
1353
+ if (codePoint === undefined ||
1354
+ (codePoint >= 0xd800 && codePoint <= 0xdfff))
1355
+ return undefined;
1356
+ const value = String.fromCodePoint(codePoint);
1357
+ bytes.push(...Buffer.from(value, "utf8"));
1358
+ index += value.length;
1359
+ continue;
1360
+ }
1361
+ const escaped = raw[++index];
1362
+ const simple = {
1363
+ a: 7,
1364
+ b: 8,
1365
+ f: 12,
1366
+ n: 10,
1367
+ r: 13,
1368
+ t: 9,
1369
+ v: 11,
1370
+ "\\": 92,
1371
+ '"': 34,
1372
+ "'": 39,
1373
+ "?": 63,
1374
+ };
1375
+ const simpleByte = simple[escaped];
1376
+ if (simpleByte !== undefined) {
1377
+ bytes.push(simpleByte);
1378
+ index += 1;
1379
+ continue;
1380
+ }
1381
+ if (escaped === "x") {
1382
+ const hex = /^[0-9a-f]+/iu.exec(raw.slice(index + 1))?.[0];
1383
+ if (hex === undefined)
1384
+ return undefined;
1385
+ bytes.push(Number.parseInt(hex, 16) & 0xff);
1386
+ index += hex.length;
1387
+ index += 1;
1388
+ continue;
1389
+ }
1390
+ if (/[0-7]/u.test(escaped)) {
1391
+ const octal = `${escaped}${/^[0-7]{0,2}/u.exec(raw.slice(index + 1))[0]}`;
1392
+ bytes.push(Number.parseInt(octal, 8) & 0xff);
1393
+ index += octal.length;
1394
+ continue;
1395
+ }
1396
+ return undefined;
1397
+ }
1398
+ const decoded = Buffer.from(bytes).toString("utf8");
1399
+ return Buffer.from(decoded, "utf8").equals(Buffer.from(bytes))
1400
+ ? decoded
1401
+ : undefined;
1402
+ };
1403
+ /** @internal Classify commands that can invalidate the configured output sink. */
1404
+ export const gdbOneShotCommandMayInvalidateDetachProof = (command) => {
1405
+ if (commandMayChangeInferiorOutput(command))
1406
+ return true;
1407
+ const firstToken = /^\s*([^\s;]+)/u.exec(command)?.[1]?.toLowerCase();
1408
+ if (firstToken !== undefined &&
1409
+ (["source", "define", "alias"].some((name) => name.startsWith(firstToken)) ||
1410
+ firstToken === "py" ||
1411
+ "python".startsWith(firstToken)))
1412
+ return true;
1413
+ // One-shot execution cannot establish which shell/GDB context interprets
1414
+ // redirections, nor safely track multiline command definitions.
1415
+ return /[<>]{1,2}|&>|[\r\n;]/u.test(command);
1416
+ };
1417
+ /** @internal Classify commands that can invalidate the configured output sink. */
1418
+ export const commandMayChangeInferiorOutput = (command) => {
1419
+ const setting = /^\s*(?:set|with)\s+(\S+)/iu.exec(command)?.[1];
1420
+ const maySetInferiorTty = setting !== undefined && "inferior-tty".startsWith(setting.toLowerCase());
1421
+ const firstToken = /^\s*([^\s;]+)/u.exec(command)?.[1]?.toLowerCase();
1422
+ const mayBeTtyCommand = firstToken !== undefined && "tty".startsWith(firstToken);
1423
+ const mayDefineAlias = firstToken !== undefined && "alias".startsWith(firstToken);
1424
+ const mayRunWithOutputRedirection = firstToken !== undefined &&
1425
+ ["run", "start", "starti"].some((name) => name.startsWith(firstToken)) &&
1426
+ /[<>]{1,2}|&>/u.test(command.slice(firstToken.length));
1427
+ return (maySetInferiorTty ||
1428
+ mayBeTtyCommand ||
1429
+ mayDefineAlias ||
1430
+ /\binferior-tty\b/iu.test(command) ||
1431
+ /^\s*(?:wit(?:h)?(?:\s|$)|tty(?:\s|$)|source\b|py\w*|define\b)/iu.test(command) ||
1432
+ mayRunWithOutputRedirection);
1433
+ };
1434
+ /** Terminate only the directly owned debugger process, never its process group or inferiors. */
1435
+ export const waitForGdbCommandTurn = (previous, signal) => {
1436
+ if (signal === undefined)
1437
+ return previous;
1438
+ if (signal.aborted)
1439
+ return Promise.reject(new AnalysisCancelledError("gdb_console"));
1440
+ return new Promise((resolve, reject) => {
1441
+ const onAbort = () => reject(new AnalysisCancelledError("gdb_console"));
1442
+ signal.addEventListener("abort", onAbort, { once: true });
1443
+ previous.then(() => {
1444
+ signal.removeEventListener("abort", onAbort);
1445
+ resolve();
1446
+ }, (cause) => {
1447
+ signal.removeEventListener("abort", onAbort);
1448
+ reject(cause);
1449
+ });
1450
+ });
1451
+ };