rea-agents 6.0.0 → 6.2.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 (611) hide show
  1. package/README.md +26 -18
  2. package/bridge/android/ReaJadxBridge.java +14 -5
  3. package/bridge/ghidra/ReaGhidraBridge.java +205 -51
  4. package/bridge/hopper_bridge.py +314 -127
  5. package/bridge/mitmproxy/capture.py +0 -2
  6. package/bridge/native/rea_lldb_tracer.py +630 -94
  7. package/bridge/process/ProcessRunTokenReader.swift +39 -5
  8. package/bridge/pwntools/recorded_crash_impl.py +4 -0
  9. package/dist/android/JadxConfiguration.js +274 -31
  10. package/dist/android/JadxMcpTransport.js +18 -2
  11. package/dist/android/JadxProtocol.js +6 -0
  12. package/dist/android/JadxProvider.js +76 -37
  13. package/dist/android/JadxSession.js +23 -4
  14. package/dist/application/AnalysisContextQueries.js +8 -35
  15. package/dist/application/AnalysisDocument.js +32 -0
  16. package/dist/application/AppBundleExecutable.js +67 -21
  17. package/dist/application/BinaryTargetResolver.js +5 -3
  18. package/dist/application/BrowserEvidence.js +3 -8
  19. package/dist/application/BrowserScenarioEvidence.js +2 -18
  20. package/dist/application/CallPathTracing.js +19 -3
  21. package/dist/application/CapabilityInventory.js +48 -11
  22. package/dist/application/ClientConfigurationDocument.js +917 -8
  23. package/dist/application/ClientRegistrationIdentity.js +26 -5
  24. package/dist/application/ClientRegistrationStatus.js +29 -14
  25. package/dist/application/DirectAnalysis.js +56 -51
  26. package/dist/application/DirectAnalysisCleanup.js +72 -0
  27. package/dist/application/DirectAnalysisStatus.js +4 -5
  28. package/dist/application/Doctor.js +19 -21
  29. package/dist/application/DoctorDiagnostics.js +1 -2
  30. package/dist/application/DoctorScope.js +25 -13
  31. package/dist/application/EnhancedLiteralTracing.js +22 -25
  32. package/dist/application/EnhancedTools.js +64 -17
  33. package/dist/application/EvidenceBundleFiles.js +30 -13
  34. package/dist/application/FunctionAnalysisEvidence.js +2 -3
  35. package/dist/application/InventoryProjectionEvidence.js +4 -3
  36. package/dist/application/InvestigationProviders.js +11 -2
  37. package/dist/application/JsonFiles.js +83 -28
  38. package/dist/application/LinuxHopper.js +9 -6
  39. package/dist/application/MacHopper.js +15 -18
  40. package/dist/application/ProcedureAddressResolution.js +11 -0
  41. package/dist/application/RealHopperAssertions.js +0 -11
  42. package/dist/application/ReconstructionCoverageService.js +7 -4
  43. package/dist/application/ReconstructionObligationCandidates.js +1 -1
  44. package/dist/application/ReconstructionObligationLedgerService.js +4 -3
  45. package/dist/application/ReferenceSourceImportEntries.js +1 -1
  46. package/dist/application/Setup.js +21 -17
  47. package/dist/application/SetupClientConfiguration.js +10 -15
  48. package/dist/application/SetupHost.js +21 -29
  49. package/dist/application/SetupPlan.js +11 -9
  50. package/dist/application/SupportedClients.js +34 -1
  51. package/dist/application/Uninstall.js +82 -29
  52. package/dist/application/Update.js +18 -3
  53. package/dist/application/UpdateMaintenance.js +7 -5
  54. package/dist/application/UpdateRuntime.js +57 -36
  55. package/dist/application/WebModuleTraceService.js +4 -2
  56. package/dist/application/WebNetworkCaptureService.js +4 -2
  57. package/dist/application/WebRuntimeService.js +5 -3
  58. package/dist/application/WebScriptExportService.js +32 -6
  59. package/dist/application/WebSourceLocationService.js +4 -2
  60. package/dist/application/WorkflowEvidence.js +105 -0
  61. package/dist/application/XrefsAddressResolution.js +45 -0
  62. package/dist/application/analysisView/AnalysisViewService.js +76 -0
  63. package/dist/application/binary/AnalysisClientCleanup.js +30 -5
  64. package/dist/application/binary/AnalysisProviderEvaluation.js +22 -7
  65. package/dist/application/binary/AnalysisProviderRegistry.js +4 -6
  66. package/dist/application/binary/AnalysisSnapshotCache.js +13 -14
  67. package/dist/application/binary/BinarySession.js +161 -93
  68. package/dist/application/binary/BinarySessionComposition.js +1 -3
  69. package/dist/application/binary/BinarySessionExecution.js +3 -5
  70. package/dist/application/binary/BinarySessionOpen.js +4 -4
  71. package/dist/application/binary/BinarySessionRecords.js +26 -4
  72. package/dist/application/binary/BinarySessionStatus.js +18 -7
  73. package/dist/application/binary/CompositeProvider.js +16 -17
  74. package/dist/application/binary/LazyAnalysisProvider.js +8 -5
  75. package/dist/application/binary/SessionProviderRouter.js +27 -135
  76. package/dist/application/binaryDiagnostics/BinaryLayoutService.js +4 -2
  77. package/dist/application/binaryDiagnostics/RecordedCrashService.js +4 -2
  78. package/dist/application/evm/EvmInterfaceService.js +4 -2
  79. package/dist/application/homebrew.js +48 -0
  80. package/dist/application/investigation/EvidenceLedger.js +21 -7
  81. package/dist/application/investigation/InvestigationRecords.js +8 -0
  82. package/dist/application/javascript/ElectronActiveEvidence.js +9 -13
  83. package/dist/application/javascript/JavaScriptAnalysisControl.js +34 -0
  84. package/dist/application/javascript/JavaScriptApplicationEvidence.js +21 -4
  85. package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +19 -2
  86. package/dist/application/javascript/JavaScriptApplicationService.js +27 -15
  87. package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +5 -5
  88. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +10 -7
  89. package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +44 -10
  90. package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +11 -3
  91. package/dist/application/javascript/JavaScriptArtifactGraphContext.js +9 -0
  92. package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +8 -5
  93. package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +12 -3
  94. package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +0 -1
  95. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +49 -19
  96. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +56 -8
  97. package/dist/application/javascript/JavaScriptModuleRelationships.js +38 -9
  98. package/dist/application/javascript/JavaScriptRecoveryService.js +4 -2
  99. package/dist/application/javascript/JavaScriptRuntimeObservationService.js +6 -4
  100. package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +3 -3
  101. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +2 -3
  102. package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +63 -61
  103. package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +1 -2
  104. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +2 -3
  105. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +1 -5
  106. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +75 -46
  107. package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +2 -3
  108. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +64 -19
  109. package/dist/application/managed/ManagedApplicationGraphService.js +4 -3
  110. package/dist/application/managed/ManagedMemberComparisonService.js +9 -5
  111. package/dist/application/managed/ManagedNativeVerificationService.js +6 -4
  112. package/dist/application/managed/ManagedReconstructionService.js +4 -3
  113. package/dist/application/process/ProcessCli.js +25 -17
  114. package/dist/application/process/ProcessEvidence.js +4 -4
  115. package/dist/application/workflowInputError.js +18 -0
  116. package/dist/artifacts/ArtifactProvider.js +48 -13
  117. package/dist/artifacts/ArtifactReader.js +31 -0
  118. package/dist/artifacts/DirectoryArtifactReader.js +2 -1
  119. package/dist/artifacts/MachOSliceArtifactReader.js +106 -15
  120. package/dist/artifacts/NativeDmgArtifactReader.js +73 -21
  121. package/dist/artifacts/SafeOutputTree.js +16 -2
  122. package/dist/artifacts/ZipArtifactReader.js +11 -4
  123. package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +26 -5
  124. package/dist/artifacts/apple/DylibResolutionReader.js +17 -7
  125. package/dist/artifacts/apple/InterfaceBuilderAnalysis.js +176 -56
  126. package/dist/artifacts/apple/InterfaceBuilderDecodeBudget.js +195 -0
  127. package/dist/artifacts/apple/KeyedArchiveReader.js +55 -23
  128. package/dist/artifacts/apple/MachoLoadCommandReader.js +92 -31
  129. package/dist/artifacts/apple/NibArchive.js +81 -14
  130. package/dist/artifacts/apple/NibViewHierarchy.js +10 -3
  131. package/dist/artifacts/apple/PlistNumberLiterals.js +164 -0
  132. package/dist/artifacts/extraction/ArtifactExtraction.js +78 -21
  133. package/dist/artifacts/inventory/ArtifactGraphConstruction.js +79 -68
  134. package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
  135. package/dist/artifacts/inventory/reader.js +3 -3
  136. package/dist/artifacts/inventory/scanCanonical.js +59 -38
  137. package/dist/artifacts/inventory/scanReader.js +5 -9
  138. package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +6 -2
  139. package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
  140. package/dist/browser/CdpBrowserProvider.js +2 -3
  141. package/dist/browser/CdpCaptureCompleteness.js +2 -0
  142. package/dist/browser/CdpCaptureEventHandlers.js +78 -15
  143. package/dist/browser/CdpCaptureEventTypes.js +5 -1
  144. package/dist/browser/CdpCaptureEvents.js +25 -1
  145. package/dist/browser/CdpCaptureValues.js +20 -0
  146. package/dist/browser/CdpConnection.js +30 -11
  147. package/dist/browser/CdpElectronProvider.js +0 -2
  148. package/dist/browser/CdpElectronScriptEvents.js +2 -8
  149. package/dist/browser/CdpElectronScripts.js +2 -3
  150. package/dist/browser/CdpOptionalCommand.js +2 -3
  151. package/dist/browser/CdpPageCapture.js +23 -1
  152. package/dist/browser/CdpPageCaptureScripts.js +2 -3
  153. package/dist/browser/CdpSafeMetadata.js +10 -10
  154. package/dist/browser/PlaywrightBrowserScenarioProvider.js +59 -44
  155. package/dist/browser/PlaywrightElectronActiveActions.js +34 -79
  156. package/dist/browser/PlaywrightElectronActiveProjection.js +141 -0
  157. package/dist/browser/PlaywrightElectronActiveProvider.js +133 -130
  158. package/dist/browser/PlaywrightScenarioArtifacts.js +1 -1
  159. package/dist/browser/PlaywrightScenarioBrowser.js +139 -39
  160. package/dist/browser/PlaywrightScenarioEvents.js +1 -1
  161. package/dist/browser/PlaywrightScenarioSession.js +39 -22
  162. package/dist/browser/WebSourceMapFetcher.js +426 -72
  163. package/dist/browser/assets/LocalWebScriptArtifacts.js +2 -2
  164. package/dist/browser/assets/ScriptCaptureAdapters.js +1 -1
  165. package/dist/browser/history/CaptureFailures.js +41 -1
  166. package/dist/browser/history/CaptureRelease.js +5 -0
  167. package/dist/browser/history/HarCaptureAdapter.js +3 -3
  168. package/dist/browser/history/HarJson.js +3 -2
  169. package/dist/browser/history/HistoricalCaptureDecoder.js +4 -2
  170. package/dist/browser/history/MitmproxyCaptureAdapter.js +4 -2
  171. package/dist/catalogIdentity.js +0 -1
  172. package/dist/cli/analysisSelector.js +23 -0
  173. package/dist/cli/analysisViewCommands.js +36 -0
  174. package/dist/cli/applicationCommands.js +2 -3
  175. package/dist/cli/artifactCommands.js +11 -12
  176. package/dist/cli/coreAnalysisCommands.js +3 -3
  177. package/dist/cli/coreBinaryCommands.js +100 -37
  178. package/dist/cli/coreNativeCommands.js +9 -10
  179. package/dist/cli/electronCommands.js +10 -9
  180. package/dist/cli/interactiveSetup.js +6 -6
  181. package/dist/cli/javascriptApplicationAnalysis.js +7 -3
  182. package/dist/cli/jsonOutput.js +4 -99
  183. package/dist/cli/managedCommands.js +7 -8
  184. package/dist/cli/nativeCallCommands.js +3 -5
  185. package/dist/cli/omittableDefaults.js +50 -0
  186. package/dist/cli/processCommands.js +3 -2
  187. package/dist/cli/setupCommands.js +16 -15
  188. package/dist/cli/utilityCommands.js +9 -9
  189. package/dist/cli/webRuntimeCommands.js +8 -8
  190. package/dist/cli.js +18 -9
  191. package/dist/cliBrowserScenarioCommands.js +2 -2
  192. package/dist/cliCommandNames.js +1 -1
  193. package/dist/cliJsonInput.js +24 -5
  194. package/dist/cliOutput.js +0 -38
  195. package/dist/composition/auxiliaryAnalysisProviders.js +27 -23
  196. package/dist/composition/binary.js +9 -9
  197. package/dist/composition/browserScenario.js +2 -1
  198. package/dist/composition/directAnalysis.js +20 -13
  199. package/dist/composition/electronScenario.js +1 -1
  200. package/dist/composition/optionalObservationProviders.js +12 -7
  201. package/dist/config/environment.js +10 -0
  202. package/dist/config/ghidraStartupTimeout.js +12 -0
  203. package/dist/config/homeDirectory.js +12 -0
  204. package/dist/config/mcpResponseBudget.js +30 -0
  205. package/dist/config/parseConfig.js +8 -3
  206. package/dist/config/parsers.js +19 -22
  207. package/dist/contracts/analysisViewToolContracts.js +56 -0
  208. package/dist/contracts/applicationToolContracts.js +5 -4
  209. package/dist/contracts/artifactComparisonExample.js +2 -2
  210. package/dist/contracts/artifactToolContracts.js +1 -1
  211. package/dist/contracts/browserScenarioToolContracts.js +1 -1
  212. package/dist/contracts/browserToolContracts.js +19 -15
  213. package/dist/contracts/enhancedInputs.js +7 -5
  214. package/dist/contracts/enhancedToolContracts.js +7 -6
  215. package/dist/contracts/evm/evmToolContracts.js +1 -1
  216. package/dist/contracts/functionWorkflowToolContracts.js +1 -1
  217. package/dist/contracts/hopperMemoryContracts.js +2 -5
  218. package/dist/contracts/inputSchemaPresentation.js +90 -0
  219. package/dist/contracts/investigationExamples.js +4 -3
  220. package/dist/contracts/javascript/electronToolContracts.js +2 -2
  221. package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +0 -20
  222. package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +245 -0
  223. package/dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js +1 -1
  224. package/dist/contracts/managed/managedToolContracts.js +7 -14
  225. package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
  226. package/dist/contracts/mobileApplicationGraphExamples.js +3 -3
  227. package/dist/contracts/native/binaryDiagnosticsToolContracts.js +1 -1
  228. package/dist/contracts/native/nativeToolContracts.js +5 -3
  229. package/dist/contracts/officialToolContracts.js +16 -16
  230. package/dist/contracts/promptContracts.js +5 -5
  231. package/dist/contracts/providerSelection.js +1 -1
  232. package/dist/contracts/sessionLifecycleInputs.js +3 -7
  233. package/dist/contracts/sessionStatusContract.js +2 -4
  234. package/dist/contracts/sessionToolContracts.js +18 -8
  235. package/dist/contracts/sessionToolSchemas.js +3 -19
  236. package/dist/contracts/toolContractExamples.js +0 -1
  237. package/dist/contracts/toolContractHelpers.js +4 -1
  238. package/dist/contracts/toolContracts.js +2 -0
  239. package/dist/contracts/toolEffects.js +1 -1
  240. package/dist/contracts/toolOutputSchemaGroups.js +160 -115
  241. package/dist/contracts/toolOutputSchemaPrimitives.js +28 -20
  242. package/dist/contracts/toolSchemaMetadata.js +41 -33
  243. package/dist/contracts/webNetworkCaptureToolContracts.js +2 -2
  244. package/dist/contracts/webRuntimeToolContracts.js +1 -1
  245. package/dist/contracts/webScriptToolContracts.js +1 -1
  246. package/dist/doctorRuntime.js +7 -5
  247. package/dist/domain/analysisErrorBase.js +8 -3
  248. package/dist/domain/analysisErrorCore.js +6 -1
  249. package/dist/domain/analysisErrorPresentation.js +90 -20
  250. package/dist/domain/analysisErrorProjection.js +130 -32
  251. package/dist/domain/analysisSnapshot.js +29 -31
  252. package/dist/domain/analysisView/analysisView.js +243 -0
  253. package/dist/domain/analysisView/analysisViewCoverage.js +19 -0
  254. package/dist/domain/analysisView/binaryLayoutView.js +159 -0
  255. package/dist/domain/analysisView/javascriptApplicationView.js +238 -0
  256. package/dist/domain/android/androidAnalysis.js +2 -4
  257. package/dist/domain/android/androidApplication.js +18 -10
  258. package/dist/domain/apple/appleApplication.js +42 -15
  259. package/dist/domain/apple/dyldEnvironment.js +73 -0
  260. package/dist/domain/apple/dylibResolution.js +130 -12
  261. package/dist/domain/apple/dylibResolutionFindings.js +9 -7
  262. package/dist/domain/apple/interfaceBuilderGraph.js +25 -14
  263. package/dist/domain/apple/interfaceBuilderKeyedArchive.js +13 -3
  264. package/dist/domain/apple/keyedArchive.js +35 -3
  265. package/dist/domain/apple/machoContainer.js +54 -0
  266. package/dist/domain/apple/plistNumbers.js +76 -0
  267. package/dist/domain/artifactComparison.js +15 -6
  268. package/dist/domain/artifactGraph.js +16 -3
  269. package/dist/domain/artifactIdentity.js +29 -0
  270. package/dist/domain/artifactInventoryEvidence.js +28 -40
  271. package/dist/domain/artifactOperationError.js +3 -3
  272. package/dist/domain/artifactPartialObservation.js +1 -0
  273. package/dist/domain/artifactPathSyntax.js +49 -0
  274. package/dist/domain/binaryTarget.js +39 -13
  275. package/dist/domain/bridgeCandidateProjection.js +71 -0
  276. package/dist/domain/browserCaptureComparison.js +13 -49
  277. package/dist/domain/browserCompleteness.js +1 -0
  278. package/dist/domain/browserNetworkEvidence.js +10 -4
  279. package/dist/domain/browserObservation.js +0 -1
  280. package/dist/domain/browserObservationError.js +24 -5
  281. package/dist/domain/browserObservationSchemas.js +14 -3
  282. package/dist/domain/browserScenario.js +0 -1
  283. package/dist/domain/browserScenarioCapture.js +1 -2
  284. package/dist/domain/browserScenarioDiff.js +0 -2
  285. package/dist/domain/browserScenarioDiffEvidence.js +0 -12
  286. package/dist/domain/browserScenarioDiffValues.js +2 -2
  287. package/dist/domain/browserScenarioValues.js +5 -10
  288. package/dist/domain/bundleComparison.js +3 -2
  289. package/dist/domain/callPath.js +8 -9
  290. package/dist/domain/callPathSchemas.js +2 -2
  291. package/dist/domain/canonicalJsonDigestSteps.js +133 -0
  292. package/dist/domain/canonicalOrdering.js +9 -5
  293. package/dist/domain/changedBehavior.js +9 -9
  294. package/dist/domain/comparisonSourceEvidence.js +40 -0
  295. package/dist/domain/completionLedgerGeneration.js +2 -1
  296. package/dist/domain/configurationErrors.js +13 -1
  297. package/dist/domain/conformancePackage.js +4 -3
  298. package/dist/domain/evidence.js +65 -36
  299. package/dist/domain/evidenceBundle.js +47 -8
  300. package/dist/domain/evidenceCompletionLedger.js +2 -1
  301. package/dist/domain/evidenceErrors.js +12 -1
  302. package/dist/domain/explicitSensitiveFailure.js +17 -1
  303. package/dist/domain/firmware/firmwareAnalysis.js +6 -7
  304. package/dist/domain/functionComparison.js +4 -5
  305. package/dist/domain/functionComparisonDimensions.js +120 -87
  306. package/dist/domain/functionComparisonNormalization.js +23 -34
  307. package/dist/domain/functionComparisonResults.js +1 -4
  308. package/dist/domain/functionComparisonSchemas.js +2 -8
  309. package/dist/domain/functionDossierEvidence.js +2 -37
  310. package/dist/domain/hopperErrors.js +23 -2
  311. package/dist/domain/hopperValues.js +51 -8
  312. package/dist/domain/immutableJson.js +114 -0
  313. package/dist/domain/inputIssueProjection.js +3 -0
  314. package/dist/domain/javascript/electronActiveObservation.js +47 -64
  315. package/dist/domain/javascript/electronObservation.js +14 -3
  316. package/dist/domain/javascript/electronStaticAnalysisBrowser.js +10 -9
  317. package/dist/domain/javascript/electronStaticAnalysisIpc.js +2 -1
  318. package/dist/domain/javascript/electronStaticAnalysisNative.js +2 -1
  319. package/dist/domain/javascript/electronStaticAnalysisValues.js +6 -12
  320. package/dist/domain/javascript/javascriptApplicationAnalysis.js +71 -23
  321. package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +2 -0
  322. package/dist/domain/javascript/javascriptApplicationGraph.js +39 -3
  323. package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +9 -2
  324. package/dist/domain/javascript/javascriptApplicationVersionItems.js +5 -2
  325. package/dist/domain/javascript/javascriptApplicationVersionKeys.js +2 -1
  326. package/dist/domain/javascript/javascriptAstValues.js +20 -0
  327. package/dist/{application/javascript/JavaScriptReturnShapeProjection.js → domain/javascript/javascriptExportReturnShapeProjection.js} +4 -4
  328. package/dist/domain/javascript/javascriptExportShapeComparison.js +7 -1
  329. package/dist/domain/javascript/javascriptExportShapeComparisonIdentity.js +6 -1
  330. package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +29 -1
  331. package/dist/domain/javascript/javascriptExportShapeSelection.js +5 -5
  332. package/dist/domain/javascript/javascriptExportShapeVariants.js +67 -14
  333. package/dist/domain/javascript/javascriptFeatureSeed.js +20 -0
  334. package/dist/domain/javascript/javascriptFeatureTraversal.js +0 -1
  335. package/dist/domain/javascript/javascriptNativeHandoff.js +1 -1
  336. package/dist/domain/javascript/javascriptRecovery.js +3 -8
  337. package/dist/domain/javascript/javascriptRuntimeLoadState.js +0 -1
  338. package/dist/domain/javascript/javascriptRuntimeObservation.js +10 -2
  339. package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +1 -1
  340. package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +3 -2
  341. package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +0 -1
  342. package/dist/domain/javascript/javascriptSemanticAnalysis.js +106 -5
  343. package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +2 -1
  344. package/dist/domain/javascript/javascriptSemanticCalls.js +2 -1
  345. package/dist/domain/javascript/javascriptSemanticChildProcesses.js +2 -1
  346. package/dist/domain/javascript/javascriptSemanticCoverage.js +6 -5
  347. package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +9 -17
  348. package/dist/domain/javascript/javascriptSemanticDataEffects.js +23 -6
  349. package/dist/domain/javascript/javascriptSemanticGraph.js +98 -43
  350. package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +1 -0
  351. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +77 -20
  352. package/dist/domain/javascript/javascriptSemanticMutationValues.js +21 -27
  353. package/dist/domain/javascript/javascriptSemanticObjects.js +83 -42
  354. package/dist/domain/javascript/javascriptSemanticPrimitives.js +18 -21
  355. package/dist/domain/javascript/javascriptSemanticProjection.js +2 -3
  356. package/dist/domain/javascript/javascriptSemanticPromises.js +2 -1
  357. package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -4
  358. package/dist/domain/javascript/javascriptSemanticResourceLimits.js +77 -0
  359. package/dist/domain/javascript/javascriptSemanticResources.js +1 -1
  360. package/dist/domain/javascript/javascriptSemanticReturns.js +32 -17
  361. package/dist/domain/javascript/javascriptSemanticSlots.js +72 -0
  362. package/dist/domain/javascript/javascriptSemanticValues.js +126 -61
  363. package/dist/domain/javascript/javascriptSourceMapPaths.js +104 -0
  364. package/dist/domain/javascript/javascriptSourceParser.js +6 -2
  365. package/dist/domain/javascript/javascriptStaticAnalysis.js +22 -17
  366. package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +5 -3
  367. package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +16 -5
  368. package/dist/domain/javascript/javascriptStaticAnalysisFindings.js +66 -7
  369. package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +28 -17
  370. package/dist/domain/javascript/javascriptStaticAnalysisState.js +3 -2
  371. package/dist/domain/javascript/sourceToBundleComparison.js +12 -3
  372. package/dist/domain/javascript/sourceToBundleSignals.js +47 -19
  373. package/dist/domain/jsonSerialization.js +109 -0
  374. package/dist/domain/jsonValue.js +90 -6
  375. package/dist/domain/localPath.js +6 -0
  376. package/dist/domain/managed/managedApplicationGraph.js +10 -10
  377. package/dist/domain/managed/managedArtifact.js +6 -4
  378. package/dist/domain/managed/managedInspectionEvidence.js +16 -0
  379. package/dist/domain/managed/managedMemberComparison.js +2 -9
  380. package/dist/domain/managed/managedMemberComparisonMatch.js +5 -9
  381. package/dist/domain/managed/managedNativeVerification.js +3 -11
  382. package/dist/domain/managed/managedNativeVerificationMatch.js +9 -3
  383. package/dist/domain/native/binaryLayout.js +2 -3
  384. package/dist/domain/native/fileOffsetPartialObservation.js +1 -0
  385. package/dist/domain/native/nativeApiBoundary.js +1 -1
  386. package/dist/domain/native/nativeCallObservation.js +37 -13
  387. package/dist/domain/native/nativeCallPartialObservation.js +33 -0
  388. package/dist/domain/native/nativeInstruction.js +7 -0
  389. package/dist/domain/native/recordedCrash.js +2 -3
  390. package/dist/domain/offsetDateTime.js +17 -0
  391. package/dist/domain/process/processCapture.js +21 -16
  392. package/dist/domain/process/processCaptureCoverage.js +67 -0
  393. package/dist/domain/process/processCaptureExample.js +2 -1
  394. package/dist/domain/process/processCaptureParsing.js +1 -34
  395. package/dist/domain/process/processCaptureValidation.js +81 -13
  396. package/dist/domain/process/processComparison.js +79 -26
  397. package/dist/domain/process/processObservation.js +10 -2
  398. package/dist/domain/process/processScenario.js +35 -12
  399. package/dist/domain/process/processTraceComparison.js +0 -2
  400. package/dist/domain/process/processTraceDimensionProjection.js +1 -1
  401. package/dist/domain/process/processTraceEvaluation.js +15 -11
  402. package/dist/domain/process/processTraceSpecification.js +3 -4
  403. package/dist/domain/propertyListKeys.js +1 -1
  404. package/dist/domain/propertyListXmlText.js +19 -0
  405. package/dist/domain/providerAdapterError.js +3 -1
  406. package/dist/domain/providerOperationHealth.js +54 -0
  407. package/dist/domain/reconstructionCoverage.js +5 -2
  408. package/dist/domain/reconstructionObligationLedgerSchemas.js +2 -1
  409. package/dist/domain/reconstructionReadinessSchemas.js +2 -1
  410. package/dist/domain/reconstructionVerification.js +9 -46
  411. package/dist/domain/reconstructionVerificationSchemas.js +4 -3
  412. package/dist/domain/referenceSourceGraph.js +20 -21
  413. package/dist/domain/staticRuntimeCorrelation.js +8 -45
  414. package/dist/domain/stringPatterns.js +6 -0
  415. package/dist/domain/swiftSymbolClassification.js +61 -0
  416. package/dist/domain/symbolAnalysis.js +66 -18
  417. package/dist/domain/webBundleAnalysis.js +20 -8
  418. package/dist/domain/webBundleAnalyzerInspection.js +13 -8
  419. package/dist/domain/webBundleAnalyzerResult.js +41 -2
  420. package/dist/domain/webCaptureDiff.js +0 -1
  421. package/dist/domain/webCaptureDiffSchemas.js +6 -3
  422. package/dist/domain/webEventListeners.js +3 -2
  423. package/dist/domain/webExecution.js +3 -2
  424. package/dist/domain/webRuntime.js +19 -7
  425. package/dist/domain/webScriptExport.js +1 -1
  426. package/dist/domain/webSourceLocation.js +1 -0
  427. package/dist/dotnet/ManagedArtifactInspector.js +2 -19
  428. package/dist/dotnet/ManagedMemberInspector.js +12 -18
  429. package/dist/dotnet/ManagedMemberInspectorCore.js +47 -44
  430. package/dist/dotnet/ManagedMemberRows.js +75 -62
  431. package/dist/dotnet/ManagedMetadataInventory.js +16 -22
  432. package/dist/dotnet/ManagedMethodBodyReader.js +4 -0
  433. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +109 -94
  434. package/dist/dotnet/ManagedNativeBoundaryInspector.js +12 -21
  435. package/dist/dotnet/ManagedReaderFailure.js +16 -0
  436. package/dist/dotnet/ManagedStaticProvider.js +3 -5
  437. package/dist/evaluation/AgentEvaluationFixtures.js +250 -0
  438. package/dist/evaluation/AgentEvaluationReport.js +28 -0
  439. package/dist/evaluation/CodexAgentEval.js +12 -8
  440. package/dist/evaluation/KnownAnswerEvaluation.js +281 -0
  441. package/dist/evm/EvmoleInterfaceProvider.js +2 -1
  442. package/dist/firmware/FirmwareCommand.js +9 -5
  443. package/dist/firmware/FirmwareFiles.js +1 -1
  444. package/dist/firmware/FirmwareProvider.js +4 -4
  445. package/dist/generatedPackageMetadata.js +2 -2
  446. package/dist/ghidra/GhidraAnalysisProfile.js +7 -5
  447. package/dist/ghidra/GhidraClient.js +126 -34
  448. package/dist/ghidra/GhidraClientStartup.js +0 -2
  449. package/dist/ghidra/GhidraDiagnostics.js +7 -7
  450. package/dist/ghidra/GhidraDoctor.js +6 -5
  451. package/dist/ghidra/GhidraFunctionValues.js +13 -12
  452. package/dist/ghidra/GhidraInstallation.js +58 -33
  453. package/dist/ghidra/GhidraInventoryValues.js +14 -4
  454. package/dist/ghidra/GhidraJavaLaunch.js +66 -0
  455. package/dist/ghidra/GhidraLauncher.js +47 -22
  456. package/dist/ghidra/GhidraProvider.js +6 -2
  457. package/dist/ghidra/GhidraProviderCapabilities.js +20 -2
  458. package/dist/ghidra/GhidraProviderClient.js +36 -15
  459. package/dist/ghidra/GhidraSessionError.js +13 -7
  460. package/dist/ghidra/GhidraSessionRoot.js +39 -0
  461. package/dist/ghidra/GhidraTargetSnapshot.js +47 -12
  462. package/dist/ghidra/GhidraTransport.js +20 -0
  463. package/dist/ghidra/extensions/GhidraExtensions.js +17 -10
  464. package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +8 -2
  465. package/dist/hopper/BridgeLauncher.js +65 -56
  466. package/dist/hopper/HopperAnalysisProfile.js +65 -12
  467. package/dist/hopper/HopperCleanup.js +63 -22
  468. package/dist/hopper/HopperClient.js +288 -59
  469. package/dist/hopper/HopperFileOffset.js +237 -0
  470. package/dist/hopper/HopperMachOImage.js +197 -0
  471. package/dist/hopper/HopperOperationStage.js +6 -0
  472. package/dist/hopper/HopperProvider.js +71 -19
  473. package/dist/hopper/HopperProviderCapabilities.js +19 -1
  474. package/dist/hopper/HopperRegexSearch.js +134 -0
  475. package/dist/hopper/HopperRegexWorker.js +27 -0
  476. package/dist/hopper/HopperRequestQueue.js +68 -19
  477. package/dist/hopper/HopperTargetLease.js +133 -49
  478. package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -0
  479. package/dist/ida/IdaConfiguration.js +8 -3
  480. package/dist/ida/IdaInput.js +1 -7
  481. package/dist/ida/IdaMcpConnection.js +8 -4
  482. package/dist/ida/IdaOperationRunner.js +3 -3
  483. package/dist/ida/IdaProvider.js +8 -12
  484. package/dist/ida/IdaSessionClient.js +20 -18
  485. package/dist/ida/IdaWorkspace.js +12 -13
  486. package/dist/inspector/JavaScriptRuntimeScope.js +9 -1
  487. package/dist/inspector/V8InspectorCaptureProjection.js +9 -4
  488. package/dist/inspector/V8InspectorProvider.js +82 -36
  489. package/dist/javascript/recovery/WakaruCommand.js +7 -2
  490. package/dist/javascript/recovery/WakaruExecution.js +5 -2
  491. package/dist/javascript/sourceMaps/DecodedSourceMap.js +47 -0
  492. package/dist/javascript/sourceMaps/SourceMapCommand.js +16 -0
  493. package/dist/javascript/sourceMaps/SourceMapFormat.js +79 -31
  494. package/dist/javascript/sourceMaps/TraceSourceMap.js +14 -28
  495. package/dist/main/shutdown.js +11 -3
  496. package/dist/main/startup.js +9 -2
  497. package/dist/main/transport.js +22 -2
  498. package/dist/main.js +11 -18
  499. package/dist/mcpDoctor.js +62 -2
  500. package/dist/native/AppleDispatchCoverage.js +47 -6
  501. package/dist/native/AppleDispatchDecodeFacts.js +6 -0
  502. package/dist/native/AppleDispatchMetadata.js +6 -3
  503. package/dist/native/AppleMachoFixups.js +48 -24
  504. package/dist/native/AppleMachoSelection.js +48 -22
  505. package/dist/native/AppleObjcCategories.js +6 -2
  506. package/dist/native/AppleObjcDispatchFacets.js +5 -2
  507. package/dist/native/AppleObjcProperties.js +2 -1
  508. package/dist/native/AppleSwiftDispatchFacets.js +27 -21
  509. package/dist/native/AppleSwiftVtables.js +21 -15
  510. package/dist/native/CommandRunner.js +87 -88
  511. package/dist/native/LldbCallTracer.js +372 -103
  512. package/dist/native/LldbRetainedObservations.js +178 -0
  513. package/dist/native/NativeCallObservation.js +62 -3
  514. package/dist/native/NativeMacOSProvider.js +122 -31
  515. package/dist/native/NativeUiHelperRuntime.js +11 -2
  516. package/dist/native/NativeUiObservation.js +2 -2
  517. package/dist/native/SignatureTargetBinding.js +155 -0
  518. package/dist/native/parsers/lipo.js +71 -1
  519. package/dist/native/pwndbg/PwndbgCoreContext.js +25 -5
  520. package/dist/native/pwntools/PwntoolsDecoder.js +2 -1
  521. package/dist/native/pwntools/RecordedCrashStructureBindings.js +2 -0
  522. package/dist/process/DarwinProcessRunTokenReader.js +23 -10
  523. package/dist/process/ExecFileOutput.js +108 -6
  524. package/dist/process/OwnedCommand.js +7 -2
  525. package/dist/process/PrivateRuntimeRoot.js +10 -5
  526. package/dist/process/ProcessOwnership.js +204 -57
  527. package/dist/process/ProcessOwnershipObservation.js +60 -9
  528. package/dist/process/ProviderProcess.js +39 -10
  529. package/dist/process/capture/FilesystemSnapshot.js +50 -13
  530. package/dist/process/capture/ProcessCaptureError.js +15 -2
  531. package/dist/process/capture/ProcessCaptureLifecycle.js +235 -81
  532. package/dist/process/capture/ProcessFilesystemEffects.js +33 -3
  533. package/dist/process/capture/ProcessHarness.js +21 -25
  534. package/dist/process/capture/ProcessNormalization.js +20 -2
  535. package/dist/process/capture/ProcessSampling.js +25 -2
  536. package/dist/process/capture/TerminalRenderer.js +14 -0
  537. package/dist/process/snapshotEnvironment.js +14 -0
  538. package/dist/server/EvidenceMcpServer.js +157 -0
  539. package/dist/server/createServer.js +61 -41
  540. package/dist/server/mcpClientMetadata.js +12 -5
  541. package/dist/server/promptCompletion.js +3 -8
  542. package/dist/server/registerAnalysisViewTool.js +15 -0
  543. package/dist/server/registerAndroidTools.js +2 -5
  544. package/dist/server/registerApplicationTools/compareExportShapes.js +4 -5
  545. package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
  546. package/dist/server/registerApplicationTools/compareVersions.js +4 -5
  547. package/dist/server/registerApplicationTools/coverage.js +1 -2
  548. package/dist/server/registerApplicationTools/helpers.js +1 -4
  549. package/dist/server/registerApplicationTools/obligationLedger.js +4 -5
  550. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -4
  551. package/dist/server/registerApplicationTools/traceFeature.js +4 -5
  552. package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
  553. package/dist/server/registerArtifactComparisonTool.js +13 -10
  554. package/dist/server/registerBinaryDiagnosticsTools.js +2 -5
  555. package/dist/server/registerBrowserScenarioTool.js +3 -6
  556. package/dist/server/registerBrowserTools.js +13 -18
  557. package/dist/server/registerBundleComparisonTool.js +5 -7
  558. package/dist/server/registerCloseLifecycleTool.js +9 -20
  559. package/dist/server/registerElectronTools.js +10 -15
  560. package/dist/server/registerEnhancedTools.js +36 -77
  561. package/dist/server/registerEvidenceTools.js +3 -6
  562. package/dist/server/registerEvmTools.js +2 -5
  563. package/dist/server/registerFirmwareTools.js +2 -5
  564. package/dist/server/registerFunctionComparisonTool.js +15 -12
  565. package/dist/server/registerInvestigationTools.js +16 -17
  566. package/dist/server/registerJavaScriptRecoveryTool.js +2 -5
  567. package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -8
  568. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +5 -8
  569. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -7
  570. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +6 -9
  571. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +6 -9
  572. package/dist/server/registerOfficialTools.js +4 -21
  573. package/dist/server/registerProcessComparisonTool.js +74 -48
  574. package/dist/server/registerRecordedCrashTools.js +2 -5
  575. package/dist/server/registerSessionRecordTools.js +19 -24
  576. package/dist/server/registerSessionStatusTool.js +19 -6
  577. package/dist/server/registerSessionTools.js +20 -18
  578. package/dist/server/registerWebModuleTool.js +2 -5
  579. package/dist/server/registerWebNetworkCaptureTool.js +2 -5
  580. package/dist/server/registerWebRuntimeTools.js +4 -9
  581. package/dist/server/registerWebScriptTool.js +2 -5
  582. package/dist/server/registerWebSourceLocationTool.js +2 -5
  583. package/dist/server/runDerivedOperation.js +15 -3
  584. package/dist/server/sessionAvailabilityPolicy.js +0 -1
  585. package/dist/server/toolRegistrationOptions.js +2 -2
  586. package/dist/server/toolResult.js +75 -51
  587. package/dist/server/toolResultEncoding.js +34 -0
  588. package/dist/windows/WindowsNativeLoader.js +1 -0
  589. package/dist/windows/WindowsOwnedProcess.js +60 -15
  590. package/dist/windows/WindowsPrivateRuntime.js +7 -8
  591. package/install.sh +1 -1
  592. package/native/windows/README.md +3 -1
  593. package/native/windows/build/manifest.json +2 -2
  594. package/native/windows/build/rea-windows-x64.node +0 -0
  595. package/package.json +44 -30
  596. package/scripts/electron-active-hook-boundaries.cjs +18 -20
  597. package/scripts/electron-active-hook.cjs +241 -37
  598. package/scripts/rea.mjs +3 -6
  599. package/skills/reverse-engineer-anything/SKILL.md +12 -3
  600. package/skills/reverse-engineer-anything/references/android-applications.md +6 -3
  601. package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -4
  602. package/skills/reverse-engineer-anything/references/javascript-applications.md +20 -3
  603. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +9 -0
  604. package/dist/config.js +0 -1
  605. package/dist/contracts/browserCaptureToolInputSchema.js +0 -43
  606. package/dist/contracts/process/processCaptureExample.js +0 -2
  607. package/dist/contracts/toolOutputSchemas.js +0 -2
  608. package/dist/ghidra/GhidraDefaults.js +0 -2
  609. package/dist/main/reload.js +0 -12
  610. package/dist/main/state.js +0 -3
  611. package/dist/server/sessionToolPolicies.js +0 -2
