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
@@ -6,99 +6,31 @@ import { CLI_COMMANDS } from "./cliCommandNames.js";
6
6
  import { logCliCommand } from "./cliLogging.js";
7
7
  import { parseConfig } from "./config.js";
8
8
  import { javascriptRuntimeKindSchema, listJavaScriptRuntimeTargetsInputSchema, observeJavaScriptRuntimeInputSchema, } from "./domain/javascriptRuntimeObservation.js";
9
- import { AnalysisInputError, projectAnalysisError } from "./domain/errors.js";
10
- const scopeOptions = {
11
- allowedFileRoots: z
12
- .array(z.string().min(1))
13
- .optional()
14
- .describe("Exact roots; defaults to REA_V8_INSPECTOR_FILE_ROOTS_JSON"),
15
- allowedOrigins: z
16
- .array(z.string().min(1))
17
- .optional()
18
- .describe("Exact origins; defaults to REA_V8_INSPECTOR_ALLOWED_ORIGINS_JSON"),
19
- approved: z.boolean().default(false).describe("Approve passive attachment"),
20
- };
21
- const listOptionsSchema = z.object({
22
- ...scopeOptions,
23
- offset: z
24
- .number()
25
- .int()
26
- .min(0)
27
- .default(0)
28
- .describe("Zero-based target offset"),
29
- limit: z
30
- .number()
31
- .int()
32
- .min(1)
33
- .max(200)
34
- .default(100)
35
- .describe("Maximum targets to return"),
36
- });
9
+ import { AnalysisCapabilityUnavailableError, AnalysisInputError, projectAnalysisError, } from "./domain/errors.js";
37
10
  const observeOptionsSchema = z.object({
38
- ...scopeOptions,
39
- runtimeKind: javascriptRuntimeKindSchema.describe("Declared target role; Inspector cannot authenticate the Electron role"),
11
+ runtimeKind: javascriptRuntimeKindSchema
12
+ .optional()
13
+ .describe("Declared target role; Inspector cannot authenticate the Electron role"),
40
14
  observationMs: z
41
15
  .number()
42
16
  .int()
43
17
  .min(0)
44
- .max(10_000)
45
18
  .default(100)
46
- .describe("Bounded observation window in milliseconds"),
47
- maxEvents: z
48
- .number()
49
- .int()
50
- .min(1)
51
- .max(50_000)
52
- .default(10_000)
53
- .describe("Maximum retained protocol events"),
54
- maxScripts: z
55
- .number()
56
- .int()
57
- .min(1)
58
- .max(10_000)
59
- .default(2_000)
60
- .describe("Maximum retained scripts"),
61
- maxExecutionContexts: z
62
- .number()
63
- .int()
64
- .min(1)
65
- .max(5_000)
66
- .default(1_000)
67
- .describe("Maximum retained execution contexts"),
68
- maxLocationBytes: z
69
- .number()
70
- .int()
71
- .min(64)
72
- .max(65_536)
73
- .default(16_384)
74
- .describe("Maximum bytes in one protocol location"),
75
- maxTotalMetadataBytes: z
76
- .number()
77
- .int()
78
- .min(1_024)
79
- .max(32 * 1_024 * 1_024)
80
- .default(4 * 1_024 * 1_024)
81
- .describe("Maximum retained metadata bytes"),
19
+ .describe("Observation window in milliseconds"),
82
20
  });
83
21
  /** Register CLI equivalents of passive V8 Inspector tools. */
