rea-agents 2.4.0 → 3.0.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 (231) hide show
  1. package/README.md +91 -19
  2. package/bridge/ghidra/ReaGhidraBridge.java +524 -4
  3. package/bridge/hopper_bridge.py +313 -28
  4. package/dist/application/AnalysisClientCleanup.js +14 -0
  5. package/dist/application/AnalysisContextQueries.js +130 -0
  6. package/dist/application/AnalysisSnapshotCache.js +4 -2
  7. package/dist/application/ApplicationWorkflowEvidenceResolver.js +31 -13
  8. package/dist/application/ArtifactInventory/scanCanonical.js +1 -1
  9. package/dist/application/BinarySession.js +20 -8
  10. package/dist/application/BinarySessionComposition.js +21 -0
  11. package/dist/application/BinarySessionRecords.js +79 -9
  12. package/dist/application/BinarySessionStatus.js +31 -1
  13. package/dist/application/BrowserEvidence.js +14 -0
  14. package/dist/application/BrowserScenarioCapturePort.js +1 -0
  15. package/dist/application/BrowserScenarioCaptureService.js +53 -0
  16. package/dist/application/BrowserScenarioEvidence.js +40 -0
  17. package/dist/application/CallPathTracing.js +160 -0
  18. package/dist/application/CapabilityInventory.js +84 -14
  19. package/dist/application/ClientRegistrationStatus.js +4 -1
  20. package/dist/application/CompositeProvider.js +10 -1
  21. package/dist/application/DirectAnalysis.js +13 -4
  22. package/dist/application/EnhancedLiteralTracing.js +118 -0
  23. package/dist/application/EnhancedTools.js +71 -127
  24. package/dist/application/EvidenceLedger.js +45 -16
  25. package/dist/application/JavaScriptApplicationWorkflowEvidence.js +13 -0
  26. package/dist/application/JavaScriptApplicationWorkflowService.js +27 -1
  27. package/dist/application/JavaScriptArtifactAnalysis.js +13 -4
  28. package/dist/application/JavaScriptRuntimeObservationEvidence.js +34 -0
  29. package/dist/application/JavaScriptRuntimeObservationPort.js +1 -0
  30. package/dist/application/JavaScriptRuntimeObservationService.js +46 -0
  31. package/dist/application/JavaScriptSemanticGraphAsyncProjection.js +147 -0
  32. package/dist/application/JavaScriptSemanticGraphBuilder.js +34 -6
  33. package/dist/application/JavaScriptSemanticGraphChildProcessProjection.js +156 -0
  34. package/dist/application/JavaScriptSemanticGraphConstruction.js +2 -2
  35. package/dist/application/JavaScriptSemanticGraphDataProjection.js +203 -0
  36. package/dist/application/JavaScriptSemanticGraphFingerprintProjection.js +25 -0
  37. package/dist/application/JavaScriptSemanticGraphFlowProjection.js +129 -8
  38. package/dist/application/JavaScriptSemanticGraphObjectProjection.js +81 -0
  39. package/dist/application/JavaScriptSemanticGraphProjection.js +14 -7
  40. package/dist/application/JavaScriptSemanticGraphResourceProjection.js +59 -0
  41. package/dist/application/JavaScriptSemanticGraphValueProjection.js +77 -0
  42. package/dist/application/LazyAnalysisProvider.js +77 -0
  43. package/dist/application/LoopbackReplay.js +1 -1
  44. package/dist/application/NativeApiInspection.js +80 -0
  45. package/dist/application/ProcessReactiveEffects.js +6 -0
  46. package/dist/application/ProcessReactiveHarness.js +16 -1
  47. package/dist/application/ProjectPermissionStore.js +1 -0
  48. package/dist/application/ReconstructionObligationAuthority.js +72 -0
  49. package/dist/application/ReconstructionObligationCandidates.js +265 -0
  50. package/dist/application/ReconstructionObligationLedgerDiagnostics.js +47 -0
  51. package/dist/application/ReconstructionObligationLedgerEvaluation.js +263 -0
  52. package/dist/application/ReconstructionObligationLedgerProjection.js +86 -0
  53. package/dist/application/ReconstructionObligationLedgerService.js +72 -0
  54. package/dist/application/ReconstructionObligationOriginalCases.js +33 -0
  55. package/dist/application/ReconstructionObligationPolicies.js +132 -0
  56. package/dist/application/ReconstructionReadinessService.js +48 -0
  57. package/dist/application/SessionProviderRouter.js +6 -6
  58. package/dist/application/SetupClientConfiguration.js +4 -2
  59. package/dist/application/runtime.js +26 -9
  60. package/dist/artifacts/ArtifactProvider.js +87 -22
  61. package/dist/browser/BrowserScenarioSecrets.js +53 -0
  62. package/dist/browser/BrowserScenarioSessionPort.js +1 -0
  63. package/dist/browser/CdpBrowserProvider.js +2 -2
  64. package/dist/browser/CdpCaptureDocuments.js +57 -0
  65. package/dist/browser/CdpCaptureStorage.js +71 -29
  66. package/dist/browser/CdpCaptureStorageFingerprints.js +328 -0
  67. package/dist/browser/CdpEndpoint.js +8 -6
  68. package/dist/browser/CdpPageCapture.js +2 -0
  69. package/dist/browser/JavaScriptRuntimeScope.js +38 -0
  70. package/dist/browser/PlaywrightBrowserScenarioProvider.js +259 -0
  71. package/dist/browser/PlaywrightExecutionBoundary.js +42 -0
  72. package/dist/browser/PlaywrightScenarioActions.js +62 -0
  73. package/dist/browser/PlaywrightScenarioArtifacts.js +238 -0
  74. package/dist/browser/PlaywrightScenarioBrowser.js +144 -0
  75. package/dist/browser/PlaywrightScenarioEvents.js +301 -0
  76. package/dist/browser/PlaywrightScenarioSession.js +300 -0
  77. package/dist/browser/V8InspectorCaptureProjection.js +110 -0
  78. package/dist/browser/V8InspectorEndpoint.js +72 -0
  79. package/dist/browser/V8InspectorProvider.js +267 -0
  80. package/dist/catalogIdentity.js +11 -3
  81. package/dist/cli/artifactCommands.js +44 -3
  82. package/dist/cli/coreAnalysisCommands.js +78 -0
  83. package/dist/cli.js +4 -0
  84. package/dist/cliApplicationCommands.js +30 -2
  85. package/dist/cliBrowserAdvancedCommands.js +17 -5
  86. package/dist/cliBrowserCommands.js +1 -0
  87. package/dist/cliBrowserScenarioCommands.js +43 -0
  88. package/dist/cliCommandNames.js +9 -0
  89. package/dist/cliJavaScriptRuntimeCommands.js +164 -0
  90. package/dist/cliObservationOptions.js +4 -0
  91. package/dist/cliPolicyCommands.js +1 -0
  92. package/dist/config/environment.js +12 -0
  93. package/dist/config/parseConfig.js +88 -17
  94. package/dist/contracts/analysisSearchContract.js +14 -0
  95. package/dist/contracts/applicationToolContracts.js +86 -2
  96. package/dist/contracts/applicationWorkflowInputContracts.js +18 -0
  97. package/dist/contracts/artifactToolContracts.js +29 -2
  98. package/dist/contracts/browserProviderToolContracts.js +7 -0
  99. package/dist/contracts/browserScenarioToolContracts.js +81 -0
  100. package/dist/contracts/browserToolContracts.js +88 -98
  101. package/dist/contracts/enhancedInputs.js +35 -6
  102. package/dist/contracts/functionInstructionContract.js +8 -0
  103. package/dist/contracts/functionWorkflowToolContracts.js +30 -0
  104. package/dist/contracts/hopperMemoryContracts.js +22 -0
  105. package/dist/contracts/javascriptApplicationWorkflowExamples.js +42 -0
  106. package/dist/contracts/javascriptRuntimeObservationToolContracts.js +58 -0
  107. package/dist/contracts/promptContracts.js +14 -15
  108. package/dist/contracts/reconstructionReadinessExample.js +436 -0
  109. package/dist/contracts/toolContractExamples.js +8 -0
  110. package/dist/contracts/toolContractTypes.js +1 -0
  111. package/dist/contracts/toolContracts.js +34 -25
  112. package/dist/contracts/toolEffects.js +25 -0
  113. package/dist/contracts/toolOutputSchemaGroups.js +120 -30
  114. package/dist/contracts/toolOutputSchemaPrimitives.js +37 -0
  115. package/dist/domain/analysisErrorPresentation.js +8 -2
  116. package/dist/domain/analysisErrorProjection.js +9 -0
  117. package/dist/domain/artifactInspection.js +347 -0
  118. package/dist/domain/browserCaptureComparison.js +82 -0
  119. package/dist/domain/browserObservation.js +8 -1
  120. package/dist/domain/browserObservationErrors.js +1 -0
  121. package/dist/domain/browserObservationSchemas.js +26 -0
  122. package/dist/domain/browserScenario.js +165 -0
  123. package/dist/domain/browserScenarioCapture.js +57 -0
  124. package/dist/domain/browserScenarioCaptureValues.js +204 -0
  125. package/dist/domain/browserScenarioDiff.js +324 -0
  126. package/dist/domain/browserScenarioDiffValues.js +157 -0
  127. package/dist/domain/browserScenarioNormalization.js +45 -0
  128. package/dist/domain/browserScenarioValues.js +372 -0
  129. package/dist/domain/bytecodeProvider.js +179 -0
  130. package/dist/domain/conformancePackage.js +169 -0
  131. package/dist/domain/conformanceReplay.js +104 -0
  132. package/dist/domain/conformanceTrustGate.js +193 -0
  133. package/dist/domain/customProtocolCapture.js +137 -0
  134. package/dist/domain/eventProcessTree.js +214 -0
  135. package/dist/domain/evidenceBundle.js +47 -0
  136. package/dist/domain/hopperStartupFailure.js +1 -1
  137. package/dist/domain/hopperValues.js +14 -1
  138. package/dist/domain/inputIssueProjection.js +7 -1
  139. package/dist/domain/javascriptRuntimeObservation.js +170 -0
  140. package/dist/domain/javascriptRuntimeReconciliationParsing.js +120 -2
  141. package/dist/domain/javascriptRuntimeReconciliationResult.js +3 -3
  142. package/dist/domain/javascriptRuntimeReconciliationRuntime.js +2 -2
  143. package/dist/domain/javascriptRuntimeReconciliationSchemas.js +1 -1
  144. package/dist/domain/javascriptSemanticAnalysis.js +13 -16
  145. package/dist/domain/javascriptSemanticAsyncEffects.js +253 -0
  146. package/dist/domain/javascriptSemanticChildProcesses.js +237 -0
  147. package/dist/domain/javascriptSemanticDataEffectHelpers.js +125 -0
  148. package/dist/domain/javascriptSemanticDataEffects.js +284 -0
  149. package/dist/domain/javascriptSemanticDerivedAnalysis.js +41 -0
  150. package/dist/domain/javascriptSemanticFingerprints.js +174 -0
  151. package/dist/domain/javascriptSemanticIr.js +21 -1
  152. package/dist/domain/javascriptSemanticObjects.js +115 -0
  153. package/dist/domain/javascriptSemanticPromises.js +290 -0
  154. package/dist/domain/javascriptSemanticResources.js +136 -0
  155. package/dist/domain/javascriptSourceParser.js +15 -0
  156. package/dist/domain/javascriptStaticAnalysis.js +12 -15
  157. package/dist/domain/javascriptStaticAnalysisBundler.js +38 -0
  158. package/dist/domain/javascriptStaticAnalysisCalls.js +23 -1
  159. package/dist/domain/javascriptStaticAnalysisHelpers.js +8 -0
  160. package/dist/domain/mobileApplicationInvestigation.js +159 -0
  161. package/dist/domain/nativeApiBoundary.js +130 -0
  162. package/dist/domain/objcSwiftMetadata.js +150 -0
  163. package/dist/domain/packageAnalysis.js +123 -0
  164. package/dist/domain/peInspection.js +196 -0
  165. package/dist/domain/processCapture.js +8 -2
  166. package/dist/domain/processReactiveScenario.js +1 -0
  167. package/dist/domain/processReactiveTransition.js +9 -4
  168. package/dist/domain/protocolCapture.js +243 -0
  169. package/dist/domain/providerCleanupError.js +11 -0
  170. package/dist/domain/reconstructionObligationLedgerSchemas.js +278 -0
  171. package/dist/domain/reconstructionReadiness.js +121 -0
  172. package/dist/domain/reconstructionReadinessFindingHelpers.js +17 -0
  173. package/dist/domain/reconstructionReadinessIntegrityFindings.js +118 -0
  174. package/dist/domain/reconstructionReadinessJourneyFindings.js +193 -0
  175. package/dist/domain/reconstructionReadinessSchemas.js +240 -0
  176. package/dist/domain/sourceToBundleComparison.js +335 -0
  177. package/dist/domain/sourceToBundleComparisonSchemas.js +133 -0
  178. package/dist/domain/sourceToBundleSignals.js +202 -0
  179. package/dist/domain/webCaptureDiff.js +141 -27
  180. package/dist/domain/webScreenshot.js +1 -1
  181. package/dist/dotnet/ManagedStaticProvider.js +34 -5
  182. package/dist/generatedMcpToolCatalog.js +37 -0
  183. package/dist/generatedPackageMetadata.js +4 -4
  184. package/dist/ghidra/GhidraDefaults.js +1 -1
  185. package/dist/ghidra/GhidraFunctionValues.js +40 -2
  186. package/dist/ghidra/GhidraProviderCapabilities.js +47 -38
  187. package/dist/hopper/HopperCleanup.js +158 -0
  188. package/dist/hopper/HopperClient.js +93 -99
  189. package/dist/hopper/HopperProvider.js +61 -30
  190. package/dist/hopper/HopperRequestQueue.js +215 -0
  191. package/dist/hopper/HopperResponseStream.js +46 -0
  192. package/dist/hopper/protocol.js +63 -20
  193. package/dist/main/transport.js +24 -27
  194. package/dist/main.js +14 -6
  195. package/dist/mcpDoctor.js +27 -4
  196. package/dist/mcpStartupPolicy.js +14 -0
  197. package/dist/process/ProcessCommandIdentity.js +19 -0
  198. package/dist/process/ProcessOwnership.js +11 -8
  199. package/dist/server/DynamicToolAvailability.js +70 -0
  200. package/dist/server/LazyToolCatalog.js +134 -0
  201. package/dist/server/createServer.js +92 -154
  202. package/dist/server/hydrateServerTools.js +191 -0
  203. package/dist/server/lifecycleProgress.js +10 -0
  204. package/dist/server/permissionFailure.js +12 -0
  205. package/dist/server/registerApplicationTools/compareSourceToBundle.js +35 -0
  206. package/dist/server/registerApplicationTools/helpers.js +11 -7
  207. package/dist/server/registerApplicationTools/obligationLedger.js +27 -0
  208. package/dist/server/registerApplicationTools/readiness.js +55 -0
  209. package/dist/server/registerApplicationTools.js +6 -0
  210. package/dist/server/registerArtifactTools.js +9 -1
  211. package/dist/server/registerBrowserScenarioTool.js +25 -0
  212. package/dist/server/registerBrowserTools.js +2 -2
  213. package/dist/server/registerCloseLifecycleTool.js +57 -0
  214. package/dist/server/registerEnhancedTools.js +28 -7
  215. package/dist/server/registerEvidenceResources.js +54 -101
  216. package/dist/server/registerEvidenceTools.js +9 -2
  217. package/dist/server/registerInvestigationTools.js +1 -2
  218. package/dist/server/registerJavaScriptApplicationGraphResource.js +0 -4
  219. package/dist/server/registerJavaScriptRuntimeObservationTools.js +37 -0
  220. package/dist/server/registerReconstructionObligationLedgerResource.js +32 -0
  221. package/dist/server/registerReconstructionReadinessResource.js +32 -0
  222. package/dist/server/registerSessionRecordTools.js +82 -12
  223. package/dist/server/registerSessionStatusTool.js +11 -8
  224. package/dist/server/registerSessionTools.js +32 -58
  225. package/dist/server/sessionAvailabilityPolicy.js +10 -8
  226. package/dist/server/toolRegistrationOptions.js +21 -6
  227. package/dist/server/toolResult.js +12 -0
  228. package/package.json +28 -11
  229. package/scripts/package-runner-bootstrap.mjs +72 -0
  230. package/scripts/rea.mjs +11 -1
  231. package/skills/reverse-engineer-anything/SKILL.md +10 -3
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rea-agents",
3
- "version": "2.4.0",
3
+ "version": "3.0.0",
4
4
  "description": "Reverse engineer anything from your terminal or agent with one CLI and MCP server.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -43,6 +43,7 @@
