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
@@ -1,5 +1,7 @@
1
+ import { readFile } from "node:fs/promises";
1
2
  import { launcherIdentityFailure } from "./ProcessOwnershipIdentity.js";
2
3
  import { descendantsOf, liveProcesses } from "./ProcessOwnershipProcessTree.js";
4
+ import { execFileOutput } from "./ExecFileOutput.js";
3
5
  /** Observe one group without signaling it, failing closed on identity doubt. */
4
6
  export const observeOwnedProcessGroupWithHost = async (ownership, host) => {
5
7
  let members;
@@ -95,12 +97,70 @@ const unavailableLineage = (ownership, reason) => ({
95
97
  processGroupId: ownership.processGroupId,
96
98
  reason,
97
99
  });
100
+ /** Parse the NUL-delimited Linux process environment without nameless keys. */
101
+ export const parseProcessEnvironment = (value) => Object.fromEntries(value
102
+ .split("\0")
103
+ .filter((entry) => entry.indexOf("=") > 0)
104
+ .map((entry) => {
105
+ const separator = entry.indexOf("=");
106
+ return [entry.slice(0, separator), entry.slice(separator + 1)];
107
+ }));
108
+ /** Create the operating-system process inspector for an explicit host context. */
109
+ export const createSystemProcessOwnershipHost = (platform = process.platform, hostEnvironment = process.env) => ({
110
+ platform,
111
+ async listProcesses() {
112
+ if (platform === "win32")
113
+ return [];
114
+ const { stdout } = await execFileOutput("ps", ["-axo", "pid=,ppid=,pgid=,stat=,command="], { env: hostEnvironment });
115
+ return stdout
116
+ .split("\n")
117
+ .map((line) => /\s*(\d+)\s+(\d+)\s+(\d+)\s+(\S+)\s+(.*)/u.exec(line))
118
+ .filter((match) => match !== null)
119
+ .map((match) => ({
120
+ pid: Number(match[1]),
121
+ parentPid: Number(match[2]),
122
+ processGroupId: Number(match[3]),
123
+ state: match[4] ?? "",
124
+ command: match[5] ?? "",
125
+ }));
126
+ },
127
+ async environment(pid) {
128
+ if (platform === "linux")
129
+ return parseProcessEnvironment(await readFile(`/proc/${pid}/environ`, "utf8"));
130
+ const { stdout } = await execFileOutput("ps", ["eww", "-p", String(pid)], {
131
+ env: hostEnvironment,
132
+ });
133
+ const observedEnvironment = {};
134
+ for (const match of stdout.matchAll(/(?:^|\s)([A-Za-z_][A-Za-z0-9_]*)=([^\s]*)/gu)) {
135
+ const name = match[1];
136
+ if (name !== undefined)
137
+ observedEnvironment[name] = match[2] ?? "";
138
+ }
139
+ return observedEnvironment;
140
+ },
141
+ signalGroup(processGroupId, signal) {
142
+ process.kill(-processGroupId, signal);
143
+ },
144
+ });
145
+ const systemHost = createSystemProcessOwnershipHost();
146
+ /** Observe one group without signaling it, failing closed on identity doubt. */
147
+ export const observeOwnedProcessGroup = async (ownership, host = systemHost) => observeOwnedProcessGroupWithHost(ownership, host);
148
+ /**
149
+ * Record the live launcher and descendant lineage after run-token validation.
150
+ *
151
+ * The observation is intentionally point-in-time. A verified empty descendant
152
+ * list means no descendants were live during this observation, not that the
153
+ * run never created a short-lived child.
154
+ */
155
+ export const observeOwnedProcessLineage = async (ownership, host = systemHost) => observeOwnedProcessLineageWithHost(ownership, host);
98
156
  const processIsGone = async (host, pid) => {
99
157
  try {
100
158
  return !liveProcesses(await host.listProcesses()).some((process) => process.pid === pid);
101
159
  }
102
- catch {
160
+ catch (cause) {
161
+ // best-effort cleanup: optional liveness probing; failure means not gone.
162
+ void cause;
103
163
  return false;
104
164
  }
105
165
  };
106
- const errorMessage = (cause) => cause instanceof Error ? cause.message : String(cause);
166
+ export const errorMessage = (cause) => cause instanceof Error ? cause.message : String(cause);
@@ -20,3 +20,16 @@ export const descendantsOf = (launcherPid, processes) => {
20
20
  }
21
21
  return descendants;
22
22
  };
23
+ /** Select the PTY root group and groups led by an observed captured process. */
24
+ export const selectCapturedProcessGroupIds = (rootPid, samples) => {
25
+ const processGroupIds = new Set([rootPid]);
26
+ for (const sample of samples) {
27
+ // A sampled member may transiently inherit an unrelated group. POSIX group
28
+ // leaders have pid === pgid, so only that observation establishes that the
29
+ // group leader itself belonged to the captured tree. Token checks below
30
+ // remain the final authority immediately before observation or signaling.
31
+ if (sample.pid === sample.process_group_id)
32
+ processGroupIds.add(sample.pid);
33
+ }
34
+ return [...processGroupIds];
35
+ };
@@ -1,8 +1,9 @@
1
1
  import { spawn } from "node:child_process";
2
+ import { WindowsOwnedProcess } from "../windows/WindowsOwnedProcess.js";
2
3
  const DEFAULT_TERMINATION_GRACE_MS = 250;
3
4
  const DEFAULT_KILL_GRACE_MS = 1_000;
4
5
  /**
5
- * Spawn a provider in a dedicated POSIX process group with an ownership token.
6
+ * Spawn a provider in an owned Windows job or dedicated POSIX process group.
6
7
  *
7
8
  * The caller remains responsible for persisting any ownership manifest and for
8
9
  * selecting provider-specific command arguments or environment values.
@@ -10,17 +11,33 @@ const DEFAULT_KILL_GRACE_MS = 1_000;
10
11
  export const spawnOwnedProviderProcess = async (options) => {
11
12
  const platform = options.platform ?? process.platform;
12
13
  const hostEnvironment = options.hostEnvironment ?? process.env;
14
+ const environment = {
15
+ ...hostEnvironment,
16
+ ...options.env,
17
+ REA_PROCESS_RUN_ID: options.runId,
18
+ };
19
+ if (platform === "win32" && process.platform === "win32") {
20
+ if (options.stdin === "pipe")
21
+ throw new Error("Owned Windows provider processes do not support protocol stdin");
22
+ const child = new WindowsOwnedProcess(options.command, options.arguments, options.cwd, environment, options.windowsVerbatimArguments ?? false);
23
+ return {
24
+ process: child,
25
+ ownership: {
26
+ runId: options.runId,
27
+ leaderPid: child.pid,
28
+ processGroupId: child.pid,
29
+ expectedParentPid: process.pid,
30
+ },
31
+ cleanup: () => child.cleanup(),
32
+ };
33
+ }
13
34
  const child = spawn(options.command, [...options.arguments], {
14
35
  shell: false,
15
36
  windowsHide: true,
16
- stdio: ["ignore", "pipe", "pipe"],
37
+ stdio: [options.stdin ?? "ignore", "pipe", "pipe"],
17
38
  detached: platform !== "win32",
18
39
  windowsVerbatimArguments: options.windowsVerbatimArguments ?? false,
19
- env: {
20
- ...hostEnvironment,
21
- ...options.env,
22
- REA_PROCESS_RUN_ID: options.runId,
23
- },
40
+ env: environment,
24
41
  ...(options.cwd === undefined ? {} : { cwd: options.cwd }),
25
42
  });
26
43
  await waitForSpawn(child);
@@ -41,7 +58,7 @@ export const spawnOwnedProviderProcess = async (options) => {
41
58
  /**
42
59
  * Supervises only generic process resources; wire protocol remains adapter-owned.
43
60
  *
44
- * Output retention is bounded per stream while byte totals remain exact. Stop
61
+ * Output retention is complete per stream; adapters own resource budgets. Stop
45
62
  * first honors token-verified group cleanup when supplied, otherwise it uses a
46
63
  * bounded TERM-to-KILL escalation for a directly owned child.
47
64
  */
@@ -51,6 +68,8 @@ export class ProviderProcessSupervisor {
51
68
  #stdout = new ProcessOutputCapture();
52
69
  #stderr = new ProcessOutputCapture();
53
70
  #exit = deferred();
71
+ #outputClose = deferred();
72
+ #outputClosed = false;
54
73
  #onStdout = (chunk) => {
55
74
  this.#capture("stdout", this.#stdout, chunk);
56
75
  };
@@ -62,6 +81,8 @@ export class ProviderProcessSupervisor {
62
81
  };
63
82
  #onClose = (code, signal) => {
64
83
  this.#recordExit(code, signal);
84
+ this.#outputClosed = true;
85
+ this.#outputClose.resolve(undefined);
65
86
  };
