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,13 +1,14 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import canonicalize from "canonicalize";
3
3
  import { z } from "zod";
4
- import { evidenceSchema, parseEvidence } from "../evidence.js";
4
+ import { evidenceSchema } from "../evidence.js";
5
5
  import { createJavaScriptApplicationGraph, javascriptApplicationGraphSchema, } from "../javascript/javascriptApplicationGraph.js";
6
6
  import { managedArtifactInspectionSchema, managedMemberInspectionSchema, managedNativeBoundaryInspectionSchema, } from "./managedArtifact.js";
7
7
  import { assessManagedGraphOmissions, managedGraphEvidenceCoverage, managedGraphResultCoverage, } from "./managedApplicationGraphCoverage.js";
8
8
  import { addArtifactNode, addArtifactIdentityNodes, addBoundaryNodes, addMemberNodes, } from "./managedApplicationGraphNodes.js";
9
9
  import { digestSchema } from "../digests.js";
10
10
  import { prefixedDigestSchema } from "../digests.js";
11
+ import { parseManagedInspectionEvidence } from "./managedInspectionEvidence.js";
11
12
  const evidenceIdSchema = prefixedDigestSchema("ev");
12
13
  const textSchema = z.string().min(1);
13
14
  /** Authenticated managed Evidence records projected into the application graph. */
