rea-agents 3.2.0 → 4.0.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 (434) hide show
  1. package/README.md +183 -332
  2. package/bridge/ghidra/ReaGhidraBridge.java +561 -74
  3. package/bridge/hopper_bridge.py +70 -27
  4. package/bridge/native/ReaNativeUI.swift +157 -0
  5. package/dist/application/AnalysisContextQueries.js +19 -5
  6. package/dist/application/AnalysisSnapshotCache.js +30 -11
  7. package/dist/application/AppleAssetCatalogAnalysis.js +171 -0
  8. package/dist/application/ArtifactExtractionDestination.js +0 -12
  9. package/dist/application/ArtifactGraphConstruction.js +44 -11
  10. package/dist/application/ArtifactInventory/classify.js +7 -15
  11. package/dist/application/ArtifactInventory/hash.js +4 -2
  12. package/dist/application/ArtifactInventory/policy.js +2 -17
  13. package/dist/application/ArtifactInventory/reader.js +3 -3
  14. package/dist/application/ArtifactInventory/scanCanonical.js +2 -2
  15. package/dist/application/ArtifactInventory/scanReader.js +12 -4
  16. package/dist/application/ArtifactInventory/types.js +0 -3
  17. package/dist/application/BinarySession.js +28 -43
  18. package/dist/application/BinarySessionExecution.js +37 -1
  19. package/dist/application/BinaryTargetResolver.js +50 -4
  20. package/dist/application/BrowserEvidence.js +36 -7
  21. package/dist/application/BrowserObservationService.js +17 -44
  22. package/dist/application/BrowserScenarioCaptureService.js +2 -35
  23. package/dist/application/BrowserScenarioEvidence.js +13 -9
  24. package/dist/application/CapabilityClientRequirements.js +2 -11
  25. package/dist/application/CapabilityInventory.js +21 -35
  26. package/dist/application/ClientConfigurationDocument.js +84 -7
  27. package/dist/application/ClientRegistrationIdentity.js +32 -0
  28. package/dist/application/ClientRegistrationStatus.js +59 -6
  29. package/dist/application/DirectAnalysis.js +37 -58
  30. package/dist/application/DirectAnalysisStatus.js +4 -4
  31. package/dist/application/Doctor.js +89 -80
  32. package/dist/application/DoctorDiagnostics.js +2 -26
  33. package/dist/application/DoctorScope.js +8 -14
  34. package/dist/application/ElectronActiveEvidence.js +10 -27
  35. package/dist/application/ElectronActiveObservationService.js +9 -36
  36. package/dist/application/ElectronBoundaryAnalysis.js +2 -0
  37. package/dist/application/ElectronBoundaryGraphNative.js +1 -1
  38. package/dist/application/ElectronEvidence.js +8 -3
  39. package/dist/application/ElectronObservationService.js +9 -25
  40. package/dist/application/EnhancedLiteralTracing.js +4 -8
  41. package/dist/application/EnhancedTools.js +15 -35
  42. package/dist/application/FilesystemSnapshot.js +7 -8
  43. package/dist/application/JavaScriptApplicationEvidenceGraph.js +2 -1
  44. package/dist/application/JavaScriptApplicationWorkflowService.js +31 -7
  45. package/dist/application/JavaScriptArtifactAnalysis.js +6 -4
  46. package/dist/application/JavaScriptArtifactFiles.js +5 -0
  47. package/dist/application/JavaScriptArtifactPathResolution.js +179 -47
  48. package/dist/application/JavaScriptRuntimeObservationEvidence.js +6 -3
  49. package/dist/application/JavaScriptRuntimeObservationService.js +9 -25
  50. package/dist/application/JavaScriptRuntimeReconciliationService.js +45 -4
  51. package/dist/application/JavaScriptSemanticGraphAsyncProjection.js +11 -0
  52. package/dist/application/JavaScriptSemanticGraphChildProcessProjection.js +11 -0
  53. package/dist/application/JavaScriptSemanticGraphDataProjection.js +11 -0
  54. package/dist/application/JavaScriptSemanticGraphFlowProjection.js +14 -5
  55. package/dist/application/JsonFiles.js +1 -1
  56. package/dist/application/LazyAnalysisProvider.js +27 -6
  57. package/dist/application/ManagedMemberComparisonService.js +19 -6
  58. package/dist/application/NativeApiInspection.js +2 -0
  59. package/dist/application/NativeCallRoutes.js +72 -0
  60. package/dist/application/NativeDispatchMetadataInspection.js +33 -0
  61. package/dist/application/NativeUiActionTrace.js +73 -49
  62. package/dist/application/NativeValueTrace.js +320 -0
  63. package/dist/application/ProcessCaptureCapability.js +32 -5
  64. package/dist/application/ProcessCaptureEnvironment.js +9 -26
  65. package/dist/application/ProcessCaptureError.js +1 -5
  66. package/dist/application/ProcessCaptureJournal.js +3 -40
  67. package/dist/application/ProcessCaptureLifecycle.js +102 -111
  68. package/dist/application/ProcessCli.js +18 -25
  69. package/dist/application/ProcessEvidence.js +5 -7
  70. package/dist/application/ProcessFilesystemEffects.js +36 -0
  71. package/dist/application/ProcessHarness.js +41 -120
  72. package/dist/application/ProcessNormalization.js +2 -17
  73. package/dist/application/ProcessScenarioRuntimeValidation.js +76 -0
  74. package/dist/application/ReferenceSourceImport.js +3 -4
  75. package/dist/application/Setup.js +236 -84
  76. package/dist/application/SetupClientConfiguration.js +14 -9
  77. package/dist/application/SetupPlan.js +138 -86
  78. package/dist/application/SetupSkill.js +0 -1
  79. package/dist/application/SupportedClients.js +102 -21
  80. package/dist/application/Uninstall.js +31 -20
  81. package/dist/application/Update.js +93 -0
  82. package/dist/application/UpdateMaintenance.js +108 -0
  83. package/dist/application/UpdateRuntime.js +126 -0
  84. package/dist/application/runtime.js +13 -2
  85. package/dist/artifacts/ArtifactPaths.js +6 -8
  86. package/dist/artifacts/ArtifactProvider.js +94 -41
  87. package/dist/artifacts/AsarArtifactReader.js +19 -4
  88. package/dist/artifacts/KeyedArchiveReader.js +110 -0
  89. package/dist/artifacts/MachOSliceArtifactReader.js +53 -5
  90. package/dist/artifacts/ZipArtifactReader.js +18 -1
  91. package/dist/browser/BrowserScenarioSecrets.js +28 -1
  92. package/dist/browser/CdpBrowserProvider.js +36 -15
  93. package/dist/browser/CdpCaptureDocuments.js +22 -8
  94. package/dist/browser/CdpCaptureEventHandlers.js +14 -5
  95. package/dist/browser/CdpCaptureEventHelpers.js +13 -0
  96. package/dist/browser/CdpCaptureEvents.js +10 -1
  97. package/dist/browser/CdpElectronInspection.js +5 -10
  98. package/dist/browser/CdpElectronProvider.js +1 -5
  99. package/dist/browser/CdpElectronScripts.js +1 -1
  100. package/dist/browser/CdpEndpoint.js +3 -2
  101. package/dist/browser/CdpObservationSession.js +14 -10
  102. package/dist/browser/CdpPageCapture.js +1 -1
  103. package/dist/browser/CdpPageCaptureScripts.js +1 -1
  104. package/dist/browser/CdpSafeMetadata.js +5 -4
  105. package/dist/browser/CdpScreenshot.js +16 -5
  106. package/dist/browser/CdpTargetSession.js +25 -4
  107. package/dist/browser/CdpWebMcpDiscovery.js +93 -20
  108. package/dist/browser/JavaScriptRuntimeScope.js +28 -2
  109. package/dist/browser/PlaywrightBrowserScenarioProvider.js +9 -8
  110. package/dist/browser/PlaywrightElectronActiveActions.js +3 -10
  111. package/dist/browser/PlaywrightElectronActiveProvider.js +5 -5
  112. package/dist/browser/PlaywrightScenarioActions.js +1 -1
  113. package/dist/browser/PlaywrightScenarioArtifacts.js +13 -25
  114. package/dist/browser/PlaywrightScenarioBrowser.js +28 -25
  115. package/dist/browser/PlaywrightScenarioEvents.js +82 -93
  116. package/dist/browser/PlaywrightScenarioSession.js +27 -123
  117. package/dist/browser/PngVisualDiff.js +22 -3
  118. package/dist/browser/V8InspectorCaptureProjection.js +7 -1
  119. package/dist/browser/V8InspectorProvider.js +60 -7
  120. package/dist/browser/WebSourceMapFetcher.js +99 -53
  121. package/dist/cli/artifactCommands.js +56 -12
  122. package/dist/cli/coreAnalysisCommands.js +110 -0
  123. package/dist/cli/managedCommands.js +1 -31
  124. package/dist/cli/setupCommands.js +16 -14
  125. package/dist/cli/utilityCommands.js +61 -4
  126. package/dist/cli.js +5 -7
  127. package/dist/cliApplicationCommands.js +0 -83
  128. package/dist/cliBrowserAdvancedCommands.js +7 -11
  129. package/dist/cliBrowserCommands.js +15 -23
  130. package/dist/cliBrowserContext.js +3 -24
  131. package/dist/cliBrowserScenarioCommands.js +2 -10
  132. package/dist/cliCommandNames.js +82 -7
  133. package/dist/cliElectronCommands.js +10 -36
  134. package/dist/cliJavaScriptRuntimeCommands.js +6 -30
  135. package/dist/cliJsonInput.js +4 -2
  136. package/dist/cliLogging.js +16 -7
  137. package/dist/cliObservationOptions.js +1 -1
  138. package/dist/cliOutput.js +2 -4
  139. package/dist/cliProcessCommands.js +6 -33
  140. package/dist/cliSetup.js +90 -160
  141. package/dist/config/environment.js +2 -78
  142. package/dist/config/parseConfig.js +18 -109
  143. package/dist/config/parsers.js +0 -23
  144. package/dist/contracts/applicationToolContracts.js +1 -118
  145. package/dist/contracts/artifactToolContracts.js +11 -19
  146. package/dist/contracts/browserScenarioToolContracts.js +1 -5
  147. package/dist/contracts/browserToolContracts.js +9 -16
  148. package/dist/contracts/electronToolContracts.js +5 -6
  149. package/dist/contracts/enhancedInputs.js +3 -2
  150. package/dist/contracts/errorSchemas.js +16 -40
  151. package/dist/contracts/functionWorkflowToolContracts.js +2 -2
  152. package/dist/contracts/javascriptApplicationWorkflowExamples.js +2 -2
  153. package/dist/contracts/javascriptRuntimeObservationToolContracts.js +4 -4
  154. package/dist/contracts/javascriptRuntimeReconciliationExample.js +1 -1
  155. package/dist/contracts/managedToolContracts.js +7 -4
  156. package/dist/contracts/managedWorkflowExamples.js +0 -22
  157. package/dist/contracts/managedWorkflowToolContracts.js +16 -31
  158. package/dist/contracts/nativeToolContracts.js +9 -0
  159. package/dist/contracts/promptContracts.js +6 -6
  160. package/dist/contracts/sessionToolSchemas.js +3 -3
  161. package/dist/contracts/toolContractExamples.js +4 -3
  162. package/dist/contracts/toolContracts.js +18 -7
  163. package/dist/contracts/toolEffects.js +34 -21
  164. package/dist/contracts/toolOutputSchemaGroups.js +18 -5
  165. package/dist/contracts/toolOutputSchemaPrimitives.js +9 -6
  166. package/dist/contracts/toolSchemaMetadata.js +5 -8
  167. package/dist/doctorRuntime.js +0 -41
  168. package/dist/domain/analysisErrorPresentation.js +4 -28
  169. package/dist/domain/analysisErrorProjection.js +33 -50
  170. package/dist/domain/analysisProfile.js +1 -1
  171. package/dist/domain/analysisSnapshot.js +77 -3
  172. package/dist/domain/androidApplication.js +5 -4
  173. package/dist/domain/appleApplication.js +5 -4
  174. package/dist/domain/appleAssetCatalog.js +127 -0
  175. package/dist/domain/artifactComparison.js +7 -11
  176. package/dist/domain/artifactGraph.js +8 -6
  177. package/dist/domain/artifactInspection.js +13 -12
  178. package/dist/domain/binaryTarget.js +23 -9
  179. package/dist/domain/browserObservation.js +43 -24
  180. package/dist/domain/browserObservationSchemas.js +2 -1
  181. package/dist/domain/browserScenario.js +7 -107
  182. package/dist/domain/browserScenarioCapture.js +0 -1
  183. package/dist/domain/browserScenarioCaptureValues.js +5 -4
  184. package/dist/domain/browserScenarioDiff.js +1 -3
  185. package/dist/domain/browserScenarioValues.js +16 -107
  186. package/dist/domain/bundleComparison.js +18 -17
  187. package/dist/domain/callPathSchemas.js +17 -7
  188. package/dist/domain/changedBehavior.js +2 -3
  189. package/dist/domain/comparisonSemantics.js +19 -0
  190. package/dist/domain/completionLedgerGeneration.js +3 -2
  191. package/dist/domain/conformancePackage.js +2 -1
  192. package/dist/domain/conformanceTrustGate.js +3 -5
  193. package/dist/domain/customProtocolCapture.js +2 -2
  194. package/dist/domain/digests.js +30 -0
  195. package/dist/domain/dosMz.js +83 -0
  196. package/dist/domain/electronActiveObservation.js +7 -5
  197. package/dist/domain/electronObservation.js +3 -2
  198. package/dist/domain/electronStaticAnalysisNative.js +15 -6
  199. package/dist/domain/emptyArraySchema.js +3 -0
  200. package/dist/domain/errors.js +10 -28
  201. package/dist/domain/evidence.js +5 -3
  202. package/dist/domain/evidenceCompletionLedger.js +3 -2
  203. package/dist/domain/functionComparisonNormalization.js +24 -18
  204. package/dist/domain/functionComparisonResults.js +3 -7
  205. package/dist/domain/functionComparisonSchemas.js +3 -2
  206. package/dist/domain/hopperValues.js +108 -8
  207. package/dist/domain/javascriptApplicationAnalysis.js +4 -7
  208. package/dist/domain/javascriptApplicationEvidenceSchemas.js +4 -3
  209. package/dist/domain/javascriptApplicationGraphSchemas.js +8 -7
  210. package/dist/domain/javascriptApplicationVersionComparisonSchemas.js +9 -7
  211. package/dist/domain/javascriptApplicationVersionItems.js +12 -18
  212. package/dist/domain/javascriptAstValues.js +4 -0
  213. package/dist/domain/javascriptExportShapeComparison.js +1 -6
  214. package/dist/domain/javascriptExportShapeComparisonSchemas.js +6 -10
  215. package/dist/domain/javascriptExportShapeVariants.js +15 -2
  216. package/dist/domain/javascriptFeatureTraceSchemas.js +8 -7
  217. package/dist/domain/javascriptRuntimeObservation.js +14 -2
  218. package/dist/domain/javascriptRuntimeReconciliationMatching.js +8 -0
  219. package/dist/domain/javascriptRuntimeReconciliationParsing.js +4 -2
  220. package/dist/domain/javascriptRuntimeReconciliationResult.js +6 -4
  221. package/dist/domain/javascriptRuntimeReconciliationRuntime.js +15 -4
  222. package/dist/domain/javascriptRuntimeReconciliationSchemas.js +19 -18
  223. package/dist/domain/javascriptRuntimeStaticCandidates.js +18 -6
  224. package/dist/domain/javascriptSemanticAnalysis.js +57 -19
  225. package/dist/domain/javascriptSemanticAsyncEffects.js +39 -40
  226. package/dist/domain/javascriptSemanticCalls.js +46 -27
  227. package/dist/domain/javascriptSemanticChildProcesses.js +43 -50
  228. package/dist/domain/javascriptSemanticDataEffectHelpers.js +91 -18
  229. package/dist/domain/javascriptSemanticDataEffects.js +22 -10
  230. package/dist/domain/javascriptSemanticGraphSchemas.js +8 -6
  231. package/dist/domain/javascriptSemanticObjects.js +13 -3
  232. package/dist/domain/javascriptSemanticProjection.js +144 -38
  233. package/dist/domain/javascriptSemanticPromises.js +14 -27
  234. package/dist/domain/javascriptSemanticQuerySchemas.js +6 -9
  235. package/dist/domain/javascriptSemanticResources.js +2 -5
  236. package/dist/domain/javascriptSemanticState.js +4 -0
  237. package/dist/domain/javascriptSemanticTraceSchemas.js +2 -1
  238. package/dist/domain/javascriptSemanticTraversal.js +13 -5
  239. package/dist/domain/javascriptSemanticValues.js +10 -9
  240. package/dist/domain/javascriptSourceParser.js +5 -1
  241. package/dist/domain/javascriptStaticAnalysisCalls.js +8 -5
  242. package/dist/domain/javascriptStaticAnalysisHelpers.js +16 -7
  243. package/dist/domain/keyedArchive.js +181 -0
  244. package/dist/domain/managedApplicationGraph.js +4 -3
  245. package/dist/domain/managedArtifact.js +2 -1
  246. package/dist/domain/managedMemberComparison.js +18 -13
  247. package/dist/domain/managedMemberComparisonCoverage.js +2 -1
  248. package/dist/domain/managedMemberComparisonItems.js +27 -7
  249. package/dist/domain/managedMemberComparisonMatch.js +22 -6
  250. package/dist/domain/managedNativeVerificationMatch.js +2 -2
  251. package/dist/domain/managedNativeVerificationSchemas.js +7 -5
  252. package/dist/domain/managedReconstruction.js +6 -5
  253. package/dist/domain/nativeApiBoundary.js +7 -0
  254. package/dist/domain/nativeDataType.js +51 -0
  255. package/dist/domain/nativeInspection.js +0 -1
  256. package/dist/domain/nativeInstruction.js +82 -0
  257. package/dist/domain/nativeInvestigationGraph.js +9 -5
  258. package/dist/domain/nativeUiObservation.js +123 -0
  259. package/dist/domain/nativeValueFlow.js +17 -0
  260. package/dist/domain/nativeValueTrace.js +64 -0
  261. package/dist/domain/objcSwiftMetadata.js +39 -0
  262. package/dist/domain/peInspection.js +1 -0
  263. package/dist/domain/processCapture.js +5 -55
  264. package/dist/domain/processCaptureExample.js +0 -9
  265. package/dist/domain/processCaptureValidation.js +13 -144
  266. package/dist/domain/processComparison.js +3 -25
  267. package/dist/domain/processObservation.js +0 -29
  268. package/dist/domain/processScenario.js +28 -228
  269. package/dist/domain/processTraceDimensionProjection.js +0 -15
  270. package/dist/domain/processTraceEvaluation.js +0 -6
  271. package/dist/domain/protocolCapture.js +8 -36
  272. package/dist/domain/reconstructionCoverage.js +3 -2
  273. package/dist/domain/reconstructionObligationLedgerSchemas.js +4 -12
  274. package/dist/domain/reconstructionReadinessSchemas.js +4 -3
  275. package/dist/domain/reconstructionVerification.js +2 -1
  276. package/dist/domain/reconstructionVerificationSchemas.js +6 -13
  277. package/dist/domain/referenceSourceClassification.js +0 -110
  278. package/dist/domain/referenceSourceGraph.js +15 -5
  279. package/dist/domain/residualUnknown.js +3 -2
  280. package/dist/domain/runtimeIdentification.js +6 -5
  281. package/dist/domain/sourceMapContents.js +5 -0
  282. package/dist/domain/sourceToBundleComparison.js +3 -10
  283. package/dist/domain/sourceToBundleComparisonSchemas.js +7 -6
  284. package/dist/domain/sourceToBundleSignals.js +9 -3
  285. package/dist/domain/staticRuntimeCorrelation.js +5 -11
  286. package/dist/domain/webBundleAnalysis.js +17 -9
  287. package/dist/domain/webBundleAnalyzer.js +1 -1
  288. package/dist/domain/webCaptureDiff.js +5 -11
  289. package/dist/domain/webCaptureDiffSchemas.js +2 -1
  290. package/dist/domain/webMcpDiscovery.js +2 -1
  291. package/dist/dotnet/ManagedMemberInspectorCore.js +15 -7
  292. package/dist/dotnet/ManagedMemberInstructionDecoder.js +57 -40
  293. package/dist/dotnet/ManagedMemberRows.js +2 -0
  294. package/dist/dotnet/ManagedMethodBodyReader.js +15 -8
  295. package/dist/dotnet/ManagedPeReader.js +2 -0
  296. package/dist/generatedMcpToolCatalog.js +1 -1
  297. package/dist/generatedPackageMetadata.js +2 -2
  298. package/dist/ghidra/GhidraAnalysisProfile.js +15 -5
  299. package/dist/ghidra/GhidraClient.js +38 -8
  300. package/dist/ghidra/GhidraFunctionValues.js +56 -20
  301. package/dist/ghidra/GhidraInstallation.js +7 -4
  302. package/dist/ghidra/GhidraInventoryValues.js +44 -9
  303. package/dist/ghidra/GhidraLauncher.js +18 -3
  304. package/dist/ghidra/GhidraProvider.js +23 -2
  305. package/dist/ghidra/GhidraRequestQueue.js +45 -4
  306. package/dist/ghidra/GhidraSessionValues.js +5 -0
  307. package/dist/hopper/HopperAnalysisProfile.js +2 -0
  308. package/dist/hopper/HopperProvider.js +29 -6
  309. package/dist/hopper/HopperTargetLease.js +18 -4
  310. package/dist/logger.js +0 -13
  311. package/dist/main/messages.js +0 -1
  312. package/dist/main/reload.js +3 -32
  313. package/dist/main/shutdown.js +1 -2
  314. package/dist/main/transport.js +0 -17
  315. package/dist/main.js +0 -10
  316. package/dist/native/AppleDispatchMetadata.js +582 -0
  317. package/dist/native/AppleObjcProtocols.js +88 -0
  318. package/dist/native/AppleSwiftVtables.js +86 -0
  319. package/dist/native/CommandRunner.js +1 -1
  320. package/dist/native/NativeHostCapabilities.js +23 -0
  321. package/dist/native/NativeMacOSProvider.js +61 -9
  322. package/dist/native/NativeMachoInspection.js +39 -6
  323. package/dist/native/NativeUiHelperRuntime.js +42 -0
  324. package/dist/native/NativeUiObservation.js +174 -0
  325. package/dist/native/parsers/codesign.js +4 -1
  326. package/dist/native/parsers/dyldInfo.js +51 -25
  327. package/dist/native/parsers/lipo.js +13 -4
  328. package/dist/native/parsers/otool.js +84 -39
  329. package/dist/native/parsers/plist.js +2 -1
  330. package/dist/process/ExecFileOutput.js +5 -1
  331. package/dist/process/ProcessOwnership.js +69 -33
  332. package/dist/process/ProcessOwnershipObservation.js +31 -12
  333. package/dist/process/ProviderProcess.js +4 -2
  334. package/dist/reference/ReferenceSourceReaderEntries.js +48 -31
  335. package/dist/reference/ReferenceSourceReaderErrors.js +24 -0
  336. package/dist/reference/ReferenceSourceReaderFile.js +11 -5
  337. package/dist/reference/ReferenceSourceReaderValidate.js +22 -8
  338. package/dist/server/createServer.js +7 -62
  339. package/dist/server/registerApplicationTools/helpers.js +2 -9
  340. package/dist/server/registerApplicationTools.js +0 -4
  341. package/dist/server/registerArtifactComparisonTool.js +1 -1
  342. package/dist/server/registerBrowserScenarioTool.js +4 -2
  343. package/dist/server/registerBrowserTools.js +7 -7
  344. package/dist/server/registerBundleComparisonTool.js +1 -1
  345. package/dist/server/registerCloseLifecycleTool.js +1 -1
  346. package/dist/server/registerElectronTools.js +10 -4
  347. package/dist/server/registerEnhancedTools.js +20 -12
  348. package/dist/server/registerEvidenceTools.js +4 -28
  349. package/dist/server/registerFunctionComparisonTool.js +1 -1
  350. package/dist/server/registerInvestigationTools.js +6 -6
  351. package/dist/server/registerJavaScriptRuntimeObservationTools.js +2 -2
  352. package/dist/server/registerManagedTools.js +28 -14
  353. package/dist/server/registerManagedWorkflowTools.js +0 -2
  354. package/dist/server/registerProcessComparisonTool.js +1 -3
  355. package/dist/server/registerSessionRecordTools.js +9 -9
  356. package/dist/server/registerSessionStatusTool.js +1 -1
  357. package/dist/server/registerSessionTools.js +28 -57
  358. package/dist/server/sessionAvailabilityPolicy.js +2 -3
  359. package/dist/server/sessionToolPolicies.js +0 -4
  360. package/dist/server/toolResult.js +8 -10
  361. package/package.json +32 -22
  362. package/skills/reverse-engineer-anything/SKILL.md +15 -11
  363. package/skills/reverse-engineer-anything/references/evidence-workflows.md +3 -2
  364. package/skills/reverse-engineer-anything/references/javascript-applications.md +3 -2
  365. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +8 -6
  366. package/skills/reverse-engineer-anything/references/runtime-observation.md +15 -11
  367. package/dist/application/CommandShimReplay.js +0 -152
  368. package/dist/application/ConfiguredRoots.js +0 -19
  369. package/dist/application/InstrumentedJavaScriptReplayHost.js +0 -36
  370. package/dist/application/JavaScriptReplayPermission.js +0 -16
  371. package/dist/application/JavaScriptReplayPlanning.js +0 -207
  372. package/dist/application/JavaScriptReplayService.js +0 -274
  373. package/dist/application/LoopbackReplay.js +0 -389
  374. package/dist/application/LoopbackReplayRecorder.js +0 -129
  375. package/dist/application/ManagedRuntimeCorrelationService.js +0 -104
  376. package/dist/application/NodeRuntimeCharacterizationService.js +0 -191
  377. package/dist/application/PermissionAuthority.js +0 -268
  378. package/dist/application/PermissionConfiguration.js +0 -26
  379. package/dist/application/PermissionFailure.js +0 -5
  380. package/dist/application/ProcessCaptureAuthority.js +0 -24
  381. package/dist/application/ProcessCapturePermission.js +0 -13
  382. package/dist/application/ProcessCheckpoints.js +0 -178
  383. package/dist/application/ProcessReactiveCoordinator.js +0 -223
  384. package/dist/application/ProcessReactiveEffects.js +0 -153
  385. package/dist/application/ProcessReactiveHarness.js +0 -106
  386. package/dist/application/ProcessReactiveObservations.js +0 -105
  387. package/dist/application/ProjectPermissionStore.js +0 -199
  388. package/dist/application/RuntimeExecutableDiagnostics.js +0 -198
  389. package/dist/application/Upgrade.js +0 -134
  390. package/dist/browser/SensitiveTextCapture.js +0 -8
  391. package/dist/cliPolicyCommands.js +0 -185
  392. package/dist/config/browserScenario.js +0 -77
  393. package/dist/config/electronAutomation.js +0 -35
  394. package/dist/config/javascriptReplay.js +0 -41
  395. package/dist/config/managedRuntime.js +0 -25
  396. package/dist/config/passiveObservation.js +0 -87
  397. package/dist/config/permissions.js +0 -23
  398. package/dist/config/processCapture.js +0 -47
  399. package/dist/contracts/replayMachineExample.js +0 -37
  400. package/dist/domain/javascriptExportInstrumentation.js +0 -95
  401. package/dist/domain/javascriptReplay.js +0 -360
  402. package/dist/domain/managedRuntimeCorrelation.js +0 -181
  403. package/dist/domain/nodeRuntimeCharacterization.js +0 -63
  404. package/dist/domain/permissionPolicy.js +0 -176
  405. package/dist/domain/processCaptureReactiveSchema.js +0 -68
  406. package/dist/domain/processCaptureReactiveValidation.js +0 -180
  407. package/dist/domain/processReactiveCheckpointDataflow.js +0 -32
  408. package/dist/domain/processReactiveMatching.js +0 -196
  409. package/dist/domain/processReactiveRuntime.js +0 -116
  410. package/dist/domain/processReactiveScenario.js +0 -296
  411. package/dist/domain/processReactiveScenarioPreflight.js +0 -95
  412. package/dist/domain/processReactiveTransition.js +0 -187
  413. package/dist/domain/replayMachine.js +0 -320
  414. package/dist/domain/replayMachineRun.js +0 -168
  415. package/dist/domain/replayMachineRuntime.js +0 -296
  416. package/dist/domain/replayMachineValues.js +0 -84
  417. package/dist/domain/runtimeCharacterization.js +0 -84
  418. package/dist/replay/JavaScriptReplayWorker.js +0 -382
  419. package/dist/replay/JavaScriptReplayWorkerTypes.js +0 -1
  420. package/dist/replay/LinuxJavaScriptReplayRunner.js +0 -216
  421. package/dist/replay/LinuxJavaScriptReplaySandbox.js +0 -121
  422. package/dist/replay/LinuxRuntimeClosure.js +0 -44
  423. package/dist/replay/LinuxSeccompPolicy.js +0 -40
  424. package/dist/replay/ReplayOutcome.js +0 -104
  425. package/dist/replay/ReplayProcessLifecycle.js +0 -96
  426. package/dist/replay/ReplaySeccompFile.js +0 -29
  427. package/dist/replay/ReplayWorkerProtocol.js +0 -58
  428. package/dist/replay/SystemJavaScriptReplayHost.js +0 -153
  429. package/dist/server/ProcessCaptureElicitation.js +0 -153
  430. package/dist/server/registerApplicationTools/characterization.js +0 -46
  431. package/dist/server/registerApplicationTools/controlledReplay.js +0 -31
  432. package/dist/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.js +0 -29
  433. package/dist/server/registerReplayMachineTool.js +0 -14
  434. package/skills/reverse-engineer-anything/references/controlled-replay.md +0 -12
