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
@@ -302,7 +302,7 @@ const isBlankOrComment = (line) => {
302
302
  };
303
303
  const looksLikeTomlHeader = (line) => line.trimStart().startsWith("[");
304
304
  /** `mcp_servers.<server>` and tables nested under it, compared by key segment. */
305
- const isGrokServerTable = (path, serverKey) => path[0] === "mcp_servers" && path[1] === serverKey;
305
+ const isTomlServerTable = (path, serverKey) => path[0] === "mcp_servers" && path[1] === serverKey;
306
306
  const parseKeyPath = (text, start) => {
307
307
  const segments = [];
308
308
  let index = start;
@@ -486,7 +486,7 @@ const hasSeparatorComma = (trivia) => trivia.split("\n").some((part) => {
486
486
  * Replace or remove `serverKey` inside one `{ ... }` table. A closed inline
487
487
  * table cannot later grow a `[mcp_servers.rea]` header.
488
488
  */
489
- const editGrokInlineTable = (table, serverKey, entry) => {
489
+ const editInlineServerTable = (table, serverKey, entry) => {
490
490
  if (!table.startsWith("{"))
491
491
  return undefined;
492
492
  const end = endOfContainer(table, 0);
@@ -667,10 +667,12 @@ const disabledServerListLines = (edit, lines, lineIndex, endLine) => {
667
667
  }
668
668
  };
669
669
  /**
670
- * Replace REA's Grok server tables and assignments. Comments that introduce a
671
- * following table stay. Text inside strings is not treated as a header.
670
+ * Replace REA's TOML server tables and assignments. Comments that introduce a
671
+ * following table stay. Codex also retains comments around REA's own table.
672
+ * Text inside strings is not treated as a header. Only Grok Build reads the
673
+ * root `disabled_mcp_servers` list that registration also edits.
672
674
  */
673
- const upsertGrokServerSection = (originalText, serverKey, entry) => {
675
+ const upsertTomlServerSection = (originalText, serverKey, entry, format) => {
674
676
  // smol-toml accepts a leading BOM. Leave it in place or the first header is missed.
675
677
  const bom = originalText.startsWith("\uFEFF");
676
678
  const source = bom ? originalText.slice(1) : originalText;
@@ -721,7 +723,7 @@ const upsertGrokServerSection = (originalText, serverKey, entry) => {
721
723
  const header = parseTomlTableHeader(line);
722
724
  if (header !== undefined) {
723
725
  tablePath = header.path;
724
- if (isGrokServerTable(header.path, serverKey)) {
726
+ if (isTomlServerTable(header.path, serverKey)) {
725
727
  discardPending();
726
728
  skipping = true;
727
729
  lineIndex += 1;
@@ -748,17 +750,19 @@ const upsertGrokServerSection = (originalText, serverKey, entry) => {
748
750
  mode = "none";
749
751
  continue;
750
752
  }
751
- const disabledLines = disabledServerListLines(disabledServerListEdit({
752
- text,
753
- lineStart,
754
- valueOffset,
755
- valueEnd,
756
- statementEnd,
757
- tablePath,
758
- segments: assignment.segments,
759
- serverKey,
760
- entry,
761
- }), lines, lineIndex, endLine);
753
+ const disabledLines = format === "grok"
754
+ ? disabledServerListLines(disabledServerListEdit({
755
+ text,
756
+ lineStart,
757
+ valueOffset,
758
+ valueEnd,
759
+ statementEnd,
760
+ tablePath,
761
+ segments: assignment.segments,
762
+ serverKey,
763
+ entry,
764
+ }), lines, lineIndex, endLine)
765
+ : undefined;
762
766
  if (disabledLines !== undefined) {
763
767
  flushPending();
764
768
  kept.push(...disabledLines);
@@ -771,10 +775,10 @@ const upsertGrokServerSection = (originalText, serverKey, entry) => {
771
775
  const closesServerTable = absolute.length === 1 &&
772
776
  absolute[0] === "mcp_servers" &&
773
777
  text[open] === "{";
774
- if (closesServerTable || isGrokServerTable(absolute, serverKey)) {
778
+ if (closesServerTable || isTomlServerTable(absolute, serverKey)) {
775
779
  if (closesServerTable) {
776
780
  flushPending();
777
- const edited = editGrokInlineTable(text.slice(open, valueEnd), serverKey, entry);
781
+ const edited = editInlineServerTable(text.slice(open, valueEnd), serverKey, entry);
778
782
  const prefix = text.slice(lineStart, open);
779
783
  const suffix = text.slice(valueEnd, statementEnd);
780
784
  const replacement = edited === undefined
@@ -796,7 +800,12 @@ const upsertGrokServerSection = (originalText, serverKey, entry) => {
796
800
  continue;
797
801
  }
798
802
  if (isBlankOrComment(line)) {
799
- pending.push(physical);
803
+ if (format === "toml" && line.trimStart().startsWith("#")) {
804
+ flushPending();
805
+ kept.push(physical);
806
+ }
807
+ else
808
+ pending.push(physical);
800
809
  lineIndex += 1;
801
810
  continue;
802
811
  }
@@ -840,7 +849,7 @@ const upsertGrokServerSection = (originalText, serverKey, entry) => {
840
849
  }
841
850
  return bom ? `\uFEFF${body}` : body;
842
851
  };
843
- const grokServerEntry = (document, serverKey) => {
852
+ const tomlServerEntry = (document, serverKey) => {
844
853
  const servers = objectSchema.safeParse(document.mcp_servers);
845
854
  if (!servers.success || !Object.hasOwn(servers.data, serverKey))
846
855
  return undefined;
@@ -849,12 +858,74 @@ const grokServerEntry = (document, serverKey) => {
849
858
  /** Whether Grok Build's root disable list names `serverKey`. */
850
859
  export const grokServerListedDisabled = (document, serverKey) => Array.isArray(document.disabled_mcp_servers) &&
851
860
  document.disabled_mcp_servers.includes(serverKey);
861
+ /**
862
+ * OMP's user `disabledServers` denylist hides a server by name regardless of
863
+ * its entry, so a listed REA registration is not loaded.
864
+ */
865
+ export const OMP_DISABLED_SERVERS_KEY = "disabledServers";
866
+ /** Whether OMP's root `disabledServers` denylist names `serverKey`. */
867
+ export const ompServerListedDisabled = (document, serverKey) => {
868
+ const listed = document[OMP_DISABLED_SERVERS_KEY];
869
+ return Array.isArray(listed) && listed.includes(serverKey);
870
+ };
871
+ /** OMP's user `enabledServers` allowlist overrides an entry's `enabled: false`. */
872
+ const OMP_ENABLED_SERVERS_KEY = "enabledServers";
873
+ /**
874
+ * Whether OMP's allowlist forces `serverKey` on despite its entry's
875
+ * `enabled: false`. The `disabledServers` denylist still wins over it.
876
+ */
877
+ export const clientServerForcedEnabled = (parsed, serverKey) => {
878
+ if (parsed.dialect !== "omp")
879
+ return false;
880
+ const listed = parsed.document[OMP_ENABLED_SERVERS_KEY];
881
+ return Array.isArray(listed) && listed.includes(serverKey);
882
+ };
883
+ /** Whether a client's own disable list suppresses `serverKey`. */
884
+ export const clientServerListedDisabled = (parsed, serverKey) => (parsed.dialect === "grok" &&
885
+ grokServerListedDisabled(parsed.document, serverKey)) ||
886
+ (parsed.dialect === "omp" &&
887
+ ompServerListedDisabled(parsed.document, serverKey));
852
888
  /** Keep an existing Grok document intact aside from the REA server tables. */
853
889
  const serializeGrokConfiguration = (document, originalText) => {
854
- const entry = grokServerEntry(document, PRODUCT_IDENTITY.mcpServerKey);
890
+ const entry = tomlServerEntry(document, PRODUCT_IDENTITY.mcpServerKey);
855
891
  if (originalText === undefined)
856
892
  return stringifyToml(document);
857
- return upsertGrokServerSection(originalText, PRODUCT_IDENTITY.mcpServerKey, entry);
893
+ return upsertTomlServerSection(originalText, PRODUCT_IDENTITY.mcpServerKey, entry, "grok");
894
+ };
895
+ /** Removing the last server leaves an empty table, which equals an absent one. */
896
+ const withoutEmptyServerTable = (document) => {
897
+ const servers = objectSchema.safeParse(document.mcp_servers);
898
+ if (!servers.success || Object.keys(servers.data).length > 0)
899
+ return document;
900
+ const { mcp_servers: empty, ...rest } = document;
901
+ void empty;
902
+ return rest;
903
+ };
904
+ /**
905
+ * Keep an existing Codex document intact aside from the REA server tables.
906
+ * An edit that would change any other parsed value falls back to a full
907
+ * rewrite, which keeps every value but not comments or spelling.
908
+ */
909
+ const serializeCodexConfiguration = (document, originalText) => {
910
+ if (originalText === undefined ||
911
+ isEmptyClientConfigurationText(originalText))
912
+ return stringifyToml(document);
913
+ const upserted = upsertTomlServerSection(originalText, PRODUCT_IDENTITY.mcpServerKey, tomlServerEntry(document, PRODUCT_IDENTITY.mcpServerKey), "toml");
914
+ // Removing a final table also drops the file's last line break.
915
+ const edited = originalText.endsWith("\n") && !upserted.endsWith("\n")
916
+ ? `${upserted}${originalText.endsWith("\r\n") ? "\r\n" : "\n"}`
917
+ : upserted;
918
+ return tomlTextHolds(edited, document) ? edited : stringifyToml(document);
919
+ };
920
+ const tomlTextHolds = (text, document) => {
921
+ try {
922
+ return clientConfigurationValuesEqual(withoutEmptyServerTable(objectSchema.parse(parseToml(text))), withoutEmptyServerTable(document));
923
+ }
924
+ catch (cause) {
925
+ // An unparsable edit is rejected in favor of the full rewrite.
926
+ void cause;
927
+ return false;
928
+ }
858
929
  };
859
930
  /** Comments in the trivia between two properties. `undefined` when there are none. */
860
931
  const commentsBetweenProperties = (gap) => {
@@ -952,12 +1023,12 @@ const deleteJsonPropertyPreservingComments = (text, path) => {
952
1023
  suffix += "\n";
953
1024
  return `${text.slice(0, previous.offset + previous.length)}${suffix}${remainder}`;
954
1025
  };
955
- /** Serialize a validated client document, retaining JSONC comments. */
1026
+ /** Serialize a validated client document, retaining JSONC and TOML comments. */
956
1027
  export const serializeClientConfiguration = (document, format, originalText, editedPaths) => {
957
1028
  if (format === undefined || format === "unsupported")
958
1029
  throw new TypeError("client does not have a supported MCP config format");
959
1030
  if (format === "toml")
960
- return stringifyToml(document);
1031
+ return serializeCodexConfiguration(document, originalText);
961
1032
  if (format === "grok")
962
1033
  return serializeGrokConfiguration(document, originalText);
963
1034
  // An empty original holds no comments or settings to preserve. Writing a
@@ -1007,6 +1078,7 @@ export const clientRegistrationEntry = (format, command, environment) => {
1007
1078
  : { environment: { ...environment } }),
1008
1079
  };
1009
1080
  case "vscode":
1081
+ case "omp":
1010
1082
  return {
1011
1083
  type: "stdio",
1012
1084
  command: executable,
@@ -1,4 +1,4 @@
1
- import { effectiveClientServer, grokServerListedDisabled, parseClientConfiguration, } from "./ClientConfigurationDocument.js";
1
+ import { clientServerForcedEnabled, clientServerListedDisabled, effectiveClientServer, parseClientConfiguration, } from "./ClientConfigurationDocument.js";
2
2
  import { access, readFile } from "node:fs/promises";
3
3
  import { resolve } from "node:path";
4
4
  import { z } from "zod";
@@ -29,7 +29,11 @@ export const readClientRegistrationStatuses = async (home, currentCommandPath =
29
29
  CODEX_HOME: options.environment.CODEX_HOME,
30
30
  COPILOT_HOME: options.environment.COPILOT_HOME,
31
31
  GROK_HOME: options.environment.GROK_HOME,
32
+ OMP_PROFILE: options.environment.OMP_PROFILE,
32
33
  OPENCODE_CONFIG: options.environment.OPENCODE_CONFIG,
34
+ PI_CODING_AGENT_DIR: options.environment.PI_CODING_AGENT_DIR,
35
+ PI_CONFIG_DIR: options.environment.PI_CONFIG_DIR,
36
+ PI_PROFILE: options.environment.PI_PROFILE,
33
37
  SAND_DATA_ROOT: options.environment.SAND_DATA_ROOT,
34
38
  XDG_CONFIG_HOME: options.environment.XDG_CONFIG_HOME,
35
39
  })) {
@@ -61,9 +65,8 @@ export const readClientRegistrationStatuses = async (home, currentCommandPath =
61
65
  registration.command,
62
66
  ...registration.args,
63
67
  ];
64
- statuses.push(configuredStatus(client.name, client.configPath, command, registrationAligned(registration, client, currentCommandPath, options.platform ?? process.platform) &&
65
- !(client.format === "grok" &&
66
- grokServerListedDisabled(parsed.document, PRODUCT_IDENTITY.mcpServerKey))
68
+ statuses.push(configuredStatus(client.name, client.configPath, command, registrationAligned(registration, client, currentCommandPath, options.platform ?? process.platform, clientServerForcedEnabled(parsed, PRODUCT_IDENTITY.mcpServerKey)) &&
69
+ !clientServerListedDisabled(parsed, PRODUCT_IDENTITY.mcpServerKey)
67
70
  ? "aligned"
68
71
  : "stale"));
69
72
  }
@@ -73,9 +76,10 @@ export const readClientRegistrationStatuses = async (home, currentCommandPath =
73
76
  }
74
77
  return statuses.sort((left, right) => left.client.localeCompare(right.client));
75
78
  };
76
- const registrationAligned = (registration, client, currentCommandPath, platform) => {
79
+ const registrationAligned = (registration, client, currentCommandPath, platform, forcedEnabled = false) => {
77
80
  const command = [registration.command, ...registration.args];
78
- if (registration.disabled === true || registration.enabled === false)
81
+ if (registration.disabled === true ||
82
+ (registration.enabled === false && !forcedEnabled))
79
83
  return false;
80
84
  if (!isOwnedClientRegistrationCommand(command, currentCommandPath))
81
85
  return false;
@@ -85,6 +89,11 @@ const registrationAligned = (registration, client, currentCommandPath, platform)
85
89
  return false;
86
90
  if (client.format === "vscode" && registration.type !== "stdio")
87
91
  return false;
92
+ // OMP infers stdio for a command entry without an explicit type.
93
+ if (client.format === "omp" &&
94
+ registration.type !== undefined &&
95
+ registration.type !== "stdio")
96
+ return false;
88
97
  if (client.format === "copilot_cli" &&
89
98
  (registration.type !== "stdio" ||
90
99
  JSON.stringify(registration.tools) !== JSON.stringify(["*"])))
@@ -127,6 +136,10 @@ const parseRegistration = (value, client) => {
127
136
  throw new TypeError("Expected an stdio registration");
128
137
  if (client.format === "commandcode" && registration.transport !== "stdio")
129
138
  throw new TypeError("Expected an stdio registration");
139
+ if (client.format === "omp" &&
140
+ registration.type !== undefined &&
141
+ registration.type !== "stdio")
142
+ throw new TypeError("Expected an stdio registration");
130
143
  return registration;
131
144
  };
132
145
  const remediation = "Run rea setup to refresh this registration, then restart the client.";
@@ -1,4 +1,3 @@
1
- import { parseConfig } from "../config.js";
2
1
  import { EnhancedTools } from "./EnhancedTools.js";
3
2
  import { executeFunctionAnalysisEvidence } from "./FunctionAnalysisEvidence.js";
4
3
  import { silentLogger } from "../logger.js";
@@ -15,6 +14,9 @@ import { err, ok } from "../domain/result.js";
15
14
  import { REA_WORKFLOW_PROVIDER, workflowAnalysisProfile, } from "./InvestigationProviders.js";
16
15
  import { createWorkflowEvidence, workflowSnapshotRecord, recordWorkflowUnknowns, } from "./WorkflowEvidence.js";
17
16
  import { artifactInspectionResultSchema } from "../domain/artifactInspection.js";
17
+ import { resolveXrefsAddress } from "./XrefsAddressResolution.js";
18
+ import { AnalysisInputError } from "../domain/analysisErrorCore.js";
19
+ import { directAnalysisCleanupFailure, managedAnalysisCleanupFailure, withSessionCleanup, } from "./DirectAnalysisCleanup.js";
18
20
  /**
19
21
  * Open one binary, execute one tool, and always release provider resources.
20
22
  * Unlike MCP mode, every CLI invocation is intentionally isolated and does not
@@ -42,15 +44,12 @@ export const runProviderAnalysis = async (dependencies, ...[path, tool, argument
42
44
  /** Execute managed metadata inspection in an isolated managed-only session. */
43
45
  export const runManagedProviderExecution = async (dependencies, path, tool, signal) => withProcessCancellation(signal, async (operationSignal) => {
44
46
  const session = dependencies.createManagedBinarySession();
45
- try {
47
+ return withSessionCleanup(session, async () => {
46
48
  const opened = await session.open(path, { signal: operationSignal });
47
49
  if (!opened.ok)
48
50
  return opened;
49
51
  return await session.execute(tool, {}, { signal: operationSignal });
50
- }
51
- finally {
52
- await session.close();
53
- }
52
+ }, managedAnalysisCleanupFailure);
54
53
  });
55
54
  const runManagedProviderAnalysis = async (dependencies, path, tool, signal) => {
56
55
  const execution = await runManagedProviderExecution(dependencies, path, tool, signal);
@@ -68,14 +67,15 @@ const runManagedProviderAnalysis = async (dependencies, path, tool, signal) => {
68
67
  };
69
68
  const runAnalysis = async (dependencies, path, tool, arguments_, options) => {
70
69
  const { logger, signal, snapshotPath } = options;
71
- const config = parseConfig(options.environment ?? process.env);
70
+ const config = dependencies.readConfiguration();
72
71
  if (!config.ok)
73
72
  return cliError(config.error);
74
73
  const session = dependencies.createBinarySession(config.value, logger);
75
- try {
74
+ return withSessionCleanup(session, async () => {
76
75
  const prepared = await prepareSnapshot({
77
76
  path,
78
77
  snapshotPath,
78
+ signal,
79
79
  ...(options.formatHint === undefined
80
80
  ? {}
81
81
  : { formatHint: options.formatHint }),
@@ -145,7 +145,7 @@ const runAnalysis = async (dependencies, path, tool, arguments_, options) => {
145
145
  if (evidence !== undefined) {
146
146
  const recorded = session.recordEvidence(evidence);
147
147
  if (!recorded.ok)
148
- return cliError(recorded.error);
148
+ return cliError(recorded.error.retainPartialObservation(evidence));
149
149
  if (isWorkflowEvidenceTool(tool)) {
150
150
  const unknowns = recordWorkflowUnknowns({
151
151
  name: tool,
@@ -154,7 +154,7 @@ const runAnalysis = async (dependencies, path, tool, arguments_, options) => {
154
154
  recordUnknown: (unknown) => session.recordUnknown(unknown),
155
155
  });
156
156
  if (!unknowns.ok)
157
- return cliError(unknowns.error);
157
+ return cliError(unknowns.error.retainPartialObservation(evidence));
158
158
  }
159
159
  }
160
160
  if (isWorkflowEvidenceTool(tool) &&
@@ -166,7 +166,7 @@ const runAnalysis = async (dependencies, path, tool, arguments_, options) => {
166
166
  if (workflowRecord !== undefined) {
167
167
  const recorded = session.recordWorkflowSnapshot(workflowRecord);
168
168
  if (!recorded.ok)
169
- return cliError(recorded.error);
169
+ return cliError(recorded.error.retainPartialObservation(evidence));
170
170
  }
171
171
  }
172
172
  if (tool !== "trace_native_ui_action" &&
@@ -174,16 +174,13 @@ const runAnalysis = async (dependencies, path, tool, arguments_, options) => {
174
174
  evidence !== undefined) {
175
175
  const snapshot = session.exportAnalysisSnapshot();
176
176
  if (!snapshot.ok)
177
- return cliError(snapshot.error);
177
+ return cliError(snapshot.error.retainPartialObservation(evidence));
178
178
  const written = await writeAnalysisSnapshot(snapshot.value, snapshotPath, true);
179
179
  if (!written.ok)
180
- return cliError(written.error);
180
+ return cliError(written.error.retainPartialObservation(evidence));
181
181
  }
182
182
  return output;
183
- }
184
- finally {
185
- await session.close();
186
- }
183
+ }, directAnalysisCleanupFailure);
187
184
  };
188
185
  const executeAnalysisTool = async (input) => {
189
186
  const { session, tool, signal, evidenceProfile } = input;
@@ -211,7 +208,22 @@ const executeAnalysisTool = async (input) => {
211
208
  });
212
209
  return { output: evidence, evidence };
213
210
  }
214
- const result = await session.execute(tool, input.arguments, { signal });
211
+ let result = await session.execute(tool, input.arguments, { signal });
212
+ if (tool === "xrefs" &&
213
+ typeof input.arguments.address === "string" &&
214
+ !result.ok &&
215
+ result.error instanceof AnalysisInputError &&
216
+ !result.error.cleanupIncomplete &&
217
+ result.error.issues.length > 0 &&
218
+ result.error.issues.every(({ path, reason }) => path.length === 1 &&
219
+ path[0] === "address" &&
220
+ reason === "invalid_format")) {
221
+ const address = await resolveXrefsAddress(session, input.arguments.address, signal);
222
+ if (!address.ok)
223
+ return { output: cliError(address.error) };
224
+ if (address.value !== input.arguments.address)
225
+ result = await session.execute(tool, { ...input.arguments, address: address.value }, { signal });
226
+ }
215
227
  if (!result.ok)
216
228
  return { output: cliError(result.error) };
217
229
  const evidence = createEvidence(result.value.subject ?? input.openedTarget, result.value.provider, {
@@ -236,12 +248,16 @@ const withProcessCancellation = async (suppliedSignal, operation) => {
236
248
  return operation(suppliedSignal);
237
249
  const controller = new AbortController();
238
250
  const cancel = () => controller.abort();
239
- process.once("SIGINT", cancel);
251
+ // Package runners can forward a terminal interrupt after REA already received
252
+ // it directly. Keep both guards installed until provider cleanup has settled.
253
+ process.on("SIGINT", cancel);
254
+ process.on("SIGTERM", cancel);
240
255
  try {
241
256
  return await operation(controller.signal);
242
257
  }
243
258
  finally {
244
259
  process.off("SIGINT", cancel);
260
+ process.off("SIGTERM", cancel);
245
261
  }
246
262
  };
247
263
  const prepareSnapshot = async (options) => {
@@ -251,7 +267,12 @@ const prepareSnapshot = async (options) => {
251
267
  const loaded = await readAnalysisSnapshot(snapshotPath);
252
268
  if (!loaded.ok)
253
269
  return loaded;
254
- const target = await parseBinaryTarget(path, process.cwd(), process.arch, undefined, options.formatHint);
270
+ const target = await parseBinaryTarget(path, {
271
+ signal: options.signal,
272
+ ...(options.formatHint === undefined
273
+ ? {}
274
+ : { formatHint: options.formatHint }),
275
+ });
255
276
  if (!target.ok)
256
277
  return target;
257
278
  if (!snapshotMatchesTarget(loaded.value.target, target.value))
@@ -0,0 +1,71 @@
1
+ import { analysisErrorProjectionSchema } from "../contracts/errorSchemas.js";
2
+ import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
3
+ import { jsonValueSchema } from "../domain/jsonValue.js";
4
+ import { ProviderAdapterError } from "../domain/providerAdapterError.js";
5
+ import { err } from "../domain/result.js";
6
+ import { analysisErrorWithCleanupFailure } from "./binary/AnalysisClientCleanup.js";
7
+ /** Await one-shot cleanup and retain either the outcome or both failures. */
8
+ export const withSessionCleanup = async (session, operation, onCleanupFailure) => {
9
+ let value;
10
+ try {
11
+ value = await operation();
12
+ }
13
+ catch (cause) {
14
+ const closed = await session.close();
15
+ if (!closed.ok)
16
+ throw new AggregateError([cause, closed.error], "Analysis and provider cleanup both failed", { cause });
17
+ throw cause;
18
+ }
19
+ const closed = await session.close();
20
+ return closed.ok ? value : onCleanupFailure(value, closed.error);
21
+ };
22
+ /** Keep the primary CLI failure or completed Evidence alongside cleanup failure. */
23
+ export const directAnalysisCleanupFailure = (output, error) => {
24
+ const cleanup = projectAnalysisError(error);
25
+ if (typeof output === "object" && output !== null && !Array.isArray(output)) {
26
+ const { error: label, ...projection } = output;
27
+ const primary = analysisErrorProjectionSchema.safeParse(projection);
28
+ if (typeof label === "string" && primary.success)
29
+ return {
30
+ error: label,
31
+ ...primary.data,
32
+ code: "cleanup_incomplete",
33
+ retryable: false,
34
+ details: {
35
+ ...primary.data.details,
36
+ cleanup: "incomplete",
37
+ resources: error.cleanupResources.slice(),
38
+ execution_failure: primary.data.details !== undefined &&
39
+ "execution_failure" in primary.data.details
40
+ ? (primary.data.details.execution_failure ?? primary.data.code)
41
+ : primary.data.code,
42
+ cleanup_error: cleanup,
43
+ },
44
+ };
45
+ }
46
+ return {
47
+ error: "Analysis failed",
48
+ ...cleanup,
49
+ code: "cleanup_incomplete",
50
+ retryable: false,
51
+ details: {
52
+ ...cleanup.details,
53
+ cleanup: "incomplete",
54
+ partial_observation: output,
55
+ },
56
+ };
57
+ };
58
+ /** Preserve managed observations or the original typed failure in diagnostics. */
59
+ export const managedAnalysisCleanupFailure = (result, error) => {
60
+ if (!result.ok)
61
+ return err(analysisErrorWithCleanupFailure(result.error, error));
62
+ const cleanup = projectAnalysisError(error);
63
+ return err(new ProviderAdapterError(error instanceof ProviderAdapterError ? error.providerId : "rea", "close_binary", {
64
+ cause: error,
65
+ cleanup: { reason: cleanup.message, resources: error.cleanupResources },
66
+ diagnostics: {
67
+ cleanup_error: cleanup,
68
+ partial_observation: jsonValueSchema.parse(result.value),
69
+ },
70
+ }));
71
+ };
@@ -1,10 +1,10 @@
1
- import { parseConfig } from "../config.js";
2
1
  import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
3
2
  import { jsonObjectSchema } from "../domain/jsonValue.js";
4
3
  import { createServerIdentity } from "../serverIdentity.js";
5
4
  import { silentLogger } from "../logger.js";
6
- const runSessionStatus = async (dependencies, logger = silentLogger, environment = process.env) => {
7
- const config = parseConfig(environment);
5
+ /** Read target-free provider status and operation availability. */
6
+ export const runSessionStatus = async (dependencies, logger = silentLogger) => {
7
+ const config = dependencies.readConfiguration();
8
8
  if (!config.ok)
9
9
  return { error: projectAnalysisError(config.error) };
10
10
  const session = dependencies.createBinarySession(config.value, logger);
@@ -20,7 +20,3 @@ const runSessionStatus = async (dependencies, logger = silentLogger, environment
20
20
  await session.close();
21
21
  }
22
22
  };
23
- /** List binary-session provider candidates and auxiliary operation availability. */
24
- export const runProviderStatus = (dependencies, logger = silentLogger, environment = process.env) => runSessionStatus(dependencies, logger, environment);
25
- /** List binary-session operation descriptors; this is not the full MCP catalog. */
26
- export const runCapabilityStatus = (dependencies, logger = silentLogger, environment = process.env) => runSessionStatus(dependencies, logger, environment);