43
43
  "bridge/hopper_bridge.py",
44
44
  "bridge/ghidra/ReaGhidraBridge.java",
45
45
  "scripts/rea.mjs",
46
+ "scripts/package-runner-bootstrap.mjs",
46
47
  "scripts/hopper-demo-x11.py",
47
48
  "scripts/prepack.mjs",
48
49
  "scripts/prepare.mjs",
@@ -54,12 +55,16 @@
54
55
  "deps:check": "node scripts/check-dependency-install.mjs",
55
56
  "metadata:generate": "node scripts/generate-package-metadata.mjs",
56
57
  "metadata:check": "node scripts/generate-package-metadata.mjs --check",
58
+ "mcp-catalog:generate": "npm run build:cached && node scripts/generate-mcp-tool-catalog.mjs",
59
+ "mcp-catalog:check": "node scripts/generate-mcp-tool-catalog.mjs --check",
57
60
  "prebuild": "npm run deps:check && npm run metadata:check",
58
61
  "build": "tsc -p tsconfig.build.json",
59
62
  "precheck": "npm run deps:check",
60
63
  "check": "turbo run typecheck lint format:check knip metadata:check",
61
64
  "precheck:fast": "npm run deps:check",
62
65
  "check:fast": "turbo run typecheck lint",
66
+ "precheck:changed": "npm run deps:check",
67
+ "check:changed": "turbo run typecheck lint && npm run test:changed",
63
68
  "precheck:test": "npm run deps:check",