@@ -1,10 +1,11 @@
1
1
  import { ArtifactReaderFailure } from "../../artifacts/ArtifactReader.js";
2
2
  import { AnalysisError } from "../../domain/analysisErrorBase.js";
3
- import { AnalysisAccessDeniedError, AnalysisArtifactChangedError, AnalysisCancelledError, AnalysisCapabilityUnavailableError, AnalysisInputError, AnalysisOutputError, AnalysisTimeoutError, } from "../../domain/analysisErrorCore.js";
3
+ import { AnalysisAccessDeniedError, AnalysisArtifactChangedError, AnalysisCancelledError, AnalysisCapabilityUnavailableError, AnalysisInputError, AnalysisOutputError, AnalysisResourceConstraintError, AnalysisTimeoutError, } from "../../domain/analysisErrorCore.js";
4
4
  import { ProviderAdapterError } from "../../domain/providerAdapterError.js";
5
5
  import { ProviderCleanupError } from "../../domain/providerCleanupError.js";
6
6
  import { WEB_NETWORK_CAPTURE_LIMITS, } from "../../domain/webNetworkCapture.js";
7
7
  import { OwnedCommandFailure } from "../../process/OwnedCommand.js";
8
+ import { HAR_CAPTURE_HEAP_LIMITS } from "./CaptureRelease.js";
8
9
  const OPERATION = "inspect_web_network_capture";
