rea-agents 6.2.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 (297) hide show
  1. package/README.md +18 -20
  2. package/bridge/hopper_bridge.py +2 -0
  3. package/dist/android/JadxProvider.js +8 -2
  4. package/dist/android/JadxSession.js +51 -9
  5. package/dist/application/BinaryTargetResolver.js +63 -17
  6. package/dist/application/BrowserScenarioEvidence.js +2 -2
  7. package/dist/application/ClientConfigurationDocument.js +28 -0
  8. package/dist/application/ClientRegistrationStatus.js +19 -6
  9. package/dist/application/DirectAnalysis.js +12 -6
  10. package/dist/application/DirectAnalysisCleanup.js +0 -1
  11. package/dist/application/DirectAnalysisStatus.js +2 -5
  12. package/dist/application/Doctor.js +25 -34
  13. package/dist/application/DoctorDiagnostics.js +1 -1
  14. package/dist/application/EvidenceBundleFiles.js +1 -1
  15. package/dist/application/InvestigationProviders.js +4 -4
  16. package/dist/application/JsonFiles.js +15 -15
  17. package/dist/application/LinuxHopper.js +2 -1
  18. package/dist/application/ReconstructionObligationCandidates.js +9 -2
  19. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -1
  20. package/dist/application/RegularFileRead.js +17 -0
  21. package/dist/application/Setup.js +18 -7
  22. package/dist/application/SetupClientConfiguration.js +18 -7
  23. package/dist/application/SetupHost.js +6 -4
  24. package/dist/application/SetupPlan.js +19 -15
  25. package/dist/application/SetupSkill.js +57 -8
  26. package/dist/application/SupportedClients.js +43 -0
  27. package/dist/application/Uninstall.js +18 -2
  28. package/dist/application/UpdateMaintenance.js +6 -2
  29. package/dist/application/Utf8JsonInput.js +64 -0
  30. package/dist/application/WebScriptExportService.js +13 -6
  31. package/dist/application/android/AndroidAnalysisService.js +1 -1
  32. package/dist/application/binary/AnalysisSnapshotCache.js +5 -4
  33. package/dist/application/binary/BinarySession.js +16 -0
  34. package/dist/application/binary/BinarySessionOpen.js +9 -1
  35. package/dist/application/javascript/ElectronActiveEvidence.js +2 -2
  36. package/dist/application/javascript/ElectronBoundaryAnalysis.js +2 -2
  37. package/dist/application/javascript/ElectronBoundaryGraphNative.js +5 -1
  38. package/dist/application/javascript/JavaScriptApplicationEvidence.js +1 -0
  39. package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +107 -46
  40. package/dist/application/javascript/JavaScriptApplicationService.js +1 -0
  41. package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +59 -45
  42. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +0 -6
  43. package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +8 -18
  44. package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +34 -26
  45. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +44 -12
  46. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +6 -3
  47. package/dist/application/javascript/JavaScriptArtifactReconstructionInput.js +1 -0
  48. package/dist/application/javascript/JavaScriptJsonModules.js +2 -2
  49. package/dist/application/javascript/JavaScriptModuleRelationships.js +5 -17
  50. package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +11 -27
  51. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +2 -2
  52. package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +8 -6
  53. package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +1 -1
  54. package/dist/application/javascript/JavaScriptSemanticGraphConstruction.js +7 -5
  55. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +1 -1
  56. package/dist/application/javascript/JavaScriptSemanticGraphEvidence.js +1 -1
  57. package/dist/application/javascript/JavaScriptSemanticGraphFingerprintProjection.js +2 -2
  58. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +2 -2
  59. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +1 -1
  60. package/dist/application/javascript/JavaScriptSemanticGraphProjection.js +4 -4
  61. package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +1 -1
  62. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +10 -7
  63. package/dist/application/javascript/JavaScriptSemanticTraceService.js +15 -10
  64. package/dist/application/native/NativeCallRoutes.js +2 -4
  65. package/dist/artifacts/ArtifactProvider.js +14 -16
  66. package/dist/artifacts/ArtifactProviderMetadata.js +1 -4
  67. package/dist/artifacts/AsarArtifactReader.js +81 -17
  68. package/dist/artifacts/DirectoryArtifactReader.js +2 -2
  69. package/dist/artifacts/NativeDmgArtifactReader.js +152 -67
  70. package/dist/artifacts/NativeDmgOwnership.js +109 -0
  71. package/dist/artifacts/apple/KeyedArchiveReader.js +54 -46
  72. package/dist/artifacts/apple/MachoLoadCommandReader.js +36 -6
  73. package/dist/artifacts/extraction/ArtifactExtraction.js +29 -11
  74. package/dist/artifacts/inventory/ArtifactGraphConstruction.js +7 -8
  75. package/dist/artifacts/inventory/classify.js +33 -14
  76. package/dist/artifacts/inventory/hashStableRootArtifact.js +37 -0
  77. package/dist/artifacts/inventory/scanCanonical.js +28 -22
  78. package/dist/artifacts/inventory/scanReader.js +7 -11
  79. package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +65 -27
  80. package/dist/browser/CdpBrowserProvider.js +4 -3
  81. package/dist/browser/CdpCaptureStorageFingerprints.js +3 -3
  82. package/dist/browser/CdpElectronInspection.js +2 -2
  83. package/dist/browser/CdpElectronProvider.js +4 -3
  84. package/dist/browser/CdpElectronScripts.js +2 -2
  85. package/dist/browser/CdpWebMcpDiscovery.js +16 -13
  86. package/dist/browser/PlaywrightBrowserScenarioProvider.js +6 -6
  87. package/dist/browser/PlaywrightScenarioBrowser.js +145 -42
  88. package/dist/browser/PlaywrightScenarioSession.js +3 -11
  89. package/dist/browser/WebSourceMapFetcher.js +32 -6
  90. package/dist/browser/assets/ScenarioScriptCapture.js +8 -12
  91. package/dist/cli/coreAnalysisCommands.js +2 -2
  92. package/dist/cli/coreBinaryCommands.js +13 -9
  93. package/dist/cli/electronCommands.js +9 -10
  94. package/dist/cli/javascriptApplicationAnalysis.js +2 -12
  95. package/dist/cli/jsonOutput.js +3 -2
  96. package/dist/cli/streamedJsonOutput.js +83 -4
  97. package/dist/cli/utilityCommands.js +2 -4
  98. package/dist/cli.js +5 -2
  99. package/dist/cliJsonFile.js +179 -0
  100. package/dist/cliJsonInput.js +47 -34
  101. package/dist/cliObservationOptions.js +4 -0
  102. package/dist/composition/auxiliaryAnalysisProviders.js +5 -4
  103. package/dist/composition/browserScenario.js +2 -2
  104. package/dist/composition/directAnalysis.js +2 -3
  105. package/dist/contracts/artifactComparisonExample.js +5 -5
  106. package/dist/contracts/errorSchemas.js +3 -1
  107. package/dist/contracts/functionComparisonExample.js +8 -0
  108. package/dist/contracts/inputSchemaPresentation.js +94 -3
  109. package/dist/contracts/javascript/electronToolContracts.js +2 -1
  110. package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +3 -2
  111. package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +6 -3
  112. package/dist/contracts/javascript/javascriptRuntimeReconciliationExample.js +8 -7
  113. package/dist/contracts/managed/managedToolContracts.js +3 -2
  114. package/dist/contracts/mobileApplicationGraphExamples.js +5 -5
  115. package/dist/contracts/native/nativeToolContracts.js +1 -1
  116. package/dist/contracts/sessionLifecycleInputs.js +4 -3
  117. package/dist/contracts/sessionStatusContract.js +3 -2
  118. package/dist/contracts/sessionToolContracts.js +3 -2
  119. package/dist/contracts/sessionToolSchemas.js +3 -2
  120. package/dist/contracts/toolOutputSchemaGroups.js +2 -2
  121. package/dist/contracts/toolOutputSchemaPrimitives.js +2 -5
  122. package/dist/domain/analysisErrorBase.js +5 -0
  123. package/dist/domain/analysisErrorPresentation.js +4 -2
  124. package/dist/domain/analysisSnapshot.js +3 -1
  125. package/dist/domain/analysisView/analysisView.js +1 -3
  126. package/dist/domain/android/androidPartialObservation.js +36 -0
  127. package/dist/domain/apple/dylibResolution.js +1 -1
  128. package/dist/domain/artifactComparison.js +4 -4
  129. package/dist/domain/artifactGraph.js +1 -1
  130. package/dist/domain/artifactIdentity.js +8 -8
  131. package/dist/domain/artifactInspection.js +8 -8
  132. package/dist/domain/artifactInventoryEvidence.js +5 -5
  133. package/dist/domain/browserCompleteness.js +3 -2
  134. package/dist/domain/browserScenarioCaptureValues.js +2 -2
  135. package/dist/domain/browserScenarioNormalization.js +3 -3
  136. package/dist/domain/browserScenarioValues.js +3 -2
  137. package/dist/domain/callPath.js +8 -10
  138. package/dist/domain/canonicalDigest.js +7 -1
  139. package/dist/domain/canonicalOrdering.js +1 -13
  140. package/dist/domain/changedBehavior.js +2 -3
  141. package/dist/domain/comparisonSemantics.js +0 -5
  142. package/dist/domain/digests.js +0 -3
  143. package/dist/domain/evidence.js +10 -5
  144. package/dist/domain/evidenceBundle.js +51 -33
  145. package/dist/domain/firmware/firmwareAnalysis.js +4 -3
  146. package/dist/domain/functionComparison.js +2 -1
  147. package/dist/domain/functionComparisonNormalization.js +4 -3
  148. package/dist/domain/functionComparisonResults.js +2 -2
  149. package/dist/domain/functionDossierEvidence.js +2 -1
  150. package/dist/domain/hopperValues.js +11 -15
  151. package/dist/domain/javascript/electronActiveObservation.js +4 -3
  152. package/dist/domain/javascript/electronStaticAnalysisBrowser.js +2 -2
  153. package/dist/domain/javascript/electronStaticAnalysisIpc.js +9 -1
  154. package/dist/domain/javascript/electronStaticAnalysisNative.js +5 -3
  155. package/dist/domain/javascript/electronStaticAnalysisValues.js +8 -4
  156. package/dist/domain/javascript/javascriptApplicationAnalysis.js +3 -1
  157. package/dist/domain/javascript/javascriptApplicationChangeGraph.js +12 -8
  158. package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +4 -0
  159. package/dist/domain/javascript/javascriptApplicationGraph.js +15 -13
  160. package/dist/domain/javascript/javascriptApplicationVersionComparison.js +4 -4
  161. package/dist/domain/javascript/javascriptApplicationVersionComparisonSchemas.js +37 -22
  162. package/dist/domain/javascript/javascriptApplicationVersionItems.js +45 -34
  163. package/dist/domain/javascript/javascriptApplicationVersionKeys.js +7 -7
  164. package/dist/domain/javascript/javascriptAstFingerprint.js +2 -2
  165. package/dist/domain/javascript/javascriptAstValues.js +22 -0
  166. package/dist/domain/javascript/javascriptExportShapeComparison.js +3 -2
  167. package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +31 -23
  168. package/dist/domain/javascript/javascriptExportShapeSelection.js +2 -2
  169. package/dist/domain/javascript/javascriptExportShapeVariants.js +3 -2
  170. package/dist/domain/javascript/javascriptFeatureSeed.js +5 -3
  171. package/dist/domain/javascript/javascriptFeatureTrace.js +7 -6
  172. package/dist/domain/javascript/javascriptFeatureTraceSchemas.js +17 -9
  173. package/dist/domain/javascript/javascriptFeatureTraversal.js +4 -4
  174. package/dist/domain/javascript/javascriptNativeHandoff.js +6 -6
  175. package/dist/domain/javascript/javascriptRuntimeObservation.js +8 -5
  176. package/dist/domain/javascript/javascriptRuntimeReconciliation.js +12 -6
  177. package/dist/domain/javascript/javascriptRuntimeReconciliationActive.js +9 -8
  178. package/dist/domain/javascript/javascriptRuntimeReconciliationCaptureParsing.js +212 -0
  179. package/dist/domain/javascript/javascriptRuntimeReconciliationGraph.js +5 -4
  180. package/dist/domain/javascript/javascriptRuntimeReconciliationInputValidation.js +28 -0
  181. package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +5 -5
  182. package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +12 -223
  183. package/dist/domain/javascript/javascriptRuntimeReconciliationResult.js +2 -2
  184. package/dist/domain/javascript/javascriptRuntimeReconciliationRuntime.js +15 -4
  185. package/dist/domain/javascript/javascriptRuntimeReconciliationSchemas.js +2 -2
  186. package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +7 -6
  187. package/dist/domain/javascript/javascriptSemanticAnalysis.js +200 -8
  188. package/dist/domain/javascript/javascriptSemanticCallResolution.js +9 -7
  189. package/dist/domain/javascript/javascriptSemanticChildProcesses.js +2 -2
  190. package/dist/domain/javascript/javascriptSemanticCoverage.js +20 -0
  191. package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +7 -9
  192. package/dist/domain/javascript/javascriptSemanticDataEffects.js +4 -11
  193. package/dist/domain/javascript/javascriptSemanticFingerprints.js +2 -2
  194. package/dist/domain/javascript/javascriptSemanticGraph.js +142 -35
  195. package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +19 -1
  196. package/dist/domain/javascript/javascriptSemanticIr.js +0 -4
  197. package/dist/domain/javascript/javascriptSemanticIterationSources.js +106 -0
  198. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +497 -113
  199. package/dist/domain/javascript/javascriptSemanticMutationInitializers.js +190 -0
  200. package/dist/domain/javascript/javascriptSemanticMutationValues.js +41 -27
  201. package/dist/domain/javascript/javascriptSemanticObjects.js +2 -6
  202. package/dist/domain/javascript/javascriptSemanticPrimitives.js +7 -2
  203. package/dist/domain/javascript/javascriptSemanticProjection.js +20 -14
  204. package/dist/domain/javascript/javascriptSemanticPromises.js +15 -21
  205. package/dist/domain/javascript/javascriptSemanticPropertyPaths.js +23 -0
  206. package/dist/domain/javascript/javascriptSemanticProvenance.js +3 -3
  207. package/dist/domain/javascript/javascriptSemanticQuery.js +8 -2
  208. package/dist/domain/javascript/javascriptSemanticQueryIdentity.js +3 -2
  209. package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -9
  210. package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +16 -10
  211. package/dist/domain/javascript/javascriptSemanticReturns.js +23 -27
  212. package/dist/domain/javascript/javascriptSemanticTraversal.js +6 -1
  213. package/dist/domain/javascript/javascriptSemanticValues.js +135 -24
  214. package/dist/domain/javascript/javascriptSourceMapPaths.js +11 -1
  215. package/dist/domain/javascript/javascriptSourceParser.js +34 -9
  216. package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +5 -6
  217. package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +26 -15
  218. package/dist/domain/javascript/sourceToBundleComparison.js +7 -5
  219. package/dist/domain/javascript/sourceToBundleSignals.js +7 -7
  220. package/dist/domain/jsonSerialization.js +109 -55
  221. package/dist/domain/jsonShape.js +46 -19
  222. package/dist/domain/localPath.js +10 -4
  223. package/dist/domain/managed/managedApplicationGraph.js +10 -6
  224. package/dist/domain/managed/managedApplicationGraphNodes.js +82 -57
  225. package/dist/domain/managed/managedMemberComparisonMatch.js +6 -7
  226. package/dist/domain/native/nativeCallObservation.js +2 -4
  227. package/dist/domain/native/nativeValueFlow.js +5 -11
  228. package/dist/domain/native/objcSwiftMetadata.js +15 -17
  229. package/dist/domain/process/processCapture.js +11 -10
  230. package/dist/domain/process/processCaptureCoverage.js +8 -5
  231. package/dist/domain/process/processCaptureExample.js +43 -0
  232. package/dist/domain/process/processCaptureValidation.js +4 -3
  233. package/dist/domain/process/processComparison.js +0 -23
  234. package/dist/domain/process/processScenario.js +3 -3
  235. package/dist/domain/process/processTraceEvaluation.js +4 -4
  236. package/dist/domain/process/processTraceSpecification.js +1 -3
  237. package/dist/domain/providerCleanupError.js +6 -2
  238. package/dist/domain/reconstructionCoverage.js +2 -1
  239. package/dist/domain/reconstructionUnknowns.js +4 -3
  240. package/dist/domain/reconstructionVerification.js +3 -2
  241. package/dist/domain/referenceSourceGraph.js +7 -7
  242. package/dist/domain/referenceSourceImportParsing.js +34 -45
  243. package/dist/domain/residualUnknown.js +3 -2
  244. package/dist/domain/staticRuntimeCorrelation.js +2 -1
  245. package/dist/domain/swiftSymbolClassification.js +6 -1
  246. package/dist/domain/symbolAnalysis.js +17 -2
  247. package/dist/domain/unicodeCodePointOrder.js +6 -0
  248. package/dist/domain/webBundleAnalyzerInspection.js +9 -1
  249. package/dist/domain/webCaptureDiff.js +71 -29
  250. package/dist/domain/webCaptureDiffSchemas.js +2 -8
  251. package/dist/domain/webInventory.js +3 -2
  252. package/dist/domain/webMcpDiscovery.js +4 -3
  253. package/dist/domain/webScriptExport.js +1 -1
  254. package/dist/dotnet/ManagedMemberInstructionDecoder.js +1 -2
  255. package/dist/dotnet/ManagedStaticProvider.js +10 -7
  256. package/dist/dotnet/ManagedStaticProviderMetadata.js +1 -4
  257. package/dist/filesystem/RegularFile.js +41 -0
  258. package/dist/generatedPackageMetadata.js +1 -1
  259. package/dist/ghidra/GhidraClient.js +14 -4
  260. package/dist/ghidra/GhidraInstallation.js +111 -10
  261. package/dist/ghidra/GhidraLauncher.js +43 -19
  262. package/dist/hopper/HopperCleanup.js +1 -1
  263. package/dist/ida/IdaOperationRunner.js +2 -0
  264. package/dist/ida/IdaSessionClient.js +4 -2
  265. package/dist/inspector/JavaScriptRuntimeScope.js +9 -5
  266. package/dist/inspector/V8InspectorCaptureProjection.js +46 -13
  267. package/dist/inspector/V8InspectorProvider.js +60 -8
  268. package/dist/main/shutdown.js +76 -32
  269. package/dist/main/transport.js +1 -1
  270. package/dist/native/AppleObjcDispatchFacets.js +3 -3
  271. package/dist/native/AppleObjcProperties.js +17 -7
  272. package/dist/native/LldbCallTracer.js +241 -75
  273. package/dist/native/NativeMacOSProvider.js +10 -5
  274. package/dist/native/NativeMacOSProviderMetadata.js +1 -2
  275. package/dist/process/ProcessOwnershipObservation.js +9 -13
  276. package/dist/process/capture/FilesystemSnapshot.js +88 -18
  277. package/dist/process/capture/ProcessCaptureLifecycle.js +13 -27
  278. package/dist/process/capture/ProcessFilesystemEffects.js +19 -4
  279. package/dist/process/capture/ProcessHarness.js +8 -21
  280. package/dist/server/analysisAdmission.js +8 -0
  281. package/dist/server/createServer.js +22 -23
  282. package/dist/server/registerApplicationTools/compareExportShapes.js +2 -1
  283. package/dist/server/registerApplicationTools/helpers.js +3 -2
  284. package/dist/server/registerArtifactTools.js +2 -2
  285. package/dist/server/registerCloseLifecycleTool.js +6 -4
  286. package/dist/server/registerEnhancedTools.js +78 -73
  287. package/dist/server/registerEvidenceTools.js +54 -46
  288. package/dist/server/registerManagedTools.js +7 -4
  289. package/dist/server/registerOfficialTools.js +31 -25
  290. package/dist/server/registerSessionTools.js +9 -3
  291. package/native/windows/build/manifest.json +1 -1
  292. package/package.json +6 -3
  293. package/skills/reverse-engineer-anything/SKILL.md +5 -5
  294. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +9 -0
  295. package/dist/artifacts/inventory/policy.js +0 -2
  296. package/dist/domain/managed/managedApplicationGraphNodeCoverage.js +0 -6
  297. package/dist/server/registerNativeTools.js +0 -6