64
69
  "check:test": "turbo run typecheck lint format:check knip metadata:check test:run",
65
70
  "precheck:pr": "npm run deps:check",
@@ -80,25 +85,35 @@
80
85
  "test": "vitest run",
81
86
  "test:run": "vitest run",
82
87
  "pretest:fast": "npm run build:cached",
83
- "test:fast": "vitest run --project parallel",
88
+ "test:fast": "vitest run --project domain --project services --project adapters --project composition --project boundary --project conformance",
89
+ "pretest:boundary": "npm run build:cached",
90
+ "test:boundary": "vitest run --project boundary --project process-global",
91
+ "pretest:acceptance": "npm run build:cached",
92
+ "test:acceptance": "vitest run --project acceptance",
93
+ "pretest:changed": "npm run build:cached",
94
+ "test:changed": "vitest run --project domain --project services --project adapters --project composition --project boundary --project conformance --project evaluation --changed",
84
95
  "pretest:integration": "npm run build:cached",
85
- "test:integration": "vitest run --project serial-integration",
96
+ "test:integration": "vitest run --project boundary --project process-global --project acceptance",
86
97
  "pretest:coverage": "npm run build:cached",
87
98
  "test:coverage": "vitest run --coverage.enabled --coverage.provider=v8",
88
99
  "test:ci": "npm run test:coverage -- --reporter=default --reporter=junit --outputFile.junit=test-results.xml",
