rea-agents 2.2.0 → 2.4.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 (179) hide show
  1. package/README.md +57 -10
  2. package/dist/application/ApplicationWorkflowEvidenceResolver.js +162 -0
  3. package/dist/application/ArtifactExtraction.js +5 -1
  4. package/dist/application/ArtifactGraphConstruction.js +3 -15
  5. package/dist/application/ArtifactInventory/classify.js +5 -1
  6. package/dist/application/ArtifactInventory/reader.js +2 -0
  7. package/dist/application/BinarySession.js +9 -2
  8. package/dist/application/BinarySessionStatus.js +40 -1
  9. package/dist/application/CapabilityInventory.js +26 -3
  10. package/dist/application/CommandShimReplay.js +6 -3
  11. package/dist/application/CompositeProvider.js +5 -2
  12. package/dist/application/DirectAnalysis.js +1 -20
  13. package/dist/application/DirectAnalysisStatus.js +83 -0
  14. package/dist/application/Doctor.js +34 -25
  15. package/dist/application/DoctorDiagnostics.js +1 -4
  16. package/dist/application/DoctorProjection.js +43 -0
  17. package/dist/application/DoctorScope.js +102 -0
  18. package/dist/application/EvidenceReferenceResolver.js +26 -0
  19. package/dist/application/JavaScriptApplicationEvidence.js +1 -1
  20. package/dist/application/JavaScriptApplicationEvidenceGraph.js +10 -1
  21. package/dist/application/JavaScriptApplicationService.js +3 -2
  22. package/dist/application/JavaScriptApplicationWorkflowEvidence.js +26 -0
  23. package/dist/application/JavaScriptApplicationWorkflowService.js +49 -1
  24. package/dist/application/JavaScriptArtifactReconstruction.js +7 -0
  25. package/dist/application/JavaScriptModuleRelationships.js +25 -1
  26. package/dist/application/JavaScriptReturnShapeProjection.js +111 -0
  27. package/dist/application/JavaScriptSemanticGraphBuilder.js +294 -0
  28. package/dist/application/JavaScriptSemanticGraphConstruction.js +144 -0
  29. package/dist/application/JavaScriptSemanticGraphEvidence.js +86 -0
  30. package/dist/application/JavaScriptSemanticGraphFlowProjection.js +72 -0
  31. package/dist/application/JavaScriptSemanticGraphProjection.js +33 -0
  32. package/dist/application/JavaScriptSemanticTraceService.js +45 -0
  33. package/dist/application/LoopbackReplay.js +277 -133
  34. package/dist/application/LoopbackReplayRecorder.js +101 -0
  35. package/dist/application/PermissionAuthority.js +7 -3
  36. package/dist/application/ProcessCaptureEnvironment.js +26 -0
  37. package/dist/application/ProcessCaptureJournal.js +95 -0
  38. package/dist/application/ProcessCaptureLifecycle.js +25 -13
  39. package/dist/application/ProcessCheckpoints.js +35 -4
  40. package/dist/application/ProcessCli.js +26 -4
  41. package/dist/application/ProcessHarness.js +64 -83
  42. package/dist/application/ProcessNormalization.js +9 -2
  43. package/dist/application/ProcessReactiveCoordinator.js +225 -0
  44. package/dist/application/ProcessReactiveEffects.js +141 -0
  45. package/dist/application/ProcessReactiveHarness.js +85 -0
  46. package/dist/application/ProcessReactiveObservations.js +105 -0
  47. package/dist/application/ProcessSampling.js +2 -0
  48. package/dist/application/SessionProviderRouter.js +7 -6
  49. package/dist/application/Setup.js +11 -10
  50. package/dist/application/SetupPlan.js +1 -1
  51. package/dist/application/SetupRegistrationEnvironment.js +12 -0
  52. package/dist/application/TerminalRenderer.js +3 -1
  53. package/dist/browser/CdpEndpoint.js +37 -4
  54. package/dist/catalogIdentity.js +16 -7
  55. package/dist/cli/coreAnalysisCommands.js +34 -2
  56. package/dist/cli/javascriptApplicationAnalysis.js +19 -0
  57. package/dist/cli/setupCommands.js +81 -32
  58. package/dist/cli/utilityCommands.js +10 -2
  59. package/dist/cliApplicationCommands.js +79 -16
  60. package/dist/cliCommandNames.js +3 -0
  61. package/dist/cliElectronCommands.js +23 -33
  62. package/dist/cliObservationOptions.js +1 -1
  63. package/dist/cliOutput.js +56 -0
  64. package/dist/cliProcessCommands.js +32 -1
  65. package/dist/cliSetup.js +30 -21
  66. package/dist/contracts/applicationToolContracts.js +54 -7
  67. package/dist/contracts/applicationWorkflowInputContracts.js +119 -0
  68. package/dist/contracts/electronToolContracts.js +53 -32
  69. package/dist/contracts/javascriptApplicationWorkflowExamples.js +32 -9
  70. package/dist/contracts/processCaptureExample.js +1 -0
  71. package/dist/contracts/replayMachineExample.js +37 -0
  72. package/dist/contracts/toolContractExamples.js +2 -0
  73. package/dist/contracts/toolContracts.js +5 -1
  74. package/dist/contracts/toolEffects.js +3 -0
  75. package/dist/contracts/toolOutputSchemaGroups.js +2 -0
  76. package/dist/contracts/toolOutputSchemaPrimitives.js +43 -0
  77. package/dist/doctorRuntime.js +41 -0
  78. package/dist/domain/analysisErrorPresentation.js +5 -3
  79. package/dist/domain/analysisErrorProjection.js +7 -1
  80. package/dist/domain/analysisSnapshot.js +2 -0
  81. package/dist/domain/artifactGraph.js +2 -0
  82. package/dist/domain/binaryTarget.js +3 -6
  83. package/dist/domain/changedBehavior.js +5 -4
  84. package/dist/domain/completionLedgerGeneration.js +190 -0
  85. package/dist/domain/errors.js +4 -2
  86. package/dist/domain/evidence.js +2 -0
  87. package/dist/domain/evidenceCompletionLedger.js +113 -0
  88. package/dist/domain/hopperStartupFailure.js +9 -0
  89. package/dist/domain/javascriptApplicationAnalysis.js +44 -2
  90. package/dist/domain/javascriptExportShapeComparison.js +145 -0
  91. package/dist/domain/javascriptExportShapeComparisonIdentity.js +11 -0
  92. package/dist/domain/javascriptExportShapeComparisonSchemas.js +277 -0
  93. package/dist/domain/javascriptExportShapeSelection.js +132 -0
  94. package/dist/domain/javascriptExportShapeVariants.js +272 -0
  95. package/dist/domain/javascriptRuntimeReconciliationParsing.js +2 -2
  96. package/dist/domain/javascriptSemanticAnalysis.js +17 -36
  97. package/dist/domain/javascriptSemanticCallResolution.js +129 -0
  98. package/dist/domain/javascriptSemanticCalls.js +269 -0
  99. package/dist/domain/javascriptSemanticGraph.js +356 -0
  100. package/dist/domain/javascriptSemanticGraphSchemas.js +329 -0
  101. package/dist/domain/javascriptSemanticGraphSerialization.js +23 -0
  102. package/dist/domain/javascriptSemanticIr.js +14 -1
  103. package/dist/domain/javascriptSemanticPrimitives.js +36 -0
  104. package/dist/domain/javascriptSemanticProjection.js +36 -4
  105. package/dist/domain/javascriptSemanticProvenance.js +29 -0
  106. package/dist/domain/javascriptSemanticQuery.js +294 -0
  107. package/dist/domain/javascriptSemanticQueryAssessment.js +74 -0
  108. package/dist/domain/javascriptSemanticQueryIdentity.js +86 -0
  109. package/dist/domain/javascriptSemanticQueryRelations.js +15 -0
  110. package/dist/domain/javascriptSemanticQuerySchemas.js +188 -0
  111. package/dist/domain/javascriptSemanticReturns.js +187 -0
  112. package/dist/domain/javascriptSemanticState.js +32 -0
  113. package/dist/domain/javascriptSemanticTraceSchemas.js +14 -0
  114. package/dist/domain/javascriptSemanticValues.js +54 -70
  115. package/dist/domain/processCapture.js +100 -0
  116. package/dist/domain/processCaptureReactiveValidation.js +175 -0
  117. package/dist/domain/processCaptureValidation.js +103 -12
  118. package/dist/domain/processComparison.js +78 -25
  119. package/dist/domain/processObservation.js +162 -0
  120. package/dist/domain/processReactiveCheckpointDataflow.js +32 -0
  121. package/dist/domain/processReactiveMatching.js +210 -0
  122. package/dist/domain/processReactiveRuntime.js +120 -0
  123. package/dist/domain/processReactiveScenario.js +361 -0
  124. package/dist/domain/processReactiveScenarioPreflight.js +120 -0
  125. package/dist/domain/processReactiveTransition.js +161 -0
  126. package/dist/domain/processScenario.js +33 -0
  127. package/dist/domain/processTraceComparison.js +43 -0
  128. package/dist/domain/processTraceDimensionProjection.js +50 -0
  129. package/dist/domain/processTraceEvaluation.js +312 -0
  130. package/dist/domain/processTraceSpecification.js +373 -0
  131. package/dist/domain/reconstructionVerification.js +5 -4
  132. package/dist/domain/replayMachine.js +18 -2
  133. package/dist/domain/replayMachineRun.js +216 -0
  134. package/dist/domain/replayMachineRuntime.js +88 -9
  135. package/dist/domain/staticRuntimeCorrelation.js +4 -2
  136. package/dist/domain/zipPackageFormat.js +20 -0
  137. package/dist/evaluation/CodexAgentEval.js +24 -0
  138. package/dist/generatedPackageMetadata.js +1 -1
  139. package/dist/ghidra/GhidraClient.js +13 -2
  140. package/dist/ghidra/GhidraDiagnostics.js +1 -0
  141. package/dist/ghidra/GhidraLauncher.js +7 -3
  142. package/dist/ghidra/GhidraProvider.js +8 -1
  143. package/dist/hopper/BridgeLauncher.js +56 -14
  144. package/dist/hopper/HopperClient.js +23 -10
  145. package/dist/hopper/HopperDiagnostics.js +14 -0
  146. package/dist/hopper/HopperProcessDiagnostic.js +14 -0
  147. package/dist/hopper/HopperProvider.js +8 -1
  148. package/dist/hopper/LinuxPrivateDisplayDiagnostic.js +72 -0
  149. package/dist/hopper/LinuxPrivateDisplayProbe.js +217 -0
  150. package/dist/main/transport.js +2 -0
  151. package/dist/mcpDoctor.js +310 -0
  152. package/dist/native/NativeMacOSProvider.js +1 -0
  153. package/dist/process/ProcessOwnership.js +200 -53
  154. package/dist/process/ProviderRunLineage.js +21 -0
  155. package/dist/server/createServer.js +4 -1
  156. package/dist/server/javascriptApplicationResult.js +22 -1
  157. package/dist/server/registerApplicationTools/characterization.js +3 -3
  158. package/dist/server/registerApplicationTools/compareExportShapes.js +37 -0
  159. package/dist/server/registerApplicationTools/compareVersions.js +12 -6
  160. package/dist/server/registerApplicationTools/controlledReplay.js +2 -2
  161. package/dist/server/registerApplicationTools/coverage.js +3 -3
  162. package/dist/server/registerApplicationTools/helpers.js +37 -25
  163. package/dist/server/registerApplicationTools/traceFeature.js +9 -5
  164. package/dist/server/registerApplicationTools/traceSemantics.js +30 -0
  165. package/dist/server/registerApplicationTools.js +4 -0
  166. package/dist/server/registerEvidenceResources.js +5 -1
  167. package/dist/server/registerProcessComparisonTool.js +17 -7
  168. package/dist/server/registerReplayMachineTool.js +20 -0
  169. package/dist/server/registerSessionTools.js +12 -7
  170. package/dist/server/sessionAvailabilityPolicy.js +2 -1
  171. package/dist/serverIdentity.js +19 -0
  172. package/package.json +62 -30
  173. package/scripts/hopper-demo-x11.py +459 -61
  174. package/scripts/prepack.mjs +55 -0
  175. package/scripts/prepare.mjs +28 -0
  176. package/scripts/rea.mjs +26 -5
  177. package/skills/reverse-engineer-anything/SKILL.md +4 -3
  178. package/skills/reverse-engineer-anything/references/javascript-applications.md +10 -0
  179. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +2 -2
