rea-agents 5.0.0 → 6.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 (507) hide show
  1. package/README.md +168 -655
  2. package/bridge/android/ReaJadxBridge.java +14 -5
  3. package/bridge/ghidra/ReaGhidraBridge.java +173 -47
  4. package/bridge/hopper_bridge.py +310 -128
  5. package/bridge/mitmproxy/capture.py +208 -0
  6. package/bridge/native/rea_lldb_tracer.py +839 -0
  7. package/bridge/process/ProcessRunTokenReader.swift +297 -0
  8. package/bridge/process/ProcessRunTokenReaderMain.swift +35 -0
  9. package/bridge/pwndbg/core_context.py +101 -0
  10. package/bridge/pwndbg/launch.py +39 -0
  11. package/bridge/pwndbg/launch_impl.py +34 -0
  12. package/bridge/pwntools/decoder_runtime.py +59 -0
  13. package/bridge/pwntools/layout.py +39 -0
  14. package/bridge/pwntools/layout_impl.py +309 -0
  15. package/bridge/pwntools/recorded_crash.py +39 -0
  16. package/bridge/pwntools/recorded_crash_impl.py +147 -0
  17. package/dist/android/JadxConfiguration.js +196 -33
  18. package/dist/android/JadxMcpTransport.js +4 -0
  19. package/dist/android/JadxProtocol.js +6 -0
  20. package/dist/android/JadxProvider.js +20 -2
  21. package/dist/android/JadxSession.js +23 -4
  22. package/dist/application/AnalysisContextQueries.js +8 -35
  23. package/dist/application/AnalysisDocument.js +32 -0
  24. package/dist/application/AppBundleExecutable.js +67 -21
  25. package/dist/application/CallPathTracing.js +19 -3
  26. package/dist/application/CapabilityInventory.js +27 -3
  27. package/dist/application/ClientConfigurationDocument.js +871 -6
  28. package/dist/application/ClientRegistrationIdentity.js +26 -5
  29. package/dist/application/ClientRegistrationStatus.js +29 -14
  30. package/dist/application/DirectAnalysis.js +97 -33
  31. package/dist/application/Doctor.js +4 -2
  32. package/dist/application/DoctorScope.js +25 -13
  33. package/dist/application/EnhancedLiteralTracing.js +22 -25
  34. package/dist/application/EnhancedTools.js +13 -11
  35. package/dist/application/EvidenceBundleFiles.js +24 -12
  36. package/dist/application/FunctionAnalysisEvidence.js +2 -3
  37. package/dist/application/InventoryProjectionEvidence.js +4 -3
  38. package/dist/application/InvestigationProviders.js +3 -2
  39. package/dist/application/JsonFiles.js +50 -28
  40. package/dist/application/ProcedureAddressResolution.js +11 -0
  41. package/dist/application/ReconstructionCoverageService.js +7 -4
  42. package/dist/application/ReconstructionObligationCandidates.js +5 -1
  43. package/dist/application/ReconstructionObligationLedgerService.js +4 -3
  44. package/dist/application/Setup.js +13 -1
  45. package/dist/application/SetupClientConfiguration.js +10 -15
  46. package/dist/application/SetupHost.js +5 -2
  47. package/dist/application/SetupPlan.js +5 -3
  48. package/dist/application/SupportedClients.js +34 -1
  49. package/dist/application/Uninstall.js +4 -3
  50. package/dist/application/Update.js +18 -3
  51. package/dist/application/UpdateRuntime.js +46 -25
  52. package/dist/application/WebModuleTraceService.js +4 -2
  53. package/dist/application/WebNetworkCapturePort.js +1 -0
  54. package/dist/application/WebNetworkCaptureService.js +134 -0
  55. package/dist/application/WebRuntimeService.js +5 -3
  56. package/dist/application/WebScriptExportService.js +2 -2
  57. package/dist/application/WebSourceLocationService.js +4 -2
  58. package/dist/application/WindowsCapabilities.js +1 -1
  59. package/dist/application/WorkflowEvidence.js +82 -0
  60. package/dist/application/binary/AnalysisProviderEvaluation.js +21 -5
  61. package/dist/application/binary/AnalysisProviderRegistry.js +2 -0
  62. package/dist/application/binary/AnalysisSnapshotCache.js +52 -12
  63. package/dist/application/binary/BinarySession.js +131 -76
  64. package/dist/application/binary/BinarySessionOpen.js +19 -6
  65. package/dist/application/binary/BinarySessionRecords.js +45 -3
  66. package/dist/application/binary/BinarySessionStatus.js +17 -1
  67. package/dist/application/binary/CompositeProvider.js +13 -0
  68. package/dist/application/binary/LazyAnalysisProvider.js +3 -0
  69. package/dist/application/binaryDiagnostics/BinaryLayoutPort.js +1 -0
  70. package/dist/application/binaryDiagnostics/BinaryLayoutService.js +59 -0
  71. package/dist/application/binaryDiagnostics/RecordedCrashPort.js +1 -0
  72. package/dist/application/binaryDiagnostics/RecordedCrashService.js +62 -0
  73. package/dist/application/evm/EvmInterfacePort.js +1 -0
  74. package/dist/application/evm/EvmInterfaceService.js +64 -0
  75. package/dist/application/investigation/EvidenceLedger.js +21 -7
  76. package/dist/application/investigation/InvestigationRecords.js +8 -0
  77. package/dist/application/javascript/JavaScriptAnalysisControl.js +34 -0
  78. package/dist/application/javascript/JavaScriptApplicationEvidence.js +25 -5
  79. package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +19 -2
  80. package/dist/application/javascript/JavaScriptApplicationService.js +34 -14
  81. package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +5 -5
  82. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +47 -27
  83. package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +39 -7
  84. package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +26 -2
  85. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +80 -27
  86. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +33 -12
  87. package/dist/application/javascript/JavaScriptModuleRelationships.js +37 -8
  88. package/dist/application/javascript/JavaScriptRecoveryService.js +4 -2
  89. package/dist/application/javascript/JavaScriptRuntimeObservationService.js +3 -1
  90. package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +3 -3
  91. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +7 -7
  92. package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +149 -72
  93. package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +14 -15
  94. package/dist/application/javascript/JavaScriptSemanticGraphConstruction.js +41 -1
  95. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +7 -7
  96. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +5 -9
  97. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +3 -3
  98. package/dist/application/javascript/JavaScriptSemanticGraphProjection.js +118 -12
  99. package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +3 -3
  100. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +27 -5
  101. package/dist/application/managed/ManagedApplicationGraphService.js +4 -3
  102. package/dist/application/managed/ManagedMemberComparisonService.js +7 -4
  103. package/dist/application/managed/ManagedNativeVerificationService.js +4 -3
  104. package/dist/application/managed/ManagedReconstructionService.js +4 -3
  105. package/dist/application/{ProcessCli.js → process/ProcessCli.js} +23 -15
  106. package/dist/application/{ProcessEvidence.js → process/ProcessEvidence.js} +8 -7
  107. package/dist/application/workflowInputError.js +18 -0
  108. package/dist/artifacts/ArtifactProvider.js +42 -5
  109. package/dist/artifacts/ArtifactProviderMetadata.js +2 -1
  110. package/dist/artifacts/MachOSliceArtifactReader.js +98 -14
  111. package/dist/artifacts/NativeDmgArtifactReader.js +13 -6
  112. package/dist/artifacts/ZipArtifactReader.js +3 -0
  113. package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +22 -3
  114. package/dist/artifacts/apple/DylibResolutionReader.js +259 -0
  115. package/dist/artifacts/apple/InterfaceBuilderAnalysis.js +176 -56
  116. package/dist/artifacts/apple/InterfaceBuilderDecodeBudget.js +195 -0
  117. package/dist/artifacts/apple/KeyedArchiveReader.js +36 -22
  118. package/dist/artifacts/apple/MachoLoadCommandReader.js +355 -0
  119. package/dist/artifacts/apple/NibArchive.js +81 -14
  120. package/dist/artifacts/apple/NibViewHierarchy.js +10 -3
  121. package/dist/artifacts/apple/PlistNumberLiterals.js +164 -0
  122. package/dist/{application → artifacts/extraction}/ArtifactExtraction.js +10 -10
  123. package/dist/{application → artifacts/inventory}/ArtifactGraphConstruction.js +16 -11
  124. package/dist/{application → artifacts/inventory}/ArtifactInventory.js +4 -4
  125. package/dist/{application/ArtifactInventory → artifacts/inventory}/classify.js +2 -2
  126. package/dist/{application/ArtifactInventory → artifacts/inventory}/reader.js +5 -5
  127. package/dist/{application/ArtifactInventory → artifacts/inventory}/scanCanonical.js +14 -17
  128. package/dist/{application/ArtifactInventory → artifacts/inventory}/scanReader.js +5 -5
  129. package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +6 -2
  130. package/dist/artifacts/readStableArtifact.js +20 -4
  131. package/dist/browser/CdpCaptureCompleteness.js +2 -0
  132. package/dist/browser/CdpCaptureEventHandlers.js +165 -12
  133. package/dist/browser/CdpCaptureEventTypes.js +5 -1
  134. package/dist/browser/CdpCaptureEvents.js +34 -0
  135. package/dist/browser/CdpConnection.js +30 -11
  136. package/dist/browser/CdpOptionalCommand.js +2 -3
  137. package/dist/browser/CdpPageCapture.js +23 -1
  138. package/dist/browser/PlaywrightElectronActiveActions.js +32 -23
  139. package/dist/browser/PlaywrightElectronActiveProjection.js +141 -0
  140. package/dist/browser/PlaywrightElectronActiveProvider.js +130 -122
  141. package/dist/browser/WebSourceMapFetcher.js +426 -72
  142. package/dist/browser/assets/LocalWebScriptArtifacts.js +2 -2
  143. package/dist/browser/history/CaptureFailures.js +137 -0
  144. package/dist/browser/history/CaptureFormatError.js +10 -0
  145. package/dist/browser/history/CaptureRedaction.js +65 -0
  146. package/dist/browser/history/CaptureRelease.js +17 -0
  147. package/dist/browser/history/HarCapture.js +165 -0
  148. package/dist/browser/history/HarCaptureAdapter.js +20 -0
  149. package/dist/browser/history/HarCaptureProcess.js +57 -0
  150. package/dist/browser/history/HarJson.js +92 -0
  151. package/dist/browser/history/HarSchema.js +72 -0
  152. package/dist/browser/history/HistoricalCaptureDecoder.js +188 -0
  153. package/dist/browser/history/HistoricalCaptureFormatAdapter.js +1 -0
  154. package/dist/browser/history/MitmproxyCaptureAdapter.js +42 -0
  155. package/dist/cli/analysisSelector.js +23 -0
  156. package/dist/cli/applicationCommands.js +2 -3
  157. package/dist/cli/artifactCommands.js +26 -1
  158. package/dist/cli/binaryDiagnosticsCommands.js +39 -0
  159. package/dist/cli/coreAnalysisCommands.js +2 -2
  160. package/dist/cli/coreBinaryCommands.js +78 -20
  161. package/dist/cli/electronCommands.js +21 -13
  162. package/dist/cli/evmCommands.js +24 -0
  163. package/dist/cli/firmwareCommands.js +6 -3
  164. package/dist/cli/javascriptApplicationAnalysis.js +20 -3
  165. package/dist/cli/jsonOutput.js +38 -0
  166. package/dist/cli/nativeCallCommands.js +34 -0
  167. package/dist/cli/processCommands.js +1 -1
  168. package/dist/cli/streamedJsonOutput.js +56 -0
  169. package/dist/cli/utilityCommands.js +2 -0
  170. package/dist/cli/webNetworkCaptureCommands.js +40 -0
  171. package/dist/cli/webRuntimeCommands.js +8 -8
  172. package/dist/cli.js +11 -4
  173. package/dist/cliBrowserScenarioCommands.js +2 -2
  174. package/dist/cliCommandNames.js +6 -1
  175. package/dist/cliJsonInput.js +35 -1
  176. package/dist/cliOutput.js +21 -6
  177. package/dist/composition/binaryDiagnostics.js +8 -0
  178. package/dist/composition/evm.js +4 -0
  179. package/dist/composition/webNetworkCaptures.js +6 -0
  180. package/dist/config/environment.js +4 -0
  181. package/dist/config/ghidraStartupTimeout.js +17 -0
  182. package/dist/config/mcpResponseBudget.js +22 -0
  183. package/dist/config/parseConfig.js +2 -1
  184. package/dist/contracts/artifactToolContracts.js +6 -0
  185. package/dist/contracts/browserCaptureToolInputSchema.js +43 -0
  186. package/dist/contracts/browserToolContracts.js +4 -3
  187. package/dist/contracts/enhancedInputs.js +5 -3
  188. package/dist/contracts/enhancedToolContracts.js +3 -3
  189. package/dist/contracts/errorSchemas.js +8 -1
  190. package/dist/contracts/evm/evmToolContracts.js +20 -0
  191. package/dist/contracts/hopperMemoryContracts.js +2 -5
  192. package/dist/contracts/investigationExamples.js +2 -2
  193. package/dist/contracts/javascript/electronToolContracts.js +1 -1
  194. package/dist/contracts/managed/managedToolContracts.js +8 -6
  195. package/dist/contracts/native/binaryDiagnosticsToolContracts.js +42 -0
  196. package/dist/contracts/native/nativeToolContracts.js +21 -3
  197. package/dist/contracts/officialToolContracts.js +26 -24
  198. package/dist/contracts/process/processCaptureExample.js +2 -0
  199. package/dist/contracts/promptContracts.js +3 -3
  200. package/dist/contracts/sessionLifecycleInputs.js +18 -5
  201. package/dist/contracts/sessionStatusContract.js +8 -2
  202. package/dist/contracts/sessionToolContracts.js +8 -3
  203. package/dist/contracts/sessionToolSchemas.js +8 -4
  204. package/dist/contracts/toolContractExamples.js +1 -2
  205. package/dist/contracts/toolContractHelpers.js +4 -1
  206. package/dist/contracts/toolContracts.js +6 -0
  207. package/dist/contracts/toolEffects.js +30 -1
  208. package/dist/contracts/toolOutputSchemaGroups.js +33 -28
  209. package/dist/contracts/toolOutputSchemaPrimitives.js +19 -1
  210. package/dist/contracts/toolSchemaMetadata.js +69 -10
  211. package/dist/contracts/webNetworkCaptureToolContracts.js +24 -0
  212. package/dist/domain/analysisErrorBase.js +22 -2
  213. package/dist/domain/analysisErrorCore.js +61 -5
  214. package/dist/domain/analysisErrorPresentation.js +95 -12
  215. package/dist/domain/analysisErrorProjection.js +148 -19
  216. package/dist/domain/analysisSnapshot.js +166 -2
  217. package/dist/domain/android/androidAnalysis.js +2 -4
  218. package/dist/domain/android/androidApplication.js +17 -9
  219. package/dist/domain/apple/appleApplication.js +41 -14
  220. package/dist/domain/apple/dyldEnvironment.js +73 -0
  221. package/dist/domain/apple/dyldPaths.js +81 -0
  222. package/dist/domain/apple/dylibResolution.js +478 -0
  223. package/dist/domain/apple/dylibResolutionFindings.js +77 -0
  224. package/dist/domain/apple/interfaceBuilderGraph.js +25 -13
  225. package/dist/domain/apple/interfaceBuilderKeyedArchive.js +13 -3
  226. package/dist/domain/apple/keyedArchive.js +9 -1
  227. package/dist/domain/apple/machoContainer.js +54 -0
  228. package/dist/domain/apple/plistNumbers.js +76 -0
  229. package/dist/domain/artifactIdentity.js +29 -0
  230. package/dist/domain/artifactInventoryEvidence.js +19 -24
  231. package/dist/domain/artifactPathSyntax.js +1 -1
  232. package/dist/domain/bridgeCandidateProjection.js +71 -0
  233. package/dist/domain/browserCompleteness.js +1 -0
  234. package/dist/domain/browserObservation.js +1 -1
  235. package/dist/domain/browserObservationError.js +24 -5
  236. package/dist/domain/browserObservationSchemas.js +13 -0
  237. package/dist/domain/browserScenarioValues.js +5 -2
  238. package/dist/domain/bundleComparison.js +3 -2
  239. package/dist/domain/callPathSchemas.js +1 -1
  240. package/dist/domain/canonicalDigest.js +13 -1
  241. package/dist/domain/canonicalJsonDigestSteps.js +133 -0
  242. package/dist/domain/canonicalOrdering.js +9 -5
  243. package/dist/domain/changedBehavior.js +9 -9
  244. package/dist/domain/comparisonSourceEvidence.js +40 -0
  245. package/dist/domain/comparisonStatus.js +2 -30
  246. package/dist/domain/configurationErrors.js +1 -1
  247. package/dist/domain/conformanceTrustGate.js +0 -16
  248. package/dist/domain/evidence.js +78 -11
  249. package/dist/domain/evidenceBundle.js +42 -1
  250. package/dist/domain/evidenceErrors.js +12 -1
  251. package/dist/domain/evm/evmInterface.js +63 -0
  252. package/dist/domain/explicitSensitiveFailure.js +108 -0
  253. package/dist/domain/explicitSensitiveValues.js +10 -0
  254. package/dist/domain/firmware/firmwareAnalysis.js +10 -4
  255. package/dist/domain/hopperErrors.js +23 -2
  256. package/dist/domain/hopperValues.js +51 -8
  257. package/dist/domain/immutableJson.js +114 -0
  258. package/dist/domain/inputIssueProjection.js +3 -0
  259. package/dist/domain/javascript/electronActiveObservation.js +37 -6
  260. package/dist/domain/javascript/electronStaticAnalysisValues.js +6 -12
  261. package/dist/domain/javascript/htmlArtifactReferences.js +40 -0
  262. package/dist/domain/javascript/javascriptApplicationAnalysis.js +71 -23
  263. package/dist/domain/javascript/javascriptApplicationGraph.js +13 -0
  264. package/dist/domain/javascript/javascriptAstValues.js +20 -0
  265. package/dist/domain/javascript/javascriptExportShapeComparison.js +21 -5
  266. package/dist/domain/javascript/javascriptExportShapeVariants.js +0 -10
  267. package/dist/domain/javascript/javascriptRecovery.js +3 -8
  268. package/dist/domain/javascript/javascriptSemanticAnalysis.js +97 -2
  269. package/dist/domain/javascript/javascriptSemanticCoverage.js +6 -5
  270. package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +9 -17
  271. package/dist/domain/javascript/javascriptSemanticDataEffects.js +22 -5
  272. package/dist/domain/javascript/javascriptSemanticGraph.js +34 -5
  273. package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +1 -0
  274. package/dist/domain/javascript/javascriptSemanticPrimitives.js +25 -17
  275. package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -4
  276. package/dist/domain/javascript/javascriptSemanticResourceLimits.js +77 -0
  277. package/dist/domain/javascript/javascriptSemanticValues.js +83 -11
  278. package/dist/domain/javascript/javascriptSourceParser.js +6 -2
  279. package/dist/domain/javascript/javascriptStaticAnalysis.js +22 -17
  280. package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +5 -3
  281. package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +14 -4
  282. package/dist/domain/javascript/javascriptStaticAnalysisFindings.js +66 -7
  283. package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +28 -16
  284. package/dist/domain/javascript/javascriptStaticAnalysisState.js +3 -2
  285. package/dist/domain/jsonSerialization.js +109 -0
  286. package/dist/domain/jsonValue.js +91 -3
  287. package/dist/domain/localPath.js +8 -0
  288. package/dist/domain/managed/managedApplicationGraph.js +10 -10
  289. package/dist/domain/managed/managedInspectionEvidence.js +16 -0
  290. package/dist/domain/managed/managedMemberComparisonMatch.js +5 -9
  291. package/dist/domain/managed/managedNativeVerification.js +3 -9
  292. package/dist/domain/native/binaryLayout.js +357 -0
  293. package/dist/domain/native/fileOffsetPartialObservation.js +1 -0
  294. package/dist/domain/native/nativeCallObservation.js +186 -0
  295. package/dist/domain/native/nativeCallPartialObservation.js +33 -0
  296. package/dist/domain/native/objcSwiftMetadata.js +0 -39
  297. package/dist/domain/native/recordedCrash.js +266 -0
  298. package/dist/domain/native/recordedCrashNoteCoverage.js +73 -0
  299. package/dist/domain/{processCapture.js → process/processCapture.js} +143 -2
  300. package/dist/domain/{processCaptureExample.js → process/processCaptureExample.js} +5 -0
  301. package/dist/domain/process/processCaptureParsing.js +54 -0
  302. package/dist/domain/{processCaptureValidation.js → process/processCaptureValidation.js} +18 -2
  303. package/dist/domain/{processComparison.js → process/processComparison.js} +39 -5
  304. package/dist/domain/{processObservation.js → process/processObservation.js} +1 -1
  305. package/dist/domain/{processScenario.js → process/processScenario.js} +11 -10
  306. package/dist/domain/{processTraceSpecification.js → process/processTraceSpecification.js} +1 -1
  307. package/dist/domain/propertyListKeys.js +1 -1
  308. package/dist/domain/propertyListXmlText.js +19 -0
  309. package/dist/domain/providerAdapterError.js +1 -1
  310. package/dist/domain/providerOperationHealth.js +54 -0
  311. package/dist/domain/providerSelectionError.js +4 -2
  312. package/dist/domain/reconstructionVerification.js +9 -46
  313. package/dist/domain/reconstructionVerificationSchemas.js +3 -3
  314. package/dist/domain/residualUnknown.js +3 -2
  315. package/dist/domain/staticRuntimeCorrelation.js +9 -46
  316. package/dist/domain/webBundleAnalysis.js +20 -8
  317. package/dist/domain/webBundleAnalyzerInspection.js +13 -8
  318. package/dist/domain/webBundleAnalyzerResult.js +41 -2
  319. package/dist/domain/webCaptureDiff.js +1 -0
  320. package/dist/domain/webNetworkCapture.js +118 -0
  321. package/dist/domain/webNetworkCaptureCoordinates.js +58 -0
  322. package/dist/domain/webRuntime.js +19 -5
  323. package/dist/domain/webSourceLocation.js +1 -0
  324. package/dist/dotnet/ManagedExceptionRegionValidation.js +41 -0
  325. package/dist/dotnet/ManagedMemberInspector.js +4 -2
  326. package/dist/dotnet/ManagedMemberInspectorCore.js +38 -32
  327. package/dist/dotnet/ManagedMemberInstructionDecoder.js +23 -7
  328. package/dist/dotnet/ManagedMemberRows.js +14 -3
  329. package/dist/dotnet/ManagedMetadataHeaps.js +20 -2
  330. package/dist/dotnet/ManagedMetadataInventory.js +38 -28
  331. package/dist/dotnet/ManagedMetadataInventoryRows.js +24 -10
  332. package/dist/dotnet/ManagedMethodBodyReader.js +7 -1
  333. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +15 -3
  334. package/dist/dotnet/ManagedNativeBoundaryInspector.js +3 -1
  335. package/dist/dotnet/ManagedPeReader.js +11 -0
  336. package/dist/evm/EvmBytecodeCarrier.js +21 -0
  337. package/dist/evm/EvmWorkerLimits.js +40 -0
  338. package/dist/evm/EvmoleFailures.js +126 -0
  339. package/dist/evm/EvmoleInterfaceAdapter.js +53 -0
  340. package/dist/evm/EvmoleInterfaceProvider.js +273 -0
  341. package/dist/evm/EvmoleInterfaceWorker.js +87 -0
  342. package/dist/evm/EvmoleRelease.js +16 -0
  343. package/dist/firmware/FirmwareCommand.js +1 -0
  344. package/dist/firmware/FirmwareFiles.js +1 -1
  345. package/dist/generatedPackageMetadata.js +2 -2
  346. package/dist/ghidra/GhidraAnalysisProfile.js +5 -0
  347. package/dist/ghidra/GhidraClient.js +47 -14
  348. package/dist/ghidra/GhidraDiagnostics.js +7 -7
  349. package/dist/ghidra/GhidraFunctionValues.js +10 -7
  350. package/dist/ghidra/GhidraInstallation.js +18 -21
  351. package/dist/ghidra/GhidraInventoryValues.js +14 -4
  352. package/dist/ghidra/GhidraJavaLaunch.js +62 -0
  353. package/dist/ghidra/GhidraLauncher.js +34 -16
  354. package/dist/ghidra/GhidraProvider.js +2 -2
  355. package/dist/ghidra/GhidraProviderCapabilities.js +15 -3
  356. package/dist/ghidra/GhidraProviderClient.js +23 -12
  357. package/dist/ghidra/GhidraSessionError.js +11 -7
  358. package/dist/ghidra/GhidraTargetSnapshot.js +47 -12
  359. package/dist/ghidra/GhidraTransport.js +20 -0
  360. package/dist/hopper/BridgeLauncher.js +33 -11
  361. package/dist/hopper/HopperAnalysisProfile.js +62 -4
  362. package/dist/hopper/HopperCleanup.js +15 -3
  363. package/dist/hopper/HopperClient.js +222 -14
  364. package/dist/hopper/HopperFileOffset.js +237 -0
  365. package/dist/hopper/HopperMachOImage.js +196 -0
  366. package/dist/hopper/HopperOperationStage.js +6 -0
  367. package/dist/hopper/HopperProvider.js +63 -9
  368. package/dist/hopper/HopperProviderCapabilities.js +19 -1
  369. package/dist/hopper/HopperRegexSearch.js +137 -0
  370. package/dist/hopper/HopperRegexWorker.js +27 -0
  371. package/dist/hopper/HopperRequestQueue.js +68 -19
  372. package/dist/hopper/HopperTargetLease.js +3 -2
  373. package/dist/hopper/LinuxPrivateDisplayProbe.js +4 -2
  374. package/dist/inspector/JavaScriptRuntimeScope.js +9 -1
  375. package/dist/inspector/V8InspectorCaptureProjection.js +8 -3
  376. package/dist/inspector/V8InspectorProvider.js +47 -11
  377. package/dist/javascript/recovery/WakaruCommand.js +3 -0
  378. package/dist/javascript/sourceMaps/DecodedSourceMap.js +47 -0
  379. package/dist/javascript/sourceMaps/SourceMapCommand.js +17 -0
  380. package/dist/javascript/sourceMaps/SourceMapFormat.js +79 -31
  381. package/dist/javascript/sourceMaps/TraceSourceMap.js +14 -28
  382. package/dist/mcpDoctor.js +62 -2
  383. package/dist/native/AppleDispatchCoverage.js +47 -6
  384. package/dist/native/AppleDispatchDecodeFacts.js +6 -0
  385. package/dist/native/AppleDispatchMetadata.js +6 -3
  386. package/dist/native/AppleMachoFixups.js +48 -24
  387. package/dist/native/AppleMachoSelection.js +32 -16
  388. package/dist/native/AppleObjcCategories.js +6 -2
  389. package/dist/native/AppleObjcDispatchFacets.js +5 -2
  390. package/dist/native/AppleObjcProperties.js +2 -1
  391. package/dist/native/AppleSwiftDispatchFacets.js +27 -21
  392. package/dist/native/AppleSwiftVtables.js +21 -15
  393. package/dist/native/CommandRunner.js +82 -84
  394. package/dist/native/LldbCallTracer.js +541 -0
  395. package/dist/native/LldbRetainedObservations.js +178 -0
  396. package/dist/native/NativeCallObservation.js +194 -0
  397. package/dist/native/NativeMacOSProvider.js +117 -20
  398. package/dist/native/NativeMacOSProviderMetadata.js +8 -3
  399. package/dist/native/SignatureTargetBinding.js +155 -0
  400. package/dist/native/parsers/lipo.js +71 -1
  401. package/dist/native/pwndbg/PwndbgCoreContext.js +180 -0
  402. package/dist/native/pwntools/PwntoolsDecoder.js +203 -0
  403. package/dist/native/pwntools/PwntoolsFailures.js +180 -0
  404. package/dist/native/pwntools/PwntoolsLayoutProvider.js +36 -0
  405. package/dist/native/pwntools/PwntoolsRecordedCrashProvider.js +75 -0
  406. package/dist/native/pwntools/PwntoolsRelease.js +19 -0
  407. package/dist/native/pwntools/PwntoolsResourceLimits.js +76 -0
  408. package/dist/native/pwntools/RecordedCrashSourceBindings.js +46 -0
  409. package/dist/native/pwntools/RecordedCrashStructureBindings.js +103 -0
  410. package/dist/process/DarwinProcessRunTokenReader.js +293 -0
  411. package/dist/process/ExecFileOutput.js +20 -0
  412. package/dist/process/OwnedCommand.js +118 -0
  413. package/dist/process/ProcessOwnership.js +431 -51
  414. package/dist/process/ProcessOwnershipObservation.js +209 -27
  415. package/dist/process/ProviderProcess.js +68 -10
  416. package/dist/{application → process/capture}/ProcessCaptureCapability.js +15 -0
  417. package/dist/{application → process/capture}/ProcessCaptureError.js +18 -2
  418. package/dist/process/capture/ProcessCaptureLifecycle.js +681 -0
  419. package/dist/{application → process/capture}/ProcessHarness.js +195 -29
  420. package/dist/{application → process/capture}/ProcessSampling.js +2 -2
  421. package/dist/server/EvidenceMcpServer.js +146 -0
  422. package/dist/server/createServer.js +37 -8
  423. package/dist/server/promptCompletion.js +10 -3
  424. package/dist/server/registerAndroidTools.js +2 -4
  425. package/dist/server/registerApplicationTools/helpers.js +2 -4
  426. package/dist/server/registerArtifactComparisonTool.js +11 -7
  427. package/dist/server/registerBinaryDiagnosticsTools.js +15 -0
  428. package/dist/server/registerBrowserScenarioTool.js +2 -4
  429. package/dist/server/registerBrowserTools.js +2 -4
  430. package/dist/server/registerBundleComparisonTool.js +2 -3
  431. package/dist/server/registerCloseLifecycleTool.js +8 -18
  432. package/dist/server/registerElectronTools.js +2 -4
  433. package/dist/server/registerEnhancedTools.js +18 -59
  434. package/dist/server/registerEvidenceTools.js +3 -5
  435. package/dist/server/registerEvmTools.js +15 -0
  436. package/dist/server/registerFirmwareTools.js +2 -4
  437. package/dist/server/registerFunctionComparisonTool.js +10 -6
  438. package/dist/server/registerInvestigationTools.js +7 -7
  439. package/dist/server/registerJavaScriptRecoveryTool.js +2 -4
  440. package/dist/server/registerJavaScriptRuntimeObservationTools.js +2 -4
  441. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +2 -4
  442. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +2 -4
  443. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +2 -4
  444. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +2 -4
  445. package/dist/server/registerOfficialTools.js +2 -4
  446. package/dist/server/registerProcessComparisonTool.js +72 -46
  447. package/dist/server/registerRecordedCrashTools.js +15 -0
  448. package/dist/server/registerSessionRecordTools.js +5 -6
  449. package/dist/server/registerSessionStatusTool.js +17 -3
  450. package/dist/server/registerSessionTools.js +13 -5
  451. package/dist/server/registerWebModuleTool.js +2 -4
  452. package/dist/server/registerWebNetworkCaptureTool.js +26 -0
  453. package/dist/server/registerWebRuntimeTools.js +3 -7
  454. package/dist/server/registerWebScriptTool.js +2 -4
  455. package/dist/server/registerWebSourceLocationTool.js +2 -4
  456. package/dist/server/runDerivedOperation.js +15 -3
  457. package/dist/server/sessionAvailabilityPolicy.js +3 -1
  458. package/dist/server/sessionToolPolicies.js +1 -1
  459. package/dist/server/toolRegistrationOptions.js +2 -2
  460. package/dist/server/toolResult.js +63 -11
  461. package/dist/server/toolResultEncoding.js +33 -0
  462. package/install.sh +1 -1
  463. package/native/windows/build/manifest.json +2 -2
  464. package/native/windows/build/rea-windows-x64.node +0 -0
  465. package/package.json +42 -9
  466. package/scripts/electron-active-hook-boundaries.cjs +18 -20
  467. package/scripts/electron-active-hook.cjs +241 -37
  468. package/scripts/rea.mjs +11 -3
  469. package/skills/reverse-engineer-anything/SKILL.md +32 -4
  470. package/skills/reverse-engineer-anything/references/javascript-applications.md +8 -1
  471. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +29 -0
  472. package/third_party/README.md +60 -0
  473. package/third_party/evmole/LICENSE +21 -0
  474. package/third_party/evmole/README.md +22 -0
  475. package/third_party/pwndbg/LICENSE.md +21 -0
  476. package/third_party/pwndbg/README.md +23 -0
  477. package/third_party/pwntools/README.md +40 -0
  478. package/dist/application/AuthorizedArtifactInventory.js +0 -7
  479. package/dist/application/ProcessCaptureLifecycle.js +0 -299
  480. package/dist/application/StoreFileLock.js +0 -124
  481. package/dist/contracts/processCaptureExample.js +0 -2
  482. package/dist/domain/bytecodeProvider.js +0 -178
  483. package/dist/domain/customProtocolCapture.js +0 -137
  484. package/dist/domain/eventProcessTree.js +0 -225
  485. package/dist/domain/mobileApplicationInvestigation.js +0 -159
  486. package/dist/domain/packageAnalysis.js +0 -123
  487. package/dist/domain/peInspection.js +0 -197
  488. package/dist/domain/processCaptureParsing.js +0 -21
  489. package/dist/domain/protocolCapture.js +0 -217
  490. package/dist/domain/runtimeIdentification.js +0 -212
  491. package/dist/generatedMcpToolCatalog.js +0 -37
  492. package/dist/ghidra/GhidraDefaults.js +0 -2
  493. /package/dist/application/{ArtifactExtractionDestination.js → artifacts/ArtifactExtractionDestination.js} +0 -0
  494. /package/dist/{application/ArtifactInventory → artifacts/inventory}/policy.js +0 -0
  495. /package/dist/{application/ArtifactInventory → artifacts/inventory}/types.js +0 -0
  496. /package/dist/domain/{processEvidenceProvider.js → process/processEvidenceProvider.js} +0 -0
  497. /package/dist/domain/{processTraceComparison.js → process/processTraceComparison.js} +0 -0
  498. /package/dist/domain/{processTraceDimensionProjection.js → process/processTraceDimensionProjection.js} +0 -0
  499. /package/dist/domain/{processTraceEvaluation.js → process/processTraceEvaluation.js} +0 -0
  500. /package/dist/{application → process/capture}/FilesystemSnapshot.js +0 -0
  501. /package/dist/{application → process/capture}/ProcessCaptureEnvironment.js +0 -0
  502. /package/dist/{application → process/capture}/ProcessCaptureJournal.js +0 -0
  503. /package/dist/{application → process/capture}/ProcessFilesystemEffects.js +0 -0
  504. /package/dist/{application → process/capture}/ProcessNormalization.js +0 -0
  505. /package/dist/{application → process/capture}/ProcessScenarioRuntimeValidation.js +0 -0
  506. /package/dist/{application → process/capture}/ProcessTimer.js +0 -0
  507. /package/dist/{application → process/capture}/TerminalRenderer.js +0 -0
