rea-agents 1.5.0 → 1.7.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 (172) hide show
  1. package/README.md +144 -58
  2. package/bridge/ghidra/ReaGhidraBridge.java +2075 -0
  3. package/bridge/hopper_bridge.py +13 -3
  4. package/dist/application/AbortablePromise.js +25 -0
  5. package/dist/application/AnalysisProvider.js +3 -0
  6. package/dist/application/AnalysisProviderEvaluation.js +60 -0
  7. package/dist/application/AnalysisProviderRegistry.js +228 -0
  8. package/dist/application/AnalysisSnapshotCache.js +41 -21
  9. package/dist/application/AnalysisSnapshotFiles.js +5 -6
  10. package/dist/application/BinarySession.js +229 -102
  11. package/dist/application/BrowserEvidence.js +87 -15
  12. package/dist/application/BrowserObservationService.js +65 -1
  13. package/dist/application/CapabilityInventory.js +7 -0
  14. package/dist/application/ClientConfigPath.js +33 -0
  15. package/dist/application/CompositeProvider.js +20 -8
  16. package/dist/application/CrossVersionInventory.js +16 -3
  17. package/dist/application/CrossVersionInvestigation.js +17 -62
  18. package/dist/application/CrossVersionInvestigationEvidence.js +64 -0
  19. package/dist/application/CrossVersionInvestigationReplay.js +170 -0
  20. package/dist/application/DirectAnalysis.js +49 -35
  21. package/dist/application/Doctor.js +70 -13
  22. package/dist/application/ElectronEvidence.js +35 -0
  23. package/dist/application/ElectronObservationPort.js +1 -0
  24. package/dist/application/ElectronObservationService.js +46 -0
  25. package/dist/application/EnhancedTools.js +1 -1
  26. package/dist/application/EvidenceLedger.js +5 -2
  27. package/dist/application/InvestigationProviders.js +11 -0
  28. package/dist/application/JavaScriptArtifactAnalysis.js +299 -0
  29. package/dist/application/JavaScriptArtifactAnalysisTypes.js +1 -0
  30. package/dist/application/JavaScriptArtifactFiles.js +231 -0
  31. package/dist/application/JavaScriptArtifactGraphAccumulator.js +54 -0
  32. package/dist/application/JavaScriptArtifactGraphBuilder.js +101 -0
  33. package/dist/application/JavaScriptArtifactGraphContext.js +205 -0
  34. package/dist/application/JavaScriptArtifactGraphDocuments.js +108 -0
  35. package/dist/application/JavaScriptArtifactGraphEvidence.js +89 -0
  36. package/dist/application/JavaScriptArtifactGraphFindings.js +271 -0
  37. package/dist/application/JavaScriptArtifactGraphStructure.js +409 -0
  38. package/dist/application/JavaScriptArtifactReconstruction.js +74 -0
  39. package/dist/application/JavaScriptArtifactReconstructionInput.js +99 -0
  40. package/dist/application/MacHopper.js +20 -4
  41. package/dist/application/PermissionAuthority.js +30 -0
  42. package/dist/application/ProcessCaptureLifecycle.js +2 -6
  43. package/dist/application/ProcessHarness.js +13 -7
  44. package/dist/application/ProcessSampling.js +59 -8
  45. package/dist/application/ProjectPermissionStore.js +1 -0
  46. package/dist/application/ReferenceSourceImport.js +13 -16
  47. package/dist/application/SessionProviderRouter.js +219 -0
  48. package/dist/application/Setup.js +153 -70
  49. package/dist/application/SetupClients.js +8 -5
  50. package/dist/application/SetupInstallFailure.js +24 -0
  51. package/dist/application/SetupPlan.js +19 -8
  52. package/dist/application/SetupSkill.js +20 -3
  53. package/dist/application/SupportedClients.js +40 -16
  54. package/dist/application/Uninstall.js +20 -7
  55. package/dist/application/Upgrade.js +15 -4
  56. package/dist/application/runtime.js +9 -6
  57. package/dist/artifacts/AsarArtifactReader.js +23 -3
  58. package/dist/browser/CdpBrowserProvider.js +158 -53
  59. package/dist/browser/CdpCaptureCompleteness.js +90 -0
  60. package/dist/browser/CdpCaptureDocuments.js +180 -21
  61. package/dist/browser/CdpCaptureEvents.js +342 -43
  62. package/dist/browser/CdpCaptureValues.js +5 -7
  63. package/dist/browser/CdpConnection.js +47 -24
  64. package/dist/browser/CdpElectronInspection.js +330 -0
  65. package/dist/browser/CdpElectronProvider.js +136 -0
  66. package/dist/browser/CdpEndpoint.js +77 -5
  67. package/dist/browser/CdpObservationSession.js +301 -0
  68. package/dist/browser/CdpPageCapture.js +159 -56
  69. package/dist/browser/CdpSafeMetadata.js +203 -0
  70. package/dist/browser/CdpScreenshot.js +101 -0
  71. package/dist/browser/CdpTargetSession.js +47 -0
  72. package/dist/browser/CdpWebMcpDiscovery.js +242 -0
  73. package/dist/browser/ElectronFileScope.js +50 -0
  74. package/dist/browser/PngVisualDiff.js +177 -0
  75. package/dist/browser/SensitiveTextCapture.js +25 -0
  76. package/dist/browser/WebSourceMapFetcher.js +357 -0
  77. package/dist/catalogIdentity.js +2 -33
  78. package/dist/cli.js +62 -34
  79. package/dist/cliBrowserAdvancedCommands.js +170 -0
  80. package/dist/cliBrowserCommands.js +180 -3
  81. package/dist/cliCommandNames.js +43 -0
  82. package/dist/cliElectronCommands.js +115 -0
  83. package/dist/cliEvidenceCommands.js +4 -3
  84. package/dist/cliInvestigationCommands.js +17 -9
  85. package/dist/cliPolicyCommands.js +49 -3
  86. package/dist/cliProcessCommands.js +3 -2
  87. package/dist/config.js +58 -7
  88. package/dist/contracts/browserToolContracts.js +304 -3
  89. package/dist/contracts/electronToolContracts.js +73 -0
  90. package/dist/contracts/enhancedInputs.js +2 -2
  91. package/dist/contracts/providerSelection.js +28 -0
  92. package/dist/contracts/sessionLifecycleInputs.js +2 -0
  93. package/dist/contracts/toolContracts.js +24 -20
  94. package/dist/contracts/toolOutputSchemas.js +117 -22
  95. package/dist/doctorRuntime.js +6 -0
  96. package/dist/domain/analysisProfile.js +78 -0
  97. package/dist/domain/analysisSnapshot.js +92 -46
  98. package/dist/domain/artifactGraph.js +1 -0
  99. package/dist/domain/binaryTarget.js +4 -29
  100. package/dist/domain/browserCompleteness.js +101 -0
  101. package/dist/domain/browserObservation.js +240 -14
  102. package/dist/domain/browserSession.js +63 -0
  103. package/dist/domain/electronObservation.js +162 -0
  104. package/dist/domain/errors.js +81 -6
  105. package/dist/domain/evidence.js +44 -5
  106. package/dist/domain/evidenceBundle.js +9 -7
  107. package/dist/domain/functionComparison.js +9 -3
  108. package/dist/domain/functionComparisonNormalization.js +37 -0
  109. package/dist/domain/functionDossierEvidence.js +4 -1
  110. package/dist/domain/hopperValues.js +66 -9
  111. package/dist/domain/investigationWorkspace.js +6 -1
  112. package/dist/domain/javascriptApplicationEvidenceSchemas.js +361 -0
  113. package/dist/domain/javascriptApplicationGraph.js +281 -0
  114. package/dist/domain/javascriptApplicationGraphSchemas.js +132 -0
  115. package/dist/domain/javascriptAstFingerprint.js +143 -0
  116. package/dist/domain/javascriptStaticAnalysis.js +358 -0
  117. package/dist/domain/javascriptStaticAnalysisHelpers.js +264 -0
  118. package/dist/domain/javascriptStaticAnalysisState.js +17 -0
  119. package/dist/domain/javascriptStaticAnalysisTypes.js +1 -0
  120. package/dist/domain/jsonShape.js +125 -0
  121. package/dist/domain/referenceSourceGraph.js +3 -1
  122. package/dist/domain/webBundleAnalysis.js +195 -0
  123. package/dist/domain/webBundleAnalyzer.js +423 -0
  124. package/dist/domain/webCaptureDiff.js +184 -0
  125. package/dist/domain/webContentArtifact.js +47 -0
  126. package/dist/domain/webInventory.js +61 -0
  127. package/dist/domain/webMcpDiscovery.js +68 -0
  128. package/dist/domain/webScreenshot.js +114 -0
  129. package/dist/generatedPackageMetadata.js +2 -2
  130. package/dist/ghidra/GhidraAnalysisProfile.js +37 -0
  131. package/dist/ghidra/GhidraClient.js +400 -0
  132. package/dist/ghidra/GhidraClientTypes.js +1 -0
  133. package/dist/ghidra/GhidraDefaults.js +20 -0
  134. package/dist/ghidra/GhidraDiagnostics.js +43 -0
  135. package/dist/ghidra/GhidraDoctor.js +59 -0
  136. package/dist/ghidra/GhidraFunctionValues.js +264 -0
  137. package/dist/ghidra/GhidraInstallation.js +239 -0
  138. package/dist/ghidra/GhidraInventoryValues.js +217 -0
  139. package/dist/ghidra/GhidraLauncher.js +139 -0
  140. package/dist/ghidra/GhidraProvider.js +360 -0
  141. package/dist/ghidra/GhidraRequestQueue.js +98 -0
  142. package/dist/ghidra/GhidraResponseBuffer.js +31 -0
  143. package/dist/ghidra/GhidraResponseRouter.js +24 -0
  144. package/dist/ghidra/GhidraSessionError.js +39 -0
  145. package/dist/ghidra/GhidraSessionValues.js +62 -0
  146. package/dist/ghidra/GhidraSocketConnection.js +46 -0
  147. package/dist/ghidra/protocol.js +69 -0
  148. package/dist/hopper/BridgeLauncher.js +21 -57
  149. package/dist/hopper/HopperAnalysisProfile.js +106 -0
  150. package/dist/hopper/HopperClient.js +197 -165
  151. package/dist/hopper/HopperProvider.js +105 -8
  152. package/dist/hopper/HopperSessionValues.js +27 -0
  153. package/dist/hopper/HopperSocketConnection.js +31 -0
  154. package/dist/main.js +36 -31
  155. package/dist/native/NativeMacOSProvider.js +6 -3
  156. package/dist/native/NativeMachoInspection.js +21 -6
  157. package/dist/process/PendingOperations.js +59 -0
  158. package/dist/process/PrivateRuntimeRoot.js +33 -0
  159. package/dist/{application → process}/ProcessOwnership.js +40 -20
  160. package/dist/process/ProviderDeadline.js +95 -0
  161. package/dist/process/ProviderProcess.js +275 -0
  162. package/dist/server/createServer.js +8 -0
  163. package/dist/server/promptCompletion.js +9 -3
  164. package/dist/server/registerBrowserTools.js +61 -2
  165. package/dist/server/registerElectronTools.js +36 -0
  166. package/dist/server/registerEnhancedTools.js +9 -6
  167. package/dist/server/registerInvestigationTools.js +11 -12
  168. package/dist/server/registerOfficialTools.js +3 -0
  169. package/dist/server/registerSessionTools.js +7 -1
  170. package/package.json +12 -6
  171. package/scripts/rea.mjs +37 -3
  172. package/skills/rea-analysis/SKILL.md +19 -9
