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,80 +1,109 @@
1
+ import { semanticSlotAtPath, semanticContainer, semanticPropertyPointer, } from "../../domain/javascript/javascriptSemanticSlots.js";
1
2
  import { createJavaScriptSemanticGraphUnknown } from "../../domain/javascript/javascriptSemanticGraph.js";
2
3
  import { retainSemanticGraphNode, addSemanticGraphRelation, addSemanticGraphUnknown, } from "./JavaScriptSemanticGraphConstruction.js";
3
4
  import { unknownSemanticEvidence } from "./JavaScriptSemanticGraphEvidence.js";
4
5
  import { semanticPropertySlot } from "./JavaScriptSemanticGraphValueProjection.js";
5
6
  /** Project static object reads, writes, spreads, and destructuring. */
6
7
  export const projectSemanticObjects = (context) => {
8
+ const values = new Map(context.ir.bindings.map((binding) => [binding.bindingId, binding.value]));
7
9
  for (const operation of context.ir.objectOperations) {
8
10
  const occurrence = addObjectOccurrence(context, operation);
9
- const slot = operation.objectBindingId === null || operation.propertyName === null
10
- ? null
11
- : semanticPropertySlot(context, operation.objectBindingId, operation.propertyName);
12
- if (operation.kind === "read")
13
- addSemanticGraphRelation(context.state, {
14
- source: slot,
15
- target: occurrence,
16
- relation: "reads-property",
17
- resolution: operation.resolution === "complete" ? "resolved" : "candidate",
18
- });
19
- else if (operation.kind === "write")
20
- addSemanticGraphRelation(context.state, {
21
- source: occurrence,
22
- target: slot,
23
- relation: "writes-property",
24
- resolution: operation.resolution === "complete" ? "resolved" : "candidate",
25
- });
26
- else if (operation.kind === "destructure")
27
- addSemanticGraphRelation(context.state, {
28
- source: slot,
11
+ const target = objectTarget(context, values, operation);
12
+ const ends = objectRelationEnds(context, operation, occurrence, target);
13
+ const resolved = operation.resolution === "complete" &&
14
+ (operation.kind === "write"
15
+ ? target.receiverResolved
16
+ : target.presence === "present");
17
+ addSemanticGraphRelation(context.state, {
18
+ ...ends,
19
+ relation: OBJECT_RELATIONS[operation.kind],
20
+ resolution: resolved ? "resolved" : "candidate",
21
+ });
22
+ if (!resolved)
23
+ addObjectUnknown(context, operation, target.slot ?? occurrence, target);
24
+ }
25
+ };
26
+ const OBJECT_RELATIONS = {
27
+ read: "reads-property",
28
+ write: "writes-property",
29
+ destructure: "destructures",
30
+ spread: "spreads",
31
+ };
32
+ const objectTarget = (context, values, operation) => {
33
+ const binding = operation.objectBindingId === null
34
+ ? undefined
35
+ : context.bindingNodes.get(operation.objectBindingId);
36
+ const value = operation.objectBindingId === null
37
+ ? undefined
38
+ : values.get(operation.objectBindingId);
39
+ if (operation.objectBindingId === null ||
40
+ operation.propertyPath === null ||
41
+ value === undefined)
42
+ return {
43
+ objectNode: binding,
44
+ slot: null,
45
+ presence: "unknown-coverage",
46
+ receiverResolved: false,
47
+ };
48
+ const fact = semanticSlotAtPath(value, operation.propertyPath);
49
+ if (operation.propertyPath.length === 0)
50
+ return {
51
+ objectNode: binding,
52
+ slot: null,
53
+ presence: fact.presence,
54
+ receiverResolved: semanticContainer(value) !== null,
55
+ };
56
+ const slot = semanticPropertySlot(context, operation.objectBindingId, operation.propertyPath, fact);
57
+ const receiver = semanticSlotAtPath(value, operation.propertyPath.slice(0, -1));
58
+ return {
59
+ objectNode: slot,
60
+ slot,
61
+ presence: fact.presence,
62
+ receiverResolved: receiver.presence === "present" &&
63
+ semanticContainer(receiver.value) !== null,
64
+ };
65
+ };
66
+ const objectRelationEnds = (context, operation, occurrence, target) => {
67
+ switch (operation.kind) {
68
+ case "read":
69
+ return { source: target.slot, target: occurrence };
70
+ case "write":
71
+ return { source: occurrence, target: target.slot };
72
+ case "destructure":
73
+ return {
74
+ source: target.slot,
29
75
  target: operation.targetBindingId === null
30
76
  ? undefined
31
77
  : context.bindingNodes.get(operation.targetBindingId),
32
- relation: "destructures",
33
- resolution: operation.resolution === "complete" ? "resolved" : "candidate",
34
- });
35
- else
36
- addSemanticGraphRelation(context.state, {
37
- source: operation.objectBindingId === null
38
- ? undefined
39
- : context.bindingNodes.get(operation.objectBindingId),
40
- target: occurrence,
41
- relation: "spreads",
42
- resolution: operation.resolution === "complete" ? "resolved" : "candidate",
43
- });
44
- if (operation.resolution !== "complete")
45
- addObjectUnknown(context, operation, slot ?? occurrence);
78
+ };
79
+ case "spread":
80
+ return { source: target.objectNode, target: occurrence };
46
81
  }
47
82
  };