@@ -0,0 +1,188 @@
1
+ import { historicalCaptureFailure, captureMemoryFailure, } from "./CaptureFailures.js";
2
+ import { projectAnalysisError } from "../../domain/analysisErrorProjection.js";
3
+ import { randomUUID } from "node:crypto";
4
+ import { writeFile } from "node:fs/promises";
5
+ import { join } from "node:path";
6
+ import { z } from "zod";
7
+ import { readStableArtifact } from "../../artifacts/readStableArtifact.js";
8
+ import { ArtifactReaderFailure } from "../../artifacts/ArtifactReader.js";
9
+ import { AnalysisCapabilityUnavailableError, AnalysisCancelledError, AnalysisInputError, AnalysisOutputError, } from "../../domain/analysisErrorCore.js";
10
+ import { ProviderAdapterError } from "../../domain/providerAdapterError.js";
11
+ import { ProviderCleanupError } from "../../domain/providerCleanupError.js";
12
+ import { err, ok } from "../../domain/result.js";
13
+ import { WEB_NETWORK_CAPTURE_LIMITS, webNetworkCaptureSchema, } from "../../domain/webNetworkCapture.js";
14
+ import { runOwnedCommand } from "../../process/OwnedCommand.js";
15
+ import { PrivateRuntimeRoot } from "../../process/PrivateRuntimeRoot.js";
16
+ import { redactExplicitFailure } from "../../domain/explicitSensitiveFailure.js";
17
+ const OPERATION = "inspect_web_network_capture";
18
+ const decodedSchema = webNetworkCaptureSchema.omit({
19
+ artifact: true,
20
+ format: true,
21
+ runtime_attribution: true,
22
+ limitations: true,
23
+ });
24
+ const replySchema = z.discriminatedUnion("ok", [
25
+ z.strictObject({ ok: z.literal(true), value: decodedSchema }),
26
+ z.strictObject({
27
+ ok: z.literal(false),
28
+ reason: z.enum([
29
+ "format",
30
+ "unsupported",
31
+ "input-limit",
32
+ "resource-limit",
33
+ "decoder",
34
+ "limit",
35
+ ]),
36
+ message: z.string(),
37
+ pointer: z.string(),
38
+ }),
39
+ ]);
40
+ /** One owned snapshot/process/root lifecycle for replaceable historical format decoders. */
41
+ export class HistoricalCaptureDecoder {
42
+ adapters;
43
+ environment;
44
+ createRuntime;
45
+ constructor(adapters, environment, createRuntime = () => PrivateRuntimeRoot.create({ prefix: "rea-web-capture-" })) {
46
+ this.adapters = adapters;
47
+ this.environment = environment;
48
+ this.createRuntime = createRuntime;
49
+ }
50
+ /** Snapshot the selected artifact, decode it offline, and release private credentials and processes. */
51
+ async inspect(input, options) {
52
+ let runtime;
53
+ let result;
54
+ let phase = "capture-read";
55
+ try {
56
+ const adapter = this.adapters.find((candidate) => candidate.format === input.format);
57
+ if (adapter === undefined)
58
+ throw new AnalysisCapabilityUnavailableError(input.format, OPERATION, "No adapter is configured for the selected capture format.");
59
+ const snapshot = await readStableArtifact(input.capture_path, WEB_NETWORK_CAPTURE_LIMITS.inputBytes, options?.signal);
60
+ phase = "decoder";
61
+ runtime = await this.createRuntime();
62
+ const snapshotPath = join(runtime.path, "capture.snapshot");
63
+ const requestPath = join(runtime.path, "request.json");
64
+ const replyPath = join(runtime.path, "reply.json");
65
+ await writeFile(snapshotPath, snapshot.bytes, {
66
+ mode: 0o600,
67
+ flag: "wx",
68
+ ...(options?.signal === undefined ? {} : { signal: options.signal }),
69
+ });
70
+ await writeFile(requestPath, JSON.stringify({
71
+ snapshot_path: snapshotPath,
72
+ reply_path: replyPath,
73
+ sensitive_values: input.sensitive_values,
74
+ }), { mode: 0o600, flag: "wx" });
75
+ const command = await adapter.command(requestPath, runtime.path);
76
+ const environment = {
77
+ ...this.environment,
78
+ UV_THREADPOOL_SIZE: "1",
79
+ };
80
+ delete environment.NODE_OPTIONS;
81
+ await runOwnedCommand({
82
+ ...command,
83
+ runId: `rea-web-capture-${randomUUID()}`,
84
+ cwd: runtime.path,
85
+ hostEnvironment: environment,
86
+ }, {
87
+ timeoutMs: WEB_NETWORK_CAPTURE_LIMITS.timeoutMs,
88
+ diagnosticBytes: 1024 * 1024,
89
+ }, options?.signal === undefined ? {} : { signal: options.signal });
90
+ let reply;
91
+ try {
92
+ const replyFile = await readStableArtifact(replyPath, WEB_NETWORK_CAPTURE_LIMITS.outputBytes, options?.signal);
93
+ reply = replySchema.parse(JSON.parse(replyFile.bytes.toString("utf8")));
94
+ }
95
+ catch (cause) {
96
+ if (options?.signal?.aborted)
97
+ throw new AnalysisCancelledError(OPERATION);
98
+ throw new AnalysisOutputError(OPERATION, `Owned capture decoder reply failed for ${input.capture_path}: ${replyFailureReason(cause)}`, { cause });
99
+ }
100
+ if (!reply.ok) {
101
+ if (reply.reason === "format")
102
+ throw new AnalysisInputError(OPERATION, undefined, [
103
+ {
104
+ path: ["capture_path", reply.pointer],
105
+ reason: "invalid_format",
106
+ message: reply.message,
107
+ },
108
+ ]);
109
+ if (reply.reason === "input-limit")
110
+ throw new AnalysisInputError(OPERATION, undefined, [
111
+ {
112
+ path: ["capture_path", reply.pointer],
113
+ reason: "out_of_range",
114
+ message: reply.message,
115
+ expected: {
116
+ maximum_capture_nesting: WEB_NETWORK_CAPTURE_LIMITS.depth,
117
+ },
118
+ },
119
+ ]);
120
+ if (reply.reason === "resource-limit")
121
+ throw captureMemoryFailure(input, reply.message);
122
+ if (reply.reason === "decoder")
123
+ throw new ProviderAdapterError(input.format, OPERATION, {
124
+ diagnostics: {
125
+ phase: "decoder",
126
+ failure_kind: reply.reason,
127
+ reason: reply.message,
128
+ pointer: reply.pointer,
129
+ },
130
+ });
131
+ if (reply.reason === "unsupported")
132
+ throw new AnalysisCapabilityUnavailableError(input.format, OPERATION, reply.message);
133
+ throw new AnalysisOutputError(OPERATION, reply.message);
134
+ }
135
+ if (reply.value.decoder.id !== adapter.identity.id ||
136
+ reply.value.decoder.name !== adapter.identity.name ||
137
+ reply.value.decoder.version !== adapter.identity.version)
138
+ throw new AnalysisOutputError(OPERATION, "Capture decoder changed the selected upstream profile identity.");
139
+ result = ok({
140
+ ...reply.value,
141
+ artifact: {
142
+ path: input.capture_path,
143
+ sha256: snapshot.sha256,
144
+ bytes: snapshot.bytes.length,
145
+ },
146
+ format: input.format,
147
+ runtime_attribution: "unknown",
148
+ limitations: [
149
+ "This is retained producer evidence, without live browser transaction IDs, scenario provenance, execution attribution or deployment authenticity. Recorded URLs are never fetched.",
150
+ "Every record is decoded before selection; no partial success is returned on malformed input or a resource limit.",
151
+ "Known authentication headers/cookies and explicitly marked literal values are excluded. Unknown extension names do not establish sensitivity.",
152
+ "A 32 MiB input, 96 MiB reply and 64-level nesting budget bound complete evidence. HAR uses a 192 MiB Node old-generation heap; native decoding uses a 768 MiB Linux address-space limit. Each owned command has a 30-second deadline with independent cleanup.",
153
+ ],
154
+ });
155
+ }
156
+ catch (cause) {
157
+ result = err(redactExplicitFailure(historicalCaptureFailure(input, cause, phase, options), input.sensitive_values));
158
+ }
159
+ if (runtime !== undefined) {
160
+ try {
161
+ await runtime.close();
162
+ }
163
+ catch (cause) {
164
+ return err(redactExplicitFailure(new ProviderCleanupError(input.format, [runtime.path], {
165
+ capture_path: input.capture_path,
166
+ previous_error: result.ok
167
+ ? null
168
+ : projectAnalysisError(result.error),
169
+ reason: cause instanceof Error ? cause.message : String(cause),
170
+ }, { operation: OPERATION }), input.sensitive_values));
171
+ }
172
+ }
173
+ return result.ok && options?.signal?.aborted
174
+ ? err(new AnalysisCancelledError(OPERATION))
175
+ : result;
176
+ }
177
+ }
178
+ const replyFailureReason = (cause) => {
179
+ if (cause instanceof ArtifactReaderFailure)
180
+ return cause.message;
181
+ if (cause instanceof z.ZodError)
182
+ return `Reply violates its schema at ${cause.issues[0]?.path.map(String).join(".") ?? "root"}.`;
183
+ if (cause instanceof SyntaxError)
184
+ return "Reply is malformed JSON.";
185
+ if (cause instanceof Error && "code" in cause)
186
+ return `Reply file could not be read (${String(cause.code)}).`;
187
+ return "Reply could not be validated.";
188
+ };
@@ -0,0 +1,42 @@
1
+ import { access } from "node:fs/promises";
2
+ import { constants } from "node:fs";
3
+ import { isAbsolute } from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ import { AnalysisCapabilityUnavailableError } from "../../domain/analysisErrorCore.js";
6
+ import { MITMPROXY_CAPTURE_PROVIDER_IDENTITY } from "./CaptureRelease.js";
7
+ const OPERATION = "inspect_web_network_capture";
8
+ /** Native mitmproxy decoding is offline and uses only an explicitly configured Linux tool. */
9
+ export class MitmproxyCaptureAdapter {
10
+ environment;
11
+ format = "mitmproxy";
12
+ identity = MITMPROXY_CAPTURE_PROVIDER_IDENTITY;
13
+ constructor(environment) {
14
+ this.environment = environment;
15
+ }
16
+ async command(requestPath, runtimePath) {
17
+ const command = this.environment.REA_MITMDUMP_COMMAND;
18
+ if (process.platform !== "linux" ||
19
+ command === undefined ||
20
+ !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
+ try {
23
+ await access(command, constants.R_OK | constants.X_OK);
24
+ }
25
+ catch (cause) {
26
+ throw new AnalysisCapabilityUnavailableError("mitmproxy", OPERATION, `Configured mitmdump executable is unavailable: ${command}.`, { cause });
27
+ }
28
+ return {
29
+ command,
30
+ arguments: [
31
+ "--no-server",
32
+ "-q",
33
+ "--set",
34
+ `confdir=${runtimePath}`,
35
+ "--set",
36
+ `rea_request_path=${requestPath}`,
37
+ "-s",
38
+ fileURLToPath(new URL("../../../bridge/mitmproxy/capture.py", import.meta.url)),
39
+ ],
40
+ };
41
+ }
42
+ }
@@ -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
+ };
@@ -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,6 +1,6 @@
1
1
  import { z } from "incur";
