rea-agents 3.0.0 → 3.2.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 (628) hide show
  1. package/README.md +83 -108
  2. package/bridge/ghidra/ReaGhidraBridge.java +609 -841
  3. package/bridge/hopper_bridge.py +99 -344
  4. package/dist/application/AbortablePromise.js +6 -3
  5. package/dist/application/AnalysisContextQueries.js +21 -9
  6. package/dist/application/AnalysisSnapshotCache.js +0 -1
  7. package/dist/application/AnalysisSnapshotFiles.js +7 -7
  8. package/dist/application/AndroidApplicationService.js +1 -1
  9. package/dist/application/AppleApplicationService.js +1 -1
  10. package/dist/application/ArtifactExtraction.js +35 -54
  11. package/dist/application/ArtifactExtractionDestination.js +17 -0
  12. package/dist/application/ArtifactGraphConstruction.js +2 -17
  13. package/dist/application/ArtifactInventory/classify.js +2 -6
  14. package/dist/application/ArtifactInventory/hash.js +2 -20
  15. package/dist/application/ArtifactInventory/policy.js +17 -0
  16. package/dist/application/ArtifactInventory/reader.js +1 -4
  17. package/dist/application/ArtifactInventory/scanCanonical.js +8 -15
  18. package/dist/application/ArtifactInventory/scanReader.js +76 -58
  19. package/dist/application/ArtifactInventory/types.js +1 -5
  20. package/dist/application/ArtifactInventory.js +6 -14
  21. package/dist/application/AuthorizedArtifactInventory.js +3 -13
  22. package/dist/application/BinarySession.js +54 -28
  23. package/dist/application/BinarySessionComposition.js +0 -11
  24. package/dist/application/BinarySessionOpen.js +2 -1
  25. package/dist/application/BinarySessionRecords.js +24 -86
  26. package/dist/application/BinarySessionStatus.js +16 -21
  27. package/dist/application/BinaryTargetResolver.js +216 -0
  28. package/dist/application/BrowserEvidence.js +39 -57
  29. package/dist/application/BrowserObservationService.js +3 -6
  30. package/dist/application/BrowserScenarioCaptureService.js +3 -6
  31. package/dist/application/BrowserScenarioEvidence.js +3 -3
  32. package/dist/application/CallPathTracing.js +2 -36
  33. package/dist/application/CapabilityClientRequirements.js +26 -0
  34. package/dist/application/CapabilityInventory.js +143 -77
  35. package/dist/application/ClientConfigurationDocument.js +27 -0
  36. package/dist/application/ClientRegistrationStatus.js +16 -13
  37. package/dist/application/CommandShimReplay.js +14 -1
  38. package/dist/application/DirectAnalysis.js +22 -46
  39. package/dist/application/DirectAnalysisStatus.js +5 -61
  40. package/dist/application/Doctor.js +11 -32
  41. package/dist/application/DoctorDiagnostics.js +1 -2
  42. package/dist/application/DoctorScope.js +1 -1
  43. package/dist/application/ElectronActiveEvidence.js +50 -0
  44. package/dist/application/ElectronActiveObservationPort.js +1 -0
  45. package/dist/application/ElectronActiveObservationService.js +78 -0
  46. package/dist/application/ElectronBoundaryAnalysis.js +7 -8
  47. package/dist/application/ElectronBoundaryGraphContext.js +1 -1
  48. package/dist/application/ElectronBoundaryGraphIpc.js +3 -3
  49. package/dist/application/ElectronBoundaryGraphNative.js +1 -2
  50. package/dist/application/ElectronBoundaryGraphWindows.js +6 -8
  51. package/dist/application/ElectronEvidence.js +4 -7
  52. package/dist/application/ElectronObservationService.js +5 -9
  53. package/dist/application/EnhancedLiteralTracing.js +42 -65
  54. package/dist/application/EnhancedTools.js +98 -64
  55. package/dist/application/EvidenceBundleCommands.js +16 -12
  56. package/dist/application/EvidenceBundleFiles.js +9 -15
  57. package/dist/application/EvidenceLedger.js +14 -42
  58. package/dist/application/FilesystemSnapshot.js +2 -3
  59. package/dist/application/InterfaceBuilderAnalysis.js +266 -0
  60. package/dist/application/InventoryProjectionEvidence.js +4 -2
  61. package/dist/application/InvestigationProviders.js +1 -1
  62. package/dist/application/JavaScriptApplicationEvidence.js +2 -5
  63. package/dist/application/JavaScriptApplicationEvidenceGraph.js +6 -10
  64. package/dist/application/JavaScriptApplicationService.js +6 -29
  65. package/dist/application/JavaScriptApplicationWorkflowEvidence.js +5 -5
  66. package/dist/application/JavaScriptApplicationWorkflowService.js +0 -8
  67. package/dist/application/JavaScriptArtifactAnalysis.js +38 -127
  68. package/dist/application/JavaScriptArtifactFiles.js +67 -107
  69. package/dist/application/JavaScriptArtifactGraphAccumulator.js +0 -7
  70. package/dist/application/JavaScriptArtifactGraphBuilder.js +7 -58
  71. package/dist/application/JavaScriptArtifactGraphBundlers.js +1 -6
  72. package/dist/application/JavaScriptArtifactGraphContext.js +12 -39
  73. package/dist/application/JavaScriptArtifactGraphDocuments.js +4 -11
  74. package/dist/application/JavaScriptArtifactGraphEvidence.js +0 -14
  75. package/dist/application/JavaScriptArtifactGraphFindings.js +3 -3
  76. package/dist/application/JavaScriptArtifactGraphStructure.js +16 -17
  77. package/dist/application/JavaScriptArtifactPathResolution.js +61 -49
  78. package/dist/application/JavaScriptArtifactReconstruction.js +5 -10
  79. package/dist/application/JavaScriptArtifactReconstructionInput.js +2 -14
  80. package/dist/application/JavaScriptJsonModules.js +2 -2
  81. package/dist/application/JavaScriptModuleRelationships.js +22 -27
  82. package/dist/application/JavaScriptReplayPermission.js +1 -1
  83. package/dist/application/JavaScriptReplayPlanning.js +9 -3
  84. package/dist/application/JavaScriptReplayService.js +29 -47
  85. package/dist/application/JavaScriptReturnShapeProjection.js +12 -42
  86. package/dist/application/JavaScriptRuntimeObservationEvidence.js +7 -8
  87. package/dist/application/JavaScriptRuntimeObservationService.js +4 -8
  88. package/dist/application/JavaScriptRuntimeReconciliationEvidence.js +2 -3
  89. package/dist/application/JavaScriptSemanticGraphBuilder.js +11 -41
  90. package/dist/application/JavaScriptSemanticGraphConstruction.js +5 -29
  91. package/dist/application/JavaScriptSemanticGraphEvidence.js +1 -1
  92. package/dist/application/JavaScriptSemanticGraphFingerprintProjection.js +1 -1
  93. package/dist/application/JavaScriptSemanticGraphFlowProjection.js +0 -13
  94. package/dist/application/JavaScriptSemanticGraphProjection.js +1 -3
  95. package/dist/application/JavaScriptSemanticTraceService.js +1 -10
  96. package/dist/application/JsonFiles.js +79 -0
  97. package/dist/application/LinuxHopper.js +11 -9
  98. package/dist/application/LoopbackReplay.js +26 -23
  99. package/dist/application/LoopbackReplayRecorder.js +29 -1
  100. package/dist/application/ManagedApplicationGraphService.js +1 -2
  101. package/dist/application/ManagedMemberComparisonService.js +11 -41
  102. package/dist/application/ManagedNativeVerificationService.js +1 -2
  103. package/dist/application/ManagedReconstructionService.js +1 -1
  104. package/dist/application/ManagedRuntimeCorrelationService.js +14 -13
  105. package/dist/application/NativeApiInspection.js +2 -7
  106. package/dist/application/NativeUiActionTrace.js +394 -0
  107. package/dist/application/NodeRuntimeCharacterizationService.js +11 -16
  108. package/dist/application/PermissionAuthority.js +15 -7
  109. package/dist/application/PermissionFailure.js +5 -0
  110. package/dist/application/ProcessCaptureAuthority.js +5 -7
  111. package/dist/application/ProcessCaptureJournal.js +3 -2
  112. package/dist/application/ProcessCaptureLifecycle.js +10 -12
  113. package/dist/application/ProcessCheckpoints.js +29 -11
  114. package/dist/application/ProcessCli.js +8 -17
  115. package/dist/application/ProcessEvidence.js +5 -7
  116. package/dist/application/ProcessHarness.js +60 -20
  117. package/dist/application/ProcessNormalization.js +2 -1
  118. package/dist/application/ProcessReactiveCoordinator.js +2 -4
  119. package/dist/application/ProcessReactiveEffects.js +9 -3
  120. package/dist/application/ProcessReactiveHarness.js +13 -7
  121. package/dist/application/ProcessSampling.js +2 -4
  122. package/dist/application/ProcessTimer.js +39 -0
  123. package/dist/application/ProjectPermissionStore.js +39 -95
  124. package/dist/application/RealHopperAssertions.js +20 -66
  125. package/dist/application/ReconstructionCoverageService.js +12 -58
  126. package/dist/application/ReconstructionObligationAuthority.js +2 -2
  127. package/dist/application/ReconstructionObligationCandidates.js +4 -4
  128. package/dist/application/ReconstructionObligationLedgerEvaluation.js +8 -15
  129. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -7
  130. package/dist/application/ReconstructionObligationLedgerService.js +19 -38
  131. package/dist/application/ReferenceSourceImport.js +21 -47
  132. package/dist/application/ReferenceSourceImportEntries.js +2 -4
  133. package/dist/application/ReferenceSourceImportPolicy.js +5 -32
  134. package/dist/application/ReferenceSourceImportTypes.js +0 -16
  135. package/dist/application/RuntimeExecutableDiagnostics.js +55 -29
  136. package/dist/application/SessionProviderRouter.js +2 -2
  137. package/dist/application/Setup.js +1 -3
  138. package/dist/application/SetupClientConfiguration.js +22 -88
  139. package/dist/application/SetupRegistrationEnvironment.js +0 -7
  140. package/dist/application/StoreFileLock.js +119 -0
  141. package/dist/application/TerminalRenderer.js +2 -3
  142. package/dist/application/Uninstall.js +9 -14
  143. package/dist/application/UnknownEvidence.js +1 -1
  144. package/dist/application/WindowsCapabilities.js +5 -4
  145. package/dist/artifacts/ArtifactPaths.js +2 -5
  146. package/dist/artifacts/ArtifactProvider.js +43 -67
  147. package/dist/artifacts/DirectoryArtifactReader.js +13 -8
  148. package/dist/artifacts/MachOSliceArtifactReader.js +1 -5
  149. package/dist/artifacts/NativeDmgArtifactReader.js +11 -11
  150. package/dist/artifacts/NibArchive.js +269 -0
  151. package/dist/artifacts/SafeOutputTree.js +21 -31
  152. package/dist/browser/BrowserProcessStartup.js +1 -2
  153. package/dist/browser/CdpAuthorizedMainFrame.js +16 -0
  154. package/dist/browser/CdpBrowserProvider.js +3 -13
  155. package/dist/browser/CdpCanonicalJsonDigest.js +9 -0
  156. package/dist/browser/CdpCaptureDocuments.js +28 -76
  157. package/dist/browser/CdpCaptureEventBodyShapes.js +13 -33
  158. package/dist/browser/CdpCaptureEventHandlers.js +22 -87
  159. package/dist/browser/CdpCaptureEvents.js +2 -8
  160. package/dist/browser/CdpCaptureStorage.js +9 -20
  161. package/dist/browser/CdpCaptureStorageFingerprints.js +85 -95
  162. package/dist/browser/CdpCaptureValues.js +21 -21
  163. package/dist/browser/CdpConnection.js +10 -25
  164. package/dist/browser/CdpElectronInspection.js +29 -51
  165. package/dist/browser/CdpElectronProvider.js +10 -35
  166. package/dist/browser/CdpElectronScriptEvents.js +8 -16
  167. package/dist/browser/CdpElectronScripts.js +6 -35
  168. package/dist/browser/CdpElectronWorkers.js +6 -10
  169. package/dist/browser/CdpEndpoint.js +25 -41
  170. package/dist/browser/CdpObservationSession.js +14 -26
  171. package/dist/browser/CdpPageCapture.js +34 -48
  172. package/dist/browser/CdpPageCaptureScripts.js +1 -19
  173. package/dist/browser/CdpPageCaptureWorkers.js +6 -10
  174. package/dist/browser/CdpSafeMetadata.js +19 -22
  175. package/dist/browser/CdpScreenshot.js +3 -5
  176. package/dist/browser/CdpTargetSession.js +1 -2
  177. package/dist/browser/CdpWebMcpDiscovery.js +13 -22
  178. package/dist/browser/ElectronFileScope.js +8 -19
  179. package/dist/browser/JavaScriptRuntimeScope.js +10 -10
  180. package/dist/browser/PlaywrightBrowserScenarioProvider.js +31 -64
  181. package/dist/browser/PlaywrightElectronActiveActions.js +309 -0
  182. package/dist/browser/PlaywrightElectronActiveProvider.js +274 -0
  183. package/dist/browser/PlaywrightExecutionBoundary.js +16 -5
  184. package/dist/browser/PlaywrightScenarioActions.js +3 -7
  185. package/dist/browser/PlaywrightScenarioArtifacts.js +23 -92
  186. package/dist/browser/PlaywrightScenarioBrowser.js +7 -9
  187. package/dist/browser/PlaywrightScenarioEvents.js +45 -94
  188. package/dist/browser/PlaywrightScenarioSession.js +18 -34
  189. package/dist/browser/PngVisualDiff.js +22 -14
  190. package/dist/browser/SensitiveTextCapture.js +1 -18
  191. package/dist/browser/V8InspectorCaptureProjection.js +7 -7
  192. package/dist/browser/V8InspectorEndpoint.js +12 -14
  193. package/dist/browser/V8InspectorProvider.js +20 -61
  194. package/dist/browser/WebSourceMapFetcher.js +56 -176
  195. package/dist/catalogIdentity.js +12 -60
  196. package/dist/cli/artifactCommands.js +49 -77
  197. package/dist/cli/coreAnalysisCommands.js +83 -133
  198. package/dist/cli/javascriptApplicationAnalysis.js +1 -9
  199. package/dist/cli/managedCommands.js +6 -271
  200. package/dist/cli/setupCommands.js +3 -12
  201. package/dist/cli/utilityCommands.js +7 -41
  202. package/dist/cli.js +0 -2
  203. package/dist/cliApplicationCommands.js +44 -114
  204. package/dist/cliBrowserAdvancedCommands.js +12 -102
  205. package/dist/cliBrowserCommands.js +19 -124
  206. package/dist/cliBrowserContext.js +30 -0
  207. package/dist/cliCommandNames.js +5 -5
  208. package/dist/cliElectronCommands.js +49 -71
  209. package/dist/cliEvidenceCommands.js +8 -77
  210. package/dist/cliJavaScriptRuntimeCommands.js +18 -92
  211. package/dist/cliJsonInput.js +4 -14
  212. package/dist/cliObservationOptions.js +11 -92
  213. package/dist/cliPolicyCommands.js +2 -16
  214. package/dist/cliProcessCommands.js +3 -3
  215. package/dist/cliSetup.js +0 -13
  216. package/dist/config/browserScenario.js +77 -0
  217. package/dist/config/electronAutomation.js +35 -0
  218. package/dist/config/environment.js +6 -9
  219. package/dist/config/javascriptReplay.js +41 -0
  220. package/dist/config/managedRuntime.js +25 -0
  221. package/dist/config/parseConfig.js +56 -232
  222. package/dist/config/parsers.js +16 -28
  223. package/dist/config/passiveObservation.js +87 -0
  224. package/dist/config/permissions.js +0 -7
  225. package/dist/config/processCapture.js +47 -0
  226. package/dist/contracts/analysisSearchContract.js +2 -5
  227. package/dist/contracts/applicationToolContracts.js +58 -114
  228. package/dist/contracts/applicationWorkflowInputContracts.js +29 -114
  229. package/dist/contracts/artifactComparisonExample.js +58 -60
  230. package/dist/contracts/artifactToolContracts.js +37 -91
  231. package/dist/contracts/browserScenarioToolContracts.js +6 -51
  232. package/dist/contracts/browserToolContracts.js +10 -75
  233. package/dist/contracts/electronToolContracts.js +27 -98
  234. package/dist/contracts/enhancedInputs.js +31 -78
  235. package/dist/contracts/errorSchemas.js +0 -1
  236. package/dist/contracts/functionComparisonExample.js +10 -24
  237. package/dist/contracts/functionInstructionContract.js +1 -3
  238. package/dist/contracts/functionWorkflowToolContracts.js +4 -5
  239. package/dist/contracts/hopperMemoryContracts.js +3 -3
  240. package/dist/contracts/investigationExamples.js +14 -11
  241. package/dist/contracts/javascriptApplicationWorkflowExamples.js +12 -19
  242. package/dist/contracts/javascriptRuntimeObservationToolContracts.js +2 -20
  243. package/dist/contracts/javascriptRuntimeReconciliationExample.js +45 -12
  244. package/dist/contracts/managedToolContracts.js +10 -104
  245. package/dist/contracts/managedWorkflowExamples.js +77 -125
  246. package/dist/contracts/managedWorkflowToolContracts.js +51 -74
  247. package/dist/contracts/nativeToolContracts.js +9 -14
  248. package/dist/contracts/processCaptureExample.js +2 -69
  249. package/dist/contracts/promptContracts.js +49 -67
  250. package/dist/contracts/providerSelection.js +0 -1
  251. package/dist/contracts/reconstructionReadinessExample.js +1 -6
  252. package/dist/contracts/sessionStatusContract.js +1 -17
  253. package/dist/contracts/sessionToolSchemas.js +52 -0
  254. package/dist/contracts/toolContractExamples.js +11 -10
  255. package/dist/contracts/toolContractHelpers.js +19 -0
  256. package/dist/contracts/toolContracts.js +60 -143
  257. package/dist/contracts/toolEffects.js +16 -9
  258. package/dist/contracts/toolOutputSchemaGroups.js +47 -86
  259. package/dist/contracts/toolOutputSchemaPrimitives.js +72 -62
  260. package/dist/contracts/toolSchemaMetadata.js +117 -0
  261. package/dist/contracts/unknownContractExamples.js +0 -2
  262. package/dist/doctorRuntime.js +1 -1
  263. package/dist/domain/analysisErrorPresentation.js +46 -54
  264. package/dist/domain/analysisErrorProjection.js +28 -37
  265. package/dist/domain/analysisProfile.js +3 -31
  266. package/dist/domain/analysisSnapshot.js +3 -12
  267. package/dist/domain/androidApplication.js +15 -52
  268. package/dist/domain/appleApplication.js +24 -65
  269. package/dist/domain/artifactComparison.js +11 -29
  270. package/dist/domain/artifactGraph.js +14 -44
  271. package/dist/domain/artifactInspection.js +38 -69
  272. package/dist/domain/artifactInventoryEvidence.js +27 -21
  273. package/dist/domain/binaryTarget.js +2 -219
  274. package/dist/domain/binaryTargetTypes.js +1 -0
  275. package/dist/domain/browserCaptureComparison.js +35 -60
  276. package/dist/domain/browserObservation.js +45 -197
  277. package/dist/domain/browserObservationSchemas.js +5 -23
  278. package/dist/domain/browserScenario.js +11 -14
  279. package/dist/domain/browserScenarioCapture.js +11 -12
  280. package/dist/domain/browserScenarioCaptureValues.js +146 -84
  281. package/dist/domain/browserScenarioDiff.js +2 -59
  282. package/dist/domain/browserScenarioDiffEvidence.js +51 -0
  283. package/dist/domain/browserScenarioDiffValues.js +21 -38
  284. package/dist/domain/browserScenarioValues.js +80 -109
  285. package/dist/domain/browserSession.js +4 -7
  286. package/dist/domain/bundleComparison.js +6 -32
  287. package/dist/domain/bytecodeProvider.js +53 -54
  288. package/dist/domain/callPath.js +50 -169
  289. package/dist/domain/callPathSchemas.js +79 -0
  290. package/dist/domain/changedBehavior.js +34 -60
  291. package/dist/domain/completionLedgerGeneration.js +8 -14
  292. package/dist/domain/conformancePackage.js +126 -97
  293. package/dist/domain/conformanceReplay.js +39 -11
  294. package/dist/domain/conformanceTrustGate.js +174 -30
  295. package/dist/domain/customProtocolCapture.js +4 -4
  296. package/dist/domain/electronActiveObservation.js +244 -0
  297. package/dist/domain/electronObservation.js +21 -83
  298. package/dist/domain/electronStaticAnalysisBrowser.js +36 -46
  299. package/dist/domain/electronStaticAnalysisIpc.js +38 -14
  300. package/dist/domain/electronStaticAnalysisNative.js +1 -8
  301. package/dist/domain/electronStaticAnalysisValues.js +14 -18
  302. package/dist/domain/errors.js +33 -54
  303. package/dist/domain/eventProcessTree.js +101 -90
  304. package/dist/domain/evidence.js +2 -10
  305. package/dist/domain/evidenceBundle.js +3 -5
  306. package/dist/domain/evidenceCompletionLedger.js +6 -8
  307. package/dist/domain/functionComparison.js +4 -14
  308. package/dist/domain/functionComparisonNormalization.js +8 -8
  309. package/dist/domain/functionComparisonResults.js +25 -15
  310. package/dist/domain/functionComparisonSchemas.js +49 -33
  311. package/dist/domain/functionDossierEvidence.js +31 -151
  312. package/dist/domain/hopperStartupFailure.js +1 -1
  313. package/dist/domain/hopperValues.js +17 -141
  314. package/dist/domain/inputIssueProjection.js +4 -1
  315. package/dist/domain/interfaceBuilderGraph.js +654 -0
  316. package/dist/domain/javascriptApplicationAnalysis.js +8 -112
  317. package/dist/domain/javascriptApplicationChangeGraph.js +22 -82
  318. package/dist/domain/javascriptApplicationEvidenceSchemas.js +59 -47
  319. package/dist/domain/javascriptApplicationGraph.js +3 -13
  320. package/dist/domain/javascriptApplicationGraphSchemas.js +12 -34
  321. package/dist/domain/javascriptApplicationVersionComparison.js +26 -30
  322. package/dist/domain/javascriptApplicationVersionComparisonSchemas.js +123 -68
  323. package/dist/domain/javascriptApplicationVersionItems.js +120 -53
  324. package/dist/domain/javascriptApplicationVersionKeys.js +24 -11
  325. package/dist/domain/javascriptAstFingerprint.js +25 -58
  326. package/dist/domain/javascriptAstValues.js +9 -0
  327. package/dist/domain/javascriptExportInstrumentation.js +2 -4
  328. package/dist/domain/javascriptExportShapeComparison.js +6 -7
  329. package/dist/domain/javascriptExportShapeComparisonSchemas.js +70 -77
  330. package/dist/domain/javascriptExportShapeSelection.js +17 -19
  331. package/dist/domain/javascriptFeatureSeed.js +20 -12
  332. package/dist/domain/javascriptFeatureTrace.js +13 -67
  333. package/dist/domain/javascriptFeatureTraceSchemas.js +24 -52
  334. package/dist/domain/javascriptFeatureTraversal.js +1 -44
  335. package/dist/domain/javascriptNativeHandoff.js +1 -1
  336. package/dist/domain/javascriptReplay.js +100 -101
  337. package/dist/domain/javascriptRuntimeLoadState.js +3 -8
  338. package/dist/domain/javascriptRuntimeObservation.js +43 -103
  339. package/dist/domain/javascriptRuntimeReconciliation.js +1 -3
  340. package/dist/domain/javascriptRuntimeReconciliationActive.js +80 -0
  341. package/dist/domain/javascriptRuntimeReconciliationGraph.js +21 -33
  342. package/dist/domain/javascriptRuntimeReconciliationMatching.js +75 -61
  343. package/dist/domain/javascriptRuntimeReconciliationParsing.js +21 -46
  344. package/dist/domain/javascriptRuntimeReconciliationResult.js +25 -19
  345. package/dist/domain/javascriptRuntimeReconciliationRuntime.js +8 -12
  346. package/dist/domain/javascriptRuntimeReconciliationSchemas.js +34 -49
  347. package/dist/domain/javascriptRuntimeStaticCandidates.js +3 -3
  348. package/dist/domain/javascriptSemanticAnalysis.js +12 -45
  349. package/dist/domain/javascriptSemanticAsyncEffects.js +1 -9
  350. package/dist/domain/javascriptSemanticCallResolution.js +6 -16
  351. package/dist/domain/javascriptSemanticCalls.js +5 -32
  352. package/dist/domain/javascriptSemanticChildProcesses.js +1 -11
  353. package/dist/domain/javascriptSemanticCoverage.js +11 -0
  354. package/dist/domain/javascriptSemanticDataEffectHelpers.js +1 -8
  355. package/dist/domain/javascriptSemanticDataEffects.js +1 -11
  356. package/dist/domain/javascriptSemanticFingerprints.js +3 -5
  357. package/dist/domain/javascriptSemanticGraphSchemas.js +25 -51
  358. package/dist/domain/javascriptSemanticGraphSerialization.js +2 -13
  359. package/dist/domain/javascriptSemanticIr.js +1 -29
  360. package/dist/domain/javascriptSemanticObjects.js +1 -5
  361. package/dist/domain/javascriptSemanticPrimitives.js +2 -9
  362. package/dist/domain/javascriptSemanticProjection.js +0 -18
  363. package/dist/domain/javascriptSemanticPromises.js +9 -16
  364. package/dist/domain/javascriptSemanticProvenance.js +16 -19
  365. package/dist/domain/javascriptSemanticQuery.js +17 -139
  366. package/dist/domain/javascriptSemanticQueryAssessment.js +9 -37
  367. package/dist/domain/javascriptSemanticQueryIdentity.js +2 -23
  368. package/dist/domain/javascriptSemanticQuerySchemas.js +14 -107
  369. package/dist/domain/javascriptSemanticResources.js +1 -6
  370. package/dist/domain/javascriptSemanticReturns.js +10 -27
  371. package/dist/domain/javascriptSemanticValueTypes.js +1 -0
  372. package/dist/domain/javascriptSemanticValues.js +44 -62
  373. package/dist/domain/javascriptStaticAnalysis.js +21 -43
  374. package/dist/domain/javascriptStaticAnalysisBundler.js +34 -93
  375. package/dist/domain/javascriptStaticAnalysisCalls.js +17 -16
  376. package/dist/domain/javascriptStaticAnalysisFindings.js +3 -19
  377. package/dist/domain/javascriptStaticAnalysisHelpers.js +47 -88
  378. package/dist/domain/javascriptStaticAnalysisState.js +1 -5
  379. package/dist/domain/javascriptStaticAnalysisTypes.js +1 -0
  380. package/dist/domain/jsonShape.js +7 -33
  381. package/dist/domain/localPath.js +7 -0
  382. package/dist/domain/managedApplicationGraph.js +9 -41
  383. package/dist/domain/managedApplicationGraphCoverage.js +24 -156
  384. package/dist/domain/managedApplicationGraphNodes.js +10 -13
  385. package/dist/domain/managedArtifact.js +14 -27
  386. package/dist/domain/managedMemberComparison.js +90 -92
  387. package/dist/domain/managedMemberComparisonCoverage.js +11 -33
  388. package/dist/domain/managedMemberComparisonItems.js +221 -0
  389. package/dist/domain/managedMemberComparisonMatch.js +8 -208
  390. package/dist/domain/managedNativeVerification.js +3 -6
  391. package/dist/domain/managedNativeVerificationMatch.js +55 -59
  392. package/dist/domain/managedNativeVerificationSchemas.js +83 -47
  393. package/dist/domain/managedReconstruction.js +19 -23
  394. package/dist/domain/managedRuntimeCorrelation.js +6 -9
  395. package/dist/domain/nativeApiBoundary.js +17 -14
  396. package/dist/domain/nativeInspection.js +0 -2
  397. package/dist/domain/nativeInvestigationGraph.js +351 -0
  398. package/dist/domain/nativeValueFlow.js +61 -0
  399. package/dist/domain/nodeRuntimeCharacterization.js +15 -18
  400. package/dist/domain/objcSwiftMetadata.js +254 -0
  401. package/dist/domain/peInspection.js +1 -1
  402. package/dist/domain/permissionPolicy.js +13 -0
  403. package/dist/domain/processCapture.js +76 -113
  404. package/dist/domain/processCaptureExample.js +68 -0
  405. package/dist/domain/processCaptureParsing.js +21 -0
  406. package/dist/domain/processCaptureReactiveSchema.js +68 -0
  407. package/dist/domain/processCaptureReactiveValidation.js +8 -3
  408. package/dist/domain/processCaptureValidation.js +8 -10
  409. package/dist/domain/processComparison.js +12 -16
  410. package/dist/domain/processObservation.js +5 -6
  411. package/dist/domain/processReactiveMatching.js +32 -46
  412. package/dist/domain/processReactiveRuntime.js +4 -8
  413. package/dist/domain/processReactiveScenario.js +28 -94
  414. package/dist/domain/processReactiveScenarioPreflight.js +5 -30
  415. package/dist/domain/processReactiveTransition.js +42 -21
  416. package/dist/domain/processScenario.js +62 -93
  417. package/dist/domain/processTraceComparison.js +0 -7
  418. package/dist/domain/processTraceEvaluation.js +14 -4
  419. package/dist/domain/processTraceSpecification.js +11 -17
  420. package/dist/domain/protocolCapture.js +11 -9
  421. package/dist/domain/reconstructionCoverage.js +62 -129
  422. package/dist/domain/reconstructionCoverageEvaluation.js +17 -17
  423. package/dist/domain/reconstructionObligationLedgerSchemas.js +45 -72
  424. package/dist/domain/reconstructionReadiness.js +1 -2
  425. package/dist/domain/reconstructionReadinessSchemas.js +66 -40
  426. package/dist/domain/reconstructionUnknowns.js +3 -3
  427. package/dist/domain/reconstructionVerification.js +13 -47
  428. package/dist/domain/reconstructionVerificationSchemas.js +50 -38
  429. package/dist/domain/referenceSourceGraph.js +53 -61
  430. package/dist/domain/referenceSourceImportParsing.js +3 -7
  431. package/dist/domain/replayMachine.js +19 -31
  432. package/dist/domain/replayMachineRun.js +15 -63
  433. package/dist/domain/replayMachineRuntime.js +46 -44
  434. package/dist/domain/replayMachineValues.js +84 -0
  435. package/dist/domain/residualUnknown.js +25 -30
  436. package/dist/domain/runtimeCharacterization.js +15 -16
  437. package/dist/domain/runtimeIdentification.js +48 -47
  438. package/dist/domain/sourceToBundleComparison.js +11 -87
  439. package/dist/domain/sourceToBundleComparisonSchemas.js +25 -50
  440. package/dist/domain/sourceToBundleSignals.js +11 -16
  441. package/dist/domain/staticRuntimeCorrelation.js +44 -54
  442. package/dist/domain/symbolAnalysis.js +10 -19
  443. package/dist/domain/unicodeCodePointOrder.js +12 -0
  444. package/dist/domain/webBundleAnalysis.js +70 -99
  445. package/dist/domain/webBundleAnalyzer.js +2 -4
  446. package/dist/domain/webBundleAnalyzerAst.js +0 -13
  447. package/dist/domain/webBundleAnalyzerInspection.js +26 -52
  448. package/dist/domain/webBundleAnalyzerResult.js +7 -24
  449. package/dist/domain/webCaptureDiff.js +48 -85
  450. package/dist/domain/webCaptureDiffSchemas.js +86 -0
  451. package/dist/domain/webContentArtifact.js +1 -10
  452. package/dist/domain/webMcpDiscovery.js +3 -14
  453. package/dist/domain/webScreenshot.js +58 -34
  454. package/dist/domain/zipPackageFormat.js +7 -0
  455. package/dist/dotnet/ManagedArtifactInspector.js +17 -50
  456. package/dist/dotnet/ManagedMemberInspector.js +27 -58
  457. package/dist/dotnet/ManagedMemberInspectorCore.js +14 -51
  458. package/dist/dotnet/ManagedMemberInstructionDecoder.js +2 -2
  459. package/dist/dotnet/ManagedMemberRows.js +16 -16
  460. package/dist/dotnet/ManagedMetadataHeaps.js +26 -8
  461. package/dist/dotnet/ManagedMetadataInventory.js +21 -30
  462. package/dist/dotnet/ManagedMetadataInventoryRows.js +57 -63
  463. package/dist/dotnet/ManagedMetadataLayout.js +3 -5
  464. package/dist/dotnet/ManagedMethodBodyReader.js +5 -30
  465. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +19 -49
  466. package/dist/dotnet/ManagedNativeBoundaryInspector.js +13 -42
  467. package/dist/dotnet/ManagedPeReader.js +2 -2
  468. package/dist/dotnet/ManagedStaticProvider.js +13 -71
  469. package/dist/generatedMcpToolCatalog.js +1 -1
  470. package/dist/generatedPackageMetadata.js +1 -1
  471. package/dist/ghidra/GhidraAnalysisProfile.js +3 -8
  472. package/dist/ghidra/GhidraClient.js +5 -13
  473. package/dist/ghidra/GhidraClientStartup.js +1 -1
  474. package/dist/ghidra/GhidraClientWire.js +9 -5
  475. package/dist/ghidra/GhidraDefaults.js +0 -18
  476. package/dist/ghidra/GhidraDiagnostics.js +0 -2
  477. package/dist/ghidra/GhidraDoctor.js +16 -12
  478. package/dist/ghidra/GhidraFunctionValues.js +67 -108
  479. package/dist/ghidra/GhidraInstallation.js +98 -42
  480. package/dist/ghidra/GhidraInventoryValues.js +18 -77
  481. package/dist/ghidra/GhidraLauncher.js +0 -8
  482. package/dist/ghidra/GhidraProvider.js +32 -31
  483. package/dist/ghidra/GhidraProviderCapabilities.js +11 -48
  484. package/dist/ghidra/GhidraRequestQueue.js +6 -30
  485. package/dist/ghidra/GhidraResponseBuffer.js +1 -7
  486. package/dist/ghidra/GhidraSessionValues.js +0 -2
  487. package/dist/ghidra/GhidraSocketConnection.js +1 -1
  488. package/dist/ghidra/GhidraTransport.js +4 -7
  489. package/dist/ghidra/protocol.js +19 -42
  490. package/dist/hopper/BridgeLauncher.js +115 -37
  491. package/dist/hopper/HopperAnalysisProfile.js +3 -5
  492. package/dist/hopper/HopperCleanup.js +11 -9
  493. package/dist/hopper/HopperClient.js +5 -8
  494. package/dist/hopper/HopperProcessDiagnostic.js +2 -2
  495. package/dist/hopper/HopperProvider.js +0 -30
  496. package/dist/hopper/HopperRequestQueue.js +21 -40
  497. package/dist/hopper/HopperResponseStream.js +1 -9
  498. package/dist/hopper/HopperSessionValues.js +3 -2
  499. package/dist/hopper/HopperTargetLease.js +119 -0
  500. package/dist/hopper/LinuxPrivateDisplayDiagnostic.js +24 -31
  501. package/dist/hopper/LinuxPrivateDisplayProbe.js +21 -26
  502. package/dist/hopper/protocol.js +6 -4
  503. package/dist/main/reload.js +1 -9
  504. package/dist/main/shutdown.js +1 -1
  505. package/dist/main/state.js +0 -23
  506. package/dist/main/transport.js +27 -39
  507. package/dist/main.js +17 -15
  508. package/dist/mcpDoctor.js +27 -69
  509. package/dist/native/CommandRunner.js +18 -25
  510. package/dist/native/NativeMacOSProvider.js +13 -38
  511. package/dist/native/NativeMachoInspection.js +1 -1
  512. package/dist/process/BoundedFileBytes.js +17 -0
  513. package/dist/process/ExecFileOutput.js +11 -0
  514. package/dist/process/PendingOperations.js +8 -6
  515. package/dist/process/PrivateRuntimeRoot.js +17 -0
  516. package/dist/process/ProcessOwnership.js +67 -130
  517. package/dist/process/ProcessOwnershipIdentity.js +13 -0
  518. package/dist/process/ProcessOwnershipObservation.js +87 -0
  519. package/dist/process/ProcessOwnershipProcessTree.js +22 -0
  520. package/dist/process/ProviderDeadline.js +8 -12
  521. package/dist/process/ProviderProcess.js +7 -28
  522. package/dist/process/WindowsAuthority.js +32 -0
  523. package/dist/reference/ReferenceSourceReader.js +8 -24
  524. package/dist/reference/ReferenceSourceReaderEntries.js +11 -39
  525. package/dist/reference/ReferenceSourceReaderFile.js +13 -31
  526. package/dist/reference/ReferenceSourceReaderPaths.js +3 -18
  527. package/dist/reference/ReferenceSourceReaderValidate.js +3 -6
  528. package/dist/replay/JavaScriptReplayWorker.js +95 -13
  529. package/dist/replay/JavaScriptReplayWorkerTypes.js +1 -0
  530. package/dist/replay/LinuxJavaScriptReplayRunner.js +42 -43
  531. package/dist/replay/LinuxJavaScriptReplaySandbox.js +0 -19
  532. package/dist/replay/LinuxRuntimeClosure.js +1 -3
  533. package/dist/replay/ReplayOutcome.js +27 -18
  534. package/dist/replay/ReplayProcessLifecycle.js +32 -7
  535. package/dist/replay/ReplaySeccompFile.js +29 -0
  536. package/dist/replay/ReplayWorkerProtocol.js +33 -30
  537. package/dist/replay/SystemJavaScriptReplayHost.js +45 -74
  538. package/dist/server/ProcessCaptureElicitation.js +4 -8
  539. package/dist/server/createServer.js +145 -119
  540. package/dist/server/mcpClientMetadata.js +32 -0
  541. package/dist/server/promptCompletion.js +37 -61
  542. package/dist/server/recordDerivedEvidence.js +1 -1
  543. package/dist/server/registerApplicationTools/characterization.js +10 -21
  544. package/dist/server/registerApplicationTools/compareExportShapes.js +6 -16
  545. package/dist/server/registerApplicationTools/compareSourceToBundle.js +6 -15
  546. package/dist/server/registerApplicationTools/compareVersions.js +6 -16
  547. package/dist/server/registerApplicationTools/controlledReplay.js +8 -15
  548. package/dist/server/registerApplicationTools/coverage.js +7 -78
  549. package/dist/server/registerApplicationTools/helpers.js +1 -13
  550. package/dist/server/registerApplicationTools/obligationLedger.js +4 -8
  551. package/dist/server/registerApplicationTools/traceFeature.js +6 -15
  552. package/dist/server/registerApplicationTools/traceSemantics.js +5 -13
  553. package/dist/server/registerApplicationTools.js +0 -2
  554. package/dist/server/registerArtifactComparisonTool.js +27 -35
  555. package/dist/server/registerBrowserScenarioTool.js +3 -8
  556. package/dist/server/registerBrowserTools.js +36 -81
  557. package/dist/server/registerBundleComparisonTool.js +10 -16
  558. package/dist/server/registerCloseLifecycleTool.js +5 -27
  559. package/dist/server/registerElectronTools.js +29 -65
  560. package/dist/server/registerEnhancedTools.js +118 -127
  561. package/dist/server/registerEvidenceTools.js +19 -30
  562. package/dist/server/registerFunctionComparisonTool.js +35 -34
  563. package/dist/server/registerInvestigationTools/helpers.js +3 -32
  564. package/dist/server/registerInvestigationTools.js +36 -148
  565. package/dist/server/registerJavaScriptRuntimeObservationTools.js +15 -27
  566. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +16 -23
  567. package/dist/server/registerManagedWorkflowTools/contract.js +2 -3
  568. package/dist/server/registerManagedWorkflowTools/evidence.js +19 -35
  569. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -14
  570. package/dist/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.js +4 -14
  571. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +11 -20
  572. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +10 -21
  573. package/dist/server/registerOfficialTools.js +8 -51
  574. package/dist/server/registerProcessComparisonTool.js +43 -38
  575. package/dist/server/registerPrompts.js +19 -17
  576. package/dist/server/registerReplayMachineTool.js +4 -10
  577. package/dist/server/registerSessionRecordTools.js +36 -153
  578. package/dist/server/registerSessionStatusTool.js +18 -96
  579. package/dist/server/registerSessionTools.js +34 -91
  580. package/dist/server/sessionAvailabilityPolicy.js +2 -3
  581. package/dist/server/sessionEvidence.js +9 -15
  582. package/dist/server/sessionToolPolicies.js +1 -13
  583. package/dist/server/toolRegistrationOptions.js +4 -192
  584. package/dist/server/toolResult.js +15 -67
  585. package/dist/serverIdentity.js +0 -20
  586. package/install.sh +1 -1
  587. package/package.json +27 -15
  588. package/scripts/electron-active-hook-boundaries.cjs +394 -0
  589. package/scripts/electron-active-hook.cjs +469 -0
  590. package/scripts/hopper-demo-x11.py +13 -32
  591. package/scripts/rea.mjs +1 -11
  592. package/skills/reverse-engineer-anything/SKILL.md +46 -11
  593. package/skills/reverse-engineer-anything/references/evidence-workflows.md +6 -4
  594. package/skills/reverse-engineer-anything/references/javascript-applications.md +13 -13
  595. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +12 -8
  596. package/dist/application/ApplicationWorkflowEvidenceResolver.js +0 -180
  597. package/dist/application/BoundedJsonFiles.js +0 -86
  598. package/dist/application/CrossVersionInventory.js +0 -128
  599. package/dist/application/CrossVersionInvestigation.js +0 -301
  600. package/dist/application/CrossVersionInvestigationCollections.js +0 -23
  601. package/dist/application/CrossVersionInvestigationEvidence.js +0 -64
  602. package/dist/application/CrossVersionInvestigationReplay.js +0 -170
  603. package/dist/application/DeferredFileAuthorization.js +0 -61
  604. package/dist/application/DoctorProjection.js +0 -43
  605. package/dist/application/EnhancedToolPagination.js +0 -22
  606. package/dist/application/EvidenceReferenceResolver.js +0 -26
  607. package/dist/application/InvestigationWorkspaceStore.js +0 -204
  608. package/dist/application/ProcessPairedExperiment.js +0 -72
  609. package/dist/application/ReconstructionCoverageWorkspaceStore.js +0 -31
  610. package/dist/application/ReconstructionReadinessService.js +0 -48
  611. package/dist/cliInvestigationCommands.js +0 -173
  612. package/dist/domain/boundedCartesianProjection.js +0 -15
  613. package/dist/domain/investigationWorkspace.js +0 -346
  614. package/dist/domain/jsonLimits.js +0 -26
  615. package/dist/domain/knownPageCoverage.js +0 -21
  616. package/dist/domain/processPairedExperiment.js +0 -128
  617. package/dist/server/DynamicToolAvailability.js +0 -70
  618. package/dist/server/LazyToolCatalog.js +0 -134
  619. package/dist/server/hydrateServerTools.js +0 -191
  620. package/dist/server/javascriptApplicationResult.js +0 -106
  621. package/dist/server/permissionFailure.js +0 -12
  622. package/dist/server/registerApplicationTools/readiness.js +0 -55
  623. package/dist/server/registerEvidenceResources.js +0 -315
  624. package/dist/server/registerJavaScriptApplicationGraphResource.js +0 -65
  625. package/dist/server/registerReconstructionObligationLedgerResource.js +0 -32
  626. package/dist/server/registerReconstructionReadinessResource.js +0 -32
  627. package/dist/server/toolInputValidation.js +0 -77
  628. package/scripts/package-runner-bootstrap.mjs +0 -72
