rea-agents 1.7.0 → 2.1.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 (333) hide show
  1. package/README.md +112 -59
  2. package/bridge/ghidra/ReaGhidraBridge.java +96 -11
  3. package/dist/application/ArtifactExtraction.js +1 -1
  4. package/dist/application/ArtifactInventory/classify.js +42 -0
  5. package/dist/application/ArtifactInventory/hash.js +43 -0
  6. package/dist/application/ArtifactInventory/reader.js +41 -0
  7. package/dist/application/ArtifactInventory/scanCanonical.js +155 -0
  8. package/dist/application/ArtifactInventory/scanReader.js +124 -0
  9. package/dist/application/ArtifactInventory/types.js +10 -0
  10. package/dist/application/ArtifactInventory.js +9 -351
  11. package/dist/application/AuthorizedArtifactInventory.js +2 -2
  12. package/dist/application/BinarySession.js +47 -270
  13. package/dist/application/BinarySessionExecution.js +28 -0
  14. package/dist/application/BinarySessionOpen.js +39 -0
  15. package/dist/application/BinarySessionRecords.js +149 -0
  16. package/dist/application/BinarySessionStatus.js +75 -0
  17. package/dist/application/CapabilityInventory.js +42 -2
  18. package/dist/application/ClientRegistrationStatus.js +1 -1
  19. package/dist/application/CrossVersionInventory.js +8 -2
  20. package/dist/application/CrossVersionInvestigation.js +11 -29
  21. package/dist/application/CrossVersionInvestigationCollections.js +23 -0
  22. package/dist/application/DirectAnalysis.js +47 -44
  23. package/dist/application/Doctor.js +165 -197
  24. package/dist/application/DoctorDiagnostics.js +180 -0
  25. package/dist/application/ElectronBoundaryAnalysis.js +112 -0
  26. package/dist/application/ElectronBoundaryGraph.js +9 -0
  27. package/dist/application/ElectronBoundaryGraphContext.js +62 -0
  28. package/dist/application/ElectronBoundaryGraphIpc.js +242 -0
  29. package/dist/application/ElectronBoundaryGraphNative.js +86 -0
  30. package/dist/application/ElectronBoundaryGraphWindows.js +223 -0
  31. package/dist/application/EnhancedToolPagination.js +22 -0
  32. package/dist/application/EnhancedToolTypes.js +4 -0
  33. package/dist/application/EnhancedTools.js +58 -50
  34. package/dist/application/InstrumentedJavaScriptReplayHost.js +36 -0
  35. package/dist/application/InvestigationProviders.js +30 -0
  36. package/dist/application/InvestigationWorkspaceStore.js +24 -10
  37. package/dist/application/JavaScriptApplicationEvidence.js +26 -0
  38. package/dist/application/JavaScriptApplicationEvidenceGraph.js +89 -0
  39. package/dist/application/JavaScriptApplicationService.js +74 -0
  40. package/dist/application/JavaScriptApplicationWorkflowEvidence.js +29 -0
  41. package/dist/application/JavaScriptApplicationWorkflowService.js +90 -0
  42. package/dist/application/JavaScriptArtifactAnalysis.js +52 -7
  43. package/dist/application/JavaScriptArtifactFiles.js +6 -2
  44. package/dist/application/JavaScriptArtifactGraphBuilder.js +82 -17
  45. package/dist/application/JavaScriptArtifactGraphBundlers.js +225 -0
  46. package/dist/application/JavaScriptArtifactGraphContext.js +37 -36
  47. package/dist/application/JavaScriptArtifactGraphDocuments.js +27 -4
  48. package/dist/application/JavaScriptArtifactGraphEvidence.js +24 -14
  49. package/dist/application/JavaScriptArtifactGraphFindings.js +54 -8
  50. package/dist/application/JavaScriptArtifactGraphStructure.js +29 -101
  51. package/dist/application/JavaScriptArtifactPathResolution.js +269 -0
  52. package/dist/application/JavaScriptArtifactReconstruction.js +4 -1
  53. package/dist/application/JavaScriptArtifactReconstructionInput.js +2 -83
  54. package/dist/application/JavaScriptJsonModules.js +39 -0
  55. package/dist/application/JavaScriptModuleRelationships.js +262 -0
  56. package/dist/application/JavaScriptReplayPermission.js +16 -0
  57. package/dist/application/JavaScriptReplayPlanning.js +201 -0
  58. package/dist/application/JavaScriptReplayService.js +292 -0
  59. package/dist/application/JavaScriptRuntimeReconciliationEvidence.js +25 -0
  60. package/dist/application/JavaScriptRuntimeReconciliationService.js +27 -0
  61. package/dist/application/LinuxHopper.js +10 -0
  62. package/dist/application/MacHopper.js +22 -11
  63. package/dist/application/ManagedApplicationGraphService.js +55 -0
  64. package/dist/application/ManagedMemberComparisonService.js +122 -0
  65. package/dist/application/ManagedNativeVerificationService.js +39 -0
  66. package/dist/application/ManagedReconstructionService.js +58 -0
  67. package/dist/application/ManagedRuntimeCorrelationService.js +103 -0
  68. package/dist/application/NodeRuntimeCharacterizationService.js +196 -0
  69. package/dist/application/PermissionAuthority.js +106 -63
  70. package/dist/application/ProcessCaptureCapability.js +1 -1
  71. package/dist/application/ProcessCapturePermission.js +13 -0
  72. package/dist/application/ProcessCli.js +2 -12
  73. package/dist/application/ProcessHarness.js +1 -1
  74. package/dist/application/ProcessSampling.js +15 -11
  75. package/dist/application/ProjectPermissionStore.js +49 -9
  76. package/dist/application/RealHopperAssertions.js +76 -0
  77. package/dist/application/ReconstructionCoverageService.js +69 -0
  78. package/dist/application/ReconstructionCoverageWorkspaceStore.js +31 -0
  79. package/dist/application/RuntimeExecutableDiagnostics.js +172 -0
  80. package/dist/application/Setup.js +147 -259
  81. package/dist/application/SetupClientConfiguration.js +220 -0
  82. package/dist/application/SetupClients.js +24 -2
  83. package/dist/application/SetupPlan.js +123 -12
  84. package/dist/application/SetupSkill.js +26 -12
  85. package/dist/application/SupportedClients.js +1 -0
  86. package/dist/application/Uninstall.js +6 -3
  87. package/dist/application/WindowsCapabilities.js +86 -0
  88. package/dist/application/runtime.js +2 -0
  89. package/dist/artifacts/AsarArtifactReader.js +11 -0
  90. package/dist/browser/BrowserProcessStartup.js +88 -0
  91. package/dist/browser/CdpCaptureDocuments.js +12 -8
  92. package/dist/browser/CdpCaptureEventBodyShapes.js +75 -0
  93. package/dist/browser/CdpCaptureEventHandlers.js +336 -0
  94. package/dist/browser/CdpCaptureEventHelpers.js +71 -0
  95. package/dist/browser/CdpCaptureEventState.js +1 -0
  96. package/dist/browser/CdpCaptureEventTypes.js +1 -0
  97. package/dist/browser/CdpCaptureEvents.js +46 -464
  98. package/dist/browser/CdpElectronInspection.js +106 -162
  99. package/dist/browser/CdpElectronProvider.js +5 -1
  100. package/dist/browser/CdpElectronScriptEvents.js +69 -0
  101. package/dist/browser/CdpElectronScripts.js +94 -0
  102. package/dist/browser/CdpElectronWorkers.js +56 -0
  103. package/dist/browser/CdpObservationSession.js +51 -8
  104. package/dist/browser/CdpPageCapture.js +12 -129
  105. package/dist/browser/CdpPageCaptureScripts.js +97 -0
  106. package/dist/browser/CdpPageCaptureWorkers.js +46 -0
  107. package/dist/browser/CdpWebMcpDiscovery.js +38 -14
  108. package/dist/browser/PngVisualDiff.js +9 -2
  109. package/dist/catalogIdentity.js +8 -1
  110. package/dist/cli/artifactCommands.js +82 -0
  111. package/dist/cli/coreAnalysisCommands.js +232 -0
  112. package/dist/cli/managedCommands.js +397 -0
  113. package/dist/cli/managedProjectGraphCommand.js +24 -0
  114. package/dist/cli/options.js +9 -0
  115. package/dist/cli/setupCommands.js +108 -0
  116. package/dist/cli/types.js +1 -0
  117. package/dist/cli/utilityCommands.js +122 -0
  118. package/dist/cli.js +13 -383
  119. package/dist/cliApplicationCommands.js +176 -0
  120. package/dist/cliBrowserAdvancedCommands.js +73 -16
  121. package/dist/cliBrowserCommands.js +39 -115
  122. package/dist/cliCommandNames.js +17 -0
  123. package/dist/cliElectronCommands.js +100 -27
  124. package/dist/cliEvidenceCommands.js +13 -2
  125. package/dist/cliInvestigationCommands.js +53 -10
  126. package/dist/cliJsonInput.js +54 -0
  127. package/dist/cliObservationOptions.js +137 -0
  128. package/dist/cliPolicyCommands.js +80 -46
  129. package/dist/cliSetup.js +289 -0
  130. package/dist/config/environment.js +107 -0
  131. package/dist/config/parseConfig.js +228 -0
  132. package/dist/config/parsers.js +68 -0
  133. package/dist/config/permissions.js +30 -0
  134. package/dist/config/types.js +1 -0
  135. package/dist/config.js +1 -292
  136. package/dist/contracts/applicationToolContracts.js +225 -0
  137. package/dist/contracts/artifactToolContracts.js +5 -9
  138. package/dist/contracts/browserToolContracts.js +14 -62
  139. package/dist/contracts/electronToolContracts.js +45 -19
  140. package/dist/contracts/errorSchemas.js +1 -0
  141. package/dist/contracts/investigationExamples.js +0 -6
  142. package/dist/contracts/javascriptApplicationWorkflowExamples.js +46 -0
  143. package/dist/contracts/javascriptRuntimeReconciliationExample.js +208 -0
  144. package/dist/contracts/managedToolContracts.js +153 -0
  145. package/dist/contracts/managedWorkflowExamples.js +346 -0
  146. package/dist/contracts/managedWorkflowToolContracts.js +203 -0
  147. package/dist/contracts/nativeToolContracts.js +2 -6
  148. package/dist/contracts/promptContracts.js +18 -2
  149. package/dist/contracts/providerSelection.js +2 -0
  150. package/dist/contracts/toolContractExamples.js +10 -25
  151. package/dist/contracts/toolContracts.js +49 -47
  152. package/dist/contracts/toolEffects.js +174 -0
  153. package/dist/contracts/toolOutputSchemaGroups.js +232 -0
  154. package/dist/contracts/toolOutputSchemaPrimitives.js +327 -0
  155. package/dist/contracts/toolOutputSchemas.js +2 -535
  156. package/dist/doctorRuntime.js +42 -1
  157. package/dist/domain/analysisErrorPresentation.js +234 -0
  158. package/dist/domain/analysisErrorProjection.js +284 -0
  159. package/dist/domain/artifactComparison.js +37 -19
  160. package/dist/domain/binaryTarget.js +87 -37
  161. package/dist/domain/browserObservation.js +1 -282
  162. package/dist/domain/browserObservationSchemas.js +286 -0
  163. package/dist/domain/bundleComparison.js +4 -4
  164. package/dist/domain/electronObservation.js +13 -0
  165. package/dist/domain/electronStaticAnalysis.js +9 -0
  166. package/dist/domain/electronStaticAnalysisBrowser.js +206 -0
  167. package/dist/domain/electronStaticAnalysisIpc.js +171 -0
  168. package/dist/domain/electronStaticAnalysisNative.js +164 -0
  169. package/dist/domain/electronStaticAnalysisTypes.js +1 -0
  170. package/dist/domain/electronStaticAnalysisValues.js +103 -0
  171. package/dist/domain/errors.js +32 -448
  172. package/dist/domain/functionComparison.js +4 -165
  173. package/dist/domain/functionComparisonDimensions.js +164 -0
  174. package/dist/domain/functionComparisonSchemas.js +3 -8
  175. package/dist/domain/inputIssueProjection.js +52 -0
  176. package/dist/domain/javascriptApplicationAnalysis.js +155 -0
  177. package/dist/domain/javascriptApplicationChangeGraph.js +231 -0
  178. package/dist/domain/javascriptApplicationEvidenceSchemas.js +18 -0
  179. package/dist/domain/javascriptApplicationGraph.js +2 -1
  180. package/dist/domain/javascriptApplicationGraphSchemas.js +7 -0
  181. package/dist/domain/javascriptApplicationVersionComparison.js +116 -0
  182. package/dist/domain/javascriptApplicationVersionComparisonSchemas.js +139 -0
  183. package/dist/domain/javascriptApplicationVersionItems.js +233 -0
  184. package/dist/domain/javascriptApplicationVersionKeys.js +170 -0
  185. package/dist/domain/javascriptExportInstrumentation.js +97 -0
  186. package/dist/domain/javascriptFeatureSeed.js +140 -0
  187. package/dist/domain/javascriptFeatureTrace.js +232 -0
  188. package/dist/domain/javascriptFeatureTraceSchemas.js +136 -0
  189. package/dist/domain/javascriptFeatureTraversal.js +100 -0
  190. package/dist/domain/javascriptNativeHandoff.js +85 -0
  191. package/dist/domain/javascriptReplay.js +361 -0
  192. package/dist/domain/javascriptRuntimeLoadState.js +106 -0
  193. package/dist/domain/javascriptRuntimeReconciliation.js +42 -0
  194. package/dist/domain/javascriptRuntimeReconciliationGraph.js +169 -0
  195. package/dist/domain/javascriptRuntimeReconciliationMatching.js +247 -0
  196. package/dist/domain/javascriptRuntimeReconciliationParsing.js +160 -0
  197. package/dist/domain/javascriptRuntimeReconciliationResult.js +119 -0
  198. package/dist/domain/javascriptRuntimeReconciliationRuntime.js +316 -0
  199. package/dist/domain/javascriptRuntimeReconciliationSchemas.js +245 -0
  200. package/dist/domain/javascriptRuntimeStaticCandidates.js +193 -0
  201. package/dist/domain/javascriptSemanticAnalysis.js +386 -0
  202. package/dist/domain/javascriptSemanticIr.js +30 -0
  203. package/dist/domain/javascriptSemanticProjection.js +366 -0
  204. package/dist/domain/javascriptSemanticState.js +40 -0
  205. package/dist/domain/javascriptSemanticTraversal.js +22 -0
  206. package/dist/domain/javascriptSemanticValues.js +352 -0
  207. package/dist/domain/javascriptStaticAnalysis.js +26 -254
  208. package/dist/domain/javascriptStaticAnalysisBundler.js +209 -0
  209. package/dist/domain/javascriptStaticAnalysisCalls.js +180 -0
  210. package/dist/domain/javascriptStaticAnalysisFindings.js +39 -0
  211. package/dist/domain/javascriptStaticAnalysisHelpers.js +81 -2
  212. package/dist/domain/javascriptStaticAnalysisState.js +6 -0
  213. package/dist/domain/knownPageCoverage.js +21 -0
  214. package/dist/domain/managedApplicationGraph.js +206 -0
  215. package/dist/domain/managedApplicationGraphCoverage.js +170 -0
  216. package/dist/domain/managedApplicationGraphNodeCoverage.js +6 -0
  217. package/dist/domain/managedApplicationGraphNodes.js +336 -0
  218. package/dist/domain/managedArtifact.js +452 -0
  219. package/dist/domain/managedMemberComparison.js +211 -0
  220. package/dist/domain/managedMemberComparisonCoverage.js +72 -0
  221. package/dist/domain/managedMemberComparisonMatch.js +356 -0
  222. package/dist/domain/managedNativeVerification.js +46 -0
  223. package/dist/domain/managedNativeVerificationMatch.js +272 -0
  224. package/dist/domain/managedNativeVerificationSchemas.js +141 -0
  225. package/dist/domain/managedReconstruction.js +196 -0
  226. package/dist/domain/managedRuntimeCorrelation.js +184 -0
  227. package/dist/domain/nodeRuntimeCharacterization.js +66 -0
  228. package/dist/domain/permissionPolicy.js +2 -0
  229. package/dist/domain/reconstructionCoverage.js +387 -0
  230. package/dist/domain/reconstructionCoverageEvaluation.js +212 -0
  231. package/dist/domain/reconstructionVerificationSchemas.js +9 -3
  232. package/dist/domain/runtimeCharacterization.js +85 -0
  233. package/dist/domain/webBundleAnalyzer.js +3 -409
  234. package/dist/domain/webBundleAnalyzerAst.js +77 -0
  235. package/dist/domain/webBundleAnalyzerInspection.js +307 -0
  236. package/dist/domain/webBundleAnalyzerResult.js +120 -0
  237. package/dist/dotnet/ManagedArtifactInspector.js +339 -0
  238. package/dist/dotnet/ManagedMemberInspector.js +153 -0
  239. package/dist/dotnet/ManagedMemberInspectorCore.js +297 -0
  240. package/dist/dotnet/ManagedMemberInstructionDecoder.js +427 -0
  241. package/dist/dotnet/ManagedMemberRows.js +120 -0
  242. package/dist/dotnet/ManagedMetadataHeaps.js +131 -0
  243. package/dist/dotnet/ManagedMetadataInventory.js +104 -0
  244. package/dist/dotnet/ManagedMetadataInventoryRows.js +292 -0
  245. package/dist/dotnet/ManagedMetadataLayout.js +259 -0
  246. package/dist/dotnet/ManagedMetadataRowSizes.js +54 -0
  247. package/dist/dotnet/ManagedMethodBodyReader.js +143 -0
  248. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +311 -0
  249. package/dist/dotnet/ManagedNativeBoundaryInspector.js +143 -0
  250. package/dist/dotnet/ManagedPeReader.js +188 -0
  251. package/dist/dotnet/ManagedReaderFailure.js +10 -0
  252. package/dist/dotnet/ManagedStaticProvider.js +203 -0
  253. package/dist/generatedPackageMetadata.js +2 -2
  254. package/dist/ghidra/GhidraClient.js +76 -91
  255. package/dist/ghidra/GhidraClientStartup.js +29 -0
  256. package/dist/ghidra/GhidraClientWire.js +34 -0
  257. package/dist/ghidra/GhidraDefaults.js +1 -1
  258. package/dist/ghidra/GhidraDiagnostics.js +6 -1
  259. package/dist/ghidra/GhidraInstallation.js +20 -15
  260. package/dist/ghidra/GhidraLauncher.js +93 -29
  261. package/dist/ghidra/GhidraProvider.js +67 -161
  262. package/dist/ghidra/GhidraProviderCapabilities.js +173 -0
  263. package/dist/ghidra/GhidraSessionValues.js +2 -0
  264. package/dist/ghidra/GhidraSocketConnection.js +44 -7
  265. package/dist/ghidra/GhidraTargetSnapshot.js +30 -0
  266. package/dist/ghidra/GhidraTransport.js +71 -0
  267. package/dist/identity.js +3 -2
  268. package/dist/main/messages.js +5 -0
  269. package/dist/main/reload.js +49 -0
  270. package/dist/main/shutdown.js +25 -0
  271. package/dist/main/startup.js +14 -0
  272. package/dist/main/state.js +26 -0
  273. package/dist/main/transport.js +61 -0
  274. package/dist/main/types.js +1 -0
  275. package/dist/main.js +35 -132
  276. package/dist/process/PrivateRuntimeRoot.js +3 -2
  277. package/dist/process/ProcessOwnership.js +35 -0
  278. package/dist/process/ProviderProcess.js +2 -0
  279. package/dist/replay/JavaScriptReplayWorker.js +300 -0
  280. package/dist/replay/LinuxJavaScriptReplayRunner.js +217 -0
  281. package/dist/replay/LinuxJavaScriptReplaySandbox.js +140 -0
  282. package/dist/replay/LinuxRuntimeClosure.js +46 -0
  283. package/dist/replay/LinuxSeccompPolicy.js +40 -0
  284. package/dist/replay/ReplayOutcome.js +95 -0
  285. package/dist/replay/ReplayProcessLifecycle.js +71 -0
  286. package/dist/replay/ReplayWorkerProtocol.js +55 -0
  287. package/dist/replay/SystemJavaScriptReplayHost.js +182 -0
  288. package/dist/server/ProcessCaptureElicitation.js +157 -0
  289. package/dist/server/createServer.js +158 -41
  290. package/dist/server/registerApplicationTools/characterization.js +57 -0
  291. package/dist/server/registerApplicationTools/compareVersions.js +34 -0
  292. package/dist/server/registerApplicationTools/controlledReplay.js +38 -0
  293. package/dist/server/registerApplicationTools/coverage.js +84 -0
  294. package/dist/server/registerApplicationTools/helpers.js +42 -0
  295. package/dist/server/registerApplicationTools/traceFeature.js +26 -0
  296. package/dist/server/registerApplicationTools/types.js +1 -0
  297. package/dist/server/registerApplicationTools.js +13 -0
  298. package/dist/server/registerArtifactComparisonTool.js +16 -9
  299. package/dist/server/registerBrowserTools.js +61 -60
  300. package/dist/server/registerBundleComparisonTool.js +17 -20
  301. package/dist/server/registerElectronTools.js +39 -12
  302. package/dist/server/registerEnhancedTools.js +52 -15
  303. package/dist/server/registerEvidenceResources.js +54 -0
  304. package/dist/server/registerEvidenceTools.js +5 -1
  305. package/dist/server/registerFunctionComparisonTool.js +14 -7
  306. package/dist/server/registerInvestigationTools/helpers.js +74 -0
  307. package/dist/server/registerInvestigationTools/types.js +1 -0
  308. package/dist/server/registerInvestigationTools.js +103 -132
  309. package/dist/server/registerManagedTools.js +6 -0
  310. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +65 -0
  311. package/dist/server/registerManagedWorkflowTools/contract.js +8 -0
  312. package/dist/server/registerManagedWorkflowTools/evidence.js +43 -0
  313. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +39 -0
  314. package/dist/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.js +39 -0
  315. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +52 -0
  316. package/dist/server/registerManagedWorkflowTools/types.js +1 -0
  317. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +75 -0
  318. package/dist/server/registerManagedWorkflowTools.js +13 -0
  319. package/dist/server/registerOfficialTools.js +81 -67
  320. package/dist/server/registerProcessComparisonTool.js +25 -47
  321. package/dist/server/registerSessionRecordTools.js +137 -0
  322. package/dist/server/registerSessionStatusTool.js +9 -8
  323. package/dist/server/registerSessionTools.js +77 -216
  324. package/dist/server/sessionAvailabilityPolicy.js +10 -0
  325. package/dist/server/sessionEvidence.js +14 -19
  326. package/dist/server/toolInputValidation.js +77 -0
  327. package/dist/server/toolRegistrationOptions.js +177 -2
  328. package/dist/server/toolResult.js +30 -17
  329. package/package.json +21 -14
  330. package/scripts/rea.mjs +1 -1
  331. package/skills/{rea-analysis → reverse-engineer-anything}/SKILL.md +75 -6
  332. package/scripts/prepare-node-pty.mjs +0 -35
  333. package/scripts/rebuild-native.mjs +0 -22
