rea-agents 6.1.0 → 6.3.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 (573) hide show
  1. package/README.md +24 -24
  2. package/bridge/ghidra/ReaGhidraBridge.java +32 -4
  3. package/bridge/hopper_bridge.py +8 -1
  4. package/dist/android/JadxConfiguration.js +87 -7
  5. package/dist/android/JadxMcpTransport.js +14 -2
  6. package/dist/android/JadxProvider.js +64 -36
  7. package/dist/android/JadxSession.js +51 -9
  8. package/dist/application/BinaryTargetResolver.js +68 -20
  9. package/dist/application/BrowserEvidence.js +3 -8
  10. package/dist/application/BrowserScenarioEvidence.js +4 -20
  11. package/dist/application/CapabilityInventory.js +43 -9
  12. package/dist/application/ClientConfigurationDocument.js +97 -25
  13. package/dist/application/ClientRegistrationStatus.js +19 -6
  14. package/dist/application/DirectAnalysis.js +41 -20
  15. package/dist/application/DirectAnalysisCleanup.js +71 -0
  16. package/dist/application/DirectAnalysisStatus.js +3 -7
  17. package/dist/application/Doctor.js +40 -53
  18. package/dist/application/DoctorDiagnostics.js +2 -3
  19. package/dist/application/EnhancedTools.js +51 -6
  20. package/dist/application/EvidenceBundleFiles.js +8 -3
  21. package/dist/application/InvestigationProviders.js +13 -5
  22. package/dist/application/JsonFiles.js +56 -23
  23. package/dist/application/LinuxHopper.js +11 -7
  24. package/dist/application/MacHopper.js +15 -18
  25. package/dist/application/RealHopperAssertions.js +0 -11
  26. package/dist/application/ReconstructionObligationCandidates.js +10 -3
  27. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -1
  28. package/dist/application/ReferenceSourceImportEntries.js +1 -1
  29. package/dist/application/RegularFileRead.js +17 -0
  30. package/dist/application/Setup.js +26 -23
  31. package/dist/application/SetupClientConfiguration.js +18 -7
  32. package/dist/application/SetupHost.js +20 -29
  33. package/dist/application/SetupPlan.js +24 -20
  34. package/dist/application/SetupSkill.js +57 -8
  35. package/dist/application/SupportedClients.js +43 -0
  36. package/dist/application/Uninstall.js +98 -30
  37. package/dist/application/UpdateMaintenance.js +13 -7
  38. package/dist/application/UpdateRuntime.js +12 -12
  39. package/dist/application/Utf8JsonInput.js +64 -0
  40. package/dist/application/WebScriptExportService.js +38 -5
  41. package/dist/application/WorkflowEvidence.js +25 -2
  42. package/dist/application/XrefsAddressResolution.js +45 -0
  43. package/dist/application/analysisView/AnalysisViewService.js +76 -0
  44. package/dist/application/android/AndroidAnalysisService.js +1 -1
  45. package/dist/application/binary/AnalysisClientCleanup.js +30 -5
  46. package/dist/application/binary/AnalysisProviderEvaluation.js +1 -2
  47. package/dist/application/binary/AnalysisProviderRegistry.js +2 -6
  48. package/dist/application/binary/AnalysisSnapshotCache.js +13 -10
  49. package/dist/application/binary/BinarySession.js +86 -29
  50. package/dist/application/binary/BinarySessionComposition.js +1 -3
  51. package/dist/application/binary/BinarySessionExecution.js +3 -5
  52. package/dist/application/binary/BinarySessionOpen.js +10 -2
  53. package/dist/application/binary/BinarySessionRecords.js +1 -1
  54. package/dist/application/binary/BinarySessionStatus.js +1 -6
  55. package/dist/application/binary/CompositeProvider.js +4 -18
  56. package/dist/application/binary/LazyAnalysisProvider.js +5 -5
  57. package/dist/application/binary/SessionProviderRouter.js +27 -135
  58. package/dist/application/homebrew.js +48 -0
  59. package/dist/application/javascript/ElectronActiveEvidence.js +10 -14
  60. package/dist/application/javascript/ElectronBoundaryAnalysis.js +2 -2
  61. package/dist/application/javascript/ElectronBoundaryGraphNative.js +5 -1
  62. package/dist/application/javascript/JavaScriptApplicationEvidence.js +3 -6
  63. package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +107 -46
  64. package/dist/application/javascript/JavaScriptApplicationService.js +7 -1
  65. package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +59 -45
  66. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +5 -9
  67. package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +19 -27
  68. package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +11 -3
  69. package/dist/application/javascript/JavaScriptArtifactGraphContext.js +9 -0
  70. package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +8 -5
  71. package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +46 -29
  72. package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +0 -1
  73. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +86 -27
  74. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +52 -9
  75. package/dist/application/javascript/JavaScriptArtifactReconstructionInput.js +1 -0
  76. package/dist/application/javascript/JavaScriptJsonModules.js +2 -2
  77. package/dist/application/javascript/JavaScriptModuleRelationships.js +6 -18
  78. package/dist/application/javascript/JavaScriptRuntimeObservationService.js +3 -3
  79. package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +11 -27
  80. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +4 -5
  81. package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +8 -6
  82. package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +2 -3
  83. package/dist/application/javascript/JavaScriptSemanticGraphConstruction.js +7 -5
  84. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +3 -4
  85. package/dist/application/javascript/JavaScriptSemanticGraphEvidence.js +1 -1
  86. package/dist/application/javascript/JavaScriptSemanticGraphFingerprintProjection.js +2 -2
  87. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +3 -7
  88. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +76 -47
  89. package/dist/application/javascript/JavaScriptSemanticGraphProjection.js +4 -4
  90. package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +3 -4
  91. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +51 -25
  92. package/dist/application/javascript/JavaScriptSemanticTraceService.js +15 -10
  93. package/dist/application/managed/ManagedMemberComparisonService.js +2 -1
  94. package/dist/application/managed/ManagedNativeVerificationService.js +2 -1
  95. package/dist/application/native/NativeCallRoutes.js +2 -4
  96. package/dist/application/process/ProcessCli.js +11 -11
  97. package/dist/application/process/ProcessEvidence.js +0 -1
  98. package/dist/artifacts/ArtifactProvider.js +53 -30
  99. package/dist/artifacts/ArtifactProviderMetadata.js +1 -4
  100. package/dist/artifacts/ArtifactReader.js +31 -0
  101. package/dist/artifacts/AsarArtifactReader.js +81 -17
  102. package/dist/artifacts/DirectoryArtifactReader.js +2 -1
  103. package/dist/artifacts/MachOSliceArtifactReader.js +9 -2
  104. package/dist/artifacts/NativeDmgArtifactReader.js +207 -77
  105. package/dist/artifacts/NativeDmgOwnership.js +109 -0
  106. package/dist/artifacts/SafeOutputTree.js +16 -2
  107. package/dist/artifacts/ZipArtifactReader.js +11 -4
  108. package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +4 -2
  109. package/dist/artifacts/apple/DylibResolutionReader.js +17 -7
  110. package/dist/artifacts/apple/KeyedArchiveReader.js +68 -42
  111. package/dist/artifacts/apple/MachoLoadCommandReader.js +36 -6
  112. package/dist/artifacts/extraction/ArtifactExtraction.js +104 -29
  113. package/dist/artifacts/inventory/ArtifactGraphConstruction.js +71 -66
  114. package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
  115. package/dist/artifacts/inventory/classify.js +33 -14
  116. package/dist/artifacts/inventory/hashStableRootArtifact.js +37 -0
  117. package/dist/artifacts/inventory/reader.js +3 -3
  118. package/dist/artifacts/inventory/scanCanonical.js +64 -34
  119. package/dist/artifacts/inventory/scanReader.js +12 -20
  120. package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +65 -27
  121. package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
  122. package/dist/browser/CdpBrowserProvider.js +6 -6
  123. package/dist/browser/CdpCaptureEventHandlers.js +2 -4
  124. package/dist/browser/CdpCaptureEvents.js +0 -1
  125. package/dist/browser/CdpCaptureStorageFingerprints.js +3 -3
  126. package/dist/browser/CdpCaptureValues.js +20 -0
  127. package/dist/browser/CdpElectronInspection.js +2 -2
  128. package/dist/browser/CdpElectronProvider.js +4 -5
  129. package/dist/browser/CdpElectronScriptEvents.js +2 -8
  130. package/dist/browser/CdpElectronScripts.js +4 -5
  131. package/dist/browser/CdpPageCaptureScripts.js +2 -3
  132. package/dist/browser/CdpSafeMetadata.js +10 -10
  133. package/dist/browser/CdpWebMcpDiscovery.js +16 -13
  134. package/dist/browser/PlaywrightBrowserScenarioProvider.js +64 -49
  135. package/dist/browser/PlaywrightElectronActiveActions.js +2 -56
  136. package/dist/browser/PlaywrightElectronActiveProvider.js +10 -6
  137. package/dist/browser/PlaywrightScenarioArtifacts.js +1 -1
  138. package/dist/browser/PlaywrightScenarioBrowser.js +269 -66
  139. package/dist/browser/PlaywrightScenarioEvents.js +1 -1
  140. package/dist/browser/PlaywrightScenarioSession.js +41 -32
  141. package/dist/browser/WebSourceMapFetcher.js +32 -6
  142. package/dist/browser/assets/ScenarioScriptCapture.js +8 -12
  143. package/dist/browser/assets/ScriptCaptureAdapters.js +1 -1
  144. package/dist/browser/history/CaptureFailures.js +6 -2
  145. package/dist/browser/history/MitmproxyCaptureAdapter.js +4 -2
  146. package/dist/catalogIdentity.js +0 -1
  147. package/dist/cli/analysisViewCommands.js +36 -0
  148. package/dist/cli/artifactCommands.js +11 -12
  149. package/dist/cli/coreAnalysisCommands.js +3 -3
  150. package/dist/cli/coreBinaryCommands.js +37 -28
  151. package/dist/cli/coreNativeCommands.js +9 -10
  152. package/dist/cli/electronCommands.js +12 -13
  153. package/dist/cli/interactiveSetup.js +6 -6
  154. package/dist/cli/javascriptApplicationAnalysis.js +2 -12
  155. package/dist/cli/jsonOutput.js +3 -2
  156. package/dist/cli/managedCommands.js +7 -8
  157. package/dist/cli/nativeCallCommands.js +1 -2
  158. package/dist/cli/omittableDefaults.js +50 -0
  159. package/dist/cli/processCommands.js +3 -2
  160. package/dist/cli/setupCommands.js +16 -15
  161. package/dist/cli/streamedJsonOutput.js +83 -4
  162. package/dist/cli/utilityCommands.js +10 -12
  163. package/dist/cli.js +19 -8
  164. package/dist/cliBrowserScenarioCommands.js +2 -2
  165. package/dist/cliCommandNames.js +1 -0
  166. package/dist/cliJsonFile.js +179 -0
  167. package/dist/cliJsonInput.js +60 -33
  168. package/dist/cliObservationOptions.js +4 -0
  169. package/dist/cliOutput.js +0 -38
  170. package/dist/composition/auxiliaryAnalysisProviders.js +30 -25
  171. package/dist/composition/binary.js +9 -9
  172. package/dist/composition/browserScenario.js +2 -1
  173. package/dist/composition/directAnalysis.js +20 -14
  174. package/dist/composition/electronScenario.js +1 -1
  175. package/dist/composition/optionalObservationProviders.js +12 -7
  176. package/dist/config/environment.js +6 -0
  177. package/dist/config/ghidraStartupTimeout.js +4 -9
  178. package/dist/config/homeDirectory.js +12 -0
  179. package/dist/config/mcpResponseBudget.js +9 -1
  180. package/dist/config/parseConfig.js +7 -3
  181. package/dist/config/parsers.js +19 -22
  182. package/dist/contracts/analysisViewToolContracts.js +56 -0
  183. package/dist/contracts/applicationToolContracts.js +5 -4
  184. package/dist/contracts/artifactComparisonExample.js +7 -7
  185. package/dist/contracts/artifactToolContracts.js +1 -1
  186. package/dist/contracts/browserScenarioToolContracts.js +1 -1
  187. package/dist/contracts/browserToolContracts.js +19 -15
  188. package/dist/contracts/enhancedInputs.js +2 -2
  189. package/dist/contracts/enhancedToolContracts.js +4 -3
  190. package/dist/contracts/errorSchemas.js +3 -1
  191. package/dist/contracts/evm/evmToolContracts.js +1 -1
  192. package/dist/contracts/functionComparisonExample.js +8 -0
  193. package/dist/contracts/functionWorkflowToolContracts.js +1 -1
  194. package/dist/contracts/inputSchemaPresentation.js +181 -0
  195. package/dist/contracts/investigationExamples.js +4 -3
  196. package/dist/contracts/javascript/electronToolContracts.js +3 -2
  197. package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +3 -22
  198. package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +248 -0
  199. package/dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js +1 -1
  200. package/dist/contracts/javascript/javascriptRuntimeReconciliationExample.js +8 -7
  201. package/dist/contracts/managed/managedToolContracts.js +8 -12
  202. package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
  203. package/dist/contracts/mobileApplicationGraphExamples.js +8 -8
  204. package/dist/contracts/native/binaryDiagnosticsToolContracts.js +1 -1
  205. package/dist/contracts/native/nativeToolContracts.js +2 -2
  206. package/dist/contracts/officialToolContracts.js +2 -1
  207. package/dist/contracts/promptContracts.js +2 -2
  208. package/dist/contracts/providerSelection.js +1 -1
  209. package/dist/contracts/sessionLifecycleInputs.js +4 -3
  210. package/dist/contracts/sessionStatusContract.js +3 -2
  211. package/dist/contracts/sessionToolContracts.js +17 -4
  212. package/dist/contracts/sessionToolSchemas.js +4 -16
  213. package/dist/contracts/toolContracts.js +2 -0
  214. package/dist/contracts/toolEffects.js +1 -0
  215. package/dist/contracts/toolOutputSchemaGroups.js +138 -94
  216. package/dist/contracts/toolOutputSchemaPrimitives.js +13 -26
  217. package/dist/contracts/toolSchemaMetadata.js +18 -69
  218. package/dist/contracts/webNetworkCaptureToolContracts.js +1 -1
  219. package/dist/contracts/webRuntimeToolContracts.js +1 -1
  220. package/dist/contracts/webScriptToolContracts.js +1 -1
  221. package/dist/doctorRuntime.js +7 -5
  222. package/dist/domain/analysisErrorBase.js +5 -0
  223. package/dist/domain/analysisErrorCore.js +3 -0
  224. package/dist/domain/analysisErrorPresentation.js +22 -5
  225. package/dist/domain/analysisErrorProjection.js +24 -5
  226. package/dist/domain/analysisSnapshot.js +31 -31
  227. package/dist/domain/analysisView/analysisView.js +241 -0
  228. package/dist/domain/analysisView/analysisViewCoverage.js +19 -0
  229. package/dist/domain/analysisView/binaryLayoutView.js +159 -0
  230. package/dist/domain/analysisView/javascriptApplicationView.js +238 -0
  231. package/dist/domain/android/androidApplication.js +1 -1
  232. package/dist/domain/android/androidPartialObservation.js +36 -0
  233. package/dist/domain/apple/appleApplication.js +1 -1
  234. package/dist/domain/apple/dylibResolution.js +10 -3
  235. package/dist/domain/apple/interfaceBuilderGraph.js +0 -1
  236. package/dist/domain/apple/keyedArchive.js +26 -2
  237. package/dist/domain/artifactComparison.js +15 -6
  238. package/dist/domain/artifactGraph.js +17 -4
  239. package/dist/domain/artifactIdentity.js +8 -8
  240. package/dist/domain/artifactInspection.js +8 -8
  241. package/dist/domain/artifactInventoryEvidence.js +9 -16
  242. package/dist/domain/artifactOperationError.js +3 -3
  243. package/dist/domain/artifactPartialObservation.js +1 -0
  244. package/dist/domain/artifactPathSyntax.js +49 -0
  245. package/dist/domain/binaryTarget.js +39 -13
  246. package/dist/domain/browserCaptureComparison.js +13 -49
  247. package/dist/domain/browserCompleteness.js +3 -2
  248. package/dist/domain/browserNetworkEvidence.js +10 -4
  249. package/dist/domain/browserObservation.js +0 -1
  250. package/dist/domain/browserObservationSchemas.js +14 -3
  251. package/dist/domain/browserScenario.js +0 -1
  252. package/dist/domain/browserScenarioCapture.js +1 -2
  253. package/dist/domain/browserScenarioCaptureValues.js +2 -2
  254. package/dist/domain/browserScenarioDiff.js +0 -2
  255. package/dist/domain/browserScenarioDiffEvidence.js +0 -12
  256. package/dist/domain/browserScenarioDiffValues.js +2 -2
  257. package/dist/domain/browserScenarioNormalization.js +3 -3
  258. package/dist/domain/browserScenarioValues.js +6 -6
  259. package/dist/domain/callPath.js +15 -18
  260. package/dist/domain/callPathSchemas.js +2 -2
  261. package/dist/domain/canonicalDigest.js +7 -1
  262. package/dist/domain/canonicalOrdering.js +1 -13
  263. package/dist/domain/changedBehavior.js +5 -6
  264. package/dist/domain/comparisonSemantics.js +0 -5
  265. package/dist/domain/completionLedgerGeneration.js +2 -1
  266. package/dist/domain/configurationErrors.js +12 -0
  267. package/dist/domain/conformancePackage.js +4 -3
  268. package/dist/domain/digests.js +0 -3
  269. package/dist/domain/evidence.js +19 -40
  270. package/dist/domain/evidenceBundle.js +58 -42
  271. package/dist/domain/evidenceCompletionLedger.js +2 -1
  272. package/dist/domain/firmware/firmwareAnalysis.js +4 -3
  273. package/dist/domain/functionComparison.js +6 -6
  274. package/dist/domain/functionComparisonDimensions.js +120 -87
  275. package/dist/domain/functionComparisonNormalization.js +26 -36
  276. package/dist/domain/functionComparisonResults.js +3 -6
  277. package/dist/domain/functionComparisonSchemas.js +2 -8
  278. package/dist/domain/functionDossierEvidence.js +4 -38
  279. package/dist/domain/hopperValues.js +11 -15
  280. package/dist/domain/javascript/electronActiveObservation.js +29 -71
  281. package/dist/domain/javascript/electronObservation.js +14 -3
  282. package/dist/domain/javascript/electronStaticAnalysisBrowser.js +12 -11
  283. package/dist/domain/javascript/electronStaticAnalysisIpc.js +11 -2
  284. package/dist/domain/javascript/electronStaticAnalysisNative.js +7 -4
  285. package/dist/domain/javascript/electronStaticAnalysisValues.js +8 -4
  286. package/dist/domain/javascript/javascriptApplicationAnalysis.js +3 -1
  287. package/dist/domain/javascript/javascriptApplicationChangeGraph.js +12 -8
  288. package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +6 -0
  289. package/dist/domain/javascript/javascriptApplicationGraph.js +41 -16
  290. package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +9 -2
  291. package/dist/domain/javascript/javascriptApplicationVersionComparison.js +4 -4
  292. package/dist/domain/javascript/javascriptApplicationVersionComparisonSchemas.js +37 -22
  293. package/dist/domain/javascript/javascriptApplicationVersionItems.js +50 -36
  294. package/dist/domain/javascript/javascriptApplicationVersionKeys.js +9 -8
  295. package/dist/domain/javascript/javascriptAstFingerprint.js +2 -2
  296. package/dist/domain/javascript/javascriptAstValues.js +22 -0
  297. package/dist/{application/javascript/JavaScriptReturnShapeProjection.js → domain/javascript/javascriptExportReturnShapeProjection.js} +4 -4
  298. package/dist/domain/javascript/javascriptExportShapeComparison.js +10 -3
  299. package/dist/domain/javascript/javascriptExportShapeComparisonIdentity.js +6 -1
  300. package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +58 -22
  301. package/dist/domain/javascript/javascriptExportShapeSelection.js +7 -7
  302. package/dist/domain/javascript/javascriptExportShapeVariants.js +70 -16
  303. package/dist/domain/javascript/javascriptFeatureSeed.js +25 -3
  304. package/dist/domain/javascript/javascriptFeatureTrace.js +7 -6
  305. package/dist/domain/javascript/javascriptFeatureTraceSchemas.js +17 -9
  306. package/dist/domain/javascript/javascriptFeatureTraversal.js +4 -5
  307. package/dist/domain/javascript/javascriptNativeHandoff.js +7 -7
  308. package/dist/domain/javascript/javascriptRuntimeLoadState.js +0 -1
  309. package/dist/domain/javascript/javascriptRuntimeObservation.js +18 -7
  310. package/dist/domain/javascript/javascriptRuntimeReconciliation.js +12 -6
  311. package/dist/domain/javascript/javascriptRuntimeReconciliationActive.js +9 -8
  312. package/dist/domain/javascript/javascriptRuntimeReconciliationCaptureParsing.js +212 -0
  313. package/dist/domain/javascript/javascriptRuntimeReconciliationGraph.js +5 -4
  314. package/dist/domain/javascript/javascriptRuntimeReconciliationInputValidation.js +28 -0
  315. package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +6 -6
  316. package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +12 -222
  317. package/dist/domain/javascript/javascriptRuntimeReconciliationResult.js +2 -2
  318. package/dist/domain/javascript/javascriptRuntimeReconciliationRuntime.js +15 -4
  319. package/dist/domain/javascript/javascriptRuntimeReconciliationSchemas.js +2 -2
  320. package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +7 -7
  321. package/dist/domain/javascript/javascriptSemanticAnalysis.js +209 -11
  322. package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +2 -1
  323. package/dist/domain/javascript/javascriptSemanticCallResolution.js +9 -7
  324. package/dist/domain/javascript/javascriptSemanticCalls.js +2 -1
  325. package/dist/domain/javascript/javascriptSemanticChildProcesses.js +4 -3
  326. package/dist/domain/javascript/javascriptSemanticCoverage.js +20 -0
  327. package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +7 -9
  328. package/dist/domain/javascript/javascriptSemanticDataEffects.js +4 -11
  329. package/dist/domain/javascript/javascriptSemanticFingerprints.js +2 -2
  330. package/dist/domain/javascript/javascriptSemanticGraph.js +220 -71
  331. package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +19 -1
  332. package/dist/domain/javascript/javascriptSemanticIr.js +0 -4
  333. package/dist/domain/javascript/javascriptSemanticIterationSources.js +106 -0
  334. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +515 -74
  335. package/dist/domain/javascript/javascriptSemanticMutationInitializers.js +190 -0
  336. package/dist/domain/javascript/javascriptSemanticMutationValues.js +44 -36
  337. package/dist/domain/javascript/javascriptSemanticObjects.js +79 -42
  338. package/dist/domain/javascript/javascriptSemanticPrimitives.js +8 -14
  339. package/dist/domain/javascript/javascriptSemanticProjection.js +21 -16
  340. package/dist/domain/javascript/javascriptSemanticPromises.js +16 -21
  341. package/dist/domain/javascript/javascriptSemanticPropertyPaths.js +23 -0
  342. package/dist/domain/javascript/javascriptSemanticProvenance.js +3 -3
  343. package/dist/domain/javascript/javascriptSemanticQuery.js +8 -2
  344. package/dist/domain/javascript/javascriptSemanticQueryIdentity.js +3 -2
  345. package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -9
  346. package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +16 -10
  347. package/dist/domain/javascript/javascriptSemanticResourceLimits.js +1 -1
  348. package/dist/domain/javascript/javascriptSemanticResources.js +1 -1
  349. package/dist/domain/javascript/javascriptSemanticReturns.js +55 -44
  350. package/dist/domain/javascript/javascriptSemanticSlots.js +72 -0
  351. package/dist/domain/javascript/javascriptSemanticTraversal.js +6 -1
  352. package/dist/domain/javascript/javascriptSemanticValues.js +180 -76
  353. package/dist/domain/javascript/javascriptSourceMapPaths.js +114 -0
  354. package/dist/domain/javascript/javascriptSourceParser.js +34 -9
  355. package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +5 -6
  356. package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +2 -1
  357. package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +26 -16
  358. package/dist/domain/javascript/sourceToBundleComparison.js +19 -8
  359. package/dist/domain/javascript/sourceToBundleSignals.js +53 -25
  360. package/dist/domain/jsonSerialization.js +109 -55
  361. package/dist/domain/jsonShape.js +46 -19
  362. package/dist/domain/localPath.js +10 -4
  363. package/dist/domain/managed/managedApplicationGraph.js +10 -6
  364. package/dist/domain/managed/managedApplicationGraphNodes.js +82 -57
  365. package/dist/domain/managed/managedArtifact.js +6 -4
  366. package/dist/domain/managed/managedMemberComparison.js +2 -9
  367. package/dist/domain/managed/managedMemberComparisonMatch.js +6 -7
  368. package/dist/domain/managed/managedNativeVerification.js +0 -2
  369. package/dist/domain/managed/managedNativeVerificationMatch.js +9 -3
  370. package/dist/domain/native/binaryLayout.js +2 -3
  371. package/dist/domain/native/nativeApiBoundary.js +1 -1
  372. package/dist/domain/native/nativeCallObservation.js +3 -3
  373. package/dist/domain/native/nativeInstruction.js +7 -0
  374. package/dist/domain/native/nativeValueFlow.js +5 -11
  375. package/dist/domain/native/objcSwiftMetadata.js +15 -17
  376. package/dist/domain/native/recordedCrash.js +2 -3
  377. package/dist/domain/offsetDateTime.js +17 -0
  378. package/dist/domain/process/processCapture.js +22 -20
  379. package/dist/domain/process/processCaptureCoverage.js +70 -0
  380. package/dist/domain/process/processCaptureExample.js +45 -1
  381. package/dist/domain/process/processCaptureParsing.js +1 -34
  382. package/dist/domain/process/processCaptureValidation.js +82 -13
  383. package/dist/domain/process/processComparison.js +39 -43
  384. package/dist/domain/process/processObservation.js +10 -2
  385. package/dist/domain/process/processScenario.js +24 -2
  386. package/dist/domain/process/processTraceComparison.js +0 -2
  387. package/dist/domain/process/processTraceDimensionProjection.js +1 -1
  388. package/dist/domain/process/processTraceEvaluation.js +19 -15
  389. package/dist/domain/process/processTraceSpecification.js +4 -7
  390. package/dist/domain/providerAdapterError.js +2 -0
  391. package/dist/domain/providerCleanupError.js +6 -2
  392. package/dist/domain/reconstructionCoverage.js +7 -3
  393. package/dist/domain/reconstructionObligationLedgerSchemas.js +2 -1
  394. package/dist/domain/reconstructionReadinessSchemas.js +2 -1
  395. package/dist/domain/reconstructionUnknowns.js +4 -3
  396. package/dist/domain/reconstructionVerification.js +6 -5
  397. package/dist/domain/reconstructionVerificationSchemas.js +2 -1
  398. package/dist/domain/referenceSourceGraph.js +27 -28
  399. package/dist/domain/referenceSourceImportParsing.js +34 -45
  400. package/dist/domain/residualUnknown.js +3 -2
  401. package/dist/domain/staticRuntimeCorrelation.js +4 -3
  402. package/dist/domain/stringPatterns.js +6 -0
  403. package/dist/domain/swiftSymbolClassification.js +66 -0
  404. package/dist/domain/symbolAnalysis.js +83 -20
  405. package/dist/domain/unicodeCodePointOrder.js +6 -0
  406. package/dist/domain/webBundleAnalyzerInspection.js +9 -1
  407. package/dist/domain/webCaptureDiff.js +71 -30
  408. package/dist/domain/webCaptureDiffSchemas.js +8 -11
  409. package/dist/domain/webEventListeners.js +3 -2
  410. package/dist/domain/webExecution.js +3 -2
  411. package/dist/domain/webInventory.js +3 -2
  412. package/dist/domain/webMcpDiscovery.js +4 -3
  413. package/dist/domain/webRuntime.js +0 -2
  414. package/dist/domain/webScriptExport.js +2 -2
  415. package/dist/dotnet/ManagedArtifactInspector.js +2 -19
  416. package/dist/dotnet/ManagedMemberInspector.js +12 -18
  417. package/dist/dotnet/ManagedMemberInspectorCore.js +47 -44
  418. package/dist/dotnet/ManagedMemberInstructionDecoder.js +1 -2
  419. package/dist/dotnet/ManagedMemberRows.js +75 -62
  420. package/dist/dotnet/ManagedMetadataInventory.js +16 -22
  421. package/dist/dotnet/ManagedMethodBodyReader.js +4 -0
  422. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +109 -94
  423. package/dist/dotnet/ManagedNativeBoundaryInspector.js +12 -21
  424. package/dist/dotnet/ManagedReaderFailure.js +16 -0
  425. package/dist/dotnet/ManagedStaticProvider.js +13 -12
  426. package/dist/dotnet/ManagedStaticProviderMetadata.js +1 -4
  427. package/dist/evaluation/AgentEvaluationFixtures.js +250 -0
  428. package/dist/evaluation/AgentEvaluationReport.js +28 -0
  429. package/dist/evaluation/CodexAgentEval.js +12 -8
  430. package/dist/evaluation/KnownAnswerEvaluation.js +281 -0
  431. package/dist/evm/EvmoleInterfaceProvider.js +2 -1
  432. package/dist/filesystem/RegularFile.js +41 -0
  433. package/dist/firmware/FirmwareCommand.js +9 -5
  434. package/dist/firmware/FirmwareProvider.js +4 -4
  435. package/dist/generatedPackageMetadata.js +2 -2
  436. package/dist/ghidra/GhidraAnalysisProfile.js +3 -6
  437. package/dist/ghidra/GhidraClient.js +105 -36
  438. package/dist/ghidra/GhidraClientStartup.js +0 -2
  439. package/dist/ghidra/GhidraDoctor.js +6 -5
  440. package/dist/ghidra/GhidraFunctionValues.js +3 -5
  441. package/dist/ghidra/GhidraInstallation.js +151 -22
  442. package/dist/ghidra/GhidraJavaLaunch.js +6 -2
  443. package/dist/ghidra/GhidraLauncher.js +58 -26
  444. package/dist/ghidra/GhidraProvider.js +6 -2
  445. package/dist/ghidra/GhidraProviderCapabilities.js +6 -0
  446. package/dist/ghidra/GhidraProviderClient.js +13 -3
  447. package/dist/ghidra/GhidraSessionError.js +2 -0
  448. package/dist/ghidra/GhidraSessionRoot.js +39 -0
  449. package/dist/ghidra/extensions/GhidraExtensions.js +17 -10
  450. package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +8 -2
  451. package/dist/hopper/BridgeLauncher.js +34 -45
  452. package/dist/hopper/HopperAnalysisProfile.js +3 -8
  453. package/dist/hopper/HopperCleanup.js +56 -27
  454. package/dist/hopper/HopperClient.js +86 -65
  455. package/dist/hopper/HopperMachOImage.js +3 -2
  456. package/dist/hopper/HopperProvider.js +16 -18
  457. package/dist/hopper/HopperRegexSearch.js +3 -6
  458. package/dist/hopper/HopperTargetLease.js +132 -49
  459. package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -0
  460. package/dist/ida/IdaConfiguration.js +8 -3
  461. package/dist/ida/IdaInput.js +1 -7
  462. package/dist/ida/IdaMcpConnection.js +8 -4
  463. package/dist/ida/IdaOperationRunner.js +5 -3
  464. package/dist/ida/IdaProvider.js +8 -12
  465. package/dist/ida/IdaSessionClient.js +24 -20
  466. package/dist/ida/IdaWorkspace.js +12 -13
  467. package/dist/inspector/JavaScriptRuntimeScope.js +9 -5
  468. package/dist/inspector/V8InspectorCaptureProjection.js +47 -14
  469. package/dist/inspector/V8InspectorProvider.js +97 -35
  470. package/dist/javascript/recovery/WakaruCommand.js +7 -2
  471. package/dist/javascript/recovery/WakaruExecution.js +5 -2
  472. package/dist/main/shutdown.js +81 -29
  473. package/dist/main/startup.js +9 -2
  474. package/dist/main/transport.js +23 -3
  475. package/dist/main.js +11 -18
  476. package/dist/native/AppleMachoSelection.js +16 -6
  477. package/dist/native/AppleObjcDispatchFacets.js +3 -3
  478. package/dist/native/AppleObjcProperties.js +17 -7
  479. package/dist/native/CommandRunner.js +9 -7
  480. package/dist/native/LldbCallTracer.js +249 -77
  481. package/dist/native/NativeMacOSProvider.js +32 -17
  482. package/dist/native/NativeMacOSProviderMetadata.js +1 -2
  483. package/dist/native/NativeUiHelperRuntime.js +11 -2
  484. package/dist/native/NativeUiObservation.js +2 -2
  485. package/dist/native/pwntools/PwntoolsDecoder.js +2 -1
  486. package/dist/process/DarwinProcessRunTokenReader.js +16 -2
  487. package/dist/process/ExecFileOutput.js +88 -6
  488. package/dist/process/PrivateRuntimeRoot.js +10 -5
  489. package/dist/process/ProcessOwnership.js +1 -4
  490. package/dist/process/ProcessOwnershipObservation.js +18 -16
  491. package/dist/process/ProviderProcess.js +1 -3
  492. package/dist/process/capture/FilesystemSnapshot.js +131 -24
  493. package/dist/process/capture/ProcessCaptureError.js +13 -0
  494. package/dist/process/capture/ProcessCaptureLifecycle.js +148 -74
  495. package/dist/process/capture/ProcessFilesystemEffects.js +51 -6
  496. package/dist/process/capture/ProcessHarness.js +16 -33
  497. package/dist/process/capture/ProcessNormalization.js +20 -2
  498. package/dist/process/capture/ProcessSampling.js +25 -2
  499. package/dist/process/capture/TerminalRenderer.js +14 -0
  500. package/dist/process/snapshotEnvironment.js +14 -0
  501. package/dist/server/EvidenceMcpServer.js +25 -14
  502. package/dist/server/analysisAdmission.js +8 -0
  503. package/dist/server/createServer.js +71 -59
  504. package/dist/server/mcpClientMetadata.js +12 -5
  505. package/dist/server/promptCompletion.js +3 -8
  506. package/dist/server/registerAnalysisViewTool.js +15 -0
  507. package/dist/server/registerAndroidTools.js +2 -3
  508. package/dist/server/registerApplicationTools/compareExportShapes.js +6 -6
  509. package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
  510. package/dist/server/registerApplicationTools/compareVersions.js +4 -5
  511. package/dist/server/registerApplicationTools/coverage.js +1 -2
  512. package/dist/server/registerApplicationTools/helpers.js +4 -4
  513. package/dist/server/registerApplicationTools/obligationLedger.js +4 -5
  514. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -4
  515. package/dist/server/registerApplicationTools/traceFeature.js +4 -5
  516. package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
  517. package/dist/server/registerArtifactComparisonTool.js +4 -5
  518. package/dist/server/registerArtifactTools.js +2 -2
  519. package/dist/server/registerBinaryDiagnosticsTools.js +2 -3
  520. package/dist/server/registerBrowserScenarioTool.js +3 -4
  521. package/dist/server/registerBrowserTools.js +13 -16
  522. package/dist/server/registerBundleComparisonTool.js +5 -6
  523. package/dist/server/registerCloseLifecycleTool.js +8 -7
  524. package/dist/server/registerElectronTools.js +10 -13
  525. package/dist/server/registerEnhancedTools.js +82 -77
  526. package/dist/server/registerEvidenceTools.js +54 -47
  527. package/dist/server/registerEvmTools.js +2 -3
  528. package/dist/server/registerFirmwareTools.js +2 -3
  529. package/dist/server/registerFunctionComparisonTool.js +7 -8
  530. package/dist/server/registerInvestigationTools.js +14 -15
  531. package/dist/server/registerJavaScriptRecoveryTool.js +2 -3
  532. package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -6
  533. package/dist/server/registerManagedTools.js +7 -4
  534. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +5 -6
  535. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -5
  536. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +6 -7
  537. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +6 -7
  538. package/dist/server/registerOfficialTools.js +32 -41
  539. package/dist/server/registerProcessComparisonTool.js +8 -8
  540. package/dist/server/registerRecordedCrashTools.js +2 -3
  541. package/dist/server/registerSessionRecordTools.js +15 -19
  542. package/dist/server/registerSessionStatusTool.js +3 -4
  543. package/dist/server/registerSessionTools.js +19 -19
  544. package/dist/server/registerWebModuleTool.js +2 -3
  545. package/dist/server/registerWebNetworkCaptureTool.js +2 -3
  546. package/dist/server/registerWebRuntimeTools.js +4 -5
  547. package/dist/server/registerWebScriptTool.js +2 -3
  548. package/dist/server/registerWebSourceLocationTool.js +2 -3
  549. package/dist/server/toolResult.js +66 -94
  550. package/dist/server/toolResultEncoding.js +11 -10
  551. package/dist/windows/WindowsNativeLoader.js +1 -0
  552. package/dist/windows/WindowsOwnedProcess.js +60 -15
  553. package/dist/windows/WindowsPrivateRuntime.js +7 -8
  554. package/native/windows/README.md +3 -1
  555. package/native/windows/build/manifest.json +2 -2
  556. package/native/windows/build/rea-windows-x64.node +0 -0
  557. package/package.json +42 -30
  558. package/scripts/rea.mjs +3 -6
  559. package/skills/reverse-engineer-anything/SKILL.md +14 -13
  560. package/skills/reverse-engineer-anything/references/android-applications.md +6 -3
  561. package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -4
  562. package/skills/reverse-engineer-anything/references/javascript-applications.md +16 -6
  563. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +18 -0
  564. package/dist/artifacts/inventory/policy.js +0 -2
  565. package/dist/config.js +0 -1
  566. package/dist/contracts/browserCaptureToolInputSchema.js +0 -43
  567. package/dist/contracts/process/processCaptureExample.js +0 -2
  568. package/dist/contracts/toolOutputSchemas.js +0 -2
  569. package/dist/domain/managed/managedApplicationGraphNodeCoverage.js +0 -6
  570. package/dist/main/reload.js +0 -12
  571. package/dist/main/state.js +0 -3
  572. package/dist/server/registerNativeTools.js +0 -6
  573. package/dist/server/sessionToolPolicies.js +0 -2
