rea-agents 4.0.1 → 5.0.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 (740) hide show
  1. package/README.md +257 -96
  2. package/bridge/android/ReaJadxBridge.java +247 -0
  3. package/bridge/ghidra/ReaGhidraBridge.java +358 -15
  4. package/bridge/ghidra/ReaGhidraExtensions.java +113 -0
  5. package/bridge/ghidra/ReaGhidraPrepareCom.java +32 -0
  6. package/bridge/native/NativeUIChildren.swift +27 -0
  7. package/bridge/native/ReaNativeUI.swift +30 -16
  8. package/dist/android/AndroidTargetSnapshot.js +36 -0
  9. package/dist/android/JadxAnalysis.js +193 -0
  10. package/dist/android/JadxConfiguration.js +57 -0
  11. package/dist/android/JadxMcpTransport.js +172 -0
  12. package/dist/android/JadxProtocol.js +109 -0
  13. package/dist/android/JadxProvider.js +259 -0
  14. package/dist/android/JadxRelease.js +27 -0
  15. package/dist/android/JadxSession.js +111 -0
  16. package/dist/application/AnalysisContextQueries.js +2 -1
  17. package/dist/application/AppBundleExecutable.js +141 -0
  18. package/dist/application/ArtifactExtraction.js +7 -4
  19. package/dist/application/ArtifactGraphConstruction.js +10 -17
  20. package/dist/application/ArtifactInventory/classify.js +1 -1
  21. package/dist/application/ArtifactInventory/scanCanonical.js +9 -8
  22. package/dist/application/ArtifactInventory/scanReader.js +1 -1
  23. package/dist/application/ArtifactInventory.js +1 -1
  24. package/dist/application/BinaryTargetResolver.js +32 -68
  25. package/dist/application/BrowserObservationService.js +2 -1
  26. package/dist/application/BrowserScenarioCaptureService.js +2 -1
  27. package/dist/application/BrowserScenarioEvidence.js +2 -2
  28. package/dist/application/CallPathTracing.js +2 -1
  29. package/dist/application/CapabilityInventory.js +78 -2
  30. package/dist/application/ClientConfigPath.js +3 -1
  31. package/dist/application/ClientConfigurationDocument.js +83 -13
  32. package/dist/application/ClientRegistrationStatus.js +15 -9
  33. package/dist/application/DirectAnalysis.js +35 -21
  34. package/dist/application/DirectAnalysisStatus.js +7 -8
  35. package/dist/application/Doctor.js +48 -8
  36. package/dist/application/DoctorDiagnostics.js +9 -7
  37. package/dist/application/DoctorScope.js +1 -1
  38. package/dist/application/EnhancedLiteralTracing.js +2 -1
  39. package/dist/application/EnhancedToolTypes.js +2 -1
  40. package/dist/application/EnhancedTools.js +7 -5
  41. package/dist/application/EvidenceBundleCommands.js +3 -2
  42. package/dist/application/EvidenceBundleFiles.js +1 -1
  43. package/dist/application/EvidenceInputResolver.js +30 -0
  44. package/dist/application/FilesystemSnapshot.js +20 -5
  45. package/dist/application/FunctionAnalysisEvidence.js +32 -0
  46. package/dist/application/InventoryProjectionEvidence.js +2 -1
  47. package/dist/application/InvestigationProviders.js +6 -0
  48. package/dist/application/JsonFiles.js +1 -1
  49. package/dist/application/LinuxHopper.js +20 -6
  50. package/dist/application/MacHopper.js +20 -7
  51. package/dist/application/OptionalObservationProviders.js +3 -0
  52. package/dist/application/ProcessCaptureCapability.js +1 -1
  53. package/dist/application/ProcessCaptureError.js +1 -1
  54. package/dist/application/ProcessCaptureJournal.js +3 -1
  55. package/dist/application/ProcessCaptureLifecycle.js +8 -5
  56. package/dist/application/ProcessCli.js +14 -6
  57. package/dist/application/ProcessEvidence.js +2 -6
  58. package/dist/application/ProcessHarness.js +23 -11
  59. package/dist/application/ProcessNormalization.js +12 -5
  60. package/dist/application/ProcessSampling.js +3 -1
  61. package/dist/application/ReconstructionCoverageService.js +4 -7
  62. package/dist/application/ReconstructionObligationCandidates.js +5 -2
  63. package/dist/application/ReconstructionObligationLedgerService.js +2 -1
  64. package/dist/application/ReferenceSourceImport.js +2 -0
  65. package/dist/application/ReferenceSourceImportEntries.js +22 -3
  66. package/dist/application/ReferenceSourceImportPolicy.js +4 -2
  67. package/dist/application/ReferenceSourceImportTypes.js +5 -0
  68. package/dist/application/ReferenceSourceVcsAdapter.js +35 -4
  69. package/dist/application/Setup.js +11 -130
  70. package/dist/application/SetupClientConfiguration.js +36 -22
  71. package/dist/application/SetupHost.js +126 -0
  72. package/dist/application/SetupPlan.js +1 -1
  73. package/dist/application/SetupRegistrationEnvironment.js +1 -2
  74. package/dist/application/SetupSkill.js +9 -3
  75. package/dist/application/SetupTypes.js +17 -0
  76. package/dist/application/StoreFileLock.js +7 -2
  77. package/dist/application/SupportedClients.js +8 -0
  78. package/dist/application/Uninstall.js +32 -21
  79. package/dist/application/UpdateMaintenance.js +3 -3
  80. package/dist/application/UpdateRuntime.js +5 -2
  81. package/dist/application/ValidateSelectedWebScript.js +27 -0
  82. package/dist/application/WebModuleTraceService.js +209 -0
  83. package/dist/application/WebRuntimeService.js +73 -0
  84. package/dist/application/WebScriptExportService.js +115 -0
  85. package/dist/application/WebSourceLocationService.js +160 -0
  86. package/dist/application/WindowsCapabilities.js +7 -7
  87. package/dist/application/android/AndroidAnalysisService.js +37 -0
  88. package/dist/application/{AndroidApplicationService.js → android/AndroidApplicationService.js} +3 -3
  89. package/dist/application/{AppleApplicationService.js → apple/AppleApplicationService.js} +5 -5
  90. package/dist/application/{AnalysisClientCleanup.js → binary/AnalysisClientCleanup.js} +2 -2
  91. package/dist/application/{AnalysisProviderEvaluation.js → binary/AnalysisProviderEvaluation.js} +8 -6
  92. package/dist/application/{AnalysisProviderRegistry.js → binary/AnalysisProviderRegistry.js} +5 -4
  93. package/dist/application/{AnalysisSnapshotCache.js → binary/AnalysisSnapshotCache.js} +8 -7
  94. package/dist/application/{AnalysisSnapshotFiles.js → binary/AnalysisSnapshotFiles.js} +4 -4
  95. package/dist/application/{BinarySession.js → binary/BinarySession.js} +26 -11
  96. package/dist/application/{BinarySessionComposition.js → binary/BinarySessionComposition.js} +2 -1
  97. package/dist/application/{BinarySessionExecution.js → binary/BinarySessionExecution.js} +9 -4
  98. package/dist/application/{BinarySessionOpen.js → binary/BinarySessionOpen.js} +7 -6
  99. package/dist/application/{BinarySessionRecords.js → binary/BinarySessionRecords.js} +34 -40
  100. package/dist/application/{CompositeProvider.js → binary/CompositeProvider.js} +2 -2
  101. package/dist/application/{LazyAnalysisProvider.js → binary/LazyAnalysisProvider.js} +6 -4
  102. package/dist/application/{SessionProviderRouter.js → binary/SessionProviderRouter.js} +7 -4
  103. package/dist/application/firmware/FirmwareAnalysisPort.js +1 -0
  104. package/dist/application/firmware/FirmwareAnalysisService.js +35 -0
  105. package/dist/application/{EvidenceLedger.js → investigation/EvidenceLedger.js} +44 -6
  106. package/dist/application/investigation/InvestigationRecordPort.js +1 -0
  107. package/dist/application/investigation/InvestigationRecords.js +69 -0
  108. package/dist/application/{UnknownEvidence.js → investigation/UnknownEvidence.js} +1 -1
  109. package/dist/application/{ElectronActiveEvidence.js → javascript/ElectronActiveEvidence.js} +4 -4
  110. package/dist/application/javascript/ElectronActiveObservationPort.js +1 -0
  111. package/dist/application/{ElectronActiveObservationService.js → javascript/ElectronActiveObservationService.js} +3 -2
  112. package/dist/application/{ElectronBoundaryAnalysis.js → javascript/ElectronBoundaryAnalysis.js} +1 -1
  113. package/dist/application/{ElectronBoundaryGraphContext.js → javascript/ElectronBoundaryGraphContext.js} +1 -1
  114. package/dist/application/{ElectronEvidence.js → javascript/ElectronEvidence.js} +2 -2
  115. package/dist/application/javascript/ElectronObservationPort.js +1 -0
  116. package/dist/application/{ElectronObservationService.js → javascript/ElectronObservationService.js} +3 -2
  117. package/dist/application/{JavaScriptApplicationEvidence.js → javascript/JavaScriptApplicationEvidence.js} +3 -3
  118. package/dist/application/{JavaScriptApplicationEvidenceGraph.js → javascript/JavaScriptApplicationEvidenceGraph.js} +5 -5
  119. package/dist/application/javascript/JavaScriptApplicationService.js +99 -0
  120. package/dist/application/{JavaScriptApplicationWorkflowEvidence.js → javascript/JavaScriptApplicationWorkflowEvidence.js} +3 -3
  121. package/dist/application/{JavaScriptApplicationWorkflowService.js → javascript/JavaScriptApplicationWorkflowService.js} +12 -11
  122. package/dist/application/{JavaScriptArtifactAnalysis.js → javascript/JavaScriptArtifactAnalysis.js} +12 -26
  123. package/dist/application/javascript/JavaScriptArtifactAnalysisTypes.js +1 -0
  124. package/dist/application/{JavaScriptArtifactGraphAccumulator.js → javascript/JavaScriptArtifactGraphAccumulator.js} +16 -2
  125. package/dist/application/{JavaScriptArtifactGraphBuilder.js → javascript/JavaScriptArtifactGraphBuilder.js} +2 -2
  126. package/dist/application/{JavaScriptArtifactGraphContext.js → javascript/JavaScriptArtifactGraphContext.js} +1 -1
  127. package/dist/application/{JavaScriptArtifactGraphDocuments.js → javascript/JavaScriptArtifactGraphDocuments.js} +1 -1
  128. package/dist/application/{JavaScriptArtifactGraphFindings.js → javascript/JavaScriptArtifactGraphFindings.js} +20 -7
  129. package/dist/application/{JavaScriptArtifactGraphStructure.js → javascript/JavaScriptArtifactGraphStructure.js} +1 -1
  130. package/dist/application/{JavaScriptArtifactPathResolution.js → javascript/JavaScriptArtifactPathResolution.js} +12 -14
  131. package/dist/application/{JavaScriptArtifactReconstruction.js → javascript/JavaScriptArtifactReconstruction.js} +4 -8
  132. package/dist/application/{JavaScriptJsonModules.js → javascript/JavaScriptJsonModules.js} +3 -2
  133. package/dist/application/{JavaScriptModuleRelationships.js → javascript/JavaScriptModuleRelationships.js} +5 -3
  134. package/dist/application/javascript/JavaScriptRecoveryPort.js +1 -0
  135. package/dist/application/javascript/JavaScriptRecoveryService.js +52 -0
  136. package/dist/application/{JavaScriptReturnShapeProjection.js → javascript/JavaScriptReturnShapeProjection.js} +3 -3
  137. package/dist/application/{JavaScriptRuntimeObservationEvidence.js → javascript/JavaScriptRuntimeObservationEvidence.js} +2 -2
  138. package/dist/application/javascript/JavaScriptRuntimeObservationPort.js +1 -0
  139. package/dist/application/{JavaScriptRuntimeObservationService.js → javascript/JavaScriptRuntimeObservationService.js} +3 -2
  140. package/dist/application/{JavaScriptRuntimeReconciliationEvidence.js → javascript/JavaScriptRuntimeReconciliationEvidence.js} +3 -3
  141. package/dist/application/{JavaScriptRuntimeReconciliationService.js → javascript/JavaScriptRuntimeReconciliationService.js} +6 -5
  142. package/dist/application/{JavaScriptSemanticGraphAsyncProjection.js → javascript/JavaScriptSemanticGraphAsyncProjection.js} +1 -1
  143. package/dist/application/{JavaScriptSemanticGraphBuilder.js → javascript/JavaScriptSemanticGraphBuilder.js} +5 -3
  144. package/dist/application/{JavaScriptSemanticGraphChildProcessProjection.js → javascript/JavaScriptSemanticGraphChildProcessProjection.js} +1 -1
  145. package/dist/application/{JavaScriptSemanticGraphConstruction.js → javascript/JavaScriptSemanticGraphConstruction.js} +3 -2
  146. package/dist/application/{JavaScriptSemanticGraphDataProjection.js → javascript/JavaScriptSemanticGraphDataProjection.js} +1 -1
  147. package/dist/application/{JavaScriptSemanticGraphFingerprintProjection.js → javascript/JavaScriptSemanticGraphFingerprintProjection.js} +1 -1
  148. package/dist/application/{JavaScriptSemanticGraphFlowProjection.js → javascript/JavaScriptSemanticGraphFlowProjection.js} +2 -2
  149. package/dist/application/{JavaScriptSemanticGraphObjectProjection.js → javascript/JavaScriptSemanticGraphObjectProjection.js} +1 -1
  150. package/dist/application/{JavaScriptSemanticGraphProjection.js → javascript/JavaScriptSemanticGraphProjection.js} +2 -2
  151. package/dist/application/{JavaScriptSemanticGraphResourceProjection.js → javascript/JavaScriptSemanticGraphResourceProjection.js} +1 -1
  152. package/dist/application/{JavaScriptSemanticTraceService.js → javascript/JavaScriptSemanticTraceService.js} +6 -5
  153. package/dist/application/{ManagedApplicationGraphService.js → managed/ManagedApplicationGraphService.js} +7 -6
  154. package/dist/application/{ManagedMemberComparisonService.js → managed/ManagedMemberComparisonService.js} +10 -8
  155. package/dist/application/{ManagedNativeVerificationService.js → managed/ManagedNativeVerificationService.js} +7 -6
  156. package/dist/application/{ManagedReconstructionService.js → managed/ManagedReconstructionService.js} +7 -6
  157. package/dist/application/{NativeApiInspection.js → native/NativeApiInspection.js} +1 -1
  158. package/dist/application/{NativeCallRoutes.js → native/NativeCallRoutes.js} +3 -3
  159. package/dist/application/{NativeDispatchMetadataInspection.js → native/NativeDispatchMetadataInspection.js} +4 -4
  160. package/dist/application/{NativeUiActionTrace.js → native/NativeUiActionTrace.js} +7 -6
  161. package/dist/application/{NativeValueTrace.js → native/NativeValueTrace.js} +6 -6
  162. package/dist/{application/ArtifactInventory/hash.js → artifacts/ArtifactHash.js} +4 -2
  163. package/dist/artifacts/ArtifactPaths.js +3 -3
  164. package/dist/artifacts/ArtifactProvider.js +10 -38
  165. package/dist/artifacts/ArtifactProviderMetadata.js +36 -0
  166. package/dist/artifacts/AsarArtifactReader.js +195 -23
  167. package/dist/artifacts/AsarEntryStream.js +76 -0
  168. package/dist/artifacts/DirectoryArtifactReader.js +43 -7
  169. package/dist/artifacts/NativeDmgArtifactReader.js +171 -12
  170. package/dist/artifacts/SafeOutputTree.js +26 -10
  171. package/dist/artifacts/ZipArtifactReader.js +1 -0
  172. package/dist/{application → artifacts/apple}/AppleAssetCatalogAnalysis.js +4 -4
  173. package/dist/{application → artifacts/apple}/InterfaceBuilderAnalysis.js +125 -51
  174. package/dist/artifacts/{KeyedArchiveReader.js → apple/KeyedArchiveReader.js} +21 -27
  175. package/dist/artifacts/{NibArchive.js → apple/NibArchive.js} +4 -2
  176. package/dist/artifacts/apple/NibViewHierarchy.js +150 -0
  177. package/dist/{application → artifacts/javascript}/JavaScriptArtifactFiles.js +30 -7
  178. package/dist/artifacts/javascript/JavaScriptArtifactReader.js +6 -0
  179. package/dist/artifacts/readStableArtifact.js +52 -0
  180. package/dist/browser/BrowserProcessStartup.js +3 -1
  181. package/dist/browser/BrowserScenarioSecrets.js +50 -8
  182. package/dist/browser/CdpAuthorizedMainFrame.js +5 -5
  183. package/dist/browser/CdpAuthorizedTarget.js +22 -0
  184. package/dist/browser/CdpBrowserProvider.js +8 -16
  185. package/dist/browser/CdpCaptureDocuments.js +36 -22
  186. package/dist/browser/CdpCaptureEventBodyShapes.js +3 -3
  187. package/dist/browser/CdpCaptureEventHandlers.js +32 -28
  188. package/dist/browser/CdpCaptureEventHelpers.js +6 -6
  189. package/dist/browser/CdpCaptureStorage.js +10 -8
  190. package/dist/browser/CdpCaptureStorageFingerprints.js +25 -23
  191. package/dist/browser/CdpCaptureValues.js +8 -4
  192. package/dist/browser/CdpCommandRejection.js +17 -0
  193. package/dist/browser/CdpConnection.js +59 -17
  194. package/dist/browser/CdpElectronInspection.js +13 -13
  195. package/dist/browser/CdpElectronProvider.js +7 -7
  196. package/dist/browser/CdpElectronScriptEvents.js +6 -6
  197. package/dist/browser/CdpElectronScripts.js +4 -4
  198. package/dist/browser/CdpElectronWorkers.js +4 -4
  199. package/dist/browser/CdpEndpoint.js +22 -10
  200. package/dist/browser/CdpObservationSession.js +20 -24
  201. package/dist/browser/CdpOptionalCommand.js +1 -1
  202. package/dist/browser/CdpPageCapture.js +6 -5
  203. package/dist/browser/CdpPageCaptureScripts.js +2 -2
  204. package/dist/browser/CdpPageCaptureWorkers.js +9 -9
  205. package/dist/browser/CdpSafeMetadata.js +101 -18
  206. package/dist/browser/CdpScreenshot.js +6 -6
  207. package/dist/browser/CdpTargetEvents.js +8 -0
  208. package/dist/browser/CdpTargetSession.js +10 -7
  209. package/dist/browser/CdpWebMcpDiscovery.js +23 -17
  210. package/dist/browser/ElectronFileScope.js +9 -3
  211. package/dist/browser/PlaywrightBrowserScenarioProvider.js +10 -7
  212. package/dist/browser/PlaywrightElectronActiveActions.js +1 -1
  213. package/dist/browser/PlaywrightElectronActiveProvider.js +9 -8
  214. package/dist/browser/PlaywrightExecutionBoundary.js +1 -1
  215. package/dist/browser/PlaywrightScenarioArtifacts.js +10 -5
  216. package/dist/browser/PlaywrightScenarioBrowser.js +3 -1
  217. package/dist/browser/PlaywrightScenarioEvents.js +65 -53
  218. package/dist/browser/PlaywrightScenarioSession.js +13 -3
  219. package/dist/browser/WebSourceMapFetcher.js +55 -58
  220. package/dist/browser/assets/LocalWebScriptArtifacts.js +87 -0
  221. package/dist/browser/assets/PageScriptCapture.js +32 -0
  222. package/dist/browser/assets/PublishWebScripts.js +74 -0
  223. package/dist/browser/assets/ScenarioScriptCapture.js +76 -0
  224. package/dist/browser/assets/ScriptCaptureAdapters.js +57 -0
  225. package/dist/browser/assets/WebArtifactReads.js +56 -0
  226. package/dist/browser/assets/WebSourceLocationArtifacts.js +40 -0
  227. package/dist/browser/execution/CdpEventListeners.js +79 -0
  228. package/dist/browser/execution/CdpExecutionCapture.js +135 -0
  229. package/dist/browser/execution/CdpExecutionCollection.js +57 -0
  230. package/dist/browser/execution/CdpExecutionWindow.js +100 -0
  231. package/dist/browser/execution/CdpListenerSelector.js +22 -0
  232. package/dist/browser/execution/CdpPreciseCoverage.js +48 -0
  233. package/dist/browser/execution/CdpRuntimeInitiator.js +18 -0
  234. package/dist/browser/execution/CdpRuntimeProtocol.js +106 -0
  235. package/dist/browser/execution/CdpRuntimeRequests.js +81 -0
  236. package/dist/browser/execution/CdpRuntimeSession.js +163 -0
  237. package/dist/browser/execution/CdpRuntimeSources.js +223 -0
  238. package/dist/browser/execution/CdpWebRuntimeProvider.js +51 -0
  239. package/dist/browser/modules/NativeModuleResolver.js +210 -0
  240. package/dist/browser/modules/WebModuleArtifacts.js +40 -0
  241. package/dist/browser/network/PlaywrightNetworkContent.js +71 -0
  242. package/dist/browser/network/PlaywrightScenarioNetwork.js +180 -0
  243. package/dist/browser/providerIdentities.js +24 -0
  244. package/dist/catalogIdentity.js +23 -15
  245. package/dist/cli/androidCommands.js +91 -0
  246. package/dist/{cliApplicationCommands.js → cli/applicationCommands.js} +49 -16
  247. package/dist/cli/artifactCommands.js +1 -1
  248. package/dist/{cliBrowserAdvancedCommands.js → cli/browserAdvancedCommands.js} +39 -24
  249. package/dist/{cliBrowserCommands.js → cli/browserCommands.js} +9 -9
  250. package/dist/cli/commandCancellation.js +24 -0
  251. package/dist/cli/coreAnalysisCommands.js +5 -400
  252. package/dist/cli/coreBinaryCommands.js +211 -0
  253. package/dist/cli/coreNativeCommands.js +293 -0
  254. package/dist/{cliElectronCommands.js → cli/electronCommands.js} +20 -24
  255. package/dist/cli/firmwareCommands.js +75 -0
  256. package/dist/{cliSetup.js → cli/interactiveSetup.js} +1 -1
  257. package/dist/cli/javascriptApplicationAnalysis.js +2 -2
  258. package/dist/cli/javascriptRecoveryCommands.js +45 -0
  259. package/dist/cli/managedCommands.js +5 -5
  260. package/dist/cli/managedProjectGraphCommand.js +2 -2
  261. package/dist/cli/options.js +7 -1
  262. package/dist/{cliProcessCommands.js → cli/processCommands.js} +3 -3
  263. package/dist/cli/referenceSourceImportStatus.js +15 -0
  264. package/dist/cli/setupCommands.js +4 -2
  265. package/dist/cli/utilityCommands.js +50 -25
  266. package/dist/cli/webModuleCommands.js +56 -0
  267. package/dist/cli/webRuntimeCommands.js +60 -0
  268. package/dist/cli/webScriptCommands.js +31 -0
  269. package/dist/cli/webSourceLocationCommands.js +42 -0
  270. package/dist/cli.js +20 -15
  271. package/dist/cliBrowserContext.js +5 -3
  272. package/dist/cliBrowserScenarioCommands.js +6 -4
  273. package/dist/cliCommandNames.js +19 -2
  274. package/dist/cliEvidenceCommands.js +2 -1
  275. package/dist/cliJavaScriptRuntimeCommands.js +8 -5
  276. package/dist/cliJsonInput.js +35 -13
  277. package/dist/cliLogging.js +2 -1
  278. package/dist/cliOutput.js +52 -27
  279. package/dist/composition/android.js +3 -0
  280. package/dist/composition/auxiliaryAnalysisProviders.js +30 -0
  281. package/dist/composition/binary.js +25 -0
  282. package/dist/composition/browserObservation.js +3 -0
  283. package/dist/composition/browserScenario.js +3 -0
  284. package/dist/composition/directAnalysis.js +17 -0
  285. package/dist/composition/electronObservation.js +3 -0
  286. package/dist/composition/electronScenario.js +3 -0
  287. package/dist/composition/firmware.js +3 -0
  288. package/dist/composition/javascriptRecovery.js +3 -0
  289. package/dist/composition/javascriptRuntimeObservation.js +3 -0
  290. package/dist/composition/optionalObservationProviders.js +49 -0
  291. package/dist/composition/webModules.js +5 -0
  292. package/dist/composition/webRuntime.js +4 -0
  293. package/dist/composition/webSourceLocations.js +5 -0
  294. package/dist/config/environment.js +11 -1
  295. package/dist/config/parseConfig.js +29 -4
  296. package/dist/config/parsers.js +1 -1
  297. package/dist/contracts/android/androidToolContracts.js +77 -0
  298. package/dist/contracts/applicationToolContracts.js +75 -13
  299. package/dist/contracts/artifactComparisonExample.js +7 -14
  300. package/dist/contracts/artifactToolContracts.js +2 -2
  301. package/dist/contracts/browserScenarioToolContracts.js +1 -1
  302. package/dist/contracts/enhancedInputs.js +1 -1
  303. package/dist/contracts/enhancedToolContracts.js +31 -0
  304. package/dist/contracts/errorSchemas.js +4 -2
  305. package/dist/contracts/evidenceInputContracts.js +13 -0
  306. package/dist/contracts/firmware/firmwareToolContracts.js +38 -0
  307. package/dist/contracts/{applicationWorkflowInputContracts.js → javascript/applicationWorkflowInputContracts.js} +18 -18
  308. package/dist/contracts/{electronToolContracts.js → javascript/electronToolContracts.js} +6 -6
  309. package/dist/contracts/{javascriptApplicationWorkflowExamples.js → javascript/javascriptApplicationWorkflowExamples.js} +3 -3
  310. package/dist/contracts/javascript/javascriptRecoveryToolContracts.js +23 -0
  311. package/dist/contracts/{javascriptRuntimeObservationToolContracts.js → javascript/javascriptRuntimeObservationToolContracts.js} +3 -3
  312. package/dist/contracts/{javascriptRuntimeReconciliationExample.js → javascript/javascriptRuntimeReconciliationExample.js} +5 -5
  313. package/dist/contracts/{managedToolContracts.js → managed/managedToolContracts.js} +3 -3
  314. package/dist/contracts/{managedWorkflowExamples.js → managed/managedWorkflowExamples.js} +1 -1
  315. package/dist/contracts/{managedWorkflowToolContracts.js → managed/managedWorkflowToolContracts.js} +6 -6
  316. package/dist/contracts/mobileApplicationGraphExamples.js +105 -0
  317. package/dist/contracts/{nativeToolContracts.js → native/nativeToolContracts.js} +14 -7
  318. package/dist/contracts/officialToolContracts.js +66 -0
  319. package/dist/contracts/promptContracts.js +1 -1
  320. package/dist/contracts/sessionLifecycleInputs.js +4 -0
  321. package/dist/contracts/sessionToolContracts.js +43 -0
  322. package/dist/contracts/sessionToolSchemas.js +1 -1
  323. package/dist/contracts/toolContractExamples.js +5 -0
  324. package/dist/contracts/toolContractTypes.js +2 -0
  325. package/dist/contracts/toolContracts.js +18 -135
  326. package/dist/contracts/toolEffects.js +75 -0
  327. package/dist/contracts/toolOutputSchemaGroups.js +20 -16
  328. package/dist/contracts/toolOutputSchemaPrimitives.js +1 -0
  329. package/dist/contracts/webRuntimeToolContracts.js +43 -0
  330. package/dist/contracts/webScriptToolContracts.js +68 -0
  331. package/dist/doctorRuntime.js +5 -1
  332. package/dist/domain/analysisErrorBase.js +33 -0
  333. package/dist/domain/analysisErrorCore.js +62 -0
  334. package/dist/domain/analysisErrorPresentation.js +22 -2
  335. package/dist/domain/analysisErrorProjection.js +25 -3
  336. package/dist/domain/analysisSnapshot.js +1 -0
  337. package/dist/domain/android/androidAnalysis.js +141 -0
  338. package/dist/domain/{androidApplication.js → android/androidApplication.js} +7 -6
  339. package/dist/domain/apple/appleApplication.js +277 -0
  340. package/dist/domain/{appleAssetCatalog.js → apple/appleAssetCatalog.js} +2 -2
  341. package/dist/domain/apple/appleBundleAnatomy.js +236 -0
  342. package/dist/domain/{interfaceBuilderGraph.js → apple/interfaceBuilderGraph.js} +47 -312
  343. package/dist/domain/apple/interfaceBuilderKeyedArchive.js +411 -0
  344. package/dist/domain/{keyedArchive.js → apple/keyedArchive.js} +10 -9
  345. package/dist/domain/apple/plistValue.js +35 -0
  346. package/dist/domain/artifactGraph.js +1 -0
  347. package/dist/domain/artifactInspection.js +19 -17
  348. package/dist/domain/artifactInventoryEvidence.js +32 -27
  349. package/dist/domain/artifactInventorySnapshot.js +1 -0
  350. package/dist/domain/artifactOperationError.js +20 -0
  351. package/dist/domain/artifactPathSyntax.js +26 -0
  352. package/dist/domain/browserNetworkEvidence.js +82 -0
  353. package/dist/domain/browserObservation.js +12 -4
  354. package/dist/domain/browserObservationError.js +25 -0
  355. package/dist/domain/browserObservationSchemas.js +2 -1
  356. package/dist/domain/browserScenario.js +1 -1
  357. package/dist/domain/browserScenarioCapture.js +23 -1
  358. package/dist/domain/browserScenarioCaptureValues.js +25 -0
  359. package/dist/domain/browserScenarioDiff.js +7 -4
  360. package/dist/domain/browserScenarioDiffEvidence.js +35 -1
  361. package/dist/domain/browserScenarioNormalization.js +6 -11
  362. package/dist/domain/browserScenarioValues.js +15 -2
  363. package/dist/domain/browserSession.js +2 -7
  364. package/dist/domain/bundleComparison.js +2 -1
  365. package/dist/domain/callPath.js +86 -38
  366. package/dist/domain/canonicalDigest.js +65 -0
  367. package/dist/domain/canonicalOrdering.js +11 -0
  368. package/dist/domain/changedBehavior.js +8 -7
  369. package/dist/domain/comparisonSemantics.js +2 -4
  370. package/dist/domain/comparisonStatus.js +39 -0
  371. package/dist/domain/configurationErrors.js +25 -0
  372. package/dist/domain/dosCom.js +8 -0
  373. package/dist/domain/evidence.js +3 -11
  374. package/dist/domain/evidenceBundle.js +98 -35
  375. package/dist/domain/evidenceErrors.js +30 -0
  376. package/dist/domain/firmware/firmwareAnalysis.js +121 -0
  377. package/dist/domain/functionComparison.js +4 -2
  378. package/dist/domain/functionComparisonDimensions.js +6 -4
  379. package/dist/domain/functionComparisonNormalization.js +13 -8
  380. package/dist/domain/functionComparisonResults.js +1 -4
  381. package/dist/domain/hopperErrors.js +78 -0
  382. package/dist/domain/hopperValues.js +4 -3
  383. package/dist/domain/inputIssueProjection.js +17 -2
  384. package/dist/domain/{electronActiveObservation.js → javascript/electronActiveObservation.js} +3 -1
  385. package/dist/domain/{electronObservation.js → javascript/electronObservation.js} +5 -11
  386. package/dist/domain/{electronStaticAnalysisBrowser.js → javascript/electronStaticAnalysisBrowser.js} +15 -24
  387. package/dist/domain/{electronStaticAnalysisIpc.js → javascript/electronStaticAnalysisIpc.js} +2 -2
  388. package/dist/domain/{electronStaticAnalysisNative.js → javascript/electronStaticAnalysisNative.js} +12 -12
  389. package/dist/domain/javascript/electronStaticAnalysisTypes.js +1 -0
  390. package/dist/domain/{electronStaticAnalysisValues.js → javascript/electronStaticAnalysisValues.js} +24 -4
  391. package/dist/domain/{javascriptApplicationAnalysis.js → javascript/javascriptApplicationAnalysis.js} +2 -2
  392. package/dist/domain/{javascriptApplicationChangeGraph.js → javascript/javascriptApplicationChangeGraph.js} +2 -2
  393. package/dist/domain/{javascriptApplicationEvidenceSchemas.js → javascript/javascriptApplicationEvidenceSchemas.js} +6 -4
  394. package/dist/domain/{javascriptApplicationGraph.js → javascript/javascriptApplicationGraph.js} +13 -22
  395. package/dist/domain/{javascriptApplicationGraphSchemas.js → javascript/javascriptApplicationGraphSchemas.js} +2 -2
  396. package/dist/domain/{javascriptApplicationVersionComparison.js → javascript/javascriptApplicationVersionComparison.js} +3 -11
  397. package/dist/domain/{javascriptApplicationVersionComparisonSchemas.js → javascript/javascriptApplicationVersionComparisonSchemas.js} +3 -3
  398. package/dist/domain/{javascriptApplicationVersionItems.js → javascript/javascriptApplicationVersionItems.js} +4 -4
  399. package/dist/domain/{javascriptApplicationVersionKeys.js → javascript/javascriptApplicationVersionKeys.js} +16 -9
  400. package/dist/domain/javascript/javascriptArtifactFiles.js +1 -0
  401. package/dist/domain/{javascriptAstFingerprint.js → javascript/javascriptAstFingerprint.js} +38 -22
  402. package/dist/domain/javascript/javascriptAstValues.js +23 -0
  403. package/dist/domain/{javascriptExportShapeComparison.js → javascript/javascriptExportShapeComparison.js} +1 -2
  404. package/dist/domain/{javascriptExportShapeComparisonSchemas.js → javascript/javascriptExportShapeComparisonSchemas.js} +2 -2
  405. package/dist/domain/{javascriptExportShapeSelection.js → javascript/javascriptExportShapeSelection.js} +1 -1
  406. package/dist/domain/{javascriptExportShapeVariants.js → javascript/javascriptExportShapeVariants.js} +7 -3
  407. package/dist/domain/{javascriptFeatureSeed.js → javascript/javascriptFeatureSeed.js} +32 -11
  408. package/dist/domain/{javascriptFeatureTrace.js → javascript/javascriptFeatureTrace.js} +9 -13
  409. package/dist/domain/{javascriptFeatureTraceSchemas.js → javascript/javascriptFeatureTraceSchemas.js} +32 -18
  410. package/dist/domain/{javascriptFeatureTraversal.js → javascript/javascriptFeatureTraversal.js} +7 -2
  411. package/dist/domain/{javascriptNativeHandoff.js → javascript/javascriptNativeHandoff.js} +2 -1
  412. package/dist/domain/javascript/javascriptRecovery.js +88 -0
  413. package/dist/domain/{javascriptRuntimeLoadState.js → javascript/javascriptRuntimeLoadState.js} +2 -2
  414. package/dist/domain/{javascriptRuntimeObservation.js → javascript/javascriptRuntimeObservation.js} +2 -2
  415. package/dist/domain/{javascriptRuntimeReconciliationActive.js → javascript/javascriptRuntimeReconciliationActive.js} +5 -12
  416. package/dist/domain/{javascriptRuntimeReconciliationGraph.js → javascript/javascriptRuntimeReconciliationGraph.js} +2 -2
  417. package/dist/domain/{javascriptRuntimeReconciliationMatching.js → javascript/javascriptRuntimeReconciliationMatching.js} +4 -3
  418. package/dist/domain/{javascriptRuntimeReconciliationParsing.js → javascript/javascriptRuntimeReconciliationParsing.js} +11 -17
  419. package/dist/domain/{javascriptRuntimeReconciliationResult.js → javascript/javascriptRuntimeReconciliationResult.js} +4 -4
  420. package/dist/domain/{javascriptRuntimeReconciliationSchemas.js → javascript/javascriptRuntimeReconciliationSchemas.js} +8 -5
  421. package/dist/domain/{javascriptRuntimeStaticCandidates.js → javascript/javascriptRuntimeStaticCandidates.js} +8 -4
  422. package/dist/domain/{javascriptSemanticAnalysis.js → javascript/javascriptSemanticAnalysis.js} +80 -17
  423. package/dist/domain/{javascriptSemanticAsyncEffects.js → javascript/javascriptSemanticAsyncEffects.js} +2 -1
  424. package/dist/domain/{javascriptSemanticCallResolution.js → javascript/javascriptSemanticCallResolution.js} +11 -5
  425. package/dist/domain/{javascriptSemanticCalls.js → javascript/javascriptSemanticCalls.js} +7 -4
  426. package/dist/domain/{javascriptSemanticChildProcesses.js → javascript/javascriptSemanticChildProcesses.js} +5 -2
  427. package/dist/domain/{javascriptSemanticDataEffectHelpers.js → javascript/javascriptSemanticDataEffectHelpers.js} +7 -6
  428. package/dist/domain/{javascriptSemanticDataEffects.js → javascript/javascriptSemanticDataEffects.js} +9 -6
  429. package/dist/domain/{javascriptSemanticFingerprints.js → javascript/javascriptSemanticFingerprints.js} +40 -16
  430. package/dist/domain/{javascriptSemanticGraph.js → javascript/javascriptSemanticGraph.js} +23 -28
  431. package/dist/domain/{javascriptSemanticGraphSchemas.js → javascript/javascriptSemanticGraphSchemas.js} +3 -3
  432. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +116 -0
  433. package/dist/domain/javascript/javascriptSemanticMutationValues.js +53 -0
  434. package/dist/domain/{javascriptSemanticObjects.js → javascript/javascriptSemanticObjects.js} +5 -5
  435. package/dist/domain/{javascriptSemanticPrimitives.js → javascript/javascriptSemanticPrimitives.js} +9 -2
  436. package/dist/domain/{javascriptSemanticProjection.js → javascript/javascriptSemanticProjection.js} +32 -44
  437. package/dist/domain/{javascriptSemanticPromises.js → javascript/javascriptSemanticPromises.js} +77 -21
  438. package/dist/domain/{javascriptSemanticProvenance.js → javascript/javascriptSemanticProvenance.js} +4 -1
  439. package/dist/domain/{javascriptSemanticQuery.js → javascript/javascriptSemanticQuery.js} +7 -8
  440. package/dist/domain/{javascriptSemanticQueryAssessment.js → javascript/javascriptSemanticQueryAssessment.js} +1 -2
  441. package/dist/domain/{javascriptSemanticQueryIdentity.js → javascript/javascriptSemanticQueryIdentity.js} +1 -2
  442. package/dist/domain/{javascriptSemanticQuerySchemas.js → javascript/javascriptSemanticQuerySchemas.js} +3 -3
  443. package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +25 -0
  444. package/dist/domain/{javascriptSemanticResources.js → javascript/javascriptSemanticResources.js} +2 -1
  445. package/dist/domain/{javascriptSemanticReturns.js → javascript/javascriptSemanticReturns.js} +2 -1
  446. package/dist/domain/{javascriptSemanticTraceSchemas.js → javascript/javascriptSemanticTraceSchemas.js} +2 -2
  447. package/dist/domain/javascript/javascriptSemanticTraversal.js +55 -0
  448. package/dist/domain/javascript/javascriptSemanticValueTypes.js +1 -0
  449. package/dist/domain/{javascriptSemanticValues.js → javascript/javascriptSemanticValues.js} +118 -60
  450. package/dist/domain/{javascriptSourceParser.js → javascript/javascriptSourceParser.js} +4 -2
  451. package/dist/domain/{javascriptStaticAnalysis.js → javascript/javascriptStaticAnalysis.js} +8 -5
  452. package/dist/domain/{javascriptStaticAnalysisBundler.js → javascript/javascriptStaticAnalysisBundler.js} +15 -11
  453. package/dist/domain/{javascriptStaticAnalysisCalls.js → javascript/javascriptStaticAnalysisCalls.js} +16 -8
  454. package/dist/domain/{javascriptStaticAnalysisHelpers.js → javascript/javascriptStaticAnalysisHelpers.js} +261 -43
  455. package/dist/domain/{sourceToBundleComparison.js → javascript/sourceToBundleComparison.js} +6 -8
  456. package/dist/domain/{sourceToBundleComparisonSchemas.js → javascript/sourceToBundleComparisonSchemas.js} +4 -4
  457. package/dist/domain/{sourceToBundleSignals.js → javascript/sourceToBundleSignals.js} +7 -7
  458. package/dist/domain/jsonShape.js +6 -2
  459. package/dist/domain/{managedApplicationGraph.js → managed/managedApplicationGraph.js} +4 -4
  460. package/dist/domain/{managedApplicationGraphNodes.js → managed/managedApplicationGraphNodes.js} +1 -1
  461. package/dist/domain/{managedArtifact.js → managed/managedArtifact.js} +1 -1
  462. package/dist/domain/{managedMemberComparison.js → managed/managedMemberComparison.js} +5 -4
  463. package/dist/domain/{managedMemberComparisonCoverage.js → managed/managedMemberComparisonCoverage.js} +2 -1
  464. package/dist/domain/{managedMemberComparisonItems.js → managed/managedMemberComparisonItems.js} +99 -40
  465. package/dist/domain/{managedMemberComparisonMatch.js → managed/managedMemberComparisonMatch.js} +22 -11
  466. package/dist/domain/{managedNativeVerification.js → managed/managedNativeVerification.js} +1 -1
  467. package/dist/domain/{managedNativeVerificationMatch.js → managed/managedNativeVerificationMatch.js} +8 -6
  468. package/dist/domain/{managedNativeVerificationSchemas.js → managed/managedNativeVerificationSchemas.js} +6 -5
  469. package/dist/domain/{managedReconstruction.js → managed/managedReconstruction.js} +3 -3
  470. package/dist/domain/{nativeDataType.js → native/nativeDataType.js} +2 -0
  471. package/dist/domain/native/nativeFunctionAnnotations.js +43 -0
  472. package/dist/domain/{nativeInspection.js → native/nativeInspection.js} +1 -1
  473. package/dist/domain/{nativeInvestigationGraph.js → native/nativeInvestigationGraph.js} +13 -4
  474. package/dist/domain/native/nativeLoadImage.js +95 -0
  475. package/dist/domain/native/nativeMetadataRecovery.js +55 -0
  476. package/dist/domain/{nativeUiObservation.js → native/nativeUiObservation.js} +20 -6
  477. package/dist/domain/{objcSwiftMetadata.js → native/objcSwiftMetadata.js} +17 -0
  478. package/dist/domain/processCapture.js +4 -3
  479. package/dist/domain/processEvidenceProvider.js +11 -0
  480. package/dist/domain/processScenario.js +17 -17
  481. package/dist/domain/processTraceComparison.js +1 -1
  482. package/dist/domain/propertyListKeys.js +69 -0
  483. package/dist/domain/providerAdapterError.js +17 -0
  484. package/dist/domain/providerCleanupError.js +6 -3
  485. package/dist/domain/providerSelectionError.js +44 -0
  486. package/dist/domain/reconstructionCoverageEvaluation.js +46 -24
  487. package/dist/domain/reconstructionCoverageInput.js +7 -0
  488. package/dist/domain/reconstructionUnknowns.js +1 -1
  489. package/dist/domain/reconstructionVerification.js +22 -8
  490. package/dist/domain/referenceSourceClassification.js +5 -6
  491. package/dist/domain/referenceSourceGraph.js +9 -17
  492. package/dist/domain/referenceSourceImportParsing.js +38 -23
  493. package/dist/domain/runtimeIdentification.js +1 -1
  494. package/dist/domain/runtimeVersion.js +6 -7
  495. package/dist/domain/safeJson.js +13 -0
  496. package/dist/domain/sourceMapEnvelope.js +38 -0
  497. package/dist/domain/staticRuntimeCorrelation.js +9 -7
  498. package/dist/domain/unicodeCodePointOrder.js +11 -6
  499. package/dist/domain/unknownRegistryError.js +10 -0
  500. package/dist/domain/webBundleAnalyzerAst.js +23 -38
  501. package/dist/domain/webBundleAnalyzerInspection.js +29 -20
  502. package/dist/domain/webEventListeners.js +28 -0
  503. package/dist/domain/webExecution.js +74 -0
  504. package/dist/domain/webMcpDiscovery.js +1 -7
  505. package/dist/domain/webModuleImports.js +104 -0
  506. package/dist/domain/webModuleTrace.js +106 -0
  507. package/dist/domain/webRuntime.js +69 -0
  508. package/dist/domain/webScreenshot.js +1 -7
  509. package/dist/domain/webScriptArtifacts.js +39 -0
  510. package/dist/domain/webScriptExport.js +86 -0
  511. package/dist/domain/webScriptExportError.js +13 -0
  512. package/dist/domain/webScriptExportPlan.js +108 -0
  513. package/dist/domain/webSourceLocation.js +106 -0
  514. package/dist/domain/webSourcePosition.js +21 -0
  515. package/dist/dotnet/ManagedArtifactInspector.js +1 -1
  516. package/dist/dotnet/ManagedMemberInspector.js +1 -1
  517. package/dist/dotnet/ManagedMemberInspectorCore.js +34 -0
  518. package/dist/dotnet/ManagedMemberRows.js +6 -4
  519. package/dist/dotnet/ManagedMetadataHeaps.js +3 -2
  520. package/dist/dotnet/ManagedMetadataInventoryRows.js +4 -2
  521. package/dist/dotnet/ManagedMethodBodyReader.js +8 -1
  522. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +22 -16
  523. package/dist/dotnet/ManagedNativeBoundaryInspector.js +56 -50
  524. package/dist/dotnet/ManagedStaticProvider.js +6 -34
  525. package/dist/dotnet/ManagedStaticProviderMetadata.js +36 -0
  526. package/dist/evaluation/CodexAgentEval.js +2 -1
  527. package/dist/firmware/FirmwareCommand.js +163 -0
  528. package/dist/firmware/FirmwareFiles.js +190 -0
  529. package/dist/firmware/FirmwareProvider.js +264 -0
  530. package/dist/firmware/FirmwarePublication.js +84 -0
  531. package/dist/firmware/FirmwareRelease.js +32 -0
  532. package/dist/firmware/FirmwareReports.js +235 -0
  533. package/dist/firmware/FirmwareVersion.js +80 -0
  534. package/dist/generatedMcpToolCatalog.js +1 -1
  535. package/dist/generatedPackageMetadata.js +5 -5
  536. package/dist/ghidra/GhidraAnalysisProfile.js +37 -8
  537. package/dist/ghidra/GhidraClient.js +52 -6
  538. package/dist/ghidra/GhidraDiagnostics.js +3 -0
  539. package/dist/ghidra/GhidraDoctor.js +38 -14
  540. package/dist/ghidra/GhidraFunctionValues.js +14 -8
  541. package/dist/ghidra/GhidraInstallation.js +48 -38
  542. package/dist/ghidra/GhidraInstallationPolicy.js +140 -0
  543. package/dist/ghidra/GhidraInventoryValues.js +39 -2
  544. package/dist/ghidra/GhidraLauncher.js +102 -29
  545. package/dist/ghidra/GhidraLoadImageAttest.js +36 -0
  546. package/dist/ghidra/GhidraLoadImageValues.js +199 -0
  547. package/dist/ghidra/GhidraProvider.js +47 -149
  548. package/dist/ghidra/GhidraProviderCapabilities.js +58 -28
  549. package/dist/ghidra/GhidraProviderClient.js +209 -0
  550. package/dist/ghidra/GhidraRequestQueue.js +2 -2
  551. package/dist/ghidra/GhidraResponseBuffer.js +7 -1
  552. package/dist/ghidra/GhidraSessionError.js +31 -4
  553. package/dist/ghidra/GhidraSessionValues.js +10 -7
  554. package/dist/ghidra/GhidraTargetSnapshot.js +16 -2
  555. package/dist/ghidra/GhidraTransport.js +12 -0
  556. package/dist/ghidra/extensions/GhidraExtensionFailures.js +20 -0
  557. package/dist/ghidra/extensions/GhidraExtensions.js +170 -0
  558. package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +21 -0
  559. package/dist/ghidra/extensions/nativeaot/NativeAotReport.js +100 -0
  560. package/dist/hopper/BridgeLauncher.js +4 -2
  561. package/dist/hopper/HopperAnalysisProfile.js +7 -2
  562. package/dist/hopper/HopperCleanup.js +55 -9
  563. package/dist/hopper/HopperClient.js +14 -4
  564. package/dist/hopper/HopperProcessDiagnostic.js +1 -1
  565. package/dist/hopper/HopperProvider.js +8 -50
  566. package/dist/hopper/HopperProviderCapabilities.js +73 -0
  567. package/dist/hopper/HopperRequestQueue.js +7 -3
  568. package/dist/hopper/HopperResponseStream.js +7 -1
  569. package/dist/hopper/HopperSessionValues.js +1 -1
  570. package/dist/hopper/HopperSocketConnection.js +1 -1
  571. package/dist/hopper/HopperTargetLease.js +23 -15
  572. package/dist/hopper/LinuxPrivateDisplayDiagnostic.js +7 -8
  573. package/dist/hopper/LinuxPrivateDisplayProbe.js +10 -6
  574. package/dist/hopper/protocol.js +8 -8
  575. package/dist/ida/IdaConfiguration.js +56 -0
  576. package/dist/ida/IdaDoctor.js +53 -0
  577. package/dist/ida/IdaInput.js +62 -0
  578. package/dist/ida/IdaMcpConnection.js +111 -0
  579. package/dist/ida/IdaOperationRunner.js +299 -0
  580. package/dist/ida/IdaProtocolValues.js +178 -0
  581. package/dist/ida/IdaProvider.js +126 -0
  582. package/dist/ida/IdaProviderCapabilities.js +52 -0
  583. package/dist/ida/IdaSessionClient.js +318 -0
  584. package/dist/ida/IdaWorkspace.js +54 -0
  585. package/dist/{browser → inspector}/JavaScriptRuntimeScope.js +19 -6
  586. package/dist/{browser → inspector}/V8InspectorCaptureProjection.js +46 -8
  587. package/dist/{browser → inspector}/V8InspectorEndpoint.js +3 -2
  588. package/dist/{browser → inspector}/V8InspectorProvider.js +16 -14
  589. package/dist/inspector/providerIdentity.js +6 -0
  590. package/dist/javascript/recovery/RecoveryFiles.js +122 -0
  591. package/dist/javascript/recovery/WakaruCommand.js +116 -0
  592. package/dist/javascript/recovery/WakaruExecution.js +100 -0
  593. package/dist/javascript/recovery/WakaruProvider.js +96 -0
  594. package/dist/javascript/recovery/WakaruPublication.js +102 -0
  595. package/dist/javascript/recovery/WakaruRelease.js +29 -0
  596. package/dist/javascript/recovery/WakaruReport.js +134 -0
  597. package/dist/javascript/sourceMaps/SourceMapCodecProcess.js +37 -0
  598. package/dist/javascript/sourceMaps/SourceMapCodecProtocol.js +20 -0
  599. package/dist/javascript/sourceMaps/SourceMapCommand.js +176 -0
  600. package/dist/javascript/sourceMaps/SourceMapDecoder.js +61 -0
  601. package/dist/javascript/sourceMaps/SourceMapFormat.js +185 -0
  602. package/dist/javascript/sourceMaps/TraceSourceMap.js +138 -0
  603. package/dist/main/shutdown.js +29 -3
  604. package/dist/main/startup.js +1 -1
  605. package/dist/main/transport.js +32 -11
  606. package/dist/main.js +9 -20
  607. package/dist/native/AppleDispatchCoverage.js +58 -0
  608. package/dist/native/AppleDispatchMetadata.js +73 -490
  609. package/dist/native/AppleMachoFixups.js +292 -0
  610. package/dist/native/AppleMachoSelection.js +188 -0
  611. package/dist/native/AppleObjcCategories.js +59 -0
  612. package/dist/native/AppleObjcDispatchFacets.js +257 -0
  613. package/dist/native/AppleObjcProperties.js +68 -0
  614. package/dist/native/AppleObjcProtocols.js +2 -1
  615. package/dist/native/AppleSwiftDispatchFacets.js +150 -0
  616. package/dist/native/NativeMacOSProvider.js +204 -72
  617. package/dist/native/NativeMacOSProviderMetadata.js +42 -0
  618. package/dist/native/NativeMachoInspection.js +87 -26
  619. package/dist/native/NativeUiHelperRuntime.js +14 -4
  620. package/dist/native/NativeUiObservation.js +14 -6
  621. package/dist/native/NativeUiOutputBudget.js +8 -0
  622. package/dist/native/parsers/codesign.js +40 -5
  623. package/dist/native/parsers/demangle.js +6 -2
  624. package/dist/native/parsers/dyldInfo.js +16 -7
  625. package/dist/native/parsers/echoedPath.js +14 -0
  626. package/dist/native/parsers/lipo.js +14 -0
  627. package/dist/native/parsers/otool.js +5 -2
  628. package/dist/native/parsers/plist.js +174 -11
  629. package/dist/process/ExecFileOutput.js +2 -0
  630. package/dist/process/PrivateRuntimeRoot.js +13 -3
  631. package/dist/process/ProcessOwnership.js +5 -73
  632. package/dist/process/ProcessOwnershipObservation.js +62 -2
  633. package/dist/process/ProcessOwnershipProcessTree.js +13 -0
  634. package/dist/process/ProviderProcess.js +62 -24
  635. package/dist/process/ProviderRunLineage.js +1 -1
  636. package/dist/process/WindowsAuthority.js +20 -1
  637. package/dist/reference/ReferenceSourceReaderEntries.js +11 -2
  638. package/dist/reference/ReferenceSourceReaderFile.js +1 -0
  639. package/dist/server/createServer.js +67 -2
  640. package/dist/server/mcpClientMetadata.js +6 -3
  641. package/dist/server/mcpProgress.js +2 -1
  642. package/dist/server/promptCompletion.js +3 -3
  643. package/dist/server/registerAndroidTools.js +30 -0
  644. package/dist/server/registerApplicationTools/compareExportShapes.js +7 -3
  645. package/dist/server/registerApplicationTools/compareSourceToBundle.js +9 -4
  646. package/dist/server/registerApplicationTools/compareVersions.js +7 -3
  647. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +43 -0
  648. package/dist/server/registerApplicationTools/traceFeature.js +8 -3
  649. package/dist/server/registerApplicationTools/traceSemantics.js +8 -3
  650. package/dist/server/registerApplicationTools.js +2 -0
  651. package/dist/server/registerBrowserScenarioTool.js +6 -2
  652. package/dist/server/registerBrowserTools.js +13 -2
  653. package/dist/server/registerCloseLifecycleTool.js +1 -1
  654. package/dist/server/registerElectronTools.js +21 -7
  655. package/dist/server/registerEnhancedTools.js +28 -1
  656. package/dist/server/registerFirmwareTools.js +22 -0
  657. package/dist/server/registerFunctionComparisonTool.js +1 -1
  658. package/dist/server/registerInvestigationTools/helpers.js +2 -1
  659. package/dist/server/registerJavaScriptRecoveryTool.js +17 -0
  660. package/dist/server/registerJavaScriptRuntimeObservationTools.js +9 -4
  661. package/dist/server/registerManagedTools.js +4 -4
  662. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +2 -2
  663. package/dist/server/registerManagedWorkflowTools/contract.js +1 -1
  664. package/dist/server/registerManagedWorkflowTools/evidence.js +1 -1
  665. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +1 -1
  666. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +1 -1
  667. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +2 -2
  668. package/dist/server/registerNativeTools.js +1 -1
  669. package/dist/server/registerOfficialTools.js +4 -1
  670. package/dist/server/registerProcessComparisonTool.js +5 -2
  671. package/dist/server/registerPrompts.js +5 -1
  672. package/dist/server/registerSessionTools.js +4 -2
  673. package/dist/server/registerWebModuleTool.js +17 -0
  674. package/dist/server/registerWebRuntimeTools.js +31 -0
  675. package/dist/server/registerWebScriptTool.js +18 -0
  676. package/dist/server/registerWebSourceLocationTool.js +17 -0
  677. package/dist/server/runDerivedOperation.js +1 -1
  678. package/dist/server/sessionAvailabilityPolicy.js +24 -9
  679. package/dist/server/sessionEvidence.js +1 -1
  680. package/dist/server/toolResult.js +2 -1
  681. package/dist/windows/WindowsNativeLoader.js +108 -0
  682. package/dist/windows/WindowsOwnedProcess.js +170 -0
  683. package/dist/windows/WindowsPrivateRuntime.js +137 -0
  684. package/install.sh +16 -8
  685. package/native/windows/README.md +107 -0
  686. package/native/windows/build/manifest.json +9 -0
  687. package/native/windows/build/rea-windows-x64.node +0 -0
  688. package/package.json +70 -35
  689. package/scripts/hopper-demo-x11.py +67 -8
  690. package/scripts/rea.mjs +10 -2
  691. package/scripts/verify-windows-native-artifact.mjs +39 -0
  692. package/skills/reverse-engineer-anything/SKILL.md +92 -24
  693. package/skills/reverse-engineer-anything/references/android-applications.md +31 -0
  694. package/skills/reverse-engineer-anything/references/javascript-applications.md +19 -2
  695. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +61 -4
  696. package/dist/application/JavaScriptApplicationService.js +0 -52
  697. package/dist/application/runtime.js +0 -51
  698. package/dist/browser/CdpCanonicalJsonDigest.js +0 -9
  699. package/dist/domain/appleApplication.js +0 -181
  700. package/dist/domain/errors.js +0 -324
  701. package/dist/domain/javascriptAstValues.js +0 -13
  702. package/dist/domain/javascriptSemanticTraversal.js +0 -30
  703. package/dist/native/NativeHostCapabilities.js +0 -23
  704. /package/dist/application/{BinarySessionPort.js → DirectAnalysisDependencies.js} +0 -0
  705. /package/dist/application/{ElectronActiveObservationPort.js → WebModulePorts.js} +0 -0
  706. /package/dist/application/{ElectronObservationPort.js → WebRuntimePort.js} +0 -0
  707. /package/dist/application/{JavaScriptArtifactAnalysisTypes.js → WebScriptArtifactPort.js} +0 -0
  708. /package/dist/application/{JavaScriptRuntimeObservationPort.js → WebSourceLocationPorts.js} +0 -0
  709. /package/dist/{domain/electronStaticAnalysisTypes.js → application/android/AndroidAnalysisPort.js} +0 -0
  710. /package/dist/application/{AbortablePromise.js → binary/AbortablePromise.js} +0 -0
  711. /package/dist/{domain/javascriptSemanticValueTypes.js → application/binary/BinarySessionPort.js} +0 -0
  712. /package/dist/application/{BinarySessionStatus.js → binary/BinarySessionStatus.js} +0 -0
  713. /package/dist/application/{ElectronBoundaryGraph.js → javascript/ElectronBoundaryGraph.js} +0 -0
  714. /package/dist/application/{ElectronBoundaryGraphIpc.js → javascript/ElectronBoundaryGraphIpc.js} +0 -0
  715. /package/dist/application/{ElectronBoundaryGraphNative.js → javascript/ElectronBoundaryGraphNative.js} +0 -0
  716. /package/dist/application/{ElectronBoundaryGraphWindows.js → javascript/ElectronBoundaryGraphWindows.js} +0 -0
  717. /package/dist/application/{JavaScriptArtifactGraphBundlers.js → javascript/JavaScriptArtifactGraphBundlers.js} +0 -0
  718. /package/dist/application/{JavaScriptArtifactGraphEvidence.js → javascript/JavaScriptArtifactGraphEvidence.js} +0 -0
  719. /package/dist/application/{JavaScriptArtifactReconstructionInput.js → javascript/JavaScriptArtifactReconstructionInput.js} +0 -0
  720. /package/dist/application/{JavaScriptSemanticGraphEvidence.js → javascript/JavaScriptSemanticGraphEvidence.js} +0 -0
  721. /package/dist/application/{JavaScriptSemanticGraphValueProjection.js → javascript/JavaScriptSemanticGraphValueProjection.js} +0 -0
  722. /package/dist/domain/{electronStaticAnalysis.js → javascript/electronStaticAnalysis.js} +0 -0
  723. /package/dist/domain/{javascriptExportShapeComparisonIdentity.js → javascript/javascriptExportShapeComparisonIdentity.js} +0 -0
  724. /package/dist/domain/{javascriptRuntimeReconciliation.js → javascript/javascriptRuntimeReconciliation.js} +0 -0
  725. /package/dist/domain/{javascriptRuntimeReconciliationRuntime.js → javascript/javascriptRuntimeReconciliationRuntime.js} +0 -0
  726. /package/dist/domain/{javascriptSemanticCoverage.js → javascript/javascriptSemanticCoverage.js} +0 -0
  727. /package/dist/domain/{javascriptSemanticDerivedAnalysis.js → javascript/javascriptSemanticDerivedAnalysis.js} +0 -0
  728. /package/dist/domain/{javascriptSemanticGraphSerialization.js → javascript/javascriptSemanticGraphSerialization.js} +0 -0
  729. /package/dist/domain/{javascriptSemanticIr.js → javascript/javascriptSemanticIr.js} +0 -0
  730. /package/dist/domain/{javascriptSemanticQueryRelations.js → javascript/javascriptSemanticQueryRelations.js} +0 -0
  731. /package/dist/domain/{javascriptSemanticState.js → javascript/javascriptSemanticState.js} +0 -0
  732. /package/dist/domain/{javascriptStaticAnalysisFindings.js → javascript/javascriptStaticAnalysisFindings.js} +0 -0
  733. /package/dist/domain/{javascriptStaticAnalysisState.js → javascript/javascriptStaticAnalysisState.js} +0 -0
  734. /package/dist/domain/{javascriptStaticAnalysisTypes.js → javascript/javascriptStaticAnalysisTypes.js} +0 -0
  735. /package/dist/domain/{managedApplicationGraphCoverage.js → managed/managedApplicationGraphCoverage.js} +0 -0
  736. /package/dist/domain/{managedApplicationGraphNodeCoverage.js → managed/managedApplicationGraphNodeCoverage.js} +0 -0
  737. /package/dist/domain/{nativeApiBoundary.js → native/nativeApiBoundary.js} +0 -0
  738. /package/dist/domain/{nativeInstruction.js → native/nativeInstruction.js} +0 -0
  739. /package/dist/domain/{nativeValueFlow.js → native/nativeValueFlow.js} +0 -0
  740. /package/dist/domain/{nativeValueTrace.js → native/nativeValueTrace.js} +0 -0