@@ -0,0 +1,30 @@
1
+ import { resolveTraceJavaScriptSemanticsRequestValidated } from "../../application/ApplicationWorkflowEvidenceResolver.js";
2
+ import { traceJavaScriptSemanticsEvidenceValidated } from "../../application/JavaScriptSemanticTraceService.js";
3
+ import { applicationToolContract } from "../../contracts/applicationToolContracts.js";
4
+ import { traceJavaScriptSemanticsRequestSchema } from "../../contracts/applicationWorkflowInputContracts.js";
5
+ import { safeParseToolInput } from "../toolInputValidation.js";
6
+ import { logToolExecution } from "../toolLogging.js";
7
+ import { toolRegistrationOptions } from "../toolRegistrationOptions.js";
8
+ import { toCallToolResult } from "../toolResult.js";
9
+ import { recordResult, recordSources } from "./helpers.js";
10
+ const contract = applicationToolContract("trace_javascript_semantics");
11
+ /** Register the bounded JavaScript semantic relation trace tool. */
12
+ export const registerTraceJavaScriptSemanticsTool = (server, options) => {
13
+ server.registerTool(contract.name, toolRegistrationOptions(contract), async (input) => {
14
+ const parsedInput = safeParseToolInput(traceJavaScriptSemanticsRequestSchema, input, contract.name);
15
+ if (!parsedInput.ok)
16
+ return toCallToolResult(parsedInput, contract);
17
+ const resolved = resolveTraceJavaScriptSemanticsRequestValidated(parsedInput.value, options.evidenceLookup);
18
+ if (!resolved.ok)
19
+ return toCallToolResult(resolved, contract);
20
+ const result = await logToolExecution(options.logger, contract.name, () => Promise.resolve(traceJavaScriptSemanticsEvidenceValidated(resolved.value)));
21
+ if (!result.ok)
22
+ return toCallToolResult(result, contract);
23
+ const recorded = recordSources(options.recordEvidence, [
24
+ resolved.value.application,
25
+ ]);
26
+ if (!recorded.ok)
27
+ return toCallToolResult(recorded, contract);
28
+ return recordResult(options, contract, result.value);
29
+ });
30
+ };
@@ -1,12 +1,16 @@
1
1
  import { registerTraceFeatureTool } from "./registerApplicationTools/traceFeature.js";