9
10
  /** Preserve the origin and typed cause of a historical capture failure. */
10
11
  export const historicalCaptureFailure = (input, cause, phase, options) => {
@@ -30,6 +31,13 @@ export const historicalCaptureFailure = (input, cause, phase, options) => {
30
31
  return new AnalysisTimeoutError(OPERATION, WEB_NETWORK_CAPTURE_LIMITS.timeoutMs);
31
32
  if (cause.reason === "output-limit")
32
33
  return new AnalysisOutputError(OPERATION, cause.message);
34
+ if (phase === "decoder" &&
35
+ input.format === "har" &&
36
+ cause.reason === "process" &&
37
+ (cause.snapshot?.signal === "SIGABRT" ||
38
+ (cause.snapshot?.signal === null && cause.snapshot.exitCode === 134)) &&
39
+ /FATAL ERROR:[^\r\n]*heap out of memory/u.test(cause.snapshot.stderr.text))
40
+ return captureMemoryFailure(input, "The HAR decoder exhausted its fixed V8 heap", cause);
33
41
  }
34
42
  if (options?.signal?.aborted)
35
43
  return new AnalysisCancelledError(OPERATION);
@@ -99,3 +107,35 @@ export const historicalCaptureFailure = (input, cause, phase, options) => {
99
107
  },
100
108
  });