@@ -0,0 +1,140 @@
1
+ /** Ghidra build whose bridge behavior this REA release verifies. */
2
+ export const SUPPORTED_GHIDRA_VERSION = "12.1.4";
3
+ /**
4
+ * JDK major used when an installation omits `application.java.min`.
5
+ * Admission uses that installation's `application.java.min` and
6
+ * `application.java.max`. An empty maximum means the release sets no upper bound.
7
+ */
8
+ export const SUPPORTED_GHIDRA_JAVA_MAJOR = 21;
9
+ const GHIDRA_RELEASE_PATTERN = /^(\d+)\.(\d+)(?:\.(\d+))?([-+].*)?$/u;
10
+ const JAVA_MAJOR_PATTERN = /^(\d+)(?:\.\d+)*$/u;
11
+ /** Read the version and Java bounds Ghidra publishes for one installation. */
12
+ export const ghidraApplicationProperties = (content) => ({
13
+ providerVersion: propertyValue(content, "application.version"),
14
+ javaMinimum: parseJavaBound(propertyValue(content, "application.java.min")),
15
+ javaMaximum: parseJavaBound(propertyValue(content, "application.java.max")),
16
+ });
17
+ /** Classify `application.version` against the verified release line. */
18
+ export const ghidraReleaseCompatibility = (raw) => {
19
+ if (raw === null || raw === undefined)
20
+ return { status: "unresolved", raw: null };
21
+ const version = parseGhidraRelease(raw);
22
+ if (version === undefined)
23
+ return { status: "unresolved", raw };
24
+ if (raw === SUPPORTED_GHIDRA_VERSION)
25
+ return { status: "verified", version, raw };
26
+ const verified = verifiedGhidraRelease();
27
+ return version.major === verified.major && version.minor === verified.minor
28
+ ? { status: "compatible", version, raw }
29
+ : { status: "unsupported", version, raw };
30
+ };
31
+ /**
32
+ * Limitation recorded when a session runs a compatible build other than the
33
+ * verified release. The observed version stays on the provider identity.
34
+ */
35
+ export const unverifiedGhidraBuildLimitation = (providerVersion) => {
36
+ const compatibility = ghidraReleaseCompatibility(providerVersion);
37
+ if (compatibility.status !== "compatible")
38
+ return undefined;
39
+ return `This session uses Ghidra ${providerVersion}. The bridge is verified against ${SUPPORTED_GHIDRA_VERSION}; other ${ghidraReleaseLine()} builds are accepted and the observed version is reported.`;
40
+ };
41
+ /** Release line accepted by this bridge, such as `12.1.x`. */
42
+ export const ghidraReleaseLine = () => {
43
+ const verified = verifiedGhidraRelease();
44
+ return `${String(verified.major)}.${String(verified.minor)}.x`;
45
+ };
46
+ /** Detail for the installation version check, including the accepted line. */
47
+ export const ghidraVersionDetail = (raw) => {
48
+ const compatibility = ghidraReleaseCompatibility(raw);
49
+ switch (compatibility.status) {
50
+ case "unresolved":
51
+ return compatibility.raw ?? "unknown";
52
+ case "verified":
53
+ return compatibility.raw;
54
+ case "compatible":
55
+ return `${compatibility.raw}; compatible ${ghidraReleaseLine()} release (verified build ${SUPPORTED_GHIDRA_VERSION})`;
56
+ case "unsupported":
57
+ return `${compatibility.raw}; accepted releases are ${ghidraReleaseLine()} (verified build ${SUPPORTED_GHIDRA_VERSION})`;
58
+ default: {
59
+ const unreachable = compatibility;
60
+ return unreachable;
61
+ }
62
+ }
63
+ };
64
+ /** Whether this release line can run the packaged bridge. */
65
+ export const ghidraReleaseAccepted = (raw) => {
66
+ const status = ghidraReleaseCompatibility(raw).status;
67
+ return status === "verified" || status === "compatible";
68
+ };
69
+ /** Resolve JDK majors from `application.java.min` and `application.java.max`. */
70
+ export const ghidraJavaRequirement = (properties) => {
71
+ const minimum = properties?.javaMinimum ?? { status: "absent" };
72
+ const maximum = properties?.javaMaximum ?? { status: "absent" };
73
+ if (minimum.status === "unresolved")
74
+ return unresolvedJavaRequirement(`application.java.min=${minimum.raw}`);
75
+ if (maximum.status === "unresolved")
76
+ return unresolvedJavaRequirement(`application.java.max=${maximum.raw}`);
77
+ const minimumMajor = minimum.status === "major" ? minimum.major : SUPPORTED_GHIDRA_JAVA_MAJOR;
78
+ const maximumMajor = maximum.status === "major" ? maximum.major : null;
79
+ if (maximumMajor !== null && maximumMajor < minimumMajor)
80
+ return unresolvedJavaRequirement(`application.java.max=${String(maximumMajor)} is below application.java.min=${String(minimumMajor)}`);
81
+ return { minimumMajor, maximumMajor, unresolved: null };
82
+ };
83
+ /** Caller-facing description of one resolved or unreadable JDK range. */
84
+ export const ghidraJavaRangeLabel = (requirement) => {
85
+ if (requirement.unresolved !== null)
86
+ return "a 64-bit full JDK matching the installation's declared Java bounds";
87
+ if (requirement.maximumMajor === null)
88
+ return `a 64-bit full JDK ${String(requirement.minimumMajor)} or newer`;
89
+ if (requirement.maximumMajor === requirement.minimumMajor)
90
+ return `a 64-bit full JDK ${String(requirement.minimumMajor)}`;
91
+ return `a 64-bit full JDK ${String(requirement.minimumMajor)} through ${String(requirement.maximumMajor)}`;
92
+ };
93
+ /** Whether an observed JDK satisfies the installation's declared range. */
94
+ export const ghidraJavaMajorAccepted = (major, requirement) => requirement.unresolved === null &&
95
+ major >= requirement.minimumMajor &&
96
+ (requirement.maximumMajor === null || major <= requirement.maximumMajor);
97
+ const verifiedGhidraRelease = () => {
98
+ const version = parseGhidraRelease(SUPPORTED_GHIDRA_VERSION);
99
+ if (version === undefined)
100
+ throw new TypeError(`SUPPORTED_GHIDRA_VERSION ${SUPPORTED_GHIDRA_VERSION} is not a Ghidra release`);
101
+ return version;
102
+ };
103
+ const parseGhidraRelease = (raw) => {
104
+ const match = GHIDRA_RELEASE_PATTERN.exec(raw);
105
+ const major = integerGroup(match?.[1]);
106
+ const minor = integerGroup(match?.[2]);
107
+ if (match === null || major === undefined || minor === undefined)
108
+ return undefined;
109
+ const patch = match[3] === undefined ? 0 : integerGroup(match[3]);
110
+ return patch === undefined ? undefined : { major, minor, patch };
111
+ };
112
+ const parseJavaBound = (raw) => {
113
+ if (raw === null)
114
+ return { status: "absent" };
115
+ const major = integerGroup(JAVA_MAJOR_PATTERN.exec(raw)?.[1]);
116
+ return major === undefined
117
+ ? { status: "unresolved", raw }
118
+ : { status: "major", major };
119
+ };
120
+ const integerGroup = (value) => {
121
+ if (value === undefined)
122
+ return undefined;
123
+ const parsed = Number(value);
124
+ return Number.isSafeInteger(parsed) ? parsed : undefined;
125
+ };
126
+ const unresolvedJavaRequirement = (unresolved) => ({
127
+ minimumMajor: SUPPORTED_GHIDRA_JAVA_MAJOR,
128
+ maximumMajor: null,
129
+ unresolved,
130
+ });
131
+ const propertyValue = (content, name) => {
132
+ for (const line of content.split(/\r?\n/u)) {
133
+ const separator = line.indexOf("=");
134
+ if (separator < 0 || line.slice(0, separator).trim() !== name)
135
+ continue;
136
+ const value = line.slice(separator + 1).trim();
137
+ return value.length === 0 ? null : value;
138
+ }
139
+ return null;
140
+ };
@@ -1,9 +1,14 @@
1
1
  import { z } from "zod";