@@ -0,0 +1,176 @@
1
+ import { Cli, z } from "incur";
2
+ import { compareApplicationVersionsEvidence, traceApplicationFeatureEvidence, } from "./application/JavaScriptApplicationWorkflowService.js";
3
+ import { runControlledReplay } from "./application/JavaScriptReplayService.js";
4
+ import { executeNodeCharacterization, prepareNodeCharacterization, } from "./application/NodeRuntimeCharacterizationService.js";
5
+ import { commitReconstructionCoverage, queryReconstructionCoverage, reconstructionCoverageCommitInputSchema, reconstructionCoverageQueryInputSchema, } from "./application/ReconstructionCoverageService.js";
6
+ import { authorizeFileReadWithDeferredWrite, authorizeRootPermission, } from "./application/DeferredFileAuthorization.js";
7
+ import { loadConfiguredPermissionAuthority } from "./application/PermissionConfiguration.js";
8
+ import { CLI_COMMANDS } from "./cliCommandNames.js";
9
+ import { parseCliJsonInput } from "./cliJsonInput.js";
10
+ import { logCliCommand } from "./cliLogging.js";
11
+ import { AnalysisInputError, projectAnalysisError, } from "./domain/errors.js";
12
+ import { parseConfig } from "./config.js";
13
+ import { LinuxJavaScriptReplayRunner } from "./replay/LinuxJavaScriptReplayRunner.js";
14
+ import { SystemJavaScriptReplayHost } from "./replay/SystemJavaScriptReplayHost.js";
15
+ /** Register CLI equivalents of provider-neutral application graph workflows. */
16
+ export const registerApplicationCommands = (cli, logger) => {
17
+ registerJsonCommand({
18
+ cli,
19
+ logger,
20
+ name: CLI_COMMANDS.traceApplicationFeature,
21
+ description: "Trace a typed seed through authenticated application Evidence JSON",
22
+ workflow: traceApplicationFeatureEvidence,
23
+ });
24
+ registerJsonCommand({
25
+ cli,
26
+ logger,
27
+ name: CLI_COMMANDS.compareApplicationVersions,
28
+ description: "Compare two authenticated JavaScript Application Graph versions",
29
+ workflow: compareApplicationVersionsEvidence,
30
+ });
31
+ cli.command(CLI_COMMANDS.runControlledReplay, {
32
+ description: "Plan or execute an approved extracted-module replay in the Linux sandbox",
33
+ args: z.object({
34
+ inputJson: z.string().describe("Inline replay JSON or JSON file path"),
35
+ }),
36
+ run: ({ args }) => logCliCommand(logger, CLI_COMMANDS.runControlledReplay, async () => {
37
+ const input = await parseCliJsonInput(args.inputJson, CLI_COMMANDS.runControlledReplay);
38
+ if (!input.ok)
39
+ return input.error;
40
+ const config = parseConfig(process.env);
41
+ if (!config.ok)
42
+ return projectAnalysisError(config.error);
43
+ const authority = await loadConfiguredPermissionAuthority(config.value);
44
+ if (!authority.ok)
45
+ return projectAnalysisError(authority.error);
46
+ const result = await runControlledReplay({
47
+ policy: config.value.javascriptReplayPolicy,
48
+ host: new SystemJavaScriptReplayHost(),
49
+ runner: new LinuxJavaScriptReplayRunner(),
50
+ authority: authority.value,
51
+ }, input.value);
52
+ return result.ok ? result.value : projectAnalysisError(result.error);
53
+ }),
54
+ });
55
+ registerAuthorizedJsonCommand({
56
+ cli,
57
+ logger,
58
+ name: CLI_COMMANDS.prepareNodeCharacterization,
59
+ description: "Prepare one exact Node/JavaScript characterization without execution",
60
+ workflow: (config, authority, input) => prepareNodeCharacterization(replayDependencies(config, authority), input),
61
+ });
62
+ registerAuthorizedJsonCommand({
63
+ cli,
64
+ logger,
65
+ name: CLI_COMMANDS.executeNodeCharacterization,
66
+ description: "Execute one separately approved exact Node/JavaScript characterization",
67
+ workflow: (config, authority, input) => executeNodeCharacterization(replayDependencies(config, authority), input),
68
+ });
69
+ registerCoverageCommands(cli, logger);
70
+ };
71
+ const registerAuthorizedJsonCommand = ({ cli, logger, name, description, workflow, }) => {
72
+ cli.command(name, {
73
+ description,
74
+ args: z.object({
75
+ inputJson: z.string().describe("Inline workflow JSON or JSON file path"),
76
+ }),
77
+ run: ({ args }) => logCliCommand(logger, name, async () => {
78
+ const input = await parseCliJsonInput(args.inputJson, name);
79
+ if (!input.ok)
80
+ return input.error;
81
+ const configured = await configuredAuthority();
82
+ if (!configured.ok)
83
+ return configured.error;
84
+ const result = await workflow(configured.config, configured.authority, input.value);
85
+ return result.ok ? result.value : projectAnalysisError(result.error);
86
+ }),
87
+ });
88
+ };
89
+ const registerCoverageCommands = (cli, logger) => {
90
+ registerAuthorizedJsonCommand({
91
+ cli,
92
+ logger,
93
+ name: CLI_COMMANDS.commitReconstructionCoverage,
94
+ description: "Commit one canonical reconstruction coverage workspace revision",
95
+ workflow: async (config, authority, input) => {
96
+ const parsed = reconstructionCoverageCommitInputSchema.safeParse(input);
97
+ if (!parsed.success)
98
+ return {
99
+ ok: false,
100
+ error: new AnalysisInputError(CLI_COMMANDS.commitReconstructionCoverage, { cause: parsed.error }),
101
+ };
102
+ const authorization = await authorizeFileReadWithDeferredWrite(authority, {
103
+ path: parsed.data.workspace_path,
104
+ readCapability: "investigation_workspace_read",
105
+ writeCapability: "investigation_workspace_write",
106
+ operation: CLI_COMMANDS.commitReconstructionCoverage,
107
+ });
108
+ if (!authorization.ok)
109
+ return authorization;
110
+ const write = await authorization.value.authorizeWrite();
111
+ if (!write.ok)
112
+ return write;
113
+ return commitReconstructionCoverage(parsed.data, config.evidenceFilePolicy);
114
+ },
115
+ });
116
+ registerAuthorizedJsonCommand({
117
+ cli,
118
+ logger,
119
+ name: CLI_COMMANDS.queryReconstructionCoverage,
120
+ description: "Evaluate one fail-closed reconstruction coverage boundary",
121
+ workflow: async (config, authority, input) => {
122
+ const parsed = reconstructionCoverageQueryInputSchema.safeParse(input);
123
+ if (!parsed.success)
124
+ return {
125
+ ok: false,
126
+ error: new AnalysisInputError(CLI_COMMANDS.queryReconstructionCoverage, { cause: parsed.error }),
127
+ };
128
+ const authorized = await authorizeRootPermission(authority, {
129
+ capability: "investigation_workspace_read",
130
+ roots: [parsed.data.workspace_path],
131
+ access: "read",
132
+ operation: CLI_COMMANDS.queryReconstructionCoverage,
133
+ });
134
+ if (!authorized.ok)
135
+ return authorized;
136
+ return queryReconstructionCoverage(parsed.data, config.evidenceFilePolicy, Date.now());
137
+ },
138
+ });
139
+ };
140
+ const configuredAuthority = async () => {
141
+ const config = parseConfig(process.env);
142
+ if (!config.ok)
143
+ return { ok: false, error: projectAnalysisError(config.error) };
144
+ const authority = await loadConfiguredPermissionAuthority(config.value);
145
+ return authority.ok
146
+ ? { ok: true, config: config.value, authority: authority.value }
147
+ : { ok: false, error: projectAnalysisError(authority.error) };
148
+ };
149
+ const replayDependencies = (config, authority) => ({
150
+ policy: config.javascriptReplayPolicy,
151
+ host: new SystemJavaScriptReplayHost(),
152
+ runner: new LinuxJavaScriptReplayRunner(),
153
+ authority,
154
+ });
155
+ const registerJsonCommand = ({ cli, logger, name, description, workflow, }) => {
156
+ cli.command(name, {
157
+ description,
158
+ args: z.object({
159
+ inputJson: z.string().describe("Inline workflow JSON or JSON file path"),
160
+ }),
161
+ run: ({ args }) => logCliCommand(logger, name, async () => {
162
+ const input = await parseCliJsonInput(args.inputJson, name);
163
+ if (!input.ok)
164
+ return input.error;
165
+ const result = workflow(input.value);
166
+ return result.ok
167
+ ? result.value
168
+ : {
169
+ error: "Application workflow failed",
170
+ ...projectAnalysisError(result.error instanceof AnalysisInputError
171
+ ? result.error
172
+ : new AnalysisInputError(name)),
173
+ };
174
+ }),
175
+ });
176
+ };
@@ -10,8 +10,11 @@ import { discoverWebMcpToolsInputSchema } from "./domain/webMcpDiscovery.js";
10
10
  import { captureWebScreenshotInputSchema, compareWebScreenshotsInputSchema, } from "./domain/webScreenshot.js";