2
+ import { registerTraceJavaScriptSemanticsTool } from "./registerApplicationTools/traceSemantics.js";
2
3
  import { registerCompareApplicationVersionsTool } from "./registerApplicationTools/compareVersions.js";
4
+ import { registerCompareJavaScriptExportShapesTool } from "./registerApplicationTools/compareExportShapes.js";
3
5
  import { registerControlledReplayTool } from "./registerApplicationTools/controlledReplay.js";
4
6
  import { registerCharacterizationTools } from "./registerApplicationTools/characterization.js";
5
7
  import { registerCoverageTools } from "./registerApplicationTools/coverage.js";
6
8
  /** Register provider-neutral JavaScript application graph workflows. */
7
9
  export const registerApplicationTools = (server, options) => {
8
10
  registerTraceFeatureTool(server, options);
11
+ registerTraceJavaScriptSemanticsTool(server, options);
9
12
  registerCompareApplicationVersionsTool(server, options);
13
+ registerCompareJavaScriptExportShapesTool(server, options);
10
14
  registerControlledReplayTool(server, options);
11
15
  registerCharacterizationTools(server, options);
12
16
  registerCoverageTools(server, options);
@@ -317,7 +317,11 @@ const evidenceSection = (result, section) => {
317
317
  if (section === "process")
318
318
  return pick(result, ["process_samples", "exit", "settlement", "cleanup"]);
319
319
  if (section === "protocol")
320
- return pick(result, ["protocol_events", "shim_events"]);
320
+ return pick(result, [
321
+ "protocol_events",
322
+ "replay_transitions",
323
+ "shim_events",
324
+ ]);
321
325
  const value = result[section];
322
326
  return value === undefined ? undefined : value;
323
327
  };
@@ -11,6 +11,11 @@ import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
11
11
  import { runDerivedOperation } from "./runDerivedOperation.js";
12
12
  import { safeParseToolInput } from "./toolInputValidation.js";
13
13
  import { resolveSessionEvidenceIds } from "./sessionEvidence.js";
14
+ const PROCESS_CAPTURE_EVIDENCE = {
15
+ operation: "capture_process_scenario",
16
+ predicate: "rea.process-capture/v4",
17
+ };
18
+ const sourceLocations = (left, right) => [...(left ?? []), ...(right ?? [])];
14
19
  /** Register deterministic process-capture comparison and contradiction tracking. */
15
20
  export const registerProcessComparisonTool = (server, session, contract, now = Date.now) => {
16
21
  server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => {
@@ -18,14 +23,10 @@ export const registerProcessComparisonTool = (server, session, contract, now = D
18
23
  if (!parsedInput.ok)
19
24
  return toCallToolResult(parsedInput, contract);
20
25
  const parsed = parsedInput.value;
21
- const expected = {
22
- operation: "capture_process_scenario",
23
- predicate: "rea.process-capture/v4",
24
- };
25
- const leftRecord = resolveSessionEvidenceIds(session, [parsed.left_evidence_id], expected);
26
+ const leftRecord = resolveSessionEvidenceIds(session, [parsed.left_evidence_id], PROCESS_CAPTURE_EVIDENCE);
26
27
  if (!leftRecord.ok)
27
28
  return toCallToolResult(leftRecord, contract);
28
- const rightRecord = resolveSessionEvidenceIds(session, [parsed.right_evidence_id], expected);
29
+ const rightRecord = resolveSessionEvidenceIds(session, [parsed.right_evidence_id], PROCESS_CAPTURE_EVIDENCE);
29
30
  if (!rightRecord.ok)
30
31
  return toCallToolResult(rightRecord, contract);
31
32
  let comparison;
@@ -38,6 +39,9 @@ export const registerProcessComparisonTool = (server, session, contract, now = D
38
39
  ...(parsed.max_capture_age_ms === undefined
39
40
  ? {}
40
41
  : { maxCaptureAgeMs: parsed.max_capture_age_ms }),
42
+ ...(parsed.trace_spec === undefined
43
+ ? {}
44
+ : { traceSpecification: parsed.trace_spec }),
41
45
  now,
42
46
  }));
43
47
  if (!computed.ok)
@@ -50,18 +54,24 @@ export const registerProcessComparisonTool = (server, session, contract, now = D
50
54
  : "Invalid Process Capture v4")), contract);
