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,134 @@
1
+ import { redactExplicitFailure } from "../domain/explicitSensitiveFailure.js";
2
+ import { excludeCaptureCoordinates } from "../domain/webNetworkCaptureCoordinates.js";
3
+ import { redactExplicitText } from "../domain/explicitSensitiveValues.js";
4
+ import { isAbsolute } from "node:path";
5
+ import { AnalysisCancelledError, AnalysisInputError, AnalysisOutputError, } from "../domain/analysisErrorCore.js";
6
+ import { createEvidence } from "../domain/evidence.js";
7
+ import { analysisInputErrorFromIssues } from "../domain/inputIssueProjection.js";
8
+ import { jsonObjectSchema } from "../domain/jsonValue.js";
9
+ import { err, ok } from "../domain/result.js";
10
+ import { inspectWebNetworkCaptureInputSchema, webNetworkCaptureSchema, } from "../domain/webNetworkCapture.js";
11
+ const OPERATION = "inspect_web_network_capture";
12
+ /** Shared CLI/MCP historical inspection preserves caller selection and producer record identity. */
13
+ export class WebNetworkCaptureService {
14
+ port;
15
+ constructor(port) {
16
+ this.port = port;
17
+ }
18
+ /** Return selected complete records inline, without inventing live browser attribution. */
19
+ async inspect(rawInput, options) {
20
+ if (options?.signal?.aborted)
21
+ return err(new AnalysisCancelledError(OPERATION));
22
+ const declarations = inspectWebNetworkCaptureInputSchema.shape.sensitive_values.safeParse(typeof rawInput === "object" &&
23
+ rawInput !== null &&
24
+ "sensitive_values" in rawInput
25
+ ? rawInput.sensitive_values
26
+ : undefined);
27
+ const failure = (error) => err(redactExplicitFailure(error, declarations.success ? declarations.data : []));
28
+ const parsed = inspectWebNetworkCaptureInputSchema.safeParse(rawInput);
29
+ if (!parsed.success)
30
+ return failure(analysisInputErrorFromIssues(OPERATION, parsed.error.issues, rawInput, {
31
+ cause: parsed.error,
32
+ }));
33
+ const input = parsed.data;
34
+ if (!isAbsolute(input.capture_path))
35
+ return failure(new AnalysisInputError(OPERATION, undefined, [
36
+ {
37
+ path: ["capture_path"],
38
+ reason: "invalid_format",
39
+ message: "Expected an absolute filesystem path on this host.",
40
+ },
41
+ ]));
42
+ if (input.record_ordinals !== undefined &&
43
+ new Set(input.record_ordinals).size !== input.record_ordinals.length)
44
+ return failure(new AnalysisInputError(OPERATION, undefined, [
45
+ {
46
+ path: ["record_ordinals"],
47
+ reason: "invalid_format",
48
+ message: "Each requested producer ordinal must occur once.",
49
+ },
50
+ ]));
51
+ const loaded = await this.port.inspect(input, options);
52
+ if (!loaded.ok)
53
+ return failure(loaded.error);
54
+ if (options?.signal?.aborted)
55
+ return failure(new AnalysisCancelledError(OPERATION));
56
+ const report = webNetworkCaptureSchema.safeParse(loaded.value);
57
+ if (!report.success)
58
+ return failure(new AnalysisOutputError(OPERATION, "Capture adapter returned malformed historical evidence."));
59
+ const value = report.data;
60
+ const artifactSha256 = value.artifact.sha256;
61
+ if (artifactSha256 === null)
62
+ return failure(new AnalysisOutputError(OPERATION, "Capture adapter omitted its observed artifact digest before explicit projection."));
63
+ if (value.artifact.path !== input.capture_path ||
64
+ value.format !== input.format ||
65
+ value.total_records !== value.records.length ||
66
+ value.records.some((record, index) => record.ordinal !== index))
67
+ return failure(new AnalysisOutputError(OPERATION, "Capture adapter changed the selected artifact, format or original record sequence."));
68
+ const safeValue = excludeCaptureCoordinates(value, input.sensitive_values);
69
+ const redactText = (text) => redactExplicitText(text, input.sensitive_values);
70
+ const selected = input.record_ordinals ?? value.records.map(({ ordinal }) => ordinal);
71
+ const records = [];
72
+ for (const ordinal of selected) {
73
+ const record = safeValue.records[ordinal];
74
+ if (record === undefined)
75
+ return failure(new AnalysisInputError(OPERATION, undefined, [
76
+ {
77
+ path: ["record_ordinals"],
78
+ reason: "invalid_format",
79
+ message: `Producer ordinal ${ordinal} is outside the retained capture (${value.total_records} records).`,
80
+ },
81
+ ]));
82
+ records.push({
83
+ ...record,
84
+ limitations: record.limitations.map(redactText),
85
+ });
86
+ }
87
+ const safePath = input.sensitive_values.some((literal) => input.capture_path.includes(literal))
88
+ ? ""
89
+ : input.capture_path;
90
+ const safeSha256 = input.sensitive_values.some((literal) => artifactSha256.includes(literal))
91
+ ? null
92
+ : artifactSha256;
93
+ const subjectUnavailableReason = redactText("The explicitly sensitive artifact digest is excluded; its cryptographic identity is unknown in this Evidence.");
94
+ const limitations = [
95
+ ...safeValue.limitations,
96
+ ...(safePath === ""
97
+ ? [
98
+ "The explicitly sensitive artifact path is excluded; its size remains available.",
99
+ ]
100
+ : []),
101
+ ].map(redactText);
102
+ const parameters = jsonObjectSchema.parse({
103
+ capture_path: safePath,
104
+ ...(input.sensitive_values.some((literal) => input.format.includes(literal))
105
+ ? {}
106
+ : { format: input.format }),
107
+ record_ordinals: selected,
108
+ sensitive_value_count: input.sensitive_values.length,
109
+ });
110
+ return ok(createEvidence(safeSha256 === null
111
+ ? undefined
112
+ : {
113
+ path: safePath,
114
+ sha256: safeSha256,
115
+ format: "file",
116
+ }, value.decoder, {
117
+ operation: OPERATION,
118
+ parameters,
119
+ result: {
120
+ ...safeValue,
121
+ artifact: { ...value.artifact, path: safePath, sha256: safeSha256 },
122
+ records,
123
+ limitations: safeSha256 === null
124
+ ? [...limitations, subjectUnavailableReason]
125
+ : limitations,
126
+ },
127
+ confidence: "observed",
128
+ authority: "historical-reference",
129
+ limitations,
130
+ ...(safeSha256 === null ? { subjectUnavailableReason } : {}),
131
+ locations: safePath === "" ? [] : [{ kind: "artifact-path", path: safePath }],
132
+ }));
133
+ }
134
+ }
@@ -1,8 +1,8 @@
1
1
  import { z } from "zod";
