rea-agents 3.1.0 → 3.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 (590) hide show
  1. package/README.md +72 -95
  2. package/bridge/ghidra/ReaGhidraBridge.java +609 -841
  3. package/bridge/hopper_bridge.py +99 -344
  4. package/dist/application/AbortablePromise.js +6 -3
  5. package/dist/application/AnalysisSnapshotCache.js +0 -1
  6. package/dist/application/AnalysisSnapshotFiles.js +7 -7
  7. package/dist/application/AndroidApplicationService.js +1 -1
  8. package/dist/application/AppleApplicationService.js +1 -1
  9. package/dist/application/ArtifactExtraction.js +35 -54
  10. package/dist/application/ArtifactExtractionDestination.js +17 -0
  11. package/dist/application/ArtifactGraphConstruction.js +2 -17
  12. package/dist/application/ArtifactInventory/classify.js +2 -6
  13. package/dist/application/ArtifactInventory/hash.js +2 -20
  14. package/dist/application/ArtifactInventory/scanCanonical.js +8 -12
  15. package/dist/application/ArtifactInventory/scanReader.js +69 -51
  16. package/dist/application/ArtifactInventory.js +6 -14
  17. package/dist/application/AuthorizedArtifactInventory.js +3 -13
  18. package/dist/application/BinarySession.js +41 -13
  19. package/dist/application/BinarySessionComposition.js +0 -11
  20. package/dist/application/BinarySessionOpen.js +2 -1
  21. package/dist/application/BinarySessionRecords.js +5 -93
  22. package/dist/application/BinarySessionStatus.js +5 -16
  23. package/dist/application/BinaryTargetResolver.js +216 -0
  24. package/dist/application/BrowserEvidence.js +42 -58
  25. package/dist/application/BrowserObservationService.js +3 -6
  26. package/dist/application/BrowserScenarioCaptureService.js +3 -6
  27. package/dist/application/BrowserScenarioEvidence.js +3 -3
  28. package/dist/application/CallPathTracing.js +2 -36
  29. package/dist/application/CapabilityInventory.js +10 -15
  30. package/dist/application/ClientConfigurationDocument.js +27 -0
  31. package/dist/application/ClientRegistrationStatus.js +16 -13
  32. package/dist/application/CommandShimReplay.js +14 -1
  33. package/dist/application/DirectAnalysis.js +22 -46
  34. package/dist/application/DirectAnalysisStatus.js +5 -61
  35. package/dist/application/Doctor.js +11 -32
  36. package/dist/application/DoctorDiagnostics.js +1 -2
  37. package/dist/application/DoctorScope.js +1 -1
  38. package/dist/application/ElectronActiveEvidence.js +3 -8
  39. package/dist/application/ElectronActiveObservationService.js +3 -6
  40. package/dist/application/ElectronBoundaryAnalysis.js +7 -8
  41. package/dist/application/ElectronBoundaryGraphContext.js +1 -1
  42. package/dist/application/ElectronBoundaryGraphIpc.js +3 -3
  43. package/dist/application/ElectronBoundaryGraphNative.js +1 -2
  44. package/dist/application/ElectronBoundaryGraphWindows.js +6 -8
  45. package/dist/application/ElectronEvidence.js +4 -7
  46. package/dist/application/ElectronObservationService.js +5 -9
  47. package/dist/application/EnhancedLiteralTracing.js +42 -65
  48. package/dist/application/EnhancedTools.js +76 -44
  49. package/dist/application/EvidenceBundleCommands.js +11 -11
  50. package/dist/application/EvidenceBundleFiles.js +9 -15
  51. package/dist/application/EvidenceLedger.js +6 -41
  52. package/dist/application/FilesystemSnapshot.js +2 -3
  53. package/dist/application/InterfaceBuilderAnalysis.js +266 -0
  54. package/dist/application/InventoryProjectionEvidence.js +4 -2
  55. package/dist/application/InvestigationProviders.js +1 -1
  56. package/dist/application/JavaScriptApplicationEvidence.js +2 -5
  57. package/dist/application/JavaScriptApplicationEvidenceGraph.js +6 -10
  58. package/dist/application/JavaScriptApplicationService.js +6 -29
  59. package/dist/application/JavaScriptApplicationWorkflowEvidence.js +5 -5
  60. package/dist/application/JavaScriptApplicationWorkflowService.js +0 -8
  61. package/dist/application/JavaScriptArtifactAnalysis.js +38 -127
  62. package/dist/application/JavaScriptArtifactFiles.js +67 -107
  63. package/dist/application/JavaScriptArtifactGraphAccumulator.js +0 -7
  64. package/dist/application/JavaScriptArtifactGraphBuilder.js +7 -58
  65. package/dist/application/JavaScriptArtifactGraphBundlers.js +1 -6
  66. package/dist/application/JavaScriptArtifactGraphContext.js +12 -39
  67. package/dist/application/JavaScriptArtifactGraphDocuments.js +4 -11
  68. package/dist/application/JavaScriptArtifactGraphEvidence.js +0 -14
  69. package/dist/application/JavaScriptArtifactGraphFindings.js +3 -3
  70. package/dist/application/JavaScriptArtifactGraphStructure.js +16 -17
  71. package/dist/application/JavaScriptArtifactPathResolution.js +61 -49
  72. package/dist/application/JavaScriptArtifactReconstruction.js +5 -10
  73. package/dist/application/JavaScriptArtifactReconstructionInput.js +2 -14
  74. package/dist/application/JavaScriptJsonModules.js +2 -2
  75. package/dist/application/JavaScriptModuleRelationships.js +22 -27
  76. package/dist/application/JavaScriptReplayPlanning.js +9 -3
  77. package/dist/application/JavaScriptReplayService.js +6 -32
  78. package/dist/application/JavaScriptReturnShapeProjection.js +12 -42
  79. package/dist/application/JavaScriptRuntimeObservationEvidence.js +7 -8
  80. package/dist/application/JavaScriptRuntimeObservationService.js +4 -8
  81. package/dist/application/JavaScriptRuntimeReconciliationEvidence.js +2 -3
  82. package/dist/application/JavaScriptSemanticGraphBuilder.js +11 -41
  83. package/dist/application/JavaScriptSemanticGraphConstruction.js +5 -29
  84. package/dist/application/JavaScriptSemanticGraphEvidence.js +1 -1
  85. package/dist/application/JavaScriptSemanticGraphFingerprintProjection.js +1 -1
  86. package/dist/application/JavaScriptSemanticGraphFlowProjection.js +0 -13
  87. package/dist/application/JavaScriptSemanticGraphProjection.js +1 -3
  88. package/dist/application/JavaScriptSemanticTraceService.js +1 -10
  89. package/dist/application/JsonFiles.js +79 -0
  90. package/dist/application/LinuxHopper.js +11 -9
  91. package/dist/application/LoopbackReplay.js +26 -23
  92. package/dist/application/LoopbackReplayRecorder.js +29 -1
  93. package/dist/application/ManagedApplicationGraphService.js +1 -2
  94. package/dist/application/ManagedMemberComparisonService.js +11 -41
  95. package/dist/application/ManagedNativeVerificationService.js +1 -2
  96. package/dist/application/ManagedReconstructionService.js +1 -1
  97. package/dist/application/ManagedRuntimeCorrelationService.js +5 -8
  98. package/dist/application/NativeApiInspection.js +2 -7
  99. package/dist/application/NativeUiActionTrace.js +394 -0
  100. package/dist/application/NodeRuntimeCharacterizationService.js +3 -7
  101. package/dist/application/PermissionAuthority.js +15 -7
  102. package/dist/application/PermissionFailure.js +5 -0
  103. package/dist/application/ProcessCaptureAuthority.js +5 -7
  104. package/dist/application/ProcessCaptureJournal.js +3 -2
  105. package/dist/application/ProcessCaptureLifecycle.js +5 -12
  106. package/dist/application/ProcessCheckpoints.js +29 -11
  107. package/dist/application/ProcessCli.js +6 -16
  108. package/dist/application/ProcessEvidence.js +5 -7
  109. package/dist/application/ProcessHarness.js +52 -17
  110. package/dist/application/ProcessReactiveCoordinator.js +2 -4
  111. package/dist/application/ProcessReactiveEffects.js +9 -3
  112. package/dist/application/ProcessReactiveHarness.js +13 -7
  113. package/dist/application/ProcessSampling.js +2 -4
  114. package/dist/application/ProcessTimer.js +39 -0
  115. package/dist/application/ProjectPermissionStore.js +39 -96
  116. package/dist/application/RealHopperAssertions.js +20 -66
  117. package/dist/application/ReconstructionCoverageService.js +12 -58
  118. package/dist/application/ReconstructionObligationAuthority.js +2 -2
  119. package/dist/application/ReconstructionObligationCandidates.js +4 -4
  120. package/dist/application/ReconstructionObligationLedgerEvaluation.js +8 -15
  121. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -7
  122. package/dist/application/ReconstructionObligationLedgerService.js +19 -38
  123. package/dist/application/ReferenceSourceImport.js +19 -45
  124. package/dist/application/ReferenceSourceImportEntries.js +2 -4
  125. package/dist/application/ReferenceSourceImportPolicy.js +5 -32
  126. package/dist/application/ReferenceSourceImportTypes.js +0 -16
  127. package/dist/application/RuntimeExecutableDiagnostics.js +55 -29
  128. package/dist/application/SessionProviderRouter.js +2 -2
  129. package/dist/application/Setup.js +1 -3
  130. package/dist/application/SetupClientConfiguration.js +22 -93
  131. package/dist/application/SetupRegistrationEnvironment.js +0 -7
  132. package/dist/application/StoreFileLock.js +119 -0
  133. package/dist/application/TerminalRenderer.js +2 -3
  134. package/dist/application/Uninstall.js +9 -14
  135. package/dist/application/UnknownEvidence.js +1 -1
  136. package/dist/artifacts/ArtifactPaths.js +2 -5
  137. package/dist/artifacts/ArtifactProvider.js +36 -58
  138. package/dist/artifacts/DirectoryArtifactReader.js +13 -8
  139. package/dist/artifacts/MachOSliceArtifactReader.js +1 -5
  140. package/dist/artifacts/NativeDmgArtifactReader.js +11 -11
  141. package/dist/artifacts/NibArchive.js +269 -0
  142. package/dist/artifacts/SafeOutputTree.js +15 -24
  143. package/dist/browser/BrowserProcessStartup.js +1 -2
  144. package/dist/browser/CdpAuthorizedMainFrame.js +16 -0
  145. package/dist/browser/CdpBrowserProvider.js +3 -13
  146. package/dist/browser/CdpCanonicalJsonDigest.js +9 -0
  147. package/dist/browser/CdpCaptureDocuments.js +28 -76
  148. package/dist/browser/CdpCaptureEventBodyShapes.js +13 -33
  149. package/dist/browser/CdpCaptureEventHandlers.js +22 -87
  150. package/dist/browser/CdpCaptureEvents.js +2 -8
  151. package/dist/browser/CdpCaptureStorage.js +9 -20
  152. package/dist/browser/CdpCaptureStorageFingerprints.js +85 -98
  153. package/dist/browser/CdpCaptureValues.js +21 -21
  154. package/dist/browser/CdpConnection.js +10 -25
  155. package/dist/browser/CdpElectronInspection.js +26 -50
  156. package/dist/browser/CdpElectronProvider.js +10 -35
  157. package/dist/browser/CdpElectronScriptEvents.js +8 -16
  158. package/dist/browser/CdpElectronScripts.js +6 -35
  159. package/dist/browser/CdpElectronWorkers.js +6 -10
  160. package/dist/browser/CdpEndpoint.js +25 -41
  161. package/dist/browser/CdpObservationSession.js +14 -26
  162. package/dist/browser/CdpPageCapture.js +34 -48
  163. package/dist/browser/CdpPageCaptureScripts.js +1 -19
  164. package/dist/browser/CdpPageCaptureWorkers.js +6 -10
  165. package/dist/browser/CdpSafeMetadata.js +19 -22
  166. package/dist/browser/CdpScreenshot.js +3 -5
  167. package/dist/browser/CdpTargetSession.js +1 -2
  168. package/dist/browser/CdpWebMcpDiscovery.js +13 -22
  169. package/dist/browser/ElectronFileScope.js +8 -19
  170. package/dist/browser/JavaScriptRuntimeScope.js +9 -14
  171. package/dist/browser/PlaywrightBrowserScenarioProvider.js +31 -64
  172. package/dist/browser/PlaywrightElectronActiveActions.js +54 -69
  173. package/dist/browser/PlaywrightElectronActiveProvider.js +14 -34
  174. package/dist/browser/PlaywrightExecutionBoundary.js +16 -5
  175. package/dist/browser/PlaywrightScenarioActions.js +3 -7
  176. package/dist/browser/PlaywrightScenarioArtifacts.js +23 -92
  177. package/dist/browser/PlaywrightScenarioBrowser.js +3 -5
  178. package/dist/browser/PlaywrightScenarioEvents.js +45 -94
  179. package/dist/browser/PlaywrightScenarioSession.js +14 -30
  180. package/dist/browser/PngVisualDiff.js +22 -14
  181. package/dist/browser/SensitiveTextCapture.js +0 -17
  182. package/dist/browser/V8InspectorCaptureProjection.js +7 -8
  183. package/dist/browser/V8InspectorEndpoint.js +12 -14
  184. package/dist/browser/V8InspectorProvider.js +20 -61
  185. package/dist/browser/WebSourceMapFetcher.js +56 -176
  186. package/dist/catalogIdentity.js +0 -54
  187. package/dist/cli/artifactCommands.js +49 -77
  188. package/dist/cli/coreAnalysisCommands.js +83 -133
  189. package/dist/cli/javascriptApplicationAnalysis.js +1 -9
  190. package/dist/cli/managedCommands.js +5 -270
  191. package/dist/cli/setupCommands.js +3 -12
  192. package/dist/cli/utilityCommands.js +7 -41
  193. package/dist/cli.js +0 -2
  194. package/dist/cliApplicationCommands.js +42 -112
  195. package/dist/cliBrowserAdvancedCommands.js +10 -106
  196. package/dist/cliBrowserCommands.js +15 -127
  197. package/dist/cliBrowserContext.js +30 -0
  198. package/dist/cliCommandNames.js +4 -5
  199. package/dist/cliElectronCommands.js +8 -72
  200. package/dist/cliEvidenceCommands.js +8 -77
  201. package/dist/cliJavaScriptRuntimeCommands.js +9 -91
  202. package/dist/cliJsonInput.js +4 -14
  203. package/dist/cliObservationOptions.js +11 -96
  204. package/dist/cliPolicyCommands.js +2 -17
  205. package/dist/cliProcessCommands.js +3 -3
  206. package/dist/cliSetup.js +0 -13
  207. package/dist/config/browserScenario.js +2 -2
  208. package/dist/config/environment.js +0 -9
  209. package/dist/config/parseConfig.js +1 -33
  210. package/dist/config/parsers.js +6 -27
  211. package/dist/config/passiveObservation.js +7 -77
  212. package/dist/config/permissions.js +0 -7
  213. package/dist/contracts/analysisSearchContract.js +2 -5
  214. package/dist/contracts/applicationToolContracts.js +56 -109
  215. package/dist/contracts/applicationWorkflowInputContracts.js +27 -102
  216. package/dist/contracts/artifactComparisonExample.js +58 -60
  217. package/dist/contracts/artifactToolContracts.js +20 -67
  218. package/dist/contracts/browserScenarioToolContracts.js +6 -51
  219. package/dist/contracts/browserToolContracts.js +8 -73
  220. package/dist/contracts/electronToolContracts.js +8 -108
  221. package/dist/contracts/enhancedInputs.js +23 -54
  222. package/dist/contracts/errorSchemas.js +0 -1
  223. package/dist/contracts/functionComparisonExample.js +10 -24
  224. package/dist/contracts/functionInstructionContract.js +1 -3
  225. package/dist/contracts/functionWorkflowToolContracts.js +2 -2
  226. package/dist/contracts/hopperMemoryContracts.js +3 -3
  227. package/dist/contracts/investigationExamples.js +14 -11
  228. package/dist/contracts/javascriptApplicationWorkflowExamples.js +12 -19
  229. package/dist/contracts/javascriptRuntimeObservationToolContracts.js +2 -20
  230. package/dist/contracts/javascriptRuntimeReconciliationExample.js +45 -12
  231. package/dist/contracts/managedToolContracts.js +6 -95
  232. package/dist/contracts/managedWorkflowExamples.js +77 -128
  233. package/dist/contracts/managedWorkflowToolContracts.js +51 -77
  234. package/dist/contracts/nativeToolContracts.js +7 -11
  235. package/dist/contracts/processCaptureExample.js +2 -69
  236. package/dist/contracts/promptContracts.js +49 -67
  237. package/dist/contracts/providerSelection.js +0 -1
  238. package/dist/contracts/reconstructionReadinessExample.js +1 -6
  239. package/dist/contracts/sessionStatusContract.js +1 -17
  240. package/dist/contracts/sessionToolSchemas.js +6 -15
  241. package/dist/contracts/toolContractExamples.js +11 -11
  242. package/dist/contracts/toolContractHelpers.js +0 -4
  243. package/dist/contracts/toolContracts.js +60 -71
  244. package/dist/contracts/toolEffects.js +5 -13
  245. package/dist/contracts/toolOutputSchemaGroups.js +37 -91
  246. package/dist/contracts/toolOutputSchemaPrimitives.js +16 -56
  247. package/dist/contracts/toolSchemaMetadata.js +8 -19
  248. package/dist/contracts/unknownContractExamples.js +0 -2
  249. package/dist/domain/analysisErrorPresentation.js +46 -54
  250. package/dist/domain/analysisErrorProjection.js +28 -37
  251. package/dist/domain/analysisProfile.js +3 -31
  252. package/dist/domain/analysisSnapshot.js +3 -12
  253. package/dist/domain/androidApplication.js +15 -54
  254. package/dist/domain/appleApplication.js +24 -67
  255. package/dist/domain/artifactComparison.js +11 -29
  256. package/dist/domain/artifactGraph.js +14 -44
  257. package/dist/domain/artifactInspection.js +38 -69
  258. package/dist/domain/artifactInventoryEvidence.js +27 -21
  259. package/dist/domain/binaryTarget.js +2 -221
  260. package/dist/domain/browserCaptureComparison.js +47 -24
  261. package/dist/domain/browserObservation.js +28 -193
  262. package/dist/domain/browserObservationSchemas.js +5 -23
  263. package/dist/domain/browserScenario.js +11 -14
  264. package/dist/domain/browserScenarioCapture.js +11 -12
  265. package/dist/domain/browserScenarioCaptureValues.js +146 -84
  266. package/dist/domain/browserScenarioDiff.js +2 -59
  267. package/dist/domain/browserScenarioDiffEvidence.js +51 -0
  268. package/dist/domain/browserScenarioDiffValues.js +21 -38
  269. package/dist/domain/browserScenarioValues.js +80 -109
  270. package/dist/domain/browserSession.js +4 -7
  271. package/dist/domain/bundleComparison.js +6 -32
  272. package/dist/domain/bytecodeProvider.js +20 -19
  273. package/dist/domain/callPath.js +47 -167
  274. package/dist/domain/callPathSchemas.js +79 -0
  275. package/dist/domain/changedBehavior.js +34 -60
  276. package/dist/domain/completionLedgerGeneration.js +8 -14
  277. package/dist/domain/conformancePackage.js +126 -97
  278. package/dist/domain/conformanceReplay.js +36 -8
  279. package/dist/domain/conformanceTrustGate.js +23 -14
  280. package/dist/domain/customProtocolCapture.js +1 -1
  281. package/dist/domain/electronActiveObservation.js +70 -103
  282. package/dist/domain/electronObservation.js +14 -80
  283. package/dist/domain/electronStaticAnalysisBrowser.js +36 -46
  284. package/dist/domain/electronStaticAnalysisIpc.js +38 -14
  285. package/dist/domain/electronStaticAnalysisNative.js +1 -8
  286. package/dist/domain/electronStaticAnalysisValues.js +10 -17
  287. package/dist/domain/errors.js +33 -54
  288. package/dist/domain/eventProcessTree.js +20 -12
  289. package/dist/domain/evidence.js +2 -10
  290. package/dist/domain/evidenceBundle.js +3 -5
  291. package/dist/domain/evidenceCompletionLedger.js +6 -8
  292. package/dist/domain/functionComparison.js +4 -14
  293. package/dist/domain/functionComparisonNormalization.js +4 -11
  294. package/dist/domain/functionComparisonResults.js +25 -15
  295. package/dist/domain/functionComparisonSchemas.js +49 -33
  296. package/dist/domain/functionDossierEvidence.js +31 -156
  297. package/dist/domain/hopperStartupFailure.js +1 -1
  298. package/dist/domain/hopperValues.js +15 -136
  299. package/dist/domain/interfaceBuilderGraph.js +654 -0
  300. package/dist/domain/javascriptApplicationAnalysis.js +8 -112
  301. package/dist/domain/javascriptApplicationChangeGraph.js +22 -82
  302. package/dist/domain/javascriptApplicationEvidenceSchemas.js +59 -47
  303. package/dist/domain/javascriptApplicationGraph.js +3 -13
  304. package/dist/domain/javascriptApplicationGraphSchemas.js +12 -34
  305. package/dist/domain/javascriptApplicationVersionComparison.js +26 -30
  306. package/dist/domain/javascriptApplicationVersionComparisonSchemas.js +123 -68
  307. package/dist/domain/javascriptApplicationVersionItems.js +120 -53
  308. package/dist/domain/javascriptApplicationVersionKeys.js +24 -11
  309. package/dist/domain/javascriptAstFingerprint.js +25 -58
  310. package/dist/domain/javascriptAstValues.js +9 -0
  311. package/dist/domain/javascriptExportInstrumentation.js +2 -4
  312. package/dist/domain/javascriptExportShapeComparison.js +6 -7
  313. package/dist/domain/javascriptExportShapeComparisonSchemas.js +68 -75
  314. package/dist/domain/javascriptExportShapeSelection.js +17 -19
  315. package/dist/domain/javascriptFeatureSeed.js +20 -12
  316. package/dist/domain/javascriptFeatureTrace.js +13 -67
  317. package/dist/domain/javascriptFeatureTraceSchemas.js +24 -52
  318. package/dist/domain/javascriptFeatureTraversal.js +1 -44
  319. package/dist/domain/javascriptNativeHandoff.js +1 -1
  320. package/dist/domain/javascriptReplay.js +24 -41
  321. package/dist/domain/javascriptRuntimeLoadState.js +3 -8
  322. package/dist/domain/javascriptRuntimeObservation.js +42 -103
  323. package/dist/domain/javascriptRuntimeReconciliation.js +1 -3
  324. package/dist/domain/javascriptRuntimeReconciliationActive.js +8 -17
  325. package/dist/domain/javascriptRuntimeReconciliationGraph.js +10 -23
  326. package/dist/domain/javascriptRuntimeReconciliationMatching.js +18 -12
  327. package/dist/domain/javascriptRuntimeReconciliationParsing.js +16 -45
  328. package/dist/domain/javascriptRuntimeReconciliationResult.js +4 -5
  329. package/dist/domain/javascriptRuntimeReconciliationRuntime.js +8 -12
  330. package/dist/domain/javascriptRuntimeReconciliationSchemas.js +33 -48
  331. package/dist/domain/javascriptRuntimeStaticCandidates.js +3 -3
  332. package/dist/domain/javascriptSemanticAnalysis.js +12 -45
  333. package/dist/domain/javascriptSemanticAsyncEffects.js +1 -9
  334. package/dist/domain/javascriptSemanticCallResolution.js +6 -16
  335. package/dist/domain/javascriptSemanticCalls.js +5 -32
  336. package/dist/domain/javascriptSemanticChildProcesses.js +1 -11
  337. package/dist/domain/javascriptSemanticCoverage.js +11 -0
  338. package/dist/domain/javascriptSemanticDataEffectHelpers.js +1 -8
  339. package/dist/domain/javascriptSemanticDataEffects.js +1 -11
  340. package/dist/domain/javascriptSemanticFingerprints.js +3 -5
  341. package/dist/domain/javascriptSemanticGraphSchemas.js +25 -51
  342. package/dist/domain/javascriptSemanticGraphSerialization.js +2 -13
  343. package/dist/domain/javascriptSemanticIr.js +1 -29
  344. package/dist/domain/javascriptSemanticObjects.js +1 -5
  345. package/dist/domain/javascriptSemanticPrimitives.js +2 -9
  346. package/dist/domain/javascriptSemanticProjection.js +0 -18
  347. package/dist/domain/javascriptSemanticPromises.js +9 -16
  348. package/dist/domain/javascriptSemanticProvenance.js +16 -19
  349. package/dist/domain/javascriptSemanticQuery.js +17 -139
  350. package/dist/domain/javascriptSemanticQueryAssessment.js +9 -37
  351. package/dist/domain/javascriptSemanticQueryIdentity.js +2 -23
  352. package/dist/domain/javascriptSemanticQuerySchemas.js +14 -107
  353. package/dist/domain/javascriptSemanticResources.js +1 -6
  354. package/dist/domain/javascriptSemanticReturns.js +10 -27
  355. package/dist/domain/javascriptSemanticValueTypes.js +1 -0
  356. package/dist/domain/javascriptSemanticValues.js +44 -62
  357. package/dist/domain/javascriptStaticAnalysis.js +21 -43
  358. package/dist/domain/javascriptStaticAnalysisBundler.js +34 -93
  359. package/dist/domain/javascriptStaticAnalysisCalls.js +17 -16
  360. package/dist/domain/javascriptStaticAnalysisFindings.js +3 -19
  361. package/dist/domain/javascriptStaticAnalysisHelpers.js +47 -88
  362. package/dist/domain/javascriptStaticAnalysisState.js +1 -5
  363. package/dist/domain/javascriptStaticAnalysisTypes.js +1 -0
  364. package/dist/domain/jsonShape.js +7 -33
  365. package/dist/domain/localPath.js +7 -0
  366. package/dist/domain/managedApplicationGraph.js +9 -41
  367. package/dist/domain/managedApplicationGraphCoverage.js +24 -156
  368. package/dist/domain/managedApplicationGraphNodes.js +10 -13
  369. package/dist/domain/managedArtifact.js +14 -27
  370. package/dist/domain/managedMemberComparison.js +90 -92
  371. package/dist/domain/managedMemberComparisonCoverage.js +11 -33
  372. package/dist/domain/managedMemberComparisonItems.js +221 -0
  373. package/dist/domain/managedMemberComparisonMatch.js +8 -208
  374. package/dist/domain/managedNativeVerification.js +3 -6
  375. package/dist/domain/managedNativeVerificationMatch.js +55 -59
  376. package/dist/domain/managedNativeVerificationSchemas.js +83 -47
  377. package/dist/domain/managedReconstruction.js +19 -23
  378. package/dist/domain/managedRuntimeCorrelation.js +6 -9
  379. package/dist/domain/nativeApiBoundary.js +2 -7
  380. package/dist/domain/nativeInspection.js +0 -2
  381. package/dist/domain/nativeInvestigationGraph.js +351 -0
  382. package/dist/domain/nativeValueFlow.js +61 -0
  383. package/dist/domain/nodeRuntimeCharacterization.js +1 -5
  384. package/dist/domain/objcSwiftMetadata.js +254 -0
  385. package/dist/domain/peInspection.js +1 -1
  386. package/dist/domain/permissionPolicy.js +13 -0
  387. package/dist/domain/processCapture.js +76 -113
  388. package/dist/domain/processCaptureExample.js +68 -0
  389. package/dist/domain/processCaptureParsing.js +21 -0
  390. package/dist/domain/processCaptureReactiveSchema.js +68 -0
  391. package/dist/domain/processCaptureValidation.js +1 -7
  392. package/dist/domain/processComparison.js +3 -12
  393. package/dist/domain/processReactiveMatching.js +29 -50
  394. package/dist/domain/processReactiveRuntime.js +4 -8
  395. package/dist/domain/processReactiveScenario.js +28 -94
  396. package/dist/domain/processReactiveScenarioPreflight.js +5 -30
  397. package/dist/domain/processReactiveTransition.js +33 -18
  398. package/dist/domain/processScenario.js +56 -90
  399. package/dist/domain/processTraceComparison.js +0 -8
  400. package/dist/domain/processTraceEvaluation.js +14 -4
  401. package/dist/domain/processTraceSpecification.js +11 -17
  402. package/dist/domain/protocolCapture.js +3 -3
  403. package/dist/domain/reconstructionCoverage.js +62 -129
  404. package/dist/domain/reconstructionCoverageEvaluation.js +17 -17
  405. package/dist/domain/reconstructionObligationLedgerSchemas.js +45 -72
  406. package/dist/domain/reconstructionReadiness.js +1 -2
  407. package/dist/domain/reconstructionReadinessSchemas.js +36 -38
  408. package/dist/domain/reconstructionUnknowns.js +3 -3
  409. package/dist/domain/reconstructionVerification.js +13 -47
  410. package/dist/domain/reconstructionVerificationSchemas.js +50 -38
  411. package/dist/domain/referenceSourceGraph.js +53 -61
  412. package/dist/domain/referenceSourceImportParsing.js +1 -5
  413. package/dist/domain/replayMachine.js +19 -31
  414. package/dist/domain/replayMachineRun.js +15 -63
  415. package/dist/domain/replayMachineRuntime.js +41 -41
  416. package/dist/domain/replayMachineValues.js +84 -0
  417. package/dist/domain/residualUnknown.js +25 -30
  418. package/dist/domain/runtimeCharacterization.js +15 -16
  419. package/dist/domain/runtimeIdentification.js +48 -47
  420. package/dist/domain/sourceToBundleComparison.js +9 -85
  421. package/dist/domain/sourceToBundleComparisonSchemas.js +17 -42
  422. package/dist/domain/sourceToBundleSignals.js +4 -15
  423. package/dist/domain/staticRuntimeCorrelation.js +37 -49
  424. package/dist/domain/symbolAnalysis.js +10 -19
  425. package/dist/domain/unicodeCodePointOrder.js +12 -0
  426. package/dist/domain/webBundleAnalysis.js +70 -99
  427. package/dist/domain/webBundleAnalyzer.js +2 -4
  428. package/dist/domain/webBundleAnalyzerAst.js +0 -13
  429. package/dist/domain/webBundleAnalyzerInspection.js +26 -52
  430. package/dist/domain/webBundleAnalyzerResult.js +7 -24
  431. package/dist/domain/webCaptureDiff.js +33 -73
  432. package/dist/domain/webCaptureDiffSchemas.js +86 -0
  433. package/dist/domain/webContentArtifact.js +1 -10
  434. package/dist/domain/webMcpDiscovery.js +3 -14
  435. package/dist/domain/webScreenshot.js +58 -34
  436. package/dist/domain/zipPackageFormat.js +7 -0
  437. package/dist/dotnet/ManagedArtifactInspector.js +17 -50
  438. package/dist/dotnet/ManagedMemberInspector.js +27 -58
  439. package/dist/dotnet/ManagedMemberInspectorCore.js +14 -51
  440. package/dist/dotnet/ManagedMemberInstructionDecoder.js +2 -2
  441. package/dist/dotnet/ManagedMemberRows.js +16 -16
  442. package/dist/dotnet/ManagedMetadataHeaps.js +26 -8
  443. package/dist/dotnet/ManagedMetadataInventory.js +21 -30
  444. package/dist/dotnet/ManagedMetadataInventoryRows.js +57 -63
  445. package/dist/dotnet/ManagedMetadataLayout.js +3 -5
  446. package/dist/dotnet/ManagedMethodBodyReader.js +5 -30
  447. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +19 -49
  448. package/dist/dotnet/ManagedNativeBoundaryInspector.js +13 -41
  449. package/dist/dotnet/ManagedPeReader.js +2 -2
  450. package/dist/dotnet/ManagedStaticProvider.js +13 -71
  451. package/dist/generatedMcpToolCatalog.js +1 -1
  452. package/dist/generatedPackageMetadata.js +1 -1
  453. package/dist/ghidra/GhidraAnalysisProfile.js +3 -8
  454. package/dist/ghidra/GhidraClient.js +4 -12
  455. package/dist/ghidra/GhidraClientWire.js +9 -5
  456. package/dist/ghidra/GhidraDefaults.js +0 -18
  457. package/dist/ghidra/GhidraDiagnostics.js +0 -2
  458. package/dist/ghidra/GhidraDoctor.js +16 -12
  459. package/dist/ghidra/GhidraFunctionValues.js +65 -108
  460. package/dist/ghidra/GhidraInstallation.js +98 -42
  461. package/dist/ghidra/GhidraInventoryValues.js +16 -85
  462. package/dist/ghidra/GhidraLauncher.js +0 -8
  463. package/dist/ghidra/GhidraProvider.js +15 -22
  464. package/dist/ghidra/GhidraProviderCapabilities.js +6 -47
  465. package/dist/ghidra/GhidraRequestQueue.js +6 -30
  466. package/dist/ghidra/GhidraResponseBuffer.js +1 -7
  467. package/dist/ghidra/GhidraSessionValues.js +0 -2
  468. package/dist/ghidra/GhidraTransport.js +4 -7
  469. package/dist/ghidra/protocol.js +2 -2
  470. package/dist/hopper/BridgeLauncher.js +112 -36
  471. package/dist/hopper/HopperAnalysisProfile.js +1 -1
  472. package/dist/hopper/HopperCleanup.js +6 -3
  473. package/dist/hopper/HopperClient.js +4 -7
  474. package/dist/hopper/HopperProcessDiagnostic.js +2 -2
  475. package/dist/hopper/HopperProvider.js +0 -16
  476. package/dist/hopper/HopperRequestQueue.js +21 -40
  477. package/dist/hopper/HopperResponseStream.js +1 -9
  478. package/dist/hopper/HopperSessionValues.js +3 -2
  479. package/dist/hopper/HopperTargetLease.js +119 -0
  480. package/dist/hopper/LinuxPrivateDisplayDiagnostic.js +24 -31
  481. package/dist/hopper/LinuxPrivateDisplayProbe.js +5 -16
  482. package/dist/hopper/protocol.js +6 -4
  483. package/dist/main/reload.js +0 -3
  484. package/dist/main/shutdown.js +1 -1
  485. package/dist/main/state.js +0 -9
  486. package/dist/main/transport.js +0 -5
  487. package/dist/mcpDoctor.js +25 -45
  488. package/dist/native/CommandRunner.js +18 -25
  489. package/dist/native/NativeMacOSProvider.js +13 -38
  490. package/dist/native/NativeMachoInspection.js +1 -1
  491. package/dist/process/BoundedFileBytes.js +17 -0
  492. package/dist/process/ExecFileOutput.js +11 -0
  493. package/dist/process/PendingOperations.js +8 -6
  494. package/dist/process/ProcessOwnership.js +3 -2
  495. package/dist/process/ProcessOwnershipObservation.js +0 -1
  496. package/dist/process/ProviderProcess.js +7 -28
  497. package/dist/reference/ReferenceSourceReader.js +8 -24
  498. package/dist/reference/ReferenceSourceReaderEntries.js +11 -39
  499. package/dist/reference/ReferenceSourceReaderFile.js +13 -31
  500. package/dist/reference/ReferenceSourceReaderPaths.js +3 -18
  501. package/dist/reference/ReferenceSourceReaderValidate.js +3 -6
  502. package/dist/replay/JavaScriptReplayWorker.js +3 -5
  503. package/dist/replay/LinuxJavaScriptReplayRunner.js +33 -29
  504. package/dist/replay/LinuxJavaScriptReplaySandbox.js +0 -19
  505. package/dist/replay/LinuxRuntimeClosure.js +1 -3
  506. package/dist/replay/ReplayOutcome.js +1 -3
  507. package/dist/replay/ReplayProcessLifecycle.js +32 -7
  508. package/dist/replay/ReplaySeccompFile.js +29 -0
  509. package/dist/replay/ReplayWorkerProtocol.js +0 -2
  510. package/dist/replay/SystemJavaScriptReplayHost.js +45 -74
  511. package/dist/server/ProcessCaptureElicitation.js +4 -8
  512. package/dist/server/createServer.js +6 -44
  513. package/dist/server/promptCompletion.js +37 -61
  514. package/dist/server/recordDerivedEvidence.js +1 -1
  515. package/dist/server/registerApplicationTools/characterization.js +4 -8
  516. package/dist/server/registerApplicationTools/compareExportShapes.js +5 -10
  517. package/dist/server/registerApplicationTools/compareSourceToBundle.js +6 -10
  518. package/dist/server/registerApplicationTools/compareVersions.js +5 -10
  519. package/dist/server/registerApplicationTools/controlledReplay.js +3 -5
  520. package/dist/server/registerApplicationTools/coverage.js +6 -71
  521. package/dist/server/registerApplicationTools/helpers.js +1 -13
  522. package/dist/server/registerApplicationTools/obligationLedger.js +3 -2
  523. package/dist/server/registerApplicationTools/traceFeature.js +5 -9
  524. package/dist/server/registerApplicationTools/traceSemantics.js +5 -8
  525. package/dist/server/registerApplicationTools.js +0 -2
  526. package/dist/server/registerArtifactComparisonTool.js +23 -27
  527. package/dist/server/registerBrowserScenarioTool.js +4 -4
  528. package/dist/server/registerBrowserTools.js +5 -8
  529. package/dist/server/registerBundleComparisonTool.js +5 -7
  530. package/dist/server/registerCloseLifecycleTool.js +2 -16
  531. package/dist/server/registerElectronTools.js +10 -29
  532. package/dist/server/registerEnhancedTools.js +10 -11
  533. package/dist/server/registerEvidenceTools.js +15 -22
  534. package/dist/server/registerFunctionComparisonTool.js +30 -25
  535. package/dist/server/registerInvestigationTools/helpers.js +3 -32
  536. package/dist/server/registerInvestigationTools.js +20 -116
  537. package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -4
  538. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +15 -17
  539. package/dist/server/registerManagedWorkflowTools/evidence.js +19 -35
  540. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +3 -8
  541. package/dist/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.js +3 -8
  542. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +10 -14
  543. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +9 -15
  544. package/dist/server/registerOfficialTools.js +1 -43
  545. package/dist/server/registerProcessComparisonTool.js +33 -23
  546. package/dist/server/registerPrompts.js +19 -17
  547. package/dist/server/registerSessionRecordTools.js +10 -156
  548. package/dist/server/registerSessionStatusTool.js +6 -69
  549. package/dist/server/registerSessionTools.js +10 -51
  550. package/dist/server/sessionAvailabilityPolicy.js +0 -2
  551. package/dist/server/sessionEvidence.js +9 -15
  552. package/dist/server/sessionToolPolicies.js +0 -8
  553. package/dist/server/toolResult.js +14 -50
  554. package/dist/serverIdentity.js +0 -20
  555. package/install.sh +1 -1
  556. package/package.json +11 -7
  557. package/scripts/electron-active-hook.cjs +23 -55
  558. package/scripts/hopper-demo-x11.py +13 -32
  559. package/skills/reverse-engineer-anything/SKILL.md +47 -12
  560. package/skills/reverse-engineer-anything/references/evidence-workflows.md +6 -4
  561. package/skills/reverse-engineer-anything/references/javascript-applications.md +13 -13
  562. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +12 -8
  563. package/dist/application/ApplicationWorkflowEvidenceResolver.js +0 -188
  564. package/dist/application/BoundedJsonFiles.js +0 -86
  565. package/dist/application/CrossVersionInventory.js +0 -129
  566. package/dist/application/CrossVersionInvestigation.js +0 -301
  567. package/dist/application/CrossVersionInvestigationCollections.js +0 -23
  568. package/dist/application/CrossVersionInvestigationEvidence.js +0 -64
  569. package/dist/application/CrossVersionInvestigationReplay.js +0 -170
  570. package/dist/application/DeferredFileAuthorization.js +0 -61
  571. package/dist/application/DoctorProjection.js +0 -43
  572. package/dist/application/EnhancedToolPagination.js +0 -22
  573. package/dist/application/EvidenceReferenceResolver.js +0 -26
  574. package/dist/application/InvestigationWorkspaceStore.js +0 -204
  575. package/dist/application/ProcessPairedExperiment.js +0 -72
  576. package/dist/application/ReconstructionCoverageWorkspaceStore.js +0 -31
  577. package/dist/application/ReconstructionReadinessService.js +0 -48
  578. package/dist/cliInvestigationCommands.js +0 -173
  579. package/dist/domain/boundedCartesianProjection.js +0 -15
  580. package/dist/domain/investigationWorkspace.js +0 -347
  581. package/dist/domain/jsonLimits.js +0 -26
  582. package/dist/domain/knownPageCoverage.js +0 -29
  583. package/dist/domain/processPairedExperiment.js +0 -128
  584. package/dist/server/javascriptApplicationResult.js +0 -106
  585. package/dist/server/permissionFailure.js +0 -12
  586. package/dist/server/registerApplicationTools/readiness.js +0 -50
  587. package/dist/server/registerEvidenceResources.js +0 -315
  588. package/dist/server/registerJavaScriptApplicationGraphResource.js +0 -65
  589. package/dist/server/registerReconstructionObligationLedgerResource.js +0 -32
  590. package/dist/server/registerReconstructionReadinessResource.js +0 -32
