rea-agents 3.0.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 (628) hide show
  1. package/README.md +83 -108
  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/AnalysisContextQueries.js +21 -9
  6. package/dist/application/AnalysisSnapshotCache.js +0 -1
  7. package/dist/application/AnalysisSnapshotFiles.js +7 -7
  8. package/dist/application/AndroidApplicationService.js +1 -1
  9. package/dist/application/AppleApplicationService.js +1 -1
  10. package/dist/application/ArtifactExtraction.js +35 -54
  11. package/dist/application/ArtifactExtractionDestination.js +17 -0
  12. package/dist/application/ArtifactGraphConstruction.js +2 -17
  13. package/dist/application/ArtifactInventory/classify.js +2 -6
  14. package/dist/application/ArtifactInventory/hash.js +2 -20
  15. package/dist/application/ArtifactInventory/policy.js +17 -0
  16. package/dist/application/ArtifactInventory/reader.js +1 -4
  17. package/dist/application/ArtifactInventory/scanCanonical.js +8 -15
  18. package/dist/application/ArtifactInventory/scanReader.js +76 -58
  19. package/dist/application/ArtifactInventory/types.js +1 -5
  20. package/dist/application/ArtifactInventory.js +6 -14
  21. package/dist/application/AuthorizedArtifactInventory.js +3 -13
  22. package/dist/application/BinarySession.js +54 -28
  23. package/dist/application/BinarySessionComposition.js +0 -11
  24. package/dist/application/BinarySessionOpen.js +2 -1
  25. package/dist/application/BinarySessionRecords.js +24 -86
  26. package/dist/application/BinarySessionStatus.js +16 -21
  27. package/dist/application/BinaryTargetResolver.js +216 -0
  28. package/dist/application/BrowserEvidence.js +39 -57
  29. package/dist/application/BrowserObservationService.js +3 -6
  30. package/dist/application/BrowserScenarioCaptureService.js +3 -6
  31. package/dist/application/BrowserScenarioEvidence.js +3 -3
  32. package/dist/application/CallPathTracing.js +2 -36
  33. package/dist/application/CapabilityClientRequirements.js +26 -0
  34. package/dist/application/CapabilityInventory.js +143 -77
  35. package/dist/application/ClientConfigurationDocument.js +27 -0
  36. package/dist/application/ClientRegistrationStatus.js +16 -13
  37. package/dist/application/CommandShimReplay.js +14 -1
  38. package/dist/application/DirectAnalysis.js +22 -46
  39. package/dist/application/DirectAnalysisStatus.js +5 -61
  40. package/dist/application/Doctor.js +11 -32
  41. package/dist/application/DoctorDiagnostics.js +1 -2
  42. package/dist/application/DoctorScope.js +1 -1
  43. package/dist/application/ElectronActiveEvidence.js +50 -0
  44. package/dist/application/ElectronActiveObservationPort.js +1 -0
  45. package/dist/application/ElectronActiveObservationService.js +78 -0
  46. package/dist/application/ElectronBoundaryAnalysis.js +7 -8
  47. package/dist/application/ElectronBoundaryGraphContext.js +1 -1
  48. package/dist/application/ElectronBoundaryGraphIpc.js +3 -3
  49. package/dist/application/ElectronBoundaryGraphNative.js +1 -2
  50. package/dist/application/ElectronBoundaryGraphWindows.js +6 -8
  51. package/dist/application/ElectronEvidence.js +4 -7
  52. package/dist/application/ElectronObservationService.js +5 -9
  53. package/dist/application/EnhancedLiteralTracing.js +42 -65
  54. package/dist/application/EnhancedTools.js +98 -64
  55. package/dist/application/EvidenceBundleCommands.js +16 -12
  56. package/dist/application/EvidenceBundleFiles.js +9 -15
  57. package/dist/application/EvidenceLedger.js +14 -42
  58. package/dist/application/FilesystemSnapshot.js +2 -3
  59. package/dist/application/InterfaceBuilderAnalysis.js +266 -0
  60. package/dist/application/InventoryProjectionEvidence.js +4 -2
  61. package/dist/application/InvestigationProviders.js +1 -1
  62. package/dist/application/JavaScriptApplicationEvidence.js +2 -5
  63. package/dist/application/JavaScriptApplicationEvidenceGraph.js +6 -10
  64. package/dist/application/JavaScriptApplicationService.js +6 -29
  65. package/dist/application/JavaScriptApplicationWorkflowEvidence.js +5 -5
  66. package/dist/application/JavaScriptApplicationWorkflowService.js +0 -8
  67. package/dist/application/JavaScriptArtifactAnalysis.js +38 -127
  68. package/dist/application/JavaScriptArtifactFiles.js +67 -107
  69. package/dist/application/JavaScriptArtifactGraphAccumulator.js +0 -7
  70. package/dist/application/JavaScriptArtifactGraphBuilder.js +7 -58
  71. package/dist/application/JavaScriptArtifactGraphBundlers.js +1 -6
  72. package/dist/application/JavaScriptArtifactGraphContext.js +12 -39
  73. package/dist/application/JavaScriptArtifactGraphDocuments.js +4 -11
  74. package/dist/application/JavaScriptArtifactGraphEvidence.js +0 -14
  75. package/dist/application/JavaScriptArtifactGraphFindings.js +3 -3
  76. package/dist/application/JavaScriptArtifactGraphStructure.js +16 -17
  77. package/dist/application/JavaScriptArtifactPathResolution.js +61 -49
  78. package/dist/application/JavaScriptArtifactReconstruction.js +5 -10
  79. package/dist/application/JavaScriptArtifactReconstructionInput.js +2 -14
  80. package/dist/application/JavaScriptJsonModules.js +2 -2
  81. package/dist/application/JavaScriptModuleRelationships.js +22 -27
  82. package/dist/application/JavaScriptReplayPermission.js +1 -1
  83. package/dist/application/JavaScriptReplayPlanning.js +9 -3
  84. package/dist/application/JavaScriptReplayService.js +29 -47
  85. package/dist/application/JavaScriptReturnShapeProjection.js +12 -42
  86. package/dist/application/JavaScriptRuntimeObservationEvidence.js +7 -8
  87. package/dist/application/JavaScriptRuntimeObservationService.js +4 -8
  88. package/dist/application/JavaScriptRuntimeReconciliationEvidence.js +2 -3
  89. package/dist/application/JavaScriptSemanticGraphBuilder.js +11 -41
  90. package/dist/application/JavaScriptSemanticGraphConstruction.js +5 -29
  91. package/dist/application/JavaScriptSemanticGraphEvidence.js +1 -1
  92. package/dist/application/JavaScriptSemanticGraphFingerprintProjection.js +1 -1
  93. package/dist/application/JavaScriptSemanticGraphFlowProjection.js +0 -13
  94. package/dist/application/JavaScriptSemanticGraphProjection.js +1 -3
  95. package/dist/application/JavaScriptSemanticTraceService.js +1 -10
  96. package/dist/application/JsonFiles.js +79 -0
  97. package/dist/application/LinuxHopper.js +11 -9
  98. package/dist/application/LoopbackReplay.js +26 -23
  99. package/dist/application/LoopbackReplayRecorder.js +29 -1
  100. package/dist/application/ManagedApplicationGraphService.js +1 -2
  101. package/dist/application/ManagedMemberComparisonService.js +11 -41
  102. package/dist/application/ManagedNativeVerificationService.js +1 -2
  103. package/dist/application/ManagedReconstructionService.js +1 -1
  104. package/dist/application/ManagedRuntimeCorrelationService.js +14 -13
  105. package/dist/application/NativeApiInspection.js +2 -7
  106. package/dist/application/NativeUiActionTrace.js +394 -0
  107. package/dist/application/NodeRuntimeCharacterizationService.js +11 -16
  108. package/dist/application/PermissionAuthority.js +15 -7
  109. package/dist/application/PermissionFailure.js +5 -0
  110. package/dist/application/ProcessCaptureAuthority.js +5 -7
  111. package/dist/application/ProcessCaptureJournal.js +3 -2
  112. package/dist/application/ProcessCaptureLifecycle.js +10 -12
  113. package/dist/application/ProcessCheckpoints.js +29 -11
  114. package/dist/application/ProcessCli.js +8 -17
  115. package/dist/application/ProcessEvidence.js +5 -7
  116. package/dist/application/ProcessHarness.js +60 -20
  117. package/dist/application/ProcessNormalization.js +2 -1
  118. package/dist/application/ProcessReactiveCoordinator.js +2 -4
  119. package/dist/application/ProcessReactiveEffects.js +9 -3
  120. package/dist/application/ProcessReactiveHarness.js +13 -7
  121. package/dist/application/ProcessSampling.js +2 -4
  122. package/dist/application/ProcessTimer.js +39 -0
  123. package/dist/application/ProjectPermissionStore.js +39 -95
  124. package/dist/application/RealHopperAssertions.js +20 -66
  125. package/dist/application/ReconstructionCoverageService.js +12 -58
  126. package/dist/application/ReconstructionObligationAuthority.js +2 -2
  127. package/dist/application/ReconstructionObligationCandidates.js +4 -4
  128. package/dist/application/ReconstructionObligationLedgerEvaluation.js +8 -15
  129. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -7
  130. package/dist/application/ReconstructionObligationLedgerService.js +19 -38
  131. package/dist/application/ReferenceSourceImport.js +21 -47
  132. package/dist/application/ReferenceSourceImportEntries.js +2 -4
  133. package/dist/application/ReferenceSourceImportPolicy.js +5 -32
  134. package/dist/application/ReferenceSourceImportTypes.js +0 -16
  135. package/dist/application/RuntimeExecutableDiagnostics.js +55 -29
  136. package/dist/application/SessionProviderRouter.js +2 -2
  137. package/dist/application/Setup.js +1 -3
  138. package/dist/application/SetupClientConfiguration.js +22 -88
  139. package/dist/application/SetupRegistrationEnvironment.js +0 -7
  140. package/dist/application/StoreFileLock.js +119 -0
  141. package/dist/application/TerminalRenderer.js +2 -3
  142. package/dist/application/Uninstall.js +9 -14
  143. package/dist/application/UnknownEvidence.js +1 -1
  144. package/dist/application/WindowsCapabilities.js +5 -4
  145. package/dist/artifacts/ArtifactPaths.js +2 -5
  146. package/dist/artifacts/ArtifactProvider.js +43 -67
  147. package/dist/artifacts/DirectoryArtifactReader.js +13 -8
  148. package/dist/artifacts/MachOSliceArtifactReader.js +1 -5
  149. package/dist/artifacts/NativeDmgArtifactReader.js +11 -11
  150. package/dist/artifacts/NibArchive.js +269 -0
  151. package/dist/artifacts/SafeOutputTree.js +21 -31
  152. package/dist/browser/BrowserProcessStartup.js +1 -2
  153. package/dist/browser/CdpAuthorizedMainFrame.js +16 -0
  154. package/dist/browser/CdpBrowserProvider.js +3 -13
  155. package/dist/browser/CdpCanonicalJsonDigest.js +9 -0
  156. package/dist/browser/CdpCaptureDocuments.js +28 -76
  157. package/dist/browser/CdpCaptureEventBodyShapes.js +13 -33
  158. package/dist/browser/CdpCaptureEventHandlers.js +22 -87
  159. package/dist/browser/CdpCaptureEvents.js +2 -8
  160. package/dist/browser/CdpCaptureStorage.js +9 -20
  161. package/dist/browser/CdpCaptureStorageFingerprints.js +85 -95
  162. package/dist/browser/CdpCaptureValues.js +21 -21
  163. package/dist/browser/CdpConnection.js +10 -25
  164. package/dist/browser/CdpElectronInspection.js +29 -51
  165. package/dist/browser/CdpElectronProvider.js +10 -35
  166. package/dist/browser/CdpElectronScriptEvents.js +8 -16
  167. package/dist/browser/CdpElectronScripts.js +6 -35
  168. package/dist/browser/CdpElectronWorkers.js +6 -10
  169. package/dist/browser/CdpEndpoint.js +25 -41
  170. package/dist/browser/CdpObservationSession.js +14 -26
  171. package/dist/browser/CdpPageCapture.js +34 -48
  172. package/dist/browser/CdpPageCaptureScripts.js +1 -19
  173. package/dist/browser/CdpPageCaptureWorkers.js +6 -10
  174. package/dist/browser/CdpSafeMetadata.js +19 -22
  175. package/dist/browser/CdpScreenshot.js +3 -5
  176. package/dist/browser/CdpTargetSession.js +1 -2
  177. package/dist/browser/CdpWebMcpDiscovery.js +13 -22
  178. package/dist/browser/ElectronFileScope.js +8 -19
  179. package/dist/browser/JavaScriptRuntimeScope.js +10 -10
  180. package/dist/browser/PlaywrightBrowserScenarioProvider.js +31 -64
  181. package/dist/browser/PlaywrightElectronActiveActions.js +309 -0
  182. package/dist/browser/PlaywrightElectronActiveProvider.js +274 -0
  183. package/dist/browser/PlaywrightExecutionBoundary.js +16 -5
  184. package/dist/browser/PlaywrightScenarioActions.js +3 -7
  185. package/dist/browser/PlaywrightScenarioArtifacts.js +23 -92
  186. package/dist/browser/PlaywrightScenarioBrowser.js +7 -9
  187. package/dist/browser/PlaywrightScenarioEvents.js +45 -94
  188. package/dist/browser/PlaywrightScenarioSession.js +18 -34
  189. package/dist/browser/PngVisualDiff.js +22 -14
  190. package/dist/browser/SensitiveTextCapture.js +1 -18
  191. package/dist/browser/V8InspectorCaptureProjection.js +7 -7
  192. package/dist/browser/V8InspectorEndpoint.js +12 -14
  193. package/dist/browser/V8InspectorProvider.js +20 -61
  194. package/dist/browser/WebSourceMapFetcher.js +56 -176
  195. package/dist/catalogIdentity.js +12 -60
  196. package/dist/cli/artifactCommands.js +49 -77
  197. package/dist/cli/coreAnalysisCommands.js +83 -133
  198. package/dist/cli/javascriptApplicationAnalysis.js +1 -9
  199. package/dist/cli/managedCommands.js +6 -271
  200. package/dist/cli/setupCommands.js +3 -12
  201. package/dist/cli/utilityCommands.js +7 -41
  202. package/dist/cli.js +0 -2
  203. package/dist/cliApplicationCommands.js +44 -114
  204. package/dist/cliBrowserAdvancedCommands.js +12 -102
  205. package/dist/cliBrowserCommands.js +19 -124
  206. package/dist/cliBrowserContext.js +30 -0
  207. package/dist/cliCommandNames.js +5 -5
  208. package/dist/cliElectronCommands.js +49 -71
  209. package/dist/cliEvidenceCommands.js +8 -77
  210. package/dist/cliJavaScriptRuntimeCommands.js +18 -92
  211. package/dist/cliJsonInput.js +4 -14
  212. package/dist/cliObservationOptions.js +11 -92
  213. package/dist/cliPolicyCommands.js +2 -16
  214. package/dist/cliProcessCommands.js +3 -3
  215. package/dist/cliSetup.js +0 -13
  216. package/dist/config/browserScenario.js +77 -0
  217. package/dist/config/electronAutomation.js +35 -0
  218. package/dist/config/environment.js +6 -9
  219. package/dist/config/javascriptReplay.js +41 -0
  220. package/dist/config/managedRuntime.js +25 -0
  221. package/dist/config/parseConfig.js +56 -232
  222. package/dist/config/parsers.js +16 -28
  223. package/dist/config/passiveObservation.js +87 -0
  224. package/dist/config/permissions.js +0 -7
  225. package/dist/config/processCapture.js +47 -0
  226. package/dist/contracts/analysisSearchContract.js +2 -5
  227. package/dist/contracts/applicationToolContracts.js +58 -114
  228. package/dist/contracts/applicationWorkflowInputContracts.js +29 -114
  229. package/dist/contracts/artifactComparisonExample.js +58 -60
  230. package/dist/contracts/artifactToolContracts.js +37 -91
  231. package/dist/contracts/browserScenarioToolContracts.js +6 -51
  232. package/dist/contracts/browserToolContracts.js +10 -75
  233. package/dist/contracts/electronToolContracts.js +27 -98
  234. package/dist/contracts/enhancedInputs.js +31 -78
  235. package/dist/contracts/errorSchemas.js +0 -1
  236. package/dist/contracts/functionComparisonExample.js +10 -24
  237. package/dist/contracts/functionInstructionContract.js +1 -3
  238. package/dist/contracts/functionWorkflowToolContracts.js +4 -5
  239. package/dist/contracts/hopperMemoryContracts.js +3 -3
  240. package/dist/contracts/investigationExamples.js +14 -11
  241. package/dist/contracts/javascriptApplicationWorkflowExamples.js +12 -19
  242. package/dist/contracts/javascriptRuntimeObservationToolContracts.js +2 -20
  243. package/dist/contracts/javascriptRuntimeReconciliationExample.js +45 -12
  244. package/dist/contracts/managedToolContracts.js +10 -104
  245. package/dist/contracts/managedWorkflowExamples.js +77 -125
  246. package/dist/contracts/managedWorkflowToolContracts.js +51 -74
  247. package/dist/contracts/nativeToolContracts.js +9 -14
  248. package/dist/contracts/processCaptureExample.js +2 -69
  249. package/dist/contracts/promptContracts.js +49 -67
  250. package/dist/contracts/providerSelection.js +0 -1
  251. package/dist/contracts/reconstructionReadinessExample.js +1 -6
  252. package/dist/contracts/sessionStatusContract.js +1 -17
  253. package/dist/contracts/sessionToolSchemas.js +52 -0
  254. package/dist/contracts/toolContractExamples.js +11 -10
  255. package/dist/contracts/toolContractHelpers.js +19 -0
  256. package/dist/contracts/toolContracts.js +60 -143
  257. package/dist/contracts/toolEffects.js +16 -9
  258. package/dist/contracts/toolOutputSchemaGroups.js +47 -86
  259. package/dist/contracts/toolOutputSchemaPrimitives.js +72 -62
  260. package/dist/contracts/toolSchemaMetadata.js +117 -0
  261. package/dist/contracts/unknownContractExamples.js +0 -2
  262. package/dist/doctorRuntime.js +1 -1
  263. package/dist/domain/analysisErrorPresentation.js +46 -54
  264. package/dist/domain/analysisErrorProjection.js +28 -37
  265. package/dist/domain/analysisProfile.js +3 -31
  266. package/dist/domain/analysisSnapshot.js +3 -12
  267. package/dist/domain/androidApplication.js +15 -52
  268. package/dist/domain/appleApplication.js +24 -65
  269. package/dist/domain/artifactComparison.js +11 -29
  270. package/dist/domain/artifactGraph.js +14 -44
  271. package/dist/domain/artifactInspection.js +38 -69
  272. package/dist/domain/artifactInventoryEvidence.js +27 -21
  273. package/dist/domain/binaryTarget.js +2 -219
  274. package/dist/domain/binaryTargetTypes.js +1 -0
  275. package/dist/domain/browserCaptureComparison.js +35 -60
  276. package/dist/domain/browserObservation.js +45 -197
  277. package/dist/domain/browserObservationSchemas.js +5 -23
  278. package/dist/domain/browserScenario.js +11 -14
  279. package/dist/domain/browserScenarioCapture.js +11 -12
  280. package/dist/domain/browserScenarioCaptureValues.js +146 -84
  281. package/dist/domain/browserScenarioDiff.js +2 -59
  282. package/dist/domain/browserScenarioDiffEvidence.js +51 -0
  283. package/dist/domain/browserScenarioDiffValues.js +21 -38
  284. package/dist/domain/browserScenarioValues.js +80 -109
  285. package/dist/domain/browserSession.js +4 -7
  286. package/dist/domain/bundleComparison.js +6 -32
  287. package/dist/domain/bytecodeProvider.js +53 -54
  288. package/dist/domain/callPath.js +50 -169
  289. package/dist/domain/callPathSchemas.js +79 -0
  290. package/dist/domain/changedBehavior.js +34 -60
  291. package/dist/domain/completionLedgerGeneration.js +8 -14
  292. package/dist/domain/conformancePackage.js +126 -97
  293. package/dist/domain/conformanceReplay.js +39 -11
  294. package/dist/domain/conformanceTrustGate.js +174 -30
  295. package/dist/domain/customProtocolCapture.js +4 -4
  296. package/dist/domain/electronActiveObservation.js +244 -0
  297. package/dist/domain/electronObservation.js +21 -83
  298. package/dist/domain/electronStaticAnalysisBrowser.js +36 -46
  299. package/dist/domain/electronStaticAnalysisIpc.js +38 -14
  300. package/dist/domain/electronStaticAnalysisNative.js +1 -8
  301. package/dist/domain/electronStaticAnalysisValues.js +14 -18
  302. package/dist/domain/errors.js +33 -54
  303. package/dist/domain/eventProcessTree.js +101 -90
  304. package/dist/domain/evidence.js +2 -10
  305. package/dist/domain/evidenceBundle.js +3 -5
  306. package/dist/domain/evidenceCompletionLedger.js +6 -8
  307. package/dist/domain/functionComparison.js +4 -14
  308. package/dist/domain/functionComparisonNormalization.js +8 -8
  309. package/dist/domain/functionComparisonResults.js +25 -15
  310. package/dist/domain/functionComparisonSchemas.js +49 -33
  311. package/dist/domain/functionDossierEvidence.js +31 -151
  312. package/dist/domain/hopperStartupFailure.js +1 -1
  313. package/dist/domain/hopperValues.js +17 -141
  314. package/dist/domain/inputIssueProjection.js +4 -1
  315. package/dist/domain/interfaceBuilderGraph.js +654 -0
  316. package/dist/domain/javascriptApplicationAnalysis.js +8 -112
  317. package/dist/domain/javascriptApplicationChangeGraph.js +22 -82
  318. package/dist/domain/javascriptApplicationEvidenceSchemas.js +59 -47
  319. package/dist/domain/javascriptApplicationGraph.js +3 -13
  320. package/dist/domain/javascriptApplicationGraphSchemas.js +12 -34
  321. package/dist/domain/javascriptApplicationVersionComparison.js +26 -30
  322. package/dist/domain/javascriptApplicationVersionComparisonSchemas.js +123 -68
  323. package/dist/domain/javascriptApplicationVersionItems.js +120 -53
  324. package/dist/domain/javascriptApplicationVersionKeys.js +24 -11
  325. package/dist/domain/javascriptAstFingerprint.js +25 -58
  326. package/dist/domain/javascriptAstValues.js +9 -0
  327. package/dist/domain/javascriptExportInstrumentation.js +2 -4
  328. package/dist/domain/javascriptExportShapeComparison.js +6 -7
  329. package/dist/domain/javascriptExportShapeComparisonSchemas.js +70 -77
  330. package/dist/domain/javascriptExportShapeSelection.js +17 -19
  331. package/dist/domain/javascriptFeatureSeed.js +20 -12
  332. package/dist/domain/javascriptFeatureTrace.js +13 -67
  333. package/dist/domain/javascriptFeatureTraceSchemas.js +24 -52
  334. package/dist/domain/javascriptFeatureTraversal.js +1 -44
  335. package/dist/domain/javascriptNativeHandoff.js +1 -1
  336. package/dist/domain/javascriptReplay.js +100 -101
  337. package/dist/domain/javascriptRuntimeLoadState.js +3 -8
  338. package/dist/domain/javascriptRuntimeObservation.js +43 -103
  339. package/dist/domain/javascriptRuntimeReconciliation.js +1 -3
  340. package/dist/domain/javascriptRuntimeReconciliationActive.js +80 -0
  341. package/dist/domain/javascriptRuntimeReconciliationGraph.js +21 -33
  342. package/dist/domain/javascriptRuntimeReconciliationMatching.js +75 -61
  343. package/dist/domain/javascriptRuntimeReconciliationParsing.js +21 -46
  344. package/dist/domain/javascriptRuntimeReconciliationResult.js +25 -19
  345. package/dist/domain/javascriptRuntimeReconciliationRuntime.js +8 -12
  346. package/dist/domain/javascriptRuntimeReconciliationSchemas.js +34 -49
  347. package/dist/domain/javascriptRuntimeStaticCandidates.js +3 -3
  348. package/dist/domain/javascriptSemanticAnalysis.js +12 -45
  349. package/dist/domain/javascriptSemanticAsyncEffects.js +1 -9
  350. package/dist/domain/javascriptSemanticCallResolution.js +6 -16
  351. package/dist/domain/javascriptSemanticCalls.js +5 -32
  352. package/dist/domain/javascriptSemanticChildProcesses.js +1 -11
  353. package/dist/domain/javascriptSemanticCoverage.js +11 -0
  354. package/dist/domain/javascriptSemanticDataEffectHelpers.js +1 -8
  355. package/dist/domain/javascriptSemanticDataEffects.js +1 -11
  356. package/dist/domain/javascriptSemanticFingerprints.js +3 -5
  357. package/dist/domain/javascriptSemanticGraphSchemas.js +25 -51
  358. package/dist/domain/javascriptSemanticGraphSerialization.js +2 -13
  359. package/dist/domain/javascriptSemanticIr.js +1 -29
  360. package/dist/domain/javascriptSemanticObjects.js +1 -5
  361. package/dist/domain/javascriptSemanticPrimitives.js +2 -9
  362. package/dist/domain/javascriptSemanticProjection.js +0 -18
  363. package/dist/domain/javascriptSemanticPromises.js +9 -16
  364. package/dist/domain/javascriptSemanticProvenance.js +16 -19
  365. package/dist/domain/javascriptSemanticQuery.js +17 -139
  366. package/dist/domain/javascriptSemanticQueryAssessment.js +9 -37
  367. package/dist/domain/javascriptSemanticQueryIdentity.js +2 -23
  368. package/dist/domain/javascriptSemanticQuerySchemas.js +14 -107
  369. package/dist/domain/javascriptSemanticResources.js +1 -6
  370. package/dist/domain/javascriptSemanticReturns.js +10 -27
  371. package/dist/domain/javascriptSemanticValueTypes.js +1 -0
  372. package/dist/domain/javascriptSemanticValues.js +44 -62
  373. package/dist/domain/javascriptStaticAnalysis.js +21 -43
  374. package/dist/domain/javascriptStaticAnalysisBundler.js +34 -93
  375. package/dist/domain/javascriptStaticAnalysisCalls.js +17 -16
  376. package/dist/domain/javascriptStaticAnalysisFindings.js +3 -19
  377. package/dist/domain/javascriptStaticAnalysisHelpers.js +47 -88
  378. package/dist/domain/javascriptStaticAnalysisState.js +1 -5
  379. package/dist/domain/javascriptStaticAnalysisTypes.js +1 -0
  380. package/dist/domain/jsonShape.js +7 -33
  381. package/dist/domain/localPath.js +7 -0
  382. package/dist/domain/managedApplicationGraph.js +9 -41
  383. package/dist/domain/managedApplicationGraphCoverage.js +24 -156
  384. package/dist/domain/managedApplicationGraphNodes.js +10 -13
  385. package/dist/domain/managedArtifact.js +14 -27
  386. package/dist/domain/managedMemberComparison.js +90 -92
  387. package/dist/domain/managedMemberComparisonCoverage.js +11 -33
  388. package/dist/domain/managedMemberComparisonItems.js +221 -0
  389. package/dist/domain/managedMemberComparisonMatch.js +8 -208
  390. package/dist/domain/managedNativeVerification.js +3 -6
  391. package/dist/domain/managedNativeVerificationMatch.js +55 -59
  392. package/dist/domain/managedNativeVerificationSchemas.js +83 -47
  393. package/dist/domain/managedReconstruction.js +19 -23
  394. package/dist/domain/managedRuntimeCorrelation.js +6 -9
  395. package/dist/domain/nativeApiBoundary.js +17 -14
  396. package/dist/domain/nativeInspection.js +0 -2
  397. package/dist/domain/nativeInvestigationGraph.js +351 -0
  398. package/dist/domain/nativeValueFlow.js +61 -0
  399. package/dist/domain/nodeRuntimeCharacterization.js +15 -18
  400. package/dist/domain/objcSwiftMetadata.js +254 -0
  401. package/dist/domain/peInspection.js +1 -1
  402. package/dist/domain/permissionPolicy.js +13 -0
  403. package/dist/domain/processCapture.js +76 -113
  404. package/dist/domain/processCaptureExample.js +68 -0
  405. package/dist/domain/processCaptureParsing.js +21 -0
  406. package/dist/domain/processCaptureReactiveSchema.js +68 -0
  407. package/dist/domain/processCaptureReactiveValidation.js +8 -3
  408. package/dist/domain/processCaptureValidation.js +8 -10
  409. package/dist/domain/processComparison.js +12 -16
  410. package/dist/domain/processObservation.js +5 -6
  411. package/dist/domain/processReactiveMatching.js +32 -46
  412. package/dist/domain/processReactiveRuntime.js +4 -8
  413. package/dist/domain/processReactiveScenario.js +28 -94
  414. package/dist/domain/processReactiveScenarioPreflight.js +5 -30
  415. package/dist/domain/processReactiveTransition.js +42 -21
  416. package/dist/domain/processScenario.js +62 -93
  417. package/dist/domain/processTraceComparison.js +0 -7
  418. package/dist/domain/processTraceEvaluation.js +14 -4
  419. package/dist/domain/processTraceSpecification.js +11 -17
  420. package/dist/domain/protocolCapture.js +11 -9
  421. package/dist/domain/reconstructionCoverage.js +62 -129
  422. package/dist/domain/reconstructionCoverageEvaluation.js +17 -17
  423. package/dist/domain/reconstructionObligationLedgerSchemas.js +45 -72
  424. package/dist/domain/reconstructionReadiness.js +1 -2
  425. package/dist/domain/reconstructionReadinessSchemas.js +66 -40
  426. package/dist/domain/reconstructionUnknowns.js +3 -3
  427. package/dist/domain/reconstructionVerification.js +13 -47
  428. package/dist/domain/reconstructionVerificationSchemas.js +50 -38
  429. package/dist/domain/referenceSourceGraph.js +53 -61
  430. package/dist/domain/referenceSourceImportParsing.js +3 -7
  431. package/dist/domain/replayMachine.js +19 -31
  432. package/dist/domain/replayMachineRun.js +15 -63
  433. package/dist/domain/replayMachineRuntime.js +46 -44
  434. package/dist/domain/replayMachineValues.js +84 -0
  435. package/dist/domain/residualUnknown.js +25 -30
  436. package/dist/domain/runtimeCharacterization.js +15 -16
  437. package/dist/domain/runtimeIdentification.js +48 -47
  438. package/dist/domain/sourceToBundleComparison.js +11 -87
  439. package/dist/domain/sourceToBundleComparisonSchemas.js +25 -50
  440. package/dist/domain/sourceToBundleSignals.js +11 -16
  441. package/dist/domain/staticRuntimeCorrelation.js +44 -54
  442. package/dist/domain/symbolAnalysis.js +10 -19
  443. package/dist/domain/unicodeCodePointOrder.js +12 -0
  444. package/dist/domain/webBundleAnalysis.js +70 -99
  445. package/dist/domain/webBundleAnalyzer.js +2 -4
  446. package/dist/domain/webBundleAnalyzerAst.js +0 -13
  447. package/dist/domain/webBundleAnalyzerInspection.js +26 -52
  448. package/dist/domain/webBundleAnalyzerResult.js +7 -24
  449. package/dist/domain/webCaptureDiff.js +48 -85
  450. package/dist/domain/webCaptureDiffSchemas.js +86 -0
  451. package/dist/domain/webContentArtifact.js +1 -10
  452. package/dist/domain/webMcpDiscovery.js +3 -14
  453. package/dist/domain/webScreenshot.js +58 -34
  454. package/dist/domain/zipPackageFormat.js +7 -0
  455. package/dist/dotnet/ManagedArtifactInspector.js +17 -50
  456. package/dist/dotnet/ManagedMemberInspector.js +27 -58
  457. package/dist/dotnet/ManagedMemberInspectorCore.js +14 -51
  458. package/dist/dotnet/ManagedMemberInstructionDecoder.js +2 -2
  459. package/dist/dotnet/ManagedMemberRows.js +16 -16
  460. package/dist/dotnet/ManagedMetadataHeaps.js +26 -8
  461. package/dist/dotnet/ManagedMetadataInventory.js +21 -30
  462. package/dist/dotnet/ManagedMetadataInventoryRows.js +57 -63
  463. package/dist/dotnet/ManagedMetadataLayout.js +3 -5
  464. package/dist/dotnet/ManagedMethodBodyReader.js +5 -30
  465. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +19 -49
  466. package/dist/dotnet/ManagedNativeBoundaryInspector.js +13 -42
  467. package/dist/dotnet/ManagedPeReader.js +2 -2
  468. package/dist/dotnet/ManagedStaticProvider.js +13 -71
  469. package/dist/generatedMcpToolCatalog.js +1 -1
  470. package/dist/generatedPackageMetadata.js +1 -1
  471. package/dist/ghidra/GhidraAnalysisProfile.js +3 -8
  472. package/dist/ghidra/GhidraClient.js +5 -13
  473. package/dist/ghidra/GhidraClientStartup.js +1 -1
  474. package/dist/ghidra/GhidraClientWire.js +9 -5
  475. package/dist/ghidra/GhidraDefaults.js +0 -18
  476. package/dist/ghidra/GhidraDiagnostics.js +0 -2
  477. package/dist/ghidra/GhidraDoctor.js +16 -12
  478. package/dist/ghidra/GhidraFunctionValues.js +67 -108
  479. package/dist/ghidra/GhidraInstallation.js +98 -42
  480. package/dist/ghidra/GhidraInventoryValues.js +18 -77
  481. package/dist/ghidra/GhidraLauncher.js +0 -8
  482. package/dist/ghidra/GhidraProvider.js +32 -31
  483. package/dist/ghidra/GhidraProviderCapabilities.js +11 -48
  484. package/dist/ghidra/GhidraRequestQueue.js +6 -30
  485. package/dist/ghidra/GhidraResponseBuffer.js +1 -7
  486. package/dist/ghidra/GhidraSessionValues.js +0 -2
  487. package/dist/ghidra/GhidraSocketConnection.js +1 -1
  488. package/dist/ghidra/GhidraTransport.js +4 -7
  489. package/dist/ghidra/protocol.js +19 -42
  490. package/dist/hopper/BridgeLauncher.js +115 -37
  491. package/dist/hopper/HopperAnalysisProfile.js +3 -5
  492. package/dist/hopper/HopperCleanup.js +11 -9
  493. package/dist/hopper/HopperClient.js +5 -8
  494. package/dist/hopper/HopperProcessDiagnostic.js +2 -2
  495. package/dist/hopper/HopperProvider.js +0 -30
  496. package/dist/hopper/HopperRequestQueue.js +21 -40
  497. package/dist/hopper/HopperResponseStream.js +1 -9
  498. package/dist/hopper/HopperSessionValues.js +3 -2
  499. package/dist/hopper/HopperTargetLease.js +119 -0
  500. package/dist/hopper/LinuxPrivateDisplayDiagnostic.js +24 -31
  501. package/dist/hopper/LinuxPrivateDisplayProbe.js +21 -26
  502. package/dist/hopper/protocol.js +6 -4
  503. package/dist/main/reload.js +1 -9
  504. package/dist/main/shutdown.js +1 -1
  505. package/dist/main/state.js +0 -23
  506. package/dist/main/transport.js +27 -39
  507. package/dist/main.js +17 -15
  508. package/dist/mcpDoctor.js +27 -69
  509. package/dist/native/CommandRunner.js +18 -25
  510. package/dist/native/NativeMacOSProvider.js +13 -38
  511. package/dist/native/NativeMachoInspection.js +1 -1
  512. package/dist/process/BoundedFileBytes.js +17 -0
  513. package/dist/process/ExecFileOutput.js +11 -0
  514. package/dist/process/PendingOperations.js +8 -6
  515. package/dist/process/PrivateRuntimeRoot.js +17 -0
  516. package/dist/process/ProcessOwnership.js +67 -130
  517. package/dist/process/ProcessOwnershipIdentity.js +13 -0
  518. package/dist/process/ProcessOwnershipObservation.js +87 -0
  519. package/dist/process/ProcessOwnershipProcessTree.js +22 -0
  520. package/dist/process/ProviderDeadline.js +8 -12
  521. package/dist/process/ProviderProcess.js +7 -28
  522. package/dist/process/WindowsAuthority.js +32 -0
  523. package/dist/reference/ReferenceSourceReader.js +8 -24
  524. package/dist/reference/ReferenceSourceReaderEntries.js +11 -39
  525. package/dist/reference/ReferenceSourceReaderFile.js +13 -31
  526. package/dist/reference/ReferenceSourceReaderPaths.js +3 -18
  527. package/dist/reference/ReferenceSourceReaderValidate.js +3 -6
  528. package/dist/replay/JavaScriptReplayWorker.js +95 -13
  529. package/dist/replay/JavaScriptReplayWorkerTypes.js +1 -0
  530. package/dist/replay/LinuxJavaScriptReplayRunner.js +42 -43
  531. package/dist/replay/LinuxJavaScriptReplaySandbox.js +0 -19
  532. package/dist/replay/LinuxRuntimeClosure.js +1 -3
  533. package/dist/replay/ReplayOutcome.js +27 -18
  534. package/dist/replay/ReplayProcessLifecycle.js +32 -7
  535. package/dist/replay/ReplaySeccompFile.js +29 -0
  536. package/dist/replay/ReplayWorkerProtocol.js +33 -30
  537. package/dist/replay/SystemJavaScriptReplayHost.js +45 -74
  538. package/dist/server/ProcessCaptureElicitation.js +4 -8
  539. package/dist/server/createServer.js +145 -119
  540. package/dist/server/mcpClientMetadata.js +32 -0
  541. package/dist/server/promptCompletion.js +37 -61
  542. package/dist/server/recordDerivedEvidence.js +1 -1
  543. package/dist/server/registerApplicationTools/characterization.js +10 -21
  544. package/dist/server/registerApplicationTools/compareExportShapes.js +6 -16
  545. package/dist/server/registerApplicationTools/compareSourceToBundle.js +6 -15
  546. package/dist/server/registerApplicationTools/compareVersions.js +6 -16
  547. package/dist/server/registerApplicationTools/controlledReplay.js +8 -15
  548. package/dist/server/registerApplicationTools/coverage.js +7 -78
  549. package/dist/server/registerApplicationTools/helpers.js +1 -13
  550. package/dist/server/registerApplicationTools/obligationLedger.js +4 -8
  551. package/dist/server/registerApplicationTools/traceFeature.js +6 -15
  552. package/dist/server/registerApplicationTools/traceSemantics.js +5 -13
  553. package/dist/server/registerApplicationTools.js +0 -2
  554. package/dist/server/registerArtifactComparisonTool.js +27 -35
  555. package/dist/server/registerBrowserScenarioTool.js +3 -8
  556. package/dist/server/registerBrowserTools.js +36 -81
  557. package/dist/server/registerBundleComparisonTool.js +10 -16
  558. package/dist/server/registerCloseLifecycleTool.js +5 -27
  559. package/dist/server/registerElectronTools.js +29 -65
  560. package/dist/server/registerEnhancedTools.js +118 -127
  561. package/dist/server/registerEvidenceTools.js +19 -30
  562. package/dist/server/registerFunctionComparisonTool.js +35 -34
  563. package/dist/server/registerInvestigationTools/helpers.js +3 -32
  564. package/dist/server/registerInvestigationTools.js +36 -148
  565. package/dist/server/registerJavaScriptRuntimeObservationTools.js +15 -27
  566. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +16 -23
  567. package/dist/server/registerManagedWorkflowTools/contract.js +2 -3
  568. package/dist/server/registerManagedWorkflowTools/evidence.js +19 -35
  569. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -14
  570. package/dist/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.js +4 -14
  571. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +11 -20
  572. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +10 -21
  573. package/dist/server/registerOfficialTools.js +8 -51
  574. package/dist/server/registerProcessComparisonTool.js +43 -38
  575. package/dist/server/registerPrompts.js +19 -17
  576. package/dist/server/registerReplayMachineTool.js +4 -10
  577. package/dist/server/registerSessionRecordTools.js +36 -153
  578. package/dist/server/registerSessionStatusTool.js +18 -96
  579. package/dist/server/registerSessionTools.js +34 -91
  580. package/dist/server/sessionAvailabilityPolicy.js +2 -3
  581. package/dist/server/sessionEvidence.js +9 -15
  582. package/dist/server/sessionToolPolicies.js +1 -13
  583. package/dist/server/toolRegistrationOptions.js +4 -192
  584. package/dist/server/toolResult.js +15 -67
  585. package/dist/serverIdentity.js +0 -20
  586. package/install.sh +1 -1
  587. package/package.json +27 -15
  588. package/scripts/electron-active-hook-boundaries.cjs +394 -0
  589. package/scripts/electron-active-hook.cjs +469 -0
  590. package/scripts/hopper-demo-x11.py +13 -32
  591. package/scripts/rea.mjs +1 -11
  592. package/skills/reverse-engineer-anything/SKILL.md +46 -11
  593. package/skills/reverse-engineer-anything/references/evidence-workflows.md +6 -4
  594. package/skills/reverse-engineer-anything/references/javascript-applications.md +13 -13
  595. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +12 -8
  596. package/dist/application/ApplicationWorkflowEvidenceResolver.js +0 -180
  597. package/dist/application/BoundedJsonFiles.js +0 -86
  598. package/dist/application/CrossVersionInventory.js +0 -128
  599. package/dist/application/CrossVersionInvestigation.js +0 -301
  600. package/dist/application/CrossVersionInvestigationCollections.js +0 -23
  601. package/dist/application/CrossVersionInvestigationEvidence.js +0 -64
  602. package/dist/application/CrossVersionInvestigationReplay.js +0 -170
  603. package/dist/application/DeferredFileAuthorization.js +0 -61
  604. package/dist/application/DoctorProjection.js +0 -43
  605. package/dist/application/EnhancedToolPagination.js +0 -22
  606. package/dist/application/EvidenceReferenceResolver.js +0 -26
  607. package/dist/application/InvestigationWorkspaceStore.js +0 -204
  608. package/dist/application/ProcessPairedExperiment.js +0 -72
  609. package/dist/application/ReconstructionCoverageWorkspaceStore.js +0 -31
  610. package/dist/application/ReconstructionReadinessService.js +0 -48
  611. package/dist/cliInvestigationCommands.js +0 -173
  612. package/dist/domain/boundedCartesianProjection.js +0 -15
  613. package/dist/domain/investigationWorkspace.js +0 -346
  614. package/dist/domain/jsonLimits.js +0 -26
  615. package/dist/domain/knownPageCoverage.js +0 -21
  616. package/dist/domain/processPairedExperiment.js +0 -128
  617. package/dist/server/DynamicToolAvailability.js +0 -70
  618. package/dist/server/LazyToolCatalog.js +0 -134
  619. package/dist/server/hydrateServerTools.js +0 -191
  620. package/dist/server/javascriptApplicationResult.js +0 -106
  621. package/dist/server/permissionFailure.js +0 -12
  622. package/dist/server/registerApplicationTools/readiness.js +0 -55
  623. package/dist/server/registerEvidenceResources.js +0 -315
  624. package/dist/server/registerJavaScriptApplicationGraphResource.js +0 -65
  625. package/dist/server/registerReconstructionObligationLedgerResource.js +0 -32
  626. package/dist/server/registerReconstructionReadinessResource.js +0 -32
  627. package/dist/server/toolInputValidation.js +0 -77
  628. package/scripts/package-runner-bootstrap.mjs +0 -72