@@ -1,30 +1,13 @@
1
1
  import { Cli, z } from "incur";
2
+ import { browserContext, browserCliError } from "./cliBrowserContext.js";
2
3
  import { analyzeWebBundle, inspectWebPage, listBrowserTargets, observeWebSession, } from "./application/BrowserObservationService.js";
3
- import { loadConfiguredPermissionAuthority } from "./application/PermissionConfiguration.js";
4
- import { CdpBrowserProvider } from "./browser/CdpBrowserProvider.js";
5
4
  import { logCliCommand } from "./cliLogging.js";
6
- import { parseConfig } from "./config.js";
7
5
  import { inspectWebPageInputSchema, listBrowserTargetsInputSchema, } from "./domain/browserObservation.js";
8
6
  import { analyzeWebBundleInputSchema } from "./domain/webBundleAnalysis.js";
9
7
  import { observeWebSessionInputSchema } from "./domain/browserSession.js";
10
- import { AnalysisInputError, projectAnalysisError } from "./domain/errors.js";
8
+ import { AnalysisInputError } from "./domain/errors.js";
11
9
  import { CLI_COMMANDS } from "./cliCommandNames.js";
12
- import { browserPageInspectionOptions } from "./cliObservationOptions.js";
13
- const browserScopeOptions = {
14
- allowedOrigins: z
15
- .array(z.string().min(1))
16
- .optional()
17
- .describe("Exact origins to observe; defaults to REA_BROWSER_ALLOWED_ORIGINS_JSON"),
18
- approved: z.boolean().default(false).describe("Approve passive observation"),
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);
10
+ import { browserPageInspectionOptions, browserScopeOptions, observationDuration, } from "./cliObservationOptions.js";
28
11
  /** Register CLI equivalents of the passive browser MCP tools. */
