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,10 +1,14 @@
1
- import { isAbsolute } from "node:path";
2
1
  import { ConfigurationError } from "../domain/errors.js";
3
- import { err, ok } from "../domain/result.js";
2
+ import { ok } from "../domain/result.js";
4
3
  import { parseEnvironment } from "./environment.js";
5
- import { parseStringArray, parseBrowserArray, parseElectronFileRoots, parseLoaderArgs, } from "./parsers.js";
6
- import { filePolicy, permissionScope, administratorGrants, browserNetworkScope, } from "./permissions.js";
7
- import { browserEndpointSchema, browserOriginSchema, } from "../domain/browserObservation.js";
4
+ import { parseStringArray, parseAbsoluteRoots, parseLoaderArgs, } from "./parsers.js";
5
+ import { permissionScope, administratorGrants } from "./permissions.js";
6
+ import { appendElectronAutomationCeiling, parseElectronAutomationPolicy, } from "./electronAutomation.js";
7
+ import { appendBrowserScenarioCeiling, parseBrowserScenarioPolicy, } from "./browserScenario.js";
8
+ import { appendManagedRuntimeCeiling, parseManagedRuntimePolicy, } from "./managedRuntime.js";
9
+ import { appendJavaScriptReplayCeiling, parseJavaScriptReplayPolicy, } from "./javascriptReplay.js";
10
+ import { appendProcessCaptureCeiling, parseProcessExecutionPolicy, } from "./processCapture.js";
11
+ import { appendPassiveObservationCeilings, parsePassiveObservationPolicies, } from "./passiveObservation.js";
8
12
  const DEFAULT_HOPPER_LAUNCHER_PATH = "/Applications/Hopper Disassembler.app/Contents/MacOS/hopper";
9
13
  const defaultHopperLauncherPath = () => process.platform === "linux"
10
14
  ? "/opt/hopper/bin/Hopper"
@@ -13,206 +17,36 @@ const parseAllArrays = (env) => {
13
17
  const loaderArgs = parseLoaderArgs(env.HOPPER_LOADER_ARGS_JSON);
14
18
  if (!loaderArgs.ok)
15
19
  return loaderArgs;
16
- const executableRoots = parseStringArray(env.REA_PROCESS_EXECUTABLE_ROOTS_JSON, "REA_PROCESS_EXECUTABLE_ROOTS_JSON");
17
- if (!executableRoots.ok)
18
- return executableRoots;
19
- const workingRoots = parseStringArray(env.REA_PROCESS_WORKING_ROOTS_JSON, "REA_PROCESS_WORKING_ROOTS_JSON");
20
- if (!workingRoots.ok)
21
- return workingRoots;
22
- const allowedEnvironment = parseStringArray(env.REA_PROCESS_ALLOWED_ENV_JSON, "REA_PROCESS_ALLOWED_ENV_JSON");
23
- if (!allowedEnvironment.ok)
24
- return allowedEnvironment;
25
- const evidenceRoots = parseStringArray(env.REA_EVIDENCE_ROOTS_JSON, "REA_EVIDENCE_ROOTS_JSON");
26
- if (!evidenceRoots.ok)
27
- return evidenceRoots;
28
- const investigationInputRoots = parseStringArray(env.REA_INVESTIGATION_INPUT_ROOTS_JSON, "REA_INVESTIGATION_INPUT_ROOTS_JSON");
29
- if (!investigationInputRoots.ok)
30
- return investigationInputRoots;
31
- const analysisSnapshotRoots = parseStringArray(env.REA_ANALYSIS_SNAPSHOT_ROOTS_JSON, "REA_ANALYSIS_SNAPSHOT_ROOTS_JSON");
32
- if (!analysisSnapshotRoots.ok)
33
- return analysisSnapshotRoots;
34
- const referenceRoots = parseStringArray(env.REA_REFERENCE_ROOTS_JSON, "REA_REFERENCE_ROOTS_JSON");
35
- if (!referenceRoots.ok)
36
- return referenceRoots;
37
20
  const secretPatterns = parseStringArray(env.REA_REFERENCE_SECRET_PATTERNS_JSON, "REA_REFERENCE_SECRET_PATTERNS_JSON");
38
21
  if (!secretPatterns.ok)
39
22
  return secretPatterns;
40
- const observations = parseObservationArrays(env);
41
- if (!observations.ok)
42
- return observations;
43
- const javascriptReplayRoots = parseAbsoluteRoots(env.REA_JAVASCRIPT_REPLAY_ROOTS_JSON, "REA_JAVASCRIPT_REPLAY_ROOTS_JSON");
44
- if (!javascriptReplayRoots.ok)
45
- return javascriptReplayRoots;
46
23
  const managedRuntimeRoots = parseAbsoluteRoots(env.REA_MANAGED_RUNTIME_ROOTS_JSON, "REA_MANAGED_RUNTIME_ROOTS_JSON");
47
24
  if (!managedRuntimeRoots.ok)
48
25
  return managedRuntimeRoots;
49
26
  return ok({
50
27
  loaderArgs: loaderArgs.value,
51
- executableRoots: executableRoots.value,
52
- workingRoots: workingRoots.value,
53
- allowedEnvironment: allowedEnvironment.value,
54
- evidenceRoots: evidenceRoots.value,
55
- investigationInputRoots: investigationInputRoots.value,
56
- analysisSnapshotRoots: analysisSnapshotRoots.value,
57
- referenceRoots: referenceRoots.value,
58
28
  secretPatterns: secretPatterns.value,
59
- ...observations.value,
60
- javascriptReplayRoots: javascriptReplayRoots.value,
61
29
  managedRuntimeRoots: managedRuntimeRoots.value,
62
30
  });
63
31
  };