51
55
  }
52
56
  const evidence = createEvidence(undefined, PROCESS_PROVIDER, {
53
- predicateType: "rea.process-comparison/v3",
57
+ predicateType: parsed.trace_spec === undefined
58
+ ? "rea.process-comparison/v3"
59
+ : "rea.process-comparison/v4",
54
60
  operation: contract.name,
55
61
  parameters: {
56
62
  left_evidence_id: parsed.left_evidence_id,
57
63
  right_evidence_id: parsed.right_evidence_id,
58
64
  left_normalization: leftCapture.normalization,
59
65
  right_normalization: rightCapture.normalization,
66
+ ...(parsed.trace_spec === undefined
67
+ ? {}
68
+ : { trace_spec: jsonValueSchema.parse(parsed.trace_spec) }),
60
69
  },
61
70
  result: jsonValueSchema.parse(comparison),
62
71
  confidence: "derived",
63
72
  authority: "analyst-inference",
64
73
  limitations: comparison.limitations,
74
+ locations: sourceLocations(leftRecord.value[0]?.locations, rightRecord.value[0]?.locations),
65
75
  evidenceLinks: [parsed.left_evidence_id, parsed.right_evidence_id],
66
76
  });
67
77
  return toCallToolResult(recordDerivedEvidence(session, evidence, comparisonUnknownInput(parsed, comparison)), contract);