29
12
  export const registerBrowserCommands = (cli, logger) => {
30
13
  registerTargetList(cli, logger);
@@ -38,31 +21,19 @@ const registerTargetList = (cli, logger) => {
38
21
  args: z.object({
39
22
  endpoint: z.string().describe("Configured loopback CDP HTTP endpoint"),
40
23
  }),
41
- options: z.object({
42
- ...browserScopeOptions,
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),
50
- }),
24
+ options: z.object({ ...browserScopeOptions }),
51
25
  run: ({ args, options }) => logCliCommand(logger, "list-browser-targets", async () => {
52
- const context = await browserContext();
26
+ const context = await browserContext("list_browser_targets");
53
27
  if (!context.ok)
54
28
  return context.error;
55
29
  const parsed = listBrowserTargetsInputSchema.safeParse({
56
30
  cdp_endpoint: args.endpoint,
57
31
  allowed_origins: options.allowedOrigins ?? context.allowedBrowserOrigins,
58
- approved: options.approved,
59
- offset: options.offset,
60
- limit: options.limit,
61
32
  });
62
33
  if (!parsed.success)
63
- return cliError(new AnalysisInputError("list_browser_targets"));
34
+ return browserCliError(new AnalysisInputError("list_browser_targets"));
64
35
  const result = await listBrowserTargets(context.provider, context.authority, parsed.data);
65
- return result.ok ? result.value : cliError(result.error);
36
+ return result.ok ? result.value : browserCliError(result.error);
66
37
  }),
67
38
  });
