rea-agents 4.0.0 → 4.1.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 (416) hide show
  1. package/README.md +93 -30
  2. package/bridge/ghidra/ReaGhidraBridge.java +358 -15
  3. package/bridge/ghidra/ReaGhidraExtensions.java +113 -0
  4. package/bridge/ghidra/ReaGhidraPrepareCom.java +32 -0
  5. package/dist/android/AndroidTargetSnapshot.js +34 -0
  6. package/dist/android/JadxAnalysis.js +191 -0
  7. package/dist/android/JadxConfiguration.js +41 -0
  8. package/dist/android/JadxMcpTransport.js +145 -0
  9. package/dist/android/JadxProtocol.js +101 -0
  10. package/dist/android/JadxProvider.js +170 -0
  11. package/dist/android/JadxRelease.js +19 -0
  12. package/dist/android/JadxSession.js +97 -0
  13. package/dist/application/AnalysisContextQueries.js +2 -1
  14. package/dist/application/AnalysisProviderEvaluation.js +5 -3
  15. package/dist/application/AnalysisProviderRegistry.js +2 -1
  16. package/dist/application/AnalysisSnapshotCache.js +4 -1
  17. package/dist/application/AnalysisSnapshotFiles.js +1 -1
  18. package/dist/application/AndroidAnalysisPort.js +1 -0
  19. package/dist/application/AndroidAnalysisService.js +37 -0
  20. package/dist/application/ArtifactExtraction.js +7 -4
  21. package/dist/application/ArtifactGraphConstruction.js +10 -17
  22. package/dist/application/ArtifactInventory/scanCanonical.js +8 -7
  23. package/dist/application/BinarySession.js +16 -3
  24. package/dist/application/BinarySessionExecution.js +4 -1
  25. package/dist/application/BinarySessionOpen.js +3 -2
  26. package/dist/application/BinarySessionRecords.js +9 -3
  27. package/dist/application/BinaryTargetResolver.js +25 -6
  28. package/dist/application/BrowserObservationService.js +2 -1
  29. package/dist/application/BrowserScenarioCaptureService.js +2 -1
  30. package/dist/application/BrowserScenarioEvidence.js +2 -2
  31. package/dist/application/CallPathTracing.js +2 -1
  32. package/dist/application/CapabilityInventory.js +18 -0
  33. package/dist/application/ClientConfigPath.js +3 -1
  34. package/dist/application/ClientConfigurationDocument.js +11 -1
  35. package/dist/application/ClientRegistrationStatus.js +8 -1
  36. package/dist/application/CompositeProvider.js +1 -1
  37. package/dist/application/DirectAnalysis.js +23 -7
  38. package/dist/application/DirectAnalysisStatus.js +3 -3
  39. package/dist/application/Doctor.js +48 -8
  40. package/dist/application/DoctorDiagnostics.js +7 -5
  41. package/dist/application/DoctorScope.js +1 -1
  42. package/dist/application/ElectronActiveEvidence.js +2 -2
  43. package/dist/application/ElectronActiveObservationService.js +2 -1
  44. package/dist/application/ElectronBoundaryAnalysis.js +1 -1
  45. package/dist/application/ElectronObservationService.js +2 -1
  46. package/dist/application/EnhancedLiteralTracing.js +2 -1
  47. package/dist/application/EnhancedToolTypes.js +2 -1
  48. package/dist/application/EnhancedTools.js +3 -1
  49. package/dist/application/EvidenceBundleCommands.js +2 -1
  50. package/dist/application/EvidenceBundleFiles.js +1 -1
  51. package/dist/application/EvidenceInputResolver.js +30 -0
  52. package/dist/application/EvidenceLedger.js +2 -1
  53. package/dist/application/FirmwareAnalysisPort.js +1 -0
  54. package/dist/application/FirmwareAnalysisService.js +35 -0
  55. package/dist/application/FunctionAnalysisEvidence.js +32 -0
  56. package/dist/application/InventoryProjectionEvidence.js +2 -1
  57. package/dist/application/JavaScriptApplicationService.js +50 -3
  58. package/dist/application/JavaScriptApplicationWorkflowService.js +2 -1
  59. package/dist/application/JavaScriptArtifactAnalysis.js +4 -2
  60. package/dist/application/JavaScriptArtifactFiles.js +4 -2
  61. package/dist/application/JavaScriptArtifactPathResolution.js +6 -2
  62. package/dist/application/JavaScriptJsonModules.js +3 -2
  63. package/dist/application/JavaScriptModuleRelationships.js +4 -2
  64. package/dist/application/JavaScriptRuntimeObservationService.js +2 -1
  65. package/dist/application/JavaScriptRuntimeReconciliationService.js +2 -1
  66. package/dist/application/JavaScriptSemanticGraphProjection.js +1 -1
  67. package/dist/application/JavaScriptSemanticTraceService.js +2 -1
  68. package/dist/application/JsonFiles.js +1 -1
  69. package/dist/application/LazyAnalysisProvider.js +3 -1
  70. package/dist/application/LinuxHopper.js +12 -4
  71. package/dist/application/MacHopper.js +20 -7
  72. package/dist/application/ManagedApplicationGraphService.js +2 -1
  73. package/dist/application/ManagedMemberComparisonService.js +3 -1
  74. package/dist/application/ManagedNativeVerificationService.js +2 -1
  75. package/dist/application/ManagedReconstructionService.js +2 -1
  76. package/dist/application/NativeCallRoutes.js +1 -1
  77. package/dist/application/NativeDispatchMetadataInspection.js +1 -1
  78. package/dist/application/NativeUiActionTrace.js +2 -1
  79. package/dist/application/NativeValueTrace.js +1 -1
  80. package/dist/application/ProcessCaptureError.js +1 -1
  81. package/dist/application/ProcessCaptureJournal.js +3 -1
  82. package/dist/application/ProcessCaptureLifecycle.js +6 -3
  83. package/dist/application/ProcessCli.js +9 -5
  84. package/dist/application/ProcessEvidence.js +2 -6
  85. package/dist/application/ProcessHarness.js +3 -2
  86. package/dist/application/ProcessNormalization.js +12 -5
  87. package/dist/application/ProcessSampling.js +3 -1
  88. package/dist/application/ReconstructionCoverageService.js +2 -1
  89. package/dist/application/ReconstructionObligationLedgerService.js +2 -1
  90. package/dist/application/ReferenceSourceImportEntries.js +2 -0
  91. package/dist/application/ReferenceSourceImportPolicy.js +4 -2
  92. package/dist/application/ReferenceSourceVcsAdapter.js +35 -4
  93. package/dist/application/SessionProviderRouter.js +4 -1
  94. package/dist/application/Setup.js +1 -128
  95. package/dist/application/SetupClientConfiguration.js +17 -6
  96. package/dist/application/SetupHost.js +111 -0
  97. package/dist/application/SetupRegistrationEnvironment.js +1 -2
  98. package/dist/application/SetupSkill.js +9 -3
  99. package/dist/application/SetupTypes.js +17 -0
  100. package/dist/application/StoreFileLock.js +7 -2
  101. package/dist/application/SupportedClients.js +8 -0
  102. package/dist/application/Uninstall.js +9 -4
  103. package/dist/application/UpdateRuntime.js +5 -2
  104. package/dist/application/WindowsCapabilities.js +7 -7
  105. package/dist/application/runtime.js +3 -1
  106. package/dist/artifacts/ArtifactProvider.js +3 -1
  107. package/dist/artifacts/DirectoryArtifactReader.js +2 -0
  108. package/dist/artifacts/NativeDmgArtifactReader.js +10 -3
  109. package/dist/artifacts/NibArchive.js +4 -2
  110. package/dist/artifacts/SafeOutputTree.js +26 -10
  111. package/dist/artifacts/ZipArtifactReader.js +1 -0
  112. package/dist/browser/BrowserProcessStartup.js +3 -1
  113. package/dist/browser/CdpAuthorizedMainFrame.js +1 -1
  114. package/dist/browser/CdpBrowserProvider.js +4 -1
  115. package/dist/browser/CdpCaptureDocuments.js +3 -1
  116. package/dist/browser/CdpCaptureEventHandlers.js +6 -2
  117. package/dist/browser/CdpCaptureStorageFingerprints.js +1 -1
  118. package/dist/browser/CdpCaptureValues.js +6 -2
  119. package/dist/browser/CdpConnection.js +8 -6
  120. package/dist/browser/CdpElectronInspection.js +3 -3
  121. package/dist/browser/CdpElectronProvider.js +4 -1
  122. package/dist/browser/CdpElectronScripts.js +2 -2
  123. package/dist/browser/CdpEndpoint.js +22 -10
  124. package/dist/browser/CdpObservationSession.js +2 -1
  125. package/dist/browser/CdpOptionalCommand.js +1 -1
  126. package/dist/browser/CdpPageCapture.js +2 -1
  127. package/dist/browser/CdpSafeMetadata.js +53 -8
  128. package/dist/browser/CdpScreenshot.js +1 -1
  129. package/dist/browser/CdpTargetSession.js +8 -5
  130. package/dist/browser/CdpWebMcpDiscovery.js +1 -1
  131. package/dist/browser/ElectronFileScope.js +9 -3
  132. package/dist/browser/JavaScriptRuntimeScope.js +3 -1
  133. package/dist/browser/PlaywrightBrowserScenarioProvider.js +3 -1
  134. package/dist/browser/PlaywrightElectronActiveActions.js +1 -1
  135. package/dist/browser/PlaywrightElectronActiveProvider.js +6 -2
  136. package/dist/browser/PlaywrightExecutionBoundary.js +1 -1
  137. package/dist/browser/PlaywrightScenarioArtifacts.js +10 -5
  138. package/dist/browser/PlaywrightScenarioBrowser.js +3 -1
  139. package/dist/browser/PlaywrightScenarioEvents.js +6 -2
  140. package/dist/browser/PlaywrightScenarioSession.js +5 -2
  141. package/dist/browser/V8InspectorEndpoint.js +2 -1
  142. package/dist/browser/V8InspectorProvider.js +6 -1
  143. package/dist/browser/WebSourceMapFetcher.js +24 -11
  144. package/dist/cli/androidCommands.js +81 -0
  145. package/dist/{cliApplicationCommands.js → cli/applicationCommands.js} +18 -16
  146. package/dist/{cliBrowserAdvancedCommands.js → cli/browserAdvancedCommands.js} +13 -16
  147. package/dist/{cliBrowserCommands.js → cli/browserCommands.js} +9 -9
  148. package/dist/cli/commandCancellation.js +24 -0
  149. package/dist/cli/coreAnalysisCommands.js +110 -17
  150. package/dist/{cliElectronCommands.js → cli/electronCommands.js} +14 -13
  151. package/dist/cli/firmwareCommands.js +75 -0
  152. package/dist/{cliSetup.js → cli/interactiveSetup.js} +1 -1
  153. package/dist/cli/javascriptApplicationAnalysis.js +1 -1
  154. package/dist/cli/managedCommands.js +1 -1
  155. package/dist/cli/managedProjectGraphCommand.js +1 -1
  156. package/dist/cli/options.js +7 -1
  157. package/dist/{cliProcessCommands.js → cli/processCommands.js} +3 -3
  158. package/dist/cli/referenceSourceImportStatus.js +10 -0
  159. package/dist/cli/setupCommands.js +4 -2
  160. package/dist/cli/utilityCommands.js +3 -2
  161. package/dist/cli.js +10 -15
  162. package/dist/cliBrowserContext.js +1 -1
  163. package/dist/cliBrowserScenarioCommands.js +2 -1
  164. package/dist/cliCommandNames.js +11 -2
  165. package/dist/cliEvidenceCommands.js +2 -1
  166. package/dist/cliJavaScriptRuntimeCommands.js +2 -1
  167. package/dist/cliJsonInput.js +26 -11
  168. package/dist/cliLogging.js +2 -1
  169. package/dist/cliOutput.js +15 -16
  170. package/dist/config/environment.js +11 -1
  171. package/dist/config/parseConfig.js +7 -1
  172. package/dist/config/parsers.js +1 -1
  173. package/dist/contracts/androidToolContracts.js +77 -0
  174. package/dist/contracts/applicationToolContracts.js +32 -5
  175. package/dist/contracts/applicationWorkflowInputContracts.js +13 -13
  176. package/dist/contracts/artifactComparisonExample.js +7 -14
  177. package/dist/contracts/enhancedToolContracts.js +31 -0
  178. package/dist/contracts/errorSchemas.js +4 -2
  179. package/dist/contracts/evidenceInputContracts.js +13 -0
  180. package/dist/contracts/firmwareToolContracts.js +38 -0
  181. package/dist/contracts/officialToolContracts.js +66 -0
  182. package/dist/contracts/promptContracts.js +1 -1
  183. package/dist/contracts/sessionLifecycleInputs.js +4 -0
  184. package/dist/contracts/sessionToolContracts.js +43 -0
  185. package/dist/contracts/sessionToolSchemas.js +1 -1
  186. package/dist/contracts/toolContractExamples.js +5 -0
  187. package/dist/contracts/toolContractTypes.js +2 -0
  188. package/dist/contracts/toolContracts.js +7 -130
  189. package/dist/contracts/toolEffects.js +43 -0
  190. package/dist/contracts/toolOutputSchemaGroups.js +4 -0
  191. package/dist/contracts/toolOutputSchemaPrimitives.js +1 -0
  192. package/dist/doctorRuntime.js +5 -1
  193. package/dist/domain/analysisErrorBase.js +33 -0
  194. package/dist/domain/analysisErrorCore.js +60 -0
  195. package/dist/domain/analysisErrorPresentation.js +22 -2
  196. package/dist/domain/analysisErrorProjection.js +24 -3
  197. package/dist/domain/analysisSnapshot.js +1 -0
  198. package/dist/domain/androidAnalysis.js +141 -0
  199. package/dist/domain/appleAssetCatalog.js +1 -1
  200. package/dist/domain/artifactGraph.js +1 -0
  201. package/dist/domain/artifactInspection.js +19 -17
  202. package/dist/domain/artifactInventoryEvidence.js +20 -25
  203. package/dist/domain/artifactOperationError.js +16 -0
  204. package/dist/domain/browserObservation.js +12 -4
  205. package/dist/domain/browserObservationError.js +23 -0
  206. package/dist/domain/browserScenario.js +1 -1
  207. package/dist/domain/browserScenarioCapture.js +1 -1
  208. package/dist/domain/browserScenarioDiff.js +1 -1
  209. package/dist/domain/browserScenarioNormalization.js +6 -11
  210. package/dist/domain/browserScenarioValues.js +3 -1
  211. package/dist/domain/callPath.js +47 -7
  212. package/dist/domain/canonicalDigest.js +65 -0
  213. package/dist/domain/canonicalOrdering.js +11 -0
  214. package/dist/domain/changedBehavior.js +8 -7
  215. package/dist/domain/comparisonSemantics.js +2 -4
  216. package/dist/domain/configurationErrors.js +25 -0
  217. package/dist/domain/dosCom.js +8 -0
  218. package/dist/domain/electronActiveObservation.js +3 -1
  219. package/dist/domain/electronStaticAnalysisBrowser.js +13 -23
  220. package/dist/domain/electronStaticAnalysisNative.js +2 -1
  221. package/dist/domain/electronStaticAnalysisValues.js +23 -3
  222. package/dist/domain/evidence.js +3 -11
  223. package/dist/domain/evidenceErrors.js +30 -0
  224. package/dist/domain/firmwareAnalysis.js +121 -0
  225. package/dist/domain/functionComparison.js +4 -2
  226. package/dist/domain/functionComparisonDimensions.js +6 -4
  227. package/dist/domain/functionComparisonNormalization.js +8 -1
  228. package/dist/domain/functionComparisonResults.js +1 -4
  229. package/dist/domain/hopperErrors.js +78 -0
  230. package/dist/domain/hopperValues.js +2 -1
  231. package/dist/domain/interfaceBuilderGraph.js +3 -1
  232. package/dist/domain/javascriptApplicationChangeGraph.js +2 -2
  233. package/dist/domain/javascriptApplicationGraph.js +13 -22
  234. package/dist/domain/javascriptApplicationVersionComparison.js +3 -11
  235. package/dist/domain/javascriptApplicationVersionItems.js +3 -3
  236. package/dist/domain/javascriptApplicationVersionKeys.js +1 -1
  237. package/dist/domain/javascriptAstFingerprint.js +1 -1
  238. package/dist/domain/javascriptExportShapeComparison.js +1 -2
  239. package/dist/domain/javascriptExportShapeSelection.js +1 -1
  240. package/dist/domain/javascriptExportShapeVariants.js +7 -3
  241. package/dist/domain/javascriptFeatureSeed.js +29 -9
  242. package/dist/domain/javascriptFeatureTrace.js +9 -13
  243. package/dist/domain/javascriptFeatureTraversal.js +2 -1
  244. package/dist/domain/javascriptNativeHandoff.js +2 -1
  245. package/dist/domain/javascriptRuntimeLoadState.js +2 -2
  246. package/dist/domain/javascriptRuntimeReconciliationActive.js +3 -10
  247. package/dist/domain/javascriptRuntimeReconciliationGraph.js +2 -2
  248. package/dist/domain/javascriptRuntimeReconciliationMatching.js +4 -3
  249. package/dist/domain/javascriptRuntimeReconciliationParsing.js +8 -14
  250. package/dist/domain/javascriptRuntimeReconciliationResult.js +4 -4
  251. package/dist/domain/javascriptRuntimeReconciliationSchemas.js +5 -2
  252. package/dist/domain/javascriptRuntimeStaticCandidates.js +8 -4
  253. package/dist/domain/javascriptSemanticAnalysis.js +40 -3
  254. package/dist/domain/javascriptSemanticCallResolution.js +2 -1
  255. package/dist/domain/javascriptSemanticChildProcesses.js +2 -1
  256. package/dist/domain/javascriptSemanticDataEffects.js +2 -1
  257. package/dist/domain/javascriptSemanticFingerprints.js +1 -1
  258. package/dist/domain/javascriptSemanticGraph.js +23 -28
  259. package/dist/domain/javascriptSemanticPrimitives.js +9 -2
  260. package/dist/domain/javascriptSemanticProjection.js +2 -1
  261. package/dist/domain/javascriptSemanticPromises.js +2 -1
  262. package/dist/domain/javascriptSemanticProvenance.js +1 -1
  263. package/dist/domain/javascriptSemanticQuery.js +7 -8
  264. package/dist/domain/javascriptSemanticQueryAssessment.js +1 -2
  265. package/dist/domain/javascriptSemanticQueryIdentity.js +1 -2
  266. package/dist/domain/javascriptSemanticReturns.js +2 -1
  267. package/dist/domain/javascriptSemanticValues.js +50 -16
  268. package/dist/domain/javascriptSourceParser.js +4 -2
  269. package/dist/domain/javascriptStaticAnalysis.js +1 -1
  270. package/dist/domain/javascriptStaticAnalysisBundler.js +2 -1
  271. package/dist/domain/javascriptStaticAnalysisCalls.js +14 -6
  272. package/dist/domain/javascriptStaticAnalysisHelpers.js +31 -4
  273. package/dist/domain/jsonShape.js +6 -2
  274. package/dist/domain/managedMemberComparison.js +1 -0
  275. package/dist/domain/managedMemberComparisonItems.js +2 -0
  276. package/dist/domain/managedNativeVerificationMatch.js +5 -3
  277. package/dist/domain/nativeDataType.js +2 -0
  278. package/dist/domain/nativeFunctionAnnotations.js +43 -0
  279. package/dist/domain/nativeLoadImage.js +95 -0
  280. package/dist/domain/nativeMetadataRecovery.js +55 -0
  281. package/dist/domain/processCapture.js +0 -1
  282. package/dist/domain/processEvidenceProvider.js +11 -0
  283. package/dist/domain/processTraceComparison.js +1 -1
  284. package/dist/domain/providerAdapterError.js +17 -0
  285. package/dist/domain/providerCleanupError.js +1 -1
  286. package/dist/domain/providerSelectionError.js +44 -0
  287. package/dist/domain/reconstructionUnknowns.js +1 -1
  288. package/dist/domain/reconstructionVerification.js +22 -8
  289. package/dist/domain/referenceSourceClassification.js +5 -6
  290. package/dist/domain/referenceSourceGraph.js +9 -17
  291. package/dist/domain/referenceSourceImportParsing.js +38 -23
  292. package/dist/domain/runtimeIdentification.js +1 -1
  293. package/dist/domain/runtimeVersion.js +4 -7
  294. package/dist/domain/safeJson.js +13 -0
  295. package/dist/domain/sourceToBundleComparison.js +5 -7
  296. package/dist/domain/sourceToBundleSignals.js +6 -6
  297. package/dist/domain/staticRuntimeCorrelation.js +9 -7
  298. package/dist/domain/unknownRegistryError.js +10 -0
  299. package/dist/domain/webBundleAnalyzerAst.js +22 -5
  300. package/dist/domain/webBundleAnalyzerInspection.js +20 -14
  301. package/dist/dotnet/ManagedMemberRows.js +1 -1
  302. package/dist/dotnet/ManagedMetadataHeaps.js +3 -2
  303. package/dist/dotnet/ManagedMetadataInventoryRows.js +4 -2
  304. package/dist/dotnet/ManagedMethodBodyReader.js +8 -1
  305. package/dist/dotnet/ManagedStaticProvider.js +3 -1
  306. package/dist/firmware/FirmwareCommand.js +163 -0
  307. package/dist/firmware/FirmwareFiles.js +190 -0
  308. package/dist/firmware/FirmwareProvider.js +258 -0
  309. package/dist/firmware/FirmwarePublication.js +84 -0
  310. package/dist/firmware/FirmwareRelease.js +32 -0
  311. package/dist/firmware/FirmwareReports.js +223 -0
  312. package/dist/generatedMcpToolCatalog.js +1 -1
  313. package/dist/generatedPackageMetadata.js +5 -5
  314. package/dist/ghidra/GhidraAnalysisProfile.js +37 -8
  315. package/dist/ghidra/GhidraClient.js +52 -6
  316. package/dist/ghidra/GhidraDiagnostics.js +3 -0
  317. package/dist/ghidra/GhidraDoctor.js +38 -14
  318. package/dist/ghidra/GhidraFunctionValues.js +10 -4
  319. package/dist/ghidra/GhidraInstallation.js +10 -4
  320. package/dist/ghidra/GhidraInventoryValues.js +39 -2
  321. package/dist/ghidra/GhidraLauncher.js +91 -26
  322. package/dist/ghidra/GhidraLoadImageValues.js +199 -0
  323. package/dist/ghidra/GhidraProvider.js +129 -13
  324. package/dist/ghidra/GhidraProviderCapabilities.js +52 -15
  325. package/dist/ghidra/GhidraRequestQueue.js +2 -2
  326. package/dist/ghidra/GhidraSessionError.js +31 -4
  327. package/dist/ghidra/GhidraSessionValues.js +10 -7
  328. package/dist/ghidra/GhidraTargetSnapshot.js +16 -2
  329. package/dist/ghidra/GhidraTransport.js +12 -0
  330. package/dist/ghidra/extensions/GhidraExtensionFailures.js +20 -0
  331. package/dist/ghidra/extensions/GhidraExtensions.js +170 -0
  332. package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +21 -0
  333. package/dist/ghidra/extensions/nativeaot/NativeAotReport.js +84 -0
  334. package/dist/hopper/BridgeLauncher.js +4 -2
  335. package/dist/hopper/HopperAnalysisProfile.js +7 -2
  336. package/dist/hopper/HopperCleanup.js +55 -9
  337. package/dist/hopper/HopperClient.js +14 -4
  338. package/dist/hopper/HopperProcessDiagnostic.js +1 -1
  339. package/dist/hopper/HopperProvider.js +8 -4
  340. package/dist/hopper/HopperRequestQueue.js +7 -3
  341. package/dist/hopper/HopperSessionValues.js +1 -1
  342. package/dist/hopper/HopperSocketConnection.js +1 -1
  343. package/dist/hopper/HopperTargetLease.js +23 -15
  344. package/dist/hopper/LinuxPrivateDisplayDiagnostic.js +7 -8
  345. package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -2
  346. package/dist/hopper/protocol.js +8 -8
  347. package/dist/ida/IdaConfiguration.js +56 -0
  348. package/dist/ida/IdaDoctor.js +53 -0
  349. package/dist/ida/IdaInput.js +62 -0
  350. package/dist/ida/IdaMcpConnection.js +111 -0
  351. package/dist/ida/IdaOperationRunner.js +299 -0
  352. package/dist/ida/IdaProtocolValues.js +178 -0
  353. package/dist/ida/IdaProvider.js +126 -0
  354. package/dist/ida/IdaProviderCapabilities.js +60 -0
  355. package/dist/ida/IdaSessionClient.js +306 -0
  356. package/dist/ida/IdaWorkspace.js +54 -0
  357. package/dist/main/shutdown.js +21 -1
  358. package/dist/main/startup.js +1 -1
  359. package/dist/main/transport.js +8 -4
  360. package/dist/main.js +5 -2
  361. package/dist/native/AppleDispatchMetadata.js +31 -10
  362. package/dist/native/NativeMacOSProvider.js +87 -15
  363. package/dist/native/NativeMachoInspection.js +42 -12
  364. package/dist/native/NativeUiHelperRuntime.js +7 -1
  365. package/dist/native/NativeUiObservation.js +6 -2
  366. package/dist/native/parsers/demangle.js +1 -1
  367. package/dist/native/parsers/dyldInfo.js +3 -3
  368. package/dist/native/parsers/otool.js +4 -1
  369. package/dist/native/parsers/plist.js +11 -3
  370. package/dist/process/PrivateRuntimeRoot.js +13 -3
  371. package/dist/process/ProcessOwnership.js +5 -73
  372. package/dist/process/ProcessOwnershipObservation.js +62 -2
  373. package/dist/process/ProcessOwnershipProcessTree.js +13 -0
  374. package/dist/process/ProviderProcess.js +24 -7
  375. package/dist/process/ProviderRunLineage.js +1 -1
  376. package/dist/process/WindowsAuthority.js +20 -1
  377. package/dist/reference/ReferenceSourceReaderEntries.js +5 -1
  378. package/dist/reference/ReferenceSourceReaderFile.js +1 -0
  379. package/dist/server/createServer.js +25 -2
  380. package/dist/server/mcpProgress.js +2 -1
  381. package/dist/server/promptCompletion.js +3 -3
  382. package/dist/server/registerAndroidTools.js +30 -0
  383. package/dist/server/registerApplicationTools/compareExportShapes.js +5 -1
  384. package/dist/server/registerApplicationTools/compareSourceToBundle.js +7 -2
  385. package/dist/server/registerApplicationTools/compareVersions.js +5 -1
  386. package/dist/server/registerApplicationTools/traceFeature.js +7 -2
  387. package/dist/server/registerApplicationTools/traceSemantics.js +7 -2
  388. package/dist/server/registerEnhancedTools.js +28 -1
  389. package/dist/server/registerFirmwareTools.js +22 -0
  390. package/dist/server/registerFunctionComparisonTool.js +1 -1
  391. package/dist/server/registerInvestigationTools/helpers.js +2 -1
  392. package/dist/server/registerManagedTools.js +1 -1
  393. package/dist/server/registerManagedWorkflowTools/evidence.js +1 -1
  394. package/dist/server/registerOfficialTools.js +4 -1
  395. package/dist/server/registerProcessComparisonTool.js +5 -2
  396. package/dist/server/registerSessionTools.js +3 -1
  397. package/dist/server/runDerivedOperation.js +1 -1
  398. package/dist/server/sessionAvailabilityPolicy.js +3 -0
  399. package/dist/server/sessionEvidence.js +1 -1
  400. package/dist/server/toolResult.js +2 -1
  401. package/dist/windows/WindowsNativeLoader.js +108 -0
  402. package/dist/windows/WindowsOwnedProcess.js +168 -0
  403. package/dist/windows/WindowsPrivateRuntime.js +137 -0
  404. package/install.sh +4 -6
  405. package/native/windows/README.md +102 -0
  406. package/native/windows/build/manifest.json +9 -0
  407. package/native/windows/build/rea-windows-x64.node +0 -0
  408. package/package.json +38 -24
  409. package/scripts/rea.mjs +1 -1
  410. package/scripts/verify-windows-native-artifact.mjs +39 -0
  411. package/skills/reverse-engineer-anything/SKILL.md +92 -24
  412. package/skills/reverse-engineer-anything/references/android-applications.md +31 -0
  413. package/skills/reverse-engineer-anything/references/javascript-applications.md +19 -2
  414. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +52 -4
  415. package/dist/browser/CdpCanonicalJsonDigest.js +0 -9
  416. package/dist/domain/errors.js +0 -324