64
- const parseObservationArrays = (env) => {
65
- const browserEndpoints = parseBrowserArray(env.REA_BROWSER_CDP_ENDPOINTS_JSON, "REA_BROWSER_CDP_ENDPOINTS_JSON", browserEndpointSchema, 16);
66
- if (!browserEndpoints.ok)
67
- return browserEndpoints;
68
- const browserOrigins = parseBrowserArray(env.REA_BROWSER_ALLOWED_ORIGINS_JSON, "REA_BROWSER_ALLOWED_ORIGINS_JSON", browserOriginSchema, 32);
69
- if (!browserOrigins.ok)
70
- return browserOrigins;
71
- const browserScenarioExecutableRoots = parseAbsoluteRoots(env.REA_BROWSER_SCENARIO_EXECUTABLE_ROOTS_JSON, "REA_BROWSER_SCENARIO_EXECUTABLE_ROOTS_JSON");
72
- if (!browserScenarioExecutableRoots.ok)
73
- return browserScenarioExecutableRoots;
74
- const browserScenarioEndpoints = parseBrowserArray(env.REA_BROWSER_SCENARIO_CDP_ENDPOINTS_JSON, "REA_BROWSER_SCENARIO_CDP_ENDPOINTS_JSON", browserEndpointSchema, 16);
75
- if (!browserScenarioEndpoints.ok)
76
- return browserScenarioEndpoints;
77
- const browserScenarioOrigins = parseBrowserArray(env.REA_BROWSER_SCENARIO_ALLOWED_ORIGINS_JSON, "REA_BROWSER_SCENARIO_ALLOWED_ORIGINS_JSON", browserOriginSchema, 32);
78
- if (!browserScenarioOrigins.ok)
79
- return browserScenarioOrigins;
80
- const browserScenarioEnvironment = parseStringArray(env.REA_BROWSER_SCENARIO_ALLOWED_ENV_JSON, "REA_BROWSER_SCENARIO_ALLOWED_ENV_JSON");
81
- if (!browserScenarioEnvironment.ok)
82
- return browserScenarioEnvironment;
83
- const electronEndpoints = parseBrowserArray(env.REA_ELECTRON_CDP_ENDPOINTS_JSON, "REA_ELECTRON_CDP_ENDPOINTS_JSON", browserEndpointSchema, 16);
84
- if (!electronEndpoints.ok)
85
- return electronEndpoints;
86
- const electronFileRoots = parseElectronFileRoots(env.REA_ELECTRON_FILE_ROOTS_JSON);
87
- if (!electronFileRoots.ok)
88
- return electronFileRoots;
89
- const v8InspectorEndpoints = parseBrowserArray(env.REA_V8_INSPECTOR_ENDPOINTS_JSON, "REA_V8_INSPECTOR_ENDPOINTS_JSON", browserEndpointSchema, 16);
90
- if (!v8InspectorEndpoints.ok)
91
- return v8InspectorEndpoints;
92
- const v8InspectorFileRoots = parseAbsoluteRoots(env.REA_V8_INSPECTOR_FILE_ROOTS_JSON, "REA_V8_INSPECTOR_FILE_ROOTS_JSON");
93
- if (!v8InspectorFileRoots.ok)
94
- return v8InspectorFileRoots;
95
- const v8InspectorOrigins = parseBrowserArray(env.REA_V8_INSPECTOR_ALLOWED_ORIGINS_JSON, "REA_V8_INSPECTOR_ALLOWED_ORIGINS_JSON", browserOriginSchema, 32);
96
- if (!v8InspectorOrigins.ok)
97
- return v8InspectorOrigins;
98
- return ok({
99
- browserEndpoints: browserEndpoints.value,
100
- browserOrigins: browserOrigins.value,
101
- browserScenarioExecutableRoots: browserScenarioExecutableRoots.value,
102
- browserScenarioEndpoints: browserScenarioEndpoints.value,
103
- browserScenarioOrigins: browserScenarioOrigins.value,
104
- browserScenarioEnvironment: browserScenarioEnvironment.value,
105
- electronEndpoints: electronEndpoints.value,
106
- electronFileRoots: electronFileRoots.value,
107
- v8InspectorEndpoints: v8InspectorEndpoints.value,
108
- v8InspectorFileRoots: v8InspectorFileRoots.value,
109
- v8InspectorOrigins: v8InspectorOrigins.value,
110
- });
111
- };
112
- const parseAbsoluteRoots = (value, name) => {
113
- const parsed = parseStringArray(value, name);
114
- if (!parsed.ok)
115
- return parsed;
116
- return parsed.value.some((root) => !isAbsolute(root))
117
- ? err(new ConfigurationError(`${name} must encode absolute roots`))
118
- : parsed;
119
- };
120
- const appendProcessCaptureCeiling = (ceilings, env, arrays) => {
121
- if (env.REA_PROCESS_CAPTURE_ENABLED !== "true")
122
- return;
123
- ceilings.push(permissionScope("process_capture", arrays.workingRoots, {
124
- executables: arrays.executableRoots,
125
- environment_names: arrays.allowedEnvironment,
126
- network: env.REA_PROCESS_ALLOW_EXTERNAL_NETWORK === "true" ? "external" : "none",
127
- }));
128
- };
129
- const appendBrowserObservationCeiling = (ceilings, env, arrays) => {
130
- if (env.REA_BROWSER_OBSERVE_ENABLED !== "true")
131
- return;
132
- ceilings.push(permissionScope("browser_observe", [], {
133
- origins: [...arrays.browserEndpoints, ...arrays.browserOrigins],
134
- network: browserNetworkScope(arrays.browserOrigins),
135
- }));
136
- };
137
- const appendBrowserScenarioCeiling = (ceilings, env, arrays) => {
138
- if (env.REA_BROWSER_SCENARIO_ENABLED !== "true")
139
- return;
140
- ceilings.push(permissionScope("browser_automate", [], {
141
- executables: arrays.browserScenarioExecutableRoots,
142
- environment_names: arrays.browserScenarioEnvironment,
143
- origins: [
144
- ...arrays.browserScenarioEndpoints,
145
- ...arrays.browserScenarioOrigins,
146
- ],
147
- network: browserNetworkScope(arrays.browserScenarioOrigins),
148
- }));
149
- };
150
- const appendElectronObservationCeiling = (ceilings, env, arrays) => {
151
- if (env.REA_ELECTRON_OBSERVE_ENABLED !== "true")
152
- return;
153
- ceilings.push(permissionScope("electron_observe", arrays.electronFileRoots, {
154
- origins: arrays.electronEndpoints,
155
- network: "loopback",
156
- }));
157
- };
158
- const appendV8InspectorObservationCeiling = (ceilings, env, arrays) => {
159
- if (env.REA_V8_INSPECTOR_OBSERVE_ENABLED !== "true")
160
- return;
161
- ceilings.push(permissionScope("v8_inspector_observe", arrays.v8InspectorFileRoots, {
162
- origins: [...arrays.v8InspectorEndpoints, ...arrays.v8InspectorOrigins],
163
- network: "loopback",
164
- }));
165
- };
166
32
  const appendNativeMountCeiling = (ceilings, env) => {
167
33
  if (env.REA_ARTIFACT_NATIVE_MOUNT_ENABLED === "true")
168
34
  ceilings.push(permissionScope("native_mount", [], { mount: true }));
169
35
  };