2
- import { AnalysisCancelledError, AnalysisInputError, AnalysisOutputError, } from "../domain/analysisErrorCore.js";
2
+ import { AnalysisCancelledError, AnalysisOutputError, } from "../domain/analysisErrorCore.js";
3
3
  import { createEvidence } from "../domain/evidence.js";
4
4
  import { jsonObjectSchema, jsonValueSchema } from "../domain/jsonValue.js";
5
- import { projectInputIssues } from "../domain/inputIssueProjection.js";
5
+ import { analysisInputErrorFromIssues } from "../domain/inputIssueProjection.js";
6
6
  import { err, ok } from "../domain/result.js";
7
7
  import { observeWebExecutionInputSchema, webExecutionSchema, } from "../domain/webExecution.js";
8
8
  import { inspectWebEventListenersInputSchema, webEventListenersSchema, } from "../domain/webEventListeners.js";
@@ -69,5 +69,7 @@ const parseInput = (schema, rawInput, operation, options) => {
69
69
  const parsed = schema.safeParse(rawInput);
70
70
  return parsed.success
71
71
  ? ok(parsed.data)
72
- : err(new AnalysisInputError(operation, { cause: parsed.error }, projectInputIssues(parsed.error.issues, rawInput)));
72
+ : err(analysisInputErrorFromIssues(operation, parsed.error.issues, rawInput, {
73
+ cause: parsed.error,
74
+ }));
73
75
  };