89
100
  "pretest:ci:shard": "npm run build:cached",
90
- "test:ci:shard": "vitest run --coverage.enabled --coverage.provider=v8 --coverage.thresholds.lines=0 --coverage.thresholds.functions=0 --coverage.thresholds.branches=0 --coverage.thresholds.statements=0 --reporter=default --reporter=blob",
91
- "test:ci:merge": "vitest --merge-reports --coverage.enabled --coverage.provider=v8 --reporter=default --reporter=junit --outputFile.junit=test-results.xml",
101
+ "test:ci:shard": "npm run test:ci:shard:run",
102
+ "test:ci:shard:run": "vitest run --coverage.enabled --coverage.provider=v8 --coverage.thresholds.lines=0 --coverage.thresholds.functions=0 --coverage.thresholds.branches=0 --coverage.thresholds.statements=0 --reporter=default --reporter=blob",
103
+ "test:ci:merge": "vitest --merge-reports --coverage.enabled --coverage.provider=v8",
92
104
  "pretest:verbose": "npm run build:cached",
93
105
  "test:verbose": "vitest run --reporter=verbose",
94
106
  "pretest:watch": "npm run build:cached",
95
- "test:watch": "vitest --project parallel --changed",
107
+ "test:watch": "vitest --project domain --project services --project adapters --project composition --project boundary --project conformance --project evaluation --changed",
108
+ "pretest:watch:all": "npm run build:cached",
109
+ "test:watch:all": "vitest --changed",
96
110
  "typecheck": "tsc --noEmit",