@@ -0,0 +1,20 @@
1
+ import { SESSION_TOOL_CONTRACTS } from "../contracts/toolContracts.js";
2
+ import { replayMachineRunInputSchema, runReplayMachine, } from "../domain/replayMachineRun.js";
3
+ import { ok } from "../domain/result.js";
4
+ import { safeParseToolInput } from "./toolInputValidation.js";
5
+ import { logToolExecution } from "./toolLogging.js";
6
+ import { toCallToolResult } from "./toolResult.js";
7
+ import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
8
+ const contract = SESSION_TOOL_CONTRACTS.find(({ name }) => name === "run_replay_machine");
9
+ if (contract === undefined)
10
+ throw new TypeError("Missing run_replay_machine tool contract");
11
+ /** Register direct execution-free finite replay-machine evaluation. */
12
+ export const registerReplayMachineTool = (server, logger) => {
13
+ server.registerTool(contract.name, toolRegistrationOptions(contract), async (input) => {
14
+ const parsed = safeParseToolInput(replayMachineRunInputSchema, input, contract.name);
15
+ if (!parsed.ok)
16
+ return toCallToolResult(parsed, contract);
17
+ const result = await logToolExecution(logger, contract.name, () => Promise.resolve(ok(runReplayMachine(parsed.value))));
18
+ return toCallToolResult(result, contract);
19
+ });
20
+ };
@@ -23,7 +23,8 @@ import { mcpProgressReporter } from "./mcpProgress.js";
23
23
  import { authorizeProcessCaptureWithElicitation, } from "./ProcessCaptureElicitation.js";
24
24
  import { isInputRequiredResult } from "@modelcontextprotocol/server";
25
25
  import { registerEvidenceTools, registerUnknownTools, } from "./registerSessionRecordTools.js";
