rea-agents 3.2.1 → 4.0.1

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 (434) hide show
  1. package/README.md +183 -332
  2. package/bridge/ghidra/ReaGhidraBridge.java +561 -74
  3. package/bridge/hopper_bridge.py +70 -27
  4. package/bridge/native/ReaNativeUI.swift +157 -0
  5. package/dist/application/AnalysisContextQueries.js +19 -5
  6. package/dist/application/AnalysisSnapshotCache.js +30 -11
  7. package/dist/application/AppleAssetCatalogAnalysis.js +171 -0
  8. package/dist/application/ArtifactExtractionDestination.js +0 -12
  9. package/dist/application/ArtifactGraphConstruction.js +44 -11
  10. package/dist/application/ArtifactInventory/classify.js +7 -15
  11. package/dist/application/ArtifactInventory/hash.js +4 -2
  12. package/dist/application/ArtifactInventory/policy.js +2 -17
  13. package/dist/application/ArtifactInventory/reader.js +3 -3
  14. package/dist/application/ArtifactInventory/scanCanonical.js +2 -2
  15. package/dist/application/ArtifactInventory/scanReader.js +12 -4
  16. package/dist/application/ArtifactInventory/types.js +0 -3
  17. package/dist/application/BinarySession.js +28 -43
  18. package/dist/application/BinarySessionExecution.js +37 -1
  19. package/dist/application/BinaryTargetResolver.js +50 -4
  20. package/dist/application/BrowserEvidence.js +36 -7
  21. package/dist/application/BrowserObservationService.js +17 -44
  22. package/dist/application/BrowserScenarioCaptureService.js +2 -35
  23. package/dist/application/BrowserScenarioEvidence.js +13 -9
  24. package/dist/application/CapabilityClientRequirements.js +2 -11
  25. package/dist/application/CapabilityInventory.js +21 -35
  26. package/dist/application/ClientConfigurationDocument.js +84 -7
  27. package/dist/application/ClientRegistrationIdentity.js +32 -0
  28. package/dist/application/ClientRegistrationStatus.js +59 -6
  29. package/dist/application/DirectAnalysis.js +37 -58
  30. package/dist/application/DirectAnalysisStatus.js +4 -4
  31. package/dist/application/Doctor.js +89 -80
  32. package/dist/application/DoctorDiagnostics.js +2 -26
  33. package/dist/application/DoctorScope.js +8 -14
  34. package/dist/application/ElectronActiveEvidence.js +10 -27
  35. package/dist/application/ElectronActiveObservationService.js +9 -36
  36. package/dist/application/ElectronBoundaryAnalysis.js +2 -0
  37. package/dist/application/ElectronBoundaryGraphNative.js +1 -1
  38. package/dist/application/ElectronEvidence.js +8 -3
  39. package/dist/application/ElectronObservationService.js +9 -25
  40. package/dist/application/EnhancedLiteralTracing.js +4 -8
  41. package/dist/application/EnhancedTools.js +15 -35
  42. package/dist/application/FilesystemSnapshot.js +7 -8
  43. package/dist/application/JavaScriptApplicationEvidenceGraph.js +2 -1
  44. package/dist/application/JavaScriptApplicationWorkflowService.js +31 -7
  45. package/dist/application/JavaScriptArtifactAnalysis.js +6 -4
  46. package/dist/application/JavaScriptArtifactFiles.js +5 -0
  47. package/dist/application/JavaScriptArtifactPathResolution.js +179 -47
  48. package/dist/application/JavaScriptRuntimeObservationEvidence.js +6 -3
  49. package/dist/application/JavaScriptRuntimeObservationService.js +9 -25
  50. package/dist/application/JavaScriptRuntimeReconciliationService.js +45 -4
  51. package/dist/application/JavaScriptSemanticGraphAsyncProjection.js +11 -0
  52. package/dist/application/JavaScriptSemanticGraphChildProcessProjection.js +11 -0
  53. package/dist/application/JavaScriptSemanticGraphDataProjection.js +11 -0
  54. package/dist/application/JavaScriptSemanticGraphFlowProjection.js +14 -5
  55. package/dist/application/JsonFiles.js +1 -1
  56. package/dist/application/LazyAnalysisProvider.js +27 -6
  57. package/dist/application/ManagedMemberComparisonService.js +19 -6
  58. package/dist/application/NativeApiInspection.js +2 -0
  59. package/dist/application/NativeCallRoutes.js +72 -0
  60. package/dist/application/NativeDispatchMetadataInspection.js +33 -0
  61. package/dist/application/NativeUiActionTrace.js +73 -49
  62. package/dist/application/NativeValueTrace.js +320 -0
  63. package/dist/application/ProcessCaptureCapability.js +32 -5
  64. package/dist/application/ProcessCaptureEnvironment.js +9 -26
  65. package/dist/application/ProcessCaptureError.js +1 -5
  66. package/dist/application/ProcessCaptureJournal.js +3 -40
  67. package/dist/application/ProcessCaptureLifecycle.js +102 -111
  68. package/dist/application/ProcessCli.js +18 -25
  69. package/dist/application/ProcessEvidence.js +5 -7
  70. package/dist/application/ProcessFilesystemEffects.js +36 -0
  71. package/dist/application/ProcessHarness.js +41 -120
  72. package/dist/application/ProcessNormalization.js +2 -17
  73. package/dist/application/ProcessScenarioRuntimeValidation.js +76 -0
  74. package/dist/application/ReferenceSourceImport.js +3 -4
  75. package/dist/application/Setup.js +236 -84
  76. package/dist/application/SetupClientConfiguration.js +14 -9
  77. package/dist/application/SetupPlan.js +138 -86
  78. package/dist/application/SetupSkill.js +0 -1
  79. package/dist/application/SupportedClients.js +102 -21
  80. package/dist/application/Uninstall.js +31 -20
  81. package/dist/application/Update.js +93 -0
  82. package/dist/application/UpdateMaintenance.js +108 -0
  83. package/dist/application/UpdateRuntime.js +126 -0
  84. package/dist/application/runtime.js +13 -2
  85. package/dist/artifacts/ArtifactPaths.js +6 -8
  86. package/dist/artifacts/ArtifactProvider.js +94 -41
  87. package/dist/artifacts/AsarArtifactReader.js +19 -4
  88. package/dist/artifacts/KeyedArchiveReader.js +110 -0
  89. package/dist/artifacts/MachOSliceArtifactReader.js +53 -5
  90. package/dist/artifacts/ZipArtifactReader.js +18 -1
  91. package/dist/browser/BrowserScenarioSecrets.js +28 -1
  92. package/dist/browser/CdpBrowserProvider.js +36 -15
  93. package/dist/browser/CdpCaptureDocuments.js +22 -8
  94. package/dist/browser/CdpCaptureEventHandlers.js +14 -5
  95. package/dist/browser/CdpCaptureEventHelpers.js +13 -0
  96. package/dist/browser/CdpCaptureEvents.js +10 -1
  97. package/dist/browser/CdpElectronInspection.js +5 -10
  98. package/dist/browser/CdpElectronProvider.js +1 -5
  99. package/dist/browser/CdpElectronScripts.js +1 -1
  100. package/dist/browser/CdpEndpoint.js +3 -2
  101. package/dist/browser/CdpObservationSession.js +14 -10
  102. package/dist/browser/CdpPageCapture.js +1 -1
  103. package/dist/browser/CdpPageCaptureScripts.js +1 -1
  104. package/dist/browser/CdpSafeMetadata.js +5 -4
  105. package/dist/browser/CdpScreenshot.js +16 -5
  106. package/dist/browser/CdpTargetSession.js +25 -4
  107. package/dist/browser/CdpWebMcpDiscovery.js +93 -20
  108. package/dist/browser/JavaScriptRuntimeScope.js +28 -2
  109. package/dist/browser/PlaywrightBrowserScenarioProvider.js +9 -8
  110. package/dist/browser/PlaywrightElectronActiveActions.js +3 -10
  111. package/dist/browser/PlaywrightElectronActiveProvider.js +5 -5
  112. package/dist/browser/PlaywrightScenarioActions.js +1 -1
  113. package/dist/browser/PlaywrightScenarioArtifacts.js +13 -25
  114. package/dist/browser/PlaywrightScenarioBrowser.js +28 -25
  115. package/dist/browser/PlaywrightScenarioEvents.js +82 -93
  116. package/dist/browser/PlaywrightScenarioSession.js +27 -123
  117. package/dist/browser/PngVisualDiff.js +22 -3
  118. package/dist/browser/V8InspectorCaptureProjection.js +7 -1
  119. package/dist/browser/V8InspectorProvider.js +60 -7
  120. package/dist/browser/WebSourceMapFetcher.js +99 -53
  121. package/dist/cli/artifactCommands.js +56 -12
  122. package/dist/cli/coreAnalysisCommands.js +110 -0
  123. package/dist/cli/managedCommands.js +1 -31
  124. package/dist/cli/setupCommands.js +16 -14
  125. package/dist/cli/utilityCommands.js +61 -4
  126. package/dist/cli.js +5 -7
  127. package/dist/cliApplicationCommands.js +0 -83
  128. package/dist/cliBrowserAdvancedCommands.js +7 -11
  129. package/dist/cliBrowserCommands.js +15 -23
  130. package/dist/cliBrowserContext.js +3 -24
  131. package/dist/cliBrowserScenarioCommands.js +2 -10
  132. package/dist/cliCommandNames.js +82 -7
  133. package/dist/cliElectronCommands.js +10 -36
  134. package/dist/cliJavaScriptRuntimeCommands.js +6 -30
  135. package/dist/cliJsonInput.js +4 -2
  136. package/dist/cliLogging.js +16 -7
  137. package/dist/cliObservationOptions.js +1 -1
  138. package/dist/cliOutput.js +2 -4
  139. package/dist/cliProcessCommands.js +6 -33
  140. package/dist/cliSetup.js +90 -160
  141. package/dist/config/environment.js +2 -78
  142. package/dist/config/parseConfig.js +18 -109
  143. package/dist/config/parsers.js +0 -23
  144. package/dist/contracts/applicationToolContracts.js +1 -118
  145. package/dist/contracts/artifactToolContracts.js +11 -19
  146. package/dist/contracts/browserScenarioToolContracts.js +1 -5
  147. package/dist/contracts/browserToolContracts.js +9 -16
  148. package/dist/contracts/electronToolContracts.js +5 -6
  149. package/dist/contracts/enhancedInputs.js +3 -2
  150. package/dist/contracts/errorSchemas.js +16 -40
  151. package/dist/contracts/functionWorkflowToolContracts.js +2 -2
  152. package/dist/contracts/javascriptApplicationWorkflowExamples.js +2 -2
  153. package/dist/contracts/javascriptRuntimeObservationToolContracts.js +4 -4
  154. package/dist/contracts/javascriptRuntimeReconciliationExample.js +1 -1
  155. package/dist/contracts/managedToolContracts.js +7 -4
  156. package/dist/contracts/managedWorkflowExamples.js +0 -22
  157. package/dist/contracts/managedWorkflowToolContracts.js +16 -31
  158. package/dist/contracts/nativeToolContracts.js +9 -0
  159. package/dist/contracts/promptContracts.js +6 -6
  160. package/dist/contracts/sessionToolSchemas.js +3 -3
  161. package/dist/contracts/toolContractExamples.js +4 -3
  162. package/dist/contracts/toolContracts.js +18 -7
  163. package/dist/contracts/toolEffects.js +34 -21
  164. package/dist/contracts/toolOutputSchemaGroups.js +18 -5
  165. package/dist/contracts/toolOutputSchemaPrimitives.js +9 -6
  166. package/dist/contracts/toolSchemaMetadata.js +5 -8
  167. package/dist/doctorRuntime.js +0 -41
  168. package/dist/domain/analysisErrorPresentation.js +4 -28
  169. package/dist/domain/analysisErrorProjection.js +33 -50
  170. package/dist/domain/analysisProfile.js +1 -1
  171. package/dist/domain/analysisSnapshot.js +77 -3
  172. package/dist/domain/androidApplication.js +5 -4
  173. package/dist/domain/appleApplication.js +5 -4
  174. package/dist/domain/appleAssetCatalog.js +127 -0
  175. package/dist/domain/artifactComparison.js +7 -11
  176. package/dist/domain/artifactGraph.js +8 -6
  177. package/dist/domain/artifactInspection.js +13 -12
  178. package/dist/domain/binaryTarget.js +23 -9
  179. package/dist/domain/browserObservation.js +43 -24
  180. package/dist/domain/browserObservationSchemas.js +2 -1
  181. package/dist/domain/browserScenario.js +7 -107
  182. package/dist/domain/browserScenarioCapture.js +0 -1
  183. package/dist/domain/browserScenarioCaptureValues.js +5 -4
  184. package/dist/domain/browserScenarioDiff.js +1 -3
  185. package/dist/domain/browserScenarioValues.js +16 -107
  186. package/dist/domain/bundleComparison.js +18 -17
  187. package/dist/domain/callPathSchemas.js +17 -7
  188. package/dist/domain/changedBehavior.js +2 -3
  189. package/dist/domain/comparisonSemantics.js +19 -0
  190. package/dist/domain/completionLedgerGeneration.js +3 -2
  191. package/dist/domain/conformancePackage.js +2 -1
  192. package/dist/domain/conformanceTrustGate.js +3 -5
  193. package/dist/domain/customProtocolCapture.js +2 -2
  194. package/dist/domain/digests.js +30 -0
  195. package/dist/domain/dosMz.js +83 -0
  196. package/dist/domain/electronActiveObservation.js +7 -5
  197. package/dist/domain/electronObservation.js +3 -2
  198. package/dist/domain/electronStaticAnalysisNative.js +15 -6
  199. package/dist/domain/emptyArraySchema.js +3 -0
  200. package/dist/domain/errors.js +10 -28
  201. package/dist/domain/evidence.js +5 -3
  202. package/dist/domain/evidenceCompletionLedger.js +3 -2
  203. package/dist/domain/functionComparisonNormalization.js +24 -18
  204. package/dist/domain/functionComparisonResults.js +3 -7
  205. package/dist/domain/functionComparisonSchemas.js +3 -2
  206. package/dist/domain/hopperValues.js +108 -8
  207. package/dist/domain/javascriptApplicationAnalysis.js +4 -7
  208. package/dist/domain/javascriptApplicationEvidenceSchemas.js +4 -3
  209. package/dist/domain/javascriptApplicationGraphSchemas.js +8 -7
  210. package/dist/domain/javascriptApplicationVersionComparisonSchemas.js +9 -7
  211. package/dist/domain/javascriptApplicationVersionItems.js +12 -18
  212. package/dist/domain/javascriptAstValues.js +4 -0
  213. package/dist/domain/javascriptExportShapeComparison.js +1 -6
  214. package/dist/domain/javascriptExportShapeComparisonSchemas.js +6 -10
  215. package/dist/domain/javascriptExportShapeVariants.js +15 -2
  216. package/dist/domain/javascriptFeatureTraceSchemas.js +8 -7
  217. package/dist/domain/javascriptRuntimeObservation.js +14 -2
  218. package/dist/domain/javascriptRuntimeReconciliationMatching.js +8 -0
  219. package/dist/domain/javascriptRuntimeReconciliationParsing.js +4 -2
  220. package/dist/domain/javascriptRuntimeReconciliationResult.js +6 -4
  221. package/dist/domain/javascriptRuntimeReconciliationRuntime.js +15 -4
  222. package/dist/domain/javascriptRuntimeReconciliationSchemas.js +19 -18
  223. package/dist/domain/javascriptRuntimeStaticCandidates.js +18 -6
  224. package/dist/domain/javascriptSemanticAnalysis.js +57 -19
  225. package/dist/domain/javascriptSemanticAsyncEffects.js +39 -40
  226. package/dist/domain/javascriptSemanticCalls.js +46 -27
  227. package/dist/domain/javascriptSemanticChildProcesses.js +43 -50
  228. package/dist/domain/javascriptSemanticDataEffectHelpers.js +91 -18
  229. package/dist/domain/javascriptSemanticDataEffects.js +22 -10
  230. package/dist/domain/javascriptSemanticGraphSchemas.js +8 -6
  231. package/dist/domain/javascriptSemanticObjects.js +13 -3
  232. package/dist/domain/javascriptSemanticProjection.js +144 -38
  233. package/dist/domain/javascriptSemanticPromises.js +14 -27
  234. package/dist/domain/javascriptSemanticQuerySchemas.js +6 -9
  235. package/dist/domain/javascriptSemanticResources.js +2 -5
  236. package/dist/domain/javascriptSemanticState.js +4 -0
  237. package/dist/domain/javascriptSemanticTraceSchemas.js +2 -1
  238. package/dist/domain/javascriptSemanticTraversal.js +13 -5
  239. package/dist/domain/javascriptSemanticValues.js +10 -9
  240. package/dist/domain/javascriptSourceParser.js +5 -1
  241. package/dist/domain/javascriptStaticAnalysisCalls.js +8 -5
  242. package/dist/domain/javascriptStaticAnalysisHelpers.js +16 -7
  243. package/dist/domain/keyedArchive.js +181 -0
  244. package/dist/domain/managedApplicationGraph.js +4 -3
  245. package/dist/domain/managedArtifact.js +2 -1
  246. package/dist/domain/managedMemberComparison.js +18 -13
  247. package/dist/domain/managedMemberComparisonCoverage.js +2 -1
  248. package/dist/domain/managedMemberComparisonItems.js +27 -7
  249. package/dist/domain/managedMemberComparisonMatch.js +22 -6
  250. package/dist/domain/managedNativeVerificationMatch.js +2 -2
  251. package/dist/domain/managedNativeVerificationSchemas.js +7 -5
  252. package/dist/domain/managedReconstruction.js +6 -5
  253. package/dist/domain/nativeApiBoundary.js +7 -0
  254. package/dist/domain/nativeDataType.js +51 -0
  255. package/dist/domain/nativeInspection.js +0 -1
  256. package/dist/domain/nativeInstruction.js +82 -0
  257. package/dist/domain/nativeInvestigationGraph.js +9 -5
  258. package/dist/domain/nativeUiObservation.js +123 -0
  259. package/dist/domain/nativeValueFlow.js +17 -0
  260. package/dist/domain/nativeValueTrace.js +64 -0
  261. package/dist/domain/objcSwiftMetadata.js +39 -0
  262. package/dist/domain/peInspection.js +1 -0
  263. package/dist/domain/processCapture.js +5 -55
  264. package/dist/domain/processCaptureExample.js +0 -9
  265. package/dist/domain/processCaptureValidation.js +13 -144
  266. package/dist/domain/processComparison.js +3 -25
  267. package/dist/domain/processObservation.js +0 -29
  268. package/dist/domain/processScenario.js +28 -228
  269. package/dist/domain/processTraceDimensionProjection.js +0 -15
  270. package/dist/domain/processTraceEvaluation.js +0 -6
  271. package/dist/domain/protocolCapture.js +8 -36
  272. package/dist/domain/reconstructionCoverage.js +3 -2
  273. package/dist/domain/reconstructionObligationLedgerSchemas.js +4 -12
  274. package/dist/domain/reconstructionReadinessSchemas.js +4 -3
  275. package/dist/domain/reconstructionVerification.js +2 -1
  276. package/dist/domain/reconstructionVerificationSchemas.js +6 -13
  277. package/dist/domain/referenceSourceClassification.js +0 -110
  278. package/dist/domain/referenceSourceGraph.js +15 -5
  279. package/dist/domain/residualUnknown.js +3 -2
  280. package/dist/domain/runtimeIdentification.js +6 -5
  281. package/dist/domain/sourceMapContents.js +5 -0
  282. package/dist/domain/sourceToBundleComparison.js +3 -10
  283. package/dist/domain/sourceToBundleComparisonSchemas.js +7 -6
  284. package/dist/domain/sourceToBundleSignals.js +9 -3
  285. package/dist/domain/staticRuntimeCorrelation.js +5 -11
  286. package/dist/domain/webBundleAnalysis.js +17 -9
  287. package/dist/domain/webBundleAnalyzer.js +1 -1
  288. package/dist/domain/webCaptureDiff.js +5 -11
  289. package/dist/domain/webCaptureDiffSchemas.js +2 -1
  290. package/dist/domain/webMcpDiscovery.js +2 -1
  291. package/dist/dotnet/ManagedMemberInspectorCore.js +15 -7
  292. package/dist/dotnet/ManagedMemberInstructionDecoder.js +57 -40
  293. package/dist/dotnet/ManagedMemberRows.js +2 -0
  294. package/dist/dotnet/ManagedMethodBodyReader.js +15 -8
  295. package/dist/dotnet/ManagedPeReader.js +2 -0
  296. package/dist/generatedMcpToolCatalog.js +1 -1
  297. package/dist/generatedPackageMetadata.js +2 -2
  298. package/dist/ghidra/GhidraAnalysisProfile.js +15 -5
  299. package/dist/ghidra/GhidraClient.js +38 -8
  300. package/dist/ghidra/GhidraFunctionValues.js +56 -20
  301. package/dist/ghidra/GhidraInstallation.js +7 -4
  302. package/dist/ghidra/GhidraInventoryValues.js +44 -9
  303. package/dist/ghidra/GhidraLauncher.js +18 -3
  304. package/dist/ghidra/GhidraProvider.js +23 -2
  305. package/dist/ghidra/GhidraRequestQueue.js +45 -4
  306. package/dist/ghidra/GhidraSessionValues.js +5 -0
  307. package/dist/hopper/HopperAnalysisProfile.js +2 -0
  308. package/dist/hopper/HopperProvider.js +29 -6
  309. package/dist/hopper/HopperTargetLease.js +18 -4
  310. package/dist/logger.js +0 -13
  311. package/dist/main/messages.js +0 -1
  312. package/dist/main/reload.js +3 -32
  313. package/dist/main/shutdown.js +1 -2
  314. package/dist/main/transport.js +0 -17
  315. package/dist/main.js +0 -10
  316. package/dist/native/AppleDispatchMetadata.js +582 -0
  317. package/dist/native/AppleObjcProtocols.js +88 -0
  318. package/dist/native/AppleSwiftVtables.js +86 -0
  319. package/dist/native/CommandRunner.js +1 -1
  320. package/dist/native/NativeHostCapabilities.js +23 -0
  321. package/dist/native/NativeMacOSProvider.js +61 -9
  322. package/dist/native/NativeMachoInspection.js +39 -6
  323. package/dist/native/NativeUiHelperRuntime.js +42 -0
  324. package/dist/native/NativeUiObservation.js +174 -0
  325. package/dist/native/parsers/codesign.js +4 -1
  326. package/dist/native/parsers/dyldInfo.js +51 -25
  327. package/dist/native/parsers/lipo.js +13 -4
  328. package/dist/native/parsers/otool.js +84 -39
  329. package/dist/native/parsers/plist.js +2 -1
  330. package/dist/process/ExecFileOutput.js +5 -1
  331. package/dist/process/ProcessOwnership.js +69 -33
  332. package/dist/process/ProcessOwnershipObservation.js +31 -12
  333. package/dist/process/ProviderProcess.js +4 -2
  334. package/dist/reference/ReferenceSourceReaderEntries.js +48 -31
  335. package/dist/reference/ReferenceSourceReaderErrors.js +24 -0
  336. package/dist/reference/ReferenceSourceReaderFile.js +11 -5
  337. package/dist/reference/ReferenceSourceReaderValidate.js +22 -8
  338. package/dist/server/createServer.js +7 -62
  339. package/dist/server/registerApplicationTools/helpers.js +2 -9
  340. package/dist/server/registerApplicationTools.js +0 -4
  341. package/dist/server/registerArtifactComparisonTool.js +1 -1
  342. package/dist/server/registerBrowserScenarioTool.js +4 -2
  343. package/dist/server/registerBrowserTools.js +7 -7
  344. package/dist/server/registerBundleComparisonTool.js +1 -1
  345. package/dist/server/registerCloseLifecycleTool.js +1 -1
  346. package/dist/server/registerElectronTools.js +10 -4
  347. package/dist/server/registerEnhancedTools.js +20 -12
  348. package/dist/server/registerEvidenceTools.js +4 -28
  349. package/dist/server/registerFunctionComparisonTool.js +1 -1
  350. package/dist/server/registerInvestigationTools.js +6 -6
  351. package/dist/server/registerJavaScriptRuntimeObservationTools.js +2 -2
  352. package/dist/server/registerManagedTools.js +28 -14
  353. package/dist/server/registerManagedWorkflowTools.js +0 -2
  354. package/dist/server/registerProcessComparisonTool.js +1 -3
  355. package/dist/server/registerSessionRecordTools.js +9 -9
  356. package/dist/server/registerSessionStatusTool.js +1 -1
  357. package/dist/server/registerSessionTools.js +28 -57
  358. package/dist/server/sessionAvailabilityPolicy.js +2 -3
  359. package/dist/server/sessionToolPolicies.js +0 -4
  360. package/dist/server/toolResult.js +8 -10
  361. package/package.json +32 -22
  362. package/skills/reverse-engineer-anything/SKILL.md +15 -11
  363. package/skills/reverse-engineer-anything/references/evidence-workflows.md +3 -2
  364. package/skills/reverse-engineer-anything/references/javascript-applications.md +3 -2
  365. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +8 -6
  366. package/skills/reverse-engineer-anything/references/runtime-observation.md +15 -11
  367. package/dist/application/CommandShimReplay.js +0 -152
  368. package/dist/application/ConfiguredRoots.js +0 -19
  369. package/dist/application/InstrumentedJavaScriptReplayHost.js +0 -36
  370. package/dist/application/JavaScriptReplayPermission.js +0 -16
  371. package/dist/application/JavaScriptReplayPlanning.js +0 -207
  372. package/dist/application/JavaScriptReplayService.js +0 -274
  373. package/dist/application/LoopbackReplay.js +0 -389
  374. package/dist/application/LoopbackReplayRecorder.js +0 -129
  375. package/dist/application/ManagedRuntimeCorrelationService.js +0 -104
  376. package/dist/application/NodeRuntimeCharacterizationService.js +0 -191
  377. package/dist/application/PermissionAuthority.js +0 -268
  378. package/dist/application/PermissionConfiguration.js +0 -26
  379. package/dist/application/PermissionFailure.js +0 -5
  380. package/dist/application/ProcessCaptureAuthority.js +0 -24
  381. package/dist/application/ProcessCapturePermission.js +0 -13
  382. package/dist/application/ProcessCheckpoints.js +0 -178
  383. package/dist/application/ProcessReactiveCoordinator.js +0 -223
  384. package/dist/application/ProcessReactiveEffects.js +0 -153
  385. package/dist/application/ProcessReactiveHarness.js +0 -106
  386. package/dist/application/ProcessReactiveObservations.js +0 -105
  387. package/dist/application/ProjectPermissionStore.js +0 -199
  388. package/dist/application/RuntimeExecutableDiagnostics.js +0 -198
  389. package/dist/application/Upgrade.js +0 -134
  390. package/dist/browser/SensitiveTextCapture.js +0 -8
  391. package/dist/cliPolicyCommands.js +0 -185
  392. package/dist/config/browserScenario.js +0 -77
  393. package/dist/config/electronAutomation.js +0 -35
  394. package/dist/config/javascriptReplay.js +0 -41
  395. package/dist/config/managedRuntime.js +0 -25
  396. package/dist/config/passiveObservation.js +0 -87
  397. package/dist/config/permissions.js +0 -23
  398. package/dist/config/processCapture.js +0 -47
  399. package/dist/contracts/replayMachineExample.js +0 -37
  400. package/dist/domain/javascriptExportInstrumentation.js +0 -95
  401. package/dist/domain/javascriptReplay.js +0 -360
  402. package/dist/domain/managedRuntimeCorrelation.js +0 -181
  403. package/dist/domain/nodeRuntimeCharacterization.js +0 -63
  404. package/dist/domain/permissionPolicy.js +0 -176
  405. package/dist/domain/processCaptureReactiveSchema.js +0 -68
  406. package/dist/domain/processCaptureReactiveValidation.js +0 -180
  407. package/dist/domain/processReactiveCheckpointDataflow.js +0 -32
  408. package/dist/domain/processReactiveMatching.js +0 -196
  409. package/dist/domain/processReactiveRuntime.js +0 -116
  410. package/dist/domain/processReactiveScenario.js +0 -296
  411. package/dist/domain/processReactiveScenarioPreflight.js +0 -95
  412. package/dist/domain/processReactiveTransition.js +0 -187
  413. package/dist/domain/replayMachine.js +0 -320
  414. package/dist/domain/replayMachineRun.js +0 -168
  415. package/dist/domain/replayMachineRuntime.js +0 -296
  416. package/dist/domain/replayMachineValues.js +0 -84
  417. package/dist/domain/runtimeCharacterization.js +0 -84
  418. package/dist/replay/JavaScriptReplayWorker.js +0 -382
  419. package/dist/replay/JavaScriptReplayWorkerTypes.js +0 -1
  420. package/dist/replay/LinuxJavaScriptReplayRunner.js +0 -216
  421. package/dist/replay/LinuxJavaScriptReplaySandbox.js +0 -121
  422. package/dist/replay/LinuxRuntimeClosure.js +0 -44
  423. package/dist/replay/LinuxSeccompPolicy.js +0 -40
  424. package/dist/replay/ReplayOutcome.js +0 -104
  425. package/dist/replay/ReplayProcessLifecycle.js +0 -96
  426. package/dist/replay/ReplaySeccompFile.js +0 -29
  427. package/dist/replay/ReplayWorkerProtocol.js +0 -58
  428. package/dist/replay/SystemJavaScriptReplayHost.js +0 -153
  429. package/dist/server/ProcessCaptureElicitation.js +0 -153
  430. package/dist/server/registerApplicationTools/characterization.js +0 -46
  431. package/dist/server/registerApplicationTools/controlledReplay.js +0 -31
  432. package/dist/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.js +0 -29
  433. package/dist/server/registerReplayMachineTool.js +0 -14
  434. package/skills/reverse-engineer-anything/references/controlled-replay.md +0 -12
