rea-agents 3.2.1 → 4.0.1

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,33 +1,32 @@
1
1
  import { readdir, readlink, realpath } from "node:fs/promises";
2
2
  import { dirname, join, resolve } from "node:path";
3
3
  import { compareUnicodeCodePoints } from "../domain/unicodeCodePointOrder.js";
4
- import { entryFailure, safeSize } from "./ReferenceSourceReaderErrors.js";
4
+ import { cancelled, entryFailure, filesystemFailureDetail, safeSize, } from "./ReferenceSourceReaderErrors.js";
5
5
  import { isPathWithinRoot } from "../domain/localPath.js";
6
6
  import { pathFromRoot } from "./ReferenceSourceReaderPaths.js";
7
7
  import { readStableFile } from "./ReferenceSourceReaderFile.js";
8
8
  import { isAborted, sameFile, validateDirectory, bigLstat, } from "./ReferenceSourceReaderValidate.js";
9
9
  import {} from "./ReferenceSourceReaderTypes.js";
10
10
  export const traverseDirectory = async (state, current) => {
11
- const before = await validateDirectory(state.root, state.rootIdentity, current.path);
11
+ const before = await validateDirectory(state.root, state.rootIdentity, current.path, state.signal);
12
+ if (isAborted(state.signal))
13
+ return { ok: false, error: cancelled() };
12
14
  if (!before.ok) {
13
15
  state.entries.push(entryFailure(pathFromRoot(state.root, current.path), "directory", before.code, before.message));
14
16
  return { ok: true, value: undefined };
15
17
  }
16
18
  const names = await readDirectoryNames(current.path);
19
+ if (isAborted(state.signal))
20
+ return { ok: false, error: cancelled() };
17
21
  if (!names.ok) {
18
22
  state.entries.push(entryFailure(pathFromRoot(state.root, current.path), "directory", "io", names.message));
19
23
  return { ok: true, value: undefined };
20
24
  }
21
25
  if (isAborted(state.signal))
22
- return {
23
- ok: false,
24
- error: {
25
- tag: "reference-source-reader",
26
- code: "cancelled",
27
- message: "Reference source traversal cancelled",
28
- },
29
- };
30
- const after = await validateDirectory(state.root, state.rootIdentity, current.path);
26
+ return { ok: false, error: cancelled() };
27
+ const after = await validateDirectory(state.root, state.rootIdentity, current.path, state.signal);
28
+ if (isAborted(state.signal))
29
+ return { ok: false, error: cancelled() };
31
30
  if (!after.ok || !sameFile(before.stats, after.stats)) {
32
31
  state.entries.push(entryFailure(pathFromRoot(state.root, current.path), "directory", "changed", "Directory changed while it was read"));
33
32
  return { ok: true, value: undefined };
@@ -49,28 +48,27 @@ const readDirectoryNames = async (path) => {
49
48
  value: (await readdir(path)).sort(compareUnicodeCodePoints),
50
49
  };
51
50
  }
52
- catch {
53
- return { ok: false, message: "Directory could not be read" };
51
+ catch (cause) {
52
+ const message = filesystemFailureDetail(cause, "Directory could not be read");
53
+ if (message === undefined)
54
+ throw cause;
55
+ return { ok: false, message };
54
56
  }
55
57
  };
56
58
  const readMetadata = async (path) => {
57
59
  try {
58
60
  return { ok: true, value: await bigLstat(path) };
59
61
  }
60
- catch {
61
- return { ok: false, message: "Entry metadata could not be read" };
62
+ catch (cause) {
63
+ const message = filesystemFailureDetail(cause, "Entry metadata could not be read");
64
+ if (message === undefined)
65
+ throw cause;
66
+ return { ok: false, message };
62
67
  }
63
68
  };
64
69
  const processEntry = async (state, current, name, directories) => {
65
70
  if (isAborted(state.signal))
66
- return {
67
- ok: false,
68
- error: {
69
- tag: "reference-source-reader",
70
- code: "cancelled",
71
- message: "Reference source traversal cancelled",
72
- },
73
- };
71
+ return { ok: false, error: cancelled() };
74
72
  const absolute = join(current.path, name);
75
73
  const path = pathFromRoot(state.root, absolute);
76
74
  const excluded = applyExclusion(state.shouldExclude, path);
@@ -86,6 +84,8 @@ const processEntry = async (state, current, name, directories) => {
86
84
  if (excluded.value)
87
85
  return { ok: true, value: undefined };
88
86
  const metadata = await readMetadata(absolute);
87
+ if (isAborted(state.signal))
88
+ return { ok: false, error: cancelled() };
89
89
  if (!metadata.ok) {
90
90
  state.entries.push(entryFailure(path, "unknown", "io", metadata.message));
91
91
  return { ok: true, value: undefined };
@@ -100,7 +100,7 @@ const processEntry = async (state, current, name, directories) => {
100
100
  },
101
101
  };
102
102
  if (metadata.value.isSymbolicLink())
103
- state.entries.push(await describeSymlink(state.root, absolute, path));
103
+ state.entries.push(await describeSymlink(state.root, absolute, path, state.signal));
104
104
  else if (metadata.value.isDirectory()) {
105
105
  state.entries.push({ status: "read", kind: "directory", path });
106
106
  directories.push({ path: absolute });
@@ -124,7 +124,7 @@ const processFileEntry = async (state, absolute, path, metadata) => {
124
124
  state.bytesRead += result.bytes.byteLength;
125
125
  state.entries.push(result);
126
126
  };
127
- const describeSymlink = async (root, absolute, path) => {
127
+ const describeSymlink = async (root, absolute, path, signal) => {
128
128
  try {
129
129
  const rawTarget = await readlink(absolute);
130
130
  const lexicalTarget = resolve(dirname(absolute), rawTarget);
@@ -133,7 +133,7 @@ const describeSymlink = async (root, absolute, path) => {
133
133
  status: "read",
134
134
  kind: "symlink",
135
135
  path,
136
- target: "<outside-root>",
136
+ target: lexicalTarget,
137
137
  targetState: "external",
138
138
  };
139
139
  try {
@@ -150,22 +150,39 @@ const describeSymlink = async (root, absolute, path) => {
150
150
  status: "read",
151
151
  kind: "symlink",
152
152
  path,
153
- target: "<outside-root>",
153
+ target: canonicalTarget,
154
154
  targetState: "external",
155
155
  };
156
156
  }
157
- catch {
157
+ catch (cause) {
158
+ if (isAborted(signal))
159
+ return entryFailure(path, "symlink", "cancelled", "Symlink inspection cancelled");
160
+ const code = cause instanceof Error ? Reflect.get(cause, "code") : undefined;
161
+ if (code !== "ENOENT") {
162
+ const message = filesystemFailureDetail(cause, "Symbolic link target could not be resolved");
163
+ if (message === undefined)
164
+ throw cause;
165
+ return entryFailure(path, "symlink", "io", message);
166
+ }
167
+ const missingOutsideRoot = !isPathWithinRoot(root, lexicalTarget);
158
168
  return {
159
169
  status: "read",
160
170
  kind: "symlink",
161
171
  path,
162
- target: pathFromRoot(root, lexicalTarget),
172
+ target: missingOutsideRoot
173
+ ? lexicalTarget
174
+ : pathFromRoot(root, lexicalTarget),
163
175
  targetState: "missing",
164
176
  };
165
177
  }
166
178
  }
167
- catch {
168
- return entryFailure(path, "symlink", "io", "Symbolic link target could not be read");
179
+ catch (cause) {
180
+ if (isAborted(signal))
181
+ return entryFailure(path, "symlink", "cancelled", "Symlink inspection cancelled");
182
+ const message = filesystemFailureDetail(cause, "Symbolic link target could not be read");
183
+ if (message === undefined)
184
+ throw cause;
185
+ return entryFailure(path, "symlink", "io", message);
169
186
  }
170
187
  };
171
188
  const applyExclusion = (shouldExclude, path) => {
@@ -9,6 +9,30 @@ export const safeSize = (size) => {
9
9
  const value = Number(size);
10
10
  return Number.isSafeInteger(value) && value >= 0 ? value : undefined;
11
11
  };
12
+ const FILESYSTEM_ERROR_CODES = new Set([
13
+ "EACCES",
14
+ "EBADF",
15
+ "EEXIST",
16
+ "EIO",
17
+ "EISDIR",
18
+ "ELOOP",
19
+ "EMFILE",
20
+ "ENFILE",
21
+ "ENOENT",
22
+ "ENOTDIR",
23
+ "ENOSPC",
24
+ "EPERM",
25
+ "EROFS",
26
+ ]);
27
+ /** Preserve actionable operating-system detail while leaving invariants visible. */
28
+ export const filesystemFailureDetail = (cause, operation) => {
29
+ if (!(cause instanceof Error))
30
+ return undefined;
31
+ const code = Reflect.get(cause, "code");
32
+ return typeof code === "string" && FILESYSTEM_ERROR_CODES.has(code)
33
+ ? `${operation}: ${cause.message}`
34
+ : undefined;
35
+ };
12
36
  export const entryFailure = (...[path, kind, code, message, size]) => ({
13
37
  status: "failed",
14
38
  kind,
@@ -1,7 +1,7 @@
1
1
  import { constants } from "node:fs";
2
2
  import { open } from "node:fs/promises";
3
3
  import { dirname } from "node:path";
4
- import { entryFailure, safeSize } from "./ReferenceSourceReaderErrors.js";
4
+ import { entryFailure, filesystemFailureDetail, safeSize, } from "./ReferenceSourceReaderErrors.js";
5
5
  import { isAborted, sameFile, validateDirectory, } from "./ReferenceSourceReaderValidate.js";
6
6
  import {} from "./ReferenceSourceReaderTypes.js";
7
7
  const READ_CHUNK_BYTES = 64 * 1024;
@@ -49,7 +49,7 @@ const readFileContents = async (request) => {
49
49
  const finalizeFileRead = async (request) => {
50
50
  const { root, rootIdentity, absolute, path, handle, before, parentBefore, chunks, total, } = request;
51
51
  const after = await handle.stat({ bigint: true });
52
- const parentAfter = await validateDirectory(root, rootIdentity, dirname(absolute));
52
+ const parentAfter = await validateDirectory(root, rootIdentity, dirname(absolute), request.signal);
53
53
  if (!parentAfter.ok || !sameFile(parentBefore.stats, parentAfter.stats))
54
54
  return entryFailure(path, "file", "changed", "Parent directory changed while file was read", total);
55
55
  if (!sameFile(before, after) || BigInt(total) !== after.size)
@@ -66,7 +66,7 @@ export const readStableFile = async (request) => {
66
66
  const { root, rootIdentity, absolute, path, expected, signal } = request;
67
67
  let handle;
68
68
  try {
69
- const parentBefore = await validateDirectory(root, rootIdentity, dirname(absolute));
69
+ const parentBefore = await validateDirectory(root, rootIdentity, dirname(absolute), signal);
70
70
  if (!parentBefore.ok)
71
71
  return entryFailure(path, "file", parentBefore.code, parentBefore.message, safeSize(expected.size));
72
72
  handle = await open(absolute, constants.O_RDONLY | constants.O_NOFOLLOW);
@@ -90,10 +90,16 @@ export const readStableFile = async (request) => {
90
90
  parentBefore,
91
91
  chunks: contents.chunks,
92
92
  total: contents.total,
93
+ ...(signal === undefined ? {} : { signal }),
93
94
  });
94
95
  }
95
- catch {
96
- return entryFailure(path, "file", isAborted(signal) ? "cancelled" : "io", "File could not be read safely", safeSize(expected.size));
96
+ catch (cause) {
97
+ if (isAborted(signal))
98
+ return entryFailure(path, "file", "cancelled", "File read cancelled", safeSize(expected.size));
99
+ const message = filesystemFailureDetail(cause, "File could not be read safely");
100
+ if (message === undefined)
101
+ throw cause;
102
+ return entryFailure(path, "file", "io", message, safeSize(expected.size));
97
103
  }
98
104
  finally {
99
105
  await handle?.close().catch(() => undefined);
@@ -1,7 +1,7 @@
1
1
  import { constants } from "node:fs";
2
2
  import { lstat, realpath } from "node:fs/promises";
3
3
  import { err, ok } from "../domain/result.js";
4
- import { cancelled, failure } from "./ReferenceSourceReaderErrors.js";
4
+ import { cancelled, failure, filesystemFailureDetail, } from "./ReferenceSourceReaderErrors.js";
5
5
  import { isPathWithinRoot } from "../domain/localPath.js";
6
6
  import {} from "./ReferenceSourceReaderTypes.js";
7
7
  export const bigLstat = (path) => lstat(path, { bigint: true });
@@ -12,7 +12,7 @@ export const sameFile = (left, right) => left.dev === right.dev &&
12
12
  left.ctimeNs === right.ctimeNs;
13
13
  export const isAborted = (signal) => signal?.aborted === true;
14
14
  export const noFollowOpenSupported = () => Number.isSafeInteger(constants.O_NOFOLLOW) && constants.O_NOFOLLOW !== 0;
15
- export const validateDirectory = async (root, rootIdentity, path) => {
15
+ export const validateDirectory = async (root, rootIdentity, path, signal) => {
16
16
  try {
17
17
  const rootNow = await bigLstat(root);
18
18
  if (!sameFile(rootIdentity, rootNow))
@@ -39,11 +39,20 @@ export const validateDirectory = async (root, rootIdentity, path) => {
39
39
  };
40
40
  return { ok: true, stats };
41
41
  }
42
- catch {
42
+ catch (cause) {
43
+ if (isAborted(signal))
44
+ return {
45
+ ok: false,
46
+ code: "cancelled",
47
+ message: "Reference source traversal cancelled",
48
+ };
49
+ const message = filesystemFailureDetail(cause, "Directory identity could not be verified");
50
+ if (message === undefined)
51
+ throw cause;
43
52
  return {
44
53
  ok: false,
45
54
  code: "io",
46
- message: "Directory identity could not be verified",
55
+ message,
47
56
  };
48
57
  }
49
58
  };
@@ -53,16 +62,21 @@ export const prepareRoot = async (root, signal) => {
53
62
  try {
54
63
  const metadata = await bigLstat(root);
55
64
  if (metadata.isSymbolicLink() || !metadata.isDirectory())
56
- return err(failure("invalid-root", "Reference source root must be a directory"));
65
+ return err(failure("invalid-root", `Reference source root is not a directory: ${root}`));
57
66
  const canonicalRoot = await realpath(root);
58
67
  if (isAborted(signal))
59
68
  return err(cancelled());
60
69
  const canonicalMetadata = await bigLstat(canonicalRoot);
61
70
  if (!sameFile(metadata, canonicalMetadata))
62
- return err(failure("invalid-root", "Reference source root changed during resolution"));
71
+ return err(failure("invalid-root", `Reference source root changed during resolution: ${root}`));
63
72
  return ok({ canonicalRoot, rootIdentity: canonicalMetadata });
64
73
  }
65
- catch {
66
- return err(failure("invalid-root", "Reference source root could not be resolved"));
74
+ catch (cause) {
75
+ if (isAborted(signal))
76
+ return err(cancelled());
77
+ const message = filesystemFailureDetail(cause, "Reference source root could not be resolved");
78
+ if (message === undefined)
79
+ throw cause;
80
+ return err(failure("invalid-root", `${message}: ${root}`));
67
81
  }
68
82
  };
@@ -1,12 +1,6 @@
1
- import { randomBytes } from "node:crypto";
2
- import { CLIENT_CAPABILITIES_META_KEY, createRequestStateCodec, McpServer, PROTOCOL_VERSION_META_KEY, } from "@modelcontextprotocol/server";
3
- import { MANAGED_RUNTIME_DISABLED } from "../application/ManagedRuntimeCorrelationService.js";
1
+ import { McpServer } from "@modelcontextprotocol/server";
4
2
  import { PRODUCT_IDENTITY } from "../identity.js";
5
3
  import { silentLogger } from "../logger.js";
6
- import { LinuxJavaScriptReplayRunner } from "../replay/LinuxJavaScriptReplayRunner.js";
7
- import { SystemJavaScriptReplayHost } from "../replay/SystemJavaScriptReplayHost.js";
8
- import { mcpEnvelopeValue } from "./mcpClientMetadata.js";
9
- import { PROCESS_CAPTURE_ELICITATION_POLICY, } from "./ProcessCaptureElicitation.js";
10
4
  import { registerApplicationTools } from "./registerApplicationTools.js";
11
5
  import { registerArtifactTools } from "./registerArtifactTools.js";
12
6
  import { registerBrowserScenarioTool } from "./registerBrowserScenarioTool.js";
@@ -21,53 +15,29 @@ import { registerOfficialTools } from "./registerOfficialTools.js";
21
15
  import { registerGuidedPrompts } from "./registerPrompts.js";
22
16
  import { registerSessionTools } from "./registerSessionTools.js";
23
17
  import { sessionAvailabilityPolicy } from "./sessionAvailabilityPolicy.js";
24
- import { DENY_PROCESS_POLICY } from "./sessionToolPolicies.js";
25
18
  const TARGET_FREE_INSTRUCTIONS = "REA provides reverse-engineering tools for local artifacts, native binaries, managed code, browser pages, and runtimes. Use the tool that directly answers the question; discover targets or inspect inventory only when needed. Tool results include inline Evidence and report their coverage and limitations.";
26
19
  const ACTIVE_TARGET_INSTRUCTIONS = "REA analyzes the active reverse-engineering target. Use the analysis tool that answers the question directly. Search or list symbols when discovery is needed; analyze_function provides a function dossier, and focused procedure tools return individual facets.";
27
20
  const installSessionToolAvailability = (server, session, options) => {
28
21
  if (session === undefined)
29
22
  return undefined;
30
23
  const policy = sessionAvailabilityPolicy(options.availabilityPolicy, {
31
- processPolicy: options.processPolicy?.() ?? DENY_PROCESS_POLICY,
32
24
  optionalFeatures: {
33
25
  browserObservationEnabled: options.browserObservation !== undefined,
34
26
  browserScenarioEnabled: options.browserScenarioCapture !== undefined,
35
27
  electronObservationEnabled: options.electronObservation !== undefined,
36
- electronAutomationEnabled: options.electronActiveObservation !== undefined &&
37
- options.permissionAuthority !== undefined,
28
+ electronAutomationEnabled: options.electronActiveObservation !== undefined,
38
29
  v8InspectorObservationEnabled: options.javascriptRuntimeObservation !== undefined,
39
- javascriptReplayEnabled: options.javascriptReplayPolicy?.().status === "enabled",
40
- managedRuntimeEnabled: options.managedRuntimePolicy?.().status === "enabled",
41
30
  },
42
31
  });
43
32
  return {
44
33
  policy,
45
34
  };
46
35
  };
47
- const createProcessCaptureElicitation = (stateCodec) => ({
48
- stateCodec,
49
- supported: (context) => {
50
- const envelope = context.mcpReq.envelope;
51
- const version = mcpEnvelopeValue(envelope, PROTOCOL_VERSION_META_KEY);
52
- const capabilities = mcpEnvelopeValue(envelope, CLIENT_CAPABILITIES_META_KEY);
53
- return (typeof version === "string" &&
54
- PROCESS_CAPTURE_ELICITATION_POLICY.protocolVersions.some((supported) => supported === version) &&
55
- isRecord(capabilities) &&
56
- isRecord(capabilities.elicitation) &&
57
- capabilities.elicitation.form !== undefined);
58
- },
59
- now: Date.now,
60
- consumedNonces: new Map(),
61
- });
62
- const createMcpServer = (processCaptureStateCodec, session) => new McpServer({
36
+ const createMcpServer = (session) => new McpServer({
63
37
  name: PRODUCT_IDENTITY.mcpServerKey,
64
38
  version: PRODUCT_IDENTITY.packageVersion,
65
39
  }, {
66
40
  capabilities: {},
67
- inputRequired: {
68
- roundTimeoutMs: PROCESS_CAPTURE_ELICITATION_POLICY.roundTimeoutMs,
69
- },
70
- requestState: { verify: processCaptureStateCodec.verify },
71
41
  instructions: session === undefined
72
42
  ? ACTIVE_TARGET_INSTRUCTIONS
73
43
  : TARGET_FREE_INSTRUCTIONS,
@@ -80,26 +50,16 @@ const createMcpServer = (processCaptureStateCodec, session) => new McpServer({
80
50
  export const createServer = (analysis, session, options = {}) => {
81
51
  const startedAt = new Date().toISOString();
82
52
  const logger = options.logger ?? silentLogger;
83
- const permissionAuthority = options.permissionAuthority?.createConnectionAuthority();
84
- const processCaptureStateCodec = createRequestStateCodec({
85
- key: randomBytes(32),
86
- ttlSeconds: PROCESS_CAPTURE_ELICITATION_POLICY.stateTtlSeconds,
87
- });
88
- const server = createMcpServer(processCaptureStateCodec, session);
53
+ const server = createMcpServer(session);
89
54
  const availability = installSessionToolAvailability(server, session, options);
90
- server.server.onclose = () => {
91
- permissionAuthority?.clearSessionGrants();
92
- };
93
55
  const toolLogger = logger.child({ layer: "server" });
94
56
  const { activeTarget, recordEvidence, recordEvidenceWithUnknown } = createSessionRecorders(server, session);
95
- const processCaptureElicitation = createProcessCaptureElicitation(processCaptureStateCodec);
96
57
  const toolContext = {
97
58
  server,
98
59
  analysis,
99
60
  session,
100
61
  options,
101
62
  logger: toolLogger,
102
- permissionAuthority,
103
63
  activeTarget,
104
64
  recordEvidence,
105
65
  recordEvidenceWithUnknown,
@@ -113,14 +73,11 @@ export const createServer = (analysis, session, options = {}) => {
113
73
  ...(availability === undefined
114
74
  ? {}
115
75
  : { availabilityPolicy: availability.policy }),
116
- ...(permissionAuthority === undefined ? {} : { permissionAuthority }),
117
76
  startedAt,
118
- processCaptureElicitation,
119
77
  });
120
78
  }
121
79
  return server;
122
80
  };
123
- const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
124
81
  const createSessionRecorders = (server, session) => ({
125
82
  activeTarget: session === undefined ? undefined : () => session.activeTarget(),
126
83
  recordEvidence: session === undefined
@@ -136,7 +93,7 @@ const createSessionRecorders = (server, session) => ({
136
93
  return recorded;
137
94
  },
138
95
  });
139
- const registerBinaryAnalysisTools = ({ server, analysis, session, options, logger, permissionAuthority, activeTarget, recordEvidence, recordEvidenceWithUnknown, }) => {
96
+ const registerBinaryAnalysisTools = ({ server, analysis, session, logger, activeTarget, recordEvidence, recordEvidenceWithUnknown, }) => {
140
97
  const recordUnknown = session === undefined
141
98
  ? undefined
142
99
  : (input) => session.recordUnknown(input);
@@ -155,7 +112,6 @@ const registerBinaryAnalysisTools = ({ server, analysis, session, options, logge
155
112
  registerNativeTools(server, analysis, evidenceOptions);
156
113
  registerArtifactTools(server, analysis, {
157
114
  ...evidenceOptions,
158
- ...(permissionAuthority === undefined ? {} : { permissionAuthority }),
159
115
  });
160
116
  registerManagedTools(server, analysis, {
161
117
  ...evidenceOptions,
@@ -167,14 +123,10 @@ const registerBinaryAnalysisTools = ({ server, analysis, session, options, logge
167
123
  recordEvidence,
168
124
  recordEvidenceWithUnknown,
169
125
  session,
170
- runtime: {
171
- policy: options.managedRuntimePolicy ?? (() => MANAGED_RUNTIME_DISABLED),
172
- authority: permissionAuthority,
173
- },
174
126
  });
175
127
  };
176
- const registerObservationTools = ({ server, options, logger, permissionAuthority, recordEvidence, recordEvidenceWithUnknown, }) => {
177
- const common = { logger, permissionAuthority, recordEvidence };
128
+ const registerObservationTools = ({ server, options, logger, recordEvidence, recordEvidenceWithUnknown, }) => {
129
+ const common = { logger, recordEvidence };
178
130
  registerBrowserTools(server, {
179
131
  ...common,
180
132
  browser: options.browserObservation,
@@ -196,12 +148,5 @@ const registerObservationTools = ({ server, options, logger, permissionAuthority
196
148
  logger,
197
149
  recordEvidence,
198
150
  recordEvidenceWithUnknown,
199
- permissionAuthority,
200
- replay: {
201
- policy: options.javascriptReplayPolicy ?? (() => ({ status: "disabled" })),
202
- host: options.javascriptReplayHost ?? new SystemJavaScriptReplayHost(),
203
- runner: options.javascriptReplayRunner ?? new LinuxJavaScriptReplayRunner(),
204
- authority: permissionAuthority,
205
- },
206
151
  });
207
152
  };
@@ -30,17 +30,10 @@ const unknownRegistration = (evidence, kind) => ({
30
30
  ? [
31
31
  {
32
32
  operation: "reconcile_javascript_runtime",
33
- rationale: "Add approved passive runtime Evidence without promoting it to static fact.",
33
+ rationale: "Add passive runtime Evidence without promoting it to static fact.",
34
34
  },
35
35
  ]
36
- : kind === "source-to-bundle-comparison"
37
- ? []
38
- : [
39
- {
40
- operation: "run_controlled_replay",
41
- rationale: "Validate exact approved module behavior separately when runtime semantics are required.",
42
- },
43
- ]),
36
+ : []),
44
37
  ],
45
38
  relationships: [],
46
39
  });
@@ -3,8 +3,6 @@ import { registerTraceJavaScriptSemanticsTool } from "./registerApplicationTools
3
3
  import { registerCompareApplicationVersionsTool } from "./registerApplicationTools/compareVersions.js";
4
4
  import { registerCompareSourceToBundleTool } from "./registerApplicationTools/compareSourceToBundle.js";
5
5
  import { registerCompareJavaScriptExportShapesTool } from "./registerApplicationTools/compareExportShapes.js";
6
- import { registerControlledReplayTool } from "./registerApplicationTools/controlledReplay.js";
7
- import { registerCharacterizationTools } from "./registerApplicationTools/characterization.js";
8
6
  import { registerCoverageTools } from "./registerApplicationTools/coverage.js";
9
7
  import { registerReconstructionObligationLedgerTool } from "./registerApplicationTools/obligationLedger.js";
10
8
  /** Register provider-neutral JavaScript application graph workflows. */
@@ -14,8 +12,6 @@ export const registerApplicationTools = (server, options) => {
14
12
  registerCompareApplicationVersionsTool(server, options);
15
13
  registerCompareSourceToBundleTool(server, options);
16
14
  registerCompareJavaScriptExportShapesTool(server, options);
17
- registerControlledReplayTool(server, options);
18
- registerCharacterizationTools(server, options);
19
15
  registerReconstructionObligationLedgerTool(server, options);
20
16
  registerCoverageTools(server, options);
21
17
  };
@@ -1,4 +1,4 @@
1
- import { SESSION_TOOL_CONTRACTS } from "../contracts/toolContracts.js";
1
+ import { toolContract } from "../contracts/toolContracts.js";
2
2
  import { compareArtifacts } from "../domain/artifactComparison.js";
3
3
  import { createEvidence, parseEvidence } from "../domain/evidence.js";
4
4
  import { jsonValueSchema } from "../domain/jsonValue.js";
@@ -4,12 +4,14 @@ import { browserScenarioSchema } from "../domain/browserScenario.js";
4
4
  import { logToolExecution } from "./toolLogging.js";
5
5
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
6
6
  import { toCallToolResult } from "./toolResult.js";
7
- /** Register the controlled browser scenario tool even when policy disables it. */
7
+ /** Register the browser scenario tool with execution-time provider diagnostics. */
8
8
  export const registerBrowserScenarioTool = (server, options) => {
9
9
  const [contract] = BROWSER_SCENARIO_TOOL_CONTRACTS;
10
10
  server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => {
11
11
  const scenario = browserScenarioSchema.parse(input);
12
- const result = await logToolExecution(options.logger, contract.name, () => captureBrowserScenario(options.provider, options.permissionAuthority, scenario, { signal: context.mcpReq.signal }));
12
+ const result = await logToolExecution(options.logger, contract.name, () => captureBrowserScenario(options.provider, scenario, {
13
+ signal: context.mcpReq.signal,
14
+ }));
13
15
  if (!result.ok)
14
16
  return toCallToolResult(result, contract);
15
17
  const recorded = options.recordEvidence?.(result.value);
@@ -6,28 +6,28 @@ import { mcpProgressReporter } from "./mcpProgress.js";
6
6
  import { logToolExecution } from "./toolLogging.js";
7
7
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
8
8
  import { toCallToolResult } from "./toolResult.js";
9
- /** Register browser tools even when policy/provider availability denies execution. */
9
+ /** Register browser tools with execution-time provider diagnostics. */
10
10
  // oxlint-disable-next-line max-lines-per-function -- direct SDK calls retain each schema-handler type correlation.
11
11
  export const registerBrowserTools = (server, options) => {
12
12
  const [listContract, inspectContract, analyzeContract, sessionContract, webMcpContract, captureDiffContract, screenshotContract, screenshotDiffContract,] = BROWSER_TOOL_CONTRACTS;
13
- server.registerTool(listContract.name, toolRegistrationOptions(listContract), (input, context) => runBrowserTool(options, listContract, { input, context }, (parsed, { signal }) => listBrowserTargets(options.browser, options.permissionAuthority, parsed, {
13
+ server.registerTool(listContract.name, toolRegistrationOptions(listContract), (input, context) => runBrowserTool(options, listContract, { input, context }, (parsed, { signal }) => listBrowserTargets(options.browser, parsed, {
14
14
  signal,
15
15
  })));
16
- server.registerTool(inspectContract.name, toolRegistrationOptions(inspectContract), (input, context) => runBrowserTool(options, inspectContract, { input, context }, (parsed, { signal, progress }) => inspectWebPage(options.browser, options.permissionAuthority, inspectWebPageInputSchema.parse(parsed), { signal, progress })));
17
- server.registerTool(analyzeContract.name, toolRegistrationOptions(analyzeContract), (input, context) => runBrowserTool(options, analyzeContract, { input, context }, (parsed, { signal, progress }) => analyzeWebBundle(options.browser, options.permissionAuthority, analyzeWebBundleInputSchema.parse(parsed), {
16
+ server.registerTool(inspectContract.name, toolRegistrationOptions(inspectContract), (input, context) => runBrowserTool(options, inspectContract, { input, context }, (parsed, { signal, progress }) => inspectWebPage(options.browser, inspectWebPageInputSchema.parse(parsed), { signal, progress })));
17
+ server.registerTool(analyzeContract.name, toolRegistrationOptions(analyzeContract), (input, context) => runBrowserTool(options, analyzeContract, { input, context }, (parsed, { signal, progress }) => analyzeWebBundle(options.browser, analyzeWebBundleInputSchema.parse(parsed), {
18
18
  signal,
19
19
  progress,
20
20
  })));
21
- server.registerTool(sessionContract.name, toolRegistrationOptions(sessionContract), (input, context) => runBrowserTool(options, sessionContract, { input, context }, (parsed, { signal, progress }) => observeWebSession(options.browser, options.permissionAuthority, parsed, {
21
+ server.registerTool(sessionContract.name, toolRegistrationOptions(sessionContract), (input, context) => runBrowserTool(options, sessionContract, { input, context }, (parsed, { signal, progress }) => observeWebSession(options.browser, parsed, {
22
22
  signal,
23
23
  progress,
24
24
  })));
25
- server.registerTool(webMcpContract.name, toolRegistrationOptions(webMcpContract), (input, context) => runBrowserTool(options, webMcpContract, { input, context }, (parsed, { signal, progress }) => discoverWebMcpTools(options.browser, options.permissionAuthority, parsed, {
25
+ server.registerTool(webMcpContract.name, toolRegistrationOptions(webMcpContract), (input, context) => runBrowserTool(options, webMcpContract, { input, context }, (parsed, { signal, progress }) => discoverWebMcpTools(options.browser, parsed, {
26
26
  signal,
27
27
  progress,
28
28
  })));
29
29
  server.registerTool(captureDiffContract.name, toolRegistrationOptions(captureDiffContract), (input, context) => runBrowserTool(options, captureDiffContract, { input, context }, (parsed) => compareWebCaptureEvidence(options.browser, parsed)));
30
- server.registerTool(screenshotContract.name, toolRegistrationOptions(screenshotContract), (input, context) => runBrowserTool(options, screenshotContract, { input, context }, (parsed, { signal, progress }) => captureWebScreenshot(options.browser, options.permissionAuthority, parsed, {
30
+ server.registerTool(screenshotContract.name, toolRegistrationOptions(screenshotContract), (input, context) => runBrowserTool(options, screenshotContract, { input, context }, (parsed, { signal, progress }) => captureWebScreenshot(options.browser, parsed, {
31
31
  signal,
32
32
  progress,
33
33
  })));
@@ -1,5 +1,5 @@
1
1
  import { readEvidenceBundle } from "../application/EvidenceBundleFiles.js";
2
- import { SESSION_TOOL_CONTRACTS } from "../contracts/toolContracts.js";
2
+ import { toolContract } from "../contracts/toolContracts.js";
3
3
  import { compareBundles } from "../domain/bundleComparison.js";
4
4
  import { createEvidence } from "../domain/evidence.js";
5
5
  import { jsonValueSchema } from "../domain/jsonValue.js";
@@ -6,7 +6,7 @@ import { logToolExecution } from "./toolLogging.js";
6
6
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
7
7
  import { toCallToolResult } from "./toolResult.js";
8
8
  /** Register provider cleanup and optional pre-close snapshot persistence. */
9
- export const registerCloseLifecycleTool = ({ server, session, logger, contracts: [, closeContract], }) => {
9
+ export const registerCloseLifecycleTool = ({ server, session, logger, closeContract, }) => {
10
10
  server.registerTool(closeContract.name, toolRegistrationOptions(closeContract), async (input, context) => {
11
11
  const progress = mcpProgressReporter(context);
12
12
  if (input.snapshot_path === undefined) {
@@ -8,20 +8,26 @@ import { mcpProgressReporter } from "./mcpProgress.js";
8
8
  import { logToolExecution } from "./toolLogging.js";
9
9
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
10
10
  import { toCallToolResult } from "./toolResult.js";
11
- /** Register Electron tools even when provider or permission policy is absent. */
11
+ /** Register Electron tools even when a provider is absent. */
12
12
  // oxlint-disable-next-line max-lines-per-function -- direct SDK calls retain each schema-handler type correlation.
13
13
  export const registerElectronTools = (server, options) => {
14
14
  const [listContract, inspectContract, analyzeContract, reconcileContract, activeContract,] = ELECTRON_TOOL_CONTRACTS;
15
- server.registerTool(listContract.name, toolRegistrationOptions(listContract), (input, context) => runElectronTool(options, listContract, { input, context }, (parsed, { signal }) => listElectronTargets(options.electron, options.permissionAuthority, parsed, {
15
+ server.registerTool(listContract.name, toolRegistrationOptions(listContract), (input, context) => runElectronTool(options, listContract, { input, context }, (parsed, { signal }) => listElectronTargets(options.electron, parsed, {
16
16
  signal,
17
17
  })));
18
18
  server.registerTool(inspectContract.name, toolRegistrationOptions(inspectContract), (input, context) => runElectronTool(options, inspectContract, { input, context }, async (parsed, { signal, progress }) => {
19
19
  const request = inspectElectronPageInputSchema.parse(parsed);
20
- return inspectElectronPage(options.electron, options.permissionAuthority, request, { signal, progress });
20
+ return inspectElectronPage(options.electron, request, {
21
+ signal,
22
+ progress,
23
+ });
21
24
  }));
22
25
  server.registerTool(analyzeContract.name, toolRegistrationOptions(analyzeContract), (input, context) => runElectronTool(options, analyzeContract, { input, context }, (parsed, { signal, progress }) => analyzeJavaScriptApplicationValidated(parsed, { signal, progress })));
23
26
  server.registerTool(reconcileContract.name, toolRegistrationOptions(reconcileContract), (input, context) => runElectronTool(options, reconcileContract, { input, context }, (parsed) => Promise.resolve(reconcileJavaScriptRuntimeEvidenceValidated(parsed))));
24
- server.registerTool(activeContract.name, toolRegistrationOptions(activeContract), (input, context) => runElectronTool(options, activeContract, { input, context }, (parsed, { signal, progress }) => captureElectronScenario(options.electronActive, options.permissionAuthority, parsed, { signal, progress })));
27
+ server.registerTool(activeContract.name, toolRegistrationOptions(activeContract), (input, context) => runElectronTool(options, activeContract, { input, context }, (parsed, { signal, progress }) => captureElectronScenario(options.electronActive, parsed, {
28
+ signal,
29
+ progress,
30
+ })));
25
31
  };
26
32
  const runElectronTool = async (options, contract, request, execute) => {
27
33
  const { input, context } = request;