26
- import { sessionAvailabilityPolicy } from "./sessionAvailabilityPolicy.js";
26
+ import { registerReplayMachineTool } from "./registerReplayMachineTool.js";
27
+ import { sessionAvailabilityPolicy, } from "./sessionAvailabilityPolicy.js";
27
28
  const permissionFailure = (failure) => {
28
29
  if (failure.ok)
29
30
  return err(new AnalysisProtocolError("Expected a denied permission"));
@@ -212,6 +213,14 @@ const registerCloseLifecycleTool = ({ server, session, logger, contracts: [, clo
212
213
  : toCallToolResult(closed, closeContract);
213
214
  });
214
215
  };
216
+ const registerRecordAndReplayTools = (server, session, logger) => {
217
+ registerUnknownTools({
218
+ server,
219
+ session,
220
+ contracts: SESSION_TOOL_CONTRACTS,
221
+ });
222
+ registerReplayMachineTool(server, logger);
223
+ };
215
224
  export const registerSessionTools = (server, session, logger, options = {}) => {
216
225
  const processPolicy = options.processPolicy ?? DENY_PROCESS_POLICY;
217
226
  const evidenceFilePolicy = options.evidenceFilePolicy ?? DENY_EVIDENCE_FILE_POLICY;
@@ -224,7 +233,7 @@ export const registerSessionTools = (server, session, logger, options = {}) => {
224
233
  contracts: [openContract, closeContract, statusContract],
225
234
  snapshotFilePolicy: analysisSnapshotFilePolicy,
226
235
  startedAt: options.startedAt ?? new Date().toISOString(),
227
- availabilityPolicy: sessionAvailabilityPolicy(options.availabilityPolicy, processPolicy, evidenceFilePolicy),
236
+ availabilityPolicy: sessionAvailabilityPolicy(options.availabilityPolicy, processPolicy, evidenceFilePolicy, options.investigationInputRoots ?? []),
228
237
  ...(options.permissionAuthority === undefined
229
238
  ? {}
230
239
  : { permissionAuthority: options.permissionAuthority }),
@@ -274,9 +283,5 @@ export const registerSessionTools = (server, session, logger, options = {}) => {
274
283
  ? {}
275
284
  : { permissionAuthority: options.permissionAuthority }),
276
285
  });
277
- registerUnknownTools({
278
- server,
279
- session,
280
- contracts: SESSION_TOOL_CONTRACTS,
281
- });
286
+ registerRecordAndReplayTools(server, session, logger);
282
287
  };
@@ -1,8 +1,9 @@
1
1
  /** Select configured availability reporting or the target-free defaults. */
