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
@@ -133,6 +133,22 @@ export const objcDispatchImplementationSchema = z.strictObject({
133
133
  selector: z.string().min(1),
134
134
  method_type: z.enum(["instance", "class"]),
135
135
  implementation_address: z.string().nullable(),
136
+ /** Category that adds this method, when it is not defined by the class itself. */
137
+ category: z.string().nullable().optional(),
138
+ location: nativeMetadataLocationSchema,
139
+ decode: nativeMetadataDecodeSchema,
140
+ evidence: z.array(nativeMetadataEvidenceSchema).min(1),
141
+ });
142
+ /** Objective-C category: methods, protocols and properties added to a class. */
143
+ export const objcCategorySchema = z.strictObject({
144
+ name: z.string().min(1),
145
+ /** Extended class; external classes come from the category's bind symbol. */
146
+ class_name: z.string().min(1).nullable(),
147
+ class_source: z.enum(["local", "external", "unresolved"]),
148
+ instance_methods: z.array(z.string()),
149
+ class_methods: z.array(z.string()),
150
+ protocols: z.array(z.string()),
151
+ properties: z.array(objcPropertySchema),
136
152
  location: nativeMetadataLocationSchema,
137
153
  decode: nativeMetadataDecodeSchema,
138
154
  evidence: z.array(nativeMetadataEvidenceSchema).min(1),
@@ -240,6 +256,7 @@ export const dbSaveResultSchema = z.strictObject({
240
256
  export const objcSwiftMetadataSchema = z.strictObject({
241
257
  objc_classes: z.array(objcClassSchema).default([]),
242
258
  objc_protocols: z.array(objcProtocolSchema).default([]),
259
+ objc_categories: z.array(objcCategorySchema).default([]),
243
260
  swift_decls: z.array(swiftDeclSchema).default([]),
244
261
  objc_ivars: z.array(objcIvarSchema).default([]),
245
262
  objc_protocol_records: z.array(objcProtocolRecordSchema).default([]),
@@ -165,14 +165,15 @@ const processCaptureShapeSchema = z.strictObject({
165
165
  }),
166
166
  });
167
167
  /** Exact serialized shape plus all process-capture semantic invariants. */
168
- export const processCaptureSchema = processCaptureShapeSchema.superRefine((capture, context) => {
168
+ export const processCaptureSchema = processCaptureShapeSchema
169
+ .superRefine((capture, context) => {
169
170
  for (const issue of collectProcessCaptureIssues(capture))
170
171
  context.addIssue({
171
172
  code: "custom",
172
173
  path: issue.path.split("."),
173
174
  message: issue.message,
174
175
  });
175
- });
176
+ })
177
+ .describe("The capture must preserve its canonical scenario, comparison, and normalization SHA-256 commitments; ordered capture timestamps and contiguous sequence numbers; before and final filesystem snapshots with truncation propagated; and exit-code consistency with deadline termination. When parsing older input without an event journal, REA supplies an empty journal; empty journals are valid. A non-empty journal must reference every captured observation exactly once with unique in-range references. These cross-field invariants are checked by REA after capture.");
176
178
  export { parseProcessCapture } from "./processCaptureParsing.js";
177
179
  export { compareProcessCaptures, comparisonStatusSchema, deriveProcessComparisonStatus, PROCESS_COMPARISON_DIMENSIONS, processCaptureComparisonSchema, } from "./processComparison.js";
178
- export { compareProcessTraces, processTraceComparisonResultSchema, processTraceSourceSchema, processTraceSpecificationSchema, } from "./processTraceComparison.js";
@@ -0,0 +1,11 @@
1
+ /** Canonical provider identity for controlled process capture Evidence. */
2
+ export const PROCESS_PROVIDER = {
3
+ id: "rea-process",
4
+ name: "REA process capture",
5
+ version: "3",
6
+ };
7
+ /** Admit current and previously emitted names for the same v3 process provider. */
8
+ export const isProcessEvidenceProvider = (provider) => provider.id === PROCESS_PROVIDER.id &&
9
+ provider.version === PROCESS_PROVIDER.version &&
10
+ (provider.name === PROCESS_PROVIDER.name ||
11
+ provider.name === "REA deterministic process harness");
@@ -3,10 +3,18 @@ import canonicalize from "canonicalize";
3
3
  import { z } from "zod";
4
4
  const positiveBudget = z.number().int().safe().positive();
5
5
  const timedEventBase = { at_ms: z.number().int().safe().nonnegative() };
6
+ const reservedRunIdEnvironmentName = "REA_PROCESS_RUN_ID";
6
7
  const environmentName = z
7
8
  .string()
8
- .regex(/^[^=\0]+$/u, "Environment names cannot contain '=' or NUL");
9
- const reservedEnvironment = new Set(["REA_PROCESS_RUN_ID"]);
9
+ .min(1, "Environment names must not be empty")
10
+ .regex(/^(?!REA_PROCESS_RUN_ID(?![\s\S]))[^=\0]+$/u, {
11
+ error: (issue) => issue.input === reservedRunIdEnvironmentName
12
+ ? `${reservedRunIdEnvironmentName} is reserved by the process adapter`
13
+ : "Environment names cannot contain '=' or NUL",
14
+ });
15
+ const childProcessString = z
16
+ .string()
17
+ .regex(/^[^\0]*$/u, "Values passed to operating-system APIs cannot contain NUL");
10
18
  export const normalizationSchema = z.object({
11
19
  paths: z.boolean(),
12
20
  pids: z.boolean(),
@@ -61,11 +69,13 @@ export const processComparisonContract = (scenario) => ({
61
69
  */
62
70
  export const processScenarioSchema = z
63
71
  .object({
64
- executable: z.string().min(1),
65
- arguments: z.array(z.string()).default([]),
66
- working_directory: z.string().default("."),
67
- environment: z.record(environmentName, z.string()).default({}),
68
- filesystem_observation_paths: z.array(z.string().min(1)).default([]),
72
+ executable: childProcessString.min(1),
73
+ arguments: z.array(childProcessString).default([]),
74
+ working_directory: childProcessString.default("."),
75
+ environment: z.record(environmentName, childProcessString).default({}),
76
+ filesystem_observation_paths: z
77
+ .array(childProcessString.min(1))
78
+ .default([]),
69
79
  terminal: z
70
80
  .object({
71
81
  columns: z.number().int().min(1).max(65_535).default(80),
@@ -147,16 +157,6 @@ export const processScenarioSchema = z
147
157
  });
148
158
  }
149
159
  }
150
- const explicit = new Set(Object.keys(scenario.environment));
151
- for (const name of explicit) {
152
- if (reservedEnvironment.has(name)) {
153
- context.addIssue({
154
- code: "custom",
155
- message: `${name} is reserved by the process adapter`,
156
- path: ["environment", name],
157
- });
158
- }
159
- }
160
160
  for (const event of scenario.events) {
161
161
  if (event.at_ms > scenario.timeout_ms) {
162
162
  context.addIssue({
@@ -1,7 +1,7 @@
1
1
  import { evaluateProcessTraceSide, processTraceComparisonResultSchema, } from "./processTraceEvaluation.js";
2
2
  import { processTraceSpecificationSchema, } from "./processTraceSpecification.js";
3
3
  export { processTraceComparisonResultSchema, } from "./processTraceEvaluation.js";
4
- export { processTraceSourceSchema, processTraceSpecificationSchema, } from "./processTraceSpecification.js";
4
+ export { processTraceSpecificationSchema, } from "./processTraceSpecification.js";
5
5
  /** Compare two captures against an explicit finite trace language. */
6
6
  export const compareProcessTraces = (left, right, specificationInput) => {
7
7
  const specification = processTraceSpecificationSchema.parse(specificationInput);
@@ -0,0 +1,69 @@
1
+ import { parse } from "plist";
2
+ /** The dictionary key REA results cannot carry: validation strips it. */
3
+ const PROTOTYPE_KEY = "__proto__";
4
+ /** Limitation for results whose source plist held `__proto__` entries. */
5
+ export const omittedPrototypeKeysLimitation = (count) => `${String(count)} dictionary ${count === 1 ? "entry" : "entries"} keyed __proto__ ${count === 1 ? "was" : "were"} omitted because REA results cannot represent that key.`;
6
+ const withoutKey = (value, key) => {
7
+ let omitted = 0;
8
+ const strip = (item) => {
9
+ if (Array.isArray(item))
10
+ return item.map(strip);
11
+ if (item === null ||
12
+ typeof item !== "object" ||
13
+ item instanceof Date ||
14
+ item instanceof Uint8Array)
15
+ return item;
16
+ return Object.fromEntries(Object.entries(item).flatMap(([name, entry]) => {
17
+ if (name !== key)
18
+ return [[name, strip(entry)]];
19
+ omitted += 1;
20
+ return [];
21
+ }));
22
+ };
23
+ const stripped = strip(value);
24
+ return { value: stripped, omittedPrototypeKeys: omitted };
25
+ };
26
+ /** Remove own `__proto__` entries, such as JSON.parse creates, and count them. */
27
+ export const omitPrototypeKeys = (value) => withoutKey(value, PROTOTYPE_KEY);
28
+ // Comments and CDATA text are consumed whole so only element keys match.
29
+ const KEY_TOKEN = /<!--[\s\S]*?-->|<!\[CDATA\[[\s\S]*?\]\]>|<key>([^<]*)<\/key>|<key><!\[CDATA\[([\s\S]*?)\]\]><\/key>/gu;
30
+ const XML_ENTITIES = {
31
+ amp: "&",
32
+ apos: "'",
33
+ gt: ">",
34
+ lt: "<",
35
+ quot: '"',
36
+ };
37
+ /**
38
+ * Expand XML character and predefined entity references. A reference beyond
39
+ * Unicode stays as written: comments and CDATA may hold such text literally,
40
+ * and the XML decoder rejects it anywhere else.
41
+ */
42
+ const decodeXmlText = (text) => text.replace(/&(?:#x([\da-f]+)|#(\d+)|([a-z]+));/giu, (entity, hex, decimal, name) => {
43
+ const codePoint = hex !== undefined
44
+ ? parseInt(hex, 16)
45
+ : decimal !== undefined
46
+ ? parseInt(decimal, 10)
47
+ : undefined;
48
+ if (codePoint !== undefined)
49
+ return codePoint <= 0x10ffff ? String.fromCodePoint(codePoint) : entity;
50
+ return (name === undefined ? undefined : XML_ENTITIES[name]) ?? entity;
51
+ });
52
+ /**
53
+ * Decode an XML plist whose dictionaries may use the legal key `__proto__`,
54
+ * which the `plist` decoder rejects outright. Those entries are omitted and
55
+ * counted so callers can report them instead of failing the whole document.
56
+ */
57
+ export const parseXmlPropertyList = (text) => {
58
+ // The decoded text holds every key the decoder can produce, including
59
+ // entity-encoded spellings of the placeholder, so no source key aliases it.
60
+ // Decoding comment or CDATA text too can only lengthen the placeholder.
61
+ const decoded = decodeXmlText(text);
62
+ let placeholder = "__rea_prototype_key__";
63
+ while (decoded.includes(placeholder))
64
+ placeholder = `_${placeholder}`;
65
+ const substituted = text.replace(KEY_TOKEN, (token, plain, cdata) => (plain === undefined ? cdata : decodeXmlText(plain)) === PROTOTYPE_KEY
66
+ ? `<key>${placeholder}</key>`
67
+ : token);
68
+ return withoutKey(parse(substituted), placeholder);
69
+ };
@@ -0,0 +1,17 @@
1
+ import { AnalysisError } from "./analysisErrorBase.js";
2
+ /** A provider adapter failed outside its more precise typed variants. */
3
+ export class ProviderAdapterError extends AnalysisError {
4
+ providerId;
5
+ operation;
6
+ _tag = "ProviderAdapterError";
7
+ diagnostics;
8
+ constructor(providerId, operation, options = {}) {
9
+ super(`Provider ${providerId} adapter failed during ${operation}`, options);
10
+ this.providerId = providerId;
11
+ this.operation = operation;
12
+ this.diagnostics =
13
+ options.diagnostics === undefined
14
+ ? undefined
15
+ : structuredClone(options.diagnostics);
16
+ }
17
+ }
@@ -1,11 +1,14 @@
1
- import { ProviderAdapterError } from "./errors.js";
1
+ import { ProviderAdapterError } from "./providerAdapterError.js";
2
2
  /** Provider resources could not be proven closed after bounded cleanup. */
3
3
  export class ProviderCleanupError extends ProviderAdapterError {
4
4
  cleanupIncomplete = true;
5
5
  cleanupResources;
6
6
  userMessage = "Provider cleanup could not be fully confirmed. Review the reported local resources before opening another target.";
7
- constructor(providerId, resources, diagnostics, options) {
8
- super(providerId, "close_binary", { ...options, diagnostics });
7
+ constructor(providerId, resources, diagnostics,
8
+ /** Identify the operation owning these resources; binary callers retain their default. */
9
+ options) {
10
+ const { operation = "close_binary", ...errorOptions } = options ?? {};
11
+ super(providerId, operation, { ...errorOptions, diagnostics });
9
12
  this.cleanupResources = [...resources];
10
13
  }
11
14
  }
@@ -0,0 +1,44 @@
1
+ import { AnalysisError } from "./analysisErrorBase.js";
2
+ /** No configured provider can satisfy a requested operation or target binding. */
3
+ export class ProviderSelectionError extends AnalysisError {
4
+ _tag = "ProviderSelectionError";
5
+ operation;
6
+ reason;
7
+ requestedProviderId;
8
+ candidateIds;
9
+ rejections;
10
+ userMessage;
11
+ constructor(options) {
12
+ const operation = options.operation ?? "open_binary";
13
+ super(providerSelectionDiagnostic(options));
14
+ this.operation = operation;
15
+ this.reason = options.reason;
16
+ this.requestedProviderId = options.requestedProviderId;
17
+ this.candidateIds = [...options.candidateIds];
18
+ this.rejections = [...(options.rejections ?? [])].map((rejection) => ({
19
+ ...rejection,
20
+ diagnostics: structuredClone(rejection.diagnostics),
21
+ }));
22
+ this.userMessage = providerSelectionUserMessage(options);
23
+ }
24
+ }
25
+ const providerSelectionDiagnostic = (options) => {
26
+ const candidates = options.candidateIds.length === 0
27
+ ? "none"
28
+ : options.candidateIds.join(", ");
29
+ return `Analysis provider selection failed (${options.reason}) for ${options.requestedProviderId}; candidates: ${candidates}`;
30
+ };
31
+ const providerSelectionUserMessage = (options) => {
32
+ switch (options.reason) {
33
+ case "ambiguous":
34
+ return "Multiple analysis providers support this target. Choose one with provider_id, --provider, or REA_ANALYSIS_PROVIDER.";
35
+ case "unknown_provider":
36
+ return `The requested analysis provider is unknown. Choose one of: ${options.candidateIds.join(", ") || "no configured providers"}.`;
37
+ case "provider_unavailable":
38
+ return "The selected analysis provider is unavailable. Review the reported local diagnostics or run `rea doctor`, then retry.";
39
+ case "target_unsupported":
40
+ return "The selected analysis provider does not support this target. Choose another provider or open a supported extracted binary.";
41
+ case "invalid_options":
42
+ return "The analysis provider selection or open options are invalid. Correct them and try again.";
43
+ }
44
+ };
@@ -87,13 +87,14 @@ const evaluateOwner = (context, surfaceId) => {
87
87
  };
88
88
  export const evaluateReconstructionClaims = (context) => {
89
89
  const claims = indexUnique(context.coverage.claims, "claim_id");
90
+ const indexes = createVerifierIndexes(context.coverage);
90
91
  for (const claimId of context.boundary.required_claim_ids) {
91
92
  const claim = claims.get(claimId);
92
93
  if (claim === undefined) {
93
94
  addReason(context, "claim-missing", claimId, "Required finite claim is absent.");
94
95
  continue;
95
96
  }
96
- const contracts = context.coverage.verifier_contracts.filter(({ claim_ids: ids }) => ids.includes(claimId));
97
+ const contracts = indexes.contractsByClaim.get(claimId) ?? [];
97
98
  if (contracts.length === 0) {
98
99
  addReason(context, "verifier-missing", claimId, "No verifier contract covers this claim.");
99
100
  continue;
@@ -104,20 +105,49 @@ export const evaluateReconstructionClaims = (context) => {
104
105
  }
105
106
  const contract = contracts[0];
106
107
  if (contract !== undefined)
107
- evaluateVerifierResult(context, claim, contract);
108
+ evaluateVerifierResult(context, claim, contract, indexes);
108
109
  }
109
110
  };
110
- const evaluateVerifierResult = (context, claim, contract) => {
111
- const results = context.coverage.verifier_results
112
- .filter(({ verifier_id: id }) => id === contract.verifier_id)
113
- .sort((left, right) => Date.parse(right.observed_at) - Date.parse(left.observed_at));
114
- const result = results[0];
111
+ const createVerifierIndexes = (coverage) => {
112
+ const contractsByClaim = new Map();
113
+ for (const contract of coverage.verifier_contracts)
114
+ for (const claimId of new Set(contract.claim_ids)) {
115
+ const contracts = contractsByClaim.get(claimId) ?? [];
116
+ contracts.push(contract);
117
+ contractsByClaim.set(claimId, contracts);
118
+ }
119
+ const latestResultsByVerifier = new Map();
120
+ for (const result of coverage.verifier_results) {
121
+ const latest = latestResultsByVerifier.get(result.verifier_id);
122
+ // Stable descending sort used to choose the first input record on ties.
123
+ if (latest === undefined ||
124
+ Date.parse(result.observed_at) > Date.parse(latest.observed_at))
125
+ latestResultsByVerifier.set(result.verifier_id, result);
126
+ }
127
+ const ownersBySurface = new Map();
128
+ for (const owner of coverage.owners) {
129
+ const owners = ownersBySurface.get(owner.surface_id) ?? [];
130
+ owners.push(owner);
131
+ ownersBySurface.set(owner.surface_id, owners);
132
+ }
133
+ return {
134
+ contractsByClaim,
135
+ latestResultsByVerifier,
136
+ artifactDigests: new Set(coverage.artifacts.map(({ artifact_sha256: value }) => value)),
137
+ ownerDigests: new Set(coverage.owners.flatMap(({ ownership }) => ownership.disposition === "implemented" ? [ownership.owner_sha256] : [])),
138
+ surfaces: indexUnique(coverage.surfaces, "surface_id"),
139
+ artifacts: indexUnique(coverage.artifacts, "artifact_id"),
140
+ ownersBySurface,
141
+ };
142
+ };
143
+ const evaluateVerifierResult = (context, claim, contract, indexes) => {
144
+ const result = indexes.latestResultsByVerifier.get(contract.verifier_id);
115
145
  if (result === undefined) {
116
146
  addReason(context, "verifier-result-missing", claim.claim_id, "Verifier has no recorded result.");
117
147
  return;
118
148
  }
119
149
  addEvidence(context, result.evidence_ids);
120
- if (!verifierResultIsCompatible(context, claim, contract, result)) {
150
+ if (!verifierResultIsCompatible(claim, contract, result, indexes)) {
121
151
  addReason(context, "verifier-result-incompatible", claim.claim_id, "Latest verifier result does not match current artifacts, owners, dimensions, authority, normalization, repeats, or contract.");
122
152
  return;
123
153
  }
@@ -132,23 +162,15 @@ const evaluateVerifierResult = (context, claim, contract) => {
132
162
  else if (result.status !== "pass")
133
163
  addReason(context, "verifier-unknown", claim.claim_id, `Latest compatible verifier result is ${result.status}.`);
134
164
  };
135
- const verifierResultIsCompatible = (context, claim, contract, result) => {
136
- const artifactDigests = new Set(context.coverage.artifacts.map(({ artifact_sha256: value }) => value));
137
- const ownerDigests = new Set(context.coverage.owners.flatMap(({ ownership }) => ownership.disposition === "implemented" ? [ownership.owner_sha256] : []));
138
- const surfaces = new Map(context.coverage.surfaces.map((surface) => [surface.surface_id, surface]));
139
- const artifacts = new Map(context.coverage.artifacts.map((artifact) => [
140
- artifact.artifact_id,
141
- artifact,
142
- ]));
165
+ const verifierResultIsCompatible = (claim, contract, result, indexes) => {
143
166
  const expectedArtifactDigests = claim.surface_ids.flatMap((surfaceId) => {
144
- const surface = surfaces.get(surfaceId);
145
- const artifact = surface === undefined ? undefined : artifacts.get(surface.artifact_id);
167
+ const surface = indexes.surfaces.get(surfaceId);
168
+ const artifact = surface === undefined
169
+ ? undefined
170
+ : indexes.artifacts.get(surface.artifact_id);
146
171
  return artifact === undefined ? [] : [artifact.artifact_sha256];
147
172
  });
148
- const expectedOwnerDigests = context.coverage.owners.flatMap(({ surface_id: surfaceId, ownership }) => claim.surface_ids.includes(surfaceId) &&
149
- ownership.disposition === "implemented"
150
- ? [ownership.owner_sha256]
151
- : []);
173
+ const expectedOwnerDigests = claim.surface_ids.flatMap((surfaceId) => (indexes.ownersBySurface.get(surfaceId) ?? []).flatMap(({ ownership }) => ownership.disposition === "implemented" ? [ownership.owner_sha256] : []));
152
174
  return (result.contract_sha256 === contract.contract_sha256 &&
153
175
  result.normalization_sha256 === contract.normalization_sha256 &&
154
176
  result.covered_claim_ids.includes(claim.claim_id) &&
@@ -156,9 +178,9 @@ const verifierResultIsCompatible = (context, claim, contract, result) => {
156
178
  claim.required_dimensions.every((item) => contract.dimensions.includes(item)) &&
157
179
  claim.required_dimensions.every((item) => result.covered_dimensions.includes(item)) &&
158
180
  result.covered_dimensions.every((item) => contract.dimensions.includes(item)) &&
159
- result.artifact_sha256s.every((item) => artifactDigests.has(item)) &&
181
+ result.artifact_sha256s.every((item) => indexes.artifactDigests.has(item)) &&
160
182
  expectedArtifactDigests.every((item) => result.artifact_sha256s.includes(item)) &&
161
- result.owner_sha256s.every((item) => ownerDigests.has(item)) &&
183
+ result.owner_sha256s.every((item) => indexes.ownerDigests.has(item)) &&
162
184
  expectedOwnerDigests.every((item) => result.owner_sha256s.includes(item)) &&
163
185
  result.repeats >= contract.minimum_repeats &&
164
186
  claim.required_authority === contract.authority);
@@ -0,0 +1,7 @@
1
+ import { z } from "zod";
2
+ import { reconstructionCoverageDataSchema } from "./reconstructionCoverage.js";
3
+ /** Named-boundary input for inline reconstruction coverage evaluation. */
4
+ export const reconstructionCoverageEvaluationInputSchema = z.strictObject({
5
+ coverage: reconstructionCoverageDataSchema,
6
+ boundary_id: z.string().min(1),
7
+ });
@@ -1,3 +1,4 @@
1
+ import { uniqueSorted } from "./canonicalOrdering.js";
1
2
  /** Select the latest revision of each residual unknown. */
2
3
  export const reconstructionUnknownHeads = (revisions) => {
3
4
  const heads = new Map();
@@ -87,4 +88,3 @@ const defaultProbe = (kind) => kind === "behavioral"
87
88
  operation: "inspect_artifact",
88
89
  rationale: "Capture complete artifact inventories under equal limits.",
89
90
  };
90
- const uniqueSorted = (values) => [...new Set(values)].sort((left, right) => left.localeCompare(right, "en"));
@@ -3,9 +3,11 @@ import canonicalize from "canonicalize";
3
3
  import { z } from "zod";
4
4
  import { artifactComparisonResultSchema } from "./artifactComparison.js";
5
5
  import { artifactInventoryResultSchema } from "./artifactGraph.js";
6
+ import { uniqueSorted } from "./canonicalOrdering.js";
6
7
  import { parseEvidence } from "./evidence.js";
7
8
  import { parseEvidenceBundle } from "./evidenceBundle.js";
8
9
  import { functionComparisonResultSchema } from "./functionComparison.js";
10
+ import { PROCESS_PROVIDER, isProcessEvidenceProvider, } from "./processEvidenceProvider.js";
9
11
  import { functionDossierSchema } from "./hopperValues.js";
10
12
  import { deriveProcessComparisonStatus, PROCESS_COMPARISON_DIMENSIONS, processCaptureComparisonSchema, processCaptureSchema, } from "./processCapture.js";
11
13
  import { reconstructionClaimResultSchema, reconstructionSpecificationSchema, reconstructionVerificationResultSchema, } from "./reconstructionVerificationSchemas.js";
@@ -17,8 +19,7 @@ const providers = {
17
19
  behavioral: {
18
20
  operation: "compare_process_captures",
19
21
  predicates: ["rea.process-comparison"],
20
- id: "rea-process",
21
- name: "REA deterministic process harness",
22
+ ...PROCESS_PROVIDER,
22
23
  },
23
24
  "structural-function": {
24
25
  operation: "compare_functions",
@@ -136,9 +137,11 @@ const validateComparisonIdentity = (claim, evidence) => {
136
137
  const expected = providers[claim.kind];
137
138
  if (evidence.operation !== expected.operation ||
138
139
  !acceptsPredicate(expected.predicates, evidence.predicate_type) ||
139
- evidence.provider.id !== expected.id ||
140
- evidence.provider.name !== expected.name ||
141
- evidence.provider.version !== (claim.kind === "behavioral" ? "3" : "1") ||
140
+ (claim.kind === "behavioral"
141
+ ? !isProcessEvidenceProvider(evidence.provider)
142
+ : evidence.provider.id !== expected.id ||
143
+ evidence.provider.name !== expected.name ||
144
+ evidence.provider.version !== "1") ||
142
145
  evidence.confidence !== "derived" ||
143
146
  evidence.authority !== "analyst-inference" ||
144
147
  evidence.subject !== null)
@@ -146,7 +149,10 @@ const validateComparisonIdentity = (claim, evidence) => {
146
149
  };
147
150
  const sourceSides = (claim, evidence) => {
148
151
  const parameters = evidence.parameters;
149
- if (claim.kind === "behavioral") {
152
+ let singularSides;
153
+ if (claim.kind === "behavioral" ||
154
+ (claim.kind === "structural-function" &&
155
+ ("left_evidence_id" in parameters || "right_evidence_id" in parameters))) {
150
156
  const parsed = z
151
157
  .object({
152
158
  left_evidence_id: evidenceIdSchema,
@@ -154,10 +160,13 @@ const sourceSides = (claim, evidence) => {
154
160
  })
155
161
  .passthrough()
156
162
  .parse(parameters);
157
- return {
163
+ singularSides = {
158
164
  left: [parsed.left_evidence_id],
159
165
  right: [parsed.right_evidence_id],
160
166
  };
167
+ if (claim.kind === "behavioral" ||
168
+ !("left_evidence_ids" in parameters || "right_evidence_ids" in parameters))
169
+ return singularSides;
161
170
  }
162
171
  const parsed = z
163
172
  .object({
@@ -166,6 +175,12 @@ const sourceSides = (claim, evidence) => {
166
175
  })
167
176
  .passthrough()
168
177
  .parse(parameters);
178
+ if (singularSides !== undefined &&
179
+ (parsed.left_evidence_ids.length !== 1 ||
180
+ parsed.right_evidence_ids.length !== 1 ||
181
+ parsed.left_evidence_ids[0] !== singularSides.left[0] ||
182
+ parsed.right_evidence_ids[0] !== singularSides.right[0]))
183
+ throw new TypeError("Function comparison source Evidence aliases disagree");
169
184
  return { left: parsed.left_evidence_ids, right: parsed.right_evidence_ids };
170
185
  };
171
186
  const observedStatus = (claim, evidence) => {
@@ -237,4 +252,3 @@ const digest = (value) => {
237
252
  const count = (items, status) => items.filter((item) => item.status === status).length;
238
253
  const sameSet = (left, right) => left.length === right.length &&
239
254
  uniqueSorted(left).every((id, index) => id === uniqueSorted(right)[index]);
240
- const uniqueSorted = (values) => [...new Set(values)].sort((left, right) => left.localeCompare(right, "en"));
@@ -101,7 +101,7 @@ const MANIFEST_FILENAMES = new Set([
101
101
  "pipfile.lock",
102
102
  "setup.cfg",
103
103
  "manifest.in",
104
- "CMakeLists.txt",
104
+ "cmakelists.txt",
105
105
  "meson.build",
106
106
  "configure",
107
107
  "configure.ac",
@@ -272,7 +272,8 @@ const filenameIsTest = (filename) => {
272
272
  return true;
273
273
  if (lower.endsWith("_test") || lower.endsWith("_spec"))
274
274
  return true;
275
- return false;
275
+ const stem = basenameParts(lower).base;
276
+ return stem.endsWith("_test") || stem.endsWith("_spec");
276
277
  };
277
278
  const filenameIsGenerated = (filename) => {
278
279
  const lower = filename.toLowerCase();
@@ -312,11 +313,9 @@ const isPathUnderAny = (path, names) => {
312
313
  /** Detect a source language from a POSIX path. */
313
314
  export const detectReferenceSourceLanguage = (path) => {
314
315
  const filename = posix.basename(path);
315
- if (filename === "Dockerfile" || filename.startsWith("Dockerfile."))
316
- return "Dockerfile";
317
- if (filename.toLowerCase().startsWith("dockerfile"))
318
- return "Dockerfile";
319
316
  const lower = filename.toLowerCase();
317
+ if (lower === "dockerfile" || lower.startsWith("dockerfile."))
318
+ return "Dockerfile";
320
319
  if (lower.endsWith(".d.ts"))
321
320
  return "TypeScript";
322
321
  if (lower.endsWith(".d.mts"))
@@ -1,7 +1,6 @@
1
- import { createHash } from "node:crypto";
2
1
  import { posix } from "node:path";
3
- import canonicalize from "canonicalize";
4
2
  import { z } from "zod";
3
+ import { canonicalDigest, canonicalJson } from "./comparisonSemantics.js";
5
4
  import { compareUnicodeCodePoints } from "./unicodeCodePointOrder.js";
6
5
  import { digestSchema } from "./../domain/digests.js";
7
6
  import { prefixedDigestSchema } from "./../domain/digests.js";
@@ -184,13 +183,6 @@ const historicalSourceManifestBaseSchema = z.strictObject({
184
183
  });
185
184
  /** Stable identity used to sort and deduplicate source parse failures. */
186
185
  export const historicalSourceParseFailureKey = (failure) => `${failure.path}\u0000${failure.parser}\u0000${failure.reason}`;
187
- const canonicalJson = (value) => {
188
- const serialized = canonicalize(value);
189
- if (serialized === undefined)
190
- throw new TypeError("RFC 8785 canonicalization rejected a graph value");
191
- return serialized;
192
- };
193
- const digestCanonical = (value) => createHash("sha256").update(canonicalJson(value)).digest("hex");
194
186
  const relationshipKey = (relationship) => `${relationship.from_path}\u0000${relationship.to}\u0000${relationship.kind}\u0000${relationship.resolution}\u0000${relationship.parse_state}`;
195
187
  const checkSortedUnique = (values, field, context) => {
196
188
  for (let index = 1; index < values.length; index += 1)
@@ -293,15 +285,15 @@ function checkGraphInvariants(graph, context) {
293
285
  checkSortedUnique(graph.relationships.map(relationshipKey), "relationships", context);
294
286
  checkSortedUnique(graph.parse_failures.map(historicalSourceParseFailureKey), "parse_failures", context);
295
287
  checkSortedUnique(graph.exclusions.map(({ path, reason }) => `${path}\u0000${reason}`), "exclusions", context);
296
- if (canonicalJson(graph.languages) !==
297
- canonicalJson(historicalSourceLanguages(graph.entries)))
288
+ if (canonicalJson(graph.languages, "Reference source graph") !==
289
+ canonicalJson(historicalSourceLanguages(graph.entries), "Reference source graph"))
298
290
  context.addIssue({
299
291
  code: "custom",
300
292
  message: "languages must be derived from file entries",
301
293
  path: ["languages"],
302
294
  });
303
- if (canonicalJson(graph.manifests) !==
304
- canonicalJson(historicalSourceManifests(graph.entries)))
295
+ if (canonicalJson(graph.manifests, "Reference source graph") !==
296
+ canonicalJson(historicalSourceManifests(graph.entries), "Reference source graph"))
305
297
  context.addIssue({
306
298
  code: "custom",
307
299
  message: "manifests must be derived from classified file entries",
@@ -340,7 +332,7 @@ const rootCommitment = (entries, exclusions) => ({
340
332
  }),
341
333
  exclusions,
342
334
  });
343
- const computeRootSha256 = (entries, exclusions) => digestCanonical(rootCommitment(entries, exclusions));
335
+ const computeRootSha256 = (entries, exclusions) => canonicalDigest(rootCommitment(entries, exclusions), "Reference source graph");
344
336
  /** Build and internally commit a normalized historical source graph. */
345
337
  export const createHistoricalSourceGraph = (input) => {
346
338
  const parsed = historicalSourceGraphInputSchema.parse(input);
@@ -352,7 +344,7 @@ export const createHistoricalSourceGraph = (input) => {
352
344
  /** Parse a graph and reject stale or caller-invented root commitments. */
353
345
  export const parseHistoricalSourceGraph = (input) => historicalSourceGraphSchema.parse(input);
354
346
  /** Compute a deterministic graph commitment containing no absolute root path. */
355
- export const computeHistoricalSourceGraphSha256 = (input) => digestCanonical(parseHistoricalSourceGraph(input));
347
+ export const computeHistoricalSourceGraphSha256 = (input) => canonicalDigest(parseHistoricalSourceGraph(input), "Reference source graph");
356
348
  /** Build a deterministic, relocation-independent manifest for a source graph. */
357
349
  export const createHistoricalSourceManifest = (input) => {
358
350
  const graph = parseHistoricalSourceGraph(input);
@@ -367,14 +359,14 @@ export const createHistoricalSourceManifest = (input) => {
367
359
  };
368
360
  return historicalSourceManifestBaseSchema.parse({
369
361
  ...semantic,
370
- manifest_id: `hsm_${digestCanonical(semantic)}`,
362
+ manifest_id: `hsm_${canonicalDigest(semantic, "Reference source graph")}`,
371
363
  });
372
364
  };
373
365
  /** Parse and verify a historical source manifest's semantic identifier. */
374
366
  export const parseHistoricalSourceManifest = (input) => {
375
367
  const manifest = historicalSourceManifestBaseSchema.parse(input);
376
368
  const { manifest_id: manifestId, ...semantic } = manifest;
377
- if (`hsm_${digestCanonical(semantic)}` !== manifestId)
369
+ if (`hsm_${canonicalDigest(semantic, "Reference source graph")}` !== manifestId)
378
370
  throw new TypeError("Historical source manifest identifier does not match");
379
371
  return manifest;
380
372
  };