2
- import { AnalysisInputError, AnalysisOutputError } from "../domain/errors.js";
2
+ import { nativeLoadImageObservationSchema } from "../domain/native/nativeLoadImage.js";
3
+ import { AnalysisInputError, AnalysisOutputError, } from "../domain/analysisErrorCore.js";
3
4
  import { functionBodySchema, functionBodyEntryAgrees, } from "../domain/hopperValues.js";
5
+ import { jsonValueSchema } from "../domain/jsonValue.js";
4
6
  import { err, ok } from "../domain/result.js";
5
7
  /** Read-only direct inventory operations admitted by the Ghidra adapter. */
6
8
  export const GHIDRA_INVENTORY_OPERATIONS = [
9
+ "inspect_native_load_image",
10
+ "read_bytes",
11
+ "address_to_file_offset",
7
12
  "address_name",
8
13
  "list_documents",
9
14
  "list_names",
@@ -30,6 +35,16 @@ const searchInput = {
30
35
  document,
31
36
  };
32
37
  const inputSchemas = {
38
+ inspect_native_load_image: z.strictObject({}),
39
+ read_bytes: z.strictObject({
40
+ document,
41
+ address: explicitAddress,
42
+ length: z.number().int().min(1).max(Number.MAX_SAFE_INTEGER).default(256),
43
+ }),
44
+ address_to_file_offset: z.strictObject({
45
+ document,
46
+ address: explicitAddress,
47
+ }),
33
48
  address_name: z.object({ document, address: explicitAddress }).strict(),
34
49
  list_documents: z.object({}).strict(),
35
50
  list_names: z.object({ document, address: filteredAddress }).strict(),
@@ -173,6 +188,28 @@ const containingProcedure = z.discriminatedUnion("found", [
173
188
  .strict(),
174
189
  ]);
175
190
  const resultSchemas = {
191
+ inspect_native_load_image: nativeLoadImageObservationSchema,
192
+ read_bytes: z
193
+ .strictObject({
194
+ address: canonicalAddress,
195
+ requested_bytes: z.number().int().min(1),
196
+ returned_bytes: z.number().int().min(0),
197
+ bytes_hex: z.string().regex(/^(?:[a-f0-9]{2})*$/u),
198
+ complete: z.boolean(),
199
+ })
200
+ .superRefine((value, context) => {
201
+ if (value.returned_bytes * 2 !== value.bytes_hex.length ||
202
+ value.returned_bytes > value.requested_bytes ||
203
+ value.complete !== (value.returned_bytes === value.requested_bytes))
204
+ context.addIssue({
205
+ code: "custom",
206
+ message: "Read-byte length and completeness disagree",
207
+ });
208
+ }),
209
+ address_to_file_offset: z.strictObject({
210
+ address: canonicalAddress,
211
+ file_offset: z.number().int().min(0).max(Number.MAX_SAFE_INTEGER),
212
+ }),
176
213
  address_name: z.string().nullable(),
177
214
  list_documents: z.array(z.string().min(1)).length(1),
178
215
  list_names: z.array(symbolItem),
@@ -188,6 +225,6 @@ const resultSchemas = {
188
225
  export const parseGhidraInventoryResult = (operation, value) => {
189
226
  const parsed = resultSchemas[operation].safeParse(value);
190
227
  return parsed.success
191
- ? ok(parsed.data)
228
+ ? ok(jsonValueSchema.parse(parsed.data))
192
229
  : err(new AnalysisOutputError(operation, "Ghidra bridge output did not match the inventory contract", { cause: parsed.error }));
193
230
  };
@@ -1,11 +1,13 @@
1
1
  import { mkdir } from "node:fs/promises";
2
2
  import { basename, dirname, join, win32 } from "node:path";
3
3
  import writeFileAtomic from "write-file-atomic";
4
- import { AnalysisCancelledError } from "../domain/errors.js";
4
+ import { windowsPrivateRuntime } from "../windows/WindowsPrivateRuntime.js";
5
+ import { AnalysisCancelledError } from "../domain/analysisErrorCore.js";
5
6
  import { err, ok } from "../domain/result.js";
6
7
  import { cleanupOwnedProcessGroup, cleanupWindowsProcessTree, } from "../process/ProcessOwnership.js";
7
8
  import { spawnOwnedProviderProcess, } from "../process/ProviderProcess.js";
8
9
  import { ghidraJavaEnvironment } from "./GhidraInstallation.js";
10
+ import { snapshotGhidraExtensions, } from "./extensions/GhidraExtensions.js";
9
11
  /** Local launch failure retained as the cause of a provider-neutral error. */
10
12
  export class GhidraLaunchError extends Error {
11
13
  constructor(message, options) {
@@ -26,15 +28,9 @@ export class GhidraHeadlessLauncher {
26
28
  const platform = this.options.platform ?? process.platform;
27
29
  let started;
28
30
  try {
29
- await Promise.all([
30
- paths.projectRoot,
31
- paths.homeRoot,
32
- paths.tempRoot,
33
- paths.cacheRoot,
34
- paths.configRoot,
35
- paths.dataRoot,
36
- ].map((path) => mkdir(path, { recursive: true, mode: 0o700 })));
37
- await writeFileAtomic(paths.descriptorPath, `${JSON.stringify({
31
+ await createGhidraRuntimeDirectories(paths, platform);
32
+ const extensions = await snapshotGhidraExtensions(this.options.analysisExtensions ?? [], session.runtimeRoot);
33
+ await writeGhidraRuntimeFile(paths.descriptorPath, `${JSON.stringify({
38
34
  transport: session.transport,
39
35
  endpoint_path: session.endpointPath,
40
36
  token: session.token,
@@ -42,7 +38,10 @@ export class GhidraHeadlessLauncher {
42
38
  target_sha256: session.targetSha256,
43
39
  provider_version: session.providerVersion,
44
40
  profile_digest: session.profileDigest,
45
- })}\n`, { encoding: "utf8", mode: 0o600 });
41
+ ...(extensions.length === 0
42
+ ? {}
43
+ : { analysis_extensions: extensions }),
44
+ })}\n`, platform);
46
45
  if (isAborted(options.signal))
47
46
  return err(new AnalysisCancelledError("open_binary"));
48
47
  const headlessArguments = ghidraHeadlessArguments({
@@ -52,6 +51,9 @@ export class GhidraHeadlessLauncher {
52
51
  descriptorPath: paths.descriptorPath,
53
52
  ghidraLogPath: paths.ghidraLogPath,
54
53
  scriptLogPath: paths.scriptLogPath,
54
+ ...(this.options.dosCom === undefined
55
+ ? {}
56
+ : { dosCom: this.options.dosCom }),
55
57
  ...(this.options.dosMz === undefined
56
58
  ? {}
57
59
  : { dosMz: this.options.dosMz }),
@@ -73,19 +75,17 @@ export class GhidraHeadlessLauncher {
73
75
  expectedCommand: null,
74
76
  windowsVerbatimArguments: platform === "win32",
75
77
  platform,
76
- env: ghidraLaunchEnvironment(paths, this.options.javaHome, platform),
78
+ env: ghidraLaunchEnvironment(paths, this.options.javaHome, platform, command.command),
77
79
  });
78
- await writeFileAtomic(paths.ownershipPath, `${JSON.stringify({
80
+ await writeGhidraRuntimeFile(paths.ownershipPath, `${JSON.stringify({
79
81
  run_id: session.runId,
80
82
  pid: started.ownership.leaderPid,
81
83
  process_group_id: started.ownership.processGroupId,
82
84
  parent_pid: process.pid,
83
- ownership_kind: platform === "win32"
84
- ? "windows-process-tree-p0"
85
- : "posix-process-group",
85
+ ownership_kind: platform === "win32" ? "windows-job-object" : "posix-process-group",
86
86
  launcher: this.options.analyzeHeadlessPath,
87
87
  created_at: new Date().toISOString(),
88
- })}\n`, { encoding: "utf8", mode: 0o600 });
88
+ })}\n`, platform);
89
89
  if (isAborted(options.signal)) {
90
90
  await cleanupStartedProcess(started, platform);
91
91
  return err(new AnalysisCancelledError("open_binary"));
@@ -100,7 +100,10 @@ export class GhidraHeadlessLauncher {
100
100
  }
101
101
  catch (cause) {
102
102
  if (started !== undefined)
103
- await cleanupStartedProcess(started, platform).catch(() => undefined);
103
+ await cleanupStartedProcess(started, platform).catch((cause) => {
104
+ // best-effort cleanup: started-process cleanup must not mask the launch failure.
105
+ void cause;
106
+ });
104
107
  return isAborted(options.signal)
105
108
  ? err(new AnalysisCancelledError("open_binary"))
106
109
  : err(new GhidraLaunchError("Ghidra headless launch failed", { cause }));
@@ -146,9 +149,11 @@ const quoteWindowsBatchToken = (value) => {
146
149
  throw new GhidraLaunchError("Windows Ghidra P0 paths cannot contain command-interpreter metacharacters");
147
150
  return `"${value}"`;
148
151
  };
149
- const cleanupStartedProcess = (started, platform) => platform === "win32"
150
- ? cleanupWindowsProcessTree(started.ownership.leaderPid)
151
- : cleanupOwnedProcessGroup(started.ownership);
152
+ const cleanupStartedProcess = (started, platform) => started.cleanup !== undefined
153
+ ? started.cleanup()
154
+ : platform === "win32"
155
+ ? cleanupWindowsProcessTree(started.ownership.leaderPid)
156
+ : cleanupOwnedProcessGroup(started.ownership);
152
157
  /** Build the complete read-only headless invocation in deterministic order. */
153
158
  export const ghidraHeadlessArguments = (options) => [
154
159
  options.projectRoot,
@@ -164,7 +169,18 @@ export const ghidraHeadlessArguments = (options) => [
164
169
  "-cspec",
165
170
  "default",
166
171
  ]
167
- : []),
172
+ : options.dosCom === true
173
+ ? [
174
+ "-loader",
175
+ "BinaryLoader",
176
+ "-loader-baseAddr",
177
+ "1000:0100",
178
+ "-processor",
179
+ "x86:LE:16:Real Mode",
180
+ "-cspec",
181
+ "default",
182
+ ]
183
+ : []),
168
184
  "-readOnly",
169
185
  "-deleteProject",
170
186
  "-log",
@@ -173,8 +189,16 @@ export const ghidraHeadlessArguments = (options) => [
173
189
  options.scriptLogPath,
174
190
  "-scriptPath",
175
191
  dirname(options.bridgeScriptPath),
192
+ ...(options.dosCom === true
193
+ ? [
194
+ "-preScript",
195
+ join(dirname(options.bridgeScriptPath), "ReaGhidraPrepareCom.java"),
196
+ ]
197
+ : []),
176
198
  "-postScript",
177
- basename(options.bridgeScriptPath),
199
+ // Ghidra checks the caller's cwd before scriptPath for a basename. Select
200
+ // the packaged source explicitly so unrelated entries cannot shadow it.
201
+ options.bridgeScriptPath,
178
202
  options.descriptorPath,
179
203
  ];
180
204
  const ghidraRuntimePaths = (runtimeRoot) => ({
@@ -189,18 +213,50 @@ const ghidraRuntimePaths = (runtimeRoot) => ({
189
213
  ghidraLogPath: join(runtimeRoot, "ghidra.log"),
190
214
  scriptLogPath: join(runtimeRoot, "script.log"),
191
215
  });
192
- const ghidraLaunchEnvironment = (paths, javaHome, platform) => {
193
- // analyzeHeadless.bat wraps GHIDRA_HEADLESS_JAVA_OPTIONS in its own quotes
194
- // when it builds VMARG_LIST. Nested quotes break cmd.exe tokenization before
195
- // Ghidra starts, so keep this option list unquoted on every platform.
196
- const javaOptions = `-Duser.home=${paths.homeRoot} -Djava.io.tmpdir=${paths.tempRoot}`;
216
+ const createGhidraRuntimeDirectories = async (paths, platform) => {
217
+ if (platform === "win32") {
218
+ const runtime = windowsPrivateRuntime(dirname(paths.projectRoot));
219
+ for (const path of [
220
+ paths.projectRoot,
221
+ paths.homeRoot,
222
+ paths.tempRoot,
223
+ paths.cacheRoot,
224
+ paths.configRoot,
225
+ paths.dataRoot,
226
+ ])
227
+ runtime.mkdir(basename(path));
228
+ return;
229
+ }
230
+ await Promise.all([
231
+ paths.projectRoot,
232
+ paths.homeRoot,
233
+ paths.tempRoot,
234
+ paths.cacheRoot,
235
+ paths.configRoot,
236
+ paths.dataRoot,
237
+ ].map((path) => mkdir(path, { recursive: true, mode: 0o700 })));
238
+ };
239
+ const writeGhidraRuntimeFile = async (path, content, platform) => {
240
+ if (platform === "win32") {
241
+ windowsPrivateRuntime(dirname(path)).writeFile(basename(path), content);
242
+ return;
243
+ }
244
+ await writeFileAtomic(path, content, { encoding: "utf8", mode: 0o600 });
245
+ };
246
+ const ghidraLaunchEnvironment = (paths, javaHome, platform, executable) => {
197
247
  return {
198
248
  ...ghidraJavaEnvironment(javaHome, process.env, platform),
249
+ ...ghidraHeadlessJavaOptions(paths.homeRoot, paths.tempRoot, platform),
199
250
  HOME: paths.homeRoot,
200
251
  TMPDIR: paths.tempRoot,
201
252
  ...(platform === "win32"
202
253
  ? {
254
+ // Batch FOR /F launches another command interpreter through ComSpec.
255
+ // Use the same executable with the spelling consumed by cmd.exe.
256
+ ComSpec: executable.replaceAll("/", "\\"),
203
257
  USERPROFILE: paths.homeRoot,
258
+ APPDATA: paths.configRoot,
259
+ LOCALAPPDATA: paths.cacheRoot,
204
260
  TEMP: paths.tempRoot,
205
261
  TMP: paths.tempRoot,
206
262
  }
@@ -208,7 +264,24 @@ const ghidraLaunchEnvironment = (paths, javaHome, platform) => {
208
264
  XDG_CACHE_HOME: paths.cacheRoot,
209
265
  XDG_CONFIG_HOME: paths.configRoot,
210
266
  XDG_DATA_HOME: paths.dataRoot,
211
- GHIDRA_HEADLESS_JAVA_OPTIONS: javaOptions,
212
267
  };
213
268
  };
269
+ /** Encode provider-owned JVM paths for the parser that actually consumes them. */
270
+ export const ghidraHeadlessJavaOptions = (homeRoot, tempRoot, platform) => {
271
+ const options = [`-Duser.home=${homeRoot}`, `-Djava.io.tmpdir=${tempRoot}`];
272
+ // analyzeHeadless.bat quotes VMARG_LIST, then launch.bat expands it again.
273
+ // Inner quotes fail in cmd.exe; unquoted paths with spaces split at the JVM.
274
+ // JDK_JAVA_OPTIONS is parsed by Java itself, outside that batch expansion.
275
+ return platform === "win32"
276
+ ? {
277
+ JDK_JAVA_OPTIONS: [...options, "-XX:-UsePerfData"]
278
+ .map(quoteWindowsBatchToken)
279
+ .join(" "),
280
+ GHIDRA_HEADLESS_JAVA_OPTIONS: "",
281
+ }
282
+ : {
283
+ JDK_JAVA_OPTIONS: "",
284
+ GHIDRA_HEADLESS_JAVA_OPTIONS: options.join(" "),
285
+ };
286
+ };
214
287
  const isAborted = (signal) => signal?.aborted === true;
@@ -0,0 +1,36 @@
1
+ import { jsonValueSchema } from "../domain/jsonValue.js";
2
+ import { nativeLoadImageObservationSchema, nativeLoadImageSchema, } from "../domain/native/nativeLoadImage.js";
3
+ import { ProviderAdapterError } from "../domain/providerAdapterError.js";
4
+ import { err, ok } from "../domain/result.js";
5
+ import { attestGhidraDosComLoadImage, attestGhidraDosLoadImage, } from "./GhidraLoadImageValues.js";
6
+ /** Independently verify measured load-image observations for admitted DOS targets. */
7
+ export const attestGhidraNativeLoadImage = async (target, operation, measured, client, mapSessionError) => {
8
+ const observations = nativeLoadImageObservationSchema.parse(measured);
9
+ if (target.format !== "dos-mz" && target.format !== "dos-com") {
10
+ return ok(jsonValueSchema.parse(nativeLoadImageSchema.parse({
11
+ status: "unsupported",
12
+ reason: "Independent load-image verification currently supports DOS MZ and explicit DOS COM targets only.",
13
+ observations,
14
+ limitations: [
15
+ "Other formats expose measured mappings and source identities; no format-specific verification was performed.",
16
+ ],
17
+ })));
18
+ }
19
+ if (client.readTargetSnapshot === undefined)
20
+ return err(new ProviderAdapterError("ghidra", operation, {
21
+ diagnostics: {
22
+ reason: "The Ghidra client does not expose its immutable target snapshot for independent load-image verification.",
23
+ },
24
+ }));
25
+ const snapshot = await client.readTargetSnapshot();
26
+ if (!snapshot.ok)
27
+ return err(mapSessionError(snapshot.error));
28
+ const attested = (target.format === "dos-com"
29
+ ? attestGhidraDosComLoadImage
30
+ : attestGhidraDosLoadImage)(snapshot.value, target.sha256 ?? "", observations);
31
+ if (!attested.ok)
32
+ return err(new ProviderAdapterError("ghidra", operation, {
33
+ diagnostics: { reason: attested.error },
34
+ }));
35
+ return ok(jsonValueSchema.parse(attested.value));
36
+ };
@@ -0,0 +1,199 @@
1
+ import { createHash } from "node:crypto";
2
+ import { nativeLoadImageSchema, } from "../domain/native/nativeLoadImage.js";
3
+ import { parseDosMzHeader } from "../domain/dosMz.js";
4
+ import { validateDosComLength } from "../domain/dosCom.js";
5
+ import { err, ok } from "../domain/result.js";
6
+ const sha256 = (bytes) => createHash("sha256").update(bytes).digest("hex");
7
+ const address = (offset) => `0x${offset.toString(16)}`;
8
+ const limitations = [
9
+ "Verification covers original/modified FileBytes, every initialized target-backed header/module mapping, relocation records and the external entry point. Mapping ends are inclusive.",
10
+ "Appended overlay bytes are identified by file extent and included in FileBytes identity; they must not be mapped as initialized header/module memory. Uninitialized allocations are reported but their contents and DOS runtime behavior are not verified.",
11
+ "The fixed load segment 0x1000 describes Ghidra's analysis image, not a running DOS process. Verified import does not establish original source ownership or recovered program behavior.",
12
+ "A mismatching memory digest identifies the reported source range; it does not locate the first differing byte inside that range.",
13
+ ];
14
+ /** Verify measured MZ import state against the session's immutable snapshot. */
15
+ export const attestGhidraDosLoadImage = (bytes, targetSha256, observations) => {
16
+ if (sha256(bytes) !== targetSha256)
17
+ return err("Ghidra load-image snapshot digest does not match the admitted target");
18
+ const parsed = parseDosMzHeader(bytes);
19
+ if (!parsed.ok)
20
+ return parsed;
21
+ const header = parsed.value;
22
+ const loadSegment = 0x1000;
23
+ const modified = Buffer.from(bytes);
24
+ const expectedRelocations = [];
25
+ for (let index = 0; index < header.relocationCount; index += 1) {
26
+ const table = header.relocationTableOffset + index * 4;
27
+ const offset = bytes.readUInt16LE(table);
28
+ const segment = bytes.readUInt16LE(table + 2);
29
+ const fileOffset = header.headerBytes + segment * 16 + offset;
30
+ const original = modified
31
+ .subarray(fileOffset, fileOffset + 2)
32
+ .toString("hex");
33
+ const relocated = (modified.readUInt16LE(fileOffset) + loadSegment) & 0xffff;
34
+ modified.writeUInt16LE(relocated, fileOffset);
35
+ expectedRelocations.push({
36
+ address: address(loadSegment * 16 + segment * 16 + offset),
37
+ segment: (loadSegment + segment) & 0xffff,
38
+ offset,
39
+ status: "APPLIED",
40
+ type: 0,
41
+ values: [segment, offset, relocated],
42
+ original_bytes_hex: original,
43
+ memory_bytes_hex: modified
44
+ .subarray(fileOffset, fileOffset + 2)
45
+ .toString("hex"),
46
+ });
47
+ }
48
+ const checks = [];
49
+ const check = (name, expected, observed, fileOffset = null, location = null) => {
50
+ checks.push({
51
+ name,
52
+ matched: JSON.stringify(expected) === JSON.stringify(observed),
53
+ expected,
54
+ observed,
55
+ file_offset: fileOffset,
56
+ address: location,
57
+ });
58
+ };
59
+ check("executable_format", "Old-style DOS Executable (MZ)", observations.executable_format);
60
+ check("language_id", "x86:LE:16:Real Mode", observations.language_id);
61
+ check("compiler_spec_id", "default", observations.compiler_spec_id);
62
+ check("image_base", "0x0", observations.image_base);
63
+ check("default_address_space", "ram", observations.default_address_space);
64
+ check("source_file_count", 1, observations.source_files.length);
65
+ const source = observations.source_files[0];
66
+ check("source_file_size", bytes.length, source?.size ?? null);
67
+ check("original_file_sha256", targetSha256, source?.original_sha256 ?? null);
68
+ check("modified_file_sha256", sha256(modified), source?.modified_sha256 ?? null);
69
+ const entryAddress = address(((loadSegment + header.entrySegment) & 0xffff) * 16 + header.entryOffset);
70
+ check("entry_points", [entryAddress], [...observations.entry_points].sort());
71
+ // A multiset preserves duplicate relocations and aliases; iteration order is not semantic.
72
+ const rows = (values) => values
73
+ .map(({ segment: _segment, offset: _offset, ...value }) => JSON.stringify(value))
74
+ .sort();
75
+ check("relocation_address_aliases", [], observations.relocations.filter((row) => row.segment === null ||
76
+ row.offset === null ||
77
+ address(row.segment * 16 + row.offset) !== row.address));
78
+ check("relocation_records", rows(expectedRelocations), rows(observations.relocations));
79
+ checkMappings(header, loadSegment * 16, bytes, modified, observations, check);
80
+ return ok(nativeLoadImageSchema.parse({
81
+ status: checks.every((item) => item.matched) ? "verified" : "mismatch",
82
+ format: "dos-mz",
83
+ target_sha256: targetSha256,
84
+ load_segment: loadSegment,
85
+ header_bytes: header.headerBytes,
86
+ module_bytes: header.moduleBytes,
87
+ overlay_bytes: header.overlayBytes,
88
+ entry: {
89
+ relative_segment: header.entrySegment,
90
+ offset: header.entryOffset,
91
+ linear_address: entryAddress,
92
+ },
93
+ observations,
94
+ checks,
95
+ limitations,
96
+ }));
97
+ };
98
+ const checkMappings = (header, loadBase, bytes, modified, observations, check) => {
99
+ const backed = observations.mappings.filter((mapping) => mapping.source_file_index !== null);
100
+ const sorted = [...backed].sort((left, right) => (left.file_offset ?? -1) - (right.file_offset ?? -1));
101
+ let covered = 0;
102
+ for (let index = 0; index < sorted.length; index += 1) {
103
+ const mapping = sorted[index];
104
+ if (mapping === undefined)
105
+ continue;
106
+ const start = mapping.file_offset;
107
+ const end = start === null ? null : start + mapping.length;
108
+ const headerMapping = start !== null && end !== null && start >= 0 && end <= header.headerBytes;
109
+ const moduleMapping = start !== null &&
110
+ end !== null &&
111
+ start >= header.headerBytes &&
112
+ end <= header.imageBytes;
113
+ const at = `mapping[${index}]`;
114
+ check(`${at}.source_file_index`, 0, mapping.source_file_index, start, mapping.start);
115
+ check(`${at}.file_coverage_start`, covered, start, start, mapping.start);
116
+ check(`${at}.partition`, true, headerMapping || moduleMapping, start, mapping.start);
117
+ check(`${at}.initialized`, true, mapping.initialized, start, mapping.start);
118
+ check(`${at}.loaded`, moduleMapping, mapping.loaded, start, mapping.start);
119
+ check(`${at}.overlay`, headerMapping, mapping.overlay, start, mapping.start);
120
+ check(`${at}.address_space`, headerMapping ? "HEADER" : observations.default_address_space, mapping.address_space, start, mapping.start);
121
+ const expectedStart = start === null
122
+ ? null
123
+ : headerMapping
124
+ ? `HEADER:${address(start)}`
125
+ : address(loadBase + start - header.headerBytes);
126
+ const expectedEnd = start === null
127
+ ? null
128
+ : headerMapping
129
+ ? `HEADER:${address(start + mapping.length - 1)}`
130
+ : address(loadBase + start - header.headerBytes + mapping.length - 1);
131
+ check(`${at}.start`, expectedStart, mapping.start, start, mapping.start);
132
+ check(`${at}.end`, expectedEnd, mapping.end, start, mapping.end);
133
+ check(`${at}.memory_sha256`, start !== null && end !== null && end <= bytes.length
134
+ ? sha256(modified.subarray(start, end))
135
+ : null, mapping.sha256, start, mapping.start);
136
+ covered = end ?? covered;
137
+ }
138
+ check("initialized_file_coverage_end", header.imageBytes, covered);
139
+ check("initialized_unbacked_mappings", [], observations.mappings.filter((mapping) => mapping.initialized && mapping.source_file_index === null));
140
+ };
141
+ /** Verify the explicit DOS COM interpretation against measured bytes and context. */
142
+ export const attestGhidraDosComLoadImage = (bytes, targetSha256, observations) => {
143
+ if (sha256(bytes) !== targetSha256)
144
+ return err("Ghidra COM snapshot digest does not match the admitted target");
145
+ const length = validateDosComLength(bytes.length);
146
+ if (!length.ok)
147
+ return length;
148
+ const checks = [];
149
+ const check = (name, expected, observed, fileOffset = null, location = null) => {
150
+ checks.push({
151
+ name,
152
+ matched: JSON.stringify(expected) === JSON.stringify(observed),
153
+ expected,
154
+ observed,
155
+ file_offset: fileOffset,
156
+ address: location,
157
+ });
158
+ };
159
+ const source = observations.source_files[0];
160
+ check("executable_format", "Raw Binary", observations.executable_format);
161
+ check("language_id", "x86:LE:16:Real Mode", observations.language_id);
162
+ check("compiler_spec_id", "default", observations.compiler_spec_id);
163
+ check("image_base", "0x0", observations.image_base);
164
+ check("default_address_space", "ram", observations.default_address_space);
165
+ check("source_file_count", 1, observations.source_files.length);
166
+ check("source_file_size", bytes.length, source?.size ?? null);
167
+ check("original_file_sha256", targetSha256, source?.original_sha256 ?? null);
168
+ check("modified_file_sha256", targetSha256, source?.modified_sha256 ?? null);
169
+ check("entry_points", ["0x10100"], [...observations.entry_points].sort());
170
+ check("entry_context", [
171
+ {
172
+ address: "0x10100",
173
+ registers: ["CS", "DS", "ES", "SS"].map((name) => ({
174
+ name,
175
+ value_hex: "0x1000",
176
+ })),
177
+ },
178
+ ], observations.entry_context);
179
+ check("relocation_records", [], observations.relocations);
180
+ checkMappings({ headerBytes: 0, imageBytes: bytes.length }, 0x10100, bytes, bytes, observations, check);
181
+ return ok(nativeLoadImageSchema.parse({
182
+ status: checks.every((item) => item.matched) ? "verified" : "mismatch",
183
+ format: "dos-com",
184
+ target_sha256: targetSha256,
185
+ load_segment: 0x1000,
186
+ header_bytes: 0,
187
+ module_bytes: bytes.length,
188
+ overlay_bytes: 0,
189
+ entry: { relative_segment: 0, offset: 0x100, linear_address: "0x10100" },
190
+ observations,
191
+ checks,
192
+ limitations: [
193
+ "DOS COM is a headerless interpretation explicitly selected by the caller, not format identification from file bytes.",
194
+ "Verification covers complete original/modified source identity, mapped file bytes, entry and measured CS/DS/ES/SS entry context. Context 0x1000 is imposed for analysis; it is not an observed running process.",
195
+ "The PSP, initial stack contents/registers, DOS interrupts, PC-98 devices and runtime behavior are not modeled or verified. No original executable bytes are changed.",
196
+ "Mapping ends are inclusive; a mismatching digest identifies its source range, not the first differing byte.",
197
+ ],
198
+ }));
199
+ };