@@ -7,7 +7,7 @@ import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
7
7
  import { executeFunctionAnalysisEvidence } from "../application/FunctionAnalysisEvidence.js";
8
8
  /** Register composed workflows against the same port as direct bridge tools. */
9
9
  // oxlint-disable-next-line max-lines-per-function -- direct SDK calls retain each schema-handler type correlation.
10
- export const registerEnhancedTools = (server, analysis, options) => {
10
+ export const registerEnhancedTools = (server, options) => {
11
11
  const registration = { ...options, delivery: server.delivery };
12
12
  const nativeDispatchMetadata = toolContract("inspect_native_dispatch_metadata");
13
13
  const objcClasses = toolContract("get_objc_classes");
@@ -23,125 +23,130 @@ export const registerEnhancedTools = (server, analysis, options) => {
23
23
  const traceCallPath = toolContract("trace_call_path");
24
24
  const traceNativeUiAction = toolContract("trace_native_ui_action");
25
25
  const traceNativeValues = toolContract("trace_native_values");
26
- server.registerTool(traceNativeValues.name, toolRegistrationOptions(traceNativeValues), (input, context) => executeEnhancedTool(analysis, registration, traceNativeValues, {
26
+ server.registerTool(traceNativeValues.name, toolRegistrationOptions(traceNativeValues), (input, context) => executeEnhancedTool(registration, traceNativeValues, {
27
27
  validatedCall: { name: "trace_native_values", input },
28
28
  context,
29
29
  }));
30
- server.registerTool(nativeDispatchMetadata.name, toolRegistrationOptions(nativeDispatchMetadata), (input, context) => executeEnhancedTool(analysis, registration, nativeDispatchMetadata, {
30
+ server.registerTool(nativeDispatchMetadata.name, toolRegistrationOptions(nativeDispatchMetadata), (input, context) => executeEnhancedTool(registration, nativeDispatchMetadata, {
31
31
  validatedCall: { name: "inspect_native_dispatch_metadata", input },
32
32
  context,
33
33
  }));
34
- server.registerTool(objcClasses.name, toolRegistrationOptions(objcClasses), (input, context) => executeEnhancedTool(analysis, registration, objcClasses, {
34
+ server.registerTool(objcClasses.name, toolRegistrationOptions(objcClasses), (input, context) => executeEnhancedTool(registration, objcClasses, {
35
35
  validatedCall: { name: "get_objc_classes", input },
36
36
  context,
37
37
  }));
38
- server.registerTool(objcProtocols.name, toolRegistrationOptions(objcProtocols), (input, context) => executeEnhancedTool(analysis, registration, objcProtocols, {
38
+ server.registerTool(objcProtocols.name, toolRegistrationOptions(objcProtocols), (input, context) => executeEnhancedTool(registration, objcProtocols, {
39
39
  validatedCall: { name: "get_objc_protocols", input },
40
40
  context,
41
41
  }));
42
- server.registerTool(batchDecompile.name, toolRegistrationOptions(batchDecompile), (input, context) => executeEnhancedTool(analysis, registration, batchDecompile, {
42
+ server.registerTool(batchDecompile.name, toolRegistrationOptions(batchDecompile), (input, context) => executeEnhancedTool(registration, batchDecompile, {
43
43
  validatedCall: { name: "batch_decompile", input },
44
44
  context,
45
45
  }));
46
- server.registerTool(callGraph.name, toolRegistrationOptions(callGraph), (input, context) => executeEnhancedTool(analysis, registration, callGraph, {
46
+ server.registerTool(callGraph.name, toolRegistrationOptions(callGraph), (input, context) => executeEnhancedTool(registration, callGraph, {
47
47
  validatedCall: { name: "get_call_graph", input },
48
48
  context,
49
49
  }));
50
- server.registerTool(swiftTypes.name, toolRegistrationOptions(swiftTypes), (input, context) => executeEnhancedTool(analysis, registration, swiftTypes, {
50
+ server.registerTool(swiftTypes.name, toolRegistrationOptions(swiftTypes), (input, context) => executeEnhancedTool(registration, swiftTypes, {
51
51
  validatedCall: { name: "analyze_swift_types", input },
52
52
  context,
53
53
  }));
54
- server.registerTool(xrefsToName.name, toolRegistrationOptions(xrefsToName), (input, context) => executeEnhancedTool(analysis, registration, xrefsToName, {
54
+ server.registerTool(xrefsToName.name, toolRegistrationOptions(xrefsToName), (input, context) => executeEnhancedTool(registration, xrefsToName, {
55
55
  validatedCall: { name: "find_xrefs_to_name", input },
56
56
  context,
57
57
  }));
58
- server.registerTool(binaryOverview.name, toolRegistrationOptions(binaryOverview), (input, context) => executeEnhancedTool(analysis, registration, binaryOverview, {
58
+ server.registerTool(binaryOverview.name, toolRegistrationOptions(binaryOverview), (input, context) => executeEnhancedTool(registration, binaryOverview, {
59
59
  validatedCall: { name: "binary_overview", input },
60
60
  context,
61
61
  }));
62
- server.registerTool(analyzeFunction.name, toolRegistrationOptions(analyzeFunction), (input, context) => executeEnhancedTool(analysis, registration, analyzeFunction, {
62
+ server.registerTool(analyzeFunction.name, toolRegistrationOptions(analyzeFunction), (input, context) => executeEnhancedTool(registration, analyzeFunction, {
63
63
  validatedCall: { name: "analyze_function", input },
64
64
  context,
65
65
  }));
66
- server.registerTool(inspectNativeApi.name, toolRegistrationOptions(inspectNativeApi), (input, context) => executeEnhancedTool(analysis, registration, inspectNativeApi, {
66
+ server.registerTool(inspectNativeApi.name, toolRegistrationOptions(inspectNativeApi), (input, context) => executeEnhancedTool(registration, inspectNativeApi, {
67
67
  validatedCall: { name: "inspect_native_api", input },
68
68
  context,
69
69
  }));
70
- server.registerTool(traceFeature.name, toolRegistrationOptions(traceFeature), (input, context) => executeEnhancedTool(analysis, registration, traceFeature, {
70
+ server.registerTool(traceFeature.name, toolRegistrationOptions(traceFeature), (input, context) => executeEnhancedTool(registration, traceFeature, {
71
71
  validatedCall: { name: "trace_feature", input },
72
72
  context,
73
73
  }));
74
- server.registerTool(traceCallPath.name, toolRegistrationOptions(traceCallPath), (input, context) => executeEnhancedTool(analysis, registration, traceCallPath, {
74
+ server.registerTool(traceCallPath.name, toolRegistrationOptions(traceCallPath), (input, context) => executeEnhancedTool(registration, traceCallPath, {
75
75
  validatedCall: { name: "trace_call_path", input },
76
76
  context,
77
77
  }));
78
- server.registerTool(traceNativeUiAction.name, toolRegistrationOptions(traceNativeUiAction), (input, context) => executeEnhancedTool(analysis, registration, traceNativeUiAction, {
78
+ server.registerTool(traceNativeUiAction.name, toolRegistrationOptions(traceNativeUiAction), (input, context) => executeEnhancedTool(registration, traceNativeUiAction, {
79
79
  validatedCall: { name: "trace_native_ui_action", input },
80
80
  context,
81
81
  }));
82
82
  };
83
- const executeEnhancedTool = async (analysis, registration, contract, request) => {
84
- const { validatedCall, context } = request;
85
- const name = validatedCall.name;
86
- const progress = mcpProgressReporter(context);
87
- await progress.report({
88
- phase: name,
89
- completed: 0,
90
- total: 1,
91
- message: "started",
92
- });
93
- const parsedInput = validatedCall.input;
94
- const parameters = jsonParameters(parsedInput);
95
- if (name === "analyze_function")
96
- return executeFunctionTool(analysis, registration, contract, {
97
- context,
98
- parameters,
83
+ const executeEnhancedTool = async (registration, contract, request) => {
84
+ const admitted = await registration.withAdmittedAnalysis(request.validatedCall.name, request.context.mcpReq.signal, async (admittedAnalysis) => {
85
+ const { validatedCall, context } = request;
86
+ const name = validatedCall.name;
87
+ const progress = mcpProgressReporter(context);
88
+ await progress.report({
89
+ phase: name,
90
+ completed: 0,
91
+ total: 1,
92
+ message: "started",
99
93
  });
100
- const services = new EnhancedTools({
101
- execute: (operation, operationParameters, executionOptions) => analysis.execute(operation, operationParameters, {
102
- ...executionOptions,
103
- progress,
104
- }),
105
- });
106
- const result = await logToolExecution(registration.logger, name, () => services.executeValidated(validatedCall, context.mcpReq.signal));
107
- await progress.report({
108
- phase: name,
109
- completed: 1,
110
- total: 1,
111
- message: result.ok ? "completed" : "failed",
112
- terminal: true,
113
- });
114
- if (result.ok) {
115
- const evidence = createWorkflowEvidence({
116
- target: registration.activeTarget?.(),
117
- operation: name,
118
- parameters,
119
- result: result.value,
120
- upstreamProfile: registration.analysisProfile?.(),
94
+ const parsedInput = validatedCall.input;
95
+ const parameters = jsonParameters(parsedInput);
96
+ if (name === "analyze_function")
97
+ return executeFunctionTool(admittedAnalysis, registration, contract, {
98
+ context,
99
+ parameters,
100
+ });
101
+ const services = new EnhancedTools({
102
+ execute: (operation, operationParameters, executionOptions) => admittedAnalysis.execute(operation, operationParameters, {
103
+ ...executionOptions,
104
+ progress,
105
+ }),
106
+ });
107
+ const result = await logToolExecution(registration.logger, name, () => services.executeValidated(validatedCall, context.mcpReq.signal));
108
+ await progress.report({
109
+ phase: name,
110
+ completed: 1,
111
+ total: 1,
112
+ message: result.ok ? "completed" : "failed",
113
+ terminal: true,
121
114
  });
122
- const recorded = registration.recordEvidence?.(evidence);
123
- if (recorded !== undefined && !recorded.ok)
124
- return registration.delivery.toCallToolResult(recorded, contract);
125
- if (name !== "trace_native_ui_action" &&
126
- registration.allowsSnapshotReplay?.(name) === true) {
127
- const workflowRecord = workflowSnapshotRecord(evidence, name);
128
- if (workflowRecord !== undefined) {
129
- const snapshot = registration.recordWorkflowSnapshot?.(workflowRecord);
130
- if (snapshot !== undefined && !snapshot.ok)
131
- return registration.delivery.toCallToolResult(snapshot, contract);
115
+ if (result.ok) {
116
+ const evidence = createWorkflowEvidence({
117
+ target: registration.activeTarget?.(),
118
+ operation: name,
119
+ parameters,
120
+ result: result.value,
121
+ upstreamProfile: registration.analysisProfile?.(),
122
+ });
123
+ const recorded = registration.recordEvidence?.(evidence);
124
+ if (recorded !== undefined && !recorded.ok)
125
+ return registration.delivery.toCallToolResult(recorded, contract);
126
+ if (name !== "trace_native_ui_action" &&
127
+ registration.allowsSnapshotReplay?.(name) === true) {
128
+ const workflowRecord = workflowSnapshotRecord(evidence, name);
129
+ if (workflowRecord !== undefined) {
130
+ const snapshot = registration.recordWorkflowSnapshot?.(workflowRecord);
131
+ if (snapshot !== undefined && !snapshot.ok)
132
+ return registration.delivery.toCallToolResult(snapshot, contract);
133
+ }
132
134
  }
135
+ const unknowns = recordWorkflowUnknowns({
136
+ name,
137
+ result: result.value,
138
+ evidenceId: evidence.evidence_id,
139
+ recordUnknown: registration.recordUnknown,
140
+ });
141
+ if (!unknowns.ok)
142
+ return registration.delivery.toCallToolResult(unknowns, contract);
143
+ return registration.delivery.toEvidenceToolResult(evidence, contract, recorded);
133
144
  }
134
- const unknowns = recordWorkflowUnknowns({
135
- name,
136
- result: result.value,
137
- evidenceId: evidence.evidence_id,
138
- recordUnknown: registration.recordUnknown,
139
- });
140
- if (!unknowns.ok)
141
- return registration.delivery.toCallToolResult(unknowns, contract);
142
- return registration.delivery.toEvidenceToolResult(evidence, contract, recorded);
143
- }
144
- return registration.delivery.toCallToolResult(result, contract);
145
+ return registration.delivery.toCallToolResult(result, contract);
146
+ });
147
+ return admitted.ok
148
+ ? admitted.value
149
+ : registration.delivery.toCallToolResult(admitted, contract);
145
150
  };
146
151
  const executeFunctionTool = async (analysis, registration, contract, request) => {
147
152
  const { context, parameters } = request;
@@ -5,56 +5,64 @@ import { logToolExecution } from "./toolLogging.js";
5
5
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
6
6
  import { createArtifactExtractionDestination } from "../application/artifacts/ArtifactExtractionDestination.js";
7
7
  /** Register provider-backed contracts that return atomic Evidence observations. */
8
- export const registerEvidenceTools = (server, analysis, contracts, options) => {
8
+ export const registerEvidenceTools = (server, contracts, options) => {
9
9
  for (const contract of contracts) {
10
10
  server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => {
11
- const progress = mcpProgressReporter(context);
12
- await progress.report({
13
- phase: contract.name,
14
- completed: 0,
15
- total: 1,
16
- message: "started",
17
- });
18
- const parameters = jsonObjectSchema.parse(input);
19
- const executionParameters = contract.name === "extract_artifact"
20
- ? {
21
- ...parameters,
22
- output_root: createArtifactExtractionDestination(),
11
+ const admitted = await options.withAdmittedAnalysis(contract.name, context.mcpReq.signal, async (admittedAnalysis) => {
12
+ const analysis = options.analysisForAdmission?.(admittedAnalysis) ??
13
+ admittedAnalysis;
14
+ const progress = mcpProgressReporter(context);
15
+ await progress.report({
16
+ phase: contract.name,
17
+ completed: 0,
18
+ total: 1,
19
+ message: "started",
20
+ });
21
+ const parameters = jsonObjectSchema.parse(input);
22
+ const executionParameters = contract.name === "extract_artifact"
23
+ ? {
24
+ ...parameters,
25
+ output_root: createArtifactExtractionDestination(),
26
+ }
27
+ : parameters;
28
+ const execution = await logToolExecution(options.logger, contract.name, () => analysis.execute(contract.name, executionParameters, {
29
+ signal: context.mcpReq.signal,
30
+ progress,
31
+ }));
32
+ await progress.report({
33
+ phase: contract.name,
34
+ completed: 1,
35
+ total: 1,
36
+ message: execution.ok ? "completed" : "failed",
37
+ terminal: true,
38
+ });
39
+ if (!execution.ok)
40
+ return server.delivery.toCallToolResult(execution, contract);
41
+ const sourceEvidence = options.sourceEvidence?.(contract.name, execution.value.result) ??
42
+ [];
43
+ const evidence = createEvidence(execution.value.subject ?? options.activeTarget?.(), execution.value.provider, {
44
+ operation: contract.name,
45
+ parameters,
46
+ result: execution.value.result,
47
+ ...(execution.value.analysisProfile === undefined
48
+ ? {}
49
+ : { analysisProfile: execution.value.analysisProfile }),
50
+ rawResult: execution.value.rawResult,
51
+ limitations: execution.value.limitations,
52
+ locations: execution.value.locations,
53
+ evidenceLinks: sourceEvidence.map(({ evidence_id: id }) => id),
54
+ });
55
+ for (const source of sourceEvidence) {
56
+ const sourceRecorded = options.recordEvidence?.(source);
57
+ if (sourceRecorded !== undefined && !sourceRecorded.ok)
58
+ return server.delivery.toCallToolResult(sourceRecorded, contract);
23
59
  }
24
- : parameters;
25
- const execution = await logToolExecution(options.logger, contract.name, () => analysis.execute(contract.name, executionParameters, {
26
- signal: context.mcpReq.signal,
27
- progress,
28
- }));
29
- await progress.report({
30
- phase: contract.name,
31
- completed: 1,
32
- total: 1,
33
- message: execution.ok ? "completed" : "failed",
34
- terminal: true,
35
- });
36
- if (!execution.ok)
37
- return server.delivery.toCallToolResult(execution, contract);
38
- const sourceEvidence = options.sourceEvidence?.(contract.name, execution.value.result) ?? [];
39
- const evidence = createEvidence(execution.value.subject ?? options.activeTarget?.(), execution.value.provider, {
40
- operation: contract.name,
41
- parameters,
42
- result: execution.value.result,
43
- ...(execution.value.analysisProfile === undefined
44
- ? {}
45
- : { analysisProfile: execution.value.analysisProfile }),
46
- rawResult: execution.value.rawResult,
47
- limitations: execution.value.limitations,
48
- locations: execution.value.locations,
49
- evidenceLinks: sourceEvidence.map(({ evidence_id: id }) => id),
60
+ const recorded = options.recordEvidence?.(evidence);
61
+ return server.delivery.toEvidenceToolResult(evidence, contract, recorded);
50
62
  });
51
- for (const source of sourceEvidence) {
52
- const sourceRecorded = options.recordEvidence?.(source);
53
- if (sourceRecorded !== undefined && !sourceRecorded.ok)
54
- return server.delivery.toCallToolResult(sourceRecorded, contract);
55
- }
56
- const recorded = options.recordEvidence?.(evidence);
57
- return server.delivery.toEvidenceToolResult(evidence, contract, recorded);
63
+ return admitted.ok
64
+ ? admitted.value
65
+ : server.delivery.toCallToolResult(admitted, contract);
58
66
  });
59
67
  }
60
68
  };
@@ -5,9 +5,9 @@ import { registerEvidenceTools } from "./registerEvidenceTools.js";
5
5
  import { runManagedProviderExecution } from "../composition/directAnalysis.js";
6
6
  import { isManagedToolName } from "../contracts/managed/managedToolContracts.js";
7
7
  /** Register execution-free managed PE/CLI inspection. */
8
- export const registerManagedTools = (server, analysis, options) => {
8
+ export const registerManagedTools = (server, options) => {
9
9
  let selectedManagedPath;
10
- const managedAnalysis = {
10
+ const analysisForAdmission = (analysis) => ({
11
11
  execute: async (operation, parameters, executionOptions) => {
12
12
  if (!isManagedToolName(operation))
13
13
  return analysis.execute(operation, parameters, executionOptions);
@@ -32,6 +32,9 @@ export const registerManagedTools = (server, analysis, options) => {
32
32
  selectedManagedPath = requestedPath;
33
33
  return execution;
34
34
  },
35
- };
36
- registerEvidenceTools(server, managedAnalysis, MANAGED_TOOL_CONTRACTS, options);
35
+ });
36
+ registerEvidenceTools(server, MANAGED_TOOL_CONTRACTS, {
37
+ ...options,
38
+ analysisForAdmission,
39
+ });
37
40
  };
@@ -5,40 +5,46 @@ import { mcpProgressReporter } from "./mcpProgress.js";
5
5
  import { logToolExecution } from "./toolLogging.js";
6
6
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
7
7
  /** Register direct bridge proxies, preserving MCP cancellation and typed errors. */
8
- export const registerOfficialTools = (server, analysis, options) => {
8
+ export const registerOfficialTools = (server, options) => {
9
9
  for (const contract of OFFICIAL_TOOL_CONTRACTS) {
10
- registerOfficialTool(server, analysis, contract, {
10
+ registerOfficialTool(server, contract, {
11
11
  logger: options.logger,
12
12
  activeTarget: options.activeTarget,
13
13
  recordEvidence: options.recordEvidence,
14
+ withAdmittedAnalysis: options.withAdmittedAnalysis,
14
15
  });
15
16
  }
16
17
  };
17
- const registerOfficialTool = (server, analysis, contract, registration) => {
18
+ const registerOfficialTool = (server, contract, registration) => {
18
19
  server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => {
19
- const arguments_ = jsonObjectSchema.parse(contract.inputSchema.parse(input));
20
- const progress = mcpProgressReporter(context);
21
- const result = await runOfficialOperation(analysis, contract, arguments_, {
22
- logger: registration.logger,
23
- signal: context.mcpReq.signal,
24
- progress,
20
+ const admitted = await registration.withAdmittedAnalysis(contract.name, context.mcpReq.signal, async (admittedAnalysis) => {
21
+ const arguments_ = jsonObjectSchema.parse(contract.inputSchema.parse(input));
22
+ const progress = mcpProgressReporter(context);
23
+ const result = await runOfficialOperation(admittedAnalysis, contract, arguments_, {
24
+ logger: registration.logger,
25
+ signal: context.mcpReq.signal,
26
+ progress,
27
+ });
28
+ if (!result.ok) {
29
+ return server.delivery.toCallToolResult(result, contract);
30
+ }
31
+ const evidence = createEvidence(result.value.subject ?? registration.activeTarget?.(), result.value.provider, {
32
+ operation: contract.name,
33
+ parameters: arguments_,
34
+ result: result.value.result,
35
+ ...(result.value.analysisProfile === undefined
36
+ ? {}
37
+ : { analysisProfile: result.value.analysisProfile }),
38
+ rawResult: result.value.rawResult,
39
+ limitations: result.value.limitations,
40
+ locations: result.value.locations,
41
+ });
42
+ const recorded = registration.recordEvidence?.(evidence);
43
+ return server.delivery.toEvidenceToolResult(evidence, contract, recorded);
25
44
  });
26
- if (!result.ok) {
27
- return server.delivery.toCallToolResult(result, contract);
28
- }
29
- const evidence = createEvidence(result.value.subject ?? registration.activeTarget?.(), result.value.provider, {
30
- operation: contract.name,
31
- parameters: arguments_,
32
- result: result.value.result,
33
- ...(result.value.analysisProfile === undefined
34
- ? {}
35
- : { analysisProfile: result.value.analysisProfile }),
36
- rawResult: result.value.rawResult,
37
- limitations: result.value.limitations,
38
- locations: result.value.locations,
39
- });
40
- const recorded = registration.recordEvidence?.(evidence);
41
- return server.delivery.toEvidenceToolResult(evidence, contract, recorded);
45
+ return admitted.ok
46
+ ? admitted.value
47
+ : server.delivery.toCallToolResult(admitted, contract);
42
48
  });
43
49
  };
44
50
  const runOfficialOperation = async (analysis, contract, arguments_, execution) => {
@@ -15,7 +15,7 @@ import { registerInvestigationTools } from "./registerInvestigationTools.js";
15
15
  import { registerProcessComparisonTool } from "./registerProcessComparisonTool.js";
16
16
  import { registerEvidenceTools, registerUnknownTools, } from "./registerSessionRecordTools.js";
17
17
  import { registerSessionStatusTool } from "./registerSessionStatusTool.js";
18
- import { sessionAvailabilityPolicy, } from "./sessionAvailabilityPolicy.js";
18
+ import { sessionAvailabilityPolicy } from "./sessionAvailabilityPolicy.js";
19
19
  import { logToolExecution } from "./toolLogging.js";
20
20
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
21
21
  const recordProcessResidualUnknowns = (session, evidence, residuals) => {
@@ -121,10 +121,16 @@ const registerContextTools = (server, session) => {
121
121
  const navigationContract = toolContract("get_navigation_context");
122
122
  const addressContract = toolContract("inspect_address_context");
123
123
  server.registerTool(navigationContract.name, toolRegistrationOptions(navigationContract), async (input, context) => {
124
- return server.delivery.toCallToolResult(await getNavigationContext(session, input, context.mcpReq.signal), navigationContract);
124
+ const admitted = await session.withAdmittedAnalysis(navigationContract.name, context.mcpReq.signal, async (analysis) => server.delivery.toCallToolResult(await getNavigationContext(analysis, input, context.mcpReq.signal), navigationContract));
125
+ return admitted.ok
126
+ ? admitted.value
127
+ : server.delivery.toCallToolResult(admitted, navigationContract);
125
128
  });
126
129
  server.registerTool(addressContract.name, toolRegistrationOptions(addressContract), async (input, context) => {
127
- return server.delivery.toCallToolResult(await inspectAddressContext(session, input, context.mcpReq.signal), addressContract);
130
+ const admitted = await session.withAdmittedAnalysis(addressContract.name, context.mcpReq.signal, async (analysis) => server.delivery.toCallToolResult(await inspectAddressContext(analysis, input, context.mcpReq.signal), addressContract));
131
+ return admitted.ok
132
+ ? admitted.value
133
+ : server.delivery.toCallToolResult(admitted, addressContract);
128
134
  });
129
135
  };
130
136
  export const registerSessionTools = (server, session, logger, options = {}) => {
@@ -1,5 +1,5 @@
1
1
  {
2
- "packageVersion": "6.2.0",
2
+ "packageVersion": "6.3.0",
3
3
  "platform": "win32",
4
4
  "architecture": "x64",
5
5
  "abiVersion": 1,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "rea-agents",
3
3
  "mcpName": "io.github.morluto/rea",
4
- "version": "6.2.0",
4
+ "version": "6.3.0",
5
5
  "description": "Reverse engineer anything from your terminal or agent with one CLI and MCP server.",
6
6
  "license": "MIT",
7
7
  "repository": {
@@ -88,7 +88,7 @@
88
88
  "prebuild": "npm run deps:check",
89
89
  "build": "node scripts/run-exclusive.mjs artifacts turbo run artifacts:skills --force",
90
90
  "precheck": "npm run deps:check",
91
- "check": "node scripts/run-exclusive.mjs artifacts turbo run typecheck lint format:check knip metadata:check",
91
+ "check": "node scripts/run-exclusive.mjs artifacts turbo run typecheck lint format:check knip metadata:check && npm run verify:architecture-guards",
92
92
  "precheck:fast": "npm run deps:check",
93
93
  "check:fast": "turbo run typecheck lint --output-logs=errors-only",
94
94
  "precheck:changed": "npm run deps:check",
@@ -98,7 +98,7 @@
98
98
  "precheck:pr": "npm run deps:check",
99
99
  "check:pr": "node scripts/run-exclusive.mjs artifacts turbo run typecheck lint format:check knip metadata:check test:run && npm run docs:check && npm run jscpd && npm run scan:todos",
100
100
  "precheck:ci": "npm run deps:check",
101
- "check:ci": "node scripts/run-exclusive.mjs artifacts turbo run typecheck lint format:check knip metadata:check jscpd scan:todos",
101
+ "check:ci": "node scripts/run-exclusive.mjs artifacts turbo run typecheck lint format:check knip metadata:check jscpd scan:todos && npm run verify:architecture-guards",
102
102
  "build:cached": "node scripts/check-dependency-install.mjs && node scripts/run-exclusive.mjs artifacts turbo run artifacts:skills",
103
103
  "format": "oxfmt .",
104
104
  "format:check": "oxfmt --check .",
@@ -144,6 +144,8 @@
144
144
  "verify:native-ui": "npm run build:cached && node scripts/verify-native-ui.mjs",
145
145
  "verify:keyed-archive": "npm run build:cached && node scripts/verify/apple/keyed-archive.mjs",
146
146
  "verify:macos-bundle": "npm run build:cached && node scripts/verify/apple/macos-bundle.mjs",
147
+ "verify:legacy-simulator": "npm run build:cached && node scripts/verify/apple/legacy-simulator.mjs",
148
+ "verify:architecture-guards": "node scripts/verify/architecture-guards.mjs",
147
149
  "verify:ghidra": "npm run build:cached && node scripts/verify-real-ghidra.mjs",
148
150
  "verify:ghidra:swift": "npm run build:cached && node scripts/verify-real-ghidra-swift.mjs",
149
151
  "verify:ida": "npm run build:cached && node scripts/verify-real-ida.mjs",
@@ -263,6 +265,7 @@
263
265
  "plist": "5.0.0",
264
266
  "semver": "7.8.5",
265
267
  "smol-toml": "1.9.0",
268
+ "stream-json": "3.7.0",
266
269
  "write-file-atomic": "7.0.0",
267
270
  "ws": "8.21.0",
268
271
  "zod": "4.4.3",
@@ -29,10 +29,10 @@ advertise retained references.
29
29
  When tools are absent or registration is stale:
30
30
 
31
31
  1. Diagnose without changing files. For Codex, run
32
- `npx -y rea-agents@latest doctor --client codex --json`. Substitute the current
32
+ `npx -y rea-agents@6.3.0 doctor --client codex --json`. Substitute the current
33
33
  supported client: `claude_code`, `claude_desktop`, `codex`, `cursor`,
34
34
  `gemini_cli`, `windsurf`, `devin`, `opencode`, `antigravity`, `copilot_cli`,
35
- `commandcode`, `vscode`, `grok_build`, or `grok_bot`. `grok_bot` has no local
35
+ `commandcode`, `vscode`, `grok_build`, `omp`, or `grok_bot`. `grok_bot` has no local
36
36
  file registration: doctor reports the Grok Bot chat step, and setup does not
37
37
  write `mcp.json`. If the client is unknown, use `doctor --json` and
38
38
  inspect its registration results before choosing a setup scope.
@@ -43,12 +43,12 @@ When tools are absent or registration is stale:
43
43
  that provider: static JavaScript inspection needs neither Hopper nor Ghidra,
44
44
  and Android inspection has separate bring-your-own JADX/Java prerequisites.
45
45
  3. For a configuration repair, prepare the read-only plan:
46
- `npx -y rea-agents@latest setup --client codex --dry-run --json`.
46
+ `npx -y rea-agents@6.3.0 setup --client codex --dry-run --json`.
47
47
  Use the current client's ID, show its exact proposed paths, backups, and
48
48
  changes, and obtain approval before setup writes configuration or installs
49
49
  Hopper. Setup normally installs the matching bundled skill too; include that
50
50
  replacement in the reviewed plan. After approval, apply the same scope with
51
- `npx -y rea-agents@latest setup --client codex --yes`. Add `--install-hopper`
51
+ `npx -y rea-agents@6.3.0 setup --client codex --yes`. Add `--install-hopper`
52
52
  only if that separate installation was needed and explicitly approved.
53
53
  4. Restart/reconnect the affected agent. Verify that REA tools actually appear
54
54
  in the session, then resume the original investigation. If they remain
@@ -63,7 +63,7 @@ with a version-pinned `rea-agents` package or continue through the CLI.
63
63
  A concrete CLI fallback for an operator-supplied JavaScript tree or ASAR is:
64
64
 
65
65
  ```bash
66
- npx -y rea-agents@latest analyze-javascript-application /absolute/path/to/app --json
66
+ npx -y rea-agents@6.3.0 analyze-javascript-application /absolute/path/to/app --json
67
67
  ```
68
68
 
69
69
  No MCP registration or native engine is required. Read the returned Evidence,
@@ -60,6 +60,15 @@ use inclusive ends and can contain gaps. Do not treat the enclosing span as code
60
60
  For packed targets, retain the original and separately derived artifact identities;
61
61
  decompiling an unpacking stub does not recover the unpacked program.
62
62
 
63
+ When reading Objective-C dispatch metadata, distinguish class implementation
64
+ methods from protocol requirements: class methods report null requirement
65
+ flags, while decoded protocol declarations retain required and optional facts.
66
+ Property attributes remain raw name/value tokens; use the property's
67
+ `atomicity` field for the decoded `N` marker or the default atomic behavior.
68
+ Null class/meta flags, ivar counts, atomicity, or read-only values mean the
69
+ selected provider did not establish that fact. Symbol names alone do not prove
70
+ that a class is a root class or has no ivars.
71
+
63
72
  ## Managed PE/CLI
64
73
 
65
74
  Start with `inspect_managed_artifact`. REA's canonical managed inspection is
@@ -1,2 +0,0 @@
1
- /** Preserve the explicit integrity admission choice without changing verification. */
2
- export const resolveArtifactIntegrityPolicy = (intent) => intent;
@@ -1,6 +0,0 @@
1
- /** Derive module coverage from the best available managed evidence source. */
2
- export const moduleCoverageState = (parsed) => parsed.artifact !== null && parsed.artifact.result.module !== null
3
- ? parsed.artifact.result.coverage.state
4
- : parsed.members !== null && parsed.members.result.module !== null
5
- ? parsed.members.result.coverage.state
6
- : (parsed.boundaries?.result.coverage.state ?? "complete");
@@ -1,6 +0,0 @@
1
- import { NATIVE_TOOL_CONTRACTS } from "../contracts/native/nativeToolContracts.js";
2
- import { registerEvidenceTools } from "./registerEvidenceTools.js";
3
- /** Register provider-neutral static inspection operations. */
4
- export const registerNativeTools = (server, analysis, options) => {
5
- registerEvidenceTools(server, analysis, NATIVE_TOOL_CONTRACTS, options);
6
- };