@@ -4,10 +4,50 @@ import { resolve } from "node:path";
4
4
  import { runDirectAnalysis } from "../application/DirectAnalysis.js";
5
5
  import { CLI_COMMANDS } from "../cliCommandNames.js";
6
6
  import { logCliCommand } from "../cliLogging.js";
7
- import { directAnalysisOptions, providerSelectionOption } from "./options.js";
7
+ import { directAnalysisOptions, formatSelectionOption, providerSelectionOption, } from "./options.js";
8
8
  import { runCliJavaScriptApplicationAnalysis } from "./javascriptApplicationAnalysis.js";
9
9
  export const registerCoreAnalysisCommands = (cli, logger) => {
10
10
  registerCoreCommands(cli, logger);
11
+ registerAnnotationCommand(cli, logger);
12
+ cli.command(CLI_COMMANDS.inspectNativeLoadImage, {
13
+ description: "Verify loaded native bytes, source mappings, relocations and entry",
14
+ args: z.object({ path: z.string().describe("Local executable path") }),
15
+ options: z.object({
16
+ "target-format": formatSelectionOption,
17
+ provider: providerSelectionOption,
18
+ }),
19
+ run: ({ args, options }) => logCliCommand(logger, CLI_COMMANDS.inspectNativeLoadImage, () => runDirectAnalysis(args.path, "inspect_native_load_image", {}, directAnalysisOptions(logger, undefined, options.provider, options["target-format"]))),
20
+ });
21
+ cli.command(CLI_COMMANDS.readBytes, {
22
+ description: "Read exact provider memory bytes at one analysis address",
23
+ args: z.object({
24
+ path: z.string().describe("Local executable path"),
25
+ address: z.string().describe("Exact provider memory address"),
26
+ }),
27
+ options: z.object({
28
+ length: z
29
+ .number()
30
+ .int()
31
+ .min(1)
32
+ .default(256)
33
+ .describe("Requested byte count"),
34
+ "target-format": formatSelectionOption,
35
+ provider: providerSelectionOption,
36
+ }),
37
+ run: ({ args, options }) => logCliCommand(logger, CLI_COMMANDS.readBytes, () => runDirectAnalysis(args.path, "read_bytes", { address: args.address, length: options.length }, directAnalysisOptions(logger, undefined, options.provider, options["target-format"]))),
38
+ });
39
+ cli.command(CLI_COMMANDS.addressToFileOffset, {
40
+ description: "Resolve an analysis address to its original file byte offset",
41
+ args: z.object({
42
+ path: z.string().describe("Local executable path"),
43
+ address: z.string().describe("Exact provider memory address"),
44
+ }),
45
+ options: z.object({
46
+ "target-format": formatSelectionOption,
47
+ provider: providerSelectionOption,
48
+ }),
49
+ run: ({ args, options }) => logCliCommand(logger, CLI_COMMANDS.addressToFileOffset, () => runDirectAnalysis(args.path, "address_to_file_offset", { address: args.address }, directAnalysisOptions(logger, undefined, options.provider, options["target-format"]))),
50
+ });
11
51
  cli.command(CLI_COMMANDS.traceNativeValues, {
12
52
  description: "Trace bounded native def-use and call dependencies",
13
53
  args: z.object({
@@ -65,6 +105,7 @@ export const registerCoreAnalysisCommands = (cli, logger) => {
65
105
  .max(5000)
66
106
  .default(1000)
67
107
  .describe("Maximum nodes on this page"),
108
+ "target-format": formatSelectionOption,
68
109
  provider: providerSelectionOption,
69
110
  }),
70
111
  alias: {
@@ -83,7 +124,7 @@ export const registerCoreAnalysisCommands = (cli, logger) => {
83
124
  max_edges: options.maxEdges,
84
125
  offset: options.offset,
85
126
  limit: options.limit,
86
- }, directAnalysisOptions(logger, undefined, options.provider))),
127
+ }, directAnalysisOptions(logger, undefined, options.provider, options["target-format"]))),
87
128
  });