package/scripts/rea.mjs CHANGED
@@ -1,16 +1,29 @@
1
1
  #!/usr/bin/env node
2
2
 
3
+ import { access } from "node:fs/promises";
4
+ import { dirname, resolve } from "node:path";
5
+ import { fileURLToPath } from "node:url";
6
+
3
7
  // Route production MCP before importing Incur. Incur owns registration helpers
4
- // such as `mcp add`, while only dist/main.js may serve the 70-tool stdio server.
8
+ // such as `mcp add`, while only dist/main.js may serve the 78-tool stdio server.
5
9
  const args = process.argv.slice(2);
6
10
  const { default: packageJson } = await import("../package.json", {
7
11
  with: { type: "json" },
8
12
  });
9
13
  process.env.REA_PACKAGE_VERSION = packageJson.version;
10
14
  const isMcpMode =
11
- args[0] === "--mcp" || (args.length === 1 && args[0] === "mcp");
15
+ args.length === 1 && (args[0] === "--mcp" || args[0] === "mcp");
16
+ const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), "..");
17
+ const runtimeFiles = isMcpMode
18
+ ? ["dist/main.js"]
19
+ : ["dist/cli.js", "dist/cliOutput.js"];
12
20
 
13
- if (isMcpMode) {
21
+ if (!(await compiledRuntimeExists(runtimeFiles))) {
22
+ process.stderr.write(
23
+ `REA's compiled runtime is missing. Run \`npm ci\` in ${packageRoot} to install dependencies and build REA, then restart it. If this is an installed package, reinstall rea-agents.\n`,
24
+ );
25
+ process.exitCode = 1;
26
+ } else if (isMcpMode) {
14
27
  const { runEntrypoint } = await import("../dist/main.js");
15
28
  await runEntrypoint();
16
29
  } else {
@@ -20,3 +33,24 @@ if (isMcpMode) {
20
33
  stdout: (output) => process.stdout.write(sanitizeCliOutput(output)),
21
34
  });
22
35
  }