@@ -1,5 +1,81 @@
1
1
  import { Script, SourceTextModule, SyntheticModule, createContext, } from "node:vm";
2
2
  import { types } from "node:util";
3
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
4
+ const record = (value, label) => {
5
+ if (!isRecord(value))
6
+ throw new TypeError(`Invalid replay worker ${label}`);
7
+ return value;
8
+ };
9
+ const string = (value, label) => {
10
+ if (typeof value !== "string")
11
+ throw new TypeError(`Invalid replay worker ${label}`);
12
+ return value;
13
+ };
14
+ const integer = (value, label) => {
15
+ if (!Number.isSafeInteger(value) || Number(value) < 0)
16
+ throw new TypeError(`Invalid replay worker ${label}`);
17
+ return Number(value);
18
+ };
19
+ const parseWorkerModule = (value) => {
20
+ const module = record(value, "module");
21
+ const format = module.format;
22
+ if (format !== "esm" && format !== "commonjs-factory")
23
+ throw new TypeError("Invalid replay worker module format");
24
+ const dependencies = record(module.dependencies, "module dependencies");
25
+ if (Object.values(dependencies).some((dependency) => typeof dependency !== "string"))
26
+ throw new TypeError("Invalid replay worker module dependency");
27
+ return {
28
+ alias: string(module.alias, "module alias"),
29
+ format,
30
+ dependencies: Object.fromEntries(Object.entries(dependencies).map(([key, dependency]) => [
31
+ key,
32
+ string(dependency, "module dependency"),
33
+ ])),
34
+ source: string(module.source, "module source"),
35
+ };
36
+ };
37
+ const parseWorkerSide = (value) => {
38
+ const side = record(value, "side");
39
+ if (!Array.isArray(side.modules))
40
+ throw new TypeError("Invalid replay worker modules");
41
+ return {
42
+ modules: side.modules.map(parseWorkerModule),
43
+ entryAlias: string(side.entryAlias, "entry alias"),
44
+ entryExport: string(side.entryExport, "entry export"),
45
+ };
46
+ };
47
+ const parseWorkerRequest = (value) => {
48
+ const request = record(value, "request");
49
+ if (!Array.isArray(request.cases))
50
+ throw new TypeError("Invalid replay worker cases");
51
+ const determinism = record(request.determinism, "determinism");
52
+ const limits = record(request.limits, "limits");
53
+ return {
54
+ left: parseWorkerSide(request.left),
55
+ ...(request.right === undefined
56
+ ? {}
57
+ : { right: parseWorkerSide(request.right) }),
58
+ cases: request.cases.map((value) => {
59
+ const replayCase = record(value, "case");
60
+ if (!Array.isArray(replayCase.arguments))
61
+ throw new TypeError("Invalid replay worker case arguments");
62
+ return {
63
+ caseId: string(replayCase.caseId, "case ID"),
64
+ arguments: replayCase.arguments,
65
+ inputSha256: string(replayCase.inputSha256, "case digest"),
66
+ };
67
+ }),
68
+ determinism: {
69
+ clockIso: string(determinism.clockIso, "clock"),
70
+ randomSeed: integer(determinism.randomSeed, "random seed"),
71
+ },
72
+ limits: {
73
+ resultDepth: integer(limits.resultDepth, "result depth"),
74
+ resultNodes: integer(limits.resultNodes, "result nodes"),
75
+ exceptionBytes: integer(limits.exceptionBytes, "exception bytes"),
76
+ },
77
+ };
78
+ };
3
79
  class ReplayDeniedError extends Error {
4
80
  name = "ReplayDeniedError";
5
81
  }