88
129
  cli.command(CLI_COMMANDS.inspectNativeDataType, {
89
130
  description: "Inspect one recovered database type or typed data object",
@@ -93,6 +134,7 @@ export const registerCoreAnalysisCommands = (cli, logger) => {
93
134
  options: z.object({
94
135
  type: z.string().optional().describe("Exact database type category path"),
95
136
  address: z.string().describe("Exact native address").optional(),
137
+ "target-format": formatSelectionOption,
96
138
  provider: providerSelectionOption,
97
139
  }),
98
140
  run: ({ args, options }) => logCliCommand(logger, CLI_COMMANDS.inspectNativeDataType, () => runDirectAnalysis(args.path, "inspect_native_data_type", {
@@ -100,7 +142,7 @@ export const registerCoreAnalysisCommands = (cli, logger) => {
100
142
  ...(options.address === undefined
101
143
  ? {}
102
144
  : { address: options.address }),
103
- }, directAnalysisOptions(logger, undefined, options.provider))),
145
+ }, directAnalysisOptions(logger, undefined, options.provider, options["target-format"]))),
104
146
  });
105
147
  for (const [command, operation] of [
106
148
  [CLI_COMMANDS.inspectNativeInstruction, "inspect_native_instruction"],
@@ -114,8 +156,11 @@ export const registerCoreAnalysisCommands = (cli, logger) => {
114
156
  path: z.string().describe("Local native executable or app path"),
115
157
  address: z.string().describe("Exact native address"),
116
158
  }),
117
- options: z.object({ provider: providerSelectionOption }),
118
- run: ({ args, options }) => logCliCommand(logger, command, () => runDirectAnalysis(args.path, operation, { address: args.address }, directAnalysisOptions(logger, undefined, options.provider))),
159
+ options: z.object({
160
+ "target-format": formatSelectionOption,
161
+ provider: providerSelectionOption,
162
+ }),
163
+ run: ({ args, options }) => logCliCommand(logger, command, () => runDirectAnalysis(args.path, operation, { address: args.address }, directAnalysisOptions(logger, undefined, options.provider, options["target-format"]))),
119
164
  });