@@ -0,0 +1,320 @@
1
+ import { functionDossierSchema } from "../domain/hopperValues.js";
2
+ import { nativeCallTargetsSchema } from "../domain/nativeInstruction.js";
3
+ import { nativeValueTraceInputSchema, nativeValueTraceSchema, } from "../domain/nativeValueTrace.js";
4
+ import { createEvidence } from "../domain/evidence.js";
5
+ import { AnalysisCancelledError, AnalysisOutputError, } from "../domain/errors.js";
6
+ import { err, ok } from "../domain/result.js";
7
+ /** Compose bounded high-p-code def-use graphs across exactly referenced call destinations. */
8
+ export const traceNativeValues = async (analysis, parameters, signal) => {
9
+ const input = nativeValueTraceInputSchema.parse(parameters);
10
+ const nodes = [];
11
+ const edges = [];
12
+ const procedures = [];
13
+ const unknowns = [];
14
+ const callBindings = [];
15
+ const pending = [{ procedure: input.procedure, depth: 0 }];
16
+ const visited = new Set();
17
+ let targetSha256;
18
+ let truncated = false;
19
+ let decompilations = 0;
20
+ let callSites = 0;
21
+ let bytes = 0;
22
+ while (pending.length > 0) {
23
+ if (signal?.aborted)
24
+ return err(new AnalysisCancelledError("trace_native_values"));
25
+ const next = pending.shift();
26
+ if (next === undefined || visited.has(next.procedure))
27
+ continue;
28
+ if (decompilations >= input.max_functions) {
29
+ truncated = true;
30
+ unknowns.push({
31
+ procedure: next.procedure,
32
+ address: null,
33
+ reason: "decompilation budget reached",
34
+ });
35
+ break;
36
+ }
37
+ const execution = await analysis.execute("analyze_function", { procedure: next.procedure }, signal === undefined ? {} : { signal });
38
+ decompilations++;
39
+ if (!execution.ok) {
40
+ if (execution.error._tag === "AnalysisCancelledError")
41
+ return err(execution.error);
42
+ unknowns.push({
43
+ procedure: next.procedure,
44
+ address: null,
45
+ reason: execution.error.message,
46
+ });
47
+ continue;
48
+ }
49
+ const parsed = functionDossierSchema.safeParse(execution.value.result);
50
+ if (!parsed.success || execution.value.subject === null)
51
+ return err(new AnalysisOutputError("trace_native_values", "Function dossier lacks validated facts or artifact identity"));
52
+ const dossier = parsed.data;
53
+ const address = dossier.procedure.address;
54
+ if (visited.has(address))
55
+ continue;
56
+ visited.add(next.procedure);
57
+ visited.add(address);
58
+ targetSha256 ??= execution.value.subject.sha256;
59
+ if (execution.value.subject.sha256 !== targetSha256)
60
+ return err(new AnalysisOutputError("trace_native_values", "Cross-function target digest mismatch"));
61
+ const evidence = createEvidence(execution.value.subject, execution.value.provider, {
62
+ operation: "analyze_function",
63
+ parameters: { procedure: next.procedure },
64
+ result: execution.value.result,
65
+ rawResult: execution.value.rawResult,
66
+ limitations: execution.value.limitations,
67
+ locations: execution.value.locations,
68
+ ...(execution.value.analysisProfile === undefined
69
+ ? {}
70
+ : { analysisProfile: execution.value.analysisProfile }),
71
+ });
72
+ const evidenceId = evidence.evidence_id;
73
+ procedures.push({
74
+ address,
75
+ depth: next.depth,
76
+ evidence_id: evidenceId,
77
+ provider: execution.value.provider.id,
78
+ analysis_profile_digest: execution.value.analysisProfile?.digest ?? null,
79
+ });
80
+ const flow = dossier.native_value_flow;
81
+ if (flow === null || !flow.available) {
82
+ unknowns.push({
83
+ procedure: address,
84
+ address: null,
85
+ reason: flow?.reason ?? "Provider has no native def-use model",
86
+ });
87
+ continue;
88
+ }
89
+ if (flow.truncated) {
90
+ truncated = true;
91
+ unknowns.push({
92
+ procedure: address,
93
+ address: null,
94
+ reason: "Provider p-code was truncated",
95
+ });
96
+ }
97
+ const ids = new Set();
98
+ const qualified = (id) => `${address}/${id}`;
99
+ for (const operation of flow.operations) {
100
+ if (operation.block_membership === "detached" ||
101
+ (operation.block_membership === "unavailable" && operation.is_dead))
102
+ continue;
103
+ const node = {
104
+ id: qualified(operation.id),
105
+ procedure: address,
106
+ evidence_id: evidenceId,
107
+ operation,
108
+ kind: "operation",
109
+ parameter: null,
110
+ };
111
+ const size = Buffer.byteLength(JSON.stringify(node));
112
+ if (nodes.length >= input.max_nodes || bytes + size > 8 * 1024 * 1024) {
113
+ truncated = true;
114
+ break;
115
+ }
116
+ bytes += size;
117
+ ids.add(operation.id);
118
+ nodes.push(node);
119
+ }
120
+ for (const parameter of flow.parameters) {
121
+ if (nodes.length >= input.max_nodes) {
122
+ truncated = true;
123
+ break;
124
+ }
125
+ nodes.push({
126
+ id: `${address}/parameter:${parameter.ordinal}`,
127
+ procedure: address,
128
+ evidence_id: evidenceId,
129
+ kind: "parameter",
130
+ operation: null,
131
+ parameter,
132
+ });
133
+ }
134
+ for (const use of flow.parameter_uses) {
135
+ if (!ids.has(use.use) ||
136
+ !nodes.some((node) => node.id === `${address}/parameter:${use.ordinal}`))
137
+ continue;
138
+ if (edges.length >= input.max_edges) {
139
+ truncated = true;
140
+ break;
141
+ }
142
+ edges.push({
143
+ source: `${address}/parameter:${use.ordinal}`,
144
+ target: qualified(use.use),
145
+ input_index: use.input_index,
146
+ kind: "parameter-use",
147
+ status: "derived",
148
+ evidence_id: evidenceId,
149
+ });
150
+ }
151
+ for (const edge of flow.def_use) {
152
+ if (!ids.has(edge.definition) || !ids.has(edge.use))
153
+ continue;
154
+ if (edges.length >= input.max_edges) {
155
+ truncated = true;
156
+ break;
157
+ }
158
+ edges.push({
159
+ source: qualified(edge.definition),
160
+ target: qualified(edge.use),
161
+ input_index: edge.input_index,
162
+ kind: "def-use",
163
+ status: "derived",
164
+ evidence_id: evidenceId,
165
+ });
166
+ }
167
+ for (const operation of flow.operations) {
168
+ if (!ids.has(operation.id) ||
169
+ !["CALL", "CALLIND"].includes(operation.opcode))
170
+ continue;
171
+ if (callSites >= input.max_call_sites) {
172
+ truncated = true;
173
+ unknowns.push({
174
+ procedure: address,
175
+ address: operation.address,
176
+ reason: "Call-site resolution budget reached",
177
+ });
178
+ break;
179
+ }
180
+ callSites++;
181
+ const resolved = await analysis.execute("resolve_native_call_targets", { address: operation.address }, signal === undefined ? {} : { signal });
182
+ if (!resolved.ok) {
183
+ if (resolved.error._tag === "AnalysisCancelledError")
184
+ return err(resolved.error);
185
+ unknowns.push({
186
+ procedure: address,
187
+ address: operation.address,
188
+ reason: resolved.error.message,
189
+ });
190
+ continue;
191
+ }
192
+ const targets = nativeCallTargetsSchema.safeParse(resolved.value.result);
193
+ if (!targets.success)
194
+ return err(new AnalysisOutputError("resolve_native_call_targets", "Invalid static call resolution"));
195
+ if (targets.data.targets.length === 0)
196
+ unknowns.push({
197
+ procedure: address,
198
+ address: operation.address,
199
+ reason: `Call target ${targets.data.status}`,
200
+ });
201
+ for (const target of targets.data.targets) {
202
+ if (edges.length >= input.max_edges) {
203
+ truncated = true;
204
+ break;
205
+ }
206
+ const destination = target.procedure ?? target.address;
207
+ edges.push({
208
+ source: qualified(operation.id),
209
+ target: destination,
210
+ input_index: null,
211
+ kind: "call",
212
+ status: target.status,
213
+ evidence_id: evidenceId,
214
+ });
215
+ if (target.status !== "candidate")
216
+ callBindings.push({
217
+ caller: address,
218
+ callee: destination,
219
+ call: qualified(operation.id),
220
+ argument_count: Math.max(0, operation.inputs.length - 1),
221
+ output: operation.output !== null,
222
+ evidence_id: evidenceId,
223
+ });
224
+ if (next.depth < input.max_depth && target.status !== "candidate")
225
+ pending.push({ procedure: destination, depth: next.depth + 1 });
226
+ else if (!visited.has(destination)) {
227
+ truncated = true;
228
+ unknowns.push({
229
+ procedure: address,
230
+ address: operation.address,
231
+ reason: target.status === "candidate"
232
+ ? "Ambiguous call candidates were not traversed"
233
+ : "Call depth budget reached",
234
+ });
235
+ }
236
+ }
237
+ }
238
+ if (truncated &&
239
+ (nodes.length >= input.max_nodes ||
240
+ edges.length >= input.max_edges ||
241
+ bytes >= 8 * 1024 * 1024))
242
+ break;
243
+ }
244
+ if (targetSha256 === undefined)
245
+ return err(new AnalysisOutputError("trace_native_values", "No seed function could be analyzed"));
246
+ for (const binding of callBindings) {
247
+ const parameters = nodes.filter((node) => node.procedure === binding.callee && node.kind === "parameter");
248
+ if (parameters.length === 0)
249
+ unknowns.push({
250
+ procedure: binding.caller,
251
+ address: null,
252
+ reason: `Parameter bindings for ${binding.callee} are unavailable or omitted`,
253
+ });
254
+ for (const node of parameters) {
255
+ const ordinal = node.parameter?.ordinal;
256
+ if (ordinal === undefined || ordinal >= binding.argument_count) {
257
+ unknowns.push({
258
+ procedure: binding.caller,
259
+ address: null,
260
+ reason: `Argument ${ordinal ?? "unknown"} for ${binding.callee} was not recovered`,
261
+ });
262
+ continue;
263
+ }
264
+ if (edges.length >= input.max_edges) {
265
+ truncated = true;
266
+ break;
267
+ }
268
+ edges.push({
269
+ source: binding.call,
270
+ target: node.id,
271
+ input_index: ordinal + 1,
272
+ kind: "argument-binding",
273
+ status: "derived",
274
+ evidence_id: binding.evidence_id,
275
+ });
276
+ }
277
+ if (binding.output)
278
+ for (const node of nodes.filter((node) => node.procedure === binding.callee &&
279
+ node.operation?.opcode === "RETURN" &&
280
+ node.operation.inputs.length > 1)) {
281
+ if (edges.length >= input.max_edges) {
282
+ truncated = true;
283
+ break;
284
+ }
285
+ edges.push({
286
+ source: node.id,
287
+ target: binding.call,
288
+ input_index: 1,
289
+ kind: "return-binding",
290
+ status: "derived",
291
+ evidence_id: node.evidence_id,
292
+ });
293
+ }
294
+ }
295
+ const page = nodes.slice(input.offset, input.offset + input.limit);
296
+ const pageIds = new Set(page.map(({ id }) => id));
297
+ const result = nativeValueTraceSchema.parse({
298
+ seed: input.procedure,
299
+ target_sha256: targetSha256,
300
+ nodes: page,
301
+ edges: edges.filter(({ source }) => pageIds.has(source)),
302
+ procedures,
303
+ unknowns,
304
+ total_nodes: nodes.length,
305
+ total_edges: edges.length,
306
+ decompilations,
307
+ next_offset: input.offset + page.length < nodes.length
308
+ ? input.offset + page.length
309
+ : null,
310
+ truncated: truncated || page.length !== nodes.length,
311
+ limitations: [
312
+ "Static decompiler def-use graphs cover recovered block members; when membership is unavailable they exclude operations marked dead. Logical CALL argument positions bind to recovered HighParam ordinals and RETURN values bind to recovered CALL outputs; these are decompiler-derived dependencies, not original source or runtime observations. Missing parameters, variadic arguments and alias dependencies remain unknown.",
313
+ "LOAD and STORE are memory operations; object fields, persistent state and RNG semantics are not inferred from names or pseudocode.",
314
+ "Traversal caps depth, decompilations, call-site resolutions, nodes, edges and node payloads (8 MiB). Complete serialized output is bounded to 32 MiB. Pagination reruns analysis and returns edges whose source is on the node page; endpoints outside the page retain stable identities.",
315
+ ],
316
+ });
317
+ if (Buffer.byteLength(JSON.stringify(result)) > 32 * 1024 * 1024)
318
+ return err(new AnalysisOutputError("trace_native_values", "Graph output exceeds 32 MiB; lower max_nodes, max_edges or page limit"));
319
+ return ok(result);
320
+ };
@@ -1,9 +1,36 @@
1
1
  import { tmpdir } from "node:os";
