rea-agents 4.0.1 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (740) hide show
  1. package/README.md +257 -96
  2. package/bridge/android/ReaJadxBridge.java +247 -0
  3. package/bridge/ghidra/ReaGhidraBridge.java +358 -15
  4. package/bridge/ghidra/ReaGhidraExtensions.java +113 -0
  5. package/bridge/ghidra/ReaGhidraPrepareCom.java +32 -0
  6. package/bridge/native/NativeUIChildren.swift +27 -0
  7. package/bridge/native/ReaNativeUI.swift +30 -16
  8. package/dist/android/AndroidTargetSnapshot.js +36 -0
  9. package/dist/android/JadxAnalysis.js +193 -0
  10. package/dist/android/JadxConfiguration.js +57 -0
  11. package/dist/android/JadxMcpTransport.js +172 -0
  12. package/dist/android/JadxProtocol.js +109 -0
  13. package/dist/android/JadxProvider.js +259 -0
  14. package/dist/android/JadxRelease.js +27 -0
  15. package/dist/android/JadxSession.js +111 -0
  16. package/dist/application/AnalysisContextQueries.js +2 -1
  17. package/dist/application/AppBundleExecutable.js +141 -0
  18. package/dist/application/ArtifactExtraction.js +7 -4
  19. package/dist/application/ArtifactGraphConstruction.js +10 -17
  20. package/dist/application/ArtifactInventory/classify.js +1 -1
  21. package/dist/application/ArtifactInventory/scanCanonical.js +9 -8
  22. package/dist/application/ArtifactInventory/scanReader.js +1 -1
  23. package/dist/application/ArtifactInventory.js +1 -1
  24. package/dist/application/BinaryTargetResolver.js +32 -68
  25. package/dist/application/BrowserObservationService.js +2 -1
  26. package/dist/application/BrowserScenarioCaptureService.js +2 -1
  27. package/dist/application/BrowserScenarioEvidence.js +2 -2
  28. package/dist/application/CallPathTracing.js +2 -1
  29. package/dist/application/CapabilityInventory.js +78 -2
  30. package/dist/application/ClientConfigPath.js +3 -1
  31. package/dist/application/ClientConfigurationDocument.js +83 -13
  32. package/dist/application/ClientRegistrationStatus.js +15 -9
  33. package/dist/application/DirectAnalysis.js +35 -21
  34. package/dist/application/DirectAnalysisStatus.js +7 -8
  35. package/dist/application/Doctor.js +48 -8
  36. package/dist/application/DoctorDiagnostics.js +9 -7
  37. package/dist/application/DoctorScope.js +1 -1
  38. package/dist/application/EnhancedLiteralTracing.js +2 -1
  39. package/dist/application/EnhancedToolTypes.js +2 -1
  40. package/dist/application/EnhancedTools.js +7 -5
  41. package/dist/application/EvidenceBundleCommands.js +3 -2
  42. package/dist/application/EvidenceBundleFiles.js +1 -1
  43. package/dist/application/EvidenceInputResolver.js +30 -0
  44. package/dist/application/FilesystemSnapshot.js +20 -5
  45. package/dist/application/FunctionAnalysisEvidence.js +32 -0
  46. package/dist/application/InventoryProjectionEvidence.js +2 -1
  47. package/dist/application/InvestigationProviders.js +6 -0
  48. package/dist/application/JsonFiles.js +1 -1
  49. package/dist/application/LinuxHopper.js +20 -6
  50. package/dist/application/MacHopper.js +20 -7
  51. package/dist/application/OptionalObservationProviders.js +3 -0
  52. package/dist/application/ProcessCaptureCapability.js +1 -1
  53. package/dist/application/ProcessCaptureError.js +1 -1
  54. package/dist/application/ProcessCaptureJournal.js +3 -1
  55. package/dist/application/ProcessCaptureLifecycle.js +8 -5
  56. package/dist/application/ProcessCli.js +14 -6
  57. package/dist/application/ProcessEvidence.js +2 -6
  58. package/dist/application/ProcessHarness.js +23 -11
  59. package/dist/application/ProcessNormalization.js +12 -5
  60. package/dist/application/ProcessSampling.js +3 -1
  61. package/dist/application/ReconstructionCoverageService.js +4 -7
  62. package/dist/application/ReconstructionObligationCandidates.js +5 -2
  63. package/dist/application/ReconstructionObligationLedgerService.js +2 -1
  64. package/dist/application/ReferenceSourceImport.js +2 -0
  65. package/dist/application/ReferenceSourceImportEntries.js +22 -3
  66. package/dist/application/ReferenceSourceImportPolicy.js +4 -2
  67. package/dist/application/ReferenceSourceImportTypes.js +5 -0
  68. package/dist/application/ReferenceSourceVcsAdapter.js +35 -4
  69. package/dist/application/Setup.js +11 -130
  70. package/dist/application/SetupClientConfiguration.js +36 -22
  71. package/dist/application/SetupHost.js +126 -0
  72. package/dist/application/SetupPlan.js +1 -1
  73. package/dist/application/SetupRegistrationEnvironment.js +1 -2
  74. package/dist/application/SetupSkill.js +9 -3
  75. package/dist/application/SetupTypes.js +17 -0
  76. package/dist/application/StoreFileLock.js +7 -2
  77. package/dist/application/SupportedClients.js +8 -0
  78. package/dist/application/Uninstall.js +32 -21
  79. package/dist/application/UpdateMaintenance.js +3 -3
  80. package/dist/application/UpdateRuntime.js +5 -2
  81. package/dist/application/ValidateSelectedWebScript.js +27 -0
  82. package/dist/application/WebModuleTraceService.js +209 -0
  83. package/dist/application/WebRuntimeService.js +73 -0
  84. package/dist/application/WebScriptExportService.js +115 -0
  85. package/dist/application/WebSourceLocationService.js +160 -0
  86. package/dist/application/WindowsCapabilities.js +7 -7
  87. package/dist/application/android/AndroidAnalysisService.js +37 -0
  88. package/dist/application/{AndroidApplicationService.js → android/AndroidApplicationService.js} +3 -3
  89. package/dist/application/{AppleApplicationService.js → apple/AppleApplicationService.js} +5 -5
  90. package/dist/application/{AnalysisClientCleanup.js → binary/AnalysisClientCleanup.js} +2 -2
  91. package/dist/application/{AnalysisProviderEvaluation.js → binary/AnalysisProviderEvaluation.js} +8 -6
  92. package/dist/application/{AnalysisProviderRegistry.js → binary/AnalysisProviderRegistry.js} +5 -4
  93. package/dist/application/{AnalysisSnapshotCache.js → binary/AnalysisSnapshotCache.js} +8 -7
  94. package/dist/application/{AnalysisSnapshotFiles.js → binary/AnalysisSnapshotFiles.js} +4 -4
  95. package/dist/application/{BinarySession.js → binary/BinarySession.js} +26 -11
  96. package/dist/application/{BinarySessionComposition.js → binary/BinarySessionComposition.js} +2 -1
  97. package/dist/application/{BinarySessionExecution.js → binary/BinarySessionExecution.js} +9 -4
  98. package/dist/application/{BinarySessionOpen.js → binary/BinarySessionOpen.js} +7 -6
  99. package/dist/application/{BinarySessionRecords.js → binary/BinarySessionRecords.js} +34 -40
  100. package/dist/application/{CompositeProvider.js → binary/CompositeProvider.js} +2 -2
  101. package/dist/application/{LazyAnalysisProvider.js → binary/LazyAnalysisProvider.js} +6 -4
  102. package/dist/application/{SessionProviderRouter.js → binary/SessionProviderRouter.js} +7 -4
  103. package/dist/application/firmware/FirmwareAnalysisPort.js +1 -0
  104. package/dist/application/firmware/FirmwareAnalysisService.js +35 -0
  105. package/dist/application/{EvidenceLedger.js → investigation/EvidenceLedger.js} +44 -6
  106. package/dist/application/investigation/InvestigationRecordPort.js +1 -0
  107. package/dist/application/investigation/InvestigationRecords.js +69 -0
  108. package/dist/application/{UnknownEvidence.js → investigation/UnknownEvidence.js} +1 -1
  109. package/dist/application/{ElectronActiveEvidence.js → javascript/ElectronActiveEvidence.js} +4 -4
  110. package/dist/application/javascript/ElectronActiveObservationPort.js +1 -0
  111. package/dist/application/{ElectronActiveObservationService.js → javascript/ElectronActiveObservationService.js} +3 -2
  112. package/dist/application/{ElectronBoundaryAnalysis.js → javascript/ElectronBoundaryAnalysis.js} +1 -1
  113. package/dist/application/{ElectronBoundaryGraphContext.js → javascript/ElectronBoundaryGraphContext.js} +1 -1
  114. package/dist/application/{ElectronEvidence.js → javascript/ElectronEvidence.js} +2 -2
  115. package/dist/application/javascript/ElectronObservationPort.js +1 -0
  116. package/dist/application/{ElectronObservationService.js → javascript/ElectronObservationService.js} +3 -2
  117. package/dist/application/{JavaScriptApplicationEvidence.js → javascript/JavaScriptApplicationEvidence.js} +3 -3
  118. package/dist/application/{JavaScriptApplicationEvidenceGraph.js → javascript/JavaScriptApplicationEvidenceGraph.js} +5 -5
  119. package/dist/application/javascript/JavaScriptApplicationService.js +99 -0
  120. package/dist/application/{JavaScriptApplicationWorkflowEvidence.js → javascript/JavaScriptApplicationWorkflowEvidence.js} +3 -3
  121. package/dist/application/{JavaScriptApplicationWorkflowService.js → javascript/JavaScriptApplicationWorkflowService.js} +12 -11
  122. package/dist/application/{JavaScriptArtifactAnalysis.js → javascript/JavaScriptArtifactAnalysis.js} +12 -26
  123. package/dist/application/javascript/JavaScriptArtifactAnalysisTypes.js +1 -0
  124. package/dist/application/{JavaScriptArtifactGraphAccumulator.js → javascript/JavaScriptArtifactGraphAccumulator.js} +16 -2
  125. package/dist/application/{JavaScriptArtifactGraphBuilder.js → javascript/JavaScriptArtifactGraphBuilder.js} +2 -2
  126. package/dist/application/{JavaScriptArtifactGraphContext.js → javascript/JavaScriptArtifactGraphContext.js} +1 -1
  127. package/dist/application/{JavaScriptArtifactGraphDocuments.js → javascript/JavaScriptArtifactGraphDocuments.js} +1 -1
  128. package/dist/application/{JavaScriptArtifactGraphFindings.js → javascript/JavaScriptArtifactGraphFindings.js} +20 -7
  129. package/dist/application/{JavaScriptArtifactGraphStructure.js → javascript/JavaScriptArtifactGraphStructure.js} +1 -1
  130. package/dist/application/{JavaScriptArtifactPathResolution.js → javascript/JavaScriptArtifactPathResolution.js} +12 -14
  131. package/dist/application/{JavaScriptArtifactReconstruction.js → javascript/JavaScriptArtifactReconstruction.js} +4 -8
  132. package/dist/application/{JavaScriptJsonModules.js → javascript/JavaScriptJsonModules.js} +3 -2
  133. package/dist/application/{JavaScriptModuleRelationships.js → javascript/JavaScriptModuleRelationships.js} +5 -3
  134. package/dist/application/javascript/JavaScriptRecoveryPort.js +1 -0
  135. package/dist/application/javascript/JavaScriptRecoveryService.js +52 -0
  136. package/dist/application/{JavaScriptReturnShapeProjection.js → javascript/JavaScriptReturnShapeProjection.js} +3 -3
  137. package/dist/application/{JavaScriptRuntimeObservationEvidence.js → javascript/JavaScriptRuntimeObservationEvidence.js} +2 -2
  138. package/dist/application/javascript/JavaScriptRuntimeObservationPort.js +1 -0
  139. package/dist/application/{JavaScriptRuntimeObservationService.js → javascript/JavaScriptRuntimeObservationService.js} +3 -2
  140. package/dist/application/{JavaScriptRuntimeReconciliationEvidence.js → javascript/JavaScriptRuntimeReconciliationEvidence.js} +3 -3
  141. package/dist/application/{JavaScriptRuntimeReconciliationService.js → javascript/JavaScriptRuntimeReconciliationService.js} +6 -5
  142. package/dist/application/{JavaScriptSemanticGraphAsyncProjection.js → javascript/JavaScriptSemanticGraphAsyncProjection.js} +1 -1
  143. package/dist/application/{JavaScriptSemanticGraphBuilder.js → javascript/JavaScriptSemanticGraphBuilder.js} +5 -3
  144. package/dist/application/{JavaScriptSemanticGraphChildProcessProjection.js → javascript/JavaScriptSemanticGraphChildProcessProjection.js} +1 -1
  145. package/dist/application/{JavaScriptSemanticGraphConstruction.js → javascript/JavaScriptSemanticGraphConstruction.js} +3 -2
  146. package/dist/application/{JavaScriptSemanticGraphDataProjection.js → javascript/JavaScriptSemanticGraphDataProjection.js} +1 -1
  147. package/dist/application/{JavaScriptSemanticGraphFingerprintProjection.js → javascript/JavaScriptSemanticGraphFingerprintProjection.js} +1 -1
  148. package/dist/application/{JavaScriptSemanticGraphFlowProjection.js → javascript/JavaScriptSemanticGraphFlowProjection.js} +2 -2
  149. package/dist/application/{JavaScriptSemanticGraphObjectProjection.js → javascript/JavaScriptSemanticGraphObjectProjection.js} +1 -1
  150. package/dist/application/{JavaScriptSemanticGraphProjection.js → javascript/JavaScriptSemanticGraphProjection.js} +2 -2
  151. package/dist/application/{JavaScriptSemanticGraphResourceProjection.js → javascript/JavaScriptSemanticGraphResourceProjection.js} +1 -1
  152. package/dist/application/{JavaScriptSemanticTraceService.js → javascript/JavaScriptSemanticTraceService.js} +6 -5
  153. package/dist/application/{ManagedApplicationGraphService.js → managed/ManagedApplicationGraphService.js} +7 -6
  154. package/dist/application/{ManagedMemberComparisonService.js → managed/ManagedMemberComparisonService.js} +10 -8
  155. package/dist/application/{ManagedNativeVerificationService.js → managed/ManagedNativeVerificationService.js} +7 -6
  156. package/dist/application/{ManagedReconstructionService.js → managed/ManagedReconstructionService.js} +7 -6
  157. package/dist/application/{NativeApiInspection.js → native/NativeApiInspection.js} +1 -1
  158. package/dist/application/{NativeCallRoutes.js → native/NativeCallRoutes.js} +3 -3
  159. package/dist/application/{NativeDispatchMetadataInspection.js → native/NativeDispatchMetadataInspection.js} +4 -4
  160. package/dist/application/{NativeUiActionTrace.js → native/NativeUiActionTrace.js} +7 -6
  161. package/dist/application/{NativeValueTrace.js → native/NativeValueTrace.js} +6 -6
  162. package/dist/{application/ArtifactInventory/hash.js → artifacts/ArtifactHash.js} +4 -2
  163. package/dist/artifacts/ArtifactPaths.js +3 -3
  164. package/dist/artifacts/ArtifactProvider.js +10 -38
  165. package/dist/artifacts/ArtifactProviderMetadata.js +36 -0
  166. package/dist/artifacts/AsarArtifactReader.js +195 -23
  167. package/dist/artifacts/AsarEntryStream.js +76 -0
  168. package/dist/artifacts/DirectoryArtifactReader.js +43 -7
  169. package/dist/artifacts/NativeDmgArtifactReader.js +171 -12
  170. package/dist/artifacts/SafeOutputTree.js +26 -10
  171. package/dist/artifacts/ZipArtifactReader.js +1 -0
  172. package/dist/{application → artifacts/apple}/AppleAssetCatalogAnalysis.js +4 -4
  173. package/dist/{application → artifacts/apple}/InterfaceBuilderAnalysis.js +125 -51
  174. package/dist/artifacts/{KeyedArchiveReader.js → apple/KeyedArchiveReader.js} +21 -27
  175. package/dist/artifacts/{NibArchive.js → apple/NibArchive.js} +4 -2
  176. package/dist/artifacts/apple/NibViewHierarchy.js +150 -0
  177. package/dist/{application → artifacts/javascript}/JavaScriptArtifactFiles.js +30 -7
  178. package/dist/artifacts/javascript/JavaScriptArtifactReader.js +6 -0
  179. package/dist/artifacts/readStableArtifact.js +52 -0
  180. package/dist/browser/BrowserProcessStartup.js +3 -1
  181. package/dist/browser/BrowserScenarioSecrets.js +50 -8
  182. package/dist/browser/CdpAuthorizedMainFrame.js +5 -5
  183. package/dist/browser/CdpAuthorizedTarget.js +22 -0
  184. package/dist/browser/CdpBrowserProvider.js +8 -16
  185. package/dist/browser/CdpCaptureDocuments.js +36 -22
  186. package/dist/browser/CdpCaptureEventBodyShapes.js +3 -3
  187. package/dist/browser/CdpCaptureEventHandlers.js +32 -28
  188. package/dist/browser/CdpCaptureEventHelpers.js +6 -6
  189. package/dist/browser/CdpCaptureStorage.js +10 -8
  190. package/dist/browser/CdpCaptureStorageFingerprints.js +25 -23
  191. package/dist/browser/CdpCaptureValues.js +8 -4
  192. package/dist/browser/CdpCommandRejection.js +17 -0
  193. package/dist/browser/CdpConnection.js +59 -17
  194. package/dist/browser/CdpElectronInspection.js +13 -13
  195. package/dist/browser/CdpElectronProvider.js +7 -7
  196. package/dist/browser/CdpElectronScriptEvents.js +6 -6
  197. package/dist/browser/CdpElectronScripts.js +4 -4
  198. package/dist/browser/CdpElectronWorkers.js +4 -4
  199. package/dist/browser/CdpEndpoint.js +22 -10
  200. package/dist/browser/CdpObservationSession.js +20 -24
  201. package/dist/browser/CdpOptionalCommand.js +1 -1
  202. package/dist/browser/CdpPageCapture.js +6 -5
  203. package/dist/browser/CdpPageCaptureScripts.js +2 -2
  204. package/dist/browser/CdpPageCaptureWorkers.js +9 -9
  205. package/dist/browser/CdpSafeMetadata.js +101 -18
  206. package/dist/browser/CdpScreenshot.js +6 -6
  207. package/dist/browser/CdpTargetEvents.js +8 -0
  208. package/dist/browser/CdpTargetSession.js +10 -7
  209. package/dist/browser/CdpWebMcpDiscovery.js +23 -17
  210. package/dist/browser/ElectronFileScope.js +9 -3
  211. package/dist/browser/PlaywrightBrowserScenarioProvider.js +10 -7
  212. package/dist/browser/PlaywrightElectronActiveActions.js +1 -1
  213. package/dist/browser/PlaywrightElectronActiveProvider.js +9 -8
  214. package/dist/browser/PlaywrightExecutionBoundary.js +1 -1
  215. package/dist/browser/PlaywrightScenarioArtifacts.js +10 -5
  216. package/dist/browser/PlaywrightScenarioBrowser.js +3 -1
  217. package/dist/browser/PlaywrightScenarioEvents.js +65 -53
  218. package/dist/browser/PlaywrightScenarioSession.js +13 -3
  219. package/dist/browser/WebSourceMapFetcher.js +55 -58
  220. package/dist/browser/assets/LocalWebScriptArtifacts.js +87 -0
  221. package/dist/browser/assets/PageScriptCapture.js +32 -0
  222. package/dist/browser/assets/PublishWebScripts.js +74 -0
  223. package/dist/browser/assets/ScenarioScriptCapture.js +76 -0
  224. package/dist/browser/assets/ScriptCaptureAdapters.js +57 -0
  225. package/dist/browser/assets/WebArtifactReads.js +56 -0
  226. package/dist/browser/assets/WebSourceLocationArtifacts.js +40 -0
  227. package/dist/browser/execution/CdpEventListeners.js +79 -0
  228. package/dist/browser/execution/CdpExecutionCapture.js +135 -0
  229. package/dist/browser/execution/CdpExecutionCollection.js +57 -0
  230. package/dist/browser/execution/CdpExecutionWindow.js +100 -0
  231. package/dist/browser/execution/CdpListenerSelector.js +22 -0
  232. package/dist/browser/execution/CdpPreciseCoverage.js +48 -0
  233. package/dist/browser/execution/CdpRuntimeInitiator.js +18 -0
  234. package/dist/browser/execution/CdpRuntimeProtocol.js +106 -0
  235. package/dist/browser/execution/CdpRuntimeRequests.js +81 -0
  236. package/dist/browser/execution/CdpRuntimeSession.js +163 -0
  237. package/dist/browser/execution/CdpRuntimeSources.js +223 -0
  238. package/dist/browser/execution/CdpWebRuntimeProvider.js +51 -0
  239. package/dist/browser/modules/NativeModuleResolver.js +210 -0
  240. package/dist/browser/modules/WebModuleArtifacts.js +40 -0
  241. package/dist/browser/network/PlaywrightNetworkContent.js +71 -0
  242. package/dist/browser/network/PlaywrightScenarioNetwork.js +180 -0
  243. package/dist/browser/providerIdentities.js +24 -0
  244. package/dist/catalogIdentity.js +23 -15
  245. package/dist/cli/androidCommands.js +91 -0
  246. package/dist/{cliApplicationCommands.js → cli/applicationCommands.js} +49 -16
  247. package/dist/cli/artifactCommands.js +1 -1
  248. package/dist/{cliBrowserAdvancedCommands.js → cli/browserAdvancedCommands.js} +39 -24
  249. package/dist/{cliBrowserCommands.js → cli/browserCommands.js} +9 -9
  250. package/dist/cli/commandCancellation.js +24 -0
  251. package/dist/cli/coreAnalysisCommands.js +5 -400
  252. package/dist/cli/coreBinaryCommands.js +211 -0
  253. package/dist/cli/coreNativeCommands.js +293 -0
  254. package/dist/{cliElectronCommands.js → cli/electronCommands.js} +20 -24
  255. package/dist/cli/firmwareCommands.js +75 -0
  256. package/dist/{cliSetup.js → cli/interactiveSetup.js} +1 -1
  257. package/dist/cli/javascriptApplicationAnalysis.js +2 -2
  258. package/dist/cli/javascriptRecoveryCommands.js +45 -0
  259. package/dist/cli/managedCommands.js +5 -5
  260. package/dist/cli/managedProjectGraphCommand.js +2 -2
  261. package/dist/cli/options.js +7 -1
  262. package/dist/{cliProcessCommands.js → cli/processCommands.js} +3 -3
  263. package/dist/cli/referenceSourceImportStatus.js +15 -0
  264. package/dist/cli/setupCommands.js +4 -2
  265. package/dist/cli/utilityCommands.js +50 -25
  266. package/dist/cli/webModuleCommands.js +56 -0
  267. package/dist/cli/webRuntimeCommands.js +60 -0
  268. package/dist/cli/webScriptCommands.js +31 -0
  269. package/dist/cli/webSourceLocationCommands.js +42 -0
  270. package/dist/cli.js +20 -15
  271. package/dist/cliBrowserContext.js +5 -3
  272. package/dist/cliBrowserScenarioCommands.js +6 -4
  273. package/dist/cliCommandNames.js +19 -2
  274. package/dist/cliEvidenceCommands.js +2 -1
  275. package/dist/cliJavaScriptRuntimeCommands.js +8 -5
  276. package/dist/cliJsonInput.js +35 -13
  277. package/dist/cliLogging.js +2 -1
  278. package/dist/cliOutput.js +52 -27
  279. package/dist/composition/android.js +3 -0
  280. package/dist/composition/auxiliaryAnalysisProviders.js +30 -0
  281. package/dist/composition/binary.js +25 -0
  282. package/dist/composition/browserObservation.js +3 -0
  283. package/dist/composition/browserScenario.js +3 -0
  284. package/dist/composition/directAnalysis.js +17 -0
  285. package/dist/composition/electronObservation.js +3 -0
  286. package/dist/composition/electronScenario.js +3 -0
  287. package/dist/composition/firmware.js +3 -0
  288. package/dist/composition/javascriptRecovery.js +3 -0
  289. package/dist/composition/javascriptRuntimeObservation.js +3 -0
  290. package/dist/composition/optionalObservationProviders.js +49 -0
  291. package/dist/composition/webModules.js +5 -0
  292. package/dist/composition/webRuntime.js +4 -0
  293. package/dist/composition/webSourceLocations.js +5 -0
  294. package/dist/config/environment.js +11 -1
  295. package/dist/config/parseConfig.js +29 -4
  296. package/dist/config/parsers.js +1 -1
  297. package/dist/contracts/android/androidToolContracts.js +77 -0
  298. package/dist/contracts/applicationToolContracts.js +75 -13
  299. package/dist/contracts/artifactComparisonExample.js +7 -14
  300. package/dist/contracts/artifactToolContracts.js +2 -2
  301. package/dist/contracts/browserScenarioToolContracts.js +1 -1
  302. package/dist/contracts/enhancedInputs.js +1 -1
  303. package/dist/contracts/enhancedToolContracts.js +31 -0
  304. package/dist/contracts/errorSchemas.js +4 -2
  305. package/dist/contracts/evidenceInputContracts.js +13 -0
  306. package/dist/contracts/firmware/firmwareToolContracts.js +38 -0
  307. package/dist/contracts/{applicationWorkflowInputContracts.js → javascript/applicationWorkflowInputContracts.js} +18 -18
  308. package/dist/contracts/{electronToolContracts.js → javascript/electronToolContracts.js} +6 -6
  309. package/dist/contracts/{javascriptApplicationWorkflowExamples.js → javascript/javascriptApplicationWorkflowExamples.js} +3 -3
  310. package/dist/contracts/javascript/javascriptRecoveryToolContracts.js +23 -0
  311. package/dist/contracts/{javascriptRuntimeObservationToolContracts.js → javascript/javascriptRuntimeObservationToolContracts.js} +3 -3
  312. package/dist/contracts/{javascriptRuntimeReconciliationExample.js → javascript/javascriptRuntimeReconciliationExample.js} +5 -5
  313. package/dist/contracts/{managedToolContracts.js → managed/managedToolContracts.js} +3 -3
  314. package/dist/contracts/{managedWorkflowExamples.js → managed/managedWorkflowExamples.js} +1 -1
  315. package/dist/contracts/{managedWorkflowToolContracts.js → managed/managedWorkflowToolContracts.js} +6 -6
  316. package/dist/contracts/mobileApplicationGraphExamples.js +105 -0
  317. package/dist/contracts/{nativeToolContracts.js → native/nativeToolContracts.js} +14 -7
  318. package/dist/contracts/officialToolContracts.js +66 -0
  319. package/dist/contracts/promptContracts.js +1 -1
  320. package/dist/contracts/sessionLifecycleInputs.js +4 -0
  321. package/dist/contracts/sessionToolContracts.js +43 -0
  322. package/dist/contracts/sessionToolSchemas.js +1 -1
  323. package/dist/contracts/toolContractExamples.js +5 -0
  324. package/dist/contracts/toolContractTypes.js +2 -0
  325. package/dist/contracts/toolContracts.js +18 -135
  326. package/dist/contracts/toolEffects.js +75 -0
  327. package/dist/contracts/toolOutputSchemaGroups.js +20 -16
  328. package/dist/contracts/toolOutputSchemaPrimitives.js +1 -0
  329. package/dist/contracts/webRuntimeToolContracts.js +43 -0
  330. package/dist/contracts/webScriptToolContracts.js +68 -0
  331. package/dist/doctorRuntime.js +5 -1
  332. package/dist/domain/analysisErrorBase.js +33 -0
  333. package/dist/domain/analysisErrorCore.js +62 -0
  334. package/dist/domain/analysisErrorPresentation.js +22 -2
  335. package/dist/domain/analysisErrorProjection.js +25 -3
  336. package/dist/domain/analysisSnapshot.js +1 -0
  337. package/dist/domain/android/androidAnalysis.js +141 -0
  338. package/dist/domain/{androidApplication.js → android/androidApplication.js} +7 -6
  339. package/dist/domain/apple/appleApplication.js +277 -0
  340. package/dist/domain/{appleAssetCatalog.js → apple/appleAssetCatalog.js} +2 -2
  341. package/dist/domain/apple/appleBundleAnatomy.js +236 -0
  342. package/dist/domain/{interfaceBuilderGraph.js → apple/interfaceBuilderGraph.js} +47 -312
  343. package/dist/domain/apple/interfaceBuilderKeyedArchive.js +411 -0
  344. package/dist/domain/{keyedArchive.js → apple/keyedArchive.js} +10 -9
  345. package/dist/domain/apple/plistValue.js +35 -0
  346. package/dist/domain/artifactGraph.js +1 -0
  347. package/dist/domain/artifactInspection.js +19 -17
  348. package/dist/domain/artifactInventoryEvidence.js +32 -27
  349. package/dist/domain/artifactInventorySnapshot.js +1 -0
  350. package/dist/domain/artifactOperationError.js +20 -0
  351. package/dist/domain/artifactPathSyntax.js +26 -0
  352. package/dist/domain/browserNetworkEvidence.js +82 -0
  353. package/dist/domain/browserObservation.js +12 -4
  354. package/dist/domain/browserObservationError.js +25 -0
  355. package/dist/domain/browserObservationSchemas.js +2 -1
  356. package/dist/domain/browserScenario.js +1 -1
  357. package/dist/domain/browserScenarioCapture.js +23 -1
  358. package/dist/domain/browserScenarioCaptureValues.js +25 -0
  359. package/dist/domain/browserScenarioDiff.js +7 -4
  360. package/dist/domain/browserScenarioDiffEvidence.js +35 -1
  361. package/dist/domain/browserScenarioNormalization.js +6 -11
  362. package/dist/domain/browserScenarioValues.js +15 -2
  363. package/dist/domain/browserSession.js +2 -7
  364. package/dist/domain/bundleComparison.js +2 -1
  365. package/dist/domain/callPath.js +86 -38
  366. package/dist/domain/canonicalDigest.js +65 -0
  367. package/dist/domain/canonicalOrdering.js +11 -0
  368. package/dist/domain/changedBehavior.js +8 -7
  369. package/dist/domain/comparisonSemantics.js +2 -4
  370. package/dist/domain/comparisonStatus.js +39 -0
  371. package/dist/domain/configurationErrors.js +25 -0
  372. package/dist/domain/dosCom.js +8 -0
  373. package/dist/domain/evidence.js +3 -11
  374. package/dist/domain/evidenceBundle.js +98 -35
  375. package/dist/domain/evidenceErrors.js +30 -0
  376. package/dist/domain/firmware/firmwareAnalysis.js +121 -0
  377. package/dist/domain/functionComparison.js +4 -2
  378. package/dist/domain/functionComparisonDimensions.js +6 -4
  379. package/dist/domain/functionComparisonNormalization.js +13 -8
  380. package/dist/domain/functionComparisonResults.js +1 -4
  381. package/dist/domain/hopperErrors.js +78 -0
  382. package/dist/domain/hopperValues.js +4 -3
  383. package/dist/domain/inputIssueProjection.js +17 -2
  384. package/dist/domain/{electronActiveObservation.js → javascript/electronActiveObservation.js} +3 -1
  385. package/dist/domain/{electronObservation.js → javascript/electronObservation.js} +5 -11
  386. package/dist/domain/{electronStaticAnalysisBrowser.js → javascript/electronStaticAnalysisBrowser.js} +15 -24
  387. package/dist/domain/{electronStaticAnalysisIpc.js → javascript/electronStaticAnalysisIpc.js} +2 -2
  388. package/dist/domain/{electronStaticAnalysisNative.js → javascript/electronStaticAnalysisNative.js} +12 -12
  389. package/dist/domain/javascript/electronStaticAnalysisTypes.js +1 -0
  390. package/dist/domain/{electronStaticAnalysisValues.js → javascript/electronStaticAnalysisValues.js} +24 -4
  391. package/dist/domain/{javascriptApplicationAnalysis.js → javascript/javascriptApplicationAnalysis.js} +2 -2
  392. package/dist/domain/{javascriptApplicationChangeGraph.js → javascript/javascriptApplicationChangeGraph.js} +2 -2
  393. package/dist/domain/{javascriptApplicationEvidenceSchemas.js → javascript/javascriptApplicationEvidenceSchemas.js} +6 -4
  394. package/dist/domain/{javascriptApplicationGraph.js → javascript/javascriptApplicationGraph.js} +13 -22
  395. package/dist/domain/{javascriptApplicationGraphSchemas.js → javascript/javascriptApplicationGraphSchemas.js} +2 -2
  396. package/dist/domain/{javascriptApplicationVersionComparison.js → javascript/javascriptApplicationVersionComparison.js} +3 -11
  397. package/dist/domain/{javascriptApplicationVersionComparisonSchemas.js → javascript/javascriptApplicationVersionComparisonSchemas.js} +3 -3
  398. package/dist/domain/{javascriptApplicationVersionItems.js → javascript/javascriptApplicationVersionItems.js} +4 -4
  399. package/dist/domain/{javascriptApplicationVersionKeys.js → javascript/javascriptApplicationVersionKeys.js} +16 -9
  400. package/dist/domain/javascript/javascriptArtifactFiles.js +1 -0
  401. package/dist/domain/{javascriptAstFingerprint.js → javascript/javascriptAstFingerprint.js} +38 -22
  402. package/dist/domain/javascript/javascriptAstValues.js +23 -0
  403. package/dist/domain/{javascriptExportShapeComparison.js → javascript/javascriptExportShapeComparison.js} +1 -2
  404. package/dist/domain/{javascriptExportShapeComparisonSchemas.js → javascript/javascriptExportShapeComparisonSchemas.js} +2 -2
  405. package/dist/domain/{javascriptExportShapeSelection.js → javascript/javascriptExportShapeSelection.js} +1 -1
  406. package/dist/domain/{javascriptExportShapeVariants.js → javascript/javascriptExportShapeVariants.js} +7 -3
  407. package/dist/domain/{javascriptFeatureSeed.js → javascript/javascriptFeatureSeed.js} +32 -11
  408. package/dist/domain/{javascriptFeatureTrace.js → javascript/javascriptFeatureTrace.js} +9 -13
  409. package/dist/domain/{javascriptFeatureTraceSchemas.js → javascript/javascriptFeatureTraceSchemas.js} +32 -18
  410. package/dist/domain/{javascriptFeatureTraversal.js → javascript/javascriptFeatureTraversal.js} +7 -2
  411. package/dist/domain/{javascriptNativeHandoff.js → javascript/javascriptNativeHandoff.js} +2 -1
  412. package/dist/domain/javascript/javascriptRecovery.js +88 -0
  413. package/dist/domain/{javascriptRuntimeLoadState.js → javascript/javascriptRuntimeLoadState.js} +2 -2
  414. package/dist/domain/{javascriptRuntimeObservation.js → javascript/javascriptRuntimeObservation.js} +2 -2
  415. package/dist/domain/{javascriptRuntimeReconciliationActive.js → javascript/javascriptRuntimeReconciliationActive.js} +5 -12
  416. package/dist/domain/{javascriptRuntimeReconciliationGraph.js → javascript/javascriptRuntimeReconciliationGraph.js} +2 -2
  417. package/dist/domain/{javascriptRuntimeReconciliationMatching.js → javascript/javascriptRuntimeReconciliationMatching.js} +4 -3
  418. package/dist/domain/{javascriptRuntimeReconciliationParsing.js → javascript/javascriptRuntimeReconciliationParsing.js} +11 -17
  419. package/dist/domain/{javascriptRuntimeReconciliationResult.js → javascript/javascriptRuntimeReconciliationResult.js} +4 -4
  420. package/dist/domain/{javascriptRuntimeReconciliationSchemas.js → javascript/javascriptRuntimeReconciliationSchemas.js} +8 -5
  421. package/dist/domain/{javascriptRuntimeStaticCandidates.js → javascript/javascriptRuntimeStaticCandidates.js} +8 -4
  422. package/dist/domain/{javascriptSemanticAnalysis.js → javascript/javascriptSemanticAnalysis.js} +80 -17
  423. package/dist/domain/{javascriptSemanticAsyncEffects.js → javascript/javascriptSemanticAsyncEffects.js} +2 -1
  424. package/dist/domain/{javascriptSemanticCallResolution.js → javascript/javascriptSemanticCallResolution.js} +11 -5
  425. package/dist/domain/{javascriptSemanticCalls.js → javascript/javascriptSemanticCalls.js} +7 -4
  426. package/dist/domain/{javascriptSemanticChildProcesses.js → javascript/javascriptSemanticChildProcesses.js} +5 -2
  427. package/dist/domain/{javascriptSemanticDataEffectHelpers.js → javascript/javascriptSemanticDataEffectHelpers.js} +7 -6
  428. package/dist/domain/{javascriptSemanticDataEffects.js → javascript/javascriptSemanticDataEffects.js} +9 -6
  429. package/dist/domain/{javascriptSemanticFingerprints.js → javascript/javascriptSemanticFingerprints.js} +40 -16
  430. package/dist/domain/{javascriptSemanticGraph.js → javascript/javascriptSemanticGraph.js} +23 -28
  431. package/dist/domain/{javascriptSemanticGraphSchemas.js → javascript/javascriptSemanticGraphSchemas.js} +3 -3
  432. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +116 -0
  433. package/dist/domain/javascript/javascriptSemanticMutationValues.js +53 -0
  434. package/dist/domain/{javascriptSemanticObjects.js → javascript/javascriptSemanticObjects.js} +5 -5
  435. package/dist/domain/{javascriptSemanticPrimitives.js → javascript/javascriptSemanticPrimitives.js} +9 -2
  436. package/dist/domain/{javascriptSemanticProjection.js → javascript/javascriptSemanticProjection.js} +32 -44
  437. package/dist/domain/{javascriptSemanticPromises.js → javascript/javascriptSemanticPromises.js} +77 -21
  438. package/dist/domain/{javascriptSemanticProvenance.js → javascript/javascriptSemanticProvenance.js} +4 -1
  439. package/dist/domain/{javascriptSemanticQuery.js → javascript/javascriptSemanticQuery.js} +7 -8
  440. package/dist/domain/{javascriptSemanticQueryAssessment.js → javascript/javascriptSemanticQueryAssessment.js} +1 -2
  441. package/dist/domain/{javascriptSemanticQueryIdentity.js → javascript/javascriptSemanticQueryIdentity.js} +1 -2
  442. package/dist/domain/{javascriptSemanticQuerySchemas.js → javascript/javascriptSemanticQuerySchemas.js} +3 -3
  443. package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +25 -0
  444. package/dist/domain/{javascriptSemanticResources.js → javascript/javascriptSemanticResources.js} +2 -1
  445. package/dist/domain/{javascriptSemanticReturns.js → javascript/javascriptSemanticReturns.js} +2 -1
  446. package/dist/domain/{javascriptSemanticTraceSchemas.js → javascript/javascriptSemanticTraceSchemas.js} +2 -2
  447. package/dist/domain/javascript/javascriptSemanticTraversal.js +55 -0
  448. package/dist/domain/javascript/javascriptSemanticValueTypes.js +1 -0
  449. package/dist/domain/{javascriptSemanticValues.js → javascript/javascriptSemanticValues.js} +118 -60
  450. package/dist/domain/{javascriptSourceParser.js → javascript/javascriptSourceParser.js} +4 -2
  451. package/dist/domain/{javascriptStaticAnalysis.js → javascript/javascriptStaticAnalysis.js} +8 -5
  452. package/dist/domain/{javascriptStaticAnalysisBundler.js → javascript/javascriptStaticAnalysisBundler.js} +15 -11
  453. package/dist/domain/{javascriptStaticAnalysisCalls.js → javascript/javascriptStaticAnalysisCalls.js} +16 -8
  454. package/dist/domain/{javascriptStaticAnalysisHelpers.js → javascript/javascriptStaticAnalysisHelpers.js} +261 -43
  455. package/dist/domain/{sourceToBundleComparison.js → javascript/sourceToBundleComparison.js} +6 -8
  456. package/dist/domain/{sourceToBundleComparisonSchemas.js → javascript/sourceToBundleComparisonSchemas.js} +4 -4
  457. package/dist/domain/{sourceToBundleSignals.js → javascript/sourceToBundleSignals.js} +7 -7
  458. package/dist/domain/jsonShape.js +6 -2
  459. package/dist/domain/{managedApplicationGraph.js → managed/managedApplicationGraph.js} +4 -4
  460. package/dist/domain/{managedApplicationGraphNodes.js → managed/managedApplicationGraphNodes.js} +1 -1
  461. package/dist/domain/{managedArtifact.js → managed/managedArtifact.js} +1 -1
  462. package/dist/domain/{managedMemberComparison.js → managed/managedMemberComparison.js} +5 -4
  463. package/dist/domain/{managedMemberComparisonCoverage.js → managed/managedMemberComparisonCoverage.js} +2 -1
  464. package/dist/domain/{managedMemberComparisonItems.js → managed/managedMemberComparisonItems.js} +99 -40
  465. package/dist/domain/{managedMemberComparisonMatch.js → managed/managedMemberComparisonMatch.js} +22 -11
  466. package/dist/domain/{managedNativeVerification.js → managed/managedNativeVerification.js} +1 -1
  467. package/dist/domain/{managedNativeVerificationMatch.js → managed/managedNativeVerificationMatch.js} +8 -6
  468. package/dist/domain/{managedNativeVerificationSchemas.js → managed/managedNativeVerificationSchemas.js} +6 -5
  469. package/dist/domain/{managedReconstruction.js → managed/managedReconstruction.js} +3 -3
  470. package/dist/domain/{nativeDataType.js → native/nativeDataType.js} +2 -0
  471. package/dist/domain/native/nativeFunctionAnnotations.js +43 -0
  472. package/dist/domain/{nativeInspection.js → native/nativeInspection.js} +1 -1
  473. package/dist/domain/{nativeInvestigationGraph.js → native/nativeInvestigationGraph.js} +13 -4
  474. package/dist/domain/native/nativeLoadImage.js +95 -0
  475. package/dist/domain/native/nativeMetadataRecovery.js +55 -0
  476. package/dist/domain/{nativeUiObservation.js → native/nativeUiObservation.js} +20 -6
  477. package/dist/domain/{objcSwiftMetadata.js → native/objcSwiftMetadata.js} +17 -0
  478. package/dist/domain/processCapture.js +4 -3
  479. package/dist/domain/processEvidenceProvider.js +11 -0
  480. package/dist/domain/processScenario.js +17 -17
  481. package/dist/domain/processTraceComparison.js +1 -1
  482. package/dist/domain/propertyListKeys.js +69 -0
  483. package/dist/domain/providerAdapterError.js +17 -0
  484. package/dist/domain/providerCleanupError.js +6 -3
  485. package/dist/domain/providerSelectionError.js +44 -0
  486. package/dist/domain/reconstructionCoverageEvaluation.js +46 -24
  487. package/dist/domain/reconstructionCoverageInput.js +7 -0
  488. package/dist/domain/reconstructionUnknowns.js +1 -1
  489. package/dist/domain/reconstructionVerification.js +22 -8
  490. package/dist/domain/referenceSourceClassification.js +5 -6
  491. package/dist/domain/referenceSourceGraph.js +9 -17
  492. package/dist/domain/referenceSourceImportParsing.js +38 -23
  493. package/dist/domain/runtimeIdentification.js +1 -1
  494. package/dist/domain/runtimeVersion.js +6 -7
  495. package/dist/domain/safeJson.js +13 -0
  496. package/dist/domain/sourceMapEnvelope.js +38 -0
  497. package/dist/domain/staticRuntimeCorrelation.js +9 -7
  498. package/dist/domain/unicodeCodePointOrder.js +11 -6
  499. package/dist/domain/unknownRegistryError.js +10 -0
  500. package/dist/domain/webBundleAnalyzerAst.js +23 -38
  501. package/dist/domain/webBundleAnalyzerInspection.js +29 -20
  502. package/dist/domain/webEventListeners.js +28 -0
  503. package/dist/domain/webExecution.js +74 -0
  504. package/dist/domain/webMcpDiscovery.js +1 -7
  505. package/dist/domain/webModuleImports.js +104 -0
  506. package/dist/domain/webModuleTrace.js +106 -0
  507. package/dist/domain/webRuntime.js +69 -0
  508. package/dist/domain/webScreenshot.js +1 -7
  509. package/dist/domain/webScriptArtifacts.js +39 -0
  510. package/dist/domain/webScriptExport.js +86 -0
  511. package/dist/domain/webScriptExportError.js +13 -0
  512. package/dist/domain/webScriptExportPlan.js +108 -0
  513. package/dist/domain/webSourceLocation.js +106 -0
  514. package/dist/domain/webSourcePosition.js +21 -0
  515. package/dist/dotnet/ManagedArtifactInspector.js +1 -1
  516. package/dist/dotnet/ManagedMemberInspector.js +1 -1
  517. package/dist/dotnet/ManagedMemberInspectorCore.js +34 -0
  518. package/dist/dotnet/ManagedMemberRows.js +6 -4
  519. package/dist/dotnet/ManagedMetadataHeaps.js +3 -2
  520. package/dist/dotnet/ManagedMetadataInventoryRows.js +4 -2
  521. package/dist/dotnet/ManagedMethodBodyReader.js +8 -1
  522. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +22 -16
  523. package/dist/dotnet/ManagedNativeBoundaryInspector.js +56 -50
  524. package/dist/dotnet/ManagedStaticProvider.js +6 -34
  525. package/dist/dotnet/ManagedStaticProviderMetadata.js +36 -0
  526. package/dist/evaluation/CodexAgentEval.js +2 -1
  527. package/dist/firmware/FirmwareCommand.js +163 -0
  528. package/dist/firmware/FirmwareFiles.js +190 -0
  529. package/dist/firmware/FirmwareProvider.js +264 -0
  530. package/dist/firmware/FirmwarePublication.js +84 -0
  531. package/dist/firmware/FirmwareRelease.js +32 -0
  532. package/dist/firmware/FirmwareReports.js +235 -0
  533. package/dist/firmware/FirmwareVersion.js +80 -0
  534. package/dist/generatedMcpToolCatalog.js +1 -1
  535. package/dist/generatedPackageMetadata.js +5 -5
  536. package/dist/ghidra/GhidraAnalysisProfile.js +37 -8
  537. package/dist/ghidra/GhidraClient.js +52 -6
  538. package/dist/ghidra/GhidraDiagnostics.js +3 -0
  539. package/dist/ghidra/GhidraDoctor.js +38 -14
  540. package/dist/ghidra/GhidraFunctionValues.js +14 -8
  541. package/dist/ghidra/GhidraInstallation.js +48 -38
  542. package/dist/ghidra/GhidraInstallationPolicy.js +140 -0
  543. package/dist/ghidra/GhidraInventoryValues.js +39 -2
  544. package/dist/ghidra/GhidraLauncher.js +102 -29
  545. package/dist/ghidra/GhidraLoadImageAttest.js +36 -0
  546. package/dist/ghidra/GhidraLoadImageValues.js +199 -0
  547. package/dist/ghidra/GhidraProvider.js +47 -149
  548. package/dist/ghidra/GhidraProviderCapabilities.js +58 -28
  549. package/dist/ghidra/GhidraProviderClient.js +209 -0
  550. package/dist/ghidra/GhidraRequestQueue.js +2 -2
  551. package/dist/ghidra/GhidraResponseBuffer.js +7 -1
  552. package/dist/ghidra/GhidraSessionError.js +31 -4
  553. package/dist/ghidra/GhidraSessionValues.js +10 -7
  554. package/dist/ghidra/GhidraTargetSnapshot.js +16 -2
  555. package/dist/ghidra/GhidraTransport.js +12 -0
  556. package/dist/ghidra/extensions/GhidraExtensionFailures.js +20 -0
  557. package/dist/ghidra/extensions/GhidraExtensions.js +170 -0
  558. package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +21 -0
  559. package/dist/ghidra/extensions/nativeaot/NativeAotReport.js +100 -0
  560. package/dist/hopper/BridgeLauncher.js +4 -2
  561. package/dist/hopper/HopperAnalysisProfile.js +7 -2
  562. package/dist/hopper/HopperCleanup.js +55 -9
  563. package/dist/hopper/HopperClient.js +14 -4
  564. package/dist/hopper/HopperProcessDiagnostic.js +1 -1
  565. package/dist/hopper/HopperProvider.js +8 -50
  566. package/dist/hopper/HopperProviderCapabilities.js +73 -0
  567. package/dist/hopper/HopperRequestQueue.js +7 -3
  568. package/dist/hopper/HopperResponseStream.js +7 -1
  569. package/dist/hopper/HopperSessionValues.js +1 -1
  570. package/dist/hopper/HopperSocketConnection.js +1 -1
  571. package/dist/hopper/HopperTargetLease.js +23 -15
  572. package/dist/hopper/LinuxPrivateDisplayDiagnostic.js +7 -8
  573. package/dist/hopper/LinuxPrivateDisplayProbe.js +10 -6
  574. package/dist/hopper/protocol.js +8 -8
  575. package/dist/ida/IdaConfiguration.js +56 -0
  576. package/dist/ida/IdaDoctor.js +53 -0
  577. package/dist/ida/IdaInput.js +62 -0
  578. package/dist/ida/IdaMcpConnection.js +111 -0
  579. package/dist/ida/IdaOperationRunner.js +299 -0
  580. package/dist/ida/IdaProtocolValues.js +178 -0
  581. package/dist/ida/IdaProvider.js +126 -0
  582. package/dist/ida/IdaProviderCapabilities.js +52 -0
  583. package/dist/ida/IdaSessionClient.js +318 -0
  584. package/dist/ida/IdaWorkspace.js +54 -0
  585. package/dist/{browser → inspector}/JavaScriptRuntimeScope.js +19 -6
  586. package/dist/{browser → inspector}/V8InspectorCaptureProjection.js +46 -8
  587. package/dist/{browser → inspector}/V8InspectorEndpoint.js +3 -2
  588. package/dist/{browser → inspector}/V8InspectorProvider.js +16 -14
  589. package/dist/inspector/providerIdentity.js +6 -0
  590. package/dist/javascript/recovery/RecoveryFiles.js +122 -0
  591. package/dist/javascript/recovery/WakaruCommand.js +116 -0
  592. package/dist/javascript/recovery/WakaruExecution.js +100 -0
  593. package/dist/javascript/recovery/WakaruProvider.js +96 -0
  594. package/dist/javascript/recovery/WakaruPublication.js +102 -0
  595. package/dist/javascript/recovery/WakaruRelease.js +29 -0
  596. package/dist/javascript/recovery/WakaruReport.js +134 -0
  597. package/dist/javascript/sourceMaps/SourceMapCodecProcess.js +37 -0
  598. package/dist/javascript/sourceMaps/SourceMapCodecProtocol.js +20 -0
  599. package/dist/javascript/sourceMaps/SourceMapCommand.js +176 -0
  600. package/dist/javascript/sourceMaps/SourceMapDecoder.js +61 -0
  601. package/dist/javascript/sourceMaps/SourceMapFormat.js +185 -0
  602. package/dist/javascript/sourceMaps/TraceSourceMap.js +138 -0
  603. package/dist/main/shutdown.js +29 -3
  604. package/dist/main/startup.js +1 -1
  605. package/dist/main/transport.js +32 -11
  606. package/dist/main.js +9 -20
  607. package/dist/native/AppleDispatchCoverage.js +58 -0
  608. package/dist/native/AppleDispatchMetadata.js +73 -490
  609. package/dist/native/AppleMachoFixups.js +292 -0
  610. package/dist/native/AppleMachoSelection.js +188 -0
  611. package/dist/native/AppleObjcCategories.js +59 -0
  612. package/dist/native/AppleObjcDispatchFacets.js +257 -0
  613. package/dist/native/AppleObjcProperties.js +68 -0
  614. package/dist/native/AppleObjcProtocols.js +2 -1
  615. package/dist/native/AppleSwiftDispatchFacets.js +150 -0
  616. package/dist/native/NativeMacOSProvider.js +204 -72
  617. package/dist/native/NativeMacOSProviderMetadata.js +42 -0
  618. package/dist/native/NativeMachoInspection.js +87 -26
  619. package/dist/native/NativeUiHelperRuntime.js +14 -4
  620. package/dist/native/NativeUiObservation.js +14 -6
  621. package/dist/native/NativeUiOutputBudget.js +8 -0
  622. package/dist/native/parsers/codesign.js +40 -5
  623. package/dist/native/parsers/demangle.js +6 -2
  624. package/dist/native/parsers/dyldInfo.js +16 -7
  625. package/dist/native/parsers/echoedPath.js +14 -0
  626. package/dist/native/parsers/lipo.js +14 -0
  627. package/dist/native/parsers/otool.js +5 -2
  628. package/dist/native/parsers/plist.js +174 -11
  629. package/dist/process/ExecFileOutput.js +2 -0
  630. package/dist/process/PrivateRuntimeRoot.js +13 -3
  631. package/dist/process/ProcessOwnership.js +5 -73
  632. package/dist/process/ProcessOwnershipObservation.js +62 -2
  633. package/dist/process/ProcessOwnershipProcessTree.js +13 -0
  634. package/dist/process/ProviderProcess.js +62 -24
  635. package/dist/process/ProviderRunLineage.js +1 -1
  636. package/dist/process/WindowsAuthority.js +20 -1
  637. package/dist/reference/ReferenceSourceReaderEntries.js +11 -2
  638. package/dist/reference/ReferenceSourceReaderFile.js +1 -0
  639. package/dist/server/createServer.js +67 -2
  640. package/dist/server/mcpClientMetadata.js +6 -3
  641. package/dist/server/mcpProgress.js +2 -1
  642. package/dist/server/promptCompletion.js +3 -3
  643. package/dist/server/registerAndroidTools.js +30 -0
  644. package/dist/server/registerApplicationTools/compareExportShapes.js +7 -3
  645. package/dist/server/registerApplicationTools/compareSourceToBundle.js +9 -4
  646. package/dist/server/registerApplicationTools/compareVersions.js +7 -3
  647. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +43 -0
  648. package/dist/server/registerApplicationTools/traceFeature.js +8 -3
  649. package/dist/server/registerApplicationTools/traceSemantics.js +8 -3
  650. package/dist/server/registerApplicationTools.js +2 -0
  651. package/dist/server/registerBrowserScenarioTool.js +6 -2
  652. package/dist/server/registerBrowserTools.js +13 -2
  653. package/dist/server/registerCloseLifecycleTool.js +1 -1
  654. package/dist/server/registerElectronTools.js +21 -7
  655. package/dist/server/registerEnhancedTools.js +28 -1
  656. package/dist/server/registerFirmwareTools.js +22 -0
  657. package/dist/server/registerFunctionComparisonTool.js +1 -1
  658. package/dist/server/registerInvestigationTools/helpers.js +2 -1
  659. package/dist/server/registerJavaScriptRecoveryTool.js +17 -0
  660. package/dist/server/registerJavaScriptRuntimeObservationTools.js +9 -4
  661. package/dist/server/registerManagedTools.js +4 -4
  662. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +2 -2
  663. package/dist/server/registerManagedWorkflowTools/contract.js +1 -1
  664. package/dist/server/registerManagedWorkflowTools/evidence.js +1 -1
  665. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +1 -1
  666. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +1 -1
  667. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +2 -2
  668. package/dist/server/registerNativeTools.js +1 -1
  669. package/dist/server/registerOfficialTools.js +4 -1
  670. package/dist/server/registerProcessComparisonTool.js +5 -2
  671. package/dist/server/registerPrompts.js +5 -1
  672. package/dist/server/registerSessionTools.js +4 -2
  673. package/dist/server/registerWebModuleTool.js +17 -0
  674. package/dist/server/registerWebRuntimeTools.js +31 -0
  675. package/dist/server/registerWebScriptTool.js +18 -0
  676. package/dist/server/registerWebSourceLocationTool.js +17 -0
  677. package/dist/server/runDerivedOperation.js +1 -1
  678. package/dist/server/sessionAvailabilityPolicy.js +24 -9
  679. package/dist/server/sessionEvidence.js +1 -1
  680. package/dist/server/toolResult.js +2 -1
  681. package/dist/windows/WindowsNativeLoader.js +108 -0
  682. package/dist/windows/WindowsOwnedProcess.js +170 -0
  683. package/dist/windows/WindowsPrivateRuntime.js +137 -0
  684. package/install.sh +16 -8
  685. package/native/windows/README.md +107 -0
  686. package/native/windows/build/manifest.json +9 -0
  687. package/native/windows/build/rea-windows-x64.node +0 -0
  688. package/package.json +70 -35
  689. package/scripts/hopper-demo-x11.py +67 -8
  690. package/scripts/rea.mjs +10 -2
  691. package/scripts/verify-windows-native-artifact.mjs +39 -0
  692. package/skills/reverse-engineer-anything/SKILL.md +92 -24
  693. package/skills/reverse-engineer-anything/references/android-applications.md +31 -0
  694. package/skills/reverse-engineer-anything/references/javascript-applications.md +19 -2
  695. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +61 -4
  696. package/dist/application/JavaScriptApplicationService.js +0 -52
  697. package/dist/application/runtime.js +0 -51
  698. package/dist/browser/CdpCanonicalJsonDigest.js +0 -9
  699. package/dist/domain/appleApplication.js +0 -181
  700. package/dist/domain/errors.js +0 -324
  701. package/dist/domain/javascriptAstValues.js +0 -13
  702. package/dist/domain/javascriptSemanticTraversal.js +0 -30
  703. package/dist/native/NativeHostCapabilities.js +0 -23
  704. /package/dist/application/{BinarySessionPort.js → DirectAnalysisDependencies.js} +0 -0
  705. /package/dist/application/{ElectronActiveObservationPort.js → WebModulePorts.js} +0 -0
  706. /package/dist/application/{ElectronObservationPort.js → WebRuntimePort.js} +0 -0
  707. /package/dist/application/{JavaScriptArtifactAnalysisTypes.js → WebScriptArtifactPort.js} +0 -0
  708. /package/dist/application/{JavaScriptRuntimeObservationPort.js → WebSourceLocationPorts.js} +0 -0
  709. /package/dist/{domain/electronStaticAnalysisTypes.js → application/android/AndroidAnalysisPort.js} +0 -0
  710. /package/dist/application/{AbortablePromise.js → binary/AbortablePromise.js} +0 -0
  711. /package/dist/{domain/javascriptSemanticValueTypes.js → application/binary/BinarySessionPort.js} +0 -0
  712. /package/dist/application/{BinarySessionStatus.js → binary/BinarySessionStatus.js} +0 -0
  713. /package/dist/application/{ElectronBoundaryGraph.js → javascript/ElectronBoundaryGraph.js} +0 -0
  714. /package/dist/application/{ElectronBoundaryGraphIpc.js → javascript/ElectronBoundaryGraphIpc.js} +0 -0
  715. /package/dist/application/{ElectronBoundaryGraphNative.js → javascript/ElectronBoundaryGraphNative.js} +0 -0
  716. /package/dist/application/{ElectronBoundaryGraphWindows.js → javascript/ElectronBoundaryGraphWindows.js} +0 -0
  717. /package/dist/application/{JavaScriptArtifactGraphBundlers.js → javascript/JavaScriptArtifactGraphBundlers.js} +0 -0
  718. /package/dist/application/{JavaScriptArtifactGraphEvidence.js → javascript/JavaScriptArtifactGraphEvidence.js} +0 -0
  719. /package/dist/application/{JavaScriptArtifactReconstructionInput.js → javascript/JavaScriptArtifactReconstructionInput.js} +0 -0
  720. /package/dist/application/{JavaScriptSemanticGraphEvidence.js → javascript/JavaScriptSemanticGraphEvidence.js} +0 -0
  721. /package/dist/application/{JavaScriptSemanticGraphValueProjection.js → javascript/JavaScriptSemanticGraphValueProjection.js} +0 -0
  722. /package/dist/domain/{electronStaticAnalysis.js → javascript/electronStaticAnalysis.js} +0 -0
  723. /package/dist/domain/{javascriptExportShapeComparisonIdentity.js → javascript/javascriptExportShapeComparisonIdentity.js} +0 -0
  724. /package/dist/domain/{javascriptRuntimeReconciliation.js → javascript/javascriptRuntimeReconciliation.js} +0 -0
  725. /package/dist/domain/{javascriptRuntimeReconciliationRuntime.js → javascript/javascriptRuntimeReconciliationRuntime.js} +0 -0
  726. /package/dist/domain/{javascriptSemanticCoverage.js → javascript/javascriptSemanticCoverage.js} +0 -0
  727. /package/dist/domain/{javascriptSemanticDerivedAnalysis.js → javascript/javascriptSemanticDerivedAnalysis.js} +0 -0
  728. /package/dist/domain/{javascriptSemanticGraphSerialization.js → javascript/javascriptSemanticGraphSerialization.js} +0 -0
  729. /package/dist/domain/{javascriptSemanticIr.js → javascript/javascriptSemanticIr.js} +0 -0
  730. /package/dist/domain/{javascriptSemanticQueryRelations.js → javascript/javascriptSemanticQueryRelations.js} +0 -0
  731. /package/dist/domain/{javascriptSemanticState.js → javascript/javascriptSemanticState.js} +0 -0
  732. /package/dist/domain/{javascriptStaticAnalysisFindings.js → javascript/javascriptStaticAnalysisFindings.js} +0 -0
  733. /package/dist/domain/{javascriptStaticAnalysisState.js → javascript/javascriptStaticAnalysisState.js} +0 -0
  734. /package/dist/domain/{javascriptStaticAnalysisTypes.js → javascript/javascriptStaticAnalysisTypes.js} +0 -0
  735. /package/dist/domain/{managedApplicationGraphCoverage.js → managed/managedApplicationGraphCoverage.js} +0 -0
  736. /package/dist/domain/{managedApplicationGraphNodeCoverage.js → managed/managedApplicationGraphNodeCoverage.js} +0 -0
  737. /package/dist/domain/{nativeApiBoundary.js → native/nativeApiBoundary.js} +0 -0
  738. /package/dist/domain/{nativeInstruction.js → native/nativeInstruction.js} +0 -0
  739. /package/dist/domain/{nativeValueFlow.js → native/nativeValueFlow.js} +0 -0
  740. /package/dist/domain/{nativeValueTrace.js → native/nativeValueTrace.js} +0 -0
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
- import { BrowserObservationError, } from "../domain/errors.js";
3
- import { parseCdpEndpointValue, readCdpJson } from "./CdpEndpoint.js";
2
+ import { BrowserObservationError } from "../domain/browserObservationError.js";
3
+ import {} from "../domain/browserObservationErrors.js";
4
+ import { parseCdpEndpointValue, readCdpJson } from "../browser/CdpEndpoint.js";
4
5
  const versionSchema = z