120
165
  }
121
166
  registerFunctionCommand(cli, logger);
@@ -146,10 +191,11 @@ const registerNativeDispatchMetadataCommand = (cli, logger) => {
146
191
  .min(1)
147
192
  .optional()
148
193
  .describe("Load or update the local analysis snapshot"),
194
+ "target-format": formatSelectionOption,
149
195
  provider: providerSelectionOption,
150
196
  }),
151
197
  alias: { maxRecords: "max-records" },
152
- run: async ({ args, options }) => logCliCommand(logger, "inspect-native-dispatch-metadata", () => runDirectAnalysis(args.path, "inspect_native_dispatch_metadata", { max_records: options.maxRecords }, directAnalysisOptions(logger, options.snapshot, options.provider))),
198
+ run: async ({ args, options }) => logCliCommand(logger, "inspect-native-dispatch-metadata", () => runDirectAnalysis(args.path, "inspect_native_dispatch_metadata", { max_records: options.maxRecords }, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
153
199
  });
154
200
  };
155
201
  const registerNativeUiActionCommand = (cli, logger) => {
@@ -184,6 +230,7 @@ const registerNativeUiActionCommand = (cli, logger) => {
184
230
  .max(5_000)
185
231
  .default(500)
186
232
  .describe("Maximum returned graph edges"),
233
+ "target-format": formatSelectionOption,
187
234
  provider: providerSelectionOption,
188
235
  }),