48
83
  const addObjectOccurrence = (context, operation) => retainSemanticGraphNode(context.state, context.file, {
49
84
  kind: "expression",
50
85
  roleKey: operation.objectOperationId,
51
86
  location: operation.location,
52
- label: operation.propertyName === null
87
+ label: operation.propertyPath === null
53
88
  ? operation.kind
54
- : `${operation.kind}:${operation.propertyName}`,
89
+ : `${operation.kind}:${semanticPropertyPointer(operation.propertyPath)}`,
55
90
  functionNodeId: operation.ownerCallableId === null
56
91
  ? null
57
92
  : (context.callableNodes.get(operation.ownerCallableId)?.node_id ??
58
93
  null),
59
94
  properties: {
60
95
  operation_kind: operation.kind,
61
- property_name: operation.propertyName,
96
+ property_path: operation.propertyPath === null ? null : [...operation.propertyPath],
62
97
  },
63
98
  });
64
- const addObjectUnknown = (context, operation, node) => {
65
- const relation = operation.kind === "read"
66
- ? "reads-property"
67
- : operation.kind === "write"
68
- ? "writes-property"
69
- : operation.kind === "spread"
70
- ? "spreads"
71
- : "destructures";
99
+ const addObjectUnknown = (context, operation, node, target) => {
100
+ const relation = OBJECT_RELATIONS[operation.kind];
72
101
  addSemanticGraphUnknown(context.state, createJavaScriptSemanticGraphUnknown({
73
102
  node_id: node?.node_id ?? null,
74
103
  family: "object-flow",
75
104
  relation_kinds: [relation],
76
105
  reason: "ambiguous-target",
77
- detail: `Static ${operation.kind} object identity is partial.`,
106
+ detail: `Static ${operation.kind} property ${operation.propertyPath === null ? "path is unresolved" : semanticPropertyPointer(operation.propertyPath)} has ${target.presence} presence; its receiver is ${target.receiverResolved ? "a retained container" : "unresolved or not a retained container"}; object identity is ${operation.resolution}.`,
78
107
  candidate_node_ids: [],
79
108
  evidence: unknownSemanticEvidence(context.file, operation.location),
80
109
  }));
@@ -1,7 +1,6 @@
1
1
  import { createJavaScriptSemanticGraphUnknown } from "../../domain/javascript/javascriptSemanticGraph.js";
2
2
  import { retainSemanticGraphNode, addSemanticGraphRelation, addSemanticGraphUnknown, } from "./JavaScriptSemanticGraphConstruction.js";
3
3
  import { unknownSemanticEvidence } from "./JavaScriptSemanticGraphEvidence.js";
4
- import { semanticCallSiteAt, } from "./JavaScriptSemanticGraphFlowProjection.js";
5
4
  /** Project built-in resource acquisition and exact local release handles. */
6
5
  export const projectSemanticResources = (context) => {
7
6
  const resourceNodes = new Map(context.ir.resourceOperations.flatMap((operation) => {
@@ -13,7 +12,7 @@ export const projectSemanticResources = (context) => {
13
12
  for (const operation of context.ir.resourceOperations)
14
13
  if (operation.kind === "acquire")
15
14
  addSemanticGraphRelation(context.state, {
16
- source: semanticCallSiteAt(context, operation.location),
15
+ source: context.callSiteAt(operation.location),
17
16
  target: resourceNodes.get(operation.resourceId),
18
17
  relation: "acquires",
19
18
  resolution: "resolved",
@@ -33,7 +32,7 @@ const addResourceNode = (context, operation) => retainSemanticGraphNode(context.
33
32
  properties: { method: operation.method },
34
33
  });
35
34
  const projectRelease = (context, operation, resourceNodes) => {
36
- const callSite = semanticCallSiteAt(context, operation.location);
35
+ const callSite = context.callSiteAt(operation.location);
37
36
  const resources = operation.linkedResourceIds.flatMap((identifier) => {
38
37
  const resource = resourceNodes.get(identifier);
39
38
  return resource === undefined ? [] : [resource];
@@ -1,4 +1,7 @@
1
- import { retainSemanticGraphNode, addSemanticGraphRelation, } from "./JavaScriptSemanticGraphConstruction.js";
1
+ import { semanticContainer, semanticPropertyPointer, } from "../../domain/javascript/javascriptSemanticSlots.js";
2
+ import { createJavaScriptSemanticGraphUnknown } from "../../domain/javascript/javascriptSemanticGraph.js";
3
+ import { retainSemanticGraphNode, addSemanticGraphRelation, addSemanticGraphUnknown, } from "./JavaScriptSemanticGraphConstruction.js";
4
+ import { observedSemanticEvidence, unknownSemanticEvidence, } from "./JavaScriptSemanticGraphEvidence.js";
2
5
  /** Project bounded literal values and object slots for exact query seeds. */
3
6
  export const projectSemanticValues = (context) => {
4
7
  for (const binding of context.ir.bindings) {
@@ -10,12 +13,13 @@ export const projectSemanticValues = (context) => {
10
13
  binding,
11
14
  value: binding.value,
12
15
  target: bindingNode,
13
- role: "binding",
16
+ path: [],
14
17
  });
15
18
  }
16
19
  };
17
20
  const projectValue = (input) => {
18
- const { context, binding, value, target, role } = input;
21
+ const { context, binding, value, target, path } = input;
22
+ const role = path.length === 0 ? "binding" : `property:${semanticPropertyPointer(path)}`;
19
23
  if (target === null)
20
24
  return;
21
25
  if (value.status === "literal") {
@@ -37,23 +41,59 @@ const projectValue = (input) => {
37
41
  resolution: "candidate",
38
42
  });
39
43
  }
40
- else if (value.status === "object")
41
- for (const property of value.properties) {
42
- const slot = semanticPropertySlot(context, binding.bindingId, property.name);
44
+ else if (value.status === "object" || value.status === "array") {
45
+ const container = semanticContainer(value);
46
+ for (const property of container.slots) {
47
+ const propertyPath = [...path, property.name];
48
+ const slot = semanticPropertySlot(context, binding.bindingId, propertyPath, property);
49
+ if (property.presence === "absent")
50
+ continue;
43
51
  addSemanticGraphRelation(context.state, {
44
52
  source: target,
45
53
  target: slot,
46
54
  relation: "writes-property",
47
- resolution: value.unknownProperties ? "candidate" : "resolved",
48
- });
49
- projectValue({
50
- context,
51
- binding,
52
- value: property.value,
53
- target: slot,
54
- role: `property:${property.name}`,
55
+ resolution: property.presence === "present" ? "resolved" : "candidate",
55
56
  });
57
+ if (property.presence === "present")
58
+ projectValue({
59
+ context,
60
+ binding,
61
+ value: property.value,
62
+ target: slot,
63
+ path: propertyPath,
64
+ });
56
65
  }
66
+ if (container.coverage.status === "partial")
67
+ addSemanticGraphUnknown(context.state, createJavaScriptSemanticGraphUnknown({
68
+ node_id: target.node_id,
69
+ family: "object-flow",
70
+ relation_kinds: ["writes-property"],
71
+ reason: "ambiguous-target",
72
+ detail: `Initializer container has unknown ${value.status === "object" ? "properties" : "items"}${container.coverage.omitted === null ? " with an unknown omitted count" : `; ${container.coverage.omitted} omitted`}.`,
73
+ candidate_node_ids: [target.node_id],
74
+ evidence: unknownSemanticEvidence(context.file, binding.definitions[0]?.location ?? null),
75
+ }));
76
+ }
77
+ else if (value.status === "unknown" && value.resourceLimit !== undefined) {
78
+ const location = binding.definitions[0]?.location ?? null;
79
+ const evidence = observedSemanticEvidence(context.file, location);
80
+ const isPropertyValue = role.startsWith("property:");
81
+ addSemanticGraphUnknown(context.state, createJavaScriptSemanticGraphUnknown({
82
+ node_id: target.node_id,
83
+ family: isPropertyValue ? "object-flow" : "data-flow",
84
+ relation_kinds: [isPropertyValue ? "writes-property" : "defines"],
85
+ reason: "resource-limit",
86
+ detail: `${value.reason} Unknown value at ${role}.`,
87
+ candidate_node_ids: [target.node_id],
88
+ evidence: {
89
+ ...evidence,
90
+ authority: "unknown",
91
+ state: "unknown",
92
+ confidence: "unknown",
93
+ limitations: [value.reason],
94
+ },
95
+ }));
96
+ }
57
97
  };
58
98
  const addLiteralNode = (context, binding, value, role) => retainSemanticGraphNode(context.state, context.file, {
59
99
  kind: "literal",
@@ -63,15 +103,20 @@ const addLiteralNode = (context, binding, value, role) => retainSemanticGraphNod
63
103
  functionNodeId: context.bindingNodes.get(binding.bindingId)?.function_node_id ?? null,
64
104
  properties: { value },
65
105
  });
66
- /** Create one canonical property slot for a binding/property identity. */
67
- export const semanticPropertySlot = (context, objectBindingId, name) => retainSemanticGraphNode(context.state, context.file, {
106
+ /** Create one canonical slot for a root binding and exact static property path. */
107
+ export const semanticPropertySlot = (context, objectBindingId, path, fact) => retainSemanticGraphNode(context.state, context.file, {
68
108
  kind: "property-slot",
69
- roleKey: `property:${objectBindingId}:${name}`,
109
+ roleKey: `property:${JSON.stringify([objectBindingId, path])}`,
70
110
  location: null,
71
- label: name,
111
+ label: fact.name,
72
112
  functionNodeId: context.bindingNodes.get(objectBindingId)?.function_node_id ?? null,
73
113
  properties: {
74
- name,
114
+ name: fact.name,
115
+ property_path: [...path],
116
+ property_pointer: semanticPropertyPointer(path),
75
117
  object_binding_id: objectBindingId,
118
+ presence: fact.presence,
119
+ value_status: fact.value.status,
120
+ value_coverage: semanticContainer(fact.value)?.coverage ?? null,
76
121
  },
77
122
  });
@@ -1,24 +1,25 @@
1
1
  import { z } from "zod";
2
- import { AnalysisInputError, AnalysisProtocolError, } from "../../domain/analysisErrorCore.js";
2
+ import { AnalysisProtocolError } from "../../domain/analysisErrorCore.js";
3
3
  import {} from "../../domain/analysisErrorBase.js";
4
4
  import { createEvidence } from "../../domain/evidence.js";
5
5
  import { jsonValueSchema } from "../../domain/jsonValue.js";
6
6
  import { managedApplicationGraphResultSchema, projectManagedApplicationGraph, projectManagedApplicationGraphInputSchema, } from "../../domain/managed/managedApplicationGraph.js";
7
7
  import { err, ok } from "../../domain/result.js";
8
8
  import { MANAGED_WORKFLOW_PROVIDER } from "../InvestigationProviders.js";
9
+ import { requestInputError, workflowInputError, } from "../workflowInputError.js";
9
10
  const OPERATION = "project_managed_application_graph";
10
11
  /** Project authenticated managed Evidence into a provider-neutral graph. */
11
12
  export const projectManagedApplicationGraphEvidence = (rawInput) => {
12
13
  const parsed = projectManagedApplicationGraphInputSchema.safeParse(rawInput);
13
14
  if (!parsed.success)
14
- return err(new AnalysisInputError(OPERATION, { cause: parsed.error }));
15
+ return err(requestInputError(OPERATION, parsed.error, rawInput));
15
16
  try {
16
17
  const result = projectManagedApplicationGraph(parsed.data);
17
18
  return ok(createManagedApplicationGraphEvidence(parsed.data, result));
18
19
  }
19
20
  catch (cause) {
20
21
  return err(cause instanceof TypeError || cause instanceof z.ZodError
21
- ? new AnalysisInputError(OPERATION, { cause })
22
+ ? workflowInputError(OPERATION, cause)
22
23
  : new AnalysisProtocolError("Managed application graph projection produced an invalid result", { cause }));
23
24
  }
24
25
  };
@@ -1,8 +1,9 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import { readFile } from "node:fs/promises";
3
3
  import { z } from "zod";
4
- import { compareManagedMembers, managedMemberComparisonResultSchema, parseManagedMemberEvidence, } from "../../domain/managed/managedMemberComparison.js";
5
- import { AnalysisInputError, AnalysisProtocolError, } from "../../domain/analysisErrorCore.js";
4
+ import { compareManagedMembers, managedMemberComparisonResultSchema, } from "../../domain/managed/managedMemberComparison.js";
5
+ import { parseManagedMemberEvidence } from "../../domain/managed/managedMemberComparisonMatch.js";
6
+ import { AnalysisProtocolError } from "../../domain/analysisErrorCore.js";
6
7
  import { EvidenceIntegrityError } from "../../domain/evidenceErrors.js";
7
8
  import {} from "../../domain/analysisErrorBase.js";
8
9
  import { createEvidence } from "../../domain/evidence.js";
@@ -11,6 +12,7 @@ import { parseBinaryTarget } from "../BinaryTargetResolver.js";
11
12
  import { err, ok } from "../../domain/result.js";
12
13
  import { inspectManagedMembersBytes } from "../../dotnet/ManagedMemberInspector.js";
13
14
  import { MANAGED_STATIC_PROVIDER, MANAGED_WORKFLOW_PROVIDER, } from "../InvestigationProviders.js";
15
+ import { workflowInputError } from "../workflowInputError.js";
14
16
  /** Compare managed members from input parsed by a trusted adapter. */
15
17
  export const compareManagedMembersEvidenceValidated = (input) => {
16
18
  const operation = "compare_managed_members";
@@ -36,10 +38,12 @@ export const compareManagedMemberPaths = async (input, dependencies = DEFAULT_PA
36
38
  dependencies.resolveTarget(input.leftPath),
37
39
  dependencies.resolveTarget(input.rightPath),
38
40
  ]);
41
+ // Report an unopenable path like every other path-based command does,
42
+ // with the failed path and constraint, rather than a bare input error.
39
43
  if (!leftTarget.ok)
40
- return err(new AnalysisInputError(operation, { cause: leftTarget.error }));
44
+ return err(leftTarget.error);
41
45
  if (!rightTarget.ok)
42
- return err(new AnalysisInputError(operation, { cause: rightTarget.error }));
46
+ return err(rightTarget.error);
43
47
  const [leftBytes, rightBytes] = await Promise.all([
44
48
  dependencies.readBytes(leftTarget.value.path),
45
49
  dependencies.readBytes(rightTarget.value.path),
@@ -103,5 +107,5 @@ const createManagedMemberComparisonEvidence = (parameters, result) => createEvid
103
107
  evidenceLinks: result.evidence_links,
104
108
  });
105
109
  const workflowFailure = (operation, cause) => err(cause instanceof z.ZodError || cause instanceof TypeError
106
- ? new AnalysisInputError(operation, { cause })
110
+ ? workflowInputError(operation, cause)
107
111
  : new AnalysisProtocolError("Managed member comparison produced an invalid result", { cause }));
@@ -1,24 +1,26 @@
1
1
  import { z } from "zod";
2
- import { AnalysisInputError, AnalysisProtocolError, } from "../../domain/analysisErrorCore.js";
2
+ import { AnalysisProtocolError } from "../../domain/analysisErrorCore.js";
3
3
  import {} from "../../domain/analysisErrorBase.js";
4
4
  import { createEvidence } from "../../domain/evidence.js";
5
5
  import { jsonValueSchema } from "../../domain/jsonValue.js";
6
- import { managedNativeVerificationInputSchema, verifyManagedNativeBoundaries, } from "../../domain/managed/managedNativeVerification.js";
6
+ import { managedNativeVerificationInputSchema, } from "../../domain/managed/managedNativeVerificationSchemas.js";
7
7
  import { err, ok } from "../../domain/result.js";
8
8
  import { MANAGED_WORKFLOW_PROVIDER } from "../InvestigationProviders.js";
9
+ import { requestInputError, workflowInputError, } from "../workflowInputError.js";
10
+ import { verifyManagedNativeBoundaries } from "../../domain/managed/managedNativeVerification.js";
9
11
  const OPERATION = "verify_managed_native_boundaries";
10
12
  /** Verify managed/native boundary declarations against native Evidence. */
11
13
  export const verifyManagedNativeBoundariesEvidence = (rawInput) => {
12
14
  const parsed = managedNativeVerificationInputSchema.safeParse(rawInput);
13
15
  if (!parsed.success)
14
- return err(new AnalysisInputError(OPERATION, { cause: parsed.error }));
16
+ return err(requestInputError(OPERATION, parsed.error, rawInput));
15
17
  try {
16
18
  const result = verifyManagedNativeBoundaries(parsed.data);
17
19
  return ok(createManagedNativeVerificationEvidence(parsed.data, result));
18
20
  }
19
21
  catch (cause) {
20
22
  return err(cause instanceof TypeError || cause instanceof z.ZodError
21
- ? new AnalysisInputError(OPERATION, { cause })
23
+ ? workflowInputError(OPERATION, cause)
22
24
  : new AnalysisProtocolError("Managed/native verification produced an invalid result", { cause }));
23
25
  }
24
26
  };
@@ -1,17 +1,18 @@
1
1
  import { z } from "zod";
2
- import { AnalysisInputError, AnalysisProtocolError, } from "../../domain/analysisErrorCore.js";
2
+ import { AnalysisProtocolError } from "../../domain/analysisErrorCore.js";
3
3
  import {} from "../../domain/analysisErrorBase.js";
4
4
  import { createEvidence } from "../../domain/evidence.js";
5
5
  import { jsonValueSchema } from "../../domain/jsonValue.js";
6
6
  import { importManagedReconstruction, managedReconstructionImportInputSchema, } from "../../domain/managed/managedReconstruction.js";
7
7
  import { err, ok } from "../../domain/result.js";
8
8
  import { MANAGED_WORKFLOW_PROVIDER } from "../InvestigationProviders.js";
9
+ import { requestInputError, workflowInputError, } from "../workflowInputError.js";
9
10
  const OPERATION = "import_managed_reconstruction";
10
11
  /** Authenticate and import managed decompiler reconstruction as Evidence. */
11
12
  export const importManagedReconstructionEvidence = (rawInput) => {
12
13
  const parsed = managedReconstructionImportInputSchema.safeParse(rawInput);
13
14
  if (!parsed.success)
14
- return err(new AnalysisInputError(OPERATION, { cause: parsed.error }));
15
+ return err(requestInputError(OPERATION, parsed.error, rawInput));
15
16
  return importManagedReconstructionEvidenceValidated(parsed.data);
16
17
  };
17
18
  /** Import reconstruction from input parsed by a trusted adapter. */
@@ -22,7 +23,7 @@ export const importManagedReconstructionEvidenceValidated = (input) => {
22
23
  }
23
24
  catch (cause) {
24
25
  return err(cause instanceof TypeError || cause instanceof z.ZodError
25
- ? new AnalysisInputError(OPERATION, { cause })
26
+ ? workflowInputError(OPERATION, cause)
26
27
  : new AnalysisProtocolError("Managed reconstruction import produced an invalid result", { cause }));
27
28
  }
28
29
  };
@@ -1,15 +1,19 @@
1
1
  import { readFile } from "node:fs/promises";
2
+ import { z } from "zod";
2
3
  import { AnalysisError } from "../../domain/analysisErrorBase.js";
3
4
  import { AnalysisInputError } from "../../domain/analysisErrorCore.js";
4
5
  import { projectAnalysisError } from "../../domain/analysisErrorProjection.js";
5
6
  import { createEvidence, parseEvidence } from "../../domain/evidence.js";
7
+ import { describeValidationFailure } from "../../domain/evidenceBundle.js";
6
8
  import { jsonValueSchema } from "../../domain/jsonValue.js";
7
- import { projectInputIssues } from "../../domain/inputIssueProjection.js";
8
- import { processTraceSpecificationSchema } from "../../domain/process/processTraceComparison.js";
9
+ import { analysisInputErrorFromIssues, projectInputIssues, } from "../../domain/inputIssueProjection.js";
10
+ import { processTraceSpecificationSchema } from "../../domain/process/processTraceSpecification.js";
9
11
  import { processScenarioSchema } from "../../domain/process/processScenario.js";
10
- import { compareProcessCaptures, parseProcessCapture, } from "../../domain/process/processCapture.js";
12
+ import { compareProcessCaptures } from "../../domain/process/processComparison.js";
13
+ import { parseProcessCapture } from "../../domain/process/processCaptureParsing.js";
11
14
  import { captureProcessScenario } from "../../process/capture/ProcessHarness.js";
12
- import { PROCESS_PROVIDER, createProcessCaptureEvidence, } from "./ProcessEvidence.js";
15
+ import { PROCESS_PROVIDER } from "../../domain/process/processEvidenceProvider.js";
16
+ import { createProcessCaptureEvidence } from "./ProcessEvidence.js";
13
17
  /** Identify the process workflow's typed diagnostic result for CLI exit status. */
14
18
  export const isProcessCliFailure = (value) => typeof value === "object" &&
15
19
  value !== null &&
@@ -20,13 +24,13 @@ export const isProcessCliFailure = (value) => typeof value === "object" &&
20
24
  "message" in value &&
21
25
  typeof value.message === "string";
22
26
  /** Capture one JSON scenario through the shared process harness and Evidence contract. */
23
- export const captureProcessScenarioFile = async (path, environment = process.env) => {
27
+ export const captureProcessScenarioFile = async (path, environment = process.env, signal) => {
24
28
  try {
25
29
  const input = await readJson(path);
26
30
  const parsed = processScenarioSchema.safeParse(input);
27
31
  if (!parsed.success)
28
- throw new AnalysisInputError("capture_process_scenario", { cause: parsed.error }, projectInputIssues(parsed.error.issues, input));
29
- const captured = await captureProcessScenario(parsed.data, undefined, process.platform, environment);
32
+ throw analysisInputErrorFromIssues("capture_process_scenario", parsed.error.issues, input, { cause: parsed.error });
33
+ const captured = await captureProcessScenario(parsed.data, signal, process.platform, environment);
30
34
  if (!captured.ok)
31
35
  return cliAnalysisError(captured.error);
32
36
  return createProcessCaptureEvidence(parsed.data, captured.value);
@@ -78,7 +82,9 @@ const parseCaptureEvidence = (input) => {
78
82
  evidence = parseEvidence(input);
79
83
  }
80
84
  catch (cause) {
81
- throw invalidCaptureEvidence();
85
+ if (cause instanceof z.ZodError)
86
+ throw new AnalysisInputError("compare_process_captures", { cause }, projectInputIssues(cause.issues, input));
87
+ throw invalidCaptureEvidence(cause);
82
88
  }
83
89
  if (evidence.operation !== "capture_process_scenario" ||
84
90
  evidence.predicate_type !== "rea.process-capture" ||
@@ -94,24 +100,27 @@ const parseCaptureEvidence = (input) => {
94
100
  };
95
101
  }
96
102
  catch (cause) {
97
- throw invalidCaptureEvidence();
103
+ throw invalidCaptureEvidence(cause);
98
104
  }
99
105
  };
100
106
  const parseTraceSpecification = (input) => {
101
107
  const parsed = processTraceSpecificationSchema.safeParse(input);
102
108
  if (parsed.success)
103
109
  return parsed.data;
104
- throw new AnalysisInputError("compare-process-captures", { cause: parsed.error }, projectInputIssues(parsed.error.issues, input));
110
+ // Match the MCP boundary: the operation name and a trace_spec-rooted path.
111
+ throw new AnalysisInputError("compare_process_captures", { cause: parsed.error }, projectInputIssues(parsed.error.issues, input).map((issue) => ({
112
+ ...issue,
113
+ path: ["trace_spec", ...issue.path],
114
+ })));
105
115
  };
106
- const invalidCaptureEvidence = () => new ProcessCliFailure("invalid_input", "Capture evidence is malformed. Create new capture evidence, then try again.");
116
+ const invalidCaptureEvidence = (cause) => new ProcessCliFailure("invalid_input", `Capture evidence is malformed (${describeValidationFailure(cause)}). Create new capture evidence, then try again.`);
107
117
  const readJson = async (path) => {
108
118
  let bytes;
109
119
  try {
110
120
  bytes = await readFile(path);
111
121
  }
112
122
  catch (cause) {
113
- void cause;
114
- throw new ProcessCliFailure("invalid_input", "Process input file could not be read. Check that the path exists and is readable.");
123
+ throw new ProcessCliFailure("invalid_input", `Process input file could not be read: ${path} (${describeValidationFailure(cause)}). Check the reported filesystem constraint and retry.`);
115
124
  }
116
125
  try {
117
126
  const text = new TextDecoder("utf-8", {
@@ -122,8 +131,7 @@ const readJson = async (path) => {
122
131
  return parsed;
123
132
  }
124
133
  catch (cause) {
125
- void cause;
126
- throw new ProcessCliFailure("invalid_input", "Process input file is not valid JSON. Repair the file, then try again.");
134
+ throw new ProcessCliFailure("invalid_input", `Process input file is not valid UTF-8 JSON: ${path} (${describeValidationFailure(cause)}). Repair the file, then try again.`);
127
135
  }
128
136
  };
129
137
  class ProcessCliFailure extends Error {
@@ -139,7 +147,7 @@ const cliAnalysisError = (error) => ({
139
147
  error: "Process command failed",
140
148
  ...projectAnalysisError(error),
141
149
  });
142
- /** Project any process CLI failure without exposing its cause. */
150
+ /** Preserve typed failures and local diagnostics at the process CLI boundary. */
143
151
  export const projectProcessCliError = (cause) => {
144
152
  if (cause instanceof ProcessCliFailure)
145
153
  return {
@@ -152,6 +160,6 @@ export const projectProcessCliError = (cause) => {
152
160
  return {
153
161
  error: "Process command failed",
154
162
  category: "execution_failure",
155
- message: "Process command could not complete. Check the input files and run `rea doctor`, then try again.",
163
+ message: `Process command could not complete: ${describeValidationFailure(cause)}`,
156
164
  };
157
165
  };
@@ -1,10 +1,10 @@
1
+ import { posix, win32 } from "node:path";
1
2
  import { createEvidence } from "../../domain/evidence.js";
2
3
  import { PROCESS_PROVIDER } from "../../domain/process/processEvidenceProvider.js";
3
4
  import { jsonValueSchema } from "../../domain/jsonValue.js";
4
- export { PROCESS_PROVIDER } from "../../domain/process/processEvidenceProvider.js";
5
5
  /** Project one process scenario into secret-free Evidence parameters. */
6
- const processEvidenceParameters = (scenario) => ({
7
- executable_name: scenario.executable.split("/").at(-1) ?? scenario.executable,
6
+ const processEvidenceParameters = (scenario, platform) => ({
7
+ executable_name: (platform === "win32" ? win32 : posix).basename(scenario.executable),
8
8
  argument_count: scenario.arguments.length,
9
9
  event_count: scenario.events.length,
10
10
  filesystem_observation_path_count: scenario.filesystem_observation_paths.length,
@@ -15,7 +15,7 @@ export const createProcessCaptureEvidence = (scenario, capture) => {
15
15
  return createEvidence(undefined, PROCESS_PROVIDER, {
16
16
  predicateType: "rea.process-capture",
17
17
  operation: "capture_process_scenario",
18
- parameters: processEvidenceParameters(scenario),
18
+ parameters: processEvidenceParameters(scenario, capture.manifest.platform),
19
19
  result: jsonValueSchema.parse(capture),
20
20
  confidence: "observed",
21
21
  authority: "controlled-replay",
@@ -0,0 +1,18 @@
1
+ import { z } from "zod";
2
+ import { AnalysisInputError } from "../domain/analysisErrorCore.js";
3
+ import { analysisInputErrorFromIssues } from "../domain/inputIssueProjection.js";
4
+ /** Project schema issues of the raw request onto their request paths. */
5
+ export const requestInputError = (operation, cause, input) => analysisInputErrorFromIssues(operation, cause.issues, input, { cause });
6
+ /**
7
+ * Keep the failed constraint when a parsed request is rejected later. Nested
8
+ * values such as Evidence results are parsed on their own, so their issue
9
+ * paths are relative to that value and are reported in the message, not as
10
+ * request paths.
11
+ */
12
+ export const workflowInputError = (operation, cause) => new AnalysisInputError(operation, { cause }, cause instanceof z.ZodError
13
+ ? cause.issues.map((issue) => ({
14
+ path: [],
15
+ reason: "invalid_value",
16
+ message: `A nested value failed validation at ${issue.path.length === 0 ? "its root" : issue.path.map(String).join(".")}: ${issue.message}`,
17
+ }))
18
+ : [{ path: [], reason: "invalid_value", message: cause.message }]);