101
109
  };
110
+ /** Preserve a decoder's observed memory failure and its actual workload limits. */
111
+ export const captureMemoryFailure = (input, reason, cause) => new AnalysisResourceConstraintError(OPERATION, "memory", `${reason}: ${input.capture_path}. No complete capture result is available.`, {
112
+ boundary: "historical-capture-decoder",
113
+ capture_path: input.capture_path,
114
+ format: input.format,
115
+ maximum_input_bytes: WEB_NETWORK_CAPTURE_LIMITS.inputBytes,
116
+ maximum_reply_bytes: WEB_NETWORK_CAPTURE_LIMITS.outputBytes,
117
+ ...(input.format === "har"
118
+ ? {
119
+ old_generation_heap_mib: HAR_CAPTURE_HEAP_LIMITS.oldGenerationMiB,
120
+ semi_space_heap_mib: HAR_CAPTURE_HEAP_LIMITS.semiSpaceMiB,
121
+ }
122
+ : {}),
123
+ ...(cause instanceof OwnedCommandFailure
124
+ ? {
125
+ observed_exit_code: cause.snapshot?.exitCode ?? null,
126
+ observed_signal: cause.snapshot?.signal ?? null,
127
+ }
128
+ : {}),
129
+ }, {
130
+ cause,
131
+ remediationAction: `Use a smaller capture exported by its producer, or another decoder with sufficient capacity for the original capture. Preserve the original for provenance; a subset does not establish complete-capture coverage.${input.format === "har" ? ` REA's HAR old-generation heap is fixed at ${HAR_CAPTURE_HEAP_LIMITS.oldGenerationMiB} MiB; inherited NODE_OPTIONS cannot raise it.` : ""}`,
132
+ ...(cause instanceof OwnedCommandFailure && cause.snapshot !== null
133
+ ? {
134
+ capturedOutput: {
135
+ stdout: cause.snapshot.stdout.text,
136
+ stderr: cause.snapshot.stderr.text,
137
+ truncated: cause.snapshot.diagnosticTruncated ?? false,
138
+ },
139
+ }
140
+ : {}),
141
+ });
@@ -4,6 +4,11 @@ export const HAR_CAPTURE_PROVIDER_IDENTITY = {
4
4
  name: "REA HAR capture adapter",
5
5
  version: "har-schema@2.0.0;jsonc-parser@3.3.1;lossless-json@4.3.1",
6
6
  };