189
236
  alias: {
@@ -196,7 +243,7 @@ const registerNativeUiActionCommand = (cli, logger) => {
196
243
  max_depth: options.maxDepth,
197
244
  max_nodes: options.maxNodes,
198
245
  max_edges: options.maxEdges,
199
- }, directAnalysisOptions(logger, undefined, options.provider))),
246
+ }, directAnalysisOptions(logger, undefined, options.provider, options["target-format"]))),
200
247
  });
201
248
  };
202
249
  const registerCoreCommands = (cli, logger) => {
@@ -206,6 +253,7 @@ const registerCoreCommands = (cli, logger) => {
206
253
  .min(1)
207
254
  .optional()
208
255
  .describe("Load and update a local analysis snapshot"),
256
+ "target-format": formatSelectionOption,
209
257
  provider: providerSelectionOption,
210
258
  });
211
259
  cli.command(CLI_COMMANDS.analyze, {
@@ -222,7 +270,7 @@ const registerCoreCommands = (cli, logger) => {
222
270
  path: z.string().describe("App, program, or analysis database path"),
223
271
  }),
224
272
  options: overviewOptions,
225
- run: ({ args, options }) => logCliCommand(logger, "inspect", () => runDirectAnalysis(args.path, "binary_overview", {}, directAnalysisOptions(logger, options.snapshot, options.provider))),
273
+ run: ({ args, options }) => logCliCommand(logger, "inspect", () => runDirectAnalysis(args.path, "binary_overview", {}, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
226
274
  });
227
275
  cli.command(CLI_COMMANDS.decompile, {
228
276
  description: "Read one part of an app as code",
@@ -236,19 +284,21 @@ const registerCoreCommands = (cli, logger) => {
236
284
  .min(1)
237
285
  .optional()
238
286
  .describe("Load and update a local analysis snapshot"),
287
+ "target-format": formatSelectionOption,
239
288
  provider: providerSelectionOption,
240
289
  }),
241
- run: ({ args, options }) => logCliCommand(logger, "decompile", () => runDirectAnalysis(args.path, "procedure_pseudo_code", { procedure: args.address }, directAnalysisOptions(logger, options.snapshot, options.provider))),
290
+ run: ({ args, options }) => logCliCommand(logger, "decompile", () => runDirectAnalysis(args.path, "procedure_pseudo_code", { procedure: args.address }, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
242
291
  });
243
292
  };
244
293
  const runRoutedOverview = async (path, options, logger) => {
245
294
  if (options.provider === undefined &&
246
295
  options.snapshot === undefined &&
296
+ options["target-format"] === undefined &&
247
297
  (await isJavaScriptApplicationPath(path)))
248
298
  return runCliJavaScriptApplicationAnalysis({
249
299
  input_path: resolve(path),
250
300
  });
251
- return runDirectAnalysis(path, "binary_overview", {}, directAnalysisOptions(logger, options.snapshot, options.provider));
301
+ return runDirectAnalysis(path, "binary_overview", {}, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]));
252
302
  };
253
303
  const isJavaScriptApplicationPath = async (path) => {
254
304
  const lower = path.toLowerCase();
@@ -259,7 +309,10 @@ const isJavaScriptApplicationPath = async (path) => {
259
309
  try {
260
310
  return (await stat(path)).isDirectory();
261
311
  }
262
- catch {
312
+ catch (cause) {
313
+ // A missing or unreadable path is not a JavaScript application directory;
314
+ // the caller falls through to direct binary analysis instead.
315
+ void cause;
263
316
  return false;
264
317
  }
265
318
  };
@@ -276,9 +329,10 @@ const registerXrefsCommand = (cli, logger) => {
276
329
  .min(1)
277
330
  .optional()
278
331
  .describe("Load and update a local analysis snapshot"),
332
+ "target-format": formatSelectionOption,
279
333
  provider: providerSelectionOption,
280
334
  }),
281
- run: ({ args, options }) => logCliCommand(logger, "xrefs", () => runDirectAnalysis(args.path, "xrefs", { address: args.address }, directAnalysisOptions(logger, options.snapshot, options.provider))),
335
+ run: ({ args, options }) => logCliCommand(logger, "xrefs", () => runDirectAnalysis(args.path, "xrefs", { address: args.address }, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
282
336
  });
283
337
  };
284
338
  const registerTraceCommand = (cli, logger) => {
@@ -298,6 +352,7 @@ const registerTraceCommand = (cli, logger) => {
298
352
  .min(1)
299
353
  .optional()
300
354
  .describe("Load and update a local analysis snapshot"),
355
+ "target-format": formatSelectionOption,
301
356
  provider: providerSelectionOption,
302
357
  }),
303
358
  alias: {
@@ -306,7 +361,7 @@ const registerTraceCommand = (cli, logger) => {
306
361
  run: ({ args, options }) => logCliCommand(logger, "trace", () => runDirectAnalysis(args.path, "trace_feature", {
307
362
  query: args.query,
308
363
  case_sensitive: options.caseSensitive,
309
- }, directAnalysisOptions(logger, options.snapshot, options.provider))),
364
+ }, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
310
365
  });
311
366
  };