84
22
  export const registerJavaScriptRuntimeObservationCommands = (cli, logger) => {
85
23
  cli.command(CLI_COMMANDS.listJavaScriptRuntimeTargets, {
86
- description: "List approved Node/Electron V8 Inspector targets",
24
+ description: "List Node/Electron V8 Inspector targets",
87
25
  args: z.object({
88
- endpoint: z.string().describe("Configured literal-loopback endpoint"),
26
+ endpoint: z.string().describe("Literal-loopback Inspector endpoint"),
89
27
  }),
90
- options: listOptionsSchema,
91
- run: ({ args, options }) => logCliCommand(logger, CLI_COMMANDS.listJavaScriptRuntimeTargets, async () => {
92
- const context = await runtimeContext();
28
+ run: ({ args }) => logCliCommand(logger, CLI_COMMANDS.listJavaScriptRuntimeTargets, async () => {
29
+ const context = await runtimeContext("list_javascript_runtime_targets");
93
30
  if (!context.ok)
94
31
  return context.error;
95
32
  const parsed = listJavaScriptRuntimeTargetsInputSchema.safeParse({
96
33
  inspector_endpoint: args.endpoint,
97
- allowed_file_roots: options.allowedFileRoots ?? context.allowedFileRoots,
98
- allowed_origins: options.allowedOrigins ?? context.allowedOrigins,
99
- approved: options.approved,
100
- offset: options.offset,
101
- limit: options.limit,
102
34
  });
103
35
  if (!parsed.success)
104
36
  return inputError("list_javascript_runtime_targets");
@@ -109,31 +41,21 @@ export const registerJavaScriptRuntimeObservationCommands = (cli, logger) => {
109
41
  cli.command(CLI_COMMANDS.observeJavaScriptRuntime, {
110
42
  description: "Passively observe one exact Node/Electron Inspector target",
111
43
  args: z.object({
112
- endpoint: z.string().describe("Configured literal-loopback endpoint"),
44
+ endpoint: z.string().describe("Literal-loopback Inspector endpoint"),
113
45
  targetId: z
114
46
  .string()
115
47
  .describe("Target from list-javascript-runtime-targets"),
116
48
  }),
117
49
  options: observeOptionsSchema,
118
50
  run: ({ args, options }) => logCliCommand(logger, CLI_COMMANDS.observeJavaScriptRuntime, async () => {
119
- const context = await runtimeContext();
51
+ const context = await runtimeContext("observe_javascript_runtime");
120
52
  if (!context.ok)
121
53
  return context.error;
122
54
  const parsed = observeJavaScriptRuntimeInputSchema.safeParse({
123
55
  inspector_endpoint: args.endpoint,
124
- allowed_file_roots: options.allowedFileRoots ?? context.allowedFileRoots,
125
- allowed_origins: options.allowedOrigins ?? context.allowedOrigins,
126
56
  target_id: args.targetId,
127
57
  runtime_kind: options.runtimeKind,
128
- approved: options.approved,
129
58
  observation_ms: options.observationMs,
130
- limits: {
131
- max_events: options.maxEvents,
132
- max_scripts: options.maxScripts,
133
- max_execution_contexts: options.maxExecutionContexts,
134
- max_location_bytes: options.maxLocationBytes,
135
- max_total_metadata_bytes: options.maxTotalMetadataBytes,
136
- },
137
59
  });
138
60
  if (!parsed.success)
139
61
  return inputError("observe_javascript_runtime");
@@ -142,10 +64,16 @@ export const registerJavaScriptRuntimeObservationCommands = (cli, logger) => {
142
64
  }),
143
65
  });
144
66
  };
145
- const runtimeContext = async () => {
67
+ const runtimeContext = async (operation) => {
146
68
  const config = parseConfig(process.env);
147
69
  if (!config.ok)
148
70
  return { ok: false, error: cliError(config.error) };
71
+ const policy = config.value.v8InspectorObservationPolicy;
72
+ if (policy.status === "disabled")
73
+ return {
74
+ ok: false,
75
+ error: cliError(new AnalysisCapabilityUnavailableError("rea-v8-inspector", operation, "V8 Inspector observation is disabled; enable REA_V8_INSPECTOR_OBSERVE_ENABLED to authorize loopback endpoints")),
76
+ };
149
77
  const authority = await loadConfiguredPermissionAuthority(config.value);
150
78
  if (!authority.ok)
151
79
  return { ok: false, error: cliError(authority.error) };
@@ -153,8 +81,6 @@ const runtimeContext = async () => {
153
81
  ok: true,
154
82
  authority: authority.value,
155
83
  provider: new V8InspectorProvider(),
156
- allowedFileRoots: config.value.v8InspectorFileRoots,
157
- allowedOrigins: config.value.v8InspectorAllowedOrigins,
158
84
  };
159
85
  };
160
86
  const inputError = (operation) => cliError(new AnalysisInputError(operation));
@@ -1,7 +1,6 @@
1
- import { readFile, stat } from "node:fs/promises";
1
+ import { readFile } from "node:fs/promises";
2
2
  import { AnalysisInputError, projectAnalysisError } from "./domain/errors.js";
3
- const MAX_JSON_INPUT_BYTES = 64 * 1_024 * 1_024;
4
- /** Parse bounded inline JSON or one bounded local JSON file for a CLI workflow. */
3
+ /** Parse inline JSON or one local JSON file for a CLI workflow. */
5
4
  export const parseCliJsonInput = async (value, operation) => {
6
5
  const inline = parseJson(value);
7
6
  if (inline !== undefined)
@@ -9,15 +8,7 @@ export const parseCliJsonInput = async (value, operation) => {
9
8
  if (["{", "["].includes(value.trimStart()[0] ?? ""))
10
9
  return { ok: false, error: inputError(operation) };
11
10
  try {
12
- const metadata = await stat(value);
13
- if (!metadata.isFile())
14
- return jsonFileError(value, operation, "not-file");
15
- if (metadata.size > MAX_JSON_INPUT_BYTES)
16
- return jsonFileError(value, operation, "too-large");
17
- const bytes = await readFile(value);
18
- if (bytes.byteLength > MAX_JSON_INPUT_BYTES)
19
- return jsonFileError(value, operation, "too-large");
20
- const parsed = parseJson(bytes.toString("utf8"));
11
+ const parsed = parseJson(await readFile(value, "utf8"));
21
12
  return parsed === undefined
22
13
  ? jsonFileError(value, operation, "invalid-json")
23
14
  : { ok: true, value: parsed };
@@ -47,8 +38,7 @@ const jsonFileError = (path, operation, reason) => ({
47
38
  ...projectAnalysisError(new AnalysisInputError(operation, undefined, reason === "invalid-json"
48
39
  ? [{ path: [], reason: "invalid_format", expected: "JSON" }]
49
40
  : [])),
50
- input_path: path,
41
+ ...(path === undefined ? {} : { input_path: path }),
51
42
  input_reason: reason,
52
- maximum_input_bytes: MAX_JSON_INPUT_BYTES,
53
43
  },
54
44
  });
@@ -1,55 +1,41 @@
1
1
  import { z } from "incur";
2
- const boundedCount = (subject, maximum, fallback, minimum = 1) => z
2
+ /** Accept an agent-selected browser observation duration without an artificial ceiling. */
3
+ export const observationDuration = (fallback, minimum = 0) => z
3
4
  .number()
4
5
  .int()
5
6
  .min(minimum)
6
- .max(maximum)
7
7
  .default(fallback)
8
- .describe(`Maximum ${subject}`);
9
- const boundedBytes = (subject, maximum, fallback) => boundedCount(`${subject} in bytes`, maximum, fallback);
10
- const positiveCount = (subject, fallback) => z.number().int().min(1).default(fallback).describe(`Maximum ${subject}`);
11
- const browserScopeOptions = {
8
+ .describe("Observation duration in milliseconds");
9
+ /** Shared passive browser origin options. */
10
+ export const browserScopeOptions = {
12
11
  allowedOrigins: z
13
12
  .array(z.string().min(1))
14
13
  .optional()
15
14
  .describe("Exact origins to observe; defaults to REA_BROWSER_ALLOWED_ORIGINS_JSON"),
16
- approved: z.boolean().default(false).describe("Approve passive observation"),
17
15
  };
18
16
  export const browserPageInspectionOptions = z.object({
19
17
  ...browserScopeOptions,
20
- observationMs: boundedCount("observation duration in milliseconds", 10_000, 500, 0),
18
+ observationMs: observationDuration(500),
21
19
  includeAccessibilityText: z
22
20
  .boolean()
23
21
  .default(false)
24
- .describe("Include bounded accessibility text"),
22
+ .describe("Include accessibility text"),
25
23
  includeConsoleText: z
26
24
  .boolean()
27
25
  .default(false)
28
- .describe("Include bounded console message text"),
29
- consoleTextApproved: z
30
- .boolean()
31
- .default(false)
32
- .describe("Approve capturing console message text"),
26
+ .describe("Include console message text"),
33
27
  includeJsonBodyShapes: z
34
28
  .boolean()
35
29
  .default(false)
36
30
  .describe("Include structural shapes of JSON response bodies"),
37
- jsonBodySchemaApproved: z
38
- .boolean()
39
- .default(false)
40
- .describe("Approve inspecting JSON response bodies for structural shapes"),
41
31
  includeWebsocketShapes: z
42
32
  .boolean()
43
33
  .default(false)
44
34
  .describe("Include structural shapes of WebSocket payloads"),
45
- websocketShapeApproved: z
46
- .boolean()
47
- .default(false)
48
- .describe("Approve inspecting WebSocket payloads for structural shapes"),
49
35
  includeScriptSources: z
50
36
  .boolean()
51
37
  .default(false)
52
- .describe("Include bounded JavaScript source text"),
38
+ .describe("Include JavaScript source text"),
53
39
  includeStorageKeys: z
54
40
  .boolean()
55
41
  .default(false)
@@ -58,84 +44,17 @@ export const browserPageInspectionOptions = z.object({
58
44
  .boolean()
59
45
  .default(false)
60
46
  .describe("Include content-derived storage fingerprints"),
61
- maxFrames: boundedCount("page frames", 1_000, 200),
62
- maxDomNodes: boundedCount("DOM nodes", 10_000, 2_000),
63
- maxAxNodes: boundedCount("accessibility nodes", 10_000, 2_000),
64
- maxAxTextFieldBytes: boundedBytes("one accessibility text field", 16 * 1_024, 1_024),
65
- maxTotalAxTextBytes: boundedBytes("total accessibility text", 1_024 * 1_024, 64 * 1_024),
66
- maxScripts: boundedCount("scripts", 1_000, 200),
67
- maxResources: boundedCount("resources", 10_000, 2_000),
68
- maxWorkers: boundedCount("workers", 5_000, 500),
69
- maxStorageKeys: boundedCount("storage keys", 10_000, 1_000),
70
- maxScriptSourceBytes: boundedBytes("one script source", 4 * 1_024 * 1_024, 1_024 * 1_024),
71
- maxTotalScriptSourceBytes: boundedBytes("total script source", 16 * 1_024 * 1_024, 4 * 1_024 * 1_024),
72
- maxNetworkEvents: boundedCount("network events", 10_000, 1_000),
73
- maxConsoleEvents: boundedCount("console events", 2_000, 200),
74
- maxConsoleTextFieldBytes: boundedBytes("one console text field", 16 * 1_024, 1_024),
75
- maxTotalConsoleTextBytes: boundedBytes("total console text", 1_024 * 1_024, 64 * 1_024),
76
- maxJsonBodyBytes: boundedBytes("one JSON response body", 4 * 1_024 * 1_024, 1_024 * 1_024),
77
- maxTotalJsonBodyBytes: boundedBytes("total JSON response bodies", 16 * 1_024 * 1_024, 4 * 1_024 * 1_024),
78
- maxJsonShapeNodes: boundedCount("JSON shape nodes", 100_000, 5_000),
79
- maxJsonShapeDepth: boundedCount("JSON shape depth", 100, 20),
80
- maxWebsocketEvents: boundedCount("WebSocket events", 5_000, 500),
81
- maxWebsocketShapeBytes: boundedBytes("one WebSocket shape", 1_024 * 1_024, 64 * 1_024),
82
- maxTotalWebsocketShapeBytes: boundedBytes("total WebSocket shapes", 16 * 1_024 * 1_024, 1_024 * 1_024),
83
47
  });
84
- const electronScopeOptions = {
85
- allowedFileRoots: z
86
- .array(z.string().min(1))
87
- .optional()
88
- .describe("Filesystem roots; defaults to REA_ELECTRON_FILE_ROOTS_JSON"),
89
- approved: z.boolean().default(false).describe("Approve passive observation"),
90
- };
91
48
  export const electronPageInspectionOptions = z.object({
92
- ...electronScopeOptions,
93
- observationMs: boundedCount("observation duration in milliseconds", 10_000, 100, 0),
49
+ observationMs: observationDuration(100),
94
50
  includeScriptSources: z
95
51
  .boolean()
96
52
  .default(false)
97
- .describe("Include bounded JavaScript source text"),
98
- sourceCaptureApproved: z
99
- .boolean()
100
- .default(false)
101
- .describe("Approve capturing bounded script source text"),
102
- maxFrames: boundedCount("page frames", 1_000, 200),
103
- maxDomNodes: boundedCount("DOM nodes", 10_000, 2_000),
104
- maxScripts: boundedCount("scripts", 2_000, 500),
105
- maxResources: boundedCount("resources", 10_000, 2_000),
106
- maxWorkers: boundedCount("workers", 5_000, 500),
107
- maxScriptSourceBytes: boundedBytes("one captured script source", 4 * 1_024 * 1_024, 1_024 * 1_024),
108
- maxTotalScriptSourceBytes: boundedBytes("total captured script source", 16 * 1_024 * 1_024, 4 * 1_024 * 1_024),
53
+ .describe("Include JavaScript source text"),
109
54
  });
110
55
  export const javascriptApplicationOptions = z.object({
111
- approved: z
112
- .boolean()
113
- .default(false)
114
- .describe("Approve reading the application artifact"),
115
56
  artifactFormat: z
116
57
  .enum(["auto", "asar", "directory"])
117
58
  .default("auto")
118
59
  .describe("Application artifact format"),
119
- sourceMapReadApproved: z
120
- .boolean()
121
- .default(false)
122
- .describe("Approve reading local source maps referenced by the application"),
123
- maxEntries: positiveCount("artifact entries to inspect", 8_000),
124
- maxTotalArtifactBytes: positiveCount("total uncompressed artifact content to inspect", 512 * 1_024 * 1_024),
125
- maxArtifactEntryBytes: positiveCount("uncompressed content for one artifact entry", 128 * 1_024 * 1_024),
126
- maxCompressionRatio: z
127
- .number()
128
- .min(1)
129
- .default(1_000)
130
- .describe("Maximum accepted compressed-to-uncompressed expansion ratio"),
131
- maxDepth: positiveCount("artifact directory depth", 64),
132
- maxPathBytes: positiveCount("encoded artifact path length", 4_096),
133
- maxTextFiles: positiveCount("text files to parse", 5_000),
134
- maxTotalTextBytes: positiveCount("total text content to parse", 128 * 1_024 * 1_024),
135
- maxTextFileBytes: positiveCount("size of one parsed text file", 8 * 1_024 * 1_024),
136
- maxAstNodes: positiveCount("JavaScript AST nodes to parse", 2_000_000),
137
- maxFindings: positiveCount("static-analysis findings to return", 8_000),
138
- maxModules: positiveCount("application modules to project", 20_000),
139
- maxSourceMapSources: positiveCount("original sources from source maps", 5_000),
140
- maxParseMilliseconds: positiveCount("JavaScript parsing time in milliseconds", 30_000),
141
60
  });
@@ -5,23 +5,9 @@ import { readProjectPermissionStore, revokeProjectPermissionGrant, } from "./app
5
5
  import { logCliCommand } from "./cliLogging.js";
6
6
  import { parseConfig } from "./config.js";
7
7
  import { PermissionRequiredError, projectAnalysisError, } from "./domain/errors.js";
8
+ import { PERMISSION_CAPABILITIES, } from "./domain/permissionPolicy.js";
8
9
  import { CLI_COMMANDS } from "./cliCommandNames.js";
9
- const capabilitySchema = z.enum([
10
- "process_capture",
11
- "browser_observe",
12
- "browser_automate",
13
- "electron_observe",
14
- "evidence_read",
15
- "evidence_write",
16
- "investigation_input",
17
- "investigation_workspace_read",
18
- "investigation_workspace_write",
19
- "snapshot_read",
20
- "snapshot_write",
21
- "artifact_extract",
22
- "native_mount",
23
- "reference_read",
24
- ]);
10
+ const capabilitySchema = z.enum(PERMISSION_CAPABILITIES);
25
11
  /** Require an explicit decision before a project permission grant is removed. */
26
12
  export const approvePolicyRevocation = async (options) => {
27
13
  if (options.approved)
@@ -6,16 +6,16 @@ import { parseCliJsonInput } from "./cliJsonInput.js";
6
6
  import { replayMachineRunInputSchema, runReplayMachine, } from "./domain/replayMachineRun.js";
7
7
  import { AnalysisInputError, projectAnalysisError } from "./domain/errors.js";
8
8
  import { projectInputIssues } from "./domain/inputIssueProjection.js";
9
- /** Register Process Capture v4 one-shot commands through shared application services. */
9
+ /** Register process capture one-shot commands through shared application services. */
10
10
  export const registerProcessCommands = (cli, logger) => {
11
11
  registerReplayMachineCommand(cli, logger);
12
12
  cli.command(CLI_COMMANDS.captureProcess, {
13
- description: "Capture one approved Process Capture v4 JSON scenario",
13
+ description: "Capture one approved process capture JSON scenario",
14
14
  args: z.object({ scenario: z.string().describe("Scenario JSON path") }),
15
15
  run: ({ args }) => logCliCommand(logger, "capture-process", () => captureProcessScenarioFile(args.scenario)),
16
16
  });
17
17
  cli.command(CLI_COMMANDS.compareProcessCaptures, {
18
- description: "Compare two Process Capture v4 Evidence JSON files",
18
+ description: "Compare two process capture Evidence JSON files",
19
19
  args: z.object({
20
20
  left: z.string().describe("Left capture Evidence JSON path"),
21
21
  right: z.string().describe("Right capture Evidence JSON path"),
package/dist/cliSetup.js CHANGED
@@ -1,5 +1,4 @@
1
1
  import { cancel, confirm, intro, isCancel, multiselect, outro, } from "@clack/prompts";
2
- import { projectDoctorReport } from "./application/DoctorProjection.js";
3
2
  import { SUPPORTED_CLIENT_DEFINITIONS } from "./application/SupportedClients.js";
4
3
  const clientDisplayNames = new Map(SUPPORTED_CLIENT_DEFINITIONS.map(({ name, displayName }) => [
5
4
  name,
@@ -72,18 +71,6 @@ export const renderInteractiveSetupResult = (result) => {
72
71
  writeLine(`! ${result.remediation ?? "Setup needs attention."}`);
73
72
  outro("Run `rea doctor` for the remaining checks.", promptStreams);
74
73
  };
75
- /** Keep default non-TTY output actionable without emitting the full catalog. */
76
- export const conciseSetupResult = (result) => ({
77
- status: result.status,
78
- plannedActions: result.plannedActions,
79
- appliedActions: result.appliedActions,
80
- clients: result.clients,
81
- doctor: projectDoctorReport(result.doctor, "summary"),
82
- ...(result.code === undefined ? {} : { code: result.code }),
83
- ...(result.remediation === undefined
84
- ? {}
85
- : { remediation: result.remediation }),
86
- });
87
74
  const selectSetupActions = async (actions, accessible) => {
88
75
  const clientActions = actions.filter(({ kind }) => kind === "configure_client");
89
76
  const componentActions = actions.filter(({ kind }) => kind !== "configure_client");
@@ -0,0 +1,77 @@
1
+ import { ConfigurationError } from "../domain/errors.js";
2
+ import { err, ok } from "../domain/result.js";
3
+ import { browserEndpointSchema, browserOriginSchema, } from "../domain/browserObservation.js";
4
+ import { parseAbsoluteRoots, parseBrowserArray, parseStringArray, } from "./parsers.js";
5
+ import { browserNetworkScope, permissionScope } from "./permissions.js";
6
+ /** Parse controlled browser scenarios into a closed disabled or enabled policy. */
7
+ export const parseBrowserScenarioPolicy = (env) => {
8
+ const executableRoots = parseAbsoluteRoots(env.REA_BROWSER_SCENARIO_EXECUTABLE_ROOTS_JSON, "REA_BROWSER_SCENARIO_EXECUTABLE_ROOTS_JSON");
9
+ if (!executableRoots.ok)
10
+ return executableRoots;
11
+ const cdpEndpoints = parseBrowserArray(env.REA_BROWSER_SCENARIO_CDP_ENDPOINTS_JSON, "REA_BROWSER_SCENARIO_CDP_ENDPOINTS_JSON", browserEndpointSchema);
12
+ if (!cdpEndpoints.ok)
13
+ return cdpEndpoints;
14
+ const allowedOrigins = parseBrowserArray(env.REA_BROWSER_SCENARIO_ALLOWED_ORIGINS_JSON, "REA_BROWSER_SCENARIO_ALLOWED_ORIGINS_JSON", browserOriginSchema);
15
+ if (!allowedOrigins.ok)
16
+ return allowedOrigins;
17
+ const allowedEnvironment = parseStringArray(env.REA_BROWSER_SCENARIO_ALLOWED_ENV_JSON, "REA_BROWSER_SCENARIO_ALLOWED_ENV_JSON");
18
+ if (!allowedEnvironment.ok)
19
+ return allowedEnvironment;
20
+ if (env.REA_BROWSER_SCENARIO_ENABLED !== "true")
21
+ return ok({ status: "disabled" });
22
+ const [firstOrigin, ...remainingOrigins] = allowedOrigins.value;
23
+ if (firstOrigin === undefined)
24
+ return err(new ConfigurationError("REA_BROWSER_SCENARIO_ALLOWED_ORIGINS_JSON must encode at least one exact origin when browser scenarios are enabled"));
25
+ const target = parseTargetPolicy(executableRoots.value, cdpEndpoints.value);
26
+ if (!target.ok)
27
+ return target;
28
+ return ok({
29
+ status: "enabled",
30
+ target: target.value,
31
+ allowedOrigins: [firstOrigin, ...remainingOrigins],
32
+ allowedEnvironment: allowedEnvironment.value,
33
+ });
34
+ };
35
+ /** Add the separately permissioned controlled-browser ceiling. */
36
+ export const appendBrowserScenarioCeiling = (ceilings, policy) => {
37
+ if (policy.status === "disabled")
38
+ return;
39
+ const { executableRoots, cdpEndpoints } = targetScopes(policy.target);
40
+ ceilings.push(permissionScope("browser_automate", [], {
41
+ executables: executableRoots,
42
+ environment_names: policy.allowedEnvironment,
43
+ origins: [...cdpEndpoints, ...policy.allowedOrigins],
44
+ network: browserNetworkScope(policy.allowedOrigins),
45
+ }));
46
+ };
47
+ const parseTargetPolicy = (executableRoots, cdpEndpoints) => {
48
+ const [firstExecutableRoot, ...remainingExecutableRoots] = executableRoots;
49
+ const [firstCdpEndpoint, ...remainingCdpEndpoints] = cdpEndpoints;
50
+ if (firstExecutableRoot !== undefined && firstCdpEndpoint !== undefined)
51
+ return ok({
52
+ access: "launch-or-attach",
53
+ executableRoots: [firstExecutableRoot, ...remainingExecutableRoots],
54
+ cdpEndpoints: [firstCdpEndpoint, ...remainingCdpEndpoints],
55
+ });
56
+ if (firstExecutableRoot !== undefined)
57
+ return ok({
58
+ access: "launch",
59
+ executableRoots: [firstExecutableRoot, ...remainingExecutableRoots],
60
+ });
61
+ if (firstCdpEndpoint !== undefined)
62
+ return ok({
63
+ access: "attach",
64
+ cdpEndpoints: [firstCdpEndpoint, ...remainingCdpEndpoints],
65
+ });
66
+ return err(new ConfigurationError("Browser scenarios require at least one executable root or loopback CDP endpoint when enabled"));
67
+ };
68
+ const targetScopes = (target) => {
69
+ switch (target.access) {
70
+ case "launch":
71
+ return { executableRoots: target.executableRoots, cdpEndpoints: [] };
72
+ case "attach":
73
+ return { executableRoots: [], cdpEndpoints: target.cdpEndpoints };
74
+ case "launch-or-attach":
75
+ return target;
76
+ }
77
+ };
@@ -0,0 +1,35 @@
1
+ import { ConfigurationError } from "../domain/errors.js";
2
+ import { err, ok } from "../domain/result.js";
3
+ import { permissionScope } from "./permissions.js";
4
+ import { parseAbsoluteRoots } from "./parsers.js";
5
+ /** Parse active Electron automation into a closed disabled or enabled policy. */
6
+ export const parseElectronAutomationPolicy = (env) => {
7
+ const executableRoots = parseAbsoluteRoots(env.REA_ELECTRON_AUTOMATE_EXECUTABLE_ROOTS_JSON, "REA_ELECTRON_AUTOMATE_EXECUTABLE_ROOTS_JSON");
8
+ if (!executableRoots.ok)
9
+ return executableRoots;
10
+ const applicationRoots = parseAbsoluteRoots(env.REA_ELECTRON_AUTOMATE_APPLICATION_ROOTS_JSON, "REA_ELECTRON_AUTOMATE_APPLICATION_ROOTS_JSON");
11
+ if (!applicationRoots.ok)
12
+ return applicationRoots;
13
+ if (env.REA_ELECTRON_AUTOMATE_ENABLED !== "true")
14
+ return ok({ status: "disabled" });
15
+ const [firstExecutableRoot, ...remainingExecutableRoots] = executableRoots.value;
16
+ if (firstExecutableRoot === undefined)
17
+ return err(new ConfigurationError("REA_ELECTRON_AUTOMATE_EXECUTABLE_ROOTS_JSON must encode at least one absolute root when Electron automation is enabled"));
18
+ const [firstApplicationRoot, ...remainingApplicationRoots] = applicationRoots.value;
19
+ if (firstApplicationRoot === undefined)
20
+ return err(new ConfigurationError("REA_ELECTRON_AUTOMATE_APPLICATION_ROOTS_JSON must encode at least one absolute root when Electron automation is enabled"));
21
+ return ok({
22
+ status: "enabled",
23
+ executableRoots: [firstExecutableRoot, ...remainingExecutableRoots],
24
+ applicationRoots: [firstApplicationRoot, ...remainingApplicationRoots],
25
+ });
26
+ };
27
+ /** Add the separately permissioned, no-network Electron automation ceiling. */
28
+ export const appendElectronAutomationCeiling = (ceilings, policy) => {
29
+ if (policy.status === "disabled")
30
+ return;
31
+ ceilings.push(permissionScope("electron_automate", policy.applicationRoots, {
32
+ executables: policy.executableRoots,
33
+ network: "external",
34
+ }));
35
+ };
@@ -44,10 +44,6 @@ const environmentSchema = z
44
44
  REA_PROCESS_EXECUTABLE_ROOTS_JSON: z.string().default("[]"),
45
45
  REA_PROCESS_WORKING_ROOTS_JSON: z.string().default("[]"),
46
46
  REA_PROCESS_ALLOWED_ENV_JSON: z.string().default("[]"),
47
- REA_EVIDENCE_ROOTS_JSON: z.string().default("[]"),
48
- REA_INVESTIGATION_INPUT_ROOTS_JSON: z.string().default("[]"),
49
- REA_ANALYSIS_SNAPSHOT_ROOTS_JSON: z.string().default("[]"),
50
- REA_REFERENCE_ROOTS_JSON: z.string().default("[]"),
51
47
  REA_REFERENCE_SECRET_PATTERNS_JSON: z.string().default("[]"),
52
48
  REA_BROWSER_OBSERVE_ENABLED: z.enum(["true", "false"]).default("false"),
53
49
  REA_BROWSER_CDP_ENDPOINTS_JSON: z.string().default("[]"),
@@ -59,14 +55,15 @@ const environmentSchema = z
59
55
  REA_BROWSER_SCENARIO_ALLOWED_ORIGINS_JSON: z.string().default("[]"),
60
56
  REA_BROWSER_SCENARIO_ALLOWED_ENV_JSON: z.string().default("[]"),
61
57
  REA_ELECTRON_OBSERVE_ENABLED: z.enum(["true", "false"]).default("false"),
62
- REA_ELECTRON_CDP_ENDPOINTS_JSON: z.string().default("[]"),
63
- REA_ELECTRON_FILE_ROOTS_JSON: z.string().default("[]"),
58
+ REA_ELECTRON_AUTOMATE_ENABLED: z.enum(["true", "false"]).default("false"),
59
+ REA_ELECTRON_AUTOMATE_AUTO_GRANT: z
60
+ .enum(["true", "false"])
61
+ .default("false"),
62
+ REA_ELECTRON_AUTOMATE_EXECUTABLE_ROOTS_JSON: z.string().default("[]"),
63
+ REA_ELECTRON_AUTOMATE_APPLICATION_ROOTS_JSON: z.string().default("[]"),
64
64
  REA_V8_INSPECTOR_OBSERVE_ENABLED: z
65
65
  .enum(["true", "false"])
66
66
  .default("false"),
67
- REA_V8_INSPECTOR_ENDPOINTS_JSON: z.string().default("[]"),
68
- REA_V8_INSPECTOR_FILE_ROOTS_JSON: z.string().default("[]"),
69
- REA_V8_INSPECTOR_ALLOWED_ORIGINS_JSON: z.string().default("[]"),
70
67
  REA_JAVASCRIPT_REPLAY_ENABLED: z.enum(["true", "false"]).default("false"),
71
68
  REA_JAVASCRIPT_REPLAY_ROOTS_JSON: z.string().default("[]"),
72
69
  REA_JAVASCRIPT_REPLAY_NODE_PATH: z
@@ -0,0 +1,41 @@
1
+ import { ConfigurationError } from "../domain/errors.js";
2
+ import { err, ok } from "../domain/result.js";
3
+ import { parseAbsoluteRoots } from "./parsers.js";
4
+ import { permissionScope } from "./permissions.js";
5
+ /** Parse controlled replay configuration into disabled or fully enabled state. */
6
+ export const parseJavaScriptReplayPolicy = (env) => {
7
+ const roots = parseAbsoluteRoots(env.REA_JAVASCRIPT_REPLAY_ROOTS_JSON, "REA_JAVASCRIPT_REPLAY_ROOTS_JSON");
8
+ if (!roots.ok)
9
+ return roots;
10
+ if (env.REA_JAVASCRIPT_REPLAY_ENABLED !== "true")
11
+ return ok({ status: "disabled" });
12
+ const [firstRoot, ...remainingRoots] = roots.value;
13
+ if (firstRoot === undefined)
14
+ return err(new ConfigurationError("REA_JAVASCRIPT_REPLAY_ROOTS_JSON must encode at least one absolute root when JavaScript replay is enabled"));
15
+ return ok({
16
+ status: "enabled",
17
+ roots: [firstRoot, ...remainingRoots],
18
+ nodePath: env.REA_JAVASCRIPT_REPLAY_NODE_PATH,
19
+ bubblewrapPath: env.REA_JAVASCRIPT_REPLAY_BWRAP_PATH,
20
+ systemdRunPath: env.REA_JAVASCRIPT_REPLAY_SYSTEMD_RUN_PATH,
21
+ systemctlPath: env.REA_JAVASCRIPT_REPLAY_SYSTEMCTL_PATH,
22
+ shellPath: env.REA_JAVASCRIPT_REPLAY_SHELL_PATH,
23
+ });
24
+ };
25
+ /** Add the exact controlled replay ceiling when replay is enabled. */
26
+ export const appendJavaScriptReplayCeiling = (ceilings, policy) => {
27
+ if (policy.status === "disabled")
28
+ return;
29
+ ceilings.push(permissionScope("javascript_replay", policy.roots, {
30
+ executables: replayExecutables(policy),
31
+ network: "none",
32
+ mount: true,
33
+ }));
34
+ };
35
+ const replayExecutables = (policy) => [
36
+ policy.nodePath,
37
+ policy.bubblewrapPath,
38
+ policy.systemdRunPath,
39
+ policy.systemctlPath,
40
+ policy.shellPath,
41
+ ];
@@ -0,0 +1,25 @@
1
+ import { ConfigurationError } from "../domain/errors.js";
2
+ import { err, ok } from "../domain/result.js";
3
+ import { permissionScope } from "./permissions.js";
4
+ /** Parse managed runtime correlation into a closed disabled or enabled policy. */
5
+ export const parseManagedRuntimePolicy = (env, roots) => {
6
+ if (env.REA_MANAGED_RUNTIME_ENABLED !== "true")
7
+ return ok({ status: "disabled" });
8
+ const [firstRoot, ...remainingRoots] = roots;
9
+ if (firstRoot === undefined)
10
+ return err(new ConfigurationError("REA_MANAGED_RUNTIME_ROOTS_JSON must encode at least one absolute root when managed runtime correlation is enabled"));
11
+ return ok({
12
+ status: "enabled",
13
+ roots: [firstRoot, ...remainingRoots],
14
+ executablePath: env.REA_MANAGED_RUNTIME_EXECUTABLE_PATH,
15
+ });
16
+ };
17
+ /** Add the separately permissioned, no-network managed runtime ceiling. */
18
+ export const appendManagedRuntimeCeiling = (ceilings, policy) => {
19
+ if (policy.status === "disabled")
20
+ return;
21
+ ceilings.push(permissionScope("managed_runtime", policy.roots, {
22
+ executables: [policy.executablePath],
23
+ network: "none",
24
+ }));
25
+ };