68
39
  };
@@ -75,54 +46,26 @@ const registerPageInspection = (cli, logger) => {
75
46
  }),
76
47
  options: browserPageInspectionOptions,
77
48
  run: ({ args, options }) => logCliCommand(logger, "inspect-web-page", async () => {
78
- const context = await browserContext();
49
+ const context = await browserContext("inspect_web_page");
79
50
  if (!context.ok)
80
51
  return context.error;
81
52
  const parsed = inspectWebPageInputSchema.safeParse({
82
53
  cdp_endpoint: args.endpoint,
83
54
  allowed_origins: options.allowedOrigins ?? context.allowedBrowserOrigins,
84
- approved: options.approved,
85
55
  target_id: args.targetId,
86
56
  observation_ms: options.observationMs,
87
57
  include_accessibility_text: options.includeAccessibilityText,
88
58
  include_console_text: options.includeConsoleText,
89
- console_text_approved: options.consoleTextApproved,
90
59
  include_json_body_shapes: options.includeJsonBodyShapes,
91
- json_body_schema_approved: options.jsonBodySchemaApproved,
92
60
  include_websocket_shapes: options.includeWebsocketShapes,
93
- websocket_shape_approved: options.websocketShapeApproved,
94
61
  include_script_sources: options.includeScriptSources,
95
62
  include_storage_keys: options.includeStorageKeys,
96
63
  include_storage_fingerprints: options.includeStorageFingerprints,
97
- limits: {
98
- max_frames: options.maxFrames,
99
- max_dom_nodes: options.maxDomNodes,
100
- max_ax_nodes: options.maxAxNodes,
101
- max_ax_text_field_bytes: options.maxAxTextFieldBytes,
102
- max_total_ax_text_bytes: options.maxTotalAxTextBytes,
103
- max_scripts: options.maxScripts,
104
- max_resources: options.maxResources,
105
- max_workers: options.maxWorkers,
106
- max_storage_keys: options.maxStorageKeys,
107
- max_script_source_bytes: options.maxScriptSourceBytes,
108
- max_total_script_source_bytes: options.maxTotalScriptSourceBytes,
109
- max_network_events: options.maxNetworkEvents,
110
- max_console_events: options.maxConsoleEvents,
111
- max_console_text_field_bytes: options.maxConsoleTextFieldBytes,
112
- max_total_console_text_bytes: options.maxTotalConsoleTextBytes,
113
- max_json_body_bytes: options.maxJsonBodyBytes,
114
- max_total_json_body_bytes: options.maxTotalJsonBodyBytes,
115
- max_json_shape_nodes: options.maxJsonShapeNodes,
116
- max_json_shape_depth: options.maxJsonShapeDepth,
117
- max_websocket_events: options.maxWebsocketEvents,
118
- max_websocket_shape_bytes: options.maxWebsocketShapeBytes,
119
- max_total_websocket_shape_bytes: options.maxTotalWebsocketShapeBytes,
120
- },
121
64
  });
122
65
  if (!parsed.success)
123
- return cliError(new AnalysisInputError("inspect_web_page"));
66
+ return browserCliError(new AnalysisInputError("inspect_web_page"));
124
67
  const result = await inspectWebPage(context.provider, context.authority, parsed.data);
125
- return result.ok ? result.value : cliError(result.error);
68
+ return result.ok ? result.value : browserCliError(result.error);
126
69
  }),