97
111
  "verify:test-temp-hygiene": "npm run build:cached && node scripts/verify-test-temp-hygiene.mjs",
98
112
  "verify:hopper": "npm run verify:fixtures && npm run build:cached && node scripts/verify-real-hopper.mjs",
99
113
  "verify:ghidra": "npm run build:cached && node scripts/verify-real-ghidra.mjs",
100
114
  "verify:ghidra:windows": "npm run build:cached && npm run build:ghidra-windows-fixture && node scripts/verify-real-ghidra-windows.mjs",
101
115
  "verify:browser": "npm run build:cached && node scripts/verify-real-browser.mjs",
116
+ "verify:inspector": "npm run build:cached && node scripts/verify-real-javascript-runtime-observation.mjs",
102
117
  "verify:javascript-runtime": "npm run build:cached && node scripts/verify-local-javascript-runtime.mjs",
103
118
  "verify:application-workflows": "npm run build:cached && node scripts/verify-local-application-workflows.mjs",
104
119
  "verify:managed": "npm run build:cached && node scripts/verify-managed-conformance.mjs",
@@ -109,6 +124,7 @@
109
124
  "build:fixtures": "node scripts/build-conformance-fixtures.mjs",
110
125
  "build:ghidra-windows-fixture": "node scripts/create-ghidra-windows-fixture.mjs",