11
11
  import { CLI_COMMANDS } from "./cliCommandNames.js";
12
12
  const scopeOptions = {
13
- allowedOrigins: z.array(z.string().min(1)).optional(),
14
- approved: z.boolean().default(false),
13
+ allowedOrigins: z
14
+ .array(z.string().min(1))
15
+ .optional()
16
+ .describe("Exact origins to observe; defaults to REA_BROWSER_ALLOWED_ORIGINS_JSON"),
17
+ approved: z.boolean().default(false).describe("Approve passive observation"),
15
18
  };
16
19
  /** Register WebMCP, capture-diff, and screenshot CLI equivalents. */
17
20
  export const registerAdvancedBrowserCommands = (cli, logger) => {
@@ -23,19 +26,47 @@ export const registerAdvancedBrowserCommands = (cli, logger) => {
23
26
  const registerWebMcp = (cli, logger) => {
24
27
  cli.command(CLI_COMMANDS.discoverWebMcpTools, {
25
28
  description: "Passively discover page-declared WebMCP tools",
26
- args: z.object({ endpoint: z.string(), targetId: z.string() }),
29
+ args: z.object({
30
+ endpoint: z.string().describe("Configured loopback CDP HTTP endpoint"),
31
+ targetId: z.string().describe("Target ID from list-browser-targets"),
32
+ }),
27
33
  options: z.object({
28
34
  ...scopeOptions,
29
- observationMs: z.number().int().min(0).max(10_000).default(100),
30
- maxTools: z.number().int().min(1).max(5_000).default(500),
35
+ observationMs: z
36
+ .number()
37
+ .int()
38
+ .min(0)
39
+ .max(10_000)
40
+ .default(100)
41
+ .describe("Observation duration in milliseconds"),
42
+ maxTools: z
43
+ .number()
44
+ .int()
45
+ .min(1)
46
+ .max(5_000)
47
+ .default(500)
48
+ .describe("Maximum page-declared WebMCP tools to return"),
31
49
  maxSchemaBytes: z
32
50
  .number()
33
51
  .int()
34
52
  .min(1)
35
53
  .max(1_024 * 1_024)
36
- .default(256 * 1_024),
37
- maxSchemaNodes: z.number().int().min(1).max(100_000).default(5_000),
38
- maxSchemaDepth: z.number().int().min(1).max(100).default(20),
54
+ .default(256 * 1_024)
55
+ .describe("Maximum serialized size of one declared tool schema"),
56
+ maxSchemaNodes: z
57
+ .number()
58
+ .int()
59
+ .min(1)
60
+ .max(100_000)
61
+ .default(5_000)
62
+ .describe("Maximum nodes in one declared tool schema"),
63
+ maxSchemaDepth: z
64
+ .number()
65
+ .int()
66
+ .min(1)
67
+ .max(100)
68
+ .default(20)
69
+ .describe("Maximum nesting depth in one declared tool schema"),
39
70
  }),
40
71
  run: ({ args, options }) => logCliCommand(logger, "discover-webmcp-tools", async () => {
41
72
  const context = await browserContext();
@@ -62,9 +93,18 @@ const registerWebMcp = (cli, logger) => {
62
93
  const registerCaptureDiff = (cli, logger) => {
63
94
  cli.command(CLI_COMMANDS.compareWebCaptures, {
64
95
  description: "Compare two normalized web capture JSON values",
65
- args: z.object({ beforeJson: z.string(), afterJson: z.string() }),
96
+ args: z.object({
97
+ beforeJson: z.string().describe("Earlier normalized web capture JSON"),
98
+ afterJson: z.string().describe("Later normalized web capture JSON"),
99
+ }),
66
100
  options: z.object({
67
- maxChanges: z.number().int().min(1).max(20_000).default(2_000),
101
+ maxChanges: z
102
+ .number()
103
+ .int()
104
+ .min(1)
105
+ .max(20_000)
106
+ .default(2_000)
107
+ .describe("Maximum normalized changes to return"),
68
108
  }),
69
109
  run: ({ args, options }) => logCliCommand(logger, "compare-web-captures", async () => {
70
110
  const before = parseJson(args.beforeJson);
@@ -84,16 +124,23 @@ const registerCaptureDiff = (cli, logger) => {
84
124
  const registerScreenshot = (cli, logger) => {
85
125
  cli.command(CLI_COMMANDS.captureWebScreenshot, {
86
126
  description: "Capture an explicitly approved visible page viewport",
87
- args: z.object({ endpoint: z.string(), targetId: z.string() }),
127
+ args: z.object({
128
+ endpoint: z.string().describe("Configured loopback CDP HTTP endpoint"),
129
+ targetId: z.string().describe("Target ID from list-browser-targets"),
130
+ }),
88
131
  options: z.object({
89
132
  ...scopeOptions,
90
- screenshotApproved: z.boolean().default(false),
133
+ screenshotApproved: z
134
+ .boolean()
135
+ .default(false)
136
+ .describe("Approve capturing the visible page viewport"),
91
137
  maximumImageBytes: z
92
138
  .number()
93
139
  .int()
94
140
  .min(1)
95
141
  .max(8 * 1_024 * 1_024)
96
- .default(4 * 1_024 * 1_024),
142
+ .default(4 * 1_024 * 1_024)
143
+ .describe("Maximum captured PNG size"),
97
144
  }),
98
145
  run: ({ args, options }) => logCliCommand(logger, "capture-web-screenshot", async () => {
99
146
  const context = await browserContext();
@@ -117,15 +164,25 @@ const registerScreenshot = (cli, logger) => {
117
164
  const registerScreenshotDiff = (cli, logger) => {
118
165
  cli.command(CLI_COMMANDS.compareWebScreenshots, {
119
166
  description: "Compare two self-verifying PNG artifact JSON values",
120
- args: z.object({ beforeJson: z.string(), afterJson: z.string() }),
167
+ args: z.object({
168
+ beforeJson: z.string().describe("Earlier screenshot artifact JSON"),
169
+ afterJson: z.string().describe("Later screenshot artifact JSON"),
170
+ }),
121
171
  options: z.object({
122
- channelThreshold: z.number().int().min(0).max(255).default(0),
172
+ channelThreshold: z
173
+ .number()
174
+ .int()
175
+ .min(0)
176
+ .max(255)
177
+ .default(0)
178
+ .describe("Per-channel difference threshold for changed pixels"),
123
179
  maximumPixels: z
124
180
  .number()
125
181
  .int()
126
182
  .min(1)
127
183
  .max(32_000_000)
128
- .default(16_000_000),
184
+ .default(16_000_000)
185
+ .describe("Maximum decoded pixels per screenshot"),
129
186
  }),
130
187
  run: ({ args, options }) => logCliCommand(logger, "compare-web-screenshots", async () => {
131
188
  const parsed = compareWebScreenshotsInputSchema.safeParse({
@@ -9,6 +9,7 @@ import { analyzeWebBundleInputSchema } from "./domain/webBundleAnalysis.js";
9
9
  import { observeWebSessionInputSchema } from "./domain/browserSession.js";
10
10
  import { AnalysisInputError, projectAnalysisError } from "./domain/errors.js";
11
11
  import { CLI_COMMANDS } from "./cliCommandNames.js";
12
+ import { browserPageInspectionOptions } from "./cliObservationOptions.js";
12
13
  const browserScopeOptions = {
13
14
  allowedOrigins: z
14
15
  .array(z.string().min(1))
@@ -16,6 +17,14 @@ const browserScopeOptions = {
16
17
  .describe("Exact origins to observe; defaults to REA_BROWSER_ALLOWED_ORIGINS_JSON"),
17
18
  approved: z.boolean().default(false).describe("Approve passive observation"),
18
19
  };
20
+ const boundedCount = (subject, maximum, fallback, minimum = 1) => z
21
+ .number()
22
+ .int()
23
+ .min(minimum)
24
+ .max(maximum)
25
+ .default(fallback)
26
+ .describe(`Maximum ${subject}`);
27
+ const boundedBytes = (subject, maximum, fallback) => boundedCount(`${subject} in bytes`, maximum, fallback);
19
28
  /** Register CLI equivalents of the passive browser MCP tools. */
20
29
  export const registerBrowserCommands = (cli, logger) => {
21
30
  registerTargetList(cli, logger);
@@ -31,8 +40,13 @@ const registerTargetList = (cli, logger) => {
31
40
  }),
32
41
  options: z.object({
33
42
  ...browserScopeOptions,
34
- offset: z.number().int().min(0).default(0),
35
- limit: z.number().int().min(1).max(200).default(100),
43
+ offset: z
44
+ .number()
45
+ .int()
46
+ .min(0)
47
+ .default(0)
48
+ .describe("Zero-based browser-target offset"),
49
+ limit: boundedCount("browser targets to return", 200, 100),
36
50
  }),
37
51
  run: ({ args, options }) => logCliCommand(logger, "list-browser-targets", async () => {
38
52
  const context = await browserContext();
@@ -59,91 +73,7 @@ const registerPageInspection = (cli, logger) => {
59
73
  endpoint: z.string().describe("Configured loopback CDP HTTP endpoint"),
60
74
  targetId: z.string().describe("Target ID from list-browser-targets"),
61
75
  }),
62
- options: z.object({
63
- ...browserScopeOptions,
64
- observationMs: z.number().int().min(0).max(10_000).default(500),
65
- includeAccessibilityText: z.boolean().default(false),
66
- includeConsoleText: z.boolean().default(false),
67
- consoleTextApproved: z.boolean().default(false),
68
- includeJsonBodyShapes: z.boolean().default(false),
69
- jsonBodySchemaApproved: z.boolean().default(false),
70
- includeWebsocketShapes: z.boolean().default(false),
71
- websocketShapeApproved: z.boolean().default(false),
72
- includeScriptSources: z.boolean().default(false),
73
- includeStorageKeys: z.boolean().default(false),
74
- maxFrames: z.number().int().min(1).max(1_000).default(200),
75
- maxDomNodes: z.number().int().min(1).max(10_000).default(2_000),
76
- maxAxNodes: z.number().int().min(1).max(10_000).default(2_000),
77
- maxAxTextFieldBytes: z
78
- .number()
79
- .int()
80
- .min(1)
81
- .max(16 * 1_024)
82
- .default(1_024),
83
- maxTotalAxTextBytes: z
84
- .number()
85
- .int()
86
- .min(1)
87
- .max(1_024 * 1_024)
88
- .default(64 * 1_024),
89
- maxScripts: z.number().int().min(1).max(1_000).default(200),
90
- maxResources: z.number().int().min(1).max(10_000).default(2_000),
91
- maxWorkers: z.number().int().min(1).max(5_000).default(500),
92
- maxStorageKeys: z.number().int().min(1).max(10_000).default(1_000),
93
- maxScriptSourceBytes: z
94
- .number()
95
- .int()
96
- .min(1)
97
- .max(4 * 1_024 * 1_024)
98
- .default(1_024 * 1_024),
99
- maxTotalScriptSourceBytes: z
100
- .number()
101
- .int()
102
- .min(1)
103
- .max(16 * 1_024 * 1_024)
104
- .default(4 * 1_024 * 1_024),
105
- maxNetworkEvents: z.number().int().min(1).max(10_000).default(1_000),
106
- maxConsoleEvents: z.number().int().min(1).max(2_000).default(200),
107
- maxConsoleTextFieldBytes: z
108
- .number()
109
- .int()
110
- .min(1)
111
- .max(16 * 1_024)
112
- .default(1_024),
113
- maxTotalConsoleTextBytes: z
114
- .number()
115
- .int()
116
- .min(1)
117
- .max(1_024 * 1_024)
118
- .default(64 * 1_024),
119
- maxJsonBodyBytes: z
120
- .number()
121
- .int()
122
- .min(1)
123
- .max(4 * 1_024 * 1_024)
124
- .default(1_024 * 1_024),
125
- maxTotalJsonBodyBytes: z
126
- .number()
127
- .int()
128
- .min(1)
129
- .max(16 * 1_024 * 1_024)
130
- .default(4 * 1_024 * 1_024),
131
- maxJsonShapeNodes: z.number().int().min(1).max(100_000).default(5_000),
132
- maxJsonShapeDepth: z.number().int().min(1).max(100).default(20),
133
- maxWebsocketEvents: z.number().int().min(1).max(5_000).default(500),
134
- maxWebsocketShapeBytes: z
135
- .number()
136
- .int()
137
- .min(1)
138
- .max(1_024 * 1_024)
139
- .default(64 * 1_024),
140
- maxTotalWebsocketShapeBytes: z
141
- .number()
142
- .int()
143
- .min(1)
144
- .max(16 * 1_024 * 1_024)
145
- .default(1_024 * 1_024),
146
- }),
76
+ options: browserPageInspectionOptions,
147
77
  run: ({ args, options }) => logCliCommand(logger, "inspect-web-page", async () => {
148
78
  const context = await browserContext();
149
79
  if (!context.ok)
@@ -204,32 +134,26 @@ const registerBundleAnalysis = (cli, logger) => {
204
134
  }),
205
135
  options: z.object({
206
136
  ...browserScopeOptions,
207
- sourceCaptureApproved: z.boolean().default(false),
208
- observationMs: z.number().int().min(0).max(10_000).default(500),
209
- fetchSourceMaps: z.boolean().default(false),
210
- sourceMapFetchApproved: z.boolean().default(false),
211
- maxFindings: z.number().int().min(1).max(10_000).default(1_000),
212
- maxAstNodes: z.number().int().min(1).max(2_000_000).default(250_000),
213
- maxSourceMaps: z.number().int().min(1).max(1_000).default(100),
214
- maxSourceMapBytes: z
215
- .number()
216
- .int()
217
- .min(1)
218
- .max(16 * 1_024 * 1_024)
219
- .default(4 * 1_024 * 1_024),
220
- maxTotalSourceMapBytes: z
221
- .number()
222
- .int()
223
- .min(1)
224
- .max(64 * 1_024 * 1_024)
225
- .default(16 * 1_024 * 1_024),
226
- maxSourceMapMappings: z
227
- .number()
228
- .int()
229
- .min(1)
230
- .max(100_000)
231
- .default(10_000),
232
- maxOriginalSources: z.number().int().min(1).max(20_000).default(2_000),
137
+ sourceCaptureApproved: z
138
+ .boolean()
139
+ .default(false)
140
+ .describe("Approve capturing bounded script source text"),
141
+ observationMs: boundedCount("observation duration in milliseconds", 10_000, 500, 0),
142
+ fetchSourceMaps: z
143
+ .boolean()
144
+ .default(false)
145
+ .describe("Fetch source maps referenced by captured scripts"),
146
+ sourceMapFetchApproved: z
147
+ .boolean()
148
+ .default(false)
149
+ .describe("Approve fetching referenced source maps from allowed origins"),
150
+ maxFindings: boundedCount("static-analysis findings", 10_000, 1_000),
151
+ maxAstNodes: boundedCount("JavaScript AST nodes", 2_000_000, 250_000),
152
+ maxSourceMaps: boundedCount("source maps", 1_000, 100),
153
+ maxSourceMapBytes: boundedBytes("one source map", 16 * 1_024 * 1_024, 4 * 1_024 * 1_024),
154
+ maxTotalSourceMapBytes: boundedBytes("total source maps", 64 * 1_024 * 1_024, 16 * 1_024 * 1_024),
155
+ maxSourceMapMappings: boundedCount("decoded source-map mappings", 100_000, 10_000),
156
+ maxOriginalSources: boundedCount("original source files", 20_000, 2_000),
233
157
  }),
234
158
  run: ({ args, options }) => logCliCommand(logger, "analyze-web-bundle", async () => {
235
159
  const context = await browserContext();
@@ -271,8 +195,8 @@ const registerObservationSession = (cli, logger) => {
271
195
  }),
272
196
  options: z.object({
273
197
  ...browserScopeOptions,
274
- observationMs: z.number().int().min(1).max(60_000).default(10_000),
275
- maxTimelineEvents: z.number().int().min(1).max(20_000).default(2_000),
198
+ observationMs: boundedCount("observation duration in milliseconds", 60_000, 10_000),
199
+ maxTimelineEvents: boundedCount("timeline events", 20_000, 2_000),
276
200
  }),
277
201
  run: ({ args, options }) => logCliCommand(logger, "observe-web-session", async () => {
278
202
  const context = await browserContext();
@@ -16,6 +16,14 @@ export const CLI_COMMANDS = Object.freeze({
16
16
  importReferenceSource: "import-reference-source",
17
17
  inventoryArtifact: "inventory-artifact",
18
18
  extractArtifact: "extract-artifact",
19
+ inspectManagedArtifact: "inspect-managed-artifact",
20
+ inspectManagedMembers: "inspect-managed-members",
21
+ inspectManagedNativeBoundaries: "inspect-managed-native-boundaries",
22
+ compareManagedMembers: "compare-managed-members",
23
+ verifyManagedNativeBoundaries: "verify-managed-native-boundaries",
24
+ importManagedReconstruction: "import-managed-reconstruction",
25
+ planManagedRuntimeCorrelation: "plan-managed-runtime-correlation",
26
+ projectManagedApplicationGraph: "project-managed-application-graph",
19
27
  inspectMacho: "inspect-macho",
20
28
  inspectSignature: "inspect-signature",
21
29
  listArchitectures: "list-architectures",
@@ -38,6 +46,15 @@ export const CLI_COMMANDS = Object.freeze({
38
46
  compareWebScreenshots: "compare-web-screenshots",
39
47
  listElectronTargets: "list-electron-targets",
40
48
  inspectElectronPage: "inspect-electron-page",
49
+ analyzeJavaScriptApplication: "analyze-javascript-application",
50
+ reconcileJavaScriptRuntime: "reconcile-javascript-runtime",
51
+ traceApplicationFeature: "trace-application-feature",
52
+ compareApplicationVersions: "compare-application-versions",
53
+ runControlledReplay: "run-controlled-replay",
54
+ prepareNodeCharacterization: "prepare-node-characterization",
55
+ executeNodeCharacterization: "execute-node-characterization",
56
+ commitReconstructionCoverage: "commit-reconstruction-coverage",
57
+ queryReconstructionCoverage: "query-reconstruction-coverage",
41
58
  });
42
59
  /** Ordered primary CLI inventory; aliases are intentionally excluded. */
43
60
  export const CLI_COMMAND_NAMES = Object.freeze(Object.values(CLI_COMMANDS));