127
70
  });
128
71
  };
@@ -135,104 +78,56 @@ const registerBundleAnalysis = (cli, logger) => {
135
78
  }),
136
79
  options: z.object({
137
80
  ...browserScopeOptions,
138
- sourceCaptureApproved: z
139
- .boolean()
140
- .default(false)
141
- .describe("Approve capturing bounded script source text"),
142
- observationMs: boundedCount("observation duration in milliseconds", 10_000, 500, 0),
81
+ observationMs: observationDuration(500),
143
82
  fetchSourceMaps: z
144
83
  .boolean()
145
84
  .default(false)
146
85
  .describe("Fetch source maps referenced by captured scripts"),
147
- sourceMapFetchApproved: z
148
- .boolean()
149
- .default(false)
150
- .describe("Approve fetching referenced source maps from allowed origins"),
151
- maxFindings: boundedCount("static-analysis findings", 10_000, 1_000),
152
- maxAstNodes: boundedCount("JavaScript AST nodes", 2_000_000, 250_000),
153
- maxSourceMaps: boundedCount("source maps", 1_000, 100),
154
- maxSourceMapBytes: boundedBytes("one source map", 16 * 1_024 * 1_024, 4 * 1_024 * 1_024),
155
- maxTotalSourceMapBytes: boundedBytes("total source maps", 64 * 1_024 * 1_024, 16 * 1_024 * 1_024),
156
- maxSourceMapMappings: boundedCount("decoded source-map mappings", 100_000, 10_000),
157
- maxOriginalSources: boundedCount("original source files", 20_000, 2_000),
158
86
  }),