@@ -7,7 +7,7 @@ import { publishWebScripts } from "../browser/assets/PublishWebScripts.js";
7
7
  import { selectScriptCapture } from "../browser/assets/ScriptCaptureAdapters.js";
8
8
  import { AnalysisCancelledError, AnalysisInputError, AnalysisOutputError, } from "../domain/analysisErrorCore.js";
9
9
  import { createEvidence } from "../domain/evidence.js";
10
- import { projectInputIssues } from "../domain/inputIssueProjection.js";
10
+ import { analysisInputErrorFromIssues } from "../domain/inputIssueProjection.js";
11
11
  import { jsonValueSchema } from "../domain/jsonValue.js";
12
12
  import { ProviderAdapterError } from "../domain/providerAdapterError.js";
13
13
  import { err, ok } from "../domain/result.js";
@@ -21,7 +21,7 @@ export const exportWebScripts = async (rawInput, options = {}) => {
21
21
  const input = exportWebScriptsInputSchema.safeParse(rawInput);
22
22
  return input.success
23
23
  ? exportWebScriptsValidated(input.data, options)
24
- : err(new AnalysisInputError(OPERATION, undefined, projectInputIssues(input.error.issues, rawInput)));
24
+ : err(analysisInputErrorFromIssues(OPERATION, input.error.issues, rawInput));
25
25
  };
26
26
  /** Publish input already parsed by a named adapter contract. */
