rea-agents 4.1.0 → 6.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 (757) hide show
  1. package/README.md +173 -568
  2. package/bridge/android/ReaJadxBridge.java +247 -0
  3. package/bridge/mitmproxy/capture.py +210 -0
  4. package/bridge/native/NativeUIChildren.swift +27 -0
  5. package/bridge/native/ReaNativeUI.swift +30 -16
  6. package/bridge/native/rea_lldb_tracer.py +303 -0
  7. package/bridge/process/ProcessRunTokenReader.swift +263 -0
  8. package/bridge/process/ProcessRunTokenReaderMain.swift +35 -0
  9. package/bridge/pwndbg/core_context.py +101 -0
  10. package/bridge/pwndbg/launch.py +39 -0
  11. package/bridge/pwndbg/launch_impl.py +34 -0
  12. package/bridge/pwntools/decoder_runtime.py +59 -0
  13. package/bridge/pwntools/layout.py +39 -0
  14. package/bridge/pwntools/layout_impl.py +309 -0
  15. package/bridge/pwntools/recorded_crash.py +39 -0
  16. package/bridge/pwntools/recorded_crash_impl.py +143 -0
  17. package/dist/android/AndroidTargetSnapshot.js +5 -3
  18. package/dist/android/JadxAnalysis.js +8 -6
  19. package/dist/android/JadxConfiguration.js +19 -3
  20. package/dist/android/JadxMcpTransport.js +43 -16
  21. package/dist/android/JadxProtocol.js +8 -0
  22. package/dist/android/JadxProvider.js +118 -28
  23. package/dist/android/JadxRelease.js +8 -0
  24. package/dist/android/JadxSession.js +32 -18
  25. package/dist/application/AppBundleExecutable.js +141 -0
  26. package/dist/application/BinaryTargetResolver.js +9 -64
  27. package/dist/application/CapabilityInventory.js +82 -3
  28. package/dist/application/ClientConfigurationDocument.js +72 -12
  29. package/dist/application/ClientRegistrationStatus.js +7 -8
  30. package/dist/application/DirectAnalysis.js +109 -37
  31. package/dist/application/DirectAnalysisStatus.js +4 -5
  32. package/dist/application/DoctorDiagnostics.js +3 -3
  33. package/dist/application/EnhancedTools.js +4 -4
  34. package/dist/application/EvidenceBundleCommands.js +1 -1
  35. package/dist/application/EvidenceBundleFiles.js +1 -1
  36. package/dist/application/InvestigationProviders.js +6 -0
  37. package/dist/application/LinuxHopper.js +8 -2
  38. package/dist/application/OptionalObservationProviders.js +3 -0
  39. package/dist/application/ReconstructionCoverageService.js +2 -6
  40. package/dist/application/ReconstructionObligationCandidates.js +10 -3
  41. package/dist/application/ReferenceSourceImport.js +2 -0
  42. package/dist/application/ReferenceSourceImportEntries.js +20 -3
  43. package/dist/application/ReferenceSourceImportTypes.js +5 -0
  44. package/dist/application/Setup.js +10 -2
  45. package/dist/application/SetupClientConfiguration.js +19 -16
  46. package/dist/application/SetupHost.js +18 -3
  47. package/dist/application/SetupPlan.js +1 -1
  48. package/dist/application/Uninstall.js +23 -17
  49. package/dist/application/UpdateMaintenance.js +3 -3
  50. package/dist/application/ValidateSelectedWebScript.js +27 -0
  51. package/dist/application/WebModuleTraceService.js +209 -0
  52. package/dist/application/WebNetworkCaptureService.js +132 -0
  53. package/dist/application/WebRuntimeService.js +73 -0
  54. package/dist/application/WebScriptExportService.js +115 -0
  55. package/dist/application/WebSourceLocationService.js +160 -0
  56. package/dist/application/WindowsCapabilities.js +1 -1
  57. package/dist/application/{AndroidAnalysisService.js → android/AndroidAnalysisService.js} +6 -6
  58. package/dist/application/{AndroidApplicationService.js → android/AndroidApplicationService.js} +3 -3
  59. package/dist/application/{AppleApplicationService.js → apple/AppleApplicationService.js} +5 -5
  60. package/dist/application/{AnalysisClientCleanup.js → binary/AnalysisClientCleanup.js} +2 -2
  61. package/dist/application/{AnalysisProviderEvaluation.js → binary/AnalysisProviderEvaluation.js} +4 -4
  62. package/dist/application/{AnalysisProviderRegistry.js → binary/AnalysisProviderRegistry.js} +5 -5
  63. package/dist/application/{AnalysisSnapshotCache.js → binary/AnalysisSnapshotCache.js} +55 -14
  64. package/dist/application/{AnalysisSnapshotFiles.js → binary/AnalysisSnapshotFiles.js} +4 -4
  65. package/dist/application/{BinarySession.js → binary/BinarySession.js} +50 -20
  66. package/dist/application/{BinarySessionComposition.js → binary/BinarySessionComposition.js} +2 -1
  67. package/dist/application/{BinarySessionExecution.js → binary/BinarySessionExecution.js} +9 -7
  68. package/dist/application/{BinarySessionOpen.js → binary/BinarySessionOpen.js} +22 -9
  69. package/dist/application/{BinarySessionRecords.js → binary/BinarySessionRecords.js} +48 -40
  70. package/dist/application/{CompositeProvider.js → binary/CompositeProvider.js} +2 -2
  71. package/dist/application/{LazyAnalysisProvider.js → binary/LazyAnalysisProvider.js} +6 -6
  72. package/dist/application/{SessionProviderRouter.js → binary/SessionProviderRouter.js} +7 -7
  73. package/dist/application/binaryDiagnostics/BinaryLayoutService.js +57 -0
  74. package/dist/application/binaryDiagnostics/RecordedCrashPort.js +1 -0
  75. package/dist/application/binaryDiagnostics/RecordedCrashService.js +60 -0
  76. package/dist/application/evm/EvmInterfacePort.js +1 -0
  77. package/dist/application/evm/EvmInterfaceService.js +62 -0
  78. package/dist/application/firmware/FirmwareAnalysisPort.js +1 -0
  79. package/dist/application/{FirmwareAnalysisService.js → firmware/FirmwareAnalysisService.js} +5 -5
  80. package/dist/application/{EvidenceLedger.js → investigation/EvidenceLedger.js} +44 -7
  81. package/dist/application/investigation/InvestigationRecordPort.js +1 -0
  82. package/dist/application/investigation/InvestigationRecords.js +69 -0
  83. package/dist/application/{UnknownEvidence.js → investigation/UnknownEvidence.js} +1 -1
  84. package/dist/application/{ElectronActiveEvidence.js → javascript/ElectronActiveEvidence.js} +3 -3
  85. package/dist/application/javascript/ElectronActiveObservationPort.js +1 -0
  86. package/dist/application/{ElectronActiveObservationService.js → javascript/ElectronActiveObservationService.js} +3 -3
  87. package/dist/application/{ElectronBoundaryAnalysis.js → javascript/ElectronBoundaryAnalysis.js} +1 -1
  88. package/dist/application/{ElectronBoundaryGraphContext.js → javascript/ElectronBoundaryGraphContext.js} +1 -1
  89. package/dist/application/{ElectronEvidence.js → javascript/ElectronEvidence.js} +2 -2
  90. package/dist/application/javascript/ElectronObservationPort.js +1 -0
  91. package/dist/application/{ElectronObservationService.js → javascript/ElectronObservationService.js} +3 -3
  92. package/dist/application/{JavaScriptApplicationEvidence.js → javascript/JavaScriptApplicationEvidence.js} +3 -4
  93. package/dist/application/{JavaScriptApplicationEvidenceGraph.js → javascript/JavaScriptApplicationEvidenceGraph.js} +5 -5
  94. package/dist/application/{JavaScriptApplicationService.js → javascript/JavaScriptApplicationService.js} +25 -12
  95. package/dist/application/{JavaScriptApplicationWorkflowEvidence.js → javascript/JavaScriptApplicationWorkflowEvidence.js} +3 -3
  96. package/dist/application/{JavaScriptApplicationWorkflowService.js → javascript/JavaScriptApplicationWorkflowService.js} +12 -12
  97. package/dist/application/{JavaScriptArtifactAnalysis.js → javascript/JavaScriptArtifactAnalysis.js} +50 -47
  98. package/dist/application/javascript/JavaScriptArtifactAnalysisTypes.js +1 -0
  99. package/dist/application/{JavaScriptArtifactGraphAccumulator.js → javascript/JavaScriptArtifactGraphAccumulator.js} +16 -2
  100. package/dist/application/{JavaScriptArtifactGraphBuilder.js → javascript/JavaScriptArtifactGraphBuilder.js} +2 -2
  101. package/dist/application/{JavaScriptArtifactGraphContext.js → javascript/JavaScriptArtifactGraphContext.js} +1 -1
  102. package/dist/application/{JavaScriptArtifactGraphDocuments.js → javascript/JavaScriptArtifactGraphDocuments.js} +27 -3
  103. package/dist/application/{JavaScriptArtifactGraphFindings.js → javascript/JavaScriptArtifactGraphFindings.js} +20 -7
  104. package/dist/application/{JavaScriptArtifactGraphStructure.js → javascript/JavaScriptArtifactGraphStructure.js} +1 -1
  105. package/dist/application/{JavaScriptArtifactPathResolution.js → javascript/JavaScriptArtifactPathResolution.js} +80 -36
  106. package/dist/application/{JavaScriptArtifactReconstruction.js → javascript/JavaScriptArtifactReconstruction.js} +26 -17
  107. package/dist/application/{JavaScriptJsonModules.js → javascript/JavaScriptJsonModules.js} +1 -1
  108. package/dist/application/{JavaScriptModuleRelationships.js → javascript/JavaScriptModuleRelationships.js} +2 -2
  109. package/dist/application/javascript/JavaScriptRecoveryPort.js +1 -0
  110. package/dist/application/javascript/JavaScriptRecoveryService.js +52 -0
  111. package/dist/application/{JavaScriptReturnShapeProjection.js → javascript/JavaScriptReturnShapeProjection.js} +3 -3
  112. package/dist/application/{JavaScriptRuntimeObservationEvidence.js → javascript/JavaScriptRuntimeObservationEvidence.js} +2 -2
  113. package/dist/application/javascript/JavaScriptRuntimeObservationPort.js +1 -0
  114. package/dist/application/{JavaScriptRuntimeObservationService.js → javascript/JavaScriptRuntimeObservationService.js} +3 -3
  115. package/dist/application/{JavaScriptRuntimeReconciliationEvidence.js → javascript/JavaScriptRuntimeReconciliationEvidence.js} +3 -3
  116. package/dist/application/{JavaScriptRuntimeReconciliationService.js → javascript/JavaScriptRuntimeReconciliationService.js} +6 -6
  117. package/dist/application/{JavaScriptSemanticGraphAsyncProjection.js → javascript/JavaScriptSemanticGraphAsyncProjection.js} +8 -8
  118. package/dist/application/{JavaScriptSemanticGraphBuilder.js → javascript/JavaScriptSemanticGraphBuilder.js} +150 -73
  119. package/dist/application/{JavaScriptSemanticGraphChildProcessProjection.js → javascript/JavaScriptSemanticGraphChildProcessProjection.js} +15 -16
  120. package/dist/application/{JavaScriptSemanticGraphConstruction.js → javascript/JavaScriptSemanticGraphConstruction.js} +43 -2
  121. package/dist/application/{JavaScriptSemanticGraphDataProjection.js → javascript/JavaScriptSemanticGraphDataProjection.js} +8 -8
  122. package/dist/application/{JavaScriptSemanticGraphFingerprintProjection.js → javascript/JavaScriptSemanticGraphFingerprintProjection.js} +1 -1
  123. package/dist/application/{JavaScriptSemanticGraphFlowProjection.js → javascript/JavaScriptSemanticGraphFlowProjection.js} +7 -11
  124. package/dist/application/{JavaScriptSemanticGraphObjectProjection.js → javascript/JavaScriptSemanticGraphObjectProjection.js} +4 -4
  125. package/dist/application/javascript/JavaScriptSemanticGraphProjection.js +144 -0
  126. package/dist/application/{JavaScriptSemanticGraphResourceProjection.js → javascript/JavaScriptSemanticGraphResourceProjection.js} +4 -4
  127. package/dist/application/{JavaScriptSemanticGraphValueProjection.js → javascript/JavaScriptSemanticGraphValueProjection.js} +5 -5
  128. package/dist/application/{JavaScriptSemanticTraceService.js → javascript/JavaScriptSemanticTraceService.js} +6 -6
  129. package/dist/application/{ManagedApplicationGraphService.js → managed/ManagedApplicationGraphService.js} +7 -7
  130. package/dist/application/{ManagedMemberComparisonService.js → managed/ManagedMemberComparisonService.js} +10 -10
  131. package/dist/application/{ManagedNativeVerificationService.js → managed/ManagedNativeVerificationService.js} +7 -7
  132. package/dist/application/{ManagedReconstructionService.js → managed/ManagedReconstructionService.js} +7 -7
  133. package/dist/application/{NativeApiInspection.js → native/NativeApiInspection.js} +1 -1
  134. package/dist/application/{NativeCallRoutes.js → native/NativeCallRoutes.js} +3 -3
  135. package/dist/application/{NativeDispatchMetadataInspection.js → native/NativeDispatchMetadataInspection.js} +4 -4
  136. package/dist/application/{NativeUiActionTrace.js → native/NativeUiActionTrace.js} +7 -7
  137. package/dist/application/{NativeValueTrace.js → native/NativeValueTrace.js} +6 -6
  138. package/dist/application/{ProcessCli.js → process/ProcessCli.js} +15 -11
  139. package/dist/application/{ProcessEvidence.js → process/ProcessEvidence.js} +4 -4
  140. package/dist/{application/ArtifactInventory/hash.js → artifacts/ArtifactHash.js} +4 -2
  141. package/dist/artifacts/ArtifactPaths.js +3 -3
  142. package/dist/artifacts/ArtifactProvider.js +37 -40
  143. package/dist/artifacts/ArtifactProviderMetadata.js +37 -0
  144. package/dist/artifacts/AsarArtifactReader.js +195 -23
  145. package/dist/artifacts/AsarEntryStream.js +76 -0
  146. package/dist/artifacts/DirectoryArtifactReader.js +41 -7
  147. package/dist/artifacts/NativeDmgArtifactReader.js +161 -9
  148. package/dist/artifacts/ZipArtifactReader.js +3 -0
  149. package/dist/{application → artifacts/apple}/AppleAssetCatalogAnalysis.js +4 -4
  150. package/dist/artifacts/apple/DylibResolutionReader.js +259 -0
  151. package/dist/{application → artifacts/apple}/InterfaceBuilderAnalysis.js +125 -51
  152. package/dist/artifacts/{KeyedArchiveReader.js → apple/KeyedArchiveReader.js} +21 -27
  153. package/dist/artifacts/apple/MachoLoadCommandReader.js +294 -0
  154. package/dist/artifacts/apple/NibViewHierarchy.js +150 -0
  155. package/dist/{application → artifacts/extraction}/ArtifactExtraction.js +10 -10
  156. package/dist/{application → artifacts/inventory}/ArtifactGraphConstruction.js +3 -3
  157. package/dist/{application → artifacts/inventory}/ArtifactInventory.js +4 -4
  158. package/dist/{application/ArtifactInventory → artifacts/inventory}/classify.js +2 -2
  159. package/dist/{application/ArtifactInventory → artifacts/inventory}/reader.js +5 -5
  160. package/dist/{application/ArtifactInventory → artifacts/inventory}/scanCanonical.js +3 -3
  161. package/dist/{application/ArtifactInventory → artifacts/inventory}/scanReader.js +5 -5
  162. package/dist/{application → artifacts/javascript}/JavaScriptArtifactFiles.js +27 -6
  163. package/dist/artifacts/javascript/JavaScriptArtifactReader.js +6 -0
  164. package/dist/artifacts/readStableArtifact.js +68 -0
  165. package/dist/browser/BrowserScenarioSecrets.js +50 -8
  166. package/dist/browser/CdpAuthorizedMainFrame.js +4 -4
  167. package/dist/browser/CdpAuthorizedTarget.js +22 -0
  168. package/dist/browser/CdpBrowserProvider.js +4 -15
  169. package/dist/browser/CdpCaptureDocuments.js +33 -21
  170. package/dist/browser/CdpCaptureEventBodyShapes.js +3 -3
  171. package/dist/browser/CdpCaptureEventHandlers.js +116 -28
  172. package/dist/browser/CdpCaptureEventHelpers.js +6 -6
  173. package/dist/browser/CdpCaptureEvents.js +9 -0
  174. package/dist/browser/CdpCaptureStorage.js +10 -8
  175. package/dist/browser/CdpCaptureStorageFingerprints.js +24 -22
  176. package/dist/browser/CdpCaptureValues.js +2 -2
  177. package/dist/browser/CdpCommandRejection.js +17 -0
  178. package/dist/browser/CdpConnection.js +51 -11
  179. package/dist/browser/CdpElectronInspection.js +10 -10
  180. package/dist/browser/CdpElectronProvider.js +3 -6
  181. package/dist/browser/CdpElectronScriptEvents.js +6 -6
  182. package/dist/browser/CdpElectronScripts.js +2 -2
  183. package/dist/browser/CdpElectronWorkers.js +4 -4
  184. package/dist/browser/CdpObservationSession.js +18 -23
  185. package/dist/browser/CdpPageCapture.js +4 -4
  186. package/dist/browser/CdpPageCaptureScripts.js +2 -2
  187. package/dist/browser/CdpPageCaptureWorkers.js +9 -9
  188. package/dist/browser/CdpSafeMetadata.js +48 -10
  189. package/dist/browser/CdpScreenshot.js +5 -5
  190. package/dist/browser/CdpTargetEvents.js +8 -0
  191. package/dist/browser/CdpTargetSession.js +2 -2
  192. package/dist/browser/CdpWebMcpDiscovery.js +22 -16
  193. package/dist/browser/PlaywrightBrowserScenarioProvider.js +7 -6
  194. package/dist/browser/PlaywrightElectronActiveProvider.js +15 -9
  195. package/dist/browser/PlaywrightScenarioEvents.js +59 -51
  196. package/dist/browser/PlaywrightScenarioSession.js +8 -1
  197. package/dist/browser/WebSourceMapFetcher.js +37 -53
  198. package/dist/browser/assets/LocalWebScriptArtifacts.js +87 -0
  199. package/dist/browser/assets/PageScriptCapture.js +32 -0
  200. package/dist/browser/assets/PublishWebScripts.js +74 -0
  201. package/dist/browser/assets/ScenarioScriptCapture.js +76 -0
  202. package/dist/browser/assets/ScriptCaptureAdapters.js +57 -0
  203. package/dist/browser/assets/WebArtifactReads.js +56 -0
  204. package/dist/browser/assets/WebSourceLocationArtifacts.js +40 -0
  205. package/dist/browser/execution/CdpEventListeners.js +79 -0
  206. package/dist/browser/execution/CdpExecutionCapture.js +135 -0
  207. package/dist/browser/execution/CdpExecutionCollection.js +57 -0
  208. package/dist/browser/execution/CdpExecutionWindow.js +100 -0
  209. package/dist/browser/execution/CdpListenerSelector.js +22 -0
  210. package/dist/browser/execution/CdpPreciseCoverage.js +48 -0
  211. package/dist/browser/execution/CdpRuntimeInitiator.js +18 -0
  212. package/dist/browser/execution/CdpRuntimeProtocol.js +106 -0
  213. package/dist/browser/execution/CdpRuntimeRequests.js +81 -0
  214. package/dist/browser/execution/CdpRuntimeSession.js +163 -0
  215. package/dist/browser/execution/CdpRuntimeSources.js +223 -0
  216. package/dist/browser/execution/CdpWebRuntimeProvider.js +51 -0
  217. package/dist/browser/history/CaptureFailures.js +101 -0
  218. package/dist/browser/history/CaptureFormatError.js +10 -0
  219. package/dist/browser/history/CaptureRedaction.js +65 -0
  220. package/dist/browser/history/CaptureRelease.js +12 -0
  221. package/dist/browser/history/HarCapture.js +165 -0
  222. package/dist/browser/history/HarCaptureAdapter.js +20 -0
  223. package/dist/browser/history/HarCaptureProcess.js +57 -0
  224. package/dist/browser/history/HarJson.js +91 -0
  225. package/dist/browser/history/HarSchema.js +72 -0
  226. package/dist/browser/history/HistoricalCaptureDecoder.js +186 -0
  227. package/dist/browser/history/HistoricalCaptureFormatAdapter.js +1 -0
  228. package/dist/browser/history/MitmproxyCaptureAdapter.js +42 -0
  229. package/dist/browser/modules/NativeModuleResolver.js +210 -0
  230. package/dist/browser/modules/WebModuleArtifacts.js +40 -0
  231. package/dist/browser/network/PlaywrightNetworkContent.js +71 -0
  232. package/dist/browser/network/PlaywrightScenarioNetwork.js +180 -0
  233. package/dist/browser/providerIdentities.js +24 -0
  234. package/dist/catalogIdentity.js +23 -15
  235. package/dist/cli/androidCommands.js +13 -3
  236. package/dist/cli/applicationCommands.js +39 -8
  237. package/dist/cli/artifactCommands.js +27 -2
  238. package/dist/cli/binaryDiagnosticsCommands.js +39 -0
  239. package/dist/cli/browserAdvancedCommands.js +27 -9
  240. package/dist/cli/coreAnalysisCommands.js +6 -494
  241. package/dist/cli/coreBinaryCommands.js +211 -0
  242. package/dist/cli/coreNativeCommands.js +293 -0
  243. package/dist/cli/electronCommands.js +29 -27
  244. package/dist/cli/evmCommands.js +24 -0
  245. package/dist/cli/firmwareCommands.js +9 -6
  246. package/dist/cli/javascriptApplicationAnalysis.js +17 -4
  247. package/dist/cli/javascriptRecoveryCommands.js +45 -0
  248. package/dist/cli/jsonOutput.js +133 -0
  249. package/dist/cli/managedCommands.js +4 -4
  250. package/dist/cli/managedProjectGraphCommand.js +1 -1
  251. package/dist/cli/nativeCallCommands.js +35 -0
  252. package/dist/cli/processCommands.js +1 -1
  253. package/dist/cli/referenceSourceImportStatus.js +6 -1
  254. package/dist/cli/streamedJsonOutput.js +56 -0
  255. package/dist/cli/utilityCommands.js +49 -23
  256. package/dist/cli/webModuleCommands.js +56 -0
  257. package/dist/cli/webNetworkCaptureCommands.js +40 -0
  258. package/dist/cli/webRuntimeCommands.js +60 -0
  259. package/dist/cli/webScriptCommands.js +31 -0
  260. package/dist/cli/webSourceLocationCommands.js +42 -0
  261. package/dist/cli.js +19 -3
  262. package/dist/cliBrowserContext.js +4 -2
  263. package/dist/cliBrowserScenarioCommands.js +6 -5
  264. package/dist/cliCommandNames.js +14 -0
  265. package/dist/cliJavaScriptRuntimeCommands.js +6 -4
  266. package/dist/cliJsonInput.js +38 -2
  267. package/dist/cliOutput.js +52 -11
  268. package/dist/composition/android.js +3 -0
  269. package/dist/composition/auxiliaryAnalysisProviders.js +30 -0
  270. package/dist/composition/binary.js +25 -0
  271. package/dist/composition/binaryDiagnostics.js +8 -0
  272. package/dist/composition/browserObservation.js +3 -0
  273. package/dist/composition/browserScenario.js +3 -0
  274. package/dist/composition/directAnalysis.js +17 -0
  275. package/dist/composition/electronObservation.js +3 -0
  276. package/dist/composition/electronScenario.js +3 -0
  277. package/dist/composition/evm.js +4 -0
  278. package/dist/composition/firmware.js +3 -0
  279. package/dist/composition/javascriptRecovery.js +3 -0
  280. package/dist/composition/javascriptRuntimeObservation.js +3 -0
  281. package/dist/composition/optionalObservationProviders.js +49 -0
  282. package/dist/composition/webModules.js +5 -0
  283. package/dist/composition/webNetworkCaptures.js +6 -0
  284. package/dist/composition/webRuntime.js +4 -0
  285. package/dist/composition/webSourceLocations.js +5 -0
  286. package/dist/config/parseConfig.js +22 -3
  287. package/dist/contracts/{androidToolContracts.js → android/androidToolContracts.js} +5 -5
  288. package/dist/contracts/applicationToolContracts.js +43 -8
  289. package/dist/contracts/artifactToolContracts.js +8 -2
  290. package/dist/contracts/browserCaptureToolInputSchema.js +43 -0
  291. package/dist/contracts/browserScenarioToolContracts.js +1 -1
  292. package/dist/contracts/browserToolContracts.js +4 -3
  293. package/dist/contracts/enhancedInputs.js +1 -1
  294. package/dist/contracts/errorSchemas.js +8 -1
  295. package/dist/contracts/evm/evmToolContracts.js +20 -0
  296. package/dist/contracts/{firmwareToolContracts.js → firmware/firmwareToolContracts.js} +5 -5
  297. package/dist/contracts/investigationExamples.js +2 -2
  298. package/dist/contracts/{applicationWorkflowInputContracts.js → javascript/applicationWorkflowInputContracts.js} +6 -6
  299. package/dist/contracts/{electronToolContracts.js → javascript/electronToolContracts.js} +6 -6
  300. package/dist/contracts/{javascriptApplicationWorkflowExamples.js → javascript/javascriptApplicationWorkflowExamples.js} +3 -3
  301. package/dist/contracts/javascript/javascriptRecoveryToolContracts.js +23 -0
  302. package/dist/contracts/{javascriptRuntimeObservationToolContracts.js → javascript/javascriptRuntimeObservationToolContracts.js} +3 -3
  303. package/dist/contracts/{javascriptRuntimeReconciliationExample.js → javascript/javascriptRuntimeReconciliationExample.js} +5 -5
  304. package/dist/contracts/{managedToolContracts.js → managed/managedToolContracts.js} +10 -6
  305. package/dist/contracts/{managedWorkflowExamples.js → managed/managedWorkflowExamples.js} +1 -1
  306. package/dist/contracts/{managedWorkflowToolContracts.js → managed/managedWorkflowToolContracts.js} +6 -6
  307. package/dist/contracts/mobileApplicationGraphExamples.js +105 -0
  308. package/dist/contracts/native/binaryDiagnosticsToolContracts.js +42 -0
  309. package/dist/contracts/{nativeToolContracts.js → native/nativeToolContracts.js} +31 -8
  310. package/dist/contracts/officialToolContracts.js +15 -12
  311. package/dist/contracts/process/processCaptureExample.js +2 -0
  312. package/dist/contracts/sessionLifecycleInputs.js +22 -5
  313. package/dist/contracts/sessionStatusContract.js +10 -2
  314. package/dist/contracts/sessionToolContracts.js +9 -2
  315. package/dist/contracts/sessionToolSchemas.js +10 -3
  316. package/dist/contracts/toolContractExamples.js +1 -1
  317. package/dist/contracts/toolContracts.js +19 -7
  318. package/dist/contracts/toolEffects.js +62 -0
  319. package/dist/contracts/toolOutputSchemaGroups.js +23 -19
  320. package/dist/contracts/toolOutputSchemaPrimitives.js +1 -1
  321. package/dist/contracts/webNetworkCaptureToolContracts.js +24 -0
  322. package/dist/contracts/webRuntimeToolContracts.js +43 -0
  323. package/dist/contracts/webScriptToolContracts.js +68 -0
  324. package/dist/domain/analysisErrorBase.js +15 -0
  325. package/dist/domain/analysisErrorCore.js +63 -7
  326. package/dist/domain/analysisErrorPresentation.js +29 -1
  327. package/dist/domain/analysisErrorProjection.js +53 -2
  328. package/dist/domain/analysisSnapshot.js +166 -2
  329. package/dist/domain/{androidApplication.js → android/androidApplication.js} +7 -6
  330. package/dist/domain/apple/appleApplication.js +277 -0
  331. package/dist/domain/{appleAssetCatalog.js → apple/appleAssetCatalog.js} +2 -2
  332. package/dist/domain/apple/appleBundleAnatomy.js +236 -0
  333. package/dist/domain/apple/dyldPaths.js +81 -0
  334. package/dist/domain/apple/dylibResolution.js +367 -0
  335. package/dist/domain/apple/dylibResolutionFindings.js +75 -0
  336. package/dist/domain/{interfaceBuilderGraph.js → apple/interfaceBuilderGraph.js} +47 -314
  337. package/dist/domain/apple/interfaceBuilderKeyedArchive.js +411 -0
  338. package/dist/domain/{keyedArchive.js → apple/keyedArchive.js} +10 -9
  339. package/dist/domain/apple/plistValue.js +35 -0
  340. package/dist/domain/artifactInventoryEvidence.js +12 -2
  341. package/dist/domain/artifactInventorySnapshot.js +1 -0
  342. package/dist/domain/artifactOperationError.js +5 -1
  343. package/dist/domain/artifactPathSyntax.js +26 -0
  344. package/dist/domain/browserNetworkEvidence.js +82 -0
  345. package/dist/domain/browserObservation.js +1 -1
  346. package/dist/domain/browserObservationError.js +2 -0
  347. package/dist/domain/browserObservationSchemas.js +15 -1
  348. package/dist/domain/browserScenarioCapture.js +22 -0
  349. package/dist/domain/browserScenarioCaptureValues.js +25 -0
  350. package/dist/domain/browserScenarioDiff.js +6 -3
  351. package/dist/domain/browserScenarioDiffEvidence.js +35 -1
  352. package/dist/domain/browserScenarioValues.js +21 -3
  353. package/dist/domain/browserSession.js +2 -7
  354. package/dist/domain/bundleComparison.js +2 -1
  355. package/dist/domain/callPath.js +52 -44
  356. package/dist/domain/callPathSchemas.js +1 -1
  357. package/dist/domain/canonicalDigest.js +13 -1
  358. package/dist/domain/changedBehavior.js +3 -3
  359. package/dist/domain/comparisonStatus.js +11 -0
  360. package/dist/domain/conformanceTrustGate.js +0 -16
  361. package/dist/domain/evidence.js +17 -5
  362. package/dist/domain/evidenceBundle.js +98 -35
  363. package/dist/domain/evm/evmInterface.js +63 -0
  364. package/dist/domain/explicitSensitiveFailure.js +92 -0
  365. package/dist/domain/explicitSensitiveValues.js +10 -0
  366. package/dist/domain/{firmwareAnalysis.js → firmware/firmwareAnalysis.js} +10 -3
  367. package/dist/domain/functionComparisonNormalization.js +11 -13
  368. package/dist/domain/hopperValues.js +2 -2
  369. package/dist/domain/inputIssueProjection.js +17 -2
  370. package/dist/domain/{electronActiveObservation.js → javascript/electronActiveObservation.js} +9 -4
  371. package/dist/domain/{electronObservation.js → javascript/electronObservation.js} +5 -11
  372. package/dist/domain/{electronStaticAnalysisBrowser.js → javascript/electronStaticAnalysisBrowser.js} +4 -3
  373. package/dist/domain/{electronStaticAnalysisIpc.js → javascript/electronStaticAnalysisIpc.js} +2 -2
  374. package/dist/domain/{electronStaticAnalysisNative.js → javascript/electronStaticAnalysisNative.js} +12 -13
  375. package/dist/domain/javascript/electronStaticAnalysisTypes.js +1 -0
  376. package/dist/domain/{electronStaticAnalysisValues.js → javascript/electronStaticAnalysisValues.js} +3 -3
  377. package/dist/domain/javascript/htmlArtifactReferences.js +40 -0
  378. package/dist/domain/{javascriptApplicationAnalysis.js → javascript/javascriptApplicationAnalysis.js} +2 -2
  379. package/dist/domain/{javascriptApplicationChangeGraph.js → javascript/javascriptApplicationChangeGraph.js} +1 -1
  380. package/dist/domain/{javascriptApplicationEvidenceSchemas.js → javascript/javascriptApplicationEvidenceSchemas.js} +6 -4
  381. package/dist/domain/{javascriptApplicationGraph.js → javascript/javascriptApplicationGraph.js} +2 -2
  382. package/dist/domain/{javascriptApplicationGraphSchemas.js → javascript/javascriptApplicationGraphSchemas.js} +2 -2
  383. package/dist/domain/{javascriptApplicationVersionComparison.js → javascript/javascriptApplicationVersionComparison.js} +2 -2
  384. package/dist/domain/{javascriptApplicationVersionComparisonSchemas.js → javascript/javascriptApplicationVersionComparisonSchemas.js} +3 -3
  385. package/dist/domain/{javascriptApplicationVersionItems.js → javascript/javascriptApplicationVersionItems.js} +2 -2
  386. package/dist/domain/{javascriptApplicationVersionKeys.js → javascript/javascriptApplicationVersionKeys.js} +16 -9
  387. package/dist/domain/javascript/javascriptArtifactFiles.js +1 -0
  388. package/dist/domain/{javascriptAstFingerprint.js → javascript/javascriptAstFingerprint.js} +38 -22
  389. package/dist/domain/javascript/javascriptAstValues.js +23 -0
  390. package/dist/domain/{javascriptExportShapeComparison.js → javascript/javascriptExportShapeComparison.js} +21 -5
  391. package/dist/domain/{javascriptExportShapeComparisonSchemas.js → javascript/javascriptExportShapeComparisonSchemas.js} +2 -2
  392. package/dist/domain/{javascriptExportShapeSelection.js → javascript/javascriptExportShapeSelection.js} +1 -1
  393. package/dist/domain/{javascriptExportShapeVariants.js → javascript/javascriptExportShapeVariants.js} +1 -11
  394. package/dist/domain/{javascriptFeatureSeed.js → javascript/javascriptFeatureSeed.js} +4 -3
  395. package/dist/domain/{javascriptFeatureTrace.js → javascript/javascriptFeatureTrace.js} +2 -2
  396. package/dist/domain/{javascriptFeatureTraceSchemas.js → javascript/javascriptFeatureTraceSchemas.js} +32 -18
  397. package/dist/domain/{javascriptFeatureTraversal.js → javascript/javascriptFeatureTraversal.js} +6 -2
  398. package/dist/domain/{javascriptNativeHandoff.js → javascript/javascriptNativeHandoff.js} +1 -1
  399. package/dist/domain/javascript/javascriptRecovery.js +88 -0
  400. package/dist/domain/{javascriptRuntimeLoadState.js → javascript/javascriptRuntimeLoadState.js} +1 -1
  401. package/dist/domain/{javascriptRuntimeObservation.js → javascript/javascriptRuntimeObservation.js} +2 -2
  402. package/dist/domain/{javascriptRuntimeReconciliationActive.js → javascript/javascriptRuntimeReconciliationActive.js} +3 -3
  403. package/dist/domain/{javascriptRuntimeReconciliationGraph.js → javascript/javascriptRuntimeReconciliationGraph.js} +1 -1
  404. package/dist/domain/{javascriptRuntimeReconciliationMatching.js → javascript/javascriptRuntimeReconciliationMatching.js} +2 -2
  405. package/dist/domain/{javascriptRuntimeReconciliationParsing.js → javascript/javascriptRuntimeReconciliationParsing.js} +5 -5
  406. package/dist/domain/{javascriptRuntimeReconciliationResult.js → javascript/javascriptRuntimeReconciliationResult.js} +2 -2
  407. package/dist/domain/{javascriptRuntimeReconciliationSchemas.js → javascript/javascriptRuntimeReconciliationSchemas.js} +4 -4
  408. package/dist/domain/{javascriptRuntimeStaticCandidates.js → javascript/javascriptRuntimeStaticCandidates.js} +1 -1
  409. package/dist/domain/{javascriptSemanticAnalysis.js → javascript/javascriptSemanticAnalysis.js} +40 -14
  410. package/dist/domain/{javascriptSemanticAsyncEffects.js → javascript/javascriptSemanticAsyncEffects.js} +2 -1
  411. package/dist/domain/{javascriptSemanticCallResolution.js → javascript/javascriptSemanticCallResolution.js} +10 -5
  412. package/dist/domain/{javascriptSemanticCalls.js → javascript/javascriptSemanticCalls.js} +7 -4
  413. package/dist/domain/{javascriptSemanticChildProcesses.js → javascript/javascriptSemanticChildProcesses.js} +4 -2
  414. package/dist/domain/{javascriptSemanticDataEffectHelpers.js → javascript/javascriptSemanticDataEffectHelpers.js} +7 -6
  415. package/dist/domain/{javascriptSemanticDataEffects.js → javascript/javascriptSemanticDataEffects.js} +8 -6
  416. package/dist/domain/{javascriptSemanticFingerprints.js → javascript/javascriptSemanticFingerprints.js} +40 -16
  417. package/dist/domain/{javascriptSemanticGraph.js → javascript/javascriptSemanticGraph.js} +23 -7
  418. package/dist/domain/{javascriptSemanticGraphSchemas.js → javascript/javascriptSemanticGraphSchemas.js} +3 -3
  419. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +116 -0
  420. package/dist/domain/javascript/javascriptSemanticMutationValues.js +53 -0
  421. package/dist/domain/{javascriptSemanticObjects.js → javascript/javascriptSemanticObjects.js} +5 -5
  422. package/dist/domain/{javascriptSemanticPrimitives.js → javascript/javascriptSemanticPrimitives.js} +1 -1
  423. package/dist/domain/{javascriptSemanticProjection.js → javascript/javascriptSemanticProjection.js} +31 -44
  424. package/dist/domain/{javascriptSemanticPromises.js → javascript/javascriptSemanticPromises.js} +77 -22
  425. package/dist/domain/{javascriptSemanticProvenance.js → javascript/javascriptSemanticProvenance.js} +4 -1
  426. package/dist/domain/{javascriptSemanticQuery.js → javascript/javascriptSemanticQuery.js} +1 -1
  427. package/dist/domain/{javascriptSemanticQueryAssessment.js → javascript/javascriptSemanticQueryAssessment.js} +1 -1
  428. package/dist/domain/{javascriptSemanticQueryIdentity.js → javascript/javascriptSemanticQueryIdentity.js} +1 -1
  429. package/dist/domain/{javascriptSemanticQuerySchemas.js → javascript/javascriptSemanticQuerySchemas.js} +3 -3
  430. package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +25 -0
  431. package/dist/domain/{javascriptSemanticResources.js → javascript/javascriptSemanticResources.js} +2 -1
  432. package/dist/domain/{javascriptSemanticReturns.js → javascript/javascriptSemanticReturns.js} +1 -1
  433. package/dist/domain/{javascriptSemanticTraceSchemas.js → javascript/javascriptSemanticTraceSchemas.js} +2 -2
  434. package/dist/domain/javascript/javascriptSemanticTraversal.js +55 -0
  435. package/dist/domain/javascript/javascriptSemanticValueTypes.js +1 -0
  436. package/dist/domain/{javascriptSemanticValues.js → javascript/javascriptSemanticValues.js} +72 -48
  437. package/dist/domain/{javascriptStaticAnalysis.js → javascript/javascriptStaticAnalysis.js} +7 -4
  438. package/dist/domain/{javascriptStaticAnalysisBundler.js → javascript/javascriptStaticAnalysisBundler.js} +14 -11
  439. package/dist/domain/{javascriptStaticAnalysisCalls.js → javascript/javascriptStaticAnalysisCalls.js} +2 -2
  440. package/dist/domain/{javascriptStaticAnalysisHelpers.js → javascript/javascriptStaticAnalysisHelpers.js} +231 -40
  441. package/dist/domain/{sourceToBundleComparison.js → javascript/sourceToBundleComparison.js} +2 -2
  442. package/dist/domain/{sourceToBundleComparisonSchemas.js → javascript/sourceToBundleComparisonSchemas.js} +4 -4
  443. package/dist/domain/{sourceToBundleSignals.js → javascript/sourceToBundleSignals.js} +2 -2
  444. package/dist/domain/jsonValue.js +4 -0
  445. package/dist/domain/localPath.js +2 -0
  446. package/dist/domain/{managedApplicationGraph.js → managed/managedApplicationGraph.js} +4 -4
  447. package/dist/domain/{managedApplicationGraphNodes.js → managed/managedApplicationGraphNodes.js} +1 -1
  448. package/dist/domain/{managedArtifact.js → managed/managedArtifact.js} +1 -1
  449. package/dist/domain/{managedMemberComparison.js → managed/managedMemberComparison.js} +4 -4
  450. package/dist/domain/{managedMemberComparisonCoverage.js → managed/managedMemberComparisonCoverage.js} +2 -1
  451. package/dist/domain/{managedMemberComparisonItems.js → managed/managedMemberComparisonItems.js} +97 -40
  452. package/dist/domain/{managedMemberComparisonMatch.js → managed/managedMemberComparisonMatch.js} +22 -11
  453. package/dist/domain/{managedNativeVerification.js → managed/managedNativeVerification.js} +1 -1
  454. package/dist/domain/{managedNativeVerificationMatch.js → managed/managedNativeVerificationMatch.js} +3 -3
  455. package/dist/domain/{managedNativeVerificationSchemas.js → managed/managedNativeVerificationSchemas.js} +6 -5
  456. package/dist/domain/{managedReconstruction.js → managed/managedReconstruction.js} +3 -3
  457. package/dist/domain/native/binaryLayout.js +357 -0
  458. package/dist/domain/native/nativeCallObservation.js +164 -0
  459. package/dist/domain/{nativeFunctionAnnotations.js → native/nativeFunctionAnnotations.js} +1 -1
  460. package/dist/domain/{nativeInspection.js → native/nativeInspection.js} +1 -1
  461. package/dist/domain/{nativeInvestigationGraph.js → native/nativeInvestigationGraph.js} +13 -4
  462. package/dist/domain/{nativeLoadImage.js → native/nativeLoadImage.js} +1 -1
  463. package/dist/domain/{nativeUiObservation.js → native/nativeUiObservation.js} +20 -6
  464. package/dist/domain/{objcSwiftMetadata.js → native/objcSwiftMetadata.js} +17 -39
  465. package/dist/domain/native/recordedCrash.js +266 -0
  466. package/dist/domain/native/recordedCrashNoteCoverage.js +73 -0
  467. package/dist/domain/process/processCapture.js +316 -0
  468. package/dist/domain/{processCaptureExample.js → process/processCaptureExample.js} +5 -0
  469. package/dist/domain/process/processCaptureParsing.js +54 -0
  470. package/dist/domain/{processCaptureValidation.js → process/processCaptureValidation.js} +18 -2
  471. package/dist/domain/{processComparison.js → process/processComparison.js} +1 -1
  472. package/dist/domain/{processObservation.js → process/processObservation.js} +1 -1
  473. package/dist/domain/{processScenario.js → process/processScenario.js} +17 -17
  474. package/dist/domain/{processTraceSpecification.js → process/processTraceSpecification.js} +1 -1
  475. package/dist/domain/propertyListKeys.js +69 -0
  476. package/dist/domain/providerCleanupError.js +5 -2
  477. package/dist/domain/providerSelectionError.js +4 -2
  478. package/dist/domain/reconstructionCoverageEvaluation.js +46 -24
  479. package/dist/domain/reconstructionCoverageInput.js +7 -0
  480. package/dist/domain/reconstructionVerification.js +3 -3
  481. package/dist/domain/reconstructionVerificationSchemas.js +1 -1
  482. package/dist/domain/residualUnknown.js +3 -2
  483. package/dist/domain/runtimeVersion.js +2 -0
  484. package/dist/domain/sourceMapEnvelope.js +38 -0
  485. package/dist/domain/staticRuntimeCorrelation.js +3 -3
  486. package/dist/domain/unicodeCodePointOrder.js +11 -6
  487. package/dist/domain/webBundleAnalyzerAst.js +2 -34
  488. package/dist/domain/webBundleAnalyzerInspection.js +12 -9
  489. package/dist/domain/webCaptureDiff.js +1 -0
  490. package/dist/domain/webEventListeners.js +28 -0
  491. package/dist/domain/webExecution.js +74 -0
  492. package/dist/domain/webMcpDiscovery.js +1 -7
  493. package/dist/domain/webModuleImports.js +104 -0
  494. package/dist/domain/webModuleTrace.js +106 -0
  495. package/dist/domain/webNetworkCapture.js +118 -0
  496. package/dist/domain/webNetworkCaptureCoordinates.js +58 -0
  497. package/dist/domain/webRuntime.js +69 -0
  498. package/dist/domain/webScreenshot.js +1 -7
  499. package/dist/domain/webScriptArtifacts.js +39 -0
  500. package/dist/domain/webScriptExport.js +86 -0
  501. package/dist/domain/webScriptExportError.js +13 -0
  502. package/dist/domain/webScriptExportPlan.js +108 -0
  503. package/dist/domain/webSourceLocation.js +106 -0
  504. package/dist/domain/webSourcePosition.js +21 -0
  505. package/dist/dotnet/ManagedArtifactInspector.js +1 -1
  506. package/dist/dotnet/ManagedExceptionRegionValidation.js +41 -0
  507. package/dist/dotnet/ManagedMemberInspector.js +5 -3
  508. package/dist/dotnet/ManagedMemberInspectorCore.js +72 -32
  509. package/dist/dotnet/ManagedMemberInstructionDecoder.js +23 -7
  510. package/dist/dotnet/ManagedMemberRows.js +19 -6
  511. package/dist/dotnet/ManagedMetadataHeaps.js +20 -2
  512. package/dist/dotnet/ManagedMetadataInventory.js +38 -28
  513. package/dist/dotnet/ManagedMetadataInventoryRows.js +24 -10
  514. package/dist/dotnet/ManagedMethodBodyReader.js +7 -1
  515. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +37 -19
  516. package/dist/dotnet/ManagedNativeBoundaryInspector.js +59 -51
  517. package/dist/dotnet/ManagedPeReader.js +11 -0
  518. package/dist/dotnet/ManagedStaticProvider.js +3 -33
  519. package/dist/dotnet/ManagedStaticProviderMetadata.js +36 -0
  520. package/dist/evaluation/CodexAgentEval.js +2 -1
  521. package/dist/evm/EvmBytecodeCarrier.js +21 -0
  522. package/dist/evm/EvmWorkerLimits.js +40 -0
  523. package/dist/evm/EvmoleFailures.js +126 -0
  524. package/dist/evm/EvmoleInterfaceAdapter.js +53 -0
  525. package/dist/evm/EvmoleInterfaceProvider.js +273 -0
  526. package/dist/evm/EvmoleInterfaceWorker.js +87 -0
  527. package/dist/evm/EvmoleRelease.js +16 -0
  528. package/dist/firmware/FirmwareCommand.js +1 -0
  529. package/dist/firmware/FirmwareProvider.js +18 -12
  530. package/dist/firmware/FirmwarePublication.js +1 -1
  531. package/dist/firmware/FirmwareRelease.js +1 -1
  532. package/dist/firmware/FirmwareReports.js +12 -0
  533. package/dist/firmware/FirmwareVersion.js +80 -0
  534. package/dist/generatedPackageMetadata.js +2 -2
  535. package/dist/ghidra/GhidraFunctionValues.js +5 -5
  536. package/dist/ghidra/GhidraInstallation.js +38 -34
  537. package/dist/ghidra/GhidraInstallationPolicy.js +140 -0
  538. package/dist/ghidra/GhidraInventoryValues.js +1 -1
  539. package/dist/ghidra/GhidraLauncher.js +13 -4
  540. package/dist/ghidra/GhidraLoadImageAttest.js +36 -0
  541. package/dist/ghidra/GhidraLoadImageValues.js +1 -1
  542. package/dist/ghidra/GhidraProvider.js +17 -235
  543. package/dist/ghidra/GhidraProviderCapabilities.js +8 -15
  544. package/dist/ghidra/GhidraProviderClient.js +209 -0
  545. package/dist/ghidra/GhidraResponseBuffer.js +7 -1
  546. package/dist/ghidra/extensions/nativeaot/NativeAotReport.js +17 -1
  547. package/dist/hopper/BridgeLauncher.js +2 -0
  548. package/dist/hopper/HopperProvider.js +2 -48
  549. package/dist/hopper/HopperProviderCapabilities.js +73 -0
  550. package/dist/hopper/HopperResponseStream.js +7 -1
  551. package/dist/hopper/LinuxPrivateDisplayProbe.js +8 -6
  552. package/dist/ida/IdaProviderCapabilities.js +3 -11
  553. package/dist/ida/IdaSessionClient.js +12 -0
  554. package/dist/{browser → inspector}/JavaScriptRuntimeScope.js +16 -5
  555. package/dist/{browser → inspector}/V8InspectorCaptureProjection.js +46 -8
  556. package/dist/{browser → inspector}/V8InspectorEndpoint.js +1 -1
  557. package/dist/{browser → inspector}/V8InspectorProvider.js +10 -13
  558. package/dist/inspector/providerIdentity.js +6 -0
  559. package/dist/javascript/recovery/RecoveryFiles.js +122 -0
  560. package/dist/javascript/recovery/WakaruCommand.js +119 -0
  561. package/dist/javascript/recovery/WakaruExecution.js +100 -0
  562. package/dist/javascript/recovery/WakaruProvider.js +96 -0
  563. package/dist/javascript/recovery/WakaruPublication.js +102 -0
  564. package/dist/javascript/recovery/WakaruRelease.js +29 -0
  565. package/dist/javascript/recovery/WakaruReport.js +134 -0
  566. package/dist/javascript/sourceMaps/SourceMapCodecProcess.js +37 -0
  567. package/dist/javascript/sourceMaps/SourceMapCodecProtocol.js +20 -0
  568. package/dist/javascript/sourceMaps/SourceMapCommand.js +177 -0
  569. package/dist/javascript/sourceMaps/SourceMapDecoder.js +61 -0
  570. package/dist/javascript/sourceMaps/SourceMapFormat.js +185 -0
  571. package/dist/javascript/sourceMaps/TraceSourceMap.js +138 -0
  572. package/dist/main/shutdown.js +8 -2
  573. package/dist/main/transport.js +24 -7
  574. package/dist/main.js +4 -18
  575. package/dist/native/AppleDispatchCoverage.js +58 -0
  576. package/dist/native/AppleDispatchMetadata.js +71 -509
  577. package/dist/native/AppleMachoFixups.js +292 -0
  578. package/dist/native/AppleMachoSelection.js +188 -0
  579. package/dist/native/AppleObjcCategories.js +59 -0
  580. package/dist/native/AppleObjcDispatchFacets.js +257 -0
  581. package/dist/native/AppleObjcProperties.js +68 -0
  582. package/dist/native/AppleObjcProtocols.js +2 -1
  583. package/dist/native/AppleSwiftDispatchFacets.js +150 -0
  584. package/dist/native/CommandRunner.js +2 -1
  585. package/dist/native/LldbCallTracer.js +278 -0
  586. package/dist/native/NativeCallObservation.js +135 -0
  587. package/dist/native/NativeMacOSProvider.js +151 -75
  588. package/dist/native/NativeMacOSProviderMetadata.js +47 -0
  589. package/dist/native/NativeMachoInspection.js +45 -14
  590. package/dist/native/NativeUiHelperRuntime.js +7 -3
  591. package/dist/native/NativeUiObservation.js +8 -4
  592. package/dist/native/NativeUiOutputBudget.js +8 -0
  593. package/dist/native/parsers/codesign.js +40 -5
  594. package/dist/native/parsers/demangle.js +6 -2
  595. package/dist/native/parsers/dyldInfo.js +13 -4
  596. package/dist/native/parsers/echoedPath.js +14 -0
  597. package/dist/native/parsers/lipo.js +14 -0
  598. package/dist/native/parsers/otool.js +1 -1
  599. package/dist/native/parsers/plist.js +174 -19
  600. package/dist/native/pwndbg/PwndbgCoreContext.js +160 -0
  601. package/dist/native/pwntools/PwntoolsDecoder.js +203 -0
  602. package/dist/native/pwntools/PwntoolsFailures.js +180 -0
  603. package/dist/native/pwntools/PwntoolsLayoutProvider.js +36 -0
  604. package/dist/native/pwntools/PwntoolsRecordedCrashProvider.js +75 -0
  605. package/dist/native/pwntools/PwntoolsRelease.js +19 -0
  606. package/dist/native/pwntools/PwntoolsResourceLimits.js +76 -0
  607. package/dist/native/pwntools/RecordedCrashSourceBindings.js +46 -0
  608. package/dist/native/pwntools/RecordedCrashStructureBindings.js +101 -0
  609. package/dist/process/DarwinProcessRunTokenReader.js +294 -0
  610. package/dist/process/ExecFileOutput.js +2 -0
  611. package/dist/process/OwnedCommand.js +113 -0
  612. package/dist/process/ProcessOwnership.js +263 -33
  613. package/dist/process/ProcessOwnershipObservation.js +161 -24
  614. package/dist/process/ProviderProcess.js +68 -20
  615. package/dist/{application → process/capture}/FilesystemSnapshot.js +20 -5
  616. package/dist/{application → process/capture}/ProcessCaptureCapability.js +16 -1
  617. package/dist/{application → process/capture}/ProcessCaptureError.js +17 -1
  618. package/dist/process/capture/ProcessCaptureLifecycle.js +615 -0
  619. package/dist/process/capture/ProcessHarness.js +452 -0
  620. package/dist/{application → process/capture}/ProcessSampling.js +2 -2
  621. package/dist/reference/ReferenceSourceReaderEntries.js +6 -1
  622. package/dist/server/createServer.js +70 -6
  623. package/dist/server/mcpClientMetadata.js +6 -3
  624. package/dist/server/promptCompletion.js +10 -3
  625. package/dist/server/registerAndroidTools.js +1 -1
  626. package/dist/server/registerApplicationTools/compareExportShapes.js +2 -2
  627. package/dist/server/registerApplicationTools/compareSourceToBundle.js +2 -2
  628. package/dist/server/registerApplicationTools/compareVersions.js +2 -2
  629. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +43 -0
  630. package/dist/server/registerApplicationTools/traceFeature.js +1 -1
  631. package/dist/server/registerApplicationTools/traceSemantics.js +1 -1
  632. package/dist/server/registerApplicationTools.js +2 -0
  633. package/dist/server/registerBinaryDiagnosticsTools.js +17 -0
  634. package/dist/server/registerBrowserScenarioTool.js +6 -2
  635. package/dist/server/registerBrowserTools.js +13 -2
  636. package/dist/server/registerCloseLifecycleTool.js +1 -1
  637. package/dist/server/registerElectronTools.js +21 -7
  638. package/dist/server/registerEvidenceTools.js +1 -1
  639. package/dist/server/registerEvmTools.js +17 -0
  640. package/dist/server/registerJavaScriptRecoveryTool.js +17 -0
  641. package/dist/server/registerJavaScriptRuntimeObservationTools.js +9 -4
  642. package/dist/server/registerManagedTools.js +3 -3
  643. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +2 -2
  644. package/dist/server/registerManagedWorkflowTools/contract.js +1 -1
  645. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +1 -1
  646. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +1 -1
  647. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +2 -2
  648. package/dist/server/registerNativeTools.js +1 -1
  649. package/dist/server/registerProcessComparisonTool.js +1 -1
  650. package/dist/server/registerPrompts.js +5 -1
  651. package/dist/server/registerRecordedCrashTools.js +17 -0
  652. package/dist/server/registerSessionTools.js +3 -3
  653. package/dist/server/registerWebModuleTool.js +17 -0
  654. package/dist/server/registerWebNetworkCaptureTool.js +28 -0
  655. package/dist/server/registerWebRuntimeTools.js +31 -0
  656. package/dist/server/registerWebScriptTool.js +18 -0
  657. package/dist/server/registerWebSourceLocationTool.js +17 -0
  658. package/dist/server/sessionAvailabilityPolicy.js +27 -12
  659. package/dist/server/sessionToolPolicies.js +1 -1
  660. package/dist/server/toolResult.js +1 -1
  661. package/dist/windows/WindowsOwnedProcess.js +3 -1
  662. package/install.sh +12 -2
  663. package/native/windows/README.md +5 -0
  664. package/native/windows/build/manifest.json +2 -2
  665. package/native/windows/build/rea-windows-x64.node +0 -0
  666. package/package.json +75 -26
  667. package/scripts/hopper-demo-x11.py +67 -8
  668. package/scripts/rea.mjs +19 -3
  669. package/skills/reverse-engineer-anything/SKILL.md +23 -3
  670. package/skills/reverse-engineer-anything/references/android-applications.md +2 -2
  671. package/skills/reverse-engineer-anything/references/javascript-applications.md +1 -1
  672. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +61 -23
  673. package/third_party/README.md +60 -0
  674. package/third_party/evmole/LICENSE +21 -0
  675. package/third_party/evmole/README.md +22 -0
  676. package/third_party/pwndbg/LICENSE.md +21 -0
  677. package/third_party/pwndbg/README.md +23 -0
  678. package/third_party/pwntools/README.md +40 -0
  679. package/dist/application/AuthorizedArtifactInventory.js +0 -7
  680. package/dist/application/JavaScriptSemanticGraphProjection.js +0 -38
  681. package/dist/application/ProcessCaptureLifecycle.js +0 -299
  682. package/dist/application/ProcessHarness.js +0 -275
  683. package/dist/application/StoreFileLock.js +0 -124
  684. package/dist/application/runtime.js +0 -53
  685. package/dist/contracts/processCaptureExample.js +0 -2
  686. package/dist/domain/appleApplication.js +0 -181
  687. package/dist/domain/bytecodeProvider.js +0 -178
  688. package/dist/domain/customProtocolCapture.js +0 -137
  689. package/dist/domain/eventProcessTree.js +0 -225
  690. package/dist/domain/javascriptAstValues.js +0 -13
  691. package/dist/domain/javascriptSemanticTraversal.js +0 -30
  692. package/dist/domain/mobileApplicationInvestigation.js +0 -159
  693. package/dist/domain/packageAnalysis.js +0 -123
  694. package/dist/domain/peInspection.js +0 -197
  695. package/dist/domain/processCapture.js +0 -177
  696. package/dist/domain/processCaptureParsing.js +0 -21
  697. package/dist/domain/protocolCapture.js +0 -217
  698. package/dist/domain/runtimeIdentification.js +0 -212
  699. package/dist/generatedMcpToolCatalog.js +0 -37
  700. package/dist/native/NativeHostCapabilities.js +0 -23
  701. /package/dist/application/{AndroidAnalysisPort.js → DirectAnalysisDependencies.js} +0 -0
  702. /package/dist/application/{BinarySessionPort.js → WebModulePorts.js} +0 -0
  703. /package/dist/application/{ElectronActiveObservationPort.js → WebNetworkCapturePort.js} +0 -0
  704. /package/dist/application/{ElectronObservationPort.js → WebRuntimePort.js} +0 -0
  705. /package/dist/application/{FirmwareAnalysisPort.js → WebScriptArtifactPort.js} +0 -0
  706. /package/dist/application/{JavaScriptArtifactAnalysisTypes.js → WebSourceLocationPorts.js} +0 -0
  707. /package/dist/application/{JavaScriptRuntimeObservationPort.js → android/AndroidAnalysisPort.js} +0 -0
  708. /package/dist/application/{ArtifactExtractionDestination.js → artifacts/ArtifactExtractionDestination.js} +0 -0
  709. /package/dist/application/{AbortablePromise.js → binary/AbortablePromise.js} +0 -0
  710. /package/dist/{domain/electronStaticAnalysisTypes.js → application/binary/BinarySessionPort.js} +0 -0
  711. /package/dist/application/{BinarySessionStatus.js → binary/BinarySessionStatus.js} +0 -0
  712. /package/dist/{domain/javascriptSemanticValueTypes.js → application/binaryDiagnostics/BinaryLayoutPort.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/artifacts/{NibArchive.js → apple/NibArchive.js} +0 -0
  722. /package/dist/{application/ArtifactInventory → artifacts/inventory}/policy.js +0 -0
  723. /package/dist/{application/ArtifactInventory → artifacts/inventory}/types.js +0 -0
  724. /package/dist/domain/{androidAnalysis.js → android/androidAnalysis.js} +0 -0
  725. /package/dist/domain/{electronStaticAnalysis.js → javascript/electronStaticAnalysis.js} +0 -0
  726. /package/dist/domain/{javascriptExportShapeComparisonIdentity.js → javascript/javascriptExportShapeComparisonIdentity.js} +0 -0
  727. /package/dist/domain/{javascriptRuntimeReconciliation.js → javascript/javascriptRuntimeReconciliation.js} +0 -0
  728. /package/dist/domain/{javascriptRuntimeReconciliationRuntime.js → javascript/javascriptRuntimeReconciliationRuntime.js} +0 -0
  729. /package/dist/domain/{javascriptSemanticCoverage.js → javascript/javascriptSemanticCoverage.js} +0 -0
  730. /package/dist/domain/{javascriptSemanticDerivedAnalysis.js → javascript/javascriptSemanticDerivedAnalysis.js} +0 -0
  731. /package/dist/domain/{javascriptSemanticGraphSerialization.js → javascript/javascriptSemanticGraphSerialization.js} +0 -0
  732. /package/dist/domain/{javascriptSemanticIr.js → javascript/javascriptSemanticIr.js} +0 -0
  733. /package/dist/domain/{javascriptSemanticQueryRelations.js → javascript/javascriptSemanticQueryRelations.js} +0 -0
  734. /package/dist/domain/{javascriptSemanticState.js → javascript/javascriptSemanticState.js} +0 -0
  735. /package/dist/domain/{javascriptSourceParser.js → javascript/javascriptSourceParser.js} +0 -0
  736. /package/dist/domain/{javascriptStaticAnalysisFindings.js → javascript/javascriptStaticAnalysisFindings.js} +0 -0
  737. /package/dist/domain/{javascriptStaticAnalysisState.js → javascript/javascriptStaticAnalysisState.js} +0 -0
  738. /package/dist/domain/{javascriptStaticAnalysisTypes.js → javascript/javascriptStaticAnalysisTypes.js} +0 -0
  739. /package/dist/domain/{managedApplicationGraphCoverage.js → managed/managedApplicationGraphCoverage.js} +0 -0
  740. /package/dist/domain/{managedApplicationGraphNodeCoverage.js → managed/managedApplicationGraphNodeCoverage.js} +0 -0
  741. /package/dist/domain/{nativeApiBoundary.js → native/nativeApiBoundary.js} +0 -0
  742. /package/dist/domain/{nativeDataType.js → native/nativeDataType.js} +0 -0
  743. /package/dist/domain/{nativeInstruction.js → native/nativeInstruction.js} +0 -0
  744. /package/dist/domain/{nativeMetadataRecovery.js → native/nativeMetadataRecovery.js} +0 -0
  745. /package/dist/domain/{nativeValueFlow.js → native/nativeValueFlow.js} +0 -0
  746. /package/dist/domain/{nativeValueTrace.js → native/nativeValueTrace.js} +0 -0
  747. /package/dist/domain/{processEvidenceProvider.js → process/processEvidenceProvider.js} +0 -0
  748. /package/dist/domain/{processTraceComparison.js → process/processTraceComparison.js} +0 -0
  749. /package/dist/domain/{processTraceDimensionProjection.js → process/processTraceDimensionProjection.js} +0 -0
  750. /package/dist/domain/{processTraceEvaluation.js → process/processTraceEvaluation.js} +0 -0
  751. /package/dist/{application → process/capture}/ProcessCaptureEnvironment.js +0 -0
  752. /package/dist/{application → process/capture}/ProcessCaptureJournal.js +0 -0
  753. /package/dist/{application → process/capture}/ProcessFilesystemEffects.js +0 -0
  754. /package/dist/{application → process/capture}/ProcessNormalization.js +0 -0
  755. /package/dist/{application → process/capture}/ProcessScenarioRuntimeValidation.js +0 -0
  756. /package/dist/{application → process/capture}/ProcessTimer.js +0 -0
  757. /package/dist/{application → process/capture}/TerminalRenderer.js +0 -0
@@ -1,27 +1,26 @@
1
1
  import { parseConfig } from "../config.js";
2
2
  import { EnhancedTools } from "./EnhancedTools.js";
3
3
  import { executeFunctionAnalysisEvidence } from "./FunctionAnalysisEvidence.js";
4
- import { createBinarySession, createManagedBinarySession } from "./runtime.js";
5
4
  import { silentLogger } from "../logger.js";
6
5
  import { createEvidence } from "../domain/evidence.js";
7
- import { isManagedToolName, } from "../contracts/managedToolContracts.js";
6
+ import { isManagedToolName, } from "../contracts/managed/managedToolContracts.js";
8
7
  import { EvidenceIntegrityError } from "../domain/evidenceErrors.js";
9
8
  import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
10
9
  import {} from "../domain/analysisErrorBase.js";
11
10
  import { access } from "node:fs/promises";
12
- import { readAnalysisSnapshot, writeAnalysisSnapshot, } from "./AnalysisSnapshotFiles.js";
11
+ import { readAnalysisSnapshot, writeAnalysisSnapshot, } from "./binary/AnalysisSnapshotFiles.js";
13
12
  import { parseBinaryTarget } from "./BinaryTargetResolver.js";
14
13
  import { snapshotEvidenceForQuery, snapshotMatchesTarget, } from "../domain/analysisSnapshot.js";
14
+ import { analysisProfileSchema, committedProviderSchema, } from "../domain/analysisProfile.js";
15
15
  import { err, ok } from "../domain/result.js";
16
16
  import { REA_WORKFLOW_PROVIDER, workflowAnalysisProfile, } from "./InvestigationProviders.js";
17
17
  import { artifactInspectionResultSchema } from "../domain/artifactInspection.js";
18
- export { runCapabilityStatus, runProviderStatus, } from "./DirectAnalysisStatus.js";
19
18
  /**
20
19
  * Open one binary, execute one tool, and always release provider resources.
21
20
  * Unlike MCP mode, every CLI invocation is intentionally isolated and does not
22
21
  * retain a target or provider client for a subsequent command.
23
22
  */
24
- export const runDirectAnalysis = async (path, tool, arguments_, options = {}) => withProcessCancellation(options.signal, (signal) => runAnalysis(path, tool, arguments_, {
23
+ export const runDirectAnalysis = async (dependencies, path, tool, arguments_, options = {}) => withProcessCancellation(options.signal, (signal) => runAnalysis(dependencies, path, tool, arguments_, {
25
24
  logger: options.logger ?? silentLogger,
26
25
  snapshotPath: options.snapshotPath,
27
26
  signal,
@@ -33,16 +32,16 @@ export const runDirectAnalysis = async (path, tool, arguments_, options = {}) =>
33
32
  : { providerId: options.providerId }),
34
33
  }));
35
34
  /** Execute one provider-native semantic operation with atomic provenance. */
36
- export const runProviderAnalysis = async (...[path, tool, arguments_, logger = silentLogger, signal]) => isManagedToolName(tool)
37
- ? runManagedProviderAnalysis(path, tool, signal)
38
- : withProcessCancellation(signal, (operationSignal) => runAnalysis(path, tool, arguments_, {
35
+ export const runProviderAnalysis = async (dependencies, ...[path, tool, arguments_, logger = silentLogger, signal]) => isManagedToolName(tool)
36
+ ? runManagedProviderAnalysis(dependencies, path, tool, signal)
37
+ : withProcessCancellation(signal, (operationSignal) => runAnalysis(dependencies, path, tool, arguments_, {
39
38
  logger,
40
39
  snapshotPath: undefined,
41
40
  signal: operationSignal,
42
41
  }));
43
42
  /** Execute managed metadata inspection in an isolated managed-only session. */
44
- export const runManagedProviderExecution = async (path, tool, signal) => withProcessCancellation(signal, async (operationSignal) => {
45
- const session = createManagedBinarySession();
43
+ export const runManagedProviderExecution = async (dependencies, path, tool, signal) => withProcessCancellation(signal, async (operationSignal) => {
44
+ const session = dependencies.createManagedBinarySession();
46
45
  try {
47
46
  const opened = await session.open(path, { signal: operationSignal });
48
47
  if (!opened.ok)
@@ -53,8 +52,8 @@ export const runManagedProviderExecution = async (path, tool, signal) => withPro
53
52
  await session.close();
54
53
  }
55
54
  });
56
- const runManagedProviderAnalysis = async (path, tool, signal) => {
57
- const execution = await runManagedProviderExecution(path, tool, signal);
55
+ const runManagedProviderAnalysis = async (dependencies, path, tool, signal) => {
56
+ const execution = await runManagedProviderExecution(dependencies, path, tool, signal);
58
57
  if (!execution.ok)
59
58
  return cliError(execution.error);
60
59
  const value = execution.value;
@@ -67,12 +66,12 @@ const runManagedProviderAnalysis = async (path, tool, signal) => {
67
66
  locations: value.locations,
68
67
  });
69
68
  };
70
- const runAnalysis = async (path, tool, arguments_, options) => {
69
+ const runAnalysis = async (dependencies, path, tool, arguments_, options) => {
71
70
  const { logger, signal, snapshotPath } = options;
72
71
  const config = parseConfig(options.environment ?? process.env);
73
72
  if (!config.ok)
74
73
  return cliError(config.error);
75
- const session = createBinarySession(config.value, logger);
74
+ const session = dependencies.createBinarySession(config.value, logger);
76
75
  try {
77
76
  const prepared = await prepareSnapshot({
78
77
  path,
@@ -84,7 +83,42 @@ const runAnalysis = async (path, tool, arguments_, options) => {
84
83
  if (!prepared.ok)
85
84
  return cliError(prepared.error);
86
85
  const { snapshot } = prepared.value;
87
- const opened = await session.open(path, {
86
+ let resolvedTarget;
87
+ if (snapshot !== undefined && prepared.value.target !== undefined) {
88
+ const preview = await session.previewTarget(prepared.value.target, {
89
+ signal,
90
+ snapshot,
91
+ ...(options.formatHint === undefined
92
+ ? {}
93
+ : { formatHint: options.formatHint }),
94
+ ...(options.providerId === undefined
95
+ ? {}
96
+ : { providerId: options.providerId }),
97
+ });
98
+ if (!preview.ok)
99
+ return cliError(preview.error);
100
+ resolvedTarget = preview.value;
101
+ const route = preview.value.route;
102
+ const bindingProfile = route.profile ?? undefined;
103
+ const evidenceProfile = analysisProfileForRoute(route, tool);
104
+ if (bindingProfile !== undefined &&
105
+ evidenceProfile !== undefined &&
106
+ allowsSnapshotReplay(route, tool)) {
107
+ const cached = snapshotEvidenceForQuery(snapshot, {
108
+ target: preview.value.target,
109
+ bindingProfile,
110
+ operation: tool,
111
+ parameters: arguments_,
112
+ provider: isWorkflowEvidenceTool(tool)
113
+ ? REA_WORKFLOW_PROVIDER
114
+ : providerIdentityForRoute(route, tool),
115
+ evidenceProfile,
116
+ });
117
+ if (cached !== undefined)
118
+ return cached;
119
+ }
120
+ }
121
+ const openOptions = {
88
122
  signal,
89
123
  ...(options.formatHint === undefined
90
124
  ? {}
@@ -93,26 +127,13 @@ const runAnalysis = async (path, tool, arguments_, options) => {
93
127
  ...(options.providerId === undefined
94
128
  ? {}
95
129
  : { providerId: options.providerId }),
96
- });
130
+ };
131
+ const opened = resolvedTarget === undefined
132
+ ? await session.open(path, openOptions)
133
+ : await session.openResolvedTarget(resolvedTarget, openOptions);
97
134
  if (!opened.ok)
98
135
  return cliError(opened.error);
99
136
  const evidenceProfile = analysisProfileForEvidence(session, tool);
100
- const bindingProfile = session.analysisProfile();
101
- if (canReplayDirectTool(session, tool) &&
102
- snapshot !== undefined &&
103
- evidenceProfile !== undefined &&
104
- bindingProfile !== undefined) {
105
- const cached = snapshotEvidenceForQuery(snapshot, {
106
- target: opened.value,
107
- bindingProfile,
108
- operation: tool,
109
- parameters: arguments_,
110
- provider: replayProviderFor(session, tool),
111
- evidenceProfile,
112
- });
113
- if (cached !== undefined)
114
- return cached;
115
- }
116
137
  const { output, evidence } = await executeAnalysisTool({
117
138
  session,
118
139
  openedTarget: opened.value,
@@ -123,6 +144,37 @@ const runAnalysis = async (path, tool, arguments_, options) => {
123
144
  });
124
145
  if (evidence !== undefined)
125
146
  session.recordEvidence(evidence);
147
+ if (isWorkflowEvidenceTool(tool) &&
148
+ tool !== "trace_native_ui_action" &&
149
+ snapshotPath !== undefined &&
150
+ evidence !== undefined &&
151
+ "analysis_profile" in evidence &&
152
+ session.allowsSnapshotReplay(tool)) {
153
+ const recorded = session.recordWorkflowSnapshot({
154
+ operation: tool,
155
+ parameters: arguments_,
156
+ execution: {
157
+ result: evidence.normalized_result,
158
+ rawResult: evidence.raw_result,
159
+ provider: committedProviderSchema.parse(evidence.provider),
160
+ analysisProfile: analysisProfileSchema.parse(evidence.analysis_profile),
161
+ limitations: evidence.limitations,
162
+ locations: evidence.locations,
163
+ subject: evidence.subject === null
164
+ ? null
165
+ : {
166
+ path: evidence.subject.local_path,
167
+ sha256: evidence.subject.digest.sha256,
168
+ format: evidence.subject.format,
169
+ ...(evidence.subject.architecture === null
170
+ ? {}
171
+ : { architecture: evidence.subject.architecture }),
172
+ },
173
+ },
174
+ });
175
+ if (!recorded.ok)
176
+ return cliError(recorded.error);
177
+ }
126
178
  if (tool !== "trace_native_ui_action" &&
127
179
  snapshotPath !== undefined &&
128
180
  evidence !== undefined) {
@@ -139,7 +191,6 @@ const runAnalysis = async (path, tool, arguments_, options) => {
139
191
  await session.close();
140
192
  }
141
193
  };
142
- const canReplayDirectTool = (session, tool) => tool !== "trace_native_ui_action" && session.allowsSnapshotReplay(tool);
143
194
  const executeAnalysisTool = async (input) => {
144
195
  const { session, tool, signal, evidenceProfile } = input;
145
196
  if (tool === "analyze_function") {
@@ -214,11 +265,32 @@ const prepareSnapshot = async (options) => {
214
265
  return target;
215
266
  if (!snapshotMatchesTarget(loaded.value.target, target.value))
216
267
  return err(new EvidenceIntegrityError("Analysis snapshot target does not match the requested binary"));
217
- return ok({ snapshot: loaded.value });
268
+ return ok({ snapshot: loaded.value, target: target.value });
269
+ };
270
+ const allowsSnapshotReplay = (route, tool) => {
271
+ if (tool === "trace_native_ui_action")
272
+ return false;
273
+ const descriptor = route.capabilities?.get(tool);
274
+ return descriptor === undefined
275
+ ? ![...(route.capabilities?.values() ?? [])].some(({ cachePolicy }) => cachePolicy === "live")
276
+ : descriptor.cachePolicy !== "live";
277
+ };
278
+ const analysisProfileForRoute = (route, tool) => {
279
+ const profile = route.profile;
280
+ if (profile === null || profile === undefined)
281
+ return undefined;
282
+ if (isWorkflowEvidenceTool(tool))
283
+ return workflowAnalysisProfile(profile);
284
+ const provider = providerIdentityForRoute(route, tool);
285
+ return provider.id === profile.provider.id ? profile : undefined;
286
+ };
287
+ /** Mirror BinarySession.providerIdentity for a route not opened yet. */
288
+ const providerIdentityForRoute = (route, operation) => {
289
+ const selected = route.capabilities?.get(operation)?.provider ?? route.identity;
290
+ return route.profile?.provider.id === selected.id
291
+ ? route.profile.provider
292
+ : selected;
218
293
  };
219
- const replayProviderFor = (session, tool) => isWorkflowEvidenceTool(tool)
220
- ? REA_WORKFLOW_PROVIDER
221
- : session.providerIdentity(tool);
222
294
  const analysisProfileForEvidence = (session, tool) => {
223
295
  if (!isWorkflowEvidenceTool(tool))
224
296
  return session.analysisProfile(tool);
@@ -3,12 +3,11 @@ import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
3
3
  import { jsonObjectSchema } from "../domain/jsonValue.js";
4
4
  import { createServerIdentity } from "../serverIdentity.js";
5
5
  import { silentLogger } from "../logger.js";
6
- import { createBinarySession } from "./runtime.js";
7
- const runSessionStatus = async (logger = silentLogger, environment = process.env) => {
6
+ const runSessionStatus = async (dependencies, logger = silentLogger, environment = process.env) => {
8
7
  const config = parseConfig(environment);
9
8
  if (!config.ok)
10
9
  return { error: projectAnalysisError(config.error) };
11
- const session = createBinarySession(config.value, logger);
10
+ const session = dependencies.createBinarySession(config.value, logger);
12
11
  try {
13
12
  return {
14
13
  ...jsonObjectSchema.parse(session.status()),
@@ -22,6 +21,6 @@ const runSessionStatus = async (logger = silentLogger, environment = process.env
22
21
  }
23
22
  };
24
23
  /** List binary-session provider candidates and auxiliary operation availability. */
25
- export const runProviderStatus = (logger = silentLogger, environment = process.env) => runSessionStatus(logger, environment);
24
+ export const runProviderStatus = (dependencies, logger = silentLogger, environment = process.env) => runSessionStatus(dependencies, logger, environment);
26
25
  /** List binary-session operation descriptors; this is not the full MCP catalog. */
27
- export const runCapabilityStatus = (logger = silentLogger, environment = process.env) => runSessionStatus(logger, environment);
26
+ export const runCapabilityStatus = (dependencies, logger = silentLogger, environment = process.env) => runSessionStatus(dependencies, logger, environment);
@@ -1,5 +1,5 @@
1
1
  import { homedir } from "node:os";
2
- import { supportsNodeVersion } from "../domain/runtimeVersion.js";
2
+ import { SUPPORTED_NODE_VERSION_PROSE, supportsNodeVersion, } from "../domain/runtimeVersion.js";
3
3
  import { linuxHopperLauncherPath } from "./LinuxHopper.js";
4
4
  const DEFAULT_HOPPER = "/Applications/Hopper Disassembler.app/Contents/MacOS/hopper";
5
5
  const SYSTEM_LINUX_HOPPER = "/opt/hopper/bin/Hopper";
@@ -52,7 +52,7 @@ export const doctorHealthy = (checks, providers) => {
52
52
  providers.providerInspections.some(({ available }) => available)));
53
53
  };
54
54
  const nodeCheck = (host) => check("node", supportsNodeVersion(host.nodeVersion), host.nodeVersion, {
55
- remediation: "Install Node.js 22.x (>=22.19), 24.x (>=24.11), or 26+.",
55
+ remediation: `Install ${SUPPORTED_NODE_VERSION_PROSE}.`,
56
56
  classification: "missing_dependency",
57
57
  });
58
58
  const hostCheck = async (host) => {
@@ -66,7 +66,7 @@ const hostCheck = async (host) => {
66
66
  ? `${host.platform} ${host.architecture}`
67
67
  : `${linuxDistribution.id} ${linuxDistribution.versionId ?? "unknown"}`);
68
68
  return check("host", supported, detail, {
69
- remediation: "REA supports macOS 12+, Ubuntu 24.04+, Fedora 41+, 64-bit Arch Linux, and the experimental Windows x64 Ghidra P0 boundary.",
69
+ remediation: "REA supports macOS 12+, Ubuntu 24.04+, Fedora 41+, 64-bit Arch Linux, CachyOS, and the experimental Windows x64 Ghidra P0 boundary.",
70
70
  classification: "unsupported_host",
71
71
  });
72
72
  };
@@ -6,14 +6,14 @@ import {} from "../domain/analysisErrorBase.js";
6
6
  import { addressDistance, functionDossierSchema, parseDocuments, parseFunctionDossier, parseListCount, parseRelatedAddresses, parseSegments, } from "../domain/hopperValues.js";
7
7
  import { err, ok } from "../domain/result.js";
8
8
  import { categorizeSwiftTypes, discoverObjcClasses, discoverObjcProtocols, } from "../domain/symbolAnalysis.js";
9
- import { inspectNativeDispatch } from "./NativeDispatchMetadataInspection.js";
10
- import { traceNativeValues } from "./NativeValueTrace.js";
11
- import { traceNativeUiAction } from "./NativeUiActionTrace.js";
9
+ import { inspectNativeDispatch } from "./native/NativeDispatchMetadataInspection.js";
10
+ import { traceNativeValues } from "./native/NativeValueTrace.js";
11
+ import { traceNativeUiAction } from "./native/NativeUiActionTrace.js";
12
12
  import { jsonValueSchema } from "../domain/jsonValue.js";
13
13
  import { invalidEnhancedInput, } from "./EnhancedToolTypes.js";
14
14
  import { traceCallPath } from "./CallPathTracing.js";
15
15
  import { traceLiteralFeature } from "./EnhancedLiteralTracing.js";
16
- import { projectNativeApiInspection } from "./NativeApiInspection.js";
16
+ import { projectNativeApiInspection } from "./native/NativeApiInspection.js";
17
17
  /**
18
18
  * Composes direct provider operations into bounded reverse-engineering tools.
19
19
  * Direct callers use `execute`; adapters that own validation use
@@ -3,7 +3,7 @@ import {} from "../domain/analysisErrorBase.js";
3
3
  import { jsonValueSchema } from "../domain/jsonValue.js";
4
4
  import { err, ok } from "../domain/result.js";
5
5
  import { compareBundles } from "../domain/bundleComparison.js";
6
- import { EvidenceLedger } from "./EvidenceLedger.js";
6
+ import { EvidenceLedger } from "./investigation/EvidenceLedger.js";
7
7
  import { readEvidenceBundle, writeEvidenceBundle, } from "./EvidenceBundleFiles.js";
8
8
  /** Validate and merge one bundle using the session Evidence ledger. */
9
9
  export const importEvidenceBundleCommand = async (path) => {
@@ -1,7 +1,7 @@
1
1
  import { parseEvidenceBundle, serializeEvidenceBundle, } from "../domain/evidenceBundle.js";
2
2
  import { EvidenceFileError, EvidenceIntegrityError, } from "../domain/evidenceErrors.js";
3
3
  import { err, ok } from "../domain/result.js";
4
- import { parseProcessCapture } from "../domain/processCapture.js";
4
+ import { parseProcessCapture } from "../domain/process/processCapture.js";
5
5
  import { readJsonFile, writeTextFile } from "./JsonFiles.js";
6
6
  /** Read and validate an evidence bundle at the caller-supplied path. */
7
7
  export const readEvidenceBundle = async (path) => {
@@ -39,6 +39,12 @@ export const ANDROID_APPLICATION_PROVIDER = {
39
39
  name: "REA Android application workflows",
40
40
  version: "1",
41
41
  };
42
+ /** Provider identity for verified publication of retained website scripts. */
43
+ export const WEB_SCRIPT_EXPORT_PROVIDER = {
44
+ id: "rea-web-script-export",
45
+ name: "REA captured script export",
46
+ version: "1",
47
+ };
42
48
  /** Provider identity for deterministic static JavaScript application analysis. */
43
49
  export const JAVASCRIPT_APPLICATION_PROVIDER = {
44
50
  id: "rea-javascript-application",
@@ -9,7 +9,10 @@ import { execFileOutput } from "../process/ExecFileOutput.js";
9
9
  const execFileAsync = promisify(execFile);
10
10
  const DOWNLOAD_PREFIX = "https://www.hopperapp.com:443/downloader/public/";
11
11
  const MAX_PACKAGE_BYTES = 100_000_000;
12
- const SUPPORTED_HOPPER_SHA256 = "0294ced141cc373468ee22d8343e7dac41980cb05a937994ca81c9f09afe7ded";
12
+ const SUPPORTED_HOPPER_SHA256 = new Set([
13
+ "0294ced141cc373468ee22d8343e7dac41980cb05a937994ca81c9f09afe7ded",
14
+ "1339f9e58377442b0c6fcb0dfc3cec20d593cc557408521fad9a00dbc6b8da13",
15
+ ]);
13
16
  const SUPPORTED_RELEASES = {
14
17
  deb: {
15
18
  filename: `${DOWNLOAD_PREFIX}Hopper-6.4.2-Linux-demo.deb`,
@@ -58,6 +61,7 @@ export const parseLinuxDistribution = (text) => {
58
61
  const packageFamily = packageFamilyFor(id, fields.get("ID_LIKE"));
59
62
  const supported = packageFamily !== undefined &&
60
63
  (id === "arch" ||
64
+ id === "cachyos" ||
61
65
  (id === "ubuntu" && versionAtLeast(versionId, 24)) ||
62
66
  (id === "fedora" && versionAtLeast(versionId, 41)));
63
67
  const identity = {
@@ -159,7 +163,7 @@ export const linuxHopperBinarySupported = async (path) => {
159
163
  const hash = createHash("sha256");
160
164
  for await (const chunk of createReadStream(path))
161
165
  hash.update(chunk);
162
- return hash.digest("hex") === SUPPORTED_HOPPER_SHA256;
166
+ return linuxHopperLauncherDigestSupported(hash.digest("hex"));
163
167
  }
164
168
  catch (cause) {
165
169
  // best-effort cleanup: optional build probing; unreadable means unsupported.
@@ -167,6 +171,8 @@ export const linuxHopperBinarySupported = async (path) => {
167
171
  return false;
168
172
  }
169
173
  };
174
+ /** Match a launcher extracted from one of the pinned official Linux packages. */
175
+ export const linuxHopperLauncherDigestSupported = (digest) => SUPPORTED_HOPPER_SHA256.has(digest);
170
176
  /** Interpret ldd output conservatively so a present but broken launcher is unhealthy. */
171
177
  export const linuxSharedLibrariesAvailable = (output) => !/(?:=>\s+not found|error while loading shared libraries)/iu.test(output);
172
178
  const installSystemPackage = async (family, archive) => {
@@ -0,0 +1,3 @@
1
+ import { AnalysisCapabilityUnavailableError } from "../domain/analysisErrorCore.js";
2
+ /** Preserve the module's failure reason through the existing tool error algebra. */
3
+ export const optionalProviderUnavailable = (failure, operation) => new AnalysisCapabilityUnavailableError(failure.providerId, operation, `Adapter could not load: ${failure.reason}`);
@@ -1,13 +1,9 @@
1
- import { z } from "zod";
1
+ import { reconstructionCoverageEvaluationInputSchema } from "../domain/reconstructionCoverageInput.js";
2
2
  import { AnalysisInputError } from "../domain/analysisErrorCore.js";
3
3
  import {} from "../domain/analysisErrorBase.js";
4
- import { evaluateReconstructionClosure, reconstructionCoverageDataSchema, } from "../domain/reconstructionCoverage.js";
4
+ import { evaluateReconstructionClosure } from "../domain/reconstructionCoverage.js";
5
5
  import { jsonValueSchema } from "../domain/jsonValue.js";
6
6
  import { err, ok } from "../domain/result.js";
7
- export const reconstructionCoverageEvaluationInputSchema = z.strictObject({
8
- coverage: reconstructionCoverageDataSchema,
9
- boundary_id: z.string().min(1),
10
- });
11
7
  /** Evaluate inline reconstruction coverage against a named boundary. */
12
8
  export const evaluateReconstructionCoverage = (rawInput, nowEpochMs = Date.now()) => {
13
9
  const parsed = reconstructionCoverageEvaluationInputSchema.safeParse(rawInput);
@@ -1,8 +1,8 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import canonicalize from "canonicalize";
3
3
  import { parseEvidenceBundle, } from "../domain/evidenceBundle.js";
4
- import { parseProcessCapture } from "../domain/processCapture.js";
5
- import { parseApplicationGraphEvidence } from "./JavaScriptApplicationEvidenceGraph.js";
4
+ import { parseProcessCapture } from "../domain/process/processCapture.js";
5
+ import { parseApplicationGraphEvidence } from "./javascript/JavaScriptApplicationEvidenceGraph.js";
6
6
  import { applicationObligationPolicy, semanticObligationPolicy, } from "./ReconstructionObligationPolicies.js";
7
7
  /** Derive conservative candidates from graph, process, and reviewed inputs. */
8
8
  export const deriveReconstructionObligationCandidates = (bundleInput, reviewed) => {
@@ -32,8 +32,11 @@ const deriveApplicationCandidates = (evidence, records, candidates, limitations)
32
32
  const source = parseApplicationGraphEvidence(evidence);
33
33
  for (const node of source.graph.nodes) {
34
34
  const candidatePolicy = applicationObligationPolicy(node.kind);
35
- if (candidatePolicy === undefined)
35
+ if (candidatePolicy === undefined) {
36
+ if (node.kind === "unknown")
37
+ limitations.add(`Application graph ${source.graph.graph_id} contains unresolved node ${node.node_id}; reconstruction obligations remain unknown.`);
36
38
  continue;
39
+ }
37
40
  const reference = node.observations.map((observation) => graphReference(evidence, records, observation.evidence, `${source.graph.graph_id}/node/${node.node_id}/observation/${observation.observation_id}`));
38
41
  addCandidate(candidates, generatedCandidate({
39
42
  key: `application:${node.node_id}:${candidatePolicy.family}`,
@@ -98,6 +101,10 @@ const deriveProcessCandidate = (evidence, candidates, limitations) => {
98
101
  ]
99
102
  : []),
100
103
  ];
104
+ if (capture.manifest.executable_sha256 === null) {
105
+ limitations.add(`Process capture ${evidence.evidence_id} has no validated executable artifact identity; packaged-process lifecycle obligation was not bound to an artifact.`);
106
+ return;
107
+ }
101
108
  addCandidate(candidates, {
102
109
  obligation_id: obligationId(`process:${capture.manifest.executable_sha256}:${capture.manifest.full_scenario_sha256}`),
103
110
  obligation_version: 1,
@@ -106,6 +106,8 @@ export const importReferenceSource = async (options) => {
106
106
  const error = readResult.error;
107
107
  if (error.code === "cancelled")
108
108
  return err(cancelled());
109
+ if (error.code === "unsupported")
110
+ return err(failure("unsupported", error.message));
109
111
  return err(failure("io", error.message));
110
112
  }
111
113
  if (isAborted(options.signal))
@@ -3,12 +3,13 @@ import { posix } from "node:path";
3
3
  import { classifyReferenceSourcePath, detectReferenceSourceLanguage, } from "../domain/referenceSourceClassification.js";
4
4
  import { parseReferenceSourceImports } from "../domain/referenceSourceImportParsing.js";
5
5
  import { PARSEABLE_REFERENCE_SOURCE_LANGUAGES } from "./ReferenceSourceImportTypes.js";
6
- /** Project a low-level entry failure into safe import guidance. */
7
- export const projectReferenceSourceEntryFailure = (entry) => {
6
+ /** Preserve the observed reader failure and add entry-specific recovery guidance. */
7
+ export const projectReferenceSourceEntryFailure = (entry) => `${entry.message} ${entryRecoveryGuidance(entry)}`;
8
+ const entryRecoveryGuidance = (entry) => {
8
9
  if (entry.code === "cancelled")
9
10
  return "This entry was not read because the import was cancelled. Start the import again when ready.";
10
11
  if (entry.code === "unsupported")
11
- return "This entry cannot be read safely on this system. Exclude it or import the directory on a supported system.";
12
+ return "Exclude this entry or replace it with a regular file.";
12
13
  if (entry.kind === "directory")
13
14
  return "This directory could not be read. Check its permissions, then try again.";
14
15
  if (entry.kind === "symlink")
@@ -58,6 +59,22 @@ const resolveInternalSpecifier = (fromPath, specifier, filePaths) => {
58
59
  `${normalized}${suffix}`,
59
60
  `${normalized}/index${suffix}`,
60
61
  ]);
62
+ // TypeScript source commonly names the extension emitted for NodeNext.
63
+ // Retain present runtime files first; substitute only a missing counterpart.
64
+ // Counterparts cover explicit filenames, not directory/index resolution.
65
+ if (/\.(?:ts|tsx|mts|cts)$/u.test(fromPath)) {
66
+ const sourceSuffixes = normalized.endsWith(".js")
67
+ ? [".ts", ".tsx", ".d.ts"]
68
+ : normalized.endsWith(".mjs")
69
+ ? [".mts", ".d.mts"]
70
+ : normalized.endsWith(".cjs")
71
+ ? [".cts", ".d.cts"]
72
+ : normalized.endsWith(".jsx")
73
+ ? [".tsx", ".d.ts"]
74
+ : [];
75
+ const stem = normalized.slice(0, -posix.extname(normalized).length);
76
+ candidates.push(...sourceSuffixes.map((suffix) => `${stem}${suffix}`));
77
+ }
61
78
  const match = candidates.find((candidate) => filePaths.has(candidate));
62
79
  return match === undefined
63
80
  ? { to: normalized, resolution: "unresolved" }
@@ -10,6 +10,11 @@ export const projectReferenceSourceImportError = (error) => {
10
10
  category: "invalid_input",
11
11
  message: "Reference source directory could not be opened. Check that the path exists, is readable, and points to a directory.",
12
12
  };
13
+ if (error.code === "unsupported")
14
+ return {
15
+ category: "unsupported_host",
16
+ message: "Safe no-follow file opens are unavailable on this host. Import the source tree with REA on Linux (including WSL) or macOS.",
17
+ };
13
18
  if (error.code === "io")
14
19
  return {
15
20
  category: "execution_failure",
@@ -12,14 +12,22 @@ export const runSetup = async (options, host = systemSetupHost(), confirm) => {
12
12
  const unsupported = await hostRemediation(host, false);
13
13
  if (unsupported !== undefined)
14
14
  return fail(unsupported);
15
- let hopperPath = await host.hopperPath();
16
- let providerEnvironment = await initialProviderEnvironment(host, hopperPath);
15
+ const initialState = await host.initialSetupState?.(options.readinessScope);
16
+ let hopperPath = initialState === undefined
17
+ ? await host.hopperPath()
18
+ : initialState.hopperPath;
19
+ let providerEnvironment = initialState === undefined
20
+ ? await initialProviderEnvironment(host, hopperPath)
21
+ : initialState.providerEnvironment;
17
22
  const discovery = await discoverSetupState({
18
23
  host,
19
24
  providerEnvironment,
20
25
  forceHopperInstall: options.installHopper,
21
26
  proposeHopper: options.proposeHopper ?? (confirm !== undefined && !options.structured),
22
27
  doctorScope: options.readinessScope,
28
+ ...(initialState === undefined
29
+ ? {}
30
+ : { initialDoctor: initialState.doctor }),
23
31
  });
24
32
  clientStates = discovery.clientStates;
25
33
  const clientSelectionAllowed = options.clientIds === undefined &&
@@ -1,4 +1,4 @@
1
- import { clientRegistrationEntry, clientConfigurationValuesEqual, parseClientConfiguration, serializeClientConfiguration, } from "./ClientConfigurationDocument.js";
1
+ import { clientRegistrationEntry, clientConfigurationValuesEqual, clientServerPath, legacyClientServerPath, parseClientConfiguration, serializeClientConfiguration, withClientServers, } from "./ClientConfigurationDocument.js";
2
2
  import { constants as fsConstants } from "node:fs";
3
3
  import { copyFile, mkdir, readFile, rm, writeFile } from "node:fs/promises";
4
4
  import { dirname } from "node:path";
@@ -43,21 +43,23 @@ const configureClientDocument = async (client, environment, command, format) =>
43
43
  void cause;
44
44
  return { status: "failed", reason: "readback" };
45
45
  }
46
- const { document, servers, serversKey } = parsed;
47
- const desired = clientConfigurationDesired(client, environment, command, format);
48
- if (clientConfigurationValuesEqual(servers[PRODUCT_IDENTITY.mcpServerKey], desired))
46
+ const desired = clientConfigurationDesired(client, environment, command, parsed.dialect);
47
+ if (registrationCurrent(parsed, desired))
49
48
  return { status: "unchanged" };
50
49
  const backupPath = original === undefined ? undefined : `${client.configPath}.rea.backup`;
51
50
  if (backupPath !== undefined &&
52
51
  !(await preserveConfigBackup(transactionPath, backupPath)))
53
52
  return { status: "failed", reason: "backup" };
54
- document[serversKey] = {
55
- ...servers,
56
- [PRODUCT_IDENTITY.mcpServerKey]: desired,
57
- };
53
+ // A native OpenCode V2 entry replaces REA's legacy V1 entry, which would
54
+ // otherwise conflict with it.
55
+ const legacyPath = legacyClientServerPath(parsed, PRODUCT_IDENTITY.mcpServerKey);
56
+ const document = withClientServers(parsed, { ...parsed.servers, [PRODUCT_IDENTITY.mcpServerKey]: desired }, PRODUCT_IDENTITY.mcpServerKey);
58
57
  try {
59
58
  await mkdir(dirname(client.configPath), { recursive: true });
60
- await writeFileAtomic(transactionPath, serializeClientConfiguration(document, format, original, PRODUCT_IDENTITY.mcpServerKey), {
59
+ await writeFileAtomic(transactionPath, serializeClientConfiguration(document, format, original, [
60
+ clientServerPath(parsed, PRODUCT_IDENTITY.mcpServerKey),
61
+ ...(legacyPath === undefined ? [] : [legacyPath]),
62
+ ]), {
61
63
  encoding: "utf8",
62
64
  mode: 0o600,
63
65
  });
@@ -69,7 +71,7 @@ const configureClientDocument = async (client, environment, command, format) =>
69
71
  }
70
72
  try {
71
73
  const readback = parseClientConfiguration(await readFile(transactionPath, "utf8"), format);
72
- if (!clientConfigurationValuesEqual(readback.servers[PRODUCT_IDENTITY.mcpServerKey], desired)) {
74
+ if (!registrationCurrent(readback, desired)) {
73
75
  await restoreConfig(transactionPath, original);
74
76
  return { status: "failed", reason: "readback" };
75
77
  }
@@ -87,11 +89,10 @@ const configureClientDocument = async (client, environment, command, format) =>
87
89
  };
88
90
  /** Determine whether an existing client configuration matches the desired registration. */
89
91
  export const clientConfigurationAligned = async (client, providerEnvironment, command) => {
90
- const desired = clientConfigurationDesired(client, providerEnvironment, command, client.format);
91
92
  try {
92
93
  const original = await readFile(client.configPath, "utf8");
93
- const { servers } = parseClientConfiguration(original, client.format);
94
- return clientConfigurationValuesEqual(servers[PRODUCT_IDENTITY.mcpServerKey], desired);
94
+ const parsed = parseClientConfiguration(original, client.format);
95
+ return registrationCurrent(parsed, clientConfigurationDesired(client, providerEnvironment, command, parsed.dialect));
95
96
  }
96
97
  catch (cause) {
97
98
  // Unreadable configuration is treated as not aligned so setup repairs it.
@@ -121,10 +122,10 @@ export const inspectClientConfiguration = async (client, providerEnvironment, co
121
122
  remediation: "The configuration file could not be read. Check its permissions before rerunning setup.",
122
123
  };
123
124
  }
124
- const desired = clientConfigurationDesired(client, providerEnvironment, command, client.format);
125
125
  try {
126
- const { servers } = parseClientConfiguration(original, client.format);
127
- if (clientConfigurationValuesEqual(servers[PRODUCT_IDENTITY.mcpServerKey], desired))
126
+ const parsed = parseClientConfiguration(original, client.format);
127
+ const desired = clientConfigurationDesired(client, providerEnvironment, command, parsed.dialect);
128
+ if (registrationCurrent(parsed, desired))
128
129
  return { status: "already_current" };
129
130
  }
130
131
  catch (cause) {
@@ -162,6 +163,8 @@ const restoreConfig = async (path, original) => {
162
163
  void cause;
163
164
  }
164
165
  };
166
+ /** Whether REA's entry matches and no conflicting legacy entry remains. */
167
+ const registrationCurrent = (parsed, desired) => clientConfigurationValuesEqual(parsed.servers[PRODUCT_IDENTITY.mcpServerKey], desired) && !Object.hasOwn(parsed.legacyServers, PRODUCT_IDENTITY.mcpServerKey);
165
168
  const clientConfigurationDesired = (client, providerEnvironment, command, format) => {
166
169
  const environment = Object.fromEntries(Object.entries(providerEnvironment).sort(([left], [right]) => left.localeCompare(right)));
167
170
  const registration = clientRegistrationEntry(format ?? "json", command.length === 0 ? [PRODUCT_IDENTITY.cliBinary, "mcp"] : command, environment);