@@ -2,7 +2,6 @@ import { toolContract } from "../contracts/toolContracts.js";
2
2
  import { mcpProgressReporter } from "./mcpProgress.js";
3
3
  import { logToolExecution } from "./toolLogging.js";
4
4
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
5
- import { toCallToolResult, toEvidenceToolResult } from "./toolResult.js";
6
5
  /** Bind distinct runtime operations to named contracts and the session's Evidence owner. */
7
6
  export const registerWebRuntimeTools = (server, service, logger, recordEvidence) => {
8
7
  const execution = toolContract("observe_web_execution");
@@ -13,15 +12,15 @@ export const registerWebRuntimeTools = (server, service, logger, recordEvidence)
13
12
  progress: mcpProgressReporter(context),
14
13
  }));
15
14
  if (!result.ok)
16
- return toCallToolResult(result, execution);
15
+ return server.delivery.toCallToolResult(result, execution);
17
16
  const recorded = recordEvidence?.(result.value);
18
- return toEvidenceToolResult(result.value, execution, recorded);
17
+ return server.delivery.toEvidenceToolResult(result.value, execution, recorded);
19
18
  });
20
19
  server.registerTool(listeners.name, toolRegistrationOptions(listeners), async (input, context) => {
21
20
  const result = await logToolExecution(logger, listeners.name, () => service.inspect(input, { signal: context.mcpReq.signal }));
22
21
  if (!result.ok)
23
- return toCallToolResult(result, listeners);
22
+ return server.delivery.toCallToolResult(result, listeners);
24
23
  const recorded = recordEvidence?.(result.value);
25
- return toEvidenceToolResult(result.value, listeners, recorded);
24
+ return server.delivery.toEvidenceToolResult(result.value, listeners, recorded);
26
25
  });
