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
@@ -1,18 +1,124 @@
1
1
  import { compareCodePoints } from "../../domain/canonicalOrdering.js";
2
2
  import { JAVASCRIPT_SEMANTIC_RELATION_FAMILIES } from "../../domain/javascript/javascriptSemanticGraphSchemas.js";
3
- /** Find the innermost callable that contains one exact source range. */
4
- export const owningSemanticCallableNode = (location, ir, nodes) => {
5
- if (location === null)
6
- return undefined;
7
- return ir.callables
8
- .filter((callable) => contains(callable.location, location))
9
- .sort((left, right) => compareCodePoints(positionKey(right.location), positionKey(left.location)))
10
- .map(({ callableId }) => nodes.get(callableId))
11
- .find((node) => node !== undefined);
3
+ /** Index one immutable file IR; read retained callable membership at query time. */
4
+ export const createSemanticCallableOwnerLookup = (ir, nodes) => {
5
+ const entries = ir.callables
6
+ .map((callable, order) => ({
7
+ callableId: callable.callableId,
8
+ range: callable.location,
9
+ order,
10
+ priority: positionKey(callable.location),
11
+ }))
12
+ .sort((left, right) => pointCompare(left.range.start, right.range.start) ||
13
+ left.order - right.order);
14
+ const tree = buildSourceIntervalTree(entries, 0, entries.length);
15
+ return (location) => {
16
+ if (location === null || tree === null || nodes.size === 0)
17
+ return undefined;
18
+ const pending = [tree];
19
+ let best;
20
+ let result;
21
+ while (pending.length > 0) {
22
+ const current = pending.pop();
23
+ if (current === undefined ||
24
+ pointCompare(current.minimumStart, location.start) > 0 ||
25
+ pointCompare(current.maximumEnd, location.end) < 0)
26
+ continue;
27
+ const candidate = current.entry;
28
+ if (contains(candidate.range, location)) {
29
+ const node = nodes.get(candidate.callableId);
30
+ const rank = best === undefined
31
+ ? 1
32
+ : compareCodePoints(candidate.priority, best.priority) ||
33
+ best.order - candidate.order;
34
+ if (node !== undefined && rank > 0) {
35
+ best = candidate;
36
+ result = node;
37
+ }
38
+ }
39
+ if (current.left !== null)
40
+ pending.push(current.left);
41
+ if (current.right !== null)
42
+ pending.push(current.right);
43
+ }
44
+ return result;
45
+ };
12
46
  };
13
- /** Find retained semantic nodes whose exact ranges are within one expression. */
14
- export const semanticNodesWithinRange = (nodes, range) => nodes.filter((node) => node.identity.source_range !== null &&
15
- contains(range, node.identity.source_range));
47
+ const buildSourceIntervalTree = (entries, start, end) => {
48
+ if (start >= end)
49
+ return null;
50
+ const middle = Math.floor((start + end) / 2);
51
+ const entry = entries[middle];
52
+ if (entry === undefined)
53
+ return null;
54
+ // This recursion follows a balanced index, not the producer's nesting depth.
55
+ const left = buildSourceIntervalTree(entries, start, middle);
56
+ const right = buildSourceIntervalTree(entries, middle + 1, end);
57
+ let minimumEnd = entry.range.end;
58
+ let maximumEnd = entry.range.end;
59
+ for (const child of [left, right]) {
60
+ if (child !== null && pointCompare(child.minimumEnd, minimumEnd) < 0)
61
+ minimumEnd = child.minimumEnd;
62
+ if (child !== null && pointCompare(child.maximumEnd, maximumEnd) > 0)
63
+ maximumEnd = child.maximumEnd;
64
+ }
65
+ return {
66
+ entry,
67
+ minimumStart: left?.minimumStart ?? entry.range.start,
68
+ maximumStart: right?.maximumStart ?? entry.range.start,
69
+ minimumEnd,
70
+ maximumEnd,
71
+ left,
72
+ right,
73
+ };
74
+ };
75
+ /** Index an immutable node list; return contained ranges in producer order. */
76
+ export const createSemanticNodeRangeLookup = (nodes) => {
77
+ const entries = nodes
78
+ .flatMap((node, order) => {
79
+ const range = node.identity.source_range;
80
+ return range === null ? [] : [{ node, range, order }];
81
+ })
82
+ .sort((left, right) => pointCompare(left.range.start, right.range.start) ||
83
+ left.order - right.order);
84
+ const tree = buildSourceIntervalTree(entries, 0, entries.length);
85
+ return (range) => {
86
+ if (tree === null)
87
+ return [];
88
+ const pending = [tree];
89
+ const matches = [];
90
+ while (pending.length > 0) {
91
+ const current = pending.pop();
92
+ if (current === undefined ||
93
+ pointCompare(current.maximumStart, range.start) < 0 ||
94
+ pointCompare(current.minimumEnd, range.end) > 0)
95
+ continue;
96
+ if (contains(range, current.entry.range))
97
+ matches.push(current.entry);
98
+ if (current.left !== null)
99
+ pending.push(current.left);
100
+ if (current.right !== null)
101
+ pending.push(current.right);
102
+ }
103
+ return matches
104
+ .sort((left, right) => left.order - right.order)
105
+ .map(({ node }) => node);
106
+ };
107
+ };
108
+ /** Index exact call ranges, preserving the first producer occurrence. */
109
+ export const createSemanticCallSiteLookup = (ir, nodes) => {
110
+ const identifiers = new Map();
111
+ for (const call of ir.callSites) {
112
+ const key = rangeKey(call.location);
113
+ if (!identifiers.has(key))
114
+ identifiers.set(key, call.callSiteId);
115
+ }
116
+ return (range) => {
117
+ const identifier = identifiers.get(rangeKey(range));
118
+ return identifier === undefined ? undefined : nodes.get(identifier);
119
+ };
120
+ };
121
+ const rangeKey = (range) => `${range.start.line}:${range.start.column}-${range.end.line}:${range.end.column}`;
16
122
  /** Report extractor support without treating missing families as absence. */
17
123
  export const semanticFamilyStatus = (family, analysis) => {
18
124
  if (![
@@ -1,5 +1,5 @@
1
1
  import { createJavaScriptSemanticGraphUnknown } from "../../domain/javascript/javascriptSemanticGraph.js";
2
- import { addSemanticGraphNode, addSemanticGraphRelation, addSemanticGraphUnknown, constructSemanticGraphNode, } from "./JavaScriptSemanticGraphConstruction.js";
2
+ import { retainSemanticGraphNode, addSemanticGraphRelation, addSemanticGraphUnknown, } from "./JavaScriptSemanticGraphConstruction.js";
3
3
  import { unknownSemanticEvidence } from "./JavaScriptSemanticGraphEvidence.js";
4
4
  import { semanticCallSiteAt, } from "./JavaScriptSemanticGraphFlowProjection.js";
5
5
  /** Project built-in resource acquisition and exact local release handles. */
@@ -21,7 +21,7 @@ export const projectSemanticResources = (context) => {
21
21
  else
22
22
  projectRelease(context, operation, resourceNodes);
23
23
  };
24
- const addResourceNode = (context, operation) => addSemanticGraphNode(context.state, constructSemanticGraphNode(context.file, {
24
+ const addResourceNode = (context, operation) => retainSemanticGraphNode(context.state, context.file, {
25
25
  kind: "resource",
26
26
  roleKey: operation.resourceId,
27
27
  location: operation.location,
@@ -31,7 +31,7 @@ const addResourceNode = (context, operation) => addSemanticGraphNode(context.sta
31
31
  : (context.callableNodes.get(operation.ownerCallableId)?.node_id ??
32
32
  null),
33
33
  properties: { method: operation.method },
34
- }, context.state));
34
+ });
35
35
  const projectRelease = (context, operation, resourceNodes) => {
36
36
  const callSite = semanticCallSiteAt(context, operation.location);
37
37
  const resources = operation.linkedResourceIds.flatMap((identifier) => {
@@ -1,4 +1,6 @@
1
- import { addSemanticGraphNode, addSemanticGraphRelation, constructSemanticGraphNode, } from "./JavaScriptSemanticGraphConstruction.js";
1
+ import { createJavaScriptSemanticGraphUnknown } from "../../domain/javascript/javascriptSemanticGraph.js";
2
+ import { retainSemanticGraphNode, addSemanticGraphRelation, addSemanticGraphUnknown, } from "./JavaScriptSemanticGraphConstruction.js";
3
+ import { observedSemanticEvidence } from "./JavaScriptSemanticGraphEvidence.js";
2
4
  /** Project bounded literal values and object slots for exact query seeds. */
3
5
  export const projectSemanticValues = (context) => {
4
6
  for (const binding of context.ir.bindings) {
@@ -54,17 +56,37 @@ const projectValue = (input) => {
54
56
  role: `property:${property.name}`,
55
57
  });
56
58
  }
59
+ else if (value.status === "unknown" && value.resourceLimit !== undefined) {
60
+ const location = binding.definitions[0]?.location ?? null;
61
+ const evidence = observedSemanticEvidence(context.file, location);
62
+ const isPropertyValue = role.startsWith("property:");
63
+ addSemanticGraphUnknown(context.state, createJavaScriptSemanticGraphUnknown({
64
+ node_id: target.node_id,
65
+ family: isPropertyValue ? "object-flow" : "data-flow",
66
+ relation_kinds: [isPropertyValue ? "writes-property" : "defines"],
67
+ reason: "resource-limit",
68
+ detail: `${value.reason} Unknown value at ${role}.`,
69
+ candidate_node_ids: [target.node_id],
70
+ evidence: {
71
+ ...evidence,
72
+ authority: "unknown",
73
+ state: "unknown",
74
+ confidence: "unknown",
75
+ limitations: [value.reason],
76
+ },
77
+ }));
78
+ }
57
79
  };
58
- const addLiteralNode = (context, binding, value, role) => addSemanticGraphNode(context.state, constructSemanticGraphNode(context.file, {
80
+ const addLiteralNode = (context, binding, value, role) => retainSemanticGraphNode(context.state, context.file, {
59
81
  kind: "literal",
60
82
  roleKey: `literal:${binding.bindingId}:${role}:${JSON.stringify(value)}`,
61
83
  location: binding.definitions[0]?.location ?? null,
62
84
  label: JSON.stringify(value),
63
85
  functionNodeId: context.bindingNodes.get(binding.bindingId)?.function_node_id ?? null,
64
86
  properties: { value },
65
- }, context.state));
87
+ });
66
88
  /** Create one canonical property slot for a binding/property identity. */
67
- export const semanticPropertySlot = (context, objectBindingId, name) => addSemanticGraphNode(context.state, constructSemanticGraphNode(context.file, {
89
+ export const semanticPropertySlot = (context, objectBindingId, name) => retainSemanticGraphNode(context.state, context.file, {
68
90
  kind: "property-slot",
69
91
  roleKey: `property:${objectBindingId}:${name}`,
70
92
  location: null,
@@ -74,4 +96,4 @@ export const semanticPropertySlot = (context, objectBindingId, name) => addSeman
74
96
  name,
75
97
  object_binding_id: objectBindingId,
76
98
  },
77
- }, context.state));
99
+ });
@@ -1,24 +1,25 @@
1
1
  import { z } from "zod";
2
- import { AnalysisInputError, AnalysisProtocolError, } from "../../domain/analysisErrorCore.js";
2
+ import { AnalysisProtocolError } from "../../domain/analysisErrorCore.js";
3
3
  import {} from "../../domain/analysisErrorBase.js";
4
4
  import { createEvidence } from "../../domain/evidence.js";
5
5
  import { jsonValueSchema } from "../../domain/jsonValue.js";
6
6
  import { managedApplicationGraphResultSchema, projectManagedApplicationGraph, projectManagedApplicationGraphInputSchema, } from "../../domain/managed/managedApplicationGraph.js";
7
7
  import { err, ok } from "../../domain/result.js";
8
8
  import { MANAGED_WORKFLOW_PROVIDER } from "../InvestigationProviders.js";
9
+ import { requestInputError, workflowInputError, } from "../workflowInputError.js";
9
10
  const OPERATION = "project_managed_application_graph";
10
11
  /** Project authenticated managed Evidence into a provider-neutral graph. */
11
12
  export const projectManagedApplicationGraphEvidence = (rawInput) => {
12
13
  const parsed = projectManagedApplicationGraphInputSchema.safeParse(rawInput);
13
14
  if (!parsed.success)
14
- return err(new AnalysisInputError(OPERATION, { cause: parsed.error }));
15
+ return err(requestInputError(OPERATION, parsed.error, rawInput));
15
16
  try {
16
17
  const result = projectManagedApplicationGraph(parsed.data);
17
18
  return ok(createManagedApplicationGraphEvidence(parsed.data, result));
18
19
  }
19
20
  catch (cause) {
20
21
  return err(cause instanceof TypeError || cause instanceof z.ZodError
21
- ? new AnalysisInputError(OPERATION, { cause })
22
+ ? workflowInputError(OPERATION, cause)
22
23
  : new AnalysisProtocolError("Managed application graph projection produced an invalid result", { cause }));
23
24
  }
24
25
  };
@@ -2,7 +2,7 @@ import { createHash } from "node:crypto";
2
2
  import { readFile } from "node:fs/promises";
3
3
  import { z } from "zod";
4
4
  import { compareManagedMembers, managedMemberComparisonResultSchema, parseManagedMemberEvidence, } from "../../domain/managed/managedMemberComparison.js";
5
- import { AnalysisInputError, AnalysisProtocolError, } from "../../domain/analysisErrorCore.js";
5
+ import { AnalysisProtocolError } from "../../domain/analysisErrorCore.js";
6
6
  import { EvidenceIntegrityError } from "../../domain/evidenceErrors.js";
7
7
  import {} from "../../domain/analysisErrorBase.js";
8
8
  import { createEvidence } from "../../domain/evidence.js";
@@ -11,6 +11,7 @@ import { parseBinaryTarget } from "../BinaryTargetResolver.js";
11
11
  import { err, ok } from "../../domain/result.js";
12
12
  import { inspectManagedMembersBytes } from "../../dotnet/ManagedMemberInspector.js";
13
13
  import { MANAGED_STATIC_PROVIDER, MANAGED_WORKFLOW_PROVIDER, } from "../InvestigationProviders.js";
14
+ import { workflowInputError } from "../workflowInputError.js";
14
15
  /** Compare managed members from input parsed by a trusted adapter. */
15
16
  export const compareManagedMembersEvidenceValidated = (input) => {
16
17
  const operation = "compare_managed_members";
@@ -36,10 +37,12 @@ export const compareManagedMemberPaths = async (input, dependencies = DEFAULT_PA
36
37
  dependencies.resolveTarget(input.leftPath),
37
38
  dependencies.resolveTarget(input.rightPath),
38
39
  ]);
40
+ // Report an unopenable path like every other path-based command does,
41
+ // with the failed path and constraint, rather than a bare input error.
39
42
  if (!leftTarget.ok)
40
- return err(new AnalysisInputError(operation, { cause: leftTarget.error }));
43
+ return err(leftTarget.error);
41
44
  if (!rightTarget.ok)
42
- return err(new AnalysisInputError(operation, { cause: rightTarget.error }));
45
+ return err(rightTarget.error);
43
46
  const [leftBytes, rightBytes] = await Promise.all([
44
47
  dependencies.readBytes(leftTarget.value.path),
45
48
  dependencies.readBytes(rightTarget.value.path),
@@ -103,5 +106,5 @@ const createManagedMemberComparisonEvidence = (parameters, result) => createEvid
103
106
  evidenceLinks: result.evidence_links,
104
107
  });
105
108
  const workflowFailure = (operation, cause) => err(cause instanceof z.ZodError || cause instanceof TypeError
106
- ? new AnalysisInputError(operation, { cause })
109
+ ? workflowInputError(operation, cause)
107
110
  : new AnalysisProtocolError("Managed member comparison produced an invalid result", { cause }));
@@ -1,24 +1,25 @@
1
1
  import { z } from "zod";
2
- import { AnalysisInputError, AnalysisProtocolError, } from "../../domain/analysisErrorCore.js";
2
+ import { AnalysisProtocolError } from "../../domain/analysisErrorCore.js";
3
3
  import {} from "../../domain/analysisErrorBase.js";
4
4
  import { createEvidence } from "../../domain/evidence.js";
5
5
  import { jsonValueSchema } from "../../domain/jsonValue.js";
6
6
  import { managedNativeVerificationInputSchema, verifyManagedNativeBoundaries, } from "../../domain/managed/managedNativeVerification.js";
7
7
  import { err, ok } from "../../domain/result.js";
8
8
  import { MANAGED_WORKFLOW_PROVIDER } from "../InvestigationProviders.js";
9
+ import { requestInputError, workflowInputError, } from "../workflowInputError.js";
9
10
  const OPERATION = "verify_managed_native_boundaries";
10
11
  /** Verify managed/native boundary declarations against native Evidence. */
11
12
  export const verifyManagedNativeBoundariesEvidence = (rawInput) => {
12
13
  const parsed = managedNativeVerificationInputSchema.safeParse(rawInput);
13
14
  if (!parsed.success)
14
- return err(new AnalysisInputError(OPERATION, { cause: parsed.error }));
15
+ return err(requestInputError(OPERATION, parsed.error, rawInput));
15
16
  try {
16
17
  const result = verifyManagedNativeBoundaries(parsed.data);
17
18
  return ok(createManagedNativeVerificationEvidence(parsed.data, result));
18
19
  }
19
20
  catch (cause) {
20
21
  return err(cause instanceof TypeError || cause instanceof z.ZodError
21
- ? new AnalysisInputError(OPERATION, { cause })
22
+ ? workflowInputError(OPERATION, cause)
22
23
  : new AnalysisProtocolError("Managed/native verification produced an invalid result", { cause }));
23
24
  }
24
25
  };
@@ -1,17 +1,18 @@
1
1
  import { z } from "zod";
2
- import { AnalysisInputError, AnalysisProtocolError, } from "../../domain/analysisErrorCore.js";
2
+ import { AnalysisProtocolError } from "../../domain/analysisErrorCore.js";
3
3
  import {} from "../../domain/analysisErrorBase.js";
4
4
  import { createEvidence } from "../../domain/evidence.js";
5
5
  import { jsonValueSchema } from "../../domain/jsonValue.js";
6
6
  import { importManagedReconstruction, managedReconstructionImportInputSchema, } from "../../domain/managed/managedReconstruction.js";
7
7
  import { err, ok } from "../../domain/result.js";
8
8
  import { MANAGED_WORKFLOW_PROVIDER } from "../InvestigationProviders.js";
9
+ import { requestInputError, workflowInputError, } from "../workflowInputError.js";
9
10
  const OPERATION = "import_managed_reconstruction";
10
11
  /** Authenticate and import managed decompiler reconstruction as Evidence. */
11
12
  export const importManagedReconstructionEvidence = (rawInput) => {
12
13
  const parsed = managedReconstructionImportInputSchema.safeParse(rawInput);
13
14
  if (!parsed.success)
14
- return err(new AnalysisInputError(OPERATION, { cause: parsed.error }));
15
+ return err(requestInputError(OPERATION, parsed.error, rawInput));
15
16
  return importManagedReconstructionEvidenceValidated(parsed.data);
16
17
  };
17
18
  /** Import reconstruction from input parsed by a trusted adapter. */
@@ -22,7 +23,7 @@ export const importManagedReconstructionEvidenceValidated = (input) => {
22
23
  }
23
24
  catch (cause) {
24
25
  return err(cause instanceof TypeError || cause instanceof z.ZodError
25
- ? new AnalysisInputError(OPERATION, { cause })
26
+ ? workflowInputError(OPERATION, cause)
26
27
  : new AnalysisProtocolError("Managed reconstruction import produced an invalid result", { cause }));
27
28
  }
28
29
  };
@@ -1,14 +1,16 @@
1
1
  import { readFile } from "node:fs/promises";
2
- import { AnalysisError } from "../domain/analysisErrorBase.js";
3
- import { AnalysisInputError } from "../domain/analysisErrorCore.js";
4
- import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
5
- import { createEvidence, parseEvidence } from "../domain/evidence.js";
6
- import { jsonValueSchema } from "../domain/jsonValue.js";
7
- import { projectInputIssues } from "../domain/inputIssueProjection.js";
8
- import { processTraceSpecificationSchema } from "../domain/processTraceComparison.js";
9
- import { processScenarioSchema } from "../domain/processScenario.js";
10
- import { compareProcessCaptures, parseProcessCapture, } from "../domain/processCapture.js";
11
- import { captureProcessScenario } from "./ProcessHarness.js";
2
+ import { z } from "zod";
3
+ import { AnalysisError } from "../../domain/analysisErrorBase.js";
4
+ import { AnalysisInputError } from "../../domain/analysisErrorCore.js";
5
+ import { projectAnalysisError } from "../../domain/analysisErrorProjection.js";
6
+ import { createEvidence, parseEvidence } from "../../domain/evidence.js";
7
+ import { describeValidationFailure } from "../../domain/evidenceBundle.js";
8
+ import { jsonValueSchema } from "../../domain/jsonValue.js";
9
+ import { analysisInputErrorFromIssues, projectInputIssues, } from "../../domain/inputIssueProjection.js";
10
+ import { processTraceSpecificationSchema } from "../../domain/process/processTraceComparison.js";
11
+ import { processScenarioSchema } from "../../domain/process/processScenario.js";
12
+ import { compareProcessCaptures, parseProcessCapture, } from "../../domain/process/processCapture.js";
13
+ import { captureProcessScenario } from "../../process/capture/ProcessHarness.js";
12
14
  import { PROCESS_PROVIDER, createProcessCaptureEvidence, } from "./ProcessEvidence.js";
13
15
  /** Identify the process workflow's typed diagnostic result for CLI exit status. */
14
16
  export const isProcessCliFailure = (value) => typeof value === "object" &&
@@ -25,7 +27,7 @@ export const captureProcessScenarioFile = async (path, environment = process.env
25
27
  const input = await readJson(path);
26
28
  const parsed = processScenarioSchema.safeParse(input);
27
29
  if (!parsed.success)
28
- throw new AnalysisInputError("capture_process_scenario", { cause: parsed.error }, projectInputIssues(parsed.error.issues, input));
30
+ throw analysisInputErrorFromIssues("capture_process_scenario", parsed.error.issues, input, { cause: parsed.error });
29
31
  const captured = await captureProcessScenario(parsed.data, undefined, process.platform, environment);
30
32
  if (!captured.ok)
31
33
  return cliAnalysisError(captured.error);
@@ -78,7 +80,9 @@ const parseCaptureEvidence = (input) => {
78
80
  evidence = parseEvidence(input);
79
81
  }
80
82
  catch (cause) {
81
- throw invalidCaptureEvidence();
83
+ if (cause instanceof z.ZodError)
84
+ throw new AnalysisInputError("compare_process_captures", { cause }, projectInputIssues(cause.issues, input));
85
+ throw invalidCaptureEvidence(cause);
82
86
  }
83
87
  if (evidence.operation !== "capture_process_scenario" ||
84
88
  evidence.predicate_type !== "rea.process-capture" ||
@@ -94,16 +98,20 @@ const parseCaptureEvidence = (input) => {
94
98
  };
95
99
  }
96
100
  catch (cause) {
97
- throw invalidCaptureEvidence();
101
+ throw invalidCaptureEvidence(cause);
98
102
  }
99
103
  };
100
104
  const parseTraceSpecification = (input) => {
101
105
  const parsed = processTraceSpecificationSchema.safeParse(input);
102
106
  if (parsed.success)
103
107
  return parsed.data;
104
- throw new AnalysisInputError("compare-process-captures", { cause: parsed.error }, projectInputIssues(parsed.error.issues, input));
108
+ // Match the MCP boundary: the operation name and a trace_spec-rooted path.
109
+ throw new AnalysisInputError("compare_process_captures", { cause: parsed.error }, projectInputIssues(parsed.error.issues, input).map((issue) => ({
110
+ ...issue,
111
+ path: ["trace_spec", ...issue.path],
112
+ })));
105
113
  };
106
- const invalidCaptureEvidence = () => new ProcessCliFailure("invalid_input", "Capture evidence is malformed. Create new capture evidence, then try again.");
114
+ const invalidCaptureEvidence = (cause) => new ProcessCliFailure("invalid_input", `Capture evidence is malformed (${describeValidationFailure(cause)}). Create new capture evidence, then try again.`);
107
115
  const readJson = async (path) => {
108
116
  let bytes;
109
117
  try {
@@ -1,10 +1,11 @@
1
- import { createEvidence } from "../domain/evidence.js";
2
- import { PROCESS_PROVIDER } from "../domain/processEvidenceProvider.js";
3
- import { jsonValueSchema } from "../domain/jsonValue.js";
4
- export { PROCESS_PROVIDER } from "../domain/processEvidenceProvider.js";
1
+ import { posix, win32 } from "node:path";
2
+ import { createEvidence } from "../../domain/evidence.js";
3
+ import { PROCESS_PROVIDER } from "../../domain/process/processEvidenceProvider.js";
4
+ import { jsonValueSchema } from "../../domain/jsonValue.js";
5
+ export { PROCESS_PROVIDER } from "../../domain/process/processEvidenceProvider.js";
5
6
  /** Project one process scenario into secret-free Evidence parameters. */
6
- const processEvidenceParameters = (scenario) => ({
7
- executable_name: scenario.executable.split("/").at(-1) ?? scenario.executable,
7
+ const processEvidenceParameters = (scenario, platform) => ({
8
+ executable_name: (platform === "win32" ? win32 : posix).basename(scenario.executable),
8
9
  argument_count: scenario.arguments.length,
9
10
  event_count: scenario.events.length,
10
11
  filesystem_observation_path_count: scenario.filesystem_observation_paths.length,
@@ -15,7 +16,7 @@ export const createProcessCaptureEvidence = (scenario, capture) => {
15
16
  return createEvidence(undefined, PROCESS_PROVIDER, {
16
17
  predicateType: "rea.process-capture",
17
18
  operation: "capture_process_scenario",
18
- parameters: processEvidenceParameters(scenario),
19
+ parameters: processEvidenceParameters(scenario, capture.manifest.platform),
19
20
  result: jsonValueSchema.parse(capture),
20
21
  confidence: "observed",
21
22
  authority: "controlled-replay",
@@ -0,0 +1,18 @@
1
+ import { z } from "zod";
2
+ import { AnalysisInputError } from "../domain/analysisErrorCore.js";
3
+ import { analysisInputErrorFromIssues } from "../domain/inputIssueProjection.js";
4
+ /** Project schema issues of the raw request onto their request paths. */
5
+ export const requestInputError = (operation, cause, input) => analysisInputErrorFromIssues(operation, cause.issues, input, { cause });
6
+ /**
7
+ * Keep the failed constraint when a parsed request is rejected later. Nested
8
+ * values such as Evidence results are parsed on their own, so their issue
9
+ * paths are relative to that value and are reported in the message, not as
10
+ * request paths.
11
+ */
12
+ export const workflowInputError = (operation, cause) => new AnalysisInputError(operation, { cause }, cause instanceof z.ZodError
13
+ ? cause.issues.map((issue) => ({
14
+ path: [],
15
+ reason: "invalid_value",
16
+ message: `A nested value failed validation at ${issue.path.length === 0 ? "its root" : issue.path.map(String).join(".")}: ${issue.message}`,
17
+ }))
18
+ : [{ path: [], reason: "invalid_value", message: cause.message }]);
@@ -1,12 +1,13 @@
1
1
  import { createAnalysisExecution, } from "../application/AnalysisProvider.js";
2
2
  import { inspectBundleKeyedArchive } from "./apple/KeyedArchiveReader.js";
3
+ import { traceDylibResolution } from "./apple/DylibResolutionReader.js";
3
4
  import { basename, dirname } from "node:path";
4
- import { inventoryArtifact } from "../application/ArtifactInventory.js";
5
- import { extractArtifact } from "../application/ArtifactExtraction.js";
5
+ import { inventoryArtifact } from "./inventory/ArtifactInventory.js";
6
+ import { extractArtifact } from "./extraction/ArtifactExtraction.js";
6
7
  import { analyzeInterfaceBuilderBundle } from "./apple/InterfaceBuilderAnalysis.js";
7
8
  import { analyzeAppleAssetCatalogs } from "./apple/AppleAssetCatalogAnalysis.js";
8
9
  import { ARTIFACT_ANALYSIS_OPERATIONS, artifactInventoryInputSchema, artifactExtractionExecutionSchema, } from "../contracts/artifactToolContracts.js";
9
- import { AnalysisCapabilityUnavailableError } from "../domain/analysisErrorCore.js";
10
+ import { AnalysisCapabilityUnavailableError, AnalysisInputError, } from "../domain/analysisErrorCore.js";
10
11
  import { ArtifactOperationError } from "../domain/artifactOperationError.js";
11
12
  import {} from "../domain/analysisErrorBase.js";
12
13
  import { interfaceBuilderLimitsSchema } from "../domain/apple/interfaceBuilderGraph.js";
@@ -15,7 +16,7 @@ import { ArtifactReaderFailure } from "./ArtifactReader.js";
15
16
  import { ARTIFACT_PROVIDER_IDENTITY as IDENTITY, artifactCapabilities, } from "./ArtifactProviderMetadata.js";
16
17
  import { createEvidence } from "../domain/evidence.js";
17
18
  import { createArtifactInspection } from "../domain/artifactInspection.js";
18
- import { resolveArtifactIntegrityPolicy } from "../application/ArtifactInventory/policy.js";
19
+ import { resolveArtifactIntegrityPolicy } from "./inventory/policy.js";
19
20
  /** Read-only inventory and exclusively owned extraction provider. */
20
21
  export class ArtifactProvider {
21
22
  #capabilities;
@@ -73,7 +74,14 @@ class ArtifactClient {
73
74
  parameters.path !== undefined &&
74
75
  parameters.path !== "." &&
75
76
  parameters.path !== basename(this.target.path))
76
- throw new ArtifactReaderFailure("path", "For an active plist, path must select that archive (omit path or use its basename)");
77
+ throw new AnalysisInputError(operation, undefined, [
78
+ {
79
+ path: ["path"],
80
+ reason: "invalid_value",
81
+ message: "For an active plist, path must select that archive (omit path or use its basename).",
82
+ expected: basename(this.target.path),
83
+ },
84
+ ]);
77
85
  const bundlePath = standalone
78
86
  ? dirname(this.target.path)
79
87
  : this.target.sourcePath;
@@ -98,6 +106,8 @@ class ArtifactClient {
98
106
  if (operation === "inspect_asset_catalog") {
99
107
  return await this.inspectAssetCatalog(parameters, options);
100
108
  }
109
+ if (operation === "trace_dylib_resolution")
110
+ return await this.traceDylibResolution(parameters, options);
101
111
  if (operation === "extract_artifact") {
102
112
  const parsed = artifactExtractionExecutionSchema.parse(parameters);
103
113
  const result = await extractArtifact({
@@ -154,6 +164,30 @@ class ArtifactClient {
154
164
  })),
155
165
  }));
156
166
  }
167
+ async traceDylibResolution(parameters, options) {
168
+ if (this.target.kind !== "executable" || this.target.format !== "mach-o")
169
+ throw new ArtifactReaderFailure("unavailable", "trace_dylib_resolution requires an active Mach-O or .app bundle target");
170
+ // Only a target opened from an app bundle directory carries its Info.plist;
171
+ // a regular file whose name ends in .app is a standalone image.
172
+ const bundle = this.target.bundleInfoPlist === undefined
173
+ ? undefined
174
+ : this.target.sourcePath;
175
+ const result = await traceDylibResolution({
176
+ rootPath: bundle ?? dirname(this.target.path),
177
+ targetPath: this.target.path,
178
+ targetSha256: this.target.sha256,
179
+ enumerateRoots: bundle !== undefined,
180
+ parameters,
181
+ ...(options?.signal === undefined ? {} : { signal: options.signal }),
182
+ });
183
+ return ok(createAnalysisExecution(result, IDENTITY, {
184
+ limitations: result.limitations,
185
+ locations: result.images.map(({ path }) => ({
186
+ kind: "artifact-path",
187
+ path,
188
+ })),
189
+ }));
190
+ }
157
191
  async inspectArtifact(parameters, options) {
158
192
  const parsed = artifactInventoryInputSchema.parse(parameters);
159
193
  const inventoryParameters = {
@@ -206,6 +240,9 @@ const isArtifactOperation = (operation) => ARTIFACT_ANALYSIS_OPERATIONS.includes
206
240
  const translateFailure = (operation, cause) => {
207
241
  if (cause instanceof ArtifactReaderFailure)
208
242
  return new ArtifactOperationError(operation, cause.reason, cause.details, cause.message);
243
+ // Caller-selection failures are already typed; keep their correction details.
244
+ if (cause instanceof AnalysisInputError)
245
+ return cause;
209
246
  return new ArtifactOperationError(operation, "io");
210
247
  };
211
248
  const subjectFor = (path, manifest) => ({
@@ -11,7 +11,8 @@ export const artifactCapabilities = (platform = process.platform) => Object.free
11
11
  effects: Object.freeze({
12
12
  mutatesArtifact: false,
13
13
  launchesProcess: operation !== "decode_interface_builder" &&
14
- operation !== "inspect_keyed_archive",
14
+ operation !== "inspect_keyed_archive" &&
15
+ operation !== "trace_dylib_resolution",
15
16
  mayShowUi: false,
16
17
  mayAccessNetwork: false,
17
18
  mayWriteFilesystem: operation === "extract_artifact" ||