159
87
  run: ({ args, options }) => logCliCommand(logger, "analyze-web-bundle", async () => {
160
- const context = await browserContext();
88
+ const context = await browserContext("analyze_web_bundle");
161
89
  if (!context.ok)
162
90
  return context.error;
163
91
  const parsed = analyzeWebBundleInputSchema.safeParse({
164
92
  cdp_endpoint: args.endpoint,
165
93
  allowed_origins: options.allowedOrigins ?? context.allowedBrowserOrigins,
166
- approved: options.approved,
167
94
  target_id: args.targetId,
168
95
  observation_ms: options.observationMs,
169
96
  include_script_sources: true,
170
- source_capture_approved: options.sourceCaptureApproved,
171
97
  fetch_source_maps: options.fetchSourceMaps,
172
- source_map_fetch_approved: options.sourceMapFetchApproved,
173
- analysis_limits: {
174
- max_findings: options.maxFindings,
175
- max_ast_nodes: options.maxAstNodes,
176
- max_source_maps: options.maxSourceMaps,
177
- max_source_map_bytes: options.maxSourceMapBytes,
178
- max_total_source_map_bytes: options.maxTotalSourceMapBytes,
179
- max_source_map_mappings: options.maxSourceMapMappings,
180
- max_original_sources: options.maxOriginalSources,
181
- },
182
98
  });
183
99
  if (!parsed.success)
184
- return cliError(new AnalysisInputError("analyze_web_bundle"));
100
+ return browserCliError(new AnalysisInputError("analyze_web_bundle"));
185
101
  const result = await analyzeWebBundle(context.provider, context.authority, parsed.data);
186
- return result.ok ? result.value : cliError(result.error);
102
+ return result.ok ? result.value : browserCliError(result.error);
187
103
  }),
188
104
  });
189
105
  };
190
106
  const registerObservationSession = (cli, logger) => {
191
107
  cli.command(CLI_COMMANDS.observeWebSession, {
192
- description: "Observe user-driven page navigation during a bounded window",
108
+ description: "Observe user-driven page navigation during a chosen window",
193
109
  args: z.object({
194
110
  endpoint: z.string().describe("Configured loopback CDP HTTP endpoint"),
195
111
  targetId: z.string().describe("Target ID from list-browser-targets"),
196
112
  }),
197
113
  options: z.object({
198
114
  ...browserScopeOptions,
199
- observationMs: boundedCount("observation duration in milliseconds", 60_000, 10_000),
200
- maxTimelineEvents: boundedCount("timeline events", 20_000, 2_000),
115
+ observationMs: observationDuration(10_000, 1),
201
116
  }),
202
117
  run: ({ args, options }) => logCliCommand(logger, "observe-web-session", async () => {
203
- const context = await browserContext();
118
+ const context = await browserContext("observe_web_session");
204
119
  if (!context.ok)
205
120
  return context.error;
206
121
  const parsed = observeWebSessionInputSchema.safeParse({
207
122
  cdp_endpoint: args.endpoint,
208
123
  allowed_origins: options.allowedOrigins ?? context.allowedBrowserOrigins,
209
124
  target_id: args.targetId,
210
- approved: options.approved,
211
125
  observation_ms: options.observationMs,
212
- max_timeline_events: options.maxTimelineEvents,
213
126
  });
214
127
  if (!parsed.success)
215
- return cliError(new AnalysisInputError("observe_web_session"));
128
+ return browserCliError(new AnalysisInputError("observe_web_session"));
216
129
  const result = await observeWebSession(context.provider, context.authority, parsed.data);
217
- return result.ok ? result.value : cliError(result.error);
130
+ return result.ok ? result.value : browserCliError(result.error);
218
131
  }),
219
132
  });
220
133
  };