@@ -7,9 +83,8 @@ const main = async () => {
7
83
  const chunks = [];
8
84
  for await (const chunk of process.stdin)
9
85
  chunks.push(Buffer.from(chunk));
10
- const request = JSON.parse(Buffer.concat(chunks).toString("utf8"));
11
- if (request.schemaVersion !== 1)
12
- throw new TypeError("Unsupported replay worker protocol");
86
+ const rawRequest = JSON.parse(Buffer.concat(chunks).toString("utf8"));
87
+ const request = parseWorkerRequest(rawRequest);
13
88
  const left = [];
14
89
  const right = [];
15
90
  for (let index = 0; index < request.cases.length; index += 1) {
@@ -21,7 +96,6 @@ const main = async () => {
21
96
  right.push(await runCase(request.right, replayCase, request, index));
22
97
  }
23
98
  process.stdout.write(JSON.stringify({
24
- schema_version: 1,
25
99
  left,
26
100
  ...(request.right === undefined ? {} : { right }),
27
101
  }));
@@ -66,18 +140,20 @@ const loadEntry = async (side, request, caseIndex) => {
66
140
  throw new TypeError(`Synchronous require cannot load ESM module: ${alias}`);
67
141
  const module = { exports: {} };
68
142
  commonJsCache.set(alias, module.exports);
69
- const requireModule = ((specifier) => {
143
+ const requireModule = (specifier) => {
70
144
  const dependency = descriptor.dependencies[specifier];
71
145
  if (dependency === undefined)
72
146
  throw new ReplayDeniedError(`Undeclared require: ${specifier}`);
73
147
  return loadCommonJs(dependency);
74
- });
148
+ };
75
149
  installRspackHelpers(requireModule);
76
150
  const source = normalizeFactorySource(descriptor.source);
77
151
  const factory = new Script(`(${source})`, {
78
152
  filename: `/modules/${alias}.js`,
79
153
  }).runInContext(context);
80
- factory(module, module.exports, requireModule);
154
+ if (typeof factory !== "function")
155
+ throw new TypeError(`CommonJS factory is not callable: ${alias}`);
156
+ Reflect.apply(factory, undefined, [module, module.exports, requireModule]);
81
157
  commonJsCache.set(alias, module.exports);
82
158
  return module.exports;
83
159
  };
@@ -126,7 +202,7 @@ const loadEntry = async (side, request, caseIndex) => {
126
202
  : exported[side.entryExport];
127
203
  }
128
204
  const namespace = (await loadEsm(side.entryAlias)).namespace;
129
- return namespace[side.entryExport];
205
+ return Reflect.get(namespace, side.entryExport);
130
206
  };
131
207
  const deterministicContext = (request, caseIndex) => {
132
208
  let state = (request.determinism.randomSeed + caseIndex) >>> 0;
@@ -153,21 +229,27 @@ const deterministicContext = (request, caseIndex) => {
153
229
  });
154
230
  };