7
+ /** Fixed V8 heap settings used by the owned HAR decoder process. */
8
+ export const HAR_CAPTURE_HEAP_LIMITS = {
9
+ oldGenerationMiB: 192,
10
+ semiSpaceMiB: 8,
11
+ };
7
12
  /** Native executable profile verified with unchanged mitmproxy raw-state decoding. */
8
13
  export const MITMPROXY_CAPTURE_PROVIDER_IDENTITY = {
9
14
  id: "mitmproxy-native-tnetstring",
@@ -1,5 +1,5 @@
1
1
  import { fileURLToPath } from "node:url";
2
- import { HAR_CAPTURE_PROVIDER_IDENTITY } from "./CaptureRelease.js";
2
+ import { HAR_CAPTURE_PROVIDER_IDENTITY, HAR_CAPTURE_HEAP_LIMITS, } from "./CaptureRelease.js";
3
3
  /** HAR's parser/schema packages run in one bounded Node heap, without network or target execution. */
4
4
  export class HarCaptureAdapter {
5
5
  format = "har";
@@ -8,8 +8,8 @@ export class HarCaptureAdapter {
8
8
  return {
9
9
  command: process.execPath,
10
10
  arguments: [
11
- "--max-old-space-size=192",
12
- "--max-semi-space-size=8",
11
+ `--max-old-space-size=${HAR_CAPTURE_HEAP_LIMITS.oldGenerationMiB}`,
12
+ `--max-semi-space-size=${HAR_CAPTURE_HEAP_LIMITS.semiSpaceMiB}`,
13
13
  "--v8-pool-size=1",
14
14
  "--single-threaded",
15
15
  fileURLToPath(new URL("./HarCaptureProcess.js", import.meta.url)),
@@ -43,8 +43,9 @@ export const parseHarJson = (text) => {
43
43
  });
44
44
  },
45
45
  onObjectProperty: (key) => {
46
- if (key === "__proto__")
47
- throw new CaptureFormatError("unsupported", "HAR object contains a __proto__ member that the current JSON schema boundary cannot preserve.");
46
+ // Prototype-named members are kept as ordinary own properties: the
47
+ // members map keys them without prototype setters, and
48
+ // Object.fromEntries materializes them as own data properties.
48
49
  const frame = frames.at(-1);
49
50
  if (frame?.kind !== "object")
50
51
  throw new TypeError("JSON visitor emitted a property outside an object.");
@@ -1,4 +1,4 @@
1
- import { historicalCaptureFailure } from "./CaptureFailures.js";
1
+ import { historicalCaptureFailure, captureMemoryFailure, } from "./CaptureFailures.js";
2
2
  import { projectAnalysisError } from "../../domain/analysisErrorProjection.js";
3
3
  import { randomUUID } from "node:crypto";
4
4
  import { writeFile } from "node:fs/promises";
@@ -117,7 +117,9 @@ export class HistoricalCaptureDecoder {
117
117
  },
118
118
  },
119
119
  ]);
120
- if (reply.reason === "decoder" || reply.reason === "resource-limit")
120
+ if (reply.reason === "resource-limit")
121
+ throw captureMemoryFailure(input, reply.message);
122
+ if (reply.reason === "decoder")
121
123
  throw new ProviderAdapterError(input.format, OPERATION, {
122
124
  diagnostics: {
123
125
  phase: "decoder",
@@ -5,6 +5,7 @@ import { fileURLToPath } from "node:url";
5
5
  import { AnalysisCapabilityUnavailableError } from "../../domain/analysisErrorCore.js";
6
6
  import { MITMPROXY_CAPTURE_PROVIDER_IDENTITY } from "./CaptureRelease.js";
7
7
  const OPERATION = "inspect_web_network_capture";
8
+ const MITMDUMP_REQUIREMENT = "Native capture decoding requires Linux and an absolute REA_MITMDUMP_COMMAND path to caller-supplied mitmdump 12.2.3; HAR needs no external engine.";
8
9
  /** Native mitmproxy decoding is offline and uses only an explicitly configured Linux tool. */
9
10
  export class MitmproxyCaptureAdapter {
10
11
  environment;
@@ -18,12 +19,13 @@ export class MitmproxyCaptureAdapter {
18
19
  if (process.platform !== "linux" ||
19
20
  command === undefined ||
20
21
  !isAbsolute(command))
21
- throw new AnalysisCapabilityUnavailableError("mitmproxy", OPERATION, "Native capture decoding requires Linux and an absolute REA_MITMDUMP_COMMAND path to caller-supplied mitmdump 12.2.3; HAR needs no external engine.");
22
+ throw new AnalysisCapabilityUnavailableError("mitmproxy", OPERATION, MITMDUMP_REQUIREMENT, { userMessage: MITMDUMP_REQUIREMENT });
22
23
  try {
23
24
  await access(command, constants.R_OK | constants.X_OK);
24
25
  }
25
26
  catch (cause) {
26
- throw new AnalysisCapabilityUnavailableError("mitmproxy", OPERATION, `Configured mitmdump executable is unavailable: ${command}.`, { cause });
27
+ const reason = `Configured mitmdump executable is unavailable: ${command}.`;
28
+ throw new AnalysisCapabilityUnavailableError("mitmproxy", OPERATION, reason, { cause, userMessage: reason });
27
29
  }
28
30
  return {
29
31
  command,
@@ -4,7 +4,6 @@ import { z } from "zod";
4
4
  import { PROMPT_CONTRACTS } from "./contracts/promptContracts.js";
5
5
  import { TOOL_CONTRACTS } from "./contracts/toolContracts.js";
6
6
  import { CLI_COMMAND_NAMES } from "./cliCommandNames.js";
7
- export { CLI_COMMAND_NAMES } from "./cliCommandNames.js";
8
7
  const sortedToolContracts = [...TOOL_CONTRACTS].sort((left, right) => left.name.localeCompare(right.name));
9
8
  const createToolCatalog = () => sortedToolContracts.map((contract) => ({
10
9
  name: contract.name,
@@ -0,0 +1,23 @@
1
+ import { AnalysisInputError } from "../domain/analysisErrorCore.js";
2
+ /** Preserve a CLI selector supplied positionally or through its named option. */
3
+ export const resolveCliAnalysisSelector = (positional, named, option, operation) => {
4
+ if (positional !== undefined && named !== undefined && positional !== named)
5
+ throw new AnalysisInputError(operation, undefined, [
6
+ {
7
+ path: [option],
8
+ reason: "invalid_value",
9
+ message: `The positional selector and --${option} select different objects; supply one selector.`,
10
+ },
11
+ ]);
12
+ const selected = named ?? positional;
13
+ if (selected === undefined)
14
+ throw new AnalysisInputError(operation, undefined, [
15
+ {
16
+ path: [option],
17
+ reason: "missing_argument",
18
+ message: `Supply a positional selector or --${option}=<value>. Use the named option for values beginning with a dash.`,
19
+ expected: "string",
20
+ },
21
+ ]);
22
+ return selected;
23
+ };
@@ -0,0 +1,36 @@
1
+ import { z } from "incur";
2
+ import { inspectAnalysisViewValidated } from "../application/analysisView/AnalysisViewService.js";
3
+ import { CLI_COMMANDS } from "../cliCommandNames.js";
4
+ import { parseCliJsonInput } from "../cliJsonInput.js";
5
+ import { logCliCommand } from "../cliLogging.js";
6
+ import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
7
+ import { analysisInputErrorFromIssues } from "../domain/inputIssueProjection.js";
8
+ import { jsonValueSchema } from "../domain/jsonValue.js";
9
+ import { inspectAnalysisViewInputSchema } from "../domain/analysisView/analysisView.js";
10
+ /** Project selected views of completed analysis Evidence through the CLI. */
11
+ export const registerAnalysisViewCommands = (cli, logger) => {
12
+ cli.command(CLI_COMMANDS.inspectAnalysisView, {
13
+ description: "Project a selected view of completed layout or JavaScript application Evidence JSON",
14
+ args: z.object({
15
+ inputJson: z.string().describe("Inline workflow JSON or JSON file path"),
16
+ }),
17
+ run: ({ args }) => logCliCommand(logger, CLI_COMMANDS.inspectAnalysisView, async () => {
18
+ const input = await parseCliJsonInput(args.inputJson, CLI_COMMANDS.inspectAnalysisView);
19
+ if (!input.ok)
20
+ return input.error;
21
+ const parsed = inspectAnalysisViewInputSchema.safeParse(input.value);
22
+ if (!parsed.success)
23
+ return {
24
+ error: "Application workflow failed",
25
+ ...projectAnalysisError(analysisInputErrorFromIssues(CLI_COMMANDS.inspectAnalysisView, parsed.error.issues, input.value)),
26
+ };
27
+ const result = inspectAnalysisViewValidated(parsed.data);
28
+ return result.ok
29
+ ? jsonValueSchema.parse(result.value)
30
+ : {
31
+ error: "Application workflow failed",
32
+ ...projectAnalysisError(result.error),
33
+ };
34
+ }),
35
+ });
36
+ };
@@ -9,7 +9,6 @@ import { buildReconstructionObligationLedgerEvidenceValidated } from "../applica
9
9
  import { CLI_COMMANDS } from "../cliCommandNames.js";
10
10
  import { parseCliJsonInput } from "../cliJsonInput.js";
11
11
  import { logCliCommand } from "../cliLogging.js";
12
- import { AnalysisInputError } from "../domain/analysisErrorCore.js";
13
12
  import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
14
13
  import {} from "../domain/analysisErrorBase.js";
15
14
  import { androidApplicationProjectionInputSchema } from "../domain/android/androidApplication.js";
@@ -20,7 +19,7 @@ import { traceJavaScriptSemanticsInputSchema } from "../domain/javascript/javasc
20
19
  import { compareApplicationVersionsInputSchema } from "../domain/javascript/javascriptApplicationVersionComparisonSchemas.js";
21
20
  import { compareSourceToBundleInputSchema } from "../domain/javascript/sourceToBundleComparisonSchemas.js";
22
21
  import { compareJavaScriptExportShapesInputSchema } from "../domain/javascript/javascriptExportShapeComparisonSchemas.js";
23
- import { projectInputIssues } from "../domain/inputIssueProjection.js";
22
+ import { analysisInputErrorFromIssues } from "../domain/inputIssueProjection.js";
24
23
  import { reconstructionObligationLedgerInputSchema } from "../domain/reconstructionObligationLedgerSchemas.js";
25
24
  /** Register CLI equivalents of provider-neutral application graph workflows. */
26
25
  export const registerApplicationCommands = (cli, logger) => {
@@ -133,7 +132,7 @@ const registerJsonCommand = ({ cli, logger, name, description, inputSchema, work
133
132
  if (!parsed.success)
134
133
  return {
135
134
  error: "Application workflow failed",
136
- ...projectAnalysisError(new AnalysisInputError(name, undefined, projectInputIssues(parsed.error.issues, input.value))),
135
+ ...projectAnalysisError(analysisInputErrorFromIssues(name, parsed.error.issues, input.value)),
137
136
  };
138
137
  const result = workflow(parsed.data);
139
138
  return result.ok
@@ -1,14 +1,13 @@
1
1
  import { z } from "incur";
2
- import { runProviderAnalysis } from "../composition/directAnalysis.js";
3
2
  import { createArtifactExtractionDestination } from "../application/artifacts/ArtifactExtractionDestination.js";
4
3
  import { logCliCommand } from "../cliLogging.js";
5
4
  import { CLI_COMMANDS } from "../cliCommandNames.js";
6
- export const registerArtifactCommands = (cli, logger) => {
7
- registerInspectionCommand(cli, logger);
8
- registerExtractionCommand(cli, logger);
9
- registerInterfaceBuilderCommand(cli, logger);
10
- registerAssetCatalogCommand(cli, logger);
11
- registerDylibResolutionCommand(cli, logger);
5
+ export const registerArtifactCommands = (cli, logger, runProviderAnalysis) => {
6
+ registerInspectionCommand(cli, logger, runProviderAnalysis);
7
+ registerExtractionCommand(cli, logger, runProviderAnalysis);
8
+ registerInterfaceBuilderCommand(cli, logger, runProviderAnalysis);
9
+ registerAssetCatalogCommand(cli, logger, runProviderAnalysis);
10
+ registerDylibResolutionCommand(cli, logger, runProviderAnalysis);
12
11
  cli.command(CLI_COMMANDS.inspectKeyedArchive, {
13
12
  description: "Inspect a Foundation keyed archive as an object-reference graph",
14
13
  args: z.object({
@@ -42,7 +41,7 @@ export const registerArtifactCommands = (cli, logger) => {
42
41
  }, logger)),
43
42
  });
44
43
  };
45
- const registerDylibResolutionCommand = (cli, logger) => {
44
+ const registerDylibResolutionCommand = (cli, logger, runProviderAnalysis) => {
46
45
  cli.command(CLI_COMMANDS.traceDylibResolution, {
47
46
  description: "Trace dyld load-path resolution for a Mach-O or every executable in an app bundle",
48
47
  args: z.object({
@@ -66,7 +65,7 @@ const registerDylibResolutionCommand = (cli, logger) => {
66
65
  }, logger)),
67
66
  });
68
67
  };
69
- const registerAssetCatalogCommand = (cli, logger) => {
68
+ const registerAssetCatalogCommand = (cli, logger, runProviderAnalysis) => {
70
69
  cli.command(CLI_COMMANDS.inspectAssetCatalog, {
71
70
  description: "Inspect compiled Apple asset catalog metadata",
72
71
  args: z.object({ path: z.string().describe("Apple .app bundle path") }),
@@ -89,7 +88,7 @@ const registerAssetCatalogCommand = (cli, logger) => {
89
88
  run: ({ args, options }) => logCliCommand(logger, CLI_COMMANDS.inspectAssetCatalog, () => runProviderAnalysis(args.path, "inspect_asset_catalog", { offset: options.offset, limit: options.limit }, logger)),
90
89
  });
91
90
  };
92
- const registerInterfaceBuilderCommand = (cli, logger) => {
91
+ const registerInterfaceBuilderCommand = (cli, logger, runProviderAnalysis) => {
93
92
  cli.command(CLI_COMMANDS.decodeInterfaceBuilder, {
94
93
  description: "Decode compiled storyboard and nib archives from an app bundle",
95
94
  args: z.object({
@@ -130,7 +129,7 @@ const registerInterfaceBuilderCommand = (cli, logger) => {
130
129
  }, logger)),
131
130
  });
132
131
  };
133
- const registerExtractionCommand = (cli, logger) => {
132
+ const registerExtractionCommand = (cli, logger, runProviderAnalysis) => {
134
133
  cli.command(CLI_COMMANDS.extractArtifact, {
135
134
  description: "Extract all regular artifact contents safely",
136
135
  args: z.object({
@@ -142,7 +141,7 @@ const registerExtractionCommand = (cli, logger) => {
142
141
  }, logger)),
143
142
  });
144
143
  };
145
- const registerInspectionCommand = (cli, logger) => {
144
+ const registerInspectionCommand = (cli, logger, runProviderAnalysis) => {
146
145
  cli.command(CLI_COMMANDS.inspectArtifact, {
147
146
  description: "Inspect one artifact and return all available observations and next probes",
148
147
  args: z.object({
@@ -1,7 +1,7 @@
1
1
  import { registerCoreBinaryCommands } from "./coreBinaryCommands.js";
2
2
  import { registerCoreNativeCommands } from "./coreNativeCommands.js";
3
3
  /** Register core binary and native deep-analysis CLI commands. */
4
- export const registerCoreAnalysisCommands = (cli, logger, resultOutput) => {
5
- registerCoreBinaryCommands(cli, logger, resultOutput);
6
- registerCoreNativeCommands(cli, logger);
4
+ export const registerCoreAnalysisCommands = (cli, logger, runDirectAnalysis, resultOutput) => {
5
+ registerCoreBinaryCommands(cli, logger, runDirectAnalysis, resultOutput);
6
+ registerCoreNativeCommands(cli, logger, runDirectAnalysis);
7
7
  };
@@ -1,21 +1,23 @@
1
1
  import { z } from "incur";
2
2
  import { stat } from "node:fs/promises";
3
3
  import { resolve } from "node:path";
4
- import { runDirectAnalysis } from "../composition/directAnalysis.js";
4
+ import { resolveCliAnalysisSelector } from "./analysisSelector.js";
5
5
  import { CLI_COMMANDS } from "../cliCommandNames.js";
6
6
  import { logCliCommand } from "../cliLogging.js";
7
7
  import { directAnalysisOptions, formatSelectionOption, providerSelectionOption, } from "./options.js";
8
8
  import { runCliJavaScriptApplicationAnalysis } from "./javascriptApplicationAnalysis.js";
9
+ import { withCommandCancellation } from "./commandCancellation.js";
9
10
  /** Register provider-neutral binary overview and procedure CLI commands. */
10
- export const registerCoreBinaryCommands = (cli, logger, resultOutput) => {
11
- registerOverviewCommands(cli, logger, resultOutput);
12
- registerFunctionCommand(cli, logger);
13
- registerInstructionsCommand(cli, logger);
14
- registerSearchCommand(cli, logger);
15
- registerXrefsCommand(cli, logger);
16
- registerTraceCommand(cli, logger);
11
+ export const registerCoreBinaryCommands = (cli, logger, runDirectAnalysis, resultOutput) => {
12
+ registerOverviewCommands(cli, logger, runDirectAnalysis, resultOutput);
13
+ registerDecompileCommand(cli, logger, runDirectAnalysis);
14
+ registerFunctionCommand(cli, logger, runDirectAnalysis);
15
+ registerInstructionsCommand(cli, logger, runDirectAnalysis);
16
+ registerSearchCommand(cli, logger, runDirectAnalysis);
17
+ registerXrefsCommand(cli, logger, runDirectAnalysis);
18
+ registerTraceCommand(cli, logger, runDirectAnalysis);
17
19
  };
18
- const registerOverviewCommands = (cli, logger, resultOutput) => {
20
+ const registerOverviewCommands = (cli, logger, runDirectAnalysis, resultOutput) => {
19
21
  const overviewOptions = z.object({
20
22
  snapshot: z
21
23
  .string()
@@ -31,9 +33,17 @@ const registerOverviewCommands = (cli, logger, resultOutput) => {
31
33
  path: z.string().describe("App, program, or analysis database path"),
32
34
  }),
33
35
  options: overviewOptions,
34
- run: ({ args, options, format }) => logCliCommand(logger, "analyze", () => runRoutedOverview(args.path, options, logger, resultOutput === undefined
35
- ? undefined
36
- : { output: resultOutput, command: CLI_COMMANDS.analyze, format })),
36
+ run: async ({ args, options, format }) => {
37
+ const output = resultOutput === undefined
38
+ ? undefined
39
+ : { output: resultOutput, command: CLI_COMMANDS.analyze, format };
40
+ // Route JavaScript targets exactly like analyze-javascript-application,
41
+ // including typed cancellation; cancellation wraps logging so its exit
42
+ // code is not replaced by the logged failure status.
43
+ if (await routesToJavaScriptAnalysis(args.path, options))
44
+ return withCommandCancellation((signal) => logCliCommand(logger, "analyze", () => runCliJavaScriptApplicationAnalysis({ input_path: resolve(args.path) }, output, signal)));
45
+ return logCliCommand(logger, "analyze", () => runDirectAnalysis(args.path, "binary_overview", {}, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"])));
46
+ },
37
47
  });
38
48
  cli.command(CLI_COMMANDS.inspect, {
39
49
  description: "Inspect an app overview with evidence",
@@ -43,13 +53,24 @@ const registerOverviewCommands = (cli, logger, resultOutput) => {
43
53
  options: overviewOptions,
44
54
  run: ({ args, options }) => logCliCommand(logger, "inspect", () => runDirectAnalysis(args.path, "binary_overview", {}, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
45
55
  });
56
+ };
57
+ const registerDecompileCommand = (cli, logger, runDirectAnalysis) => {
46
58
  cli.command(CLI_COMMANDS.decompile, {
47
59
  description: "Read one part of an app as code",
48
60
  args: z.object({
49
61
  path: z.string().describe("App or program path"),
50
- address: z.string().describe("Procedure address"),
62
+ address: z
63
+ .string()
64
+ .min(1)
65
+ .optional()
66
+ .describe("Procedure name or address"),
51
67
  }),
52
68
  options: z.object({
69
+ procedure: z
70
+ .string()
71
+ .min(1)
72
+ .optional()
73
+ .describe("Procedure name or address; use --procedure=<value> for leading dashes"),
53
74
  snapshot: z
54
75
  .string()
55
76
  .min(1)
@@ -58,17 +79,16 @@ const registerOverviewCommands = (cli, logger, resultOutput) => {
58
79
  "target-format": formatSelectionOption,
59
80
  provider: providerSelectionOption,
60
81
  }),
61
- run: ({ args, options }) => logCliCommand(logger, "decompile", () => runDirectAnalysis(args.path, "procedure_pseudo_code", { procedure: args.address }, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
82
+ run: ({ args, options }) => logCliCommand(logger, "decompile", () => runDirectAnalysis(args.path, "procedure_pseudo_code", {
83
+ procedure: resolveCliAnalysisSelector(args.address, options.procedure, "procedure", "procedure_pseudo_code"),
84
+ }, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
62
85
  });
63
86
  };
64
- const runRoutedOverview = async (path, options, logger, output) => {
65
- if (options.provider === undefined &&
66
- options.snapshot === undefined &&
67
- options["target-format"] === undefined &&
68
- (await isJavaScriptApplicationPath(path)))
69
- return runCliJavaScriptApplicationAnalysis({ input_path: resolve(path) }, output);
70
- return runDirectAnalysis(path, "binary_overview", {}, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]));
71
- };
87
+ /** Select static JavaScript analysis only when no binary-analysis option applies. */
88
+ const routesToJavaScriptAnalysis = async (path, options) => options.provider === undefined &&
89
+ options.snapshot === undefined &&
90
+ options["target-format"] === undefined &&
91
+ (await isJavaScriptApplicationPath(path));
72
92
  const isJavaScriptApplicationPath = async (path) => {
73
93
  const lower = path.toLowerCase();
74
94
  if (lower.endsWith(".asar"))
@@ -85,14 +105,19 @@ const isJavaScriptApplicationPath = async (path) => {
85
105
  return false;
86
106
  }
87
107
  };
88
- const registerXrefsCommand = (cli, logger) => {
108
+ const registerXrefsCommand = (cli, logger, runDirectAnalysis) => {
89
109
  cli.command(CLI_COMMANDS.xrefs, {
90
110
  description: "List bounded references to an analyzed address",
91
111
  args: z.object({
92
112
  path: z.string().describe("App or program path"),
93
- address: z.string().describe("Hexadecimal address"),
113
+ address: z.string().min(1).optional().describe("Address or symbol name"),
94
114
  }),
95
115
  options: z.object({
116
+ address: z
117
+ .string()
118
+ .min(1)
119
+ .optional()
120
+ .describe("Address or symbol name; use --address=<value> for leading dashes"),
96
121
  snapshot: z
97
122
  .string()
98
123
  .min(1)
@@ -101,17 +126,24 @@ const registerXrefsCommand = (cli, logger) => {
101
126
  "target-format": formatSelectionOption,
102
127
  provider: providerSelectionOption,
103
128
  }),
104
- run: ({ args, options }) => logCliCommand(logger, "xrefs", () => runDirectAnalysis(args.path, "xrefs", { address: args.address }, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
129
+ run: ({ args, options }) => logCliCommand(logger, "xrefs", () => runDirectAnalysis(args.path, "xrefs", {
130
+ address: resolveCliAnalysisSelector(args.address, options.address, "address", "xrefs"),
131
+ }, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
105
132
  });
106
133
  };
107
- const registerTraceCommand = (cli, logger) => {
134
+ const registerTraceCommand = (cli, logger, runDirectAnalysis) => {
108
135
  cli.command(CLI_COMMANDS.trace, {
109
136
  description: "Trace a literal feature through analyzed references",
110
137
  args: z.object({
111
138
  path: z.string().describe("App or program path"),
112
- query: z.string().min(1).describe("Literal feature query"),
139
+ query: z.string().min(1).optional().describe("Literal feature query"),
113
140
  }),
114
141
  options: z.object({
142
+ query: z
143
+ .string()
144
+ .min(1)
145
+ .optional()
146
+ .describe("Complete literal feature query; use --query=<value> for leading dashes"),
115
147
  caseSensitive: z
116
148
  .boolean()
117
149
  .default(false)
@@ -128,19 +160,28 @@ const registerTraceCommand = (cli, logger) => {
128
160
  caseSensitive: "case-sensitive",
129
161
  },
130
162
  run: ({ args, options }) => logCliCommand(logger, "trace", () => runDirectAnalysis(args.path, "trace_feature", {
131
- query: args.query,
163
+ query: resolveCliAnalysisSelector(args.query, options.query, "query", "trace_feature"),
132
164
  case_sensitive: options.caseSensitive,
133
165
  }, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
134
166
  });
135
167
  };
136
- const registerFunctionCommand = (cli, logger) => {
168
+ const registerFunctionCommand = (cli, logger, runDirectAnalysis) => {
137
169
  cli.command(CLI_COMMANDS.function, {
138
170
  description: "Analyze one complete function with evidence",
139
171
  args: z.object({
140
172
  path: z.string().describe("App or program path"),
141
- address: z.string().describe("Procedure name or address"),
173
+ address: z
174
+ .string()
175
+ .min(1)
176
+ .optional()
177
+ .describe("Procedure name or address"),
142
178
  }),
143
179
  options: z.object({
180
+ procedure: z
181
+ .string()
182
+ .min(1)
183
+ .optional()
184
+ .describe("Procedure name or address; use --procedure=<value> for leading dashes"),
144
185
  snapshot: z
145
186
  .string()
146
187
  .min(1)
@@ -149,17 +190,28 @@ const registerFunctionCommand = (cli, logger) => {
149
190
  "target-format": formatSelectionOption,
150
191
  provider: providerSelectionOption,
151
192
  }),
152
- run: ({ args, options }) => logCliCommand(logger, "function", () => runDirectAnalysis(args.path, "analyze_function", { procedure: args.address }, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
193
+ run: ({ args, options }) => logCliCommand(logger, "function", () => runDirectAnalysis(args.path, "analyze_function", {
194
+ procedure: resolveCliAnalysisSelector(args.address, options.procedure, "procedure", "analyze_function"),
195
+ }, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
153
196
  });
154
197
  };
155
- const registerInstructionsCommand = (cli, logger) => {
198
+ const registerInstructionsCommand = (cli, logger, runDirectAnalysis) => {
156
199
  cli.command(CLI_COMMANDS.instructions, {
157
200
  description: "Read every raw instruction without decompiling",
158
201
  args: z.object({
159
202
  path: z.string().describe("App or program path"),
160
- address: z.string().describe("Procedure name or address"),
203
+ address: z
204
+ .string()
205
+ .min(1)
206
+ .optional()
207
+ .describe("Procedure name or address"),
161
208
  }),
162
209
  options: z.object({
210
+ procedure: z
211
+ .string()
212
+ .min(1)
213
+ .optional()
214
+ .describe("Procedure name or address; use --procedure=<value> for leading dashes"),
163
215
  snapshot: z
164
216
  .string()
165
217
  .min(1)
@@ -169,18 +221,27 @@ const registerInstructionsCommand = (cli, logger) => {
169
221
  provider: providerSelectionOption,
170
222
  }),
171
223
  run: ({ args, options }) => logCliCommand(logger, CLI_COMMANDS.instructions, () => runDirectAnalysis(args.path, "read_function_instructions", {
172
- procedure: args.address,
224
+ procedure: resolveCliAnalysisSelector(args.address, options.procedure, "procedure", "read_function_instructions"),
173
225
  }, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
174
226
  });
175
227
  };
176
- const registerSearchCommand = (cli, logger) => {
228
+ const registerSearchCommand = (cli, logger, runDirectAnalysis) => {
177
229
  cli.command(CLI_COMMANDS.search, {
178
230
  description: "Search every analyzed string or procedure name",
179
231
  args: z.object({
180
232
  path: z.string().describe("App or program path"),
181
- pattern: z.string().min(1).describe("Literal text or regex pattern"),
233
+ pattern: z
234
+ .string()
235
+ .min(1)
236
+ .optional()
237
+ .describe("Literal text or regex pattern"),
182
238
  }),
183
239
  options: z.object({
240
+ pattern: z
241
+ .string()
242
+ .min(1)
243
+ .optional()
244
+ .describe("Complete literal text or regex pattern; use --pattern=<value> for leading dashes"),
184
245
  kind: z
185
246
  .enum(["strings", "procedures"])
186
247
  .default("strings")
@@ -203,7 +264,9 @@ const registerSearchCommand = (cli, logger) => {
203
264
  }),
204
265
  alias: { caseSensitive: "case-sensitive" },
205
266
  run: ({ args, options }) => logCliCommand(logger, "search", () => runDirectAnalysis(args.path, options.kind === "strings" ? "search_strings" : "search_procedures", {
206
- pattern: args.pattern,
267
+ pattern: resolveCliAnalysisSelector(args.pattern, options.pattern, "pattern", options.kind === "strings"
268
+ ? "search_strings"
269
+ : "search_procedures"),
207
270
  mode: options.mode,
208
271
  case_sensitive: options.caseSensitive,
209
272
  }, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
@@ -1,11 +1,10 @@
1
1
  import { z } from "incur";
2
- import { runDirectAnalysis } from "../composition/directAnalysis.js";
3
2
  import { CLI_COMMANDS } from "../cliCommandNames.js";
4
3
  import { logCliCommand } from "../cliLogging.js";
5
4
  import { directAnalysisOptions, formatSelectionOption, providerSelectionOption, } from "./options.js";
6
5
  /** Register native load-image, memory, and annotation CLI commands. */
7
- export const registerCoreNativeCommands = (cli, logger) => {
8
- registerAnnotationCommand(cli, logger);
6
+ export const registerCoreNativeCommands = (cli, logger, runDirectAnalysis) => {
7
+ registerAnnotationCommand(cli, logger, runDirectAnalysis);
9
8
  cli.command(CLI_COMMANDS.inspectNativeLoadImage, {
10
9
  description: "Verify loaded native bytes, source mappings, relocations and entry",
11
10
  args: z.object({ path: z.string().describe("Local executable path") }),
@@ -160,11 +159,11 @@ export const registerCoreNativeCommands = (cli, logger) => {
160
159
  run: ({ args, options }) => logCliCommand(logger, command, () => runDirectAnalysis(args.path, operation, { address: args.address }, directAnalysisOptions(logger, undefined, options.provider, options["target-format"]))),
161
160
  });
162
161
  }
163
- registerNativeApiCommand(cli, logger);
164
- registerNativeUiActionCommand(cli, logger);
165
- registerNativeDispatchMetadataCommand(cli, logger);
162
+ registerNativeApiCommand(cli, logger, runDirectAnalysis);
163
+ registerNativeUiActionCommand(cli, logger, runDirectAnalysis);
164
+ registerNativeDispatchMetadataCommand(cli, logger, runDirectAnalysis);
166
165
  };
167
- const registerNativeDispatchMetadataCommand = (cli, logger) => {
166
+ const registerNativeDispatchMetadataCommand = (cli, logger, runDirectAnalysis) => {
168
167
  cli.command(CLI_COMMANDS.inspectNativeDispatchMetadata, {
169
168
  description: "Inspect typed Objective-C and Swift dispatch metadata",
170
169
  args: z.object({
@@ -190,7 +189,7 @@ const registerNativeDispatchMetadataCommand = (cli, logger) => {
190
189
  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"]))),
191
190
  });
192
191
  };
193
- const registerNativeUiActionCommand = (cli, logger) => {
192
+ const registerNativeUiActionCommand = (cli, logger, runDirectAnalysis) => {
194
193
  cli.command(CLI_COMMANDS.traceNativeUiAction, {
195
194
  description: "Trace a compiled UI action selector to its native handler and direct callees",
196
195
  args: z.object({
@@ -238,7 +237,7 @@ const registerNativeUiActionCommand = (cli, logger) => {
238
237
  }, directAnalysisOptions(logger, undefined, options.provider, options["target-format"]))),
239
238
  });
240
239
  };
241
- const registerNativeApiCommand = (cli, logger) => {
240
+ const registerNativeApiCommand = (cli, logger, runDirectAnalysis) => {
242
241
  cli.command(CLI_COMMANDS.inspectNativeApi, {
243
242
  description: "Reconstruct one native function API boundary with evidence",
244
243
  args: z.object({
@@ -257,7 +256,7 @@ const registerNativeApiCommand = (cli, logger) => {
257
256
  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"]))),
258
257
  });
259
258
  };
260
- const registerAnnotationCommand = (cli, logger) => {
259
+ const registerAnnotationCommand = (cli, logger, runDirectAnalysis) => {
261
260
  cli.command(CLI_COMMANDS.annotateNativeFunction, {
262
261
  description: "Edit function annotations and return refreshed analysis",
263
262
  args: z.object({