2
- export const sessionAvailabilityPolicy = (configured, processPolicy, evidenceFilePolicy) => configured ??
2
+ export const sessionAvailabilityPolicy = (configured, processPolicy, evidenceFilePolicy, investigationInputRoots) => configured ??
3
3
  (() => ({
4
4
  processCaptureEnabled: processPolicy.enabled,
5
5
  evidenceFileRoots: evidenceFilePolicy.roots.length,
6
+ investigationInputRoots: investigationInputRoots.length,
6
7
  browserObservationEnabled: false,
7
8
  electronObservationEnabled: false,
8
9
  javascriptReplayEnabled: false,
@@ -68,3 +68,22 @@ export const createServerIdentity = (input) => {
68
68
  },
69
69
  };
70
70
  };
71
+ /** Compact identity projection for CLI summaries; MCP retains full identity. */
72
+ export const createServerIdentitySummary = (input) => {
73
+ const identity = createServerIdentity(input);
74
+ return {
75
+ package: {
76
+ name: identity.package.name,
77
+ version: identity.package.version,
78
+ },
79
+ server: {
80
+ name: identity.server.name,
81
+ version: identity.server.version,
82
+ },
83
+ catalog: {
84
+ counts: identity.catalog.counts,
85
+ digests: identity.catalog.digests,
86
+ },
87
+ alignment: identity.alignment,
88
+ };
89
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rea-agents",
3
- "version": "2.2.0",
3
+ "version": "2.4.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": {
@@ -44,17 +44,29 @@
44
44
  "bridge/ghidra/ReaGhidraBridge.java",
45
45
  "scripts/rea.mjs",
46
46
  "scripts/hopper-demo-x11.py",
47
+ "scripts/prepack.mjs",
48
+ "scripts/prepare.mjs",
47
49
  "skills",
48
50
  "README.md",
49
51
  "LICENSE"
50
52
  ],
51
53
  "scripts": {
52
54
  "deps:check": "node scripts/check-dependency-install.mjs",
53
- "prebuild": "npm run deps:check && node scripts/generate-package-metadata.mjs",
55
+ "metadata:generate": "node scripts/generate-package-metadata.mjs",
56
+ "metadata:check": "node scripts/generate-package-metadata.mjs --check",
57
+ "prebuild": "npm run deps:check && npm run metadata:check",
54
58
  "build": "tsc -p tsconfig.build.json",
55
- "postbuild": "node scripts/record-build-cache.mjs",
56
59
  "precheck": "npm run deps:check",
57
- "check": "npm run typecheck && npm run lint && npm run format:check && npm run docs:check && npm test",
60
+ "check": "turbo run typecheck lint format:check knip metadata:check",
61
+ "precheck:fast": "npm run deps:check",
62
+ "check:fast": "turbo run typecheck lint",
63
+ "precheck:test": "npm run deps:check",
64
+ "check:test": "turbo run typecheck lint format:check knip metadata:check test:run",
65
+ "precheck:pr": "npm run deps:check",
66
+ "check:pr": "turbo run typecheck lint format:check knip metadata:check test:run docs:check:built",
67
+ "precheck:ci": "npm run deps:check",
68
+ "check:ci": "turbo run typecheck lint format:check knip metadata:check jscpd scan:todos",
69
+ "build:cached": "turbo run build",
58
70
  "format": "prettier --write .",
59
71
  "format:check": "prettier --check .",
60
72
  "lint": "oxlint",
@@ -64,42 +76,61 @@
64
76
  "jscpd": "jscpd src/ tests/",
65
77
  "scan:todos": "node scripts/scan-todos.mjs",
66
78
  "start": "node scripts/rea.mjs mcp",
67
- "pretest": "npm run build",
79
+ "pretest": "npm run build:cached",
68
80
  "test": "vitest run",
69
- "pretest:coverage": "npm run build",
81
+ "test:run": "vitest run",
82
+ "pretest:fast": "npm run build:cached",
83
+ "test:fast": "vitest run --project parallel",
84
+ "pretest:integration": "npm run build:cached",
85
+ "test:integration": "vitest run --project serial-integration",
86
+ "pretest:coverage": "npm run build:cached",
70
87
  "test:coverage": "vitest run --coverage.enabled --coverage.provider=v8",
88
+ "test:ci": "npm run test:coverage -- --reporter=default --reporter=junit --outputFile.junit=test-results.xml",
89
+ "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",
92
+ "pretest:verbose": "npm run build:cached",
71
93
  "test:verbose": "vitest run --reporter=verbose",
72
- "test:watch": "vitest",
94
+ "pretest:watch": "npm run build:cached",
95
+ "test:watch": "vitest --project parallel --changed",
73
96
  "typecheck": "tsc --noEmit",
74
- "verify:hopper": "npm run build && node scripts/verify-real-hopper.mjs",
75
- "verify:ghidra": "npm run build && node scripts/verify-real-ghidra.mjs",
76
- "verify:ghidra:windows": "npm run build && npm run build:ghidra-windows-fixture && node scripts/verify-real-ghidra-windows.mjs",
77
- "verify:browser": "npm run build && node scripts/verify-real-browser.mjs",
78
- "verify:javascript-runtime": "npm run build && node scripts/verify-local-javascript-runtime.mjs",
79
- "verify:application-workflows": "npm run build && node scripts/verify-local-application-workflows.mjs",
80
- "verify:managed": "npm run build && node scripts/verify-managed-conformance.mjs",
81
- "verify:replay": "npm run build && node scripts/verify-real-javascript-replay.mjs",
82
- "verify:agent": "npm run build && node scripts/verify-agent-experience.mjs",
83
- "verify:hopper:linux": "npm run build && node scripts/verify-real-hopper-linux.mjs",
84
- "verify:setup:linux": "npm run build && node scripts/verify-linux-setup-e2e.mjs",
97
+ "verify:test-temp-hygiene": "npm run build:cached && node scripts/verify-test-temp-hygiene.mjs",
98
+ "verify:hopper": "npm run verify:fixtures && npm run build:cached && node scripts/verify-real-hopper.mjs",
99
+ "verify:ghidra": "npm run build:cached && node scripts/verify-real-ghidra.mjs",
100
+ "verify:ghidra:windows": "npm run build:cached && npm run build:ghidra-windows-fixture && node scripts/verify-real-ghidra-windows.mjs",
101
+ "verify:browser": "npm run build:cached && node scripts/verify-real-browser.mjs",
102
+ "verify:javascript-runtime": "npm run build:cached && node scripts/verify-local-javascript-runtime.mjs",
103
+ "verify:application-workflows": "npm run build:cached && node scripts/verify-local-application-workflows.mjs",
104
+ "verify:managed": "npm run build:cached && node scripts/verify-managed-conformance.mjs",
105
+ "verify:replay": "npm run build:cached && node scripts/verify-real-javascript-replay.mjs",
106
+ "verify:agent": "npm run build:cached && node scripts/verify-agent-experience.mjs",
107
+ "verify:hopper:linux": "npm run verify:fixtures && npm run build:cached && node scripts/verify-real-hopper-linux.mjs",
108
+ "verify:setup:linux": "npm run build:cached && node scripts/verify-linux-setup-e2e.mjs",
85
109
  "build:fixtures": "node scripts/build-conformance-fixtures.mjs",
86
110
  "build:ghidra-windows-fixture": "node scripts/create-ghidra-windows-fixture.mjs",
87
111
  "verify:fixtures": "npm run build:fixtures && node scripts/verify-conformance-fixtures.mjs",
88
- "verify:package": "npm run build && node scripts/verify-package.mjs",
89
- "verify:package:windows": "npm run build && node scripts/verify-windows-package.mjs",
90
- "probe:windows-capabilities": "npm run build && node scripts/windows-capabilities.mjs",
112
+ "verify:package": "npm run build:cached && node scripts/verify-package.mjs",
113
+ "verify:package:windows": "npm run build:cached && node scripts/verify-windows-package.mjs",
114
+ "probe:windows-capabilities": "npm run build:cached && node scripts/windows-capabilities.mjs",
91
115
  "verify:published": "node scripts/verify-published-package.mjs",
92
116
  "config:print": "node scripts/print-mcp-config.mjs",
93
- "docs:generate": "npm run build && node scripts/generate-skill-metadata.mjs && node scripts/generate-product-catalog.mjs && typedoc && node scripts/generate-error-schema.mjs",
94
- "docs:check": "node scripts/generate-package-metadata.mjs --check && npm run build && node scripts/generate-skill-metadata.mjs --check && node scripts/generate-product-catalog.mjs --check && node scripts/check-doc-facts.mjs && node scripts/check-typedoc.mjs && node scripts/generate-error-schema.mjs --check",
95
- "docs:error-schema": "npm run build && node scripts/generate-error-schema.mjs",
96
- "prepack": "npm run deps:check && node scripts/generate-skill-metadata.mjs --check",
97
- "prepublishOnly": "npm run deps:check && node scripts/generate-skill-metadata.mjs --check",
98
- "prepare": "npm run build && husky"
117
+ "evidence:generate": "npm run build:cached && node scripts/generate-completion-ledger.mjs",
118
+ "evidence:check": "npm run build:cached && node scripts/generate-completion-ledger.mjs --check",
119
+ "docs:api": "typedoc",
120
+ "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",
122
+ "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",
124
+ "docs:error-schema": "npm run build:cached && node scripts/generate-error-schema.mjs",
125
+ "prepack": "node scripts/prepack.mjs",
126
+ "prepare": "node scripts/prepare.mjs"
99
127
  },
100
128
  "lint-staged": {
101
- "*.{ts,mjs,json,md,yml,yaml}": "prettier --write",
102
- "*.ts": "oxlint --fix"
129
+ "*.{cjs,cts,js,jsx,mjs,mts,ts,tsx}": [
130
+ "prettier --write",
131
+ "oxlint --fix"
132
+ ],
133
+ "*.{json,md,yml,yaml}": "prettier --write"
103
134
  },
104
135
  "dependencies": {
105
136
  "@babel/parser": "8.0.4",
@@ -109,6 +140,7 @@
109
140
  "@jridgewell/trace-mapping": "0.3.31",
110
141
  "@lydell/node-pty": "1.1.0",
111
142
  "@modelcontextprotocol/server": "2.0.0-beta.4",
143
+ "@modelcontextprotocol/client": "2.0.0-beta.4",
112
144
  "@xterm/addon-serialize": "0.14.0",
113
145
  "@xterm/headless": "6.0.0",
114
146
  "@zip.js/zip.js": "2.8.26",
@@ -129,7 +161,6 @@
129
161
  },
130
162
  "devDependencies": {
131
163
  "@fast-check/vitest": "0.4.1",
132
- "@modelcontextprotocol/client": "2.0.0-beta.4",
133
164
  "@types/node": "24.10.1",
134
165
  "@types/semver": "7.7.1",
135
166
  "@types/write-file-atomic": "4.0.3",
@@ -142,6 +173,7 @@
142
173
  "oxlint": "1.73.0",
143
174
  "prettier": "3.6.2",
144
175
  "typedoc": "0.28.20",
176
+ "turbo": "2.10.5",
145
177
  "typescript": "5.9.3",
146
178
  "vitest": "4.1.10"
147
179
  }