27
26
  };
@@ -2,15 +2,14 @@ import { exportWebScriptsValidated } from "../application/WebScriptExportService
2
2
  import { toolContract } from "../contracts/toolContracts.js";
3
3
  import { logToolExecution } from "./toolLogging.js";
4
4
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
5
- import { toCallToolResult, toEvidenceToolResult } from "./toolResult.js";
6
5
  /** Register local script export without requiring a live browser provider. */
7
6
  export const registerWebScriptTool = (server, options) => {
8
7
  const contract = toolContract("export_web_scripts");
9
8
  server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => {
10
9
  const result = await logToolExecution(options.logger, contract.name, () => exportWebScriptsValidated(input, { signal: context.mcpReq.signal }));
11
10
  if (!result.ok)
12
- return toCallToolResult(result, contract);
11
+ return server.delivery.toCallToolResult(result, contract);
13
12
  const recorded = options.recordEvidence?.(result.value);
14
- return toEvidenceToolResult(result.value, contract, recorded);
13
+ return server.delivery.toEvidenceToolResult(result.value, contract, recorded);
15
14
  });
16
15
  };
@@ -1,15 +1,14 @@
1
1
  import { toolContract } from "../contracts/toolContracts.js";
2
2
  import { logToolExecution } from "./toolLogging.js";