111
126
  "verify:fixtures": "npm run build:fixtures && node scripts/verify-conformance-fixtures.mjs",
127
+ "verify:readiness": "npm run build:cached && npm run verify:fixtures && node scripts/verify-reconstruction-readiness.mjs",
112
128
  "verify:package": "npm run build:cached && node scripts/verify-package.mjs",
113
129
  "verify:package:windows": "npm run build:cached && node scripts/verify-windows-package.mjs",
114
130
  "probe:windows-capabilities": "npm run build:cached && node scripts/windows-capabilities.mjs",
@@ -118,9 +134,9 @@
118
134
  "evidence:check": "npm run build:cached && node scripts/generate-completion-ledger.mjs --check",
119
135
  "docs:api": "typedoc",
120
136
  "docs:api:cached": "turbo run docs:api",
121
- "docs:generate": "npm run metadata:generate && npm run build:cached && node scripts/generate-skill-metadata.mjs && node scripts/generate-product-catalog.mjs && node scripts/generate-completion-ledger.mjs && npm run docs:api:cached && node scripts/generate-error-schema.mjs",
137
+ "docs:generate": "npm run metadata:generate && npm run build:cached && node scripts/generate-mcp-tool-catalog.mjs && node scripts/generate-skill-metadata.mjs && node scripts/generate-product-catalog.mjs && node scripts/generate-completion-ledger.mjs && npm run docs:api:cached && node scripts/generate-error-schema.mjs",
122
138
  "docs:check": "turbo run docs:check:built",
123
- "docs:check:built": "node scripts/generate-package-metadata.mjs --check && node scripts/generate-skill-metadata.mjs --check && node scripts/generate-product-catalog.mjs --check && node scripts/generate-completion-ledger.mjs --check && node scripts/check-doc-facts.mjs && node scripts/generate-error-schema.mjs --check",
139
+ "docs:check:built": "node scripts/generate-package-metadata.mjs --check && node scripts/generate-mcp-tool-catalog.mjs --check && node scripts/generate-skill-metadata.mjs --check && node scripts/generate-product-catalog.mjs --check && node scripts/generate-completion-ledger.mjs --check && node scripts/check-doc-facts.mjs && node scripts/generate-error-schema.mjs --check",
124
140
  "docs:error-schema": "npm run build:cached && node scripts/generate-error-schema.mjs",
125
141
  "prepack": "node scripts/prepack.mjs",