221
- const browserContext = async () => {
222
- const config = parseConfig(process.env);
223
- if (!config.ok)
224
- return { ok: false, error: cliError(config.error) };
225
- const authority = await loadConfiguredPermissionAuthority(config.value);
226
- if (!authority.ok)
227
- return { ok: false, error: cliError(authority.error) };
228
- return {
229
- ok: true,
230
- authority: authority.value,
231
- provider: new CdpBrowserProvider(),
232
- allowedBrowserOrigins: config.value.browserAllowedOrigins,
233
- };
234
- };
235
- const cliError = (error) => ({
236
- error: "Browser observation failed",
237
- ...projectAnalysisError(error),
238
- });
@@ -0,0 +1,30 @@
1
+ import { loadConfiguredPermissionAuthority } from "./application/PermissionConfiguration.js";
2
+ import { CdpBrowserProvider } from "./browser/CdpBrowserProvider.js";
3
+ import { parseConfig } from "./config.js";
4
+ import { AnalysisCapabilityUnavailableError, projectAnalysisError, } from "./domain/errors.js";
5
+ /** Load the configured passive browser authority and provider for one CLI operation. */
6
+ export const browserContext = async (operation) => {
7
+ const config = parseConfig(process.env);
8
+ if (!config.ok)
9
+ return { ok: false, error: browserCliError(config.error) };
10
+ const policy = config.value.browserObservationPolicy;
11
+ if (policy.status === "disabled")
12
+ return {
13
+ ok: false,
14
+ error: browserCliError(new AnalysisCapabilityUnavailableError("rea-cdp-browser", operation, "browser observation is disabled; configure exact endpoints and origins before enabling it")),
15
+ };
16
+ const authority = await loadConfiguredPermissionAuthority(config.value);
17
+ if (!authority.ok)
18
+ return { ok: false, error: browserCliError(authority.error) };
19
+ return {
20
+ ok: true,
21
+ authority: authority.value,
22
+ provider: new CdpBrowserProvider(),
23
+ allowedBrowserOrigins: policy.allowedOrigins,
24
+ };
25
+ };
26
+ /** Project a browser operation failure consistently across CLI command groups. */
27
+ export const browserCliError = (error) => ({
28
+ error: "Browser observation failed",
29
+ ...projectAnalysisError(error),
30
+ });
@@ -9,6 +9,8 @@ export const CLI_COMMANDS = Object.freeze({
9
9
  upgrade: "upgrade",
10
10
  xrefs: "xrefs",
11
11
  trace: "trace",
12
+ traceNativeUiAction: "trace-native-ui-action",
13
+ inspectNativeDispatchMetadata: "inspect-native-dispatch-metadata",
12
14
  capabilities: "capabilities",
13
15
  providers: "providers",
14
16
  function: "function",
@@ -16,9 +18,9 @@ export const CLI_COMMANDS = Object.freeze({
16
18
  instructions: "instructions",
17
19
  search: "search",
18
20
  importReferenceSource: "import-reference-source",
19
- inventoryArtifact: "inventory-artifact",
20
21
  inspectArtifact: "inspect-artifact",
21
22
  extractArtifact: "extract-artifact",
23
+ decodeInterfaceBuilder: "decode-interface-builder",
22
24
  inspectManagedArtifact: "inspect-managed-artifact",
23
25
  inspectManagedMembers: "inspect-managed-members",
24
26
  inspectManagedNativeBoundaries: "inspect-managed-native-boundaries",
@@ -35,7 +37,6 @@ export const CLI_COMMANDS = Object.freeze({
35
37
  evidenceImport: "evidence-import",
36
38
  evidenceExport: "evidence-export",
37
39
  compare: "compare",
38
- investigateVersions: "investigate-versions",
39
40
  captureProcess: "capture-process",
40
41
  compareProcessCaptures: "compare-process-captures",
41
42
  policy: "policy",
@@ -50,6 +51,7 @@ export const CLI_COMMANDS = Object.freeze({
50
51
  captureBrowserScenario: "capture-browser-scenario",
51
52
  listElectronTargets: "list-electron-targets",
52
53
  inspectElectronPage: "inspect-electron-page",
54
+ captureElectronScenario: "capture-electron-scenario",
53
55
  listJavaScriptRuntimeTargets: "list-javascript-runtime-targets",
54
56
  observeJavaScriptRuntime: "observe-javascript-runtime",
55
57
  analyzeJavaScriptApplication: "analyze-javascript-application",
@@ -64,9 +66,7 @@ export const CLI_COMMANDS = Object.freeze({
64
66
  prepareNodeCharacterization: "prepare-node-characterization",
65
67
  executeNodeCharacterization: "execute-node-characterization",
66
68
  buildReconstructionObligationLedger: "build-reconstruction-obligation-ledger",
67
- evaluateReconstructionReadiness: "evaluate-reconstruction-readiness",
68
- commitReconstructionCoverage: "commit-reconstruction-coverage",
69
- queryReconstructionCoverage: "query-reconstruction-coverage",
69
+ evaluateReconstructionCoverage: "evaluate-reconstruction-coverage",
70
70
  });
71
71
  /** Ordered primary CLI inventory; aliases are intentionally excluded. */
72
72
  export const CLI_COMMAND_NAMES = Object.freeze(Object.values(CLI_COMMANDS));
@@ -1,29 +1,49 @@
1
1
  import { Cli, z } from "incur";
2
2
  import { inspectElectronPage, listElectronTargets, } from "./application/ElectronObservationService.js";
3
+ import { captureElectronScenario } from "./application/ElectronActiveObservationService.js";
3
4
  import { reconcileJavaScriptRuntimeEvidence } from "./application/JavaScriptRuntimeReconciliationService.js";
4
5
  import { loadConfiguredPermissionAuthority } from "./application/PermissionConfiguration.js";
5
6
  import { CdpElectronProvider } from "./browser/CdpElectronProvider.js";
7
+ import { PlaywrightElectronActiveProvider } from "./browser/PlaywrightElectronActiveProvider.js";
6
8
  import { logCliCommand } from "./cliLogging.js";
7
9
  import { parseConfig } from "./config.js";
8
10
  import { inspectElectronPageInputSchema, listElectronTargetsInputSchema, } from "./domain/electronObservation.js";
9
- import { AnalysisInputError, projectAnalysisError } from "./domain/errors.js";
11
+ import { electronActiveObservationInputSchema } from "./domain/electronActiveObservation.js";
12
+ import { AnalysisCapabilityUnavailableError, AnalysisInputError, projectAnalysisError, } from "./domain/errors.js";
10
13
  import { CLI_COMMANDS } from "./cliCommandNames.js";
11
14
  import { parseCliJsonInput } from "./cliJsonInput.js";
12
15
  import { electronPageInspectionOptions, javascriptApplicationOptions, } from "./cliObservationOptions.js";
13
16
  import { runCliJavaScriptApplicationAnalysis } from "./cli/javascriptApplicationAnalysis.js";
14
- const scopeOptions = {
15
- allowedFileRoots: z
16
- .array(z.string().min(1))
17
- .optional()
18
- .describe("Filesystem roots; defaults to REA_ELECTRON_FILE_ROOTS_JSON"),
19
- approved: z.boolean().default(false).describe("Approve passive observation"),
20
- };
21
17
  /** Register CLI equivalents of the Electron MCP tools. */
22
18
  export const registerElectronCommands = (cli, logger) => {
23
19
  registerElectronObservationCommands(cli, logger);
20
+ registerElectronActiveCommand(cli, logger);
24
21
  registerJavaScriptApplicationCommand(cli, logger);
25
22
  registerJavaScriptRuntimeReconciliationCommand(cli, logger);
26
23
  };
24
+ const registerElectronActiveCommand = (cli, logger) => {
25
+ cli.command(CLI_COMMANDS.captureElectronScenario, {
26
+ description: "Run one approved, bounded owned Electron scenario",
27
+ args: z.object({
28
+ inputJson: z
29
+ .string()
30
+ .describe("Inline JSON or a JSON file matching capture_electron_scenario"),
31
+ }),
32
+ run: ({ args }) => logCliCommand(logger, CLI_COMMANDS.captureElectronScenario, async () => {
33
+ const input = await parseCliJsonInput(args.inputJson, "capture_electron_scenario");
34
+ if (!input.ok)
35
+ return input.error;
36
+ const parsed = electronActiveObservationInputSchema.safeParse(input.value);
37
+ if (!parsed.success)
38
+ return inputError("capture_electron_scenario");
39
+ const context = await electronContext();
40
+ if (!context.ok)
41
+ return context.error;
42
+ const result = await captureElectronScenario(context.activeProvider, context.authority, parsed.data);
43
+ return result.ok ? result.value : cliError(result.error);
44
+ }),
45
+ });
46
+ };
27
47
  const registerJavaScriptRuntimeReconciliationCommand = (cli, logger) => {
28
48
  cli.command(CLI_COMMANDS.reconcileJavaScriptRuntime, {
29
49
  description: "Reconcile static application and passive runtime Evidence JSON",
@@ -47,38 +67,16 @@ const registerElectronObservationCommands = (cli, logger) => {
47
67
  };
48
68
  const registerElectronTargetList = (cli, logger) => {
49
69
  cli.command(CLI_COMMANDS.listElectronTargets, {
50
- description: "List root-confined file pages from Electron CDP",
70
+ description: "List local file pages exposed by Electron CDP",
51
71
  args: z.object({
52
- endpoint: z
53
- .string()
54
- .describe("Configured loopback Electron CDP endpoint"),
72
+ endpoint: z.string().describe("Literal-loopback Electron CDP endpoint"),
55
73
  }),
56
- options: z.object({
57
- ...scopeOptions,
58
- offset: z
59
- .number()
60
- .int()
61
- .min(0)
62
- .default(0)
63
- .describe("Zero-based Electron-target offset"),
64
- limit: z
65
- .number()
66
- .int()
67
- .min(1)
68
- .max(200)
69
- .default(100)
70
- .describe("Maximum Electron targets to return"),
71
- }),
72
- run: ({ args, options }) => logCliCommand(logger, "list-electron-targets", async () => {
73
- const context = await electronContext();
74
+ run: ({ args }) => logCliCommand(logger, "list-electron-targets", async () => {
75
+ const context = await electronObservationContext("list_electron_targets");
74
76
  if (!context.ok)
75
77
  return context.error;
76
78
  const parsed = listElectronTargetsInputSchema.safeParse({
77
79
  cdp_endpoint: args.endpoint,
78
- allowed_file_roots: options.allowedFileRoots ?? context.allowedFileRoots,
79
- approved: options.approved,
80
- offset: options.offset,
81
- limit: options.limit,
82
80
  });
83
81
  if (!parsed.success)
84
82
  return inputError("list_electron_targets");
@@ -89,35 +87,21 @@ const registerElectronTargetList = (cli, logger) => {
89
87
  };
90
88
  const registerElectronPageInspection = (cli, logger) => {
91
89
  cli.command(CLI_COMMANDS.inspectElectronPage, {
92
- description: "Passively inspect one root-confined Electron file page",
90
+ description: "Passively inspect one Electron file page",
93
91
  args: z.object({
94
- endpoint: z
95
- .string()
96
- .describe("Configured loopback Electron CDP endpoint"),
92
+ endpoint: z.string().describe("Literal-loopback Electron CDP endpoint"),
97
93
  targetId: z.string().describe("Target ID from list-electron-targets"),
98
94
  }),
99
95
  options: electronPageInspectionOptions,
100
96
  run: ({ args, options }) => logCliCommand(logger, "inspect-electron-page", async () => {
101
- const context = await electronContext();
97
+ const context = await electronObservationContext("inspect_electron_page");
102
98
  if (!context.ok)
103
99
  return context.error;
104
100
  const parsed = inspectElectronPageInputSchema.safeParse({
105
101
  cdp_endpoint: args.endpoint,
106
- allowed_file_roots: options.allowedFileRoots ?? context.allowedFileRoots,
107
102
  target_id: args.targetId,
108
- approved: options.approved,
109
103
  observation_ms: options.observationMs,
110
104
  include_script_sources: options.includeScriptSources,
111
- source_capture_approved: options.sourceCaptureApproved,
112
- limits: {
113
- max_frames: options.maxFrames,
114
- max_dom_nodes: options.maxDomNodes,
115
- max_scripts: options.maxScripts,
116
- max_resources: options.maxResources,
117
- max_workers: options.maxWorkers,
118
- max_script_source_bytes: options.maxScriptSourceBytes,
119
- max_total_script_source_bytes: options.maxTotalScriptSourceBytes,
120
- },
121
105
  });
122
106
  if (!parsed.success)
123
107
  return inputError("inspect_electron_page");
@@ -128,32 +112,14 @@ const registerElectronPageInspection = (cli, logger) => {
128
112
  };
129
113
  const registerJavaScriptApplicationCommand = (cli, logger) => {
130
114
  cli.command(CLI_COMMANDS.analyzeJavaScriptApplication, {
131
- description: "Statically reconstruct an approved JavaScript/Electron application",
115
+ description: "Statically reconstruct a local JavaScript/Electron application",
132
116
  args: z.object({
133
117
  path: z.string().describe("Absolute ASAR or extracted application path"),
134
118
  }),
135
119
  options: javascriptApplicationOptions,
136
120
  run: ({ args, options }) => logCliCommand(logger, CLI_COMMANDS.analyzeJavaScriptApplication, () => runCliJavaScriptApplicationAnalysis({
137
121
  input_path: args.path,
138
- approved: options.approved,
139
122
  format: options.artifactFormat,
140
- source_map_read_approved: options.sourceMapReadApproved,
141
- limits: {
142
- max_entries: options.maxEntries,
143
- max_total_artifact_bytes: options.maxTotalArtifactBytes,
144
- max_artifact_entry_bytes: options.maxArtifactEntryBytes,
145
- max_compression_ratio: options.maxCompressionRatio,
146
- max_depth: options.maxDepth,
147
- max_path_bytes: options.maxPathBytes,
148
- max_text_files: options.maxTextFiles,
149
- max_total_text_bytes: options.maxTotalTextBytes,
150
- max_text_file_bytes: options.maxTextFileBytes,
151
- max_ast_nodes: options.maxAstNodes,
152
- max_findings: options.maxFindings,
153
- max_modules: options.maxModules,
154
- max_source_map_sources: options.maxSourceMapSources,
155
- max_parse_milliseconds: options.maxParseMilliseconds,
156
- },
157
123
  })),
158
124
  });
159
125
  };
@@ -168,9 +134,21 @@ const electronContext = async () => {
168
134
  ok: true,
169
135
  authority: authority.value,
170
136
  provider: new CdpElectronProvider(),
171
- allowedFileRoots: config.value.electronFileRoots,
137
+ activeProvider: new PlaywrightElectronActiveProvider(),
138
+ observationPolicy: config.value.electronObservationPolicy,
172
139
  };
173
140
  };
141
+ const electronObservationContext = async (operation) => {
142
+ const context = await electronContext();
143
+ if (!context.ok)
144
+ return context;
145
+ if (context.observationPolicy.status === "disabled")
146
+ return {
147
+ ok: false,
148
+ error: cliError(new AnalysisCapabilityUnavailableError("rea-cdp-electron", operation, "Electron observation is disabled; enable REA_ELECTRON_OBSERVE_ENABLED to authorize loopback endpoints")),
149
+ };
150
+ return context;
151
+ };
174
152
  const inputError = (operation) => cliError(new AnalysisInputError(operation));
175
153
  const cliError = (error) => ({
176
154
  error: "Electron analysis failed",
@@ -1,32 +1,22 @@
1
1
  import { Cli, z } from "incur";
2
2
  import { compareEvidenceBundlesCommand, exportEvidenceBundleCommand, importEvidenceBundleCommand, } from "./application/EvidenceBundleCommands.js";
3
- import { parseConfig } from "./config.js";
4
3
  import { logCliCommand } from "./cliLogging.js";
5
4
  import { CLI_COMMANDS } from "./cliCommandNames.js";
6
- import { AnalysisProtocolError, PermissionRequiredError, projectAnalysisError, } from "./domain/errors.js";
7
- import { loadConfiguredPermissionAuthority } from "./application/PermissionConfiguration.js";
8
- /** Register filesystem-gated Evidence v2 commands. */
5
+ import { projectAnalysisError } from "./domain/errors.js";
6
+ /** Register caller-path Evidence commands. */
9
7
  export const registerEvidenceCommands = (cli, logger) => {
10
8
  cli.command(CLI_COMMANDS.evidenceImport, {
11
- description: "Validate and import a bounded local Evidence v2 bundle",
9
+ description: "Validate and import a bounded local Evidence bundle",
12
10
  args: z.object({
13
11
  path: z.string().describe("Evidence bundle JSON path"),
14
12
  }),
15
13
  run: ({ args }) => logCliCommand(logger, "evidence-import", async () => {
16
- const config = parseConfig(process.env);
17
- if (!config.ok)
18
- return cliError(config.error);
19
- const denied = await authorizeEvidence(config.value, [
20
- { capability: "evidence_read", path: args.path, access: "read" },
21
- ]);
22
- if (denied !== undefined)
23
- return cliError(denied);
24
- const imported = await importEvidenceBundleCommand(args.path, config.value.evidenceFilePolicy);
14
+ const imported = await importEvidenceBundleCommand(args.path);
25
15
  return imported.ok ? imported.value : cliError(imported.error);
26
16
  }),
27
17
  });
28
18
  cli.command(CLI_COMMANDS.evidenceExport, {
29
- description: "Validate and atomically export canonical Evidence v2 JSON",
19
+ description: "Validate and atomically export canonical Evidence JSON",
30
20
  args: z.object({
31
21
  source: z.string().describe("Existing evidence bundle JSON path"),
32
22
  output: z.string().describe("Canonical output JSON path"),
@@ -35,85 +25,26 @@ export const registerEvidenceCommands = (cli, logger) => {
35
25
  overwrite: z.boolean().default(false).describe("Replace output file"),
36
26
  }),
37
27
  run: ({ args, options }) => logCliCommand(logger, "evidence-export", async () => {
38
- const config = parseConfig(process.env);
39
- if (!config.ok)
40
- return cliError(config.error);
41
- const denied = await authorizeEvidence(config.value, [
42
- { capability: "evidence_read", path: args.source, access: "read" },
43
- { capability: "evidence_write", path: args.output, access: "write" },
44
- ]);
45
- if (denied !== undefined)
46
- return cliError(denied);
47
- const exported = await exportEvidenceBundleCommand(args.source, args.output, options.overwrite, config.value.evidenceFilePolicy);
28
+ const exported = await exportEvidenceBundleCommand(args.source, args.output, options.overwrite);
48
29
  return exported.ok ? exported.value : cliError(exported.error);
49
30
  }),
50
31
  });
51
32
  cli.command(CLI_COMMANDS.compare, {
52
33
  aliases: ["compare-bundles"],
53
- description: "Compare two canonical Evidence v2 bundles",
34
+ description: "Compare two canonical Evidence bundles",
54
35
  args: z.object({
55
36
  left: z.string().describe("Left Evidence bundle JSON path"),
56
37
  right: z.string().describe("Right Evidence bundle JSON path"),
57
38
  }),
58
- options: z.object({
59
- offset: z
60
- .number()
61
- .int()
62
- .min(0)
63
- .default(0)
64
- .describe("Zero-based changed-record offset"),
65
- limit: z
66
- .number()
67
- .int()
68
- .min(1)
69
- .max(500)
70
- .default(100)
71
- .describe("Maximum changed records to return"),
72
- }),
73
- run: ({ args, options }) => logCliCommand(logger, "compare", async () => {
74
- const config = parseConfig(process.env);
75
- if (!config.ok)
76
- return cliError(config.error);
77
- const denied = await authorizeEvidence(config.value, [
78
- { capability: "evidence_read", path: args.left, access: "read" },
79
- { capability: "evidence_read", path: args.right, access: "read" },
80
- ]);
81
- if (denied !== undefined)
82
- return cliError(denied);
39
+ run: ({ args }) => logCliCommand(logger, "compare", async () => {
83
40
  const compared = await compareEvidenceBundlesCommand({
84
41
  leftPath: args.left,
85
42
  rightPath: args.right,
86
- offset: options.offset,
87
- limit: options.limit,
88
- policy: config.value.evidenceFilePolicy,
89
43
  });
90
44
  return compared.ok ? compared.value : cliError(compared.error);
91
45
  }),
92
46
  });
93
47
  };
94
- const authorizeEvidence = async (config, requests) => {
95
- const authority = await loadConfiguredPermissionAuthority(config);
96
- if (!authority.ok)
97
- return authority.error;
98
- for (const request of requests) {
99
- const result = await authority.value.authorize({
100
- capability: request.capability,
101
- roots: [request.path],
102
- executables: [],
103
- environment_names: [],
104
- network: "none",
105
- mount: false,
106
- operation_identity: `cli:${request.capability}:${request.path}`,
107
- }, request.access);
108
- if (!result.ok)
109
- return result.error instanceof PermissionRequiredError
110
- ? result.error
111
- : new AnalysisProtocolError(result.error.message, {
112
- cause: result.error,
113
- });
114
- }
115
- return undefined;
116
- };
117
48
  const cliError = (error) => ({
118
49
  error: "Analysis failed",
119
50
  ...projectAnalysisError(error),