@@ -1,185 +0,0 @@
1
- import { Cli, z } from "incur";
2
- import { createInterface } from "node:readline/promises";
3
- import { loadConfiguredPermissionAuthority } from "./application/PermissionConfiguration.js";
4
- import { readProjectPermissionStore, revokeProjectPermissionGrant, } from "./application/ProjectPermissionStore.js";
5
- import { logCliCommand } from "./cliLogging.js";
6
- import { parseConfig } from "./config.js";
7
- import { PermissionRequiredError, projectAnalysisError, } from "./domain/errors.js";
8
- import { PERMISSION_CAPABILITIES, } from "./domain/permissionPolicy.js";
9
- import { CLI_COMMANDS } from "./cliCommandNames.js";
10
- const capabilitySchema = z.enum(PERMISSION_CAPABILITIES);
11
- /** Require an explicit decision before a project permission grant is removed. */
12
- export const approvePolicyRevocation = async (options) => {
13
- if (options.approved)
14
- return { approved: true };
15
- if (!options.interactive)
16
- return { approved: false, reason: "required" };
17
- return (await options.confirm(options.grantId))
18
- ? { approved: true }
19
- : { approved: false, reason: "cancelled" };
20
- };
21
- /** Register inspectable, dry-run, and revocation policy UX for the CLI. */
22
- export const registerPolicyCommands = (cli, logger) => {
23
- cli.command(CLI_COMMANDS.policy, {
24
- description: "Inspect, explain, or revoke unified local permission grants",
25
- args: z.object({
26
- action: z
27
- .enum(["status", "list", "explain", "revoke"])
28
- .describe("Permission-policy operation to perform"),
29
- value: z
30
- .string()
31
- .optional()
32
- .describe("Capability to explain or grant ID to revoke"),
33
- }),
34
- options: z.object({
35
- root: z.string().optional().describe("Filesystem root to authorize"),
36
- executable: z
37
- .string()
38
- .optional()
39
- .describe("Executable path to authorize"),
40
- environmentNames: z
41
- .array(z.string())
42
- .default([])
43
- .describe("Environment variable names the operation may read"),
44
- origins: z
45
- .array(z.string())
46
- .default([])
47
- .describe("Exact browser origins the operation may access"),
48
- network: z
49
- .enum(["none", "loopback", "external"])
50
- .default("none")
51
- .describe("Maximum network scope to authorize"),
52
- mount: z
53
- .boolean()
54
- .default(false)
55
- .describe("Authorize mounting an artifact filesystem"),
56
- write: z
57
- .boolean()
58
- .default(false)
59
- .describe("Explain the write form of the requested capability"),
60
- yes: z
61
- .boolean()
62
- .default(false)
63
- .describe("Confirm project permission revocation without prompting"),
64
- }),
65
- alias: { environmentNames: "environment-names", yes: "y" },
66
- run: ({ agent, args, formatExplicit, options }) => logCliCommand(logger, "policy", async () => {
67
- const config = parseConfig(process.env);
68
- if (!config.ok)
69
- return failure(config.error);
70
- if (args.action === "status")
71
- return policyStatus(config.value);
72
- if (args.action === "list")
73
- return policyList(config.value);
74
- if (args.action === "revoke")
75
- return policyRevoke({
76
- config: config.value,
77
- grantId: args.value,
78
- approved: options.yes,
79
- interactive: !agent && !formatExplicit && process.stdin.isTTY === true,
80
- confirm: confirmPolicyRevocation,
81
- });
82
- const capability = capabilitySchema.safeParse(args.value);
83
- if (!capability.success)
84
- return {
85
- error: "A registered capability is required for policy explain",
86
- };
87
- return policyExplain(config.value, capability.data, options);
88
- }),
89
- });
90
- };
91
- const policyStatus = (config) => ({
92
- reload: "SIGHUP",
93
- restart_required: false,
94
- administrator_ceilings: config.permissionCeilings,
95
- project_store: config.permissionProjectStore ?? null,
96
- });
97
- const policyList = (config) => readProjectGrants(config).then((result) => result.ok ? { grants: result.grants } : result.error);
98
- const policyRevoke = async (context) => {
99
- if (context.grantId === undefined)
100
- return { error: "Grant ID is required for policy revoke" };
101
- const { permissionProjectRoot, permissionProjectStore } = context.config;
102
- if (permissionProjectRoot === undefined ||
103
- permissionProjectStore === undefined)
104
- return { error: "Project policy is not configured" };
105
- const approval = await approvePolicyRevocation({
106
- approved: context.approved,
107
- interactive: context.interactive,
108
- grantId: context.grantId,
109
- confirm: context.confirm,
110
- });
111
- if (!approval.approved)
112
- return approval.reason === "required"
113
- ? {
114
- error: "Policy revoke requires confirmation. Rerun interactively or with --yes.",
115
- grant_id: context.grantId,
116
- }
117
- : {
118
- error: "Policy revocation was cancelled",
119
- grant_id: context.grantId,
120
- };
121
- const revoked = await revokeProjectPermissionGrant(permissionProjectStore, permissionProjectRoot, context.grantId);
122
- return revoked.ok && revoked.value
123
- ? {
124
- revoked: context.grantId,
125
- reload: "Send SIGHUP to the REA MCP process",
126
- }
127
- : revoked.ok
128
- ? { error: "Grant was not found", grant_id: context.grantId }
129
- : { error: revoked.error.message };
130
- };
131
- const policyExplain = async (config, capability, options) => explain(config, capability, options);
132
- const confirmPolicyRevocation = async (grantId) => {
133
- const prompt = createInterface({
134
- input: process.stdin,
135
- output: process.stdout,
136
- });
137
- try {
138
- const answer = await prompt.question(`Revoke project permission grant ${JSON.stringify(grantId)}? [y/N] `);
139
- return ["y", "yes"].includes(answer.trim().toLowerCase());
140
- }
141
- finally {
142
- prompt.close();
143
- }
144
- };
145
- const explain = async (config, capability, options) => {
146
- const authority = await loadConfiguredPermissionAuthority(config);
147
- if (!authority.ok)
148
- return failure(authority.error);
149
- const evaluated = await authority.value.explain({
150
- capability,
151
- roots: options.root === undefined ? [] : [options.root],
152
- executables: options.executable === undefined ? [] : [options.executable],
153
- environment_names: options.environmentNames,
154
- origins: options.origins,
155
- network: options.network,
156
- mount: options.mount,
157
- operation_identity: `policy_explain:${capability}`,
158
- }, options.write ? "write" : "read");
159
- return evaluated.ok
160
- ? { allowed: true, grant_id: evaluated.value.grant_id }
161
- : evaluated.error instanceof PermissionRequiredError
162
- ? { allowed: false, error: projectAnalysisError(evaluated.error) }
163
- : { allowed: false, error: evaluated.error.message };
164
- };
165
- const readProjectGrants = async (config) => {
166
- if (config.permissionProjectRoot === undefined ||
167
- config.permissionProjectStore === undefined)
168
- return {
169
- ok: false,
170
- error: { error: "Project policy is not configured" },
171
- };
172
- const store = await readProjectPermissionStore(config.permissionProjectStore, config.permissionProjectRoot);
173
- return store.ok
174
- ? {
175
- ok: true,
176
- grants: store.value?.grants ?? [],
177
- path: config.permissionProjectStore,
178
- root: config.permissionProjectRoot,
179
- }
180
- : { ok: false, error: { error: store.error.message } };
181
- };
182
- const failure = (error) => ({
183
- error: "Policy command failed",
184
- ...projectAnalysisError(error),
185
- });
@@ -1,77 +0,0 @@
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
- };
@@ -1,35 +0,0 @@
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
- };
@@ -1,41 +0,0 @@
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
- ];
@@ -1,25 +0,0 @@
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
- };
@@ -1,87 +0,0 @@
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,23 +0,0 @@
1
- import { isLiteralLoopbackHostname } from "../domain/browserObservation.js";
2
- export const permissionScope = (capability, roots, options = {}) => ({
3
- capability,
4
- roots,
5
- executables: options.executables ?? [],
6
- environment_names: options.environment_names ?? [],
7
- ...(options.origins === undefined ? {} : { origins: options.origins }),
8
- network: options.network ?? "none",
9
- mount: options.mount ?? false,
10
- });
11
- export const administratorGrants = (ceilings) => ceilings.map((ceiling) => ({
12
- ...ceiling,
13
- grant_id: `administrator:${ceiling.capability}`,
14
- lifetime: "administrator",
15
- operation_identity: null,
16
- expires_at: null,
17
- }));
18
- export const browserNetworkScope = (origins) => origins.every((origin) => {
19
- const hostname = new URL(origin).hostname;
20
- return isLiteralLoopbackHostname(hostname);
21
- })
22
- ? "loopback"
23
- : "external";
@@ -1,47 +0,0 @@
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,37 +0,0 @@
1
- import { jsonObjectSchema } from "../domain/jsonValue.js";
2
- /** Minimal login callback accepted by the direct replay-machine contract. */
3
- export const REPLAY_MACHINE_RUN_EXAMPLE = jsonObjectSchema.parse({
4
- machine: {
5
- initial_state: "waiting",
6
- states: [{ name: "waiting" }, { name: "complete", terminal: true }],
7
- transitions: [
8
- {
9
- id: "accept_callback",
10
- from: "waiting",
11
- to: "complete",
12
- trigger: { protocol: "http", method: "POST", path: "/callback" },
13
- captures: [
14
- {
15
- variable: "token",
16
- value: { source: "request_json", path: ["token"] },
17
- sensitive: true,
18
- },
19
- ],
20
- actions: [{ type: "http_response", status: 204, body: "" }],
21
- max_uses: 1,
22
- },
23
- ],
24
- max_transitions: 1,
25
- },
26
- events: [
27
- {
28
- protocol: "http",
29
- connection: "not_applicable",
30
- at_ms: 0,
31
- method: "POST",
32
- path: "/callback",
33
- headers: {},
34
- body: '{"token":"opaque"}',
35
- },
36
- ],
37
- });
@@ -1,95 +0,0 @@
1
- import { createHash } from "node:crypto";
2
- import { z } from "zod";
3
- const digestSchema = z.string().regex(/^[a-f0-9]{64}$/u);
4
- export const javascriptExportInstrumentationInputSchema = z.strictObject({
5
- artifact_path: z.string().min(1),
6
- artifact_sha256: digestSchema,
7
- selection: z.strictObject({
8
- byte_start: z.number().int().min(0),
9
- byte_end: z.number().int().min(1),
10
- selected_sha256: digestSchema,
11
- export_name: z.string().regex(/^[A-Za-z_$][A-Za-z0-9_$]{0,199}$/u),
12
- }),
13
- });
14
- export const javascriptExportTransformationManifestSchema = z.strictObject({
15
- kind: z.literal("commonjs-factory-export-v1"),
16
- artifact_path: z.string().min(1),
17
- original_sha256: digestSchema,
18
- original_byte_length: z.number().int().min(0),
19
- instrumented_sha256: digestSchema,
20
- instrumented_byte_length: z.number().int().min(0),
21
- selected_range: z.strictObject({
22
- byte_start: z.number().int().min(0),
23
- byte_end: z.number().int().min(1),
24
- selected_sha256: digestSchema,
25
- }),
26
- inserted_ranges: z
27
- .array(z.strictObject({
28
- byte_start: z.number().int().min(0),
29
- byte_end: z.number().int().min(1),
30
- inserted_sha256: digestSchema,
31
- purpose: z.enum(["factory-prefix", "export-binding", "factory-suffix"]),
32
- }))
33
- .length(3),
34
- output_format: z.literal("commonjs-factory"),
35
- source_map: z.literal(null),
36
- });
37
- /** Instrument one exact UTF-8 expression range without mutating source bytes. */
38
- export const instrumentJavaScriptExport = (source, rawInput) => {
39
- const input = javascriptExportInstrumentationInputSchema.parse(rawInput);
40
- if (sha256(source) !== input.artifact_sha256)
41
- throw new TypeError("JavaScript instrumentation artifact digest mismatch");
42
- const { byte_start: start, byte_end: end } = input.selection;
43
- if (end <= start || end > source.byteLength)
44
- throw new TypeError("JavaScript instrumentation selection is out of bounds");
45
- const selected = source.slice(start, end);
46
- if (sha256(selected) !== input.selection.selected_sha256)
47
- throw new TypeError("JavaScript instrumentation selection digest mismatch");
48
- decodeUtf8(source);
49
- decodeUtf8(selected);
50
- const prefix = encode("function(module, exports, require) {\n");
51
- const binding = encode(`\nmodule.exports[${JSON.stringify(input.selection.export_name)}] = (${decodeUtf8(selected)});\n`);
52
- const suffix = encode("}\n");
53
- const bytes = concatenate([prefix, source, binding, suffix]);
54
- const bindingStart = prefix.byteLength + source.byteLength;
55
- const suffixStart = bindingStart + binding.byteLength;
56
- const manifest = javascriptExportTransformationManifestSchema.parse({
57
- kind: "commonjs-factory-export-v1",
58
- artifact_path: input.artifact_path,
59
- original_sha256: input.artifact_sha256,
60
- original_byte_length: source.byteLength,
61
- instrumented_sha256: sha256(bytes),
62
- instrumented_byte_length: bytes.byteLength,
63
- selected_range: {
64
- byte_start: start,
65
- byte_end: end,
66
- selected_sha256: input.selection.selected_sha256,
67
- },
68
- inserted_ranges: [
69
- range(0, prefix, "factory-prefix"),
70
- range(bindingStart, binding, "export-binding"),
71
- range(suffixStart, suffix, "factory-suffix"),
72
- ],
73
- output_format: "commonjs-factory",
74
- source_map: null,
75
- });
76
- return { bytes, manifest };
77
- };
78
- const range = (start, bytes, purpose) => ({
79
- byte_start: start,
80
- byte_end: start + bytes.byteLength,
81
- inserted_sha256: sha256(bytes),
82
- purpose,
83
- });
84
- const encode = (value) => new TextEncoder().encode(value);
85
- const decodeUtf8 = (value) => new TextDecoder("utf-8", { fatal: true }).decode(value);
86
- const concatenate = (values) => {
87
- const output = new Uint8Array(values.reduce((total, value) => total + value.byteLength, 0));
88
- let offset = 0;
89
- for (const value of values) {
90
- output.set(value, offset);
91
- offset += value.byteLength;
92
- }
93
- return output;
94
- };
95
- const sha256 = (value) => createHash("sha256").update(value).digest("hex");