2
+ /** Explain why process capture cannot claim owned-process cleanup on a host. */
3
+ export const processCaptureOwnershipUnavailableReason = (platform) => platform === "win32"
4
+ ? "Windows process-tree ownership and cleanup are unavailable; REA cannot verify that descendants have stopped."
5
+ : undefined;
6
+ /** Probe the native PTY seam and explain loader failures at their source. */
7
+ export const processCaptureProbeFailureReason = (cause) => {
8
+ const error = cause instanceof Error ? cause : new Error(String(cause));
9
+ const code = "code" in error ? String(error.code) : "";
10
+ const diagnostic = error.message;
11
+ if (code === "ERR_MODULE_NOT_FOUND" ||
12
+ code === "MODULE_NOT_FOUND" ||
13
+ /cannot find module|cannot find package/iu.test(diagnostic))
14
+ return `the native PTY module is missing (${diagnostic}); reinstall REA for this host with optional dependencies enabled (for a source checkout, run npm ci)`;
15
+ if (/NODE_MODULE_VERSION|compiled against a different Node\.js version|module version mismatch/iu.test(diagnostic))
16
+ return `the native PTY module is incompatible with this Node.js runtime (${diagnostic}); reinstall REA for this host and active Node.js version with optional dependencies enabled (for a source checkout, run npm ci after selecting that Node.js version)`;
17
+ if (code === "ERR_DLOPEN_FAILED")
18
+ return `the native PTY library failed to load (${diagnostic}); check the loader error, then reinstall REA for this host with optional dependencies enabled (for a source checkout, run npm ci)`;
19
+ return `the native PTY probe failed (${diagnostic}); check the reported operating-system or process-startup error and reinstall REA for this host with optional dependencies enabled if the native binary is missing`;
20
+ };
2
21
  /** Probe the actual native PTY seam instead of inferring support from the OS name. */