66
87
  #onError = (cause) => {
67
88
  this.#options.onDiagnostic?.({ type: "error", message: cause.message });
@@ -72,7 +93,8 @@ export class ProviderProcessSupervisor {
72
93
  constructor(launch, options = {}) {
73
94
  this.launch = launch;
74
95
  this.#options = options;
75
- this.#attach(launch.process.stdout, "stdout");
96
+ if (options.captureStdout !== false)
97
+ this.#attach(launch.process.stdout, "stdout");
76
98
  this.#attach(launch.process.stderr, "stderr");
77
99
  launch.process.once("exit", this.#onExit);
78
100
  launch.process.once("close", this.#onClose);
@@ -89,23 +111,18 @@ export class ProviderProcessSupervisor {
89
111
  signal: this.#exitObservation?.signal,
90
112
  };
91
113
  }
114
+ /** Begin a new observation on a retained process without retaining earlier output. */
115
+ resetOutput() {
116
+ this.#stdout.reset();
117
+ this.#stderr.reset();
118
+ }
92
119
  /** Wait for process exit up to a caller-owned bounded interval. */
93
120
  async waitForExit(timeoutMs) {
94
- if (this.#exitObservation !== undefined)
95
- return true;
96
- let timer;
97
- try {
98
- return await Promise.race([
99
- this.#exit.promise.then(() => true),
100
- new Promise((resolve) => {
101
- timer = setTimeout(() => resolve(false), Math.max(0, timeoutMs));
102
- }),
103
- ]);
104
- }
105
- finally {
106
- if (timer !== undefined)
107
- clearTimeout(timer);
108
- }
121
+ return waitForProcessEvent(this.#exitObservation !== undefined, this.#exit.promise, timeoutMs);
122
+ }
123
+ /** Wait until the producer has closed its output streams; exit alone does not prove complete output. */
124
+ async waitForOutputClose(timeoutMs) {
125
+ return waitForProcessEvent(this.#outputClosed, this.#outputClose.promise, timeoutMs);
109
126
  }
110
127
  /** Stop an owned process once; concurrent callers share the same escalation. */
111
128
  stop(options = {}) {
@@ -220,6 +237,10 @@ class ProcessOutputCapture {
220
237
  get bytes() {
221
238
  return this.#bytes;
222
239
  }
240
+ reset() {
241
+ this.#chunks.length = 0;
242
+ this.#bytes = 0;
243
+ }
223
244
  append(chunk) {
224
245
  this.#bytes += chunk.byteLength;
225
246
  this.#chunks.push(Buffer.from(chunk));
@@ -256,3 +277,20 @@ const waitForSpawn = (child) => new Promise((resolve, reject) => {
256
277
  child.once("spawn", onSpawn);
257
278
  child.once("error", onError);
258
279
  });
280
+ const waitForProcessEvent = async (observed, event, timeoutMs) => {
281
+ if (observed)
282
+ return true;
283
+ let timer;
284
+ try {
285
+ return await Promise.race([
286
+ event.then(() => true),
287
+ new Promise((resolve) => {
288
+ timer = setTimeout(() => resolve(false), Math.max(0, timeoutMs));
289
+ }),
290
+ ]);
291
+ }
292
+ finally {
293
+ if (timer !== undefined)
294
+ clearTimeout(timer);
295
+ }
296
+ };
@@ -1,4 +1,4 @@
1
- import { observeOwnedProcessLineage } from "./ProcessOwnership.js";
1
+ import { observeOwnedProcessLineage } from "./ProcessOwnershipObservation.js";
2
2
  /** Retain the latest truthful process-lineage observation for one client. */
3
3
  export class ProviderRunLineage {
4
4
  #observation = null;
@@ -1,5 +1,6 @@
1
+ import { systemWindowsNativeAuthority } from "../windows/WindowsNativeLoader.js";
1
2
  /** Stable explanation used whenever the native Windows authority is absent. */
2
- export const WINDOWS_NATIVE_AUTHORITY_UNAVAILABLE_REASON = "Verified Windows native authority is unavailable: Job Object process ownership, private runtime DACL enforcement, and reparse-safe path admission are not implemented; chmod(0700) is insufficient for Windows private DACL proof, and taskkill is not a Job Object security proof";
3
+ export const WINDOWS_NATIVE_AUTHORITY_UNAVAILABLE_REASON = "Windows native controls are unavailable in this runtime; use the Windows x64 REA package with its matching bundled native artifact.";
3
4
  /**
4
5
  * Describe native Windows controls without inferring them from taskkill,
5
6
  * chmod, symlink creation, or a numeric POSIX open flag.
@@ -17,6 +18,21 @@ export const windowsNativeCapabilities = (platform) => {
17
18
  reparse_safe_path_admission: notApplicable,
18
19
  };
19
20
  }
21
+ if (process.platform === "win32") {
22
+ const loaded = systemWindowsNativeAuthority();
23
+ const capability = loaded.available
24
+ ? { available: true, reason: null, proof: "native-authority" }
25
+ : {
26
+ available: false,
27
+ reason: loaded.reason,
28
+ proof: "not-proven",
29
+ };
30
+ return {
31
+ job_object_process_ownership: capability,
32
+ private_runtime_dacl: capability,
33
+ reparse_safe_path_admission: capability,
34
+ };
35
+ }
20
36
  const notProven = {
21
37
  available: false,
22
38
  reason: WINDOWS_NATIVE_AUTHORITY_UNAVAILABLE_REASON,
@@ -30,3 +46,6 @@ export const windowsNativeCapabilities = (platform) => {
30
46
  };
31
47
  /** Whether every native control needed for Windows isolation is proven. */
32
48
  export const hasWindowsNativeAuthority = (platform) => Object.values(windowsNativeCapabilities(platform)).every(({ available }) => available);
49
+ /** Preserve the actual loader or operating-system constraint in provider errors. */
50
+ export const windowsNativeAuthorityUnavailableReason = (platform) => windowsNativeCapabilities(platform).job_object_process_ownership.reason ??
51
+ WINDOWS_NATIVE_AUTHORITY_UNAVAILABLE_REASON;
@@ -31,6 +31,12 @@ export const traverseDirectory = async (state, current) => {
31
31
  state.entries.push(entryFailure(pathFromRoot(state.root, current.path), "directory", "changed", "Directory changed while it was read"));
32
32
  return { ok: true, value: undefined };
33
33
  }
34
+ if (current.path !== state.root)
35
+ state.entries.push({
36
+ status: "read",
37
+ kind: "directory",
38
+ path: pathFromRoot(state.root, current.path),
39
+ });
34
40
  const directories = [];
35
41
  for (const name of names.value) {
36
42
  const result = await processEntry(state, current, name, directories);
@@ -102,7 +108,6 @@ const processEntry = async (state, current, name, directories) => {
102
108
  if (metadata.value.isSymbolicLink())
103
109
  state.entries.push(await describeSymlink(state.root, absolute, path, state.signal));
104
110
  else if (metadata.value.isDirectory()) {
105
- state.entries.push({ status: "read", kind: "directory", path });
106
111
  directories.push({ path: absolute });
107
112
  }
108
113
  else if (!metadata.value.isFile())
@@ -189,7 +194,11 @@ const applyExclusion = (shouldExclude, path) => {
189
194
  try {
190
195
  return { ok: true, value: shouldExclude?.(path) === true };
191
196
  }
192
- catch {
197
+ catch (cause) {
198
+ // Exclusion predicates are caller-supplied; a throwing predicate fails
199
+ // closed and the caller-visible `{ ok: false }` preserves the rejection
200
+ // without propagating an arbitrary predicate cause.
201
+ void cause;
193
202
  return { ok: false };
194
203
  }
195
204
  };
@@ -102,6 +102,7 @@ export const readStableFile = async (request) => {
102
102
  return entryFailure(path, "file", "io", message, safeSize(expected.size));
103
103
  }
104
104
  finally {
105
+ // best-effort cleanup: file-handle close must not mask the read result.
105
106
  await handle?.close().catch(() => undefined);
106
107
  }
107
108
  };
@@ -1,14 +1,31 @@
1
1
  import { McpServer } from "@modelcontextprotocol/server";
2
+ import { isAbsolute } from "node:path";
2
3
  import { PRODUCT_IDENTITY } from "../identity.js";
3
4
  import { silentLogger } from "../logger.js";
4
5
  import { registerApplicationTools } from "./registerApplicationTools.js";
5
6
  import { registerArtifactTools } from "./registerArtifactTools.js";
6
7
  import { registerBrowserScenarioTool } from "./registerBrowserScenarioTool.js";
7
8
  import { registerBrowserTools } from "./registerBrowserTools.js";
9
+ import { registerWebScriptTool } from "./registerWebScriptTool.js";
10
+ import { registerWebModuleTool } from "./registerWebModuleTool.js";
11
+ import { createWebModuleTraceService } from "../composition/webModules.js";
12
+ import { createWebSourceLocationService } from "../composition/webSourceLocations.js";
13
+ import { registerWebSourceLocationTool } from "./registerWebSourceLocationTool.js";
14
+ import { createWebRuntimeService } from "../composition/webRuntime.js";
15
+ import { registerWebRuntimeTools } from "./registerWebRuntimeTools.js";
16
+ import { registerJavaScriptRecoveryTool } from "./registerJavaScriptRecoveryTool.js";
17
+ import { JavaScriptRecoveryService } from "../application/javascript/JavaScriptRecoveryService.js";
18
+ import { createJavaScriptRecoveryProvider } from "../composition/javascriptRecovery.js";
8
19
  import { registerElectronTools } from "./registerElectronTools.js";
9
20
  import { registerEnhancedTools } from "./registerEnhancedTools.js";
10
21
  import { registerJavaScriptRuntimeObservationTools } from "./registerJavaScriptRuntimeObservationTools.js";
11
22
  import { registerManagedTools } from "./registerManagedTools.js";
23
+ import { registerFirmwareTools } from "./registerFirmwareTools.js";
24
+ import { FirmwareAnalysisService } from "../application/firmware/FirmwareAnalysisService.js";
25
+ import { createFirmwareAnalysisProvider } from "../composition/firmware.js";
26
+ import { registerAndroidTools } from "./registerAndroidTools.js";
27
+ import { AndroidAnalysisService } from "../application/android/AndroidAnalysisService.js";
28
+ import { createAndroidAnalysisProvider } from "../composition/android.js";
12
29
  import { registerManagedWorkflowTools } from "./registerManagedWorkflowTools.js";
13
30
  import { registerNativeTools } from "./registerNativeTools.js";
14
31
  import { registerOfficialTools } from "./registerOfficialTools.js";
@@ -21,8 +38,24 @@ const installSessionToolAvailability = (server, session, options) => {
21
38
  if (session === undefined)
22
39
  return undefined;
23
40
  const policy = sessionAvailabilityPolicy(options.availabilityPolicy, {
41
+ optionalProviderLoadFailures: options.optionalProviderLoadFailures,
24
42
  optionalFeatures: {
43
+ webModuleResolutionEnabled: options.webModuleTrace !== undefined ||
44
+ isAbsolute(process.env.REA_BROWSER_EXECUTABLE ?? ""),
45
+ firmwareInspectionEnabled: options.firmwareAnalysis !== undefined ||
46
+ (process.platform === "linux" &&
47
+ isAbsolute(process.env.REA_BINWALK_COMMAND ?? "")),
48
+ firmwareExtractionEnabled: options.firmwareAnalysis !== undefined ||
49
+ (process.platform === "linux" &&
50
+ isAbsolute(process.env.REA_UNBLOB_COMMAND ?? "")),
51
+ androidAnalysisEnabled: options.androidAnalysis !== undefined ||
52
+ ((process.platform === "linux" || process.platform === "darwin") &&
53
+ isAbsolute(process.env.REA_JADX_MCP_JAR ?? "")),
25
54
  browserObservationEnabled: options.browserObservation !== undefined,
55
+ javascriptRecoveryEnabled: options.javascriptRecovery !== undefined ||
56
+ (process.platform === "linux" &&
57
+ process.arch === "x64" &&
58
+ isAbsolute(process.env.REA_WAKARU_COMMAND ?? "")),
26
59
  browserScenarioEnabled: options.browserScenarioCapture !== undefined,
27
60
  electronObservationEnabled: options.electronObservation !== undefined,
28
61
  electronAutomationEnabled: options.electronActiveObservation !== undefined,
@@ -53,19 +86,41 @@ export const createServer = (analysis, session, options = {}) => {
53
86
  const server = createMcpServer(session);
54
87
  const availability = installSessionToolAvailability(server, session, options);
55
88
  const toolLogger = logger.child({ layer: "server" });
56
- const { activeTarget, recordEvidence, recordEvidenceWithUnknown } = createSessionRecorders(server, session);
89
+ const { evidenceById, activeTarget, recordEvidence, recordEvidenceWithUnknown, } = createSessionRecorders(server, session);
57
90
  const toolContext = {
58
91
  server,
59
92
  analysis,
60
93
  session,
61
94
  options,
62
95
  logger: toolLogger,
96
+ evidenceById,
63
97
  activeTarget,
64
98
  recordEvidence,
65
99
  recordEvidenceWithUnknown,
66
100
  };
67
101
  registerBinaryAnalysisTools(toolContext);
102
+ const android = options.androidAnalysis ?? createAndroidAnalysisProvider();
103
+ const previousOnclose = server.server.onclose;
104
+ server.server.onclose = () => {
105
+ previousOnclose?.();
106
+ void android.close().catch((cause) => {
107
+ logger.error({ error: cause instanceof Error ? cause.message : String(cause) }, "Android provider cleanup failed");
108
+ });
109
+ };
110
+ const closeServer = server.close.bind(server);
111
+ server.close = async () => {
112
+ const results = await Promise.allSettled([closeServer(), android.close()]);
113
+ for (const result of results)
114
+ if (result.status === "rejected")
115
+ throw result.reason;
116
+ };
117
+ registerAndroidTools(server, new AndroidAnalysisService(android), toolLogger, recordEvidence);
118
+ registerFirmwareTools(server, new FirmwareAnalysisService(options.firmwareAnalysis ?? createFirmwareAnalysisProvider()), toolLogger, recordEvidence);
68
119
  registerObservationTools(toolContext);
120
+ registerWebModuleTool(server, options.webModuleTrace ?? createWebModuleTraceService(), toolLogger, recordEvidence);
121
+ registerWebSourceLocationTool(server, options.webSourceLocation ?? createWebSourceLocationService(), toolLogger, recordEvidence);
122
+ registerWebRuntimeTools(server, options.webRuntime ?? createWebRuntimeService(), toolLogger, recordEvidence);
123
+ registerJavaScriptRecoveryTool(server, new JavaScriptRecoveryService(options.javascriptRecovery ?? createJavaScriptRecoveryProvider()), toolLogger, recordEvidence);
69
124
  registerGuidedPrompts(server, analysis, session);
70
125
  if (session !== undefined) {
71
126
  registerSessionTools(server, session, toolLogger, {
@@ -79,6 +134,9 @@ export const createServer = (analysis, session, options = {}) => {
79
134
  return server;
80
135
  };
81
136
  const createSessionRecorders = (server, session) => ({
137
+ evidenceById: session === undefined
138
+ ? undefined
139
+ : (evidenceId) => session.evidenceById(evidenceId),
82
140
  activeTarget: session === undefined ? undefined : () => session.activeTarget(),
83
141
  recordEvidence: session === undefined
84
142
  ? undefined
@@ -125,26 +183,33 @@ const registerBinaryAnalysisTools = ({ server, analysis, session, logger, active
125
183
  session,
126
184
  });
127
185
  };
128
- const registerObservationTools = ({ server, options, logger, recordEvidence, recordEvidenceWithUnknown, }) => {
186
+ const registerObservationTools = ({ evidenceById, server, options, logger, recordEvidence, recordEvidenceWithUnknown, }) => {
129
187
  const common = { logger, recordEvidence };
188
+ registerWebScriptTool(server, common);
130
189
  registerBrowserTools(server, {
131
190
  ...common,
132
191
  browser: options.browserObservation,
192
+ loadFailure: options.optionalProviderLoadFailures?.browserObservation,
133
193
  });
134
194
  registerBrowserScenarioTool(server, {
135
195
  ...common,
136
196
  provider: options.browserScenarioCapture,
197
+ loadFailure: options.optionalProviderLoadFailures?.browserScenarioCapture,
137
198
  });
138
199
  registerElectronTools(server, {
139
200
  ...common,
140
201
  electron: options.electronObservation,
141
202
  electronActive: options.electronActiveObservation,
203
+ observationLoadFailure: options.optionalProviderLoadFailures?.electronObservation,
204
+ activeLoadFailure: options.optionalProviderLoadFailures?.electronActiveObservation,
142
205
  });
143
206
  registerJavaScriptRuntimeObservationTools(server, {
144
207
  ...common,
145
208
  runtime: options.javascriptRuntimeObservation,
209
+ loadFailure: options.optionalProviderLoadFailures?.javascriptRuntimeObservation,
146
210
  });
147
211
  registerApplicationTools(server, {
212
+ evidenceById,
148
213
  logger,
149
214
  recordEvidence,
150
215
  recordEvidenceWithUnknown,
@@ -21,10 +21,13 @@ const capabilityFeatures = (value) => {
21
21
  const capabilities = isRecord(value) ? value : {};
22
22
  const elicitation = isRecord(capabilities.elicitation)
23
23
  ? capabilities.elicitation
24
- : {};
24
+ : undefined;
25
25
  return {
26
- elicitation_form: elicitation.form !== undefined,
27
- elicitation_url: elicitation.url !== undefined,
26
+ // A declared capability without modes retains the protocol's form-only
27
+ // compatibility rule; a missing capability still grants no support.
28
+ elicitation_form: elicitation !== undefined &&
29
+ (elicitation.form !== undefined || elicitation.url === undefined),
30
+ elicitation_url: elicitation?.url !== undefined,
28
31
  roots: capabilities.roots !== undefined,
29
32
  sampling: capabilities.sampling !== undefined,
30
33
  };
@@ -16,8 +16,9 @@ export const mcpProgressReporter = (context) => {
16
16
  },
17
17
  });
18
18
  }
19
- catch {
19
+ catch (cause) {
20
20
  // Progress is observational; transport failure cannot change tool truth.
21
+ void cause;
21
22
  }
22
23
  }, { minimumIntervalMs: 100 });
23
24
  };
@@ -1,4 +1,5 @@
1
1
  import { z } from "zod";
2
+ import { uniqueSorted } from "../domain/canonicalOrdering.js";
2
3
  import { artifactInventoryResultSchema } from "../domain/artifactGraph.js";
3
4
  import { artifactInspectionResultSchema } from "../domain/artifactInspection.js";
4
5
  import { processCaptureSchema } from "../domain/processCapture.js";
@@ -14,7 +15,8 @@ export const createPromptCompletionSource = (analysis, session) => ({
14
15
  async complete(kind, value, context) {
15
16
  const candidates = await completionCandidates(kind, analysis, session, context);
16
17
  const prefix = normalize(value);
17
- return uniqueSorted(candidates).filter((candidate) => normalize(candidate).startsWith(prefix));
18
+ const nonEmpty = candidates.filter((candidate) => candidate.length > 0);
19
+ return uniqueSorted(nonEmpty).filter((candidate) => normalize(candidate).startsWith(prefix));
18
20
  },
19
21
  });
20
22
  const completionCandidates = async (kind, analysis, session, context) => {
@@ -121,6 +123,4 @@ const unknownCandidates = (session) => session === undefined
121
123
  .listUnknowns()
122
124
  .filter(({ status }) => status !== "resolved")
123
125
  .map(({ unknown_id: id }) => id);
124
- const uniqueSorted = (values) => [...new Set(values.filter((value) => value.length > 0))].sort(compareText);
125
- const compareText = (left, right) => left < right ? -1 : left > right ? 1 : 0;
126
126
  const normalize = (value) => value.normalize("NFKC").toLowerCase();
@@ -0,0 +1,30 @@
1
+ import { AndroidAnalysisService } from "../application/android/AndroidAnalysisService.js";
2
+ import { toolContract } from "../contracts/toolContracts.js";
3
+ import { logToolExecution } from "./toolLogging.js";
4
+ import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
5
+ import { toCallToolResult } from "./toolResult.js";
6
+ /** Bind Android handlers to their exact named contracts through shared workflows. */
7
+ export const registerAndroidTools = (server, service, logger, recordEvidence) => {
8
+ const handler = (contract) => {
9
+ const name = contract.name;
10
+ return async (input, context) => {
11
+ const result = await logToolExecution(logger, name, () => service.execute(name, input, { signal: context.mcpReq.signal }));
12
+ if (!result.ok)
13
+ return toCallToolResult(result, contract);
14
+ const recorded = recordEvidence?.(result.value);
15
+ return recorded !== undefined && !recorded.ok
16
+ ? toCallToolResult(recorded, contract)
17
+ : toCallToolResult(result, contract);
18
+ };
19
+ };
20
+ const packageContract = toolContract("inspect_android_package");
21
+ server.registerTool(packageContract.name, toolRegistrationOptions(packageContract), handler(packageContract));
22
+ const searchContract = toolContract("search_android_classes");
23
+ server.registerTool(searchContract.name, toolRegistrationOptions(searchContract), handler(searchContract));
24
+ const classContract = toolContract("inspect_android_class");
25
+ server.registerTool(classContract.name, toolRegistrationOptions(classContract), handler(classContract));
26
+ const methodContract = toolContract("inspect_android_method");
27
+ server.registerTool(methodContract.name, toolRegistrationOptions(methodContract), handler(methodContract));
28
+ const referencesContract = toolContract("trace_android_references");
29
+ server.registerTool(referencesContract.name, toolRegistrationOptions(referencesContract), handler(referencesContract));
30
+ };
@@ -1,7 +1,8 @@
1
+ import { resolvePairedEvidenceRequest } from "../../application/EvidenceInputResolver.js";
1
2
  import { recordSessionEvidenceSources } from "../sessionEvidence.js";
2
- import { compareJavaScriptExportShapesEvidenceValidated } from "../../application/JavaScriptApplicationWorkflowService.js";
3
+ import { compareJavaScriptExportShapesEvidenceValidated } from "../../application/javascript/JavaScriptApplicationWorkflowService.js";
3
4
  import { applicationToolContract } from "../../contracts/applicationToolContracts.js";
4
- import { javaScriptExportShapeComparisonResultSchema } from "../../domain/javascriptExportShapeComparisonSchemas.js";
5
+ import { javaScriptExportShapeComparisonResultSchema } from "../../domain/javascript/javascriptExportShapeComparisonSchemas.js";
5
6
  import { logToolExecution } from "../toolLogging.js";
6
7
  import { toolRegistrationOptions } from "../toolRegistrationOptions.js";
7
8
  import { toCallToolResult } from "../toolResult.js";
@@ -10,7 +11,10 @@ const contract = applicationToolContract("compare_javascript_export_shapes");
10
11
  /** Register the execution-free exact JavaScript export-shape comparison. */
11
12
  export const registerCompareJavaScriptExportShapesTool = (server, options) => {
12
13
  server.registerTool(contract.name, toolRegistrationOptions(contract), async (input) => {
13
- const parsed = input;
14
+ const resolved = resolvePairedEvidenceRequest(input, options.evidenceById);
15
+ if (!resolved.ok)
16
+ return toCallToolResult(resolved, contract);
17
+ const parsed = resolved.value;
14
18
  const result = await logToolExecution(options.logger, contract.name, () => Promise.resolve(compareJavaScriptExportShapesEvidenceValidated(parsed)));
15
19
  if (!result.ok)
16
20
  return toCallToolResult(result, contract);
@@ -1,7 +1,8 @@
1
+ import { resolveApplicationEvidenceRequest } from "../../application/EvidenceInputResolver.js";
1
2
  import { recordSessionEvidenceSources } from "../sessionEvidence.js";
2
- import { compareSourceToBundleEvidenceValidated } from "../../application/JavaScriptApplicationWorkflowService.js";
3
+ import { compareSourceToBundleEvidenceValidated } from "../../application/javascript/JavaScriptApplicationWorkflowService.js";
3
4
  import { applicationToolContract } from "../../contracts/applicationToolContracts.js";
4
- import { sourceToBundleComparisonResultSchema } from "../../domain/sourceToBundleComparisonSchemas.js";
5
+ import { sourceToBundleComparisonResultSchema } from "../../domain/javascript/sourceToBundleComparisonSchemas.js";
5
6
  import { logToolExecution } from "../toolLogging.js";
6
7
  import { toolRegistrationOptions } from "../toolRegistrationOptions.js";
7
8
  import { toCallToolResult } from "../toolResult.js";
@@ -10,11 +11,15 @@ const contract = applicationToolContract("compare_source_to_bundle");
10
11
  /** Register conservative historical-source to bundle comparison. */
11
12
  export const registerCompareSourceToBundleTool = (server, options) => {
12
13
  server.registerTool(contract.name, toolRegistrationOptions(contract), async (input) => {
13
- const result = await logToolExecution(options.logger, contract.name, () => Promise.resolve(compareSourceToBundleEvidenceValidated(input)));
14
+ const resolved = resolveApplicationEvidenceRequest(input, options.evidenceById);
15
+ if (!resolved.ok)
16
+ return toCallToolResult(resolved, contract);
17
+ const parsed = resolved.value;
18
+ const result = await logToolExecution(options.logger, contract.name, () => Promise.resolve(compareSourceToBundleEvidenceValidated(parsed)));
14
19
  if (!result.ok)
15
20
  return toCallToolResult(result, contract);
16
21
  const recorded = recordSessionEvidenceSources(options.recordEvidence, [
17
- input.application,
22
+ parsed.application,
18
23
  ]);
19
24
  if (!recorded.ok)
20
25
  return toCallToolResult(recorded, contract);
@@ -1,7 +1,8 @@
1
+ import { resolvePairedEvidenceRequest } from "../../application/EvidenceInputResolver.js";
1
2
  import { recordSessionEvidenceSources } from "../sessionEvidence.js";
2
- import { compareApplicationVersionsEvidenceValidated } from "../../application/JavaScriptApplicationWorkflowService.js";
3
+ import { compareApplicationVersionsEvidenceValidated } from "../../application/javascript/JavaScriptApplicationWorkflowService.js";
3
4
  import { applicationToolContract } from "../../contracts/applicationToolContracts.js";
4
- import { applicationVersionComparisonResultSchema } from "../../domain/javascriptApplicationVersionComparisonSchemas.js";
5
+ import { applicationVersionComparisonResultSchema } from "../../domain/javascript/javascriptApplicationVersionComparisonSchemas.js";
5
6
  import { logToolExecution } from "../toolLogging.js";
6
7
  import { toolRegistrationOptions } from "../toolRegistrationOptions.js";
7
8
  import { toCallToolResult } from "../toolResult.js";
@@ -10,7 +11,10 @@ const compareContract = applicationToolContract("compare_application_versions");
10
11
  /** Register the provider-neutral JavaScript version comparison tool. */
11
12
  export const registerCompareApplicationVersionsTool = (server, options) => {
12
13
  server.registerTool(compareContract.name, toolRegistrationOptions(compareContract), async (input) => {
13
- const parsed = input;
14
+ const resolved = resolvePairedEvidenceRequest(input, options.evidenceById);
15
+ if (!resolved.ok)
16
+ return toCallToolResult(resolved, compareContract);
17
+ const parsed = resolved.value;
14
18
  const result = await logToolExecution(options.logger, compareContract.name, () => Promise.resolve(compareApplicationVersionsEvidenceValidated(parsed)));
15
19
  if (!result.ok)
16
20
  return toCallToolResult(result, compareContract);