3
3
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
4
- import { toCallToolResult, toEvidenceToolResult } from "./toolResult.js";
5
4
  /** Bind source point tracing to its exact named contract and session Evidence owner. */
6
5
  export const registerWebSourceLocationTool = (server, service, logger, recordEvidence) => {
7
6
  const contract = toolContract("trace_web_source_location");
8
7
  server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => {
9
8
  const result = await logToolExecution(logger, contract.name, () => service.trace(input, { signal: context.mcpReq.signal }));
10
9
  if (!result.ok)
11
- return toCallToolResult(result, contract);
10
+ return server.delivery.toCallToolResult(result, contract);
12
11
  const recorded = recordEvidence?.(result.value);
13
- return toEvidenceToolResult(result.value, contract, recorded);
12
+ return server.delivery.toEvidenceToolResult(result.value, contract, recorded);
14
13
  });
15
14
  };
@@ -2,104 +2,76 @@ import { STDIO_DEFAULT_MAX_BUFFER_SIZE } from "@modelcontextprotocol/server";
2
2
  import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
3
3
  import {} from "../domain/analysisErrorBase.js";
4
4
  import { AnalysisResourceConstraintError } from "../domain/analysisErrorCore.js";
5
- import { parseMcpResponseBudget } from "../config/mcpResponseBudget.js";
6
- import { encodeToolResult, MCP_RESULT_BUDGET_BYTES, MCP_RESULT_STRING_LIMIT, } from "./toolResultEncoding.js";
7
- /**
8
- * Serialize an application result as MCP text and structured content.
9
- * Shared error projection preserves actionable local diagnostics while omitting
10
- * raw cause objects; explicitly retained bounded command output stays visible.
11
- */
12
- export const toCallToolResult = (result, contract, context) => result.ok
13
- ? successResult(result.value, contract, context)
14
- : toErrorToolResult(result.error);
15
- /** Deliver Evidence using the producer's explicit recording acknowledgment. */
16
- export const toEvidenceToolResult = (evidence, contract, recorded) => recorded !== undefined && !recorded.ok
17
- ? toErrorToolResult(recorded.error)
18
- : toCallToolResult({ ok: true, value: evidence }, contract, recorded === undefined
19
- ? undefined
20
- : { retainedEvidenceId: evidence.evidence_id });
21
- /** Project an error without allocating oversized repeated MCP text. */
22
- export const toErrorToolResult = (error) => {
23
- const projected = projectAnalysisError(error);
24
- const structuredContent = { error: projected };
25
- const configured = parseMcpResponseBudget(process.env.REA_MCP_MAX_RESPONSE_BYTES);
26
- const budget = configured.ok && configured.value !== undefined
27
- ? configured.value - 1024
28
- : MCP_RESULT_BUDGET_BYTES;
29
- const encoded = encodeToolResult(structuredContent, budget);
30
- // The session-bound transport retains an oversized projected error before
31
- // replacing it with a recoverable delivery constraint. Avoid allocating its
32
- // repeated text representation before that boundary has acknowledged it.
33
- return {
34
- content: encoded.ok ? [{ type: "text", text: encoded.text }] : [],
35
- structuredContent,
36
- isError: true,
37
- };
38
- };
39
- const successResult = (value, contract, context) => {
40
- const candidate = projectEvidence(value) ??
41
- (contract.kind === "session" ? { result: value } : value);
42
- const configured = parseMcpResponseBudget(process.env.REA_MCP_MAX_RESPONSE_BYTES);
43
- if (!configured.ok)
44
- return toErrorToolResult(configured.error);
45
- const budget = configured.value === undefined
46
- ? MCP_RESULT_BUDGET_BYTES
47
- : configured.value - 1024;
48
- const encoded = encodeToolResult(candidate, budget);
49
- if (!encoded.ok)
50
- return toErrorToolResult(new AnalysisResourceConstraintError(contract.name, "transport", encoded.constraint === "string-length"
51
- ? "The operation completed, but its complete MCP response exceeds Node's single-string representation limit. Export retained evidence to consume the complete analysis, or use complete CLI JSON output."
52
- : "The operation completed, but its complete MCP response exceeds the stdio response budget. The analysis result was not truncated; export retained evidence to consume it, or use complete CLI JSON output.", {
5
+ import { encodeToolResult, MCP_RESULT_STRING_LIMIT, } from "./toolResultEncoding.js";
6
+ /** Create one delivery policy from the already selected, parsed response budget. */
7
+ export const createToolResultDelivery = (maximumResponseBytes) => new ToolResultDelivery(maximumResponseBytes ?? STDIO_DEFAULT_MAX_BUFFER_SIZE);
8
+ /** Immutable encoding and recovery policy shared by one MCP server. */
9
+ export class ToolResultDelivery {
10
+ resultBudgetBytes;
11
+ constructor(maximumResponseBytes) {
12
+ this.resultBudgetBytes = maximumResponseBytes - 1024;
13
+ Object.freeze(this);
14
+ }
15
+ /** Serialize a plain application result or its actionable error. */
16
+ toCallToolResult(result, contract) {
17
+ return result.ok
18
+ ? this.successResult(contract.kind === "session" ? { result: result.value } : result.value, contract)
19
+ : this.toErrorToolResult(result.error);
20
+ }
21
+ /** Deliver Evidence using the producer's explicit recording acknowledgment. */
22
+ toEvidenceToolResult(evidence, contract, recorded) {
23
+ return recorded !== undefined && !recorded.ok
24
+ ? this.toErrorToolResult(recorded.error)
25
+ : this.successResult(evidence, contract, {
26
+ evidence_id: evidence.evidence_id,
27
+ ...(recorded === undefined
28
+ ? {}
29
+ : {
30
+ evidence_reference: {
31
+ kind: "retained-evidence",
32
+ evidence_id: evidence.evidence_id,
33
+ },
34
+ }),
35
+ });
36
+ }
37
+ /** Project an error without allocating oversized repeated MCP text. */
38
+ toErrorToolResult(error) {
39
+ const structuredContent = { error: projectAnalysisError(error) };
40
+ // Errors reach the wire as text only; the structured copy is a private
41
+ // carrier the transport removes after its own budget check.
42
+ const encoded = encodeToolResult(structuredContent, this.resultBudgetBytes, "text");
43
+ // The transport retains an oversized projected error before replacing it
44
+ // with a recoverable delivery constraint, using this same budget.
45
+ return {
46
+ content: encoded.ok ? [{ type: "text", text: encoded.text }] : [],
47
+ structuredContent,
48
+ isError: true,
49
+ };
50
+ }
51
+ successResult(value, contract, recovery = {}) {
52
+ const encoded = encodeToolResult(value, this.resultBudgetBytes);
53
+ if (encoded.ok)
54
+ return {
55
+ content: [{ type: "text", text: encoded.text }],
56
+ structuredContent: value,
57
+ };
58
+ const retainedEvidence = recovery.evidence_reference !== undefined;
59
+ const recoveryAdvice = retainedEvidence
60
+ ? "Export retained evidence to consume the complete analysis, or use complete CLI JSON output."
61
+ : encoded.constraint === "string-length"
62
+ ? "Use complete CLI JSON output to consume the analysis."
63
+ : "Use a larger MCP response budget with a matching client receive buffer, or use complete CLI JSON output to consume the analysis.";
64
+ return this.toErrorToolResult(new AnalysisResourceConstraintError(contract.name, "transport", encoded.constraint === "string-length"
65
+ ? `The operation completed, but its complete MCP response exceeds Node's single-string representation limit. ${recoveryAdvice}`
66
+ : `The operation completed, but its complete MCP response exceeds the stdio response budget. The analysis result was not truncated. ${recoveryAdvice}`, {
53
67
  boundary: "mcp-response",
54
68
  default_receive_buffer_bytes: STDIO_DEFAULT_MAX_BUFFER_SIZE,
55
- result_budget_bytes: budget,
69
+ result_budget_bytes: this.resultBudgetBytes,
56
70
  max_string_code_units: MCP_RESULT_STRING_LIMIT,
57
71
  response_bytes_at_least: encoded.bytesAtLeast,
58
72
  response_code_units_at_least: encoded.codeUnitsAtLeast,
59
73
  constraint: encoded.constraint,
60
- ...evidenceRecovery(value, context?.retainedEvidenceId),
74
+ ...recovery,
61
75
  }));
62
- return {
63
- content: [
64
- {
65
- type: "text",
66
- text: encoded.text,
67
- },
68
- ],
69
- structuredContent: candidate,
70
- };
71
- };
72
- const evidenceRecovery = (value, retainedEvidenceId) => {
73
- const projected = projectEvidence(value);
74
- if (projected === undefined ||
75
- typeof projected !== "object" ||
76
- projected === null ||
77
- Array.isArray(projected))
78
- return {};
79
- if (projected.evidence_id !== retainedEvidenceId)
80
- return { evidence_id: projected.evidence_id ?? null };
81
- return {
82
- evidence_reference: {
83
- kind: "retained-evidence",
84
- evidence_id: projected.evidence_id ?? null,
85
- },
86
- };
87
- };
88
- const projectEvidence = (value) => {
89
- if (typeof value !== "object" ||
90
- value === null ||
91
- Array.isArray(value) ||
92
- typeof value.evidence_id !== "string" ||
93
- !/^ev_[a-f0-9]{64}$/u.test(value.evidence_id) ||
94
- !("normalized_result" in value))
95
- return undefined;
96
- const normalizedResult = value.normalized_result;
97
- const evidenceId = value.evidence_id;
98
- if (normalizedResult === undefined || typeof evidenceId !== "string")
99
- return undefined;
100
- return {
101
- result: normalizedResult,
102
- evidence_id: evidenceId,
103
- evidence: value,
104
- };
105
- };
76
+ }
77
+ }
@@ -1,23 +1,24 @@
1
- import { STDIO_DEFAULT_MAX_BUFFER_SIZE } from "@modelcontextprotocol/server";
2
1
  import { constants as bufferConstants } from "node:buffer";
3
2
  import { bufferedJsonParts, jsonParts } from "../domain/jsonSerialization.js";
4
- // Leave room for the SDK's JSON-RPC envelope and protocol metadata. This budget
5
- // follows the pinned client's actual default framing limit, not a result-row cap.
6
- export const MCP_RESULT_BUDGET_BYTES = STDIO_DEFAULT_MAX_BUFFER_SIZE - 1024;
7
3
  export const MCP_RESULT_STRING_LIMIT = bufferConstants.MAX_STRING_LENGTH - 1024;
8
4
  const RESULT_ENVELOPE_BYTES = Buffer.byteLength(JSON.stringify({
9
5
  content: [{ type: "text", text: "" }],
10
6
  structuredContent: null,
11
7
  })) - 4;
12
- /** Account for structured JSON and escaped text before allocating the complete text. */
13
- export const encodeToolResult = (value, budgetBytes = MCP_RESULT_BUDGET_BYTES) => {
8
+ const TEXT_RESULT_ENVELOPE_BYTES = Buffer.byteLength(JSON.stringify({ content: [{ type: "text", text: "" }] }));
9
+ /** Account for the delivered JSON representations before allocating the complete text. */
10
+ export const encodeToolResult = (value, budgetBytes, representations = "structured-and-text") => {
11
+ const structured = representations === "structured-and-text";
14
12
  const parts = [];
15
- let bytes = RESULT_ENVELOPE_BYTES;
16
- let codeUnits = RESULT_ENVELOPE_BYTES;
13
+ let bytes = structured ? RESULT_ENVELOPE_BYTES : TEXT_RESULT_ENVELOPE_BYTES;
14
+ let codeUnits = bytes;
17
15
  for (const part of bufferedJsonParts(jsonParts(value))) {
18
16
  const escapedPart = JSON.stringify(part);
19
- bytes += Buffer.byteLength(part) + Buffer.byteLength(escapedPart) - 2;
20
- codeUnits += part.length + escapedPart.length - 2;
17
+ bytes +=
18
+ (structured ? Buffer.byteLength(part) : 0) +
19
+ Buffer.byteLength(escapedPart) -
20
+ 2;
21
+ codeUnits += (structured ? part.length : 0) + escapedPart.length - 2;
21
22
  if (bytes > budgetBytes || codeUnits > MCP_RESULT_STRING_LIMIT)
22
23
  return {
23
24
  ok: false,
@@ -34,6 +34,7 @@ const inspectionSchema = z.strictObject({
34
34
  privateDacl: z.literal(true),
35
35
  atomicJobAssignment: z.literal(true),
36
36
  killOnOwnerClose: z.literal(true),
37
+ protocolStdin: z.boolean().optional(),
37
38
  });
38
39
  const bindingSchema = z.strictObject({
39
40
  call: z.custom((value) => typeof value === "function"),
@@ -1,5 +1,5 @@
1
1
  import { EventEmitter } from "node:events";
2
- import { PassThrough } from "node:stream";
2
+ import { PassThrough, Writable } from "node:stream";
3
3
  import { z } from "zod";
4
4
  import { requireWindowsNativeAuthority, windowsHandleSchema, } from "./WindowsNativeLoader.js";
5
5
  const launchSchema = z.strictObject({
@@ -26,6 +26,7 @@ export const quoteWindowsProcessArgument = (value) => {
26
26
  export class WindowsOwnedProcess extends EventEmitter {
27
27
  stdout = new PassThrough();
28
28
  stderr = new PassThrough();
29
+ stdin;
29
30
  signalCode = null;
30
31
  exitCode = null;
31
32
  pid;
@@ -34,13 +35,14 @@ export class WindowsOwnedProcess extends EventEmitter {
34
35
  #settled;
35
36
  #settle;
36
37
  #closed = false;
37
- #verifiedSettlement = false;
38
38
  #failure;
39
39
  #timer;
40
40
  #cleanup;
41
- constructor(command, arguments_, cwd, environment, verbatim) {
41
+ constructor(command, arguments_, cwd, environment, verbatim, protocolStdin = false) {
42
42
  super();
43
43
  this.#authority = requireWindowsNativeAuthority();
44
+ if (protocolStdin && this.#authority.inspection.protocolStdin !== true)
45
+ throw new Error("The bundled Windows native artifact does not support owned protocol stdin; use a matching current Windows x64 REA package.");
44
46
  const entries = Object.entries(environment)
45
47
  .filter((entry) => entry[1] !== undefined)
46
48
  .map(([key, value]) => `${key}=${value}`);
@@ -55,14 +57,55 @@ export class WindowsOwnedProcess extends EventEmitter {
55
57
  line,
56
58
  cwd ?? "",
57
59
  entries,
60
+ ...(protocolStdin ? [true] : []),
58
61
  ]));
59
62
  this.pid = launched.pid;
60
63
  this.#handle = launched.handle;
64
+ this.stdin = protocolStdin
65
+ ? new Writable({
66
+ write: (chunk, _encoding, callback) => {
67
+ void this.#writeInput(chunk).then(() => callback(), (cause) => callback(cause instanceof Error ? cause : new Error(String(cause))));
68
+ },
69
+ final: (callback) => {
70
+ try {
71
+ this.#authority.call("process_stdin_close", [this.#handle]);
72
+ callback();
73
+ }
74
+ catch (cause) {
75
+ callback(cause instanceof Error ? cause : new Error(String(cause)));
76
+ }
77
+ },
78
+ destroy: (cause, callback) => {
79
+ try {
80
+ if (!this.#closed)
81
+ this.#authority.call("process_stdin_close", [this.#handle]);
82
+ callback(cause);
83
+ }
84
+ catch (failure) {
85
+ callback(failure instanceof Error ? failure : new Error(String(failure)));
86
+ }
87
+ },
88
+ })
89
+ : null;
61
90
  this.#settled = new Promise((resolve) => {
62
91
  this.#settle = resolve;
63
92
  });
64
93
  this.#schedule();
65
94
  }
95
+ async #writeInput(chunk) {
96
+ const bytes = z.instanceof(Buffer).parse(chunk);
97
+ const written = z
98
+ .number()
99
+ .int()
100
+ .nonnegative()
101
+ .max(Number.MAX_SAFE_INTEGER)
102
+ .parse(await this.#authority.call("process_stdin_write", [
103
+ this.#handle,
104
+ bytes,
105
+ ]));
106
+ if (written !== bytes.length)
107
+ throw new Error("Owned Windows input write did not preserve all requested bytes");
108
+ }
66
109
  /** Terminate the retained job, never a PID supplied by another caller. */
67
110
  kill(signal) {
68
111
  if (signal === 0)
@@ -78,27 +121,27 @@ export class WindowsOwnedProcess extends EventEmitter {
78
121
  }
79
122
  /** Terminate and verify that the entire job has settled before releasing it. */
80
123
  cleanup() {
81
- this.#cleanup ??= this.#stop();
124
+ this.#cleanup ??= this.#stop().then((result) => {
125
+ if (!result.cleaned)
126
+ this.#cleanup = undefined;
127
+ return result;
128
+ });
82
129
  return this.#cleanup;
83
130
  }
84
131
  async #stop() {
85
132
  if (this.#closed)
86
- return this.#verifiedSettlement
87
- ? { cleaned: true, signaled: false }
88
- : {
89
- cleaned: false,
90
- reason: this.#failure ?? "Windows Job Object settlement was not verified",
91
- };
133
+ return { cleaned: true, signaled: false };
92
134
  let timer;
93
135
  try {
94
136
  const signaled = this.kill();
137
+ this.#schedule();
95
138
  const settled = await Promise.race([
96
139
  this.#settled.then(() => true),
97
140
  new Promise((resolve) => {
98
141
  timer = setTimeout(() => resolve(false), 5_000);
99
142
  }),
100
143
  ]);
101
- return settled && this.#verifiedSettlement
144
+ return settled
102
145
  ? { cleaned: true, signaled }
103
146
  : {
104
147
  cleaned: false,
@@ -115,18 +158,20 @@ export class WindowsOwnedProcess extends EventEmitter {
115
158
  finally {
116
159
  if (timer !== undefined)
117
160
  clearTimeout(timer);
118
- if (!this.#closed)
119
- this.#release();
120
161
  }
121
162
  }
122
163
  #schedule() {
164
+ if (this.#closed || this.#timer !== undefined)
165
+ return;
123
166
  this.#timer = setTimeout(() => this.#poll(), 25);
124
167
  }
125
168
  #poll() {
169
+ this.#timer = undefined;
126
170
  if (this.#closed)
127
171
  return;
128
172
  try {
129
173
  const state = pollSchema.parse(this.#authority.call("process_poll", [this.#handle]));
174
+ this.#failure = undefined;
130
175
  if (state.stdout.length > 0)
131
176
  this.stdout.write(state.stdout);
132
177
  if (state.stderr.length > 0)
@@ -139,7 +184,6 @@ export class WindowsOwnedProcess extends EventEmitter {
139
184
  state.stdoutEnded &&
140
185
  state.stderrEnded &&
141
186
  state.activeProcesses === 0) {
142
- this.#verifiedSettlement = true;
143
187
  this.#release();
144
188
  }
145
189
  else
@@ -152,7 +196,7 @@ export class WindowsOwnedProcess extends EventEmitter {
152
196
  // the captured stderr observation produced by the child itself.
153
197
  if (this.listenerCount("error") > 0)
154
198
  this.emit("error", failure);
155
- this.#release();
199
+ // Retain the original job so explicit cleanup can retry its observation.
156
200
  }
157
201
  }
158
202
  #release() {
@@ -162,6 +206,7 @@ export class WindowsOwnedProcess extends EventEmitter {
162
206
  clearTimeout(this.#timer);
163
207
  this.#authority.call("process_close", [this.#handle]);
164
208
  this.#closed = true;
209
+ this.stdin?.destroy();
165
210
  this.stdout.end();
166
211
  this.stderr.end();
167
212
  this.#settle?.();
@@ -105,7 +105,10 @@ export class WindowsPrivateRuntime {
105
105
  }
106
106
  /** Remove owned objects by handle, unlinking reparse entries without traversal. */
107
107
  close() {
108
- this.#closePromise ??= this.#remove();
108
+ this.#closePromise ??= this.#remove().catch((cause) => {
109
+ this.#closePromise = undefined;
110
+ throw cause;
111
+ });
109
112
  return this.#closePromise;
110
113
  }
111
114
  async #remove() {
@@ -114,13 +117,9 @@ export class WindowsPrivateRuntime {
114
117
  if (this.#pending !== undefined)
115
118
  this.authority.call("runtime_snapshot_cancel", [this.observation.handle]);
116
119
  await this.#pending?.catch(() => undefined);
117
- try {
118
- this.authority.call("runtime_close", [this.observation.handle]);
119
- }
120
- finally {
121
- this.#closed = true;
122
- runtimes.delete(this.observation.path.toLowerCase());
123
- }
120
+ this.authority.call("runtime_close", [this.observation.handle]);
121
+ this.#closed = true;
122
+ runtimes.delete(this.observation.path.toLowerCase());
124
123
  }
125
124
  }
126
125
  /** Select an already-owned runtime; an arbitrary pathname cannot grant authority. */
@@ -57,7 +57,9 @@ without this lane reports Windows native controls as unavailable.
57
57
  deduplicated using Windows ordinal comparison, preserving their native Unicode
58
58
  semantics and caller-selected values.
59
59
  - Cleanup walks locked directory objects, removes files by handle, and unlinks
60
- reparse entries without traversing their targets. Normal close, cancellation,
60
+ reparse entries without traversing their targets. Failed removal retains the
61
+ root and ancestor leases for retry; a partially removed runtime accepts only
62
+ cleanup, and its registry entry remains until removal succeeds. Normal close, cancellation,
61
63
  startup failure, and timeout release provider resources. Abrupt owner death
62
64
  kills the owned job; it can leave private runtime files for later operator
63
65
  cleanup and does not claim transactional deletion after a crash.
@@ -1,9 +1,9 @@
1
1
  {
2
- "packageVersion": "6.1.0",
2
+ "packageVersion": "6.3.0",
3
3
  "platform": "win32",
4
4
  "architecture": "x64",
5
5
  "abiVersion": 1,
6
6
  "nodeApiVersion": 8,
7
7
  "artifact": "rea-windows-x64.node",
8
- "artifactSha256": "9914815706dcd4ef94d01543e31cb0b20035e98d5011d4b4e7f8e509823c8b1d"
8
+ "artifactSha256": "fedfd4ce8b3e15784d1a6ef7e9ba7eb9052e8335a1c75b6d69cd7e94f29ab1f8"
9
9
  }