126
142
  "prepare": "node scripts/prepare.mjs"
@@ -139,8 +155,8 @@
139
155
  "@electron/asar": "4.2.0",
140
156
  "@jridgewell/trace-mapping": "0.3.31",
141
157
  "@lydell/node-pty": "1.1.0",
142
- "@modelcontextprotocol/server": "2.0.0-beta.4",
143
- "@modelcontextprotocol/client": "2.0.0-beta.4",
158
+ "@modelcontextprotocol/client": "2.0.0",
159
+ "@modelcontextprotocol/server": "2.0.0",
144
160
  "@xterm/addon-serialize": "0.14.0",
145
161
  "@xterm/headless": "6.0.0",
146
162
  "@zip.js/zip.js": "2.8.26",
@@ -152,6 +168,7 @@
152
168
  "incur": "0.4.13",
153
169
  "isomorphic-git": "1.38.7",
154
170
  "pino": "9.14.0",
171
+ "playwright-core": "1.58.2",
155
172
  "plist": "5.0.0",
156
173
  "semver": "7.8.5",
157
174
  "smol-toml": "^1.7.0",
@@ -172,8 +189,8 @@
172
189
  "lint-staged": "16.4.0",
173
190
  "oxlint": "1.73.0",
174
191
  "prettier": "3.6.2",
175
- "typedoc": "0.28.20",
176
192
  "turbo": "2.10.5",
193
+ "typedoc": "0.28.20",
177
194
  "typescript": "5.9.3",
178
195
  "vitest": "4.1.10"
179
196
  }
@@ -0,0 +1,72 @@
1
+ import { spawn } from "node:child_process";
2
+ import { resolve } from "node:path";
3
+
4
+ const BOOTSTRAP_MARKER = "REA_PACKAGE_RUNNER_BOOTSTRAPPED";
5
+
6
+ /**
7
+ * Plan a current-release setup bootstrap when bare npx selected a project-local
8
+ * package. Explicit `npm exec --package=<name>@<version>` rollbacks bypass it.
9
+ */
10
+ export function packageRunnerSetupPlan(input) {
11
+ if (input.args[0] !== "setup") return undefined;
12
+ if (input.environment[BOOTSTRAP_MARKER] === "1") return undefined;
13
+ if (input.environment.npm_lifecycle_event !== "npx") return undefined;
14
+
15
+ const localPrefix = input.environment.npm_config_local_prefix;
16
+ if (localPrefix === undefined || localPrefix.length === 0) return undefined;
17
+ if (
18
+ !isPackageBelowLocalPrefix(
19
+ input.packageRoot,
20
+ localPrefix,
21
+ input.packageName,
22
+ )
23
+ )
24
+ return undefined;
25
+
26
+ const requestedPackage = input.environment.npm_config_package;
27
+ if (
28
+ requestedPackage !== undefined &&
29
+ isExactPackageVersion(requestedPackage, input.packageName)
30
+ )
31
+ return undefined;
32
+
33
+ return {
34
+ command: "npm",
35
+ args: [
36
+ "exec",
37
+ "--yes",
38
+ `--package=${input.packageName}@latest`,
39
+ "--",
40
+ "rea",
41
+ ...input.args,
42
+ ],
43
+ };
44
+ }
45
+
46
+ /** Execute a planned package-runner bootstrap and return its exit status. */
47
+ export async function runPackageRunnerSetupBootstrap(input) {
48
+ const plan = packageRunnerSetupPlan(input);
49
+ if (plan === undefined) return undefined;
50
+
51
+ return await new Promise((resolveExitCode) => {
52
+ const child = spawn(plan.command, plan.args, {
53
+ stdio: "inherit",
54
+ env: { ...input.environment, [BOOTSTRAP_MARKER]: "1" },
55
+ });
56
+ child.once("error", () => resolveExitCode(1));
57
+ child.once("exit", (code) => resolveExitCode(code ?? 1));
58
+ });
59
+ }
60
+
61
+ function isPackageBelowLocalPrefix(packageRoot, localPrefix, packageName) {
62
+ const expectedRoot = resolve(localPrefix, "node_modules", packageName);
63
+ return resolve(packageRoot) === expectedRoot;
64
+ }
65
+
66
+ function isExactPackageVersion(packageSpecifier, packageName) {
67
+ const version = packageSpecifier.slice(`${packageName}@`.length);
68
+ return (
69
+ packageSpecifier.startsWith(`${packageName}@`) &&
70
+ /^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/u.test(version)
71
+ );
72
+ }
package/scripts/rea.mjs CHANGED
@@ -4,6 +4,8 @@ import { access } from "node:fs/promises";
4
4
  import { dirname, resolve } from "node:path";
