rea-agents 6.0.0 → 6.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (611) hide show
  1. package/README.md +26 -18
  2. package/bridge/android/ReaJadxBridge.java +14 -5
  3. package/bridge/ghidra/ReaGhidraBridge.java +205 -51
  4. package/bridge/hopper_bridge.py +314 -127
  5. package/bridge/mitmproxy/capture.py +0 -2
  6. package/bridge/native/rea_lldb_tracer.py +630 -94
  7. package/bridge/process/ProcessRunTokenReader.swift +39 -5
  8. package/bridge/pwntools/recorded_crash_impl.py +4 -0
  9. package/dist/android/JadxConfiguration.js +274 -31
  10. package/dist/android/JadxMcpTransport.js +18 -2
  11. package/dist/android/JadxProtocol.js +6 -0
  12. package/dist/android/JadxProvider.js +76 -37
  13. package/dist/android/JadxSession.js +23 -4
  14. package/dist/application/AnalysisContextQueries.js +8 -35
  15. package/dist/application/AnalysisDocument.js +32 -0
  16. package/dist/application/AppBundleExecutable.js +67 -21
  17. package/dist/application/BinaryTargetResolver.js +5 -3
  18. package/dist/application/BrowserEvidence.js +3 -8
  19. package/dist/application/BrowserScenarioEvidence.js +2 -18
  20. package/dist/application/CallPathTracing.js +19 -3
  21. package/dist/application/CapabilityInventory.js +48 -11
  22. package/dist/application/ClientConfigurationDocument.js +917 -8
  23. package/dist/application/ClientRegistrationIdentity.js +26 -5
  24. package/dist/application/ClientRegistrationStatus.js +29 -14
  25. package/dist/application/DirectAnalysis.js +56 -51
  26. package/dist/application/DirectAnalysisCleanup.js +72 -0
  27. package/dist/application/DirectAnalysisStatus.js +4 -5
  28. package/dist/application/Doctor.js +19 -21
  29. package/dist/application/DoctorDiagnostics.js +1 -2
  30. package/dist/application/DoctorScope.js +25 -13
  31. package/dist/application/EnhancedLiteralTracing.js +22 -25
  32. package/dist/application/EnhancedTools.js +64 -17
  33. package/dist/application/EvidenceBundleFiles.js +30 -13
  34. package/dist/application/FunctionAnalysisEvidence.js +2 -3
  35. package/dist/application/InventoryProjectionEvidence.js +4 -3
  36. package/dist/application/InvestigationProviders.js +11 -2
  37. package/dist/application/JsonFiles.js +83 -28
  38. package/dist/application/LinuxHopper.js +9 -6
  39. package/dist/application/MacHopper.js +15 -18
  40. package/dist/application/ProcedureAddressResolution.js +11 -0
  41. package/dist/application/RealHopperAssertions.js +0 -11
  42. package/dist/application/ReconstructionCoverageService.js +7 -4
  43. package/dist/application/ReconstructionObligationCandidates.js +1 -1
  44. package/dist/application/ReconstructionObligationLedgerService.js +4 -3
  45. package/dist/application/ReferenceSourceImportEntries.js +1 -1
  46. package/dist/application/Setup.js +21 -17
  47. package/dist/application/SetupClientConfiguration.js +10 -15
  48. package/dist/application/SetupHost.js +21 -29
  49. package/dist/application/SetupPlan.js +11 -9
  50. package/dist/application/SupportedClients.js +34 -1
  51. package/dist/application/Uninstall.js +82 -29
  52. package/dist/application/Update.js +18 -3
  53. package/dist/application/UpdateMaintenance.js +7 -5
  54. package/dist/application/UpdateRuntime.js +57 -36
  55. package/dist/application/WebModuleTraceService.js +4 -2
  56. package/dist/application/WebNetworkCaptureService.js +4 -2
  57. package/dist/application/WebRuntimeService.js +5 -3
  58. package/dist/application/WebScriptExportService.js +32 -6
  59. package/dist/application/WebSourceLocationService.js +4 -2
  60. package/dist/application/WorkflowEvidence.js +105 -0
  61. package/dist/application/XrefsAddressResolution.js +45 -0
  62. package/dist/application/analysisView/AnalysisViewService.js +76 -0
  63. package/dist/application/binary/AnalysisClientCleanup.js +30 -5
  64. package/dist/application/binary/AnalysisProviderEvaluation.js +22 -7
  65. package/dist/application/binary/AnalysisProviderRegistry.js +4 -6
  66. package/dist/application/binary/AnalysisSnapshotCache.js +13 -14
  67. package/dist/application/binary/BinarySession.js +161 -93
  68. package/dist/application/binary/BinarySessionComposition.js +1 -3
  69. package/dist/application/binary/BinarySessionExecution.js +3 -5
  70. package/dist/application/binary/BinarySessionOpen.js +4 -4
  71. package/dist/application/binary/BinarySessionRecords.js +26 -4
  72. package/dist/application/binary/BinarySessionStatus.js +18 -7
  73. package/dist/application/binary/CompositeProvider.js +16 -17
  74. package/dist/application/binary/LazyAnalysisProvider.js +8 -5
  75. package/dist/application/binary/SessionProviderRouter.js +27 -135
  76. package/dist/application/binaryDiagnostics/BinaryLayoutService.js +4 -2
  77. package/dist/application/binaryDiagnostics/RecordedCrashService.js +4 -2
  78. package/dist/application/evm/EvmInterfaceService.js +4 -2
  79. package/dist/application/homebrew.js +48 -0
  80. package/dist/application/investigation/EvidenceLedger.js +21 -7
  81. package/dist/application/investigation/InvestigationRecords.js +8 -0
  82. package/dist/application/javascript/ElectronActiveEvidence.js +9 -13
  83. package/dist/application/javascript/JavaScriptAnalysisControl.js +34 -0
  84. package/dist/application/javascript/JavaScriptApplicationEvidence.js +21 -4
  85. package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +19 -2
  86. package/dist/application/javascript/JavaScriptApplicationService.js +27 -15
  87. package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +5 -5
  88. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +10 -7
  89. package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +44 -10
  90. package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +11 -3
  91. package/dist/application/javascript/JavaScriptArtifactGraphContext.js +9 -0
  92. package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +8 -5
  93. package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +12 -3
  94. package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +0 -1
  95. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +49 -19
  96. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +56 -8
  97. package/dist/application/javascript/JavaScriptModuleRelationships.js +38 -9
  98. package/dist/application/javascript/JavaScriptRecoveryService.js +4 -2
  99. package/dist/application/javascript/JavaScriptRuntimeObservationService.js +6 -4
  100. package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +3 -3
  101. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +2 -3
  102. package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +63 -61
  103. package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +1 -2
  104. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +2 -3
  105. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +1 -5
  106. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +75 -46
  107. package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +2 -3
  108. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +64 -19
  109. package/dist/application/managed/ManagedApplicationGraphService.js +4 -3
  110. package/dist/application/managed/ManagedMemberComparisonService.js +9 -5
  111. package/dist/application/managed/ManagedNativeVerificationService.js +6 -4
  112. package/dist/application/managed/ManagedReconstructionService.js +4 -3
  113. package/dist/application/process/ProcessCli.js +25 -17
  114. package/dist/application/process/ProcessEvidence.js +4 -4
  115. package/dist/application/workflowInputError.js +18 -0
  116. package/dist/artifacts/ArtifactProvider.js +48 -13
  117. package/dist/artifacts/ArtifactReader.js +31 -0
  118. package/dist/artifacts/DirectoryArtifactReader.js +2 -1
  119. package/dist/artifacts/MachOSliceArtifactReader.js +106 -15
  120. package/dist/artifacts/NativeDmgArtifactReader.js +73 -21
  121. package/dist/artifacts/SafeOutputTree.js +16 -2
  122. package/dist/artifacts/ZipArtifactReader.js +11 -4
  123. package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +26 -5
  124. package/dist/artifacts/apple/DylibResolutionReader.js +17 -7
  125. package/dist/artifacts/apple/InterfaceBuilderAnalysis.js +176 -56
  126. package/dist/artifacts/apple/InterfaceBuilderDecodeBudget.js +195 -0
  127. package/dist/artifacts/apple/KeyedArchiveReader.js +55 -23
  128. package/dist/artifacts/apple/MachoLoadCommandReader.js +92 -31
  129. package/dist/artifacts/apple/NibArchive.js +81 -14
  130. package/dist/artifacts/apple/NibViewHierarchy.js +10 -3
  131. package/dist/artifacts/apple/PlistNumberLiterals.js +164 -0
  132. package/dist/artifacts/extraction/ArtifactExtraction.js +78 -21
  133. package/dist/artifacts/inventory/ArtifactGraphConstruction.js +79 -68
  134. package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
  135. package/dist/artifacts/inventory/reader.js +3 -3
  136. package/dist/artifacts/inventory/scanCanonical.js +59 -38
  137. package/dist/artifacts/inventory/scanReader.js +5 -9
  138. package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +6 -2
  139. package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
  140. package/dist/browser/CdpBrowserProvider.js +2 -3
  141. package/dist/browser/CdpCaptureCompleteness.js +2 -0
  142. package/dist/browser/CdpCaptureEventHandlers.js +78 -15
  143. package/dist/browser/CdpCaptureEventTypes.js +5 -1
  144. package/dist/browser/CdpCaptureEvents.js +25 -1
  145. package/dist/browser/CdpCaptureValues.js +20 -0
  146. package/dist/browser/CdpConnection.js +30 -11
  147. package/dist/browser/CdpElectronProvider.js +0 -2
  148. package/dist/browser/CdpElectronScriptEvents.js +2 -8
  149. package/dist/browser/CdpElectronScripts.js +2 -3
  150. package/dist/browser/CdpOptionalCommand.js +2 -3
  151. package/dist/browser/CdpPageCapture.js +23 -1
  152. package/dist/browser/CdpPageCaptureScripts.js +2 -3
  153. package/dist/browser/CdpSafeMetadata.js +10 -10
  154. package/dist/browser/PlaywrightBrowserScenarioProvider.js +59 -44
  155. package/dist/browser/PlaywrightElectronActiveActions.js +34 -79
  156. package/dist/browser/PlaywrightElectronActiveProjection.js +141 -0
  157. package/dist/browser/PlaywrightElectronActiveProvider.js +133 -130
  158. package/dist/browser/PlaywrightScenarioArtifacts.js +1 -1
  159. package/dist/browser/PlaywrightScenarioBrowser.js +139 -39
  160. package/dist/browser/PlaywrightScenarioEvents.js +1 -1
  161. package/dist/browser/PlaywrightScenarioSession.js +39 -22
  162. package/dist/browser/WebSourceMapFetcher.js +426 -72
  163. package/dist/browser/assets/LocalWebScriptArtifacts.js +2 -2
  164. package/dist/browser/assets/ScriptCaptureAdapters.js +1 -1
  165. package/dist/browser/history/CaptureFailures.js +41 -1
  166. package/dist/browser/history/CaptureRelease.js +5 -0
  167. package/dist/browser/history/HarCaptureAdapter.js +3 -3
  168. package/dist/browser/history/HarJson.js +3 -2
  169. package/dist/browser/history/HistoricalCaptureDecoder.js +4 -2
  170. package/dist/browser/history/MitmproxyCaptureAdapter.js +4 -2
  171. package/dist/catalogIdentity.js +0 -1
  172. package/dist/cli/analysisSelector.js +23 -0
  173. package/dist/cli/analysisViewCommands.js +36 -0
  174. package/dist/cli/applicationCommands.js +2 -3
  175. package/dist/cli/artifactCommands.js +11 -12
  176. package/dist/cli/coreAnalysisCommands.js +3 -3
  177. package/dist/cli/coreBinaryCommands.js +100 -37
  178. package/dist/cli/coreNativeCommands.js +9 -10
  179. package/dist/cli/electronCommands.js +10 -9
  180. package/dist/cli/interactiveSetup.js +6 -6
  181. package/dist/cli/javascriptApplicationAnalysis.js +7 -3
  182. package/dist/cli/jsonOutput.js +4 -99
  183. package/dist/cli/managedCommands.js +7 -8
  184. package/dist/cli/nativeCallCommands.js +3 -5
  185. package/dist/cli/omittableDefaults.js +50 -0
  186. package/dist/cli/processCommands.js +3 -2
  187. package/dist/cli/setupCommands.js +16 -15
  188. package/dist/cli/utilityCommands.js +9 -9
  189. package/dist/cli/webRuntimeCommands.js +8 -8
  190. package/dist/cli.js +18 -9
  191. package/dist/cliBrowserScenarioCommands.js +2 -2
  192. package/dist/cliCommandNames.js +1 -1
  193. package/dist/cliJsonInput.js +24 -5
  194. package/dist/cliOutput.js +0 -38
  195. package/dist/composition/auxiliaryAnalysisProviders.js +27 -23
  196. package/dist/composition/binary.js +9 -9
  197. package/dist/composition/browserScenario.js +2 -1
  198. package/dist/composition/directAnalysis.js +20 -13
  199. package/dist/composition/electronScenario.js +1 -1
  200. package/dist/composition/optionalObservationProviders.js +12 -7
  201. package/dist/config/environment.js +10 -0
  202. package/dist/config/ghidraStartupTimeout.js +12 -0
  203. package/dist/config/homeDirectory.js +12 -0
  204. package/dist/config/mcpResponseBudget.js +30 -0
  205. package/dist/config/parseConfig.js +8 -3
  206. package/dist/config/parsers.js +19 -22
  207. package/dist/contracts/analysisViewToolContracts.js +56 -0
  208. package/dist/contracts/applicationToolContracts.js +5 -4
  209. package/dist/contracts/artifactComparisonExample.js +2 -2
  210. package/dist/contracts/artifactToolContracts.js +1 -1
  211. package/dist/contracts/browserScenarioToolContracts.js +1 -1
  212. package/dist/contracts/browserToolContracts.js +19 -15
  213. package/dist/contracts/enhancedInputs.js +7 -5
  214. package/dist/contracts/enhancedToolContracts.js +7 -6
  215. package/dist/contracts/evm/evmToolContracts.js +1 -1
  216. package/dist/contracts/functionWorkflowToolContracts.js +1 -1
  217. package/dist/contracts/hopperMemoryContracts.js +2 -5
  218. package/dist/contracts/inputSchemaPresentation.js +90 -0
  219. package/dist/contracts/investigationExamples.js +4 -3
  220. package/dist/contracts/javascript/electronToolContracts.js +2 -2
  221. package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +0 -20
  222. package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +245 -0
  223. package/dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js +1 -1
  224. package/dist/contracts/managed/managedToolContracts.js +7 -14
  225. package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
  226. package/dist/contracts/mobileApplicationGraphExamples.js +3 -3
  227. package/dist/contracts/native/binaryDiagnosticsToolContracts.js +1 -1
  228. package/dist/contracts/native/nativeToolContracts.js +5 -3
  229. package/dist/contracts/officialToolContracts.js +16 -16
  230. package/dist/contracts/promptContracts.js +5 -5
  231. package/dist/contracts/providerSelection.js +1 -1
  232. package/dist/contracts/sessionLifecycleInputs.js +3 -7
  233. package/dist/contracts/sessionStatusContract.js +2 -4
  234. package/dist/contracts/sessionToolContracts.js +18 -8
  235. package/dist/contracts/sessionToolSchemas.js +3 -19
  236. package/dist/contracts/toolContractExamples.js +0 -1
  237. package/dist/contracts/toolContractHelpers.js +4 -1
  238. package/dist/contracts/toolContracts.js +2 -0
  239. package/dist/contracts/toolEffects.js +1 -1
  240. package/dist/contracts/toolOutputSchemaGroups.js +160 -115
  241. package/dist/contracts/toolOutputSchemaPrimitives.js +28 -20
  242. package/dist/contracts/toolSchemaMetadata.js +41 -33
  243. package/dist/contracts/webNetworkCaptureToolContracts.js +2 -2
  244. package/dist/contracts/webRuntimeToolContracts.js +1 -1
  245. package/dist/contracts/webScriptToolContracts.js +1 -1
  246. package/dist/doctorRuntime.js +7 -5
  247. package/dist/domain/analysisErrorBase.js +8 -3
  248. package/dist/domain/analysisErrorCore.js +6 -1
  249. package/dist/domain/analysisErrorPresentation.js +90 -20
  250. package/dist/domain/analysisErrorProjection.js +130 -32
  251. package/dist/domain/analysisSnapshot.js +29 -31
  252. package/dist/domain/analysisView/analysisView.js +243 -0
  253. package/dist/domain/analysisView/analysisViewCoverage.js +19 -0
  254. package/dist/domain/analysisView/binaryLayoutView.js +159 -0
  255. package/dist/domain/analysisView/javascriptApplicationView.js +238 -0
  256. package/dist/domain/android/androidAnalysis.js +2 -4
  257. package/dist/domain/android/androidApplication.js +18 -10
  258. package/dist/domain/apple/appleApplication.js +42 -15
  259. package/dist/domain/apple/dyldEnvironment.js +73 -0
  260. package/dist/domain/apple/dylibResolution.js +130 -12
  261. package/dist/domain/apple/dylibResolutionFindings.js +9 -7
  262. package/dist/domain/apple/interfaceBuilderGraph.js +25 -14
  263. package/dist/domain/apple/interfaceBuilderKeyedArchive.js +13 -3
  264. package/dist/domain/apple/keyedArchive.js +35 -3
  265. package/dist/domain/apple/machoContainer.js +54 -0
  266. package/dist/domain/apple/plistNumbers.js +76 -0
  267. package/dist/domain/artifactComparison.js +15 -6
  268. package/dist/domain/artifactGraph.js +16 -3
  269. package/dist/domain/artifactIdentity.js +29 -0
  270. package/dist/domain/artifactInventoryEvidence.js +28 -40
  271. package/dist/domain/artifactOperationError.js +3 -3
  272. package/dist/domain/artifactPartialObservation.js +1 -0
  273. package/dist/domain/artifactPathSyntax.js +49 -0
  274. package/dist/domain/binaryTarget.js +39 -13
  275. package/dist/domain/bridgeCandidateProjection.js +71 -0
  276. package/dist/domain/browserCaptureComparison.js +13 -49
  277. package/dist/domain/browserCompleteness.js +1 -0
  278. package/dist/domain/browserNetworkEvidence.js +10 -4
  279. package/dist/domain/browserObservation.js +0 -1
  280. package/dist/domain/browserObservationError.js +24 -5
  281. package/dist/domain/browserObservationSchemas.js +14 -3
  282. package/dist/domain/browserScenario.js +0 -1
  283. package/dist/domain/browserScenarioCapture.js +1 -2
  284. package/dist/domain/browserScenarioDiff.js +0 -2
  285. package/dist/domain/browserScenarioDiffEvidence.js +0 -12
  286. package/dist/domain/browserScenarioDiffValues.js +2 -2
  287. package/dist/domain/browserScenarioValues.js +5 -10
  288. package/dist/domain/bundleComparison.js +3 -2
  289. package/dist/domain/callPath.js +8 -9
  290. package/dist/domain/callPathSchemas.js +2 -2
  291. package/dist/domain/canonicalJsonDigestSteps.js +133 -0
  292. package/dist/domain/canonicalOrdering.js +9 -5
  293. package/dist/domain/changedBehavior.js +9 -9
  294. package/dist/domain/comparisonSourceEvidence.js +40 -0
  295. package/dist/domain/completionLedgerGeneration.js +2 -1
  296. package/dist/domain/configurationErrors.js +13 -1
  297. package/dist/domain/conformancePackage.js +4 -3
  298. package/dist/domain/evidence.js +65 -36
  299. package/dist/domain/evidenceBundle.js +47 -8
  300. package/dist/domain/evidenceCompletionLedger.js +2 -1
  301. package/dist/domain/evidenceErrors.js +12 -1
  302. package/dist/domain/explicitSensitiveFailure.js +17 -1
  303. package/dist/domain/firmware/firmwareAnalysis.js +6 -7
  304. package/dist/domain/functionComparison.js +4 -5
  305. package/dist/domain/functionComparisonDimensions.js +120 -87
  306. package/dist/domain/functionComparisonNormalization.js +23 -34
  307. package/dist/domain/functionComparisonResults.js +1 -4
  308. package/dist/domain/functionComparisonSchemas.js +2 -8
  309. package/dist/domain/functionDossierEvidence.js +2 -37
  310. package/dist/domain/hopperErrors.js +23 -2
  311. package/dist/domain/hopperValues.js +51 -8
  312. package/dist/domain/immutableJson.js +114 -0
  313. package/dist/domain/inputIssueProjection.js +3 -0
  314. package/dist/domain/javascript/electronActiveObservation.js +47 -64
  315. package/dist/domain/javascript/electronObservation.js +14 -3
  316. package/dist/domain/javascript/electronStaticAnalysisBrowser.js +10 -9
  317. package/dist/domain/javascript/electronStaticAnalysisIpc.js +2 -1
  318. package/dist/domain/javascript/electronStaticAnalysisNative.js +2 -1
  319. package/dist/domain/javascript/electronStaticAnalysisValues.js +6 -12
  320. package/dist/domain/javascript/javascriptApplicationAnalysis.js +71 -23
  321. package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +2 -0
  322. package/dist/domain/javascript/javascriptApplicationGraph.js +39 -3
  323. package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +9 -2
  324. package/dist/domain/javascript/javascriptApplicationVersionItems.js +5 -2
  325. package/dist/domain/javascript/javascriptApplicationVersionKeys.js +2 -1
  326. package/dist/domain/javascript/javascriptAstValues.js +20 -0
  327. package/dist/{application/javascript/JavaScriptReturnShapeProjection.js → domain/javascript/javascriptExportReturnShapeProjection.js} +4 -4
  328. package/dist/domain/javascript/javascriptExportShapeComparison.js +7 -1
  329. package/dist/domain/javascript/javascriptExportShapeComparisonIdentity.js +6 -1
  330. package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +29 -1
  331. package/dist/domain/javascript/javascriptExportShapeSelection.js +5 -5
  332. package/dist/domain/javascript/javascriptExportShapeVariants.js +67 -14
  333. package/dist/domain/javascript/javascriptFeatureSeed.js +20 -0
  334. package/dist/domain/javascript/javascriptFeatureTraversal.js +0 -1
  335. package/dist/domain/javascript/javascriptNativeHandoff.js +1 -1
  336. package/dist/domain/javascript/javascriptRecovery.js +3 -8
  337. package/dist/domain/javascript/javascriptRuntimeLoadState.js +0 -1
  338. package/dist/domain/javascript/javascriptRuntimeObservation.js +10 -2
  339. package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +1 -1
  340. package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +3 -2
  341. package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +0 -1
  342. package/dist/domain/javascript/javascriptSemanticAnalysis.js +106 -5
  343. package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +2 -1
  344. package/dist/domain/javascript/javascriptSemanticCalls.js +2 -1
  345. package/dist/domain/javascript/javascriptSemanticChildProcesses.js +2 -1
  346. package/dist/domain/javascript/javascriptSemanticCoverage.js +6 -5
  347. package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +9 -17
  348. package/dist/domain/javascript/javascriptSemanticDataEffects.js +23 -6
  349. package/dist/domain/javascript/javascriptSemanticGraph.js +98 -43
  350. package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +1 -0
  351. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +77 -20
  352. package/dist/domain/javascript/javascriptSemanticMutationValues.js +21 -27
  353. package/dist/domain/javascript/javascriptSemanticObjects.js +83 -42
  354. package/dist/domain/javascript/javascriptSemanticPrimitives.js +18 -21
  355. package/dist/domain/javascript/javascriptSemanticProjection.js +2 -3
  356. package/dist/domain/javascript/javascriptSemanticPromises.js +2 -1
  357. package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -4
  358. package/dist/domain/javascript/javascriptSemanticResourceLimits.js +77 -0
  359. package/dist/domain/javascript/javascriptSemanticResources.js +1 -1
  360. package/dist/domain/javascript/javascriptSemanticReturns.js +32 -17
  361. package/dist/domain/javascript/javascriptSemanticSlots.js +72 -0
  362. package/dist/domain/javascript/javascriptSemanticValues.js +126 -61
  363. package/dist/domain/javascript/javascriptSourceMapPaths.js +104 -0
  364. package/dist/domain/javascript/javascriptSourceParser.js +6 -2
  365. package/dist/domain/javascript/javascriptStaticAnalysis.js +22 -17
  366. package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +5 -3
  367. package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +16 -5
  368. package/dist/domain/javascript/javascriptStaticAnalysisFindings.js +66 -7
  369. package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +28 -17
  370. package/dist/domain/javascript/javascriptStaticAnalysisState.js +3 -2
  371. package/dist/domain/javascript/sourceToBundleComparison.js +12 -3
  372. package/dist/domain/javascript/sourceToBundleSignals.js +47 -19
  373. package/dist/domain/jsonSerialization.js +109 -0
  374. package/dist/domain/jsonValue.js +90 -6
  375. package/dist/domain/localPath.js +6 -0
  376. package/dist/domain/managed/managedApplicationGraph.js +10 -10
  377. package/dist/domain/managed/managedArtifact.js +6 -4
  378. package/dist/domain/managed/managedInspectionEvidence.js +16 -0
  379. package/dist/domain/managed/managedMemberComparison.js +2 -9
  380. package/dist/domain/managed/managedMemberComparisonMatch.js +5 -9
  381. package/dist/domain/managed/managedNativeVerification.js +3 -11
  382. package/dist/domain/managed/managedNativeVerificationMatch.js +9 -3
  383. package/dist/domain/native/binaryLayout.js +2 -3
  384. package/dist/domain/native/fileOffsetPartialObservation.js +1 -0
  385. package/dist/domain/native/nativeApiBoundary.js +1 -1
  386. package/dist/domain/native/nativeCallObservation.js +37 -13
  387. package/dist/domain/native/nativeCallPartialObservation.js +33 -0
  388. package/dist/domain/native/nativeInstruction.js +7 -0
  389. package/dist/domain/native/recordedCrash.js +2 -3
  390. package/dist/domain/offsetDateTime.js +17 -0
  391. package/dist/domain/process/processCapture.js +21 -16
  392. package/dist/domain/process/processCaptureCoverage.js +67 -0
  393. package/dist/domain/process/processCaptureExample.js +2 -1
  394. package/dist/domain/process/processCaptureParsing.js +1 -34
  395. package/dist/domain/process/processCaptureValidation.js +81 -13
  396. package/dist/domain/process/processComparison.js +79 -26
  397. package/dist/domain/process/processObservation.js +10 -2
  398. package/dist/domain/process/processScenario.js +35 -12
  399. package/dist/domain/process/processTraceComparison.js +0 -2
  400. package/dist/domain/process/processTraceDimensionProjection.js +1 -1
  401. package/dist/domain/process/processTraceEvaluation.js +15 -11
  402. package/dist/domain/process/processTraceSpecification.js +3 -4
  403. package/dist/domain/propertyListKeys.js +1 -1
  404. package/dist/domain/propertyListXmlText.js +19 -0
  405. package/dist/domain/providerAdapterError.js +3 -1
  406. package/dist/domain/providerOperationHealth.js +54 -0
  407. package/dist/domain/reconstructionCoverage.js +5 -2
  408. package/dist/domain/reconstructionObligationLedgerSchemas.js +2 -1
  409. package/dist/domain/reconstructionReadinessSchemas.js +2 -1
  410. package/dist/domain/reconstructionVerification.js +9 -46
  411. package/dist/domain/reconstructionVerificationSchemas.js +4 -3
  412. package/dist/domain/referenceSourceGraph.js +20 -21
  413. package/dist/domain/staticRuntimeCorrelation.js +8 -45
  414. package/dist/domain/stringPatterns.js +6 -0
  415. package/dist/domain/swiftSymbolClassification.js +61 -0
  416. package/dist/domain/symbolAnalysis.js +66 -18
  417. package/dist/domain/webBundleAnalysis.js +20 -8
  418. package/dist/domain/webBundleAnalyzerInspection.js +13 -8
  419. package/dist/domain/webBundleAnalyzerResult.js +41 -2
  420. package/dist/domain/webCaptureDiff.js +0 -1
  421. package/dist/domain/webCaptureDiffSchemas.js +6 -3
  422. package/dist/domain/webEventListeners.js +3 -2
  423. package/dist/domain/webExecution.js +3 -2
  424. package/dist/domain/webRuntime.js +19 -7
  425. package/dist/domain/webScriptExport.js +1 -1
  426. package/dist/domain/webSourceLocation.js +1 -0
  427. package/dist/dotnet/ManagedArtifactInspector.js +2 -19
  428. package/dist/dotnet/ManagedMemberInspector.js +12 -18
  429. package/dist/dotnet/ManagedMemberInspectorCore.js +47 -44
  430. package/dist/dotnet/ManagedMemberRows.js +75 -62
  431. package/dist/dotnet/ManagedMetadataInventory.js +16 -22
  432. package/dist/dotnet/ManagedMethodBodyReader.js +4 -0
  433. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +109 -94
  434. package/dist/dotnet/ManagedNativeBoundaryInspector.js +12 -21
  435. package/dist/dotnet/ManagedReaderFailure.js +16 -0
  436. package/dist/dotnet/ManagedStaticProvider.js +3 -5
  437. package/dist/evaluation/AgentEvaluationFixtures.js +250 -0
  438. package/dist/evaluation/AgentEvaluationReport.js +28 -0
  439. package/dist/evaluation/CodexAgentEval.js +12 -8
  440. package/dist/evaluation/KnownAnswerEvaluation.js +281 -0
  441. package/dist/evm/EvmoleInterfaceProvider.js +2 -1
  442. package/dist/firmware/FirmwareCommand.js +9 -5
  443. package/dist/firmware/FirmwareFiles.js +1 -1
  444. package/dist/firmware/FirmwareProvider.js +4 -4
  445. package/dist/generatedPackageMetadata.js +2 -2
  446. package/dist/ghidra/GhidraAnalysisProfile.js +7 -5
  447. package/dist/ghidra/GhidraClient.js +126 -34
  448. package/dist/ghidra/GhidraClientStartup.js +0 -2
  449. package/dist/ghidra/GhidraDiagnostics.js +7 -7
  450. package/dist/ghidra/GhidraDoctor.js +6 -5
  451. package/dist/ghidra/GhidraFunctionValues.js +13 -12
  452. package/dist/ghidra/GhidraInstallation.js +58 -33
  453. package/dist/ghidra/GhidraInventoryValues.js +14 -4
  454. package/dist/ghidra/GhidraJavaLaunch.js +66 -0
  455. package/dist/ghidra/GhidraLauncher.js +47 -22
  456. package/dist/ghidra/GhidraProvider.js +6 -2
  457. package/dist/ghidra/GhidraProviderCapabilities.js +20 -2
  458. package/dist/ghidra/GhidraProviderClient.js +36 -15
  459. package/dist/ghidra/GhidraSessionError.js +13 -7
  460. package/dist/ghidra/GhidraSessionRoot.js +39 -0
  461. package/dist/ghidra/GhidraTargetSnapshot.js +47 -12
  462. package/dist/ghidra/GhidraTransport.js +20 -0
  463. package/dist/ghidra/extensions/GhidraExtensions.js +17 -10
  464. package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +8 -2
  465. package/dist/hopper/BridgeLauncher.js +65 -56
  466. package/dist/hopper/HopperAnalysisProfile.js +65 -12
  467. package/dist/hopper/HopperCleanup.js +63 -22
  468. package/dist/hopper/HopperClient.js +288 -59
  469. package/dist/hopper/HopperFileOffset.js +237 -0
  470. package/dist/hopper/HopperMachOImage.js +197 -0
  471. package/dist/hopper/HopperOperationStage.js +6 -0
  472. package/dist/hopper/HopperProvider.js +71 -19
  473. package/dist/hopper/HopperProviderCapabilities.js +19 -1
  474. package/dist/hopper/HopperRegexSearch.js +134 -0
  475. package/dist/hopper/HopperRegexWorker.js +27 -0
  476. package/dist/hopper/HopperRequestQueue.js +68 -19
  477. package/dist/hopper/HopperTargetLease.js +133 -49
  478. package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -0
  479. package/dist/ida/IdaConfiguration.js +8 -3
  480. package/dist/ida/IdaInput.js +1 -7
  481. package/dist/ida/IdaMcpConnection.js +8 -4
  482. package/dist/ida/IdaOperationRunner.js +3 -3
  483. package/dist/ida/IdaProvider.js +8 -12
  484. package/dist/ida/IdaSessionClient.js +20 -18
  485. package/dist/ida/IdaWorkspace.js +12 -13
  486. package/dist/inspector/JavaScriptRuntimeScope.js +9 -1
  487. package/dist/inspector/V8InspectorCaptureProjection.js +9 -4
  488. package/dist/inspector/V8InspectorProvider.js +82 -36
  489. package/dist/javascript/recovery/WakaruCommand.js +7 -2
  490. package/dist/javascript/recovery/WakaruExecution.js +5 -2
  491. package/dist/javascript/sourceMaps/DecodedSourceMap.js +47 -0
  492. package/dist/javascript/sourceMaps/SourceMapCommand.js +16 -0
  493. package/dist/javascript/sourceMaps/SourceMapFormat.js +79 -31
  494. package/dist/javascript/sourceMaps/TraceSourceMap.js +14 -28
  495. package/dist/main/shutdown.js +11 -3
  496. package/dist/main/startup.js +9 -2
  497. package/dist/main/transport.js +22 -2
  498. package/dist/main.js +11 -18
  499. package/dist/mcpDoctor.js +62 -2
  500. package/dist/native/AppleDispatchCoverage.js +47 -6
  501. package/dist/native/AppleDispatchDecodeFacts.js +6 -0
  502. package/dist/native/AppleDispatchMetadata.js +6 -3
  503. package/dist/native/AppleMachoFixups.js +48 -24
  504. package/dist/native/AppleMachoSelection.js +48 -22
  505. package/dist/native/AppleObjcCategories.js +6 -2
  506. package/dist/native/AppleObjcDispatchFacets.js +5 -2
  507. package/dist/native/AppleObjcProperties.js +2 -1
  508. package/dist/native/AppleSwiftDispatchFacets.js +27 -21
  509. package/dist/native/AppleSwiftVtables.js +21 -15
  510. package/dist/native/CommandRunner.js +87 -88
  511. package/dist/native/LldbCallTracer.js +372 -103
  512. package/dist/native/LldbRetainedObservations.js +178 -0
  513. package/dist/native/NativeCallObservation.js +62 -3
  514. package/dist/native/NativeMacOSProvider.js +122 -31
  515. package/dist/native/NativeUiHelperRuntime.js +11 -2
  516. package/dist/native/NativeUiObservation.js +2 -2
  517. package/dist/native/SignatureTargetBinding.js +155 -0
  518. package/dist/native/parsers/lipo.js +71 -1
  519. package/dist/native/pwndbg/PwndbgCoreContext.js +25 -5
  520. package/dist/native/pwntools/PwntoolsDecoder.js +2 -1
  521. package/dist/native/pwntools/RecordedCrashStructureBindings.js +2 -0
  522. package/dist/process/DarwinProcessRunTokenReader.js +23 -10
  523. package/dist/process/ExecFileOutput.js +108 -6
  524. package/dist/process/OwnedCommand.js +7 -2
  525. package/dist/process/PrivateRuntimeRoot.js +10 -5
  526. package/dist/process/ProcessOwnership.js +204 -57
  527. package/dist/process/ProcessOwnershipObservation.js +60 -9
  528. package/dist/process/ProviderProcess.js +39 -10
  529. package/dist/process/capture/FilesystemSnapshot.js +50 -13
  530. package/dist/process/capture/ProcessCaptureError.js +15 -2
  531. package/dist/process/capture/ProcessCaptureLifecycle.js +235 -81
  532. package/dist/process/capture/ProcessFilesystemEffects.js +33 -3
  533. package/dist/process/capture/ProcessHarness.js +21 -25
  534. package/dist/process/capture/ProcessNormalization.js +20 -2
  535. package/dist/process/capture/ProcessSampling.js +25 -2
  536. package/dist/process/capture/TerminalRenderer.js +14 -0
  537. package/dist/process/snapshotEnvironment.js +14 -0
  538. package/dist/server/EvidenceMcpServer.js +157 -0
  539. package/dist/server/createServer.js +61 -41
  540. package/dist/server/mcpClientMetadata.js +12 -5
  541. package/dist/server/promptCompletion.js +3 -8
  542. package/dist/server/registerAnalysisViewTool.js +15 -0
  543. package/dist/server/registerAndroidTools.js +2 -5
  544. package/dist/server/registerApplicationTools/compareExportShapes.js +4 -5
  545. package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
  546. package/dist/server/registerApplicationTools/compareVersions.js +4 -5
  547. package/dist/server/registerApplicationTools/coverage.js +1 -2
  548. package/dist/server/registerApplicationTools/helpers.js +1 -4
  549. package/dist/server/registerApplicationTools/obligationLedger.js +4 -5
  550. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -4
  551. package/dist/server/registerApplicationTools/traceFeature.js +4 -5
  552. package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
  553. package/dist/server/registerArtifactComparisonTool.js +13 -10
  554. package/dist/server/registerBinaryDiagnosticsTools.js +2 -5
  555. package/dist/server/registerBrowserScenarioTool.js +3 -6
  556. package/dist/server/registerBrowserTools.js +13 -18
  557. package/dist/server/registerBundleComparisonTool.js +5 -7
  558. package/dist/server/registerCloseLifecycleTool.js +9 -20
  559. package/dist/server/registerElectronTools.js +10 -15
  560. package/dist/server/registerEnhancedTools.js +36 -77
  561. package/dist/server/registerEvidenceTools.js +3 -6
  562. package/dist/server/registerEvmTools.js +2 -5
  563. package/dist/server/registerFirmwareTools.js +2 -5
  564. package/dist/server/registerFunctionComparisonTool.js +15 -12
  565. package/dist/server/registerInvestigationTools.js +16 -17
  566. package/dist/server/registerJavaScriptRecoveryTool.js +2 -5
  567. package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -8
  568. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +5 -8
  569. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -7
  570. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +6 -9
  571. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +6 -9
  572. package/dist/server/registerOfficialTools.js +4 -21
  573. package/dist/server/registerProcessComparisonTool.js +74 -48
  574. package/dist/server/registerRecordedCrashTools.js +2 -5
  575. package/dist/server/registerSessionRecordTools.js +19 -24
  576. package/dist/server/registerSessionStatusTool.js +19 -6
  577. package/dist/server/registerSessionTools.js +20 -18
  578. package/dist/server/registerWebModuleTool.js +2 -5
  579. package/dist/server/registerWebNetworkCaptureTool.js +2 -5
  580. package/dist/server/registerWebRuntimeTools.js +4 -9
  581. package/dist/server/registerWebScriptTool.js +2 -5
  582. package/dist/server/registerWebSourceLocationTool.js +2 -5
  583. package/dist/server/runDerivedOperation.js +15 -3
  584. package/dist/server/sessionAvailabilityPolicy.js +0 -1
  585. package/dist/server/toolRegistrationOptions.js +2 -2
  586. package/dist/server/toolResult.js +75 -51
  587. package/dist/server/toolResultEncoding.js +34 -0
  588. package/dist/windows/WindowsNativeLoader.js +1 -0
  589. package/dist/windows/WindowsOwnedProcess.js +60 -15
  590. package/dist/windows/WindowsPrivateRuntime.js +7 -8
  591. package/install.sh +1 -1
  592. package/native/windows/README.md +3 -1
  593. package/native/windows/build/manifest.json +2 -2
  594. package/native/windows/build/rea-windows-x64.node +0 -0
  595. package/package.json +44 -30
  596. package/scripts/electron-active-hook-boundaries.cjs +18 -20
  597. package/scripts/electron-active-hook.cjs +241 -37
  598. package/scripts/rea.mjs +3 -6
  599. package/skills/reverse-engineer-anything/SKILL.md +12 -3
  600. package/skills/reverse-engineer-anything/references/android-applications.md +6 -3
  601. package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -4
  602. package/skills/reverse-engineer-anything/references/javascript-applications.md +20 -3
  603. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +9 -0
  604. package/dist/config.js +0 -1
  605. package/dist/contracts/browserCaptureToolInputSchema.js +0 -43
  606. package/dist/contracts/process/processCaptureExample.js +0 -2
  607. package/dist/contracts/toolOutputSchemas.js +0 -2
  608. package/dist/ghidra/GhidraDefaults.js +0 -2
  609. package/dist/main/reload.js +0 -12
  610. package/dist/main/state.js +0 -3
  611. package/dist/server/sessionToolPolicies.js +0 -2