36
+
37
+ async function compiledRuntimeExists(paths) {
38
+ for (const path of paths) {
39
+ try {
40
+ await access(resolve(packageRoot, path));
41
+ } catch (cause) {
42
+ if (isMissing(cause)) return false;
43
+ throw cause;
44
+ }
45
+ }
46
+ return true;
47
+ }
48
+
49
+ function isMissing(cause) {
50
+ return (
51
+ typeof cause === "object" &&
52
+ cause !== null &&
53
+ "code" in cause &&
54
+ cause.code === "ENOENT"
55
+ );
56
+ }
@@ -2,16 +2,18 @@
2
2
  name: rea-analysis
3
3
  description: Reverse engineer apps and websites with REA. Explore how features work, then build a version tailored to your project.
4
4
  metadata:
5
- version: "13"
6
- tool_count: 70
5
+ version: "14"
6
+ tool_count: 78
7
7
  ---
8
8
 
9
9
  # REA
10
10
 
11
11
  Use REA when the user wants to understand how an app or feature works, compare app versions, decompile code, or build a similar feature.
12
12
 
13
- For a website already open in a user-owned Chrome-family browser, use
14
- `list_browser_targets` and `inspect_web_page` instead of opening a binary. Ask
13
+ For a website already open in a user-owned Chrome-family browser, start with
14
+ `list_browser_targets` and `inspect_web_page` instead of opening a binary. Use
15
+ `analyze_web_bundle`, `observe_web_session`, `discover_webmcp_tools`, capture
16
+ comparison, or screenshot tools only for the corresponding investigation. Ask
15
17
  the user to approve the exact page origins and loopback CDP endpoint before the