@@ -121,20 +122,14 @@ export const projectManagedApplicationGraph = (input) => {
121
122
  const parseManagedInputs = (input) => ({
122
123
  artifact: input.managed_artifact === undefined
123
124
  ? null
124
- : parseManagedEvidence(input.managed_artifact, "inspect_managed_artifact", managedArtifactInspectionSchema),
125
+ : parseManagedInspectionEvidence(input.managed_artifact, "inspect_managed_artifact", managedArtifactInspectionSchema),
125
126
  members: input.managed_members === undefined
126
127
  ? null
127
- : parseManagedEvidence(input.managed_members, "inspect_managed_members", managedMemberInspectionSchema),
128
+ : parseManagedInspectionEvidence(input.managed_members, "inspect_managed_members", managedMemberInspectionSchema),
128
129
  boundaries: input.managed_native_boundaries === undefined
129
130
  ? null
130
- : parseManagedEvidence(input.managed_native_boundaries, "inspect_managed_native_boundaries", managedNativeBoundaryInspectionSchema),
131
+ : parseManagedInspectionEvidence(input.managed_native_boundaries, "inspect_managed_native_boundaries", managedNativeBoundaryInspectionSchema),
131
132
  });
132
- const parseManagedEvidence = (rawEvidence, operation, schema) => {
133
- const evidence = parseEvidence(rawEvidence);
134
- if (evidence.operation !== operation)
135
- throw new TypeError(`Evidence operation is not ${operation}`);
136
- return { evidence, result: schema.parse(evidence.normalized_result) };
137
- };
138
133
  const chooseArtifact = (parsed) => {
139
134
  const result = parsed.artifact?.result ??
140
135
  parsed.members?.result ??
@@ -164,6 +159,11 @@ const projectionLimitations = (parsed, omissions) => [
164
159
  "Managed member Evidence was not supplied; type, method, and field nodes are absent.",
165
160
  ]
166
161
  : []),
162
+ ...(parsed.artifact === null
163
+ ? [
164
+ "Managed artifact Evidence was not supplied; assembly identity observations are absent.",
165
+ ]
166
+ : []),
167
167
  ...(parsed.boundaries === null
168
168
  ? [
169
169
  "Managed native-boundary Evidence was not supplied; P/Invoke and native-implementation nodes are absent.",
@@ -413,7 +413,8 @@ export const managedNativeBoundaryInspectionSchema = z.object({
413
413
  requires_artifact_sha256: digestSchema,
414
414
  requires_mvid: cliMetadataGuidSchema.nullable(),
415
415
  }),
416
- cli_native: z.object({
416
+ cli_native: z
417
+ .object({
417
418
  il_only: z.boolean(),
418
419
  requires_32bit: z.boolean(),
419
420
  strong_name_signed: z.boolean(),
@@ -421,7 +422,8 @@ export const managedNativeBoundaryInspectionSchema = z.object({
421
422
  ready_to_run_signature: z.boolean(),
422
423
  managed_native_header_rva: z.number().int().min(0).max(0xffff_ffff),
423
424
  managed_native_header_size: z.number().int().min(0).max(0xffff_ffff),
424
- }),
425
+ })
426
+ .nullable(),
425
427
  module_refs: z.array(managedModuleReferenceSchema),
426
428
  pinvoke_imports: z.array(managedNativeImportSchema),
427
429
  native_implementations: z.array(managedNativeImplementationSchema),
@@ -429,8 +431,8 @@ export const managedNativeBoundaryInspectionSchema = z.object({
429
431
  module_ref_count: z.number().int().min(0),
430
432
  pinvoke_import_count: z.number().int().min(0),
431
433
  native_implementation_count: z.number().int().min(0),
432
- ready_to_run: z.boolean(),
433
- mixed_mode_or_native_header: z.boolean(),
434
+ ready_to_run: z.boolean().nullable(),
435
+ mixed_mode_or_native_header: z.boolean().nullable(),
434
436
  }),
435
437
  coverage: z.object({
436
438
  state: z.enum(["complete", "partial", "unavailable"]),
@@ -0,0 +1,16 @@
1
+ import { parseEvidence } from "../evidence.js";
2
+ /**
3
+ * Parse managed inspection Evidence and bind its artifact to any available subject.
4
+ * A null subject remains valid and means there is no digest to cross-check.
5
+ */
6
+ export const parseManagedInspectionEvidence = (rawEvidence, operation, schema) => {
7
+ const evidence = parseEvidence(rawEvidence);
8
+ if (evidence.operation !== operation)
9
+ throw new TypeError(`Evidence operation is not ${operation}`);
10
+ const result = schema.parse(evidence.normalized_result);
11
+ const artifactSha256 = result.artifact.sha256;
12
+ const subjectSha256 = evidence.subject?.digest.sha256;
13
+ if (subjectSha256 !== undefined && artifactSha256 !== subjectSha256)
14
+ throw new TypeError(`Managed Evidence ${operation} (${evidence.evidence_id}) subject SHA-256 ${subjectSha256} does not match normalized artifact SHA-256 ${artifactSha256}`);
15
+ return { evidence, result };
16
+ };
@@ -165,18 +165,12 @@ export const managedMemberComparisonResultSchema = z.strictObject({
165
165
  });
166
166
  /** Compare managed members with constrained exact and structural identities. */
167
167
  export const compareManagedMembers = (left, right) => {
168
- const leftCoverage = {
169
- sourceComplete: left.result.coverage.state === "complete",
170
- };
171
- const rightCoverage = {
172
- sourceComplete: right.result.coverage.state === "complete",
173
- };
174
168
  const { methodMatches, fieldMatches } = keyMembers(left, right);
175
169
  const itemContext = {
176
170
  leftEvidenceId: left.evidenceId,
177
171
  rightEvidenceId: right.evidenceId,
178
- leftComplete: leftCoverage.sourceComplete,
179
- rightComplete: rightCoverage.sourceComplete,
172
+ leftComplete: left.result.metadata.status === "complete",
173
+ rightComplete: right.result.metadata.status === "complete",
180
174
  };
181
175
  const methodItems = buildMethodItems(methodMatches, itemContext);
182
176
  const fieldItems = buildFieldItems(fieldMatches, itemContext);
@@ -212,4 +206,3 @@ export const compareManagedMembers = (left, right) => {
212
206
  };
213
207
  return managedMemberComparisonResultSchema.parse(result);
214
208
  };
215
- export { parseManagedMemberEvidence } from "./managedMemberComparisonMatch.js";
@@ -1,7 +1,7 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import canonicalize from "canonicalize";
3
- import { parseEvidence } from "../evidence.js";
4
3
  import { managedMemberInspectionSchema, } from "./managedArtifact.js";
4
+ import { parseManagedInspectionEvidence } from "./managedInspectionEvidence.js";
5
5
  export const sha256 = (value) => {
6
6
  const serialized = canonicalize(value);
7
7
  if (serialized === undefined)
@@ -10,9 +10,7 @@ export const sha256 = (value) => {
10
10
  };
11
11
  const keyMethod = (item) => ({
12
12
  item,
13
- exactKey: item.signature.parse_status === "decoded" &&
14
- item.body.status === "present" &&
15
- item.body.normalized_il_sha256 !== null
13
+ exactKey: item.body.status === "present" && item.body.normalized_il_sha256 !== null
16
14
  ? stableKey([
17
15
  "method-exact",
18
16
  item.signature.raw_sha256,
@@ -173,11 +171,9 @@ export const keyMembers = (left, right) => ({
173
171
  fieldMatches: matchFields(left.result.fields.map(keyField), right.result.fields.map(keyField)),
174
172
  });
175
173
  export const parseManagedMemberEvidence = (evidence) => {
176
- const parsed = parseEvidence(evidence);
177
- if (parsed.operation !== "inspect_managed_members")
178
- throw new TypeError("Evidence operation is not inspect_managed_members");
174
+ const parsed = parseManagedInspectionEvidence(evidence, "inspect_managed_members", managedMemberInspectionSchema);
179
175
  return {
180
- evidenceId: parsed.evidence_id,
181
- result: managedMemberInspectionSchema.parse(parsed.normalized_result),
176
+ evidenceId: parsed.evidence.evidence_id,
177
+ result: parsed.result,
182
178
  };
183
179
  };
@@ -1,27 +1,19 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import canonicalize from "canonicalize";
3
- import { parseEvidence } from "../evidence.js";
4
3
  import { managedNativeBoundaryInspectionSchema, } from "./managedArtifact.js";
4
+ import { parseManagedInspectionEvidence } from "./managedInspectionEvidence.js";
5
5
  import { managedNativeVerificationResultSchema, } from "./managedNativeVerificationSchemas.js";
6
6
  import { buildVerificationResult, collectNativeSymbols, verifyPinvoke, } from "./managedNativeVerificationMatch.js";
7
- export { managedNativeVerificationInputSchema, } from "./managedNativeVerificationSchemas.js";
8
- export { managedNativeVerificationResultSchema };
9
7
  const sha256 = (value) => {
10
8
  const serialized = canonicalize(value);
11
9
  if (serialized === undefined)
12
10
  throw new TypeError("Managed/native verification canonicalization failed");
13
11
  return createHash("sha256").update(serialized).digest("hex");
14
12
  };
15
- const managedBoundaryFromInput = (input) => {
16
- const managedEvidence = parseEvidence(input.managed_boundaries);
17
- if (managedEvidence.operation !== "inspect_managed_native_boundaries")
18
- throw new TypeError("Evidence operation is not inspect_managed_native_boundaries");
19
- return managedNativeBoundaryInspectionSchema.parse(managedEvidence.normalized_result);
20
- };
13
+ const parseManagedBoundary = (input) => parseManagedInspectionEvidence(input.managed_boundaries, "inspect_managed_native_boundaries", managedNativeBoundaryInspectionSchema);
21
14
  /** Verify managed P/Invoke declarations against authenticated native Evidence. */
22
15
  export const verifyManagedNativeBoundaries = (input) => {
23
- const managed = managedBoundaryFromInput(input);
24
- const managedEvidence = parseEvidence(input.managed_boundaries);
16
+ const { evidence: managedEvidence, result: managed } = parseManagedBoundary(input);
25
17
  const native = collectNativeSymbols(input.native_observations);
26
18
  const verifiedPinvokes = managed.pinvoke_imports.map((item) => verifyPinvoke({
27
19
  item,
@@ -71,16 +71,22 @@ const sameSymbolName = (expected, native) => expected ===
71
71
  : native.name);
72
72
  const normalizeModule = (value) => basename(value)
73
73
  .toLowerCase()
74
- .replace(/^lib/u, "")
75
74
  .replace(/\.(dll|dylib|so|node|exe)$/u, "");
75
+ const nativeModuleIdentities = (value) => {
76
+ const filename = basename(value).toLowerCase();
77
+ const stem = normalizeModule(filename);
78
+ const identities = new Set([stem]);
79
+ if (/\.(dylib|so)$/u.test(filename) && stem.startsWith("lib"))
80
+ identities.add(stem.slice("lib".length));
81
+ return identities;
82
+ };
76
83
  const moduleCompatible = (scope, symbol) => {
77
84
  if (scope === null)
78
85
  return true;
79
86
  const expected = normalizeModule(scope);
80
87
  return [symbol.module_name, symbol.module_path]
81
88
  .filter((value) => value !== null)
82
- .map(normalizeModule)
83
- .some((value) => value === expected);
89
+ .some((value) => nativeModuleIdentities(value).has(expected));
84
90
  };
85
91
  const candidateNames = (managed) => {
86
92
  const names = new Set([managed.import_name]);
@@ -1,11 +1,10 @@
1
1
  import { z } from "zod";
2
+ import { CANONICAL_BASE64_PATTERN } from "../stringPatterns.js";
2
3
  const unsignedHex = z.string().regex(/^0x(?:0|[1-9a-f][0-9a-f]{0,15})$/);
3
4
  const index = z.number().int().nonnegative();
4
5
  const scalar = z.union([z.string(), z.number().int()]);
5
6
  const range = z.strictObject({ offset: unsignedHex, bytes: unsignedHex });
6
- const canonicalBase64 = z
7
- .string()
8
- .regex(/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/][AQgw]==|[A-Za-z0-9+/]{2}[AEIMQUYcgkosw048]=)?$/);
7
+ const canonicalBase64 = z.string().regex(CANONICAL_BASE64_PATTERN);
9
8
  const name = z.strictObject({
10
9
  display: z.string(),
11
10
  bytes_base64: canonicalBase64.nullable(),
@@ -0,0 +1 @@
1
+ export {};
@@ -71,7 +71,7 @@ const inferredJumpTableSchema = z
71
71
  dispatch_address: z.string().min(1),
72
72
  data_sources: z.array(jumpTableDataSourceSchema),
73
73
  mappings: z.array(jumpTableMappingSchema),
74
- default_targets: z.array(jumpTableDefaultTargetSchema).default([]),
74
+ default_targets: z.array(jumpTableDefaultTargetSchema),
75
75
  limitations: z.array(z.string()),
76
76
  })
77
77
  .strict();
@@ -1,14 +1,16 @@
1
1
  import { z } from "zod";
2
+ import { localPathStringSchema } from "../localPath.js";
2
3
  const hexSchema = z.string().regex(/^0x[0-9a-f]+$/u);
3
- /** Objective-C class names and selectors never contain spaces or brackets. */
4
- const objcName = z
4
+ const nativeString = z
5
5
  .string()
6
+ .regex(/^[^\u0000]*$/u, "Native launch and breakpoint strings cannot contain NUL");
7
+ /** Objective-C class names and selectors never contain spaces or brackets. */
8
+ const objcName = nativeString
6
9
  .min(1)
7
- .regex(/^[^\s[\]]+$/u, "Use the bare name without spaces or brackets");
10
+ .regex(/^[^\s\x5b\x5d]+$/u, "Use the bare name without spaces or brackets");
8
11
  const functionBreakpoint = {
9
12
  kind: z.literal("function"),
10
- name: z
11
- .string()
13
+ name: nativeString
12
14
  .min(1)
13
15
  .describe("Exact symbol name, such as `open`, a C++ or mangled Swift symbol, or `-[NSString length]`."),
14
16
  };
@@ -20,8 +22,7 @@ const objcMethodBreakpoint = {
20
22
  export const nativeCallBreakpointSchema = z.discriminatedUnion("kind", [
21
23
  z.strictObject({
22
24
  ...functionBreakpoint,
23
- module: z
24
- .string()
25
+ module: nativeString
25
26
  .min(1)
26
27
  .optional()
27
28
  .describe("Image file name that defines the symbol, such as `libsystem_kernel.dylib`; omit to match every image."),
@@ -40,15 +41,17 @@ export const nativeCallBreakpointSchema = z.discriminatedUnion("kind", [
40
41
  */
41
42
  export const nativeCallObservationInputSchema = z.strictObject({
42
43
  breakpoints: z.array(nativeCallBreakpointSchema).min(1),
43
- arguments: z.array(z.string()).default([]),
44
+ arguments: z.array(nativeString).default([]),
44
45
  environment: z
45
46
  .record(z
46
47
  .string()
47
48
  .min(1)
48
- .regex(/^[^=\0]+$/u, "Environment names cannot contain '=' or NUL"), z.string().regex(/^[^\0]*$/u, "Environment values cannot contain NUL"))
49
+ .regex(/^[^=\u0000]+$/u, "Environment names cannot contain '=' or NUL"), z
50
+ .string()
51
+ .regex(/^[^\u0000]*$/u, "Environment values cannot contain NUL"))
49
52
  .default({})
50
53
  .describe("Overrides on top of the environment REA runs with."),
51
- working_directory: z.string().min(1).optional(),
54
+ working_directory: localPathStringSchema.optional(),
52
55
  duration_ms: z
53
56
  .number()
54
57
  .int()
@@ -100,10 +103,13 @@ export const nativeCallEventSchema = z.strictObject({
100
103
  registers: z.array(z.strictObject({ name: z.string(), value: hexSchema })),
101
104
  backtrace: z.array(nativeCodeLocationSchema),
102
105
  });
103
- const capturedOutputSchema = z.strictObject({
106
+ /** Retained native output with explicit stream completeness and byte counts. */
107
+ export const nativeCapturedOutputSchema = z.strictObject({
104
108
  text: z.string(),
109
+ /** Bytes observed by the bridge, not a total when complete is false. */
105
110
  bytes: z.number().int().nonnegative(),
106
111
  truncated: z.boolean(),
112
+ complete: z.boolean(),
107
113
  });
108
114
  /** Observed calls, the process lifecycle, and breakpoint resolution. */
109
115
  export const nativeCallObservationResultSchema = z.strictObject({
@@ -112,7 +118,21 @@ export const nativeCallObservationResultSchema = z.strictObject({
112
118
  sha256: z.string().regex(/^[0-9a-f]{64}$/u),
113
119
  architecture: z.string(),
114
120
  arguments: z.array(z.string()),
121
+ environment: z.record(z.string(), z.string()),
115
122
  working_directory: z.string().nullable(),
123
+ launch_identity: z.strictObject({
124
+ /** A pathname hash does not verify the bytes mapped into the process. */
125
+ loaded_image_sha256: z.null(),
126
+ file_device: z.string().nullable(),
127
+ file_inode: z.string().nullable(),
128
+ selected_file_sha256: z
129
+ .string()
130
+ .regex(/^[0-9a-f]{64}$/u)
131
+ .nullable(),
132
+ module_path: z.string().nullable(),
133
+ module_uuid: z.string().nullable(),
134
+ stable: z.boolean(),
135
+ }),
116
136
  }),
117
137
  debugger: z.strictObject({
118
138
  path: z.string(),
@@ -126,14 +146,15 @@ export const nativeCallObservationResultSchema = z.strictObject({
126
146
  "duration-elapsed",
127
147
  "event-limit",
128
148
  "stop-limit",
149
+ "resource-limit",
129
150
  ]),
130
151
  exit_status: z.number().int().nullable(),
131
152
  exit_description: z.string().nullable(),
132
153
  /** REA confirmed the process is gone when observation ended. */
133
154
  terminated: z.boolean(),
134
155
  elapsed_ms: z.number().nonnegative(),
135
- stdout: capturedOutputSchema,
136
- stderr: capturedOutputSchema,
156
+ stdout: nativeCapturedOutputSchema,
157
+ stderr: nativeCapturedOutputSchema,
137
158
  /** Signal and exception stops LLDB reported; the process continued past each. */
138
159
  other_stops: z.array(z.string()),
139
160
  }),
@@ -157,6 +178,9 @@ export const nativeCallObservationResultSchema = z.strictObject({
157
178
  coverage: z.strictObject({
158
179
  status: z.enum(["complete", "partial"]),
159
180
  event_limit_reached: z.boolean(),
181
+ resource_limit_reached: z.boolean(),
182
+ /** Aggregate breakpoint-location metadata exhausted its retained-byte budget. */
183
+ breakpoint_locations_truncated: z.boolean().optional(),
160
184
  /** Requests that matched no code in any image loaded while observing. */
161
185
  unresolved_breakpoints: z.array(z.number().int().nonnegative()),
162
186
  }),
@@ -0,0 +1,33 @@
1
+ import { z } from "zod";
2
+ import { nativeCallEventSchema, nativeCapturedOutputSchema, } from "./nativeCallObservation.js";
3
+ /** Native call evidence retained when observation fails before a full result. */
4
+ export const nativeCallPartialObservationSchema = z.strictObject({
5
+ kind: z.literal("native-call-observation"),
6
+ target: z.strictObject({
7
+ path: z.string(),
8
+ sha256: z.string().regex(/^[0-9a-f]{64}$/u),
9
+ architecture: z.string(),
10
+ arguments: z.array(z.string()),
11
+ environment: z.record(z.string(), z.string()),
12
+ working_directory: z.string().nullable(),
13
+ }),
14
+ process: z.strictObject({
15
+ pid: z.number().int().positive().nullable(),
16
+ stdout: nativeCapturedOutputSchema.nullable(),
17
+ stderr: nativeCapturedOutputSchema.nullable(),
18
+ other_stops: z.array(z.string()),
19
+ }),
20
+ debugger: z.strictObject({ version: z.string().nullable() }),
21
+ events: z.array(nativeCallEventSchema),
22
+ coverage: z.strictObject({
23
+ status: z.literal("partial"),
24
+ reason: z.enum([
25
+ "cancelled",
26
+ "timeout",
27
+ "tracer-failure",
28
+ "capture-failure",
29
+ "cleanup-failure",
30
+ ]),
31
+ }),
32
+ limitations: z.array(z.string()),
33
+ });
@@ -54,6 +54,13 @@ export const nativeInstructionSchema = z.strictObject({
54
54
  conditional: z.boolean(),
55
55
  computed: z.boolean(),
56
56
  direct_destinations: z.array(z.string()),
57
+ classification_evidence: z
58
+ .array(z.strictObject({
59
+ source: z.string().min(1),
60
+ value: z.string().min(1),
61
+ }))
62
+ .optional()
63
+ .describe("Observed provider facts used to classify flow; older captures or other providers may omit them."),
57
64
  }),
58
65
  references: z.array(reference),
59
66
  limitations: z.array(z.string()),
@@ -1,11 +1,10 @@
1
1
  import { z } from "zod";
2
+ import { CANONICAL_BASE64_PATTERN } from "../stringPatterns.js";
2
3
  import { recordedNoteCoverageIssues } from "./recordedCrashNoteCoverage.js";
3
4
  const hex = z.string().regex(/^0x(?:0|[1-9a-f][0-9a-f]{0,15})$/);
4
5
  const index = z.number().int().nonnegative();
5
6
  const signed32 = z.number().int().min(-2147483648).max(2147483647);
6
- const base64 = z
7
- .string()
8
- .regex(/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/][AQgw]==|[A-Za-z0-9+/]{2}[AEIMQUYcgkosw048]=)?$/);
7
+ const base64 = z.string().regex(CANONICAL_BASE64_PATTERN);
9
8
  const range = z.strictObject({ offset: hex, bytes: hex });
10
9
  const diagnostics = z.strictObject({
11
10
  stdout: z.string(),
@@ -0,0 +1,17 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * ISO-8601 date-time that requires an explicit UTC offset.
4
+ *
5
+ * `z.string().datetime({ offset: true })` emits Zod's offset class as `[+-]`.
6
+ * Annex B and `u` mode accept that, but ECMA-262 `v` mode rejects the
7
+ * unescaped `-`, so any tool whose schema carries the pattern is unusable for a
8
+ * client that compiles advertised patterns — schema compilation happens before
9
+ * arguments are supplied, so the whole tools request fails rather than one call.
10
+ *
11
+ * The accepted set is identical to the Zod validator; only the offset class
12
+ * escapes `-`, as `\x2d`, because an escaped `-` inside a character class is
13
+ * removed by `oxlint --fix` as a useless escape.
14
+ */
15
+ export const offsetDateTimeSchema = z
16
+ .string()
17
+ .regex(/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|(?:[+\x2d](?:[01]\d|2[0-3]):[0-5]\d)))$/u, "Use an ISO-8601 date-time with an explicit UTC offset");
@@ -2,7 +2,7 @@ import { z } from "zod";
2
2
  import { jsonValueSchema } from "../jsonValue.js";
3
3
  import { normalizationSchema } from "./processScenario.js";
4
4
  import { collectProcessCaptureIssues } from "./processCaptureValidation.js";
5
- export * from "./processScenario.js";
5
+ import { processCaptureTruncationDetailsSchema, } from "./processCaptureCoverage.js";
6
6
  /** Capture collection whose members participate in global observation order. */
7
7
  export const PROCESS_CAPTURE_EVENT_COLLECTIONS = [
8
8
  "frames",
@@ -59,6 +59,13 @@ const fileEffectSchema = z.discriminatedUnion("status", [
59
59
  before: fileStateSchema,
60
60
  after: fileStateSchema,
61
61
  }),
62
+ z.object({
63
+ path: z.string(),
64
+ status: z.literal("unknown"),
65
+ before: fileStateSchema.nullable(),
66
+ after: fileStateSchema.nullable(),
67
+ reason: z.string().min(1),
68
+ }),
62
69
  ]);
63
70
  /** Exact serialized shape of a process capture. */
64
71
  const processSettlementSchema = z.discriminatedUnion("state", [
@@ -73,6 +80,7 @@ const processSettlementSchema = z.discriminatedUnion("state", [
73
80
  cleanup_outcome: z.enum(["cleaned", "failed"]),
74
81
  }),
75
82
  ]);
83
+ const unverifiedCleanupProcessesSchema = z.array(z.strictObject({ pid: z.number().int().positive(), reason: z.string() }));
76
84
  const processCaptureShapeSchema = z.strictObject({
77
85
  manifest: z.strictObject({
78
86
  rea_version: z.string().min(1),
@@ -94,10 +102,6 @@ const processCaptureShapeSchema = z.strictObject({
94
102
  .string()
95
103
  .regex(/^[a-f0-9]{64}$/u)
96
104
  .nullable(),
97
- legacy_executable_sha256: z
98
- .string()
99
- .regex(/^[a-f0-9]{64}$/u)
100
- .optional(),
101
105
  executable_identity: z.strictObject({
102
106
  state: z.enum(["path_metadata_unchanged", "unknown"]),
103
107
  reason: z.string().nullable(),
@@ -109,6 +113,7 @@ const processCaptureShapeSchema = z.strictObject({
109
113
  sequence: z.number().int().nonnegative(),
110
114
  at_ms: z.number().int().nonnegative(),
111
115
  data: z.string(),
116
+ raw_data: z.string().optional(),
112
117
  })),
113
118
  rendered_frames: z.array(z.object({
114
119
  sequence: z.number().int().nonnegative(),
@@ -161,17 +166,16 @@ const processCaptureShapeSchema = z.strictObject({
161
166
  effects: z.array(fileEffectSchema),
162
167
  truncated: z.boolean(),
163
168
  })),
164
- event_journal: z
165
- .array(z.object({
169
+ event_journal: z.array(z.object({
166
170
  capture_order: z.number().int().nonnegative(),
167
171
  collection: z.enum(PROCESS_CAPTURE_EVENT_COLLECTIONS),
168
172
  index: z.number().int().nonnegative(),
169
- }))
170
- .default([]),
173
+ })),
171
174
  files_before: z.array(fileStateSchema),
172
175
  files_after: z.array(fileStateSchema),
173
176
  filesystem_effects: z.array(fileEffectSchema),
174
177
  truncated: z.boolean(),
178
+ truncation_details: processCaptureTruncationDetailsSchema.optional(),
175
179
  limitations: z.array(z.string()),
176
180
  residual_unknowns: z.array(z.object({
177
181
  scope: z.enum([
@@ -189,11 +193,13 @@ const processCaptureShapeSchema = z.strictObject({
189
193
  cleanup: z.object({
190
194
  owned_process_group: z.literal("verified"),
191
195
  temporary_root: z.literal("removed"),
196
+ unverified_processes: unverifiedCleanupProcessesSchema.optional(),
192
197
  }),
193
198
  });
194
199
  const processCleanupResourceSchema = z.strictObject({
195
200
  state: z.enum(["cleaned", "failed", "unverified", "not_required"]),
196
201
  reason: z.string().nullable(),
202
+ unverified_processes: unverifiedCleanupProcessesSchema.optional(),
197
203
  });
198
204
  const partialObservationFieldSchema = (value) => z.discriminatedUnion("state", [
199
205
  z.strictObject({ state: z.literal("available"), value }),
@@ -244,18 +250,19 @@ const completedCaptureObservationSchema = z.strictObject({
244
250
  const incompleteCaptureObservationSchema = z.strictObject({
245
251
  observations: incompleteProcessCaptureObservationsSchema,
246
252
  });
247
- /** Validated, non-comparable process observations attached to cleanup errors. */
253
+ /** Validated, non-comparable process observations attached to execution or cleanup errors. */
248
254
  export const partialProcessCaptureObservationSchema = z
249
255
  .union([
250
256
  completedCaptureObservationSchema.extend(partialObservationMetadataSchema.shape),
251
257
  incompleteCaptureObservationSchema.extend(partialObservationMetadataSchema.shape),
252
258
  ])
253
259
  .superRefine((partial, context) => {
254
- if (!Object.values(partial.cleanup).some(({ state }) => state === "failed" || state === "unverified"))
260
+ const cleanupIncomplete = Object.values(partial.cleanup).some(({ state }) => state === "failed" || state === "unverified");
261
+ if (!cleanupIncomplete && partial.execution_failure === null)
255
262
  context.addIssue({
256
263
  code: "custom",
257
- path: ["cleanup"],
258
- message: "partial observations require incomplete resource cleanup",
264
+ path: ["execution_failure"],
265
+ message: "partial observations require incomplete cleanup or an execution failure",
259
266
  });
260
267
  if ("observations" in partial) {
261
268
  const { observations } = partial;
@@ -311,6 +318,4 @@ export const processCaptureSchema = processCaptureShapeSchema
311
318
  message: issue.message,
312
319
  });
313
320
  })
314
- .describe("The capture must preserve its canonical scenario, comparison, and normalization SHA-256 commitments; ordered capture timestamps and contiguous sequence numbers; before and final filesystem snapshots with truncation propagated; and exit-code consistency with deadline termination. When parsing older input without an event journal, REA supplies an empty journal; empty journals are valid. A non-empty journal must reference every captured observation exactly once with unique in-range references. These cross-field invariants are checked by REA after capture.");
315
- export { parseProcessCapture } from "./processCaptureParsing.js";
316
- export { compareProcessCaptures, comparisonStatusSchema, deriveProcessComparisonStatus, PROCESS_COMPARISON_DIMENSIONS, processCaptureComparisonSchema, } from "./processComparison.js";
321
+ .describe("The capture must preserve its canonical scenario, comparison, and normalization SHA-256 commitments; ordered capture timestamps and contiguous sequence numbers; before and final filesystem snapshots with truncation propagated; and exit-code consistency with deadline termination. The event journal is required; empty journals are valid. A non-empty journal must reference every captured observation exactly once with unique in-range references. These cross-field invariants are checked by REA after capture.");
@@ -0,0 +1,67 @@
1
+ import { z } from "zod";
2
+ const byteRetentionSchema = z.strictObject({
3
+ budget_bytes: z.number().int().nonnegative(),
4
+ observed_bytes: z.number().int().nonnegative(),
5
+ retained_bytes: z.number().int().nonnegative(),
6
+ observed_frames: z.number().int().nonnegative(),
7
+ retained_frames: z.number().int().nonnegative(),
8
+ });
9
+ /** Filesystem enumeration and whole-file digest coverage for one checkpoint. */
10
+ export const filesystemCoverageSchema = z.strictObject({
11
+ files_limit: z.number().int().nonnegative(),
12
+ depth_limit: z.number().int().nonnegative(),
13
+ enumeration_truncated: z.boolean(),
14
+ enumeration_reasons: z.array(z.enum(["files_limit", "depth_limit", "identity_changed"])),
15
+ hash_budget_bytes: z.number().int().nonnegative(),
16
+ hashed_bytes: z.number().int().nonnegative(),
17
+ hash_omissions: z.array(z.strictObject({
18
+ path: z.string(),
19
+ size_bytes: z.number().int().nonnegative(),
20
+ remaining_budget_bytes: z.number().int().nonnegative(),
21
+ reason: z.enum(["file_bytes_budget", "file_changed_or_short_read"]),
22
+ })),
23
+ });
24
+ /** Actual budget accounting; rendered bytes count state and visible lines, not JSON. */
25
+ export const processCaptureTruncationDetailsSchema = z.strictObject({
26
+ raw_terminal: byteRetentionSchema.describe("UTF-8 bytes of original PTY chunks; whole chunks are retained or omitted."),
27
+ rendered_terminal: byteRetentionSchema.describe("Cumulative UTF-8 bytes of serialized state plus visible lines, evaluated from retained PTY input; whole frames are retained or omitted."),
28
+ filesystem_before: filesystemCoverageSchema,
29
+ filesystem_after: filesystemCoverageSchema,
30
+ process: z.strictObject({
31
+ sample_limit: z.number().int().nonnegative(),
32
+ sampling_partial: z.boolean(),
33
+ retained_samples: z.number().int().nonnegative(),
34
+ sample_limit_reached: z.boolean(),
35
+ sampling_failures: z.number().int().nonnegative(),
36
+ first_sampling_failure: z.string().nullable(),
37
+ coverage: z.literal("sampled"),
38
+ }),
39
+ });
40
+ const omitted = (retention) => retention.observed_frames > retention.retained_frames;
41
+ const filesystemTruncated = (coverage) => coverage.enumeration_truncated || coverage.hash_omissions.length > 0;
42
+ /** Derive the legacy aggregate flag from independent producer observations. */
43
+ export const hasCaptureTruncation = (details) => omitted(details.raw_terminal) ||
44
+ omitted(details.rendered_terminal) ||
45
+ filesystemTruncated(details.filesystem_before) ||
46
+ filesystemTruncated(details.filesystem_after) ||
47
+ details.process.sampling_partial;
48
+ /** Older truncated captures lack enough information to localize missing observations. */
49
+ export const processSourceTruncated = (capture, source) => {
50
+ const details = capture.truncation_details;
51
+ if (details === undefined)
52
+ return capture.truncated;
53
+ switch (source) {
54
+ case "terminal_raw":
55
+ return omitted(details.raw_terminal);
56
+ case "terminal_rendered":
57
+ return (omitted(details.raw_terminal) || omitted(details.rendered_terminal));
58
+ case "filesystem":
59
+ return (filesystemTruncated(details.filesystem_before) ||
60
+ filesystemTruncated(details.filesystem_after));
61
+ case "process":
62
+ return details.process.sampling_partial;
63
+ case "interaction":
64
+ case "lifecycle":
65
+ return false;
66
+ }
67
+ };
@@ -1,4 +1,4 @@
1
- import { digestProcessCommitment } from "./processCapture.js";
1
+ import { digestProcessCommitment } from "./processScenario.js";
2
2
  const normalization = {
3
3
  paths: true,
4
4
  pids: true,
@@ -51,6 +51,7 @@ export const EMPTY_PROCESS_CAPTURE_EXAMPLE = {
51
51
  truncated: false,
52
52
  },
53
53
  ],
54
+ event_journal: [],
54
55
  files_before: [],
55
56
  files_after: [],
56
57
  filesystem_effects: [],