@@ -1,7 +1,7 @@
1
1
  import { exportWebScriptsInputSchema, webScriptExportResultSchema, } from "../domain/webScriptExport.js";
2
2
  import { webModuleTraceInputSchema, webModuleTraceResultSchema, } from "../domain/webModuleTrace.js";
3
3
  import { toolContractMetadata } from "./toolEffects.js";
4
- import { evidenceResultOf } from "./toolOutputSchemas.js";
4
+ import { evidenceResultOf } from "./toolOutputSchemaPrimitives.js";
5
5
  import { webSourceLocationInputSchema, webSourceLocationResultSchema, } from "../domain/webSourceLocation.js";
6
6
  /** Local captured-script publication contracts shared by CLI and MCP. */
7
7
  export const WEB_SCRIPT_TOOL_CONTRACTS = [
@@ -4,17 +4,19 @@ import { inspectSystemGhidraProvider } from "./ghidra/GhidraDoctor.js";
4
4
  import { inspectIdaRegistration } from "./ida/IdaDoctor.js";
5
5
  import { selectLinuxPrivateDisplayStrategy } from "./hopper/LinuxPrivateDisplayProbe.js";
6
6
  /** Compose provider diagnostics at the outer CLI adapter boundary. */
7
- export const createSystemDoctorHost = () => systemDoctorHost({
7
+ export const createSystemDoctorHost = (environment = process.env) => systemDoctorHost({
8
+ environment,
8
9
  providerInspections: async () => [
9
- await inspectSystemGhidraProvider(),
10
- inspectIdaRegistration(process.env.REA_IDA_MCP_CONFIG),
10
+ await inspectSystemGhidraProvider(environment),
11
+ inspectIdaRegistration(environment.REA_IDA_MCP_CONFIG),
11
12
  ],
12
- linuxDemoRuntimeCheck: inspectLinuxPrivateDisplay,
13
+ linuxDemoRuntimeCheck: () => inspectLinuxPrivateDisplay(environment),
13
14
  });
14
15
  const HOPPER_DEMO_HELPER_PATH = fileURLToPath(new URL("../scripts/hopper-demo-x11.py", import.meta.url));
15
- const inspectLinuxPrivateDisplay = async () => {
16
+ const inspectLinuxPrivateDisplay = async (environment) => {
16
17
  const selection = await selectLinuxPrivateDisplayStrategy({
17
18
  helperPath: HOPPER_DEMO_HELPER_PATH,
19
+ environment,
18
20
  });
19
21
  const value = selection.diagnostic;
20
22
  const detail = [
@@ -31,18 +31,23 @@ const ANALYSIS_ERROR_TAGS = [
31
31
  /** Base class for expected analysis, provider, and session failures. */
32
32
  export class AnalysisError extends Error {
33
33
  capturedOutput;
34
+ cleanup;
35
+ cleanupIncomplete;
36
+ cleanupResources;
34
37
  constructor(message, options) {
35
38
  super(message, options);
36
39
  this.capturedOutput =
37
40
  options?.capturedOutput === undefined
38
41
  ? undefined
39
42
  : { ...options.capturedOutput };
43
+ this.cleanup = options?.cleanup;
44
+ this.cleanupIncomplete = options?.cleanup !== undefined;
45
+ this.cleanupResources = options?.cleanup?.resources ?? [];
46
+ this.partialObservation = options?.partialObservation;
40
47
  }
41
48
  userMessage = undefined;
42
49
  userCategory = undefined;
43
- cleanupIncomplete = false;
44
- cleanupResources = [];
45
50
  executionFailure = undefined;
46
- partialObservation = undefined;
51
+ partialObservation;
47
52
  cleanupReport = undefined;
48
53
  }
@@ -5,26 +5,31 @@ export class AnalysisUnsupportedTargetError extends AnalysisError {
5
5
  path;
6
6
  reason;
7
7
  _tag = "AnalysisUnsupportedTargetError";
8
+ /** Refusal-specific recovery, when the producer knows an available workflow. */
9
+ remediationAction;
8
10
  constructor(operation, path, reason, options) {
9
11
  super(`Unsupported target for ${operation} at ${path}: ${reason}`, options);
10
12
  this.operation = operation;
11
13
  this.path = path;
12
14
  this.reason = reason;
15
+ this.remediationAction = options?.remediationAction;
13
16
  }
14
17
  }
15
- /** Provider reported a resource failure, distinct from malformed input or unsupported coverage. */
18
+ /** An analysis or transport resource failure, distinct from malformed input or unsupported coverage. */
16
19
  export class AnalysisResourceConstraintError extends AnalysisError {
17
20
  operation;
18
21
  resource;
19
22
  reason;
20
23
  reportedLimits;
21
24
  _tag = "AnalysisResourceConstraintError";
25
+ remediationAction;
22
26
  constructor(operation, resource, reason, reportedLimits, options) {
23
27
  super(`Resource constraint during ${operation}: ${reason}`, options);
24
28
  this.operation = operation;
25
29
  this.resource = resource;
26
30
  this.reason = reason;
27
31
  this.reportedLimits = reportedLimits;
32
+ this.remediationAction = options?.remediationAction;
28
33
  }
29
34
  }
30
35
  /** Provider-neutral invalid analysis input or output at an application boundary. */
@@ -2,42 +2,56 @@ import { AnalysisAccessDeniedError, AnalysisArtifactChangedError, AnalysisInputE
2
2
  import { ArtifactOperationError } from "./artifactOperationError.js";
3
3
  import { BinaryTargetError, ConfigurationError, NoBinaryOpenError, } from "./configurationErrors.js";
4
4
  import { BrowserObservationError } from "./browserObservationError.js";
5
- import { EvidenceFileError, EvidenceIntegrityError, EvidenceReferenceError, } from "./evidenceErrors.js";
5
+ import { EvidenceFileError, EvidenceIntegrityError, EvidenceReferenceError, AnalysisSnapshotMismatchError, } from "./evidenceErrors.js";
6
6
  import { HopperRemoteError, HopperProcessError, HopperStartError, HopperTimeoutError, } from "./hopperErrors.js";
7
7
  import { ProviderSelectionError } from "./providerSelectionError.js";
8
8
  import { UnknownRegistryError } from "./unknownRegistryError.js";
9
+ import { providerRetryAction } from "./providerOperationHealth.js";
9
10
  import {} from "./analysisErrorBase.js";
10
11
  import {} from "./analysisErrorProjection.js";
11
12
  export const analysisErrorRemediationAction = (error) => {
13
+ if (error instanceof AnalysisSnapshotMismatchError)
14
+ return "Run analysis without this snapshot, then save a fresh snapshot using the intended artifact, provider, and analysis profile.";
12
15
  if (error instanceof AnalysisUnsupportedTargetError)
13
- return "Select a target supported by this operation or choose an operation supporting the reported target format.";
16
+ return (error.remediationAction ??
17
+ "Select a target supported by this operation or choose an operation supporting the reported target format.");
14
18
  if (error instanceof AnalysisResourceConstraintError)
15
- return error.resource === "cpu"
16
- ? "Review the reported worker CPU limits and observed signal. Retry with sufficient CPU time or a smaller artifact; REA retains tighter inherited limits."
17
- : error.resource === "file-size"
18
- ? "Review the reported worker file-size limits and write failure. Retry with a sufficient file-size allowance for the evidence reply; REA retains tighter inherited limits."
19
- : "Review the reported worker memory limits and available host memory. Retry with sufficient memory or a smaller artifact; REA retains tighter inherited limits.";
19
+ return (error.remediationAction ??
20
+ (error.resource === "transport"
21
+ ? "Export retained session evidence through export_evidence_bundle to a caller-selected path, or use complete CLI JSON output. Tools that accept retained-evidence references can inspect compatible records. The connection remains usable."
22
+ : error.resource === "cpu"
23
+ ? "Review the reported worker CPU limits and observed signal. Retry with sufficient CPU time or a smaller artifact; REA retains tighter inherited limits."
24
+ : error.resource === "file-size"
25
+ ? "Review the reported worker file-size limits and write failure. Retry with a sufficient file-size allowance for the evidence reply; REA retains tighter inherited limits."
26
+ : "Review the reported worker memory limits and available host memory. Retry with sufficient memory or a smaller artifact; REA retains tighter inherited limits."));
20
27
  if (error instanceof HopperTimeoutError)
21
- return error.providerState === "busy"
22
- ? "Check binary_session.analysis_activity, wait for the active Hopper request to finish, then retry."
23
- : "Check binary_session for Hopper health, then retry the operation.";
28
+ return error.operation === undefined
29
+ ? "Inspect Hopper for a loader or license dialog and review details.launcher. Correct the loader configuration or complete Hopper setup, then open the target again."
30
+ : error.providerState === "busy"
31
+ ? "Check binary_session.analysis_activity, wait for the active Hopper request to finish, then retry."
32
+ : "Check binary_session for Hopper health, then retry the operation.";
24
33
  if (error instanceof HopperProcessError)
25
- return "Check binary_session provider health. Restart the owned Hopper process only when it has stopped.";
34
+ return hopperProcessRemediation(error);
26
35
  if (error instanceof HopperStartError)
27
36
  return error.ownerRunId === undefined
28
37
  ? "Check the Hopper launcher and target details, then retry opening the target."
29
38
  : `Use the active REA session ${error.ownerRunId} or close it before opening this target again.`;
30
39
  if (error instanceof HopperRemoteError)
31
- return "Review the Hopper diagnostic details; correct the request or retry if the failure was transient.";
40
+ return error.diagnosticType === "invalid_request"
41
+ ? "Correct the reported address, document, or arguments and retry."
42
+ : "Review the Hopper diagnostic details; correct the request or retry if the failure was transient.";
32
43
  if (error instanceof EvidenceReferenceError)
33
44
  return "Use an exact Evidence reference retained by this session, supply the complete inline Evidence, re-run its producer, or import its Evidence bundle. close_binary clears retained records.";
34
45
  if (error instanceof BinaryTargetError &&
35
46
  error.constraint === "directory_requires_file")
36
47
  return "For a JavaScript/Electron application directory, call analyze_javascript_application with input_path or run `rea analyze <directory>`. For binary analysis, select its executable file.";
37
- if (error instanceof AnalysisAccessDeniedError)
48
+ if (error instanceof AnalysisAccessDeniedError ||
49
+ (error instanceof BinaryTargetError && error.systemCode !== undefined))
38
50
  return "Check the current process's read access to the selected path. Retry with a readable local file.";
39
51
  if (error instanceof AnalysisArtifactChangedError)
40
- return "Wait until the selected file is stable, then retry this operation.";
52
+ return "Wait until the selected file is stable. For an active binary session, reopen the target with open_binary before retrying so REA acquires its current identity; for a CLI command or target-free tool, rerun the operation.";
53
+ if (error instanceof ConfigurationError && error.settings.length > 0)
54
+ return `Correct ${[...new Set(error.settings.map(({ setting }) => setting))].join(", ")} in the environment that starts REA (your shell or the MCP client's registration), then rerun.`;
41
55
  if (error instanceof AnalysisInputError)
42
56
  return "Correct the listed arguments and retry.";
43
57
  if (error instanceof UnknownRegistryError && error.reason === "not-found")
@@ -51,7 +65,10 @@ export const analysisErrorCategory = (error) => {
51
65
  if (error._tag === "ProcessCaptureError")
52
66
  return error.userCategory ?? "execution_failure";
53
67
  if (error instanceof BrowserObservationError)
54
- return browserErrorCategory(error.reason);
68
+ return error.userCategory ?? browserErrorCategory(error.reason);
69
+ if (error instanceof HopperRemoteError &&
70
+ error.diagnosticType === "invalid_request")
71
+ return "invalid_input";
55
72
  if (error instanceof HopperRemoteError &&
56
73
  error.diagnosticType === "authorization")
57
74
  return "unavailable";
@@ -59,9 +76,18 @@ export const analysisErrorCategory = (error) => {
59
76
  return "unavailable";
60
77
  if (error instanceof ArtifactOperationError)
61
78
  return artifactErrorCategory(error.reason);
79
+ if (error instanceof EvidenceFileError &&
80
+ (error.reason === "missing" ||
81
+ error.reason === "not-file" ||
82
+ error.reason === "exists"))
83
+ return "invalid_input";
62
84
  return STATIC_ERROR_CATEGORIES[error._tag] ?? "execution_failure";
63
85
  };
64
86
  const browserErrorCategory = (reason) => {
87
+ if (reason === "cancelled")
88
+ return "cancelled";
89
+ if (reason === "timeout")
90
+ return "timeout";
65
91
  if (reason === "payload_limit")
66
92
  return "truncated";
67
93
  if (reason === "target_not_found" ||
@@ -100,6 +126,8 @@ const STATIC_ERROR_CATEGORIES = {
100
126
  BinaryTargetError: "unavailable",
101
127
  };
102
128
  export const analysisErrorUserMessage = (error) => {
129
+ if (error instanceof AnalysisSnapshotMismatchError)
130
+ return error.message;
103
131
  if (error instanceof AnalysisUnsupportedTargetError)
104
132
  return error.message;
105
133
  if (error instanceof AnalysisResourceConstraintError)
@@ -127,13 +155,19 @@ export const analysisErrorUserMessage = (error) => {
127
155
  if (error instanceof EvidenceIntegrityError)
128
156
  return "Evidence is invalid or has changed. Recreate or re-import it, then try again.";
129
157
  if (error instanceof EvidenceFileError)
130
- return evidenceFileMessage(error.reason);
158
+ return evidenceFileMessage(error);
131
159
  if (error instanceof UnknownRegistryError && error.reason === "not-found")
132
160
  return "The requested residual unknown does not exist in this session. Check the unknown_id and try again.";
133
161
  if (error instanceof UnknownRegistryError)
134
162
  return "Evidence state changed before the update completed. Refresh the current state and try again.";
135
163
  if (error instanceof ConfigurationError)
136
- return "REA configuration is invalid. Run `rea doctor` and fix the reported setting.";
164
+ return error.settings.length === 0
165
+ ? "REA configuration is invalid. Run `rea doctor` and fix the reported setting."
166
+ : `REA configuration is invalid: ${error.settings
167
+ .map(({ setting, constraint }) => constraint.includes(setting)
168
+ ? constraint.replace(/\.$/u, "")
169
+ : `${setting}: ${constraint}`)
170
+ .join("; ")}.`;
137
171
  if (error instanceof NoBinaryOpenError)
138
172
  return error.message;
139
173
  if (error instanceof BinaryTargetError)
@@ -147,13 +181,15 @@ export const analysisErrorUserMessage = (error) => {
147
181
  };
148
182
  const hopperErrorUserMessage = (error) => {
149
183
  if (error instanceof HopperTimeoutError) {
150
- const request = error.operation ?? "startup";
184
+ if (error.operation === undefined)
185
+ return "REA timed out waiting for Hopper bridge readiness. Hopper may be waiting for a loader or license dialog; inspect its window and the captured launcher outcome before retrying.";
186
+ const request = error.operation;
151
187
  return error.providerState === "busy"
152
188
  ? `Hopper timed out during ${request} while the provider remained busy. Check binary_session.analysis_activity, wait for the active request to finish, then retry.`
153
189
  : `Hopper timed out during ${request} before it started. Check binary_session for provider health, then retry.`;
154
190
  }
155
191
  if (error instanceof HopperProcessError)
156
- return `Hopper stopped during ${error.operation ?? "connection"}${error.exitCode === null ? "; its exit was not observed" : ` with exit code ${String(error.exitCode)}`}.${error.userMessage === undefined ? "" : ` ${error.userMessage}`} Check binary_session provider health before retrying.`;
192
+ return hopperProcessMessage(error);
157
193
  if (error instanceof HopperStartError)
158
194
  return (error.userMessage ??
159
195
  "Hopper could not start. Check the launcher and target details, then retry opening the target.");
@@ -161,6 +197,36 @@ const hopperErrorUserMessage = (error) => {
161
197
  return `Hopper ${error.operation ?? "analysis"} failed (${String(error.code)}, ${error.diagnosticType}): ${error.safeMessage}`;
162
198
  return undefined;
163
199
  };
200
+ const RESTART_OWNED_PROVIDER = "Restart the owned provider by calling close_binary, then open the target again and retry.";
201
+ const hopperProcessRemediation = (error) => {
202
+ if (error.failureCode !== undefined && error.userMessage !== undefined)
203
+ return error.userMessage;
204
+ if (error.stage === "launch")
205
+ return "Review the captured launcher diagnostics and Hopper setup, then retry opening the target.";
206
+ if (providerRetryAction(error.providerState) === "restart_provider")
207
+ return RESTART_OWNED_PROVIDER;
208
+ return "Read binary_session.provider_operation_health for this request before retrying or restarting the owned provider.";
209
+ };
210
+ const hopperProcessMessage = (error) => {
211
+ const stage = error.stage;
212
+ const where = error.operation ?? stage;
213
+ const request = error.requestId === undefined
214
+ ? ""
215
+ : ` Request id ${String(error.requestId)}.`;
216
+ const startup = error.userMessage === undefined ? "" : ` ${error.userMessage}`;
217
+ if (error.providerState === "exited") {
218
+ const exit = error.exitCode === null
219
+ ? "no exit code was observed"
220
+ : `exit code ${String(error.exitCode)}`;
221
+ const recovery = error.failureCode === undefined && stage !== "launch"
222
+ ? ` ${RESTART_OWNED_PROVIDER}`
223
+ : "";
224
+ return `Hopper exited during ${where} (${exit}).${startup}${recovery}${request}`;
225
+ }
226
+ if (error.providerState === "unreachable")
227
+ return `Hopper became unreachable during ${where}; its process exit was not observed. ${RESTART_OWNED_PROVIDER}${startup}${request}`;
228
+ return `Hopper failed during ${where} and REA could not determine whether the provider is busy, exited, or unreachable.${startup} Read binary_session.provider_operation_health for this request before retrying or restarting.${request}`;
229
+ };
164
230
  const standardErrorMessage = (tag) => {
165
231
  if (UNREADABLE_OUTPUT_TAGS.has(tag))
166
232
  return "Analysis returned an unreadable result. Retry once; if it continues, run `rea doctor`.";
@@ -214,7 +280,11 @@ const artifactMessage = (reason) => {
214
280
  return "Artifact is invalid or has changed. Get a fresh copy and try again.";
215
281
  return "Artifact could not be read or written. Check file access and try again.";
216
282
  };
217
- const evidenceFileMessage = (reason) => {
283
+ const evidenceFileMessage = ({ operation, reason, }) => {
284
+ if (reason === "missing")
285
+ return operation === "read"
286
+ ? "Evidence file does not exist at the selected path. Check the path and try again."
287
+ : "Evidence output directory does not exist. Choose an existing directory and try again.";
218
288
  if (reason === "not-file")
219
289
  return "Evidence path does not point to a regular file. Choose a file and try again.";
220
290
  if (reason === "exists")
@@ -2,22 +2,42 @@ import { jsonValueSchema } from "./jsonValue.js";
2
2
  import { analysisErrorCategory, analysisErrorRemediationAction, analysisErrorUserMessage, assertKnownAnalysisErrorTag, } from "./analysisErrorPresentation.js";
3
3
  import { AnalysisAccessDeniedError, AnalysisArtifactChangedError, AnalysisCancelledError, AnalysisCapabilityUnavailableError, AnalysisUnsupportedTargetError, AnalysisInputError, AnalysisOutputError, AnalysisTimeoutError, AnalysisResourceConstraintError, } from "./analysisErrorCore.js";
4
4
  import { ArtifactOperationError } from "./artifactOperationError.js";
5
- import { BinaryTargetError } from "./configurationErrors.js";
5
+ import { BinaryTargetError, ConfigurationError, } from "./configurationErrors.js";
6
6
  import { BrowserObservationError } from "./browserObservationError.js";
7
- import { EvidenceFileError, EvidenceReferenceError } from "./evidenceErrors.js";
8
- import { HopperCancelledError, HopperProcessError, HopperRemoteError, HopperTimeoutError, } from "./hopperErrors.js";
7
+ import { EvidenceFileError, EvidenceIntegrityError, EvidenceReferenceError, } from "./evidenceErrors.js";
8
+ import { HopperCancelledError, HopperProcessError, HopperRemoteError, HopperStartError, HopperTimeoutError, } from "./hopperErrors.js";
9
9
  import { ProviderAdapterError } from "./providerAdapterError.js";
10
10
  import { ProviderSelectionError } from "./providerSelectionError.js";
11
11
  import { UnknownRegistryError } from "./unknownRegistryError.js";
12
+ import { providerRetryAction } from "./providerOperationHealth.js";
12
13
  import {} from "./analysisErrorBase.js";
13
14
  /** Project expected failures into exhaustive, secret-safe caller fields. */
14
15
  export const projectAnalysisError = (error) => {
15
16
  assertKnownAnalysisErrorTag(error._tag);
16
- const code = errorCode(error);
17
+ const underlyingCode = underlyingErrorCode(error);
18
+ const code = error.cleanupIncomplete ? "cleanup_incomplete" : underlyingCode;
17
19
  const primaryDetails = errorDetails(error);
18
- const details = error.capturedOutput === undefined
19
- ? primaryDetails
20
- : { ...primaryDetails, captured_output: { ...error.capturedOutput } };
20
+ const details = {
21
+ ...primaryDetails,
22
+ ...(error.cleanupIncomplete
23
+ ? {
24
+ cleanup: "incomplete",
25
+ resources: [...error.cleanupResources],
26
+ ...(error.cleanup === undefined
27
+ ? {}
28
+ : { cleanup_reason: error.cleanup.reason }),
29
+ execution_failure: primaryDetails?.execution_failure ?? underlyingCode,
30
+ }
31
+ : {}),
32
+ ...(error.capturedOutput === undefined
33
+ ? {}
34
+ : { captured_output: { ...error.capturedOutput } }),
35
+ ...(error.partialObservation === undefined
36
+ ? {}
37
+ : {
38
+ partial_observation: jsonValueSchema.parse(error.partialObservation),
39
+ }),
40
+ };
21
41
  return {
22
42
  code,
23
43
  category: analysisErrorCategory(error),
@@ -26,20 +46,27 @@ export const projectAnalysisError = (error) => {
26
46
  remediation: {
27
47
  action: analysisErrorRemediationAction(error),
28
48
  },
29
- ...(details === undefined ? {} : { details }),
49
+ ...(Object.keys(details).length === 0 ? {} : { details }),
30
50
  };
31
51
  };
32
- const errorCode = (error) => {
33
- if (error.cleanupIncomplete)
34
- return "cleanup_incomplete";
52
+ const underlyingErrorCode = (error) => {
53
+ if (error instanceof HopperRemoteError &&
54
+ error.diagnosticType === "invalid_request")
55
+ return "invalid_request";
35
56
  if (error instanceof ProviderSelectionError)
36
57
  return error.reason === "provider_unavailable"
37
58
  ? "provider_unavailable"
38
59
  : "capability_unavailable";
39
60
  if (error instanceof BrowserObservationError)
40
- return browserErrorCode(error.reason);
61
+ return error.userCategory === "cancelled"
62
+ ? "cancelled"
63
+ : browserErrorCode(error.reason);
41
64
  if (error instanceof ArtifactOperationError)
42
65
  return artifactOperationCode(error);
66
+ if (error instanceof BinaryTargetError)
67
+ return error.systemCode === undefined
68
+ ? "target_unavailable"
69
+ : "access_denied";
43
70
  if (error instanceof EvidenceFileError)
44
71
  return evidenceFileCode(error.reason);
45
72
  if (error instanceof UnknownRegistryError)
@@ -49,6 +76,10 @@ const errorCode = (error) => {
49
76
  return staticErrorCode(error._tag);
50
77
  };
51
78
  const browserErrorCode = (reason) => {
79
+ if (reason === "cancelled")
80
+ return "cancelled";
81
+ if (reason === "timeout")
82
+ return "provider_timeout";
52
83
  if (reason === "payload_limit")
53
84
  return "truncated";
54
85
  if (reason === "target_not_found" ||
@@ -68,9 +99,14 @@ const artifactOperationCode = (error) => {
68
99
  return "cancelled";
69
100
  return "artifact_operation_failed";
70
101
  };
71
- const evidenceFileCode = (reason) => reason === "invalid-json"
72
- ? "evidence_integrity_mismatch"
73
- : "execution_failure";
102
+ const evidenceFileCode = (reason) => {
103
+ if (reason === "invalid-json")
104
+ return "evidence_integrity_mismatch";
105
+ // A missing, non-file or already-existing path is the caller's selection.
106
+ if (reason === "io")
107
+ return "execution_failure";
108
+ return "invalid_request";
109
+ };
74
110
  const unknownRegistryCode = (reason) => {
75
111
  if (reason === "revision-conflict" || reason === "already-exists")
76
112
  return "revision_conflict";
@@ -105,7 +141,6 @@ const STATIC_ERROR_CODES = {
105
141
  HopperStartError: "provider_unavailable",
106
142
  ConfigurationError: "configuration_invalid",
107
143
  NoBinaryOpenError: "target_unavailable",
108
- BinaryTargetError: "target_unavailable",
109
144
  EvidenceIntegrityError: "evidence_integrity_mismatch",
110
145
  ProviderAdapterError: "execution_failure",
111
146
  HopperRemoteError: "execution_failure",
@@ -113,6 +148,7 @@ const STATIC_ERROR_CODES = {
113
148
  const staticErrorCode = (tag) => {
114
149
  switch (tag) {
115
150
  case "ArtifactOperationError":
151
+ case "BinaryTargetError":
116
152
  case "BrowserObservationError":
117
153
  case "EvidenceFileError":
118
154
  case "ProcessCaptureError":
@@ -176,6 +212,8 @@ const requestErrorDetails = (error) => {
176
212
  expected: error.expected,
177
213
  actual: error.actual,
178
214
  };
215
+ if (error instanceof EvidenceIntegrityError)
216
+ return { reason: error.message };
179
217
  return undefined;
180
218
  };
181
219
  const artifactStateErrorDetails = (error) => {
@@ -196,7 +234,11 @@ const artifactStateErrorDetails = (error) => {
196
234
  if (error instanceof UnknownRegistryError)
197
235
  return { reason: error.reason };
198
236
  if (error instanceof EvidenceFileError)
199
- return { operation: error.operation, reason: error.reason };
237
+ return {
238
+ operation: error.operation,
239
+ reason: error.reason,
240
+ ...(error.path === undefined ? {} : { path: error.path }),
241
+ };
200
242
  return undefined;
201
243
  };
202
244
  const providerErrorDetails = (error) => {
@@ -257,10 +299,13 @@ const providerErrorDetails = (error) => {
257
299
  ...(error.operation === undefined ? {} : { operation: error.operation }),
258
300
  ...(error.requestId === undefined ? {} : { request_id: error.requestId }),
259
301
  };
260
- if (error instanceof HopperProcessError)
302
+ if (error instanceof HopperProcessError) {
303
+ const stage = error.stage;
261
304
  return {
262
305
  exit_code: error.exitCode,
263
- stage: error.operation === undefined ? "connection" : "analysis",
306
+ stage,
307
+ provider_state: error.providerState,
308
+ retry_action: providerRetryAction(error.providerState, error.failureCode !== undefined || error.stage === "launch"),
264
309
  ...(error.failureCode === undefined
265
310
  ? {}
266
311
  : { failure_code: error.failureCode }),
@@ -269,6 +314,22 @@ const providerErrorDetails = (error) => {
269
314
  ...(error.diagnostic === undefined
270
315
  ? {}
271
316
  : { diagnostics: { ...error.diagnostic } }),
317
+ ...(error.launcherFailure === undefined
318
+ ? {}
319
+ : { launcher: error.launcherFailure }),
320
+ };
321
+ }
322
+ if (error instanceof HopperStartError)
323
+ return {
324
+ stage: "launch",
325
+ provider_state: "unknown",
326
+ retry_action: error.ownerRunId === undefined ? "retry" : "unknown",
327
+ ...(error.ownerRunId === undefined
328
+ ? {}
329
+ : { owner_run_id: error.ownerRunId }),
330
+ ...(error.launcherFailure === undefined
331
+ ? {}
332
+ : { launcher: error.launcherFailure }),
272
333
  };
273
334
  return undefined;
274
335
  };
@@ -290,16 +351,40 @@ const primaryBrowserFailureReason = (error) => {
290
351
  };
291
352
  const lifecycleErrorDetails = (error) => {
292
353
  if (error instanceof AnalysisCancelledError)
293
- return { operation: error.operation, cleanup: "complete" };
354
+ return {
355
+ operation: error.operation,
356
+ cleanup: error.cleanup === undefined ? "complete" : "incomplete",
357
+ ...(error.cleanup === undefined
358
+ ? {}
359
+ : {
360
+ cleanup_reason: error.cleanup.reason,
361
+ resources: [...error.cleanup.resources],
362
+ execution_failure: "cancelled",
363
+ }),
364
+ };
294
365
  if (error instanceof HopperCancelledError)
295
366
  return { operation: "hopper", cleanup: "complete" };
296
367
  if (error instanceof AnalysisTimeoutError)
297
- return { operation: error.operation, timeout_ms: error.timeoutMs };
368
+ return {
369
+ operation: error.operation,
370
+ timeout_ms: error.timeoutMs,
371
+ ...(error.cleanup === undefined
372
+ ? {}
373
+ : {
374
+ cleanup: "incomplete",
375
+ cleanup_reason: error.cleanup.reason,
376
+ resources: [...error.cleanup.resources],
377
+ }),
378
+ };
298
379
  if (error instanceof HopperTimeoutError)
299
380
  return {
300
- stage: error.operation === undefined ? "startup" : "analysis",
381
+ stage: error.operation === undefined ? "startup" : error.stage,
301
382
  timeout_ms: error.timeoutMs,
383
+ ...(error.launcherOutcome === undefined
384
+ ? {}
385
+ : { launcher: error.launcherOutcome }),
302
386
  provider_state: error.providerState,
387
+ retry_action: error.providerState === "busy" ? "wait" : "retry",
303
388
  ...(error.operation === undefined ? {} : { operation: error.operation }),
304
389
  ...(error.requestId === undefined ? {} : { request_id: error.requestId }),
305
390
  };
@@ -313,18 +398,28 @@ const lifecycleErrorDetails = (error) => {
313
398
  ...(error.executionFailure === undefined
314
399
  ? {}
315
400
  : { execution_failure: error.executionFailure }),
316
- ...(error.partialObservation === undefined
401
+ };
402
+ if (error._tag === "ProcessCaptureError") {
403
+ const details = {
404
+ ...(error.userCategory === "cancelled"
405
+ ? { operation: "process_capture", cleanup: "complete" }
406
+ : {}),
407
+ ...(error.cleanupReport === undefined
317
408
  ? {}
318
- : {
319
- partial_observation: jsonValueSchema.parse(error.partialObservation),
320
- }),
409
+ : { cleanup_report: jsonValueSchema.parse(error.cleanupReport) }),
410
+ ...(error.executionFailure === undefined
411
+ ? {}
412
+ : { execution_failure: error.executionFailure }),
413
+ };
414
+ return Object.keys(details).length === 0 ? undefined : details;
415
+ }
416
+ if (error instanceof ConfigurationError && error.settings.length > 0)
417
+ return {
418
+ settings: error.settings.map(({ setting, constraint }) => ({
419
+ setting,
420
+ constraint,
421
+ })),
321
422
  };
322
- if (error._tag === "ProcessCaptureError" &&
323
- error.userCategory === "cancelled")
324
- return { operation: "process_capture", cleanup: "complete" };
325
- if (error._tag === "ProcessCaptureError" &&
326
- error.executionFailure !== undefined)
327
- return { execution_failure: error.executionFailure };
328
423
  if (error instanceof BinaryTargetError)
329
424
  return {
330
425
  path: error.path,
@@ -332,6 +427,9 @@ const lifecycleErrorDetails = (error) => {
332
427
  ...(error.constraint === undefined
333
428
  ? {}
334
429
  : { constraint: error.constraint }),
430
+ ...(error.systemCode === undefined
431
+ ? {}
432
+ : { system_code: error.systemCode, boundary: "filesystem-read" }),
335
433
  };
336
434
  return undefined;
337
435
  };