16
18
  first call. Browser observation is disabled unless the operator configured
17
19
  `REA_BROWSER_OBSERVE_ENABLED`, `REA_BROWSER_CDP_ENDPOINTS_JSON`, and
@@ -19,11 +21,19 @@ first call. Browser observation is disabled unless the operator configured
19
21
 
20
22
  Browser inspection is passive. Never claim that it clicked, navigated,
21
23
  evaluated page JavaScript, captured prior activity, or contained the page's
22
- network. Query values, headers, bodies, cookies, storage values, console values,
23
- and WebSocket payloads are deliberately absent. Request script sources or
24
- storage key names only when the user separately approves those more sensitive
25
- outputs. Treat truncation and attach-window coverage as explicit limitations,
26
- and cite the returned Evidence v2 IDs.
24
+ network. Query values, credentials, cookies, authorization headers, storage
25
+ values, and raw WebSocket or JSON values are deliberately absent. Accessibility
26
+ text, bounded redacted console primitives, value-free JSON/WebSocket shapes,
27
+ script sources, storage key names, source-map fetches, and screenshot pixels
28
+ each require their documented independent opt-in or approval. Treat truncation,
29
+ policy filtering, and attach-window coverage as explicit limitations, and cite
30
+ the returned Evidence v2 IDs. WebMCP declarations are page-declared untrusted;
31
+ REA inventories them but never invokes them.
32
+
33
+ Electron `file://` pages use `list_electron_targets` and
34
+ `inspect_electron_page` with a separate loopback endpoint and canonical
35
+ filesystem-root authority. Never claim that Electron inspection invoked IPC,
36
+ evaluated renderer JavaScript, navigated, or escaped an approved root.
27
37
 
28
38
  ## Understand the request
29
39