5
6
  .object({
6
7
  Browser: z.string().min(1),
@@ -1,17 +1,17 @@
1
- import { javascriptRuntimeObservationSchema, javascriptRuntimeTargetListSchema, } from "../domain/javascriptRuntimeObservation.js";
2
- import { AnalysisError, BrowserObservationError, ProviderAdapterError, } from "../domain/errors.js";
1
+ import { javascriptRuntimeObservationSchema, javascriptRuntimeTargetListSchema, } from "../domain/javascript/javascriptRuntimeObservation.js";
2
+ import { AnalysisError } from "../domain/analysisErrorBase.js";
3
+ import { BrowserObservationError } from "../domain/browserObservationError.js";
4
+ import { ProviderAdapterError } from "../domain/providerAdapterError.js";
5
+ import {} from "../domain/browserObservationErrors.js";
3
6
  import { err, ok } from "../domain/result.js";
4
- import { numberValue, recordValue, stringValue, delayWithCancellation, } from "./CdpCaptureValues.js";
5
- import { CdpConnection } from "./CdpConnection.js";
6
- import { authorizeRuntimeTargetLocation } from "./JavaScriptRuntimeScope.js";
7
+ import { numberValue, recordValue, cdpStringValue, delayWithCancellation, } from "../browser/CdpCaptureValues.js";
8
+ import { CdpConnection } from "../browser/CdpConnection.js";
9
+ import { authorizeRuntimeTargetLocation, inspectorExclusionKey, } from "./JavaScriptRuntimeScope.js";
7
10
  import { createInspectorExclusionCounts, describeInspectorTargetLimitations, finalizeInspectorCapture, } from "./V8InspectorCaptureProjection.js";
8
11
  import { discoverV8Inspector, } from "./V8InspectorEndpoint.js";
9
12
  /** Public identity committed by passive V8 Inspector observations. */
10
- export const V8_INSPECTOR_PROVIDER_IDENTITY = Object.freeze({
11
- id: "rea-v8-inspector",
12
- name: "REA passive Node/Electron V8 Inspector provider",
13
- version: "1",
14
- });
13
+ export { V8_INSPECTOR_PROVIDER_IDENTITY } from "./providerIdentity.js";
14
+ import { V8_INSPECTOR_PROVIDER_IDENTITY } from "./providerIdentity.js";
15
15
  /** Attach-only provider; sends only Runtime.enable and Debugger.enable. */
16
16
  export class V8InspectorProvider {
17
17
  identity() {
@@ -28,7 +28,7 @@ export class V8InspectorProvider {
28
28
  product: discovery.runtime.product,
29
29
  });
30
30
  if (!decision.allowed) {
31
- excluded[decision.reason] += 1;
31
+ excluded[inspectorExclusionKey(decision.reason)] += 1;
32
32
  continue;
33
33
  }
34
34
  if (decision.location.kind === "builtin") {
@@ -104,6 +104,8 @@ export class V8InspectorProvider {
104
104
  }
105
105
  export const closeInspectorConnection = async (connection, signal) => {
106
106
  const closing = connection.close();
107
+ // best-effort cleanup: the race below observes the close; this only prevents
108
+ // unhandled rejection when the caller abandons the close via cancellation.
107
109
  void closing.catch(() => undefined);
108
110
  // CdpConnection.close has its own one second transport bound. Do not make a
109
111
  // cancelled caller wait for that fallback.
@@ -191,7 +193,7 @@ const ingestEvent = (event, input, state) => {
191
193
  const ingestScript = (event, input, state) => {
192
194
  state.scriptsObserved += 1;
193
195
  const value = recordValue(event.params);
194
- const rawUrl = stringValue(value?.url);
196
+ const rawUrl = cdpStringValue(value?.url);
195
197
  if (rawUrl === undefined || rawUrl === "") {
196
198
  state.invalidScripts += 1;
197
199
  retainEvent(state, 0);
@@ -200,7 +202,7 @@ const ingestScript = (event, input, state) => {
200
202
  const draft = {
201
203
  rawUrl,
202
204
  executionContextKey: contextKey(value?.executionContextId),
203
- cdpHash: stringValue(value?.hash) ?? null,
205
+ cdpHash: cdpStringValue(value?.hash) ?? null,
204
206
  length: nonnegativeInteger(value?.length),
205
207
  isModule: value?.isModule === true,
206
208
  };
@@ -227,7 +229,7 @@ const ingestContext = (event, input, state) => {
227
229
  return;
228
230
  }
229
231
  const origin = event.method === "Runtime.executionContextCreated"
230
- ? (stringValue(runtimeContext?.origin) ?? null)
232
+ ? (cdpStringValue(runtimeContext?.origin) ?? null)
231
233
  : null;
232
234
  const draft = {
233
235
  contextKey: key,
@@ -0,0 +1,6 @@
1
+ /** Identity available without loading the V8InspectorProvider implementation. */
2
+ export const V8_INSPECTOR_PROVIDER_IDENTITY = Object.freeze({
3
+ id: "rea-v8-inspector",
4
+ name: "REA passive Node/Electron V8 Inspector provider",
5
+ version: "1",
6
+ });
@@ -0,0 +1,122 @@
1
+ import { createHash } from "node:crypto";
2
+ import { constants } from "node:fs";
3
+ import { lstat, open, readdir, writeFile } from "node:fs/promises";
4
+ import { isAbsolute, join } from "node:path";
5
+ import { TextDecoder } from "node:util";
6
+ import { AnalysisCancelledError, AnalysisInputError, AnalysisOutputError, AnalysisTimeoutError, } from "../../domain/analysisErrorCore.js";
7
+ import { RECOVERY_LIMITS } from "./WakaruRelease.js";
8
+ const OPERATION = "recover_javascript_sources";
9
+ /** Fingerprint exact selected or derived bytes. */
10
+ export const recoveryDigest = (bytes) => createHash("sha256").update(bytes).digest("hex");
11
+ /** Read a stable regular file without retaining bytes during engine fingerprinting. */
12
+ const scanRecoveryFile = async (path, maximum, consume, signal) => {
13
+ const handle = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW);
14
+ const hash = createHash("sha256");
15
+ try {
16
+ const before = await handle.stat();
17
+ if (!before.isFile() || before.size > maximum)
18
+ throw new AnalysisOutputError(OPERATION, `Expected a regular file no larger than ${String(maximum)} bytes: ${path}`);
19
+ let bytes = 0;
20
+ for await (const raw of handle.createReadStream({ autoClose: false })) {
21
+ checkRecoveryCancellation(signal);
22
+ const chunk = Buffer.isBuffer(raw) ? raw : Buffer.from(raw);
23
+ bytes += chunk.length;
24
+ if (bytes > maximum)
25
+ throw new AnalysisOutputError(OPERATION, `File exceeds ${String(maximum)} bytes: ${path}`);
26
+ hash.update(chunk);
27
+ consume(chunk);
28
+ }
29
+ const after = await handle.stat();
30
+ const current = await lstat(path);
31
+ if (before.dev !== current.dev ||
32
+ before.ino !== current.ino ||
33
+ before.size !== bytes ||
34
+ before.mtimeMs !== after.mtimeMs ||
35
+ before.ctimeMs !== after.ctimeMs ||
36
+ before.size !== after.size)
37
+ throw new AnalysisOutputError(OPERATION, `File identity changed while reading: ${path}`);
38
+ return { sha256: hash.digest("hex"), bytes };
39
+ }
40
+ finally {
41
+ await handle.close();
42
+ }
43
+ };
44
+ /** Fingerprint a regular file incrementally with bounded memory. */
45
+ export const fingerprintRecoveryFile = async (path, maximum, signal) => scanRecoveryFile(path, maximum, () => { }, signal);
46
+ /** Read only a regular file through one handle with a bounded, stable identity. */
47
+ export const readRecoveryFile = async (path, maximum, signal) => {
48
+ const chunks = [];
49
+ const result = await scanRecoveryFile(path, maximum, (chunk) => chunks.push(chunk), signal);
50
+ return Buffer.concat(chunks, result.bytes);
51
+ };
52
+ /** Snapshot one caller-selected UTF-8 script before invoking the engine. */
53
+ export const snapshotRecoveryInput = async (path, snapshotPath, signal) => {
54
+ if (!isAbsolute(path))
55
+ throw recoveryInputFailure("path", "Select an absolute JavaScript file path");
56
+ let bytes;
57
+ try {
58
+ bytes = await readRecoveryFile(path, RECOVERY_LIMITS.inputBytes, signal);
59
+ new TextDecoder("utf-8", { fatal: true }).decode(bytes);
60
+ }
61
+ catch (cause) {
62
+ if (cause instanceof AnalysisCancelledError)
63
+ throw cause;
64
+ throw recoveryInputFailure("path", `Cannot snapshot UTF-8 JavaScript input ${path}: ${recoveryFailureMessage(cause)}`, cause);
65
+ }
66
+ await writeFile(snapshotPath, bytes, { flag: "wx", mode: 0o600 });
67
+ return {
68
+ path,
69
+ snapshot_path: snapshotPath,
70
+ sha256: recoveryDigest(bytes),
71
+ bytes: bytes.length,
72
+ };
73
+ };
74
+ /** Inventory staging without following symlinks or publishing special files. */
75
+ export const inventoryRecoveryFiles = async (root, signal) => {
76
+ const files = [];
77
+ let bytes = 0;
78
+ let entries = 0;
79
+ const visit = async (directory, prefix) => {
80
+ const metadata = await lstat(directory);
81
+ if (!metadata.isDirectory() || metadata.isSymbolicLink())
82
+ throw new AnalysisOutputError(OPERATION, `Unsafe staging directory: ${directory}`);
83
+ for (const entry of await readdir(directory, { withFileTypes: true })) {
84
+ checkRecoveryCancellation(signal);
85
+ entries++;
86
+ const relativePath = prefix === "" ? entry.name : `${prefix}/${entry.name}`;
87
+ const path = join(directory, entry.name);
88
+ const info = await lstat(path);
89
+ if (entries > RECOVERY_LIMITS.outputEntries)
90
+ throw new AnalysisOutputError(OPERATION, "Recovery staging exceeds the 10000-entry resource limit");
91
+ if (info.isSymbolicLink() || (!info.isDirectory() && !info.isFile()))
92
+ throw new AnalysisOutputError(OPERATION, `Recovery produced a symlink or special file: ${relativePath}`);
93
+ if (info.isDirectory())
94
+ await visit(path, relativePath);
95
+ else {
96
+ bytes += info.size;
97
+ if (bytes > RECOVERY_LIMITS.outputBytes)
98
+ throw new AnalysisOutputError(OPERATION, "Recovery staging exceeds the 128 MiB resource limit");
99
+ files.push({ relativePath, path, bytes: info.size });
100
+ }
101
+ }
102
+ };
103
+ await visit(root, "");
104
+ return files;
105
+ };
106
+ /** Preserve actionable caller constraints in the ordinary error algebra. */
107
+ export const recoveryInputFailure = (field, message, cause) => new AnalysisInputError(OPERATION, { cause }, [
108
+ { path: [field], reason: "invalid_value", message },
109
+ ]);
110
+ /** Convert one caught boundary cause into diagnostic text without masking its type. */
111
+ export const recoveryFailureMessage = (cause) => cause instanceof Error ? cause.message : String(cause);
112
+ /** Cancellation remains distinct from malformed source or provider output. */
113
+ export const checkRecoveryCancellation = (signal) => {
114
+ if (signal?.aborted === true)
115
+ throw new AnalysisCancelledError(OPERATION);
116
+ };
117
+ /** Keep both tool invocations within one operation's execution budget. */
118
+ export const checkRecoveryDeadline = (deadline, signal) => {
119
+ checkRecoveryCancellation(signal);
120
+ if (Date.now() >= deadline)
121
+ throw new AnalysisTimeoutError(OPERATION, RECOVERY_LIMITS.timeoutMs);
122
+ };
@@ -0,0 +1,116 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { constants } from "node:fs";
3
+ import { access, realpath } from "node:fs/promises";
4
+ import { isAbsolute } from "node:path";
5
+ import { AnalysisCancelledError, AnalysisCapabilityUnavailableError, AnalysisOutputError, } from "../../domain/analysisErrorCore.js";
6
+ import { ProviderAdapterError } from "../../domain/providerAdapterError.js";
7
+ import { ProviderCleanupError } from "../../domain/providerCleanupError.js";
8
+ import { cleanupOwnedProcessGroup } from "../../process/ProcessOwnership.js";
9
+ import { ProviderProcessSupervisor, spawnOwnedProviderProcess, } from "../../process/ProviderProcess.js";
10
+ import { checkRecoveryDeadline, inventoryRecoveryFiles, fingerprintRecoveryFile, recoveryFailureMessage, } from "./RecoveryFiles.js";
11
+ import { RECOVERY_LIMITS } from "./WakaruRelease.js";
12
+ const OPERATION = "recover_javascript_sources";
13
+ /** Resolve and fingerprint explicitly configured tools; acquire nothing at startup. */
14
+ export const resolveWakaruCommand = async (environment) => {
15
+ const configured = environment.REA_WAKARU_COMMAND;
16
+ if (process.platform !== "linux" ||
17
+ process.arch !== "x64" ||
18
+ configured === undefined ||
19
+ !isAbsolute(configured))
20
+ throw new AnalysisCapabilityUnavailableError("wakaru", OPERATION, "Provide an absolute REA_WAKARU_COMMAND pointing to Wakaru 1.13.0 on Linux x64; no tool is installed by REA");
21
+ try {
22
+ const command = await realpath(configured);
23
+ await access(command, constants.R_OK | constants.X_OK);
24
+ const fingerprint = await fingerprintRecoveryFile(command, RECOVERY_LIMITS.outputBytes);
25
+ const limiter = environment.REA_JAVASCRIPT_PRLIMIT_COMMAND ?? "/usr/bin/prlimit";
26
+ if (!isAbsolute(limiter))
27
+ throw new TypeError("REA_JAVASCRIPT_PRLIMIT_COMMAND must be absolute");
28
+ await access(limiter, constants.X_OK);
29
+ return { command, limiter, ...fingerprint };
30
+ }
31
+ catch (cause) {
32
+ throw new AnalysisCapabilityUnavailableError("wakaru", OPERATION, `Configured Wakaru or util-linux prlimit is unavailable: ${recoveryFailureMessage(cause)}`, { cause });
33
+ }
34
+ };
35
+ /** Run one bounded command and verify cleanup before consuming its output. */
36
+ export const runWakaruCommand = async (context) => {
37
+ checkRecoveryDeadline(context.deadline, context.signal);
38
+ const runId = `rea-wakaru-${randomUUID()}`;
39
+ const spawned = await (context.launcher ?? spawnOwnedProviderProcess)({
40
+ command: context.limiter,
41
+ arguments: [
42
+ `--as=${String(RECOVERY_LIMITS.addressSpaceBytes)}`,
43
+ `--fsize=${String(RECOVERY_LIMITS.outputBytes)}`,
44
+ "--core=0",
45
+ "--cpu=120",
46
+ "--",
47
+ context.command,
48
+ ...context.arguments,
49
+ ],
50
+ expectedCommand: null,
51
+ runId,
52
+ cwd: context.cwd,
53
+ hostEnvironment: context.environment,
54
+ env: { TMPDIR: context.cwd, RAYON_NUM_THREADS: "1", NO_COLOR: "1" },
55
+ }).catch((cause) => {
56
+ throw new ProviderAdapterError("wakaru", OPERATION, {
57
+ cause,
58
+ diagnostics: {
59
+ reason: "Failed to launch configured Wakaru through util-linux prlimit",
60
+ command: context.command,
61
+ detail: recoveryFailureMessage(cause),
62
+ },
63
+ });
64
+ });
65
+ let oversized = false;
66
+ const supervisor = new ProviderProcessSupervisor({
67
+ ...spawned,
68
+ ownsProcessLifetime: true,
69
+ cleanup: spawned.cleanup ?? (() => cleanupOwnedProcessGroup(spawned.ownership)),
70
+ }, {
71
+ onDiagnostic: (event) => {
72
+ if (event.type === "output" &&
73
+ event.totalBytes > RECOVERY_LIMITS.reportBytes)
74
+ oversized = true;
75
+ },
76
+ });
77
+ let failure;
78
+ try {
79
+ while (!(await supervisor.waitForOutputClose(100))) {
80
+ checkRecoveryDeadline(context.deadline, context.signal);
81
+ if (oversized)
82
+ throw new AnalysisOutputError(OPERATION, "Wakaru diagnostic stream exceeds 8 MiB");
83
+ if (context.staging !== undefined)
84
+ await inventoryRecoveryFiles(context.staging, context.signal);
85
+ }
86
+ checkRecoveryDeadline(context.deadline, context.signal);
87
+ if (oversized)
88
+ throw new AnalysisOutputError(OPERATION, "Wakaru diagnostic stream exceeds 8 MiB");
89
+ }
90
+ catch (cause) {
91
+ failure = cause;
92
+ }
93
+ const stopped = await supervisor.stop();
94
+ const snapshot = supervisor.snapshot();
95
+ supervisor.dispose();
96
+ if (stopped.status === "incomplete")
97
+ throw new ProviderCleanupError("wakaru", [runId, context.cwd], {
98
+ reason: stopped.reason,
99
+ previous_error: failure instanceof Error ? failure.message : null,
100
+ exit_code: snapshot.exitCode ?? null,
101
+ signal: snapshot.signal ?? null,
102
+ });
103
+ if (failure !== undefined)
104
+ throw failure;
105
+ if (context.signal?.aborted === true)
106
+ throw new AnalysisCancelledError(OPERATION);
107
+ return {
108
+ exit_code: snapshot.exitCode ?? null,
109
+ signal: snapshot.signal ?? null,
110
+ stdout: snapshot.stdout.text,
111
+ stderr: snapshot.stderr.text,
112
+ command: context.command,
113
+ arguments: [...context.arguments],
114
+ resource_limiter: context.limiter,
115
+ };
116
+ };
@@ -0,0 +1,100 @@
1
+ import { join } from "node:path";
2
+ import { createAnalysisExecution, } from "../../application/AnalysisProvider.js";
3
+ import { AnalysisCapabilityUnavailableError, AnalysisOutputError, } from "../../domain/analysisErrorCore.js";
4
+ import { jsonValueSchema } from "../../domain/jsonValue.js";
5
+ import { fingerprintRecoveryFile, inventoryRecoveryFiles, readRecoveryFile, recoveryDigest, } from "./RecoveryFiles.js";
6
+ import { runWakaruCommand, } from "./WakaruCommand.js";
7
+ import { parseWakaruReports } from "./WakaruReport.js";
8
+ import { publishWakaruArtifacts } from "./WakaruPublication.js";
9
+ import { RECOVERY_LIMITS, WAKARU_RELEASE, WAKARU_PROVIDER_IDENTITY, } from "./WakaruRelease.js";
10
+ const OPERATION = "recover_javascript_sources";
11
+ const MODES = {
12
+ structural: "strict",
13
+ heuristic: "auto",
14
+ inspection: "inspect",
15
+ };
16
+ /** Consume the pinned producer representation in a private workspace. */
17
+ const executeWakaruRecovery = async (context) => {
18
+ const { root, input, source, engine, environment, launcher, options } = context;
19
+ const staging = join(root, "modules");
20
+ const commandContext = {
21
+ ...engine,
22
+ cwd: root,
23
+ deadline: context.deadline,
24
+ environment: environment,
25
+ ...(options?.signal === undefined ? {} : { signal: options.signal }),
26
+ ...(launcher === undefined ? {} : { launcher: launcher }),
27
+ };
28
+ const version = await runWakaruCommand({
29
+ ...commandContext,
30
+ arguments: ["--version"],
31
+ });
32
+ if (version.exit_code !== 0 ||
33
+ version.stdout.trim() !== `wakaru ${WAKARU_RELEASE.version}`)
34
+ throw new AnalysisCapabilityUnavailableError("wakaru", OPERATION, `This adapter requires Wakaru ${WAKARU_RELEASE.version}; reported version: ${version.stdout.trim()}; exit: ${String(version.exit_code)}; stderr: ${version.stderr}`);
35
+ const run = await runWakaruCommand({
36
+ ...commandContext,
37
+ staging,
38
+ arguments: [
39
+ source.snapshot_path,
40
+ `--unpack=${MODES[input.extraction_mode]}`,
41
+ `--level=${input.rewrite_level}`,
42
+ "--provenance",
43
+ "--emit-source-map",
44
+ "--json",
45
+ "-o",
46
+ staging,
47
+ ],
48
+ });
49
+ const files = await inventoryRecoveryFiles(staging, options?.signal);
50
+ const snapshot = await readRecoveryFile(source.snapshot_path, RECOVERY_LIMITS.inputBytes, options?.signal);
51
+ const parsed = await parseWakaruReports({
52
+ execution: run,
53
+ provenancePath: join(staging, "provenance.json"),
54
+ snapshotPath: source.snapshot_path,
55
+ sourceBytes: snapshot,
56
+ files,
57
+ });
58
+ return { version, run, parsed };
59
+ };
60
+ /** Publish validated recovery and retain exact source and engine bindings. */
61
+ export const prepareWakaruExecution = async (context) => {
62
+ const { root, tree, input, source, engine, options } = context;
63
+ const staging = join(root, "modules");
64
+ const { version, run, parsed } = await executeWakaruRecovery(context);
65
+ const result = await publishWakaruArtifacts({
66
+ tree,
67
+ staging,
68
+ input,
69
+ source,
70
+ engine,
71
+ parsed,
72
+ execution: run,
73
+ ...(options?.signal === undefined ? {} : { signal: options.signal }),
74
+ });
75
+ if (recoveryDigest(await readRecoveryFile(input.path, RECOVERY_LIMITS.inputBytes, options?.signal)) !== source.sha256)
76
+ throw new AnalysisOutputError(OPERATION, `Original input changed during recovery: ${input.path}`);
77
+ if ((await fingerprintRecoveryFile(engine.command, RECOVERY_LIMITS.outputBytes, options?.signal)).sha256 !== engine.sha256)
78
+ throw new AnalysisOutputError(OPERATION, "Configured engine bytes changed during recovery");
79
+ return createAnalysisExecution(result, WAKARU_PROVIDER_IDENTITY, {
80
+ rawResult: jsonValueSchema.parse({
81
+ version,
82
+ execution: run,
83
+ report: parsed.report,
84
+ provenance: parsed.provenance,
85
+ }),
86
+ subject: {
87
+ path: source.path,
88
+ sha256: source.sha256,
89
+ format: "javascript",
90
+ },
91
+ locations: [
92
+ { kind: "artifact-path", path: source.path },
93
+ ...result.modules.map((module) => ({
94
+ kind: "artifact-path",
95
+ path: module.artifact.path,
96
+ })),
97
+ ],
98
+ limitations: result.limitations,
99
+ });
100
+ };
@@ -0,0 +1,96 @@
1
+ import { mkdir, mkdtemp, rm } from "node:fs/promises";
2
+ import { tmpdir } from "node:os";
3
+ import { join } from "node:path";
4
+ import {} from "../../application/AnalysisProvider.js";
5
+ import { SafeOutputTree } from "../../artifacts/SafeOutputTree.js";
6
+ import { AnalysisError } from "../../domain/analysisErrorBase.js";
7
+ import { AnalysisOutputError } from "../../domain/analysisErrorCore.js";
8
+ import { ProviderAdapterError } from "../../domain/providerAdapterError.js";
9
+ import { ProviderCleanupError } from "../../domain/providerCleanupError.js";
10
+ import { err, ok } from "../../domain/result.js";
11
+ import { checkRecoveryCancellation, checkRecoveryDeadline, recoveryFailureMessage, recoveryInputFailure, snapshotRecoveryInput, } from "./RecoveryFiles.js";
12
+ import { resolveWakaruCommand } from "./WakaruCommand.js";
13
+ import { prepareWakaruExecution } from "./WakaruExecution.js";
14
+ import { RECOVERY_LIMITS } from "./WakaruRelease.js";
15
+ const OPERATION = "recover_javascript_sources";
16
+ /** Stateless adapter; each recovery owns its snapshot, process and publication. */
17
+ export class WakaruProvider {
18
+ environment;
19
+ launcher;
20
+ constructor(environment = process.env, launcher) {
21
+ this.environment = environment;
22
+ this.launcher = launcher;
23
+ }
24
+ /** Recover one script using validated upstream reports and verified output bytes. */
25
+ async recover(input, options) {
26
+ let root;
27
+ let tree;
28
+ let failure;
29
+ let execution;
30
+ const deadline = Date.now() + RECOVERY_LIMITS.timeoutMs;
31
+ try {
32
+ checkRecoveryCancellation(options?.signal);
33
+ const engine = await resolveWakaruCommand(this.environment);
34
+ root = await mkdtemp(join(tmpdir(), "rea-wakaru-"));
35
+ const inputs = join(root, "inputs");
36
+ const staging = join(root, "modules");
37
+ await mkdir(inputs, { mode: 0o700 });
38
+ await mkdir(staging, { mode: 0o700 });
39
+ const source = await snapshotRecoveryInput(input.path, join(inputs, "bundle.js"), options?.signal);
40
+ tree = await SafeOutputTree.create(input.output_directory).catch((cause) => {
41
+ throw recoveryInputFailure("output_directory", `Cannot create new recovery directory ${input.output_directory}: ${recoveryFailureMessage(cause)}`, cause);
42
+ });
43
+ execution = await prepareWakaruExecution({
44
+ root,
45
+ tree,
46
+ input,
47
+ source,
48
+ engine,
49
+ environment: this.environment,
50
+ launcher: this.launcher,
51
+ options,
52
+ deadline,
53
+ });
54
+ checkRecoveryDeadline(deadline, options?.signal);
55
+ await rm(root, { recursive: true, force: true });
56
+ root = undefined;
57
+ checkRecoveryDeadline(deadline, options?.signal);
58
+ await tree.commit();
59
+ }
60
+ catch (cause) {
61
+ failure = cause;
62
+ }
63
+ if (failure !== undefined) {
64
+ const residuals = [];
65
+ try {
66
+ await tree?.rollback();
67
+ }
68
+ catch {
69
+ if (tree !== undefined)
70
+ residuals.push(tree.outputRoot);
71
+ }
72
+ if (root !== undefined &&
73
+ !(failure instanceof AnalysisError && failure.cleanupIncomplete)) {
74
+ try {
75
+ await rm(root, { recursive: true, force: true });
76
+ }
77
+ catch {
78
+ residuals.push(root);
79
+ }
80
+ }
81
+ if (residuals.length > 0)
82
+ return err(new ProviderCleanupError("wakaru", residuals, {
83
+ previous_error: recoveryFailureMessage(failure),
84
+ }));
85
+ return err(failure instanceof AnalysisError
86
+ ? failure
87
+ : new ProviderAdapterError("wakaru", OPERATION, {
88
+ cause: failure,
89
+ diagnostics: { reason: recoveryFailureMessage(failure) },
90
+ }));
91
+ }
92
+ return execution === undefined
93
+ ? err(new AnalysisOutputError(OPERATION, "Recovery returned no execution"))
94
+ : ok(execution);
95
+ }
96
+ }
@@ -0,0 +1,102 @@
1
+ import { join } from "node:path";
2
+ import { Readable } from "node:stream";
3
+ import { AnalysisOutputError } from "../../domain/analysisErrorCore.js";
4
+ import { javascriptRecoveryResultSchema, } from "../../domain/javascript/javascriptRecovery.js";
5
+ import { readRecoveryFile, recoveryDigest } from "./RecoveryFiles.js";
6
+ import { recoveryRanges, validateRecoverySourceMap, } from "./WakaruReport.js";
7
+ import { RECOVERY_LIMITATIONS, RECOVERY_LIMITS, WAKARU_RELEASE, } from "./WakaruRelease.js";
8
+ /** Write validated artifacts to one exclusively owned, rollback-capable tree. */
9
+ export const publishWakaruArtifacts = async (context) => {
10
+ const { tree, source, parsed, staging, signal } = context;
11
+ const write = async (path, bytes) => {
12
+ const sha256 = recoveryDigest(bytes);
13
+ const file = await tree.write(path, Readable.from([bytes]), sha256, signal);
14
+ return {
15
+ path: join(tree.outputRoot, file.relativePath),
16
+ sha256: file.sha256,
17
+ bytes: file.bytesWritten,
18
+ };
19
+ };
20
+ const snapshot = await readRecoveryFile(source.snapshot_path, RECOVERY_LIMITS.inputBytes, signal);
21
+ if (recoveryDigest(snapshot) !== source.sha256)
22
+ throw new AnalysisOutputError("recover_javascript_sources", "The input snapshot changed during recovery");
23
+ const publishedCopy = await write("inputs/bundle.js", snapshot);
24
+ const modules = [];
25
+ for (const module of parsed.report.modules) {
26
+ modules.push(await publishModule(context, module, write));
27
+ }
28
+ const report = await write("reports/stdout.json", Buffer.from(context.execution.stdout));
29
+ const provenance = await write("reports/provenance.json", await readRecoveryFile(join(staging, "provenance.json"), RECOVERY_LIMITS.reportBytes, signal));
30
+ const details = {
31
+ source: { ...source, published_copy: publishedCopy },
32
+ engine: {
33
+ id: "wakaru",
34
+ version: WAKARU_RELEASE.version,
35
+ executable: {
36
+ path: context.engine.command,
37
+ sha256: context.engine.sha256,
38
+ bytes: context.engine.bytes,
39
+ },
40
+ audited_source_revision: WAKARU_RELEASE.revision,
41
+ executed_source_revision: null,
42
+ },
43
+ options: {
44
+ extraction_mode: context.input.extraction_mode,
45
+ rewrite_level: context.input.rewrite_level,
46
+ },
47
+ status: parsed.status,
48
+ detected_formats: parsed.report.detected_formats,
49
+ reported_safety: parsed.report.safety,
50
+ reported_strategy: parsed.provenance.strategy,
51
+ reported_format: parsed.provenance.format,
52
+ total: parsed.report.total,
53
+ failed: parsed.report.failed,
54
+ modules,
55
+ warnings: parsed.report.warnings,
56
+ report,
57
+ provenance,
58
+ analysis_input: modules.length === 0
59
+ ? null
60
+ : {
61
+ input_path: join(tree.outputRoot, "modules"),
62
+ format: "directory",
63
+ },
64
+ runtime_equivalence: "unknown",
65
+ limitations: [...RECOVERY_LIMITATIONS],
66
+ };
67
+ const manifest = await write("manifest.json", Buffer.from(`${JSON.stringify(details, null, 2)}\n`));
68
+ return javascriptRecoveryResultSchema.parse({ ...details, manifest });
69
+ };
70
+ const publishModule = async (context, module, write) => {
71
+ const { staging, source, parsed, signal } = context;
72
+ const artifact = await write(`modules/${module.filename}`, await readRecoveryFile(join(staging, module.filename), RECOVERY_LIMITS.outputBytes, signal));
73
+ const mapPath = join(staging, `${module.filename}.map`);
74
+ let sourceMap = null;
75
+ const map = await readRecoveryFile(mapPath, RECOVERY_LIMITS.outputBytes, signal).catch((cause) => {
76
+ if (cause instanceof Error && "code" in cause && cause.code === "ENOENT")
77
+ return null;
78
+ throw cause;
79
+ });
80
+ if (map !== null) {
81
+ validateRecoverySourceMap(map, module.filename);
82
+ sourceMap = await write(`modules/${module.filename}.map`, map);
83
+ }
84
+ const provenance = parsed.provenance.modules[module.filename];
85
+ if (provenance === undefined)
86
+ throw new AnalysisOutputError("recover_javascript_sources", `Missing module provenance: ${module.filename}`);
87
+ return {
88
+ reported_filename: module.filename,
89
+ reported_status: module.status,
90
+ artifact,
91
+ source_map: sourceMap,
92
+ provenance: {
93
+ reported_input: provenance.input,
94
+ original_path: source.path,
95
+ original_sha256: source.sha256,
96
+ extraction: provenance.extraction,
97
+ byte_ranges: recoveryRanges(provenance.ranges),
98
+ context_byte_ranges: recoveryRanges(provenance.context_ranges ?? []),
99
+ range_semantics: "half-open-utf8-bytes",
100
+ },
101
+ };
102
+ };
@@ -0,0 +1,29 @@
1
+ /** Unchanged upstream source pin; executed bytes are identified separately. */
2
+ export const WAKARU_RELEASE = {
3
+ version: "1.13.0",
4
+ revision: "6070266d24b32951fa2fe1d2dad5b4313bd5c81b",
5
+ repository: "https://github.com/pionxzh/wakaru",
6
+ };
7
+ /** Exact provider identity shared by executions and the generated catalog. */
8
+ export const WAKARU_PROVIDER_IDENTITY = {
9
+ id: "wakaru",
10
+ name: "Wakaru",
11
+ version: WAKARU_RELEASE.version,
12
+ };
13
+ /** Per-operation resource bounds for the verified Linux adapter. */
14
+ export const RECOVERY_LIMITS = {
15
+ inputBytes: 64 * 1024 * 1024,
16
+ outputBytes: 128 * 1024 * 1024,
17
+ outputEntries: 10000,
18
+ reportBytes: 8 * 1024 * 1024,
19
+ addressSpaceBytes: 1024 * 1024 * 1024,
20
+ timeoutMs: 120000,
21
+ };
22
+ /** Public limitations for transformations and extraction provenance. */
23
+ export const RECOVERY_LIMITATIONS = [
24
+ "Recovered sources are derived artifacts; original variable names and runtime equivalence are not established.",
25
+ "Extraction ranges refer to half-open UTF-8 byte offsets in the original input, not rewritten line positions or whole-bundle coverage.",
26
+ "Emitted source maps are preserved as reported by the engine; their mapping accuracy is not independently established.",
27
+ "Inspection mode may produce non-executable regions. No input or recovered application code is executed.",
28
+ "Linux adapter: one worker, 1 GiB address-space ceiling, 120-second deadline, 64 MiB input, 128 MiB output, 10000 output entries and 8 MiB per diagnostic/report stream. Resource limits are per operation, not aggregate host containment.",
29
+ ];