312
367
  const registerFunctionCommand = (cli, logger) => {
@@ -322,9 +377,10 @@ const registerFunctionCommand = (cli, logger) => {
322
377
  .min(1)
323
378
  .optional()
324
379
  .describe("Load and update a local analysis snapshot"),
380
+ "target-format": formatSelectionOption,
325
381
  provider: providerSelectionOption,
326
382
  }),
327
- run: ({ args, options }) => logCliCommand(logger, "function", () => runDirectAnalysis(args.path, "analyze_function", { procedure: args.address }, directAnalysisOptions(logger, options.snapshot, options.provider))),
383
+ run: ({ args, options }) => logCliCommand(logger, "function", () => runDirectAnalysis(args.path, "analyze_function", { procedure: args.address }, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
328
384
  });
329
385
  };
330
386
  const registerNativeApiCommand = (cli, logger) => {
@@ -340,9 +396,10 @@ const registerNativeApiCommand = (cli, logger) => {
340
396
  .min(1)
341
397
  .optional()
342
398
  .describe("Load and update a local analysis snapshot"),
399
+ "target-format": formatSelectionOption,
343
400
  provider: providerSelectionOption,
344
401
  }),
345
- run: ({ args, options }) => logCliCommand(logger, "inspect-native-api", () => runDirectAnalysis(args.path, "inspect_native_api", { procedure: args.address }, directAnalysisOptions(logger, options.snapshot, options.provider))),
402
+ run: ({ args, options }) => logCliCommand(logger, "inspect-native-api", () => runDirectAnalysis(args.path, "inspect_native_api", { procedure: args.address }, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
346
403
  });
347
404
  };
348
405
  const registerInstructionsCommand = (cli, logger) => {
@@ -358,11 +415,12 @@ const registerInstructionsCommand = (cli, logger) => {
358
415
  .min(1)
359
416
  .optional()
360
417
  .describe("Load and update a local analysis snapshot"),
418
+ "target-format": formatSelectionOption,
361
419
  provider: providerSelectionOption,
362
420
  }),
363
421
  run: ({ args, options }) => logCliCommand(logger, CLI_COMMANDS.instructions, () => runDirectAnalysis(args.path, "read_function_instructions", {
364
422
  procedure: args.address,
365
- }, directAnalysisOptions(logger, options.snapshot, options.provider))),
423
+ }, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
366
424
  });
367
425
  };
368
426
  const registerSearchCommand = (cli, logger) => {
@@ -390,6 +448,7 @@ const registerSearchCommand = (cli, logger) => {
390
448
  .min(1)
391
449
  .optional()
392
450
  .describe("Load and update a local analysis snapshot"),
451
+ "target-format": formatSelectionOption,
393
452
  provider: providerSelectionOption,
394
453
  }),
395
454
  alias: { caseSensitive: "case-sensitive" },
@@ -397,6 +456,40 @@ const registerSearchCommand = (cli, logger) => {
397
456
  pattern: args.pattern,
398
457
  mode: options.mode,
399
458
  case_sensitive: options.caseSensitive,
400
- }, directAnalysisOptions(logger, options.snapshot, options.provider))),
459
+ }, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
460
+ });
461
+ };
462
+ const registerAnnotationCommand = (cli, logger) => {
463
+ cli.command(CLI_COMMANDS.annotateNativeFunction, {
464
+ description: "Edit function annotations and return refreshed analysis",
465
+ args: z.object({
466
+ path: z.string().describe("Local executable path"),
467
+ procedure: z
468
+ .string()
469
+ .describe("Exact function entry address or unique name"),
470
+ }),
471
+ options: z.object({
472
+ name: z.string().min(1).optional().describe("Analyst function name"),
473
+ comment: z
474
+ .string()
475
+ .optional()
476
+ .describe("Regular entry comment; empty text clears it"),
477
+ "inline-comment": z
478
+ .string()
479
+ .optional()
480
+ .describe("Inline entry comment; empty text clears it"),
481
+ "target-format": formatSelectionOption,
482
+ provider: providerSelectionOption,
483
+ }),
484
+ run: ({ args, options }) => logCliCommand(logger, CLI_COMMANDS.annotateNativeFunction, () => runDirectAnalysis(args.path, "annotate_native_function", {
485
+ procedure: args.procedure,
486
+ ...(options.name === undefined ? {} : { name: options.name }),
487
+ ...(options.comment === undefined
488
+ ? {}
489
+ : { comment: options.comment }),
490
+ ...(options["inline-comment"] === undefined
491
+ ? {}
492
+ : { inline_comment: options["inline-comment"] }),
493
+ }, directAnalysisOptions(logger, undefined, options.provider, options["target-format"]))),
401
494
  });
402
495
  };
@@ -1,17 +1,18 @@
1
1
  import { Cli, z } from "incur";
2
- import { inspectElectronPage, listElectronTargets, } from "./application/ElectronObservationService.js";
3
- import { captureElectronScenario } from "./application/ElectronActiveObservationService.js";
4
- import { reconcileJavaScriptRuntimeEvidence } from "./application/JavaScriptRuntimeReconciliationService.js";
5
- import { CdpElectronProvider } from "./browser/CdpElectronProvider.js";
6
- import { PlaywrightElectronActiveProvider } from "./browser/PlaywrightElectronActiveProvider.js";
7
- import { logCliCommand } from "./cliLogging.js";
8
- import { inspectElectronPageInputSchema, listElectronTargetsInputSchema, } from "./domain/electronObservation.js";
9
- import { electronActiveObservationInputSchema } from "./domain/electronActiveObservation.js";
10
- import { AnalysisInputError, projectAnalysisError } from "./domain/errors.js";
11
- import { CLI_COMMANDS } from "./cliCommandNames.js";
12
- import { parseCliJsonInput } from "./cliJsonInput.js";
13
- import { electronPageInspectionOptions, javascriptApplicationOptions, } from "./cliObservationOptions.js";
14
- import { runCliJavaScriptApplicationAnalysis } from "./cli/javascriptApplicationAnalysis.js";
2
+ import { inspectElectronPage, listElectronTargets, } from "../application/ElectronObservationService.js";
3
+ import { captureElectronScenario } from "../application/ElectronActiveObservationService.js";
4
+ import { reconcileJavaScriptRuntimeEvidence } from "../application/JavaScriptRuntimeReconciliationService.js";
5
+ import { CdpElectronProvider } from "../browser/CdpElectronProvider.js";
6
+ import { PlaywrightElectronActiveProvider } from "../browser/PlaywrightElectronActiveProvider.js";
7
+ import { logCliCommand } from "../cliLogging.js";
8
+ import { inspectElectronPageInputSchema, listElectronTargetsInputSchema, } from "../domain/electronObservation.js";
9
+ import { electronActiveObservationInputSchema } from "../domain/electronActiveObservation.js";
10
+ import { AnalysisInputError } from "../domain/analysisErrorCore.js";
11
+ import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
12
+ import { CLI_COMMANDS } from "../cliCommandNames.js";
13
+ import { parseCliJsonInput } from "../cliJsonInput.js";
14
+ import { electronPageInspectionOptions, javascriptApplicationOptions, } from "../cliObservationOptions.js";
15
+ import { runCliJavaScriptApplicationAnalysis } from "./javascriptApplicationAnalysis.js";
15
16
  /** Register CLI equivalents of the Electron MCP tools. */