2
2
  import { runProviderAnalysis } from "../composition/directAnalysis.js";
3
- import { createArtifactExtractionDestination } from "../application/ArtifactExtractionDestination.js";
3
+ import { createArtifactExtractionDestination } from "../application/artifacts/ArtifactExtractionDestination.js";
4
4
  import { logCliCommand } from "../cliLogging.js";
5
5
  import { CLI_COMMANDS } from "../cliCommandNames.js";
6
6
  export const registerArtifactCommands = (cli, logger) => {
@@ -8,6 +8,7 @@ export const registerArtifactCommands = (cli, logger) => {
8
8
  registerExtractionCommand(cli, logger);
9
9
  registerInterfaceBuilderCommand(cli, logger);
10
10
  registerAssetCatalogCommand(cli, logger);
11
+ registerDylibResolutionCommand(cli, logger);
11
12
  cli.command(CLI_COMMANDS.inspectKeyedArchive, {
12
13
  description: "Inspect a Foundation keyed archive as an object-reference graph",
13
14
  args: z.object({
@@ -41,6 +42,30 @@ export const registerArtifactCommands = (cli, logger) => {
41
42
  }, logger)),
42
43
  });
43
44
  };
45
+ const registerDylibResolutionCommand = (cli, logger) => {
46
+ cli.command(CLI_COMMANDS.traceDylibResolution, {
47
+ description: "Trace dyld load-path resolution for a Mach-O or every executable in an app bundle",
48
+ args: z.object({
49
+ path: z.string().describe("Mach-O file or Apple .app bundle path"),
50
+ }),
51
+ options: z.object({
52
+ root: z
53
+ .array(z.string())
54
+ .optional()
55
+ .describe("Process root relative to the bundle or the Mach-O's directory (repeatable)"),
56
+ architecture: z
57
+ .enum(["arm64", "arm64e", "x86_64"])
58
+ .optional()
59
+ .describe("Trace only this slice of each root"),
60
+ }),
61
+ run: ({ args, options }) => logCliCommand(logger, CLI_COMMANDS.traceDylibResolution, () => runProviderAnalysis(args.path, "trace_dylib_resolution", {
62
+ ...(options.root === undefined ? {} : { roots: options.root }),
63
+ ...(options.architecture === undefined
64
+ ? {}
65
+ : { architecture: options.architecture }),
66
+ }, logger)),
67
+ });
68
+ };
44
69
  const registerAssetCatalogCommand = (cli, logger) => {
45
70
  cli.command(CLI_COMMANDS.inspectAssetCatalog, {
46
71
  description: "Inspect compiled Apple asset catalog metadata",
@@ -0,0 +1,39 @@
1
+ import { z } from "incur";
2
+ import { resolve } from "node:path";
3
+ import { createRecordedCrashService, createBinaryLayoutService, } from "../composition/binaryDiagnostics.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
+ /** Inspect operator-selected files through the same shared workflow as MCP. */
9
+ export const registerBinaryDiagnosticsCommands = (cli, logger, environment) => {
10
+ const service = createBinaryLayoutService(environment);
11
+ cli.command(CLI_COMMANDS.inspectBinaryLayout, {
12
+ description: "Inspect binary file/linked layout without executing the selected object",
13
+ args: z.object({
14
+ path: z.string().describe("Local ELF binary or relocatable object"),
15
+ }),
16
+ run: ({ args }) => withCommandCancellation((signal) => logCliCommand(logger, CLI_COMMANDS.inspectBinaryLayout, async () => {
17
+ const result = await service.inspect({ path: resolve(args.path) }, { signal });
18
+ return result.ok ? result.value : projectAnalysisError(result.error);
19
+ })),
20
+ });
21
+ const recorded = createRecordedCrashService(environment);
22
+ cli.command(CLI_COMMANDS.inspectRecordedCrash, {
23
+ description: "Inspect supplied core registers/signals and optional debugger mapping evidence",
24
+ args: z.object({ path: z.string().describe("Local Linux amd64 ELF core") }),
25
+ options: z.object({
26
+ debuggerContext: z
27
+ .boolean()
28
+ .default(false)
29
+ .describe("Add BYO core-only GDB/pwndbg mapping candidates"),
30
+ }),
31
+ run: ({ args, options }) => withCommandCancellation((signal) => logCliCommand(logger, CLI_COMMANDS.inspectRecordedCrash, async () => {
32
+ const result = await recorded.inspect({
33
+ path: resolve(args.path),
34
+ include_debugger_context: options.debuggerContext,
35
+ }, { signal });
36
+ return result.ok ? result.value : projectAnalysisError(result.error);
37
+ })),
38
+ });
39
+ };
@@ -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) => {
5
- registerCoreBinaryCommands(cli, logger);
4
+ export const registerCoreAnalysisCommands = (cli, logger, resultOutput) => {
5
+ registerCoreBinaryCommands(cli, logger, resultOutput);
6
6
  registerCoreNativeCommands(cli, logger);
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 { resolveCliAnalysisSelector } from "./analysisSelector.js";
4
5
  import { runDirectAnalysis } from "../composition/directAnalysis.js";
5
6
  import { CLI_COMMANDS } from "../cliCommandNames.js";
6
7
  import { logCliCommand } from "../cliLogging.js";
7
8
  import { directAnalysisOptions, formatSelectionOption, providerSelectionOption, } from "./options.js";
8
9
  import { runCliJavaScriptApplicationAnalysis } from "./javascriptApplicationAnalysis.js";
9
10
  /** Register provider-neutral binary overview and procedure CLI commands. */
10
- export const registerCoreBinaryCommands = (cli, logger) => {
11
- registerOverviewCommands(cli, logger);
11
+ export const registerCoreBinaryCommands = (cli, logger, resultOutput) => {
12
+ registerOverviewCommands(cli, logger, resultOutput);
13
+ registerDecompileCommand(cli, logger);
12
14
  registerFunctionCommand(cli, logger);
13
15
  registerInstructionsCommand(cli, logger);
14
16
  registerSearchCommand(cli, logger);
15
17
  registerXrefsCommand(cli, logger);
16
18
  registerTraceCommand(cli, logger);
17
19
  };
18
- const registerOverviewCommands = (cli, logger) => {
20
+ const registerOverviewCommands = (cli, logger, resultOutput) => {
19
21
  const overviewOptions = z.object({
20
22
  snapshot: z
21
23
  .string()
@@ -31,7 +33,9 @@ const registerOverviewCommands = (cli, logger) => {
31
33
  path: z.string().describe("App, program, or analysis database path"),
32
34
  }),
33
35
  options: overviewOptions,
34
- run: ({ args, options }) => logCliCommand(logger, "analyze", () => runRoutedOverview(args.path, options, logger)),
36
+ run: ({ args, options, format }) => logCliCommand(logger, "analyze", () => runRoutedOverview(args.path, options, logger, resultOutput === undefined
37
+ ? undefined
38
+ : { output: resultOutput, command: CLI_COMMANDS.analyze, format })),
35
39
  });
36
40
  cli.command(CLI_COMMANDS.inspect, {
37
41
  description: "Inspect an app overview with evidence",
@@ -41,13 +45,24 @@ const registerOverviewCommands = (cli, logger) => {
41
45
  options: overviewOptions,
42
46
  run: ({ args, options }) => logCliCommand(logger, "inspect", () => runDirectAnalysis(args.path, "binary_overview", {}, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
43
47
  });
48
+ };
49
+ const registerDecompileCommand = (cli, logger) => {
44
50
  cli.command(CLI_COMMANDS.decompile, {
45
51
  description: "Read one part of an app as code",
46
52
  args: z.object({
47
53
  path: z.string().describe("App or program path"),
48
- address: z.string().describe("Procedure address"),
54
+ address: z
55
+ .string()
56
+ .min(1)
57
+ .optional()
58
+ .describe("Procedure name or address"),
49
59
  }),
50
60
  options: z.object({
61
+ procedure: z
62
+ .string()
63
+ .min(1)
64
+ .optional()
65
+ .describe("Procedure name or address; use --procedure=<value> for leading dashes"),
51
66
  snapshot: z
52
67
  .string()
53
68
  .min(1)
@@ -56,17 +71,17 @@ const registerOverviewCommands = (cli, logger) => {
56
71
  "target-format": formatSelectionOption,
57
72
  provider: providerSelectionOption,
58
73
  }),
59
- run: ({ args, options }) => logCliCommand(logger, "decompile", () => runDirectAnalysis(args.path, "procedure_pseudo_code", { procedure: args.address }, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
74
+ run: ({ args, options }) => logCliCommand(logger, "decompile", () => runDirectAnalysis(args.path, "procedure_pseudo_code", {
75
+ procedure: resolveCliAnalysisSelector(args.address, options.procedure, "procedure", "procedure_pseudo_code"),
76
+ }, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
60
77
  });
61
78
  };
62
- const runRoutedOverview = async (path, options, logger) => {
79
+ const runRoutedOverview = async (path, options, logger, output) => {
63
80
  if (options.provider === undefined &&
64
81
  options.snapshot === undefined &&
65
82
  options["target-format"] === undefined &&
66
83
  (await isJavaScriptApplicationPath(path)))
67
- return runCliJavaScriptApplicationAnalysis({
68
- input_path: resolve(path),
69
- });
84
+ return runCliJavaScriptApplicationAnalysis({ input_path: resolve(path) }, output);
70
85
  return runDirectAnalysis(path, "binary_overview", {}, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]));
71
86
  };
72
87
  const isJavaScriptApplicationPath = async (path) => {
@@ -90,9 +105,14 @@ const registerXrefsCommand = (cli, logger) => {
90
105
  description: "List bounded references to an analyzed address",
91
106
  args: z.object({
92
107
  path: z.string().describe("App or program path"),
93
- address: z.string().describe("Hexadecimal address"),
108
+ address: z.string().min(1).optional().describe("Address or symbol name"),
94
109
  }),
95
110
  options: z.object({
111
+ address: z
112
+ .string()
113
+ .min(1)
114
+ .optional()
115
+ .describe("Address or symbol name; use --address=<value> for leading dashes"),
96
116
  snapshot: z
97
117
  .string()
98
118
  .min(1)
@@ -101,7 +121,9 @@ const registerXrefsCommand = (cli, logger) => {
101
121
  "target-format": formatSelectionOption,
102
122
  provider: providerSelectionOption,
103
123
  }),
104
- run: ({ args, options }) => logCliCommand(logger, "xrefs", () => runDirectAnalysis(args.path, "xrefs", { address: args.address }, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
124
+ run: ({ args, options }) => logCliCommand(logger, "xrefs", () => runDirectAnalysis(args.path, "xrefs", {
125
+ address: resolveCliAnalysisSelector(args.address, options.address, "address", "xrefs"),
126
+ }, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
105
127
  });
106
128
  };
107
129
  const registerTraceCommand = (cli, logger) => {
@@ -109,9 +131,14 @@ const registerTraceCommand = (cli, logger) => {
109
131
  description: "Trace a literal feature through analyzed references",
110
132
  args: z.object({
111
133
  path: z.string().describe("App or program path"),
112
- query: z.string().min(1).describe("Literal feature query"),
134
+ query: z.string().min(1).optional().describe("Literal feature query"),
113
135
  }),
114
136
  options: z.object({
137
+ query: z
138
+ .string()
139
+ .min(1)
140
+ .optional()
141
+ .describe("Complete literal feature query; use --query=<value> for leading dashes"),
115
142
  caseSensitive: z
116
143
  .boolean()
117
144
  .default(false)
@@ -128,7 +155,7 @@ const registerTraceCommand = (cli, logger) => {
128
155
  caseSensitive: "case-sensitive",
129
156
  },
130
157
  run: ({ args, options }) => logCliCommand(logger, "trace", () => runDirectAnalysis(args.path, "trace_feature", {
131
- query: args.query,
158
+ query: resolveCliAnalysisSelector(args.query, options.query, "query", "trace_feature"),
132
159
  case_sensitive: options.caseSensitive,
133
160
  }, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
134
161
  });
@@ -138,9 +165,18 @@ const registerFunctionCommand = (cli, logger) => {
138
165
  description: "Analyze one complete function with evidence",
139
166
  args: z.object({
140
167
  path: z.string().describe("App or program path"),
141
- address: z.string().describe("Procedure name or address"),
168
+ address: z
169
+ .string()
170
+ .min(1)
171
+ .optional()
172
+ .describe("Procedure name or address"),
142
173
  }),
143
174
  options: z.object({
175
+ procedure: z
176
+ .string()
177
+ .min(1)
178
+ .optional()
179
+ .describe("Procedure name or address; use --procedure=<value> for leading dashes"),
144
180
  snapshot: z
145
181
  .string()
146
182
  .min(1)
@@ -149,7 +185,9 @@ const registerFunctionCommand = (cli, logger) => {
149
185
  "target-format": formatSelectionOption,
150
186
  provider: providerSelectionOption,
151
187
  }),
152
- run: ({ args, options }) => logCliCommand(logger, "function", () => runDirectAnalysis(args.path, "analyze_function", { procedure: args.address }, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
188
+ run: ({ args, options }) => logCliCommand(logger, "function", () => runDirectAnalysis(args.path, "analyze_function", {
189
+ procedure: resolveCliAnalysisSelector(args.address, options.procedure, "procedure", "analyze_function"),
190
+ }, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
153
191
  });
154
192
  };
155
193
  const registerInstructionsCommand = (cli, logger) => {
@@ -157,9 +195,18 @@ const registerInstructionsCommand = (cli, logger) => {
157
195
  description: "Read every raw instruction without decompiling",
158
196
  args: z.object({
159
197
  path: z.string().describe("App or program path"),
160
- address: z.string().describe("Procedure name or address"),
198
+ address: z
199
+ .string()
200
+ .min(1)
201
+ .optional()
202
+ .describe("Procedure name or address"),
161
203
  }),
162
204
  options: z.object({
205
+ procedure: z
206
+ .string()
207
+ .min(1)
208
+ .optional()
209
+ .describe("Procedure name or address; use --procedure=<value> for leading dashes"),
163
210
  snapshot: z
164
211
  .string()
165
212
  .min(1)
@@ -169,7 +216,7 @@ const registerInstructionsCommand = (cli, logger) => {
169
216
  provider: providerSelectionOption,
170
217
  }),
171
218
  run: ({ args, options }) => logCliCommand(logger, CLI_COMMANDS.instructions, () => runDirectAnalysis(args.path, "read_function_instructions", {
172
- procedure: args.address,
219
+ procedure: resolveCliAnalysisSelector(args.address, options.procedure, "procedure", "read_function_instructions"),
173
220
  }, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
174
221
  });
175
222
  };
@@ -178,9 +225,18 @@ const registerSearchCommand = (cli, logger) => {
178
225
  description: "Search every analyzed string or procedure name",
179
226
  args: z.object({
180
227
  path: z.string().describe("App or program path"),
181
- pattern: z.string().min(1).describe("Literal text or regex pattern"),
228
+ pattern: z
229
+ .string()
230
+ .min(1)
231
+ .optional()
232
+ .describe("Literal text or regex pattern"),
182
233
  }),
183
234
  options: z.object({
235
+ pattern: z
236
+ .string()
237
+ .min(1)
238
+ .optional()
239
+ .describe("Complete literal text or regex pattern; use --pattern=<value> for leading dashes"),
184
240
  kind: z
185
241
  .enum(["strings", "procedures"])
186
242
  .default("strings")
@@ -203,7 +259,9 @@ const registerSearchCommand = (cli, logger) => {
203
259
  }),
204
260
  alias: { caseSensitive: "case-sensitive" },
205
261
  run: ({ args, options }) => logCliCommand(logger, "search", () => runDirectAnalysis(args.path, options.kind === "strings" ? "search_strings" : "search_procedures", {
206
- pattern: args.pattern,
262
+ pattern: resolveCliAnalysisSelector(args.pattern, options.pattern, "pattern", options.kind === "strings"
263
+ ? "search_strings"
264
+ : "search_procedures"),
207
265
  mode: options.mode,
208
266
  case_sensitive: options.caseSensitive,
209
267
  }, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),