170
- const appendJavaScriptReplayCeiling = (ceilings, env, arrays) => {
171
- if (env.REA_JAVASCRIPT_REPLAY_ENABLED !== "true")
172
- return;
173
- ceilings.push(permissionScope("javascript_replay", arrays.javascriptReplayRoots, {
174
- executables: [
175
- env.REA_JAVASCRIPT_REPLAY_NODE_PATH,
176
- env.REA_JAVASCRIPT_REPLAY_BWRAP_PATH,
177
- env.REA_JAVASCRIPT_REPLAY_SYSTEMD_RUN_PATH,
178
- env.REA_JAVASCRIPT_REPLAY_SYSTEMCTL_PATH,
179
- env.REA_JAVASCRIPT_REPLAY_SHELL_PATH,
180
- ],
181
- network: "none",
182
- mount: true,
183
- }));
184
- };
185
- const appendManagedRuntimeCeiling = (ceilings, env, arrays) => {
186
- if (env.REA_MANAGED_RUNTIME_ENABLED !== "true")
187
- return;
188
- ceilings.push(permissionScope("managed_runtime", arrays.managedRuntimeRoots, {
189
- executables: [env.REA_MANAGED_RUNTIME_EXECUTABLE_PATH],
190
- network: "none",
191
- }));
192
- };
193
- const buildPermissionCeilings = (env, arrays) => {
36
+ const buildPermissionCeilings = (env, arrays, policies) => {
194
37
  const ceilings = [
195
- permissionScope("evidence_read", arrays.evidenceRoots),
196
- permissionScope("evidence_write", arrays.evidenceRoots),
197
- permissionScope("investigation_input", arrays.investigationInputRoots),
198
- permissionScope("investigation_workspace_read", arrays.evidenceRoots),
199
- permissionScope("investigation_workspace_write", arrays.evidenceRoots),
200
- permissionScope("snapshot_read", arrays.analysisSnapshotRoots),
201
- permissionScope("snapshot_write", arrays.analysisSnapshotRoots),
202
38
  permissionScope("artifact_extract", ["/"]),
203
- permissionScope("reference_read", arrays.referenceRoots),
204
39
  ];
205
- appendProcessCaptureCeiling(ceilings, env, arrays);
206
- appendBrowserObservationCeiling(ceilings, env, arrays);
207
- appendBrowserScenarioCeiling(ceilings, env, arrays);
208
- appendElectronObservationCeiling(ceilings, env, arrays);
209
- appendV8InspectorObservationCeiling(ceilings, env, arrays);
40
+ appendProcessCaptureCeiling(ceilings, policies.processCapture);
41
+ appendPassiveObservationCeilings(ceilings, policies.passiveObservation);
42
+ appendBrowserScenarioCeiling(ceilings, policies.browserScenario);
43
+ appendElectronAutomationCeiling(ceilings, policies.electronAutomation);
210
44
  appendNativeMountCeiling(ceilings, env);
211
- appendJavaScriptReplayCeiling(ceilings, env, arrays);
212
- appendManagedRuntimeCeiling(ceilings, env, arrays);
45
+ appendJavaScriptReplayCeiling(ceilings, policies.javascriptReplay);
46
+ appendManagedRuntimeCeiling(ceilings, policies.managedRuntime);
213
47
  return ceilings;
214
48
  };
215
- const buildAppConfig = (env, arrays, permissionCeilings) => ({
49
+ const buildAppConfig = (env, arrays, permissionCeilings, policies) => ({
216
50
  analysisProvider: env.REA_ANALYSIS_PROVIDER,
217
51
  ghidraInstallDir: env.GHIDRA_INSTALL_DIR,
218
52
  ghidraJavaHome: env.JAVA_HOME,
@@ -222,62 +56,26 @@ const buildAppConfig = (env, arrays, permissionCeilings) => ({
222
56
  hopperTargetKind: env.HOPPER_TARGET_KIND,
223
57
  hopperLoaderArgs: arrays.loaderArgs,
224
58
  logLevel: env.REA_LOG_LEVEL,
225
- processExecutionPolicy: {
226
- enabled: env.REA_PROCESS_CAPTURE_ENABLED === "true",
227
- executableRoots: arrays.executableRoots,
228
- workingRoots: arrays.workingRoots,
229
- allowedEnvironment: arrays.allowedEnvironment,
230
- allowExternalNetwork: env.REA_PROCESS_ALLOW_EXTERNAL_NETWORK === "true",
231
- },
59
+ processExecutionPolicy: policies.processCapture,
232
60
  artifactNativeMountEnabled: env.REA_ARTIFACT_NATIVE_MOUNT_ENABLED === "true",
233
61
  artifactIntegrityContinueEnabled: env.REA_ARTIFACT_INTEGRITY_CONTINUE_ENABLED === "true",
234
- evidenceFilePolicy: filePolicy(arrays.evidenceRoots),
235
- investigationInputRoots: arrays.investigationInputRoots,
236
- analysisSnapshotFilePolicy: filePolicy(arrays.analysisSnapshotRoots),
237
62
  referenceSourcePolicy: {
238
- roots: arrays.referenceRoots,
239
63
  secretPatterns: arrays.secretPatterns,
240
- maxBytes: 16 * 1024 * 1024,
241
- maxEntries: 10_000,
242
- maxDepth: 32,
243
- maxPathBytes: 4_096,
244
- },
245
- browserObservationEnabled: env.REA_BROWSER_OBSERVE_ENABLED === "true",
246
- browserCdpEndpoints: arrays.browserEndpoints,
247
- browserAllowedOrigins: arrays.browserOrigins,
248
- browserScenarioPolicy: {
249
- enabled: env.REA_BROWSER_SCENARIO_ENABLED === "true",
250
- executableRoots: arrays.browserScenarioExecutableRoots,
251
- cdpEndpoints: arrays.browserScenarioEndpoints,
252
- allowedOrigins: arrays.browserScenarioOrigins,
253
- allowedEnvironment: arrays.browserScenarioEnvironment,
254
- },
255
- electronObservationEnabled: env.REA_ELECTRON_OBSERVE_ENABLED === "true",
256
- electronCdpEndpoints: arrays.electronEndpoints,
257
- electronFileRoots: arrays.electronFileRoots,
258
- v8InspectorObservationEnabled: env.REA_V8_INSPECTOR_OBSERVE_ENABLED === "true",
259
- v8InspectorEndpoints: arrays.v8InspectorEndpoints,
260
- v8InspectorFileRoots: arrays.v8InspectorFileRoots,
261
- v8InspectorAllowedOrigins: arrays.v8InspectorOrigins,
262
- javascriptReplayPolicy: {
263
- enabled: env.REA_JAVASCRIPT_REPLAY_ENABLED === "true",
264
- roots: arrays.javascriptReplayRoots,
265
- nodePath: env.REA_JAVASCRIPT_REPLAY_NODE_PATH,
266
- bubblewrapPath: env.REA_JAVASCRIPT_REPLAY_BWRAP_PATH,
267
- systemdRunPath: env.REA_JAVASCRIPT_REPLAY_SYSTEMD_RUN_PATH,
268
- systemctlPath: env.REA_JAVASCRIPT_REPLAY_SYSTEMCTL_PATH,
269
- shellPath: env.REA_JAVASCRIPT_REPLAY_SHELL_PATH,
270
- },
271
- managedRuntimePolicy: {
272
- enabled: env.REA_MANAGED_RUNTIME_ENABLED === "true",
273
- roots: arrays.managedRuntimeRoots,
274
- executablePath: env.REA_MANAGED_RUNTIME_EXECUTABLE_PATH,
275
64
  },
65
+ browserObservationPolicy: policies.passiveObservation.browser,
66
+ browserScenarioPolicy: policies.browserScenario,
67
+ electronObservationPolicy: policies.passiveObservation.electron,
68
+ electronAutomationPolicy: policies.electronAutomation,
69
+ v8InspectorObservationPolicy: policies.passiveObservation.v8Inspector,
70
+ javascriptReplayPolicy: policies.javascriptReplay,
71
+ managedRuntimePolicy: policies.managedRuntime,
276
72
  permissionCeilings,
277
73
  administratorPermissionGrants: administratorGrants(permissionCeilings.filter(({ capability }) => (capability !== "process_capture" ||
278
74
  env.REA_PROCESS_CAPTURE_AUTO_GRANT === "true") &&
279
75
  (capability !== "browser_automate" ||
280
- env.REA_BROWSER_SCENARIO_AUTO_GRANT === "true"))),
76
+ env.REA_BROWSER_SCENARIO_AUTO_GRANT === "true") &&
77
+ (capability !== "electron_automate" ||
78
+ env.REA_ELECTRON_AUTOMATE_AUTO_GRANT === "true"))),
281
79
  permissionProjectRoot: env.REA_PERMISSION_PROJECT_ROOT,
282
80
  permissionProjectStore: env.REA_PERMISSION_PROJECT_STORE,
283
81
  });
@@ -294,6 +92,32 @@ export const parseConfig = (environment) => {
294
92
  const arraysResult = parseAllArrays(envResult.value);
295
93
  if (!arraysResult.ok)
296
94
  return arraysResult;
297
- const permissionCeilings = buildPermissionCeilings(envResult.value, arraysResult.value);
298
- return ok(buildAppConfig(envResult.value, arraysResult.value, permissionCeilings));
95
+ const passiveObservationPolicies = parsePassiveObservationPolicies(envResult.value);
96
+ if (!passiveObservationPolicies.ok)
97
+ return passiveObservationPolicies;
98
+ const processCapturePolicy = parseProcessExecutionPolicy(envResult.value);
99
+ if (!processCapturePolicy.ok)
100
+ return processCapturePolicy;
101
+ const browserScenarioPolicy = parseBrowserScenarioPolicy(envResult.value);
102
+ if (!browserScenarioPolicy.ok)
103
+ return browserScenarioPolicy;
104
+ const electronAutomationPolicy = parseElectronAutomationPolicy(envResult.value);
105
+ if (!electronAutomationPolicy.ok)
106
+ return electronAutomationPolicy;
107
+ const javascriptReplayPolicy = parseJavaScriptReplayPolicy(envResult.value);
108
+ if (!javascriptReplayPolicy.ok)
109
+ return javascriptReplayPolicy;
110
+ const managedRuntimePolicy = parseManagedRuntimePolicy(envResult.value, arraysResult.value.managedRuntimeRoots);
111
+ if (!managedRuntimePolicy.ok)
112
+ return managedRuntimePolicy;
113
+ const policies = {
114
+ passiveObservation: passiveObservationPolicies.value,
115
+ processCapture: processCapturePolicy.value,
116
+ browserScenario: browserScenarioPolicy.value,
117
+ electronAutomation: electronAutomationPolicy.value,
118
+ javascriptReplay: javascriptReplayPolicy.value,
119
+ managedRuntime: managedRuntimePolicy.value,
120
+ };
121
+ const permissionCeilings = buildPermissionCeilings(envResult.value, arraysResult.value, policies);
122
+ return ok(buildAppConfig(envResult.value, arraysResult.value, permissionCeilings, policies));
299
123
  };
@@ -1,30 +1,32 @@
1
1
  import { z } from "zod";
2
+ import { isAbsolute } from "node:path";
2
3
  import { ConfigurationError } from "../domain/errors.js";
3
4
  import { err, ok } from "../domain/result.js";
4
- import {} from "../domain/browserObservation.js";
5
- import { electronFileRootsSchema } from "../domain/electronObservation.js";
6
5
  export const parseStringArray = (encoded, name) => {
7
6
  try {
8
- const parsed = z
9
- .array(z.string().min(1))
10
- .max(128)
11
- .safeParse(JSON.parse(encoded));
7
+ const parsed = z.array(z.string().min(1)).safeParse(JSON.parse(encoded));
12
8
  return parsed.success
13
9
  ? ok(parsed.data)
14
- : err(new ConfigurationError(parsed.error.issues.some(({ code }) => code === "too_big")
15
- ? `${name} must encode at most 128 strings`
16
- : `${name} must encode an array of strings`, { cause: parsed.error }));
10
+ : err(new ConfigurationError(`${name} must encode an array of strings`, {
11
+ cause: parsed.error,
12
+ }));
17
13
  }
18
14
  catch (cause) {
19
15
  return err(new ConfigurationError(`${name} must be valid JSON`, { cause }));
20
16
  }
21
17
  };
22
- export const parseBrowserArray = (encoded, name, itemSchema, maximum) => {
18
+ /** Parse a JSON string array whose members must all be absolute paths. */
19
+ export const parseAbsoluteRoots = (encoded, name) => {
20
+ const parsed = parseStringArray(encoded, name);
21
+ if (!parsed.ok)
22
+ return parsed;
23
+ return parsed.value.some((root) => !isAbsolute(root))
24
+ ? err(new ConfigurationError(`${name} must encode absolute roots`))
25
+ : parsed;
26
+ };
27
+ export const parseBrowserArray = (encoded, name, itemSchema) => {
23
28
  try {
24
- const parsed = z
25
- .array(itemSchema)
26
- .max(maximum)
27
- .safeParse(JSON.parse(encoded));
29
+ const parsed = z.array(itemSchema).safeParse(JSON.parse(encoded));
28
30
  return parsed.success
29
31
  ? ok([...new Set(parsed.data)].sort())
30
32
  : err(new ConfigurationError(`${name} must encode valid browser scopes`, {
@@ -35,20 +37,6 @@ export const parseBrowserArray = (encoded, name, itemSchema, maximum) => {
35
37
  return err(new ConfigurationError(`${name} must be valid JSON`, { cause }));
36
38
  }
37
39
  };
38
- export const parseElectronFileRoots = (encoded) => {
39
- try {
40
- const decoded = JSON.parse(encoded);
41
- if (Array.isArray(decoded) && decoded.length === 0)
42
- return ok([]);
43
- const parsed = electronFileRootsSchema.safeParse(decoded);
44
- return parsed.success
45
- ? ok(parsed.data)
46
- : err(new ConfigurationError("REA_ELECTRON_FILE_ROOTS_JSON must encode absolute roots", { cause: parsed.error }));
47
- }
48
- catch (cause) {
49
- return err(new ConfigurationError("REA_ELECTRON_FILE_ROOTS_JSON must be valid JSON", { cause }));
50
- }
51
- };
52
40
  export const parseLoaderArgs = (encoded) => {
53
41
  if (encoded === undefined)
54
42
  return ok([]);
@@ -0,0 +1,87 @@
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 { parseBrowserArray } from "./parsers.js";
5
+ import { browserNetworkScope, permissionScope } from "./permissions.js";
6
+ /** Parse every passive observation capability into closed policy variants. */
7
+ export const parsePassiveObservationPolicies = (env) => {
8
+ const browser = parseBrowserObservationPolicy(env);
9
+ if (!browser.ok)
10
+ return browser;
11
+ const electron = parseElectronObservationPolicy(env);
12
+ if (!electron.ok)
13
+ return electron;
14
+ const v8Inspector = parseV8InspectorObservationPolicy(env);
15
+ if (!v8Inspector.ok)
16
+ return v8Inspector;
17
+ return ok({
18
+ browser: browser.value,
19
+ electron: electron.value,
20
+ v8Inspector: v8Inspector.value,
21
+ });
22
+ };
23
+ /** Add permission ceilings for each enabled passive observation policy. */
24
+ export const appendPassiveObservationCeilings = (ceilings, policies) => {
25
+ appendBrowserCeiling(ceilings, policies.browser);
26
+ appendElectronCeiling(ceilings, policies.electron);
27
+ appendV8InspectorCeiling(ceilings, policies.v8Inspector);
28
+ };
29
+ const parseBrowserObservationPolicy = (env) => {
30
+ const endpoints = parseBrowserArray(env.REA_BROWSER_CDP_ENDPOINTS_JSON, "REA_BROWSER_CDP_ENDPOINTS_JSON", browserEndpointSchema);
31
+ if (!endpoints.ok)
32
+ return endpoints;
33
+ const origins = parseBrowserArray(env.REA_BROWSER_ALLOWED_ORIGINS_JSON, "REA_BROWSER_ALLOWED_ORIGINS_JSON", browserOriginSchema);
34
+ if (!origins.ok)
35
+ return origins;
36
+ if (env.REA_BROWSER_OBSERVE_ENABLED !== "true")
37
+ return ok({ status: "disabled" });
38
+ const parsedEndpoints = requireFirst(endpoints.value, "REA_BROWSER_CDP_ENDPOINTS_JSON must encode at least one loopback endpoint when browser observation is enabled");
39
+ if (!parsedEndpoints.ok)
40
+ return parsedEndpoints;
41
+ const parsedOrigins = requireFirst(origins.value, "REA_BROWSER_ALLOWED_ORIGINS_JSON must encode at least one exact origin when browser observation is enabled");
42
+ if (!parsedOrigins.ok)
43
+ return parsedOrigins;
44
+ return ok({
45
+ status: "enabled",
46
+ cdpEndpoints: parsedEndpoints.value,
47
+ allowedOrigins: parsedOrigins.value,
48
+ });
49
+ };
50
+ const parseElectronObservationPolicy = (env) => {
51
+ if (env.REA_ELECTRON_OBSERVE_ENABLED !== "true")
52
+ return ok({ status: "disabled" });
53
+ return ok({ status: "enabled" });
54
+ };
55
+ const parseV8InspectorObservationPolicy = (env) => {
56
+ if (env.REA_V8_INSPECTOR_OBSERVE_ENABLED !== "true")
57
+ return ok({ status: "disabled" });
58
+ return ok({ status: "enabled" });
59
+ };
60
+ const requireFirst = (values, message) => {
61
+ const [first, ...remaining] = values;
62
+ return first === undefined
63
+ ? err(new ConfigurationError(message))
64
+ : ok([first, ...remaining]);
65
+ };
66
+ const appendBrowserCeiling = (ceilings, policy) => {
67
+ if (policy.status === "disabled")
68
+ return;
69
+ ceilings.push(permissionScope("browser_observe", [], {
70
+ origins: [...policy.cdpEndpoints, ...policy.allowedOrigins],
71
+ network: browserNetworkScope(policy.allowedOrigins),
72
+ }));
73
+ };
74
+ const appendElectronCeiling = (ceilings, policy) => {
75
+ if (policy.status === "disabled")
76
+ return;
77
+ ceilings.push(permissionScope("electron_observe", [], {
78
+ network: "loopback",
79
+ }));
80
+ };
81
+ const appendV8InspectorCeiling = (ceilings, policy) => {
82
+ if (policy.status === "disabled")
83
+ return;
84
+ ceilings.push(permissionScope("v8_inspector_observe", [], {
85
+ network: "loopback",
86
+ }));
87
+ };
@@ -1,11 +1,4 @@
1
1
  import { isLiteralLoopbackHostname } from "../domain/browserObservation.js";
2
- export const filePolicy = (roots) => ({
3
- roots,
4
- maxBytes: 64 * 1024 * 1024,
5
- maxDepth: 64,
6
- maxStringLength: 1024 * 1024,
7
- maxNodes: 1_000_000,
8
- });
9
2
  export const permissionScope = (capability, roots, options = {}) => ({
10
3
  capability,
11
4
  roots,
@@ -0,0 +1,47 @@
1
+ import { ConfigurationError } from "../domain/errors.js";
2
+ import { err, ok } from "../domain/result.js";
3
+ import { parseAbsoluteRoots, parseStringArray } from "./parsers.js";
4
+ import { permissionScope } from "./permissions.js";
5
+ /** Parse process capture into disabled or fully authorized state. */
6
+ export const parseProcessExecutionPolicy = (env) => {
7
+ const executableRoots = parseAbsoluteRoots(env.REA_PROCESS_EXECUTABLE_ROOTS_JSON, "REA_PROCESS_EXECUTABLE_ROOTS_JSON");
8
+ if (!executableRoots.ok)
9
+ return executableRoots;
10
+ const workingRoots = parseAbsoluteRoots(env.REA_PROCESS_WORKING_ROOTS_JSON, "REA_PROCESS_WORKING_ROOTS_JSON");
11
+ if (!workingRoots.ok)
12
+ return workingRoots;
13
+ const allowedEnvironment = parseStringArray(env.REA_PROCESS_ALLOWED_ENV_JSON, "REA_PROCESS_ALLOWED_ENV_JSON");
14
+ if (!allowedEnvironment.ok)
15
+ return allowedEnvironment;
16
+ if (env.REA_PROCESS_CAPTURE_ENABLED !== "true")
17
+ return ok({ status: "disabled" });
18
+ const parsedExecutables = requireRoots(executableRoots.value, "REA_PROCESS_EXECUTABLE_ROOTS_JSON must encode at least one absolute root when process capture is enabled");
19
+ if (!parsedExecutables.ok)
20
+ return parsedExecutables;
21
+ const parsedWorking = requireRoots(workingRoots.value, "REA_PROCESS_WORKING_ROOTS_JSON must encode at least one absolute root when process capture is enabled");
22
+ if (!parsedWorking.ok)
23
+ return parsedWorking;
24
+ return ok({
25
+ status: "enabled",
26
+ executableRoots: parsedExecutables.value,
27
+ workingRoots: parsedWorking.value,
28
+ allowedEnvironment: allowedEnvironment.value,
29
+ networkAccess: env.REA_PROCESS_ALLOW_EXTERNAL_NETWORK === "true" ? "external" : "none",
30
+ });
31
+ };
32
+ /** Add the exact process-capture ceiling when capture is enabled. */
33
+ export const appendProcessCaptureCeiling = (ceilings, policy) => {
34
+ if (policy.status === "disabled")
35
+ return;
36
+ ceilings.push(permissionScope("process_capture", policy.workingRoots, {
37
+ executables: policy.executableRoots,
38
+ environment_names: policy.allowedEnvironment,
39
+ network: policy.networkAccess,
40
+ }));
41
+ };
42
+ const requireRoots = (roots, message) => {
43
+ const [first, ...remaining] = roots;
44
+ return first === undefined
45
+ ? err(new ConfigurationError(message))
46
+ : ok([first, ...remaining]);
47
+ };
@@ -1,14 +1,11 @@
1
1
  import { z } from "zod";
2
- /** Shared bounded provider search input fields. */
2
+ /** Shared provider search input fields. */
3
3
  export const analysisSearchInput = {
4
4
  pattern: z
5
5
  .string()
6
6
  .min(1)
7
- .max(256)
8
- .describe("The literal text or bounded regex pattern to search for"),
7
+ .describe("The literal text or regex pattern to search for"),
9
8
  mode: z.enum(["literal", "regex"]).default("literal"),
10
9
  case_sensitive: z.boolean().default(false).describe("Whether to match case"),
11
- offset: z.number().int().min(0).default(0),
12
- limit: z.number().int().min(1).max(100).default(100),
13
10
  document: z.string().optional().describe("The document name"),
14
11
  };