16
17
  export const registerElectronCommands = (cli, logger) => {
17
18
  registerElectronObservationCommands(cli, logger);
@@ -0,0 +1,75 @@
1
+ import { z } from "incur";
2
+ import { FirmwareAnalysisService } from "../application/FirmwareAnalysisService.js";
3
+ import { FirmwareProvider } from "../firmware/FirmwareProvider.js";
4
+ import { CLI_COMMANDS } from "../cliCommandNames.js";
5
+ import { logCliCommand } from "../cliLogging.js";
6
+ import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
7
+ import { withCommandCancellation } from "./commandCancellation.js";
8
+ /** One-shot firmware CLI commands backed by the same workflows as MCP. */
9
+ export const registerFirmwareCommands = (cli, logger, environment) => {
10
+ const service = new FirmwareAnalysisService(new FirmwareProvider(environment));
11
+ const execute = (name, operation, input) => withCommandCancellation((signal) => logCliCommand(logger, name, async () => {
12
+ const result = await service.execute(operation, input, { signal });
13
+ return result.ok ? result.value : projectAnalysisError(result.error);
14
+ }));
15
+ const path = z.string().describe("Local firmware path; never executed");
16
+ cli.command(CLI_COMMANDS.inspectFirmwareRegions, {
17
+ description: "Inspect firmware signature candidates without extracting them",
18
+ args: z.object({ path }),
19
+ run: ({ args }) => execute(CLI_COMMANDS.inspectFirmwareRegions, "inspect_firmware_regions", args),
20
+ });
21
+ cli.command(CLI_COMMANDS.extractFirmware, {
22
+ description: "Extract selected firmware bytes and return verified files and provenance",
23
+ args: z.object({
24
+ path,
25
+ outputDirectory: z
26
+ .string()
27
+ .describe("Absolute absent output directory; parent must exist"),
28
+ }),
29
+ options: z.object({
30
+ offset: z
31
+ .number()
32
+ .int()
33
+ .nonnegative()
34
+ .optional()
35
+ .describe("Selected byte offset; requires length"),
36
+ length: z
37
+ .number()
38
+ .int()
39
+ .positive()
40
+ .optional()
41
+ .describe("Selected byte length; requires offset"),
42
+ maxDepth: z
43
+ .number()
44
+ .int()
45
+ .optional()
46
+ .describe("Extraction depth, 1–10; default 3"),
47
+ maxOutputBytes: z
48
+ .number()
49
+ .int()
50
+ .optional()
51
+ .describe("Staging byte budget; default 256 MiB, maximum 512 MiB"),
52
+ maxOutputFiles: z
53
+ .number()
54
+ .int()
55
+ .optional()
56
+ .describe("Staging entry budget; default 10000"),
57
+ }),
58
+ run: ({ args, options }) => execute(CLI_COMMANDS.extractFirmware, "extract_firmware", {
59
+ path: args.path,
60
+ output_directory: args.outputDirectory,
61
+ ...(options.offset === undefined && options.length === undefined
62
+ ? {}
63
+ : { range: { offset: options.offset, length: options.length } }),
64
+ ...(options.maxDepth === undefined
65
+ ? {}
66
+ : { max_depth: options.maxDepth }),
67
+ ...(options.maxOutputBytes === undefined
68
+ ? {}
69
+ : { max_output_bytes: options.maxOutputBytes }),
70
+ ...(options.maxOutputFiles === undefined
71
+ ? {}
72
+ : { max_output_files: options.maxOutputFiles }),
73
+ }),
74
+ });
75
+ };
@@ -1,5 +1,5 @@
1
1
  import { cancel, confirm, intro, isCancel, multiselect, outro, } from "@clack/prompts";
2
- import { SUPPORTED_CLIENT_DEFINITIONS } from "./application/SupportedClients.js";
2
+ import { SUPPORTED_CLIENT_DEFINITIONS } from "../application/SupportedClients.js";
3
3
  const clientDisplayNames = new Map(SUPPORTED_CLIENT_DEFINITIONS.map(({ name, displayName }) => [
4
4
  name,
5
5
  displayName,
@@ -1,5 +1,5 @@
1
1
  import { analyzeJavaScriptApplication } from "../application/JavaScriptApplicationService.js";
2
- import { projectAnalysisError } from "../domain/errors.js";
2
+ import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
3
3
  /** Execute the shared one-shot CLI boundary for static JavaScript analysis. */
4
4
  export const runCliJavaScriptApplicationAnalysis = async (input) => {
5
5
  const result = await analyzeJavaScriptApplication(input);
@@ -4,7 +4,7 @@ import { verifyManagedNativeBoundariesEvidence } from "../application/ManagedNat
4
4
  import { importManagedReconstructionEvidence } from "../application/ManagedReconstructionService.js";
5
5
  import { runProviderAnalysis } from "../application/DirectAnalysis.js";
6
6
  import { parseCliJsonInput } from "../cliJsonInput.js";
7
- import { projectAnalysisError } from "../domain/errors.js";
7
+ import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
8
8
  import { CLI_COMMANDS } from "../cliCommandNames.js";
9
9
  import { logCliCommand } from "../cliLogging.js";
10
10
  import { registerProjectManagedApplicationGraph } from "./managedProjectGraphCommand.js";
@@ -3,7 +3,7 @@ import { projectManagedApplicationGraphEvidence } from "../application/ManagedAp
3
3
  import { CLI_COMMANDS } from "../cliCommandNames.js";
4
4
  import { parseCliJsonInput } from "../cliJsonInput.js";
5
5
  import { logCliCommand } from "../cliLogging.js";
6
- import { projectAnalysisError } from "../domain/errors.js";
6
+ import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
7
7
  /** Register managed static-Evidence application graph projection. */
8
8
  export const registerProjectManagedApplicationGraph = (cli, logger) => {
9
9
  cli.command(CLI_COMMANDS.projectManagedApplicationGraph, {
@@ -1,9 +1,15 @@
1
+ import { executableFormatHintSchema, } from "../domain/dosCom.js";
1
2
  import { analysisProviderSelectorSchema } from "../contracts/providerSelection.js";
2
3
  export const providerSelectionOption = analysisProviderSelectorSchema
3
4
  .optional()
4
5
  .describe("Bind deep analysis to a provider ID or use deterministic auto selection");
5
- export const directAnalysisOptions = (logger, snapshotPath, providerId) => ({
6
+ /** Explicit interpretation for headerless native executable formats. */
7
+ export const formatSelectionOption = executableFormatHintSchema
8
+ .optional()
9
+ .describe("Explicit headerless DOS COM interpretation");
10
+ export const directAnalysisOptions = (logger, snapshotPath, providerId, formatHint) => ({
6
11
  logger,
7
12
  snapshotPath,
13
+ ...(formatHint === undefined ? {} : { formatHint }),
8
14
  ...(providerId === undefined ? {} : { providerId }),
9
15
  });
@@ -1,7 +1,7 @@
1
1
  import { Cli, z } from "incur";
2
- import { captureProcessScenarioFile, compareProcessEvidenceFiles, isProcessCliFailure, } from "./application/ProcessCli.js";
3
- import { logCliCommand } from "./cliLogging.js";
4
- import { CLI_COMMANDS } from "./cliCommandNames.js";
2
+ import { captureProcessScenarioFile, compareProcessEvidenceFiles, isProcessCliFailure, } from "../application/ProcessCli.js";
3
+ import { logCliCommand } from "../cliLogging.js";
4
+ import { CLI_COMMANDS } from "../cliCommandNames.js";
5
5
  /** Register direct process capture and comparison commands. */
6
6
  export const registerProcessCommands = (cli, logger, environment = process.env) => {
7
7
  cli.command(CLI_COMMANDS.captureProcess, {
@@ -0,0 +1,10 @@
1
+ import { z } from "zod";
2
+ import { isCliOperationFailure } from "../cliLogging.js";
3
+ const referenceSourceImportFailureSchema = z.strictObject({
4
+ error: z.literal("Import failed"),
5
+ category: z.enum(["cancelled", "invalid_input", "execution_failure"]),
6
+ message: z.string().min(1),
7
+ });
8
+ /** Identify the historical-source import command's failed operation outputs. */
9
+ export const isReferenceSourceImportCliFailure = (value) => referenceSourceImportFailureSchema.safeParse(value).success ||
10
+ isCliOperationFailure(value);
@@ -1,10 +1,12 @@
1
1
  import { z } from "incur";
2
2
  import { DOCTOR_PROVIDER_IDS, runDoctor, } from "../application/Doctor.js";
3
- import { runSetup, isSetupFailure, systemSetupHost, } from "../application/Setup.js";
3
+ import { isSetupFailure, } from "../application/SetupTypes.js";
4
+ import { runSetup } from "../application/Setup.js";
5
+ import { systemSetupHost } from "../application/SetupHost.js";
4
6
  import { isUninstallFailure, runUninstall } from "../application/Uninstall.js";
5
7
  import { isUpdateFailure, runUpdate } from "../application/Update.js";
6
8
  import { systemUpdateHost } from "../application/UpdateRuntime.js";
7
- import { confirmInteractiveSetup, renderInteractiveSetupResult, renderSetupProgress, } from "../cliSetup.js";
9
+ import { confirmInteractiveSetup, renderInteractiveSetupResult, renderSetupProgress, } from "./interactiveSetup.js";
8
10
  import { PRODUCT_IDENTITY } from "../identity.js";
9
11
  import { logCliCommand } from "../cliLogging.js";
10
12
  import { createSystemDoctorHost } from "../doctorRuntime.js";
@@ -4,10 +4,11 @@ import { runCapabilityStatus, runProviderAnalysis, runProviderStatus, } from "..
4
4
  import { importReferenceSource } from "../application/ReferenceSourceImport.js";
5
5
  import { projectReferenceSourceImportError } from "../application/ReferenceSourceImportTypes.js";
6
6
  import { parseConfig } from "../config.js";
7
- import { projectAnalysisError } from "../domain/errors.js";
7
+ import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
8
8
  import { PRODUCT_IDENTITY } from "../identity.js";
9
9
  import { logCliCommand } from "../cliLogging.js";
10
10
  import { CLI_COMMANDS } from "../cliCommandNames.js";
11
+ import { isReferenceSourceImportCliFailure } from "./referenceSourceImportStatus.js";
11
12
  export const registerUtilityCommands = (cli, logger, environment = process.env) => {
12
13
  registerCapabilityCommands(cli, logger);
13
14
  registerNativeCommands(cli, logger);
@@ -148,6 +149,6 @@ const registerReferenceSourceCommand = (cli, logger, environment = process.env)
148
149
  error: "Import failed",
149
150
  ...projectReferenceSourceImportError(imported.error),
150
151
  };
151
- }),
152
+ }, isReferenceSourceImportCliFailure),
152
153
  });
153
154
  };
package/dist/cli.js CHANGED
@@ -1,5 +1,4 @@
1
1
  import { Cli } from "incur";
2
- import { fileURLToPath } from "node:url";
3
2
  import { createLogger, parseLogLevel } from "./logger.js";
4
3
  import { PRODUCT_IDENTITY } from "./identity.js";
5
4
  import { registerSetupCommands } from "./cli/setupCommands.js";
@@ -7,14 +6,16 @@ import { registerCoreAnalysisCommands } from "./cli/coreAnalysisCommands.js";
7
6
  import { registerUtilityCommands } from "./cli/utilityCommands.js";
8
7
  import { registerArtifactCommands } from "./cli/artifactCommands.js";
9
8
  import { registerManagedCommands } from "./cli/managedCommands.js";
9
+ import { registerFirmwareCommands } from "./cli/firmwareCommands.js";
10
+ import { registerAndroidCommands } from "./cli/androidCommands.js";
10
11
  import { registerEvidenceCommands } from "./cliEvidenceCommands.js";
11
- import { registerProcessCommands } from "./cliProcessCommands.js";
12
- import { registerBrowserCommands } from "./cliBrowserCommands.js";
13
- import { registerAdvancedBrowserCommands } from "./cliBrowserAdvancedCommands.js";
12
+ import { registerProcessCommands } from "./cli/processCommands.js";
13
+ import { registerBrowserCommands } from "./cli/browserCommands.js";
14
+ import { registerAdvancedBrowserCommands } from "./cli/browserAdvancedCommands.js";
14
15
  import { registerBrowserScenarioCommands } from "./cliBrowserScenarioCommands.js";
15
- import { registerElectronCommands } from "./cliElectronCommands.js";
16
+ import { registerElectronCommands } from "./cli/electronCommands.js";
16
17
  import { registerJavaScriptRuntimeObservationCommands } from "./cliJavaScriptRuntimeCommands.js";
17
- import { registerApplicationCommands } from "./cliApplicationCommands.js";
18
+ import { registerApplicationCommands } from "./cli/applicationCommands.js";
18
19
  /**
19
20
  * Build the one-shot Incur CLI without starting Hopper at import time.
20
21
  * Analysis commands acquire and close their own sessions; bare `mcp` and
@@ -31,21 +32,15 @@ export const createCli = (environment = process.env) => {
31
32
  command: PRODUCT_IDENTITY.mcpCommand,
32
33
  instructions: "Ask what software, artifact, protocol, or behavior the user wants to understand, then choose the available investigation capabilities that can produce evidence.",
33
34
  },
34
- sync: {
35
- cwd: fileURLToPath(new URL("..", import.meta.url)),
36
- include: ["skills/*"],
37
- suggestions: [
38
- "understand how a software feature works",
39
- "investigate an artifact or observed behavior",
40
- "check my REA setup",
41
- ],
42
- },
35
+ sync: false,
43
36
  });
44
37
  registerSetupCommands(cli, logger);
45
38
  registerCoreAnalysisCommands(cli, logger);
46
39
  registerUtilityCommands(cli, logger, environment);
47
40
  registerArtifactCommands(cli, logger);
48
41
  registerManagedCommands(cli, logger);
42
+ registerAndroidCommands(cli, logger, environment);
43
+ registerFirmwareCommands(cli, logger, environment);
49
44
  registerEvidenceCommands(cli, logger);
50
45
  registerProcessCommands(cli, logger, environment);
51
46
  registerBrowserCommands(cli, logger);
@@ -1,5 +1,5 @@
1
1
  import { CdpBrowserProvider } from "./browser/CdpBrowserProvider.js";
2
- import { projectAnalysisError } from "./domain/errors.js";
2
+ import { projectAnalysisError } from "./domain/analysisErrorProjection.js";
3
3
  /** Build the passive browser provider; scope is supplied on each request. */
4
4
  export const browserContext = () => ({ provider: new CdpBrowserProvider() });
5
5
  /** Project a browser operation failure consistently across CLI command groups. */
@@ -5,7 +5,8 @@ import { PlaywrightBrowserScenarioProvider } from "./browser/PlaywrightBrowserSc
5
5
  import { CLI_COMMANDS } from "./cliCommandNames.js";
6
6
  import { parseCliJsonInput } from "./cliJsonInput.js";
7
7
  import { logCliCommand } from "./cliLogging.js";
8
- import { AnalysisInputError, projectAnalysisError } from "./domain/errors.js";
8
+ import { AnalysisInputError } from "./domain/analysisErrorCore.js";
9
+ import { projectAnalysisError } from "./domain/analysisErrorProjection.js";
9
10
  import { browserScenarioSchema } from "./domain/browserScenario.js";
10
11
  const OPERATION = "capture_browser_scenario";
11
12
  /** Register the one-shot controlled browser scenario command. */
@@ -14,6 +14,7 @@ export const CLI_COMMANDS = Object.freeze({
14
14
  capabilities: "capabilities",
15
15
  providers: "providers",
16
16
  function: "function",
17
+ annotateNativeFunction: "annotate-native-function",
17
18
  inspectNativeApi: "inspect-native-api",
18
19
  instructions: "instructions",
19
20
  search: "search",
@@ -23,11 +24,21 @@ export const CLI_COMMANDS = Object.freeze({
23
24
  decodeInterfaceBuilder: "decode-interface-builder",
24
25
  inspectKeyedArchive: "inspect-keyed-archive",
25
26
  inspectNativeDataType: "inspect-native-data-type",
27
+ inspectNativeLoadImage: "inspect-native-load-image",
28
+ readBytes: "read-bytes",
29
+ addressToFileOffset: "address-to-file-offset",
26
30
  traceNativeValues: "trace-native-values",
27
31
  inspectNativeInstruction: "inspect-native-instruction",
28
32
  resolveNativeCallTargets: "resolve-native-call-targets",
29
33
  inspectAssetCatalog: "inspect-asset-catalog",
30
34
  inspectManagedArtifact: "inspect-managed-artifact",
35
+ inspectFirmwareRegions: "inspect-firmware-regions",
36
+ extractFirmware: "extract-firmware",
37
+ inspectAndroidPackage: "inspect-android-package",
38
+ searchAndroidClasses: "search-android-classes",
39
+ inspectAndroidClass: "inspect-android-class",
40
+ inspectAndroidMethod: "inspect-android-method",
41
+ traceAndroidReferences: "trace-android-references",
31
42
  inspectManagedMembers: "inspect-managed-members",
32
43
  inspectManagedNativeBoundaries: "inspect-managed-native-boundaries",
33
44
  compareManagedMembers: "compare-managed-members",
@@ -108,8 +119,6 @@ export const MCP_TOOLS_WITHOUT_DEDICATED_CLI = Object.freeze([
108
119
  "procedure_callees",
109
120
  "procedure_callers",
110
121
  "procedure_info",
111
- "read_bytes",
112
- "address_to_file_offset",
113
122
  "procedure_references",
114
123
  "resolve_containing_procedure",
115
124
  "set_address_name",