3
- export const probeProcessCaptureCapability = async () => {
22
+ export const probeProcessCaptureCapability = async (options = {}) => {
23
+ const platform = options.platform ?? process.platform;
24
+ const ownershipReason = processCaptureOwnershipUnavailableReason(platform);
25
+ if (ownershipReason !== undefined)
26
+ return {
27
+ available: false,
28
+ backend: "node-pty",
29
+ reason: ownershipReason,
30
+ };
4
31
  try {
5
- const { spawn } = await import("@lydell/node-pty");
6
- const terminal = spawn(process.platform === "win32" ? "cmd.exe" : "/bin/sh", process.platform === "win32" ? ["/c", "exit", "0"] : ["-c", "exit 0"], {
32
+ const { spawn } = await (options.loadPty ?? (() => import("@lydell/node-pty")))();
33
+ const terminal = spawn(platform === "win32" ? "cmd.exe" : "/bin/sh", platform === "win32" ? ["/c", "exit", "0"] : ["-c", "exit 0"], {
7
34
  cwd: tmpdir(),
8
35
  env: { HOME: tmpdir(), TERM: "xterm-256color" },
9
36
  cols: 80,
@@ -13,11 +40,11 @@ export const probeProcessCaptureCapability = async () => {
13
40
  await new Promise((resolveExit) => terminal.onExit(() => resolveExit()));
14
41
  return { available: true, backend: "node-pty" };
15
42
  }
16
- catch {
43
+ catch (cause) {
17
44
  return {
18
45
  available: false,
19
46
  backend: "node-pty",
20
- reason: "the native PTY backend could not start a probe process",
47
+ reason: processCaptureProbeFailureReason(cause),
21
48
  };
22
49
  }
23
50
  };
@@ -1,26 +1,9 @@
1
- /** Build the explicitly admitted environment for a captured process. */
2
- export const makeProcessCaptureEnvironment = (options) => {
3
- const { scenario, home, replay, shimReplay, runId } = options;
4
- const environment = {
5
- ...scenario.environment,
6
- HOME: home,
7
- TERM: "xterm-256color",
8
- REA_PROCESS_RUN_ID: runId,
9
- };
10
- for (const name of scenario.inherit_environment) {
11
- const value = process.env[name];
12
- if (value !== undefined)
13
- environment[name] = value;
14
- }
15
- environment.REA_REPLAY_HTTP_URL = replay.httpUrl;
16
- environment.REA_REPLAY_WEBSOCKET_URL = replay.websocketUrl;
17
- environment.REA_SHIM_LEDGER_URL = shimReplay.url;
18
- // PATH is evidence-producing input. Inheriting the host PATH here would let
19
- // the authority and reconstruction probe different tools without recording
20
- // that difference. Scenarios must opt in through environment or
21
- // inherit_environment; deterministic shims always take precedence.
22
- environment.PATH = [shimReplay.binPath, environment.PATH ?? ""]
23
- .filter((part) => part.length > 0)
24
- .join(":");
25
- return environment;
26
- };
1
+ /** Build the child environment from the host plus caller-selected overrides. */
2
+ export const makeProcessCaptureEnvironment = (options) => ({
3
+ ...Object.fromEntries(Object.entries(options.hostEnvironment).filter((entry) => entry[1] !== undefined)),
4
+ ...options.scenario.environment,
5
+ TERM: options.scenario.environment.TERM ??
6
+ options.hostEnvironment.TERM ??
7
+ "xterm-256color",
8
+ REA_PROCESS_RUN_ID: options.runId,
9
+ });
@@ -13,11 +13,7 @@ export class ProcessCaptureError extends AnalysisError {
13
13
  this.userCategory = options?.userCategory;
14
14
  this.reason =
15
15
  options?.reason ??
16
- (options?.userCategory === "permission_required"
17
- ? "permission_required"
18
- : options?.userCategory === "cancelled"
19
- ? "cancelled"
20
- : "capture_failed");
16
+ (options?.userCategory === "cancelled" ? "cancelled" : "capture_failed");
21
17
  this.cleanupIncomplete = this.reason === "cleanup_incomplete";
22
18
  this.cleanupResources = options?.cleanupResources ?? [];
23
19
  }
@@ -3,49 +3,12 @@ import { scheduleProcessDelay } from "./ProcessTimer.js";
3
3
  /** Create one monotonic event journal for a process capture. */
4
4
  export const createProcessCaptureJournal = () => {
5
5
  const entries = [];
6
- const listeners = new Set();
7
- const notifications = [];
8
- let delivering = false;
9
- const deliverNotifications = () => {
10
- if (delivering)
11
- return;
12
- delivering = true;
13
- const failures = [];
14
- try {
15
- for (;;) {
16
- const notification = notifications.shift();
17
- if (notification === undefined)
18
- break;
19
- for (const listener of Array.from(listeners))
20
- try {
21
- listener(notification);
22
- }
23
- catch (cause) {
24
- failures.push(cause);
25
- }
26
- }
27
- }
28
- finally {
29
- delivering = false;
30
- }
31
- if (failures.length > 0)
32
- throw new AggregateError(failures, "process capture journal subscriber failed");
33
- };
34
- const record = (collection, index) => {
35
- const entry = { capture_order: entries.length, collection, index };
36
- entries.push(entry);
37
- notifications.push(entry);
38
- deliverNotifications();
39
- return entry;
6
+ const recordEvent = (collection, index) => {
7
+ entries.push({ capture_order: entries.length, collection, index });
40
8
  };
41
9
  return {
42
10
  entries,
43
- record,
44
- recordEvent: (collection, index) => void record(collection, index),
45
- subscribe: (listener) => {
46
- listeners.add(listener);
47
- return () => listeners.delete(listener);
48
- },
11
+ recordEvent,
49
12
  };
50
13
  };
51
14
  /** Schedule scenario interactions and record each observed dispatch atomically. */