@@ -1,7 +1,7 @@
1
1
  import { createServer, } from "node:http";
2
2
  import { WebSocketServer } from "ws";
3
3
  import {} from "../domain/replayMachineRuntime.js";
4
- import { closeReplayServer, listenOnLoopback, recordMachineEvent, readReplayRequestBody, ReplayRecorder, requestHeaders, waitForReplayDelay, } from "./LoopbackReplayRecorder.js";
4
+ import { closeReplayServer, listenOnLoopback, recordMachineEvent, readReplayRequestBody, ReplayRecorder, ReplayDelayScheduler, requestHeaders, } from "./LoopbackReplayRecorder.js";
5
5
  const recordHttpResponse = (recorder, request, data, outcome) => recorder.record({
6
6
  at_ms: recorder.atMs(),
7
7
  protocol: "http",
@@ -11,7 +11,7 @@ const recordHttpResponse = (recorder, request, data, outcome) => recorder.record
11
11
  data,
12
12
  outcome,
13
13
  });
14
- const handleMachineHttp = async (recorder, request) => {
14
+ const handleMachineHttp = async (recorder, request, delays) => {
15
15
  const machine = recorder.machine;
16
16
  if (machine === undefined)
17
17
  return;
@@ -40,7 +40,7 @@ const handleMachineHttp = async (recorder, request) => {
40
40
  }
41
41
  for (const action of decision.actions) {
42
42
  if (action.type === "delay")
43
- await waitForReplayDelay(action.duration_ms);
43
+ await delays.wait(action.duration_ms);
44
44
  else if (action.type === "disconnect") {
45
45
  request.response.destroy();
46
46
  recordHttpResponse(recorder, request, "", "disconnected");
@@ -55,7 +55,7 @@ const handleMachineHttp = async (recorder, request) => {
55
55
  }
56
56
  }
57
57
  };
58
- const handleStaticHttp = async (recorder, request, calls) => {
58
+ const handleStaticHttp = async (recorder, request, calls, delays) => {
59
59
  const index = recorder.scenario.replay.http.findIndex((route) => route.method !== request.method || route.path !== request.path
60
60
  ? false
61
61
  : (route.request_body === undefined ||
@@ -84,7 +84,7 @@ const handleStaticHttp = async (recorder, request, calls) => {
84
84
  }
85
85
  calls.set(index, used + 1);
86
86
  if (route.delay_ms > 0)
87
- await waitForReplayDelay(route.delay_ms);
87
+ await delays.wait(route.delay_ms);
88
88
  if (route.disconnect) {
89
89
  request.response.destroy();
90
90
  recordHttpResponse(recorder, request, "", "disconnected");
@@ -96,7 +96,7 @@ const handleStaticHttp = async (recorder, request, calls) => {
96
96
  request.response.end(route.body);
97
97
  recordHttpResponse(recorder, request, route.body, "matched");
98
98
  };
99
- const handleHttpRequest = async (recorder, request, response, calls) => {
99
+ const handleHttpRequest = async (recorder, request, response, calls, delays) => {
100
100
  const body = await readReplayRequestBody(request, recorder.scenario.limits.protocol_body_bytes);
101
101
  const method = request.method ?? "GET";
102
102
  const path = new URL(request.url ?? "/", "http://127.0.0.1").pathname;
@@ -125,13 +125,13 @@ const handleHttpRequest = async (recorder, request, response, calls) => {
125
125
  recordedAtMs: recorder.atMs(),
126
126
  };
127
127
  await (recorder.machine === undefined
128
- ? handleStaticHttp(recorder, replayRequest, calls)
129
- : recorder.enqueueMachine(() => handleMachineHttp(recorder, replayRequest)));
128
+ ? handleStaticHttp(recorder, replayRequest, calls, delays)
129
+ : recorder.enqueueMachine(() => handleMachineHttp(recorder, replayRequest, delays)));
130
130
  };
131
- const createHttpHandler = (recorder) => {
131
+ const createHttpHandler = (recorder, delays) => {
132
132
  const calls = new Map();
133
133
  return (request, response) => {
134
- void handleHttpRequest(recorder, request, response, calls).catch(() => {
134
+ void handleHttpRequest(recorder, request, response, calls, delays).catch(() => {
135
135
  recorder.truncated = true;
136
136
  if (response.headersSent)
137
137
  response.destroy();
@@ -142,7 +142,7 @@ const createHttpHandler = (recorder) => {
142
142
  });
143
143
  };
144
144
  };
145
- const sendWebSocketScript = async (client, connection, recorder) => {
145
+ const sendWebSocketScript = async (client, connection, recorder, delays) => {
146
146
  const scripts = recorder.scenario.replay.websocket_connections;
147
147
  const script = scripts[connection - 1];
148
148
  if (scripts.length > 0 && script === undefined) {
@@ -165,7 +165,7 @@ const sendWebSocketScript = async (client, connection, recorder) => {
165
165
  }));
166
166
  for (const message of messages) {
167
167
  if (message.delay_ms > 0)
168
- await new Promise((resolveDelay) => setTimeout(resolveDelay, message.delay_ms));
168
+ await delays.wait(message.delay_ms);
169
169
  if (client.readyState !== 1)
170
170
  return;
171
171
  client.send(message.data);
@@ -192,10 +192,10 @@ const sendWebSocketScript = async (client, connection, recorder) => {
192
192
  });
193
193
  }
194
194
  };
195
- const runWebSocketActions = async (client, recorder, decision, path) => {
195
+ const runWebSocketActions = async (client, recorder, decision, path, delays) => {
196
196
  for (const action of decision.actions) {
197
197
  if (action.type === "delay") {
198
- await waitForReplayDelay(action.duration_ms);
198
+ await delays.wait(action.duration_ms);
199
199
  continue;
200
200
  }
201
201
  if (action.type === "disconnect") {
@@ -225,7 +225,7 @@ const runWebSocketActions = async (client, recorder, decision, path) => {
225
225
  }
226
226
  }
227
227
  };
228
- const handleStaticWebSocket = (client, recorder, connection, path) => {
228
+ const handleStaticWebSocket = (client, recorder, connection, path, delays) => {
229
229
  client.on("message", (value) => recorder.record({
230
230
  at_ms: recorder.atMs(),
231
231
  protocol: "websocket",
@@ -235,10 +235,10 @@ const handleStaticWebSocket = (client, recorder, connection, path) => {
235
235
  data: value.toString(),
236
236
  outcome: "matched",
237
237
  }));
238
- void sendWebSocketScript(client, connection, recorder);
238
+ void sendWebSocketScript(client, connection, recorder, delays);
239
239
  };
240
240
  const handleMachineWebSocket = (options) => {
241
- const { client, request, recorder, connection, path } = options;
241
+ const { client, request, recorder, connection, path, delays } = options;
242
242
  const machine = recorder.machine;
243
243
  if (machine === undefined)
244
244
  return;
@@ -264,7 +264,7 @@ const handleMachineWebSocket = (options) => {
264
264
  data: "",
265
265
  }, connectionDecision);
266
266
  if (connectionDecision.outcome === "matched")
267
- await runWebSocketActions(client, recorder, connectionDecision, path);
267
+ await runWebSocketActions(client, recorder, connectionDecision, path, delays);
268
268
  else
269
269
  client.close();
270
270
  })
@@ -297,7 +297,7 @@ const handleMachineWebSocket = (options) => {
297
297
  data: body,
298
298
  }, decision);
299
299
  if (decision.outcome === "matched")
300
- await runWebSocketActions(client, recorder, decision, path);
300
+ await runWebSocketActions(client, recorder, decision, path, delays);
301
301
  })
302
302
  .catch(() => {
303
303
  recorder.truncated = true;
@@ -305,7 +305,7 @@ const handleMachineWebSocket = (options) => {
305
305
  });
306
306
  });
307
307
  };
308
- const createWebSocketReplay = (server, recorder) => {
308
+ const createWebSocketReplay = (server, recorder, delays) => {
309
309
  let connections = 0;
310
310
  const websocket = new WebSocketServer({
311
311
  noServer: true,
@@ -330,7 +330,7 @@ const createWebSocketReplay = (server, recorder) => {
330
330
  client.on("error", () => undefined);
331
331
  const path = new URL(request.url ?? "/", "http://127.0.0.1").pathname;
332
332
  if (recorder.machine === undefined)
333
- handleStaticWebSocket(client, recorder, connections, path);
333
+ handleStaticWebSocket(client, recorder, connections, path, delays);
334
334
  else
335
335
  handleMachineWebSocket({
336
336
  client,
@@ -338,6 +338,7 @@ const createWebSocketReplay = (server, recorder) => {
338
338
  recorder,
339
339
  connection: connections,
340
340
  path,
341
+ delays,
341
342
  });
342
343
  });
343
344
  return websocket;
@@ -345,8 +346,9 @@ const createWebSocketReplay = (server, recorder) => {
345
346
  /** Start bounded HTTP and WebSocket replay endpoints on IPv4 loopback only. */
346
347
  export const startLoopbackReplay = async (scenario, recordEvent = () => undefined) => {
347
348
  const recorder = new ReplayRecorder(scenario, recordEvent);
348
- const server = createServer(createHttpHandler(recorder));
349
- const websocket = createWebSocketReplay(server, recorder);
349
+ const delays = new ReplayDelayScheduler();
350
+ const server = createServer(createHttpHandler(recorder, delays));
351
+ const websocket = createWebSocketReplay(server, recorder, delays);
350
352
  let closePromise;
351
353
  let port;
352
354
  try {
@@ -373,6 +375,7 @@ export const startLoopbackReplay = async (scenario, recordEvent = () => undefine
373
375
  },
374
376
  async close() {
375
377
  closePromise ??= (async () => {
378
+ delays.close();
376
379
  recorder.stopMachineAdmission();
377
380
  await recorder.drainMachine();
378
381
  for (const client of websocket.clients)
@@ -1,4 +1,5 @@
1
1
  import { ReplayMachineRuntime, } from "../domain/replayMachineRuntime.js";
2
+ import { scheduleProcessDelay } from "./ProcessTimer.js";
2
3
  /** Bounded protocol and replay-machine observations for one process run. */
3
4
  export class ReplayRecorder {
4
5
  scenario;
@@ -82,7 +83,34 @@ export const recordMachineEvent = (recorder, event, decision) => {
82
83
  });
83
84
  recorder.recordTransition(decision);
84
85
  };
85
- export const waitForReplayDelay = (durationMs) => new Promise((resolveDelay) => setTimeout(resolveDelay, durationMs));
86
+ /** Owns replay delays so endpoint shutdown can release every waiting handler. */
87
+ export class ReplayDelayScheduler {
88
+ #pending = new Map();
89
+ #closed = false;
90
+ wait(durationMs) {
91
+ if (this.#closed)
92
+ return Promise.resolve();
93
+ return new Promise((resolveDelay) => {
94
+ let timer;
95
+ const finish = () => {
96
+ this.#pending.delete(timer);
97
+ resolveDelay();
98
+ };
99
+ timer = scheduleProcessDelay(durationMs, finish);
100
+ this.#pending.set(timer, finish);
101
+ });
102
+ }
103
+ close() {
104
+ if (this.#closed)
105
+ return;
106
+ this.#closed = true;
107
+ for (const [timer, finish] of this.#pending) {
108
+ timer.cancel();
109
+ finish();
110
+ }
111
+ this.#pending.clear();
112
+ }
113
+ }
86
114
  export const listenOnLoopback = async (server) => {
87
115
  await new Promise((resolveListen, rejectListen) => {
88
116
  server.once("error", rejectListen);
@@ -22,13 +22,12 @@ export const projectManagedApplicationGraphEvidence = (rawInput) => {
22
22
  }
23
23
  };
24
24
  const createManagedApplicationGraphEvidence = (input, result) => createEvidence(subjectTarget(input), MANAGED_WORKFLOW_PROVIDER, {
25
- predicateType: "rea.managed-application-graph/v1",
25
+ predicateType: "rea.managed-application-graph",
26
26
  operation: OPERATION,
27
27
  parameters: {
28
28
  managed_artifact_evidence_id: input.managed_artifact?.evidence_id ?? null,
29
29
  managed_members_evidence_id: input.managed_members?.evidence_id ?? null,
30
30
  managed_native_boundaries_evidence_id: input.managed_native_boundaries?.evidence_id ?? null,
31
- limits: jsonValueSchema.parse(input.limits),
32
31
  },
33
32
  result: jsonValueSchema.parse(managedApplicationGraphResultSchema.parse(result)),
34
33
  rawResult: null,
@@ -1,21 +1,20 @@
1
- import { readFile, stat } from "node:fs/promises";
1
+ import { readFile } from "node:fs/promises";
2
2
  import { z } from "zod";
3
3
  import { compareManagedMembers, managedMemberComparisonResultSchema, parseManagedMemberEvidence, } from "../domain/managedMemberComparison.js";
4
4
  import { AnalysisInputError, AnalysisProtocolError, } from "../domain/errors.js";
5
5
  import { createEvidence } from "../domain/evidence.js";
6
6
  import { jsonValueSchema } from "../domain/jsonValue.js";
7
- import { parseBinaryTarget } from "../domain/binaryTarget.js";
7
+ import { parseBinaryTarget } from "./BinaryTargetResolver.js";
8
8
  import { err, ok } from "../domain/result.js";
9
9
  import { inspectManagedMembersBytes } from "../dotnet/ManagedMemberInspector.js";
10
- import { MANAGED_STATIC_PROVIDER } from "./InvestigationProviders.js";
11
- import { MANAGED_WORKFLOW_PROVIDER } from "./InvestigationProviders.js";
10
+ import { MANAGED_STATIC_PROVIDER, MANAGED_WORKFLOW_PROVIDER, } from "./InvestigationProviders.js";
12
11
  /** Compare managed members from input parsed by a trusted adapter. */
13
12
  export const compareManagedMembersEvidenceValidated = (input) => {
14
13
  const operation = "compare_managed_members";
15
14
  try {
16
15
  const left = parseManagedMemberEvidence(input.left);
17
16
  const right = parseManagedMemberEvidence(input.right);
18
- const result = compareManagedMembers({ evidenceId: left.evidenceId, result: left.result }, { evidenceId: right.evidenceId, result: right.result }, input.limits);
17
+ const result = compareManagedMembers({ evidenceId: left.evidenceId, result: left.result }, { evidenceId: right.evidenceId, result: right.result });
19
18
  return ok(createManagedMemberComparisonEvidence(input, result));
20
19
  }
21
20
  catch (cause) {
@@ -34,24 +33,15 @@ export const compareManagedMemberPaths = async (input) => {
34
33
  return err(new AnalysisInputError(operation, { cause: leftTarget.error }));
35
34
  if (!rightTarget.ok)
36
35
  return err(new AnalysisInputError(operation, { cause: rightTarget.error }));
37
- const [leftStat, rightStat] = await Promise.all([
38
- stat(leftTarget.value.path),
39
- stat(rightTarget.value.path),
40
- ]);
41
- if (leftStat.size > input.memberLimits.maxFileBytes ||
42
- rightStat.size > input.memberLimits.maxFileBytes)
43
- return err(new AnalysisInputError(operation, {
44
- cause: new RangeError(`Managed comparison input exceeds max_file_bytes ${String(input.memberLimits.maxFileBytes)}`),
45
- }));
46
36
  const [leftBytes, rightBytes] = await Promise.all([
47
37
  readFile(leftTarget.value.path),
48
38
  readFile(rightTarget.value.path),
49
39
  ]);
50
- const leftInspection = inspectManagedMembersBytes(leftBytes, leftTarget.value, input.memberLimits);
51
- const rightInspection = inspectManagedMembersBytes(rightBytes, rightTarget.value, input.memberLimits);
40
+ const leftInspection = inspectManagedMembersBytes(leftBytes, leftTarget.value);
41
+ const rightInspection = inspectManagedMembersBytes(rightBytes, rightTarget.value);
52
42
  const leftEvidence = createEvidence(leftTarget.value, MANAGED_STATIC_PROVIDER, {
53
43
  operation: "inspect_managed_members",
54
- parameters: memberLimitParameters(input.memberLimits),
44
+ parameters: {},
55
45
  result: jsonValueSchema.parse(leftInspection),
56
46
  rawResult: null,
57
47
  limitations: leftInspection.limitations,
@@ -59,7 +49,7 @@ export const compareManagedMemberPaths = async (input) => {
59
49
  });
60
50
  const rightEvidence = createEvidence(rightTarget.value, MANAGED_STATIC_PROVIDER, {
61
51
  operation: "inspect_managed_members",
62
- parameters: memberLimitParameters(input.memberLimits),
52
+ parameters: {},
63
53
  result: jsonValueSchema.parse(rightInspection),
64
54
  rawResult: null,
65
55
  limitations: rightInspection.limitations,
@@ -71,24 +61,23 @@ export const compareManagedMemberPaths = async (input) => {
71
61
  }, {
72
62
  evidenceId: rightEvidence.evidence_id,
73
63
  result: rightInspection,
74
- }, input.comparisonLimits);
64
+ });
75
65
  return ok(createManagedMemberComparisonEvidence({
76
66
  left: leftEvidence,
77
67
  right: rightEvidence,
78
- limits: input.comparisonLimits,
79
68
  }, result));
80
69
  }
81
70
  catch (cause) {
82
71
  return workflowFailure(operation, cause);
83
72
  }
84
73
  };
74
+ /** ECMA-335 representable limits for path-based member comparison. */
85
75
  const createManagedMemberComparisonEvidence = (parameters, result) => createEvidence(undefined, MANAGED_WORKFLOW_PROVIDER, {
86
- predicateType: "rea.managed-member-comparison/v1",
76
+ predicateType: "rea.managed-member-comparison",
87
77
  operation: "compare_managed_members",
88
78
  parameters: {
89
79
  left_evidence_id: parameters.left.evidence_id,
90
80
  right_evidence_id: parameters.right.evidence_id,
91
- limits: jsonValueSchema.parse(parameters.limits),
92
81
  },
93
82
  result: jsonValueSchema.parse(result),
94
83
  rawResult: null,
@@ -98,25 +87,6 @@ const createManagedMemberComparisonEvidence = (parameters, result) => createEvid
98
87
  limitations: result.limitations,
99
88
  evidenceLinks: result.evidence_links,
100
89
  });
101
- const memberLimitParameters = (limits) => ({
102
- type_offset: limits.typeOffset,
103
- type_limit: limits.typeLimit,
104
- method_offset: limits.methodOffset,
105
- method_limit: limits.methodLimit,
106
- field_offset: limits.fieldOffset,
107
- field_limit: limits.fieldLimit,
108
- member_ref_offset: limits.memberRefOffset,
109
- member_ref_limit: limits.memberRefLimit,
110
- edge_offset: limits.edgeOffset,
111
- edge_limit: limits.edgeLimit,
112
- instruction_anchor_limit: limits.instructionAnchorLimit,
113
- max_file_bytes: limits.maxFileBytes,
114
- max_metadata_bytes: limits.maxMetadataBytes,
115
- max_table_rows: limits.maxTableRows,
116
- max_heap_item_bytes: limits.maxHeapItemBytes,
117
- max_method_body_bytes: limits.maxMethodBodyBytes,
118
- max_method_instructions: limits.maxMethodInstructions,
119
- });
120
90
  const workflowFailure = (operation, cause) => err(cause instanceof z.ZodError || cause instanceof TypeError
121
91
  ? new AnalysisInputError(operation, { cause })
122
92
  : new AnalysisProtocolError("Managed member comparison produced an invalid result", { cause }));
@@ -22,12 +22,11 @@ export const verifyManagedNativeBoundariesEvidence = (rawInput) => {
22
22
  }
23
23
  };
24
24
  const createManagedNativeVerificationEvidence = (input, result) => createEvidence(undefined, MANAGED_WORKFLOW_PROVIDER, {
25
- predicateType: "rea.managed-native-verification/v1",
25
+ predicateType: "rea.managed-native-verification",
26
26
  operation: OPERATION,
27
27
  parameters: {
28
28
  managed_boundaries_evidence_id: input.managed_boundaries.evidence_id,
29
29
  native_evidence_ids: jsonValueSchema.parse(input.native_observations.map(({ evidence_id: id }) => id)),
30
- limits: jsonValueSchema.parse(input.limits),
31
30
  },
32
31
  result: jsonValueSchema.parse(result),
33
32
  rawResult: null,
@@ -30,7 +30,7 @@ const createManagedReconstructionEvidence = (input, result) => createEvidence({
30
30
  sha256: result.static_observation.artifact_sha256,
31
31
  format: "pe",
32
32
  }, MANAGED_WORKFLOW_PROVIDER, {
33
- predicateType: "rea.managed-reconstruction-import/v1",
33
+ predicateType: "rea.managed-reconstruction-import",
34
34
  operation: OPERATION,
35
35
  parameters: {
36
36
  static_members_evidence_id: input.static_members.evidence_id,
@@ -1,4 +1,5 @@
1
- import { AnalysisCapabilityUnavailableError, AnalysisInputError, AnalysisProtocolError, PermissionRequiredError, } from "../domain/errors.js";
1
+ import { projectPermissionFailure } from "./PermissionFailure.js";
2
+ import { AnalysisCapabilityUnavailableError, AnalysisInputError, AnalysisProtocolError, } from "../domain/errors.js";
2
3
  import { createEvidence, parseEvidence, } from "../domain/evidence.js";
3
4
  import { jsonValueSchema } from "../domain/jsonValue.js";
4
5
  import { managedRuntimeCorrelationInputSchema, planManagedRuntimeCorrelation, } from "../domain/managedRuntimeCorrelation.js";
@@ -40,13 +41,9 @@ export const planManagedRuntimeCorrelationEvidenceValidated = async (dependencie
40
41
  network: "none",
41
42
  mount: false,
42
43
  operation_identity: operationIdentity(input, staticEvidence),
43
- }, "read", { restartRequired: true });
44
+ }, "read", { remediation: "restart" });
44
45
  if (!authorized.ok)
45
- return err(authorized.error instanceof PermissionRequiredError
46
- ? authorized.error
47
- : new AnalysisProtocolError(authorized.error.message, {
48
- cause: authorized.error,
49
- }));
46
+ return err(projectPermissionFailure(authorized.error));
50
47
  try {
51
48
  const result = planManagedRuntimeCorrelation(input, policy.executablePath, authorized.value.grant_id);
52
49
  return ok(createEvidence({
@@ -54,7 +51,7 @@ export const planManagedRuntimeCorrelationEvidenceValidated = async (dependencie
54
51
  sha256: result.static_observation.artifact_sha256,
55
52
  format: "pe",
56
53
  }, MANAGED_WORKFLOW_PROVIDER, {
57
- predicateType: "rea.managed-runtime-correlation-plan/v1",
54
+ predicateType: "rea.managed-runtime-correlation-plan",
58
55
  operation: OPERATION,
59
56
  parameters: {
60
57
  static_members_evidence_id: staticEvidence.evidence_id,
@@ -17,7 +17,6 @@ export const projectNativeApiInspection = (dossier) => {
17
17
  ? availableResidualUnknowns(boundary)
18
18
  : boundary.residual_unknowns;
19
19
  return nativeApiInspectionResultSchema.parse({
20
- schema_version: 1,
21
20
  procedure: {
22
21
  address: dossier.procedure.address,
23
22
  name: dossier.procedure.name,
@@ -58,13 +57,9 @@ export const projectNativeApiInspection = (dossier) => {
58
57
  };
59
58
  const availableResidualUnknowns = (boundary) => {
60
59
  const unknowns = [];
61
- if (boundary.parameters_truncated)
62
- unknowns.push("Which additional parameters were omitted by the native API boundary limit?");
63
- if (boundary.jump_tables_truncated)
64
- unknowns.push("Which additional jump tables were omitted by the native API boundary limit?");
65
60
  for (const table of boundary.jump_tables) {
66
- if (table.data_sources_truncated || table.mappings_truncated)
67
- unknowns.push(`Which additional data sources or targets were omitted for the jump table dispatched at ${table.dispatch_address}?`);
61
+ if (table.mappings.length === 0)
62
+ unknowns.push(`Which case values and targets belong to the dispatch at ${table.dispatch_address}?`);
68
63
  if (table.data_sources.length === 0)
69
64
  unknowns.push(`What backing data address produced the jump table dispatched at ${table.dispatch_address}?`);
70
65
  if (table.data_sources.some(({ entry_count: count, entry_size_bytes: size }) => count === null || size === null))