27
27
  export const exportWebScriptsValidated = async (input, options = {}) => {
@@ -3,7 +3,7 @@ import { isAbsolute } from "node:path";
3
3
  import { z } from "zod";
4
4
  import { AnalysisCancelledError, AnalysisInputError, AnalysisOutputError, } from "../domain/analysisErrorCore.js";
5
5
  import { createEvidence } from "../domain/evidence.js";
6
- import { projectInputIssues } from "../domain/inputIssueProjection.js";
6
+ import { analysisInputErrorFromIssues } from "../domain/inputIssueProjection.js";
7
7
  import { jsonObjectSchema } from "../domain/jsonValue.js";
8
8
  import { err, ok } from "../domain/result.js";
9
9
  import { selectedWebScriptArtifactsSchema, webArtifactFileSchema, } from "../domain/webScriptArtifacts.js";
@@ -41,7 +41,9 @@ export class WebSourceLocationService {
41
41
  return err(new AnalysisCancelledError(OPERATION));
42
42
  const parsed = webSourceLocationInputSchema.safeParse(rawInput);
43
43
  if (!parsed.success)
44
- return err(new AnalysisInputError(OPERATION, { cause: parsed.error }, projectInputIssues(parsed.error.issues, rawInput)));
44
+ return err(analysisInputErrorFromIssues(OPERATION, parsed.error.issues, rawInput, {
45
+ cause: parsed.error,
46
+ }));
45
47
  const input = parsed.data;
46
48
  const admitted = admitContext(input);
47
49
  if (!admitted.ok)
@@ -3,7 +3,7 @@ import { mkdtemp, rm, symlink, writeFile } from "node:fs/promises";
3
3
  import { tmpdir } from "node:os";
4
4
  import { join } from "node:path";
5
5
  import { windowsNativeCapabilities, } from "../process/WindowsAuthority.js";
6
- import { probeProcessCaptureCapability, } from "./ProcessCaptureCapability.js";
6
+ import { probeProcessCaptureCapability, } from "../process/capture/ProcessCaptureCapability.js";
7
7
  /** Probe named prerequisites without converting missing controls into support. */
8
8
  export const probeWindowsCapabilities = async (dependencies = systemDependencies()) => {
9
9
  const [symlinkCreation, pty] = await Promise.all([
@@ -0,0 +1,82 @@
1
+ import { REA_WORKFLOW_PROVIDER, workflowAnalysisProfile, } from "./InvestigationProviders.js";
2
+ import { analysisProfileSchema, committedProviderSchema, } from "../domain/analysisProfile.js";
3
+ import { createEvidence } from "../domain/evidence.js";
4
+ import { UnknownRegistryError } from "../domain/unknownRegistryError.js";
5
+ /** Build the shared Evidence record for a successful composed binary workflow. */
6
+ export const createWorkflowEvidence = (input) => createEvidence(input.target, REA_WORKFLOW_PROVIDER, {
7
+ operation: input.operation,
8
+ parameters: input.parameters,
9
+ result: input.result,
10
+ ...(input.upstreamProfile === undefined
11
+ ? {}
12
+ : {
13
+ analysisProfile: workflowAnalysisProfile(input.upstreamProfile, input.operation),
14
+ }),
15
+ confidence: "derived",
16
+ limitations: ["Derived by an REA composed workflow."],
17
+ });
18
+ /** Convert workflow Evidence into its exact replay binding, when it has a profile. */
19
+ export const workflowSnapshotRecord = (evidence, operation) => {
20
+ if (!("analysis_profile" in evidence))
21
+ return undefined;
22
+ return {
23
+ operation,
24
+ parameters: evidence.parameters,
25
+ execution: {
26
+ result: evidence.normalized_result,
27
+ rawResult: evidence.raw_result,
28
+ provider: committedProviderSchema.parse(evidence.provider),
29
+ analysisProfile: analysisProfileSchema.parse(evidence.analysis_profile),
30
+ limitations: evidence.limitations,
31
+ locations: evidence.locations,
32
+ subject: evidence.subject === null
33
+ ? null
34
+ : {
35
+ path: evidence.subject.local_path,
36
+ sha256: evidence.subject.digest.sha256,
37
+ format: evidence.subject.format,
38
+ ...(evidence.subject.architecture === null
39
+ ? {}
40
+ : { architecture: evidence.subject.architecture }),
41
+ },
42
+ },
43
+ };
44
+ };
45
+ /** Retain residual workflow questions using the shared investigation policy. */
46
+ export const recordWorkflowUnknowns = ({ name, result, evidenceId, recordUnknown, }) => {
47
+ if (!["trace_feature", "trace_call_path", "inspect_native_api"].includes(name) ||
48
+ recordUnknown === undefined ||
49
+ typeof result !== "object" ||
50
+ result === null ||
51
+ Array.isArray(result) ||
52
+ !Array.isArray(result.residual_unknowns))
53
+ return { ok: true, value: null };
54
+ for (const question of result.residual_unknowns) {
55
+ if (typeof question !== "string")
56
+ continue;
57
+ const recorded = recordUnknown({
58
+ question,
59
+ severity: "medium",
60
+ domain: name === "inspect_native_api" ? "native-api" : "control-flow",
61
+ supporting_evidence_ids: [evidenceId],
62
+ contradicting_evidence_ids: [],
63
+ required_authority: "shipped-artifact",
64
+ required_confidence: "observed",
65
+ required_environment: null,
66
+ recommended_probes: [
67
+ {
68
+ operation: name,
69
+ rationale: name === "inspect_native_api"
70
+ ? "Confirm the unsupported boundary with a capable provider or ABI probe."
71
+ : "Continue with a focused query or another available provider.",
72
+ },
73
+ ],
74
+ relationships: [],
75
+ });
76
+ if (!recorded.ok &&
77
+ !(recorded.error instanceof UnknownRegistryError &&
78
+ recorded.error.reason === "already-exists"))
79
+ return recorded;
80
+ }
81
+ return { ok: true, value: null };
82
+ };
@@ -1,5 +1,5 @@
1
1
  import { analysisProfileSchema, } from "../../domain/analysisProfile.js";
2
- import { AnalysisCancelledError } from "../../domain/analysisErrorCore.js";
2
+ import { AnalysisCancelledError, AnalysisUnsupportedTargetError, } from "../../domain/analysisErrorCore.js";
3
3
  import { jsonObjectSchema } from "../../domain/jsonValue.js";
4
4
  import { err, ok } from "../../domain/result.js";
5
5
  import { ABORTED, waitForAbortable } from "./AbortablePromise.js";
@@ -22,10 +22,26 @@ export const evaluateAnalysisProviderCandidate = async (candidate, status, targe
22
22
  return err(new AnalysisCancelledError("open_binary"));
23
23
  if (!resolved.ok && resolved.error instanceof AnalysisCancelledError)
24
24
  return err(resolved.error);
25
- if (!resolved.ok)
26
- return ok(rejectedProfile(candidate, status, resolved.error.message, {
27
- error_tag: resolved.error._tag,
28
- }));
25
+ if (!resolved.ok) {
26
+ const error = resolved.error;
27
+ const rejection = error instanceof AnalysisUnsupportedTargetError
28
+ ? {
29
+ candidate,
30
+ status: {
31
+ ...status,
32
+ targetSupport: {
33
+ status: "unsupported",
34
+ code: "target_format_unsupported",
35
+ reason: error.reason,
36
+ diagnostics: { path: error.path, error_tag: error._tag },
37
+ },
38
+ },
39
+ }
40
+ : rejectedProfile(candidate, status, error.message, {
41
+ error_tag: error._tag,
42
+ });
43
+ return ok({ ...rejection, profileError: error });
44
+ }
29
45
  try {
30
46
  if (resolved.value.profile === null)
31
47
  return ok(rejectedProfile(candidate, status, "Provider version or analysis profile could not be resolved"));
@@ -114,6 +114,8 @@ export class AnalysisProviderRegistry {
114
114
  if (!evaluation.ok)
115
115
  return evaluation;
116
116
  const evaluated = evaluation.value;
117
+ if (evaluated.profileError !== undefined)
118
+ return err(evaluated.profileError);
117
119
  const statuses = replaceCandidate(baseline, evaluated.status);
118
120
  if (evaluated.profile === undefined ||
119
121
  evaluated.compatibility === undefined)
@@ -1,8 +1,8 @@
1
- import { EvidenceIntegrityError } from "../../domain/evidenceErrors.js";
1
+ import { EvidenceIntegrityError, AnalysisSnapshotMismatchError, } from "../../domain/evidenceErrors.js";
2
2
  import { NoBinaryOpenError } from "../../domain/configurationErrors.js";
3
3
  import {} from "../../domain/analysisErrorBase.js";
4
4
  import { err, ok } from "../../domain/result.js";
5
- import { analysisQueryId, createAnalysisSnapshotEntry, snapshotBinding, snapshotMatchesProfile, snapshotMatchesTarget, snapshotTarget, parseAnalysisSnapshot, } from "../../domain/analysisSnapshot.js";
5
+ import { analysisQueryId, createAnalysisSnapshotEntry, createAnalysisSnapshotWorkflowEntry, snapshotBinding, snapshotMatchesProfile, snapshotMatchesTarget, snapshotTarget, parseAnalysisSnapshot, } from "../../domain/analysisSnapshot.js";
6
6
  import { OFFICIAL_TOOL_CONTRACTS } from "../../contracts/officialToolContracts.js";
7
7
  const STATEFUL_OPERATIONS = new Set([
8
8
  "health",
@@ -11,7 +11,6 @@ const STATEFUL_OPERATIONS = new Set([
11
11
  "current_document",
12
12
  "goto_address",
13
13
  "list_documents",
14
- "set_current_document",
15
14
  ]);
16
15
  const CURSOR_DEFAULT_OPERATIONS = new Set([
17
16
  "address_name",
@@ -21,9 +20,9 @@ const CURSOR_DEFAULT_OPERATIONS = new Set([
21
20
  "prev_address",
22
21
  "xrefs",
23
22
  ]);
24
- const DOCUMENT_SCOPED_OPERATIONS = new Set(OFFICIAL_TOOL_CONTRACTS.map(({ name }) => name).filter((name) => name !== "current_document" &&
25
- name !== "list_documents" &&
26
- name !== "set_current_document"));
23
+ const DOCUMENT_SCOPED_OPERATIONS = new Set(OFFICIAL_TOOL_CONTRACTS.map(({ name }) => name).filter((name) => name !== "current_document" && name !== "list_documents"));
24
+ /** Maximum duplicated result bindings retained across direct and workflow queries. */
25
+ export const SNAPSHOT_CACHE_ENTRY_CEILING = 10_000;
27
26
  /** Whether an operation is immutable and independent of provider UI state. */
28
27
  export const isSnapshotCacheable = (operation, descriptor, parameters) => !STATEFUL_OPERATIONS.has(operation) &&
29
28
  (!DOCUMENT_SCOPED_OPERATIONS.has(operation) ||
@@ -37,6 +36,7 @@ export const isSnapshotCacheable = (operation, descriptor, parameters) => !STATE
37
36
  /** Bounded in-memory cache for one immutable binary identity. */
38
37
  export class AnalysisSnapshotCache {
39
38
  #entries = new Map();
39
+ #workflowEntries = new Map();
40
40
  #target;
41
41
  #binding;
42
42
  /** Whether staged entries belong to the supplied target and profile. */
@@ -51,7 +51,7 @@ export class AnalysisSnapshotCache {
51
51
  /** Replace cache state when the target or selected profile changes. */
52
52
  select(target, profile) {
53
53
  if (!this.matches(target, profile))
54
- this.#entries.clear();
54
+ this.#clearEntries();
55
55
  this.#target = snapshotTarget(target);
56
56
  this.#binding = snapshotBinding(profile);
57
57
  }
@@ -61,15 +61,22 @@ export class AnalysisSnapshotCache {
61
61
  JSON.stringify(this.#target) !== JSON.stringify(snapshot.target)) ||
62
62
  (this.#binding !== undefined &&
63
63
  !snapshotMatchesProfile(this.#binding, snapshot.binding.analysis_profile)))
64
- this.#entries.clear();
64
+ this.#clearEntries();
65
65
  this.#target = structuredClone(snapshot.target);
66
66
  this.#binding = structuredClone(snapshot.binding);
67
67
  let imported = 0;
68
68
  for (const entry of snapshot.entries) {
69
+ if (!this.#entries.has(entry.query_id) && !this.#hasCapacity())
70
+ continue;
69
71
  if (!this.#entries.has(entry.query_id))
70
72
  imported += 1;
71
73
  this.#entries.set(entry.query_id, structuredClone(entry));
72
74
  }
75
+ for (const entry of snapshot.workflow_entries ?? []) {
76
+ if (!this.#workflowEntries.has(entry.query_id) && !this.#hasCapacity())
77
+ continue;
78
+ this.#workflowEntries.set(entry.query_id, structuredClone(entry));
79
+ }
73
80
  return imported;
74
81
  }
75
82
  /** Build a complete snapshot for an active target. */
@@ -84,6 +91,9 @@ export class AnalysisSnapshotCache {
84
91
  target: snapshotTargetIdentity,
85
92
  binding,
86
93
  entries: this.entries(),
94
+ ...(this.workflowEntries().length === 0
95
+ ? {}
96
+ : { workflow_entries: this.workflowEntries() }),
87
97
  evidence_bundle: retainedEvidence,
88
98
  }));
89
99
  }
@@ -107,7 +117,7 @@ export class AnalysisSnapshotCache {
107
117
  if (active !== undefined &&
108
118
  (!snapshotMatchesTarget(validated.target, active.target) ||
109
119
  !snapshotMatchesProfile(validated.binding, active.profile)))
110
- return err(new EvidenceIntegrityError("Analysis snapshot profile_mismatch: target, provider, or analysis profile does not match the active binary"));
120
+ return err(new AnalysisSnapshotMismatchError("Analysis snapshot profile_mismatch: target, provider, or analysis profile does not match the active binary"));
111
121
  const importedEvidence = mergeEvidence(validated.evidence_bundle);
112
122
  return importedEvidence.ok ? ok(this.stage(validated)) : importedEvidence;
113
123
  }
@@ -117,6 +127,27 @@ export class AnalysisSnapshotCache {
117
127
  .sort((left, right) => left.query_id.localeCompare(right.query_id))
118
128
  .map((entry) => structuredClone(entry));
119
129
  }
130
+ /** Return canonical composed-workflow entries for persistence. */
131
+ workflowEntries() {
132
+ return [...this.#workflowEntries.values()]
133
+ .sort((left, right) => left.query_id.localeCompare(right.query_id))
134
+ .map((entry) => structuredClone(entry));
135
+ }
136
+ /** Record one exact derived workflow result unless the shared cache is full. */
137
+ recordWorkflow(input) {
138
+ this.select(input.target, input.profile);
139
+ const queryId = analysisQueryId(snapshotTarget(input.target), snapshotBinding(input.profile), input.operation, input.parameters);
140
+ if (!this.#workflowEntries.has(queryId) && !this.#hasCapacity())
141
+ return;
142
+ const entry = createAnalysisSnapshotWorkflowEntry({
143
+ target: snapshotTarget(input.target),
144
+ binding: snapshotBinding(input.profile),
145
+ operation: input.operation,
146
+ parameters: input.parameters,
147
+ execution: input.execution,
148
+ });
149
+ this.#workflowEntries.set(entry.query_id, entry);
150
+ }
120
151
  /** Replay an exact provider-specific query, marking its cached provenance. */
121
152
  lookup(target, profile, operation, parameters) {
122
153
  const queryId = analysisQueryId(snapshotTarget(target), snapshotBinding(profile), operation, parameters);
@@ -153,9 +184,10 @@ export class AnalysisSnapshotCache {
153
184
  /** Record one successful immutable call unless the cache is full. */
154
185
  record(input) {
155
186
  const { target, profile, operation, parameters, execution } = input;
156
- if (this.#entries.size >= 10_000)
157
- return;
158
187
  this.select(target, profile);
188
+ const queryId = analysisQueryId(snapshotTarget(target), snapshotBinding(profile), operation, parameters);
189
+ if (!this.#entries.has(queryId) && !this.#hasCapacity())
190
+ return;
159
191
  const entry = createAnalysisSnapshotEntry({
160
192
  target: snapshotTarget(target),
161
193
  binding: snapshotBinding(profile),
@@ -167,8 +199,16 @@ export class AnalysisSnapshotCache {
167
199
  }
168
200
  /** Forget all target-bound entries. */
169
201
  clear() {
170
- this.#entries.clear();
202
+ this.#clearEntries();
171
203
  this.#target = undefined;
172
204
  this.#binding = undefined;
173
205
  }
206
+ #clearEntries() {
207
+ this.#entries.clear();
208
+ this.#workflowEntries.clear();
209
+ }
210
+ #hasCapacity() {
211
+ return (this.#entries.size + this.#workflowEntries.size <
212
+ SNAPSHOT_CACHE_ENTRY_CEILING);
213
+ }
174
214
  }