5
5
  import { fileURLToPath } from "node:url";
6
6
 
7
+ import { runPackageRunnerSetupBootstrap } from "./package-runner-bootstrap.mjs";
8
+
7
9
  // Route production MCP before importing Incur. Incur owns registration helpers
8
10
  // such as `mcp add`, while only dist/main.js may serve the stdio tool catalog.
9
11
  const args = process.argv.slice(2);
@@ -15,13 +17,21 @@ const isMcpMode =
15
17
  args.length === 1 && (args[0] === "--mcp" || args[0] === "mcp");
16
18
  const isMcpDoctorMode = args[0] === "mcp" && args[1] === "doctor";
17
19
  const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), "..");
20
+ const bootstrapExitCode = await runPackageRunnerSetupBootstrap({
21
+ args,
22
+ environment: process.env,
23
+ packageRoot,
24
+ packageName: packageJson.name,
25
+ });
18
26
  const runtimeFiles = isMcpMode
19
27
  ? ["dist/main.js"]
20
28
  : isMcpDoctorMode
21
29
  ? ["dist/main.js", "dist/mcpDoctor.js"]
22
30
  : ["dist/cli.js", "dist/cliOutput.js"];
23
31
 
24
- if (!(await compiledRuntimeExists(runtimeFiles))) {
32
+ if (bootstrapExitCode !== undefined) {
33
+ process.exitCode = bootstrapExitCode;
34
+ } else if (!(await compiledRuntimeExists(runtimeFiles))) {
25
35
  process.stderr.write(
26
36
  `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`,
27
37
  );
@@ -3,8 +3,8 @@ name: reverse-engineer-anything
3
3
  description: Reverse engineer native, managed, Electron/JavaScript, packaged, and browser applications with REA. Use shipped-artifact or approved runtime evidence to explain features, compare versions, decompile code, or guide a reconstruction. Skip REA for ordinary source-repository architecture analysis.
4
4
  metadata:
5
5
  version: "23"
6
- tool_count: 98
7
- catalog_digest: "aa413204625f3aeb62732d0f732b9b8b24832eea4520214b1e6bd204e599bcd6"
6
+ tool_count: 114
7
+ catalog_digest: "e83a177f5eca63bbad17886a61f5a1a376d44afe862c51c56e5d38339f7d41f8"
8
8
  ---
9
9
 
10
10
  # REA
@@ -23,7 +23,8 @@ Choose the first tool from the target the user supplied. Do not call
23
23
  - ASAR or extracted JavaScript/Electron tree:
24
24
  `analyze_javascript_application`.
25
25
  - Archive, application package, ZIP/APK/IPA/MSIX/AppX, or DMG:
26
- `inventory_artifact`.
26
+ `open_binary` with the supplied local path, then `inspect_artifact` or
27
+ `inventory_artifact` (both operate on the active target and accept no path).
27
28
  - Managed PE/CLI assembly: `inspect_managed_artifact`.
28
29
  - User-owned browser page already open: `list_browser_targets`.
29
30
  - User-owned Electron runtime already open: `list_electron_targets`.
@@ -34,6 +35,12 @@ If the app is missing, ask which app to inspect. Resolve a human-readable app
34
35
  name to one clear installed artifact when possible; ask only when matches are
35
36
  ambiguous. Never choose an example app on the user's behalf.
36
37
 
38
+ In a target-free session, use `open_binary` to bind any archive/package or
39
+ native target whose analysis tool operates on the active target. Do not call a
40
+ tool hidden from `tools/list`; inspect `binary_session` with
41
+ `detail: "capabilities"` for the exact remediation when a desired capability
42
+ is unavailable.
43
+
37
44
  ## Work summary-first
38
45
 
39
46
  Start with the default summary projection. Do not repeat an identical tool call.