155
231
  const installRspackHelpers = (require_) => {
156
- require_.d = (exports, definitions) => {
232
+ const defineExports = (exports, definitions) => {
157
233
  for (const [name, getter] of Object.entries(definitions))
158
234
  if (!Object.prototype.hasOwnProperty.call(exports, name))
159
235
  Object.defineProperty(exports, name, { enumerable: true, get: getter });
160
236
  };
161
- require_.r = (exports) => {
237
+ const markModule = (exports) => {
162
238
  Object.defineProperty(exports, "__esModule", { value: true });
163
239
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
164
240
  };
165
- require_.n = (module) => {
241
+ const normalizeModule = (module) => {
166
242
  const getter = () => (module.__esModule === true ? module.default : module);
167
243
  Object.defineProperty(getter, "a", { get: getter });
168
244
  return getter;
169
245
  };
170
- require_.nmd = (module) => module;
246
+ const passModule = (module) => module;
247
+ Object.defineProperties(require_, {
248
+ d: { value: defineExports },
249
+ r: { value: markModule },
250
+ n: { value: normalizeModule },
251
+ nmd: { value: passModule },
252
+ });
171
253
  };
172
254
  const requiredModule = (modules, alias) => {
173
255
  const module = modules.get(alias);
@@ -295,6 +377,6 @@ const bounded = (value, maximumBytes) => {
295
377
  };
296
378
  void main().catch((error) => {
297
379
  const message = error instanceof Error ? error.message : "Replay worker failed";
298
- process.stderr.write(message.slice(0, 4096));
380
+ process.stderr.write(message);
299
381
  process.exitCode = 70;
300
382
  });
@@ -0,0 +1 @@
1
+ export {};
@@ -1,10 +1,11 @@
1
+ import { temporaryFilterHandle } from "./ReplaySeccompFile.js";
1
2
  import { spawn } from "node:child_process";
2
3
  import { randomBytes } from "node:crypto";
3
4
  import { readFile } from "node:fs/promises";
4
5
  import { digestBytes, } from "../application/JavaScriptReplayPlanning.js";
5
6
  import { linuxX64ReplaySeccompDigest } from "./LinuxSeccompPolicy.js";
6
7
  import { resolveLinuxRuntimeClosure } from "./LinuxRuntimeClosure.js";
7
- import { assertRuntimeCommitment, systemdArguments, temporaryFilterHandle, } from "./LinuxJavaScriptReplaySandbox.js";
8
+ import { assertRuntimeCommitment, systemdArguments, } from "./LinuxJavaScriptReplaySandbox.js";
8
9
  import { boundedCollector, killUnit, observeCleanup, observeUnitResult, } from "./ReplayProcessLifecycle.js";
9
10
  import { commitOutcomes, compareOutcomes, terminationResult, workerRequest, } from "./ReplayOutcome.js";
10
11
  import { parseReplayWorkerResponse, } from "./ReplayWorkerProtocol.js";
@@ -23,39 +24,42 @@ export class LinuxJavaScriptReplayRunner {
23
24
  const closure = await validateReplayCommitments(prepared, policy);
24
25
  const encoded = buildWorkerPayload(prepared);
25
26
  const filter = await temporaryFilterHandle();
26
- const replayProcess = launchReplayProcess({
27
- prepared,
28
- policy,
29
- encoded,
30
- closure,
31
- filterPath: filter.path,
32
- unit,
33
- signal,
34
- });
35
27
  try {
36
- const collected = await replayProcess.completion;
37
- if (replayProcess.terminationRequest !== undefined)
38
- await replayProcess.terminationRequest;
39
- const unitResult = await observeUnitResult(policy.systemctlPath, unit);
40
- const cleanup = await observeCleanup(policy.systemctlPath, unit);
41
- return resolveReplayResult({
28
+ const replayProcess = launchReplayProcess({
42
29
  prepared,
43
- collected,
44
- unitResult,
45
- cleanup,
46
- cancelled: replayProcess.cancelled,
47
- timedOut: replayProcess.timedOut,
30
+ policy,
31
+ encoded,
32
+ closure,
33
+ filterPath: filter.path,
34
+ unit,
35
+ signal,
48
36
  });
37
+ try {
38
+ const collected = await replayProcess.completion;
39
+ if (replayProcess.terminationRequest !== undefined)
40
+ await replayProcess.terminationRequest;
41
+ const unitResult = await observeUnitResult(policy.systemctlPath, unit);
42
+ const cleanup = await observeCleanup(policy.systemctlPath, unit);
43
+ return resolveReplayResult({
44
+ prepared,
45
+ collected,
46
+ unitResult,
47
+ cleanup,
48
+ termination: replayProcess.termination,
49
+ });
50
+ }
51
+ finally {
52
+ signal?.removeEventListener("abort", replayProcess.terminate);
53
+ if (replayProcess.timeout !== undefined)
54
+ clearTimeout(replayProcess.timeout);
55
+ if (replayProcess.child !== undefined &&
56
+ replayProcess.child.exitCode === null) {
57
+ replayProcess.requestTermination();
58
+ await replayProcess.terminationRequest;
59
+ }
60
+ }
49
61
  }
50
62
  finally {
51
- signal?.removeEventListener("abort", replayProcess.terminate);
52
- if (replayProcess.timeout !== undefined)
53
- clearTimeout(replayProcess.timeout);
54
- if (replayProcess.child !== undefined &&
55
- replayProcess.child.exitCode === null) {
56
- replayProcess.requestTermination();
57
- await replayProcess.terminationRequest;
58
- }
59
63
  await filter.close();
60
64
  }
61
65
  }
@@ -90,15 +94,14 @@ const launchReplayProcess = (options) => {
90
94
  });
91
95
  let child;
92
96
  let timeout;
93
- let cancelled = false;
94
- let timedOut = false;
97
+ let termination;
95
98
  let terminationRequest;
96
99
  const requestTermination = () => {
97
100
  terminationRequest ??= killUnit(policy.systemctlPath, unit);
98
101
  child?.kill("SIGKILL");
99
102
  };
100
103
  const terminate = () => {
101
- cancelled = true;
104
+ termination ??= "cancelled";
102
105
  requestTermination();
103
106
  };
104
107
  const completion = new Promise((resolve, reject) => {
@@ -124,7 +127,7 @@ const launchReplayProcess = (options) => {
124
127
  if (isAborted(signal))
125
128
  terminate();
126
129
  timeout = setTimeout(() => {
127
- timedOut = true;
130
+ termination ??= "timeout";
128
131
  requestTermination();
129
132
  }, prepared.publicPlan.limits.wall_time_ms);
130
133
  timeout.unref();
@@ -139,11 +142,8 @@ const launchReplayProcess = (options) => {
139
142
  get terminationRequest() {
140
143
  return terminationRequest;
141
144
  },
142
- get cancelled() {
143
- return cancelled;
144
- },
145
- get timedOut() {
146
- return timedOut;
145
+ get termination() {
146
+ return termination;
147
147
  },
148
148
  };
149
149
  };
@@ -160,12 +160,12 @@ const replayProcessEnvironment = () => ({
160
160
  : { DBUS_SESSION_BUS_ADDRESS: process.env.DBUS_SESSION_BUS_ADDRESS }),
161
161
  });
162
162
  const resolveReplayResult = (options) => {
163
- const { prepared, collected, unitResult, cleanup, cancelled, timedOut } = options;
164
- if (cancelled || timedOut)
163
+ const { prepared, collected, unitResult, cleanup, termination } = options;
164
+ if (termination !== undefined)
165
165
  return terminationResult({
166
166
  prepared,
167
167
  stderr: collected.stderr,
168
- termination: cancelled ? "cancelled" : "timeout",
168
+ termination,
169
169
  cleanup,
170
170
  });
171
171
  if (collected.outputExceeded)
@@ -186,7 +186,7 @@ const resolveReplayResult = (options) => {
186
186
  let response;
187
187
  try {
188
188
  const rawResponse = JSON.parse(collected.stdout);
189
- response = parseReplayWorkerResponse(rawResponse, prepared.publicPlan.cases, prepared.publicPlan.right !== undefined);
189
+ response = parseReplayWorkerResponse(rawResponse, prepared.publicPlan.cases, prepared.publicPlan.right === undefined ? "single" : "differential");
190
190
  }
191
191
  catch {
192
192
  return terminationResult({
@@ -199,7 +199,6 @@ const resolveReplayResult = (options) => {
199
199
  const outcomes = commitOutcomes(response.left);
200
200
  const right = response.right === undefined ? undefined : commitOutcomes(response.right);
201
201
  return {
202
- schema_version: 1,
203
202
  plan_digest: prepared.publicPlan.plan_digest,
204
203
  outcomes: [...outcomes, ...(right ?? [])],
205
204
  ...(right === undefined
@@ -1,7 +1,5 @@
1
- import { open } from "node:fs/promises";
2
1
  import { dirname } from "node:path";
3
2
  import { digestJson, } from "../application/JavaScriptReplayPlanning.js";
4
- import { buildLinuxX64ReplaySeccomp } from "./LinuxSeccompPolicy.js";
5
3
  import { resolveLinuxRuntimeClosure } from "./LinuxRuntimeClosure.js";
6
4
  export const assertRuntimeCommitment = (prepared, closure) => {
7
5
  const observed = closure.map((item) => ({
@@ -13,23 +11,6 @@ export const assertRuntimeCommitment = (prepared, closure) => {
13
11
  digestJson(prepared.publicPlan.runtime.read_only_files))
14
12
  throw new TypeError("Replay runtime closure changed after approval");
15
13
  };
16
- export const temporaryFilterHandle = async () => {
17
- const { mkdtemp, writeFile, rm } = await import("node:fs/promises");
18
- const { tmpdir } = await import("node:os");
19
- const { join } = await import("node:path");
20
- const directory = await mkdtemp(join(tmpdir(), "rea-replay-filter-"));
21
- const path = join(directory, "seccomp.bpf");
22
- await writeFile(path, buildLinuxX64ReplaySeccomp(), { mode: 0o600 });
23
- const handle = await open(path, "r");
24
- return {
25
- path,
26
- handle,
27
- close: async () => {
28
- await handle.close();
29
- await rm(directory, { recursive: true, force: true });
30
- },
31
- };
32
- };
33
14
  export const systemdArguments = (options) => {
34
15
  const { unit, policy, prepared, workerPath, closure, filterPath } = options;
35
16
  const limits = prepared.publicPlan.limits;
@@ -1,7 +1,6 @@
1
1
  import { spawn } from "node:child_process";
2
2
  import { createHash } from "node:crypto";
3
3
  import { readFile, realpath } from "node:fs/promises";
4
- const LDD_OUTPUT_LIMIT = 64 * 1024;
5
4
  /** Resolve and content-address the exact ELF closure mounted into a replay. */
6
5
  export const resolveLinuxRuntimeClosure = async (nodePath) => {
7
6
  const canonicalNode = await realpath(nodePath);
@@ -32,8 +31,7 @@ const collectLdd = async (path) => new Promise((resolve, reject) => {
32
31
  timeout.unref();
33
32
  let stdout = "";
34
33
  child.stdout.on("data", (chunk) => {
35
- const remaining = Math.max(0, LDD_OUTPUT_LIMIT - Buffer.byteLength(stdout));
36
- stdout += chunk.subarray(0, remaining).toString("utf8");
34
+ stdout += chunk.toString("utf8");
37
35
  });
38
36
  child.once("error", (error) => {
39
37
  clearTimeout(timeout);
@@ -1,7 +1,6 @@
1
1
  import { digestJson, } from "../application/JavaScriptReplayPlanning.js";
2
2
  import { jsonValueSchema } from "../domain/jsonValue.js";
3
3
  export const workerRequest = (prepared) => ({
4
- schemaVersion: 1,
5
4
  left: workerSide(prepared.publicPlan.left, prepared.leftSources),
6
5
  ...(prepared.publicPlan.right === undefined ||
7
6
  prepared.rightSources === undefined
@@ -19,7 +18,7 @@ export const workerRequest = (prepared) => ({
19
18
  limits: {
20
19
  resultDepth: prepared.publicPlan.limits.result_depth,
21
20
  resultNodes: prepared.publicPlan.limits.result_nodes,
22
- exceptionBytes: Math.min(64 * 1024, prepared.publicPlan.limits.output_bytes),
21
+ exceptionBytes: prepared.publicPlan.limits.output_bytes,
23
22
  },
24
23
  });
25
24
  const workerSide = (side, sources) => ({
@@ -33,18 +32,21 @@ const workerSide = (side, sources) => ({
33
32
  entryExport: side.entry_export,
34
33
  });
35
34
  export const commitOutcomes = (outcomes) => outcomes.map((outcome) => {
36
- const semantic = outcome.value === undefined ? (outcome.exception ?? null) : outcome.value;
35
+ if (outcome.outcome === "return")
36
+ return {
37
+ case_id: outcome.case_id,
38
+ outcome: outcome.outcome,
39
+ value: jsonValueSchema.parse(outcome.value),
40
+ input_sha256: outcome.input_sha256,
41
+ output_sha256: digestJson(outcome.value),
42
+ truncated: false,
43
+ };
37
44
  return {
38
45
  case_id: outcome.case_id,
39
46
  outcome: outcome.outcome,
40
- ...(outcome.value === undefined
41
- ? {}
42
- : { value: jsonValueSchema.parse(outcome.value) }),
43
- ...(outcome.exception === undefined
44
- ? {}
45
- : { exception: outcome.exception }),
47
+ exception: outcome.exception,
46
48
  input_sha256: outcome.input_sha256,
47
- output_sha256: digestJson(semantic),
49
+ output_sha256: digestJson(outcome.exception),
48
50
  truncated: false,
49
51
  };
50
52
  });
@@ -61,16 +63,23 @@ export const compareOutcomes = (left, right) => left.map((item, index) => ({
61
63
  }));
62
64
  export const terminationResult = (options) => {
63
65
  const { prepared, stderr, termination, cleanup, limitation } = options;
64
- const outcomes = prepared.publicPlan.cases.map((item) => ({
65
- case_id: item.case_id,
66
- outcome: termination,
67
- input_sha256: item.sha256,
68
- output_sha256: null,
69
- truncated: termination === "protocol_error",
70
- }));
66
+ const outcomes = termination === "protocol_error"
67
+ ? prepared.publicPlan.cases.map((item) => ({
68
+ case_id: item.case_id,
69
+ outcome: termination,
70
+ input_sha256: item.sha256,
71
+ output_sha256: null,
72
+ truncated: true,
73
+ }))
74
+ : prepared.publicPlan.cases.map((item) => ({
75
+ case_id: item.case_id,
76
+ outcome: termination,
77
+ input_sha256: item.sha256,
78
+ output_sha256: null,
79
+ truncated: false,
80
+ }));
71
81
  const differential = prepared.publicPlan.right !== undefined;
72
82
  return {
73
- schema_version: 1,
74
83
  plan_digest: prepared.publicPlan.plan_digest,
75
84
  outcomes: [...outcomes, ...(differential ? outcomes : [])],
76
85
  ...(differential
@@ -16,12 +16,12 @@ export const boundedCollector = (maximum) => {
16
16
  exceeded: () => overflow,
17
17
  };
18
18
  };
19
- const collect = async (executable, arguments_, maximum) => new Promise((resolve, reject) => {
19
+ const collect = async (executable, arguments_) => new Promise((resolve, reject) => {
20
20
  const child = spawn(executable, [...arguments_], {
21
21
  stdio: ["ignore", "pipe", "pipe"],
22
22
  });
23
- const stdout = boundedCollector(maximum);
24
- const stderr = boundedCollector(maximum);
23
+ const stdout = unboundedCollector();
24
+ const stderr = unboundedCollector();
25
25
  const timeout = setTimeout(() => child.kill("SIGKILL"), 5_000);
26
26
  timeout.unref();
27
27
  child.stdout?.on("data", stdout.append);
@@ -37,7 +37,13 @@ const collect = async (executable, arguments_, maximum) => new Promise((resolve,
37
37
  });
38
38
  export const killUnit = async (systemctl, unit) => {
39
39
  try {
40
- await collect(systemctl, ["--user", "kill", "--kill-whom=all", "--signal=SIGKILL", unit], 4096);
40
+ await collect(systemctl, [
41
+ "--user",
42
+ "kill",
43
+ "--kill-whom=all",
44
+ "--signal=SIGKILL",
45
+ unit,
46
+ ]);
41
47
  }
42
48
  catch {
43
49
  /* cleanup continues */
@@ -45,13 +51,19 @@ export const killUnit = async (systemctl, unit) => {
45
51
  };
46
52
  export const observeCleanup = async (systemctl, unit) => {
47
53
  try {
48
- const state = await collect(systemctl, ["--user", "show", "--property=ActiveState", "--value", unit], 4096);
54
+ const state = await collect(systemctl, [
55
+ "--user",
56
+ "show",
57
+ "--property=ActiveState",
58
+ "--value",
59
+ unit,
60
+ ]);
49
61
  const activeState = state.stdout.trim();
50
62
  if (state.code !== 0 ||
51
63
  activeState === "inactive" ||
52
64
  activeState === "failed" ||
53
65
  activeState.length === 0) {
54
- await collect(systemctl, ["--user", "reset-failed", unit], 4096);
66
+ await collect(systemctl, ["--user", "reset-failed", unit]);
55
67
  return { state: "complete", residual_resources: [] };
56
68
  }
57
69
  return { state: "incomplete", residual_resources: [unit] };
@@ -62,10 +74,23 @@ export const observeCleanup = async (systemctl, unit) => {
62
74
  };
63
75
  export const observeUnitResult = async (systemctl, unit) => {
64
76
  try {
65
- const result = await collect(systemctl, ["--user", "show", "--property=Result", "--value", unit], 4096);
77
+ const result = await collect(systemctl, [
78
+ "--user",
79
+ "show",
80
+ "--property=Result",
81
+ "--value",
82
+ unit,
83
+ ]);
66
84
  return result.stdout.trim();
67
85
  }
68
86
  catch {
69
87
  return "unknown";
70
88
  }
71
89
  };
90
+ const unboundedCollector = () => {
91
+ const chunks = [];
92
+ return {
93
+ append: (chunk) => chunks.push(chunk),
94
+ value: () => Buffer.concat(chunks).toString("utf8"),
95
+ };
96
+ };
@@ -0,0 +1,29 @@
1
+ import { mkdtemp, open, rm, writeFile } from "node:fs/promises";
2
+ import { tmpdir } from "node:os";
3
+ import { join } from "node:path";
4
+ import { buildLinuxX64ReplaySeccomp } from "./LinuxSeccompPolicy.js";
5
+ /** Own a private seccomp file and descriptor until probe or execution cleanup. */
6
+ export const temporaryFilterHandle = async () => {
7
+ const directory = await mkdtemp(join(tmpdir(), "rea-replay-filter-"));
8
+ const path = join(directory, "seccomp.bpf");
9
+ try {
10
+ await writeFile(path, buildLinuxX64ReplaySeccomp(), { mode: 0o600 });
11
+ const handle = await open(path, "r");
12
+ return {
13
+ path,
14
+ handle,
15
+ close: async () => {
16
+ try {
17
+ await handle.close();
18
+ }
19
+ finally {
20
+ await rm(directory, { recursive: true, force: true });
21
+ }
22
+ },
23
+ };
24
+ }
25
+ catch (cause) {
26
+ await rm(directory, { recursive: true, force: true });
27
+ throw cause;
28
+ }
29
+ };
@@ -1,45 +1,48 @@
1
1
  import { z } from "zod";
2
- const workerOutcomeSchema = z
3
- .object({
2
+ const workerOutcomeFacts = {
4
3
  case_id: z.string(),
5
- outcome: z.enum(["return", "exception", "serialization_error", "denied"]),
6
- value: z.json().optional(),
7
- exception: z
8
- .object({
9
- name: z.string(),
10
- message: z.string(),
11
- stack: z.string().nullable(),
12
- })
13
- .strict()
14
- .optional(),
15
4
  input_sha256: z.string().regex(/^[a-f0-9]{64}$/u),
16
5
  output_sha256: z.null(),
17
6
  truncated: z.literal(false),
7
+ };
8
+ const exceptionSchema = z
9
+ .object({
10
+ name: z.string(),
11
+ message: z.string(),
12
+ stack: z.string().nullable(),
13
+ })
14
+ .strict();
15
+ const workerOutcomeSchema = z.discriminatedUnion("outcome", [
16
+ z.strictObject({
17
+ ...workerOutcomeFacts,
18
+ outcome: z.literal("return"),
19
+ value: z.json(),
20
+ }),
21
+ z.strictObject({
22
+ ...workerOutcomeFacts,
23
+ outcome: z.enum(["exception", "serialization_error", "denied"]),
24
+ exception: z.object(exceptionSchema.shape).strict(),
25
+ }),
26
+ ]);
27
+ const singleWorkerResponseSchema = z
28
+ .object({
29
+ left: z.array(workerOutcomeSchema),
18
30
  })
19
- .strict()
20
- .superRefine((value, context) => {
21
- if (value.outcome === "return" && value.value === undefined)
22
- context.addIssue({ code: "custom", message: "Return value is missing" });
23
- if (value.outcome !== "return" && value.exception === undefined)
24
- context.addIssue({ code: "custom", message: "Exception is missing" });
25
- if (value.outcome === "return" && value.exception !== undefined)
26
- context.addIssue({ code: "custom", message: "Return has an exception" });
27
- });
28
- const workerResponseSchema = z
31
+ .strict();
32
+ const differentialWorkerResponseSchema = z
29
33
  .object({
30
- schema_version: z.literal(1),
31
34
  left: z.array(workerOutcomeSchema),
32
- right: z.array(workerOutcomeSchema).optional(),
35
+ right: z.array(workerOutcomeSchema),
33
36
  })
34
37
  .strict();
35
38
  /** Strictly authenticate case ordering and commitments in worker output. */
36
- export const parseReplayWorkerResponse = (rawResponse, cases, differential) => {
37
- const response = workerResponseSchema.parse(rawResponse);
38
- if ((response.right !== undefined) !== differential)
39
- throw new TypeError("Replay worker differential response is incomplete");
39
+ export const parseReplayWorkerResponse = (rawResponse, cases, mode) => {
40
+ const response = mode === "single"
41
+ ? singleWorkerResponseSchema.parse(rawResponse)
42
+ : differentialWorkerResponseSchema.parse(rawResponse);
40
43
  validateOutcomeSequence(response.left, cases);
41
- if (response.right !== undefined)
42
- validateOutcomeSequence(response.right, cases);
44
+ if (mode === "differential")
45
+ validateOutcomeSequence(differentialWorkerResponseSchema.parse(response).right, cases);
43
46
  return response;
44
47
  };
45
48
  const validateOutcomeSequence = (outcomes, cases) => {